# Changelog

All notable changes to BW Agenda Table are documented here.

Format based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
Versioning follows [SemVer](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.1.6] - 2026-05-14

### Fixed
- Empty-state icon was still rendering visually top-of-pill in 0.1.5 even after switching to `display: grid; place-items: center;`. Two root causes: (a) Google's `.material-symbols-outlined { display: inline-block }` was being applied after our `style.css` due to stylesheet load order, and at equal `(0,1,0)` specificity it was overriding `display: grid` — the glyph fell back to baseline-aligned inline-block which sits high. (b) Even after fixing the display rule, Material Symbols glyphs carry an ascent gap inside their `line-height: 1` line-box that pushes the visible glyph above the geometric centre. Scoped the rule under `.bw-agenda-table .bw-agenda-table__empty-icon` (specificity `(0,2,0)`) so the display value always wins, and dropped `line-height` to `0` so the only thing being centred is the glyph's em-square — eliminating the ascent gap.

## [0.1.5] - 2026-05-14

### Fixed
- Empty-state icon was sitting visually top-heavy inside its 64×64 gradient pill (the Material Symbols glyph's default ascent metrics pushed it off-centre even though the flex container reported `align-items: center`). The pill now uses `display: grid; place-items: center;` and explicitly sets `font-variation-settings: 'opsz' 32` to match the 32px font-size, so the glyph's optical metrics centre cleanly on both axes. Also moved the icon's `font-family`, font-feature/liga settings, and `user-select: none` onto `.bw-agenda-table__empty-icon` directly (previously inherited from the global `.material-symbols-outlined` class — which works, but specifying them locally guards against host themes that override Material Symbols defaults).

## [0.1.4] - 2026-05-14

### Changed
- Empty state ("Coming soon") is now a styled card instead of a single line of plain text. The wrapper picks up the same white background + `--pv-line` border + `--pv-shadow-sm` shell as `.pv-day-view`, so the placeholder reads as a real block, not loose copy. Inside the card a 64×64 pill icon (`material-symbols-outlined: event_upcoming`) sits above the heading, both using the navy → teal → green brand gradient. The heading uses Space Grotesk (`--pv-font-display`) at `--pv-fs-xl` (1.75rem on ≥720px). A muted helper line in `--pv-slate` explains "The agenda is being finalised — check back soon for the full lineup." Markup wrapped in `role="status"` so assistive tech announces the placeholder.

## [0.1.3] - 2026-05-14

### Changed
- The block now renders exclusively from the host site's `session` CPT (with its ACF/post-meta fields and the `track` taxonomy). The previous demo-data fallback — which kicked in whenever the CPT was missing or had no published posts — has been removed so production sites never show placeholder content.

### Added
- "Coming soon" empty state: when `bw_agenda_table_query_sessions()` returns `null` (CPT not registered) or `[]` (CPT registered but no published Sessions), the block renders a single centred message inside `.bw-agenda-table--empty` and short-circuits before the header/timeline markup. Translatable via the `bw-agenda-table` text domain.

### Removed
- `bw_agenda_table_demo_rows()` helper and its ten hard-coded sample rows.
- The admin-only "Showing demo data…" notice (`.bw-agenda-table__demo-note` paragraph + CSS rule).
- The `bw-agenda-table--demo` wrapper class and the demo-only track-filter shim that mirrored the WP_Query OR-NOT-EXISTS rule against the sample rows.

## [0.1.2] - 2026-05-05

### Changed
- Session-card thumbnail column narrowed from `320px` to `198px` on tablet viewports (720px–1199px, covering iPad portrait/landscape and iPad Pro 11") so the title/speakers/excerpt content track has more breathing room. Mobile stacked layout (<720px) and desktop layout (≥1200px) are unchanged.
- Tablet thumbnail no longer stretches to match the content column's height — at 198px wide, height-stretching produced a portrait crop. The media is now `align-self: start` with a fixed `4 / 3` aspect ratio (~198×149) so it stays bounded regardless of how tall the adjacent content grows.

## [0.1.1] - 2026-05-01

### Removed
- The "Date label (single-day)" Inspector text field and its backing `dateLabel` block attribute. The single-day header label is now derived automatically from the first session's `event_date` via the existing `bw_agenda_table_format_day_heading()` helper (output format unchanged: e.g. "Thursday, November 5, 2026"), so authors no longer have to keep a hand-typed string in sync with their session data.

### Changed
- `render.php` header-label resolution is now data-driven for both modes: multi-day still produces a compact range (`Nov 5–6, 2026`); single-day uses the first day's formatted heading; empty data sets render an empty header label instead of the previous hard-coded "Thursday, November 5, 2026" placeholder.

### Notes
- Existing block instances saved with a `dateLabel` attribute remain valid markup; WordPress simply ignores unknown attributes on render, so no DB migration is required.

## [0.1.0] - 2026-04-28

### Added

- Initial scaffold extracted from the Prompt Victoria kadence-child theme.
- `bw/agenda-table` block: vertical timeline of Sessions with auto single/multi-day date navigation.
- Server-side render with demo-data fallback when the `session` CPT is absent.
- ACF and plain post-meta read paths with field-name aliases (`event_date` / `date`, `start_time` / `start`, etc.).
- Track filter (taxonomy `track`) with OR-NOT-EXISTS rule so plenary/break sessions still surface on track child pages.
- Conditional Material Symbols enqueue (frontend + editor) — only loads when the block is present.
- Uninstall hook scrubs plugin options.
