Files
xtremflow/APPLE_TV_VISUAL_REFERENCE.md
T
GitHub Copilot 611fc41c76 feat: Add Apple TV Design System Visual Reference and Component Guide
- Introduced a comprehensive visual reference for the Apple TV design system, including color palette, component specifications, typography, shadow elevation system, and animation timing guide.
- Detailed button states, card components, text styles, and navigation focus flow for improved user experience.
- Included accessibility considerations and a testing checklist to ensure compliance with design standards.

chore: Complete redesign of XtremFlow Apple TV theme

- Updated color palette to align with Apple TV aesthetics, enhancing sophistication and premium feel.
- Optimized typography for better readability at 10ft viewing distance.
- Improved focus states for remote navigation clarity.
- Implemented a new 5-level shadow system for cinematic depth.
- Refined glass effects for a premium appearance.
- Ensured all components are accessible and comfortable for remote use.
2026-03-26 11:34:47 +01:00

34 KiB
Raw Blame History

Apple TV Design System - Visual Reference & Component Guide

Quick Reference: Color Palette

┌─────────────────────────────────────────────────────────┐
│                   PRIMARY ACCENT                        │
│                    #00A0D2                              │
│                  Teal / Sky Blue                        │
│  Used for: Focus states, CTAs, interactive highlights  │
└─────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│                 SECONDARY ACCENT                        │
│                    #FF3B30                              │
│                   Error Red (Apple)                     │
│  Used for: Alerts, live indicators, destructive actions│
└─────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│                  SUCCESS ACCENT                         │
│                    #34C759                              │
│                   Apple Green                           │
│  Used for: Success states, confirmations, positive UI  │
└─────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│           NEUTRAL GREYS (OLED Background)              │
│                                                         │
│  #000000 ███ Pure Black (base)                         │
│  #0A0A0A ███ Deep Black (lift 1)                       │
│  #1A1A1A ███ Level 1 (card surface)                    │
│  #2A2A2A ███ Level 2 (hover)                           │
│  #3A3A3A ███ Level 3 (disabled)                        │
│  #4A4A4A ███ Level 4 (divider)                         │
│  #666666 ███ Level 5 (secondary text)                  │
│  #888888 ███ Level 6 (tertiary text)                   │
│  #FFFFFF ███ White (primary text)                      │
└─────────────────────────────────────────────────────────┘

Component Specifications: Visual Layout

Button Hierarchy

PRIMARY BUTTON
┌──────────────────────────────────────────┐
│  ▶ PLAY                                  │
│                                          │
│  Height: 56px                            │
│  Width:  Variable (min 120px)            │
│  Padding: 28px horiz, 12px vert          │
│  Background: #00A0D2 (Teal)              │
│  Text: #FFFFFF, 18px w600                │
│  Border radius: 12px                     │
│  Shadow: Level 2 (subtle)                │
└──────────────────────────────────────────┘

HOVER STATE (Mouse):
┌──────────────────────────────────────────┐
│  ▶ PLAY                                  │
│  ↑ Scale: 1.02x                          │
│  ✨ Shadow: Level 3                      │
└──────────────────────────────────────────┘

FOCUS STATE (Remote/Keyboard):
╭──────────────────────────────────────────╮ ← 2px white border
│ ┌────────────────────────────────────┐ │ ← Glow: #00A0D2
│ │  ▶ PLAY                            │ │    20px blur
│ │                                    │ │
│ │  Scale: 1.05x                      │ │
│ └────────────────────────────────────┘ │
╰──────────────────────────────────────────╯


SECONDARY BUTTON
┌──────────────────────────────────────────┐
│  + ADD TO WATCHLIST                      │
│                                          │
│  Height: 56px                            │
│  Background: #2A2A2A (grey surface)      │
│  Border: 1px solid #3A3A3A               │
│  Text: #FFFFFF, 18px w600                │
│  Shadow: Level 2                         │
└──────────────────────────────────────────┘

