# Unspooled UI/UX Master Prompt Compliance Checklist

Captured from a correction session where the user objected that the full `Untitled.md` master prompt must be followed, not just partially implemented.

## Core lesson

A clean Gradle build is not proof that the master UI/UX prompt was followed. For broad UI rebuild prompts, completion requires a section-by-section compliance audit and honest reporting of remaining violations.

## Required audit matrix

- Navigation/top chrome
  - `DebridStreamTopBar` is primary nav.
  - No restored sidebar nav, `HomeTopBar`, `NuvioModernSidebar`, Lumera glass sidebar, or Netflix side nav in active routes.
  - Top bar dimensions and focused/selected visual states match spec.
  - DOWN from top bar explicitly targets content; UP from first content row returns to top bar where applicable.

- Banned patterns
  - `TvLazyRow` / `TvLazyColumn`: zero.
  - `focusManager.moveFocus(`: zero, except explicitly justified settings fallback if the current prompt allows it.
  - `postInvalidate(`: zero.
  - `.focusable(interactionSource)` layered on tv-material `Surface(onClick)`/Button: zero.

- Focus architecture
  - Every screen has an initial focus requester, deferred with `requestFocusAfterFrames` where navigation just occurred.
  - Directional focus graph is explicit for cross-region movement.
  - Dialogs and side panels trap focus and BACK dismisses only the overlay.
  - No invisible focusable elements or dead ends.

- Visual focus contract
  - Every focusable card/button/row has simultaneous scale + 2dp white border + `#26FFFFFF` glow unless the component is a top-bar tab with the specified white pill behavior.
  - Selected state differs from focused and resting state.

- Tokens
  - Colors come from `ThemeColors`, `NexColors`, or theme aliases; no new raw UI colors outside token files unless they are defining tokens.
  - Card dimensions come from `CardSpec`; no hardcoded catalog-card sizes.
  - Animation timings match the prompt.

## Profile picker
  - Centered layout: `LazyRow(horizontalArrangement = Arrangement.Center)` + `Modifier.padding(horizontal = 16.dp)` per item.
  - Circular avatars (not rectangular cards) — YouTube TV style. Names BELOW the avatar, not inside it.
  - Focus visual: 1.15x scale + 4dp white ring + `.shadow(16.dp, CircleShape, spotColor = white)` for outer glow.
  - Active profile gets a persistent ring + checkmark badge. When focused, active profile shows focus glow overlaying the active ring.
  - Every `.focusable()` must have a corresponding `.clickable(interactionSource, indication = null) { }` or `Surface(onClick)` — D-pad center/select does nothing without it.
  - "Add account" as a muted circle (`Color.White.copy(alpha = 0.1f)`) with "+" icon — not a card.
  - "Watch as guest" pill button at bottom — `RoundedCornerShape(50)`, translucent container, white border, replaces "Manage Profiles" button.
  - Background must use `NuvioTheme.colors.Background`, never hardcoded `Color(0xFF0F0F0F)`.
  - All text colors from `NuvioTheme.colors.*`, never `Color.White` directly.
  - Profile/Add cards have explicit LEFT/RIGHT/UP/DOWN, with DOWN to guest button.
  - Guest button is focusable and has explicit UP/DOWN/LEFT/RIGHT.

- Settings
  - Two-pane layout, ~220dp category rail.
  - Category items have resting/focused/selected states and explicit rail/detail focus links.
  - Setting rows have focus/value display and explicit row traversal.
  - BACK from detail returns left or pops only as specified.

- Catalog/home/hero
  - Active catalog cards use `PremiumContentCard` and `CardSpec`.
  - Lazy rows use `focusGroup`/`focusRestorer` or another verified explicit row focus pattern.
  - All image loads have shimmer/placeholder behavior.
  - Hero matches metadata/action/focus/rotation expectations.

- Player/source/cloud
  - Controls auto-hide after 4s.
  - Play/pause receives default focus when controls show.
  - Seek track/progress use prompt tokens.
  - Track/source side panels trap focus and BACK returns correctly.
  - Source/cloud cards use the required focus visual contract.

## Reporting rule

Use language like:
- `Built and verified these sections: ...`
- `Remaining violations: ...`

Do not say:
- `full prompt followed`
- `complete`

unless the full audit matrix is green or remaining violations are explicitly acknowledged.
