diff --git a/docs/ui-mockups/achievements-mobile.html b/docs/ui-mockups/achievements-mobile.html new file mode 100644 index 0000000..02b01a4 --- /dev/null +++ b/docs/ui-mockups/achievements-mobile.html @@ -0,0 +1,293 @@ + + + + + +Rusty Solitaire - Achievements + + + + + + + + + +
+
+achievements.json +
+
+ 8/19 UNLOCKED +
+
+ + +
+ +
+
+PROGRESS +
+8/19 +(42%) +
+
+
+
+
+
+ +
+ + + + +
+ +
+ +
+
+emoji_events +
+
+

FIRST WIN

+

Win your first game

+
+
+ +
+
+
+speed +
+
+

SPEED DEMON

+

Win in under 3:00

+
+
+ +
+
+bolt +
+
+

STREAK 10

+

10 wins in a row

+
+
+ +
+
+calendar_today +
+
+

DAILY DEFENDER

+

Complete 7 daily seeds

+
+
+ +
+
+undo +
+
+

PERFECTIONIST

+

Win without using undo

+
+
+ +
+
+military_tech +
+
+

CHALLENGE BEATEN

+

Complete CHALLENGE mode

+
+
+ +
+
+help_outline +
+
+

????

+

SECRET · Hidden until unlocked

+
+
+ +
+
+golf_course +
+
+

PAR HUNTER

+

Beat par on 50 games

+
+
+
+
+ + + + + +
+ \ No newline at end of file diff --git a/docs/ui-mockups/achievements-mobile.png b/docs/ui-mockups/achievements-mobile.png new file mode 100644 index 0000000..b5776ad Binary files /dev/null and b/docs/ui-mockups/achievements-mobile.png differ diff --git a/docs/ui-mockups/challenge-mode-mobile.html b/docs/ui-mockups/challenge-mode-mobile.html new file mode 100644 index 0000000..def5a11 --- /dev/null +++ b/docs/ui-mockups/challenge-mode-mobile.html @@ -0,0 +1,219 @@ + + + + + +Challenge Mode Menu + + + + + + + + + + +
+ +
+▌challenge.tsx +LV 12 · UNLOCKED +
+ +
+

CHALLENGE MODE

+

Curated puzzles · Beat par for bonus XP

+
+ +
+
+DONE 8/24 +(33%) +
+ +
BEST AVG 03:42
+ +
+1240 XP
+
+ +
+ +
+
+
+
+DEEP STACK +Win with 0 stock · ★★★☆☆ +
+
+ ✓ DONE +
+
+
+ +
+
+
+
+SPEED RUN +Win under 2:30 · ★★☆☆☆ +
+
+ ▶ ACTIVE +
+
+
+ +
+
+
+
+NO UNDO +Win without undo · ★★★★☆ +
+
+ ▶ ACTIVE +
+
+
+ +
+
+
+
+FOUR SUITS +1 card per suit · ★☆☆☆☆ +
+
+ ✓ DONE +
+
+
+ +
+
+
+
+PERFECT RUN +Below par moves · ★★★★★ +
+
+ 🔒 LOCKED +
+
+
+ +
+
+END OF LIST +
+
+
+ +
+
+▌ NORMAL + +challenge +
+
+[ENTER] select +[F] filter +[ESC] back +
+
+ +
+
+ \ No newline at end of file diff --git a/docs/ui-mockups/challenge-mode-mobile.png b/docs/ui-mockups/challenge-mode-mobile.png new file mode 100644 index 0000000..b8ed516 Binary files /dev/null and b/docs/ui-mockups/challenge-mode-mobile.png differ diff --git a/docs/ui-mockups/daily-challenge-mobile.html b/docs/ui-mockups/daily-challenge-mobile.html new file mode 100644 index 0000000..a43d83b --- /dev/null +++ b/docs/ui-mockups/daily-challenge-mobile.html @@ -0,0 +1,258 @@ + + + + + +Rusty Solitaire - Daily Challenge + + + + + + + + + +
+▌daily/2024-127.json +
+EXPIRES 11:42:30 +
+
+ +
+ +
+
+MAY 07 · 2026 +#2024-127 +
+DRAW-3 · DIFFICULTY ★★★☆☆ · PAR 04:30 +
+ + + +
+YOUR ATTEMPTS +
+
+BEST 04:12 +
+WIN +RANK 17/2843 +
+
+LAST: FAILED at move 47 +
+
+ +
+TOP TODAY · 2,843 PLAYERS +
+ +
+
+01 +swift_jaguar +
+02:47 +
+ +
+
+02 +base16_fan +
+03:12 +
+ +
+
+03 +cli_player +
+03:54 +
+ +
+
+04 +tablejockey +
+04:01 +
+ +
+
+05 +vim_motions +
+04:05 +
+ +
+
+17 +(YOU) anonymous +
+04:12 +
+
+
+terminal +END OF VISIBLE LOG +
+
+
+ + + + + + \ 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 + + + + + + + + + + +
+Game Tableau Background + +
+ +
+
+ +
+ +
+ +
+
+ +pause.tsx +
+ +
+ +
+ +

