# GAZE Gallery Enhancement Plan

## Executive Summary

This plan outlines a comprehensive enhancement to the GAZE Image Gallery, transforming it from a basic grid-and-lightbox viewer into an immersive, multi-modal viewing experience. The enhancement introduces **three major feature categories**: Slideshow Modes, Image Wall Layouts, and Interactive Viewing Tools.

---

## Current State Analysis

### Existing Implementation

| Component | Current State | File Location |
|-----------|--------------|---------------|
| Grid View | Auto-fill grid, 160-210px cards, hover overlays | [`templates/gallery.html`](templates/gallery.html:88) |
| Lightbox | Bootstrap modal, arrow navigation, keyboard support | [`templates/layout.html`](templates/layout.html:123) |
| Filtering | Category, item, sort, pagination | [`templates/gallery.html`](templates/gallery.html:11) |
| Metadata | Prompt modal with LoRA chips, generation params | [`templates/gallery.html`](templates/gallery.html:194) |

### Design System Variables

```css
/* From static/style.css — these will guide our new components */
--bg-base:      #07070f;
--bg-card:      #0c0c1c;
--accent:       #8b7eff;
--accent-glow:  rgba(139, 126, 255, 0.14);
--border:       #16163a;
--text:         #e8e8f5;
--text-muted:   #6a6a9a;
--radius:       12px;
--font-display: 'Space Grotesk';
--font-body:    'Inter';
```

---

## Architecture Overview

```mermaid
graph TB
    subgraph Gallery Page
        A[View Mode Selector] --> B[Grid View]
        A --> C[Masonry View]
        A --> D[Justified View]
        A --> E[Collage View]
    end

    subgraph Viewer Modes
        F[Cinema Slideshow] 
        G[Classic Slideshow]
        H[Showcase Frame]
        I[Comparison Mode]
        J[Discovery Mode]
        K[Ambient Screensaver]
    end

    subgraph Core Engine
        L[GalleryController]
        M[ImageLoader - lazy/preload]
        N[TransitionEngine]
        O[MetadataProvider]
    end

    B & C & D & E --> L
    L --> F & G & H & I & J & K
    L --> M
    L --> N
    L --> O
```

---

## Feature Specifications

### 1. View Mode Selector

A floating toolbar that allows switching between gallery layouts.

**UI Design:**
```
┌─────────────────────────────────────────────────────────────┐
│ [≡ Grid] [◫ Masonry] [▬ Justified] [◱ Collage]  │  [▶ Slideshow ▾]  │
└─────────────────────────────────────────────────────────────┘
```

**Slideshow Dropdown:**
```
┌──────────────────┐
│ 🎬 Cinema        │
│ ⏯ Classic       │
│ 🖼 Showcase      │
│ ⚡ Discovery     │
│ 🌌 Ambient       │
│ ⚖ Comparison    │
└──────────────────┘
```

---

### 2. Image Wall Layouts

#### 2.1 Masonry Layout (Pinterest-style)

Variable height columns that create a waterfall effect.

```
┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐
│      │ │      │ │      │ │      │
│  1   │ │  2   │ │      │ │  4   │
│      │ └──────┘ │  3   │ │      │
└──────┘ ┌──────┐ │      │ └──────┘
┌──────┐ │      │ │      │ ┌──────┐
│  5   │ │  6   │ └──────┘ │      │
└──────┘ │      │ ┌──────┐ │  8   │
┌──────┐ └──────┘ │  7   │ │      │
│  9   │ ┌──────┐ └──────┘ └──────┘
└──────┘ │  10  │
         └──────┘
```

**Technical Approach:**
- CSS columns or CSS Grid with `grid-auto-rows: 1px` and `span` calculation
- JavaScript to calculate optimal column count based on viewport
- Preserve natural aspect ratios of images
- Lazy loading with Intersection Observer

**CSS Variables:**
```css
--masonry-column-width: 280px;
--masonry-gap: 12px;
--masonry-min-columns: 2;
--masonry-max-columns: 6;
```

#### 2.2 Justified Layout (Google Photos-style)

