## Context Step 002 produced a `BaseLayout.astro` that imports `Nav.astro` and `Footer.astro` stubs — both render nothing. The navigation bar is the first visible UI element needed on every page. It must: - Render correctly on a Midnight (`#102022`) dark background - Work at build time (Astro SSG — no server runtime) - Derive the current locale from the URL path (no runtime props) - Use zero client-side framework code Available assets confirmed: - `src/assets/logos/logo-wide.svg` — full "qumo" wordmark, paths filled with `#161616` (near-black — needs override) - `src/assets/icons/wum-arrow.svg` — chevron arrow, already `stroke="#f3f3f3"` (Snow — correct for dark nav) ## Goals / Non-Goals **Goals:** - Fully functional `Nav.astro` replacing the empty stub - Logo visible on Midnight background - Three nav links + language switcher + Connect CTA - Scroll-triggered background transition (transparent → Midnight) - Mobile hamburger menu with open/close behavior - All text strings from `en.json` / `nl.json` **Non-Goals:** - Animated underline or hover effects beyond Tailwind utilities - Active page highlighting (deferred — pages don't exist yet to test against) - Dropdown sub-menus (not on staging site) - Separate `LanguageSwitcher.astro` component (simple enough to inline) ## Decisions ### 1. Logo: inline SVG with fill override **Decision:** Inline the `logo-wide.svg` SVG directly in `Nav.astro`. Change all `fill="#161616"` attributes to `fill="currentColor"`. Set `class="text-snow"` on the `` element so `currentColor` resolves to Snow (`#F3F3F3`). **Rationale:** The logo is a small, purely decorative SVG — inlining it avoids an extra HTTP request and allows CSS-controlled coloring without filters. `fill="currentColor"` + Tailwind text color is the idiomatic approach. An `` tag cannot be recolored without CSS filters, which look worse. **Alternative considered:** `` component with a separate white-fill SVG asset. Rejected: requires maintaining two copies of the same logo. ### 2. Locale detection: Astro.url at build time **Decision:** In `Nav.astro`, derive locale from `Astro.url.pathname`: ```ts const isNl = Astro.url.pathname.startsWith('/nl'); const locale = isNl ? 'nl' : 'en'; const alternatePath = isNl ? Astro.url.pathname.replace(/^\/nl/, '') || '/' : '/nl' + Astro.url.pathname; ``` Pass `locale` to `getContent()` for nav strings. Use `alternatePath` for the language switcher link. **Rationale:** Astro SSG renders each page at build time with its own `Astro.url`. This approach is zero-JS, works for every route without configuration, and the prefix rule (`/nl/...` ↔ `/...`) holds for all routes on this site. Confirmed with user during explore session (Option B). **Alternative considered:** Prop threading from `BaseLayout` (Option A). Rejected by user — more verbose, non-standard for nav components. ### 3. Scroll behavior: window scroll event + CSS class toggle **Decision:** A `