+ GAME PAUSED +

+ +

+ 12:34 ELAPSED · 87 MOVES · DRAW-3 +

+ +
+
+SCORE 247 +
+
+STOCK 18 +
+
+MOVES 87 +
+
+ +
+ + + + + + +
+
+ +
+
+ +NORMAL + +pause +
+
+[ESC] +resume +
+
+
+
+ + + + + \ 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 +
+
+
+ + + + + + + \ 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 @@ + + + + + + + + + + + + + + +
+
+terminal +

STATISTICS.LOG

+
+
+ +
+
+
+ +
+▌stats.log +247 GAMES TRACKED +
+ + + +
+ +
+
+61% +
+
+

WIN RATE

+

▲ +3% vs last 30

+
+
+ +
+
+

GAMES

+

247

+
+
+

WINS

+

151

+
+
+

BEST TIME

+

01:54

+
+
+

STREAK

+

12

+
+
+ +
+

WIN RATE · LAST 30 DAYS

+
+ +100% +0% + +
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+30d ago +today +
+
+ +
+

DRAW MODE SPLIT

+
+
+
+
+
+DRAW-1 · 60% +DRAW-3 · 40% +
+
+
+ + +
+ + + \ No newline at end of file diff --git a/docs/ui-mockups/stats-mobile.png b/docs/ui-mockups/stats-mobile.png new file mode 100644 index 0000000..6f9cf84 Binary files /dev/null and b/docs/ui-mockups/stats-mobile.png differ diff --git a/docs/ui-mockups/sync-mobile.html b/docs/ui-mockups/sync-mobile.html new file mode 100644 index 0000000..e2875bd --- /dev/null +++ b/docs/ui-mockups/sync-mobile.html @@ -0,0 +1,262 @@ + + + + + +Rusty Solitaire - Sync Progress + + + + + + + + + + + +
+
▌RS_TERMINAL_OS
+ +
+account_circle +sync +settings +
+
+
+ +
+

SYNC PROGRESS

+

Connect to a server to sync games across devices.

+
+ +
+

STATUS

+
+○ NOT SIGNED IN +Local progress only · Last attempt: never +
+
+ +
+
+ + ▌ AUTH.toml + +
+ +
+ +
+https://sync.rusty-solitaire.app +
+
+ +
+ +
+/ user@example.com +
+
+ +
+ +
+•••••••• (12 chars) +visibility +
+
+
+ +
+ + +
+ +
+

RECENT

+
+
+2026-05-07 17:38 +· +○ no auth +· +skip +
+
+2026-05-07 14:12 +· +○ no auth +· +skip +
+
+2026-05-06 09:01 +· +✓ synced 12 games +
+
+
+
+ + + + + +
+ \ No newline at end of file diff --git a/docs/ui-mockups/sync-mobile.png b/docs/ui-mockups/sync-mobile.png new file mode 100644 index 0000000..a069d8f Binary files /dev/null and b/docs/ui-mockups/sync-mobile.png differ diff --git a/docs/ui-mockups/theme-picker-mobile.html b/docs/ui-mockups/theme-picker-mobile.html new file mode 100644 index 0000000..2bc6bdb --- /dev/null +++ b/docs/ui-mockups/theme-picker-mobile.html @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + +
+
+terminal +▌theme.picker +
+
+× CLOSE +
+
+
+ +
+
+

CARD THEMES

+

Choose a card-face theme. Imported themes appear at the bottom.

+
+
+5 INSTALLED +
+
+ +
+ +
+
+ +
+
+
▌RS
+
+
+
+
+Terminal +✓ ACTIVE +
+by Rusty Solitaire +
+
+ +
+
+
+
+
+Classic +by Rusty Solitaire +
+
+ +
+
+
+
+
+Stripes +by hayeah +
+
+ +
+
+
+
+
+Polka +by hayeah +
+
+ +
+
+
+
+
+Vintage +by hayeah +
+
+ +
+
+add +IMPORT FROM .ZIP +
+
++ IMPORT THEME +spacer +
+
+
+
+ + + \ No newline at end of file diff --git a/docs/ui-mockups/theme-picker-mobile.png b/docs/ui-mockups/theme-picker-mobile.png new file mode 100644 index 0000000..b6805c7 Binary files /dev/null and b/docs/ui-mockups/theme-picker-mobile.png differ diff --git a/docs/ui-mockups/time-attack-mobile.html b/docs/ui-mockups/time-attack-mobile.html new file mode 100644 index 0000000..33a5691 --- /dev/null +++ b/docs/ui-mockups/time-attack-mobile.html @@ -0,0 +1,215 @@ + + + + + +Rusty Solitaire - Time Attack Configuration + + + + + + + + + + +
+ +
+▌time-attack.tsx +MODE · TIMED +
+ + + +
+ +
+

TIME ATTACK

+

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