@wildmason/aegis 1.7.6 → 1.9.1

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/themes.css CHANGED
@@ -1,996 +1,996 @@
1
- /* ================================================================
2
- Aegis Design System — themes.css
3
- Wildmason shared theme tokens for Works, Helm, Slate, Mortar.
4
-
5
- WCAG AA / Section 508 Compliance
6
- All token pairs in this file meet WCAG 2.1 AA requirements:
7
- - Normal text (< 18pt / < 14pt bold): 4.5:1 minimum
8
- - Large text and UI components: 3.0:1 minimum
9
- (WCAG 1.4.11 Non-text Contrast — applies to --wm-border-input)
10
-
11
- Placeholder text (--wm-text-placeholder) is intentionally lower contrast.
12
- WCAG 2.2 Understanding 1.4.3 explicitly exempts placeholder text from
13
- contrast requirements. Inputs MUST have a visible label; placeholder is
14
- supplementary hint text only and must never serve as the sole label.
15
-
16
- All tokens use the --wm- prefix. Apps should alias to local
17
- names during migration, e.g.:
18
- --primary-color: var(--wm-color-accent);
19
-
20
- Token rename guide (Works → Aegis):
21
- --bg-app → --wm-bg-base
22
- --bg-header → --wm-bg-raised
23
- --bg-card → --wm-bg-float
24
- --bg-column → --wm-bg-sunken
25
- --bg-hover → --wm-bg-hover
26
- --text-primary → --wm-text-primary
27
- --text-secondary → --wm-text-secondary
28
- --text-muted → --wm-text-muted
29
- --border-color → --wm-border
30
- --border-subtle → --wm-border-subtle
31
- --border-hover → --wm-border-hover
32
- --primary-color → --wm-color-accent
33
- --primary-hover → --wm-color-accent-hover
34
- --success-color → --wm-color-success
35
- --warning-color → --wm-color-warning
36
- --danger-color → --wm-color-danger
37
- --shadow-sm/md/lg → --wm-shadow-sm/md/lg
38
- --radius-* → --wm-radius-*
39
- --priority-* → --wm-priority-*
40
- --color-task/bug/… → --wm-color-task/bug/…
41
- --btn-*-text → --wm-color-*-text
42
- ================================================================ */
43
-
44
- /* ----------------------------------------------------------------
45
- Base constants — theme-independent
46
- ---------------------------------------------------------------- */
47
- :root {
48
- /* Border radius */
49
- --wm-radius-xs: 4px;
50
- --wm-radius-sm: 6px;
51
- --wm-radius-md: 8px;
52
- --wm-radius-lg: 12px;
53
- --wm-radius-full: 9999px;
54
-
55
- /* Motion */
56
- --wm-transition-fast: 150ms ease;
57
- --wm-transition-base: 200ms ease;
58
- --wm-transition-slow: 300ms ease;
59
-
60
- /* Typography */
61
- --wm-font-sans: system-ui, -apple-system, 'Segoe UI', sans-serif;
62
- --wm-font-mono:
63
- 'Cascadia Code', 'Fira Code', Consolas, 'Courier New', monospace;
64
-
65
- /* Fixed semantic colors (not theme-dependent) */
66
- --wm-color-critical: #7c3aed;
67
-
68
- /* Priority opacity — overridden to 20% in dark color-scheme themes */
69
- --wm-priority-alpha: 15%;
70
-
71
- /* Priority tokens — computed from semantic colors at current theme scope */
72
- --wm-priority-critical-bg: color-mix(
73
- in srgb,
74
- var(--wm-color-critical) var(--wm-priority-alpha),
75
- transparent
76
- );
77
- --wm-priority-critical-text: var(--wm-color-critical);
78
- --wm-priority-high-bg: color-mix(
79
- in srgb,
80
- var(--wm-color-danger) var(--wm-priority-alpha),
81
- transparent
82
- );
83
- --wm-priority-high-text: var(--wm-color-danger);
84
- --wm-priority-medium-bg: color-mix(
85
- in srgb,
86
- var(--wm-color-warning) var(--wm-priority-alpha),
87
- transparent
88
- );
89
- --wm-priority-medium-text: var(--wm-color-warning);
90
- --wm-priority-low-bg: color-mix(
91
- in srgb,
92
- var(--wm-color-success) var(--wm-priority-alpha),
93
- transparent
94
- );
95
- --wm-priority-low-text: var(--wm-color-success);
96
-
97
- /* Modal backdrop — opacity set per-theme via --wm-backdrop-opacity */
98
- --wm-modal-backdrop: rgba(0, 0, 0, var(--wm-backdrop-opacity));
99
-
100
- /* Derived tokens — computed at scope, valid for all themes */
101
- --wm-bg-active: color-mix(in srgb, var(--wm-color-accent) 10%, transparent);
102
- --wm-color-danger-bg: color-mix(
103
- in srgb,
104
- var(--wm-color-danger) 8%,
105
- transparent
106
- );
107
- --wm-color-danger-border: color-mix(
108
- in srgb,
109
- var(--wm-color-danger) 25%,
110
- transparent
111
- );
112
- --wm-color-success-bg: color-mix(
113
- in srgb,
114
- var(--wm-color-success) 8%,
115
- transparent
116
- );
117
- --wm-color-success-border: color-mix(
118
- in srgb,
119
- var(--wm-color-success) 25%,
120
- transparent
121
- );
122
- --wm-color-warning-bg: color-mix(
123
- in srgb,
124
- var(--wm-color-warning) 8%,
125
- transparent
126
- );
127
- --wm-color-warning-border: color-mix(
128
- in srgb,
129
- var(--wm-color-warning) 25%,
130
- transparent
131
- );
132
-
133
- /* "Readable" accent — used in `color:` (text) contexts where WCAG AA
134
- contrast (4.5:1) must be met against bg-base / bg-raised / bg-float.
135
- Defaults to the theme's --wm-color-accent so most themes need no
136
- override; themes whose accent is too low-contrast for body text
137
- (currently Stone & Moss) override this to a lighter sibling while
138
- keeping --wm-color-accent itself for fills, focus rings, and other
139
- non-text usages where 3:1 (WCAG 1.4.11) is sufficient. Falls back
140
- to --wm-color-accent at use-time via CSS variable evaluation. */
141
- --wm-color-accent-readable: var(--wm-color-accent);
142
- }
143
-
144
- /* ================================================================
145
- Warm Light (Default)
146
- ================================================================ */
147
- :root,
148
- [data-theme='warm-light'] {
149
- color-scheme: light;
150
-
151
- /* Surfaces */
152
- --wm-bg-base: #ececea;
153
- --wm-bg-raised: #e1e1de;
154
- --wm-bg-float: #d2d2ce;
155
- --wm-bg-sunken: #f9f9f8;
156
- --wm-bg-hover: #f4f4f3;
157
- --wm-bg-foreground: #c4c4c0;
158
-
159
- /* Text */
160
- --wm-text-primary: #002b36;
161
- --wm-text-secondary: #073642;
162
- --wm-text-muted: #474f57;
163
- --wm-text-placeholder: #8d9fa6;
164
-
165
- /* Borders */
166
- --wm-border: #eee8d5;
167
- --wm-border-subtle: #d6cdb7;
168
- --wm-border-hover: #268bd2;
169
- --wm-border-input: #7a7460;
170
-
171
- /* Accent */
172
- --wm-color-accent: #105987;
173
- --wm-color-accent-hover: #2aa198;
174
- --wm-color-accent-text: #ffffff;
175
-
176
- /* Semantic */
177
- --wm-color-success: #485600;
178
- --wm-color-warning: #705400;
179
- --wm-color-danger: #bd2c29;
180
-
181
- /* Item type colors (Works-specific) */
182
- --wm-color-task: #1b6ca5;
183
- --wm-color-bug: #bd2c29;
184
- --wm-color-story: #586900;
185
- --wm-color-epic: #4e53a2;
186
- --wm-color-initiative: #9b3a10;
187
- --wm-color-completed: #1e7a71;
188
- --wm-color-epic-text: #ffffff;
189
- --wm-color-initiative-text: #ffffff;
190
-
191
- /* Shadows */
192
- --wm-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.08);
193
- --wm-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.12);
194
- --wm-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.12);
195
-
196
- /* Overlay */
197
- --wm-backdrop-opacity: 0.35;
198
-
199
- /* Syntax highlighting */
200
- --wm-syntax-keyword: #859900;
201
- --wm-syntax-string: #2aa198;
202
- --wm-syntax-comment: #93a1a1;
203
- --wm-syntax-number: #d33682;
204
- --wm-syntax-function: #268bd2;
205
- --wm-syntax-type: #b58900;
206
- --wm-syntax-variable: #cb4b16;
207
- --wm-syntax-attr: #b58900;
208
- --wm-syntax-builtin: #6c71c4;
209
- }
210
-
211
- /* ================================================================
212
- Neutral Light
213
- ================================================================ */
214
- [data-theme='neutral-light'] {
215
- color-scheme: light;
216
-
217
- /* Surfaces */
218
- --wm-bg-base: #ebebeb;
219
- --wm-bg-raised: #e0e0e0;
220
- --wm-bg-float: #d0d0d0;
221
- --wm-bg-sunken: #f8f8f8;
222
- --wm-bg-hover: #f3f3f3;
223
- --wm-bg-foreground: #bababa;
224
-
225
- /* Text */
226
- --wm-text-primary: #111111;
227
- --wm-text-secondary: #333333;
228
- --wm-text-muted: #555555;
229
- --wm-text-placeholder: #999999;
230
-
231
- /* Borders */
232
- --wm-border: #cccccc;
233
- --wm-border-subtle: #dddddd;
234
- --wm-border-hover: #888888;
235
- --wm-border-input: #7d7d7d;
236
-
237
- /* Accent */
238
- --wm-color-accent: #1b4a9e;
239
- --wm-color-accent-hover: #3061af;
240
- --wm-color-accent-text: #ffffff;
241
-
242
- /* Semantic */
243
- --wm-color-success: #085a50;
244
- --wm-color-warning: #8c4000;
245
- --wm-color-danger: #dc2626;
246
-
247
- /* Item type colors */
248
- --wm-color-task: #2563eb;
249
- --wm-color-bug: #dc2626;
250
- --wm-color-story: #059669;
251
- --wm-color-epic: #7c3aed;
252
- --wm-color-initiative: #c2410c;
253
- --wm-color-completed: #6366f1;
254
- --wm-color-epic-text: #ffffff;
255
- --wm-color-initiative-text: #ffffff;
256
-
257
- /* Shadows */
258
- --wm-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.06);
259
- --wm-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
260
- --wm-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.12);
261
-
262
- /* Overlay */
263
- --wm-backdrop-opacity: 0.35;
264
-
265
- /* Syntax highlighting */
266
- --wm-syntax-keyword: #a626a4;
267
- --wm-syntax-string: #50a14f;
268
- --wm-syntax-comment: #a0a1a7;
269
- --wm-syntax-number: #986801;
270
- --wm-syntax-function: #4078f2;
271
- --wm-syntax-type: #c18401;
272
- --wm-syntax-variable: #e45649;
273
- --wm-syntax-attr: #986801;
274
- --wm-syntax-builtin: #0184bc;
275
- }
276
-
277
- /* ================================================================
278
- Arctic Night
279
- ================================================================ */
280
- [data-theme='arctic-night'] {
281
- color-scheme: dark;
282
- --wm-priority-alpha: 20%;
283
- --wm-priority-critical-text: color-mix(
284
- in srgb,
285
- var(--wm-color-critical) 85%,
286
- white
287
- );
288
-
289
- /* Surfaces */
290
- --wm-bg-sunken: #242933;
291
- --wm-bg-base: #2e3440;
292
- --wm-bg-raised: #3b4252;
293
- --wm-bg-float: #434c5e;
294
- --wm-bg-hover: #4c566a;
295
- --wm-bg-foreground: #535e6e;
296
-
297
- /* Text */
298
- --wm-text-primary: #eceff4;
299
- --wm-text-secondary: #e5e9f0;
300
- --wm-text-muted: #d8dee9;
301
- --wm-text-placeholder: #adb9cb;
302
-
303
- /* Borders */
304
- --wm-border: #4c566a;
305
- --wm-border-subtle: #434c5e;
306
- --wm-border-hover: #88c0d0;
307
- --wm-border-input: #8e9aa9;
308
-
309
- /* Accent — light teal requires dark text */
310
- --wm-color-accent: #8fc4d3;
311
- --wm-color-accent-hover: #81a1c1;
312
- --wm-color-accent-text: #2e3440;
313
-
314
- /* Semantic */
315
- --wm-color-success: #b5cf9a;
316
- --wm-color-warning: #ebcb8b;
317
- --wm-color-danger: #bf616a;
318
-
319
- /* Item type colors */
320
- --wm-color-task: #88c0d0;
321
- --wm-color-bug: #bf616a;
322
- --wm-color-story: #a3be8c;
323
- --wm-color-epic: #b48ead;
324
- --wm-color-initiative: #ebcb8b;
325
- --wm-color-completed: #81a1c1;
326
- --wm-color-epic-text: #2e3440;
327
- --wm-color-initiative-text: #2e3440;
328
-
329
- /* Shadows */
330
- --wm-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.2);
331
- --wm-shadow-md: 0 4px 6px rgba(0, 0, 0, 0.3);
332
- --wm-shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.4);
333
-
334
- /* Overlay */
335
- --wm-backdrop-opacity: 0.5;
336
-
337
- /* Syntax highlighting */
338
- --wm-syntax-keyword: #81a1c1;
339
- --wm-syntax-string: #a3be8c;
340
- --wm-syntax-comment: #616e88;
341
- --wm-syntax-number: #b48ead;
342
- --wm-syntax-function: #88c0d0;
343
- --wm-syntax-type: #8fbcbb;
344
- --wm-syntax-variable: #d08770;
345
- --wm-syntax-attr: #8fbcbb;
346
- --wm-syntax-builtin: #81a1c1;
347
- }
348
-
349
- /* ================================================================
350
- Vampire's Kiss
351
- ================================================================ */
352
- [data-theme='vampires-kiss'] {
353
- color-scheme: dark;
354
- --wm-priority-alpha: 20%;
355
- --wm-priority-critical-text: color-mix(
356
- in srgb,
357
- var(--wm-color-critical) 85%,
358
- white
359
- );
360
-
361
- /* Surfaces */
362
- --wm-bg-sunken: #16171e;
363
- --wm-bg-base: #21222c;
364
- --wm-bg-raised: #282a36;
365
- --wm-bg-float: #44475a;
366
- --wm-bg-hover: #6272a4;
367
- --wm-bg-foreground: #525568;
368
-
369
- /* Text */
370
- --wm-text-primary: #f8f8f2;
371
- --wm-text-secondary: #d6acff;
372
- --wm-text-muted: #c5cedd;
373
- --wm-text-placeholder: #8b93a8;
374
-
375
- /* Borders */
376
- --wm-border: #6272a4;
377
- --wm-border-subtle: #44475a;
378
- --wm-border-hover: #ff79c6;
379
- --wm-border-input: #8694b1;
380
-
381
- /* Accent — slightly lighter than canonical purple for card contrast */
382
- --wm-color-accent: #c9a7fa;
383
- --wm-color-accent-hover: #ff79c6;
384
- --wm-color-accent-text: #282a36;
385
-
386
- /* Semantic */
387
- --wm-color-success: #50fa7b;
388
- --wm-color-warning: #f1fa8c;
389
- --wm-color-danger: #ff5555;
390
-
391
- /* Item type colors */
392
- --wm-color-task: #8be9fd;
393
- --wm-color-bug: #ff5555;
394
- --wm-color-story: #50fa7b;
395
- --wm-color-epic: #bd93f9;
396
- --wm-color-initiative: #ffb86c;
397
- --wm-color-completed: #bd93f9;
398
- --wm-color-epic-text: #282a36;
399
- --wm-color-initiative-text: #282a36;
400
-
401
- /* Shadows */
402
- --wm-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.4);
403
- --wm-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.5);
404
- --wm-shadow-lg: 0 10px 30px rgba(0, 0, 0, 0.6);
405
-
406
- /* Overlay */
407
- --wm-backdrop-opacity: 0.5;
408
-
409
- /* Syntax highlighting */
410
- --wm-syntax-keyword: #ff79c6;
411
- --wm-syntax-string: #f1fa8c;
412
- --wm-syntax-comment: #6272a4;
413
- --wm-syntax-number: #bd93f9;
414
- --wm-syntax-function: #50fa7b;
415
- --wm-syntax-type: #8be9fd;
416
- --wm-syntax-variable: #ffb86c;
417
- --wm-syntax-attr: #50fa7b;
418
- --wm-syntax-builtin: #8be9fd;
419
- }
420
-
421
- /* ================================================================
422
- Twilight Peach
423
- ================================================================ */
424
- [data-theme='twilight-peach'] {
425
- color-scheme: dark;
426
- --wm-priority-alpha: 20%;
427
- --wm-priority-critical-text: color-mix(
428
- in srgb,
429
- var(--wm-color-critical) 85%,
430
- white
431
- );
432
-
433
- /* Surfaces */
434
- --wm-bg-sunken: #020617;
435
- --wm-bg-base: #171827;
436
- --wm-bg-raised: #201e37;
437
- --wm-bg-float: #292a48;
438
- --wm-bg-hover: #32334e;
439
- --wm-bg-foreground: #3c3d5e;
440
-
441
- /* Text */
442
- --wm-text-primary: #eeedf8;
443
- --wm-text-secondary: #a9a8c0;
444
- --wm-text-muted: #b89f91;
445
- --wm-text-placeholder: #4a4962;
446
-
447
- /* Borders */
448
- --wm-border: #565888;
449
- --wm-border-subtle: #353758;
450
- --wm-border-hover: #6468a0;
451
- --wm-border-input: #797ba0;
452
-
453
- /* Accent — warm peach */
454
- --wm-color-accent: #f5986a;
455
- --wm-color-accent-hover: #f08458;
456
- --wm-color-accent-text: #1c1d2e;
457
-
458
- /* Semantic */
459
- --wm-color-success: #5cbfa0;
460
- --wm-color-warning: #f0b464;
461
- --wm-color-danger: #f07878;
462
-
463
- /* Item type colors */
464
- --wm-color-task: #70a8f0;
465
- --wm-color-bug: #f07878;
466
- --wm-color-story: #5cbfa0;
467
- --wm-color-epic: #b090e8;
468
- --wm-color-initiative: #f0b464;
469
- --wm-color-completed: #9090d8;
470
- --wm-color-epic-text: #ffffff;
471
- --wm-color-initiative-text: #1c1d2e;
472
-
473
- /* Shadows */
474
- --wm-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.5);
475
- --wm-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.6);
476
- --wm-shadow-lg: 0 10px 30px rgba(0, 0, 0, 0.7);
477
-
478
- /* Overlay */
479
- --wm-backdrop-opacity: 0.55;
480
-
481
- /* Syntax highlighting */
482
- --wm-syntax-keyword: #c78ed4;
483
- --wm-syntax-string: #98c87a;
484
- --wm-syntax-comment: #6b6a82;
485
- --wm-syntax-number: #f0b464;
486
- --wm-syntax-function: #80c0e8;
487
- --wm-syntax-type: #e5c480;
488
- --wm-syntax-variable: #f5986a;
489
- --wm-syntax-attr: #d4a870;
490
- --wm-syntax-builtin: #70c0c8;
491
- }
492
-
493
- /* ================================================================
494
- Thistle & Mocha
495
- ================================================================ */
496
- [data-theme='thistle-mocha'] {
497
- color-scheme: dark;
498
- --wm-priority-alpha: 20%;
499
- --wm-priority-critical-text: color-mix(
500
- in srgb,
501
- var(--wm-color-critical) 85%,
502
- white
503
- );
504
-
505
- /* Surfaces — warm near-black mocha family */
506
- --wm-bg-base: #221918;
507
- --wm-bg-raised: #382e2c;
508
- --wm-bg-float: #403635;
509
- --wm-bg-sunken: #151310;
510
- --wm-bg-hover: #2c2822;
511
- --wm-bg-foreground: #514240;
512
-
513
- /* Text — warm cream */
514
- --wm-text-primary: #ede9e1;
515
- --wm-text-secondary: #c5bcae;
516
- --wm-text-muted: #a3a8aa;
517
- --wm-text-placeholder: #4a4540;
518
-
519
- /* Borders */
520
- --wm-border: #2e2820;
521
- --wm-border-subtle: #241e18;
522
- --wm-border-hover: #504840;
523
- --wm-border-input: #8a7670;
524
-
525
- /* Accent — thistle (muted lavender) */
526
- --wm-color-accent: #c4a8d8;
527
- --wm-color-accent-hover: #9e7abf;
528
- --wm-color-accent-text: #1a1715;
529
-
530
- /* Semantic */
531
- --wm-color-success: #7ac4a0;
532
- --wm-color-warning: #d4a85a;
533
- --wm-color-danger: #e07878;
534
-
535
- /* Item type colors */
536
- --wm-color-task: #80a8e0;
537
- --wm-color-bug: #e07878;
538
- --wm-color-story: #7ac4a0;
539
- --wm-color-epic: #b090d8;
540
- --wm-color-initiative: #d4a85a;
541
- --wm-color-completed: #9890c8;
542
- --wm-color-epic-text: #1a1715;
543
- --wm-color-initiative-text: #1a1715;
544
-
545
- /* Shadows */
546
- --wm-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.6);
547
- --wm-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.7);
548
- --wm-shadow-lg: 0 10px 30px rgba(0, 0, 0, 0.8);
549
-
550
- /* Overlay */
551
- --wm-backdrop-opacity: 0.6;
552
-
553
- /* Syntax highlighting */
554
- --wm-syntax-keyword: #d8a8c4;
555
- --wm-syntax-string: #a0c890;
556
- --wm-syntax-comment: #6e6660;
557
- --wm-syntax-number: #d4a85a;
558
- --wm-syntax-function: #90b8d8;
559
- --wm-syntax-type: #d8c890;
560
- --wm-syntax-variable: #c4a8d8;
561
- --wm-syntax-attr: #c8a870;
562
- --wm-syntax-builtin: #80c4b8;
563
- }
564
-
565
- /* ================================================================
566
- Solarized Precision
567
- ================================================================ */
568
- [data-theme='solarized-precision'] {
569
- color-scheme: light;
570
-
571
- /* Surfaces — warm cream base, distinct tan surface, clean white cards */
572
- --wm-bg-base: #ede7d2;
573
- --wm-bg-raised: #e2d8bc;
574
- --wm-bg-float: #d4cba8;
575
- --wm-bg-sunken: #f1e8dd;
576
- --wm-bg-hover: #ede5cc;
577
- --wm-bg-foreground: #c6be96;
578
-
579
- /* Text — solarized blue-gray family */
580
- --wm-text-primary: #2c3e48;
581
- --wm-text-secondary: #3e545f;
582
- --wm-text-muted: #455868;
583
- --wm-text-placeholder: #a8b8be;
584
-
585
- /* Borders */
586
- --wm-border: #cec6aa;
587
- --wm-border-subtle: #dad4bc;
588
- --wm-border-hover: #8c9ea8;
589
- --wm-border-input: #688090;
590
-
591
- /* Accent — precision teal-blue */
592
- --wm-color-accent: #185c78;
593
- --wm-color-accent-hover: #1e6e96;
594
- --wm-color-accent-text: #ffffff;
595
-
596
- /* Semantic */
597
- --wm-color-success: #006036;
598
- --wm-color-warning: #6b4500;
599
- --wm-color-danger: #c4302c;
600
-
601
- /* Item type colors */
602
- --wm-color-task: #1e6ea8;
603
- --wm-color-bug: #c4302c;
604
- --wm-color-story: #218a5c;
605
- --wm-color-epic: #6a38aa;
606
- --wm-color-initiative: #9a5800;
607
- --wm-color-completed: #4a6ea8;
608
- --wm-color-epic-text: #ffffff;
609
- --wm-color-initiative-text: #ffffff;
610
-
611
- /* Shadows — light theme, warm-tinted */
612
- --wm-shadow-sm: 0 1px 2px rgba(44, 62, 72, 0.08);
613
- --wm-shadow-md: 0 4px 8px rgba(44, 62, 72, 0.12);
614
- --wm-shadow-lg: 0 10px 20px rgba(44, 62, 72, 0.15);
615
-
616
- /* Overlay */
617
- --wm-backdrop-opacity: 0.35;
618
-
619
- /* Syntax — solarized light palette */
620
- --wm-syntax-keyword: #859900;
621
- --wm-syntax-string: #2aa198;
622
- --wm-syntax-comment: #93a1a1;
623
- --wm-syntax-number: #d48600;
624
- --wm-syntax-function: #268bd2;
625
- --wm-syntax-type: #b58900;
626
- --wm-syntax-variable: #cb4b16;
627
- --wm-syntax-attr: #b58900;
628
- --wm-syntax-builtin: #2aa198;
629
- }
630
-
631
- /* ================================================================
632
- Posh Sandalwood
633
- ================================================================ */
634
- [data-theme='posh-sandalwood'] {
635
- color-scheme: dark;
636
- --wm-priority-alpha: 20%;
637
- --wm-priority-critical-text: color-mix(
638
- in srgb,
639
- var(--wm-color-critical) 85%,
640
- white
641
- );
642
-
643
- /* Surfaces — warm olive-brown, sunken=darkest, float=lightest */
644
- --wm-bg-sunken: #1c1c15;
645
- --wm-bg-base: #27271f;
646
- --wm-bg-raised: #333028;
647
- --wm-bg-float: #403c30;
648
- --wm-bg-hover: #4a4538;
649
- --wm-bg-foreground: #524e3e;
650
-
651
- /* Text — sandalwood cream palette */
652
- --wm-text-primary: #fdf0e0;
653
- --wm-text-secondary: #c5b59b;
654
- --wm-text-muted: #b5bab3;
655
- --wm-text-placeholder: #5a5040;
656
-
657
- /* Borders */
658
- --wm-border: #3a3828;
659
- --wm-border-subtle: #2e2c22;
660
- --wm-border-hover: #f92672;
661
- --wm-border-input: #877567;
662
-
663
- /* Accent — Monokai hot pink */
664
- --wm-color-accent: #f92672;
665
- --wm-color-accent-hover: #fd971f;
666
- --wm-color-accent-text: #1c1c15;
667
- /* Lighter pink sibling for "accent as text" contexts (active nav
668
- items, tab labels, link-style buttons). #f92672 fails WCAG AA
669
- 4.5:1 on bg-float (2.9:1) and on the accent-tinted settings-nav
670
- background (3.6:1); #ff8ac4 clears 5.03:1 on bg-float while
671
- staying in the hot-pink hue family. Used wherever components
672
- reference --wm-color-accent-readable instead of --wm-color-accent. */
673
- --wm-color-accent-readable: #ff8ac4;
674
-
675
- /* Semantic */
676
- --wm-color-success: #a6e22e;
677
- --wm-color-warning: #fd971f;
678
- --wm-color-danger: #f92672;
679
-
680
- /* Item type colors */
681
- --wm-color-task: #66d9ef;
682
- --wm-color-bug: #f92672;
683
- --wm-color-story: #a6e22e;
684
- --wm-color-epic: #ae81ff;
685
- --wm-color-initiative: #fd971f;
686
- --wm-color-completed: #a6e22e;
687
- --wm-color-epic-text: #1c1c15;
688
- --wm-color-initiative-text: #1c1c15;
689
-
690
- /* Shadows */
691
- --wm-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.5);
692
- --wm-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.6);
693
- --wm-shadow-lg: 0 10px 30px rgba(0, 0, 0, 0.7);
694
-
695
- /* Overlay */
696
- --wm-backdrop-opacity: 0.5;
697
-
698
- /* Syntax highlighting — full Monokai palette on warm surfaces */
699
- --wm-syntax-keyword: #f92672;
700
- --wm-syntax-string: #e6db74;
701
- --wm-syntax-comment: #75715e;
702
- --wm-syntax-number: #ae81ff;
703
- --wm-syntax-function: #a6e22e;
704
- --wm-syntax-type: #66d9ef;
705
- --wm-syntax-variable: #fd971f;
706
- --wm-syntax-attr: #a6e22e;
707
- --wm-syntax-builtin: #66d9ef;
708
- }
709
-
710
- /* ================================================================
711
- Crepuscular Sky
712
- ================================================================ */
713
- [data-theme='crepuscular-sky'] {
714
- color-scheme: dark;
715
- --wm-priority-alpha: 20%;
716
- --wm-priority-critical-text: color-mix(
717
- in srgb,
718
- var(--wm-color-critical) 85%,
719
- white
720
- );
721
-
722
- /* Surfaces — deep navy, sunken=darkest, float=lightest */
723
- --wm-bg-sunken: #060810;
724
- --wm-bg-base: #121523;
725
- --wm-bg-raised: #131a28;
726
- --wm-bg-float: #1d2338;
727
- --wm-bg-hover: #252c44;
728
- --wm-bg-foreground: #2d3654;
729
-
730
- /* Text — pale warm cream, stepping through amber to cool blue-grey */
731
- --wm-text-primary: #edd9a3;
732
- --wm-text-secondary: #ba9d7a;
733
- --wm-text-muted: #a094ac;
734
- --wm-text-placeholder: #3d4d68;
735
-
736
- /* Borders */
737
- --wm-border: #202a40;
738
- --wm-border-subtle: #54575c;
739
- --wm-border-hover: #e8920a;
740
- --wm-border-input: #5a6888;
741
-
742
- /* Accent — golden orange, the crepuscular ray color */
743
- --wm-color-accent: #c09d06;
744
- --wm-color-accent-hover: #b15000;
745
- --wm-color-accent-text: #060810;
746
-
747
- /* Semantic */
748
- --wm-color-success: #4aba80;
749
- --wm-color-warning: #d4830a;
750
- --wm-color-danger: #e05c5c;
751
-
752
- /* Item type colors */
753
- --wm-color-task: #8ab4d8;
754
- --wm-color-bug: #e05c5c;
755
- --wm-color-story: #4aba80;
756
- --wm-color-epic: #c08ae0;
757
- --wm-color-initiative: #e8920a;
758
- --wm-color-completed: #7bb8a8;
759
- --wm-color-epic-text: #ffffff;
760
- --wm-color-initiative-text: #060810;
761
-
762
- /* Shadows */
763
- --wm-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.6);
764
- --wm-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.7);
765
- --wm-shadow-lg: 0 10px 30px rgba(0, 0, 0, 0.8);
766
-
767
- /* Overlay */
768
- --wm-backdrop-opacity: 0.6;
769
-
770
- /* Syntax highlighting — warm golden with reddish-purple accents */
771
- --wm-syntax-keyword: #d4830a;
772
- --wm-syntax-string: #edd9a3;
773
- --wm-syntax-comment: #4a5a7a;
774
- --wm-syntax-number: #e05c8a;
775
- --wm-syntax-function: #8ab4d8;
776
- --wm-syntax-type: #c0986a;
777
- --wm-syntax-variable: #e05c5c;
778
- --wm-syntax-attr: #d4830a;
779
- --wm-syntax-builtin: #9b6bcc;
780
- }
781
-
782
- /* ================================================================
783
- Source Control Dark
784
- ================================================================ */
785
- [data-theme='source-control-dark'] {
786
- color-scheme: dark;
787
- --wm-priority-alpha: 20%;
788
- --wm-priority-critical-text: color-mix(
789
- in srgb,
790
- var(--wm-color-critical) 85%,
791
- white
792
- );
793
-
794
- /* Surfaces */
795
- --wm-bg-base: #0d1117;
796
- --wm-bg-raised: #161b22;
797
- --wm-bg-float: #21262d;
798
- --wm-bg-sunken: #010409;
799
- --wm-bg-hover: #262c36;
800
- --wm-bg-foreground: #313b45;
801
-
802
- /* Text */
803
- --wm-text-primary: #f0f6fc;
804
- --wm-text-secondary: #c9d1d9;
805
- --wm-text-muted: #9198a1;
806
- --wm-text-placeholder: #636c76;
807
-
808
- /* Borders */
809
- --wm-border: #444c56;
810
- --wm-border-subtle: #30363d;
811
- --wm-border-hover: #58a6ff;
812
- --wm-border-input: #6a6f76;
813
-
814
- /* Accent — medium green, needs dark text for contrast */
815
- --wm-color-accent: #3fb950;
816
- --wm-color-accent-hover: #58a6ff;
817
- --wm-color-accent-text: #0d1117;
818
-
819
- /* Semantic */
820
- --wm-color-success: #3fb950;
821
- --wm-color-warning: #d29922;
822
- --wm-color-danger: #f85149;
823
-
824
- /* Item type colors */
825
- --wm-color-task: #58a6ff;
826
- --wm-color-bug: #f85149;
827
- --wm-color-story: #3fb950;
828
- --wm-color-epic: #bc8cff;
829
- --wm-color-initiative: #d29922;
830
- --wm-color-completed: #3fb950;
831
- --wm-color-epic-text: #ffffff;
832
- --wm-color-initiative-text: #ffffff;
833
-
834
- /* Shadows */
835
- --wm-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.5);
836
- --wm-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.6);
837
- --wm-shadow-lg: 0 10px 30px rgba(0, 0, 0, 0.7);
838
-
839
- /* Overlay */
840
- --wm-backdrop-opacity: 0.5;
841
-
842
- /* Syntax highlighting */
843
- --wm-syntax-keyword: #ff7b72;
844
- --wm-syntax-string: #a5d6ff;
845
- --wm-syntax-comment: #8b949e;
846
- --wm-syntax-number: #79c0ff;
847
- --wm-syntax-function: #d2a8ff;
848
- --wm-syntax-type: #ffa657;
849
- --wm-syntax-variable: #ffa657;
850
- --wm-syntax-attr: #79c0ff;
851
- --wm-syntax-builtin: #79c0ff;
852
- }
853
-
854
- /* ================================================================
855
- Wildmason (Stone & Moss)
856
- ================================================================ */
857
- [data-theme='wildmason'] {
858
- color-scheme: dark;
859
- --wm-priority-alpha: 20%;
860
- --wm-priority-critical-text: color-mix(
861
- in srgb,
862
- var(--wm-color-critical) 85%,
863
- white
864
- );
865
-
866
- /* Surfaces — Cooler, Deeper Stone Grays */
867
- --wm-bg-sunken: #1b1d1c;
868
- --wm-bg-base: #2a2c2b;
869
- --wm-bg-raised: #383b3a;
870
- --wm-bg-float: #464a49;
871
- --wm-bg-hover: #405450;
872
- --wm-bg-foreground: #626967;
873
-
874
- /* Text — Crisp Soft White with hint of mint */
875
- --wm-text-primary: #d8e0d8;
876
- --wm-text-secondary: #c2ccc2;
877
- --wm-text-muted: #c0cac0;
878
- --wm-text-placeholder: #687068;
879
-
880
- /* Borders — Deep Stone */
881
- --wm-border: #3d4241;
882
- --wm-border-subtle: #2f3332;
883
- --wm-border-hover: #82a682;
884
- --wm-border-input: #7a8582;
885
-
886
- /* Accent — Forest Moss Green */
887
- --wm-color-accent: #82a682;
888
- --wm-color-accent-hover: #94b894;
889
- --wm-color-accent-text: #161817;
890
- /* Brighter sage variant for "accent as text" contexts (active tab
891
- labels, current nav items, link-style buttons). #82a682 fails
892
- WCAG AA 4.5:1 against bg-float (3.30:1); #9bc99b clears 4.74:1
893
- while staying in the moss-green hue family. Used wherever components
894
- reference --wm-color-accent-readable instead of --wm-color-accent. */
895
- --wm-color-accent-readable: #9bc99b;
896
-
897
- /* Semantic */
898
- --wm-color-success: #a0c5a0;
899
- --wm-color-warning: #ebcb8b;
900
- --wm-color-danger: #bf616a;
901
-
902
- /* Item type colors — Wildmason selection */
903
- --wm-color-task: #82a682;
904
- --wm-color-bug: #bf616a;
905
- --wm-color-story: #a3be8c;
906
- --wm-color-epic: #b48ead;
907
- --wm-color-initiative: #ebcb8b;
908
- --wm-color-completed: #94b894;
909
- --wm-color-epic-text: #ffffff;
910
- --wm-color-initiative-text: #161817;
911
-
912
- /* Shadows — Deeper contrast for stone depth */
913
- --wm-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.5);
914
- --wm-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.6);
915
- --wm-shadow-lg: 0 10px 30px rgba(0, 0, 0, 0.7);
916
-
917
- /* Overlay */
918
- --wm-backdrop-opacity: 0.55;
919
-
920
- /* Syntax highlighting — Sage and Stone inspired */
921
- --wm-syntax-keyword: #98b498;
922
- --wm-syntax-string: #b0c8b0;
923
- --wm-syntax-comment: #6c7570;
924
- --wm-syntax-number: #d8dee9;
925
- --wm-syntax-function: #e2e8e2;
926
- --wm-syntax-type: #b8c2b8;
927
- --wm-syntax-variable: #a3be8c;
928
- --wm-syntax-attr: #98b498;
929
- --wm-syntax-builtin: #ebcb8b;
930
- }
931
-
932
- /* ================================================================
933
- Sage & Linen (a lighter take on Wildmason)
934
- ================================================================ */
935
- [data-theme='sage-linen'] {
936
- color-scheme: light;
937
-
938
- /* Surfaces — cool eucalyptus, low chroma */
939
- --wm-bg-base: #d4ded4;
940
- --wm-bg-raised: #c5d1c5;
941
- --wm-bg-float: #e6efe5;
942
- --wm-bg-sunken: #dde6dc;
943
- --wm-bg-hover: #d8e2d7;
944
- --wm-bg-foreground: #b3c1b3;
945
-
946
- /* Text */
947
- --wm-text-primary: #1e2822;
948
- --wm-text-secondary: #3a4a40;
949
- --wm-text-muted: #4a5b4f;
950
- --wm-text-placeholder: #94a298;
951
-
952
- /* Borders */
953
- --wm-border: #bcc5b8;
954
- --wm-border-subtle: #ccd4c8;
955
- --wm-border-hover: #3a5a43;
956
- --wm-border-input: #788876;
957
-
958
- /* Accent — deep forest green */
959
- --wm-color-accent: #3a5a43;
960
- --wm-color-accent-hover: #2c4733;
961
- --wm-color-accent-text: #eaf0e7;
962
-
963
- /* Semantic */
964
- --wm-color-success: #3a6b48;
965
- --wm-color-warning: #8a5a1f;
966
- --wm-color-danger: #ac3838;
967
-
968
- /* Item types */
969
- --wm-color-task: #3a5a43;
970
- --wm-color-bug: #ac3838;
971
- --wm-color-story: #3a6b48;
972
- --wm-color-epic: #6b4a7a;
973
- --wm-color-initiative: #8a5a1f;
974
- --wm-color-completed: #4a6a80;
975
- --wm-color-epic-text: #ffffff;
976
- --wm-color-initiative-text: #ffffff;
977
-
978
- /* Shadows — forest-ink tinted */
979
- --wm-shadow-sm: 0 1px 2px rgba(30, 40, 34, 0.07);
980
- --wm-shadow-md: 0 4px 8px rgba(30, 40, 34, 0.1);
981
- --wm-shadow-lg: 0 10px 20px rgba(30, 40, 34, 0.12);
982
-
983
- /* Overlay */
984
- --wm-backdrop-opacity: 0.35;
985
-
986
- /* Syntax highlighting */
987
- --wm-syntax-keyword: #7a2e6b;
988
- --wm-syntax-string: #3a6b48;
989
- --wm-syntax-comment: #8a958a;
990
- --wm-syntax-number: #8a5a1f;
991
- --wm-syntax-function: #3a5a43;
992
- --wm-syntax-type: #8a6d1f;
993
- --wm-syntax-variable: #ac3838;
994
- --wm-syntax-attr: #8a5a1f;
995
- --wm-syntax-builtin: #4a6a80;
996
- }
1
+ /* ================================================================
2
+ Aegis Design System — themes.css
3
+ Wildmason shared theme tokens for Works, Helm, Slate, Mortar.
4
+
5
+ WCAG AA / Section 508 Compliance
6
+ All token pairs in this file meet WCAG 2.1 AA requirements:
7
+ - Normal text (< 18pt / < 14pt bold): 4.5:1 minimum
8
+ - Large text and UI components: 3.0:1 minimum
9
+ (WCAG 1.4.11 Non-text Contrast — applies to --wm-border-input)
10
+
11
+ Placeholder text (--wm-text-placeholder) is intentionally lower contrast.
12
+ WCAG 2.2 Understanding 1.4.3 explicitly exempts placeholder text from
13
+ contrast requirements. Inputs MUST have a visible label; placeholder is
14
+ supplementary hint text only and must never serve as the sole label.
15
+
16
+ All tokens use the --wm- prefix. Apps should alias to local
17
+ names during migration, e.g.:
18
+ --primary-color: var(--wm-color-accent);
19
+
20
+ Token rename guide (Works → Aegis):
21
+ --bg-app → --wm-bg-base
22
+ --bg-header → --wm-bg-raised
23
+ --bg-card → --wm-bg-float
24
+ --bg-column → --wm-bg-sunken
25
+ --bg-hover → --wm-bg-hover
26
+ --text-primary → --wm-text-primary
27
+ --text-secondary → --wm-text-secondary
28
+ --text-muted → --wm-text-muted
29
+ --border-color → --wm-border
30
+ --border-subtle → --wm-border-subtle
31
+ --border-hover → --wm-border-hover
32
+ --primary-color → --wm-color-accent
33
+ --primary-hover → --wm-color-accent-hover
34
+ --success-color → --wm-color-success
35
+ --warning-color → --wm-color-warning
36
+ --danger-color → --wm-color-danger
37
+ --shadow-sm/md/lg → --wm-shadow-sm/md/lg
38
+ --radius-* → --wm-radius-*
39
+ --priority-* → --wm-priority-*
40
+ --color-task/bug/… → --wm-color-task/bug/…
41
+ --btn-*-text → --wm-color-*-text
42
+ ================================================================ */
43
+
44
+ /* ----------------------------------------------------------------
45
+ Base constants — theme-independent
46
+ ---------------------------------------------------------------- */
47
+ :root {
48
+ /* Border radius */
49
+ --wm-radius-xs: 4px;
50
+ --wm-radius-sm: 6px;
51
+ --wm-radius-md: 8px;
52
+ --wm-radius-lg: 12px;
53
+ --wm-radius-full: 9999px;
54
+
55
+ /* Motion */
56
+ --wm-transition-fast: 150ms ease;
57
+ --wm-transition-base: 200ms ease;
58
+ --wm-transition-slow: 300ms ease;
59
+
60
+ /* Typography */
61
+ --wm-font-sans: system-ui, -apple-system, 'Segoe UI', sans-serif;
62
+ --wm-font-mono:
63
+ 'Cascadia Code', 'Fira Code', Consolas, 'Courier New', monospace;
64
+
65
+ /* Fixed semantic colors (not theme-dependent) */
66
+ --wm-color-critical: #7c3aed;
67
+
68
+ /* Priority opacity — overridden to 20% in dark color-scheme themes */
69
+ --wm-priority-alpha: 15%;
70
+
71
+ /* Priority tokens — computed from semantic colors at current theme scope */
72
+ --wm-priority-critical-bg: color-mix(
73
+ in srgb,
74
+ var(--wm-color-critical) var(--wm-priority-alpha),
75
+ transparent
76
+ );
77
+ --wm-priority-critical-text: var(--wm-color-critical);
78
+ --wm-priority-high-bg: color-mix(
79
+ in srgb,
80
+ var(--wm-color-danger) var(--wm-priority-alpha),
81
+ transparent
82
+ );
83
+ --wm-priority-high-text: var(--wm-color-danger);
84
+ --wm-priority-medium-bg: color-mix(
85
+ in srgb,
86
+ var(--wm-color-warning) var(--wm-priority-alpha),
87
+ transparent
88
+ );
89
+ --wm-priority-medium-text: var(--wm-color-warning);
90
+ --wm-priority-low-bg: color-mix(
91
+ in srgb,
92
+ var(--wm-color-success) var(--wm-priority-alpha),
93
+ transparent
94
+ );
95
+ --wm-priority-low-text: var(--wm-color-success);
96
+
97
+ /* Modal backdrop — opacity set per-theme via --wm-backdrop-opacity */
98
+ --wm-modal-backdrop: rgba(0, 0, 0, var(--wm-backdrop-opacity));
99
+
100
+ /* Derived tokens — computed at scope, valid for all themes */
101
+ --wm-bg-active: color-mix(in srgb, var(--wm-color-accent) 10%, transparent);
102
+ --wm-color-danger-bg: color-mix(
103
+ in srgb,
104
+ var(--wm-color-danger) 8%,
105
+ transparent
106
+ );
107
+ --wm-color-danger-border: color-mix(
108
+ in srgb,
109
+ var(--wm-color-danger) 25%,
110
+ transparent
111
+ );
112
+ --wm-color-success-bg: color-mix(
113
+ in srgb,
114
+ var(--wm-color-success) 8%,
115
+ transparent
116
+ );
117
+ --wm-color-success-border: color-mix(
118
+ in srgb,
119
+ var(--wm-color-success) 25%,
120
+ transparent
121
+ );
122
+ --wm-color-warning-bg: color-mix(
123
+ in srgb,
124
+ var(--wm-color-warning) 8%,
125
+ transparent
126
+ );
127
+ --wm-color-warning-border: color-mix(
128
+ in srgb,
129
+ var(--wm-color-warning) 25%,
130
+ transparent
131
+ );
132
+
133
+ /* "Readable" accent — used in `color:` (text) contexts where WCAG AA
134
+ contrast (4.5:1) must be met against bg-base / bg-raised / bg-float.
135
+ Defaults to the theme's --wm-color-accent so most themes need no
136
+ override; themes whose accent is too low-contrast for body text
137
+ (currently Stone & Moss) override this to a lighter sibling while
138
+ keeping --wm-color-accent itself for fills, focus rings, and other
139
+ non-text usages where 3:1 (WCAG 1.4.11) is sufficient. Falls back
140
+ to --wm-color-accent at use-time via CSS variable evaluation. */
141
+ --wm-color-accent-readable: var(--wm-color-accent);
142
+ }
143
+
144
+ /* ================================================================
145
+ Warm Light (Default)
146
+ ================================================================ */
147
+ :root,
148
+ [data-theme='warm-light'] {
149
+ color-scheme: light;
150
+
151
+ /* Surfaces */
152
+ --wm-bg-base: #ececea;
153
+ --wm-bg-raised: #e1e1de;
154
+ --wm-bg-float: #d2d2ce;
155
+ --wm-bg-sunken: #f9f9f8;
156
+ --wm-bg-hover: #f4f4f3;
157
+ --wm-bg-foreground: #c4c4c0;
158
+
159
+ /* Text */
160
+ --wm-text-primary: #002b36;
161
+ --wm-text-secondary: #073642;
162
+ --wm-text-muted: #474f57;
163
+ --wm-text-placeholder: #8d9fa6;
164
+
165
+ /* Borders */
166
+ --wm-border: #eee8d5;
167
+ --wm-border-subtle: #d6cdb7;
168
+ --wm-border-hover: #268bd2;
169
+ --wm-border-input: #7a7460;
170
+
171
+ /* Accent */
172
+ --wm-color-accent: #105987;
173
+ --wm-color-accent-hover: #2aa198;
174
+ --wm-color-accent-text: #ffffff;
175
+
176
+ /* Semantic */
177
+ --wm-color-success: #485600;
178
+ --wm-color-warning: #705400;
179
+ --wm-color-danger: #bd2c29;
180
+
181
+ /* Item type colors (Works-specific) */
182
+ --wm-color-task: #1b6ca5;
183
+ --wm-color-bug: #bd2c29;
184
+ --wm-color-story: #586900;
185
+ --wm-color-epic: #4e53a2;
186
+ --wm-color-initiative: #9b3a10;
187
+ --wm-color-completed: #1e7a71;
188
+ --wm-color-epic-text: #ffffff;
189
+ --wm-color-initiative-text: #ffffff;
190
+
191
+ /* Shadows */
192
+ --wm-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.08);
193
+ --wm-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.12);
194
+ --wm-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.12);
195
+
196
+ /* Overlay */
197
+ --wm-backdrop-opacity: 0.35;
198
+
199
+ /* Syntax highlighting */
200
+ --wm-syntax-keyword: #859900;
201
+ --wm-syntax-string: #2aa198;
202
+ --wm-syntax-comment: #93a1a1;
203
+ --wm-syntax-number: #d33682;
204
+ --wm-syntax-function: #268bd2;
205
+ --wm-syntax-type: #b58900;
206
+ --wm-syntax-variable: #cb4b16;
207
+ --wm-syntax-attr: #b58900;
208
+ --wm-syntax-builtin: #6c71c4;
209
+ }
210
+
211
+ /* ================================================================
212
+ Neutral Light
213
+ ================================================================ */
214
+ [data-theme='neutral-light'] {
215
+ color-scheme: light;
216
+
217
+ /* Surfaces */
218
+ --wm-bg-base: #ebebeb;
219
+ --wm-bg-raised: #e0e0e0;
220
+ --wm-bg-float: #d0d0d0;
221
+ --wm-bg-sunken: #f8f8f8;
222
+ --wm-bg-hover: #f3f3f3;
223
+ --wm-bg-foreground: #bababa;
224
+
225
+ /* Text */
226
+ --wm-text-primary: #111111;
227
+ --wm-text-secondary: #333333;
228
+ --wm-text-muted: #555555;
229
+ --wm-text-placeholder: #999999;
230
+
231
+ /* Borders */
232
+ --wm-border: #cccccc;
233
+ --wm-border-subtle: #dddddd;
234
+ --wm-border-hover: #888888;
235
+ --wm-border-input: #7d7d7d;
236
+
237
+ /* Accent */
238
+ --wm-color-accent: #1b4a9e;
239
+ --wm-color-accent-hover: #3061af;
240
+ --wm-color-accent-text: #ffffff;
241
+
242
+ /* Semantic */
243
+ --wm-color-success: #085a50;
244
+ --wm-color-warning: #8c4000;
245
+ --wm-color-danger: #dc2626;
246
+
247
+ /* Item type colors */
248
+ --wm-color-task: #2563eb;
249
+ --wm-color-bug: #dc2626;
250
+ --wm-color-story: #059669;
251
+ --wm-color-epic: #7c3aed;
252
+ --wm-color-initiative: #c2410c;
253
+ --wm-color-completed: #6366f1;
254
+ --wm-color-epic-text: #ffffff;
255
+ --wm-color-initiative-text: #ffffff;
256
+
257
+ /* Shadows */
258
+ --wm-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.06);
259
+ --wm-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
260
+ --wm-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.12);
261
+
262
+ /* Overlay */
263
+ --wm-backdrop-opacity: 0.35;
264
+
265
+ /* Syntax highlighting */
266
+ --wm-syntax-keyword: #a626a4;
267
+ --wm-syntax-string: #50a14f;
268
+ --wm-syntax-comment: #a0a1a7;
269
+ --wm-syntax-number: #986801;
270
+ --wm-syntax-function: #4078f2;
271
+ --wm-syntax-type: #c18401;
272
+ --wm-syntax-variable: #e45649;
273
+ --wm-syntax-attr: #986801;
274
+ --wm-syntax-builtin: #0184bc;
275
+ }
276
+
277
+ /* ================================================================
278
+ Arctic Night
279
+ ================================================================ */
280
+ [data-theme='arctic-night'] {
281
+ color-scheme: dark;
282
+ --wm-priority-alpha: 20%;
283
+ --wm-priority-critical-text: color-mix(
284
+ in srgb,
285
+ var(--wm-color-critical) 85%,
286
+ white
287
+ );
288
+
289
+ /* Surfaces */
290
+ --wm-bg-sunken: #242933;
291
+ --wm-bg-base: #2e3440;
292
+ --wm-bg-raised: #3b4252;
293
+ --wm-bg-float: #434c5e;
294
+ --wm-bg-hover: #4c566a;
295
+ --wm-bg-foreground: #535e6e;
296
+
297
+ /* Text */
298
+ --wm-text-primary: #eceff4;
299
+ --wm-text-secondary: #e5e9f0;
300
+ --wm-text-muted: #d8dee9;
301
+ --wm-text-placeholder: #adb9cb;
302
+
303
+ /* Borders */
304
+ --wm-border: #4c566a;
305
+ --wm-border-subtle: #434c5e;
306
+ --wm-border-hover: #88c0d0;
307
+ --wm-border-input: #8e9aa9;
308
+
309
+ /* Accent — light teal requires dark text */
310
+ --wm-color-accent: #8fc4d3;
311
+ --wm-color-accent-hover: #81a1c1;
312
+ --wm-color-accent-text: #2e3440;
313
+
314
+ /* Semantic */
315
+ --wm-color-success: #b5cf9a;
316
+ --wm-color-warning: #ebcb8b;
317
+ --wm-color-danger: #bf616a;
318
+
319
+ /* Item type colors */
320
+ --wm-color-task: #88c0d0;
321
+ --wm-color-bug: #bf616a;
322
+ --wm-color-story: #a3be8c;
323
+ --wm-color-epic: #b48ead;
324
+ --wm-color-initiative: #ebcb8b;
325
+ --wm-color-completed: #81a1c1;
326
+ --wm-color-epic-text: #2e3440;
327
+ --wm-color-initiative-text: #2e3440;
328
+
329
+ /* Shadows */
330
+ --wm-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.2);
331
+ --wm-shadow-md: 0 4px 6px rgba(0, 0, 0, 0.3);
332
+ --wm-shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.4);
333
+
334
+ /* Overlay */
335
+ --wm-backdrop-opacity: 0.5;
336
+
337
+ /* Syntax highlighting */
338
+ --wm-syntax-keyword: #81a1c1;
339
+ --wm-syntax-string: #a3be8c;
340
+ --wm-syntax-comment: #616e88;
341
+ --wm-syntax-number: #b48ead;
342
+ --wm-syntax-function: #88c0d0;
343
+ --wm-syntax-type: #8fbcbb;
344
+ --wm-syntax-variable: #d08770;
345
+ --wm-syntax-attr: #8fbcbb;
346
+ --wm-syntax-builtin: #81a1c1;
347
+ }
348
+
349
+ /* ================================================================
350
+ Vampire's Kiss
351
+ ================================================================ */
352
+ [data-theme='vampires-kiss'] {
353
+ color-scheme: dark;
354
+ --wm-priority-alpha: 20%;
355
+ --wm-priority-critical-text: color-mix(
356
+ in srgb,
357
+ var(--wm-color-critical) 85%,
358
+ white
359
+ );
360
+
361
+ /* Surfaces */
362
+ --wm-bg-sunken: #16171e;
363
+ --wm-bg-base: #21222c;
364
+ --wm-bg-raised: #282a36;
365
+ --wm-bg-float: #44475a;
366
+ --wm-bg-hover: #6272a4;
367
+ --wm-bg-foreground: #525568;
368
+
369
+ /* Text */
370
+ --wm-text-primary: #f8f8f2;
371
+ --wm-text-secondary: #d6acff;
372
+ --wm-text-muted: #c5cedd;
373
+ --wm-text-placeholder: #8b93a8;
374
+
375
+ /* Borders */
376
+ --wm-border: #6272a4;
377
+ --wm-border-subtle: #44475a;
378
+ --wm-border-hover: #ff79c6;
379
+ --wm-border-input: #8694b1;
380
+
381
+ /* Accent — slightly lighter than canonical purple for card contrast */
382
+ --wm-color-accent: #c9a7fa;
383
+ --wm-color-accent-hover: #ff79c6;
384
+ --wm-color-accent-text: #282a36;
385
+
386
+ /* Semantic */
387
+ --wm-color-success: #50fa7b;
388
+ --wm-color-warning: #f1fa8c;
389
+ --wm-color-danger: #ff5555;
390
+
391
+ /* Item type colors */
392
+ --wm-color-task: #8be9fd;
393
+ --wm-color-bug: #ff5555;
394
+ --wm-color-story: #50fa7b;
395
+ --wm-color-epic: #bd93f9;
396
+ --wm-color-initiative: #ffb86c;
397
+ --wm-color-completed: #bd93f9;
398
+ --wm-color-epic-text: #282a36;
399
+ --wm-color-initiative-text: #282a36;
400
+
401
+ /* Shadows */
402
+ --wm-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.4);
403
+ --wm-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.5);
404
+ --wm-shadow-lg: 0 10px 30px rgba(0, 0, 0, 0.6);
405
+
406
+ /* Overlay */
407
+ --wm-backdrop-opacity: 0.5;
408
+
409
+ /* Syntax highlighting */
410
+ --wm-syntax-keyword: #ff79c6;
411
+ --wm-syntax-string: #f1fa8c;
412
+ --wm-syntax-comment: #6272a4;
413
+ --wm-syntax-number: #bd93f9;
414
+ --wm-syntax-function: #50fa7b;
415
+ --wm-syntax-type: #8be9fd;
416
+ --wm-syntax-variable: #ffb86c;
417
+ --wm-syntax-attr: #50fa7b;
418
+ --wm-syntax-builtin: #8be9fd;
419
+ }
420
+
421
+ /* ================================================================
422
+ Twilight Peach
423
+ ================================================================ */
424
+ [data-theme='twilight-peach'] {
425
+ color-scheme: dark;
426
+ --wm-priority-alpha: 20%;
427
+ --wm-priority-critical-text: color-mix(
428
+ in srgb,
429
+ var(--wm-color-critical) 85%,
430
+ white
431
+ );
432
+
433
+ /* Surfaces */
434
+ --wm-bg-sunken: #020617;
435
+ --wm-bg-base: #171827;
436
+ --wm-bg-raised: #201e37;
437
+ --wm-bg-float: #292a48;
438
+ --wm-bg-hover: #32334e;
439
+ --wm-bg-foreground: #3c3d5e;
440
+
441
+ /* Text */
442
+ --wm-text-primary: #eeedf8;
443
+ --wm-text-secondary: #a9a8c0;
444
+ --wm-text-muted: #b89f91;
445
+ --wm-text-placeholder: #4a4962;
446
+
447
+ /* Borders */
448
+ --wm-border: #565888;
449
+ --wm-border-subtle: #353758;
450
+ --wm-border-hover: #6468a0;
451
+ --wm-border-input: #797ba0;
452
+
453
+ /* Accent — warm peach */
454
+ --wm-color-accent: #f5986a;
455
+ --wm-color-accent-hover: #f08458;
456
+ --wm-color-accent-text: #1c1d2e;
457
+
458
+ /* Semantic */
459
+ --wm-color-success: #5cbfa0;
460
+ --wm-color-warning: #f0b464;
461
+ --wm-color-danger: #f07878;
462
+
463
+ /* Item type colors */
464
+ --wm-color-task: #70a8f0;
465
+ --wm-color-bug: #f07878;
466
+ --wm-color-story: #5cbfa0;
467
+ --wm-color-epic: #b090e8;
468
+ --wm-color-initiative: #f0b464;
469
+ --wm-color-completed: #9090d8;
470
+ --wm-color-epic-text: #ffffff;
471
+ --wm-color-initiative-text: #1c1d2e;
472
+
473
+ /* Shadows */
474
+ --wm-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.5);
475
+ --wm-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.6);
476
+ --wm-shadow-lg: 0 10px 30px rgba(0, 0, 0, 0.7);
477
+
478
+ /* Overlay */
479
+ --wm-backdrop-opacity: 0.55;
480
+
481
+ /* Syntax highlighting */
482
+ --wm-syntax-keyword: #c78ed4;
483
+ --wm-syntax-string: #98c87a;
484
+ --wm-syntax-comment: #6b6a82;
485
+ --wm-syntax-number: #f0b464;
486
+ --wm-syntax-function: #80c0e8;
487
+ --wm-syntax-type: #e5c480;
488
+ --wm-syntax-variable: #f5986a;
489
+ --wm-syntax-attr: #d4a870;
490
+ --wm-syntax-builtin: #70c0c8;
491
+ }
492
+
493
+ /* ================================================================
494
+ Thistle & Mocha
495
+ ================================================================ */
496
+ [data-theme='thistle-mocha'] {
497
+ color-scheme: dark;
498
+ --wm-priority-alpha: 20%;
499
+ --wm-priority-critical-text: color-mix(
500
+ in srgb,
501
+ var(--wm-color-critical) 85%,
502
+ white
503
+ );
504
+
505
+ /* Surfaces — warm near-black mocha family */
506
+ --wm-bg-base: #221918;
507
+ --wm-bg-raised: #382e2c;
508
+ --wm-bg-float: #403635;
509
+ --wm-bg-sunken: #151310;
510
+ --wm-bg-hover: #2c2822;
511
+ --wm-bg-foreground: #514240;
512
+
513
+ /* Text — warm cream */
514
+ --wm-text-primary: #ede9e1;
515
+ --wm-text-secondary: #c5bcae;
516
+ --wm-text-muted: #a3a8aa;
517
+ --wm-text-placeholder: #4a4540;
518
+
519
+ /* Borders */
520
+ --wm-border: #2e2820;
521
+ --wm-border-subtle: #241e18;
522
+ --wm-border-hover: #504840;
523
+ --wm-border-input: #8a7670;
524
+
525
+ /* Accent — thistle (muted lavender) */
526
+ --wm-color-accent: #c4a8d8;
527
+ --wm-color-accent-hover: #9e7abf;
528
+ --wm-color-accent-text: #1a1715;
529
+
530
+ /* Semantic */
531
+ --wm-color-success: #7ac4a0;
532
+ --wm-color-warning: #d4a85a;
533
+ --wm-color-danger: #e07878;
534
+
535
+ /* Item type colors */
536
+ --wm-color-task: #80a8e0;
537
+ --wm-color-bug: #e07878;
538
+ --wm-color-story: #7ac4a0;
539
+ --wm-color-epic: #b090d8;
540
+ --wm-color-initiative: #d4a85a;
541
+ --wm-color-completed: #9890c8;
542
+ --wm-color-epic-text: #1a1715;
543
+ --wm-color-initiative-text: #1a1715;
544
+
545
+ /* Shadows */
546
+ --wm-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.6);
547
+ --wm-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.7);
548
+ --wm-shadow-lg: 0 10px 30px rgba(0, 0, 0, 0.8);
549
+
550
+ /* Overlay */
551
+ --wm-backdrop-opacity: 0.6;
552
+
553
+ /* Syntax highlighting */
554
+ --wm-syntax-keyword: #d8a8c4;
555
+ --wm-syntax-string: #a0c890;
556
+ --wm-syntax-comment: #6e6660;
557
+ --wm-syntax-number: #d4a85a;
558
+ --wm-syntax-function: #90b8d8;
559
+ --wm-syntax-type: #d8c890;
560
+ --wm-syntax-variable: #c4a8d8;
561
+ --wm-syntax-attr: #c8a870;
562
+ --wm-syntax-builtin: #80c4b8;
563
+ }
564
+
565
+ /* ================================================================
566
+ Solarized Precision
567
+ ================================================================ */
568
+ [data-theme='solarized-precision'] {
569
+ color-scheme: light;
570
+
571
+ /* Surfaces — warm cream base, distinct tan surface, clean white cards */
572
+ --wm-bg-base: #ede7d2;
573
+ --wm-bg-raised: #e2d8bc;
574
+ --wm-bg-float: #d4cba8;
575
+ --wm-bg-sunken: #f1e8dd;
576
+ --wm-bg-hover: #ede5cc;
577
+ --wm-bg-foreground: #c6be96;
578
+
579
+ /* Text — solarized blue-gray family */
580
+ --wm-text-primary: #2c3e48;
581
+ --wm-text-secondary: #3e545f;
582
+ --wm-text-muted: #455868;
583
+ --wm-text-placeholder: #a8b8be;
584
+
585
+ /* Borders */
586
+ --wm-border: #cec6aa;
587
+ --wm-border-subtle: #dad4bc;
588
+ --wm-border-hover: #8c9ea8;
589
+ --wm-border-input: #688090;
590
+
591
+ /* Accent — precision teal-blue */
592
+ --wm-color-accent: #185c78;
593
+ --wm-color-accent-hover: #1e6e96;
594
+ --wm-color-accent-text: #ffffff;
595
+
596
+ /* Semantic */
597
+ --wm-color-success: #006036;
598
+ --wm-color-warning: #6b4500;
599
+ --wm-color-danger: #c4302c;
600
+
601
+ /* Item type colors */
602
+ --wm-color-task: #1e6ea8;
603
+ --wm-color-bug: #c4302c;
604
+ --wm-color-story: #218a5c;
605
+ --wm-color-epic: #6a38aa;
606
+ --wm-color-initiative: #9a5800;
607
+ --wm-color-completed: #4a6ea8;
608
+ --wm-color-epic-text: #ffffff;
609
+ --wm-color-initiative-text: #ffffff;
610
+
611
+ /* Shadows — light theme, warm-tinted */
612
+ --wm-shadow-sm: 0 1px 2px rgba(44, 62, 72, 0.08);
613
+ --wm-shadow-md: 0 4px 8px rgba(44, 62, 72, 0.12);
614
+ --wm-shadow-lg: 0 10px 20px rgba(44, 62, 72, 0.15);
615
+
616
+ /* Overlay */
617
+ --wm-backdrop-opacity: 0.35;
618
+
619
+ /* Syntax — solarized light palette */
620
+ --wm-syntax-keyword: #859900;
621
+ --wm-syntax-string: #2aa198;
622
+ --wm-syntax-comment: #93a1a1;
623
+ --wm-syntax-number: #d48600;
624
+ --wm-syntax-function: #268bd2;
625
+ --wm-syntax-type: #b58900;
626
+ --wm-syntax-variable: #cb4b16;
627
+ --wm-syntax-attr: #b58900;
628
+ --wm-syntax-builtin: #2aa198;
629
+ }
630
+
631
+ /* ================================================================
632
+ Posh Sandalwood
633
+ ================================================================ */
634
+ [data-theme='posh-sandalwood'] {
635
+ color-scheme: dark;
636
+ --wm-priority-alpha: 20%;
637
+ --wm-priority-critical-text: color-mix(
638
+ in srgb,
639
+ var(--wm-color-critical) 85%,
640
+ white
641
+ );
642
+
643
+ /* Surfaces — warm olive-brown, sunken=darkest, float=lightest */
644
+ --wm-bg-sunken: #1c1c15;
645
+ --wm-bg-base: #27271f;
646
+ --wm-bg-raised: #333028;
647
+ --wm-bg-float: #403c30;
648
+ --wm-bg-hover: #4a4538;
649
+ --wm-bg-foreground: #524e3e;
650
+
651
+ /* Text — sandalwood cream palette */
652
+ --wm-text-primary: #fdf0e0;
653
+ --wm-text-secondary: #c5b59b;
654
+ --wm-text-muted: #b5bab3;
655
+ --wm-text-placeholder: #5a5040;
656
+
657
+ /* Borders */
658
+ --wm-border: #3a3828;
659
+ --wm-border-subtle: #2e2c22;
660
+ --wm-border-hover: #f92672;
661
+ --wm-border-input: #877567;
662
+
663
+ /* Accent — Monokai hot pink */
664
+ --wm-color-accent: #f92672;
665
+ --wm-color-accent-hover: #fd971f;
666
+ --wm-color-accent-text: #1c1c15;
667
+ /* Lighter pink sibling for "accent as text" contexts (active nav
668
+ items, tab labels, link-style buttons). #f92672 fails WCAG AA
669
+ 4.5:1 on bg-float (2.9:1) and on the accent-tinted settings-nav
670
+ background (3.6:1); #ff8ac4 clears 5.03:1 on bg-float while
671
+ staying in the hot-pink hue family. Used wherever components
672
+ reference --wm-color-accent-readable instead of --wm-color-accent. */
673
+ --wm-color-accent-readable: #ff8ac4;
674
+
675
+ /* Semantic */
676
+ --wm-color-success: #a6e22e;
677
+ --wm-color-warning: #fd971f;
678
+ --wm-color-danger: #f92672;
679
+
680
+ /* Item type colors */
681
+ --wm-color-task: #66d9ef;
682
+ --wm-color-bug: #f92672;
683
+ --wm-color-story: #a6e22e;
684
+ --wm-color-epic: #ae81ff;
685
+ --wm-color-initiative: #fd971f;
686
+ --wm-color-completed: #a6e22e;
687
+ --wm-color-epic-text: #1c1c15;
688
+ --wm-color-initiative-text: #1c1c15;
689
+
690
+ /* Shadows */
691
+ --wm-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.5);
692
+ --wm-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.6);
693
+ --wm-shadow-lg: 0 10px 30px rgba(0, 0, 0, 0.7);
694
+
695
+ /* Overlay */
696
+ --wm-backdrop-opacity: 0.5;
697
+
698
+ /* Syntax highlighting — full Monokai palette on warm surfaces */
699
+ --wm-syntax-keyword: #f92672;
700
+ --wm-syntax-string: #e6db74;
701
+ --wm-syntax-comment: #75715e;
702
+ --wm-syntax-number: #ae81ff;
703
+ --wm-syntax-function: #a6e22e;
704
+ --wm-syntax-type: #66d9ef;
705
+ --wm-syntax-variable: #fd971f;
706
+ --wm-syntax-attr: #a6e22e;
707
+ --wm-syntax-builtin: #66d9ef;
708
+ }
709
+
710
+ /* ================================================================
711
+ Crepuscular Sky
712
+ ================================================================ */
713
+ [data-theme='crepuscular-sky'] {
714
+ color-scheme: dark;
715
+ --wm-priority-alpha: 20%;
716
+ --wm-priority-critical-text: color-mix(
717
+ in srgb,
718
+ var(--wm-color-critical) 85%,
719
+ white
720
+ );
721
+
722
+ /* Surfaces — deep navy, sunken=darkest, float=lightest */
723
+ --wm-bg-sunken: #060810;
724
+ --wm-bg-base: #121523;
725
+ --wm-bg-raised: #131a28;
726
+ --wm-bg-float: #1d2338;
727
+ --wm-bg-hover: #252c44;
728
+ --wm-bg-foreground: #2d3654;
729
+
730
+ /* Text — pale warm cream, stepping through amber to cool blue-grey */
731
+ --wm-text-primary: #edd9a3;
732
+ --wm-text-secondary: #ba9d7a;
733
+ --wm-text-muted: #a094ac;
734
+ --wm-text-placeholder: #3d4d68;
735
+
736
+ /* Borders */
737
+ --wm-border: #202a40;
738
+ --wm-border-subtle: #54575c;
739
+ --wm-border-hover: #e8920a;
740
+ --wm-border-input: #5a6888;
741
+
742
+ /* Accent — golden orange, the crepuscular ray color */
743
+ --wm-color-accent: #c09d06;
744
+ --wm-color-accent-hover: #b15000;
745
+ --wm-color-accent-text: #060810;
746
+
747
+ /* Semantic */
748
+ --wm-color-success: #4aba80;
749
+ --wm-color-warning: #d4830a;
750
+ --wm-color-danger: #e05c5c;
751
+
752
+ /* Item type colors */
753
+ --wm-color-task: #8ab4d8;
754
+ --wm-color-bug: #e05c5c;
755
+ --wm-color-story: #4aba80;
756
+ --wm-color-epic: #c08ae0;
757
+ --wm-color-initiative: #e8920a;
758
+ --wm-color-completed: #7bb8a8;
759
+ --wm-color-epic-text: #ffffff;
760
+ --wm-color-initiative-text: #060810;
761
+
762
+ /* Shadows */
763
+ --wm-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.6);
764
+ --wm-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.7);
765
+ --wm-shadow-lg: 0 10px 30px rgba(0, 0, 0, 0.8);
766
+
767
+ /* Overlay */
768
+ --wm-backdrop-opacity: 0.6;
769
+
770
+ /* Syntax highlighting — warm golden with reddish-purple accents */
771
+ --wm-syntax-keyword: #d4830a;
772
+ --wm-syntax-string: #edd9a3;
773
+ --wm-syntax-comment: #4a5a7a;
774
+ --wm-syntax-number: #e05c8a;
775
+ --wm-syntax-function: #8ab4d8;
776
+ --wm-syntax-type: #c0986a;
777
+ --wm-syntax-variable: #e05c5c;
778
+ --wm-syntax-attr: #d4830a;
779
+ --wm-syntax-builtin: #9b6bcc;
780
+ }
781
+
782
+ /* ================================================================
783
+ Source Control Dark
784
+ ================================================================ */
785
+ [data-theme='source-control-dark'] {
786
+ color-scheme: dark;
787
+ --wm-priority-alpha: 20%;
788
+ --wm-priority-critical-text: color-mix(
789
+ in srgb,
790
+ var(--wm-color-critical) 85%,
791
+ white
792
+ );
793
+
794
+ /* Surfaces */
795
+ --wm-bg-base: #0d1117;
796
+ --wm-bg-raised: #161b22;
797
+ --wm-bg-float: #21262d;
798
+ --wm-bg-sunken: #010409;
799
+ --wm-bg-hover: #262c36;
800
+ --wm-bg-foreground: #313b45;
801
+
802
+ /* Text */
803
+ --wm-text-primary: #f0f6fc;
804
+ --wm-text-secondary: #c9d1d9;
805
+ --wm-text-muted: #9198a1;
806
+ --wm-text-placeholder: #636c76;
807
+
808
+ /* Borders */
809
+ --wm-border: #444c56;
810
+ --wm-border-subtle: #30363d;
811
+ --wm-border-hover: #58a6ff;
812
+ --wm-border-input: #6a6f76;
813
+
814
+ /* Accent — medium green, needs dark text for contrast */
815
+ --wm-color-accent: #3fb950;
816
+ --wm-color-accent-hover: #58a6ff;
817
+ --wm-color-accent-text: #0d1117;
818
+
819
+ /* Semantic */
820
+ --wm-color-success: #3fb950;
821
+ --wm-color-warning: #d29922;
822
+ --wm-color-danger: #f85149;
823
+
824
+ /* Item type colors */
825
+ --wm-color-task: #58a6ff;
826
+ --wm-color-bug: #f85149;
827
+ --wm-color-story: #3fb950;
828
+ --wm-color-epic: #bc8cff;
829
+ --wm-color-initiative: #d29922;
830
+ --wm-color-completed: #3fb950;
831
+ --wm-color-epic-text: #ffffff;
832
+ --wm-color-initiative-text: #ffffff;
833
+
834
+ /* Shadows */
835
+ --wm-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.5);
836
+ --wm-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.6);
837
+ --wm-shadow-lg: 0 10px 30px rgba(0, 0, 0, 0.7);
838
+
839
+ /* Overlay */
840
+ --wm-backdrop-opacity: 0.5;
841
+
842
+ /* Syntax highlighting */
843
+ --wm-syntax-keyword: #ff7b72;
844
+ --wm-syntax-string: #a5d6ff;
845
+ --wm-syntax-comment: #8b949e;
846
+ --wm-syntax-number: #79c0ff;
847
+ --wm-syntax-function: #d2a8ff;
848
+ --wm-syntax-type: #ffa657;
849
+ --wm-syntax-variable: #ffa657;
850
+ --wm-syntax-attr: #79c0ff;
851
+ --wm-syntax-builtin: #79c0ff;
852
+ }
853
+
854
+ /* ================================================================
855
+ Wildmason (Stone & Moss)
856
+ ================================================================ */
857
+ [data-theme='wildmason'] {
858
+ color-scheme: dark;
859
+ --wm-priority-alpha: 20%;
860
+ --wm-priority-critical-text: color-mix(
861
+ in srgb,
862
+ var(--wm-color-critical) 85%,
863
+ white
864
+ );
865
+
866
+ /* Surfaces — Cooler, Deeper Stone Grays */
867
+ --wm-bg-sunken: #1b1d1c;
868
+ --wm-bg-base: #2a2c2b;
869
+ --wm-bg-raised: #383b3a;
870
+ --wm-bg-float: #464a49;
871
+ --wm-bg-hover: #405450;
872
+ --wm-bg-foreground: #626967;
873
+
874
+ /* Text — Crisp Soft White with hint of mint */
875
+ --wm-text-primary: #d8e0d8;
876
+ --wm-text-secondary: #c2ccc2;
877
+ --wm-text-muted: #c0cac0;
878
+ --wm-text-placeholder: #687068;
879
+
880
+ /* Borders — Deep Stone */
881
+ --wm-border: #3d4241;
882
+ --wm-border-subtle: #2f3332;
883
+ --wm-border-hover: #82a682;
884
+ --wm-border-input: #7a8582;
885
+
886
+ /* Accent — Forest Moss Green */
887
+ --wm-color-accent: #82a682;
888
+ --wm-color-accent-hover: #94b894;
889
+ --wm-color-accent-text: #161817;
890
+ /* Brighter sage variant for "accent as text" contexts (active tab
891
+ labels, current nav items, link-style buttons). #82a682 fails
892
+ WCAG AA 4.5:1 against bg-float (3.30:1); #9bc99b clears 4.74:1
893
+ while staying in the moss-green hue family. Used wherever components
894
+ reference --wm-color-accent-readable instead of --wm-color-accent. */
895
+ --wm-color-accent-readable: #9bc99b;
896
+
897
+ /* Semantic */
898
+ --wm-color-success: #a0c5a0;
899
+ --wm-color-warning: #ebcb8b;
900
+ --wm-color-danger: #bf616a;
901
+
902
+ /* Item type colors — Wildmason selection */
903
+ --wm-color-task: #82a682;
904
+ --wm-color-bug: #bf616a;
905
+ --wm-color-story: #a3be8c;
906
+ --wm-color-epic: #b48ead;
907
+ --wm-color-initiative: #ebcb8b;
908
+ --wm-color-completed: #94b894;
909
+ --wm-color-epic-text: #ffffff;
910
+ --wm-color-initiative-text: #161817;
911
+
912
+ /* Shadows — Deeper contrast for stone depth */
913
+ --wm-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.5);
914
+ --wm-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.6);
915
+ --wm-shadow-lg: 0 10px 30px rgba(0, 0, 0, 0.7);
916
+
917
+ /* Overlay */
918
+ --wm-backdrop-opacity: 0.55;
919
+
920
+ /* Syntax highlighting — Sage and Stone inspired */
921
+ --wm-syntax-keyword: #98b498;
922
+ --wm-syntax-string: #b0c8b0;
923
+ --wm-syntax-comment: #6c7570;
924
+ --wm-syntax-number: #d8dee9;
925
+ --wm-syntax-function: #e2e8e2;
926
+ --wm-syntax-type: #b8c2b8;
927
+ --wm-syntax-variable: #a3be8c;
928
+ --wm-syntax-attr: #98b498;
929
+ --wm-syntax-builtin: #ebcb8b;
930
+ }
931
+
932
+ /* ================================================================
933
+ Sage & Linen (a lighter take on Wildmason)
934
+ ================================================================ */
935
+ [data-theme='sage-linen'] {
936
+ color-scheme: light;
937
+
938
+ /* Surfaces — cool eucalyptus, low chroma */
939
+ --wm-bg-base: #d4ded4;
940
+ --wm-bg-raised: #c5d1c5;
941
+ --wm-bg-float: #e6efe5;
942
+ --wm-bg-sunken: #dde6dc;
943
+ --wm-bg-hover: #d8e2d7;
944
+ --wm-bg-foreground: #b3c1b3;
945
+
946
+ /* Text */
947
+ --wm-text-primary: #1e2822;
948
+ --wm-text-secondary: #3a4a40;
949
+ --wm-text-muted: #4a5b4f;
950
+ --wm-text-placeholder: #94a298;
951
+
952
+ /* Borders */
953
+ --wm-border: #bcc5b8;
954
+ --wm-border-subtle: #ccd4c8;
955
+ --wm-border-hover: #3a5a43;
956
+ --wm-border-input: #788876;
957
+
958
+ /* Accent — deep forest green */
959
+ --wm-color-accent: #3a5a43;
960
+ --wm-color-accent-hover: #2c4733;
961
+ --wm-color-accent-text: #eaf0e7;
962
+
963
+ /* Semantic */
964
+ --wm-color-success: #3a6b48;
965
+ --wm-color-warning: #8a5a1f;
966
+ --wm-color-danger: #ac3838;
967
+
968
+ /* Item types */
969
+ --wm-color-task: #3a5a43;
970
+ --wm-color-bug: #ac3838;
971
+ --wm-color-story: #3a6b48;
972
+ --wm-color-epic: #6b4a7a;
973
+ --wm-color-initiative: #8a5a1f;
974
+ --wm-color-completed: #4a6a80;
975
+ --wm-color-epic-text: #ffffff;
976
+ --wm-color-initiative-text: #ffffff;
977
+
978
+ /* Shadows — forest-ink tinted */
979
+ --wm-shadow-sm: 0 1px 2px rgba(30, 40, 34, 0.07);
980
+ --wm-shadow-md: 0 4px 8px rgba(30, 40, 34, 0.1);
981
+ --wm-shadow-lg: 0 10px 20px rgba(30, 40, 34, 0.12);
982
+
983
+ /* Overlay */
984
+ --wm-backdrop-opacity: 0.35;
985
+
986
+ /* Syntax highlighting */
987
+ --wm-syntax-keyword: #7a2e6b;
988
+ --wm-syntax-string: #3a6b48;
989
+ --wm-syntax-comment: #8a958a;
990
+ --wm-syntax-number: #8a5a1f;
991
+ --wm-syntax-function: #3a5a43;
992
+ --wm-syntax-type: #8a6d1f;
993
+ --wm-syntax-variable: #ac3838;
994
+ --wm-syntax-attr: #8a5a1f;
995
+ --wm-syntax-builtin: #4a6a80;
996
+ }