Rows with perfect edge alignment, variable widths.

```
┌────────────┬──────────┬─────────────────┐
│     1      │    2     │        3        │
└────────────┴──────────┴─────────────────┘
┌─────────────────┬────────────┬─────────┐
│        4        │     5      │    6    │
└─────────────────┴────────────┴─────────┘
┌──────────┬─────────────────┬───────────┐
│    7     │        8        │     9     │
└──────────┴─────────────────┴───────────┘
```

**Technical Approach:**
- Linear partition algorithm to distribute images across rows
- Target row height with flex-grow distribution
- Smart breakpoints based on aspect ratios
- Each row is a flex container

**Configuration:**
```javascript
{
  targetRowHeight: 240,
  minRowHeight: 180,
  maxRowHeight: 320,
  containerPadding: 16,
  imageSpacing: 8
}
```

#### 2.3 Collage Layout (Magazine-style)

Creative mixed-size layout with featured images.

```
┌───────────────────┬─────────┐
│                   │    2    │
│        1          ├─────────┤
│    FEATURED       │    3    │
│                   ├─────────┤
├─────────┬─────────┤    4    │
│    5    │    6    │         │
└─────────┴─────────┴─────────┘
```

**Technical Approach:**
- CSS Grid with named areas
- Template patterns that rotate/cycle
- Special "featured" designation based on:
  - User favorites (if implemented)
  - Most recent
  - Random selection
- Subtle rotation transforms (-2° to +2°) on some tiles
- Optional overlap with z-index layering

**Template Patterns:**
```javascript
const collagePatterns = [
  'hero-right',   // Large left, stack right
  'hero-left',    // Stack left, large right
  'hero-center',  // Center featured, corners fill
  'magazine',     // Asymmetric editorial style
  'scattered'     // Random positions with overlap
];
```

---

### 3. Slideshow Modes

#### 3.1 Cinema Mode

Full-screen immersive experience with cinematic effects.

**Features:**
- **Ambient glow**: Extract dominant colors from image, project as soft backdrop glow
- **Ken Burns effect**: Subtle pan/zoom animation on images
- **Vignette overlay**: Soft dark edges for focus
- **Particle system**: Optional floating light particles/orbs
- **Audio reactive**: Optional ambient music visualization (future)

**Visual Design:**
```
┌─────────────────────────────────────────────────────────────────┐
│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│
│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│
│░░░░░░┌─────────────────────────────────────────────┐░░░░░░░░░░░░│
│░░░░░░│                                             │░░░░░░░░░░░░│
│░░░░░░│              [Image with Ken Burns]         │░░░░░░░░░░░░│
│░░░░░░│                                             │░░░░░░░░░░░░│
│░░░░░░│                                             │░░░░░░░░░░░░│
│░░░░░░└─────────────────────────────────────────────┘░░░░░░░░░░░░│
│░░░░░░░░░░░░░░░░░░░ ● ● ● ○ ○ ○ ○ ○ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│
│░░░░░░░░░░░░░░░░░░░░░ 4 / 24  ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│
│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│
│░░░░ = Ambient glow from image colors ░░░░░░░░░░░░░░░░░░░░░░░░░░░│
└─────────────────────────────────────────────────────────────────┘
```

**Controls (appear on hover/touch):**
```
┌─────────────────────────────────────────────────────────────────┐
│  ⏮  ⏯  ⏭   │   ⏱ 5s ▾   │   🔀 Shuffle   │   ℹ Info   │   ✕   │
└─────────────────────────────────────────────────────────────────┘
```

**Ken Burns Patterns:**
```javascript
const kenBurnsPatterns = [
  { start: 'scale(1) translate(0, 0)', end: 'scale(1.15) translate(-3%, -2%)' },
  { start: 'scale(1.1) translate(-5%, 0)', end: 'scale(1) translate(0, 0)' },
  { start: 'scale(1) translate(0, 5%)', end: 'scale(1.12) translate(2%, -3%)' },
  // ... more patterns
];
```

