anentrypoint-design 0.0.68 → 0.0.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,625 @@
1
+ /* ============================================================
2
+ Design tokens — brand palette + type scale + motion
3
+ Loads before any consumer rule; all var(--*) refs resolve.
4
+ ============================================================ */
5
+ :root {
6
+ --paper: #F5F0E4;
7
+ --ink: #1F1B16;
8
+ --acid: #C8FF4D;
9
+ --link: #3A66FF;
10
+ --warn: #FF6B4A;
11
+ --live: #2BB07F;
12
+
13
+ --green: #3F8A4A;
14
+ --green-2: #B6DEC1;
15
+ --green-deep: #2B6B36;
16
+ --green-fg: #FFFFFF;
17
+ --purple: #6B3A78;
18
+ --purple-fg: #FFFFFF;
19
+ --mascot: #F07AA8;
20
+ --mascot-fg: #FFFFFF;
21
+ --sun: #FFD86B;
22
+
23
+ --ff-display: 'Archivo Black', 'Archivo', 'Nunito', system-ui, sans-serif;
24
+ --ff-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
25
+ --ff-prose: 'Nunito', 'Inter', 'Space Grotesk', system-ui, sans-serif;
26
+ --ff-ui: 'Nunito', 'Inter', system-ui, sans-serif;
27
+
28
+ --fs-hero: 120px;
29
+ --fs-h1: 64px;
30
+ --fs-h2: 32px;
31
+ --lh-tight: 1.05;
32
+ --lh-snug: 1.2;
33
+ --tr-tight: -0.02em;
34
+
35
+ --dur-snap: 80ms;
36
+ --dur-base: 160ms;
37
+ --ease: cubic-bezier(0.2, 0, 0, 1);
38
+
39
+ --surface-2: rgba(0,0,0,0.04);
40
+ --surface-ink-2: rgba(255,255,255,0.06);
41
+
42
+ --r-1: 6px;
43
+ --r-2: 10px;
44
+ --r-3: 18px;
45
+ --r-pill: 9999px;
46
+
47
+ /* Extended brand palette */
48
+ --flame: #FF8454;
49
+ --sky: #6FA9FF;
50
+
51
+ /* Foreground / background aliases — resolved after panel tokens are set;
52
+ these are reset below once panel tokens exist, but raw defaults here
53
+ ensure no unsatisfied var() at parse time if panel tokens are absent. */
54
+ --fg: #0B0B09;
55
+ --fg-3: #6d675b;
56
+ --bg: #EFE9DD;
57
+ --bg-2: #ece5d8;
58
+
59
+ /* Colorful-mono palette — canonical hue per slot */
60
+ --mono-1: var(--green);
61
+ --mono-2: var(--purple);
62
+ --mono-3: var(--mascot);
63
+ --mono-4: var(--sun);
64
+ --mono-5: var(--flame);
65
+ --mono-6: var(--sky);
66
+
67
+ /* Spacing scale (4px base) */
68
+ --space-1: 4px;
69
+ --space-2: 8px;
70
+ --space-3: 12px;
71
+ --space-4: 16px;
72
+ --space-5: 24px;
73
+ --space-6: 32px;
74
+ --space-7: 48px;
75
+ --space-8: 64px;
76
+
77
+ /* Border widths */
78
+ --bw-hair: 1px;
79
+ --bw-rule: 2px;
80
+
81
+ /* Measure */
82
+ --measure: 72ch;
83
+
84
+ /* Extended type scale */
85
+ --fs-body: 15px;
86
+ --fs-lg: 17px;
87
+ --fs-sm: 14px;
88
+ --fs-xs: 13px;
89
+ --fs-tiny: 13px;
90
+ --fs-micro: 12px;
91
+ --fs-h3: 14px;
92
+ --fs-h4: 13px;
93
+
94
+ /* Extended line heights */
95
+ --lh-base: 1.5;
96
+ --lh-long: 1.6;
97
+
98
+ /* Extended letter spacing */
99
+ --tr-label: 0.08em;
100
+ --tr-caps: 0.05em;
101
+
102
+ /* Font body alias */
103
+ --ff-body: var(--ff-ui);
104
+ }
105
+
106
+ /* Rows: no separators, hover surface tint instead */
107
+ .row { background: transparent; transition: background var(--dur-snap) var(--ease); }
108
+ .row:hover { background: var(--surface-2); }
109
+ [data-theme="ink"] .row:hover { background: var(--surface-ink-2); }
110
+
111
+ body {
112
+ background: var(--panel-0);
113
+ color: var(--panel-text);
114
+ font-family: var(--ff-ui);
115
+ font-size: 15px;
116
+ line-height: 1.55;
117
+ -webkit-font-smoothing: antialiased;
118
+ -moz-osx-font-smoothing: grayscale;
119
+ text-rendering: optimizeLegibility;
120
+ }
121
+
122
+ /* ============================================================
123
+ Semantic type classes
124
+ ============================================================ */
125
+
126
+ /* Hero — project name, once per page. Archivo Black territory. */
127
+ .t-hero, h1.hero {
128
+ font-family: var(--ff-display);
129
+ font-size: clamp(64px, 12vw, var(--fs-hero));
130
+ line-height: var(--lh-tight);
131
+ letter-spacing: var(--tr-tight);
132
+ font-weight: 800;
133
+ margin: 0;
134
+ }
135
+
136
+ /* h1 — page title */
137
+ .t-h1, h1 {
138
+ font-family: var(--ff-display);
139
+ font-size: clamp(40px, 6vw, var(--fs-h1));
140
+ line-height: var(--lh-tight);
141
+ letter-spacing: var(--tr-tight);
142
+ font-weight: 700;
143
+ margin: 0;
144
+ }
145
+
146
+ /* h2 — section */
147
+ .t-h2, h2 {
148
+ font-family: var(--ff-display);
149
+ font-size: var(--fs-h2);
150
+ line-height: var(--lh-snug);
151
+ letter-spacing: var(--tr-tight);
152
+ font-weight: 700;
153
+ margin: 0;
154
+ }
155
+
156
+ /* h3 — subsection (mono, colorful-eligible) */
157
+ .t-h3, h3 {
158
+ font-family: var(--ff-ui);
159
+ font-size: var(--fs-h3);
160
+ line-height: var(--lh-snug);
161
+ letter-spacing: 0;
162
+ font-weight: 600;
163
+ margin: 0;
164
+ }
165
+
166
+ /* h4 */
167
+ .t-h4, h4 {
168
+ font-family: var(--ff-ui);
169
+ font-size: var(--fs-h4);
170
+ line-height: var(--lh-snug);
171
+ font-weight: 500;
172
+ margin: 0;
173
+ }
174
+
175
+ /* Body UI — mono, the default UI voice */
176
+ .t-body {
177
+ font-family: var(--ff-ui);
178
+ font-size: var(--fs-body);
179
+ line-height: var(--lh-base);
180
+ }
181
+
182
+ /* Long-form prose — SANS, not serif. Space Grotesk. */
183
+ .t-prose, .prose p {
184
+ font-family: var(--ff-body);
185
+ font-size: var(--fs-lg);
186
+ line-height: var(--lh-long);
187
+ max-width: var(--measure);
188
+ text-wrap: pretty;
189
+ font-weight: 400;
190
+ }
191
+ .prose p { margin: 0 0 var(--space-4) 0; }
192
+
193
+ /* Label — mono, gentle */
194
+ .t-label {
195
+ font-family: var(--ff-ui);
196
+ font-size: var(--fs-xs);
197
+ letter-spacing: 0.02em;
198
+ font-weight: 500;
199
+ }
200
+
201
+ /* Meta — mono, small, dim */
202
+ .t-meta {
203
+ font-family: var(--ff-ui);
204
+ font-size: var(--fs-xs);
205
+ color: var(--fg-3);
206
+ }
207
+
208
+ /* Micro — smallest, datelines */
209
+ .t-micro {
210
+ font-family: var(--ff-ui);
211
+ font-size: var(--fs-micro);
212
+ letter-spacing: 0.02em;
213
+ color: var(--fg-3);
214
+ }
215
+
216
+ /* Pull — display, for section intros and callouts */
217
+ .t-pull {
218
+ font-family: var(--ff-display);
219
+ font-size: var(--fs-h2);
220
+ line-height: var(--lh-snug);
221
+ font-weight: 600;
222
+ max-width: 20ch;
223
+ letter-spacing: var(--tr-tight);
224
+ }
225
+
226
+ /* Code */
227
+ code, .t-code, .t-mono, kbd, samp, pre {
228
+ font-family: var(--ff-mono);
229
+ font-size: 0.9em;
230
+ background: var(--bg-2);
231
+ padding: 0.15em 0.5em;
232
+
233
+ border-radius: var(--r-1);
234
+ }
235
+ pre { padding: var(--space-3) var(--space-4); }
236
+ pre code { background: transparent; padding: 0; }
237
+
238
+ /* ============================================================
239
+ COLORFUL MONO — the signature treatment
240
+ Mono is the UI voice. We don't leave it grey. Every mono block
241
+ is allowed — encouraged — to carry a canonical hue per token.
242
+ ============================================================ */
243
+
244
+ /* Hue utilities — apply to mono runs to tint them */
245
+ .mono-green { color: var(--mono-1); }
246
+ .mono-purple { color: var(--mono-2); }
247
+ .mono-mascot { color: var(--mono-3); }
248
+ .mono-sun { color: var(--mono-4); }
249
+ .mono-flame { color: var(--mono-5); }
250
+ .mono-sky { color: var(--mono-6); }
251
+ .mono-ink { color: var(--fg); }
252
+ .mono-dim { color: var(--fg-3); }
253
+
254
+ /* Highlight block — a mono run on a tinted bg with dark text */
255
+ .hl-green { background: var(--green); color: var(--green-fg); padding: 0.08em 0.4em; border-radius: var(--r-1); }
256
+ .hl-purple { background: var(--purple); color: var(--purple-fg); padding: 0.08em 0.4em; border-radius: var(--r-1); }
257
+ .hl-mascot { background: var(--mascot); color: var(--mascot-fg); padding: 0.08em 0.4em; border-radius: var(--r-1); }
258
+ .hl-sun { background: var(--sun); color: var(--ink); padding: 0.08em 0.4em; border-radius: var(--r-1); }
259
+ .hl-flame { background: var(--flame); color: var(--paper); padding: 0.08em 0.4em; border-radius: var(--r-1); }
260
+ .hl-sky { background: var(--sky); color: var(--paper); padding: 0.08em 0.4em; border-radius: var(--r-1); }
261
+
262
+ /* Role-colored mono spans — semantic, self-documenting */
263
+ .m-k { color: var(--mono-2); font-weight: 500; } /* keyword */
264
+ .m-s { color: var(--mono-4); } /* string */
265
+ .m-n { color: var(--mono-1); } /* number / live */
266
+ .m-c { color: var(--fg-3); font-style: italic; } /* comment */
267
+ .m-tag { color: var(--mono-3); } /* tag / mention */
268
+ .m-op { color: var(--mono-5); } /* operator / punct */
269
+ .m-ref { color: var(--mono-6); text-decoration: underline; text-underline-offset: 3px; }
270
+
271
+ /* Links in prose */
272
+ .prose a, a.t-link {
273
+ color: var(--link);
274
+ text-decoration: underline;
275
+ text-underline-offset: 3px;
276
+ text-decoration-thickness: 1px;
277
+ }
278
+ .prose a:hover, a.t-link:hover {
279
+ background: var(--link);
280
+ color: var(--paper);
281
+ text-decoration: none;
282
+ }
283
+
284
+ /* ============================================================
285
+ Primitives — rails, rules, stamps, buttons
286
+
287
+ Rail = a 4px tonal stripe on the inline-start edge of any block.
288
+ Used to separate concerns by hue without ever drawing a border.
289
+ ============================================================ */
290
+
291
+ .rail { box-shadow: inset 4px 0 0 var(--panel-text-3); }
292
+ .rail-green { box-shadow: inset 4px 0 0 var(--green); }
293
+ .rail-purple { box-shadow: inset 4px 0 0 var(--purple); }
294
+ .rail-mascot { box-shadow: inset 4px 0 0 var(--mascot); }
295
+ .rail-sun { box-shadow: inset 4px 0 0 var(--sun); }
296
+ .rail-flame { box-shadow: inset 4px 0 0 var(--flame); }
297
+ .rail-sky { box-shadow: inset 4px 0 0 var(--sky); }
298
+ .rail-live { box-shadow: inset 4px 0 0 var(--live); }
299
+ .rail-warn { box-shadow: inset 4px 0 0 var(--warn); }
300
+
301
+ /* Dot — 8px tonal status pip. Use for "live", "draft", "shipped" indicators. */
302
+ .dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: var(--panel-text-3); vertical-align: middle; margin-right: 8px; }
303
+ .dot.green { background: var(--green); }
304
+ .dot.purple { background: var(--purple); }
305
+ .dot.mascot { background: var(--mascot); }
306
+ .dot.sun { background: var(--sun); }
307
+ .dot.flame { background: var(--flame); }
308
+ .dot.sky { background: var(--sky); }
309
+ .dot.live { background: var(--live); }
310
+ .dot.warn { background: var(--warn); }
311
+
312
+ .rule { margin: 0; }
313
+ .rule-double{ height: var(--bw-rule); margin: 0; }
314
+ .rule-dotted{ margin: 0; }
315
+ .rule-green { margin: 0; }
316
+ .rule-purple{ margin: 0; }
317
+ .rule-mascot{ margin: 0; }
318
+
319
+ /* The 247420 stamp */
320
+ .stamp {
321
+ display: inline-block;
322
+ padding: var(--space-1) var(--space-3);
323
+
324
+ border-radius: var(--r-pill);
325
+ color: var(--fg);
326
+ background: transparent;
327
+ font-family: var(--ff-ui);
328
+ font-size: var(--fs-tiny);
329
+ letter-spacing: 0.02em;
330
+ font-weight: 600;
331
+ transform: none;
332
+ }
333
+ .stamp.ink { background: var(--fg); color: var(--bg); }
334
+ .stamp.green { background: var(--green); color: var(--green-fg); }
335
+ .stamp.purple { background: var(--purple); color: var(--purple-fg); }
336
+ .stamp.mascot { background: var(--mascot); color: var(--mascot-fg); }
337
+ .stamp.sun { background: var(--sun); color: var(--ink); }
338
+ .stamp.flame { background: var(--flame); color: var(--paper); }
339
+
340
+ /* Legacy alias — .stamp.acid now means green */
341
+ .stamp.acid { background: var(--green); color: var(--green-fg); }
342
+
343
+ /* The "stamp button" */
344
+ .btn-stamp {
345
+ display: inline-flex;
346
+ align-items: center;
347
+ gap: var(--space-2);
348
+ padding: var(--space-3) var(--space-5);
349
+ background: var(--fg);
350
+ color: var(--bg);
351
+
352
+ border-radius: var(--r-pill);
353
+ font-family: var(--ff-ui);
354
+ font-weight: 600;
355
+ font-size: var(--fs-sm);
356
+ letter-spacing: 0.01em;
357
+ text-decoration: none;
358
+ cursor: pointer;
359
+ transition: filter var(--dur-base) var(--ease), background var(--dur-base) var(--ease);
360
+ }
361
+ .btn-stamp:hover { filter: brightness(1.05); }
362
+ .btn-stamp:active { filter: brightness(0.96); }
363
+
364
+ .btn-stamp.green { background: var(--green); color: var(--green-fg); }
365
+ .btn-stamp.purple { background: var(--purple); color: var(--purple-fg); }
366
+ .btn-stamp.mascot { background: var(--mascot); color: var(--mascot-fg); }
367
+ .btn-stamp.sun { background: var(--sun); color: var(--ink); }
368
+ .btn-stamp.flame { background: var(--flame); color: var(--paper); }
369
+ .btn-stamp.acid { background: var(--green); color: var(--green-fg); }
370
+
371
+ /* Plain button — default */
372
+ .btn {
373
+ display: inline-flex;
374
+ align-items: center;
375
+ gap: var(--space-2);
376
+ padding: var(--space-3) var(--space-5);
377
+ background: var(--bg-2);
378
+ color: var(--fg);
379
+
380
+ border-radius: var(--r-pill);
381
+ font-family: var(--ff-ui);
382
+ font-weight: 500;
383
+ font-size: var(--fs-sm);
384
+ letter-spacing: 0.01em;
385
+ text-decoration: none;
386
+ cursor: pointer;
387
+ transition: background var(--dur-base) var(--ease), color var(--dur-base) var(--ease);
388
+ }
389
+ .btn:hover { background: var(--green-2); color: var(--ink); }
390
+ .btn:active { background: var(--green); color: var(--green-fg); }
391
+
392
+ /* Ghost/link button */
393
+ .btn-ghost {
394
+ background: transparent;
395
+
396
+ color: var(--fg);
397
+ font-family: var(--ff-ui);
398
+ font-size: var(--fs-sm);
399
+ letter-spacing: 0.01em;
400
+ padding: var(--space-2) var(--space-3);
401
+ border-radius: var(--r-pill);
402
+ cursor: pointer;
403
+ text-decoration: none;
404
+ transition: background var(--dur-base) var(--ease), color var(--dur-base) var(--ease);
405
+ }
406
+ .btn-ghost:hover { color: var(--ink); background: var(--green-2); }
407
+
408
+ /* Input — softened: full border, rounded, 2px default */
409
+ .input {
410
+ width: 100%;
411
+ background: var(--bg);
412
+
413
+ border-radius: var(--r-2);
414
+ padding: var(--space-3) var(--space-3);
415
+ font-family: var(--ff-ui);
416
+ font-size: var(--fs-body);
417
+ color: var(--fg);
418
+
419
+ transition: border-color var(--dur-snap) var(--ease), box-shadow var(--dur-snap) var(--ease);
420
+ }
421
+ .input:focus {
422
+
423
+ box-shadow: 0 0 0 4px color-mix(in oklab, var(--green) 25%, transparent);
424
+ }
425
+ .input::placeholder { color: var(--fg-3); }
426
+
427
+ /* ============================================================
428
+ Layout scaffolds
429
+ ============================================================ */
430
+
431
+ .page { min-height: 100vh; padding: var(--space-5); }
432
+
433
+ .dateline {
434
+ display: flex;
435
+ justify-content: space-between;
436
+ align-items: baseline;
437
+ gap: var(--space-4);
438
+ padding-bottom: var(--space-2);
439
+
440
+ font-family: var(--ff-ui);
441
+ font-size: var(--fs-xs);
442
+ letter-spacing: 0.02em;
443
+ color: var(--fg-3);
444
+ }
445
+ .dateline > * { white-space: nowrap; }
446
+ .dateline .spread { flex: 1; align-self: center; }
447
+
448
+ /* Index-card row — soft card with breathing room */
449
+ .row {
450
+ display: grid;
451
+ grid-template-columns: 80px 1fr auto;
452
+ gap: var(--space-4);
453
+ padding: var(--space-4);
454
+
455
+ border-radius: var(--r-3);
456
+ background: var(--bg);
457
+ align-items: baseline;
458
+ margin-bottom: calc(var(--bw-hair) * -1);
459
+ transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease), transform var(--dur-snap) var(--ease);
460
+ }
461
+ .row + .row { margin-top: var(--space-2); margin-bottom: 0; }
462
+ .row .row-code { font-family: var(--ff-mono); font-size: var(--fs-xs); letter-spacing: 0.02em; color: var(--mono-1); }
463
+ .row .row-title { font-family: var(--ff-display); font-weight: 700; font-size: var(--fs-h3); line-height: var(--lh-snug); letter-spacing: var(--tr-tight); }
464
+ .row .row-meta { font-family: var(--ff-ui); font-size: var(--fs-xs); letter-spacing: 0.02em; color: var(--fg-3); }
465
+ .row:hover { background: var(--green-2); color: var(--ink); }
466
+ .row:hover .row-code { color: var(--green-deep); }
467
+ .row:hover .row-meta { color: var(--ink); }
468
+
469
+ /* Soft card — the generic container */
470
+ .card {
471
+
472
+ border-radius: var(--r-3);
473
+ background: var(--bg);
474
+ padding: var(--space-5);
475
+ }
476
+ .card.chunk { }
477
+
478
+ /* ============================================================
479
+ Selection
480
+ ============================================================ */
481
+ ::selection { background: var(--mascot); color: var(--mascot-fg); }
482
+
483
+
484
+ /* ============================================================
485
+ Panel surface tokens — brand-bible parchment palette
486
+ Light default. Dark via prefers-color-scheme or [data-theme="dark"].
487
+ ============================================================ */
488
+ :root {
489
+ --panel-0: var(--paper); /* warm canvas */
490
+ --panel-1: #FBF6EB;
491
+ --panel-2: #F0E9DA;
492
+ --panel-3: #E3DAC7;
493
+ --panel-hover: #EBE1CD;
494
+ --panel-select: #D8ECCB;
495
+ --panel-text: var(--ink);
496
+ --panel-text-2: #5A5246;
497
+ --panel-text-3: #857B6C;
498
+ --panel-accent: var(--green);
499
+ --panel-accent-2: var(--green-deep);
500
+ --panel-accent-fg: #ffffff;
501
+ --panel-shadow: none;
502
+ --panel-shadow-top: none;
503
+ }
504
+
505
+ @media (prefers-color-scheme: dark) {
506
+ :root:not([data-theme="light"]) {
507
+ --panel-0: #1A1B1E;
508
+ --panel-1: #232428;
509
+ --panel-2: #2B2D31;
510
+ --panel-3: #36383E;
511
+ --panel-hover: #36383E;
512
+ --panel-select: #29402F;
513
+ --panel-text: #ECEEF2;
514
+ --panel-text-2: #BFC3CB;
515
+ --panel-text-3: #92979F;
516
+ --panel-accent: var(--green-2);
517
+ --panel-accent-2: var(--green-2);
518
+ --panel-accent-fg: var(--ink);
519
+ --panel-shadow: none;
520
+ --panel-shadow-top: none;
521
+ }
522
+ }
523
+
524
+ [data-theme="dark"],
525
+ [data-theme="ink"] {
526
+ --panel-0: #1A1B1E;
527
+ --panel-1: #232428;
528
+ --panel-2: #2B2D31;
529
+ --panel-3: #36383E;
530
+ --panel-hover: #36383E;
531
+ --panel-select: #29402F;
532
+ --panel-text: #ECEEF2;
533
+ --panel-text-2: #BFC3CB;
534
+ --panel-text-3: #92979F;
535
+ --panel-accent: var(--green-2);
536
+ --panel-accent-2: var(--green-2);
537
+ --panel-accent-fg: var(--ink);
538
+ --panel-shadow: none;
539
+ --panel-shadow-top: none;
540
+ }
541
+
542
+ [data-theme="light"] {
543
+ --panel-0: var(--paper);
544
+ --panel-1: #FBF6EB;
545
+ --panel-2: #F0E9DA;
546
+ --panel-3: #E3DAC7;
547
+ --panel-hover: #EBE1CD;
548
+ --panel-select: #D8ECCB;
549
+ --panel-text: var(--ink);
550
+ --panel-text-2: #4a473f;
551
+ --panel-text-3: #6d675b;
552
+ --panel-accent: var(--green);
553
+ --panel-accent-2: var(--green-deep);
554
+ --panel-accent-fg: #ffffff;
555
+ --panel-shadow: none;
556
+ }
557
+
558
+ /* Foreground / background aliases derived from panel tokens */
559
+ :root {
560
+ --fg: var(--panel-text);
561
+ --fg-3: var(--panel-text-3);
562
+ --bg: var(--panel-0);
563
+ --bg-2: var(--panel-2);
564
+ }
565
+ @media (prefers-color-scheme: dark) {
566
+ :root:not([data-theme="light"]) {
567
+ --fg: var(--panel-text);
568
+ --fg-3: var(--panel-text-3);
569
+ --bg: var(--panel-0);
570
+ --bg-2: var(--panel-2);
571
+ }
572
+ }
573
+ [data-theme="dark"],
574
+ [data-theme="ink"] { --fg: var(--panel-text); --fg-3: var(--panel-text-3); --bg: var(--panel-0); --bg-2: var(--panel-2); }
575
+ [data-theme="light"] { --fg: var(--panel-text); --fg-3: var(--panel-text-3); --bg: var(--panel-0); --bg-2: var(--panel-2); }
576
+
577
+ /* Contrast safety on any acid/lime/mint surface — text must be ink,
578
+ never light grey / white. Covers the --acid token and any hue that
579
+ pairs a near-white fg against a near-white accent. */
580
+ .on-acid, .on-lime, [data-accent="acid"], [data-accent="lime"] {
581
+ background: var(--acid);
582
+ color: var(--ink);
583
+ }
584
+ .on-acid *, .on-lime *, [data-accent="acid"] *, [data-accent="lime"] * {
585
+ color: inherit;
586
+ }
587
+
588
+ /* Hard guard: accent backgrounds must use --panel-accent-fg, not literal white.
589
+ In dark mode --panel-accent flips to a LIGHT mint; literal #fff text on top
590
+ becomes invisible. Catch any drift via attribute-style selectors and the
591
+ common chip/status/btn-primary/topbar-active patterns. */
592
+ .chip.accent,
593
+ .app-status,
594
+ .app-status a,
595
+ .app-topbar nav a.active,
596
+ .btn-primary,
597
+ [data-on-accent] {
598
+ color: var(--panel-accent-fg) !important;
599
+ }
600
+ [data-on-accent] { background: var(--panel-accent); }
601
+
602
+ /* Universal reset — no borders, no outlines except :focus-visible */
603
+ *, *::before, *::after { box-sizing: border-box; border: 0 !important; outline: 0 !important; }
604
+ :focus-visible { outline: 2px solid var(--panel-accent) !important; outline-offset: 2px; }
605
+ html, body { margin: 0; padding: 0; }
606
+
607
+ /* Button base reset — bare <button> is unstyled; use .btn/.btn-primary/.btn-ghost for styled buttons. */
608
+ button {
609
+ padding: 0;
610
+ background: none;
611
+ font-family: var(--ff-ui);
612
+ font-size: var(--fs-sm);
613
+ cursor: pointer;
614
+ color: inherit;
615
+ }
616
+ textarea {
617
+ padding: 10px 12px;
618
+ border-radius: var(--r-2);
619
+ font-family: var(--ff-ui);
620
+ font-size: var(--fs-sm);
621
+ background: var(--bg-2);
622
+ color: var(--fg);
623
+ resize: vertical;
624
+ }
625
+ textarea::placeholder { color: var(--fg-3); }