1:root {
2 color-scheme: dark;
3 --bg: #0d1017;
4 --panel: #161a23;
5 --panel-2: #1c2230;
6 --border: #232a3a;
7 --text: #e6e8eb;
8 --muted: #8b93a7;
9 --accent: #7dd3fc;
10 --accent-2: #38bdf8;
11 --danger: #f87171;
12 --ok: #4ade80;
13}
14
15* {
16 box-sizing: border-box;
17}
18
19html, body {
20 margin: 0;
21 padding: 0;
22 background: var(--bg);
23 color: var(--text);
24 font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
25 min-height: 100%;
26}
27
28header {
29 padding: 20px 24px 8px;
30}
31
32h1 {
33 margin: 0;
34 font-size: 20px;
35 letter-spacing: 0.3px;
36}
37
38.subtitle {
39 color: var(--muted);
40 margin-top: 4px;
41 font-size: 13px;
42}
43
44.wrap {
45 display: grid;
46 grid-template-columns: minmax(0, 1fr) 260px;
47 gap: 16px;
48 padding: 16px 24px 24px;
49}
50
51@media (max-width: 900px) {
52 .wrap { grid-template-columns: 1fr; }
53}
54
55.canvas-card {
56 background: var(--panel);
57 border: 1px solid var(--border);
58 border-radius: 12px;
59 padding: 12px;
60 overflow: hidden;
61}
62
63canvas#grid {
64 display: block;
65 width: 100%;
66 height: auto;
67 border-radius: 8px;
68 background: #0d1017;
69 cursor: crosshair;
70 touch-action: none;
71}
72
73canvas#grid.placing { cursor: copy; }
74
75.sidebar {
76 display: flex;
77 flex-direction: column;
78 gap: 12px;
79}
80
81.card {
82 background: var(--panel);
83 border: 1px solid var(--border);
84 border-radius: 12px;
85 padding: 14px;
86}
87
88.card h2 {
89 margin: 0 0 10px;
90 font-size: 12px;
91 letter-spacing: 0.14em;
92 text-transform: uppercase;
93 color: var(--muted);
94 font-weight: 600;
95}
96
97.row {
98 display: flex;
99 gap: 8px;
100 flex-wrap: wrap;
101}
102
103button {
104 appearance: none;
105 border: 1px solid var(--border);
106 background: var(--panel-2);
107 color: var(--text);
108 padding: 8px 12px;
109 border-radius: 8px;
110 font-size: 13px;
111 cursor: pointer;
112 transition: background 120ms ease, border-color 120ms ease, transform 60ms ease;
113}
114
115button:hover { background: #222a3a; border-color: #2e3a52; }
116button:active { transform: translateY(1px); }
117
118button.primary,
119#play {
120 background: var(--accent);
121 color: #0b1220;
122 border-color: transparent;
123 font-weight: 600;
124}
125#play:hover { background: var(--accent-2); }
126
127button.ghost {
128 background: transparent;
129}
130
131button.pattern {
132 flex: 1 1 auto;
133 min-width: 84px;
134 text-align: center;
135}
136
137button.pattern.active {
138 border-color: var(--accent);
139 color: var(--accent);
140 background: rgba(125, 211, 252, 0.08);
141}
142
143.stat {
144 display: flex;
145 justify-content: space-between;
146 align-items: baseline;
147 gap: 8px;
148}
149
150.stat .value {
151 font-variant-numeric: tabular-nums;
152 font-size: 22px;
153 font-weight: 600;
154 color: var(--accent);
155}
156
157.stat .label {
158 color: var(--muted);
159 font-size: 12px;
160 letter-spacing: 0.1em;
161 text-transform: uppercase;
162}
163
164label.toggle {
165 display: flex;
166 align-items: center;
167 gap: 10px;
168 font-size: 13px;
169 color: var(--text);
170 cursor: pointer;
171 user-select: none;
172}
173
174input[type="checkbox"] {
175 width: 16px;
176 height: 16px;
177 accent-color: var(--accent);
178}
179
180.speed-row {
181 display: flex;
182 flex-direction: column;
183 gap: 8px;
184}
185
186.speed-row .head {
187 display: flex;
188 justify-content: space-between;
189 color: var(--muted);
190 font-size: 12px;
191}
192
193input[type="range"] {
194 width: 100%;
195 accent-color: var(--accent);
196}
197
198.hint {
199 font-size: 12px;
200 color: var(--muted);
201 line-height: 1.4;
202}
203
204footer {
205 padding: 8px 24px 24px;
206 color: var(--muted);
207 font-size: 12px;
208}
209
210footer a {
211 color: var(--accent);
212 text-decoration: none;
213}
214footer a:hover { text-decoration: underline; }
215
216
217.test-summary {
218 padding: 10px 14px;
219 border-radius: 10px;
220 margin-bottom: 12px;
221 font-weight: 600;
222}
223.test-summary.ok { background: rgba(74, 222, 128, 0.12); color: var(--ok); border: 1px solid rgba(74, 222, 128, 0.35); }
224.test-summary.fail { background: rgba(248, 113, 113, 0.12); color: var(--danger); border: 1px solid rgba(248, 113, 113, 0.35); }
225
226.test {
227 padding: 8px 12px;
228 border-radius: 8px;
229 margin-bottom: 6px;
230 font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
231 font-size: 13px;
232 border: 1px solid var(--border);
233 background: var(--panel-2);
234}
235.test.ok { color: var(--ok); }
236.test.fail { color: var(--danger); }
237
Discussion
No comments yet. Start the discussion. Recorded by @patrick-toulme.