**Ambient Glow Implementation:**
```javascript
// Use canvas to extract dominant colors
async function extractAmbientColors(imageSrc) {
  const canvas = document.createElement('canvas');
  const ctx = canvas.getContext('2d');
  const img = await loadImage(imageSrc);
  
  canvas.width = 50;  // Downscale for performance
  canvas.height = 50;
  ctx.drawImage(img, 0, 0, 50, 50);
  
  const imageData = ctx.getImageData(0, 0, 50, 50);
  // Quantize colors and find dominant clusters
  return dominantColors(imageData); // Returns [primary, secondary, accent]
}
```

#### 3.2 Classic Slideshow

Clean, professional presentation mode.

**Features:**
- Multiple transition types: fade, slide, zoom, cube
- Progress bar or dot indicators
- Timer controls (3s, 5s, 8s, 15s, manual)
- Loop toggle
- Random/sequential order

**UI:**
```
┌─────────────────────────────────────────────────────────────────┐
│                                                                 │
│                                                                 │
│                       ┌───────────────┐                         │
│            ◀          │               │           ▶             │
│                       │     IMAGE     │                         │
│                       │               │                         │
│                       └───────────────┘                         │
│                                                                 │
│                         ● ● ● ○ ○ ○ ○                           │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│ │
│ └─────────────────────────────────────────────────────────────┘ │
│           ⏮    ⏯    ⏭        🔀 Shuffle    ⏱ 5s    ✕           │
└─────────────────────────────────────────────────────────────────┘
```

**Transitions CSS:**
```css
.slide-transition-fade { transition: opacity 0.8s ease; }
.slide-transition-slide { transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1); }
.slide-transition-zoom { transition: transform 0.7s ease, opacity 0.7s ease; }
.slide-transition-cube { 
  transform-style: preserve-3d;
  perspective: 1000px;
  transition: transform 0.8s ease;
}
```

#### 3.3 Showcase Frame Mode

Digital picture frame aesthetic with metadata.

**Features:**
- Image displayed with decorative frame/mat
- Metadata panel (character name, category, date)
- Ambient room simulation (optional)
- Clock widget (optional)
- Subtle animations

**Layout:**
```
┌─────────────────────────────────────────────────────────────────┐
│                                                                 │
│      ╔══════════════════════════════════════════════╗           │
│      ║ ┌──────────────────────────────────────────┐ ║           │
│      ║ │                                          │ ║           │
│      ║ │                                          │ ║           │
│      ║ │               IMAGE                      │ ║           │
│      ║ │                                          │ ║           │
│      ║ │                                          │ ║           │
│      ║ └──────────────────────────────────────────┘ ║           │
│      ╚══════════════════════════════════════════════╝           │
│                                                                 │
│      Character: Luna Eclipse                                    │
│      Category: characters  •  Style: anime                      │
│      Created: March 8, 2026                                     │
│                                                          12:34  │
└─────────────────────────────────────────────────────────────────┘
```

**Frame Styles:**
```javascript
const frameStyles = [
  'minimal',      // Thin elegant border
  'classic',      // Traditional wooden frame look
  'modern',       // Thick black mat, thin metal frame
  'gallery',      // White mat, thin black frame
  'floating',     // Shadow box effect
  'none'          // No frame, edge-to-edge
];
```

#### 3.4 Discovery Mode (Random Shuffle)

Explore your collection with serendipity.

**Features:**
- Random image selection with no repeats until all shown
- "Like" button to save favorites (session-based)
- Quick category jump
- Surprise effects (occasional zoom, pan variations)
- Stats display ("You've discovered 47 of 234 images")

**Controls:**
```
┌─────────────────────────────────────────────────────────────────┐
│                         ⚡ DISCOVERY MODE                        │
│                                                                 │
│                      ┌───────────────────┐                      │
│                      │                   │                      │
│                      │      IMAGE        │                      │
│                      │                   │                      │
│                      └───────────────────┘                      │
│                                                                 │
│            ❤️ Like          🔀 Next Random          ⏯ Auto       │
│                                                                 │
│            Discovered: 47 / 234  ━━━━━━━░░░░░░░░░░░░            │
│                                                                 │
│  Quick jump:  [Characters] [Actions] [Outfits] [Scenes] [All]  │
└─────────────────────────────────────────────────────────────────┘
```

