Files
Ferrous-Solitaire/docs/ui-mockups/theme-picker-mobile.html
T
funman300 fa7f98ac52 docs(ui): land the Terminal design system + 24-mockup library
Adds the spec the recent visual-identity port pass referenced:

- design-system.md — base16-eighties palette, type scale, spacing
  scale, motion budget, component library, accessibility notes
  (color-blind toggle, high-contrast mode, glyph differentiation),
  and the canonical "Terminal" card-back theme.
- 24 Stitch-rendered mockups (HTML + PNG): 12 redesigned existing
  screens, 1 desktop home variant, 2 onboarding steps, and 9
  missing-plugin screens (splash, challenge, time-attack,
  weekly-goals, leaderboard, sync, level-up, replay, radial-menu).

These mockups are the source the engine plugins were ported
against in commits 0d477ac through 9891ae4 (token system,
modal scaffold, gameplay-feedback layer, toasts, table chrome,
card chrome, splash cursor, hint highlight). Future plugin work
should diff against the matching mockup before touching pixels.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-07 18:47:57 -07:00

250 lines
12 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html class="dark" lang="en"><head>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
<script src="https://cdn.tailwindcss.com?plugins=forms,container-queries"></script>
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700;800&amp;family=Inter:wght@400;500;600&amp;family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&amp;display=swap" rel="stylesheet"/>
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&amp;display=swap" rel="stylesheet"/>
<style>.material-symbols-outlined {
font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 24
}
.scanline-pattern {
background: repeating-linear-gradient(0deg, #1a1a1a, #1a1a1a 2px, #151515 2px, #151515 4px)
}
.checker-pattern {
background-color: #001e2c;
background-image: radial-gradient(#a1dcff 10%, transparent 10%), radial-gradient(#a1dcff 10%, transparent 10%);
background-size: 8px 8px;
background-position: 0 0, 4px 4px
}
.stripe-pattern {
background: repeating-linear-gradient(0deg, #fb9fb1, #fb9fb1 4px, #202020 4px, #202020 8px)
}
.polka-pattern {
background-color: #001e2c;
background-image: radial-gradient(#e0e3e6 15%, transparent 15%);
background-size: 12px 12px
}
.vintage-pattern {
background-color: #d5ec8c;
background-image: url(https://lh3.googleusercontent.com/aida-public/AB6AXuD8S9vQTpEh-DjYtjB5CUHqi2CO326ZEjVVLJoOqG1AA6b92NZ6ctGoD4yZHKV7oHJnSFdvp3z3Wei9zfTI2EGAdrQfHxFYJ-h1DaeiZQY3vTa5khIQ83Sf-bjz2xiudHsjs3RyhSKC5bHv2c8_9t6YjepJdQnJa4GelCetFEs_agpN6u2IfMS1M9RrGxGKLl4K18fj0Pg3BW8IptX_ladhVFR5Hk8F0Reu5WHY8eQt1Nr-p9NNXl-w3C9Jz0uGSxi_Wb7R771lgQ);
opacity: 0.8
}</style>
<script id="tailwind-config">
tailwind.config = {
darkMode: "class",
theme: {
extend: {
"colors": {
"surface-variant": "#313538",
"on-error-container": "#ffdad6",
"warning": "#ddb26f",
"on-surface": "#e0e3e6",
"inverse-on-surface": "#2d3134",
"on-secondary-fixed": "#161e00",
"on-error": "#690005",
"on-primary-fixed": "#001e2c",
"primary-container": "#6fc2ef",
"secondary-fixed-dim": "#bad073",
"tertiary": "#f7c3ff",
"surface-dim": "#101417",
"surface-container-low": "#181c1f",
"on-surface-variant": "#bfc8cf",
"surface-container": "#1c2023",
"secondary-container": "#435401",
"error": "#fb9fb1",
"on-tertiary": "#4c195b",
"surface-tint": "#7ed0fe",
"error-container": "#93000a",
"tertiary-fixed": "#fbd7ff",
"info": "#12cfc0",
"tertiary-fixed-dim": "#f0b0fc",
"highlight-valid": "#acc267",
"on-primary": "#003549",
"inverse-surface": "#e0e3e6",
"primary": "#a1dcff",
"surface-container-high": "#272a2d",
"background": "#101417",
"surface-container-lowest": "#0b0f11",
"suit-red": "#fb9fb1",
"suit-red-cb": "#6fc2ef",
"surface": "#151515",
"primary-fixed": "#c4e7ff",
"outline": "#505050",
"on-secondary": "#293500",
"surface-container-highest": "#313538",
"secondary-fixed": "#d5ec8c",
"on-primary-container": "#004f6c",
"suit-black": "#d0d0d0",
"on-primary-fixed-variant": "#004c69",
"on-tertiary-container": "#683476",
"secondary": "#bad073",
"highlight-celebration": "#e1a3ee",
"on-tertiary-fixed": "#340043",
"on-tertiary-fixed-variant": "#653173",
"on-secondary-container": "#b2c86d",
"surface-bright": "#363a3d",
"primary-fixed-dim": "#7ed0fe",
"on-secondary-fixed-variant": "#3c4d00",
"inverse-primary": "#00668a",
"outline-variant": "#3f484e",
"on-background": "#e0e3e6",
"tertiary-container": "#e1a3ee"
},
"borderRadius": {
"DEFAULT": "0.125rem",
"lg": "0.25rem",
"xl": "0.5rem",
"full": "0.75rem"
},
"spacing": {
"stack-overlap": "2rem",
"gutter-card": "0.375rem",
"touch-target-min": "48dp",
"action-bar-height": "64px",
"margin-edge": "1rem"
},
"fontFamily": {
"hud-score": ["JetBrains Mono"],
"label-caps": ["JetBrains Mono"],
"hud-timer": ["JetBrains Mono"],
"card-rank": ["JetBrains Mono"],
"headline": ["JetBrains Mono"],
"body-md": ["Inter"]
},
"fontSize": {
"hud-score": ["24px", {"lineHeight": "32px", "letterSpacing": "-0.02em", "fontWeight": "700"}],
"label-caps": ["12px", {"lineHeight": "16px", "letterSpacing": "0.08em", "fontWeight": "500"}],
"hud-timer": ["16px", {"lineHeight": "24px", "fontWeight": "400"}],
"card-rank": ["18px", {"lineHeight": "18px", "fontWeight": "700"}],
"headline": ["28px", {"lineHeight": "32px", "letterSpacing": "-0.01em", "fontWeight": "700"}],
"body-md": ["16px", {"lineHeight": "24px", "fontWeight": "400"}]
}
},
},
}
</script>
<style>
body {
min-height: max(884px, 100dvh);
}
</style>
</head>
<body class="bg-background text-on-surface selection:bg-primary-container selection:text-on-primary-container min-h-screen flex flex-col font-body-md overflow-x-hidden">
<!-- TopAppBar Semantic Shell -->
<header class="fixed top-0 w-full z-50 flex justify-between items-center h-[32px] px-margin-edge bg-surface-container border-b border-outline-variant">
<div class="flex items-center gap-2">
<span class="material-symbols-outlined text-[16px] text-primary" data-icon="terminal">terminal</span>
<span class="font-headline text-[14px] font-bold text-on-surface">▌theme.picker</span>
</div>
<div class="flex items-center gap-2 cursor-pointer hover:opacity-80 transition-opacity">
<span class="font-label-caps text-[12px] text-on-surface-variant uppercase">× CLOSE</span>
</div>
</header>
<main class="mt-[32px] mb-[64px] flex-grow flex flex-col px-margin-edge py-6">
<!-- Header Section -->
<div class="flex justify-between items-start mb-8">
<div class="flex-1">
<h1 class="font-headline text-[24px] font-bold text-on-surface mb-1">CARD THEMES</h1>
<p class="font-body-md text-[13px] text-on-surface-variant max-w-[280px]">Choose a card-face theme. Imported themes appear at the bottom.</p>
</div>
<div class="bg-surface-container-high px-2 py-1 border border-outline-variant">
<span class="font-label-caps text-[11px] text-primary">5 INSTALLED</span>
</div>
</div>
<!-- Theme Grid -->
<div class="grid grid-cols-2 gap-4">
<!-- Active Theme: Terminal -->
<div class="relative flex flex-col bg-surface border-2 border-primary-container">
<div class="aspect-[2.5/3.5] w-full p-2 overflow-hidden flex items-center justify-center bg-background">
<!-- Card Preview -->
<div class="w-24 h-36 bg-surface border border-primary-container scanline-pattern relative">
<div class="absolute top-1 left-1 w-3 h-4 bg-primary-container"></div>
<div class="absolute bottom-1 right-1 font-headline text-[10px] text-on-surface">▌RS</div>
</div>
</div>
<div class="p-3 bg-surface-container-high border-t border-primary-container">
<div class="flex justify-between items-center mb-1">
<span class="font-headline text-[14px] font-bold truncate">Terminal</span>
<span class="font-label-caps text-[10px] text-primary-container">✓ ACTIVE</span>
</div>
<span class="font-body-md text-[11px] text-on-surface-variant">by Rusty Solitaire</span>
</div>
</div>
<!-- Theme: Classic -->
<div class="relative flex flex-col bg-surface border border-outline">
<div class="aspect-[2.5/3.5] w-full p-2 overflow-hidden flex items-center justify-center bg-background">
<div class="w-24 h-36 bg-surface border border-outline checker-pattern"></div>
</div>
<div class="p-3 bg-surface-container-low border-t border-outline">
<span class="font-headline text-[14px] font-bold block truncate">Classic</span>
<span class="font-body-md text-[11px] text-on-surface-variant">by Rusty Solitaire</span>
</div>
</div>
<!-- Theme: Stripes -->
<div class="relative flex flex-col bg-surface border border-outline">
<div class="aspect-[2.5/3.5] w-full p-2 overflow-hidden flex items-center justify-center bg-background">
<div class="w-24 h-36 bg-surface border border-outline stripe-pattern"></div>
</div>
<div class="p-3 bg-surface-container-low border-t border-outline">
<span class="font-headline text-[14px] font-bold block truncate">Stripes</span>
<span class="font-body-md text-[11px] text-on-surface-variant">by hayeah</span>
</div>
</div>
<!-- Theme: Polka -->
<div class="relative flex flex-col bg-surface border border-outline">
<div class="aspect-[2.5/3.5] w-full p-2 overflow-hidden flex items-center justify-center bg-background">
<div class="w-24 h-36 bg-surface border border-outline polka-pattern"></div>
</div>
<div class="p-3 bg-surface-container-low border-t border-outline">
<span class="font-headline text-[14px] font-bold block truncate">Polka</span>
<span class="font-body-md text-[11px] text-on-surface-variant">by hayeah</span>
</div>
</div>
<!-- Theme: Vintage -->
<div class="relative flex flex-col bg-surface border border-outline">
<div class="aspect-[2.5/3.5] w-full p-2 overflow-hidden flex items-center justify-center bg-background">
<div class="w-24 h-36 bg-surface border border-outline vintage-pattern"></div>
</div>
<div class="p-3 bg-surface-container-low border-t border-outline">
<span class="font-headline text-[14px] font-bold block truncate">Vintage</span>
<span class="font-body-md text-[11px] text-on-surface-variant">by hayeah</span>
</div>
</div>
<!-- Import Theme -->
<div class="relative flex flex-col bg-surface border-2 border-dashed border-outline-variant hover:border-primary-container transition-colors cursor-pointer">
<div class="aspect-[2.5/3.5] w-full flex flex-col items-center justify-center gap-3">
<span class="material-symbols-outlined text-[32px] text-primary-container" data-icon="add">add</span>
<span class="font-label-caps text-[10px] text-on-surface-variant tracking-widest text-center px-4">IMPORT FROM .ZIP</span>
</div>
<div class="p-3 bg-surface-container-low border-t border-outline-variant">
<span class="font-headline text-[14px] font-bold block truncate">+ IMPORT THEME</span>
<span class="font-body-md text-[11px] opacity-0">spacer</span>
</div>
</div>
</div>
</main>
<!-- BottomNavBar Semantic Shell -->
<footer class="fixed bottom-0 left-0 w-full h-[64px] z-50 bg-surface-container border-t border-outline-variant flex justify-between items-center px-margin-edge pb-safe">
<div class="flex items-center gap-2">
<span class="font-headline text-[14px] font-bold text-on-surface">▌ NORMAL</span>
<span class="text-on-surface-variant"></span>
<span class="font-label-caps text-[12px] text-on-surface-variant">theme</span>
</div>
<div class="flex items-center gap-3">
<div class="flex items-center">
<span class="text-on-surface-variant font-label-caps text-[11px]">[ENTER]</span>
<span class="text-on-surface-variant font-body-md text-[11px] ml-1">activate</span>
</div>
<div class="flex items-center">
<span class="text-on-surface-variant font-label-caps text-[11px]">[I]</span>
<span class="text-on-surface-variant font-body-md text-[11px] ml-1">import</span>
</div>
<div class="flex items-center">
<span class="text-on-surface-variant font-label-caps text-[11px]">[ESC]</span>
<span class="text-on-surface-variant font-body-md text-[11px] ml-1">back</span>
</div>
</div>
</footer>
</body></html>