+settings
+
+
+
\ No newline at end of file
diff --git a/docs/ui-mockups/daily-challenge-mobile.png b/docs/ui-mockups/daily-challenge-mobile.png
new file mode 100644
index 0000000..3c65fc0
Binary files /dev/null and b/docs/ui-mockups/daily-challenge-mobile.png differ
diff --git a/docs/ui-mockups/design-system.md b/docs/ui-mockups/design-system.md
new file mode 100644
index 0000000..ea45e4d
--- /dev/null
+++ b/docs/ui-mockups/design-system.md
@@ -0,0 +1,278 @@
+---
+name: Terminal
+colors:
+ surface: '#151515'
+ surface-dim: '#0d0d0d'
+ surface-bright: '#2a2a2a'
+ surface-container-lowest: '#0a0a0a'
+ surface-container-low: '#1a1a1a'
+ surface-container: '#202020'
+ surface-container-high: '#2a2a2a'
+ surface-container-highest: '#353535'
+ on-surface: '#d0d0d0'
+ on-surface-variant: '#a0a0a0'
+ inverse-surface: '#d0d0d0'
+ inverse-on-surface: '#151515'
+ outline: '#505050'
+ outline-variant: '#353535'
+ surface-tint: '#6fc2ef'
+ primary: '#6fc2ef'
+ on-primary: '#151515'
+ primary-container: '#1f3a4a'
+ on-primary-container: '#a8dcf5'
+ inverse-primary: '#0e6e99'
+ secondary: '#acc267'
+ on-secondary: '#151515'
+ secondary-container: '#2a3320'
+ on-secondary-container: '#c5d585'
+ tertiary: '#e1a3ee'
+ on-tertiary: '#151515'
+ tertiary-container: '#3a2a40'
+ on-tertiary-container: '#eec3f5'
+ error: '#fb9fb1'
+ on-error: '#151515'
+ error-container: '#4a2530'
+ on-error-container: '#fdc3ce'
+ background: '#151515'
+ on-background: '#d0d0d0'
+ surface-variant: '#353535'
+ suit-red: '#fb9fb1'
+ suit-black: '#d0d0d0'
+ suit-red-cb: '#6fc2ef'
+ highlight-valid: '#acc267'
+ highlight-celebration: '#e1a3ee'
+ highlight-warning: '#ddb26f'
+ highlight-info: '#12cfc0'
+typography:
+ hud-score:
+ fontFamily: JetBrains Mono
+ fontSize: 24px
+ fontWeight: '700'
+ lineHeight: 32px
+ letterSpacing: '-0.02em'
+ hud-timer:
+ fontFamily: JetBrains Mono
+ fontSize: 16px
+ fontWeight: '400'
+ lineHeight: 24px
+ card-rank:
+ fontFamily: JetBrains Mono
+ fontSize: 18px
+ fontWeight: '700'
+ lineHeight: 18px
+ body-md:
+ fontFamily: Inter
+ fontSize: 16px
+ fontWeight: '400'
+ lineHeight: 24px
+ label-caps:
+ fontFamily: JetBrains Mono
+ fontSize: 12px
+ fontWeight: '500'
+ lineHeight: 16px
+ letterSpacing: '0.08em'
+ headline:
+ fontFamily: JetBrains Mono
+ fontSize: 28px
+ fontWeight: '700'
+ lineHeight: 32px
+ letterSpacing: '-0.01em'
+rounded:
+ sm: 0.125rem
+ DEFAULT: 0.25rem
+ md: 0.5rem
+ lg: 0.75rem
+ xl: 1rem
+ full: 9999px
+spacing:
+ margin-edge: 1rem
+ gutter-card: 0.375rem
+ stack-overlap: 2rem
+ touch-target-min: 48dp
+---
+
+## Brand & Style
+
+The "Terminal" design system replaces the previous "Premium Solitaire" calm-indie aesthetic with a **retro-terminal / synthwave** identity. The intent is the visual confidence of a well-tuned terminal emulator (think Berkeley Mono dotfiles, base16-eighties, CRT phosphor): monospaced, dense, legible, snappy. It is *not* casino-glitz, *not* skeuomorphic felt, and *not* whimsical.
+
+The personality is **technical, deliberate, slightly playful**. Cards are flat with thin colored strokes; the HUD reads like a status bar; modals look like terminal panes. Motion is short and snap-easing — no bouncy springs. Long-session calm is preserved by keeping the chroma low and reserving saturated accents for *meaning* (CTAs, feedback, celebrations) rather than decoration.
+
+Influences: base16-eighties (Chris Kempson), Berkeley Mono, Vim/Neovim status lines, the iA Writer aesthetic, classic CRT phosphor with no chromatic aberration.
+
+## Palette
+
+The palette is base16-eighties — a 16-slot terminal palette where indices 00–07 form a monochrome ramp and 08–0F provide saturated accents. We map base16 slots to Material Design 3 token roles below.
+
+### Source palette (base16-eighties)
+
+| Slot | Hex | Role |
+|---|---|---|
+| base00 | `#151515` | background |
+| base01 | `#202020` | surface-container |
+| base02 | `#303030` | line-highlight (subtle) |
+| base03 | `#505050` | outline / muted text |
+| base04 | `#b0b0b0` | secondary text |
+| base05 | `#d0d0d0` | foreground / on-surface |
+| base06 | `#e0e0e0` | bright text |
+| base07 | `#f5f5f5` | brightest highlight |
+| base08 | `#fb9fb1` | red — used for `error`, `suit-red` |
+| base09 | `#ddb26f` | orange — used for warning chips |
+| base0A | `#acc267` | yellow/lime — used for `highlight-valid` (drag targets, valid moves) |
+| base0B | `#12cfc0` | green/teal — used for `highlight-info` (toasts, neutral status) |
+| base0C | `#6fc2ef` | cyan/sky — primary CTA, focus ring, `selection`, `suit-red-cb` (color-blind tinted red) |
+| base0D | `#6fc2ef` | (alias) |
+| base0E | `#e1a3ee` | violet — used for celebration (level-up, achievement unlock) |
+| base0F | `#fb9fb1` | (alias) |
+
+### Semantic assignments
+
+- **CTA / Primary action**: cyan `#6fc2ef`. Reserved for "Play," "New Game," "Save," "Resume," and the focus ring on selected cards. Never used decoratively.
+- **Valid-move / drag-target highlight**: lime `#acc267`. Reserved for in-game feedback only. Never appears in chrome.
+- **Celebration**: lavender `#e1a3ee`. Used for level-up flashes, achievement unlock cards, and the daily-streak chip when the streak is active. Quiet otherwise.
+- **Warning / soft alert**: gold `#ddb26f`. Used for "challenge expires in N minutes" chips, sync-pending status, and the daily-seed countdown.
+- **Info**: teal `#12cfc0`. Used for neutral system toasts and the sync-connected indicator.
+- **Error**: pink `#fb9fb1`. Used for sync conflict, server unreachable, invalid move shake.
+
+## Suit Colors
+
+**Two-color traditional mapping**, with mandatory color-blind support:
+
+| Suit | Default | Color-blind mode | Glyph differentiation |
+|---|---|---|---|
+| Hearts | `#fb9fb1` (pink) | `#6fc2ef` (cyan) | Solid filled glyph |
+| Diamonds | `#fb9fb1` (pink) | `#6fc2ef` (cyan) | **Outlined glyph (1.5px stroke)** |
+| Spades | `#d0d0d0` (foreground) | `#d0d0d0` | Solid filled glyph |
+| Clubs | `#d0d0d0` (foreground) | `#d0d0d0` | **Outlined glyph (1.5px stroke)** |
+
+The outlined-glyph treatment is the **primary** differentiation mechanism. Color is supplementary. This means a player viewing the game on a monochrome display, or with severe red-green deficiency, can still distinguish all four suits without context. This is a hard requirement, not an optional setting.
+
+The "color-blind mode" toggle in Settings only swaps red→cyan; it does not turn the outlined glyphs on or off, because outlined glyphs are always on.
+
+## Typography
+
+**Monospace-forward, dual-font system.**
+
+- **JetBrains Mono** is used for: HUD (score, timer, moves), card rank/value text, all labels, all headlines, all numerals anywhere in the app, and any chip-style component. This is the dominant face.
+- **Inter** is used only for: long-form body copy (Help screen, Settings descriptions, achievement tooltips, onboarding copy). It is the *exception*, not the default.
+
+Weights: 400 regular, 500 medium for labels, 700 bold for HUD numbers and headlines. No 600 / no italics anywhere — the terminal aesthetic doesn't have them.
+
+Letter spacing: tight (`-0.02em`) on HUD score for visual mass; wide (`+0.08em`) on uppercase labels for readability at 12px. Body uses default (0).
+
+HUD numbers must use **tabular figures** (`font-feature-settings: 'tnum'`) so the timer and score don't reflow as digits change.
+
+## Layout & Spacing
+
+Optimized for **Android portrait, 390×844 (Pixel 6 baseline), API 34**.
+
+- **Margins**: 16px (1rem) edge safety margin. *Tighter than the previous system's 24px.* Eighties palettes are dense by nature; over-padding fights the aesthetic.
+- **Tableau**: 7-column layout, 32px (2rem) vertical card overlap. Tighter than before to fit a longer cascade on phone screens.
+- **HUD position**: top of screen, in the system safe area. Bottom 64px holds the action bar (Undo / Hint / New Game / Auto-complete). Action bar is **always visible** in-game — no hover-fade — because there is no hover on touch.
+- **Touch target minimum**: 48dp on all interactive elements. Cards in the tableau may be smaller visually but use a 48dp invisible hit area centered on the visible glyph.
+
+## Elevation & Depth
+
+Depth is created through **tonal layering and 1px outlines**, not blur shadows. (Synthwave-flat, not Material-soft.)
+
+- **Level 0 (Background)**: the `#151515` base canvas.
+- **Level 1 (Tableau slots, empty piles)**: 1px dashed outline in `#353535`. Empty foundations show a faint suit glyph at 12% opacity inside the outline.
+- **Level 2 (Cards at rest)**: solid `#1a1a1a` fill, 1px solid border in the suit color (so the suit is detectable at a glance even if the card is partially obscured).
+- **Level 3 (Active / dragged card)**: same border, but glow effect: 0 0 12px of `#6fc2ef` at 40% opacity. **No scale transform** — flatness preserved. Z-index lifts above siblings.
+- **Modals**: full-screen with backdrop `#151515` at 95% opacity (just enough to dim the table without blurring it). Modal panel is `#202020` with a 1px `#505050` border — like a terminal pane.
+- **Toasts**: bottom of screen, `#202020` fill, 1px border in the toast's accent color (info=teal, warning=gold, error=pink, celebration=lavender). 16px monospaced caption.
+
+No `box-shadow` is used anywhere. **All depth is achieved with borders and tonal value.** This is a hard constraint.
+
+## Shapes
+
+The shape language is **soft-rounded but tight**:
+
+- **Cards**: `rounded-md` (8px) — slightly less rounded than the previous system's 16px to read more "technical."
+- **Buttons / chips / inputs**: `rounded` (4px) default, `rounded-sm` (2px) for the smallest chips.
+- **Modals / sheets**: `rounded-lg` (12px).
+- **Avatars / circular indicators**: `rounded-full`.
+- **Card-back pattern corners**: matches the card's `rounded-md`.
+
+Selection highlights use a **2px inset stroke** in `#6fc2ef` following the host shape's corner radius. Never an outer stroke — the outer stroke is reserved for the suit-color hairline.
+
+## Motion
+
+**Snappy, no spring.** All transitions use `ease-out` with a 120ms duration unless specified.
+
+- Card lift (start drag): 80ms.
+- Card place (drop): 120ms with a 16ms holdframe (no bounce).
+- Modal enter: 200ms ease-out, fade + 8px translate-up.
+- Modal exit: 120ms ease-in, fade only.
+- Selection ring appear: 80ms.
+- Win-summary stat reveal: 60ms each, staggered 40ms.
+- HUD number tick: instant (no transition) — terminal counters don't ease.
+
+**Optional CRT effect**: a 1-frame scanline sweep across the screen on game-state transitions (start, win, restart). User-toggleable in Settings. Off by default.
+
+## Components
+
+### Game Cards
+
+Flat face design.
+- Background: `#1a1a1a`
+- Border: 1px solid in suit color (pink for hearts/diamonds, foreground gray for spades/clubs)
+- Top-left: rank in JetBrains Mono Bold 18px + small suit glyph (10px)
+- Bottom-right: large suit glyph (32px), rotated 180°
+- Corner radius: 8px
+- Suit differentiation: hearts and spades have **filled** glyphs; diamonds and clubs have **outlined** glyphs (1.5px stroke)
+
+### Card Back ("Terminal" theme)
+
+- Theme name: `"Terminal"`
+- Author: `"Rusty Solitaire"`
+- Background: `#151515`
+- Pattern: horizontal scanlines at 2px pitch in `#1a1a1a` (1px line, 1px gap), full bleed
+- Border: 1px solid `#353535`
+- Top-left badge: a 12×16px solid `#6fc2ef` block (the "terminal cursor"), 6px from the corner
+- Bottom-right monogram: the characters `▌RS` in JetBrains Mono 12px, color `#505050`, 6px from the corner
+- Corner radius: 8px (matches face)
+
+### Primary Buttons
+
+Solid `#6fc2ef` fill, `#151515` text, JetBrains Mono Medium 14px uppercase with `+0.08em` tracking. 4px corner radius. Pressed state: darken to `#5aa9d4`. Disabled: `#353535` fill, `#505050` text.
+
+### Secondary Buttons
+
+Transparent fill, 1px `#505050` border, `#d0d0d0` text. Hover/press: border becomes `#6fc2ef`, text becomes `#6fc2ef`.
+
+### HUD Chips
+
+`#202020` fill, no border, 4px radius. Monospaced 16px text. Score chip pulses to `#acc267` for 200ms when score increases.
+
+### Drag Targets
+
+When a card is being dragged over a valid pile, the pile's empty-slot dashed outline becomes:
+- Solid 1px in `#acc267`
+- Plus a 0 0 8px outer glow in `#acc267` at 30% opacity
+
+This is the *only* place glow effects appear in the system.
+
+### Modals
+
+Full-screen backdrop at 95% opacity. Centered panel: `#202020` fill, 1px `#505050` border, 12px corner radius. Title bar shows the screen name in monospaced 14px, color `#a0a0a0`, with a single `▌` cursor character prefix to reinforce the terminal pane motif.
+
+### Navigation Bar
+
+Fixed at the bottom of in-game screens. Height: 64px. `#202020` fill, 1px top border in `#353535`. Four icon buttons: Undo / Hint / New / Auto-complete. Icons: 24px, 1.5px stroke weight, color `#d0d0d0`. Active/pressed: icon color `#6fc2ef`.
+
+### Status / Sync Indicator
+
+Top-right corner of the HUD: a 6px circular dot.
+- Connected & synced: `#12cfc0`
+- Pending: `#ddb26f` (pulsing 1.5s)
+- Error: `#fb9fb1` (steady)
+- Offline: `#505050`
+
+## Accessibility
+
+1. **Color-blind mode** (Settings → Gameplay): swaps red suits' default `#fb9fb1` for `#6fc2ef`. Outlined-glyph differentiation remains active in *all* modes.
+2. **High-contrast mode** (Settings → Gameplay): boosts on-surface from `#d0d0d0` to `#f5f5f5`, outline from `#505050` to `#a0a0a0`, suit-red from `#fb9fb1` to `#ff8aa0`.
+3. **Reduce-motion mode** (Settings → Gameplay): disables card-lift transition (instant z-lift), disables CRT scanline effect, disables the warning-chip pulse animation.
+4. **Tabular figures** are mandatory for any number that updates live (timer, score, moves) so they don't reflow.
+5. **Touch targets** are 48dp minimum even when the visual element is smaller.
+6. **Text contrast**: all body text on background passes WCAG AA at minimum (`#d0d0d0` on `#151515` = 9.5:1; `#a0a0a0` on `#151515` = 5.7:1).
diff --git a/docs/ui-mockups/game-table-mobile.html b/docs/ui-mockups/game-table-mobile.html
new file mode 100644
index 0000000..9d8d1a3
--- /dev/null
+++ b/docs/ui-mockups/game-table-mobile.html
@@ -0,0 +1,253 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+terminal
+
solitaire.sh
+
+
+
+settings
+
+
+
+
+
+SCORE
+247
+
+
+TIME
+12:34
+
+
+MOVES
+87
+
+
+
+
+
+
+
+
+
+
▌RS
+
STOCK · 18
+
+
+
+
10 ♥
+
♥
+
+
+
+
+
+♠
+
+
+
+
2 ♥
+
♥
+
+
+
+♣
+
+
+
+♦
+
+
+
+
+
+
+
+
K ♠
+
+
+
+
+
+
+
Q ♥
+
+
+
+
+
+
+
+
10 ♦
+
+
+
+
+
+
+
+
+
9 ♠
+
+
+
+
+
+
+
+
+
+
+
+
4 ♦
+
♦
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/ui-mockups/game-table-mobile.png b/docs/ui-mockups/game-table-mobile.png
new file mode 100644
index 0000000..1e3238d
Binary files /dev/null and b/docs/ui-mockups/game-table-mobile.png differ
diff --git a/docs/ui-mockups/help-mobile.html b/docs/ui-mockups/help-mobile.html
new file mode 100644
index 0000000..bc0cdfa
--- /dev/null
+++ b/docs/ui-mockups/help-mobile.html
@@ -0,0 +1,200 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+▌rusty-solitaire(1) · MAN PAGE
+
+
+
+
+
GESTURES & SHORTCUTS
+
Touch gestures and keyboard equivalents.
+
+
+
+
+
+
TOUCH GESTURES
+
+
+
+
+square
+TAP card
+
+
Select / unselect for move
+
+
+
+
+east
+DRAG stack
+
+
Move with translucent ghost preview
+
+
+
+
+double_arrow
+DOUBLE-TAP
+
+
Auto-send to best foundation
+
+
+
+
+touch_app
+LONG-PRESS
+
+
Highlight all legal moves for card
+
+
+
+
+south
+SWIPE DOWN
+
+
Reveal hidden action bar
+
+
+
+
+
+
KEYBOARD SHORTCUTS
+
+
+
+
[U]
+
Undo last move
+
+
+
+
[H]
+
Show hint
+
+
+
+
[N]
+
New game
+
+
+
+
[A]
+
Auto-complete (when possible)
+
+
+
+
[ESC]
+
Pause / back
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/ui-mockups/help-mobile.png b/docs/ui-mockups/help-mobile.png
new file mode 100644
index 0000000..f706888
Binary files /dev/null and b/docs/ui-mockups/help-mobile.png differ
diff --git a/docs/ui-mockups/home-menu-desktop.html b/docs/ui-mockups/home-menu-desktop.html
new file mode 100644
index 0000000..86ee9ea
--- /dev/null
+++ b/docs/ui-mockups/home-menu-desktop.html
@@ -0,0 +1,343 @@
+
+
+
+
+
+RS_TERMINAL_OS - Rusty Solitaire
+
+
+
+
+
+
+
+
+
+
+▌
+
RS_TERMINAL_OS
+
+
+
+
+LV 12
+|
+
+XP 320/500
+
+
+
+
+
+|
+
+
+Synced
+
+|
+v0.20.0
+
+
+
+
+
+
+
+
▌play.tsx
+
Ready to play?
+
RESUME · 12:34 ELAPSED · DRAW-3
+
+
+
+
+
+
+
+
Game Modes
+
+
+
+spa
+Zen
+
+
+
+timer
+Time Attack
+
+
+
+lock
+Challenge
+
LV 5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
▌daily.json
+
+
MAY 07 · 2026
+EXPIRES 11:42:30
+
+
+
+
+
Current Seed
+
#2024-127
+
+
+
+
+
Global Standings
+
+
+01 │ swift_jaguar
+02:47
+
+
+02 │ pixel_drifter
+03:12
+
+
+03 │ null_ptr
+03:15
+
+
+04 │ core_dump_88
+03:44
+
+
+12 │ YOU (anon)
+--:--
+
+
+
+
+
+
+
+
▌stats.log
+
+
+
+
Games
+
247
+
+
+
Win Rate
+
61%
+
+
+
Best Time
+
01:54
+
+
+
Streak
+
7
+
+
+
+
Achievements (8/19)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
RS
+
+
anonymous@local
+
Session: Active
+
+
+arrow_forward
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/ui-mockups/home-menu-desktop.png b/docs/ui-mockups/home-menu-desktop.png
new file mode 100644
index 0000000..a0fa836
Binary files /dev/null and b/docs/ui-mockups/home-menu-desktop.png differ
diff --git a/docs/ui-mockups/home-menu-mobile.html b/docs/ui-mockups/home-menu-mobile.html
new file mode 100644
index 0000000..a14520c
--- /dev/null
+++ b/docs/ui-mockups/home-menu-mobile.html
@@ -0,0 +1,225 @@
+
+
+
+
+
+Rusty Solitaire - Main Menu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+▌RUSTY SOLITAIRE
+
+
+
+LV 12
+
+
+
+
+
+
+
+
+
+
+
+ 320 / 500 XP
+
+
+
+
+
+
+ RESUME LAST GAME · 12:34 ELAPSED
+
+
+
+
+
+
+DAILY CHALLENGE
+DRAW-3 · SEED #2024-127
+
+EXPIRES 11:42:30
+
+
+chevron_right
+
+
+
+
+
SPECIAL MODES
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/ui-mockups/home-menu-mobile.png b/docs/ui-mockups/home-menu-mobile.png
new file mode 100644
index 0000000..9b4d61c
Binary files /dev/null and b/docs/ui-mockups/home-menu-mobile.png differ
diff --git a/docs/ui-mockups/leaderboard-mobile.html b/docs/ui-mockups/leaderboard-mobile.html
new file mode 100644
index 0000000..9cd5935
--- /dev/null
+++ b/docs/ui-mockups/leaderboard-mobile.html
@@ -0,0 +1,315 @@
+
+
+
+
+
+Rusty Solitaire - Leaderboard
+
+
+
+
+
+
+
+
+
+
+
+
+terminal
+
Rusty Solitaire
+
+
+sync
+
+
+
+
+
+
▌leaderboard.tsx
+
+
+
+SYNCED
+
+v0.20.0
+
+
+
+
+
+
+
+
TOP 3 · TODAY
+
+
+
+02
+base16_fan
+03:12
+
+
+
+star
+01
+swift_jaguar
+02:47
+
+
+
+03
+cli_player
+03:54
+
+
+
+
+
+
+[ ALL TIMES ]
+
+
+/ search players
+
+
+
+
+
+
+Rank & User
+Time
+
+
+
+
+004
+tablejockey
+
+04:01
+
+
+
+
+005
+vim_motions
+
+04:05
+
+
+
+
+006
+tmux_lover
+
+04:18
+
+
+
+
+007
+nvim_dotfiles
+
+04:23
+
+
+
+
+008
+dark_theme
+
+04:31
+
+
+
...
+
+
+
+▶ 017
+anonymous (YOU)
+
+04:12
+
+
+
+
+018
+bash_brawler
+
+05:01
+
+
+
+
+019
+curl_master
+
+05:14
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/ui-mockups/leaderboard-mobile.png b/docs/ui-mockups/leaderboard-mobile.png
new file mode 100644
index 0000000..05c73b0
Binary files /dev/null and b/docs/ui-mockups/leaderboard-mobile.png differ
diff --git a/docs/ui-mockups/level-up-mobile.html b/docs/ui-mockups/level-up-mobile.html
new file mode 100644
index 0000000..2e8d4ef
--- /dev/null
+++ b/docs/ui-mockups/level-up-mobile.html
@@ -0,0 +1,259 @@
+
+
+
+
+
+ROOT@SOLITAIRE:~ | LEVEL UP
+
+
+
+
+
+
+
+
+
+
+
ROOT@SOLITAIRE:~
+
+memory
+settings_ethernet
+wifi_tethering
+
+
+
+
+
+
+
+SCORE
+04,820
+
+
+TIMER
+04:12
+
+
+
+
+
+
+
+
+
+
▌RS
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+▌
+level-up.tsx
+
+
+
+
+
+
▲ LEVEL UP
+
+13
+
+FROM 12
+
+
+
█ NEW PERKS UNLOCKED
+
+
+
+
+
+▢ +1 daily challenge slot
+NEW
+
+
+
+▢ Background: Forest
+UNLOCKED
+
+
+
+▢ Card-back: Stripes
+UNLOCKED
+
+
+
+
+XP
++200 XP THIS LEVEL
+
+
+
+
+
+
+
+
+
+
+
+
+Tap anywhere to dismiss
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/ui-mockups/level-up-mobile.png b/docs/ui-mockups/level-up-mobile.png
new file mode 100644
index 0000000..69493ad
Binary files /dev/null and b/docs/ui-mockups/level-up-mobile.png differ
diff --git a/docs/ui-mockups/onboarding-draw-mobile.html b/docs/ui-mockups/onboarding-draw-mobile.html
new file mode 100644
index 0000000..f686052
--- /dev/null
+++ b/docs/ui-mockups/onboarding-draw-mobile.html
@@ -0,0 +1,206 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
▌onboard/01-draw.tsx
+
STEP 1 OF 3
+
+
+
+
+
+
+
+ WELCOME ▌_
+
+
+
+
+
CHOOSE A DRAW MODE
+
You can change this any time in Settings.
+
+
+
+
+
+
+RECOMMENDED
+
+
+filter_3
+
+
+
DRAW-3 (CLASSIC)
+
+ Cycle 3 cards at a time. Standard solitaire rules for a tactical challenge.
+
+
+
+
+
+
+filter_1
+
+
+
DRAW-1 (EASY)
+
+ Cycle one card at a time. More winnable, faster pace, perfect for quick sessions.
+
+
+
+
+
+
+
+
+
+
+
+
+[1]
+[2]
+[3]
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/ui-mockups/onboarding-draw-mobile.png b/docs/ui-mockups/onboarding-draw-mobile.png
new file mode 100644
index 0000000..bb71669
Binary files /dev/null and b/docs/ui-mockups/onboarding-draw-mobile.png differ
diff --git a/docs/ui-mockups/onboarding-tap-mobile.html b/docs/ui-mockups/onboarding-tap-mobile.html
new file mode 100644
index 0000000..64553b1
--- /dev/null
+++ b/docs/ui-mockups/onboarding-tap-mobile.html
@@ -0,0 +1,211 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+terminal
+▌onboard/03-demo.tsx
+
+
STEP 3 OF 3
+
+
+
+
+
TRY IT OUT
+
Tap a face-up card to auto-move it to the best legal pile.
+
+
+
+
+
+
+
+
+playing_cards
+
+
+
+
MOVES HERE
+arrow_upward
+
+
+
+
+
+
A
+playing_cards
+
+
+touch_app
+
+
+
+
+
K
+favorite
+
+
+
+
Q
+groups
+
+
+
+
+
+
+▌
+TAP THE A♠ TO CONTINUE
+
+
+
+
+
+check_circle
+TAP TO AUTO-MOVE
+
+
+check_circle
+DRAG TO TARGET PILE
+
+
+check_circle
+DOUBLE-TAP TO FOUNDATION
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/ui-mockups/onboarding-tap-mobile.png b/docs/ui-mockups/onboarding-tap-mobile.png
new file mode 100644
index 0000000..424f454
Binary files /dev/null and b/docs/ui-mockups/onboarding-tap-mobile.png differ
diff --git a/docs/ui-mockups/onboarding-theme-mobile.html b/docs/ui-mockups/onboarding-theme-mobile.html
new file mode 100644
index 0000000..f081142
--- /dev/null
+++ b/docs/ui-mockups/onboarding-theme-mobile.html
@@ -0,0 +1,218 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+▌onboard/02-theme.tsx
+STEP 2 OF 3
+
+
+
+
+▌
+
+
+
+
+
+
+
PICK YOUR DECK
+
+
+
+
CHOOSE A CARD-BACK
+
+ You can swap or import more themes from Settings later.
+
+
+
+
+
+
+
+
+
+
▌RS
+
+
+check
+
+
+TERMINAL
+
+
+
+
+
+
+CLASSIC
+
+
+
+
+
+
+STRIPES
+
+
+
+
+
++ MORE IN SETTINGS
+
+
+
+
+
+
+
+
+
+
+[1]
+[2]
+[3]
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/ui-mockups/onboarding-theme-mobile.png b/docs/ui-mockups/onboarding-theme-mobile.png
new file mode 100644
index 0000000..a3fe341
Binary files /dev/null and b/docs/ui-mockups/onboarding-theme-mobile.png differ
diff --git a/docs/ui-mockups/pause-menu-mobile.html b/docs/ui-mockups/pause-menu-mobile.html
new file mode 100644
index 0000000..7f50996
--- /dev/null
+++ b/docs/ui-mockups/pause-menu-mobile.html
@@ -0,0 +1,212 @@
+
+
+
+
+
+Rouge Solitaire - Pause
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+▌
+pause.tsx
+
+
+
+
+
+
+
+ GAME PAUSED
+
+
+
+ 12:34 ELAPSED · 87 MOVES · DRAW-3
+
+
+
+
+SCORE 247
+
+
+STOCK 18
+
+
+MOVES 87
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+▌
+NORMAL
+│
+pause
+
+
+[ESC]
+resume
+
+
+
+
+
+
+
+
+terminal
+▌ROUGE_SOLITAIRE
+
+
+
+
\ No newline at end of file
diff --git a/docs/ui-mockups/pause-menu-mobile.png b/docs/ui-mockups/pause-menu-mobile.png
new file mode 100644
index 0000000..ff5594c
Binary files /dev/null and b/docs/ui-mockups/pause-menu-mobile.png differ
diff --git a/docs/ui-mockups/profile-mobile.html b/docs/ui-mockups/profile-mobile.html
new file mode 100644
index 0000000..482ea4f
--- /dev/null
+++ b/docs/ui-mockups/profile-mobile.html
@@ -0,0 +1,274 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ▌profile.tsx
+
+
+
+● SYNCED
+
+
+
+
+
+
+
+RS
+
+
+
anonymous@local
+
MEMBER SINCE 2026-04-22
+
+247 GAMES
+61% WR
+12 STREAK
+
+
+
+
+
+
+LEVEL 12
+320/500 XP
+
+
+
+
+
+
+180 XP TO LEVEL 13
+
+
+
+
+
▌ unlocked.cards
+
+
+
+
+
+
+
▌RS
+
+
+ACTIVE
+
+
+
+
+
+
+TAP TO USE
+
+
+
+
+
+
+TAP TO USE
+
+
+
+
+
+
+TAP TO USE
+
+
+
+
+
+
▌ unlocked.backgrounds
+
+
+
+
+ACTIVE
+
+
+
+
+FOREST
+
+
+
+
+SLATE
+
+
+
+
+MIDNIGHT
+
+
+
+
+
+
+
+
+
+
+
+terminal
+~/root/usr/settings
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/ui-mockups/profile-mobile.png b/docs/ui-mockups/profile-mobile.png
new file mode 100644
index 0000000..1986d1b
Binary files /dev/null and b/docs/ui-mockups/profile-mobile.png differ
diff --git a/docs/ui-mockups/radial-menu-mobile.html b/docs/ui-mockups/radial-menu-mobile.html
new file mode 100644
index 0000000..878ce7c
--- /dev/null
+++ b/docs/ui-mockups/radial-menu-mobile.html
@@ -0,0 +1,271 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+terminal
+
+
+
+
+favorite
+
+
+backspace
+
+
+diamond
+
+
+spa
+
+
+
+
+
+K
+diamond
+
+
+
+
+
+▌RS
+
+
+Q
+spa
+
+
+
+
+
+
+J
+favorite
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+undo
+UNDO
+
+
+
+redo
+REDO
+
+
+
+lightbulb
+HINT
+
+
+
+double_arrow
+AUTO
+
+
+
+add
+NEW
+
+
+
+pause
+PAUSE
+
+
+
+bar_chart
+STATS
+
+
+
+settings
+SETTINGS
+
+
+
+
+
▌
+
RADIAL
+
+
+
+
+
+ DRAG TO SELECT · RELEASE TO ACTIVATE
+
+
+
+
+▌ NORMAL │ radial · 1/8 selected
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/ui-mockups/radial-menu-mobile.png b/docs/ui-mockups/radial-menu-mobile.png
new file mode 100644
index 0000000..3a40f5a
Binary files /dev/null and b/docs/ui-mockups/radial-menu-mobile.png differ
diff --git a/docs/ui-mockups/replay-overlay-mobile.html b/docs/ui-mockups/replay-overlay-mobile.html
new file mode 100644
index 0000000..4864791
--- /dev/null
+++ b/docs/ui-mockups/replay-overlay-mobile.html
@@ -0,0 +1,284 @@
+
+
+
+
+
+Solitaire Replay Overlay
+
+
+
+
+
+
+
+
+
+
+
+▌replay.tsx
+
+
+ GAME #2024-127 · 87 MOVES
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4
+diamond
+
+
+4
+diamond
+
+
+
+
+MOVE 47/87
+
+
+
+
+
+
+
+
+
+
+00:42
+/ 02:18
+
+
+
+
+
+
+
+
+
+
+
+1.0x
+unfold_more
+
+
+
+
+
+
+
+
+
+
+
+0%
+
+
+
+25%
+
+
+
+50%
+
+
+
+75%
+
+
+
+100%
+
+
+
+
+
47/87
+
+
+
WIN MOVE
+
+
+
+
+
+
+ MOVE LOG · 47/87
+
+
+
+
+44 |
+5♥ → tableau col 3
+
+
+45 |
+8♣ → tableau col 1
+
+
+46 |
+stock cycle
+
+
+
+▶ 47 |
+4♦ → 5♣ on col 7
+
+
+48 |
+foundation A♠ → foundation
+
+
+49 |
+foundation 2♠ → foundation
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/ui-mockups/replay-overlay-mobile.png b/docs/ui-mockups/replay-overlay-mobile.png
new file mode 100644
index 0000000..5d3cd35
Binary files /dev/null and b/docs/ui-mockups/replay-overlay-mobile.png differ
diff --git a/docs/ui-mockups/settings-mobile.html b/docs/ui-mockups/settings-mobile.html
new file mode 100644
index 0000000..e507b37
--- /dev/null
+++ b/docs/ui-mockups/settings-mobile.html
@@ -0,0 +1,258 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+▌
+settings.toml
+
+
v0.20.0
+
+
+
+
+
+
+
+
+card_theme
+Terminal
+
+arrow_forward
+
+
+
+
+background
+Solid #151515
+
+arrow_forward
+
+
+
+
+card_back
+Terminal
+
+
+
+
+
+arrow_forward
+
+
+
+
+
+color_blind_mode
+false
+
+
+
+
+
+
+
+
+
+high_contrast
+false
+
+
+
+
+
+
+
+
+
+reduce_motion
+true
+
+
+
+
+
+
+
+
+
+crt_scanline_effect
+false
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/ui-mockups/settings-mobile.png b/docs/ui-mockups/settings-mobile.png
new file mode 100644
index 0000000..a7ec5a9
Binary files /dev/null and b/docs/ui-mockups/settings-mobile.png differ
diff --git a/docs/ui-mockups/splash-mobile.html b/docs/ui-mockups/splash-mobile.html
new file mode 100644
index 0000000..463bbc0
--- /dev/null
+++ b/docs/ui-mockups/splash-mobile.html
@@ -0,0 +1,213 @@
+
+
+
+
+
+Rusty Solitaire - Terminal Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
▌
+
+
+
RUSTY SOLITAIRE
+
+TERMINAL EDITION
+
+
+
+
+
+✓
+assets loaded
+
+
+✓
+theme: terminal
+
+
+✓
+progress restored
+
+
+▌ ready_
+
+
+
+
+
+
+
+
+
+DONE · 247 ASSETS
+
+
+
+
+
+
+
+
+
ROOT@SOLITAIRE:~
+
+memory
+settings_ethernet
+wifi_tethering
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/ui-mockups/splash-mobile.png b/docs/ui-mockups/splash-mobile.png
new file mode 100644
index 0000000..ddc5b28
Binary files /dev/null and b/docs/ui-mockups/splash-mobile.png differ
diff --git a/docs/ui-mockups/stats-mobile.html b/docs/ui-mockups/stats-mobile.html
new file mode 100644
index 0000000..9c9602b
--- /dev/null
+++ b/docs/ui-mockups/stats-mobile.html
@@ -0,0 +1,279 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Race the clock. The faster you finish, the higher your score.
+
+
+
+
+
05:00
+
MINUTES
+
+
+
+
+
+
+
+
+
+
+
RULES
+
+ DRAW-3
+ NO HINT PENALTY
+ +50 XP / WIN
+
+
+
+
+
+
PERSONAL BEST · 5 MIN
+
02:47 WIN
+
+
+
GLOBAL RANK 142
+
TOP 5%
+
+
+
+
+
+
Game starts after a 3-second countdown.
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/ui-mockups/time-attack-mobile.png b/docs/ui-mockups/time-attack-mobile.png
new file mode 100644
index 0000000..5ea0b54
Binary files /dev/null and b/docs/ui-mockups/time-attack-mobile.png differ
diff --git a/docs/ui-mockups/weekly-goals-mobile.html b/docs/ui-mockups/weekly-goals-mobile.html
new file mode 100644
index 0000000..1af3b61
--- /dev/null
+++ b/docs/ui-mockups/weekly-goals-mobile.html
@@ -0,0 +1,265 @@
+
+
+
+
+
+Weekly Goals - Rusty Solitaire
+
+
+
+
+
+
+
+
+
+
+
+▌weekly-goals.json
+
+
+timer
+RESETS IN 2D 14H
+
+
+
+
+
WEEKLY GOALS
+
Complete goals before reset to claim XP and rewards.
+
+
+
+
+
+
+OVERALL · 3/5
+(60%)
+
+
+
+
+
+
+stars
+ +220 XP CLAIMED
+
+
+
+
+
+
+
+
+
PLAY 10 GAMES
+
+50 XP
+
+
+
+
+
+10/10 GAMES
+✓ CLAIMED
+
+
+
+
+
+
WIN 5 DAILY SEEDS
+
+100 XP
+
+
+
+
+
+5/5 DONE
+✓ CLAIMED
+
+
+
+
+
+
WIN UNDER 4:00 (3 TIMES)
+
+75 XP
+
+
+
+
+
+2/3
+▶ IN PROGRESS
+
+
+
+
+
+
PERFECT GAME (NO UNDO)
+
+150 XP
+
+
+
+
+
+0/1
+○ NOT STARTED
+
+
+
+
+
+
STREAK OF 5 WINS
+
+50 XP
+
+
+
+
+
+3/5
+▶ IN PROGRESS
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/ui-mockups/weekly-goals-mobile.png b/docs/ui-mockups/weekly-goals-mobile.png
new file mode 100644
index 0000000..644eb16
Binary files /dev/null and b/docs/ui-mockups/weekly-goals-mobile.png differ
diff --git a/docs/ui-mockups/win-summary-mobile.html b/docs/ui-mockups/win-summary-mobile.html
new file mode 100644
index 0000000..c8f5700
--- /dev/null
+++ b/docs/ui-mockups/win-summary-mobile.html
@@ -0,0 +1,200 @@
+
+
+
+
+
+ROOT@SOLITAIRE:~ | Win Summary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+▌win.tsx
+
+
+
+
+Synced
+
+v0.20.0
+
+
+
+
+
+
+
+ █ COMPLETE
+
+
+ GAME #2024-127 · DRAW-3
+
+
+
+
+
+Final Score
+1,024
+
+
+Time
+12:34
+
+
+Moves
+87
+
+
+Par Delta
+−13
+
+
+
+
+
+
+▲ ACHIEVEMENT UNLOCKED
+
+
FIRST DAILY WIN
+
+
+military_tech
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/ui-mockups/win-summary-mobile.png b/docs/ui-mockups/win-summary-mobile.png
new file mode 100644
index 0000000..8bb0f58
Binary files /dev/null and b/docs/ui-mockups/win-summary-mobile.png differ