From ecdd94a907b1aa321b6e51816708d33e3ade1497 Mon Sep 17 00:00:00 2001 From: Lucas Berger Date: Sat, 13 Jun 2026 20:52:33 -0400 Subject: [PATCH] docs(11): UI design contract for per-event reminders --- .../11-per-event-reminders/11-UI-SPEC.md | 239 ++++++++++++++++++ 1 file changed, 239 insertions(+) create mode 100644 .planning/phases/11-per-event-reminders/11-UI-SPEC.md diff --git a/.planning/phases/11-per-event-reminders/11-UI-SPEC.md b/.planning/phases/11-per-event-reminders/11-UI-SPEC.md new file mode 100644 index 0000000..e040210 --- /dev/null +++ b/.planning/phases/11-per-event-reminders/11-UI-SPEC.md @@ -0,0 +1,239 @@ +--- +phase: 11 +slug: per-event-reminders +status: draft +shadcn_initialized: false +preset: none +created: 2026-06-13 +--- + +# Phase 11 — UI Design Contract + +> Visual and interaction contract for frontend phases. Generated by gsd-ui-researcher, verified by gsd-ui-checker. + +--- + +## Design System + +| Property | Value | +|----------|-------| +| Tool | none — custom CSS tokens (tokens.css), no shadcn | +| Preset | not applicable | +| Component library | none — inline React.CSSProperties style objects | +| Icon library | lucide-react (already in use: X, Loader2) | +| Font | system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif | + +Source: `apps/pwa/src/styles/tokens.css`, `apps/pwa/src/components/EventForm.tsx` + +--- + +## Spacing Scale + +Declared values (must be multiples of 4). Pre-populated from `tokens.css`. + +| Token | Value | Usage | +|-------|-------|-------| +| --space-1 | 4px | Icon gaps, label margin-bottom, helper-text margin-top | +| --space-2 | 8px | Compact element spacing | +| --space-3 | 12px | Select horizontal padding (matching Recurrence picker) | +| --space-4 | 16px | Field margin-bottom (fieldStyle), general element spacing | +| --space-6 | 24px | Section padding | +| --space-8 | 32px | Layout gaps | +| --space-12 | 48px | Major section breaks | + +Exceptions: 44px minimum touch target height on the reminder `` only. Calendar member colors (--color-member-*) and shared family color (--color-shared-family) are unchanged and not used by the reminder picker UI. + +--- + +## Component Inventory + +This phase adds exactly one new UI element to `EventForm.tsx`. All styling follows the established inline `React.CSSProperties` pattern from the Recurrence picker. + +### Reminder `` block (~line 885 in EventForm.tsx), before the recurrence-bound control. +- **Label text:** `Reminder` +- **Element ID:** `event-reminder` +- **Pattern:** Identical to the Recurrence picker — `
`, `