|
7 | 7 | <link href="fonts/fonts.css" rel="stylesheet"> |
8 | 8 | <style> |
9 | 9 | :root { |
10 | | - /* Cipher Terminal — deep carbon foundation */ |
11 | | - --bg-void: #07070c; |
12 | | - --bg-app: #0c0c14; |
13 | | - --bg-surface: #12121e; |
14 | | - --bg-surface-hover: #181828; |
15 | | - --bg-elevated: #1a1a2a; |
16 | | - |
17 | | - /* Phosphor green — the signal */ |
18 | | - --phosphor: #00e599; |
19 | | - --phosphor-dim: #00b377; |
20 | | - --phosphor-glow: rgba(0, 229, 153, 0.12); |
21 | | - --phosphor-faint: rgba(0, 229, 153, 0.06); |
22 | | - |
23 | | - /* Severity spectrum */ |
24 | | - --danger: #ff3b5c; |
25 | | - --danger-glow: rgba(255, 59, 92, 0.12); |
26 | | - --warning: #ffaa2c; |
27 | | - --warning-glow: rgba(255, 170, 44, 0.12); |
28 | | - --neutral: #4a4a6a; |
29 | | - --neutral-glow: rgba(74, 74, 106, 0.12); |
30 | | - |
31 | | - /* Typography */ |
32 | | - --text-bright: #f0f0f5; |
33 | | - --text-primary: #c8c8d8; |
34 | | - --text-muted: #6e6e8a; |
35 | | - --text-dim: #3e3e55; |
| 10 | + /* Surface stack — 4 elevation layers */ |
| 11 | + --bg: #0a0a0b; |
| 12 | + --surface: #141416; |
| 13 | + --surface-raised: #1c1c1f; |
| 14 | + --surface-hover: #222226; |
36 | 15 |
|
37 | 16 | /* Borders */ |
38 | | - --border-hard: rgba(255, 255, 255, 0.06); |
39 | | - --border-glow: rgba(0, 229, 153, 0.15); |
| 17 | + --border: rgba(255, 255, 255, 0.06); |
| 18 | + --border-hover: rgba(255, 255, 255, 0.1); |
| 19 | + --border-strong: rgba(255, 255, 255, 0.14); |
| 20 | + |
| 21 | + /* Brand — desaturated teal */ |
| 22 | + --brand: #1a9b8c; |
| 23 | + --brand-hover: #26b5a4; |
| 24 | + --brand-dim: #0f7268; |
| 25 | + --brand-bg: rgba(26, 155, 140, 0.1); |
| 26 | + --brand-border: rgba(26, 155, 140, 0.28); |
| 27 | + |
| 28 | + /* Semantic */ |
| 29 | + --safe: var(--brand); |
| 30 | + --safe-bg: var(--brand-bg); |
| 31 | + --safe-border: var(--brand-border); |
| 32 | + --warn: #f59e0b; |
| 33 | + --warn-bg: rgba(245, 158, 11, 0.1); |
| 34 | + --warn-border: rgba(245, 158, 11, 0.25); |
| 35 | + --danger: #dc2626; |
| 36 | + --danger-bg: rgba(220, 38, 38, 0.1); |
| 37 | + --danger-border: rgba(220, 38, 38, 0.3); |
| 38 | + |
| 39 | + /* Text hierarchy */ |
| 40 | + --text-bright: #fafafa; |
| 41 | + --text-primary: #e5e5e7; |
| 42 | + --text-secondary: #a0a0a8; |
| 43 | + --text-muted: #6b6b72; |
| 44 | + --text-dim: #5a5a60; |
40 | 45 |
|
41 | 46 | /* Fonts */ |
42 | | - --font-ui: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; |
43 | | - --font-mono: 'Roboto Mono', monospace; |
| 47 | + --font-ui: 'Geist', -apple-system, BlinkMacSystemFont, system-ui, sans-serif; |
| 48 | + --font-mono: 'Geist Mono', ui-monospace, monospace; |
| 49 | + |
| 50 | + /* Radii */ |
| 51 | + --r-sm: 6px; |
| 52 | + --r-md: 8px; |
| 53 | + --r-lg: 10px; |
| 54 | + --r-xl: 14px; |
| 55 | + |
| 56 | + /* ── Legacy token aliases ── |
| 57 | + Preact components in src/components/blocked/ reference these CSS variable |
| 58 | + names via inline styles. Map them onto the new token system so the existing |
| 59 | + component code renders in the new "Quiet Confidence" style without edits. */ |
| 60 | + --bg-void: var(--bg); |
| 61 | + --bg-app: var(--bg); |
| 62 | + --bg-surface: var(--surface); |
| 63 | + --bg-surface-hover: var(--surface-hover); |
| 64 | + --bg-elevated: var(--surface-raised); |
| 65 | + |
| 66 | + --danger-glow: var(--danger-bg); |
| 67 | + --warning: var(--warn); |
| 68 | + --warning-glow: var(--warn-bg); |
| 69 | + |
| 70 | + --phosphor: var(--brand); |
| 71 | + --phosphor-dim: var(--brand-dim); |
| 72 | + --phosphor-glow: var(--brand-bg); |
| 73 | + --phosphor-faint: var(--brand-bg); |
| 74 | + |
| 75 | + --border-hard: var(--border); |
| 76 | + --border-glow: var(--brand-border); |
44 | 77 | } |
45 | 78 |
|
46 | 79 | * { margin: 0; padding: 0; box-sizing: border-box; } |
47 | 80 |
|
48 | | - body { |
| 81 | + html, body { |
49 | 82 | min-height: 100vh; |
| 83 | + background: var(--bg); |
| 84 | + } |
| 85 | + |
| 86 | + body { |
50 | 87 | font-family: var(--font-ui); |
51 | | - background: var(--bg-void); |
52 | 88 | color: var(--text-primary); |
53 | 89 | display: flex; |
54 | | - align-items: center; |
| 90 | + align-items: flex-start; |
55 | 91 | justify-content: center; |
| 92 | + padding: 96px 24px 64px; |
| 93 | + line-height: 1.5; |
| 94 | + -webkit-font-smoothing: antialiased; |
| 95 | + -moz-osx-font-smoothing: grayscale; |
56 | 96 | overflow-x: hidden; |
57 | 97 | } |
58 | 98 |
|
59 | | - /* Noise texture overlay */ |
| 99 | + /* 3px danger top strip — signals severity */ |
60 | 100 | body::before { |
61 | 101 | content: ''; |
62 | 102 | position: fixed; |
63 | | - inset: 0; |
64 | | - background: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.03'/%3E%3C/svg%3E"); |
65 | | - pointer-events: none; |
| 103 | + top: 0; |
| 104 | + left: 0; |
| 105 | + right: 0; |
| 106 | + height: 3px; |
| 107 | + background: var(--danger); |
66 | 108 | z-index: 100; |
| 109 | + pointer-events: none; |
67 | 110 | } |
68 | 111 |
|
69 | 112 | #app { |
70 | 113 | width: 100%; |
71 | | - max-width: 640px; |
72 | | - padding: 24px; |
| 114 | + max-width: 480px; |
| 115 | + display: flex; |
| 116 | + flex-direction: column; |
| 117 | + gap: 20px; |
73 | 118 | } |
74 | 119 |
|
75 | 120 | ::-webkit-scrollbar { width: 4px; } |
76 | 121 | ::-webkit-scrollbar-track { background: transparent; } |
77 | 122 | ::-webkit-scrollbar-thumb { background: var(--text-dim); border-radius: 2px; } |
78 | 123 |
|
79 | 124 | :focus-visible { |
80 | | - outline: 1px solid var(--phosphor); |
| 125 | + outline: 1px solid var(--brand); |
81 | 126 | outline-offset: 2px; |
82 | 127 | } |
83 | 128 |
|
|
0 commit comments