@cahyo-dimas/freeday 3.6.0 → 3.8.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/CHANGELOG.md +139 -0
- package/COMPONENTS.md +119 -6
- package/README.id.md +19 -6
- package/README.md +17 -5
- package/USAGE.md +42 -0
- package/adapters/blazor/FdyDatepicker.razor +3 -1
- package/adapters/blazor/FdyDatepicker.razor.cs +22 -1
- package/adapters/blazor/FdyTableFooter.razor +6 -6
- package/adapters/blazor/FdyTableFooter.razor.cs +36 -0
- package/adapters/react/components/FdyDatepicker.tsx +122 -42
- package/adapters/react/components/FdyTableFooter.tsx +37 -6
- package/adapters/react/index.d.ts +1 -1
- package/adapters/vue/components/FdyDatepicker.vue +119 -34
- package/adapters/vue/components/FdyTableFooter.vue +39 -6
- package/dist/freeday-datepicker.js +68 -14
- package/dist/freeday-menu.js +15 -1
- package/dist/freeday-popover.js +33 -11
- package/dist/freeday-tabs.js +21 -2
- package/dist/freeday.bundle.css +493 -117
- package/dist/freeday.css +190 -113
- package/dist/freeday.js +137 -28
- package/dist/freeday.tokens.css +303 -4
- package/docs/getting-started.md +1 -1
- package/package.json +2 -2
- package/src/base.css +1 -1
- package/src/components/accordion.css +1 -1
- package/src/components/alert.css +5 -5
- package/src/components/app-shell.css +2 -2
- package/src/components/appbar.css +3 -3
- package/src/components/avatar.css +15 -9
- package/src/components/badge.css +18 -14
- package/src/components/breadcrumb.css +1 -1
- package/src/components/button.css +21 -13
- package/src/components/carousel.css +3 -3
- package/src/components/cascade.css +4 -4
- package/src/components/chip.css +33 -15
- package/src/components/combo.css +5 -5
- package/src/components/datepicker.css +8 -8
- package/src/components/file-upload.css +9 -4
- package/src/components/input-group.css +2 -2
- package/src/components/input.css +2 -2
- package/src/components/menu.css +3 -3
- package/src/components/pagination.css +1 -1
- package/src/components/selection.css +2 -2
- package/src/components/skeleton.css +1 -1
- package/src/components/stepper.css +1 -1
- package/src/components/table.css +12 -7
- package/src/components/tabs.css +32 -1
- package/src/components/timepicker.css +3 -3
- package/src/components/toast.css +1 -1
- package/src/components/tree.css +1 -1
- package/tokens/tokens.json +57 -4
package/dist/freeday.bundle.css
CHANGED
|
@@ -245,6 +245,7 @@
|
|
|
245
245
|
--color-surface: var(--slate-0);
|
|
246
246
|
--color-surface-2: var(--slate-50);
|
|
247
247
|
--color-surface-3: var(--slate-100);
|
|
248
|
+
--color-surface-stripe: #fbfbfc;
|
|
248
249
|
--color-surface-raised: var(--color-surface);
|
|
249
250
|
--color-scrim: rgba(10,12,25,.5);
|
|
250
251
|
--color-text: var(--slate-900);
|
|
@@ -267,11 +268,21 @@
|
|
|
267
268
|
--color-danger-soft: var(--red-100);
|
|
268
269
|
--color-info: var(--blue-600);
|
|
269
270
|
--color-info-soft: var(--blue-100);
|
|
271
|
+
--color-danger-border: #de979c;
|
|
270
272
|
--color-primary-strong: var(--primary-700);
|
|
271
273
|
--color-success-strong: var(--green-800);
|
|
272
274
|
--color-warning-strong: var(--amber-800);
|
|
273
275
|
--color-danger-strong: var(--red-700);
|
|
274
276
|
--color-info-strong: var(--blue-700);
|
|
277
|
+
--color-primary-rgb: var(--primary-600-rgb);
|
|
278
|
+
--color-on-primary-rgb: var(--slate-0-rgb);
|
|
279
|
+
--color-danger-rgb: var(--red-600-rgb);
|
|
280
|
+
--color-danger-btn-rgb: var(--red-600-rgb);
|
|
281
|
+
--color-success-rgb: var(--green-600-rgb);
|
|
282
|
+
--color-warning-rgb: 194,116,10;
|
|
283
|
+
--color-info-rgb: var(--blue-600-rgb);
|
|
284
|
+
--color-surface-rgb: var(--slate-0-rgb);
|
|
285
|
+
--color-inverse-text-rgb: var(--slate-0-rgb);
|
|
275
286
|
--chart-1: #2a78d6;
|
|
276
287
|
--chart-2: #eb6834;
|
|
277
288
|
--chart-3: #1baf7a;
|
|
@@ -290,10 +301,55 @@
|
|
|
290
301
|
--tone-6: var(--chart-6);
|
|
291
302
|
--tone-7: var(--chart-7);
|
|
292
303
|
--tone-8: var(--chart-8);
|
|
304
|
+
--tone-1-bg: #d9e7f8;
|
|
305
|
+
--tone-2-bg: #fbe4da;
|
|
306
|
+
--tone-3-bg: #d6f1e7;
|
|
307
|
+
--tone-4-bg: #fceed1;
|
|
308
|
+
--tone-5-bg: #fbe7ef;
|
|
309
|
+
--tone-6-bg: #d1e9d1;
|
|
310
|
+
--tone-7-bg: #dedcef;
|
|
311
|
+
--tone-8-bg: #fadede;
|
|
312
|
+
--tone-1-ink: #214a7e;
|
|
313
|
+
--tone-2-ink: #81422d;
|
|
314
|
+
--tone-3-ink: #196550;
|
|
315
|
+
--tone-4-ink: #825e13;
|
|
316
|
+
--tone-5-ink: #804b65;
|
|
317
|
+
--tone-6-ink: #0c4f13;
|
|
318
|
+
--tone-7-ink: #312b67;
|
|
319
|
+
--tone-8-ink: #7d3237;
|
|
320
|
+
--tone-1-border: #a9c3e4;
|
|
321
|
+
--tone-2-border: #e3beb3;
|
|
322
|
+
--tone-3-border: #a5d3c8;
|
|
323
|
+
--tone-4-border: #e4cfa4;
|
|
324
|
+
--tone-5-border: #e2c4d5;
|
|
325
|
+
--tone-6-border: #9dc6a4;
|
|
326
|
+
--tone-7-border: #b3b0d6;
|
|
327
|
+
--tone-8-border: #e1b5b9;
|
|
328
|
+
--tone-1-border-soft: rgba(42,120,214,.26);
|
|
329
|
+
--tone-2-border-soft: rgba(235,104,52,.26);
|
|
330
|
+
--tone-3-border-soft: rgba(27,175,122,.26);
|
|
331
|
+
--tone-4-border-soft: rgba(237,161,0,.26);
|
|
332
|
+
--tone-5-border-soft: rgba(232,123,164,.26);
|
|
333
|
+
--tone-6-border-soft: rgba(0,131,0,.26);
|
|
334
|
+
--tone-7-border-soft: rgba(74,58,167,.26);
|
|
335
|
+
--tone-8-border-soft: rgba(227,73,72,.26);
|
|
293
336
|
--surface-filter: none;
|
|
294
337
|
--surface-inset: inset 0 0 0 0 transparent;
|
|
295
338
|
--focus-ring: var(--primary-600);
|
|
296
339
|
--focus-ring-width: 2px;
|
|
340
|
+
--amber-500-rgb: 245,158,11;
|
|
341
|
+
--blue-400-rgb: 96,165,250;
|
|
342
|
+
--blue-600-rgb: 37,99,235;
|
|
343
|
+
--green-500-rgb: 34,197,94;
|
|
344
|
+
--green-600-rgb: 22,163,74;
|
|
345
|
+
--primary-400-rgb: 92,139,246;
|
|
346
|
+
--primary-500-rgb: 52,103,236;
|
|
347
|
+
--primary-600-rgb: 32,80,216;
|
|
348
|
+
--red-400-rgb: 248,113,113;
|
|
349
|
+
--red-600-rgb: 220,38,38;
|
|
350
|
+
--slate-0-rgb: 255,255,255;
|
|
351
|
+
--slate-900-rgb: 23,27,38;
|
|
352
|
+
--slate-950-rgb: 14,17,26;
|
|
297
353
|
}
|
|
298
354
|
/* The SYSTEM default stays root-scoped: it is a statement about the document, and dropping :root
|
|
299
355
|
* here would match every element that is not itself [data-theme="light"], which would re-darken
|
|
@@ -310,8 +366,8 @@
|
|
|
310
366
|
--color-primary-hover: var(--primary-400);
|
|
311
367
|
--color-primary-active: var(--primary-300);
|
|
312
368
|
--color-on-primary: var(--slate-0);
|
|
313
|
-
--color-primary-soft:
|
|
314
|
-
--color-primary-border:
|
|
369
|
+
--color-primary-soft: rgba(var(--primary-600-rgb), .2);
|
|
370
|
+
--color-primary-border: rgba(var(--primary-400-rgb), .28);
|
|
315
371
|
--color-accent: var(--sky-400);
|
|
316
372
|
--color-accent-hover: var(--sky-300);
|
|
317
373
|
--color-on-accent: #06233f;
|
|
@@ -320,6 +376,7 @@
|
|
|
320
376
|
--color-surface: var(--slate-950);
|
|
321
377
|
--color-surface-2: var(--slate-900);
|
|
322
378
|
--color-surface-3: var(--slate-800);
|
|
379
|
+
--color-surface-stripe: #131721;
|
|
323
380
|
--color-surface-raised: var(--color-surface);
|
|
324
381
|
--color-text: var(--slate-100);
|
|
325
382
|
--color-text-muted: var(--slate-400);
|
|
@@ -339,11 +396,19 @@
|
|
|
339
396
|
--color-danger-soft: rgba(248,113,113,.18);
|
|
340
397
|
--color-info: var(--blue-400);
|
|
341
398
|
--color-info-soft: rgba(96,165,250,.18);
|
|
399
|
+
--color-danger-border: #7a474f;
|
|
342
400
|
--color-primary-strong: var(--primary-300);
|
|
343
401
|
--color-success-strong: var(--green-400);
|
|
344
402
|
--color-warning-strong: var(--amber-400);
|
|
345
403
|
--color-danger-strong: var(--red-300);
|
|
346
404
|
--color-info-strong: var(--blue-300);
|
|
405
|
+
--color-primary-rgb: var(--primary-500-rgb);
|
|
406
|
+
--color-danger-rgb: var(--red-400-rgb);
|
|
407
|
+
--color-success-rgb: var(--green-500-rgb);
|
|
408
|
+
--color-warning-rgb: var(--amber-500-rgb);
|
|
409
|
+
--color-info-rgb: var(--blue-400-rgb);
|
|
410
|
+
--color-surface-rgb: var(--slate-950-rgb);
|
|
411
|
+
--color-inverse-text-rgb: var(--slate-900-rgb);
|
|
347
412
|
--chart-1: #3987e5;
|
|
348
413
|
--chart-2: #d95926;
|
|
349
414
|
--chart-3: #199e70;
|
|
@@ -354,6 +419,37 @@
|
|
|
354
419
|
--chart-8: #e66767;
|
|
355
420
|
--chart-grid: var(--slate-800);
|
|
356
421
|
--chart-tick: var(--slate-600);
|
|
422
|
+
--tone-1-bg: #16263f;
|
|
423
|
+
--tone-2-bg: #331e1c;
|
|
424
|
+
--tone-3-bg: #102a29;
|
|
425
|
+
--tone-4-bg: #302615;
|
|
426
|
+
--tone-5-bg: #321d2d;
|
|
427
|
+
--tone-6-bg: #0b2615;
|
|
428
|
+
--tone-7-bg: #25263f;
|
|
429
|
+
--tone-8-bg: #352028;
|
|
430
|
+
--tone-1-ink: #94bced;
|
|
431
|
+
--tone-2-ink: #e4a58d;
|
|
432
|
+
--tone-3-ink: #84c7b2;
|
|
433
|
+
--tone-4-ink: #dcbb7a;
|
|
434
|
+
--tone-5-ink: #e2a1bb;
|
|
435
|
+
--tone-6-ink: #77ba7a;
|
|
436
|
+
--tone-7-ink: #bfbbef;
|
|
437
|
+
--tone-8-ink: #eaacae;
|
|
438
|
+
--tone-1-border: #2c476c;
|
|
439
|
+
--tone-2-border: #5c3933;
|
|
440
|
+
--tone-3-border: #224e49;
|
|
441
|
+
--tone-4-border: #574627;
|
|
442
|
+
--tone-5-border: #5b364e;
|
|
443
|
+
--tone-6-border: #1b4527;
|
|
444
|
+
--tone-7-border: #46466d;
|
|
445
|
+
--tone-8-border: #603d46;
|
|
446
|
+
--tone-1-border-soft: rgba(57,135,229,.26);
|
|
447
|
+
--tone-2-border-soft: rgba(217,89,38,.26);
|
|
448
|
+
--tone-3-border-soft: rgba(25,158,112,.26);
|
|
449
|
+
--tone-4-border-soft: rgba(201,133,0,.26);
|
|
450
|
+
--tone-5-border-soft: rgba(213,81,129,.26);
|
|
451
|
+
--tone-7-border-soft: rgba(144,133,233,.26);
|
|
452
|
+
--tone-8-border-soft: rgba(230,103,103,.26);
|
|
357
453
|
--focus-ring: var(--primary-400);
|
|
358
454
|
}
|
|
359
455
|
}
|
|
@@ -374,8 +470,8 @@
|
|
|
374
470
|
--color-primary-hover: var(--primary-400);
|
|
375
471
|
--color-primary-active: var(--primary-300);
|
|
376
472
|
--color-on-primary: var(--slate-0);
|
|
377
|
-
--color-primary-soft:
|
|
378
|
-
--color-primary-border:
|
|
473
|
+
--color-primary-soft: rgba(var(--primary-600-rgb), .2);
|
|
474
|
+
--color-primary-border: rgba(var(--primary-400-rgb), .28);
|
|
379
475
|
--color-accent: var(--sky-400);
|
|
380
476
|
--color-accent-hover: var(--sky-300);
|
|
381
477
|
--color-on-accent: #06233f;
|
|
@@ -384,6 +480,7 @@
|
|
|
384
480
|
--color-surface: var(--slate-950);
|
|
385
481
|
--color-surface-2: var(--slate-900);
|
|
386
482
|
--color-surface-3: var(--slate-800);
|
|
483
|
+
--color-surface-stripe: #131721;
|
|
387
484
|
--color-surface-raised: var(--color-surface);
|
|
388
485
|
--color-text: var(--slate-100);
|
|
389
486
|
--color-text-muted: var(--slate-400);
|
|
@@ -403,11 +500,19 @@
|
|
|
403
500
|
--color-danger-soft: rgba(248,113,113,.18);
|
|
404
501
|
--color-info: var(--blue-400);
|
|
405
502
|
--color-info-soft: rgba(96,165,250,.18);
|
|
503
|
+
--color-danger-border: #7a474f;
|
|
406
504
|
--color-primary-strong: var(--primary-300);
|
|
407
505
|
--color-success-strong: var(--green-400);
|
|
408
506
|
--color-warning-strong: var(--amber-400);
|
|
409
507
|
--color-danger-strong: var(--red-300);
|
|
410
508
|
--color-info-strong: var(--blue-300);
|
|
509
|
+
--color-primary-rgb: var(--primary-500-rgb);
|
|
510
|
+
--color-danger-rgb: var(--red-400-rgb);
|
|
511
|
+
--color-success-rgb: var(--green-500-rgb);
|
|
512
|
+
--color-warning-rgb: var(--amber-500-rgb);
|
|
513
|
+
--color-info-rgb: var(--blue-400-rgb);
|
|
514
|
+
--color-surface-rgb: var(--slate-950-rgb);
|
|
515
|
+
--color-inverse-text-rgb: var(--slate-900-rgb);
|
|
411
516
|
--chart-1: #3987e5;
|
|
412
517
|
--chart-2: #d95926;
|
|
413
518
|
--chart-3: #199e70;
|
|
@@ -418,6 +523,37 @@
|
|
|
418
523
|
--chart-8: #e66767;
|
|
419
524
|
--chart-grid: var(--slate-800);
|
|
420
525
|
--chart-tick: var(--slate-600);
|
|
526
|
+
--tone-1-bg: #16263f;
|
|
527
|
+
--tone-2-bg: #331e1c;
|
|
528
|
+
--tone-3-bg: #102a29;
|
|
529
|
+
--tone-4-bg: #302615;
|
|
530
|
+
--tone-5-bg: #321d2d;
|
|
531
|
+
--tone-6-bg: #0b2615;
|
|
532
|
+
--tone-7-bg: #25263f;
|
|
533
|
+
--tone-8-bg: #352028;
|
|
534
|
+
--tone-1-ink: #94bced;
|
|
535
|
+
--tone-2-ink: #e4a58d;
|
|
536
|
+
--tone-3-ink: #84c7b2;
|
|
537
|
+
--tone-4-ink: #dcbb7a;
|
|
538
|
+
--tone-5-ink: #e2a1bb;
|
|
539
|
+
--tone-6-ink: #77ba7a;
|
|
540
|
+
--tone-7-ink: #bfbbef;
|
|
541
|
+
--tone-8-ink: #eaacae;
|
|
542
|
+
--tone-1-border: #2c476c;
|
|
543
|
+
--tone-2-border: #5c3933;
|
|
544
|
+
--tone-3-border: #224e49;
|
|
545
|
+
--tone-4-border: #574627;
|
|
546
|
+
--tone-5-border: #5b364e;
|
|
547
|
+
--tone-6-border: #1b4527;
|
|
548
|
+
--tone-7-border: #46466d;
|
|
549
|
+
--tone-8-border: #603d46;
|
|
550
|
+
--tone-1-border-soft: rgba(57,135,229,.26);
|
|
551
|
+
--tone-2-border-soft: rgba(217,89,38,.26);
|
|
552
|
+
--tone-3-border-soft: rgba(25,158,112,.26);
|
|
553
|
+
--tone-4-border-soft: rgba(201,133,0,.26);
|
|
554
|
+
--tone-5-border-soft: rgba(213,81,129,.26);
|
|
555
|
+
--tone-7-border-soft: rgba(144,133,233,.26);
|
|
556
|
+
--tone-8-border-soft: rgba(230,103,103,.26);
|
|
421
557
|
--focus-ring: var(--primary-400);
|
|
422
558
|
}
|
|
423
559
|
[data-theme="light"] {
|
|
@@ -441,6 +577,7 @@
|
|
|
441
577
|
--color-surface: var(--slate-0);
|
|
442
578
|
--color-surface-2: var(--slate-50);
|
|
443
579
|
--color-surface-3: var(--slate-100);
|
|
580
|
+
--color-surface-stripe: #fbfbfc;
|
|
444
581
|
--color-surface-raised: var(--color-surface);
|
|
445
582
|
--color-text: var(--slate-900);
|
|
446
583
|
--color-text-muted: var(--slate-600);
|
|
@@ -460,11 +597,19 @@
|
|
|
460
597
|
--color-danger-soft: var(--red-100);
|
|
461
598
|
--color-info: var(--blue-600);
|
|
462
599
|
--color-info-soft: var(--blue-100);
|
|
600
|
+
--color-danger-border: #de979c;
|
|
463
601
|
--color-primary-strong: var(--primary-700);
|
|
464
602
|
--color-success-strong: var(--green-800);
|
|
465
603
|
--color-warning-strong: var(--amber-800);
|
|
466
604
|
--color-danger-strong: var(--red-700);
|
|
467
605
|
--color-info-strong: var(--blue-700);
|
|
606
|
+
--color-primary-rgb: var(--primary-600-rgb);
|
|
607
|
+
--color-danger-rgb: var(--red-600-rgb);
|
|
608
|
+
--color-success-rgb: var(--green-600-rgb);
|
|
609
|
+
--color-warning-rgb: 194,116,10;
|
|
610
|
+
--color-info-rgb: var(--blue-600-rgb);
|
|
611
|
+
--color-surface-rgb: var(--slate-0-rgb);
|
|
612
|
+
--color-inverse-text-rgb: var(--slate-0-rgb);
|
|
468
613
|
--chart-1: #2a78d6;
|
|
469
614
|
--chart-2: #eb6834;
|
|
470
615
|
--chart-3: #1baf7a;
|
|
@@ -475,6 +620,37 @@
|
|
|
475
620
|
--chart-8: #e34948;
|
|
476
621
|
--chart-grid: var(--slate-200);
|
|
477
622
|
--chart-tick: var(--slate-400);
|
|
623
|
+
--tone-1-bg: #d9e7f8;
|
|
624
|
+
--tone-2-bg: #fbe4da;
|
|
625
|
+
--tone-3-bg: #d6f1e7;
|
|
626
|
+
--tone-4-bg: #fceed1;
|
|
627
|
+
--tone-5-bg: #fbe7ef;
|
|
628
|
+
--tone-6-bg: #d1e9d1;
|
|
629
|
+
--tone-7-bg: #dedcef;
|
|
630
|
+
--tone-8-bg: #fadede;
|
|
631
|
+
--tone-1-ink: #214a7e;
|
|
632
|
+
--tone-2-ink: #81422d;
|
|
633
|
+
--tone-3-ink: #196550;
|
|
634
|
+
--tone-4-ink: #825e13;
|
|
635
|
+
--tone-5-ink: #804b65;
|
|
636
|
+
--tone-6-ink: #0c4f13;
|
|
637
|
+
--tone-7-ink: #312b67;
|
|
638
|
+
--tone-8-ink: #7d3237;
|
|
639
|
+
--tone-1-border: #a9c3e4;
|
|
640
|
+
--tone-2-border: #e3beb3;
|
|
641
|
+
--tone-3-border: #a5d3c8;
|
|
642
|
+
--tone-4-border: #e4cfa4;
|
|
643
|
+
--tone-5-border: #e2c4d5;
|
|
644
|
+
--tone-6-border: #9dc6a4;
|
|
645
|
+
--tone-7-border: #b3b0d6;
|
|
646
|
+
--tone-8-border: #e1b5b9;
|
|
647
|
+
--tone-1-border-soft: rgba(42,120,214,.26);
|
|
648
|
+
--tone-2-border-soft: rgba(235,104,52,.26);
|
|
649
|
+
--tone-3-border-soft: rgba(27,175,122,.26);
|
|
650
|
+
--tone-4-border-soft: rgba(237,161,0,.26);
|
|
651
|
+
--tone-5-border-soft: rgba(232,123,164,.26);
|
|
652
|
+
--tone-7-border-soft: rgba(74,58,167,.26);
|
|
653
|
+
--tone-8-border-soft: rgba(227,73,72,.26);
|
|
478
654
|
--focus-ring: var(--primary-600);
|
|
479
655
|
}
|
|
480
656
|
/* Density is deliberately NOT scoped to :root. These are custom properties, so they inherit,
|
|
@@ -534,7 +710,11 @@
|
|
|
534
710
|
--primary-600: var(--azure-600);
|
|
535
711
|
--primary-700: var(--azure-700);
|
|
536
712
|
--primary-800: var(--azure-800);
|
|
713
|
+
--primary-400-rgb: 92,139,246;
|
|
714
|
+
--primary-500-rgb: 52,103,236;
|
|
715
|
+
--primary-600-rgb: 32,80,216;
|
|
537
716
|
--color-on-primary: var(--slate-0);
|
|
717
|
+
--color-on-primary-rgb: var(--slate-0-rgb);
|
|
538
718
|
}
|
|
539
719
|
[data-primary="sky"] {
|
|
540
720
|
--primary-50: var(--sky-50);
|
|
@@ -545,18 +725,25 @@
|
|
|
545
725
|
--primary-600: var(--sky-600);
|
|
546
726
|
--primary-700: var(--sky-700);
|
|
547
727
|
--primary-800: var(--sky-800);
|
|
728
|
+
--primary-400-rgb: 71,161,230;
|
|
729
|
+
--primary-500-rgb: 26,134,220;
|
|
730
|
+
--primary-600-rgb: 0,120,212;
|
|
548
731
|
--color-on-primary: var(--slate-0);
|
|
732
|
+
--color-on-primary-rgb: var(--slate-0-rgb);
|
|
549
733
|
}
|
|
550
734
|
@media (prefers-color-scheme: dark) {
|
|
551
735
|
:root:not([data-theme="light"])[data-primary="sky"] {
|
|
552
736
|
--color-on-primary: var(--slate-950);
|
|
737
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
553
738
|
}
|
|
554
739
|
}
|
|
555
740
|
[data-theme="dark"][data-primary="sky"] {
|
|
556
741
|
--color-on-primary: var(--slate-950);
|
|
742
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
557
743
|
}
|
|
558
744
|
[data-theme="light"][data-primary="sky"] {
|
|
559
745
|
--color-on-primary: var(--slate-0);
|
|
746
|
+
--color-on-primary-rgb: var(--slate-0-rgb);
|
|
560
747
|
}
|
|
561
748
|
[data-primary="blue"] {
|
|
562
749
|
--primary-50: var(--blue-50);
|
|
@@ -567,18 +754,25 @@
|
|
|
567
754
|
--primary-600: var(--blue-600);
|
|
568
755
|
--primary-700: var(--blue-700);
|
|
569
756
|
--primary-800: var(--blue-800);
|
|
757
|
+
--primary-400-rgb: 96,165,250;
|
|
758
|
+
--primary-500-rgb: 59,130,246;
|
|
759
|
+
--primary-600-rgb: 37,99,235;
|
|
570
760
|
--color-on-primary: var(--slate-0);
|
|
761
|
+
--color-on-primary-rgb: var(--slate-0-rgb);
|
|
571
762
|
}
|
|
572
763
|
@media (prefers-color-scheme: dark) {
|
|
573
764
|
:root:not([data-theme="light"])[data-primary="blue"] {
|
|
574
765
|
--color-on-primary: var(--slate-950);
|
|
766
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
575
767
|
}
|
|
576
768
|
}
|
|
577
769
|
[data-theme="dark"][data-primary="blue"] {
|
|
578
770
|
--color-on-primary: var(--slate-950);
|
|
771
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
579
772
|
}
|
|
580
773
|
[data-theme="light"][data-primary="blue"] {
|
|
581
774
|
--color-on-primary: var(--slate-0);
|
|
775
|
+
--color-on-primary-rgb: var(--slate-0-rgb);
|
|
582
776
|
}
|
|
583
777
|
[data-primary="indigo"] {
|
|
584
778
|
--primary-50: var(--indigo-50);
|
|
@@ -589,27 +783,40 @@
|
|
|
589
783
|
--primary-600: var(--indigo-600);
|
|
590
784
|
--primary-700: var(--indigo-700);
|
|
591
785
|
--primary-800: var(--indigo-800);
|
|
786
|
+
--primary-400-rgb: 129,140,248;
|
|
787
|
+
--primary-500-rgb: 99,102,241;
|
|
788
|
+
--primary-600-rgb: 79,70,229;
|
|
592
789
|
--color-on-primary: var(--slate-0);
|
|
790
|
+
--color-on-primary-rgb: var(--slate-0-rgb);
|
|
593
791
|
}
|
|
594
792
|
@media (prefers-color-scheme: dark) {
|
|
595
793
|
:root:not([data-theme="light"])[data-primary="indigo"] {
|
|
596
794
|
--primary-300: var(--indigo-200);
|
|
597
795
|
--primary-400: var(--indigo-300);
|
|
598
796
|
--primary-500: var(--indigo-400);
|
|
797
|
+
--primary-400-rgb: 165,180,252;
|
|
798
|
+
--primary-500-rgb: 129,140,248;
|
|
599
799
|
--color-on-primary: var(--slate-950);
|
|
800
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
600
801
|
}
|
|
601
802
|
}
|
|
602
803
|
[data-theme="dark"][data-primary="indigo"] {
|
|
603
804
|
--primary-300: var(--indigo-200);
|
|
604
805
|
--primary-400: var(--indigo-300);
|
|
605
806
|
--primary-500: var(--indigo-400);
|
|
807
|
+
--primary-400-rgb: 165,180,252;
|
|
808
|
+
--primary-500-rgb: 129,140,248;
|
|
606
809
|
--color-on-primary: var(--slate-950);
|
|
810
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
607
811
|
}
|
|
608
812
|
[data-theme="light"][data-primary="indigo"] {
|
|
609
813
|
--primary-300: var(--indigo-300);
|
|
610
814
|
--primary-400: var(--indigo-400);
|
|
611
815
|
--primary-500: var(--indigo-500);
|
|
816
|
+
--primary-400-rgb: 129,140,248;
|
|
817
|
+
--primary-500-rgb: 99,102,241;
|
|
612
818
|
--color-on-primary: var(--slate-0);
|
|
819
|
+
--color-on-primary-rgb: var(--slate-0-rgb);
|
|
613
820
|
}
|
|
614
821
|
[data-primary="violet"] {
|
|
615
822
|
--primary-50: var(--violet-50);
|
|
@@ -620,27 +827,40 @@
|
|
|
620
827
|
--primary-600: var(--violet-600);
|
|
621
828
|
--primary-700: var(--violet-700);
|
|
622
829
|
--primary-800: var(--violet-800);
|
|
830
|
+
--primary-400-rgb: 167,139,250;
|
|
831
|
+
--primary-500-rgb: 139,92,246;
|
|
832
|
+
--primary-600-rgb: 124,58,237;
|
|
623
833
|
--color-on-primary: var(--slate-0);
|
|
834
|
+
--color-on-primary-rgb: var(--slate-0-rgb);
|
|
624
835
|
}
|
|
625
836
|
@media (prefers-color-scheme: dark) {
|
|
626
837
|
:root:not([data-theme="light"])[data-primary="violet"] {
|
|
627
838
|
--primary-300: var(--violet-200);
|
|
628
839
|
--primary-400: var(--violet-300);
|
|
629
840
|
--primary-500: var(--violet-400);
|
|
841
|
+
--primary-400-rgb: 196,181,253;
|
|
842
|
+
--primary-500-rgb: 167,139,250;
|
|
630
843
|
--color-on-primary: var(--slate-950);
|
|
844
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
631
845
|
}
|
|
632
846
|
}
|
|
633
847
|
[data-theme="dark"][data-primary="violet"] {
|
|
634
848
|
--primary-300: var(--violet-200);
|
|
635
849
|
--primary-400: var(--violet-300);
|
|
636
850
|
--primary-500: var(--violet-400);
|
|
851
|
+
--primary-400-rgb: 196,181,253;
|
|
852
|
+
--primary-500-rgb: 167,139,250;
|
|
637
853
|
--color-on-primary: var(--slate-950);
|
|
854
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
638
855
|
}
|
|
639
856
|
[data-theme="light"][data-primary="violet"] {
|
|
640
857
|
--primary-300: var(--violet-300);
|
|
641
858
|
--primary-400: var(--violet-400);
|
|
642
859
|
--primary-500: var(--violet-500);
|
|
860
|
+
--primary-400-rgb: 167,139,250;
|
|
861
|
+
--primary-500-rgb: 139,92,246;
|
|
643
862
|
--color-on-primary: var(--slate-0);
|
|
863
|
+
--color-on-primary-rgb: var(--slate-0-rgb);
|
|
644
864
|
}
|
|
645
865
|
[data-primary="purple"] {
|
|
646
866
|
--primary-50: var(--purple-50);
|
|
@@ -651,18 +871,25 @@
|
|
|
651
871
|
--primary-600: var(--purple-600);
|
|
652
872
|
--primary-700: var(--purple-700);
|
|
653
873
|
--primary-800: var(--purple-800);
|
|
874
|
+
--primary-400-rgb: 192,132,252;
|
|
875
|
+
--primary-500-rgb: 168,85,247;
|
|
876
|
+
--primary-600-rgb: 147,51,234;
|
|
654
877
|
--color-on-primary: var(--slate-0);
|
|
878
|
+
--color-on-primary-rgb: var(--slate-0-rgb);
|
|
655
879
|
}
|
|
656
880
|
@media (prefers-color-scheme: dark) {
|
|
657
881
|
:root:not([data-theme="light"])[data-primary="purple"] {
|
|
658
882
|
--color-on-primary: var(--slate-950);
|
|
883
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
659
884
|
}
|
|
660
885
|
}
|
|
661
886
|
[data-theme="dark"][data-primary="purple"] {
|
|
662
887
|
--color-on-primary: var(--slate-950);
|
|
888
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
663
889
|
}
|
|
664
890
|
[data-theme="light"][data-primary="purple"] {
|
|
665
891
|
--color-on-primary: var(--slate-0);
|
|
892
|
+
--color-on-primary-rgb: var(--slate-0-rgb);
|
|
666
893
|
}
|
|
667
894
|
[data-primary="fuchsia"] {
|
|
668
895
|
--primary-50: var(--fuchsia-50);
|
|
@@ -673,18 +900,25 @@
|
|
|
673
900
|
--primary-600: var(--fuchsia-600);
|
|
674
901
|
--primary-700: var(--fuchsia-700);
|
|
675
902
|
--primary-800: var(--fuchsia-800);
|
|
903
|
+
--primary-400-rgb: 232,121,249;
|
|
904
|
+
--primary-500-rgb: 217,70,239;
|
|
905
|
+
--primary-600-rgb: 192,38,211;
|
|
676
906
|
--color-on-primary: var(--slate-0);
|
|
907
|
+
--color-on-primary-rgb: var(--slate-0-rgb);
|
|
677
908
|
}
|
|
678
909
|
@media (prefers-color-scheme: dark) {
|
|
679
910
|
:root:not([data-theme="light"])[data-primary="fuchsia"] {
|
|
680
911
|
--color-on-primary: var(--slate-950);
|
|
912
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
681
913
|
}
|
|
682
914
|
}
|
|
683
915
|
[data-theme="dark"][data-primary="fuchsia"] {
|
|
684
916
|
--color-on-primary: var(--slate-950);
|
|
917
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
685
918
|
}
|
|
686
919
|
[data-theme="light"][data-primary="fuchsia"] {
|
|
687
920
|
--color-on-primary: var(--slate-0);
|
|
921
|
+
--color-on-primary-rgb: var(--slate-0-rgb);
|
|
688
922
|
}
|
|
689
923
|
[data-primary="pink"] {
|
|
690
924
|
--primary-50: var(--pink-50);
|
|
@@ -695,18 +929,25 @@
|
|
|
695
929
|
--primary-600: var(--pink-600);
|
|
696
930
|
--primary-700: var(--pink-700);
|
|
697
931
|
--primary-800: var(--pink-800);
|
|
932
|
+
--primary-400-rgb: 244,114,182;
|
|
933
|
+
--primary-500-rgb: 236,72,153;
|
|
934
|
+
--primary-600-rgb: 219,39,119;
|
|
698
935
|
--color-on-primary: var(--slate-0);
|
|
936
|
+
--color-on-primary-rgb: var(--slate-0-rgb);
|
|
699
937
|
}
|
|
700
938
|
@media (prefers-color-scheme: dark) {
|
|
701
939
|
:root:not([data-theme="light"])[data-primary="pink"] {
|
|
702
940
|
--color-on-primary: var(--slate-950);
|
|
941
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
703
942
|
}
|
|
704
943
|
}
|
|
705
944
|
[data-theme="dark"][data-primary="pink"] {
|
|
706
945
|
--color-on-primary: var(--slate-950);
|
|
946
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
707
947
|
}
|
|
708
948
|
[data-theme="light"][data-primary="pink"] {
|
|
709
949
|
--color-on-primary: var(--slate-0);
|
|
950
|
+
--color-on-primary-rgb: var(--slate-0-rgb);
|
|
710
951
|
}
|
|
711
952
|
[data-primary="rose"] {
|
|
712
953
|
--primary-50: var(--rose-50);
|
|
@@ -717,18 +958,25 @@
|
|
|
717
958
|
--primary-600: var(--rose-600);
|
|
718
959
|
--primary-700: var(--rose-700);
|
|
719
960
|
--primary-800: var(--rose-800);
|
|
961
|
+
--primary-400-rgb: 251,113,133;
|
|
962
|
+
--primary-500-rgb: 244,63,94;
|
|
963
|
+
--primary-600-rgb: 225,29,72;
|
|
720
964
|
--color-on-primary: var(--slate-0);
|
|
965
|
+
--color-on-primary-rgb: var(--slate-0-rgb);
|
|
721
966
|
}
|
|
722
967
|
@media (prefers-color-scheme: dark) {
|
|
723
968
|
:root:not([data-theme="light"])[data-primary="rose"] {
|
|
724
969
|
--color-on-primary: var(--slate-950);
|
|
970
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
725
971
|
}
|
|
726
972
|
}
|
|
727
973
|
[data-theme="dark"][data-primary="rose"] {
|
|
728
974
|
--color-on-primary: var(--slate-950);
|
|
975
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
729
976
|
}
|
|
730
977
|
[data-theme="light"][data-primary="rose"] {
|
|
731
978
|
--color-on-primary: var(--slate-0);
|
|
979
|
+
--color-on-primary-rgb: var(--slate-0-rgb);
|
|
732
980
|
}
|
|
733
981
|
[data-primary="orange"] {
|
|
734
982
|
--primary-50: var(--orange-50);
|
|
@@ -739,7 +987,11 @@
|
|
|
739
987
|
--primary-600: var(--orange-600);
|
|
740
988
|
--primary-700: var(--orange-700);
|
|
741
989
|
--primary-800: var(--orange-800);
|
|
990
|
+
--primary-400-rgb: 251,146,60;
|
|
991
|
+
--primary-500-rgb: 249,115,22;
|
|
992
|
+
--primary-600-rgb: 234,88,12;
|
|
742
993
|
--color-on-primary: var(--slate-950);
|
|
994
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
743
995
|
}
|
|
744
996
|
[data-primary="amber"] {
|
|
745
997
|
--primary-50: var(--amber-50);
|
|
@@ -750,7 +1002,11 @@
|
|
|
750
1002
|
--primary-600: var(--amber-600);
|
|
751
1003
|
--primary-700: var(--amber-700);
|
|
752
1004
|
--primary-800: var(--amber-800);
|
|
1005
|
+
--primary-400-rgb: 251,191,36;
|
|
1006
|
+
--primary-500-rgb: 245,158,11;
|
|
1007
|
+
--primary-600-rgb: 217,119,6;
|
|
753
1008
|
--color-on-primary: var(--slate-950);
|
|
1009
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
754
1010
|
}
|
|
755
1011
|
[data-primary="yellow"] {
|
|
756
1012
|
--primary-50: var(--yellow-50);
|
|
@@ -761,18 +1017,25 @@
|
|
|
761
1017
|
--primary-600: var(--yellow-700);
|
|
762
1018
|
--primary-700: var(--yellow-800);
|
|
763
1019
|
--primary-800: var(--yellow-900);
|
|
1020
|
+
--primary-400-rgb: 250,204,21;
|
|
1021
|
+
--primary-500-rgb: 234,179,8;
|
|
1022
|
+
--primary-600-rgb: 161,98,7;
|
|
764
1023
|
--color-on-primary: var(--slate-0);
|
|
1024
|
+
--color-on-primary-rgb: var(--slate-0-rgb);
|
|
765
1025
|
}
|
|
766
1026
|
@media (prefers-color-scheme: dark) {
|
|
767
1027
|
:root:not([data-theme="light"])[data-primary="yellow"] {
|
|
768
1028
|
--color-on-primary: var(--slate-950);
|
|
1029
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
769
1030
|
}
|
|
770
1031
|
}
|
|
771
1032
|
[data-theme="dark"][data-primary="yellow"] {
|
|
772
1033
|
--color-on-primary: var(--slate-950);
|
|
1034
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
773
1035
|
}
|
|
774
1036
|
[data-theme="light"][data-primary="yellow"] {
|
|
775
1037
|
--color-on-primary: var(--slate-0);
|
|
1038
|
+
--color-on-primary-rgb: var(--slate-0-rgb);
|
|
776
1039
|
}
|
|
777
1040
|
[data-primary="lime"] {
|
|
778
1041
|
--primary-50: var(--lime-50);
|
|
@@ -783,7 +1046,11 @@
|
|
|
783
1046
|
--primary-600: var(--lime-600);
|
|
784
1047
|
--primary-700: var(--lime-700);
|
|
785
1048
|
--primary-800: var(--lime-800);
|
|
1049
|
+
--primary-400-rgb: 163,230,53;
|
|
1050
|
+
--primary-500-rgb: 132,204,22;
|
|
1051
|
+
--primary-600-rgb: 101,163,13;
|
|
786
1052
|
--color-on-primary: var(--slate-950);
|
|
1053
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
787
1054
|
}
|
|
788
1055
|
[data-primary="green"] {
|
|
789
1056
|
--primary-50: var(--green-50);
|
|
@@ -794,7 +1061,11 @@
|
|
|
794
1061
|
--primary-600: var(--green-600);
|
|
795
1062
|
--primary-700: var(--green-700);
|
|
796
1063
|
--primary-800: var(--green-800);
|
|
1064
|
+
--primary-400-rgb: 74,222,128;
|
|
1065
|
+
--primary-500-rgb: 34,197,94;
|
|
1066
|
+
--primary-600-rgb: 22,163,74;
|
|
797
1067
|
--color-on-primary: var(--slate-950);
|
|
1068
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
798
1069
|
}
|
|
799
1070
|
[data-primary="emerald"] {
|
|
800
1071
|
--primary-50: var(--emerald-50);
|
|
@@ -805,7 +1076,11 @@
|
|
|
805
1076
|
--primary-600: var(--emerald-600);
|
|
806
1077
|
--primary-700: var(--emerald-700);
|
|
807
1078
|
--primary-800: var(--emerald-800);
|
|
1079
|
+
--primary-400-rgb: 52,211,153;
|
|
1080
|
+
--primary-500-rgb: 16,185,129;
|
|
1081
|
+
--primary-600-rgb: 5,150,105;
|
|
808
1082
|
--color-on-primary: var(--slate-950);
|
|
1083
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
809
1084
|
}
|
|
810
1085
|
[data-primary="teal"] {
|
|
811
1086
|
--primary-50: var(--teal-50);
|
|
@@ -816,7 +1091,11 @@
|
|
|
816
1091
|
--primary-600: var(--teal-600);
|
|
817
1092
|
--primary-700: var(--teal-700);
|
|
818
1093
|
--primary-800: var(--teal-800);
|
|
1094
|
+
--primary-400-rgb: 45,212,191;
|
|
1095
|
+
--primary-500-rgb: 20,184,166;
|
|
1096
|
+
--primary-600-rgb: 13,148,136;
|
|
819
1097
|
--color-on-primary: var(--slate-950);
|
|
1098
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
820
1099
|
}
|
|
821
1100
|
[data-primary="cyan"] {
|
|
822
1101
|
--primary-50: var(--cyan-50);
|
|
@@ -827,7 +1106,11 @@
|
|
|
827
1106
|
--primary-600: var(--cyan-600);
|
|
828
1107
|
--primary-700: var(--cyan-700);
|
|
829
1108
|
--primary-800: var(--cyan-800);
|
|
1109
|
+
--primary-400-rgb: 34,211,238;
|
|
1110
|
+
--primary-500-rgb: 6,182,212;
|
|
1111
|
+
--primary-600-rgb: 8,145,178;
|
|
830
1112
|
--color-on-primary: var(--slate-950);
|
|
1113
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
831
1114
|
}
|
|
832
1115
|
[data-primary="noir"] {
|
|
833
1116
|
--primary-50: var(--slate-100);
|
|
@@ -838,7 +1121,11 @@
|
|
|
838
1121
|
--primary-600: var(--slate-900);
|
|
839
1122
|
--primary-700: var(--slate-800);
|
|
840
1123
|
--primary-800: var(--slate-950);
|
|
1124
|
+
--primary-400-rgb: 58,65,82;
|
|
1125
|
+
--primary-500-rgb: 38,43,56;
|
|
1126
|
+
--primary-600-rgb: 23,27,38;
|
|
841
1127
|
--color-on-primary: var(--slate-0);
|
|
1128
|
+
--color-on-primary-rgb: var(--slate-0-rgb);
|
|
842
1129
|
}
|
|
843
1130
|
@media (prefers-color-scheme: dark) {
|
|
844
1131
|
:root:not([data-theme="light"])[data-primary="noir"] {
|
|
@@ -850,7 +1137,11 @@
|
|
|
850
1137
|
--primary-600: var(--slate-50);
|
|
851
1138
|
--primary-700: var(--slate-200);
|
|
852
1139
|
--primary-800: var(--slate-300);
|
|
1140
|
+
--primary-400-rgb: 224,227,234;
|
|
1141
|
+
--primary-500-rgb: 238,240,244;
|
|
1142
|
+
--primary-600-rgb: 247,248,250;
|
|
853
1143
|
--color-on-primary: var(--slate-950);
|
|
1144
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
854
1145
|
}
|
|
855
1146
|
}
|
|
856
1147
|
[data-theme="dark"][data-primary="noir"] {
|
|
@@ -862,7 +1153,11 @@
|
|
|
862
1153
|
--primary-600: var(--slate-50);
|
|
863
1154
|
--primary-700: var(--slate-200);
|
|
864
1155
|
--primary-800: var(--slate-300);
|
|
1156
|
+
--primary-400-rgb: 224,227,234;
|
|
1157
|
+
--primary-500-rgb: 238,240,244;
|
|
1158
|
+
--primary-600-rgb: 247,248,250;
|
|
865
1159
|
--color-on-primary: var(--slate-950);
|
|
1160
|
+
--color-on-primary-rgb: var(--slate-950-rgb);
|
|
866
1161
|
}
|
|
867
1162
|
[data-theme="light"][data-primary="noir"] {
|
|
868
1163
|
--primary-50: var(--slate-100);
|
|
@@ -873,7 +1168,11 @@
|
|
|
873
1168
|
--primary-600: var(--slate-900);
|
|
874
1169
|
--primary-700: var(--slate-800);
|
|
875
1170
|
--primary-800: var(--slate-950);
|
|
1171
|
+
--primary-400-rgb: 58,65,82;
|
|
1172
|
+
--primary-500-rgb: 38,43,56;
|
|
1173
|
+
--primary-600-rgb: 23,27,38;
|
|
876
1174
|
--color-on-primary: var(--slate-0);
|
|
1175
|
+
--color-on-primary-rgb: var(--slate-0-rgb);
|
|
877
1176
|
}
|
|
878
1177
|
|
|
879
1178
|
/* Freeday components. GENERATED by tokens/build.mjs. Do not edit by hand. */
|
|
@@ -890,7 +1189,7 @@ body {
|
|
|
890
1189
|
-webkit-font-smoothing: antialiased;
|
|
891
1190
|
}
|
|
892
1191
|
h1, h2, h3, h4 { font-family: var(--font-display); font-weight: var(--weight-bold); letter-spacing: var(--tracking-tighter); line-height: var(--leading-snug); margin: 0; }
|
|
893
|
-
a { color: var(--color-primary); }
|
|
1192
|
+
a { color: var(--color-primary-strong); }
|
|
894
1193
|
:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: var(--focus-ring-width); border-radius: var(--radius-xs); }
|
|
895
1194
|
:where(button, input, select, textarea) { font: inherit; }
|
|
896
1195
|
/* Hidden from sight, kept for assistive tech. `clip` hides PAINTING, not LAYOUT: the box still
|
|
@@ -930,7 +1229,7 @@ a { color: var(--color-primary); }
|
|
|
930
1229
|
.fdy-accordion__item > summary::after{content:"";margin-left:auto;margin-top:-.15rem;flex:none;width:.5rem;height:.5rem;border-right:2px solid var(--color-text-subtle);border-bottom:2px solid var(--color-text-subtle);transform:rotate(45deg);transition:transform var(--dur-fast) var(--ease-standard);}
|
|
931
1230
|
.fdy-accordion__item[open] > summary::after{transform:rotate(225deg);margin-top:.1rem;}
|
|
932
1231
|
.fdy-accordion__item > summary:hover{background:var(--color-surface-2);}
|
|
933
|
-
.fdy-accordion__item > summary:focus-visible{outline:none;box-shadow:inset 0 0 0 2px
|
|
1232
|
+
.fdy-accordion__item > summary:focus-visible{outline:none;box-shadow:inset 0 0 0 2px rgba(var(--color-primary-rgb),.45);}
|
|
934
1233
|
.fdy-accordion__panel{padding:0 var(--space-4) var(--space-4);color:var(--color-text-muted);font-size:var(--text-sm);line-height:var(--leading-normal);}
|
|
935
1234
|
/* Content reveal on open (fade + rise). Native <details> can't animate its own height cross-
|
|
936
1235
|
* browser without JS, so we animate the revealed panel instead, cheap, safe, reduced-motion gated. */
|
|
@@ -945,14 +1244,14 @@ a { color: var(--color-primary); }
|
|
|
945
1244
|
.fdy-alert__text{color:var(--color-text);line-height:var(--leading-normal);}
|
|
946
1245
|
.fdy-alert__close{flex:none;align-self:flex-start;border:0;background:transparent;color:var(--color-text-muted);cursor:pointer;font-size:var(--text-lg);line-height:1;padding:0 var(--space-1);border-radius:var(--radius-sm);}
|
|
947
1246
|
.fdy-alert__close:hover{color:var(--color-text);}
|
|
948
|
-
.fdy-alert__close:focus-visible{outline:none;box-shadow:0 0 0 3px
|
|
949
|
-
.fdy-alert--info{background:var(--color-info-soft);border-color:
|
|
1247
|
+
.fdy-alert__close:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(var(--color-primary-rgb),.26);}
|
|
1248
|
+
.fdy-alert--info{background:var(--color-info-soft);border-color:rgba(var(--color-info-rgb),.26);}
|
|
950
1249
|
.fdy-alert--info .fdy-alert__title,.fdy-alert--info .fdy-alert__icon{color:var(--color-info-strong);}
|
|
951
|
-
.fdy-alert--success{background:var(--color-success-soft);border-color:
|
|
1250
|
+
.fdy-alert--success{background:var(--color-success-soft);border-color:rgba(var(--color-success-rgb),.26);}
|
|
952
1251
|
.fdy-alert--success .fdy-alert__title,.fdy-alert--success .fdy-alert__icon{color:var(--color-success-strong);}
|
|
953
|
-
.fdy-alert--warning{background:var(--color-warning-soft);border-color:
|
|
1252
|
+
.fdy-alert--warning{background:var(--color-warning-soft);border-color:rgba(var(--color-warning-rgb),.26);}
|
|
954
1253
|
.fdy-alert--warning .fdy-alert__title,.fdy-alert--warning .fdy-alert__icon{color:var(--color-warning-strong);}
|
|
955
|
-
.fdy-alert--danger{background:var(--color-danger-soft);border-color:
|
|
1254
|
+
.fdy-alert--danger{background:var(--color-danger-soft);border-color:rgba(var(--color-danger-rgb),.26);}
|
|
956
1255
|
.fdy-alert--danger .fdy-alert__title,.fdy-alert--danger .fdy-alert__icon{color:var(--color-danger-strong);}
|
|
957
1256
|
|
|
958
1257
|
/* Freeday. App Shell.
|
|
@@ -1001,7 +1300,7 @@ a { color: var(--color-primary); }
|
|
|
1001
1300
|
.fdy-nav__item:hover{background:var(--color-surface-2);color:var(--color-text);}
|
|
1002
1301
|
/* Active indicator stays in the primary ramp so it never clashes with a re-themed accent. */
|
|
1003
1302
|
.fdy-nav__item[aria-current="page"]{background:var(--color-primary-soft);color:var(--color-primary-strong);font-weight:var(--weight-semibold);}
|
|
1004
|
-
.fdy-nav__item:focus-visible{outline:none;box-shadow:0 0 0 2px
|
|
1303
|
+
.fdy-nav__item:focus-visible{outline:none;box-shadow:0 0 0 2px rgba(var(--color-primary-rgb),.45);}
|
|
1005
1304
|
/* Sidebar-menu extras: per-node icon (leading), count badge (trailing), and a
|
|
1006
1305
|
* text label that truncates. Any of these are optional, a bare text item works. */
|
|
1007
1306
|
.fdy-nav__icon{flex:none;display:inline-flex;width:1.15rem;height:1.15rem;}
|
|
@@ -1019,7 +1318,7 @@ a { color: var(--color-primary); }
|
|
|
1019
1318
|
.fdy-nav__grouplabel{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);padding:var(--space-3) var(--space-3) var(--space-1);font-size:var(--text-xs);text-transform:uppercase;letter-spacing:var(--tracking-wide);font-weight:var(--weight-semibold);color:var(--color-text-muted);}
|
|
1020
1319
|
.fdy-nav__grouplabel::-webkit-details-marker{display:none;}
|
|
1021
1320
|
.fdy-nav__grouplabel:hover{color:var(--color-text-muted);}
|
|
1022
|
-
.fdy-nav__grouplabel:focus-visible{outline:none;border-radius:var(--radius-sm);box-shadow:0 0 0 2px
|
|
1321
|
+
.fdy-nav__grouplabel:focus-visible{outline:none;border-radius:var(--radius-sm);box-shadow:0 0 0 2px rgba(var(--color-primary-rgb),.45);}
|
|
1023
1322
|
.fdy-nav__grouplabel::after{content:"";flex:none;width:.45rem;height:.45rem;margin-right:var(--space-1);border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(-45deg);transition:transform var(--dur-fast) var(--ease-standard);opacity:.7;}
|
|
1024
1323
|
.fdy-nav__group[open] > .fdy-nav__grouplabel::after{transform:rotate(45deg);}
|
|
1025
1324
|
/* --flat: calmer, non-collapsible grouped nav, hide the caret, drop the
|
|
@@ -1120,13 +1419,13 @@ a { color: var(--color-primary); }
|
|
|
1120
1419
|
is the same component whether the nav is a sidebar column or a top row. */
|
|
1121
1420
|
/* Controls on a coloured app bar go on-colour (icons stay legible, hover is a light wash) */
|
|
1122
1421
|
.fdy-appbar--primary .fdy-btn--ghost{background:transparent;border-color:transparent;color:var(--color-on-primary);box-shadow:none;}
|
|
1123
|
-
.fdy-appbar--primary .fdy-btn--ghost:hover{background:
|
|
1422
|
+
.fdy-appbar--primary .fdy-btn--ghost:hover{background:rgba(var(--color-on-primary-rgb),.16);color:var(--color-on-primary);transform:none;}
|
|
1124
1423
|
/* Nav links on a coloured bar: full on-colour ink in every state (a dimmed variant would trade away
|
|
1125
1424
|
the contrast the bar's own token pair guarantees). The current page is carried by the background
|
|
1126
1425
|
wash plus the semibold weight the base rule already applies, and by `aria-current` itself. */
|
|
1127
1426
|
.fdy-appbar--primary .fdy-nav__item{color:var(--color-on-primary);}
|
|
1128
|
-
.fdy-appbar--primary .fdy-nav__item:hover{background:
|
|
1129
|
-
.fdy-appbar--primary .fdy-nav__item[aria-current="page"]{background:
|
|
1427
|
+
.fdy-appbar--primary .fdy-nav__item:hover{background:rgba(var(--color-on-primary-rgb),.16);color:var(--color-on-primary);}
|
|
1428
|
+
.fdy-appbar--primary .fdy-nav__item[aria-current="page"]{background:rgba(var(--color-on-primary-rgb),.24);color:var(--color-on-primary);}
|
|
1130
1429
|
|
|
1131
1430
|
/* Freeday. Autocomplete (text input + filtered suggestion listbox, APG editable combobox).
|
|
1132
1431
|
* Enhanced by freeday-autocomplete.js. */
|
|
@@ -1160,22 +1459,28 @@ a { color: var(--color-primary); }
|
|
|
1160
1459
|
* text-leaning foreground so initials keep WCAG AA (verified >=4.5:1 in light & dark by
|
|
1161
1460
|
* test/contrast.test.mjs). Use to disambiguate same-initial avatars (e.g. many "PT …" names):
|
|
1162
1461
|
* hash a stable 1..8 index off the FULL name in your app, then apply .fdy-avatar--tone-<n>. */
|
|
1163
|
-
.
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
.
|
|
1169
|
-
.
|
|
1170
|
-
.fdy-avatar--tone-
|
|
1171
|
-
.fdy-avatar--tone-
|
|
1462
|
+
/* One flat token per half, computed in advance by tokens/build.mjs: --tone-N-bg is 18% of the
|
|
1463
|
+
* tone over --color-surface, --tone-N-ink is 50% of it toward --color-text, both per theme.
|
|
1464
|
+
* They USED to be mixed here, with the hue injected per element through a private custom
|
|
1465
|
+
* property — which put var() inside color-mix(), the one shape that cannot be rescued: valid at
|
|
1466
|
+
* parse time, invalid at computed-value time, and there `background` and `color` drop to their
|
|
1467
|
+
* INITIAL values, not to any fallback. @supports answered it for exactly as long as somebody
|
|
1468
|
+
* remembered to write the counterpart; a precomputed token removes the question. */
|
|
1469
|
+
.fdy-avatar--tone-1{background:var(--tone-1-bg);color:var(--tone-1-ink);}
|
|
1470
|
+
.fdy-avatar--tone-2{background:var(--tone-2-bg);color:var(--tone-2-ink);}
|
|
1471
|
+
.fdy-avatar--tone-3{background:var(--tone-3-bg);color:var(--tone-3-ink);}
|
|
1472
|
+
.fdy-avatar--tone-4{background:var(--tone-4-bg);color:var(--tone-4-ink);}
|
|
1473
|
+
.fdy-avatar--tone-5{background:var(--tone-5-bg);color:var(--tone-5-ink);}
|
|
1474
|
+
.fdy-avatar--tone-6{background:var(--tone-6-bg);color:var(--tone-6-ink);}
|
|
1475
|
+
.fdy-avatar--tone-7{background:var(--tone-7-bg);color:var(--tone-7-ink);}
|
|
1476
|
+
.fdy-avatar--tone-8{background:var(--tone-8-bg);color:var(--tone-8-ink);}
|
|
1172
1477
|
|
|
1173
1478
|
/* Freeday. Badge */
|
|
1174
|
-
.fdy-badge{display:inline-flex;align-items:center;gap:var(--space-1);font-family:var(--font-body);font-size:var(--text-xs);font-weight:var(--weight-semibold);line-height:1;white-space:nowrap;padding:.35em .7em;border-radius:var(--radius-full);color:var(--color-primary-strong);background:var(--color-primary-soft);border:var(--bw) solid
|
|
1175
|
-
.fdy-badge--success{color:var(--color-success-strong);background:var(--color-success-soft);border-color:
|
|
1176
|
-
.fdy-badge--warning{color:var(--color-warning-strong);background:var(--color-warning-soft);border-color:
|
|
1177
|
-
.fdy-badge--danger{color:var(--color-danger-strong);background:var(--color-danger-soft);border-color:
|
|
1178
|
-
.fdy-badge--info{color:var(--color-info-strong);background:var(--color-info-soft);border-color:
|
|
1479
|
+
.fdy-badge{display:inline-flex;align-items:center;gap:var(--space-1);font-family:var(--font-body);font-size:var(--text-xs);font-weight:var(--weight-semibold);line-height:1;white-space:nowrap;padding:.35em .7em;border-radius:var(--radius-full);color:var(--color-primary-strong);background:var(--color-primary-soft);border:var(--bw) solid rgba(var(--color-primary-rgb),.22);box-shadow:0 1px 1.5px rgba(16,14,30,.05);}
|
|
1480
|
+
.fdy-badge--success{color:var(--color-success-strong);background:var(--color-success-soft);border-color:rgba(var(--color-success-rgb),.26);}
|
|
1481
|
+
.fdy-badge--warning{color:var(--color-warning-strong);background:var(--color-warning-soft);border-color:rgba(var(--color-warning-rgb),.26);}
|
|
1482
|
+
.fdy-badge--danger{color:var(--color-danger-strong);background:var(--color-danger-soft);border-color:rgba(var(--color-danger-rgb),.26);}
|
|
1483
|
+
.fdy-badge--info{color:var(--color-info-strong);background:var(--color-info-soft);border-color:rgba(var(--color-info-rgb),.26);}
|
|
1179
1484
|
.fdy-badge--outline{background:transparent;border-color:var(--color-border-strong);color:var(--color-text-muted);box-shadow:none;}
|
|
1180
1485
|
|
|
1181
1486
|
/* Categorical tone badges, a status vocabulary larger than the semantic palette, from the
|
|
@@ -1187,15 +1492,19 @@ a { color: var(--color-primary); }
|
|
|
1187
1492
|
* cannot. A back-office document list carrying Draft, Submitted, Approved, Completed, Settled,
|
|
1188
1493
|
* Closed, Transferred, InDeclaration, Open and Rejected in ONE column collapsed to three colours,
|
|
1189
1494
|
* which is the report this shipped for. */
|
|
1190
|
-
|
|
1191
|
-
.
|
|
1192
|
-
|
|
1193
|
-
.
|
|
1194
|
-
.
|
|
1195
|
-
.fdy-badge--tone-
|
|
1196
|
-
.fdy-badge--tone-
|
|
1197
|
-
.fdy-badge--tone-
|
|
1198
|
-
.fdy-badge--tone-
|
|
1495
|
+
/* Precomputed tone tokens, the same --tone-N-bg / --tone-N-ink the avatar and the chip read, so
|
|
1496
|
+
* one contrast assertion still covers all three. --tone-N-border-soft is the badge's own edge:
|
|
1497
|
+
* 26% of the tone over transparent, which is a translucent colour and therefore stays rgba()
|
|
1498
|
+
* rather than flattening to a hex. See avatar.css for why none of this is mixed in the
|
|
1499
|
+
* component any more, and tokens/build.mjs for where the mixing moved to. */
|
|
1500
|
+
.fdy-badge--tone-1{background:var(--tone-1-bg);color:var(--tone-1-ink);border-color:var(--tone-1-border-soft);}
|
|
1501
|
+
.fdy-badge--tone-2{background:var(--tone-2-bg);color:var(--tone-2-ink);border-color:var(--tone-2-border-soft);}
|
|
1502
|
+
.fdy-badge--tone-3{background:var(--tone-3-bg);color:var(--tone-3-ink);border-color:var(--tone-3-border-soft);}
|
|
1503
|
+
.fdy-badge--tone-4{background:var(--tone-4-bg);color:var(--tone-4-ink);border-color:var(--tone-4-border-soft);}
|
|
1504
|
+
.fdy-badge--tone-5{background:var(--tone-5-bg);color:var(--tone-5-ink);border-color:var(--tone-5-border-soft);}
|
|
1505
|
+
.fdy-badge--tone-6{background:var(--tone-6-bg);color:var(--tone-6-ink);border-color:var(--tone-6-border-soft);}
|
|
1506
|
+
.fdy-badge--tone-7{background:var(--tone-7-bg);color:var(--tone-7-ink);border-color:var(--tone-7-border-soft);}
|
|
1507
|
+
.fdy-badge--tone-8{background:var(--tone-8-bg);color:var(--tone-8-ink);border-color:var(--tone-8-border-soft);}
|
|
1199
1508
|
|
|
1200
1509
|
/* Overlay badge, anchors a small count/dot/icon badge to a corner of any element
|
|
1201
1510
|
* (icon, button, text). Wrap the content in .fdy-badge-wrap; add .fdy-badge-ov as a
|
|
@@ -1286,7 +1595,7 @@ a { color: var(--color-primary); }
|
|
|
1286
1595
|
.fdy-breadcrumb__item{display:inline-flex;align-items:center;gap:var(--space-2);color:var(--color-text-muted);}
|
|
1287
1596
|
.fdy-breadcrumb__link{color:var(--color-text-muted);text-decoration:none;border-radius:var(--radius-sm);}
|
|
1288
1597
|
.fdy-breadcrumb__link:hover{color:var(--color-primary-strong);text-decoration:underline;}
|
|
1289
|
-
.fdy-breadcrumb__link:focus-visible{outline:none;box-shadow:0 0 0 3px
|
|
1598
|
+
.fdy-breadcrumb__link:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(var(--color-primary-rgb),.26);}
|
|
1290
1599
|
.fdy-breadcrumb__item[aria-current="page"]{color:var(--color-text);font-weight:var(--weight-medium);}
|
|
1291
1600
|
.fdy-breadcrumb__sep{color:var(--color-text-subtle);user-select:none;}
|
|
1292
1601
|
|
|
@@ -1356,16 +1665,24 @@ a { color: var(--color-primary); }
|
|
|
1356
1665
|
}
|
|
1357
1666
|
|
|
1358
1667
|
/* Freeday. Button */
|
|
1668
|
+
/* The fill is a FLAT colour with a black veil laid over it, not a gradient between two shades.
|
|
1669
|
+
* It used to be `linear-gradient(primary, color-mix(in srgb, #000 10%, primary))`, and that is the
|
|
1670
|
+
* same colour at every stop — veiling a solid base with black 0 -> .1 darkens it by exactly 10% —
|
|
1671
|
+
* but the mix form carries var(), so on Safari <= 16.1 the whole declaration failed at
|
|
1672
|
+
* computed-value time and the button lost its fill rather than falling back. Measured identical to
|
|
1673
|
+
* the mix it replaces (within the 1/255 the gradient's own 8-bit rounding costs); see
|
|
1674
|
+
* test/color-mix.test.mjs for the rule and tokens/build.mjs for why none of these may use
|
|
1675
|
+
* color-mix(). Pressed states veil from the TOP, which is the same trick read upside down. */
|
|
1359
1676
|
.fdy-btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);
|
|
1360
1677
|
height:var(--control-h);padding:0 var(--space-4);
|
|
1361
1678
|
font-family:var(--font-body);font-size:var(--text-sm);font-weight:var(--weight-semibold);
|
|
1362
1679
|
line-height:1;white-space:nowrap;cursor:pointer;text-decoration:none;color:var(--color-on-primary);
|
|
1363
|
-
background:
|
|
1680
|
+
background:var(--color-primary) linear-gradient(180deg,rgba(0,0,0,0),rgba(0,0,0,.1));
|
|
1364
1681
|
border:var(--bw) solid transparent;border-radius:var(--radius-md);
|
|
1365
|
-
box-shadow:0 2px 9px -1px
|
|
1682
|
+
box-shadow:0 2px 9px -1px rgba(var(--color-primary-rgb),.5),inset 0 1px 0 rgba(255,255,255,.26);
|
|
1366
1683
|
transition:background var(--dur-fast) var(--ease-standard),box-shadow var(--dur-fast) var(--ease-standard),transform var(--dur-fast) var(--ease-standard);}
|
|
1367
|
-
.fdy-btn:hover{transform:translateY(-1px);box-shadow:0 6px 18px -2px
|
|
1368
|
-
.fdy-btn:active{transform:translateY(1px);box-shadow:0 1px 4px -1px
|
|
1684
|
+
.fdy-btn:hover{transform:translateY(-1px);box-shadow:0 6px 18px -2px rgba(var(--color-primary-rgb),.6),inset 0 1px 0 rgba(255,255,255,.26);}
|
|
1685
|
+
.fdy-btn:active{transform:translateY(1px);box-shadow:0 1px 4px -1px rgba(var(--color-primary-rgb),.46);}
|
|
1369
1686
|
.fdy-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none;}
|
|
1370
1687
|
/* Pressed / toggle. `aria-pressed` is already the right attribute for a toggle button, so this adds
|
|
1371
1688
|
no class and no new markup contract, and it is what makes .fdy-btn-group a complete segmented
|
|
@@ -1373,8 +1690,8 @@ a { color: var(--color-primary); }
|
|
|
1373
1690
|
defines its OWN pressed look below; a single shared rule cannot work, because a gradient is a
|
|
1374
1691
|
background-IMAGE and would blank the ghost variant's background-color. Solid: invert the gradient
|
|
1375
1692
|
and sink the shadow inward, so a held button reads as depressed, not merely primary-coloured. */
|
|
1376
|
-
.fdy-btn[aria-pressed="true"]{background:linear-gradient(180deg,
|
|
1377
|
-
.fdy-btn[aria-pressed="true"]:hover{transform:none;box-shadow:inset 0 2px 6px
|
|
1693
|
+
.fdy-btn[aria-pressed="true"]{background:var(--color-primary) linear-gradient(180deg,rgba(0,0,0,.12),rgba(0,0,0,0));box-shadow:inset 0 2px 6px rgba(0,0,0,.22);}
|
|
1694
|
+
.fdy-btn[aria-pressed="true"]:hover{transform:none;box-shadow:inset 0 2px 6px rgba(0,0,0,.22);}
|
|
1378
1695
|
|
|
1379
1696
|
.fdy-btn--ghost{background:var(--color-surface);color:var(--color-primary-strong);border-color:var(--color-border-strong);box-shadow:var(--shadow-1);}
|
|
1380
1697
|
.fdy-btn--ghost:hover{transform:none;background:var(--color-primary-soft);border-color:var(--color-primary-border);box-shadow:var(--shadow-1);}
|
|
@@ -1386,15 +1703,15 @@ a { color: var(--color-primary); }
|
|
|
1386
1703
|
screen. `.fdy-menu__item--danger` has always modelled the quiet form (red text, not a red block);
|
|
1387
1704
|
the pairing rules below bring it to the button. They are more specific than this one and come
|
|
1388
1705
|
after it, so this rule needs no :not() guard of its own, one mechanism, not two. */
|
|
1389
|
-
.fdy-btn--danger{background:
|
|
1390
|
-
.fdy-btn--danger:hover{transform:translateY(-1px);box-shadow:0 6px 18px -2px
|
|
1706
|
+
.fdy-btn--danger{background:var(--color-danger-btn) linear-gradient(180deg,rgba(0,0,0,0),rgba(0,0,0,.12));color:var(--color-on-danger);box-shadow:0 2px 9px -1px rgba(var(--color-danger-btn-rgb),.46),inset 0 1px 0 rgba(255,255,255,.22);}
|
|
1707
|
+
.fdy-btn--danger:hover{transform:translateY(-1px);box-shadow:0 6px 18px -2px rgba(var(--color-danger-btn-rgb),.54),inset 0 1px 0 rgba(255,255,255,.22);}
|
|
1391
1708
|
.fdy-btn--danger:active{transform:translateY(1px);}
|
|
1392
1709
|
/* Quiet destructive: the variant keeps its own ground and only the ink turns. */
|
|
1393
|
-
.fdy-btn--ghost.fdy-btn--danger{background:transparent;color:var(--color-danger-strong);border-color:
|
|
1710
|
+
.fdy-btn--ghost.fdy-btn--danger{background:transparent;color:var(--color-danger-strong);border-color:rgba(var(--color-danger-rgb),.4);box-shadow:none;}
|
|
1394
1711
|
.fdy-btn--ghost.fdy-btn--danger:hover{background:var(--color-danger-soft);border-color:var(--color-danger);color:var(--color-danger-strong);}
|
|
1395
1712
|
.fdy-btn--text.fdy-btn--danger{background:none;color:var(--color-danger-strong);border-color:transparent;box-shadow:none;}
|
|
1396
1713
|
.fdy-btn--text.fdy-btn--danger:hover{background:var(--color-danger-soft);color:var(--color-danger-strong);}
|
|
1397
|
-
.fdy-btn--danger[aria-pressed="true"]{background:
|
|
1714
|
+
.fdy-btn--danger[aria-pressed="true"]{background:var(--color-danger-btn) linear-gradient(180deg,rgba(0,0,0,.14),rgba(0,0,0,0));box-shadow:inset 0 2px 6px rgba(0,0,0,.24);}
|
|
1398
1715
|
|
|
1399
1716
|
.fdy-btn--sm{height:calc(var(--control-h) - var(--space-2));padding:0 var(--space-3);font-size:var(--text-xs);border-radius:var(--radius-sm);}
|
|
1400
1717
|
.fdy-btn--lg{height:calc(var(--control-h) + var(--space-2));padding:0 var(--space-6);font-size:var(--text-base);border-radius:var(--radius-lg);}
|
|
@@ -1443,7 +1760,7 @@ a { color: var(--color-primary); }
|
|
|
1443
1760
|
.fdy-btn-group .fdy-btn:last-child{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md);}
|
|
1444
1761
|
|
|
1445
1762
|
/* FAB, circular elevated action button (icon), optional extended pill with label */
|
|
1446
|
-
.fdy-fab{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);width:3.5rem;height:3.5rem;padding:0;border:var(--bw) solid transparent;border-radius:var(--radius-full);cursor:pointer;color:var(--color-on-primary);background:
|
|
1763
|
+
.fdy-fab{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);width:3.5rem;height:3.5rem;padding:0;border:var(--bw) solid transparent;border-radius:var(--radius-full);cursor:pointer;color:var(--color-on-primary);background:var(--color-primary) linear-gradient(180deg,rgba(0,0,0,0),rgba(0,0,0,.1));box-shadow:var(--shadow-3);transition:transform var(--dur-fast) var(--ease-standard),box-shadow var(--dur-fast) var(--ease-standard);}
|
|
1447
1764
|
.fdy-fab:hover{transform:translateY(-1px);box-shadow:var(--shadow-4);}
|
|
1448
1765
|
.fdy-fab:active{transform:translateY(1px);}
|
|
1449
1766
|
.fdy-fab:focus-visible{border-radius:var(--radius-full);}
|
|
@@ -1452,8 +1769,8 @@ a { color: var(--color-primary); }
|
|
|
1452
1769
|
.fdy-fab--sm{width:2.5rem;height:2.5rem;}
|
|
1453
1770
|
.fdy-fab--sm svg{width:1.25rem;height:1.25rem;}
|
|
1454
1771
|
.fdy-fab--extended{width:auto;padding:0 var(--space-5);font-family:var(--font-body);font-size:var(--text-sm);font-weight:var(--weight-semibold);}
|
|
1455
|
-
.fdy-fab--danger{background:
|
|
1456
|
-
.fdy-fab--accent{background:
|
|
1772
|
+
.fdy-fab--danger{background:var(--color-danger-btn) linear-gradient(180deg,rgba(0,0,0,0),rgba(0,0,0,.12));color:var(--color-on-danger);}
|
|
1773
|
+
.fdy-fab--accent{background:var(--color-accent) linear-gradient(180deg,rgba(0,0,0,0),rgba(0,0,0,.1));color:var(--color-on-accent);}
|
|
1457
1774
|
|
|
1458
1775
|
/* Freeday. Card */
|
|
1459
1776
|
/* position:relative, containing block for out-of-flow card content (see base.css); it also gives
|
|
@@ -1508,9 +1825,9 @@ a { color: var(--color-primary); }
|
|
|
1508
1825
|
.fdy-carousel__viewport{position:relative;display:flex;overflow-x:auto;scroll-snap-type:x mandatory;scroll-behavior:smooth;border-radius:var(--radius-lg);scrollbar-width:none;-ms-overflow-style:none;}
|
|
1509
1826
|
.fdy-carousel__viewport::-webkit-scrollbar{display:none;}
|
|
1510
1827
|
.fdy-carousel__slide{flex:0 0 100%;min-width:0;scroll-snap-align:center;}
|
|
1511
|
-
.fdy-carousel__arrow{position:absolute;top:50%;transform:translateY(-50%);z-index:2;display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;border:0;border-radius:var(--radius-full);background:
|
|
1828
|
+
.fdy-carousel__arrow{position:absolute;top:50%;transform:translateY(-50%);z-index:2;display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;border:0;border-radius:var(--radius-full);background:rgba(var(--color-surface-rgb),.86);color:var(--color-text);box-shadow:var(--shadow-2);cursor:pointer;transition:background var(--dur-fast) var(--ease-standard);}
|
|
1512
1829
|
.fdy-carousel__arrow:hover{background:var(--color-surface);}
|
|
1513
|
-
.fdy-carousel__arrow:focus-visible{outline:none;box-shadow:0 0 0 3px
|
|
1830
|
+
.fdy-carousel__arrow:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(var(--color-primary-rgb),.4);}
|
|
1514
1831
|
.fdy-carousel__arrow:disabled{opacity:.4;cursor:not-allowed;}
|
|
1515
1832
|
.fdy-carousel__arrow--prev{left:var(--space-3);}
|
|
1516
1833
|
.fdy-carousel__arrow--next{right:var(--space-3);}
|
|
@@ -1518,7 +1835,7 @@ a { color: var(--color-primary); }
|
|
|
1518
1835
|
.fdy-carousel__dots{display:flex;justify-content:center;gap:var(--space-2);margin-top:var(--space-3);}
|
|
1519
1836
|
.fdy-carousel__dot{width:.5rem;height:.5rem;padding:0;border:0;border-radius:var(--radius-full);background:var(--color-border-strong);cursor:pointer;transition:background var(--dur-fast) var(--ease-standard),width var(--dur-fast) var(--ease-standard);}
|
|
1520
1837
|
.fdy-carousel__dot[aria-current="true"]{background:var(--color-primary);width:1.25rem;}
|
|
1521
|
-
.fdy-carousel__dot:focus-visible{outline:none;box-shadow:0 0 0 3px
|
|
1838
|
+
.fdy-carousel__dot:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(var(--color-primary-rgb),.4);}
|
|
1522
1839
|
@media (prefers-reduced-motion:reduce){.fdy-carousel__viewport{scroll-behavior:auto;}}
|
|
1523
1840
|
|
|
1524
1841
|
/* Freeday. Cascade select (hierarchical drill-down picker).
|
|
@@ -1530,14 +1847,14 @@ a { color: var(--color-primary); }
|
|
|
1530
1847
|
.fdy-cascade{position:relative;display:inline-block;width:100%;max-width:22rem;}
|
|
1531
1848
|
.fdy-cascade__trigger{display:inline-flex;align-items:center;justify-content:space-between;gap:var(--space-2);width:100%;height:var(--control-h);padding:0 var(--space-3);text-align:left;cursor:pointer;font-family:var(--font-body);font-size:var(--text-sm);color:var(--color-text);background:var(--color-surface);border:1.5px solid var(--color-control-border);border-radius:var(--radius-md);box-shadow:inset 0 1px 2px rgba(16,14,30,.06);transition:border-color var(--dur-fast) var(--ease-standard),box-shadow var(--dur-fast) var(--ease-standard);}
|
|
1532
1849
|
.fdy-cascade__trigger:hover{border-color:var(--color-text-muted);}
|
|
1533
|
-
.fdy-cascade__trigger:focus-visible{outline:none;border-color:var(--color-primary);box-shadow:inset 0 1px 2px rgba(16,14,30,.04),0 0 0 3px
|
|
1534
|
-
.fdy-cascade__trigger.is-open{border-color:var(--color-primary);box-shadow:0 0 0 3px
|
|
1850
|
+
.fdy-cascade__trigger:focus-visible{outline:none;border-color:var(--color-primary);box-shadow:inset 0 1px 2px rgba(16,14,30,.04),0 0 0 3px rgba(var(--color-primary-rgb),.26);}
|
|
1851
|
+
.fdy-cascade__trigger.is-open{border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(var(--color-primary-rgb),.26);}
|
|
1535
1852
|
.fdy-cascade__trigger:disabled,.fdy-cascade__trigger[aria-disabled="true"]{opacity:.5;cursor:not-allowed;}
|
|
1536
1853
|
.fdy-cascade__trigger[aria-readonly="true"]{background:var(--color-surface-2);border-color:var(--color-border);cursor:default;}
|
|
1537
1854
|
.fdy-cascade__trigger[aria-readonly="true"]:hover{border-color:var(--color-border);}
|
|
1538
1855
|
.fdy-cascade__trigger[aria-readonly="true"]:focus-visible{border-color:var(--color-border-strong);box-shadow:none;}
|
|
1539
1856
|
.fdy-cascade--error .fdy-cascade__trigger,.fdy-cascade__trigger[aria-invalid="true"]{border-color:var(--color-danger);}
|
|
1540
|
-
.fdy-cascade--error .fdy-cascade__trigger:focus-visible,.fdy-cascade--error .fdy-cascade__trigger.is-open,.fdy-cascade__trigger[aria-invalid="true"]:focus-visible{border-color:var(--color-danger);box-shadow:0 0 0 3px
|
|
1857
|
+
.fdy-cascade--error .fdy-cascade__trigger:focus-visible,.fdy-cascade--error .fdy-cascade__trigger.is-open,.fdy-cascade__trigger[aria-invalid="true"]:focus-visible{border-color:var(--color-danger);box-shadow:0 0 0 3px rgba(var(--color-danger-rgb),.26);}
|
|
1541
1858
|
.fdy-cascade__value{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
|
|
1542
1859
|
.fdy-cascade__value--placeholder{color:var(--color-text-subtle);}
|
|
1543
1860
|
.fdy-cascade__trigger::after{content:"";flex:none;width:.5rem;height:.5rem;margin-top:-.15rem;border-right:2px solid var(--color-text-subtle);border-bottom:2px solid var(--color-text-subtle);transform:rotate(45deg);transition:transform var(--dur-fast) var(--ease-standard);}
|
|
@@ -1549,7 +1866,7 @@ a { color: var(--color-primary); }
|
|
|
1549
1866
|
.fdy-cascade__head{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-1) var(--space-1) var(--space-2);margin-bottom:var(--space-1);border-bottom:var(--bw) solid var(--color-border);}
|
|
1550
1867
|
.fdy-cascade__back{display:inline-flex;align-items:center;justify-content:center;flex:none;width:1.5rem;height:1.5rem;padding:0;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-muted);cursor:pointer;}
|
|
1551
1868
|
.fdy-cascade__back:hover{background:var(--color-surface-3);color:var(--color-text);}
|
|
1552
|
-
.fdy-cascade__back:focus-visible{outline:none;box-shadow:0 0 0 2px
|
|
1869
|
+
.fdy-cascade__back:focus-visible{outline:none;box-shadow:0 0 0 2px rgba(var(--color-primary-rgb),.45);}
|
|
1553
1870
|
.fdy-cascade__back[hidden]{display:none;}
|
|
1554
1871
|
.fdy-cascade__back svg{display:block;width:1rem;height:1rem;}
|
|
1555
1872
|
.fdy-cascade__crumb{min-width:0;flex:1;font-size:var(--text-xs);font-weight:var(--weight-semibold);color:var(--color-text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
|
|
@@ -1712,30 +2029,48 @@ a { color: var(--color-primary); }
|
|
|
1712
2029
|
|
|
1713
2030
|
/* Freeday. Chip (tag / removable filter) */
|
|
1714
2031
|
.fdy-chip{display:inline-flex;align-items:center;gap:var(--space-2);height:1.75rem;padding:0 var(--space-3);border-radius:var(--radius-full);font-size:var(--text-xs);font-weight:var(--weight-medium);color:var(--color-text);background:var(--color-surface-3);border:var(--bw) solid var(--color-border);}
|
|
1715
|
-
.fdy-chip--primary{color:var(--color-primary-strong);background:var(--color-primary-soft);border-color:
|
|
2032
|
+
.fdy-chip--primary{color:var(--color-primary-strong);background:var(--color-primary-soft);border-color:rgba(var(--color-primary-rgb),.22);}
|
|
1716
2033
|
/* Categorical tone chips, non-semantic category tags / legend swatches, from the general
|
|
1717
2034
|
* --tone-1..8 palette. Same validated AA formula as .fdy-avatar--tone-* (text >=4.5:1 both themes,
|
|
1718
2035
|
* gated by test/contrast.test.mjs). */
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
.
|
|
1722
|
-
.
|
|
1723
|
-
.fdy-chip--tone-
|
|
1724
|
-
.fdy-chip--tone-
|
|
1725
|
-
.fdy-chip--tone-
|
|
1726
|
-
.fdy-chip--tone-
|
|
1727
|
-
.fdy-chip--tone-
|
|
1728
|
-
.fdy-
|
|
1729
|
-
.fdy-
|
|
1730
|
-
.fdy-
|
|
2036
|
+
/* Precomputed tone tokens, the same --tone-N-bg / --tone-N-ink the avatar and the badge read.
|
|
2037
|
+
* --tone-N-border is the chip's edge: 30% of the tone over --color-border, opaque, which is a
|
|
2038
|
+
* different edge from the badge's translucent one and so a different token. See avatar.css for
|
|
2039
|
+
* why the mix left the component, and tokens/build.mjs for where it went. */
|
|
2040
|
+
.fdy-chip--tone-1{background:var(--tone-1-bg);color:var(--tone-1-ink);border-color:var(--tone-1-border);}
|
|
2041
|
+
.fdy-chip--tone-2{background:var(--tone-2-bg);color:var(--tone-2-ink);border-color:var(--tone-2-border);}
|
|
2042
|
+
.fdy-chip--tone-3{background:var(--tone-3-bg);color:var(--tone-3-ink);border-color:var(--tone-3-border);}
|
|
2043
|
+
.fdy-chip--tone-4{background:var(--tone-4-bg);color:var(--tone-4-ink);border-color:var(--tone-4-border);}
|
|
2044
|
+
.fdy-chip--tone-5{background:var(--tone-5-bg);color:var(--tone-5-ink);border-color:var(--tone-5-border);}
|
|
2045
|
+
.fdy-chip--tone-6{background:var(--tone-6-bg);color:var(--tone-6-ink);border-color:var(--tone-6-border);}
|
|
2046
|
+
.fdy-chip--tone-7{background:var(--tone-7-bg);color:var(--tone-7-ink);border-color:var(--tone-7-border);}
|
|
2047
|
+
.fdy-chip--tone-8{background:var(--tone-8-bg);color:var(--tone-8-ink);border-color:var(--tone-8-border);}
|
|
2048
|
+
.fdy-chip__remove{position:relative;display:inline-flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;margin-right:calc(var(--space-1)*-1);border:0;padding:0;border-radius:var(--radius-full);background:transparent;color:currentColor;opacity:.6;cursor:pointer;font-size:var(--text-sm);line-height:1;}
|
|
2049
|
+
/* The hover wash is 16% of the chip's OWN ink, and the chip's ink is whatever the variant set:
|
|
2050
|
+
* --color-text, --color-primary-strong, --tone-N-ink. So no token can stand in for it, which is why
|
|
2051
|
+
* this was the last color-mix() in the kit — and the only one whose two-line fallback actually
|
|
2052
|
+
* worked, the mix carrying no var() and therefore being rejected at parse time.
|
|
2053
|
+
*
|
|
2054
|
+
* It is a VEIL now, the same trick the button gradients use (button.css): currentColor at .16 over
|
|
2055
|
+
* the chip, which is algebraically the colour the mix produced — `F·.16 + (1-.16)·ground` either
|
|
2056
|
+
* way, including at the glyph's antialiased edges, where the veil's colour equals the glyph's and so
|
|
2057
|
+
* composites back to itself. No @supports, no fallback line, and nothing newer than Safari 4.
|
|
2058
|
+
*
|
|
2059
|
+
* Absolutely positioned, so it paints above the × as well as the background; `border-radius:inherit`
|
|
2060
|
+
* keeps it inside the pill. No transition: the mix had none, and a veil that fades is a different
|
|
2061
|
+
* component. */
|
|
2062
|
+
.fdy-chip__remove::before{content:"";position:absolute;inset:0;border-radius:inherit;background:currentColor;opacity:0;}
|
|
2063
|
+
.fdy-chip__remove:hover{opacity:1;}
|
|
2064
|
+
.fdy-chip__remove:hover::before{opacity:.16;}
|
|
2065
|
+
.fdy-chip__remove:focus-visible{outline:none;opacity:1;box-shadow:0 0 0 2px rgba(var(--color-primary-rgb),.45);}
|
|
1731
2066
|
/* Group wrapper for a row of chips (choice / filter). */
|
|
1732
2067
|
.fdy-chips{display:flex;flex-wrap:wrap;gap:var(--space-2);}
|
|
1733
2068
|
/* Interactive chips: choice (toggle) + filter (toggle with a check when on).
|
|
1734
2069
|
* Rendered as <button aria-pressed> and enhanced by freeday-chip.js. */
|
|
1735
2070
|
.fdy-chip--choice,.fdy-chip--filter{cursor:pointer;font-family:inherit;background:var(--color-surface);border-color:var(--color-border);transition:background var(--dur-fast) var(--ease-standard),border-color var(--dur-fast) var(--ease-standard),color var(--dur-fast) var(--ease-standard);}
|
|
1736
2071
|
.fdy-chip--choice:hover,.fdy-chip--filter:hover{background:var(--color-surface-3);border-color:var(--color-text-subtle);}
|
|
1737
|
-
.fdy-chip--choice:focus-visible,.fdy-chip--filter:focus-visible{outline:none;box-shadow:0 0 0 2px
|
|
1738
|
-
.fdy-chip--choice[aria-pressed="true"],.fdy-chip--filter[aria-pressed="true"]{color:var(--color-primary-strong);background:var(--color-primary-soft);border-color:
|
|
2072
|
+
.fdy-chip--choice:focus-visible,.fdy-chip--filter:focus-visible{outline:none;box-shadow:0 0 0 2px rgba(var(--color-primary-rgb),.45);}
|
|
2073
|
+
.fdy-chip--choice[aria-pressed="true"],.fdy-chip--filter[aria-pressed="true"]{color:var(--color-primary-strong);background:var(--color-primary-soft);border-color:rgba(var(--color-primary-rgb),.4);}
|
|
1739
2074
|
.fdy-chip--choice:disabled,.fdy-chip--filter:disabled,.fdy-chip--choice[aria-disabled="true"],.fdy-chip--filter[aria-disabled="true"]{opacity:.5;cursor:not-allowed;}
|
|
1740
2075
|
.fdy-chip__check{display:none;flex:none;width:.85rem;height:.85rem;margin-left:calc(var(--space-1)*-1);}
|
|
1741
2076
|
.fdy-chip__check svg{display:block;width:100%;height:100%;}
|
|
@@ -1745,8 +2080,8 @@ a { color: var(--color-primary); }
|
|
|
1745
2080
|
.fdy-combo{position:relative;display:block;max-width:22rem;}
|
|
1746
2081
|
.fdy-combo__button{display:inline-flex;align-items:center;justify-content:space-between;gap:var(--space-2);width:100%;height:var(--control-h);padding:0 var(--space-3);text-align:left;cursor:pointer;font-family:var(--font-body);font-size:var(--text-sm);color:var(--color-text);background:var(--color-surface);border:1.5px solid var(--color-control-border);border-radius:var(--radius-md);box-shadow:inset 0 1px 2px rgba(16,14,30,.06);transition:border-color var(--dur-fast) var(--ease-standard),box-shadow var(--dur-fast) var(--ease-standard);}
|
|
1747
2082
|
.fdy-combo__button:hover{border-color:var(--color-text-muted);}
|
|
1748
|
-
.fdy-combo__button:focus-visible{outline:none;border-color:var(--color-primary);box-shadow:inset 0 1px 2px rgba(16,14,30,.04),0 0 0 3px
|
|
1749
|
-
.fdy-combo__button.is-open{border-color:var(--color-primary);box-shadow:0 0 0 3px
|
|
2083
|
+
.fdy-combo__button:focus-visible{outline:none;border-color:var(--color-primary);box-shadow:inset 0 1px 2px rgba(16,14,30,.04),0 0 0 3px rgba(var(--color-primary-rgb),.26);}
|
|
2084
|
+
.fdy-combo__button.is-open{border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(var(--color-primary-rgb),.26);}
|
|
1750
2085
|
.fdy-combo__button:disabled,.fdy-combo__button[aria-disabled="true"]{opacity:.5;cursor:not-allowed;}
|
|
1751
2086
|
/* Read-only: stays focusable & shows its value at full contrast but can't open, muted surface,
|
|
1752
2087
|
softened border, default cursor, no focus-ring escalation (matches input[readonly], #39). */
|
|
@@ -1754,7 +2089,7 @@ a { color: var(--color-primary); }
|
|
|
1754
2089
|
.fdy-combo__button[aria-readonly="true"]:hover{border-color:var(--color-border);}
|
|
1755
2090
|
.fdy-combo__button[aria-readonly="true"]:focus-visible{border-color:var(--color-border-strong);box-shadow:none;}
|
|
1756
2091
|
.fdy-combo--error .fdy-combo__button,.fdy-combo__button[aria-invalid="true"]{border-color:var(--color-danger);}
|
|
1757
|
-
.fdy-combo--error .fdy-combo__button:focus-visible,.fdy-combo--error .fdy-combo__button.is-open,.fdy-combo__button[aria-invalid="true"]:focus-visible{border-color:var(--color-danger);box-shadow:0 0 0 3px
|
|
2092
|
+
.fdy-combo--error .fdy-combo__button:focus-visible,.fdy-combo--error .fdy-combo__button.is-open,.fdy-combo__button[aria-invalid="true"]:focus-visible{border-color:var(--color-danger);box-shadow:0 0 0 3px rgba(var(--color-danger-rgb),.26);}
|
|
1758
2093
|
.fdy-combo__value{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
|
|
1759
2094
|
.fdy-combo__value--placeholder{color:var(--color-text-subtle);}
|
|
1760
2095
|
.fdy-combo__button::after{content:"";flex:none;width:.5rem;height:.5rem;margin-top:-.15rem;border-right:2px solid var(--color-text-subtle);border-bottom:2px solid var(--color-text-subtle);transform:rotate(45deg);transition:transform var(--dur-fast) var(--ease-standard);}
|
|
@@ -1769,14 +2104,14 @@ a { color: var(--color-primary); }
|
|
|
1769
2104
|
.fdy-combo__option{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);font-size:var(--text-sm);color:var(--color-text);cursor:pointer;white-space:nowrap;}
|
|
1770
2105
|
.fdy-combo__option.is-highlighted{background:var(--color-surface-3);}
|
|
1771
2106
|
.fdy-combo__option[aria-selected="true"]{background:var(--color-primary-soft);color:var(--color-primary-strong);font-weight:var(--weight-semibold);}
|
|
1772
|
-
.fdy-combo__option.is-highlighted[aria-selected="true"]{box-shadow:inset 0 0 0 2px
|
|
2107
|
+
.fdy-combo__option.is-highlighted[aria-selected="true"]{box-shadow:inset 0 0 0 2px rgba(var(--color-primary-rgb),.55);}
|
|
1773
2108
|
/* The tick is CSS, not content (#004 §2). Inside role="option" it joined the option's ACCESSIBLE
|
|
1774
2109
|
NAME, so the selected option announced "✓August" while every other announced "August": the state
|
|
1775
2110
|
was read twice, once as aria-selected, once as decoration, and a test asking for an option by
|
|
1776
2111
|
its own label stopped matching the one that was selected. The `/ ""` is alt text: the glyph is
|
|
1777
2112
|
painted, the accessibility tree gets nothing. Same reasoning as .fdy-label--required (1.29.0).
|
|
1778
2113
|
The empty box still reserves its width, so labels stay aligned whether selected or not. */
|
|
1779
|
-
.fdy-combo__check{display:inline-flex;justify-content:center;width:var(--space-4);flex:none;font-weight:var(--weight-bold);color:var(--color-primary);}
|
|
2114
|
+
.fdy-combo__check{display:inline-flex;justify-content:center;width:var(--space-4);flex:none;font-weight:var(--weight-bold);color:var(--color-primary-strong);}
|
|
1780
2115
|
.fdy-combo__option[aria-selected="true"] .fdy-combo__check::after{content:"✓" / "";}
|
|
1781
2116
|
@media (prefers-reduced-motion:no-preference){.fdy-combo__listbox:not([hidden]){animation:fdy-combo-in var(--dur-fast) var(--ease-standard);}}
|
|
1782
2117
|
@keyframes fdy-combo-in{from{opacity:0;transform:translateY(-4px);}to{opacity:1;transform:none;}}
|
|
@@ -1926,10 +2261,10 @@ a { color: var(--color-primary); }
|
|
|
1926
2261
|
.fdy-field>.fdy-datepicker,.fdy-field>.fdy-timepicker,.fdy-field>.fdy-daterange{max-width:none;}
|
|
1927
2262
|
.fdy-datepicker__trigger{display:inline-flex;align-items:center;gap:var(--space-2);width:100%;height:var(--control-h);padding:0 var(--space-3);text-align:left;cursor:pointer;font-family:var(--font-body);font-size:var(--text-sm);color:var(--color-text);background:var(--color-surface);border:1.5px solid var(--color-control-border);border-radius:var(--radius-md);box-shadow:inset 0 1px 2px rgba(16,14,30,.06);transition:border-color var(--dur-fast) var(--ease-standard),box-shadow var(--dur-fast) var(--ease-standard);}
|
|
1928
2263
|
.fdy-datepicker__trigger:hover{border-color:var(--color-text-muted);}
|
|
1929
|
-
.fdy-datepicker__trigger:focus-visible{outline:none;border-color:var(--color-primary);box-shadow:inset 0 1px 2px rgba(16,14,30,.04),0 0 0 3px
|
|
1930
|
-
.fdy-datepicker__trigger.is-open{border-color:var(--color-primary);box-shadow:0 0 0 3px
|
|
2264
|
+
.fdy-datepicker__trigger:focus-visible{outline:none;border-color:var(--color-primary);box-shadow:inset 0 1px 2px rgba(16,14,30,.04),0 0 0 3px rgba(var(--color-primary-rgb),.26);}
|
|
2265
|
+
.fdy-datepicker__trigger.is-open{border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(var(--color-primary-rgb),.26);}
|
|
1931
2266
|
.fdy-datepicker--error .fdy-datepicker__trigger,.fdy-datepicker__trigger[aria-invalid="true"]{border-color:var(--color-danger);}
|
|
1932
|
-
.fdy-datepicker--error .fdy-datepicker__trigger:focus-visible,.fdy-datepicker--error .fdy-datepicker__trigger.is-open,.fdy-datepicker__trigger[aria-invalid="true"]:focus-visible{border-color:var(--color-danger);box-shadow:0 0 0 3px
|
|
2267
|
+
.fdy-datepicker--error .fdy-datepicker__trigger:focus-visible,.fdy-datepicker--error .fdy-datepicker__trigger.is-open,.fdy-datepicker__trigger[aria-invalid="true"]:focus-visible{border-color:var(--color-danger);box-shadow:0 0 0 3px rgba(var(--color-danger-rgb),.26);}
|
|
1933
2268
|
.fdy-datepicker__trigger:disabled,.fdy-datepicker__trigger[aria-disabled="true"]{opacity:.5;cursor:not-allowed;}
|
|
1934
2269
|
.fdy-datepicker__trigger[aria-readonly="true"]{background:var(--color-surface-2);border-color:var(--color-border);cursor:default;}
|
|
1935
2270
|
.fdy-datepicker__trigger[aria-readonly="true"]:hover{border-color:var(--color-border);}
|
|
@@ -1944,7 +2279,7 @@ a { color: var(--color-primary); }
|
|
|
1944
2279
|
.fdy-datepicker__icon.is-hidden{visibility:hidden;}
|
|
1945
2280
|
.fdy-datepicker__clear{position:absolute;top:50%;right:var(--space-3);transform:translateY(-50%);display:inline-flex;align-items:center;justify-content:center;width:1.15rem;height:1.15rem;padding:0;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-subtle);cursor:pointer;transition:color var(--dur-fast) var(--ease-standard),background var(--dur-fast) var(--ease-standard);}
|
|
1946
2281
|
.fdy-datepicker__clear:hover{color:var(--color-text);background:var(--color-surface-2);}
|
|
1947
|
-
.fdy-datepicker__clear:focus-visible{outline:none;color:var(--color-text);box-shadow:0 0 0 3px
|
|
2282
|
+
.fdy-datepicker__clear:focus-visible{outline:none;color:var(--color-text);box-shadow:0 0 0 3px rgba(var(--color-primary-rgb),.26);}
|
|
1948
2283
|
.fdy-datepicker__clear svg{display:block;width:.9rem;height:.9rem;}
|
|
1949
2284
|
|
|
1950
2285
|
.fdy-datepicker__panel{position:absolute;top:calc(100% + var(--space-1));left:0;z-index:130;padding:var(--space-3);background:var(--color-surface);color:var(--color-text);border:var(--bw) solid var(--color-border-strong);border-radius:var(--radius-md);box-shadow:var(--shadow-3);}
|
|
@@ -1956,16 +2291,16 @@ a { color: var(--color-primary); }
|
|
|
1956
2291
|
reset and the same hover/focus treatment as the arrows beside it. */
|
|
1957
2292
|
.fdy-cal__title{flex:1;appearance:none;border:0;background:transparent;margin:0;padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm);text-align:center;font-family:inherit;font-weight:var(--weight-semibold);font-size:var(--text-sm);color:var(--color-text);text-transform:capitalize;cursor:pointer;}
|
|
1958
2293
|
.fdy-cal__title:hover{background:var(--color-surface-2);}
|
|
1959
|
-
.fdy-cal__title:focus-visible{outline:none;box-shadow:0 0 0 3px
|
|
2294
|
+
.fdy-cal__title:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(var(--color-primary-rgb),.26);}
|
|
1960
2295
|
.fdy-cal__month,.fdy-cal__year{display:inline-flex;align-items:center;justify-content:center;height:2.25rem;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--color-text);font-family:inherit;font-size:var(--text-sm);text-transform:capitalize;cursor:pointer;}
|
|
1961
2296
|
.fdy-cal__month:hover,.fdy-cal__year:hover{background:var(--color-surface-2);}
|
|
1962
|
-
.fdy-cal__month:focus-visible,.fdy-cal__year:focus-visible{outline:none;box-shadow:0 0 0 3px
|
|
2297
|
+
.fdy-cal__month:focus-visible,.fdy-cal__year:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(var(--color-primary-rgb),.26);}
|
|
1963
2298
|
.fdy-cal__month:disabled,.fdy-cal__year:disabled{opacity:.4;cursor:not-allowed;background:transparent;}
|
|
1964
2299
|
.fdy-cal__month.is-today,.fdy-cal__year.is-today{font-weight:var(--weight-bold);box-shadow:inset 0 0 0 1.5px var(--color-border-strong);}
|
|
1965
2300
|
.fdy-cal__month.is-selected,.fdy-cal__year.is-selected{background:var(--color-primary);color:var(--color-on-primary);font-weight:var(--weight-semibold);}
|
|
1966
2301
|
.fdy-cal__nav{display:inline-flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;flex:none;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-muted);font-size:var(--text-lg);line-height:1;cursor:pointer;}
|
|
1967
2302
|
.fdy-cal__nav:hover{background:var(--color-surface-2);color:var(--color-text);}
|
|
1968
|
-
.fdy-cal__nav:focus-visible{outline:none;box-shadow:0 0 0 3px
|
|
2303
|
+
.fdy-cal__nav:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(var(--color-primary-rgb),.26);}
|
|
1969
2304
|
.fdy-cal__grid{display:grid;grid-template-columns:repeat(7,2rem);gap:2px;}
|
|
1970
2305
|
/* Month grid. 3×4 over the same track width as the 7-column day grid, so the panel does not resize
|
|
1971
2306
|
when you drill and the pointer does not have to travel.
|
|
@@ -1977,7 +2312,7 @@ a { color: var(--color-primary); }
|
|
|
1977
2312
|
.fdy-cal__dow{display:flex;align-items:center;justify-content:center;height:1.75rem;font-size:var(--text-xs);font-weight:var(--weight-semibold);color:var(--color-text-muted);text-transform:capitalize;}
|
|
1978
2313
|
.fdy-cal__day{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--color-text);font-size:var(--text-sm);font-variant-numeric:tabular-nums;cursor:pointer;}
|
|
1979
2314
|
.fdy-cal__day:hover{background:var(--color-surface-2);}
|
|
1980
|
-
.fdy-cal__day:focus-visible{outline:none;box-shadow:0 0 0 3px
|
|
2315
|
+
.fdy-cal__day:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(var(--color-primary-rgb),.26);}
|
|
1981
2316
|
.fdy-cal__day.is-outside{color:var(--color-text-subtle);opacity:.55;}
|
|
1982
2317
|
.fdy-cal__day.is-today{font-weight:var(--weight-bold);box-shadow:inset 0 0 0 1.5px var(--color-border-strong);}
|
|
1983
2318
|
.fdy-cal__day.in-range{background:var(--color-primary-soft);color:var(--color-primary-strong);border-radius:0;}
|
|
@@ -2058,11 +2393,11 @@ a { color: var(--color-primary); }
|
|
|
2058
2393
|
* Enhanced by freeday-upload.js; states: idle · drag-over · uploading · done · error. */
|
|
2059
2394
|
.fdy-dropzone{display:flex;flex-direction:column;align-items:center;gap:var(--space-2);padding:var(--space-6);text-align:center;border:2px dashed var(--color-control-border);border-radius:var(--radius-lg);background:var(--color-surface-2);color:var(--color-text-muted);cursor:pointer;transition:border-color var(--dur-fast) var(--ease-standard),background var(--dur-fast) var(--ease-standard),color var(--dur-fast) var(--ease-standard);}
|
|
2060
2395
|
.fdy-dropzone:hover{border-color:var(--color-text-muted);}
|
|
2061
|
-
.fdy-dropzone:focus-visible{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px
|
|
2396
|
+
.fdy-dropzone:focus-visible{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(var(--color-primary-rgb),.26);}
|
|
2062
2397
|
.fdy-dropzone.is-dragover{border-color:var(--color-primary);background:var(--color-primary-soft);color:var(--color-primary-strong);}
|
|
2063
2398
|
.fdy-dropzone[aria-disabled="true"],.fdy-dropzone.is-disabled{opacity:.55;cursor:not-allowed;pointer-events:none;}
|
|
2064
2399
|
.fdy-dropzone__icon{color:var(--color-text-subtle);}
|
|
2065
|
-
.fdy-dropzone.is-dragover .fdy-dropzone__icon{color:var(--color-primary);}
|
|
2400
|
+
.fdy-dropzone.is-dragover .fdy-dropzone__icon{color:var(--color-primary-strong);}
|
|
2066
2401
|
.fdy-dropzone__icon svg{display:block;width:2rem;height:2rem;}
|
|
2067
2402
|
.fdy-dropzone__title{font-size:inherit;font-weight:var(--weight-medium);color:var(--color-text);margin:0;}
|
|
2068
2403
|
.fdy-dropzone__hint{font-size:var(--text-xs);}
|
|
@@ -2089,9 +2424,14 @@ a { color: var(--color-primary); }
|
|
|
2089
2424
|
.fdy-file__progress{margin-top:var(--space-2);}
|
|
2090
2425
|
.fdy-file__remove{flex:none;display:inline-flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-muted);font-size:var(--text-lg);line-height:1;cursor:pointer;}
|
|
2091
2426
|
.fdy-file__remove:hover{background:var(--color-surface-2);color:var(--color-text);}
|
|
2092
|
-
.fdy-file__remove:focus-visible{outline:none;box-shadow:0 0 0 3px
|
|
2427
|
+
.fdy-file__remove:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(var(--color-primary-rgb),.26);}
|
|
2093
2428
|
.fdy-file--success .fdy-file__icon{color:var(--color-success);}
|
|
2094
|
-
|
|
2429
|
+
/* 40% of --color-danger over --color-border, as a token rather than as a mix written here: it blends
|
|
2430
|
+
* two ROLES, so no channel triple can state it, and mixing it in the component carried var() into
|
|
2431
|
+
* color-mix() — the shape that goes invalid at computed-value time and drops border-color to its
|
|
2432
|
+
* initial currentColor, which is the black box an iPhone 7 drew around a failed upload. The blend is
|
|
2433
|
+
* now computed per theme by tokens/build.mjs. */
|
|
2434
|
+
.fdy-file--error{border-color:var(--color-danger-border);}
|
|
2095
2435
|
.fdy-file--error .fdy-file__icon{color:var(--color-danger);}
|
|
2096
2436
|
.fdy-file--error .fdy-file__sub{color:var(--color-danger-strong);}
|
|
2097
2437
|
|
|
@@ -2163,7 +2503,7 @@ a { color: var(--color-primary); }
|
|
|
2163
2503
|
/* Freeday. Input group (prefix/suffix addons, e.g. Rp / % / icon) */
|
|
2164
2504
|
.fdy-input-group{display:flex;align-items:stretch;height:var(--control-h);max-width:22rem;background:var(--color-surface);border:1.5px solid var(--color-control-border);border-radius:var(--radius-md);box-shadow:inset 0 1px 2px rgba(16,14,30,.06);overflow:hidden;transition:border-color var(--dur-fast) var(--ease-standard),box-shadow var(--dur-fast) var(--ease-standard);}
|
|
2165
2505
|
.fdy-input-group:hover{border-color:var(--color-text-muted);}
|
|
2166
|
-
.fdy-input-group:focus-within{border-color:var(--color-primary);box-shadow:inset 0 1px 2px rgba(16,14,30,.04),0 0 0 3px
|
|
2506
|
+
.fdy-input-group:focus-within{border-color:var(--color-primary);box-shadow:inset 0 1px 2px rgba(16,14,30,.04),0 0 0 3px rgba(var(--color-primary-rgb),.26);}
|
|
2167
2507
|
/* The group owns the height; the input fills whatever the border leaves. It used to subtract 3px
|
|
2168
2508
|
for two 1.5px borders, which is arithmetic the engine is free to round: at dpr 1 each border
|
|
2169
2509
|
resolves to 1px, so the group rendered 1px short of every control beside it (#018). Stretching
|
|
@@ -2192,7 +2532,7 @@ a { color: var(--color-primary); }
|
|
|
2192
2532
|
.fdy-input-group__btn:disabled:hover{background:var(--color-surface-2);color:var(--color-text-muted);}
|
|
2193
2533
|
/* Error state must win over the neutralizing rules above, promote to the wrapper. */
|
|
2194
2534
|
.fdy-input-group:has(.fdy-input--error),.fdy-input-group:has(.fdy-combo--error),.fdy-input-group:has([aria-invalid="true"]){border-color:var(--color-danger);}
|
|
2195
|
-
.fdy-input-group:has(.fdy-input--error):focus-within,.fdy-input-group:has(.fdy-combo--error):focus-within,.fdy-input-group:has([aria-invalid="true"]):focus-within{border-color:var(--color-danger);box-shadow:inset 0 1px 2px rgba(16,14,30,.04),0 0 0 3px
|
|
2535
|
+
.fdy-input-group:has(.fdy-input--error):focus-within,.fdy-input-group:has(.fdy-combo--error):focus-within,.fdy-input-group:has([aria-invalid="true"]):focus-within{border-color:var(--color-danger);box-shadow:inset 0 1px 2px rgba(16,14,30,.04),0 0 0 3px rgba(var(--color-danger-rgb),.26);}
|
|
2196
2536
|
|
|
2197
2537
|
/* Freeday. Field & Input */
|
|
2198
2538
|
.fdy-field{display:flex;flex-direction:column;gap:var(--space-2);max-width:22rem;}
|
|
@@ -2228,7 +2568,7 @@ fieldset.fdy-field>legend{padding:0;float:none;margin-bottom:var(--space-2);}
|
|
|
2228
2568
|
.fdy-input::placeholder,.fdy-textarea::placeholder{color:var(--color-text-subtle);}
|
|
2229
2569
|
.fdy-textarea{height:auto;min-height:5.5rem;padding:var(--space-3);line-height:var(--leading-normal);resize:vertical;}
|
|
2230
2570
|
.fdy-input:hover,.fdy-textarea:hover{border-color:var(--color-text-muted);}
|
|
2231
|
-
.fdy-input:focus,.fdy-textarea:focus{outline:none;border-color:var(--color-primary);box-shadow:inset 0 1px 2px rgba(16,14,30,.04),0 0 0 3px
|
|
2571
|
+
.fdy-input:focus,.fdy-textarea:focus{outline:none;border-color:var(--color-primary);box-shadow:inset 0 1px 2px rgba(16,14,30,.04),0 0 0 3px rgba(var(--color-primary-rgb),.26);}
|
|
2232
2572
|
.fdy-input:disabled,.fdy-textarea:disabled,.fdy-input[aria-disabled="true"],.fdy-textarea[aria-disabled="true"]{opacity:.5;cursor:not-allowed;}
|
|
2233
2573
|
/* Read-only (#39): the value is real and may be read/copied, only not edited. Full contrast (unlike
|
|
2234
2574
|
:disabled which dims to placeholder-grey), muted surface + softened border so it still reads as
|
|
@@ -2245,7 +2585,7 @@ fieldset.fdy-field>legend{padding:0;float:none;margin-bottom:var(--space-2);}
|
|
|
2245
2585
|
.fdy-input[type="number"]{appearance:textfield;-webkit-appearance:textfield;}
|
|
2246
2586
|
.fdy-input[type="number"]::-webkit-outer-spin-button,.fdy-input[type="number"]::-webkit-inner-spin-button{appearance:none;-webkit-appearance:none;margin:0;}
|
|
2247
2587
|
.fdy-input--error,.fdy-input[aria-invalid="true"],.fdy-textarea[aria-invalid="true"]{border-color:var(--color-danger);}
|
|
2248
|
-
.fdy-input--error:focus,.fdy-input[aria-invalid="true"]:focus,.fdy-textarea[aria-invalid="true"]:focus{border-color:var(--color-danger);box-shadow:0 0 0 3px
|
|
2588
|
+
.fdy-input--error:focus,.fdy-input[aria-invalid="true"]:focus,.fdy-textarea[aria-invalid="true"]:focus{border-color:var(--color-danger);box-shadow:0 0 0 3px rgba(var(--color-danger-rgb),.26);}
|
|
2249
2589
|
/* Required marker. The control already carries `required`, so the asterisk is decoration: the
|
|
2250
2590
|
`/ ""` is CSS alt text, the glyph is painted but exposes NOTHING to the accessibility tree, so a
|
|
2251
2591
|
screen reader does not read "star" after every label. That is stricter than a <span> an app has to
|
|
@@ -2311,7 +2651,7 @@ fieldset.fdy-field>legend{padding:0;float:none;margin-bottom:var(--space-2);}
|
|
|
2311
2651
|
/* Focus is not hover. The enhancer moves real DOM focus (freeday-menu.js `.focus()`), so this is
|
|
2312
2652
|
the only thing a keyboard user has to go on, with the hover fill alone, arrowing through the
|
|
2313
2653
|
menu is invisible. Same ring as .fdy-nav__item, which got this right. Reported twice. */
|
|
2314
|
-
.fdy-menu__item:focus-visible{outline:none;background:var(--color-surface-3);box-shadow:0 0 0 2px
|
|
2654
|
+
.fdy-menu__item:focus-visible{outline:none;background:var(--color-surface-3);box-shadow:0 0 0 2px rgba(var(--color-primary-rgb),.45);}
|
|
2315
2655
|
.fdy-menu__item:disabled{opacity:.5;cursor:not-allowed;background:transparent;}
|
|
2316
2656
|
.fdy-menu__item--danger{color:var(--color-danger-strong);}
|
|
2317
2657
|
.fdy-menu__item svg{display:block;width:1rem;height:1rem;flex:none;}
|
|
@@ -2328,8 +2668,8 @@ fieldset.fdy-field>legend{padding:0;float:none;margin-bottom:var(--space-2);}
|
|
|
2328
2668
|
.fdy-btn-split__toggle{padding:0 var(--space-2);margin-left:calc(var(--bw) * -1);border-top-left-radius:0;border-bottom-left-radius:0;}
|
|
2329
2669
|
/* Hairline divider between the halves (outranks the segment rule above). */
|
|
2330
2670
|
.fdy-btn-split > .fdy-btn-split__toggle{box-shadow:inset 0 1px 0 rgba(255,255,255,.26),inset 1px 0 0 rgba(0,0,0,.16);}
|
|
2331
|
-
.fdy-btn-split:hover{transform:translateY(-1px);box-shadow:0 6px 18px -2px
|
|
2332
|
-
.fdy-btn-split:active{transform:translateY(1px);box-shadow:0 1px 4px -1px
|
|
2671
|
+
.fdy-btn-split:hover{transform:translateY(-1px);box-shadow:0 6px 18px -2px rgba(var(--color-primary-rgb),.55);}
|
|
2672
|
+
.fdy-btn-split:active{transform:translateY(1px);box-shadow:0 1px 4px -1px rgba(var(--color-primary-rgb),.46);}
|
|
2333
2673
|
.fdy-btn-split__toggle:hover,.fdy-btn-split__toggle:focus-visible{z-index:1;}
|
|
2334
2674
|
.fdy-btn-split__toggle svg{display:block;width:1rem;height:1rem;}
|
|
2335
2675
|
|
|
@@ -2360,7 +2700,7 @@ fieldset.fdy-field>legend{padding:0;float:none;margin-bottom:var(--space-2);}
|
|
|
2360
2700
|
.fdy-pagination__list{display:flex;align-items:center;gap:var(--space-1);list-style:none;margin:0;padding:0;}
|
|
2361
2701
|
.fdy-pagination__link{display:inline-flex;align-items:center;justify-content:center;min-width:2.25rem;height:2.25rem;padding:0 var(--space-2);border-radius:var(--radius-md);font-size:var(--text-sm);font-weight:var(--weight-medium);color:var(--color-text);background:transparent;border:var(--bw) solid transparent;text-decoration:none;cursor:pointer;transition:background var(--dur-fast) var(--ease-standard),border-color var(--dur-fast) var(--ease-standard);}
|
|
2362
2702
|
.fdy-pagination__link:hover{background:var(--color-surface-2);border-color:var(--color-border);}
|
|
2363
|
-
.fdy-pagination__link:focus-visible{outline:none;box-shadow:0 0 0 3px
|
|
2703
|
+
.fdy-pagination__link:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(var(--color-primary-rgb),.26);}
|
|
2364
2704
|
.fdy-pagination__link[aria-current="page"]{background:var(--color-primary);color:var(--color-on-primary);}
|
|
2365
2705
|
.fdy-pagination__link[aria-disabled="true"],.fdy-pagination__link:disabled{opacity:.5;cursor:not-allowed;pointer-events:none;}
|
|
2366
2706
|
.fdy-pagination__ellipsis{display:inline-flex;align-items:center;justify-content:center;min-width:2.25rem;height:2.25rem;color:var(--color-text-subtle);}
|
|
@@ -2406,7 +2746,7 @@ fieldset.fdy-field>legend{padding:0;float:none;margin-bottom:var(--space-2);}
|
|
|
2406
2746
|
.fdy-radio input::before{content:"";width:.55rem;height:.55rem;border-radius:50%;transform:scale(0);transition:transform var(--dur-fast) var(--ease-spring);box-shadow:inset 1rem 1rem var(--color-on-primary);}
|
|
2407
2747
|
.fdy-check input:checked,.fdy-radio input:checked{background:var(--color-primary);border-color:var(--color-primary);}
|
|
2408
2748
|
.fdy-check input:checked::before,.fdy-radio input:checked::before{transform:scale(1);}
|
|
2409
|
-
.fdy-check input:focus-visible,.fdy-radio input:focus-visible,.fdy-switch input:focus-visible{outline:none;box-shadow:0 0 0 3px
|
|
2749
|
+
.fdy-check input:focus-visible,.fdy-radio input:focus-visible,.fdy-switch input:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(var(--color-primary-rgb),.26);}
|
|
2410
2750
|
.fdy-check input:disabled,.fdy-radio input:disabled,.fdy-switch input:disabled{opacity:.5;cursor:not-allowed;}
|
|
2411
2751
|
.fdy-check:has(input:disabled),.fdy-radio:has(input:disabled),.fdy-switch:has(input:disabled){cursor:not-allowed;}
|
|
2412
2752
|
.fdy-switch input{appearance:none;-webkit-appearance:none;flex:none;position:relative;width:var(--control-switch-w);height:var(--control-switch-h);margin:0;border-radius:var(--radius-full);background:var(--color-control-border);cursor:pointer;transition:background var(--dur-base) var(--ease-standard);}
|
|
@@ -2426,11 +2766,11 @@ fieldset.fdy-field>legend{padding:0;float:none;margin-bottom:var(--space-2);}
|
|
|
2426
2766
|
.fdy-checkbox:checked,.fdy-checkbox:indeterminate{background:var(--color-primary);border-color:var(--color-primary);}
|
|
2427
2767
|
.fdy-checkbox:checked::before{transform:scale(1);}
|
|
2428
2768
|
.fdy-checkbox:indeterminate::before{width:.6rem;height:2px;transform:scale(1);clip-path:none;box-shadow:none;background:var(--color-on-primary);}
|
|
2429
|
-
.fdy-checkbox:focus-visible{outline:none;box-shadow:0 0 0 3px
|
|
2769
|
+
.fdy-checkbox:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(var(--color-primary-rgb),.26);}
|
|
2430
2770
|
.fdy-checkbox:disabled{opacity:.5;cursor:not-allowed;}
|
|
2431
2771
|
|
|
2432
2772
|
/* Freeday. Skeleton */
|
|
2433
|
-
.fdy-skeleton{display:block;border-radius:var(--radius-sm);background:var(--color-surface-3);background-image:linear-gradient(90deg,transparent,
|
|
2773
|
+
.fdy-skeleton{display:block;border-radius:var(--radius-sm);background:var(--color-surface-3);background-image:linear-gradient(90deg,transparent,rgba(var(--color-surface-rgb),.6),transparent);background-size:200% 100%;background-repeat:no-repeat;animation:fdy-skeleton 1.4s ease-in-out infinite;}
|
|
2434
2774
|
.fdy-skeleton--text{height:.8rem;margin:.3rem 0;}
|
|
2435
2775
|
.fdy-skeleton--title{height:1.2rem;width:40%;}
|
|
2436
2776
|
.fdy-skeleton--circle{border-radius:var(--radius-full);}
|
|
@@ -2511,7 +2851,7 @@ fieldset.fdy-field>legend{padding:0;float:none;margin-bottom:var(--space-2);}
|
|
|
2511
2851
|
.fdy-stepper[aria-busy="true"]{opacity:.72;}
|
|
2512
2852
|
.fdy-step.is-active .fdy-step__label{color:var(--color-text);font-weight:var(--weight-semibold);}
|
|
2513
2853
|
.fdy-step__btn:focus-visible{outline:none;}
|
|
2514
|
-
.fdy-step__btn:focus-visible .fdy-step__marker{box-shadow:0 0 0 3px
|
|
2854
|
+
.fdy-step__btn:focus-visible .fdy-step__marker{box-shadow:0 0 0 3px rgba(var(--color-primary-rgb),.3);}
|
|
2515
2855
|
|
|
2516
2856
|
.fdy-step-panels{margin-top:var(--space-5);}
|
|
2517
2857
|
.fdy-step-nav{display:flex;justify-content:space-between;gap:var(--space-2);margin-top:var(--space-5);}
|
|
@@ -2532,10 +2872,15 @@ fieldset.fdy-field>legend{padding:0;float:none;margin-bottom:var(--space-2);}
|
|
|
2532
2872
|
invisible on every second row. The tint is HALF a surface step rather than --color-surface-2
|
|
2533
2873
|
itself, for the same reason: hover paints the full step, so the two must not be the same colour.
|
|
2534
2874
|
Exposed as a Tier-3 token through the var() FALLBACK, never as a declaration — a custom property
|
|
2535
|
-
set here would outrank a host's own :root override.
|
|
2875
|
+
set here would outrank a host's own :root override.
|
|
2876
|
+
The tint arrives as --color-surface-stripe, already flattened, rather than as a color-mix() of
|
|
2877
|
+
two surfaces. A custom property cannot carry color-mix(): the `background` that finally reads it
|
|
2878
|
+
contains var(), so on Safari <= 16.1 it failed at computed-value time and the stripe vanished,
|
|
2879
|
+
and a preceding declaration is never consulted in that path. The token is also OPAQUE on
|
|
2880
|
+
purpose, which the frozen column below depends on. */
|
|
2536
2881
|
/* The resting colour is also published as --_fdy-row-rest, so a row that must not answer the
|
|
2537
2882
|
pointer can hover back to exactly what it was (see --hover-actionable). */
|
|
2538
|
-
.fdy-table--striped tbody tr:nth-child(even){--_fdy-row-rest:var(--fdy-table-stripe,
|
|
2883
|
+
.fdy-table--striped tbody tr:nth-child(even){--_fdy-row-rest:var(--fdy-table-stripe,var(--color-surface-stripe));background:var(--_fdy-row-rest);}
|
|
2539
2884
|
.fdy-table tbody tr:hover{background:var(--_fdy-row-hover,var(--color-surface-2));}
|
|
2540
2885
|
/* Opt-in (#064): only a row that DOES something answers the pointer. A tint on a row with no click
|
|
2541
2886
|
handler promises a target that is not there: people click the row, nothing happens, and the
|
|
@@ -2559,13 +2904,13 @@ fieldset.fdy-field>legend{padding:0;float:none;margin-bottom:var(--space-2);}
|
|
|
2559
2904
|
/* Expandable detail row (FdyTable row-detail slot): a muted panel under its row, no hover tint. */
|
|
2560
2905
|
.fdy-table__detailrow>td,.fdy-table__detailrow:hover>td{background:var(--color-surface-2);}
|
|
2561
2906
|
.fdy-table th[aria-sort]{cursor:pointer;}
|
|
2562
|
-
.fdy-table th[aria-sort="ascending"]::after{content:" ↑";color:var(--color-primary);}
|
|
2563
|
-
.fdy-table th[aria-sort="descending"]::after{content:" ↓";color:var(--color-primary);}
|
|
2907
|
+
.fdy-table th[aria-sort="ascending"]::after{content:" ↑";color:var(--color-primary-strong);}
|
|
2908
|
+
.fdy-table th[aria-sort="descending"]::after{content:" ↓";color:var(--color-primary-strong);}
|
|
2564
2909
|
|
|
2565
2910
|
/* Sortable header button (accessible click target inside th) */
|
|
2566
2911
|
.fdy-table__sortbtn{appearance:none;border:0;background:transparent;font:inherit;color:inherit;text-transform:inherit;letter-spacing:inherit;font-weight:inherit;cursor:pointer;padding:0;}
|
|
2567
2912
|
.fdy-table__sortbtn:hover{color:var(--color-text);}
|
|
2568
|
-
.fdy-table__sortbtn:focus-visible{outline:none;border-radius:var(--radius-sm);box-shadow:0 0 0 3px
|
|
2913
|
+
.fdy-table__sortbtn:focus-visible{outline:none;border-radius:var(--radius-sm);box-shadow:0 0 0 3px rgba(var(--color-primary-rgb),.26);}
|
|
2569
2914
|
|
|
2570
2915
|
/* Selection column + selected row */
|
|
2571
2916
|
.fdy-table__selcol{width:1px;white-space:nowrap;}
|
|
@@ -2612,7 +2957,7 @@ fieldset.fdy-field>legend{padding:0;float:none;margin-bottom:var(--space-2);}
|
|
|
2612
2957
|
stripe — and deliberately WITHOUT `.fdy-table--sticky` in the selector, which would push this to
|
|
2613
2958
|
(0,4,3) and beat the hover rule below. At (0,3,3) it ties, and the later rule wins, so a hovered
|
|
2614
2959
|
row still bands unbroken across the freeze line. */
|
|
2615
|
-
.fdy-table--striped tbody tr:nth-child(even) td.fdy-table__freeze{background:var(--fdy-table-stripe,
|
|
2960
|
+
.fdy-table--striped tbody tr:nth-child(even) td.fdy-table__freeze{background:var(--fdy-table-stripe,var(--color-surface-stripe));}
|
|
2616
2961
|
.fdy-table--sticky tbody tr:hover td.fdy-table__freeze{background:var(--_fdy-row-hover,var(--color-surface-2));}
|
|
2617
2962
|
/* A frozen header cell is stuck on both axes wherever the head is frozen too, so
|
|
2618
2963
|
it has to outrank both. */
|
|
@@ -2649,7 +2994,7 @@ fieldset.fdy-field>legend{padding:0;float:none;margin-bottom:var(--space-2);}
|
|
|
2649
2994
|
.fdy-table__filterwrap{display:inline-flex;align-items:center;vertical-align:middle;}
|
|
2650
2995
|
.fdy-table__filterbtn{appearance:none;display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;margin-left:var(--space-1);padding:0;vertical-align:middle;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-subtle);cursor:pointer;}
|
|
2651
2996
|
.fdy-table__filterbtn:hover{background:var(--color-surface-3);color:var(--color-text);}
|
|
2652
|
-
.fdy-table__filterbtn:focus-visible{outline:none;box-shadow:0 0 0 3px
|
|
2997
|
+
.fdy-table__filterbtn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(var(--color-primary-rgb),.26);}
|
|
2653
2998
|
.fdy-table__filterbtn.is-active{color:var(--color-primary-strong);}
|
|
2654
2999
|
.fdy-table__filterbtn svg{width:.85rem;height:.85rem;}
|
|
2655
3000
|
|
|
@@ -2705,12 +3050,43 @@ fieldset.fdy-field>legend{padding:0;float:none;margin-bottom:var(--space-2);}
|
|
|
2705
3050
|
a panel per tab) for in-page tabs; use these classes on plain links for routed ones, and
|
|
2706
3051
|
`.fdy-nav--horizontal` for an application's PRIMARY navigation. */
|
|
2707
3052
|
.fdy-tabs__tab[aria-selected="true"],.fdy-tabs__tab[aria-current="page"]{color:var(--color-primary-strong);border-bottom-color:var(--color-primary);}
|
|
2708
|
-
.fdy-tabs__tab:focus-visible{outline:none;border-radius:var(--radius-sm);box-shadow:0 0 0 3px
|
|
3053
|
+
.fdy-tabs__tab:focus-visible{outline:none;border-radius:var(--radius-sm);box-shadow:0 0 0 3px rgba(var(--color-primary-rgb),.26);}
|
|
2709
3054
|
.fdy-tabs__panel{padding:var(--space-5) 0;}
|
|
2710
3055
|
.fdy-tabs__panel[hidden]{display:none;}
|
|
2711
3056
|
/* Reveal the newly-shown panel on tab switch (fade + rise), reduced-motion gated. */
|
|
2712
3057
|
@media (prefers-reduced-motion:no-preference){.fdy-tabs__panel:not([hidden]){animation:fdy-combo-in var(--dur-base) var(--ease-standard);}}
|
|
2713
3058
|
|
|
3059
|
+
/* VERTICAL VARIANT: the same tabs turned down the page, list on the leading side, panel beside it.
|
|
3060
|
+
*
|
|
3061
|
+
* Two markers, one each, and they are not interchangeable. The CLASS decides the look, because a
|
|
3062
|
+
* stylesheet cannot reach a parent from a child and the two-column box belongs to `.fdy-tabs`
|
|
3063
|
+
* itself. The ATTRIBUTE `aria-orientation="vertical"` on the tablist decides the keyboard, because
|
|
3064
|
+
* that is the thing an assistive technology announces and APG requires it on a vertical tablist
|
|
3065
|
+
* anyway. `freeday-tabs.js` writes the attribute when only the class is present, so an app states
|
|
3066
|
+
* the axis once and the two can never disagree.
|
|
3067
|
+
*
|
|
3068
|
+
* Selection is a SOFT FILL here, not a leading edge bar. Sideways, the marker is an underline under
|
|
3069
|
+
* the tab it belongs to; turned 90 degrees that line lands between two tabs and points at the wrong
|
|
3070
|
+
* one. The kit already has an answer for "one item in a vertical list is where you are" and spends
|
|
3071
|
+
* it in four places (`.fdy-nav__item[aria-current]`, the combo, cascade and autocomplete options):
|
|
3072
|
+
* `--color-primary-soft` behind `--color-primary-strong`. Both are precomputed tone tokens, so this
|
|
3073
|
+
* needs no color-mix() and no alpha of its own.
|
|
3074
|
+
*
|
|
3075
|
+
* What it deliberately does NOT do: pick a column width (set `--fdy-tabs-list-w`, default `auto`),
|
|
3076
|
+
* and collapse to one column on a narrow screen. Whether these tabs are a whole page, a card or a
|
|
3077
|
+
* drawer is the page's knowledge, not the component's, so the breakpoint is the page's to write. */
|
|
3078
|
+
.fdy-tabs--vertical{display:flex;align-items:flex-start;gap:var(--space-5);}
|
|
3079
|
+
/* `overflow:visible` on both axes, because the base strip scrolls sideways: a scroll container
|
|
3080
|
+
clips to its padding box, and a column has no sideways overflow to scroll, only a focus ring to
|
|
3081
|
+
lose. `box-shadow:none` drops the strip's own bottom line with it. */
|
|
3082
|
+
.fdy-tabs--vertical .fdy-tabs__list{flex:none;flex-direction:column;width:var(--fdy-tabs-list-w,auto);overflow:visible;box-shadow:none;}
|
|
3083
|
+
/* `white-space:normal` and `text-align:start` are corrections, not taste: a tab in a column of
|
|
3084
|
+
fixed width that may not wrap will overflow it, and a button centres its label by default. */
|
|
3085
|
+
.fdy-tabs--vertical .fdy-tabs__tab{border-bottom:0;border-radius:var(--radius-md);text-align:start;white-space:normal;}
|
|
3086
|
+
.fdy-tabs--vertical .fdy-tabs__tab:focus-visible{border-radius:var(--radius-md);}
|
|
3087
|
+
.fdy-tabs--vertical .fdy-tabs__tab[aria-selected="true"],.fdy-tabs--vertical .fdy-tabs__tab[aria-current="page"]{background:var(--color-primary-soft);color:var(--color-primary-strong);font-weight:var(--weight-semibold);}
|
|
3088
|
+
.fdy-tabs--vertical .fdy-tabs__panel{flex:1;min-width:0;padding:0;}
|
|
3089
|
+
|
|
2714
3090
|
/* Freeday. Timeline (vertical event feed: dot markers on a connector line). Pure CSS. */
|
|
2715
3091
|
.fdy-timeline{list-style:none;margin:0;padding:0;}
|
|
2716
3092
|
.fdy-timeline__item{position:relative;padding:0 0 var(--space-5) var(--space-6);border-left:2px solid var(--color-border);}
|
|
@@ -2730,10 +3106,10 @@ fieldset.fdy-field>legend{padding:0;float:none;margin-bottom:var(--space-2);}
|
|
|
2730
3106
|
.fdy-timepicker{position:relative;display:inline-block;width:100%;max-width:11rem;}
|
|
2731
3107
|
.fdy-timepicker__trigger{display:inline-flex;align-items:center;gap:var(--space-2);width:100%;height:var(--control-h);padding:0 var(--space-3);text-align:left;cursor:pointer;font-family:var(--font-body);font-size:var(--text-sm);color:var(--color-text);background:var(--color-surface);border:1.5px solid var(--color-control-border);border-radius:var(--radius-md);box-shadow:inset 0 1px 2px rgba(16,14,30,.06);transition:border-color var(--dur-fast) var(--ease-standard),box-shadow var(--dur-fast) var(--ease-standard);}
|
|
2732
3108
|
.fdy-timepicker__trigger:hover{border-color:var(--color-text-muted);}
|
|
2733
|
-
.fdy-timepicker__trigger:focus-visible{outline:none;border-color:var(--color-primary);box-shadow:inset 0 1px 2px rgba(16,14,30,.04),0 0 0 3px
|
|
2734
|
-
.fdy-timepicker__trigger.is-open{border-color:var(--color-primary);box-shadow:0 0 0 3px
|
|
3109
|
+
.fdy-timepicker__trigger:focus-visible{outline:none;border-color:var(--color-primary);box-shadow:inset 0 1px 2px rgba(16,14,30,.04),0 0 0 3px rgba(var(--color-primary-rgb),.26);}
|
|
3110
|
+
.fdy-timepicker__trigger.is-open{border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(var(--color-primary-rgb),.26);}
|
|
2735
3111
|
.fdy-timepicker--error .fdy-timepicker__trigger,.fdy-timepicker__trigger[aria-invalid="true"]{border-color:var(--color-danger);}
|
|
2736
|
-
.fdy-timepicker--error .fdy-timepicker__trigger:focus-visible,.fdy-timepicker--error .fdy-timepicker__trigger.is-open,.fdy-timepicker__trigger[aria-invalid="true"]:focus-visible{border-color:var(--color-danger);box-shadow:0 0 0 3px
|
|
3112
|
+
.fdy-timepicker--error .fdy-timepicker__trigger:focus-visible,.fdy-timepicker--error .fdy-timepicker__trigger.is-open,.fdy-timepicker__trigger[aria-invalid="true"]:focus-visible{border-color:var(--color-danger);box-shadow:0 0 0 3px rgba(var(--color-danger-rgb),.26);}
|
|
2737
3113
|
.fdy-timepicker__trigger:disabled,.fdy-timepicker__trigger[aria-disabled="true"]{opacity:.5;cursor:not-allowed;}
|
|
2738
3114
|
.fdy-timepicker__value{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums;}
|
|
2739
3115
|
.fdy-timepicker__value--placeholder{color:var(--color-text-subtle);}
|
|
@@ -2773,7 +3149,7 @@ fieldset.fdy-field>legend{padding:0;float:none;margin-bottom:var(--space-2);}
|
|
|
2773
3149
|
.fdy-toast__text{opacity:.88;line-height:var(--leading-normal);}
|
|
2774
3150
|
.fdy-toast__close{flex:none;border:0;background:transparent;color:var(--color-inverse-text);opacity:.7;cursor:pointer;font-size:var(--text-lg);line-height:1;padding:0 var(--space-1);border-radius:var(--radius-sm);}
|
|
2775
3151
|
.fdy-toast__close:hover{opacity:1;}
|
|
2776
|
-
.fdy-toast__close:focus-visible{outline:none;opacity:1;box-shadow:0 0 0 3px
|
|
3152
|
+
.fdy-toast__close:focus-visible{outline:none;opacity:1;box-shadow:0 0 0 3px rgba(var(--color-inverse-text-rgb),.4);}
|
|
2777
3153
|
.fdy-toast.is-leaving{opacity:0;transform:translateX(16px);transition:opacity var(--dur-base) var(--ease-standard),transform var(--dur-base) var(--ease-standard);}
|
|
2778
3154
|
@media (prefers-reduced-motion:no-preference){.fdy-toast{animation:fdy-toast-in var(--dur-base) var(--ease-spring);}}
|
|
2779
3155
|
@keyframes fdy-toast-in{from{opacity:0;transform:translateY(14px);}to{opacity:1;transform:none;}}
|
|
@@ -2793,7 +3169,7 @@ fieldset.fdy-field>legend{padding:0;float:none;margin-bottom:var(--space-2);}
|
|
|
2793
3169
|
.fdy-tree__branch > summary{list-style:none;cursor:pointer;}
|
|
2794
3170
|
.fdy-tree__branch > summary::-webkit-details-marker{display:none;}
|
|
2795
3171
|
.fdy-tree__branch > summary:hover,.fdy-tree__leaf:hover{background:var(--color-surface-2);}
|
|
2796
|
-
.fdy-tree__branch > summary:focus-visible{outline:none;box-shadow:inset 0 0 0 2px
|
|
3172
|
+
.fdy-tree__branch > summary:focus-visible{outline:none;box-shadow:inset 0 0 0 2px rgba(var(--color-primary-rgb),.45);}
|
|
2797
3173
|
.fdy-tree__chevron{flex:none;width:.9rem;height:.9rem;color:var(--color-text-subtle);transition:transform var(--dur-fast) var(--ease-standard);}
|
|
2798
3174
|
.fdy-tree__branch[open] > summary .fdy-tree__chevron{transform:rotate(90deg);}
|
|
2799
3175
|
.fdy-tree__icon{flex:none;width:1rem;height:1rem;color:var(--color-text-muted);}
|