--- phase: 1 slug: level-up-pf2e-regelkonform status: approved shadcn_initialized: false preset: none created: 2026-04-27 revised: 2026-04-27 reviewed_at: 2026-04-27 --- # Phase 1 — UI Design Contract > Visual and interaction contract for the Level-Up Wizard. Generated by gsd-ui-researcher, > verified by gsd-ui-checker. > > Most decisions are inherited from CONTEXT.md, the project's existing design tokens > (`client/src/index.css`), and the established modal/component patterns in > `client/src/features/characters/components/`. Where CONTEXT.md locks a behavior, > the relevant `D-XX` decision ID is referenced inline. --- ## Design System | Property | Value | |----------|-------| | Tool | none (hand-built primitives) | | Preset | not applicable | | Component library | hand-built shadcn-style primitives in `client/src/shared/components/ui/` (`Button`, `Input`, `Card`, `Spinner`, `ActionIcon`); reused for the wizard. | | Icon library | `lucide-react` 0.562.0 (`ChevronLeft`, `ChevronRight`, `X`, `AlertTriangle`, `Sparkles`, `Swords`, `Star`, `BookOpen`, `Shield`, `Heart`, `Eye`, `Footprints`, `Wand2`, `Check`, `Lock`, `Info`, `RotateCcw`, `Minus`, `Plus`, `Trash2`, `ArrowLeft`) — never emojis (CLAUDE.md). | | Font | Inter (sans), JetBrains Mono (mono) — declared in `--font-sans`, `--font-mono` (`client/src/index.css:66-67`). | | Theme | Tailwind v4 `@theme` block in `client/src/index.css`. All tokens already exist; UI-SPEC adds **no new tokens**. | | Animation lib | Framer Motion 12.26.2 is installed but unused today. Phase 1 introduces it for the wizard step transition (see "Motion" section). | --- ## Spacing Scale Declared values (all multiples of 4, all already present in Tailwind v4 default scale used by the codebase): | Token | Value | Usage in Phase 1 | |-------|-------|-------------------| | xs | 4px (`p-1`, `gap-1`) | Icon gap inside choice-card chips, badge padding | | sm | 8px (`p-2`, `gap-2`) | Stepper-dot gap, footer button gap, badge stacks | | md | 16px (`p-4`, `gap-4`) | Wizard body padding (mobile), step-section padding, choice-card inner padding | | lg | 24px (`p-6`, `gap-6`) | Wizard body padding (`sm:` desktop), Review-step section padding | | xl | 32px (`p-8`) | Reserved for review-step major section breaks on desktop | | 2xl | 48px | Not used in Phase 1 | | 3xl | 64px | Not used in Phase 1 | Touch-target minimums (mobile-first, CLAUDE.md): - All interactive buttons: 44px height minimum — `h-11` (`Button` `default`), `h-11 w-11` (`Button` `icon`). - Choice-cards: minimum 64px tap height (so an entire card is a single touch target including its title row + meta row — exceeds 44px). - Boost-step `+/-` controls: `h-11 w-11` (44×44px) — see Boost-Step contract. - Stepper-dot buttons: visible dot is `h-2 w-2` / `h-2.5 w-2.5` but the wrapping `` triggering the same backdrop-confirm logic as the backdrop click. **This is the only cancel surface in the wizard chrome** (the footer carries no Abbrechen button). ### Stepper (always visible, between Header and Body) Mobile-first compact dot-stepper with **always-visible progress label**: - Outer container: `