#### 3.5 Ambient Screensaver Mode

Artistic background display with effects.

**Features:**
- Fullscreen with auto-hide UI
- Particle effects (floating light orbs, subtle sparkles)
- Slow crossfade transitions (10-30 seconds)
- Color-matched gradient backgrounds
- Clock overlay option
- Wake on mouse move

**Particle System:**
```javascript
const particleConfig = {
  count: 50,
  colors: ['#8b7eff', '#c084fc', '#60a5fa', '#ffffff'],
  minSize: 2,
  maxSize: 8,
  speed: 0.3,
  opacity: [0.1, 0.6],
  blur: [0, 4],
  drift: true  // Slight random movement
};
```

**Visual Effect:**
```
┌─────────────────────────────────────────────────────────────────┐
│  ·                                    ·                      ·  │
│         ·               ·                     ·                 │
│   ·              ┌─────────────────┐                   ·        │
│        ·         │                 │      ·                     │
│   ·              │     IMAGE       │              ·       ·     │
│                  │                 │    ·                       │
│      ·           └─────────────────┘           ·                │
│  ·         ·              ·               ·              ·      │
│                 ·                    ·            ·             │
│                                                         12:34  │
│  · = floating light particles                                   │
└─────────────────────────────────────────────────────────────────┘
```

#### 3.6 Comparison Mode

Side-by-side or overlay comparison.

**Features:**
- Two image selection
- Slider overlay (before/after style)
- Side-by-side split
- Onion skin overlay (opacity blend)
- Difference highlight mode
- Zoom sync (both images zoom together)

**Layouts:**
```
SLIDER MODE:                    SPLIT MODE:
┌─────────────────────────────┐ ┌───────────┬───────────┐
│            │                │ │           │           │
│  IMAGE A   │    IMAGE B     │ │  IMAGE A  │  IMAGE B  │
│            │                │ │           │           │
│      ◄═══|═══►             │ │           │           │
│            │                │ │           │           │
└─────────────────────────────┘ └───────────┴───────────┘

ONION SKIN:                     DIFFERENCE:
┌─────────────────────────────┐ ┌─────────────────────────────┐
│                             │ │                             │
│   IMAGE A + B BLENDED       │ │   PIXEL DIFFERENCE VIEW     │
│                             │ │   (highlights changes)      │
│   Opacity: ●━━━━━━━○        │ │                             │
│                             │ │                             │
└─────────────────────────────┘ └─────────────────────────────┘
```

---

### 4. Enhanced Lightbox Viewer

Upgrade the existing lightbox with professional features.

#### 4.1 Zoom & Pan Controls

**Features:**
- Mouse wheel zoom
- Double-click to fit/fill toggle
- Click-and-drag panning when zoomed
- Pinch-to-zoom on touch devices
- Zoom level indicator
- Reset button

**Implementation:**
```javascript
class ZoomPanController {
  constructor(element) {
    this.scale = 1;
    this.translateX = 0;
    this.translateY = 0;
    this.minScale = 0.5;
    this.maxScale = 5;
  }
  
  handleWheel(e) {
    const delta = e.deltaY > 0 ? 0.9 : 1.1;
    const newScale = Math.min(this.maxScale, Math.max(this.minScale, this.scale * delta));
    // Zoom toward cursor position
    this.zoomToPoint(newScale, e.clientX, e.clientY);
  }
  
  handleDrag(e) {
    if (this.scale > 1) {
      this.translateX += e.movementX;
      this.translateY += e.movementY;
      this.applyTransform();
    }
  }
}
```

#### 4.2 Info Overlay Panel

Slide-out panel with image details.

