--- 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 — `
`, `