FOCUS STATE:
╭──────────────────────────────────────────╮
│ ┌────────────────────────────────────┐ │ ← 2px #00A0D2
│ │  + ADD TO WATCHLIST                │ │
│ │  ✨ Glow: Teal                      │ │
│ └────────────────────────────────────┘ │
╰──────────────────────────────────────────╯

Card Components (Poster - 2:3 Ratio)

NORMAL STATE
┌──────────────┐
│              │
│              │ 200×300px
│ Movie Poster │ or 240×360px
│              │
│              │ Radius: 12px
└──────────────┘ Shadow: Level 2
 ▼  
TITLE
METADATA


HOVER STATE (Mouse)
╭──────────────╮
│╲            ╱│ Scale: 1.04x
│ ╲  Poster  ╱ │ Shadow: Level 3
│  ╲        ╱  │ Overlay: 15% black
│   ╲      ╱   │
│    ╲    ╱    │
│     ╲  ╱     │
│      ╲╱      │
╰──────────────╯


FOCUS STATE (Remote)
╭──────────────────╮
│┌──────────────┐ │ Border: 2px #00A0D2
││              │ │ Scale: 1.06x
││   Poster     │ │ Shadow: Level 4 + glow
││   (scaled)   │ │ Overlay: 25% black
││              │ │ ✨ Glow: #00A0D2
│└──────────────┘ │    20px blur
╰──────────────────╯

Title Style: 18px w600 white
Subtitle: 14px w400 #999999
Rating: 12px w700 #FFD700 (gold)

Text Styles - Visual Scale

HERO / Display Large (64px)
╔════════════════════════════════════════════╗
║  Featured Now                              ║
║  Premium cinematic experiences             ║
║  w800 / Line 1.2 / Letter -2.0px           ║
╚════════════════════════════════════════════╝

XLARGE / Display Medium (56px)
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ New on XtremFlow                        ┃
┃ w700 / Line 1.15 / Letter -1.5px        ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

LARGE / Display Small (44px)
╔════════════════════════════════════════════╗
║ Recommended for You                    ║
║ w700 / Line 1.2 / Letter -1.0px           ║
╚════════════════════════════════════════════╝

TITLE XXL / Headline Large (32px)
┌──────────────────────────────────────────┐
│ Sci-Fi Collection                        │
│ w600 / Line 1.25                         │
└──────────────────────────────────────────┘

TITLE XL / Headline Medium (28px)
┌──────────────────────────────────────────┐
│ Action & Adventure                       │
│ w600 / Line 1.3                          │
└──────────────────────────────────────────┘

TITLE / Title Medium (18px)
┌──────────────────────────────────────────┐
│ Play • 2h 45m • PG-13 • 8.5★             │
│ w600 / Line 1.4                          │
└──────────────────────────────────────────┘

BODY / Body Large (16px)
┌──────────────────────────────────────────┐
│ A brilliant action film about a detective│
│ uncovering a corporate conspiracy. Highly│
│ recommend for thriller fans.             │
│ w400 / Line 1.6                          │
└──────────────────────────────────────────┘

CAPTION / Label Large (12px)
┌──────────────────────────────────────────┐
│ LIVE • 1.2M WATCHING • UPDATED 2 MIN AGO │
│ w500 / Line 1.4 / Space +0.3px           │
└──────────────────────────────────────────┘

Shadow Elevation System

LEVEL 1: No Shadow (Background)
┌──────────────────┐
│                  │ Flat appearance
│  Content Area    │ Used for: App background
│                  │
└──────────────────┘


LEVEL 2: Subtle Shadow (Base Cards)
┌──────────────────┐
│                  │ Shadow 1:
│  Card            │ • 8% black, 6px blur
│                  │ • 0, 2px offset
└────────┬─────────┘ Creates: Slight lift
         ╰─ ~ 2px depth


