# Session log This file tracks work completed across Claude Code sessions. Every agent MUST read this file before starting work and update it after completing work. > Earlier sessions (2026-03-24 through 2026-03-26d) archived in > `docs/memory/archive/sessions-through-2026-03-26.md` ## Format Each entry follows this structure: ``` ### Session [date] — [brief description] **Agent(s):** [which agents were active] **Work completed:** - [bullet points of what was done] **Decisions made:** - [any design/architecture decisions with brief rationale] **Open questions:** - [anything unresolved that needs human input] **Next steps:** - [what should happen next] ``` --- ## Sessions ### Session 2026-03-31c — PaymentStep/ConfirmationStep review + progress bar + CartButton **Agent(s):** Claude Opus 4.6 (1M context) **Work completed:** - **Organism normalize pass (Phase 3):** Scanned all 6 organisms. Fixed FuneralFinderV3 transition timing (200ms → 150ms ease-in-out), added autodocs tag to V3 stories. Navigation audit 18/20, ServiceSelector 20/20. - **Navigation P1 fix:** Logo wrapper changed from `div[role=link]` to proper `` tag for keyboard accessibility. - **PaymentStep feedback (5 items):** Divider under subheading, lock icon alignment, ToggleButtonGroup `align` + `direction` props (centre-aligned payment options, vertical payment method stack), checkbox alignment fix. - **ToggleButtonGroup atom enhanced:** New `align` (start/center) and `direction` (row/column) props. Description text bumped from `text.secondary` to `text.primary`. - **SummaryStep:** Save button → text variant (matches other pages), centred. - **Cross-page heading spacing:** All wizard pages `mb: 1` → `mb: 2` on display3 heading. - **ConfirmationStep redesign:** Animated SVG tick (circle draws then checkmark), "What happens next" warm card with bullet points, contact phone as prop, link-based secondary actions. - **VenueStep + ProvidersStep:** Sticky search bar padding fix, off-white bg behind card lists. - **IntroStep, CemeteryStep, CrematoriumStep, DateTimeStep:** Dividers under subheadings. - **CoffinsStep:** h4 heading (matches list layouts), sidebar headings h5 → h6. - **CartButton molecule (new):** Outlined pill trigger with receipt icon + "Your Plan" + formatted total in brand colour. Click opens DialogShell with items grouped by section via LineItem, total row, empty state. Mobile collapses to icon + price. - **WizardLayout:** Removed STEPPER_VARIANTS whitelist — stepper bar now renders on all variants when props provided. Stepper centred at 700px max-width, cart hugs right. - **StepIndicator:** Desktop label fontSize bumped to 0.875rem for readability. - **Prop threading:** progressStepper + runningTotal added to DateTimeStep, VenueStep, SummaryStep, PaymentStep. - **Style Dictionary:** Auto-generate tokens.d.ts on build, fixed TS unused imports. **Decisions made:** - ToggleButtonGroup `align` and `direction` are opt-in props — existing usages unchanged - ConfirmationStep contact phone is now a prop (default 1800 987 888), no more hardcoded placeholder - WizardLayout stepper bar shows on ANY variant when props provided (StepperBar returns null when empty) - CartButton is a molecule (not organism) — self-contained trigger + dialog, same pattern as FilterPanel - Stepper bar layout: stepper centred at maxWidth 700px, cart hugs right edge **Open questions:** - PaymentStep CTA is right-aligned — all other pages use full-width. Should it match? - Progress bar stories should be added to more page stories (currently only DateTimeStep has them) **Next steps:** - Continue user feedback/edits on remaining pages - Add progress bar + cart to remaining page stories - Retroactive review Phase 3 organisms: Navigation P2s still pending (hardcoded fontSize, drawer width) - Update component-registry.md with CartButton --- ### Session 2026-03-31b — CoffinDetailsStep rewrite + AdditionalServicesStep split **Agent(s):** Claude Opus 4.6 (1M context) **Work completed:** - **CoffinDetailsStep rewrite** — two-panel detail-toggles layout with gallery + specs (left), name + description + colour swatches + allowance-aware pricing + CTA (right). Colour selection doesn't affect price. Allowance logic: fully covered / partially covered / no allowance. - **SummaryStep rewrite** — visual cart layout replacing accordion text lists: - Arrangement details section at top (arranger, deceased, tradition, dates, times) - Compact image cards for provider, venue, crematorium, coffin with location pins - Allowance display: "Included in your package" (fully covered) vs price/allowance/remaining breakdown - Checklist for included services, priced list for extras (consistent tick logic) - Share dialog: "Share this plan" opens DialogShell with multi-email input + confirmation - Full-width CTA, deposit deferred to PaymentStep - **AdditionalServicesStep split into two pages:** - **IncludedServicesStep (new)** — services included in the package at no cost. Dressing, viewing (with same-venue sub-option inside card), prayers/vigil, funeral announcement. - **ExtrasStep (new)** — optional paid extras for lead generation. Catering, music (flat inline live musician toggle + musician type), coffin bearing (toggle + bearer preference radio), newspaper notice. POA support via `priceLabel`. Tally of priced selections. - **AddOnOption molecule enhanced:** - `children` prop — sub-options render inside the card boundary (below divider) when checked, eliminating nested card "Russian doll" pattern - `priceLabel` prop — custom text like "Price on application" in brand copper italic - **AdditionalServicesStep removed** — replaced by the two new pages - All quality checks passing (TypeScript, ESLint, Prettier) - Playwright visual verification of all key scenarios **Decisions made:** - Split AdditionalServicesStep into two pages for clearer UX distinction between free inclusions and paid extras - Sub-options render inside parent card (flat hierarchy) instead of nested cards - Coffin bearing changed from always-visible radio to toggle + sub-options (consistent with other items) - `bearing` field split into `bearing: boolean` + `bearerType` for toggle pattern - Extras page is lead-gen: signals interest, not firm commitment. Director follows up. - POA items show "Price on application" in brand copper italic - Copy refined through brand lens — no transactional language ("toggle on"), warm professional tone **Open questions:** - None **Next steps:** - Continue page feedback: PaymentStep, ConfirmationStep - Retroactive review Phase 3 (organisms) still pending - Batch a11y fix (aria-describedby + aria-invalid) deferred --- ### Session 2026-03-31b — CoffinDetailsStep rewrite: product detail layout **Agent(s):** Claude Opus 4.6 (1M context) **Work completed:** - **CoffinDetailsStep complete rewrite** — transformed to match VenueDetailStep two-panel pattern: - **Left panel:** ImageGallery (hero + thumbnails), product details as semantic `dl` list (bold label above value) - **Right panel (sticky):** coffin name (h1), description, colour swatch picker, price with allowance-aware display, CTA, save-and-exit - **Colour picker:** circular swatches (36px), `aria-pressed`, controlled via `selectedColourId`/`onColourChange`, does not affect price - **Allowance pricing logic:** fully covered (allowance >= price) → "Included in your package allowance — no change to your plan total." / partially covered → shows "$X package allowance applied" + "+$Y to your plan total" in brand colour / no allowance → price only with extra spacing to CTA - **Removed:** info bubble (redundant with allowance impact text), `priceNote` prop, `termsText` prop, old horizontal specs grid, `CoffinAllowance` type - **Added:** `CoffinColour` type, `allowanceAmount` prop, `onAddCoffin` callback (replaces `onContinue`) - **A11y:** fixed heading hierarchy (price as `

