From a293a4f6627bbc91bd5ca06398ac2477dfb7d89e Mon Sep 17 00:00:00 2001 From: lorentz Date: Sun, 3 May 2026 13:57:40 -0400 Subject: [PATCH] docs(01-02): summarize PWA-04 safe-area utility gap closure Closes the orphaned PWA-04 requirement flagged by 01-VERIFICATION.md. Single edit to app/styles/brand.css adds @utility pt-safe and @utility pb-safe; production build (load-bearing for Tailwind 4 @utility syntax) compiled successfully and emitted both classes into the production CSS bundle. --- .../01-pwa-scaffolding/01-02-SUMMARY.md | 174 ++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100644 .planning/phases/01-pwa-scaffolding/01-02-SUMMARY.md diff --git a/.planning/phases/01-pwa-scaffolding/01-02-SUMMARY.md b/.planning/phases/01-pwa-scaffolding/01-02-SUMMARY.md new file mode 100644 index 0000000..631e33e --- /dev/null +++ b/.planning/phases/01-pwa-scaffolding/01-02-SUMMARY.md @@ -0,0 +1,174 @@ +--- +phase: 01-pwa-scaffolding +plan: 02 +subsystem: pwa-scaffolding +gap_closure: true +tags: [css, tailwind4, mobile, pwa, safe-area] +requirements_satisfied: [PWA-04] +roadmap_criteria_satisfied: ["Phase 1 SC #3 — safe-area utility available"] +dependency_graph: + requires: [] + provides: + - "@utility pt-safe (padding-top: env(safe-area-inset-top))" + - "@utility pb-safe (padding-bottom: env(safe-area-inset-bottom))" + affects: + - "Phase 2 (mobile shell) — sticky header (SHELL-05) and fixed bottom nav (SHELL-06) consume these utilities" +tech_stack: + added: [] + patterns: + - "Tailwind 4 @utility blocks (already in use across brand.css)" + - "CSS env(safe-area-inset-*) — browser-native, falls back to 0" +key_files: + created: [] + modified: + - app/styles/brand.css +decisions: + - "Named utilities (pt-safe / pb-safe) over arbitrary values (pt-[env(safe-area-inset-top)]) — single source of truth, clearer JSX, easy future tweak if iOS rules change" + - "brand.css over globals.css — co-located with all other named project utilities (num, metric-label, surface-brand, tagline, etc.); already imported by globals.css line 125" + - "Top + bottom only (no pl-safe / pr-safe) — manifest pins orientation to portrait; left/right insets only matter in landscape on notched devices; speculative until a consumer asks" + - "Plain env() (not max(env(), 0px)) — env() already returns 0 on devices without insets; max() wrapper is a no-op" +metrics: + duration: "~5 min" + completed: 2026-05-03 + tasks_completed: 1 + files_modified: 1 + commits: 1 +--- + +# Phase 01 Plan 02: PWA-04 Safe-Area Utility Gap Closure Summary + +**One-liner:** Adds shared `pt-safe` / `pb-safe` Tailwind 4 `@utility` blocks to `app/styles/brand.css`, closing the orphaned PWA-04 requirement so Phase 2's sticky header and fixed bottom nav can opt into iOS notch / Android home-indicator padding via `env(safe-area-inset-*)`. + +## Requirements Satisfied + +- **PWA-04** — Header and bottom tab bar respect `env(safe-area-inset-top/bottom)` (Tailwind arbitrary values or shared utility class). **Closed** by shipping `@utility pt-safe` and `@utility pb-safe` in `app/styles/brand.css`. This restores the orphaned-requirement state flagged by `01-VERIFICATION.md` (where 01-01 had declared `requirements: [PWA-01, PWA-02, PWA-03]` only and silently deferred PWA-04 to Phase 2). +- **ROADMAP Phase 1 Success Criterion #3** — "Shared safe-area utility class available" — satisfied by the same two `@utility` blocks. + +## What Changed + +### Files Modified + +- `app/styles/brand.css` — appended one section comment block + two `@utility` definitions between the existing `@utility tagline` (ends line 140) and the `/* === Wolf-mark watermark === */` section header (now line 165). Net: **+23 lines, 0 deletions.** + +### Exact Diff (additive only) + +```css +/* === Safe-area insets ================================================= + * + * Opt-in padding helpers for sticky top / fixed bottom bars on devices + * with notches, dynamic islands, or gesture home indicators. Pair with + * the viewport-fit=cover viewport meta (set in app/layout.tsx) — without + * that, env(safe-area-inset-*) resolves to 0 and these utilities are + * no-ops, which is the desired fallback on non-PWA / non-mobile contexts. + * + * Usage: + *
// header clears notch + *