LEVEL 3: Standard Shadow (Hover/Focus Cards)
┌──────────────────┐
│                  │ Shadow 1:
│  Card            │ • 12% black, 8px blur
│  (Hover)         │ • 0, 4px offset
│                  │
└─────────┬────────┘ Shadow 2:
          ╰── ~ 4px depth
              • 6% black, 2px blur


LEVEL 4: Elevated Shadow (Focused + Glow)
    ✨ ← Glow: #00A0D2, 16-20px blur
┌──────────────────┐
│                  │ Shadow 1:
│  Card            │ • 20% black, 12px blur
│  (Active)        │ • 0, 8px offset
│                  │
└──────────┬───────┘ Shadow 2:
           ╰─ ~ 8px depth
               • 10% black, 4px blur + glow


LEVEL 5: Maximum Elevation (Modals)
        ✨✨ ← Glow ring
    ╭─────────────╮
    │ ┌─────────┐ │
    │ │  Modal  │ │ Shadow 1:
    │ │ Content │ │ • 25% black, 16px blur
    │ │         │ │ • 0, 12px offset
    │ └─────────┘ │
    ╰─────────────╯ Shadow 2 & 3: Additional layers
     ~~~~~~~~~~~~~~~~~~~ for depth

Animation Timing Guide

INPUT DELAY → ANIMATION START → ANIMATION COMPLETE
│                               │
0ms          Desktop            Desktop responsive
             0ms                100ms feedback

0ms          Touch              150-200ms feedback
             Instant            (perceived 150ms)

~300ms       Remote             ~300-400ms total
             Input lag          animation + input lag
             (typical)


CURVE TYPES VISUALIZED:

easeOutQuad (Deceleration - smooth landing)
1.0 ┼━━━∿━━━━━━━━━━━━━━ → moves fast then slows
    │  ╱
0.5 ┤ ╱
    │╱
0.0 ┴────────────────────>
    0ms      300ms      600ms

easeInOutQuad (Symmetrical - UI change)
1.0 ┼━━┱─────────┲━━━━━━
    │ ╱           ╲
0.5 ┤╱             ╲
    │                ╲
0.0 ┴─────────────────>
    0ms      150ms     200ms

easeOutCubic (Smooth navigation)
1.0 ┼━┳─────────────────
    │╱
0.5 ┤
    │
0.0 ┴─────────────────>
    0ms     300ms     600ms

Spring Curve (Celebratory)
1.0 ┼━┳━━┳━━┓
    │ │  │  ╲╱╲
0.5 ┤ │  │     ╲
    │ │ ╱
0.0 ┴──╱────────>
    0ms    250-350ms

Navigation Focus Flow

TV NAVIGATION - Row/Column Grid Layout

    Item 1     Item 2     Item 3
    ┌────┐     ┌────┐     ┌────┐
    │    │     │    │     │    │
    └────┘     └────┘     └────┘

    Item 4     Item 5     Item 6
    ┌────┐  ┌─────────┐   ┌────┐
    │    │  ║ FOCUSED ║   │    │
    └────┘  ╚─ Glow ─╝    └────┘
            Scale: 1.06x
            Shadow: Level 4

    Item 7     Item 8     Item 9
    ┌────┐     ┌────┐     ┌────┐
    │    │     │    │     │    │
    └────┘     └────┘     └────┘

NAVIGATION DIRECTIONS:
↑ Up arrow      → Move to item above
↓ Down arrow    → Move to item below
← Left arrow    → Move to left item
→ Right arrow   → Move to right item
⊘ Select       → Activate focused item


FOCUS ANIMATION ON ARRIVAL:

Frame 1 (0ms):          Frame 2 (75ms):
┌────┐                  ╭─────╮
│    │ ← Approaching    │┌───┐│
└────┘                  ╰┤...│╯ ← Growing
                        │└───┘│
         Incoming →     ╰─────╯
         Scale: 1.0      Scale: 1.04