```
┌─────────────────────────────────────────────────────────────────┐
│                                                    ┌───────────┐│
│                                                    │ℹ INFO     ││
│                                                    ├───────────┤│
│            ┌─────────────────────┐                 │           ││
│            │                     │                 │ Luna      ││
│            │       IMAGE         │                 │ Eclipse   ││
│            │                     │                 │           ││
│            │                     │                 │ Category: ││
│            └─────────────────────┘                 │ characters││
│                                                    │           ││
│                                                    │ Actions:  ││
│                                                    │ standing  ││
│                                                    │           ││
│                                                    │ [Prompt]  ││
│                                                    │ [Generate]││
│                                                    └───────────┘│
└─────────────────────────────────────────────────────────────────┘
```

#### 4.3 Thumbnail Strip

Quick navigation with visual preview.

```
┌─────────────────────────────────────────────────────────────────┐
│                                                                 │
│                     ┌─────────────────┐                         │
│                     │                 │                         │
│                     │     MAIN        │                         │
│                     │     IMAGE       │                         │
│                     │                 │                         │
│                     └─────────────────┘                         │
│                                                                 │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ ▢ ▢ ▢ [▣] ▢ ▢ ▢ ▢ ▢ ▢ ▢ ▢ ▢ ▢ ▢ ▢ ▢ ▢ ▢ ▢ ▢ ▢ ▢ ▢ ▢ ▢ ▢ ▢ │ │
│ └─────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
```

---

### 5. Keyboard Shortcuts

| Key | Action |
|-----|--------|
| `←` / `→` | Previous / Next image |
| `↑` / `↓` | Zoom in / out |
| `Space` | Toggle slideshow play/pause |
| `F` | Toggle fullscreen |
| `I` | Toggle info panel |
| `G` | Open grid view |
| `M` | Toggle masonry view |
| `S` | Start slideshow |
| `C` | Enter comparison mode |
| `R` | Random image |
| `Esc` | Close viewer / exit fullscreen |
| `1-5` | Set slideshow speed preset |
| `+` / `-` | Zoom in / out |
| `0` | Reset zoom |

---

### 6. Mobile & Touch Optimization

**Gestures:**
- **Swipe left/right**: Navigate images
- **Swipe up**: Show info panel
- **Swipe down**: Close viewer
- **Pinch**: Zoom
- **Double-tap**: Toggle fit/fill
- **Long press**: Show context menu

**Responsive Breakpoints:**
```css
/* Mobile - single column, touch optimized */
@media (max-width: 576px) { }

/* Tablet - 2-3 columns */
@media (min-width: 577px) and (max-width: 991px) { }

/* Desktop - 4-6 columns */
@media (min-width: 992px) { }

/* Large displays - up to 8 columns */
@media (min-width: 1400px) { }
```

---

## File Structure

```
static/
├── style.css                 # Add gallery enhancement styles
├── js/
│   └── gallery/
│       ├── gallery-core.js        # Main controller
│       ├── layout-masonry.js      # Masonry layout engine
│       ├── layout-justified.js    # Justified layout engine
│       ├── layout-collage.js      # Collage layout engine
│       ├── slideshow-cinema.js    # Cinema mode
│       ├── slideshow-classic.js   # Classic slideshow
│       ├── slideshow-showcase.js  # Showcase frame
│       ├── mode-discovery.js      # Discovery mode
│       ├── mode-ambient.js        # Ambient screensaver
│       ├── mode-comparison.js     # Comparison mode
│       ├── viewer-zoom.js         # Zoom/pan controller
│       ├── effects-particles.js   # Particle system
│       ├── effects-ambient.js     # Ambient color extraction
│       └── effects-kenburns.js    # Ken Burns animations
│
templates/
├── gallery.html              # Enhanced with view mode selector
└── partials/
    └── gallery-viewer.html   # New standalone viewer partial
```

---

## Implementation Phases

### Phase 1: Foundation
- [ ] Create gallery core controller class
- [ ] Implement view mode selector UI
- [ ] Add masonry layout with lazy loading
- [ ] Enhanced lightbox with zoom/pan
- [ ] Keyboard shortcut system

