diff --git a/DeepDrftPublic.Client/Layout/NavMenu.razor b/DeepDrftPublic.Client/Layout/NavMenu.razor deleted file mode 100644 index 9767d51..0000000 --- a/DeepDrftPublic.Client/Layout/NavMenu.razor +++ /dev/null @@ -1,5 +0,0 @@ -@using DeepDrftPublic.Client.Controls - - - - diff --git a/WASM_SEAMS.md b/WASM_SEAMS.md index 41bbca0..bd93cd6 100644 --- a/WASM_SEAMS.md +++ b/WASM_SEAMS.md @@ -15,11 +15,14 @@ ### G1 — `DeepDrftHero` fade-up animation replays on home-page WASM boot (Mode B) +**Status: RESOLVED** + - **Files:** `DeepDrftPublic.Client/Controls/DeepDrftHero.razor` (markup), `DeepDrftPublic.Client/Controls/DeepDrftHero.razor.css` (lines 2–10). - **What happens:** Five elements carry `class="fade-up"`. The CSS is `opacity: 0; animation: fade-up 0.8s ease forwards;` — an unconditional entrance animation that runs whenever the element mounts. `DeepDrftHero` sits on `Home.razor` (`@page "/"`), which is `InteractiveAuto`. On the WASM remount the hero subtree is recreated and the whole headline block fades up from transparent **a second time**, seconds after the page was already visible and settled. - **Symptom:** The hero title / eyebrow / subtitle / desc / CTA visibly re-fade after WASM loads — the canonical "it animates, then a beat later animates again" regression. This is the home-page instance of the symptom the audit was opened against. - **User-visible impact:** High. It is the first thing every visitor sees, above the fold, on the site root. Most-trafficked page, most-noticeable element. - **Note:** This is *not* a missing PersistentComponentState — the hero fetches nothing. Persisting state will not help. See R1. +- **Resolution:** `DeepDrftHero.razor` updated to gate the `fade-up` animation class on `!RendererInfo.IsInteractive`. The SSR prerender pass renders with the class (animation plays on first paint); the WASM hydration pass renders without it (elements land in settled state, no replay). Approach used: Option A from remediation plan. Build clean, zero errors. Commit: `fix: gate hero fade-up on SSR pass only to stop double-fire on WASM hydration`. ### G2 — `NowPlaying` waveform/placeholder swap on WASM boot (Mode A-adjacent, lower severity) @@ -56,6 +59,8 @@ These already bridge the seam correctly. Re-implementing or "tidying" them risks ### R1 — Stop `DeepDrftHero` fade-up from replaying on the interactive remount ⟵ only real fix needed +**Status: DONE** + Addresses **G1**. PersistentComponentState does not apply (no data). The animation must not re-fire when the hero subtree is recreated on the WASM pass. Three viable approaches, in order of preference: **Option A (recommended) — gate the animation to first paint via a one-shot CSS marker.**