Frame 3 (150ms):        Frame 4 (200ms):
╭──────╮                ╭──────╮
│┌────┐│ ← Glow begins  │┌────┐│ ← Settled
╰┤    │╯    appearing   ╰┤    │╯    Glow visible
 │    │                  │    │
 └────┘                  └────┘
 Scale: 1.05            Scale: 1.04
                        ✨ Glow active
 Duration: 150ms        Focus complete

Button States & Transitions

PRIMARY BUTTON STATE MACHINE

────────────────────────────────────────
  NORMAL STATE
────────────────────────────────────────
┌─────────────────────────────┐
│  ▶ PLAY                     │  Background: #00A0D2
│                             │  Text: #FFFFFF
│  Height: 56px              │  Scale: 1.0
│  Shadow: Level 2            │  Opacity: 1.0
└─────────────────────────────┘

        ↓ onHover / onMouseEnter (200ms easeOut)

────────────────────────────────────────
  HOVER STATE (Mouse only)
────────────────────────────────────────
┌─────────────────────────────┐
│  ▶ PLAY                     │  Background: #0092BC (15% darker)
│ (slightly larger)           │  Scale: 1.02
│                             │  Shadow: Level 3
└─────────────────────────────┘

        ↓ onFocus / onKeyDown (150ms easeOut)

────────────────────────────────────────
  FOCUS STATE (Keyboard/Remote)
────────────────────────────────────────
╭─────────────────────────────╮ ← 2px white border
│ ┌─────────────────────────┐ │
│ │  ▶ PLAY                │ │  Background: #00A0D2
│ │ (enlarged, glowing)    │ │  Border: 2px #FFFFFF
│ │                        │ │  Scale: 1.05
│ └─────────────────────────┘ │  Shadow: Level 4 + glow
╰─────────────────────────────╯

        ↓ onTap / onKeyDown (100ms)

────────────────────────────────────────
  PRESSED STATE
────────────────────────────────────────
┌─────────────────────────────┐
│  ▶ PLAY                     │  Scale: 0.98 (compressed)
│ (slightly smaller)          │  Opacity: 0.9 (feedback)
│ *haptic feedback on device* │  Duration: 100ms easeOut
└─────────────────────────────┘

        ↓ onTapEnd (150ms)

────────────────────────────────────────
  RETURN TO NORMAL
────────────────────────────────────────

Card Hover & Focus States

CONTENT CARD (Movie/Show Poster)

┌──────────┐
│          │ NORMAL
│ POSTER   │ Scale: 1.0
│          │ Shadow: Level 2
│          │ Border: None
└──────────┘

    ↓ onMouseEnter (200ms easeOut)

╭─────────╮
│ POSTER  │ HOVER (Mouse)
│(scaled) │ Scale: 1.04
│ ╔════╗  │ Shadow: Level 3
│ ║    ║  │ Overlay: 15% black fade-in
│ ╚════╝  │
╰─────────╯

    ↓ onFocus (150ms easeOut)

╭═════════════╮ ← 2px border #00A0D2
│┌───────────┐│
││  POSTER  ││ FOCUS (Remote)
││ (scaled) ││ Scale: 1.06
││  ✨ Glow ││ Shadow: Level 4 + glow
│└───────────┘│ Overlay: 25% black
╰═════════════╯ ✨ Teal glow, 20px blur


ON SELECTED/FAVORITE ACTION:

┌────────────────────────────┐
│                            │ Heart appears
│  LOVED INDICATOR          │ Scale: 0 → 1.15 (spring)
│  ┌────────────────────┐    │ Duration: 250ms spring
│  │ ♥ FAVORITED       │    │ Then scale back to 1.0
│  │ (floating up)      │    │
│  └────────────────────┘    │ Celebratory spring curve
│                            │
└────────────────────────────┘

Input Field States

NORMAL STATE (Unfocused)
┌─────────────────────────────┐
│ Search shows, movies, people│ Background: #1A1A1A
│                             │ Border: 1px #3A3A3A
│ Height: 48px                │ Text: #FFFFFF
└─────────────────────────────┘ Placeholder: #666666

      ↓ onMouseEnter (200ms)