### Phase 2: Layouts
- [ ] Justified gallery layout
- [ ] Collage layout with templates
- [ ] Thumbnail strip navigation
- [ ] Mobile swipe gestures

### Phase 3: Slideshows
- [ ] Classic slideshow with transitions
- [ ] Cinema mode with ambient glow
- [ ] Ken Burns effect engine
- [ ] Showcase frame mode

### Phase 4: Advanced Features
- [ ] Discovery mode with favorites
- [ ] Comparison mode slider
- [ ] Ambient screensaver with particles
- [ ] Info panel with metadata

### Phase 5: Polish
- [ ] Performance optimization
- [ ] Accessibility improvements
- [ ] Settings persistence
- [ ] Documentation

---

## Technical Considerations

### Performance
- Use `IntersectionObserver` for lazy loading
- Preload next 2 images in slideshow
- Use `requestAnimationFrame` for animations
- Debounce resize handlers
- Use CSS transforms instead of layout properties
- Consider web workers for color extraction

### Browser Support
- Modern browsers (Chrome, Firefox, Safari, Edge)
- CSS Grid and Flexbox required
- Fullscreen API
- Intersection Observer API
- Web Animations API preferred

### Accessibility
- ARIA labels on all controls
- Focus management in modals
- Reduced motion preference respected
- Screen reader announcements for image changes
- Keyboard navigation throughout

---

## CSS Variables for Gallery Enhancement

```css
/* Gallery Enhancement Variables */
:root {
  /* Layouts */
  --gallery-gap: 8px;
  --gallery-card-radius: 12px;
  --gallery-masonry-width: 280px;
  --gallery-justified-height: 240px;
  
  /* Viewer */
  --viewer-bg: rgba(0, 0, 0, 0.97);
  --viewer-accent: var(--accent);
  --viewer-transition: 0.3s ease;
  
  /* Slideshow */
  --slideshow-interval: 5000;
  --kenburns-duration: 8000;
  --transition-duration: 800;
  
  /* Effects */
  --ambient-blur: 100px;
  --ambient-opacity: 0.3;
  --particle-count: 50;
  --vignette-opacity: 0.4;
  
  /* Frames */
  --frame-color-light: #f5f5f5;
  --frame-color-dark: #1a1a2e;
  --mat-width: 40px;
}
```

---

## Mockup: Cinema Mode

```
╔═══════════════════════════════════════════════════════════════════════╗
║▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓║
║▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓║
║▓▓▓▓▓░░░░░░                                                ░░░░░▓▓▓▓▓▓║
║▓▓░░░░░                                                        ░░░░▓▓▓║
║▓░░░░               ╭─────────────────────────────╮                ░░░▓║
║░░░░                │                             │                  ░░║
║░░                  │                             │                   ░║
║░                   │         ★ IMAGE ★           │                   ░║
║░                   │                             │                   ░║
║░                   │                             │                   ░║
║░░                  │                             │                  ░░║
║░░░                 ╰─────────────────────────────╯                 ░░░║
║▓░░░░                                                              ░░▓▓║
║▓▓░░░░░                    •   •   •   ○   ○                    ░░░░▓▓▓║
║▓▓▓▓░░░░░░░                  4 / 24                        ░░░░░▓▓▓▓▓▓║
║▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓▓▓▓▓║
║▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓║
╚═══════════════════════════════════════════════════════════════════════╝

Legend:
▓ = Darkest vignette
░ = Ambient glow (color-matched to image)
★ = Image with Ken Burns animation
• = Active indicator, ○ = Inactive

Controls appear on hover:
 ┌──────────────────────────────────────────────────────────────────────┐
 │   ⏮ │ ⏸ │ ⏭   │   ⏱ 5s ▾   │   🔀 Shuffle   │   ℹ️ Info   │   ✕    │
 └──────────────────────────────────────────────────────────────────────┘
```

---

## Next Steps

1. **Review and approve** this plan
2. **Prioritize features** for MVP
3. **Begin Phase 1** implementation
4. **Iterate** based on feedback

Would you like me to proceed with implementation, or would you like to adjust any aspects of this plan?
