@fabio.caffarello/react-design-system 4.4.0 → 4.5.0
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.
- package/README.md +15 -1
- package/dist/react-design-system.css +1 -1
- package/dist/tokens.css +2920 -0
- package/package.json +16 -14
package/dist/tokens.css
ADDED
|
@@ -0,0 +1,2920 @@
|
|
|
1
|
+
/*! Design System raw token source — @theme + light/dark overrides.
|
|
2
|
+
* Generated from src/styles/tokens.css by scripts/build-tokens-css.mjs (issue #234).
|
|
3
|
+
* Consume via the "./theme" export alongside "./styles":
|
|
4
|
+
* @import "tailwindcss";
|
|
5
|
+
* @import "@fabio.caffarello/react-design-system/styles" layer(rds);
|
|
6
|
+
* @import "@fabio.caffarello/react-design-system/theme";
|
|
7
|
+
* Your Tailwind generates the utilities natively from the @theme blocks below.
|
|
8
|
+
* DO NOT edit dist/tokens.css by hand — edit the src/styles token files. */
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Design System — Raw Token Source (consumer-extendable)
|
|
12
|
+
*
|
|
13
|
+
* This is the SOURCE-of-truth token cascade with NOTHING Tailwind-specific
|
|
14
|
+
* around it: no `@import "tailwindcss"`, no `@source`, no utilities, no
|
|
15
|
+
* component classes. It carries only the `@theme {…}` blocks (primitives +
|
|
16
|
+
* semantic) and the light/dark selector overrides.
|
|
17
|
+
*
|
|
18
|
+
* It exists so a Tailwind v4 consumer can `@import` the design system's
|
|
19
|
+
* tokens RAW and let THEIR OWN Tailwind generate the utilities natively
|
|
20
|
+
* (`text-fg-brand`, `bg-surface-brand-strong`, `ring-line-focus`, …) —
|
|
21
|
+
* theme-aware, with one source of truth and no fragile re-export bridge.
|
|
22
|
+
* Issue #234.
|
|
23
|
+
*
|
|
24
|
+
* Build artifact: `scripts/build-tokens-css.mjs` inlines this `@import`
|
|
25
|
+
* chain into `dist/tokens.css` WITHOUT running it through Tailwind (the
|
|
26
|
+
* `@theme` blocks must reach the consumer uncompiled). Published as the
|
|
27
|
+
* `./theme` (and `./theme.css`) package export.
|
|
28
|
+
*
|
|
29
|
+
* DO NOT add `@import "tailwindcss"`, `@source`, `@apply`, or utility/
|
|
30
|
+
* component CSS here — those belong to `src/styles/index.css` (the batteries-
|
|
31
|
+
* included compiled `./styles` bundle), never to the raw token source.
|
|
32
|
+
* `scripts/validate-theme-export.mjs` fails the build if any leak in.
|
|
33
|
+
*
|
|
34
|
+
* The import order mirrors `src/styles/index.css` exactly (primitives →
|
|
35
|
+
* semantic → themes), minus the Tailwind entry and the utilities tail, so
|
|
36
|
+
* the two never drift in token coverage.
|
|
37
|
+
*
|
|
38
|
+
* @brand brasil-a-vera (default, overridable)
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
/* ============================================
|
|
42
|
+
* PRIMITIVE TOKENS
|
|
43
|
+
* Raw design values — colors, spacing, etc.
|
|
44
|
+
* ============================================ */
|
|
45
|
+
|
|
46
|
+
/* ↳ inlined from src/styles/primitives/colors.css */
|
|
47
|
+
/**
|
|
48
|
+
* Design System - Primitive Colors
|
|
49
|
+
*
|
|
50
|
+
* Complete color scales (50-950) for the design system.
|
|
51
|
+
* These are the raw color values that semantic tokens reference.
|
|
52
|
+
*
|
|
53
|
+
* @brand brasil-a-vera (default, overridable)
|
|
54
|
+
* @version 1.0.0
|
|
55
|
+
*/
|
|
56
|
+
|
|
57
|
+
@theme {
|
|
58
|
+
/* ============================================
|
|
59
|
+
* BASE COLORS
|
|
60
|
+
* ============================================ */
|
|
61
|
+
|
|
62
|
+
--color-white: #ffffff;
|
|
63
|
+
--color-black: #000000;
|
|
64
|
+
--color-transparent: transparent;
|
|
65
|
+
--color-current: currentColor;
|
|
66
|
+
|
|
67
|
+
/* ============================================
|
|
68
|
+
* INDIGO - Primary Brand Color
|
|
69
|
+
* Modern, tech, innovation
|
|
70
|
+
* ============================================ */
|
|
71
|
+
|
|
72
|
+
--color-indigo-50: #eef2ff;
|
|
73
|
+
--color-indigo-100: #e0e7ff;
|
|
74
|
+
--color-indigo-200: #c7d2fe;
|
|
75
|
+
--color-indigo-300: #a5b4fc;
|
|
76
|
+
--color-indigo-400: #818cf8;
|
|
77
|
+
--color-indigo-500: #6366f1;
|
|
78
|
+
--color-indigo-600: #4f46e5;
|
|
79
|
+
--color-indigo-700: #4338ca;
|
|
80
|
+
--color-indigo-800: #3730a3;
|
|
81
|
+
--color-indigo-900: #312e81;
|
|
82
|
+
--color-indigo-950: #1e1b4b;
|
|
83
|
+
|
|
84
|
+
/* ============================================
|
|
85
|
+
* VIOLET - Secondary Brand Color
|
|
86
|
+
* Complementary to indigo, creative accent
|
|
87
|
+
* ============================================ */
|
|
88
|
+
|
|
89
|
+
--color-violet-50: #f5f3ff;
|
|
90
|
+
--color-violet-100: #ede9fe;
|
|
91
|
+
--color-violet-200: #ddd6fe;
|
|
92
|
+
--color-violet-300: #c4b5fd;
|
|
93
|
+
--color-violet-400: #a78bfa;
|
|
94
|
+
--color-violet-500: #8b5cf6;
|
|
95
|
+
--color-violet-600: #7c3aed;
|
|
96
|
+
--color-violet-700: #6d28d9;
|
|
97
|
+
--color-violet-800: #5b21b6;
|
|
98
|
+
--color-violet-900: #4c1d95;
|
|
99
|
+
--color-violet-950: #2e1065;
|
|
100
|
+
|
|
101
|
+
/* ============================================
|
|
102
|
+
* CYAN - Accent Color
|
|
103
|
+
* Fresh, modern highlights
|
|
104
|
+
* ============================================ */
|
|
105
|
+
|
|
106
|
+
--color-cyan-50: #ecfeff;
|
|
107
|
+
--color-cyan-100: #cffafe;
|
|
108
|
+
--color-cyan-200: #a5f3fc;
|
|
109
|
+
--color-cyan-300: #67e8f9;
|
|
110
|
+
--color-cyan-400: #22d3ee;
|
|
111
|
+
--color-cyan-500: #06b6d4;
|
|
112
|
+
--color-cyan-600: #0891b2;
|
|
113
|
+
--color-cyan-700: #0e7490;
|
|
114
|
+
--color-cyan-800: #155e75;
|
|
115
|
+
--color-cyan-900: #164e63;
|
|
116
|
+
--color-cyan-950: #083344;
|
|
117
|
+
|
|
118
|
+
/* ============================================
|
|
119
|
+
* SLATE - Neutral Color
|
|
120
|
+
* UI backgrounds, text, borders
|
|
121
|
+
* ============================================ */
|
|
122
|
+
|
|
123
|
+
--color-slate-50: #f8fafc;
|
|
124
|
+
--color-slate-100: #f1f5f9;
|
|
125
|
+
--color-slate-200: #e2e8f0;
|
|
126
|
+
--color-slate-300: #cbd5e1;
|
|
127
|
+
--color-slate-400: #94a3b8;
|
|
128
|
+
--color-slate-500: #64748b;
|
|
129
|
+
--color-slate-600: #475569;
|
|
130
|
+
--color-slate-700: #334155;
|
|
131
|
+
--color-slate-800: #1e293b;
|
|
132
|
+
--color-slate-900: #0f172a;
|
|
133
|
+
--color-slate-950: #020617;
|
|
134
|
+
|
|
135
|
+
/* ============================================
|
|
136
|
+
* GRAY - Alternative Neutral
|
|
137
|
+
* Pure gray without blue undertone
|
|
138
|
+
* ============================================ */
|
|
139
|
+
|
|
140
|
+
--color-gray-50: #f9fafb;
|
|
141
|
+
--color-gray-100: #f3f4f6;
|
|
142
|
+
--color-gray-200: #e5e7eb;
|
|
143
|
+
--color-gray-300: #d1d5db;
|
|
144
|
+
--color-gray-400: #9ca3af;
|
|
145
|
+
--color-gray-500: #6b7280;
|
|
146
|
+
--color-gray-600: #4b5563;
|
|
147
|
+
--color-gray-700: #374151;
|
|
148
|
+
--color-gray-800: #1f2937;
|
|
149
|
+
--color-gray-900: #111827;
|
|
150
|
+
--color-gray-950: #030712;
|
|
151
|
+
|
|
152
|
+
/* ============================================
|
|
153
|
+
* EMERALD - Success Color
|
|
154
|
+
* Positive actions, confirmations
|
|
155
|
+
* ============================================ */
|
|
156
|
+
|
|
157
|
+
--color-emerald-50: #ecfdf5;
|
|
158
|
+
--color-emerald-100: #d1fae5;
|
|
159
|
+
--color-emerald-200: #a7f3d0;
|
|
160
|
+
--color-emerald-300: #6ee7b7;
|
|
161
|
+
--color-emerald-400: #34d399;
|
|
162
|
+
--color-emerald-500: #10b981;
|
|
163
|
+
--color-emerald-600: #059669;
|
|
164
|
+
--color-emerald-700: #047857;
|
|
165
|
+
--color-emerald-800: #065f46;
|
|
166
|
+
--color-emerald-900: #064e3b;
|
|
167
|
+
--color-emerald-950: #022c22;
|
|
168
|
+
|
|
169
|
+
/* ============================================
|
|
170
|
+
* GREEN - Alternative Success
|
|
171
|
+
* Brighter, more vibrant success
|
|
172
|
+
* ============================================ */
|
|
173
|
+
|
|
174
|
+
--color-green-50: #f0fdf4;
|
|
175
|
+
--color-green-100: #dcfce7;
|
|
176
|
+
--color-green-200: #bbf7d0;
|
|
177
|
+
--color-green-300: #86efac;
|
|
178
|
+
--color-green-400: #4ade80;
|
|
179
|
+
--color-green-500: #22c55e;
|
|
180
|
+
--color-green-600: #16a34a;
|
|
181
|
+
--color-green-700: #15803d;
|
|
182
|
+
--color-green-800: #166534;
|
|
183
|
+
--color-green-900: #14532d;
|
|
184
|
+
--color-green-950: #052e16;
|
|
185
|
+
|
|
186
|
+
/* ============================================
|
|
187
|
+
* AMBER - Warning Color
|
|
188
|
+
* Caution, attention needed
|
|
189
|
+
* ============================================ */
|
|
190
|
+
|
|
191
|
+
--color-amber-50: #fffbeb;
|
|
192
|
+
--color-amber-100: #fef3c7;
|
|
193
|
+
--color-amber-200: #fde68a;
|
|
194
|
+
--color-amber-300: #fcd34d;
|
|
195
|
+
--color-amber-400: #fbbf24;
|
|
196
|
+
--color-amber-500: #f59e0b;
|
|
197
|
+
--color-amber-600: #d97706;
|
|
198
|
+
--color-amber-700: #b45309;
|
|
199
|
+
--color-amber-800: #92400e;
|
|
200
|
+
--color-amber-900: #78350f;
|
|
201
|
+
--color-amber-950: #451a03;
|
|
202
|
+
|
|
203
|
+
/* ============================================
|
|
204
|
+
* YELLOW - Alternative Warning
|
|
205
|
+
* Brighter, more visible warning
|
|
206
|
+
* ============================================ */
|
|
207
|
+
|
|
208
|
+
--color-yellow-50: #fefce8;
|
|
209
|
+
--color-yellow-100: #fef9c3;
|
|
210
|
+
--color-yellow-200: #fef08a;
|
|
211
|
+
--color-yellow-300: #fde047;
|
|
212
|
+
--color-yellow-400: #facc15;
|
|
213
|
+
--color-yellow-500: #eab308;
|
|
214
|
+
--color-yellow-600: #ca8a04;
|
|
215
|
+
--color-yellow-700: #a16207;
|
|
216
|
+
--color-yellow-800: #854d0e;
|
|
217
|
+
--color-yellow-900: #713f12;
|
|
218
|
+
--color-yellow-950: #422006;
|
|
219
|
+
|
|
220
|
+
/* ============================================
|
|
221
|
+
* ORANGE - Energetic Accent
|
|
222
|
+
* Energy, enthusiasm, CTAs
|
|
223
|
+
* ============================================ */
|
|
224
|
+
|
|
225
|
+
--color-orange-50: #fff7ed;
|
|
226
|
+
--color-orange-100: #ffedd5;
|
|
227
|
+
--color-orange-200: #fed7aa;
|
|
228
|
+
--color-orange-300: #fdba74;
|
|
229
|
+
--color-orange-400: #fb923c;
|
|
230
|
+
--color-orange-500: #f97316;
|
|
231
|
+
--color-orange-600: #ea580c;
|
|
232
|
+
--color-orange-700: #c2410c;
|
|
233
|
+
--color-orange-800: #9a3412;
|
|
234
|
+
--color-orange-900: #7c2d12;
|
|
235
|
+
--color-orange-950: #431407;
|
|
236
|
+
|
|
237
|
+
/* ============================================
|
|
238
|
+
* ROSE - Error Color
|
|
239
|
+
* Errors, destructive actions
|
|
240
|
+
* ============================================ */
|
|
241
|
+
|
|
242
|
+
--color-rose-50: #fff1f2;
|
|
243
|
+
--color-rose-100: #ffe4e6;
|
|
244
|
+
--color-rose-200: #fecdd3;
|
|
245
|
+
--color-rose-300: #fda4af;
|
|
246
|
+
--color-rose-400: #fb7185;
|
|
247
|
+
--color-rose-500: #f43f5e;
|
|
248
|
+
--color-rose-600: #e11d48;
|
|
249
|
+
--color-rose-700: #be123c;
|
|
250
|
+
--color-rose-800: #9f1239;
|
|
251
|
+
--color-rose-900: #881337;
|
|
252
|
+
--color-rose-950: #4c0519;
|
|
253
|
+
|
|
254
|
+
/* ============================================
|
|
255
|
+
* RED - Alternative Error
|
|
256
|
+
* Pure red for critical errors
|
|
257
|
+
* ============================================ */
|
|
258
|
+
|
|
259
|
+
--color-red-50: #fef2f2;
|
|
260
|
+
--color-red-100: #fee2e2;
|
|
261
|
+
--color-red-200: #fecaca;
|
|
262
|
+
--color-red-300: #fca5a5;
|
|
263
|
+
--color-red-400: #f87171;
|
|
264
|
+
--color-red-500: #ef4444;
|
|
265
|
+
--color-red-600: #dc2626;
|
|
266
|
+
--color-red-700: #b91c1c;
|
|
267
|
+
--color-red-800: #991b1b;
|
|
268
|
+
--color-red-900: #7f1d1d;
|
|
269
|
+
--color-red-950: #450a0a;
|
|
270
|
+
|
|
271
|
+
/* ============================================
|
|
272
|
+
* SKY - Info Color
|
|
273
|
+
* Informational, neutral feedback
|
|
274
|
+
* ============================================ */
|
|
275
|
+
|
|
276
|
+
--color-sky-50: #f0f9ff;
|
|
277
|
+
--color-sky-100: #e0f2fe;
|
|
278
|
+
--color-sky-200: #bae6fd;
|
|
279
|
+
--color-sky-300: #7dd3fc;
|
|
280
|
+
--color-sky-400: #38bdf8;
|
|
281
|
+
--color-sky-500: #0ea5e9;
|
|
282
|
+
--color-sky-600: #0284c7;
|
|
283
|
+
--color-sky-700: #0369a1;
|
|
284
|
+
--color-sky-800: #075985;
|
|
285
|
+
--color-sky-900: #0c4a6e;
|
|
286
|
+
--color-sky-950: #082f49;
|
|
287
|
+
|
|
288
|
+
/* ============================================
|
|
289
|
+
* BLUE - Alternative Info
|
|
290
|
+
* Traditional blue info color
|
|
291
|
+
* ============================================ */
|
|
292
|
+
|
|
293
|
+
--color-blue-50: #eff6ff;
|
|
294
|
+
--color-blue-100: #dbeafe;
|
|
295
|
+
--color-blue-200: #bfdbfe;
|
|
296
|
+
--color-blue-300: #93c5fd;
|
|
297
|
+
--color-blue-400: #60a5fa;
|
|
298
|
+
--color-blue-500: #3b82f6;
|
|
299
|
+
--color-blue-600: #2563eb;
|
|
300
|
+
--color-blue-700: #1d4ed8;
|
|
301
|
+
--color-blue-800: #1e40af;
|
|
302
|
+
--color-blue-900: #1e3a8a;
|
|
303
|
+
--color-blue-950: #172554;
|
|
304
|
+
|
|
305
|
+
/* ============================================
|
|
306
|
+
* FUCHSIA - Creative Accent
|
|
307
|
+
* Vibrant, playful, creative variant
|
|
308
|
+
* ============================================ */
|
|
309
|
+
|
|
310
|
+
--color-fuchsia-50: #fdf4ff;
|
|
311
|
+
--color-fuchsia-100: #fae8ff;
|
|
312
|
+
--color-fuchsia-200: #f5d0fe;
|
|
313
|
+
--color-fuchsia-300: #f0abfc;
|
|
314
|
+
--color-fuchsia-400: #e879f9;
|
|
315
|
+
--color-fuchsia-500: #d946ef;
|
|
316
|
+
--color-fuchsia-600: #c026d3;
|
|
317
|
+
--color-fuchsia-700: #a21caf;
|
|
318
|
+
--color-fuchsia-800: #86198f;
|
|
319
|
+
--color-fuchsia-900: #701a75;
|
|
320
|
+
--color-fuchsia-950: #4a044e;
|
|
321
|
+
|
|
322
|
+
/* ============================================
|
|
323
|
+
* PINK - Soft Accent
|
|
324
|
+
* Softer than fuchsia, friendly
|
|
325
|
+
* ============================================ */
|
|
326
|
+
|
|
327
|
+
--color-pink-50: #fdf2f8;
|
|
328
|
+
--color-pink-100: #fce7f3;
|
|
329
|
+
--color-pink-200: #fbcfe8;
|
|
330
|
+
--color-pink-300: #f9a8d4;
|
|
331
|
+
--color-pink-400: #f472b6;
|
|
332
|
+
--color-pink-500: #ec4899;
|
|
333
|
+
--color-pink-600: #db2777;
|
|
334
|
+
--color-pink-700: #be185d;
|
|
335
|
+
--color-pink-800: #9d174d;
|
|
336
|
+
--color-pink-900: #831843;
|
|
337
|
+
--color-pink-950: #500724;
|
|
338
|
+
|
|
339
|
+
/* ============================================
|
|
340
|
+
* PURPLE - Deep Accent
|
|
341
|
+
* Royal, premium feel
|
|
342
|
+
* ============================================ */
|
|
343
|
+
|
|
344
|
+
--color-purple-50: #faf5ff;
|
|
345
|
+
--color-purple-100: #f3e8ff;
|
|
346
|
+
--color-purple-200: #e9d5ff;
|
|
347
|
+
--color-purple-300: #d8b4fe;
|
|
348
|
+
--color-purple-400: #c084fc;
|
|
349
|
+
--color-purple-500: #a855f7;
|
|
350
|
+
--color-purple-600: #9333ea;
|
|
351
|
+
--color-purple-700: #7e22ce;
|
|
352
|
+
--color-purple-800: #6b21a8;
|
|
353
|
+
--color-purple-900: #581c87;
|
|
354
|
+
--color-purple-950: #3b0764;
|
|
355
|
+
|
|
356
|
+
/* ============================================
|
|
357
|
+
* TEAL - Fresh Accent
|
|
358
|
+
* Nature, freshness, balance
|
|
359
|
+
* ============================================ */
|
|
360
|
+
|
|
361
|
+
--color-teal-50: #f0fdfa;
|
|
362
|
+
--color-teal-100: #ccfbf1;
|
|
363
|
+
--color-teal-200: #99f6e4;
|
|
364
|
+
--color-teal-300: #5eead4;
|
|
365
|
+
--color-teal-400: #2dd4bf;
|
|
366
|
+
--color-teal-500: #14b8a6;
|
|
367
|
+
--color-teal-600: #0d9488;
|
|
368
|
+
--color-teal-700: #0f766e;
|
|
369
|
+
--color-teal-800: #115e59;
|
|
370
|
+
--color-teal-900: #134e4a;
|
|
371
|
+
--color-teal-950: #042f2e;
|
|
372
|
+
|
|
373
|
+
/* ============================================
|
|
374
|
+
* LIME - Vibrant Success
|
|
375
|
+
* High energy, growth
|
|
376
|
+
* ============================================ */
|
|
377
|
+
|
|
378
|
+
--color-lime-50: #f7fee7;
|
|
379
|
+
--color-lime-100: #ecfccb;
|
|
380
|
+
--color-lime-200: #d9f99d;
|
|
381
|
+
--color-lime-300: #bef264;
|
|
382
|
+
--color-lime-400: #a3e635;
|
|
383
|
+
--color-lime-500: #84cc16;
|
|
384
|
+
--color-lime-600: #65a30d;
|
|
385
|
+
--color-lime-700: #4d7c0f;
|
|
386
|
+
--color-lime-800: #3f6212;
|
|
387
|
+
--color-lime-900: #365314;
|
|
388
|
+
--color-lime-950: #1a2e05;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
/* ↳ inlined from src/styles/primitives/brand.css */
|
|
392
|
+
/**
|
|
393
|
+
* Brand Primitive Scales — brasil-a-vera identity (default, overridable)
|
|
394
|
+
*
|
|
395
|
+
* The RDS ships a default brand identity. Consumers reskin by redefining
|
|
396
|
+
* --color-brand-primary-* / --color-brand-secondary-* in their own
|
|
397
|
+
* @theme or :root. The Tailwind primitives in colors.css
|
|
398
|
+
* (--color-indigo-*, --color-pink-*, --color-cyan-*, ...) stay honest
|
|
399
|
+
* to their official Tailwind v4 HEX and are NOT the reskin surface.
|
|
400
|
+
*
|
|
401
|
+
* Semantic tokens in semantic/colors.css cascade via var() and DO NOT
|
|
402
|
+
* need to be touched by consumers.
|
|
403
|
+
*
|
|
404
|
+
* primary scale: institutional navy from brasil-a-vera globals.css.
|
|
405
|
+
* secondary scale: OKLCH-derived from ADR-024 brasil-a-vera purple
|
|
406
|
+
* (hue 295). Reproducible via scripts/derive-brand-secondary.mjs.
|
|
407
|
+
*
|
|
408
|
+
* @brand brasil-a-vera (default, overridable)
|
|
409
|
+
*/
|
|
410
|
+
|
|
411
|
+
@theme {
|
|
412
|
+
/* ============================================
|
|
413
|
+
* BRAND PRIMARY — institutional navy (brasil-a-vera)
|
|
414
|
+
* ============================================ */
|
|
415
|
+
|
|
416
|
+
--color-brand-primary-50: #f0f4f8;
|
|
417
|
+
--color-brand-primary-100: #d9e2ec;
|
|
418
|
+
--color-brand-primary-200: #bcccdc;
|
|
419
|
+
--color-brand-primary-300: #9fb3c8;
|
|
420
|
+
--color-brand-primary-400: #7390ad;
|
|
421
|
+
--color-brand-primary-500: #486581;
|
|
422
|
+
--color-brand-primary-600: #334e68;
|
|
423
|
+
--color-brand-primary-700: #243b53;
|
|
424
|
+
--color-brand-primary-800: #1a2a3a;
|
|
425
|
+
--color-brand-primary-900: #102a43;
|
|
426
|
+
--color-brand-primary-950: #061a35;
|
|
427
|
+
|
|
428
|
+
/* ============================================
|
|
429
|
+
* BRAND SECONDARY — ADR-024 purple (OKLCH-derived, hue 295)
|
|
430
|
+
* ============================================ */
|
|
431
|
+
|
|
432
|
+
--color-brand-secondary-50: #f7f5ff;
|
|
433
|
+
--color-brand-secondary-100: #eee9ff;
|
|
434
|
+
--color-brand-secondary-200: #e0d6ff;
|
|
435
|
+
--color-brand-secondary-300: #cbb8ff;
|
|
436
|
+
--color-brand-secondary-400: #aa89fc;
|
|
437
|
+
--color-brand-secondary-500: #8e58f2;
|
|
438
|
+
--color-brand-secondary-600: #703bc8;
|
|
439
|
+
--color-brand-secondary-700: #582aa2;
|
|
440
|
+
--color-brand-secondary-800: #44227e;
|
|
441
|
+
--color-brand-secondary-900: #32185d;
|
|
442
|
+
--color-brand-secondary-950: #180635;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
/* ↳ inlined from src/styles/primitives/spacing.css */
|
|
446
|
+
/**
|
|
447
|
+
* Design System - Spacing Scale
|
|
448
|
+
*
|
|
449
|
+
* Consistent spacing system based on 4px base unit.
|
|
450
|
+
* Used for margins, paddings, gaps, and layout.
|
|
451
|
+
*
|
|
452
|
+
* @brand brasil-a-vera (default, overridable)
|
|
453
|
+
* @version 1.0.0
|
|
454
|
+
*/
|
|
455
|
+
|
|
456
|
+
@theme {
|
|
457
|
+
/* ============================================
|
|
458
|
+
* SPACING SCALE
|
|
459
|
+
* Base unit: 4px (0.25rem)
|
|
460
|
+
* ============================================ */
|
|
461
|
+
|
|
462
|
+
/* Micro spacing (0-4px) */
|
|
463
|
+
--spacing-0: 0px;
|
|
464
|
+
--spacing-px: 1px;
|
|
465
|
+
--spacing-0-5: 0.125rem; /* 2px */
|
|
466
|
+
--spacing-1: 0.25rem; /* 4px */
|
|
467
|
+
|
|
468
|
+
/* Small spacing (8-16px) */
|
|
469
|
+
--spacing-1-5: 0.375rem; /* 6px */
|
|
470
|
+
--spacing-2: 0.5rem; /* 8px */
|
|
471
|
+
--spacing-2-5: 0.625rem; /* 10px */
|
|
472
|
+
--spacing-3: 0.75rem; /* 12px */
|
|
473
|
+
--spacing-3-5: 0.875rem; /* 14px */
|
|
474
|
+
--spacing-4: 1rem; /* 16px */
|
|
475
|
+
|
|
476
|
+
/* Medium spacing (20-32px) */
|
|
477
|
+
--spacing-5: 1.25rem; /* 20px */
|
|
478
|
+
--spacing-6: 1.5rem; /* 24px */
|
|
479
|
+
--spacing-7: 1.75rem; /* 28px */
|
|
480
|
+
--spacing-8: 2rem; /* 32px */
|
|
481
|
+
|
|
482
|
+
/* Large spacing (36-64px) */
|
|
483
|
+
--spacing-9: 2.25rem; /* 36px */
|
|
484
|
+
--spacing-10: 2.5rem; /* 40px */
|
|
485
|
+
--spacing-11: 2.75rem; /* 44px */
|
|
486
|
+
--spacing-12: 3rem; /* 48px */
|
|
487
|
+
--spacing-14: 3.5rem; /* 56px */
|
|
488
|
+
--spacing-16: 4rem; /* 64px */
|
|
489
|
+
|
|
490
|
+
/* Extra large spacing (80-384px) */
|
|
491
|
+
--spacing-20: 5rem; /* 80px */
|
|
492
|
+
--spacing-24: 6rem; /* 96px */
|
|
493
|
+
--spacing-28: 7rem; /* 112px */
|
|
494
|
+
--spacing-32: 8rem; /* 128px */
|
|
495
|
+
--spacing-36: 9rem; /* 144px */
|
|
496
|
+
--spacing-40: 10rem; /* 160px */
|
|
497
|
+
--spacing-44: 11rem; /* 176px */
|
|
498
|
+
--spacing-48: 12rem; /* 192px */
|
|
499
|
+
--spacing-52: 13rem; /* 208px */
|
|
500
|
+
--spacing-56: 14rem; /* 224px */
|
|
501
|
+
--spacing-60: 15rem; /* 240px */
|
|
502
|
+
--spacing-64: 16rem; /* 256px */
|
|
503
|
+
--spacing-72: 18rem; /* 288px */
|
|
504
|
+
--spacing-80: 20rem; /* 320px */
|
|
505
|
+
--spacing-96: 24rem; /* 384px */
|
|
506
|
+
|
|
507
|
+
/* ============================================
|
|
508
|
+
* SEMANTIC SPACING
|
|
509
|
+
* Named tokens for common use cases
|
|
510
|
+
* ============================================ */
|
|
511
|
+
|
|
512
|
+
/* Component internal spacing */
|
|
513
|
+
--spacing-component-xs: var(--spacing-1); /* 4px - tight internal */
|
|
514
|
+
--spacing-component-sm: var(--spacing-2); /* 8px - compact */
|
|
515
|
+
--spacing-component-md: var(--spacing-3); /* 12px - default */
|
|
516
|
+
--spacing-component-lg: var(--spacing-4); /* 16px - comfortable */
|
|
517
|
+
--spacing-component-xl: var(--spacing-6); /* 24px - spacious */
|
|
518
|
+
|
|
519
|
+
/* Layout spacing */
|
|
520
|
+
--spacing-layout-xs: var(--spacing-4); /* 16px */
|
|
521
|
+
--spacing-layout-sm: var(--spacing-6); /* 24px */
|
|
522
|
+
--spacing-layout-md: var(--spacing-8); /* 32px */
|
|
523
|
+
--spacing-layout-lg: var(--spacing-12); /* 48px */
|
|
524
|
+
--spacing-layout-xl: var(--spacing-16); /* 64px */
|
|
525
|
+
--spacing-layout-2xl: var(--spacing-24); /* 96px */
|
|
526
|
+
|
|
527
|
+
/* Section spacing */
|
|
528
|
+
--spacing-section-sm: var(--spacing-12); /* 48px */
|
|
529
|
+
--spacing-section-md: var(--spacing-16); /* 64px */
|
|
530
|
+
--spacing-section-lg: var(--spacing-24); /* 96px */
|
|
531
|
+
--spacing-section-xl: var(--spacing-32); /* 128px */
|
|
532
|
+
|
|
533
|
+
/* Gap spacing (for flexbox/grid) */
|
|
534
|
+
--spacing-gap-xs: var(--spacing-1); /* 4px */
|
|
535
|
+
--spacing-gap-sm: var(--spacing-2); /* 8px */
|
|
536
|
+
--spacing-gap-md: var(--spacing-4); /* 16px */
|
|
537
|
+
--spacing-gap-lg: var(--spacing-6); /* 24px */
|
|
538
|
+
--spacing-gap-xl: var(--spacing-8); /* 32px */
|
|
539
|
+
|
|
540
|
+
/* ============================================
|
|
541
|
+
* FORM ELEMENT SPACING
|
|
542
|
+
* Specific spacing for form controls
|
|
543
|
+
* ============================================ */
|
|
544
|
+
|
|
545
|
+
--spacing-form-element: 38px; /* Standard input height */
|
|
546
|
+
--spacing-form-padding-x: var(--spacing-3); /* 12px */
|
|
547
|
+
--spacing-form-padding-y: var(--spacing-2); /* 8px */
|
|
548
|
+
--spacing-form-gap: var(--spacing-2); /* 8px between fields */
|
|
549
|
+
--spacing-form-label-gap: var(--spacing-1-5); /* 6px label to input */
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
/* ↳ inlined from src/styles/primitives/typography.css */
|
|
553
|
+
/**
|
|
554
|
+
* Design System - Typography
|
|
555
|
+
*
|
|
556
|
+
* Font families, sizes, weights, and line heights.
|
|
557
|
+
* Designed for optimal readability and hierarchy.
|
|
558
|
+
*
|
|
559
|
+
* @brand brasil-a-vera (default, overridable)
|
|
560
|
+
* @version 1.0.0
|
|
561
|
+
*/
|
|
562
|
+
|
|
563
|
+
@theme {
|
|
564
|
+
/* ============================================
|
|
565
|
+
* FONT FAMILIES
|
|
566
|
+
* ============================================ */
|
|
567
|
+
|
|
568
|
+
--font-sans:
|
|
569
|
+
ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji",
|
|
570
|
+
"Segoe UI Symbol", "Noto Color Emoji";
|
|
571
|
+
--font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;
|
|
572
|
+
--font-mono:
|
|
573
|
+
ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono",
|
|
574
|
+
monospace;
|
|
575
|
+
|
|
576
|
+
/* Brand font - can be customized */
|
|
577
|
+
--font-brand: var(--font-sans);
|
|
578
|
+
--font-display: var(--font-sans);
|
|
579
|
+
--font-body: var(--font-sans);
|
|
580
|
+
--font-code: var(--font-mono);
|
|
581
|
+
|
|
582
|
+
/* ============================================
|
|
583
|
+
* FONT SIZES
|
|
584
|
+
* Scale based on 1rem = 16px
|
|
585
|
+
* ============================================ */
|
|
586
|
+
|
|
587
|
+
--font-size-2xs: 0.625rem; /* 10px */
|
|
588
|
+
--font-size-xs: 0.75rem; /* 12px */
|
|
589
|
+
|
|
590
|
+
/* Tailwind 4 utility-generating namespace (--text-*).
|
|
591
|
+
* text-2xs (10px) is industry-standard for micro-text on badge
|
|
592
|
+
* counters / mini chips; size-only, no default line-height. */
|
|
593
|
+
--text-2xs: var(--font-size-2xs);
|
|
594
|
+
--font-size-sm: 0.875rem; /* 14px */
|
|
595
|
+
--font-size-base: 1rem; /* 16px */
|
|
596
|
+
--font-size-lg: 1.125rem; /* 18px */
|
|
597
|
+
--font-size-xl: 1.25rem; /* 20px */
|
|
598
|
+
--font-size-2xl: 1.5rem; /* 24px */
|
|
599
|
+
--font-size-3xl: 1.875rem; /* 30px */
|
|
600
|
+
--font-size-4xl: 2.25rem; /* 36px */
|
|
601
|
+
--font-size-5xl: 3rem; /* 48px */
|
|
602
|
+
--font-size-6xl: 3.75rem; /* 60px */
|
|
603
|
+
--font-size-7xl: 4.5rem; /* 72px */
|
|
604
|
+
--font-size-8xl: 6rem; /* 96px */
|
|
605
|
+
--font-size-9xl: 8rem; /* 128px */
|
|
606
|
+
|
|
607
|
+
/* ============================================
|
|
608
|
+
* FONT WEIGHTS
|
|
609
|
+
* ============================================ */
|
|
610
|
+
|
|
611
|
+
--font-weight-thin: 100;
|
|
612
|
+
--font-weight-extralight: 200;
|
|
613
|
+
--font-weight-light: 300;
|
|
614
|
+
--font-weight-normal: 400;
|
|
615
|
+
--font-weight-medium: 500;
|
|
616
|
+
--font-weight-semibold: 600;
|
|
617
|
+
--font-weight-bold: 700;
|
|
618
|
+
--font-weight-extrabold: 800;
|
|
619
|
+
--font-weight-black: 900;
|
|
620
|
+
|
|
621
|
+
/* ============================================
|
|
622
|
+
* LINE HEIGHTS
|
|
623
|
+
* ============================================ */
|
|
624
|
+
|
|
625
|
+
--line-height-none: 1;
|
|
626
|
+
--line-height-tight: 1.25;
|
|
627
|
+
--line-height-snug: 1.375;
|
|
628
|
+
--line-height-normal: 1.5;
|
|
629
|
+
--line-height-relaxed: 1.625;
|
|
630
|
+
--line-height-loose: 2;
|
|
631
|
+
|
|
632
|
+
/* Specific line heights */
|
|
633
|
+
--line-height-3: 0.75rem; /* 12px */
|
|
634
|
+
--line-height-4: 1rem; /* 16px */
|
|
635
|
+
--line-height-5: 1.25rem; /* 20px */
|
|
636
|
+
--line-height-6: 1.5rem; /* 24px */
|
|
637
|
+
--line-height-7: 1.75rem; /* 28px */
|
|
638
|
+
--line-height-8: 2rem; /* 32px */
|
|
639
|
+
--line-height-9: 2.25rem; /* 36px */
|
|
640
|
+
--line-height-10: 2.5rem; /* 40px */
|
|
641
|
+
|
|
642
|
+
/* ============================================
|
|
643
|
+
* LETTER SPACING
|
|
644
|
+
* ============================================ */
|
|
645
|
+
|
|
646
|
+
--letter-spacing-tighter: -0.05em;
|
|
647
|
+
--letter-spacing-tight: -0.025em;
|
|
648
|
+
--letter-spacing-normal: 0em;
|
|
649
|
+
--letter-spacing-wide: 0.025em;
|
|
650
|
+
--letter-spacing-wider: 0.05em;
|
|
651
|
+
--letter-spacing-widest: 0.1em;
|
|
652
|
+
|
|
653
|
+
/* ============================================
|
|
654
|
+
* TEXT DECORATION
|
|
655
|
+
* ============================================ */
|
|
656
|
+
|
|
657
|
+
--text-decoration-thickness-auto: auto;
|
|
658
|
+
--text-decoration-thickness-from-font: from-font;
|
|
659
|
+
--text-decoration-thickness-0: 0px;
|
|
660
|
+
--text-decoration-thickness-1: 1px;
|
|
661
|
+
--text-decoration-thickness-2: 2px;
|
|
662
|
+
--text-decoration-thickness-4: 4px;
|
|
663
|
+
--text-decoration-thickness-8: 8px;
|
|
664
|
+
|
|
665
|
+
/* ============================================
|
|
666
|
+
* SEMANTIC TYPOGRAPHY
|
|
667
|
+
* Pre-defined text styles
|
|
668
|
+
* ============================================ */
|
|
669
|
+
|
|
670
|
+
/* Display headings (hero sections) */
|
|
671
|
+
--text-display-1-size: var(--font-size-6xl);
|
|
672
|
+
--text-display-1-weight: var(--font-weight-bold);
|
|
673
|
+
--text-display-1-line-height: var(--line-height-tight);
|
|
674
|
+
--text-display-1-letter-spacing: var(--letter-spacing-tight);
|
|
675
|
+
|
|
676
|
+
--text-display-2-size: var(--font-size-5xl);
|
|
677
|
+
--text-display-2-weight: var(--font-weight-bold);
|
|
678
|
+
--text-display-2-line-height: var(--line-height-tight);
|
|
679
|
+
--text-display-2-letter-spacing: var(--letter-spacing-tight);
|
|
680
|
+
|
|
681
|
+
/* Headings */
|
|
682
|
+
--text-h1-size: var(--font-size-4xl);
|
|
683
|
+
--text-h1-weight: var(--font-weight-bold);
|
|
684
|
+
--text-h1-line-height: var(--line-height-tight);
|
|
685
|
+
|
|
686
|
+
--text-h2-size: var(--font-size-3xl);
|
|
687
|
+
--text-h2-weight: var(--font-weight-semibold);
|
|
688
|
+
--text-h2-line-height: var(--line-height-tight);
|
|
689
|
+
|
|
690
|
+
--text-h3-size: var(--font-size-2xl);
|
|
691
|
+
--text-h3-weight: var(--font-weight-semibold);
|
|
692
|
+
--text-h3-line-height: var(--line-height-snug);
|
|
693
|
+
|
|
694
|
+
--text-h4-size: var(--font-size-xl);
|
|
695
|
+
--text-h4-weight: var(--font-weight-semibold);
|
|
696
|
+
--text-h4-line-height: var(--line-height-snug);
|
|
697
|
+
|
|
698
|
+
--text-h5-size: var(--font-size-lg);
|
|
699
|
+
--text-h5-weight: var(--font-weight-medium);
|
|
700
|
+
--text-h5-line-height: var(--line-height-normal);
|
|
701
|
+
|
|
702
|
+
--text-h6-size: var(--font-size-base);
|
|
703
|
+
--text-h6-weight: var(--font-weight-medium);
|
|
704
|
+
--text-h6-line-height: var(--line-height-normal);
|
|
705
|
+
|
|
706
|
+
/* Body text */
|
|
707
|
+
--text-body-lg-size: var(--font-size-lg);
|
|
708
|
+
--text-body-lg-weight: var(--font-weight-normal);
|
|
709
|
+
--text-body-lg-line-height: var(--line-height-relaxed);
|
|
710
|
+
|
|
711
|
+
--text-body-size: var(--font-size-base);
|
|
712
|
+
--text-body-weight: var(--font-weight-normal);
|
|
713
|
+
--text-body-line-height: var(--line-height-normal);
|
|
714
|
+
|
|
715
|
+
--text-body-sm-size: var(--font-size-sm);
|
|
716
|
+
--text-body-sm-weight: var(--font-weight-normal);
|
|
717
|
+
--text-body-sm-line-height: var(--line-height-normal);
|
|
718
|
+
|
|
719
|
+
/* UI text */
|
|
720
|
+
--text-label-size: var(--font-size-sm);
|
|
721
|
+
--text-label-weight: var(--font-weight-medium);
|
|
722
|
+
--text-label-line-height: var(--line-height-normal);
|
|
723
|
+
--text-label-letter-spacing: var(--letter-spacing-wide);
|
|
724
|
+
|
|
725
|
+
--text-caption-size: var(--font-size-xs);
|
|
726
|
+
--text-caption-weight: var(--font-weight-normal);
|
|
727
|
+
--text-caption-line-height: var(--line-height-normal);
|
|
728
|
+
|
|
729
|
+
--text-overline-size: var(--font-size-xs);
|
|
730
|
+
--text-overline-weight: var(--font-weight-semibold);
|
|
731
|
+
--text-overline-line-height: var(--line-height-normal);
|
|
732
|
+
--text-overline-letter-spacing: var(--letter-spacing-widest);
|
|
733
|
+
|
|
734
|
+
/* Button text */
|
|
735
|
+
--text-button-sm-size: var(--font-size-xs);
|
|
736
|
+
--text-button-sm-weight: var(--font-weight-medium);
|
|
737
|
+
|
|
738
|
+
--text-button-size: var(--font-size-sm);
|
|
739
|
+
--text-button-weight: var(--font-weight-medium);
|
|
740
|
+
|
|
741
|
+
--text-button-lg-size: var(--font-size-base);
|
|
742
|
+
--text-button-lg-weight: var(--font-weight-medium);
|
|
743
|
+
|
|
744
|
+
/* Code text */
|
|
745
|
+
--text-code-size: var(--font-size-sm);
|
|
746
|
+
--text-code-weight: var(--font-weight-normal);
|
|
747
|
+
--text-code-line-height: var(--line-height-relaxed);
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
/* ↳ inlined from src/styles/primitives/shadows.css */
|
|
751
|
+
/**
|
|
752
|
+
* Design System - Shadows
|
|
753
|
+
*
|
|
754
|
+
* Elevation system using box shadows.
|
|
755
|
+
* Creates depth and visual hierarchy.
|
|
756
|
+
*
|
|
757
|
+
* @brand brasil-a-vera (default, overridable)
|
|
758
|
+
* @version 1.0.0
|
|
759
|
+
*/
|
|
760
|
+
|
|
761
|
+
@theme {
|
|
762
|
+
/* ============================================
|
|
763
|
+
* BASE SHADOWS
|
|
764
|
+
* Standard elevation levels
|
|
765
|
+
* ============================================ */
|
|
766
|
+
|
|
767
|
+
--shadow-none: none;
|
|
768
|
+
|
|
769
|
+
/* Extra small - subtle depth */
|
|
770
|
+
--shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05);
|
|
771
|
+
|
|
772
|
+
/* Small - cards, dropdowns (resting state) */
|
|
773
|
+
--shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
|
|
774
|
+
|
|
775
|
+
/* Medium - hover states, popovers */
|
|
776
|
+
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
|
|
777
|
+
|
|
778
|
+
/* Large - modals, dialogs */
|
|
779
|
+
--shadow-lg:
|
|
780
|
+
0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
|
|
781
|
+
|
|
782
|
+
/* Extra large - sticky elements, high elevation */
|
|
783
|
+
--shadow-xl:
|
|
784
|
+
0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
|
|
785
|
+
|
|
786
|
+
/* 2XL - maximum elevation */
|
|
787
|
+
--shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
|
|
788
|
+
|
|
789
|
+
/* Inner shadow - pressed states, inputs */
|
|
790
|
+
--shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);
|
|
791
|
+
|
|
792
|
+
/* ============================================
|
|
793
|
+
* COLORED SHADOWS
|
|
794
|
+
* For brand-colored elements
|
|
795
|
+
* ============================================ */
|
|
796
|
+
|
|
797
|
+
/* Brand-primary shadows — color-mix follows consumer reskin of
|
|
798
|
+
* --color-brand-primary-500 (issue #152 Caminho C). */
|
|
799
|
+
--shadow-primary-sm:
|
|
800
|
+
0 1px 3px 0
|
|
801
|
+
color-mix(in srgb, var(--color-brand-primary-500) 20%, transparent),
|
|
802
|
+
0 1px 2px -1px
|
|
803
|
+
color-mix(in srgb, var(--color-brand-primary-500) 20%, transparent);
|
|
804
|
+
--shadow-primary-md:
|
|
805
|
+
0 4px 6px -1px
|
|
806
|
+
color-mix(in srgb, var(--color-brand-primary-500) 20%, transparent),
|
|
807
|
+
0 2px 4px -2px
|
|
808
|
+
color-mix(in srgb, var(--color-brand-primary-500) 20%, transparent);
|
|
809
|
+
--shadow-primary-lg:
|
|
810
|
+
0 10px 15px -3px
|
|
811
|
+
color-mix(in srgb, var(--color-brand-primary-500) 20%, transparent),
|
|
812
|
+
0 4px 6px -4px
|
|
813
|
+
color-mix(in srgb, var(--color-brand-primary-500) 20%, transparent);
|
|
814
|
+
|
|
815
|
+
/* Brand-secondary shadows */
|
|
816
|
+
--shadow-secondary-sm:
|
|
817
|
+
0 1px 3px 0
|
|
818
|
+
color-mix(in srgb, var(--color-brand-secondary-500) 20%, transparent),
|
|
819
|
+
0 1px 2px -1px
|
|
820
|
+
color-mix(in srgb, var(--color-brand-secondary-500) 20%, transparent);
|
|
821
|
+
--shadow-secondary-md:
|
|
822
|
+
0 4px 6px -1px
|
|
823
|
+
color-mix(in srgb, var(--color-brand-secondary-500) 20%, transparent),
|
|
824
|
+
0 2px 4px -2px
|
|
825
|
+
color-mix(in srgb, var(--color-brand-secondary-500) 20%, transparent);
|
|
826
|
+
--shadow-secondary-lg:
|
|
827
|
+
0 10px 15px -3px
|
|
828
|
+
color-mix(in srgb, var(--color-brand-secondary-500) 20%, transparent),
|
|
829
|
+
0 4px 6px -4px
|
|
830
|
+
color-mix(in srgb, var(--color-brand-secondary-500) 20%, transparent);
|
|
831
|
+
|
|
832
|
+
/* Success (Emerald) shadows */
|
|
833
|
+
--shadow-success-sm:
|
|
834
|
+
0 1px 3px 0 rgb(16 185 129 / 0.2), 0 1px 2px -1px rgb(16 185 129 / 0.2);
|
|
835
|
+
--shadow-success-md:
|
|
836
|
+
0 4px 6px -1px rgb(16 185 129 / 0.2), 0 2px 4px -2px rgb(16 185 129 / 0.2);
|
|
837
|
+
|
|
838
|
+
/* Warning (Amber) shadows */
|
|
839
|
+
--shadow-warning-sm:
|
|
840
|
+
0 1px 3px 0 rgb(245 158 11 / 0.2), 0 1px 2px -1px rgb(245 158 11 / 0.2);
|
|
841
|
+
--shadow-warning-md:
|
|
842
|
+
0 4px 6px -1px rgb(245 158 11 / 0.2), 0 2px 4px -2px rgb(245 158 11 / 0.2);
|
|
843
|
+
|
|
844
|
+
/* Error (Rose) shadows */
|
|
845
|
+
--shadow-error-sm:
|
|
846
|
+
0 1px 3px 0 rgb(244 63 94 / 0.2), 0 1px 2px -1px rgb(244 63 94 / 0.2);
|
|
847
|
+
--shadow-error-md:
|
|
848
|
+
0 4px 6px -1px rgb(244 63 94 / 0.2), 0 2px 4px -2px rgb(244 63 94 / 0.2);
|
|
849
|
+
|
|
850
|
+
/* ============================================
|
|
851
|
+
* SEMANTIC SHADOWS
|
|
852
|
+
* Named shadows for specific use cases
|
|
853
|
+
* ============================================ */
|
|
854
|
+
|
|
855
|
+
/* Component shadows */
|
|
856
|
+
--shadow-card: var(--shadow-sm);
|
|
857
|
+
--shadow-card-hover: var(--shadow-md);
|
|
858
|
+
|
|
859
|
+
--shadow-dropdown: var(--shadow-lg);
|
|
860
|
+
--shadow-popover: var(--shadow-lg);
|
|
861
|
+
--shadow-tooltip: var(--shadow-md);
|
|
862
|
+
|
|
863
|
+
--shadow-modal: var(--shadow-xl);
|
|
864
|
+
--shadow-dialog: var(--shadow-xl);
|
|
865
|
+
|
|
866
|
+
--shadow-sticky: var(--shadow-md);
|
|
867
|
+
--shadow-float: var(--shadow-lg);
|
|
868
|
+
|
|
869
|
+
/* Input shadows */
|
|
870
|
+
--shadow-input: var(--shadow-xs);
|
|
871
|
+
--shadow-input-focus: 0 0 0 3px
|
|
872
|
+
color-mix(in srgb, var(--color-brand-primary-500) 10%, transparent);
|
|
873
|
+
--shadow-input-error: 0 0 0 3px rgb(244 63 94 / 0.1);
|
|
874
|
+
--shadow-input-success: 0 0 0 3px rgb(16 185 129 / 0.1);
|
|
875
|
+
|
|
876
|
+
/* Button shadows */
|
|
877
|
+
--shadow-button: var(--shadow-xs);
|
|
878
|
+
--shadow-button-hover: var(--shadow-sm);
|
|
879
|
+
--shadow-button-active: var(--shadow-inner);
|
|
880
|
+
--shadow-button-primary: var(--shadow-primary-sm);
|
|
881
|
+
--shadow-button-primary-hover: var(--shadow-primary-md);
|
|
882
|
+
|
|
883
|
+
/* ============================================
|
|
884
|
+
* DARK MODE SHADOWS
|
|
885
|
+
* Adjusted for dark backgrounds
|
|
886
|
+
* ============================================ */
|
|
887
|
+
|
|
888
|
+
--shadow-dark-xs: 0 1px 2px 0 rgb(0 0 0 / 0.3);
|
|
889
|
+
--shadow-dark-sm:
|
|
890
|
+
0 1px 3px 0 rgb(0 0 0 / 0.4), 0 1px 2px -1px rgb(0 0 0 / 0.4);
|
|
891
|
+
--shadow-dark-md:
|
|
892
|
+
0 4px 6px -1px rgb(0 0 0 / 0.4), 0 2px 4px -2px rgb(0 0 0 / 0.4);
|
|
893
|
+
--shadow-dark-lg:
|
|
894
|
+
0 10px 15px -3px rgb(0 0 0 / 0.4), 0 4px 6px -4px rgb(0 0 0 / 0.4);
|
|
895
|
+
--shadow-dark-xl:
|
|
896
|
+
0 20px 25px -5px rgb(0 0 0 / 0.4), 0 8px 10px -6px rgb(0 0 0 / 0.4);
|
|
897
|
+
--shadow-dark-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.6);
|
|
898
|
+
|
|
899
|
+
/* ============================================
|
|
900
|
+
* GLOW EFFECTS
|
|
901
|
+
* For special emphasis
|
|
902
|
+
* ============================================ */
|
|
903
|
+
|
|
904
|
+
--glow-primary: 0 0 20px
|
|
905
|
+
color-mix(in srgb, var(--color-brand-primary-500) 30%, transparent);
|
|
906
|
+
--glow-secondary: 0 0 20px
|
|
907
|
+
color-mix(in srgb, var(--color-brand-secondary-500) 30%, transparent);
|
|
908
|
+
--glow-accent: 0 0 20px rgb(6 182 212 / 0.3);
|
|
909
|
+
--glow-success: 0 0 20px rgb(16 185 129 / 0.3);
|
|
910
|
+
--glow-warning: 0 0 20px rgb(245 158 11 / 0.3);
|
|
911
|
+
--glow-error: 0 0 20px rgb(244 63 94 / 0.3);
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
/* ↳ inlined from src/styles/primitives/radius.css */
|
|
915
|
+
/**
|
|
916
|
+
* Design System - Border Radius
|
|
917
|
+
*
|
|
918
|
+
* Consistent corner rounding system.
|
|
919
|
+
* Creates visual softness and modern feel.
|
|
920
|
+
*
|
|
921
|
+
* @brand brasil-a-vera (default, overridable)
|
|
922
|
+
* @version 1.0.0
|
|
923
|
+
*/
|
|
924
|
+
|
|
925
|
+
@theme {
|
|
926
|
+
/* ============================================
|
|
927
|
+
* BASE RADIUS SCALE
|
|
928
|
+
* ============================================ */
|
|
929
|
+
|
|
930
|
+
--radius-none: 0px;
|
|
931
|
+
--radius-sm: 0.125rem; /* 2px */
|
|
932
|
+
--radius-md: 0.25rem; /* 4px - previously 'DEFAULT' */
|
|
933
|
+
--radius-lg: 0.375rem; /* 6px */
|
|
934
|
+
--radius-xl: 0.5rem; /* 8px */
|
|
935
|
+
--radius-2xl: 0.75rem; /* 12px */
|
|
936
|
+
--radius-3xl: 1rem; /* 16px */
|
|
937
|
+
--radius-4xl: 1.5rem; /* 24px */
|
|
938
|
+
--radius-full: 9999px; /* Fully rounded (pills, circles) */
|
|
939
|
+
|
|
940
|
+
/* ============================================
|
|
941
|
+
* SEMANTIC RADIUS
|
|
942
|
+
* Named tokens for specific components
|
|
943
|
+
* ============================================ */
|
|
944
|
+
|
|
945
|
+
/* Buttons */
|
|
946
|
+
--radius-button-sm: var(--radius-md); /* 4px */
|
|
947
|
+
--radius-button: var(--radius-lg); /* 6px */
|
|
948
|
+
--radius-button-lg: var(--radius-xl); /* 8px */
|
|
949
|
+
--radius-button-pill: var(--radius-full);
|
|
950
|
+
|
|
951
|
+
/* Inputs */
|
|
952
|
+
--radius-input: var(--radius-lg); /* 6px */
|
|
953
|
+
--radius-input-sm: var(--radius-md); /* 4px */
|
|
954
|
+
--radius-input-lg: var(--radius-xl); /* 8px */
|
|
955
|
+
|
|
956
|
+
/* Cards */
|
|
957
|
+
--radius-card: var(--radius-xl); /* 8px */
|
|
958
|
+
--radius-card-sm: var(--radius-lg); /* 6px */
|
|
959
|
+
--radius-card-lg: var(--radius-2xl); /* 12px */
|
|
960
|
+
|
|
961
|
+
/* Modals and dialogs */
|
|
962
|
+
--radius-modal: var(--radius-2xl); /* 12px */
|
|
963
|
+
--radius-dialog: var(--radius-2xl); /* 12px */
|
|
964
|
+
|
|
965
|
+
/* Popovers and tooltips */
|
|
966
|
+
--radius-popover: var(--radius-xl); /* 8px */
|
|
967
|
+
--radius-tooltip: var(--radius-lg); /* 6px */
|
|
968
|
+
--radius-dropdown: var(--radius-xl); /* 8px */
|
|
969
|
+
|
|
970
|
+
/* Badges and chips */
|
|
971
|
+
--radius-badge: var(--radius-full); /* Pill shape */
|
|
972
|
+
--radius-chip: var(--radius-lg); /* 6px */
|
|
973
|
+
--radius-tag: var(--radius-md); /* 4px */
|
|
974
|
+
|
|
975
|
+
/* Avatars */
|
|
976
|
+
--radius-avatar: var(--radius-full); /* Circle */
|
|
977
|
+
--radius-avatar-square: var(--radius-lg); /* 6px */
|
|
978
|
+
|
|
979
|
+
/* Progress and sliders */
|
|
980
|
+
--radius-progress: var(--radius-full);
|
|
981
|
+
--radius-slider: var(--radius-full);
|
|
982
|
+
--radius-slider-thumb: var(--radius-full);
|
|
983
|
+
|
|
984
|
+
/* Images and media */
|
|
985
|
+
--radius-image: var(--radius-xl); /* 8px */
|
|
986
|
+
--radius-thumbnail: var(--radius-lg); /* 6px */
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
/* ↳ inlined from src/styles/primitives/animations.css */
|
|
990
|
+
/**
|
|
991
|
+
* Design System - Animations
|
|
992
|
+
*
|
|
993
|
+
* Durations, easings, and transitions.
|
|
994
|
+
* Consistent motion throughout the system.
|
|
995
|
+
*
|
|
996
|
+
* @brand brasil-a-vera (default, overridable)
|
|
997
|
+
* @version 1.0.0
|
|
998
|
+
*/
|
|
999
|
+
|
|
1000
|
+
@theme {
|
|
1001
|
+
/* ============================================
|
|
1002
|
+
* DURATIONS
|
|
1003
|
+
* ============================================ */
|
|
1004
|
+
|
|
1005
|
+
--duration-0: 0ms;
|
|
1006
|
+
--duration-75: 75ms;
|
|
1007
|
+
--duration-100: 100ms;
|
|
1008
|
+
--duration-150: 150ms;
|
|
1009
|
+
--duration-200: 200ms;
|
|
1010
|
+
--duration-300: 300ms;
|
|
1011
|
+
--duration-500: 500ms;
|
|
1012
|
+
--duration-700: 700ms;
|
|
1013
|
+
--duration-1000: 1000ms;
|
|
1014
|
+
|
|
1015
|
+
/* Semantic durations */
|
|
1016
|
+
--duration-instant: var(--duration-75); /* Micro interactions */
|
|
1017
|
+
--duration-fast: var(--duration-150); /* Quick feedback */
|
|
1018
|
+
--duration-normal: var(--duration-200); /* Standard transitions */
|
|
1019
|
+
--duration-slow: var(--duration-300); /* Deliberate animations */
|
|
1020
|
+
--duration-slower: var(--duration-500); /* Complex animations */
|
|
1021
|
+
|
|
1022
|
+
/* ============================================
|
|
1023
|
+
* EASINGS
|
|
1024
|
+
* ============================================ */
|
|
1025
|
+
|
|
1026
|
+
--ease-linear: linear;
|
|
1027
|
+
--ease-in: cubic-bezier(0.4, 0, 1, 1);
|
|
1028
|
+
--ease-out: cubic-bezier(0, 0, 0.2, 1);
|
|
1029
|
+
--ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
|
|
1030
|
+
|
|
1031
|
+
/* Custom easings */
|
|
1032
|
+
--ease-spring: cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
|
1033
|
+
--ease-bounce: cubic-bezier(0.68, -0.55, 0.265, 1.55);
|
|
1034
|
+
--ease-smooth: cubic-bezier(0.25, 0.1, 0.25, 1);
|
|
1035
|
+
|
|
1036
|
+
/* Semantic easings */
|
|
1037
|
+
--ease-default: var(--ease-out);
|
|
1038
|
+
--ease-enter: var(--ease-out);
|
|
1039
|
+
--ease-exit: var(--ease-in);
|
|
1040
|
+
--ease-move: var(--ease-in-out);
|
|
1041
|
+
|
|
1042
|
+
/* ============================================
|
|
1043
|
+
* TRANSITIONS
|
|
1044
|
+
* Pre-defined transition strings
|
|
1045
|
+
* ============================================ */
|
|
1046
|
+
|
|
1047
|
+
/* Property-specific */
|
|
1048
|
+
--transition-colors:
|
|
1049
|
+
color var(--duration-fast) var(--ease-default),
|
|
1050
|
+
background-color var(--duration-fast) var(--ease-default),
|
|
1051
|
+
border-color var(--duration-fast) var(--ease-default),
|
|
1052
|
+
text-decoration-color var(--duration-fast) var(--ease-default),
|
|
1053
|
+
fill var(--duration-fast) var(--ease-default),
|
|
1054
|
+
stroke var(--duration-fast) var(--ease-default);
|
|
1055
|
+
|
|
1056
|
+
--transition-opacity: opacity var(--duration-fast) var(--ease-default);
|
|
1057
|
+
|
|
1058
|
+
--transition-shadow: box-shadow var(--duration-fast) var(--ease-default);
|
|
1059
|
+
|
|
1060
|
+
--transition-transform: transform var(--duration-normal) var(--ease-default);
|
|
1061
|
+
|
|
1062
|
+
/* Combined transitions */
|
|
1063
|
+
--transition-all: all var(--duration-normal) var(--ease-default);
|
|
1064
|
+
|
|
1065
|
+
--transition-common:
|
|
1066
|
+
color var(--duration-fast) var(--ease-default),
|
|
1067
|
+
background-color var(--duration-fast) var(--ease-default),
|
|
1068
|
+
border-color var(--duration-fast) var(--ease-default),
|
|
1069
|
+
box-shadow var(--duration-fast) var(--ease-default),
|
|
1070
|
+
opacity var(--duration-fast) var(--ease-default);
|
|
1071
|
+
|
|
1072
|
+
/* ============================================
|
|
1073
|
+
* ANIMATION DELAYS
|
|
1074
|
+
* ============================================ */
|
|
1075
|
+
|
|
1076
|
+
--delay-0: 0ms;
|
|
1077
|
+
--delay-75: 75ms;
|
|
1078
|
+
--delay-100: 100ms;
|
|
1079
|
+
--delay-150: 150ms;
|
|
1080
|
+
--delay-200: 200ms;
|
|
1081
|
+
--delay-300: 300ms;
|
|
1082
|
+
--delay-500: 500ms;
|
|
1083
|
+
--delay-700: 700ms;
|
|
1084
|
+
--delay-1000: 1000ms;
|
|
1085
|
+
}
|
|
1086
|
+
|
|
1087
|
+
/* ============================================
|
|
1088
|
+
* KEYFRAME ANIMATIONS
|
|
1089
|
+
* ============================================ */
|
|
1090
|
+
|
|
1091
|
+
@keyframes fade-in {
|
|
1092
|
+
from {
|
|
1093
|
+
opacity: 0;
|
|
1094
|
+
}
|
|
1095
|
+
to {
|
|
1096
|
+
opacity: 1;
|
|
1097
|
+
}
|
|
1098
|
+
}
|
|
1099
|
+
|
|
1100
|
+
@keyframes fade-out {
|
|
1101
|
+
from {
|
|
1102
|
+
opacity: 1;
|
|
1103
|
+
}
|
|
1104
|
+
to {
|
|
1105
|
+
opacity: 0;
|
|
1106
|
+
}
|
|
1107
|
+
}
|
|
1108
|
+
|
|
1109
|
+
@keyframes slide-in-up {
|
|
1110
|
+
from {
|
|
1111
|
+
transform: translateY(10px);
|
|
1112
|
+
opacity: 0;
|
|
1113
|
+
}
|
|
1114
|
+
to {
|
|
1115
|
+
transform: translateY(0);
|
|
1116
|
+
opacity: 1;
|
|
1117
|
+
}
|
|
1118
|
+
}
|
|
1119
|
+
|
|
1120
|
+
@keyframes slide-in-down {
|
|
1121
|
+
from {
|
|
1122
|
+
transform: translateY(-10px);
|
|
1123
|
+
opacity: 0;
|
|
1124
|
+
}
|
|
1125
|
+
to {
|
|
1126
|
+
transform: translateY(0);
|
|
1127
|
+
opacity: 1;
|
|
1128
|
+
}
|
|
1129
|
+
}
|
|
1130
|
+
|
|
1131
|
+
@keyframes slide-in-left {
|
|
1132
|
+
from {
|
|
1133
|
+
transform: translateX(-10px);
|
|
1134
|
+
opacity: 0;
|
|
1135
|
+
}
|
|
1136
|
+
to {
|
|
1137
|
+
transform: translateX(0);
|
|
1138
|
+
opacity: 1;
|
|
1139
|
+
}
|
|
1140
|
+
}
|
|
1141
|
+
|
|
1142
|
+
@keyframes slide-in-right {
|
|
1143
|
+
from {
|
|
1144
|
+
transform: translateX(10px);
|
|
1145
|
+
opacity: 0;
|
|
1146
|
+
}
|
|
1147
|
+
to {
|
|
1148
|
+
transform: translateX(0);
|
|
1149
|
+
opacity: 1;
|
|
1150
|
+
}
|
|
1151
|
+
}
|
|
1152
|
+
|
|
1153
|
+
@keyframes scale-in {
|
|
1154
|
+
from {
|
|
1155
|
+
transform: scale(0.95);
|
|
1156
|
+
opacity: 0;
|
|
1157
|
+
}
|
|
1158
|
+
to {
|
|
1159
|
+
transform: scale(1);
|
|
1160
|
+
opacity: 1;
|
|
1161
|
+
}
|
|
1162
|
+
}
|
|
1163
|
+
|
|
1164
|
+
@keyframes scale-out {
|
|
1165
|
+
from {
|
|
1166
|
+
transform: scale(1);
|
|
1167
|
+
opacity: 1;
|
|
1168
|
+
}
|
|
1169
|
+
to {
|
|
1170
|
+
transform: scale(0.95);
|
|
1171
|
+
opacity: 0;
|
|
1172
|
+
}
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1175
|
+
@keyframes spin {
|
|
1176
|
+
from {
|
|
1177
|
+
transform: rotate(0deg);
|
|
1178
|
+
}
|
|
1179
|
+
to {
|
|
1180
|
+
transform: rotate(360deg);
|
|
1181
|
+
}
|
|
1182
|
+
}
|
|
1183
|
+
|
|
1184
|
+
@keyframes ping {
|
|
1185
|
+
75%,
|
|
1186
|
+
100% {
|
|
1187
|
+
transform: scale(2);
|
|
1188
|
+
opacity: 0;
|
|
1189
|
+
}
|
|
1190
|
+
}
|
|
1191
|
+
|
|
1192
|
+
@keyframes pulse {
|
|
1193
|
+
0%,
|
|
1194
|
+
100% {
|
|
1195
|
+
opacity: 1;
|
|
1196
|
+
}
|
|
1197
|
+
50% {
|
|
1198
|
+
opacity: 0.5;
|
|
1199
|
+
}
|
|
1200
|
+
}
|
|
1201
|
+
|
|
1202
|
+
@keyframes bounce {
|
|
1203
|
+
0%,
|
|
1204
|
+
100% {
|
|
1205
|
+
transform: translateY(-25%);
|
|
1206
|
+
animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
|
|
1207
|
+
}
|
|
1208
|
+
50% {
|
|
1209
|
+
transform: translateY(0);
|
|
1210
|
+
animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
|
|
1211
|
+
}
|
|
1212
|
+
}
|
|
1213
|
+
|
|
1214
|
+
@keyframes shake {
|
|
1215
|
+
0%,
|
|
1216
|
+
100% {
|
|
1217
|
+
transform: translateX(0);
|
|
1218
|
+
}
|
|
1219
|
+
25% {
|
|
1220
|
+
transform: translateX(-4px);
|
|
1221
|
+
}
|
|
1222
|
+
75% {
|
|
1223
|
+
transform: translateX(4px);
|
|
1224
|
+
}
|
|
1225
|
+
}
|
|
1226
|
+
|
|
1227
|
+
/* Modal/Dialog animations */
|
|
1228
|
+
@keyframes modal-enter {
|
|
1229
|
+
from {
|
|
1230
|
+
opacity: 0;
|
|
1231
|
+
transform: scale(0.95) translateY(-10px);
|
|
1232
|
+
}
|
|
1233
|
+
to {
|
|
1234
|
+
opacity: 1;
|
|
1235
|
+
transform: scale(1) translateY(0);
|
|
1236
|
+
}
|
|
1237
|
+
}
|
|
1238
|
+
|
|
1239
|
+
@keyframes modal-exit {
|
|
1240
|
+
from {
|
|
1241
|
+
opacity: 1;
|
|
1242
|
+
transform: scale(1) translateY(0);
|
|
1243
|
+
}
|
|
1244
|
+
to {
|
|
1245
|
+
opacity: 0;
|
|
1246
|
+
transform: scale(0.95) translateY(-10px);
|
|
1247
|
+
}
|
|
1248
|
+
}
|
|
1249
|
+
|
|
1250
|
+
/* Toast animations */
|
|
1251
|
+
@keyframes toast-enter {
|
|
1252
|
+
from {
|
|
1253
|
+
transform: translateX(100%);
|
|
1254
|
+
opacity: 0;
|
|
1255
|
+
}
|
|
1256
|
+
to {
|
|
1257
|
+
transform: translateX(0);
|
|
1258
|
+
opacity: 1;
|
|
1259
|
+
}
|
|
1260
|
+
}
|
|
1261
|
+
|
|
1262
|
+
@keyframes toast-exit {
|
|
1263
|
+
from {
|
|
1264
|
+
transform: translateX(0);
|
|
1265
|
+
opacity: 1;
|
|
1266
|
+
}
|
|
1267
|
+
to {
|
|
1268
|
+
transform: translateX(100%);
|
|
1269
|
+
opacity: 0;
|
|
1270
|
+
}
|
|
1271
|
+
}
|
|
1272
|
+
|
|
1273
|
+
/* Skeleton loading animation */
|
|
1274
|
+
@keyframes skeleton {
|
|
1275
|
+
0% {
|
|
1276
|
+
background-position: -200% 0;
|
|
1277
|
+
}
|
|
1278
|
+
100% {
|
|
1279
|
+
background-position: 200% 0;
|
|
1280
|
+
}
|
|
1281
|
+
}
|
|
1282
|
+
|
|
1283
|
+
|
|
1284
|
+
/* ============================================
|
|
1285
|
+
* SEMANTIC TOKENS
|
|
1286
|
+
* Meaningful tokens that reference primitives.
|
|
1287
|
+
* ============================================ */
|
|
1288
|
+
|
|
1289
|
+
/* ↳ inlined from src/styles/semantic/colors.css */
|
|
1290
|
+
/**
|
|
1291
|
+
* Design System - Semantic Colors
|
|
1292
|
+
*
|
|
1293
|
+
* Meaningful color tokens that reference primitive values.
|
|
1294
|
+
* Declared in @theme so Tailwind v4 generates native utility classes
|
|
1295
|
+
* (bg-surface-base, text-fg-primary, border-line-strong, etc.).
|
|
1296
|
+
* Theme overrides (light/dark) remain in selectors —
|
|
1297
|
+
* see themes/{light,dark}.css.
|
|
1298
|
+
*
|
|
1299
|
+
* @brand brasil-a-vera (default, overridable)
|
|
1300
|
+
* @version 1.0.0
|
|
1301
|
+
*/
|
|
1302
|
+
|
|
1303
|
+
@theme {
|
|
1304
|
+
/* ============================================
|
|
1305
|
+
* BRAND COLORS
|
|
1306
|
+
* Core brand identity colors
|
|
1307
|
+
* ============================================ */
|
|
1308
|
+
|
|
1309
|
+
--color-brand-primary: var(--color-brand-primary-500);
|
|
1310
|
+
--color-brand-primary-light: var(--color-brand-primary-400);
|
|
1311
|
+
--color-brand-primary-dark: var(--color-brand-primary-600);
|
|
1312
|
+
--color-brand-primary-darker: var(--color-brand-primary-700);
|
|
1313
|
+
|
|
1314
|
+
--color-brand-secondary: var(--color-brand-secondary-500);
|
|
1315
|
+
--color-brand-secondary-light: var(--color-brand-secondary-400);
|
|
1316
|
+
--color-brand-secondary-dark: var(--color-brand-secondary-600);
|
|
1317
|
+
|
|
1318
|
+
--color-brand-accent: var(--color-cyan-500);
|
|
1319
|
+
--color-brand-accent-light: var(--color-cyan-400);
|
|
1320
|
+
--color-brand-accent-dark: var(--color-cyan-600);
|
|
1321
|
+
|
|
1322
|
+
/* ============================================
|
|
1323
|
+
* FOREGROUND COLORS
|
|
1324
|
+
* Text, icons, and content
|
|
1325
|
+
* ============================================ */
|
|
1326
|
+
|
|
1327
|
+
--color-fg-primary: var(--color-slate-900);
|
|
1328
|
+
--color-fg-secondary: var(--color-slate-600);
|
|
1329
|
+
--color-fg-tertiary: var(--color-slate-500);
|
|
1330
|
+
--color-fg-quaternary: var(--color-slate-400);
|
|
1331
|
+
--color-fg-placeholder: var(--color-slate-400);
|
|
1332
|
+
--color-fg-disabled: var(--color-slate-300);
|
|
1333
|
+
--color-fg-inverse: var(--color-white);
|
|
1334
|
+
--color-fg-inverse-secondary: var(--color-slate-200);
|
|
1335
|
+
|
|
1336
|
+
/* Link colors */
|
|
1337
|
+
--color-fg-link: var(--color-brand-primary-600);
|
|
1338
|
+
--color-fg-link-hover: var(--color-brand-primary-700);
|
|
1339
|
+
--color-fg-link-active: var(--color-brand-primary-800);
|
|
1340
|
+
--color-fg-link-visited: var(--color-brand-secondary-700);
|
|
1341
|
+
|
|
1342
|
+
/* Brand text */
|
|
1343
|
+
--color-fg-brand: var(--color-brand-primary);
|
|
1344
|
+
--color-fg-brand-emphasis: var(--color-brand-primary-600);
|
|
1345
|
+
--color-fg-brand-secondary: var(--color-brand-secondary);
|
|
1346
|
+
--color-fg-brand-secondary-emphasis: var(--color-brand-secondary-600);
|
|
1347
|
+
|
|
1348
|
+
/* Feedback text */
|
|
1349
|
+
--color-fg-success: var(--color-emerald-700);
|
|
1350
|
+
--color-fg-warning: var(--color-amber-700);
|
|
1351
|
+
--color-fg-error: var(--color-rose-700);
|
|
1352
|
+
--color-fg-info: var(--color-sky-700);
|
|
1353
|
+
|
|
1354
|
+
/* On-color feedback text — the text that sits ON the solid (filled)
|
|
1355
|
+
* status surfaces --color-{status}-solid (see FEEDBACK section). White,
|
|
1356
|
+
* calibrated so it clears WCAG AA for normal text against each solid
|
|
1357
|
+
* (emerald-700 5.48:1, amber-700 5.02:1, rose-700 6.29:1, sky-700 5.93:1).
|
|
1358
|
+
* Do NOT confuse with --color-fg-success (the COLORED text used on neutral
|
|
1359
|
+
* or soft-wash surfaces) nor with --color-fg-inverse (slate-900 in dark —
|
|
1360
|
+
* a worse, semantically wrong pair over a saturated status fill). */
|
|
1361
|
+
--color-fg-on-success: var(--color-white);
|
|
1362
|
+
--color-fg-on-warning: var(--color-white);
|
|
1363
|
+
--color-fg-on-error: var(--color-white);
|
|
1364
|
+
--color-fg-on-info: var(--color-white);
|
|
1365
|
+
|
|
1366
|
+
/* ============================================
|
|
1367
|
+
* SURFACE COLORS — Backgrounds
|
|
1368
|
+
* Page and container backgrounds (canvas, subtle, muted, ...)
|
|
1369
|
+
* ============================================ */
|
|
1370
|
+
|
|
1371
|
+
--color-surface-canvas: var(--color-white);
|
|
1372
|
+
--color-surface-subtle: var(--color-slate-50);
|
|
1373
|
+
--color-surface-muted: var(--color-slate-100);
|
|
1374
|
+
--color-surface-emphasis: var(--color-slate-200);
|
|
1375
|
+
--color-surface-strong: var(--color-slate-300);
|
|
1376
|
+
--color-surface-inverse: var(--color-slate-900);
|
|
1377
|
+
--color-surface-inverse-subtle: var(--color-slate-800);
|
|
1378
|
+
|
|
1379
|
+
/* Brand backgrounds */
|
|
1380
|
+
--color-surface-brand-subtle: var(--color-brand-primary-50);
|
|
1381
|
+
--color-surface-brand-muted: var(--color-brand-primary-100);
|
|
1382
|
+
--color-surface-brand: var(--color-brand-primary-500);
|
|
1383
|
+
--color-surface-brand-strong: var(--color-brand-primary-600);
|
|
1384
|
+
--color-surface-brand-emphasis: var(--color-brand-primary-600);
|
|
1385
|
+
|
|
1386
|
+
--color-surface-secondary-subtle: var(--color-brand-secondary-50);
|
|
1387
|
+
--color-surface-secondary: var(--color-brand-secondary-700);
|
|
1388
|
+
|
|
1389
|
+
--color-surface-accent-subtle: var(--color-cyan-50);
|
|
1390
|
+
--color-surface-accent: var(--color-cyan-500);
|
|
1391
|
+
|
|
1392
|
+
/* ============================================
|
|
1393
|
+
* SURFACE COLORS — Elevation layers
|
|
1394
|
+
* Cards, modals, panels (canvas/base/raised/overlay/sunken)
|
|
1395
|
+
* ============================================ */
|
|
1396
|
+
|
|
1397
|
+
--color-surface-base: var(--color-white);
|
|
1398
|
+
--color-surface-raised: var(--color-white);
|
|
1399
|
+
--color-surface-overlay: var(--color-white);
|
|
1400
|
+
--color-surface-sunken: var(--color-slate-50);
|
|
1401
|
+
--color-surface-disabled: var(--color-slate-100);
|
|
1402
|
+
|
|
1403
|
+
/* ============================================
|
|
1404
|
+
* LINE COLORS
|
|
1405
|
+
* Borders, dividers, separators
|
|
1406
|
+
* ============================================ */
|
|
1407
|
+
|
|
1408
|
+
--color-line-default: var(--color-slate-200);
|
|
1409
|
+
--color-line-muted: var(--color-slate-100);
|
|
1410
|
+
--color-line-subtle: var(--color-slate-100);
|
|
1411
|
+
--color-line-emphasis: var(--color-slate-300);
|
|
1412
|
+
--color-line-strong: var(--color-slate-400);
|
|
1413
|
+
--color-line-inverse: var(--color-slate-700);
|
|
1414
|
+
|
|
1415
|
+
/* Focus borders */
|
|
1416
|
+
--color-line-focus: var(--color-brand-primary-500);
|
|
1417
|
+
--color-line-focus-ring: var(--color-brand-primary-500);
|
|
1418
|
+
|
|
1419
|
+
/* Brand borders */
|
|
1420
|
+
--color-line-brand: var(--color-brand-primary-500);
|
|
1421
|
+
--color-line-secondary: var(--color-brand-secondary-500);
|
|
1422
|
+
--color-line-accent: var(--color-cyan-500);
|
|
1423
|
+
|
|
1424
|
+
/* ============================================
|
|
1425
|
+
* SURFACE COLORS — Interactive states
|
|
1426
|
+
* Hover, active, selected, focus (fused from old state namespace)
|
|
1427
|
+
* ============================================ */
|
|
1428
|
+
|
|
1429
|
+
--color-surface-hover: var(--color-slate-50);
|
|
1430
|
+
--color-surface-hover-subtle: var(--color-slate-50);
|
|
1431
|
+
--color-surface-active: var(--color-slate-100);
|
|
1432
|
+
--color-surface-selected: var(--color-brand-primary-50);
|
|
1433
|
+
--color-surface-selected-subtle: var(--color-brand-primary-50);
|
|
1434
|
+
/* state-disabled fused into surface-disabled (identical values) */
|
|
1435
|
+
--color-surface-disabled-subtle: var(--color-slate-50);
|
|
1436
|
+
--color-surface-focus: var(--color-brand-primary-100);
|
|
1437
|
+
|
|
1438
|
+
/* ============================================
|
|
1439
|
+
* FEEDBACK COLORS
|
|
1440
|
+
* For success, warning, error, info states
|
|
1441
|
+
* ============================================ */
|
|
1442
|
+
|
|
1443
|
+
/* Success */
|
|
1444
|
+
--color-success: var(--color-emerald-500);
|
|
1445
|
+
--color-success-light: var(--color-emerald-400);
|
|
1446
|
+
--color-success-dark: var(--color-emerald-700);
|
|
1447
|
+
--color-success-bg: var(--color-emerald-50);
|
|
1448
|
+
--color-success-bg-emphasis: var(--color-emerald-100);
|
|
1449
|
+
--color-success-border: var(--color-emerald-200);
|
|
1450
|
+
--color-success-border-emphasis: var(--color-emerald-500);
|
|
1451
|
+
|
|
1452
|
+
/* Warning */
|
|
1453
|
+
--color-warning: var(--color-amber-500);
|
|
1454
|
+
--color-warning-light: var(--color-amber-400);
|
|
1455
|
+
--color-warning-dark: var(--color-amber-700);
|
|
1456
|
+
--color-warning-bg: var(--color-amber-50);
|
|
1457
|
+
--color-warning-bg-emphasis: var(--color-amber-100);
|
|
1458
|
+
--color-warning-border: var(--color-amber-200);
|
|
1459
|
+
--color-warning-border-emphasis: var(--color-amber-500);
|
|
1460
|
+
|
|
1461
|
+
/* Error */
|
|
1462
|
+
--color-error: var(--color-rose-700);
|
|
1463
|
+
--color-error-light: var(--color-rose-400);
|
|
1464
|
+
--color-error-dark: var(--color-rose-700);
|
|
1465
|
+
--color-error-bg: var(--color-rose-50);
|
|
1466
|
+
--color-error-bg-emphasis: var(--color-rose-100);
|
|
1467
|
+
--color-error-border: var(--color-rose-200);
|
|
1468
|
+
--color-error-border-emphasis: var(--color-rose-500);
|
|
1469
|
+
|
|
1470
|
+
/* Info */
|
|
1471
|
+
--color-info: var(--color-sky-500);
|
|
1472
|
+
--color-info-light: var(--color-sky-400);
|
|
1473
|
+
--color-info-dark: var(--color-sky-700);
|
|
1474
|
+
--color-info-bg: var(--color-sky-50);
|
|
1475
|
+
--color-info-bg-emphasis: var(--color-sky-100);
|
|
1476
|
+
--color-info-border: var(--color-sky-200);
|
|
1477
|
+
--color-info-border-emphasis: var(--color-sky-500);
|
|
1478
|
+
|
|
1479
|
+
/* Status neutral — completes the status family (success/warning/error/info/neutral)
|
|
1480
|
+
* for components like Dot, status Badge, online presence indicators. */
|
|
1481
|
+
--color-status-neutral: var(--color-slate-500);
|
|
1482
|
+
|
|
1483
|
+
/* Solid (filled) status surfaces — saturated backgrounds that CARRY
|
|
1484
|
+
* on-color text (--color-fg-on-{status}, white). Each step is the darkest
|
|
1485
|
+
* needed so white text clears WCAG AA for normal text:
|
|
1486
|
+
* success emerald-700 (5.48:1), warning amber-700 (5.02:1),
|
|
1487
|
+
* error rose-700 (6.29:1), info sky-700 (5.93:1).
|
|
1488
|
+
* These are the TEXT-CARRYING counterparts to the DECORATIVE solids
|
|
1489
|
+
* --color-{status} (emerald-500 etc. — used for Dot/Progress fills where no
|
|
1490
|
+
* text sits, and where white would only reach ~2.5:1). Same split as
|
|
1491
|
+
* surface-brand (decorative) vs surface-brand-strong (carries text). They
|
|
1492
|
+
* stay saturated + white in BOTH themes by design (a status chip, like a
|
|
1493
|
+
* colored button), so the dark.css blocks declare identical values rather
|
|
1494
|
+
* than flipping to a lighter step that white could not sit on. */
|
|
1495
|
+
--color-success-solid: var(--color-emerald-700);
|
|
1496
|
+
--color-warning-solid: var(--color-amber-700);
|
|
1497
|
+
--color-error-solid: var(--color-rose-700);
|
|
1498
|
+
--color-info-solid: var(--color-sky-700);
|
|
1499
|
+
|
|
1500
|
+
/* ============================================
|
|
1501
|
+
* DATA-VISUALIZATION CATEGORICAL PALETTE (Okabe-Ito)
|
|
1502
|
+
*
|
|
1503
|
+
* Colorblind-safe categorical colors for chart series (parties, vote
|
|
1504
|
+
* types, ranges). A SEPARATE axis from the semantic feedback colors:
|
|
1505
|
+
* success/warning/error/info encode STATE, never CATEGORY. These are the
|
|
1506
|
+
* canonical Okabe & Ito (2008) tones — the reference palette engineered to
|
|
1507
|
+
* stay distinguishable under deuteranopia/protanopia/tritanopia — with the
|
|
1508
|
+
* canonical `black` swapped for a neutral gray so the 8th series survives
|
|
1509
|
+
* on a dark canvas. Dark-theme variants in themes/dark.css lift luminance
|
|
1510
|
+
* (hue preserved) so each series clears 3:1 over slate-950 (WCAG 1.4.11).
|
|
1511
|
+
* These intentionally carry literal HEX rather than referencing a tonal
|
|
1512
|
+
* primitive scale — Okabe-Ito is an external canonical set, not a 50..950
|
|
1513
|
+
* ramp. Consume via getChartColor(i) (src/ui/tokens/chart.ts) or the
|
|
1514
|
+
* bg-chart-N / text-chart-N utilities. See .claude/rules/colors.md.
|
|
1515
|
+
* ============================================ */
|
|
1516
|
+
|
|
1517
|
+
--color-chart-1: #e69f00; /* orange */
|
|
1518
|
+
--color-chart-2: #56b4e9; /* sky blue */
|
|
1519
|
+
--color-chart-3: #009e73; /* bluish green */
|
|
1520
|
+
--color-chart-4: #d55e00; /* vermillion */
|
|
1521
|
+
--color-chart-5: #0072b2; /* blue */
|
|
1522
|
+
--color-chart-6: #cc79a7; /* reddish purple */
|
|
1523
|
+
--color-chart-7: #f0e442; /* yellow */
|
|
1524
|
+
--color-chart-8: #999999; /* gray (Okabe-Ito uses black; gray survives dark) */
|
|
1525
|
+
|
|
1526
|
+
/* Data-viz CATEGORICAL tone (soft wash) — the badge-facing member of the
|
|
1527
|
+
* data-viz axis above. A reddish-purple (fuchsia) wash for "category /
|
|
1528
|
+
* analytical" emphasis (e.g. a DataBadge L3/derived-data marker), kept
|
|
1529
|
+
* deliberately distinct from the brand `secondary` violet (state-vs-brand
|
|
1530
|
+
* vs category) and from `accent` (cyan). Mirrors the status soft-wash
|
|
1531
|
+
* trio (bg / dark text / base-border); white is never on it, so the
|
|
1532
|
+
* AA-relevant pair is text-dataviz-dark over bg-dataviz-bg
|
|
1533
|
+
* (fuchsia-700/50 = 5.89:1 light, fuchsia-300/950 = 8.41:1 dark). */
|
|
1534
|
+
--color-dataviz: var(--color-fuchsia-500);
|
|
1535
|
+
--color-dataviz-bg: var(--color-fuchsia-50);
|
|
1536
|
+
--color-dataviz-dark: var(--color-fuchsia-700);
|
|
1537
|
+
|
|
1538
|
+
/* ============================================
|
|
1539
|
+
* SCRIM & TRANSLUCENT STATE LAYERS
|
|
1540
|
+
* Theme-agnostic — these must stay dark in all modes by design.
|
|
1541
|
+
* Scrim is a backdrop veil that focuses attention on an overlay.
|
|
1542
|
+
* Tint is a translucent state layer for hover/interaction feedback
|
|
1543
|
+
* on elements whose surface color is not fixed.
|
|
1544
|
+
* ============================================ */
|
|
1545
|
+
|
|
1546
|
+
/* Scrim color (theme-agnostic — backdrop should be dark in all modes by design) */
|
|
1547
|
+
--color-scrim: rgb(0 0 0 / 0.5);
|
|
1548
|
+
|
|
1549
|
+
/* Tint-hover color (theme-agnostic — translucent layer works over any surface) */
|
|
1550
|
+
--color-tint-hover: rgb(0 0 0 / 0.1);
|
|
1551
|
+
|
|
1552
|
+
/* ============================================
|
|
1553
|
+
* ICON COLORS
|
|
1554
|
+
* For iconography
|
|
1555
|
+
* ============================================ */
|
|
1556
|
+
|
|
1557
|
+
--color-icon-default: var(--color-slate-500);
|
|
1558
|
+
--color-icon-muted: var(--color-slate-400);
|
|
1559
|
+
--color-icon-subtle: var(--color-slate-300);
|
|
1560
|
+
--color-icon-emphasis: var(--color-slate-700);
|
|
1561
|
+
--color-icon-inverse: var(--color-white);
|
|
1562
|
+
--color-icon-brand: var(--color-brand-primary-500);
|
|
1563
|
+
--color-icon-success: var(--color-emerald-500);
|
|
1564
|
+
--color-icon-warning: var(--color-amber-500);
|
|
1565
|
+
--color-icon-error: var(--color-rose-500);
|
|
1566
|
+
--color-icon-info: var(--color-sky-500);
|
|
1567
|
+
|
|
1568
|
+
/* ============================================
|
|
1569
|
+
* OVERLAY COLORS
|
|
1570
|
+
* For modals, drawers, backdrops
|
|
1571
|
+
* ============================================ */
|
|
1572
|
+
|
|
1573
|
+
--color-overlay-light: rgb(255 255 255 / 0.8);
|
|
1574
|
+
--color-overlay-dark: rgb(15 23 42 / 0.5);
|
|
1575
|
+
--color-overlay-darker: rgb(15 23 42 / 0.75);
|
|
1576
|
+
--color-overlay-backdrop: rgb(0 0 0 / 0.5);
|
|
1577
|
+
|
|
1578
|
+
/* ============================================
|
|
1579
|
+
* SKELETON/LOADING COLORS
|
|
1580
|
+
* For loading states
|
|
1581
|
+
* ============================================ */
|
|
1582
|
+
|
|
1583
|
+
--color-skeleton-base: var(--color-slate-200);
|
|
1584
|
+
--color-skeleton-shine: var(--color-slate-100);
|
|
1585
|
+
|
|
1586
|
+
/* ============================================
|
|
1587
|
+
* DIVIDER COLORS
|
|
1588
|
+
* For separators
|
|
1589
|
+
* ============================================ */
|
|
1590
|
+
|
|
1591
|
+
--color-divider: var(--color-slate-200);
|
|
1592
|
+
--color-divider-subtle: var(--color-slate-100);
|
|
1593
|
+
--color-divider-emphasis: var(--color-slate-300);
|
|
1594
|
+
}
|
|
1595
|
+
|
|
1596
|
+
/* ============================================
|
|
1597
|
+
* CANVAS-TOKEN CONSUMPTION
|
|
1598
|
+
*
|
|
1599
|
+
* The body element materialises the design-system canvas color so it
|
|
1600
|
+
* exists in the rendered DOM (axe-core walks the background-color
|
|
1601
|
+
* ancestor chain to compute contrast and DOES NOT read color-scheme).
|
|
1602
|
+
*
|
|
1603
|
+
* Without this rule, --color-surface-canvas was defined but nothing
|
|
1604
|
+
* consumed it: the browser painted an OS/UA dark default when
|
|
1605
|
+
* color-scheme:dark was set, which happened to LOOK approximately
|
|
1606
|
+
* correct, but axe walked the cascade, found rgba(0,0,0,0) everywhere,
|
|
1607
|
+
* defaulted to assuming white-canvas, and flagged every text-fg-* over
|
|
1608
|
+
* an "unbounded" area as ratio ~1.05 — even though the visible
|
|
1609
|
+
* contrast was 6.9–17.0. 67% of the dark color-contrast baseline
|
|
1610
|
+
* (783 of 1159 nodes in the parallel re-sweep) was this single
|
|
1611
|
+
* false-positive class. PR ${??} verified the no-shift property in
|
|
1612
|
+
* light, the spec-alignment shift in dark (UA accidental gray →
|
|
1613
|
+
* DS-specified slate-950), and the surgical positional correlation of
|
|
1614
|
+
* the drop (canvas-fallback stories evaporated; raw-color / Bucket-F /
|
|
1615
|
+
* other-cause stories were untouched).
|
|
1616
|
+
*
|
|
1617
|
+
* `color: var(--color-fg-primary)` makes text without an explicit color
|
|
1618
|
+
* inherit the DS foreground rather than the UA default. Same axe issue
|
|
1619
|
+
* in the foreground direction.
|
|
1620
|
+
* ============================================ */
|
|
1621
|
+
|
|
1622
|
+
@layer base {
|
|
1623
|
+
body {
|
|
1624
|
+
background-color: var(--color-surface-canvas);
|
|
1625
|
+
color: var(--color-fg-primary);
|
|
1626
|
+
}
|
|
1627
|
+
}
|
|
1628
|
+
|
|
1629
|
+
/* ↳ inlined from src/styles/semantic/surfaces.css */
|
|
1630
|
+
/**
|
|
1631
|
+
* Design System - Surface Tokens
|
|
1632
|
+
*
|
|
1633
|
+
* Elevated surfaces, cards, panels, and containers.
|
|
1634
|
+
* Combines colors, shadows, and borders.
|
|
1635
|
+
*
|
|
1636
|
+
* @brand brasil-a-vera (default, overridable)
|
|
1637
|
+
* @version 1.0.0
|
|
1638
|
+
*/
|
|
1639
|
+
|
|
1640
|
+
:root {
|
|
1641
|
+
/* ============================================
|
|
1642
|
+
* SURFACE LEVELS
|
|
1643
|
+
* Different elevation levels
|
|
1644
|
+
* ============================================ */
|
|
1645
|
+
|
|
1646
|
+
/* Level 0 - Base/Page background */
|
|
1647
|
+
--surface-0-bg: var(--color-surface-canvas);
|
|
1648
|
+
--surface-0-border: transparent;
|
|
1649
|
+
--surface-0-shadow: none;
|
|
1650
|
+
|
|
1651
|
+
/* Level 1 - Subtle elevation (sunken areas, input fields) */
|
|
1652
|
+
--surface-1-bg: var(--color-surface-sunken);
|
|
1653
|
+
--surface-1-border: var(--color-line-subtle);
|
|
1654
|
+
--surface-1-shadow: var(--shadow-inner);
|
|
1655
|
+
|
|
1656
|
+
/* Level 2 - Cards, panels (resting state) */
|
|
1657
|
+
--surface-2-bg: var(--color-surface-base);
|
|
1658
|
+
--surface-2-border: var(--color-line-default);
|
|
1659
|
+
--surface-2-shadow: var(--shadow-sm);
|
|
1660
|
+
|
|
1661
|
+
/* Level 3 - Raised cards (hover state) */
|
|
1662
|
+
--surface-3-bg: var(--color-surface-raised);
|
|
1663
|
+
--surface-3-border: var(--color-line-default);
|
|
1664
|
+
--surface-3-shadow: var(--shadow-md);
|
|
1665
|
+
|
|
1666
|
+
/* Level 4 - Dropdowns, popovers */
|
|
1667
|
+
--surface-4-bg: var(--color-surface-overlay);
|
|
1668
|
+
--surface-4-border: var(--color-line-default);
|
|
1669
|
+
--surface-4-shadow: var(--shadow-lg);
|
|
1670
|
+
|
|
1671
|
+
/* Level 5 - Modals, dialogs */
|
|
1672
|
+
--surface-5-bg: var(--color-surface-overlay);
|
|
1673
|
+
--surface-5-border: var(--color-line-subtle);
|
|
1674
|
+
--surface-5-shadow: var(--shadow-xl);
|
|
1675
|
+
|
|
1676
|
+
/* Level 6 - Maximum elevation (toasts, notifications) */
|
|
1677
|
+
--surface-6-bg: var(--color-surface-overlay);
|
|
1678
|
+
--surface-6-border: var(--color-line-subtle);
|
|
1679
|
+
--surface-6-shadow: var(--shadow-2xl);
|
|
1680
|
+
|
|
1681
|
+
/* ============================================
|
|
1682
|
+
* COMPONENT SURFACES
|
|
1683
|
+
* Pre-defined surface styles for common components
|
|
1684
|
+
* ============================================ */
|
|
1685
|
+
|
|
1686
|
+
/* Card */
|
|
1687
|
+
--surface-card-bg: var(--surface-2-bg);
|
|
1688
|
+
--surface-card-border: var(--surface-2-border);
|
|
1689
|
+
--surface-card-shadow: var(--surface-2-shadow);
|
|
1690
|
+
--surface-card-radius: var(--radius-card);
|
|
1691
|
+
|
|
1692
|
+
--surface-card-hover-bg: var(--surface-3-bg);
|
|
1693
|
+
--surface-card-hover-border: var(--surface-3-border);
|
|
1694
|
+
--surface-card-hover-shadow: var(--surface-3-shadow);
|
|
1695
|
+
|
|
1696
|
+
/* Card interactive (clickable) */
|
|
1697
|
+
--surface-card-interactive-bg: var(--surface-2-bg);
|
|
1698
|
+
--surface-card-interactive-border: var(--color-line-default);
|
|
1699
|
+
--surface-card-interactive-shadow: var(--shadow-sm);
|
|
1700
|
+
|
|
1701
|
+
--surface-card-interactive-hover-bg: var(--color-surface-subtle);
|
|
1702
|
+
--surface-card-interactive-hover-border: var(--color-line-emphasis);
|
|
1703
|
+
--surface-card-interactive-hover-shadow: var(--shadow-md);
|
|
1704
|
+
|
|
1705
|
+
--surface-card-interactive-active-bg: var(--color-surface-muted);
|
|
1706
|
+
--surface-card-interactive-active-border: var(--color-line-emphasis);
|
|
1707
|
+
--surface-card-interactive-active-shadow: var(--shadow-sm);
|
|
1708
|
+
|
|
1709
|
+
/* Panel */
|
|
1710
|
+
--surface-panel-bg: var(--color-surface-subtle);
|
|
1711
|
+
--surface-panel-border: var(--color-line-default);
|
|
1712
|
+
--surface-panel-shadow: none;
|
|
1713
|
+
--surface-panel-radius: var(--radius-xl);
|
|
1714
|
+
|
|
1715
|
+
/* Sidebar */
|
|
1716
|
+
--surface-sidebar-bg: var(--color-surface-canvas);
|
|
1717
|
+
--surface-sidebar-border: var(--color-line-default);
|
|
1718
|
+
--surface-sidebar-shadow: var(--shadow-sm);
|
|
1719
|
+
|
|
1720
|
+
/* Header */
|
|
1721
|
+
--surface-header-bg: var(--color-surface-canvas);
|
|
1722
|
+
--surface-header-border: var(--color-line-default);
|
|
1723
|
+
--surface-header-shadow: var(--shadow-sm);
|
|
1724
|
+
|
|
1725
|
+
/* Footer */
|
|
1726
|
+
--surface-footer-bg: var(--color-surface-subtle);
|
|
1727
|
+
--surface-footer-border: var(--color-line-default);
|
|
1728
|
+
--surface-footer-shadow: none;
|
|
1729
|
+
|
|
1730
|
+
/* Modal */
|
|
1731
|
+
--surface-modal-bg: var(--surface-5-bg);
|
|
1732
|
+
--surface-modal-border: var(--surface-5-border);
|
|
1733
|
+
--surface-modal-shadow: var(--surface-5-shadow);
|
|
1734
|
+
--surface-modal-radius: var(--radius-modal);
|
|
1735
|
+
--surface-modal-backdrop: var(--color-overlay-backdrop);
|
|
1736
|
+
|
|
1737
|
+
/* Dialog */
|
|
1738
|
+
--surface-dialog-bg: var(--surface-5-bg);
|
|
1739
|
+
--surface-dialog-border: var(--surface-5-border);
|
|
1740
|
+
--surface-dialog-shadow: var(--surface-5-shadow);
|
|
1741
|
+
--surface-dialog-radius: var(--radius-dialog);
|
|
1742
|
+
|
|
1743
|
+
/* Dropdown */
|
|
1744
|
+
--surface-dropdown-bg: var(--surface-4-bg);
|
|
1745
|
+
--surface-dropdown-border: var(--surface-4-border);
|
|
1746
|
+
--surface-dropdown-shadow: var(--surface-4-shadow);
|
|
1747
|
+
--surface-dropdown-radius: var(--radius-dropdown);
|
|
1748
|
+
|
|
1749
|
+
/* Popover */
|
|
1750
|
+
--surface-popover-bg: var(--surface-4-bg);
|
|
1751
|
+
--surface-popover-border: var(--surface-4-border);
|
|
1752
|
+
--surface-popover-shadow: var(--surface-4-shadow);
|
|
1753
|
+
--surface-popover-radius: var(--radius-popover);
|
|
1754
|
+
|
|
1755
|
+
/* Tooltip */
|
|
1756
|
+
--surface-tooltip-bg: var(--color-slate-900);
|
|
1757
|
+
--surface-tooltip-border: transparent;
|
|
1758
|
+
--surface-tooltip-shadow: var(--shadow-md);
|
|
1759
|
+
--surface-tooltip-radius: var(--radius-tooltip);
|
|
1760
|
+
--surface-tooltip-color: var(--color-white);
|
|
1761
|
+
|
|
1762
|
+
/* Toast */
|
|
1763
|
+
--surface-toast-bg: var(--surface-6-bg);
|
|
1764
|
+
--surface-toast-border: var(--surface-6-border);
|
|
1765
|
+
--surface-toast-shadow: var(--surface-6-shadow);
|
|
1766
|
+
--surface-toast-radius: var(--radius-xl);
|
|
1767
|
+
|
|
1768
|
+
/* Input */
|
|
1769
|
+
--surface-input-bg: var(--color-surface-canvas);
|
|
1770
|
+
--surface-input-border: var(--color-line-default);
|
|
1771
|
+
--surface-input-shadow: var(--shadow-xs);
|
|
1772
|
+
--surface-input-radius: var(--radius-input);
|
|
1773
|
+
|
|
1774
|
+
--surface-input-hover-border: var(--color-line-emphasis);
|
|
1775
|
+
--surface-input-focus-border: var(--color-line-focus);
|
|
1776
|
+
--surface-input-focus-shadow: var(--shadow-input-focus);
|
|
1777
|
+
|
|
1778
|
+
--surface-input-error-border: var(--color-error);
|
|
1779
|
+
--surface-input-error-shadow: var(--shadow-input-error);
|
|
1780
|
+
|
|
1781
|
+
--surface-input-disabled-bg: var(--color-surface-muted);
|
|
1782
|
+
--surface-input-disabled-border: var(--color-line-muted);
|
|
1783
|
+
|
|
1784
|
+
/* Button surfaces */
|
|
1785
|
+
--surface-button-primary-bg: var(--color-brand-primary);
|
|
1786
|
+
--surface-button-primary-border: transparent;
|
|
1787
|
+
--surface-button-primary-shadow: var(--shadow-button-primary);
|
|
1788
|
+
|
|
1789
|
+
--surface-button-primary-hover-bg: var(--color-brand-primary-dark);
|
|
1790
|
+
--surface-button-primary-hover-shadow: var(--shadow-button-primary-hover);
|
|
1791
|
+
|
|
1792
|
+
--surface-button-secondary-bg: transparent;
|
|
1793
|
+
--surface-button-secondary-border: var(--color-line-default);
|
|
1794
|
+
--surface-button-secondary-shadow: var(--shadow-button);
|
|
1795
|
+
|
|
1796
|
+
--surface-button-ghost-bg: transparent;
|
|
1797
|
+
--surface-button-ghost-border: transparent;
|
|
1798
|
+
|
|
1799
|
+
/* Table */
|
|
1800
|
+
--surface-table-bg: var(--color-surface-canvas);
|
|
1801
|
+
--surface-table-border: var(--color-line-default);
|
|
1802
|
+
--surface-table-header-bg: var(--color-surface-subtle);
|
|
1803
|
+
--surface-table-row-hover-bg: var(--color-surface-hover);
|
|
1804
|
+
--surface-table-row-selected-bg: var(--color-surface-selected);
|
|
1805
|
+
--surface-table-row-stripe-bg: var(--color-surface-subtle);
|
|
1806
|
+
|
|
1807
|
+
/* Code block */
|
|
1808
|
+
--surface-code-bg: var(--color-slate-900);
|
|
1809
|
+
--surface-code-border: var(--color-slate-700);
|
|
1810
|
+
--surface-code-color: var(--color-slate-100);
|
|
1811
|
+
|
|
1812
|
+
--surface-code-inline-bg: var(--color-slate-100);
|
|
1813
|
+
--surface-code-inline-border: var(--color-slate-200);
|
|
1814
|
+
--surface-code-inline-color: var(--color-rose-600);
|
|
1815
|
+
|
|
1816
|
+
/* ============================================
|
|
1817
|
+
* FEEDBACK SURFACES
|
|
1818
|
+
* For alerts, banners, status indicators
|
|
1819
|
+
* ============================================ */
|
|
1820
|
+
|
|
1821
|
+
/* Success */
|
|
1822
|
+
--surface-success-bg: var(--color-success-bg);
|
|
1823
|
+
--surface-success-border: var(--color-success-border);
|
|
1824
|
+
--surface-success-icon: var(--color-success);
|
|
1825
|
+
|
|
1826
|
+
--surface-success-emphasis-bg: var(--color-success);
|
|
1827
|
+
--surface-success-emphasis-border: var(--color-success-dark);
|
|
1828
|
+
--surface-success-emphasis-color: var(--color-white);
|
|
1829
|
+
|
|
1830
|
+
/* Warning */
|
|
1831
|
+
--surface-warning-bg: var(--color-warning-bg);
|
|
1832
|
+
--surface-warning-border: var(--color-warning-border);
|
|
1833
|
+
--surface-warning-icon: var(--color-warning);
|
|
1834
|
+
|
|
1835
|
+
--surface-warning-emphasis-bg: var(--color-warning);
|
|
1836
|
+
--surface-warning-emphasis-border: var(--color-warning-dark);
|
|
1837
|
+
--surface-warning-emphasis-color: var(--color-slate-900);
|
|
1838
|
+
|
|
1839
|
+
/* Error */
|
|
1840
|
+
--surface-error-bg: var(--color-error-bg);
|
|
1841
|
+
--surface-error-border: var(--color-error-border);
|
|
1842
|
+
--surface-error-icon: var(--color-error);
|
|
1843
|
+
|
|
1844
|
+
--surface-error-emphasis-bg: var(--color-error);
|
|
1845
|
+
--surface-error-emphasis-border: var(--color-error-dark);
|
|
1846
|
+
--surface-error-emphasis-color: var(--color-white);
|
|
1847
|
+
|
|
1848
|
+
/* Info */
|
|
1849
|
+
--surface-info-bg: var(--color-info-bg);
|
|
1850
|
+
--surface-info-border: var(--color-info-border);
|
|
1851
|
+
--surface-info-icon: var(--color-info);
|
|
1852
|
+
|
|
1853
|
+
--surface-info-emphasis-bg: var(--color-info);
|
|
1854
|
+
--surface-info-emphasis-border: var(--color-info-dark);
|
|
1855
|
+
--surface-info-emphasis-color: var(--color-white);
|
|
1856
|
+
}
|
|
1857
|
+
|
|
1858
|
+
/* ↳ inlined from src/styles/semantic/borders.css */
|
|
1859
|
+
/**
|
|
1860
|
+
* Design System - Border Tokens
|
|
1861
|
+
*
|
|
1862
|
+
* Border widths, styles, and complete border definitions.
|
|
1863
|
+
*
|
|
1864
|
+
* @brand brasil-a-vera (default, overridable)
|
|
1865
|
+
* @version 1.0.0
|
|
1866
|
+
*/
|
|
1867
|
+
|
|
1868
|
+
@theme {
|
|
1869
|
+
/* ============================================
|
|
1870
|
+
* BORDER WIDTHS
|
|
1871
|
+
* ============================================ */
|
|
1872
|
+
|
|
1873
|
+
--border-width-0: 0px;
|
|
1874
|
+
--border-width-1: 1px;
|
|
1875
|
+
--border-width-2: 2px;
|
|
1876
|
+
--border-width-4: 4px;
|
|
1877
|
+
--border-width-8: 8px;
|
|
1878
|
+
|
|
1879
|
+
/* Semantic widths */
|
|
1880
|
+
--border-width-none: var(--border-width-0);
|
|
1881
|
+
--border-width-thin: var(--border-width-1);
|
|
1882
|
+
--border-width-default: var(--border-width-1);
|
|
1883
|
+
--border-width-medium: var(--border-width-2);
|
|
1884
|
+
--border-width-thick: var(--border-width-4);
|
|
1885
|
+
|
|
1886
|
+
/* ============================================
|
|
1887
|
+
* BORDER STYLES
|
|
1888
|
+
* ============================================ */
|
|
1889
|
+
|
|
1890
|
+
--border-style-solid: solid;
|
|
1891
|
+
--border-style-dashed: dashed;
|
|
1892
|
+
--border-style-dotted: dotted;
|
|
1893
|
+
--border-style-double: double;
|
|
1894
|
+
--border-style-none: none;
|
|
1895
|
+
|
|
1896
|
+
/* ============================================
|
|
1897
|
+
* COMPLETE BORDERS
|
|
1898
|
+
* Ready-to-use border definitions
|
|
1899
|
+
* ============================================ */
|
|
1900
|
+
|
|
1901
|
+
/* Default border */
|
|
1902
|
+
--border-default: var(--border-width-default) var(--border-style-solid)
|
|
1903
|
+
var(--color-line-default);
|
|
1904
|
+
--border-muted: var(--border-width-default) var(--border-style-solid)
|
|
1905
|
+
var(--color-line-muted);
|
|
1906
|
+
--border-subtle: var(--border-width-default) var(--border-style-solid)
|
|
1907
|
+
var(--color-line-subtle);
|
|
1908
|
+
--border-emphasis: var(--border-width-default) var(--border-style-solid)
|
|
1909
|
+
var(--color-line-emphasis);
|
|
1910
|
+
--border-strong: var(--border-width-default) var(--border-style-solid)
|
|
1911
|
+
var(--color-line-strong);
|
|
1912
|
+
|
|
1913
|
+
/* Brand borders */
|
|
1914
|
+
--border-brand: var(--border-width-default) var(--border-style-solid)
|
|
1915
|
+
var(--color-line-brand);
|
|
1916
|
+
--border-brand-emphasis: var(--border-width-medium) var(--border-style-solid)
|
|
1917
|
+
var(--color-line-brand);
|
|
1918
|
+
|
|
1919
|
+
/* Focus borders */
|
|
1920
|
+
--border-focus: var(--border-width-medium) var(--border-style-solid)
|
|
1921
|
+
var(--color-line-focus);
|
|
1922
|
+
|
|
1923
|
+
/* Feedback borders */
|
|
1924
|
+
--border-success: var(--border-width-default) var(--border-style-solid)
|
|
1925
|
+
var(--color-success-border);
|
|
1926
|
+
--border-success-emphasis: var(--border-width-default)
|
|
1927
|
+
var(--border-style-solid) var(--color-success);
|
|
1928
|
+
--border-warning: var(--border-width-default) var(--border-style-solid)
|
|
1929
|
+
var(--color-warning-border);
|
|
1930
|
+
--border-warning-emphasis: var(--border-width-default)
|
|
1931
|
+
var(--border-style-solid) var(--color-warning);
|
|
1932
|
+
--border-error: var(--border-width-default) var(--border-style-solid)
|
|
1933
|
+
var(--color-error-border);
|
|
1934
|
+
--border-error-emphasis: var(--border-width-default) var(--border-style-solid)
|
|
1935
|
+
var(--color-error);
|
|
1936
|
+
--border-info: var(--border-width-default) var(--border-style-solid)
|
|
1937
|
+
var(--color-info-border);
|
|
1938
|
+
--border-info-emphasis: var(--border-width-default) var(--border-style-solid)
|
|
1939
|
+
var(--color-info);
|
|
1940
|
+
|
|
1941
|
+
/* Dashed borders */
|
|
1942
|
+
--border-dashed: var(--border-width-default) var(--border-style-dashed)
|
|
1943
|
+
var(--color-line-default);
|
|
1944
|
+
--border-dashed-emphasis: var(--border-width-default)
|
|
1945
|
+
var(--border-style-dashed) var(--color-line-emphasis);
|
|
1946
|
+
|
|
1947
|
+
/* Dotted borders */
|
|
1948
|
+
--border-dotted: var(--border-width-default) var(--border-style-dotted)
|
|
1949
|
+
var(--color-line-default);
|
|
1950
|
+
|
|
1951
|
+
/* ============================================
|
|
1952
|
+
* OUTLINE TOKENS
|
|
1953
|
+
* For focus indicators
|
|
1954
|
+
* ============================================ */
|
|
1955
|
+
|
|
1956
|
+
--outline-none: none;
|
|
1957
|
+
--outline-default: 2px solid var(--color-line-focus);
|
|
1958
|
+
--outline-offset: 2px;
|
|
1959
|
+
|
|
1960
|
+
/* Focus ring */
|
|
1961
|
+
--ring-width: 3px;
|
|
1962
|
+
--ring-color: var(--color-brand-primary-500);
|
|
1963
|
+
--ring-opacity: 0.2;
|
|
1964
|
+
--ring-offset-width: 2px;
|
|
1965
|
+
--ring-offset-color: var(--color-white);
|
|
1966
|
+
|
|
1967
|
+
/* Focus ring compositions — color-mix preserves the alpha relationship
|
|
1968
|
+
* across consumer reskins (brand-primary override propagates to the
|
|
1969
|
+
* ring automatically). Status rings keep their universal Tailwind
|
|
1970
|
+
* tones (status semantics are not brand-overridable; see issue #152). */
|
|
1971
|
+
--ring-default: 0 0 0 var(--ring-width)
|
|
1972
|
+
color-mix(in srgb, var(--color-brand-primary-500) 20%, transparent);
|
|
1973
|
+
--ring-success: 0 0 0 var(--ring-width)
|
|
1974
|
+
color-mix(in srgb, var(--color-emerald-500) 20%, transparent);
|
|
1975
|
+
--ring-warning: 0 0 0 var(--ring-width)
|
|
1976
|
+
color-mix(in srgb, var(--color-amber-500) 20%, transparent);
|
|
1977
|
+
--ring-error: 0 0 0 var(--ring-width)
|
|
1978
|
+
color-mix(in srgb, var(--color-rose-500) 20%, transparent);
|
|
1979
|
+
--ring-info: 0 0 0 var(--ring-width)
|
|
1980
|
+
color-mix(in srgb, var(--color-sky-500) 20%, transparent);
|
|
1981
|
+
|
|
1982
|
+
/* ============================================
|
|
1983
|
+
* DIVIDER TOKENS
|
|
1984
|
+
* For visual separation
|
|
1985
|
+
* ============================================ */
|
|
1986
|
+
|
|
1987
|
+
--divider-horizontal: var(--border-width-default) var(--border-style-solid)
|
|
1988
|
+
var(--color-divider);
|
|
1989
|
+
--divider-vertical: var(--border-width-default) var(--border-style-solid)
|
|
1990
|
+
var(--color-divider);
|
|
1991
|
+
--divider-subtle: var(--border-width-default) var(--border-style-solid)
|
|
1992
|
+
var(--color-divider-subtle);
|
|
1993
|
+
--divider-emphasis: var(--border-width-default) var(--border-style-solid)
|
|
1994
|
+
var(--color-divider-emphasis);
|
|
1995
|
+
}
|
|
1996
|
+
|
|
1997
|
+
|
|
1998
|
+
/* ============================================
|
|
1999
|
+
* THEMES
|
|
2000
|
+
* Light/dark selector overrides — essential for theme-awareness.
|
|
2001
|
+
* ============================================ */
|
|
2002
|
+
|
|
2003
|
+
/* ↳ inlined from src/styles/themes/index.css */
|
|
2004
|
+
/**
|
|
2005
|
+
* Design System - Theme Aggregator
|
|
2006
|
+
*
|
|
2007
|
+
* Imports all theme files in the correct order.
|
|
2008
|
+
*
|
|
2009
|
+
* @brand brasil-a-vera (default, overridable)
|
|
2010
|
+
* @version 1.0.0
|
|
2011
|
+
*/
|
|
2012
|
+
|
|
2013
|
+
/* Base theme utilities and shared variables */
|
|
2014
|
+
/* ↳ inlined from src/styles/themes/base.css */
|
|
2015
|
+
/**
|
|
2016
|
+
* Design System - Theme Base
|
|
2017
|
+
*
|
|
2018
|
+
* Shared theme configuration and utilities.
|
|
2019
|
+
* This file sets up the theme system foundation.
|
|
2020
|
+
*
|
|
2021
|
+
* @brand brasil-a-vera (default, overridable)
|
|
2022
|
+
* @version 1.0.0
|
|
2023
|
+
*/
|
|
2024
|
+
|
|
2025
|
+
/* ============================================
|
|
2026
|
+
* THEME DATA ATTRIBUTES
|
|
2027
|
+
* The design system uses the data-theme attribute (or .light / .dark
|
|
2028
|
+
* class) on :root to control color mode.
|
|
2029
|
+
*
|
|
2030
|
+
* Usage:
|
|
2031
|
+
* <html data-theme="light">
|
|
2032
|
+
* <html data-theme="dark">
|
|
2033
|
+
* ============================================ */
|
|
2034
|
+
|
|
2035
|
+
:root {
|
|
2036
|
+
/* ============================================
|
|
2037
|
+
* SHARED THEME VARIABLES
|
|
2038
|
+
* These don't change between light/dark
|
|
2039
|
+
* ============================================ */
|
|
2040
|
+
|
|
2041
|
+
/* Color scheme hint for browsers */
|
|
2042
|
+
color-scheme: light dark;
|
|
2043
|
+
|
|
2044
|
+
/* Default theme - light */
|
|
2045
|
+
--theme-mode: light;
|
|
2046
|
+
|
|
2047
|
+
/* ============================================
|
|
2048
|
+
* Z-INDEX SCALE
|
|
2049
|
+
* Consistent layering across themes
|
|
2050
|
+
* ============================================ */
|
|
2051
|
+
|
|
2052
|
+
--z-behind: -1;
|
|
2053
|
+
--z-base: 0;
|
|
2054
|
+
--z-dropdown: 10;
|
|
2055
|
+
--z-sticky: 20;
|
|
2056
|
+
--z-fixed: 30;
|
|
2057
|
+
--z-modal-backdrop: 40;
|
|
2058
|
+
--z-modal: 50;
|
|
2059
|
+
--z-popover: 60;
|
|
2060
|
+
--z-tooltip: 70;
|
|
2061
|
+
--z-toast: 80;
|
|
2062
|
+
--z-max: 9999;
|
|
2063
|
+
|
|
2064
|
+
/* ============================================
|
|
2065
|
+
* OPACITY SCALE
|
|
2066
|
+
* Consistent transparency values
|
|
2067
|
+
* ============================================ */
|
|
2068
|
+
|
|
2069
|
+
--opacity-0: 0;
|
|
2070
|
+
--opacity-5: 0.05;
|
|
2071
|
+
--opacity-10: 0.1;
|
|
2072
|
+
--opacity-20: 0.2;
|
|
2073
|
+
--opacity-25: 0.25;
|
|
2074
|
+
--opacity-30: 0.3;
|
|
2075
|
+
--opacity-40: 0.4;
|
|
2076
|
+
--opacity-50: 0.5;
|
|
2077
|
+
--opacity-60: 0.6;
|
|
2078
|
+
--opacity-70: 0.7;
|
|
2079
|
+
--opacity-75: 0.75;
|
|
2080
|
+
--opacity-80: 0.8;
|
|
2081
|
+
--opacity-90: 0.9;
|
|
2082
|
+
--opacity-95: 0.95;
|
|
2083
|
+
--opacity-100: 1;
|
|
2084
|
+
|
|
2085
|
+
/* ============================================
|
|
2086
|
+
* ASPECT RATIOS
|
|
2087
|
+
* Common aspect ratios for media
|
|
2088
|
+
* ============================================ */
|
|
2089
|
+
|
|
2090
|
+
--aspect-auto: auto;
|
|
2091
|
+
--aspect-square: 1 / 1;
|
|
2092
|
+
--aspect-video: 16 / 9;
|
|
2093
|
+
--aspect-portrait: 3 / 4;
|
|
2094
|
+
--aspect-landscape: 4 / 3;
|
|
2095
|
+
--aspect-wide: 21 / 9;
|
|
2096
|
+
|
|
2097
|
+
/* ============================================
|
|
2098
|
+
* CONTAINER SIZES
|
|
2099
|
+
* Max widths for content containers
|
|
2100
|
+
* ============================================ */
|
|
2101
|
+
|
|
2102
|
+
--container-xs: 20rem; /* 320px */
|
|
2103
|
+
--container-sm: 24rem; /* 384px */
|
|
2104
|
+
--container-md: 28rem; /* 448px */
|
|
2105
|
+
--container-lg: 32rem; /* 512px */
|
|
2106
|
+
--container-xl: 36rem; /* 576px */
|
|
2107
|
+
--container-2xl: 42rem; /* 672px */
|
|
2108
|
+
--container-3xl: 48rem; /* 768px */
|
|
2109
|
+
--container-4xl: 56rem; /* 896px */
|
|
2110
|
+
--container-5xl: 64rem; /* 1024px */
|
|
2111
|
+
--container-6xl: 72rem; /* 1152px */
|
|
2112
|
+
--container-7xl: 80rem; /* 1280px */
|
|
2113
|
+
--container-full: 100%;
|
|
2114
|
+
--container-prose: 65ch; /* Optimal reading width */
|
|
2115
|
+
|
|
2116
|
+
/* ============================================
|
|
2117
|
+
* BREAKPOINTS
|
|
2118
|
+
* Responsive design breakpoints
|
|
2119
|
+
* ============================================ */
|
|
2120
|
+
|
|
2121
|
+
--breakpoint-sm: 640px;
|
|
2122
|
+
--breakpoint-md: 768px;
|
|
2123
|
+
--breakpoint-lg: 1024px;
|
|
2124
|
+
--breakpoint-xl: 1280px;
|
|
2125
|
+
--breakpoint-2xl: 1536px;
|
|
2126
|
+
|
|
2127
|
+
/* ============================================
|
|
2128
|
+
* SCROLLBAR STYLING
|
|
2129
|
+
* Consistent scrollbar appearance
|
|
2130
|
+
* ============================================ */
|
|
2131
|
+
|
|
2132
|
+
--scrollbar-width: 8px;
|
|
2133
|
+
--scrollbar-width-thin: 4px;
|
|
2134
|
+
/* slate-100 preserved from the prior themes/light.css declaration
|
|
2135
|
+
* (D4). dark.css redeclares this token with a darker value. */
|
|
2136
|
+
--scrollbar-track-bg: var(--color-slate-100);
|
|
2137
|
+
--scrollbar-thumb-bg: var(--color-slate-300);
|
|
2138
|
+
--scrollbar-thumb-hover-bg: var(--color-slate-400);
|
|
2139
|
+
--scrollbar-radius: var(--radius-full);
|
|
2140
|
+
}
|
|
2141
|
+
|
|
2142
|
+
/* ============================================
|
|
2143
|
+
* SCROLLBAR STYLES
|
|
2144
|
+
* Custom scrollbar for WebKit browsers
|
|
2145
|
+
* ============================================ */
|
|
2146
|
+
|
|
2147
|
+
/* Webkit scrollbar */
|
|
2148
|
+
::-webkit-scrollbar {
|
|
2149
|
+
width: var(--scrollbar-width);
|
|
2150
|
+
height: var(--scrollbar-width);
|
|
2151
|
+
}
|
|
2152
|
+
|
|
2153
|
+
::-webkit-scrollbar-track {
|
|
2154
|
+
background: var(--scrollbar-track-bg);
|
|
2155
|
+
border-radius: var(--scrollbar-radius);
|
|
2156
|
+
}
|
|
2157
|
+
|
|
2158
|
+
::-webkit-scrollbar-thumb {
|
|
2159
|
+
background: var(--scrollbar-thumb-bg);
|
|
2160
|
+
border-radius: var(--scrollbar-radius);
|
|
2161
|
+
}
|
|
2162
|
+
|
|
2163
|
+
::-webkit-scrollbar-thumb:hover {
|
|
2164
|
+
background: var(--scrollbar-thumb-hover-bg);
|
|
2165
|
+
}
|
|
2166
|
+
|
|
2167
|
+
/* Firefox scrollbar */
|
|
2168
|
+
* {
|
|
2169
|
+
scrollbar-width: thin;
|
|
2170
|
+
scrollbar-color: var(--scrollbar-thumb-bg) var(--scrollbar-track-bg);
|
|
2171
|
+
}
|
|
2172
|
+
|
|
2173
|
+
/* Thin scrollbar variant */
|
|
2174
|
+
.scrollbar-thin::-webkit-scrollbar {
|
|
2175
|
+
width: var(--scrollbar-width-thin);
|
|
2176
|
+
height: var(--scrollbar-width-thin);
|
|
2177
|
+
}
|
|
2178
|
+
|
|
2179
|
+
/* Hidden scrollbar (still scrollable) */
|
|
2180
|
+
.scrollbar-hidden {
|
|
2181
|
+
-ms-overflow-style: none;
|
|
2182
|
+
scrollbar-width: none;
|
|
2183
|
+
}
|
|
2184
|
+
|
|
2185
|
+
.scrollbar-hidden::-webkit-scrollbar {
|
|
2186
|
+
display: none;
|
|
2187
|
+
}
|
|
2188
|
+
|
|
2189
|
+
/* ============================================
|
|
2190
|
+
* FOCUS STYLES
|
|
2191
|
+
* Accessible focus indicators
|
|
2192
|
+
* ============================================ */
|
|
2193
|
+
|
|
2194
|
+
/* Remove default focus outline */
|
|
2195
|
+
*:focus {
|
|
2196
|
+
outline: none;
|
|
2197
|
+
}
|
|
2198
|
+
|
|
2199
|
+
/* Keyboard focus only (not mouse/touch) */
|
|
2200
|
+
*:focus-visible {
|
|
2201
|
+
outline: 2px solid var(--color-line-focus);
|
|
2202
|
+
outline-offset: 2px;
|
|
2203
|
+
}
|
|
2204
|
+
|
|
2205
|
+
/* Focus ring utility class */
|
|
2206
|
+
.focus-ring:focus-visible {
|
|
2207
|
+
box-shadow: var(--ring-default);
|
|
2208
|
+
}
|
|
2209
|
+
|
|
2210
|
+
/* Skip to main content link */
|
|
2211
|
+
.skip-link {
|
|
2212
|
+
position: absolute;
|
|
2213
|
+
top: -40px;
|
|
2214
|
+
left: 0;
|
|
2215
|
+
background: var(--color-surface-canvas);
|
|
2216
|
+
color: var(--color-fg-primary);
|
|
2217
|
+
padding: var(--spacing-2) var(--spacing-4);
|
|
2218
|
+
z-index: var(--z-max);
|
|
2219
|
+
transition: top var(--duration-fast) var(--ease-default);
|
|
2220
|
+
}
|
|
2221
|
+
|
|
2222
|
+
.skip-link:focus {
|
|
2223
|
+
top: 0;
|
|
2224
|
+
}
|
|
2225
|
+
|
|
2226
|
+
/* ============================================
|
|
2227
|
+
* SELECTION STYLES
|
|
2228
|
+
* Text selection appearance
|
|
2229
|
+
* ============================================ */
|
|
2230
|
+
|
|
2231
|
+
::selection {
|
|
2232
|
+
background-color: var(--color-brand-primary-200);
|
|
2233
|
+
color: var(--color-slate-900);
|
|
2234
|
+
}
|
|
2235
|
+
|
|
2236
|
+
/* ============================================
|
|
2237
|
+
* REDUCED MOTION
|
|
2238
|
+
* Respect user preferences
|
|
2239
|
+
* ============================================ */
|
|
2240
|
+
|
|
2241
|
+
@media (prefers-reduced-motion: reduce) {
|
|
2242
|
+
*,
|
|
2243
|
+
*::before,
|
|
2244
|
+
*::after {
|
|
2245
|
+
animation-duration: 0.01ms !important;
|
|
2246
|
+
animation-iteration-count: 1 !important;
|
|
2247
|
+
transition-duration: 0.01ms !important;
|
|
2248
|
+
scroll-behavior: auto !important;
|
|
2249
|
+
}
|
|
2250
|
+
}
|
|
2251
|
+
|
|
2252
|
+
|
|
2253
|
+
/* Color modes */
|
|
2254
|
+
/* ↳ inlined from src/styles/themes/light.css */
|
|
2255
|
+
/**
|
|
2256
|
+
* Light Theme — minimal mode indicator
|
|
2257
|
+
*
|
|
2258
|
+
* Light is the default theme: all light-mode token values are declared
|
|
2259
|
+
* once in semantic/colors.css (@theme), themes/base.css (shared
|
|
2260
|
+
* cross-theme tokens like scrollbar/code/shadow), and semantic/surfaces.css.
|
|
2261
|
+
* This file ONLY carries the theme-mode indicator and the color-scheme
|
|
2262
|
+
* hint — there is nothing else for it to redeclare without drifting from
|
|
2263
|
+
* the @theme defaults.
|
|
2264
|
+
*
|
|
2265
|
+
* Architecture rationale: the Caminho C refactor (issue #152) chose
|
|
2266
|
+
* "single source of truth for light" over "redundant declarations + a
|
|
2267
|
+
* coverage validator" — eliminate the drift surface rather than police it.
|
|
2268
|
+
*
|
|
2269
|
+
* Dark mode keeps its own themes/dark.css (necessarily — dark redeclares
|
|
2270
|
+
* ~117 tokens and validate-dark-coverage.mjs guards the @media duplication).
|
|
2271
|
+
*
|
|
2272
|
+
* @brand brasil-a-vera (default, overridable)
|
|
2273
|
+
*/
|
|
2274
|
+
|
|
2275
|
+
:root,
|
|
2276
|
+
[data-theme="light"],
|
|
2277
|
+
.light {
|
|
2278
|
+
--theme-mode: light;
|
|
2279
|
+
color-scheme: light;
|
|
2280
|
+
}
|
|
2281
|
+
|
|
2282
|
+
/* ↳ inlined from src/styles/themes/dark.css */
|
|
2283
|
+
/**
|
|
2284
|
+
* Design System - Dark Theme
|
|
2285
|
+
*
|
|
2286
|
+
* Dark color scheme overrides.
|
|
2287
|
+
* Activated via data-theme="dark" or .dark class.
|
|
2288
|
+
*
|
|
2289
|
+
* @brand brasil-a-vera (default, overridable)
|
|
2290
|
+
* @version 1.0.0
|
|
2291
|
+
*/
|
|
2292
|
+
|
|
2293
|
+
[data-theme="dark"],
|
|
2294
|
+
.dark {
|
|
2295
|
+
/* Theme indicator */
|
|
2296
|
+
--theme-mode: dark;
|
|
2297
|
+
color-scheme: dark;
|
|
2298
|
+
|
|
2299
|
+
/* ============================================
|
|
2300
|
+
* BRAND COLORS
|
|
2301
|
+
* Slightly lighter for dark backgrounds
|
|
2302
|
+
* ============================================ */
|
|
2303
|
+
|
|
2304
|
+
--color-brand-primary: var(--color-brand-primary-400);
|
|
2305
|
+
--color-brand-primary-light: var(--color-brand-primary-300);
|
|
2306
|
+
--color-brand-primary-dark: var(--color-brand-primary-500);
|
|
2307
|
+
--color-brand-primary-darker: var(--color-brand-primary-600);
|
|
2308
|
+
|
|
2309
|
+
--color-brand-secondary: var(--color-brand-secondary-400);
|
|
2310
|
+
--color-brand-secondary-light: var(--color-brand-secondary-300);
|
|
2311
|
+
--color-brand-secondary-dark: var(--color-brand-secondary-500);
|
|
2312
|
+
|
|
2313
|
+
--color-brand-accent: var(--color-cyan-400);
|
|
2314
|
+
--color-brand-accent-light: var(--color-cyan-300);
|
|
2315
|
+
--color-brand-accent-dark: var(--color-cyan-500);
|
|
2316
|
+
|
|
2317
|
+
/* ============================================
|
|
2318
|
+
* FOREGROUND COLORS
|
|
2319
|
+
* Inverted for dark backgrounds
|
|
2320
|
+
* ============================================ */
|
|
2321
|
+
|
|
2322
|
+
--color-fg-primary: var(--color-slate-50);
|
|
2323
|
+
--color-fg-secondary: var(--color-slate-300);
|
|
2324
|
+
--color-fg-tertiary: var(--color-slate-400);
|
|
2325
|
+
--color-fg-quaternary: var(--color-slate-500);
|
|
2326
|
+
--color-fg-placeholder: var(--color-slate-500);
|
|
2327
|
+
--color-fg-disabled: var(--color-slate-600);
|
|
2328
|
+
--color-fg-inverse: var(--color-slate-900);
|
|
2329
|
+
--color-fg-inverse-secondary: var(--color-slate-700);
|
|
2330
|
+
|
|
2331
|
+
/* Link colors */
|
|
2332
|
+
--color-fg-link: var(--color-brand-primary-400);
|
|
2333
|
+
--color-fg-link-hover: var(--color-brand-primary-300);
|
|
2334
|
+
--color-fg-link-active: var(--color-brand-primary-200);
|
|
2335
|
+
--color-fg-link-visited: var(--color-brand-secondary-300);
|
|
2336
|
+
|
|
2337
|
+
/* Brand text */
|
|
2338
|
+
--color-fg-brand: var(--color-brand-primary-400);
|
|
2339
|
+
--color-fg-brand-emphasis: var(--color-brand-primary-300);
|
|
2340
|
+
--color-fg-brand-secondary: var(--color-brand-secondary-400);
|
|
2341
|
+
--color-fg-brand-secondary-emphasis: var(--color-brand-secondary-300);
|
|
2342
|
+
|
|
2343
|
+
/* Feedback text */
|
|
2344
|
+
--color-fg-success: var(--color-emerald-400);
|
|
2345
|
+
--color-fg-warning: var(--color-amber-400);
|
|
2346
|
+
--color-fg-error: var(--color-rose-400);
|
|
2347
|
+
--color-fg-info: var(--color-sky-400);
|
|
2348
|
+
|
|
2349
|
+
/* On-color feedback text — constant white in both themes (the solid
|
|
2350
|
+
* status surfaces stay saturated + dark in dark mode too). See
|
|
2351
|
+
* semantic/colors.css for the AA rationale. */
|
|
2352
|
+
--color-fg-on-success: var(--color-white);
|
|
2353
|
+
--color-fg-on-warning: var(--color-white);
|
|
2354
|
+
--color-fg-on-error: var(--color-white);
|
|
2355
|
+
--color-fg-on-info: var(--color-white);
|
|
2356
|
+
|
|
2357
|
+
/* ============================================
|
|
2358
|
+
* SURFACE COLORS — Backgrounds (dark scale)
|
|
2359
|
+
* ============================================ */
|
|
2360
|
+
|
|
2361
|
+
--color-surface-canvas: var(--color-slate-950);
|
|
2362
|
+
--color-surface-subtle: var(--color-slate-900);
|
|
2363
|
+
--color-surface-muted: var(--color-slate-800);
|
|
2364
|
+
--color-surface-emphasis: var(--color-slate-700);
|
|
2365
|
+
--color-surface-strong: var(--color-slate-600);
|
|
2366
|
+
--color-surface-inverse: var(--color-slate-50);
|
|
2367
|
+
--color-surface-inverse-subtle: var(--color-slate-100);
|
|
2368
|
+
|
|
2369
|
+
/* Brand backgrounds */
|
|
2370
|
+
--color-surface-brand-subtle: var(--color-brand-primary-950);
|
|
2371
|
+
--color-surface-brand-muted: var(--color-brand-primary-900);
|
|
2372
|
+
--color-surface-brand: var(--color-brand-primary-500);
|
|
2373
|
+
--color-surface-brand-strong: var(--color-brand-primary-400);
|
|
2374
|
+
--color-surface-brand-emphasis: var(--color-brand-primary-400);
|
|
2375
|
+
|
|
2376
|
+
--color-surface-secondary-subtle: var(--color-brand-secondary-950);
|
|
2377
|
+
--color-surface-secondary: var(--color-brand-secondary-500);
|
|
2378
|
+
|
|
2379
|
+
--color-surface-accent-subtle: var(--color-cyan-950);
|
|
2380
|
+
--color-surface-accent: var(--color-cyan-500);
|
|
2381
|
+
|
|
2382
|
+
/* ============================================
|
|
2383
|
+
* SURFACE COLORS — Elevation layers (dark)
|
|
2384
|
+
* ============================================ */
|
|
2385
|
+
|
|
2386
|
+
--color-surface-base: var(--color-slate-900);
|
|
2387
|
+
--color-surface-raised: var(--color-slate-800);
|
|
2388
|
+
--color-surface-overlay: var(--color-slate-800);
|
|
2389
|
+
--color-surface-sunken: var(--color-slate-950);
|
|
2390
|
+
--color-surface-disabled: var(--color-slate-800);
|
|
2391
|
+
|
|
2392
|
+
/* Surface levels */
|
|
2393
|
+
--surface-0-bg: var(--color-slate-950);
|
|
2394
|
+
--surface-1-bg: var(--color-slate-900);
|
|
2395
|
+
--surface-2-bg: var(--color-slate-800);
|
|
2396
|
+
--surface-3-bg: var(--color-slate-700);
|
|
2397
|
+
--surface-4-bg: var(--color-slate-800);
|
|
2398
|
+
--surface-5-bg: var(--color-slate-800);
|
|
2399
|
+
|
|
2400
|
+
/* ============================================
|
|
2401
|
+
* LINE COLORS
|
|
2402
|
+
* Lighter borders on dark backgrounds
|
|
2403
|
+
* ============================================ */
|
|
2404
|
+
|
|
2405
|
+
--color-line-default: var(--color-slate-700);
|
|
2406
|
+
--color-line-muted: var(--color-slate-800);
|
|
2407
|
+
--color-line-subtle: var(--color-slate-800);
|
|
2408
|
+
--color-line-emphasis: var(--color-slate-600);
|
|
2409
|
+
--color-line-strong: var(--color-slate-500);
|
|
2410
|
+
--color-line-inverse: var(--color-slate-200);
|
|
2411
|
+
--color-line-focus: var(--color-brand-primary-400);
|
|
2412
|
+
--color-line-focus-ring: var(--color-brand-primary-400);
|
|
2413
|
+
|
|
2414
|
+
/* Brand-colored borders — mirror the brand foreground/border ladder
|
|
2415
|
+
* (light theme uses -500, dark theme uses -400) so a Tabs underline or
|
|
2416
|
+
* branded outline reads against a dark surface. Concrete contrast is
|
|
2417
|
+
* verified per release via test:a11y:baseline. */
|
|
2418
|
+
--color-line-brand: var(--color-brand-primary-400);
|
|
2419
|
+
--color-line-secondary: var(--color-brand-secondary-400);
|
|
2420
|
+
--color-line-accent: var(--color-cyan-400);
|
|
2421
|
+
|
|
2422
|
+
/* ============================================
|
|
2423
|
+
* SURFACE COLORS — Interactive states (dark)
|
|
2424
|
+
* ============================================ */
|
|
2425
|
+
|
|
2426
|
+
--color-surface-hover: var(--color-slate-800);
|
|
2427
|
+
--color-surface-hover-subtle: var(--color-slate-900);
|
|
2428
|
+
--color-surface-active: var(--color-slate-700);
|
|
2429
|
+
--color-surface-selected: var(--color-brand-primary-950);
|
|
2430
|
+
--color-surface-selected-subtle: var(--color-brand-primary-900);
|
|
2431
|
+
/* state-disabled fused into surface-disabled (identical values).
|
|
2432
|
+
* disabled-subtle is intentionally close to canvas — slate-900 over
|
|
2433
|
+
* canvas slate-950 is ~1.16:1, mirroring the light pattern where
|
|
2434
|
+
* slate-50 over white is also barely perceptible. The role is
|
|
2435
|
+
* "barely-perceptible disabled wash", not "visible disabled tint". */
|
|
2436
|
+
--color-surface-disabled-subtle: var(--color-slate-900);
|
|
2437
|
+
--color-surface-focus: var(--color-brand-primary-900);
|
|
2438
|
+
|
|
2439
|
+
/* ============================================
|
|
2440
|
+
* FEEDBACK COLORS
|
|
2441
|
+
* Brighter for dark backgrounds
|
|
2442
|
+
* ============================================ */
|
|
2443
|
+
|
|
2444
|
+
/* Success */
|
|
2445
|
+
--color-success: var(--color-emerald-400);
|
|
2446
|
+
--color-success-light: var(--color-emerald-300);
|
|
2447
|
+
--color-success-dark: var(--color-emerald-500);
|
|
2448
|
+
--color-success-bg: var(--color-emerald-950);
|
|
2449
|
+
--color-success-bg-emphasis: var(--color-emerald-900);
|
|
2450
|
+
--color-success-border: var(--color-emerald-800);
|
|
2451
|
+
--color-success-border-emphasis: var(--color-emerald-400);
|
|
2452
|
+
|
|
2453
|
+
/* Warning */
|
|
2454
|
+
--color-warning: var(--color-amber-400);
|
|
2455
|
+
--color-warning-light: var(--color-amber-300);
|
|
2456
|
+
--color-warning-dark: var(--color-amber-500);
|
|
2457
|
+
--color-warning-bg: var(--color-amber-950);
|
|
2458
|
+
--color-warning-bg-emphasis: var(--color-amber-900);
|
|
2459
|
+
--color-warning-border: var(--color-amber-800);
|
|
2460
|
+
--color-warning-border-emphasis: var(--color-amber-400);
|
|
2461
|
+
|
|
2462
|
+
/* Error */
|
|
2463
|
+
--color-error: var(--color-rose-400);
|
|
2464
|
+
--color-error-light: var(--color-rose-300);
|
|
2465
|
+
--color-error-dark: var(--color-rose-400);
|
|
2466
|
+
--color-error-bg: var(--color-rose-950);
|
|
2467
|
+
--color-error-bg-emphasis: var(--color-rose-900);
|
|
2468
|
+
--color-error-border: var(--color-rose-800);
|
|
2469
|
+
--color-error-border-emphasis: var(--color-rose-400);
|
|
2470
|
+
|
|
2471
|
+
/* Info */
|
|
2472
|
+
--color-info: var(--color-sky-400);
|
|
2473
|
+
--color-info-light: var(--color-sky-300);
|
|
2474
|
+
--color-info-dark: var(--color-sky-500);
|
|
2475
|
+
|
|
2476
|
+
/* Status neutral — completes status family in dark mode */
|
|
2477
|
+
--color-status-neutral: var(--color-slate-400);
|
|
2478
|
+
--color-info-bg: var(--color-sky-950);
|
|
2479
|
+
--color-info-bg-emphasis: var(--color-sky-900);
|
|
2480
|
+
--color-info-border: var(--color-sky-800);
|
|
2481
|
+
--color-info-border-emphasis: var(--color-sky-400);
|
|
2482
|
+
|
|
2483
|
+
/* Solid (filled) status surfaces — saturated chips that stay dark in both
|
|
2484
|
+
* themes so white on-color text clears AA. Identical to light by design.
|
|
2485
|
+
* See semantic/colors.css. */
|
|
2486
|
+
--color-success-solid: var(--color-emerald-700);
|
|
2487
|
+
--color-warning-solid: var(--color-amber-700);
|
|
2488
|
+
--color-error-solid: var(--color-rose-700);
|
|
2489
|
+
--color-info-solid: var(--color-sky-700);
|
|
2490
|
+
|
|
2491
|
+
/* ============================================
|
|
2492
|
+
* DATA-VISUALIZATION CATEGORICAL PALETTE (Okabe-Ito, dark-calibrated)
|
|
2493
|
+
* Luminance lifted (hue preserved) so each series clears 3:1 over
|
|
2494
|
+
* slate-950. Must mirror the @media block below. See semantic/colors.css.
|
|
2495
|
+
* ============================================ */
|
|
2496
|
+
|
|
2497
|
+
--color-chart-1: #f2b441; /* orange */
|
|
2498
|
+
--color-chart-2: #7fc8f0; /* sky blue */
|
|
2499
|
+
--color-chart-3: #2cc79a; /* bluish green */
|
|
2500
|
+
--color-chart-4: #f47a2e; /* vermillion */
|
|
2501
|
+
--color-chart-5: #4da3dc; /* blue */
|
|
2502
|
+
--color-chart-6: #e098c3; /* reddish purple */
|
|
2503
|
+
--color-chart-7: #f5ec6b; /* yellow */
|
|
2504
|
+
--color-chart-8: #b8bcc4; /* gray */
|
|
2505
|
+
|
|
2506
|
+
/* Data-viz categorical tone (soft wash) — see semantic/colors.css. */
|
|
2507
|
+
--color-dataviz: var(--color-fuchsia-400);
|
|
2508
|
+
--color-dataviz-bg: var(--color-fuchsia-950);
|
|
2509
|
+
--color-dataviz-dark: var(--color-fuchsia-300);
|
|
2510
|
+
|
|
2511
|
+
/* ============================================
|
|
2512
|
+
* ICON COLORS
|
|
2513
|
+
* ============================================ */
|
|
2514
|
+
|
|
2515
|
+
--color-icon-default: var(--color-slate-400);
|
|
2516
|
+
--color-icon-muted: var(--color-slate-500);
|
|
2517
|
+
--color-icon-subtle: var(--color-slate-600);
|
|
2518
|
+
--color-icon-emphasis: var(--color-slate-200);
|
|
2519
|
+
--color-icon-inverse: var(--color-slate-900);
|
|
2520
|
+
--color-icon-brand: var(--color-brand-primary-400);
|
|
2521
|
+
--color-icon-success: var(--color-emerald-400);
|
|
2522
|
+
--color-icon-warning: var(--color-amber-400);
|
|
2523
|
+
--color-icon-error: var(--color-rose-400);
|
|
2524
|
+
--color-icon-info: var(--color-sky-400);
|
|
2525
|
+
|
|
2526
|
+
/* ============================================
|
|
2527
|
+
* OVERLAY COLORS
|
|
2528
|
+
* ============================================ */
|
|
2529
|
+
|
|
2530
|
+
--color-overlay-light: rgb(255 255 255 / 0.1);
|
|
2531
|
+
--color-overlay-dark: rgb(0 0 0 / 0.6);
|
|
2532
|
+
--color-overlay-darker: rgb(0 0 0 / 0.8);
|
|
2533
|
+
--color-overlay-backdrop: rgb(0 0 0 / 0.7);
|
|
2534
|
+
|
|
2535
|
+
/* ============================================
|
|
2536
|
+
* SHADOWS
|
|
2537
|
+
* Darker, more intense shadows for dark theme
|
|
2538
|
+
* ============================================ */
|
|
2539
|
+
|
|
2540
|
+
--shadow-card: var(--shadow-dark-sm);
|
|
2541
|
+
--shadow-card-hover: var(--shadow-dark-md);
|
|
2542
|
+
--shadow-dropdown: var(--shadow-dark-lg);
|
|
2543
|
+
--shadow-modal: var(--shadow-dark-xl);
|
|
2544
|
+
--shadow-tooltip: var(--shadow-dark-md);
|
|
2545
|
+
|
|
2546
|
+
/* ============================================
|
|
2547
|
+
* SCROLLBAR
|
|
2548
|
+
* Darker scrollbar for dark theme
|
|
2549
|
+
* ============================================ */
|
|
2550
|
+
|
|
2551
|
+
--scrollbar-track-bg: var(--color-slate-900);
|
|
2552
|
+
--scrollbar-thumb-bg: var(--color-slate-600);
|
|
2553
|
+
--scrollbar-thumb-hover-bg: var(--color-slate-500);
|
|
2554
|
+
|
|
2555
|
+
/* ============================================
|
|
2556
|
+
* SKELETON
|
|
2557
|
+
* ============================================ */
|
|
2558
|
+
|
|
2559
|
+
--color-skeleton-base: var(--color-slate-700);
|
|
2560
|
+
--color-skeleton-shine: var(--color-slate-600);
|
|
2561
|
+
|
|
2562
|
+
/* ============================================
|
|
2563
|
+
* DIVIDER
|
|
2564
|
+
* ============================================ */
|
|
2565
|
+
|
|
2566
|
+
--color-divider: var(--color-slate-700);
|
|
2567
|
+
--color-divider-subtle: var(--color-slate-800);
|
|
2568
|
+
--color-divider-emphasis: var(--color-slate-600);
|
|
2569
|
+
|
|
2570
|
+
/* ============================================
|
|
2571
|
+
* CODE
|
|
2572
|
+
* ============================================ */
|
|
2573
|
+
|
|
2574
|
+
--surface-code-bg: var(--color-slate-950);
|
|
2575
|
+
--surface-code-border: var(--color-slate-800);
|
|
2576
|
+
--surface-code-color: var(--color-slate-100);
|
|
2577
|
+
|
|
2578
|
+
--surface-code-inline-bg: var(--color-slate-800);
|
|
2579
|
+
--surface-code-inline-border: var(--color-slate-700);
|
|
2580
|
+
--surface-code-inline-color: var(--color-brand-secondary-300);
|
|
2581
|
+
|
|
2582
|
+
/* ============================================
|
|
2583
|
+
* TOOLTIP
|
|
2584
|
+
* Inverted for dark theme
|
|
2585
|
+
* ============================================ */
|
|
2586
|
+
|
|
2587
|
+
--surface-tooltip-bg: var(--color-slate-100);
|
|
2588
|
+
--surface-tooltip-color: var(--color-slate-900);
|
|
2589
|
+
|
|
2590
|
+
/* ============================================
|
|
2591
|
+
* FOCUS RING
|
|
2592
|
+
* More visible on dark backgrounds
|
|
2593
|
+
* ============================================ */
|
|
2594
|
+
|
|
2595
|
+
--ring-color: var(--color-brand-primary-400);
|
|
2596
|
+
/* D7: color-mix preserves the brand-primary-400 → 30% alpha relationship
|
|
2597
|
+
* across reskins. If a consumer overrides --color-brand-primary-400, the
|
|
2598
|
+
* focus ring follows automatically. WCAG 2.4.11 (focus-visible) is
|
|
2599
|
+
* verified against the resolved alpha in test:a11y:baseline. */
|
|
2600
|
+
--ring-default: 0 0 0 var(--ring-width)
|
|
2601
|
+
color-mix(in srgb, var(--color-brand-primary-400) 30%, transparent);
|
|
2602
|
+
|
|
2603
|
+
/* ============================================
|
|
2604
|
+
* SELECTION
|
|
2605
|
+
* ============================================ */
|
|
2606
|
+
|
|
2607
|
+
::selection {
|
|
2608
|
+
background-color: var(--color-brand-primary-700);
|
|
2609
|
+
color: var(--color-white);
|
|
2610
|
+
}
|
|
2611
|
+
}
|
|
2612
|
+
|
|
2613
|
+
/* ============================================
|
|
2614
|
+
* SYSTEM PREFERENCE: DARK
|
|
2615
|
+
* Automatically apply dark theme if user prefers.
|
|
2616
|
+
*
|
|
2617
|
+
* IMPORTANT — this block is INTENTIONALLY a verbatim duplicate of the
|
|
2618
|
+
* `[data-theme="dark"], .dark` block above. CSS does not inherit
|
|
2619
|
+
* variables between selectors: a previous version listed only 5 vars
|
|
2620
|
+
* here with a comment "other variables would inherit from .dark", and
|
|
2621
|
+
* that comment was wrong — users on prefers-color-scheme: dark without
|
|
2622
|
+
* an explicit data-theme="dark" received 5 dark vars + ~110 light vars,
|
|
2623
|
+
* which produced Modal/Dialog/CommandPalette with white backgrounds in
|
|
2624
|
+
* OS dark mode (rg 1.05 contrast catastrophe — found by the dark a11y
|
|
2625
|
+
* baseline plumbing).
|
|
2626
|
+
*
|
|
2627
|
+
* Both blocks MUST stay byte-identical except for selector and
|
|
2628
|
+
* `--theme-mode`/`color-scheme` headers. `scripts/validate-dark-coverage.mjs`
|
|
2629
|
+
* runs in pre-push + CI and fails on any divergence — duplication that
|
|
2630
|
+
* cannot drift. If you change a value here, change it in the
|
|
2631
|
+
* `[data-theme="dark"]` block above (and vice versa).
|
|
2632
|
+
* ============================================ */
|
|
2633
|
+
|
|
2634
|
+
@media (prefers-color-scheme: dark) {
|
|
2635
|
+
:root:not([data-theme="light"]):not(.light) {
|
|
2636
|
+
/* Theme indicator */
|
|
2637
|
+
--theme-mode: dark;
|
|
2638
|
+
color-scheme: dark;
|
|
2639
|
+
|
|
2640
|
+
/* ============================================
|
|
2641
|
+
* BRAND COLORS
|
|
2642
|
+
* ============================================ */
|
|
2643
|
+
|
|
2644
|
+
--color-brand-primary: var(--color-brand-primary-400);
|
|
2645
|
+
--color-brand-primary-light: var(--color-brand-primary-300);
|
|
2646
|
+
--color-brand-primary-dark: var(--color-brand-primary-500);
|
|
2647
|
+
--color-brand-primary-darker: var(--color-brand-primary-600);
|
|
2648
|
+
|
|
2649
|
+
--color-brand-secondary: var(--color-brand-secondary-400);
|
|
2650
|
+
--color-brand-secondary-light: var(--color-brand-secondary-300);
|
|
2651
|
+
--color-brand-secondary-dark: var(--color-brand-secondary-500);
|
|
2652
|
+
|
|
2653
|
+
--color-brand-accent: var(--color-cyan-400);
|
|
2654
|
+
--color-brand-accent-light: var(--color-cyan-300);
|
|
2655
|
+
--color-brand-accent-dark: var(--color-cyan-500);
|
|
2656
|
+
|
|
2657
|
+
/* ============================================
|
|
2658
|
+
* FOREGROUND COLORS
|
|
2659
|
+
* ============================================ */
|
|
2660
|
+
|
|
2661
|
+
--color-fg-primary: var(--color-slate-50);
|
|
2662
|
+
--color-fg-secondary: var(--color-slate-300);
|
|
2663
|
+
--color-fg-tertiary: var(--color-slate-400);
|
|
2664
|
+
--color-fg-quaternary: var(--color-slate-500);
|
|
2665
|
+
--color-fg-placeholder: var(--color-slate-500);
|
|
2666
|
+
--color-fg-disabled: var(--color-slate-600);
|
|
2667
|
+
--color-fg-inverse: var(--color-slate-900);
|
|
2668
|
+
--color-fg-inverse-secondary: var(--color-slate-700);
|
|
2669
|
+
|
|
2670
|
+
--color-fg-link: var(--color-brand-primary-400);
|
|
2671
|
+
--color-fg-link-hover: var(--color-brand-primary-300);
|
|
2672
|
+
--color-fg-link-active: var(--color-brand-primary-200);
|
|
2673
|
+
--color-fg-link-visited: var(--color-brand-secondary-300);
|
|
2674
|
+
|
|
2675
|
+
--color-fg-brand: var(--color-brand-primary-400);
|
|
2676
|
+
--color-fg-brand-emphasis: var(--color-brand-primary-300);
|
|
2677
|
+
--color-fg-brand-secondary: var(--color-brand-secondary-400);
|
|
2678
|
+
--color-fg-brand-secondary-emphasis: var(--color-brand-secondary-300);
|
|
2679
|
+
|
|
2680
|
+
--color-fg-success: var(--color-emerald-400);
|
|
2681
|
+
--color-fg-warning: var(--color-amber-400);
|
|
2682
|
+
--color-fg-error: var(--color-rose-400);
|
|
2683
|
+
--color-fg-info: var(--color-sky-400);
|
|
2684
|
+
|
|
2685
|
+
/* On-color feedback text — constant white in both themes. */
|
|
2686
|
+
--color-fg-on-success: var(--color-white);
|
|
2687
|
+
--color-fg-on-warning: var(--color-white);
|
|
2688
|
+
--color-fg-on-error: var(--color-white);
|
|
2689
|
+
--color-fg-on-info: var(--color-white);
|
|
2690
|
+
|
|
2691
|
+
/* ============================================
|
|
2692
|
+
* SURFACE COLORS — Backgrounds
|
|
2693
|
+
* ============================================ */
|
|
2694
|
+
|
|
2695
|
+
--color-surface-canvas: var(--color-slate-950);
|
|
2696
|
+
--color-surface-subtle: var(--color-slate-900);
|
|
2697
|
+
--color-surface-muted: var(--color-slate-800);
|
|
2698
|
+
--color-surface-emphasis: var(--color-slate-700);
|
|
2699
|
+
--color-surface-strong: var(--color-slate-600);
|
|
2700
|
+
--color-surface-inverse: var(--color-slate-50);
|
|
2701
|
+
--color-surface-inverse-subtle: var(--color-slate-100);
|
|
2702
|
+
|
|
2703
|
+
--color-surface-brand-subtle: var(--color-brand-primary-950);
|
|
2704
|
+
--color-surface-brand-muted: var(--color-brand-primary-900);
|
|
2705
|
+
--color-surface-brand: var(--color-brand-primary-500);
|
|
2706
|
+
--color-surface-brand-strong: var(--color-brand-primary-400);
|
|
2707
|
+
--color-surface-brand-emphasis: var(--color-brand-primary-400);
|
|
2708
|
+
|
|
2709
|
+
--color-surface-secondary-subtle: var(--color-brand-secondary-950);
|
|
2710
|
+
--color-surface-secondary: var(--color-brand-secondary-500);
|
|
2711
|
+
|
|
2712
|
+
--color-surface-accent-subtle: var(--color-cyan-950);
|
|
2713
|
+
--color-surface-accent: var(--color-cyan-500);
|
|
2714
|
+
|
|
2715
|
+
/* ============================================
|
|
2716
|
+
* SURFACE COLORS — Elevation layers
|
|
2717
|
+
* ============================================ */
|
|
2718
|
+
|
|
2719
|
+
--color-surface-base: var(--color-slate-900);
|
|
2720
|
+
--color-surface-raised: var(--color-slate-800);
|
|
2721
|
+
--color-surface-overlay: var(--color-slate-800);
|
|
2722
|
+
--color-surface-sunken: var(--color-slate-950);
|
|
2723
|
+
--color-surface-disabled: var(--color-slate-800);
|
|
2724
|
+
|
|
2725
|
+
--surface-0-bg: var(--color-slate-950);
|
|
2726
|
+
--surface-1-bg: var(--color-slate-900);
|
|
2727
|
+
--surface-2-bg: var(--color-slate-800);
|
|
2728
|
+
--surface-3-bg: var(--color-slate-700);
|
|
2729
|
+
--surface-4-bg: var(--color-slate-800);
|
|
2730
|
+
--surface-5-bg: var(--color-slate-800);
|
|
2731
|
+
|
|
2732
|
+
/* ============================================
|
|
2733
|
+
* LINE COLORS
|
|
2734
|
+
* ============================================ */
|
|
2735
|
+
|
|
2736
|
+
--color-line-default: var(--color-slate-700);
|
|
2737
|
+
--color-line-muted: var(--color-slate-800);
|
|
2738
|
+
--color-line-subtle: var(--color-slate-800);
|
|
2739
|
+
--color-line-emphasis: var(--color-slate-600);
|
|
2740
|
+
--color-line-strong: var(--color-slate-500);
|
|
2741
|
+
--color-line-inverse: var(--color-slate-200);
|
|
2742
|
+
--color-line-focus: var(--color-brand-primary-400);
|
|
2743
|
+
--color-line-focus-ring: var(--color-brand-primary-400);
|
|
2744
|
+
|
|
2745
|
+
--color-line-brand: var(--color-brand-primary-400);
|
|
2746
|
+
--color-line-secondary: var(--color-brand-secondary-400);
|
|
2747
|
+
--color-line-accent: var(--color-cyan-400);
|
|
2748
|
+
|
|
2749
|
+
/* ============================================
|
|
2750
|
+
* SURFACE COLORS — Interactive states
|
|
2751
|
+
* ============================================ */
|
|
2752
|
+
|
|
2753
|
+
--color-surface-hover: var(--color-slate-800);
|
|
2754
|
+
--color-surface-hover-subtle: var(--color-slate-900);
|
|
2755
|
+
--color-surface-active: var(--color-slate-700);
|
|
2756
|
+
--color-surface-selected: var(--color-brand-primary-950);
|
|
2757
|
+
--color-surface-selected-subtle: var(--color-brand-primary-900);
|
|
2758
|
+
--color-surface-disabled-subtle: var(--color-slate-900);
|
|
2759
|
+
--color-surface-focus: var(--color-brand-primary-900);
|
|
2760
|
+
|
|
2761
|
+
/* ============================================
|
|
2762
|
+
* FEEDBACK COLORS
|
|
2763
|
+
* ============================================ */
|
|
2764
|
+
|
|
2765
|
+
--color-success: var(--color-emerald-400);
|
|
2766
|
+
--color-success-light: var(--color-emerald-300);
|
|
2767
|
+
--color-success-dark: var(--color-emerald-500);
|
|
2768
|
+
--color-success-bg: var(--color-emerald-950);
|
|
2769
|
+
--color-success-bg-emphasis: var(--color-emerald-900);
|
|
2770
|
+
--color-success-border: var(--color-emerald-800);
|
|
2771
|
+
--color-success-border-emphasis: var(--color-emerald-400);
|
|
2772
|
+
|
|
2773
|
+
--color-warning: var(--color-amber-400);
|
|
2774
|
+
--color-warning-light: var(--color-amber-300);
|
|
2775
|
+
--color-warning-dark: var(--color-amber-500);
|
|
2776
|
+
--color-warning-bg: var(--color-amber-950);
|
|
2777
|
+
--color-warning-bg-emphasis: var(--color-amber-900);
|
|
2778
|
+
--color-warning-border: var(--color-amber-800);
|
|
2779
|
+
--color-warning-border-emphasis: var(--color-amber-400);
|
|
2780
|
+
|
|
2781
|
+
--color-error: var(--color-rose-400);
|
|
2782
|
+
--color-error-light: var(--color-rose-300);
|
|
2783
|
+
--color-error-dark: var(--color-rose-400);
|
|
2784
|
+
--color-error-bg: var(--color-rose-950);
|
|
2785
|
+
--color-error-bg-emphasis: var(--color-rose-900);
|
|
2786
|
+
--color-error-border: var(--color-rose-800);
|
|
2787
|
+
--color-error-border-emphasis: var(--color-rose-400);
|
|
2788
|
+
|
|
2789
|
+
--color-info: var(--color-sky-400);
|
|
2790
|
+
--color-info-light: var(--color-sky-300);
|
|
2791
|
+
--color-info-dark: var(--color-sky-500);
|
|
2792
|
+
--color-info-bg: var(--color-sky-950);
|
|
2793
|
+
--color-info-bg-emphasis: var(--color-sky-900);
|
|
2794
|
+
--color-info-border: var(--color-sky-800);
|
|
2795
|
+
--color-info-border-emphasis: var(--color-sky-400);
|
|
2796
|
+
|
|
2797
|
+
--color-status-neutral: var(--color-slate-400);
|
|
2798
|
+
|
|
2799
|
+
/* Solid (filled) status surfaces — identical to light by design. */
|
|
2800
|
+
--color-success-solid: var(--color-emerald-700);
|
|
2801
|
+
--color-warning-solid: var(--color-amber-700);
|
|
2802
|
+
--color-error-solid: var(--color-rose-700);
|
|
2803
|
+
--color-info-solid: var(--color-sky-700);
|
|
2804
|
+
|
|
2805
|
+
/* ============================================
|
|
2806
|
+
* DATA-VISUALIZATION CATEGORICAL PALETTE (Okabe-Ito, dark-calibrated)
|
|
2807
|
+
* ============================================ */
|
|
2808
|
+
|
|
2809
|
+
--color-chart-1: #f2b441; /* orange */
|
|
2810
|
+
--color-chart-2: #7fc8f0; /* sky blue */
|
|
2811
|
+
--color-chart-3: #2cc79a; /* bluish green */
|
|
2812
|
+
--color-chart-4: #f47a2e; /* vermillion */
|
|
2813
|
+
--color-chart-5: #4da3dc; /* blue */
|
|
2814
|
+
--color-chart-6: #e098c3; /* reddish purple */
|
|
2815
|
+
--color-chart-7: #f5ec6b; /* yellow */
|
|
2816
|
+
--color-chart-8: #b8bcc4; /* gray */
|
|
2817
|
+
|
|
2818
|
+
/* Data-viz categorical tone (soft wash) — see semantic/colors.css. */
|
|
2819
|
+
--color-dataviz: var(--color-fuchsia-400);
|
|
2820
|
+
--color-dataviz-bg: var(--color-fuchsia-950);
|
|
2821
|
+
--color-dataviz-dark: var(--color-fuchsia-300);
|
|
2822
|
+
|
|
2823
|
+
/* ============================================
|
|
2824
|
+
* ICON COLORS
|
|
2825
|
+
* ============================================ */
|
|
2826
|
+
|
|
2827
|
+
--color-icon-default: var(--color-slate-400);
|
|
2828
|
+
--color-icon-muted: var(--color-slate-500);
|
|
2829
|
+
--color-icon-subtle: var(--color-slate-600);
|
|
2830
|
+
--color-icon-emphasis: var(--color-slate-200);
|
|
2831
|
+
--color-icon-inverse: var(--color-slate-900);
|
|
2832
|
+
--color-icon-brand: var(--color-brand-primary-400);
|
|
2833
|
+
--color-icon-success: var(--color-emerald-400);
|
|
2834
|
+
--color-icon-warning: var(--color-amber-400);
|
|
2835
|
+
--color-icon-error: var(--color-rose-400);
|
|
2836
|
+
--color-icon-info: var(--color-sky-400);
|
|
2837
|
+
|
|
2838
|
+
/* ============================================
|
|
2839
|
+
* OVERLAY COLORS
|
|
2840
|
+
* ============================================ */
|
|
2841
|
+
|
|
2842
|
+
--color-overlay-light: rgb(255 255 255 / 0.1);
|
|
2843
|
+
--color-overlay-dark: rgb(0 0 0 / 0.6);
|
|
2844
|
+
--color-overlay-darker: rgb(0 0 0 / 0.8);
|
|
2845
|
+
--color-overlay-backdrop: rgb(0 0 0 / 0.7);
|
|
2846
|
+
|
|
2847
|
+
/* ============================================
|
|
2848
|
+
* SHADOWS
|
|
2849
|
+
* ============================================ */
|
|
2850
|
+
|
|
2851
|
+
--shadow-card: var(--shadow-dark-sm);
|
|
2852
|
+
--shadow-card-hover: var(--shadow-dark-md);
|
|
2853
|
+
--shadow-dropdown: var(--shadow-dark-lg);
|
|
2854
|
+
--shadow-modal: var(--shadow-dark-xl);
|
|
2855
|
+
--shadow-tooltip: var(--shadow-dark-md);
|
|
2856
|
+
|
|
2857
|
+
/* ============================================
|
|
2858
|
+
* SCROLLBAR
|
|
2859
|
+
* ============================================ */
|
|
2860
|
+
|
|
2861
|
+
--scrollbar-track-bg: var(--color-slate-900);
|
|
2862
|
+
--scrollbar-thumb-bg: var(--color-slate-600);
|
|
2863
|
+
--scrollbar-thumb-hover-bg: var(--color-slate-500);
|
|
2864
|
+
|
|
2865
|
+
/* ============================================
|
|
2866
|
+
* SKELETON
|
|
2867
|
+
* ============================================ */
|
|
2868
|
+
|
|
2869
|
+
--color-skeleton-base: var(--color-slate-700);
|
|
2870
|
+
--color-skeleton-shine: var(--color-slate-600);
|
|
2871
|
+
|
|
2872
|
+
/* ============================================
|
|
2873
|
+
* DIVIDER
|
|
2874
|
+
* ============================================ */
|
|
2875
|
+
|
|
2876
|
+
--color-divider: var(--color-slate-700);
|
|
2877
|
+
--color-divider-subtle: var(--color-slate-800);
|
|
2878
|
+
--color-divider-emphasis: var(--color-slate-600);
|
|
2879
|
+
|
|
2880
|
+
/* ============================================
|
|
2881
|
+
* CODE
|
|
2882
|
+
* ============================================ */
|
|
2883
|
+
|
|
2884
|
+
--surface-code-bg: var(--color-slate-950);
|
|
2885
|
+
--surface-code-border: var(--color-slate-800);
|
|
2886
|
+
--surface-code-color: var(--color-slate-100);
|
|
2887
|
+
|
|
2888
|
+
--surface-code-inline-bg: var(--color-slate-800);
|
|
2889
|
+
--surface-code-inline-border: var(--color-slate-700);
|
|
2890
|
+
--surface-code-inline-color: var(--color-brand-secondary-300);
|
|
2891
|
+
|
|
2892
|
+
/* ============================================
|
|
2893
|
+
* TOOLTIP
|
|
2894
|
+
* ============================================ */
|
|
2895
|
+
|
|
2896
|
+
--surface-tooltip-bg: var(--color-slate-100);
|
|
2897
|
+
--surface-tooltip-color: var(--color-slate-900);
|
|
2898
|
+
|
|
2899
|
+
/* ============================================
|
|
2900
|
+
* FOCUS RING
|
|
2901
|
+
* ============================================ */
|
|
2902
|
+
|
|
2903
|
+
--ring-color: var(--color-brand-primary-400);
|
|
2904
|
+
/* D7: color-mix preserves the brand-primary-400 → 30% alpha relationship
|
|
2905
|
+
* across reskins. If a consumer overrides --color-brand-primary-400, the
|
|
2906
|
+
* focus ring follows automatically. WCAG 2.4.11 (focus-visible) is
|
|
2907
|
+
* verified against the resolved alpha in test:a11y:baseline. */
|
|
2908
|
+
--ring-default: 0 0 0 var(--ring-width)
|
|
2909
|
+
color-mix(in srgb, var(--color-brand-primary-400) 30%, transparent);
|
|
2910
|
+
}
|
|
2911
|
+
|
|
2912
|
+
/* ::selection inside @media — sibling to the :root rule above so
|
|
2913
|
+
* older browsers without CSS nesting still parse cleanly. */
|
|
2914
|
+
:root:not([data-theme="light"]):not(.light) ::selection {
|
|
2915
|
+
background-color: var(--color-brand-primary-700);
|
|
2916
|
+
color: var(--color-white);
|
|
2917
|
+
}
|
|
2918
|
+
}
|
|
2919
|
+
|
|
2920
|
+
|