┌─────────────────────────────┐
│ Search shows, movies, people│ HOVER (Mouse)
│                             │ Background: #2A2A2A
│ Height: 48px                │ Border: 1px #4A4A4A
└─────────────────────────────┘

      ↓ onFocus (150ms easeOut)

╭─────────────────────────────╮
│ ┌───────────────────────────┐│ FOCUSED (Keyboard/Remote)
│ │ Search |                  ││ Border: 2px #00A0D2
│ │ ┬───────────────────────  ││ Glow: Teal, 12px blur
│ └──┴───────────────────────┘│ Cursor visible
│ ✨ Glow: #00A0D2            │ Helper text appears
╰─────────────────────────────╯

      ↓ Input detected

┌─────────────────────────────┐
│ Search: "matrix"            │ ACTIVE (User typing)
│                             │ Text color: #FFFFFF
│ Clear ✕ appears            │ Clear button available
└─────────────────────────────┘

      ↓ onError (completion)

╭─────────────────────────────╮
│ ┌───────────────────────────┐│ ERROR STATE
│ │ Search: "abcd..."         ││ Border: 2px #FF3B30
│ │                           ││ Glow: Red, 12px blur
│ │ ⚠ No results found        ││ Error message displayed
│ └───────────────────────────┘│
╰─────────────────────────────╯

Glass Container Visual Breakdown

WITHOUT GLASS
┌─────────────────────────┐
│                         │ Plain surface
│  Regular Container      │ boring, no depth
│                         │
└─────────────────────────┘


WITH GLASS (6% opacity blur)
╔═════════════════════════╗  ↑ Glass blur effect
║░░░░░░░░░░░░░░░░░░░░░░░║  ↑ Content visible through
║░ Glass Container ░░░░░║  ↑ 6% white top-left gradient
║░░░░░░░░░░░░░░░░░░░░░░░║  ↓ 4% white bottom-right grad
╚═════════════════════════╝  ↓ Premium border @12% white
   ↓ Shadow Level 3


GLASS IN FOCUS
╔═════════════════════════╗ ← Brighter glass (10%)
║░░░░░░░░░░░░░░░░░░░░░░░║ ← More visible content
║░ Glass (Active) ░░░░░║ ← 2px white border added
║░░░░░░░░░░░░░░░░░░░░░░░║ ← Increased blur (20px)
╚═════════════════════════╝
   ↓ Shadow Level 4 + glow
   ✨ Teal glow ring, 20px blur

Grid/Layout Components