` not `

`, Product details as `

`) — 0 violations - **Stories:** FullyCovered, PartiallyCovered, NoAllowance, NoColours, Minimal, PrePlanning, Loading - **Playwright visual verification** of all key scenarios - All quality checks passing (TypeScript, ESLint, Prettier) **Decisions made:** - Allowance impact is computed from `allowanceAmount` vs `coffin.price` — no remaining balance tracking (out of scope) - Info bubble removed from detail page (redundant) — kept on CoffinsStep browsing page - Product details as single-column stacked `dl` (label above value) — more readable than grid **Open questions:** - None **Next steps:** - Continue page feedback: AdditionalServicesStep, SummaryStep, PaymentStep, ConfirmationStep - Retroactive review Phase 3 (organisms) still pending - Batch a11y fix (aria-describedby + aria-invalid) deferred --- ### Session 2026-03-31a — CoffinsStep rewrite: grid-sidebar ecommerce layout **Agent(s):** Claude Opus 4.6 (1M context) **Work completed:** - **CoffinsStep complete rewrite** — transformed from wide-form card grid into a two-column ecommerce layout matching the live site pattern: - **Layout:** `grid-sidebar` with viewport-locked independent scrolling (sidebar scrollbar on hover, grid always scrollable) - **Sidebar:** heading, conditional allowance info bubble, category menu with expandable subcategories (Collapse animation, chevron rotation), dual-knob price range slider with editable text inputs (commit on blur/Enter), sort by dropdown (popularity, price asc/desc), clear all filters link, save-and-exit link at bottom - **Grid:** 3-col coffin card grid with `CoffinCard` internal component — thumbnail hover preview (hover swaps main image, leave reverts), equal-height cards via flex layout, subtle background for white-bg product photos, "Most Popular" badge, colour count text - **Navigation:** card click fires `onSelectCoffin(id)` to navigate to CoffinDetailsStep — no Continue button - **Pagination:** 20 coffins per page max (`pageSize` prop, enforced via slice) - **WizardLayout `grid-sidebar` update** — wider sidebar (28%), `overflowX: hidden` (no horizontal scroll), `overflowY: auto` at all breakpoints, responsive viewport-lock (desktop only) - **Removed:** `selectedCoffinId`, `CoffinsStepErrors`, `CoffinPriceRange`, `onContinue`, `loading` props - **Added:** `onSelectCoffin`, `CoffinSortBy`, `pageSize`, `minPrice`/`maxPrice`, `thumbnails`/`colourCount` on Coffin, `children` on `CoffinCategory` **Decisions made:** - Card click navigates directly to details (no selection + continue pattern) — matches ecommerce browsing UX - Categories support one level of subcategories — parent click loads all and expands children, child click refines - Price slider with editable text inputs — commits on blur/Enter to avoid per-keystroke re-renders - 20 coffins per page default — enforced in component via slice - Allowance info bubble is conditional (omit prop = no bubble) — some packages don't have coffin allowances **Open questions:** - None **Next steps:** - Continue page feedback: AdditionalServicesStep, SummaryStep, PaymentStep, ConfirmationStep - Retroactive review Phase 3 (organisms) still pending - Batch a11y fix (aria-describedby + aria-invalid) deferred --- ### Session 2026-03-30e — Page feedback: VenueServices, Crematorium, Cemetery rewrites **Agent(s):** Claude Opus 4.6 (1M context) **Work completed:** - **VenueServicesStep (new page):** Built step 7c — venue-specific service toggles after VenueDetailStep. Compact venue card at top, availability notices (info cards for unavailable services), AddOnOption toggles with maxDescriptionLines for "Read more" expansion, conditional tally showing total of selected priced services. Flow: VenueStep → VenueDetailStep → VenueServicesStep. - **AddOnOption price colour fix:** Changed from `text.secondary` (grey) to `color="primary"` (copper) for consistency with all other price displays in the system. - **CrematoriumStep rewrite:** Completely rewritten to match live site. Two variants based on funeral type: - Service & Cremation: stacked crematorium card (image top, details below) + witness Yes/No/Decide later ToggleButtonGroup - Cremation Only: stacked card + "Cremation Only" badge + "Included in Package" info notice, no witness question - Removed: multi-card selection grid, priority dropdown, special instructions, crematoriums array prop - Card iterated from compact horizontal → more generous horizontal → stacked layout based on user feedback - **CemeteryStep rewrite:** Rewritten to match live site: - RadioGroups replaced with ToggleButtonGroups (Yes/No/Not sure) - Card selection grid replaced with freetext search input (Input atom with search icon) - `searchSlot` prop for parent to inject Google Places or geocoding autocomplete - Removed static `cemeteries` array prop and `CemeteryOption` type - Progressive disclosure preserved: own plot → locate it; no plot → preference? → search **Decisions made:** - Venue services belong on a separate page (not inline on VenueDetailStep or in a dialog) due to content volume per service (long descriptions, future images) - Crematorium is always pre-selected by provider — no multi-select needed, just confirmation - "Decide later" / "Not sure" options added as explicit third choice on questions where users may be uncertain — grief-sensitive pattern - Cemetery search should use real location search (Google Places style), not a static dropdown — we don't maintain a cemetery database - Stacked card layout (image top) works better than compact horizontal for single confirmation cards with long text **Open questions:** - None **Next steps:** - Continue page feedback: CoffinsStep, AdditionalServicesStep, SummaryStep, PaymentStep, ConfirmationStep - Retroactive review Phase 3 (organisms) still pending - Batch a11y fix (aria-describedby + aria-invalid) deferred --- ### Session 2026-03-30d — Steps 8-15 consistency pass **Agent(s):** Claude Opus 4.6 (1M context) **Work completed:** - **Consistency pass across Steps 8-15** — aligned all remaining wizard steps with the conventions established during the Steps 1-6 feedback iteration: - **Subheading variant:** CrematoriumStep, CoffinDetailsStep changed from `body2` → `body1` (match IntroStep/DateTimeStep centered-form convention) - **Subheading spacing:** CrematoriumStep, CemeteryStep, CoffinDetailsStep, AdditionalServicesStep, SummaryStep, PaymentStep all changed from `mb: 4` → `mb: 5` - **Section dividers:** CrematoriumStep gained 3 `` between question sections (crematorium → witness, conditional priority, special instructions) - **Link atom:** PaymentStep terms links and ConfirmationStep phone number changed from `Box component="a"` → `Link` atom - **CoffinsStep:** No changes needed (wide-form layout has its own spacing convention) - **Audited CrematoriumStep (15/20) and PaymentStep (16/20)** — findings are pre-existing, not introduced by the pass - **Visual verification:** Playwright screenshots of CrematoriumStep, PaymentStep, ConfirmationStep, AdditionalServicesStep, SummaryStep — all pass **Decisions made:** - Centered-form heading convention now formally: `display3` → `body1` subheading → `mb: 5` gap (documented via consistent implementation across all 10+ centered-form steps) - Wide-form layout (CoffinsStep) keeps its own tighter spacing convention (`body2` + `caption`, `mb: 3`) **Open questions:** - **Checkbox atom:** PaymentStep uses MUI Checkbox directly — only form control without an FA atom wrapper. Create Checkbox atom? - **aria-describedby/aria-invalid:** All wizard steps lack error field association. Batch normalize fix recommended. - **Retroactive review Phase 2.2** still pending (audit priority molecules: ServiceOption, AddOnOption, ProviderCardCompact) **Also completed (same session):** - **Checkbox atom created:** New FA wrapper (forwardRef, displayName, stories: Default/States/TermsAgreement/Checklist). MuiCheckbox theme overrides (warm gold checked, focus ring, disabled muted). PaymentStep updated to import from atom. - **Retroactive review Phase 2.2 complete:** Audited ServiceOption (13/20), AddOnOption (14/20), ProviderCardCompact (15/20). Fixed: - AddOnOption: added `aria-disabled` when disabled (P1) - ProviderCardCompact: added `maxLines={1}` on name (P2) - ServiceOption: price uses `labelLg` variant instead of h6 + hardcoded fontWeight (P1) - Note: audit agents flagged false P0s (AddOnOption "double handler", ServiceOption "role collision") — verified both are correctly handled by existing `stopPropagation` and prop spread order in Card atom **Also completed (continued same session):** - **DateTimeStep:** Swapped date TextField to Input atom (was missed in session 30b) - **VenueStep rewrite:** Simplified to click-to-navigate (like ProvidersStep) — removed Continue, selection state, inline detail, service toggles - **VenueDetailStep (new page):** Detail-toggles layout with scrollable left panel (ImageGallery, description, features grid, location map placeholder, address, informational service cards) and right panel (name, meta icons, price + offset note, Add Venue CTA, address, religion chips) - **CoffinDetailsStep:** Switched from centered-form to detail-toggles layout (image left, specs/price/CTA right) - **WizardLayout detail-toggles overhaul:** Viewport-locked with independent panel scroll, maxWidth 1200px centered, generous padding (px:5), back link inside left panel - **WizardLayout list-map scroll fix:** Removed top padding gap between nav and sticky search, heading scrolls away while search/filters stay pinned with divider border - **ImageGallery molecule (new):** Hero image + landscape thumbnail strip (4:3 ratio), hover to preview, click to select, keyboard accessible, wired into VenueDetailStep and CoffinDetailsStep - **Checkbox atom (new):** FA wrapper with warm gold theming, PaymentStep updated - **Retroactive review Phase 2.2:** Audited ServiceOption (13/20), AddOnOption (14/20), ProviderCardCompact (15/20), fixed P0/P1s **Next steps:** - Continue page feedback from user: CrematoriumStep, CemeteryStep, CoffinsStep, AdditionalServicesStep, SummaryStep, PaymentStep, ConfirmationStep - Venue service selection step (new page — toggles moved from VenueDetailStep) - Batch a11y fix: aria-describedby + aria-invalid across all wizard steps (deferred per user) - Retroactive review Phase 3: organisms normalize + audit - Update component registry with new components (ImageGallery, Checkbox, VenueDetailStep) --- ### Session 2026-03-30c — HomePage build + Chromatic + Story to Design setup **Agent(s):** Claude Opus 4.6 (1M context) **Work completed:** - **Story to Design agent:** Helped user install and run the story.to.design agent on Arch Linux (extracted from .deb, installed webkit2gtk dependency). Agent connects Storybook to Figma plugin. - **Chromatic setup:** Installed chromatic, published Storybook to Chromatic CDN. Set visibility to public for shareable links. Updated `package.json` chromatic script with `--build-script-name=build:storybook`. - **HomePage component built:** Full marketing landing page at `src/components/pages/HomePage/` - 7 sections: Hero, FuneralFinder widget (overlapping card), Partner Logos carousel, Features (4-card grid), Reviews/Testimonials, CTA Banner, FAQ accordion - Composes FuneralFinderV3 organism, Navigation + Footer via props - CSS-only infinite scroll logo carousel with prefers-reduced-motion - Feature cards with warm circular icon backgrounds - Full a11y: section landmarks, aria-labelledby, heading hierarchy - Grief-sensitive copy (quieter pass applied) - **Quality gates run:** /critique (32/40), /audit (16/20), /quieter (all pass) - **Design iteration:** Multiple rounds of visual refinement using Playwright screenshots - Reduced oversized typography (display1 → display3 for hero, display2 → h2 for sections) - Reserved serif fonts for hero + CTA only, sans-serif for all other section headings - Tightened spacing, reduced section padding - Feature cards: compact padding, warm circular icon backgrounds - Fixed unicode rendering bugs in copy **Decisions made:** - Serif display fonts reserved for hero heading and CTA banner only — all other section headings use Montserrat (h2/h3) - Feature card icons wrapped in warm circular backgrounds (brand.50 bg, 56px diameter) - HomePage is a page component (not a template) — does not use WizardLayout - Chromatic published URL is the shareable Storybook link for stakeholders **Open questions:** - Homepage is first-pass only — user will return to iterate later - Partner logo placeholder images need real assets - Hero image slot needs real photography - CTA banner click destination needs clarification (scroll to widget vs wizard entry) **Next steps:** - Resume arrangement wizard page feedback from VenueStep (Step 7) onwards — Steps 1-6 done in previous session - Remaining pages: VenueStep, CrematoriumStep, CemeteryStep, CoffinsStep, CoffinDetailsStep, AdditionalServicesStep, SummaryStep, PaymentStep, ConfirmationStep --- ### Session 2026-03-30b — Page feedback iteration (Steps 1-6) + DialogShell **Agent(s):** Claude Opus 4.6 (1M context) **Work completed:** - **IntroStep (Step 1):** Static subheading (removed dynamic text change on selection), ToggleButtonGroup top-left alignment fix - **ProvidersStep (Step 2):** Heading reduced to h4 "Find a funeral director", SearchBar → location TextField with pin icon, FilterPanel moved below search right-aligned, map fill fix (height:100% → flex:1), hover scrollbar on left panel - **VenueStep (Step 7):** Same consistency fixes as ProvidersStep (h4, location icon, filter layout, map fill, results count format) - **PackagesStep (Step 3):** Removed budget filter + "Most Popular" badge + mobile Continue button. Added grouped packages pattern ("Matching your preferences" / "Other packages from [Provider]" with brand accent bars). `onArrange` replaces `onContinue`. Clickable provider card (`onProviderClick`). Heading to h4. - **DateTimeStep (Step 6):** display3 heading (centered-form consistency). Name fields swapped from MUI TextField to Input atom (external label, no clipping). Multiple preferred dates (up to 3, progressive disclosure). Removed service tradition/religion field. Dividers between question sections. - **DialogShell atom:** New shared dialog container (header + optional back + close, scrollable body, optional footer). Audited 17→19/20, P1s fixed (focus management, sx pattern). - **FilterPanel refactored:** Popover → DialogShell (centered Dialog with backdrop) - **ArrangementDialog refactored:** Now composes DialogShell for consistent chrome - **PreviewStep + AuthGateStep removed:** Consolidated into ArrangementDialog (D-E) - **WizardLayout:** ListMapLayout left panel gets thin scrollbar visible on hover **Decisions made:** - Heading convention: display3 for centered-form pages, h4 for narrow panels (list-map, list-detail) - DialogShell is the standard popup container — all site dialogs compose it - Service tradition removed from DateTimeStep — flows from provider/package selection, confirmed on summary - "Service tradition" is the preferred terminology (not "religion" or "religious style") - Package grouping pattern: matched vs other, with brand accent bar section labels - FilterPanel uses Dialog (not Popover) for filter controls **Open questions:** - Provider profile popup contents — user will provide details later - Heading convention (display3 vs h4) should be documented as a decision **Next steps:** - **Resume page feedback from VenueStep (Step 7) onwards** — Steps 1-6 are done - Remaining pages to review: VenueStep, CrematoriumStep, CemeteryStep, CoffinsStep, CoffinDetailsStep, AdditionalServicesStep, SummaryStep, PaymentStep, ConfirmationStep - Homepage layout work (user priority — separate task) - Input atom clipping: audit remaining pages for MUI TextField → Input atom swap where labels clip --- ### Session 2026-03-30a — Tooling upgrades + workflow evaluation **Agent(s):** Claude Opus 4.6 (1M context) **Work completed:** - **Storybook addons:** Added `@storybook/addon-storysource` (story source code panel) and `@storybook/addon-a11y` (real-time axe-core accessibility checks) - **Playwright MCP:** Installed `@playwright/mcp` and registered as MCP server. Enables Claude Code to take screenshots of Storybook for visual verification. Available from next session. - **Workflow evaluation:** Comprehensive analysis of current capabilities, identified core gap (Claude Code cannot see visual output), researched solutions - **Antigravity research:** Investigated Google Antigravity IDE for visual polish workflow. Installed on system. Created `GEMINI.md` project rules file. User decided to pause on Antigravity for now and continue with Claude Code + Playwright MCP approach. - **GEMINI.md:** Created project rules file for Antigravity IDE, mirroring key conventions from CLAUDE.md (token access, atomic tiers, no hardcoded values) **Decisions made:** - Playwright MCP is the primary solution for visual verification gap — enables Claude Code to screenshot Storybook stories and self-correct visual issues - Antigravity available as secondary tool for visual tweaks but not primary workflow - Claude Code remains the primary tool for architectural/structural work due to custom skills, memory system, and accumulated project context **Open questions:** - User has refinement feedback from previous session that was partially overlooked — to be addressed next session - Some items from the user's original feedback across 15 steps were missed when compressed into D-A through D-H decisions **Next steps:** - Restart session to activate Playwright MCP - User to provide refinement feedback - Use Playwright MCP to visually verify changes as they're made - Address remaining P1s from previous session (radiogroup keyboard nav, dialog mobile fullscreen) --- ### Session 2026-03-29e — Feedback iteration Batches 1 & 2 **Agent(s):** Claude Opus 4.6 (1M context) **Work completed:** - **Batch 1: Atom + Template Foundation** - ToggleButtonGroup: label-to-options spacing `mb: 1→2`, top-align content `flex-start`, fixed selected border CSS specificity (added `&.Mui-selected` in grouped selector) - Heading standardisation: all 6 split-layout steps changed from `h4` → `display3` (ProvidersStep, PackagesStep, PreviewStep, VenueStep, CoffinsStep, CoffinDetailsStep) per D-A - DateTimeStep: normalised section gaps (scheduling fieldset `mb: 3→4`) - CrematoriumStep: added subheading for consistency, normalised witness section `mb: 3→4` - PackagesStep + DateTimeStep: fixed input label clipping (`pt: 0.5` on TextField containers) - **Batch 2: List-Map Layout Rework (D-B)** - WizardLayout ListMapLayout: 420px fixed left column, `flex: 1` right panel - Back link rendered inside left panel (not above split) — eliminates gap above map - LAYOUT_MAP type updated to accept `backLink` prop for list-map variant - ProvidersStep + VenueStep: sticky header (heading + search + filters pinned at top of scrollable left panel) - **Batch 3: FilterPanel molecule + integration (D-C, D-F)** - New FilterPanel molecule: Popover trigger with active count badge, Clear all, Done actions - ProvidersStep: inline chips → FilterPanel Popover alongside search bar - VenueStep: same pattern, filter chips in Popover - CoffinsStep (D-F): grid-sidebar → wide-form (full-width 4-col grid), filters in Popover - WizardLayout: added `wide-form` variant (maxWidth lg, single column) for card grids - FilterPanel stories: Default, WithActiveFilters, SelectFilters, CustomLabel - **Batch 4: Step Simplifications (D-D, D-G)** - ProvidersStep (D-D): removed selection state, Continue button, radiogroup pattern. Clicking a provider card triggers navigation directly. Stories updated. - CoffinDetailsStep (D-G): removed all customisation (handles, lining, nameplate, OptionSection, ProductOption/CoffinDetailsStepValues types). Simplified to coffin profile + Continue CTA. Changed from detail-toggles to centered-form layout. Stories simplified. - Updated CoffinDetailsStep index.ts re-exports - **Batch 5: ArrangementDialog organism (D-E)** - New ArrangementDialog organism: MUI Dialog with two internal steps - Step 1 (preview): ProviderCardCompact, package summary with sections/items/total, "What happens next" checklist - Step 2 (auth): SSO buttons, email, progressive disclosure for details, verification code, terms - Parent controls step state + auth form values; dialog has back arrow and close button - Stories: Default (full flow), AuthStep, AuthDetails, PrePlanning - PreviewStep + AuthGateStep kept for now, to be deprecated once dialog is wired in **Decisions made:** - All 8 iteration decisions now implemented: D-A through D-H **Quality passes:** - Ran 3 parallel audits (FilterPanel, ArrangementDialog, all reworked steps) - FilterPanel: 4 P0 + 2 P1 fixed (forwardRef, useId, aria-controls, dialog role, label prop, scroll) - ArrangementDialog: 3 P0 + 2 P1 fixed (forwardRef, focus management, aria-live, semantic tokens, Link atom) - Sticky headers: responsive padding match + top breathing room (pt: 2) - ProvidersStep: role="list", semantic map token - VenueStep: aria-label on search, semantic map token - CoffinDetailsStep: form wrapper added **Remaining P1/P2 (for next session):** - VenueStep/CoffinsStep radiogroup arrow-key navigation (P1) - ArrangementDialog step number badge hardcoded font size/weight (P1) - ArrangementDialog mobile fullscreen treatment (P1) - CoffinDetailsStep centered-form width may be tight for coffin images (P2) - CTA alignment inconsistency VenueStep vs CoffinsStep/CoffinDetailsStep (P2) - ArrangementDialog missing story variants: verify, loading, errors, overflow (P2) **Open questions:** - PreviewStep + AuthGateStep: deprecate/remove once ArrangementDialog fully replaces them in the flow - User to review all steps in Storybook and report any visual issues still present **Next steps:** - User review in Storybook — note any remaining visual issues - Fix remaining P1s (radiogroup keyboard nav, dialog mobile fullscreen) - Wire ArrangementDialog into PackagesStep flow - Component registry updates for FilterPanel + ArrangementDialog --- ### Session 2026-03-29c — Grooming pass: critique/harden/polish all 15 steps **Agent(s):** Claude Opus 4.6 (1M context) **Work completed:** - **Full grooming pass across all 15 wizard steps** — applied critique (UX design review), harden (edge cases/error states), and polish (visual alignment/copy/code) frameworks. - **[P0] CrematoriumStep bug fix:** `