4K TV LAYOUT (55") - 5 items per row

┌────────────────────────────────────────────────────────┐
│ 48px margin                                      48px   │
│                                                     ↓   │
│  ┌────────┐  ┌────────┐  ┌────────┐  ┌────────┐ ┌────┐│
│  │        │  │        │  │        │  │        │ │    ││
│  │ Card 1 │  │ Card 2 │  │ Card 3 │  │ Card 4 │ │Card││
│  │        │  │        │  │        │  │        │ │ 5  ││
│  │(200×300)  │(200×300)  │(200×300)  │(200×300)  │(...││
│  └────────┘  └────────┘  └────────┘  └────────┘ └────┘│
│      ↓            ↓            ↓            ↓            ↓│
│      24px gap between columns ↑            Gap: 24px     │
│                                                          │
│  ┌────────┐  ┌────────┐  ┌────────┐  ┌────────┐ ┌────┐│
│  │        │  │        │  │        │  │        │ │    ││
│  │ Card 6 │  │ Card 7 │  │ Card 8 │  │ Card 9 │ │10  ││
│  │        │  │        │  │        │  │        │ │    ││
│  └────────┘  └────────┘  └────────┘  └────────┘ └────┘│
│      ↑                                                   ↑│
│      Gap: 24px between rows ↑                     ↑48px │
│                                                          │
└────────────────────────────────────────────────────────┘

KEY MEASUREMENTS:
• Page horizontal padding: 48px
• Card width: 200px (varies per layout)
• Card aspect: 2:3 (poster) or 16:9 (landscape)
• Horizontal gap: 24px
• Vertical gap: 24px
• Item height: Auto (based on aspect)

RESPONSIVE BREAKPOINTS:
- 4K TV (55"): 5 items, 48px padding
- Full HD TV: 4 items, 32px padding
- Tablet: 3 items, 24px padding
- Mobile: 2 items, 16px padding

Focus Navigation Tree

HOME SCREEN NAVIGATION

    HEADER
    ┌─────────────────────────────────┐
    │ [⊗] XtremFlow   🔍  🔔  👤     │
    └──────────────┬────────────────┘
                   │
        ┌──────────┘
        ↓
    HERO CAROUSEL
    ╭─────────────────────────────╮
    │                             │
    │    FEATURED CONTENT         │
    │    [Play] [+ Watchlist]     │
    │                             │
    ╰──────────┬──────────────────╯
               │
        ┌──────┘
        ↓
    SECTION 1: Recommended
    ┌────┐ ┌────┐ ┌────┐ ┌────┐
    │    │ │    │ │    │ │    │  ← Focus can be on any card
    └────┘ └────┘ └────┘ └────┘
         ↓        ↓        ↓        ↓
    [Play] [Add] [Play] [Add]  ← Card actions appear on focus

        ↓ (scroll down)

    SECTION 2: Trending
    ┌────┐ ┌────┐ ┌────┐
    │    │ │    │ │    │
    └────┘ └────┘ └────┘

        ↓ (scroll down)

    SECTION 3: Channels
    ┌─────────┐ ┌─────────┐
    │ CHANNEL │ │ CHANNEL │
    │    1    │ │    2    │
    └─────────┘ └─────────┘


FOCUS PRIORITY (tvOS standard):
1. Header navigation icons (top row)
2. Hero carousel (main content area)
3. Current section cards (left-to-right, top-to-bottom)
4. Next sections below (auto-scroll into view)
5. Return to top: "Up" arrow loops to header

Accessibility Considerations

CONTRAST REQUIREMENTS (WCAG AAA for TV)

Text on Teal (#00A0D2):
#FFFFFF (white): 11.3:1 ✓ EXCEEDS AAA
#000000 (black): 7.4:1  ✓ MEETS AAA

Text on Dark Grey (#1A1A1A):
#FFFFFF (white): 15.5:1 ✓ EXCEEDS AAA
#CCCCCC (light): 7.2:1  ✓ MEETS AAA

Text on Black (#000000):
#FFFFFF (white): 21:1   ✓ EXCEEDS AAA

Minimum text sizes for TV (10 feet):
• Body text (14px+): ✓ Readable at distance
• Labels (12px):    ✓ Readable at 8-10 feet
• Captions (10px):  ✓ Barely readable at 10 feet
• Micro (9px and below): ✗ NOT recommended for TV


FOCUS INDICATOR REQUIREMENTS
• Size: minimum 4px border
• Color: High contrast (#FFFFFF or #00A0D2 on dark)
• Visibility: At least 3px separation from content
• Animation: 150-200ms entrance duration
• Persistence: Clear until focus moves


MOTION PREFERENCES
• Respect prefers-reduced-motion CSS media query
• Provide instant state change as fallback
• Critical: Don't disable all animations (impacts usability)
• Solution: Reduce duration (600ms → 200ms) instead of removing

Implementation Quick Start

Update app_colors.dart

// Primary
static const Color primary = Color(0xFF00A0D2); // ← Changed from #00D4FF
static const Color primaryDark = Color(0xFF0092BC);
static const Color primaryLight = Color(0xFF1BC4E5);

// Grey levels (keep existing, add if missing)
static const Color surfaceLevel1 = Color(0xFF1A1A1A);
static const Color surfaceLevel2 = Color(0xFF2A2A2A);
static const Color surfaceLevel3 = Color(0xFF3A3A3A);

// Remove these or deprecate:
// static const Color categoryMovies = Color(0xFF00B4E8); // Too many colors!

Update app_theme.dart - Text styles

displayLarge: GoogleFonts.outfit(
  fontSize: 64, // ← Increased from 56
  fontWeight: FontWeight.w800,
  letterSpacing: -2.0, // ← More negative
  height: 1.2, // ← Tighter for large text
  color: AppColors.textPrimary,
),

bodyLarge: GoogleFonts.inter(
  fontSize: 16,
  fontWeight: FontWeight.w400,
  letterSpacing: 0.2,
  height: 1.6, // ← Increased from 1.5 for breathing room
  color: AppColors.textSecondary,
),

Update shadow system

static List<BoxShadow> get shadowLevel2 => [
  BoxShadow(
    color: Colors.black.withOpacity(0.08),
    blurRadius: 6,
    offset: const Offset(0, 2),
  ),
];

static List<BoxShadow> get shadowLevel4 => [
  BoxShadow(
    color: Colors.black.withOpacity(0.20),
    blurRadius: 12,
    offset: const Offset(0, 8),
  ),
  BoxShadow(
    color: AppColors.primary.withOpacity(0.20),
    blurRadius: 16,
    spreadRadius: 0,
  ),
];

Testing Checklist

VISUAL REGRESSION TESTING

□ Colors
  □ Primary accent (#00A0D2) on all interactive elements
  □ Text colors match 4-tier system
  □ Grey levels visible and distinct
  □ Glass effects appear premium (not plastic)

□ Typography
  □ Display Large (64px) legible on 4K TV
  □ Body text at 16px readable at 10 feet
  □ Line heights create breathing room
  □ No text cutoff at screen edges

□ Spacing
  □ 48px minimum padding on TV layouts
  □ 24px gaps between grid items
  □ 12-16px internal card padding

□ Shadows
  □ Level 2 (cards): Subtle, barely visible
  □ Level 3 (hover): Visible elevation
  □ Level 4 (focus): Clear floating effect
  □ No crushed blacks on OLED

□ Animation
  □ Focus arrival: 150ms, smooth (no jank)
  □ Hover: 200ms easeOut
  □ Tap feedback: 100ms compressed, instant release

□ Accessibility
  □ Focus indicator visible at 10 feet
  □ All text meets WCAG AAA contrast
  □ Motion preferences respected
  □ Remote control navigation works smoothly

□ Cross-device
  □ Mobile layout uses 16px padding (OK)
  □ Tablet scales appropriately
  □ TV layout fully optimized (48px padding)
  □ No layout shift on focus changes

Troubleshooting Common Issues

ISSUE: Colors look too dull on screen vs specification
SOLUTION: Check color profile (sRGB vs wide gamut), adjust brightness

ISSUE: Focus glow not visible at distance
SOLUTION: Increase blur radius (20px → 24px), increase opacity (20% → 25%)

ISSUE: Text too small at TV distance
SOLUTION: Increase font sizes by 2-4px, ensure minimum 14px body

ISSUE: Animations feel laggy despite correct timing
SOLUTION: Check frame rate (aim for 60fps), reduce animation duration

ISSUE: Cards feel cramped
SOLUTION: Increase spacing from 16px → 20-24px, increase card padding

ISSUE: Glass containers look plasticky
SOLUTION: Reduce opacity (8% → 6%), ensure blur is crisp (15px)

ISSUE: Focus state not clear enough
SOLUTION: Add border (2px white), increase glow radius, scale up (1.06x)

ISSUE: Buttons too small for remote navigation
SOLUTION: Increase height to min 56px, increase hit target to 60×60px

ISSUE: Shadow appears crushed on dark backgrounds
SOLUTION: Use lighter black opacity (0.15 instead of 0.25) or adjust blur