@kolkrabbi/kol-theme 0.102.0 → 0.103.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.
@@ -25,8 +25,23 @@
25
25
  :root,
26
26
  :is([data-theme="light"], .light) {
27
27
  /* Absolutes (theme-invariant) */
28
+ /* TWO PAIRS OF POLES, AND THEY ARE NOT THE SAME PAIR (user ruling 2026-08-30).
29
+ *
30
+ * ab PURE polarity — #000000 / #ffffff. The absolute ends of the
31
+ * range. Use when a step has to go past the theme's own ink:
32
+ * "applying a percentage of primary on top of primary won't make
33
+ * it darker, but applying a percentage of 000000 will."
34
+ * absolute THE THEME'S OWN near-black / near-white, FROZEN. Same colour in
35
+ * light and dark — the original meaning of the word here, before
36
+ * the 2026-08-28 rename collapsed it into an alias of `ab`.
37
+ *
38
+ * Both families are theme-INVARIANT. What separates them is which poles they
39
+ * mix between, not whether they flip. `fg-*` / `oq-*` and their `-inverse`
40
+ * twins are the families that flip. */
28
41
  --kol-color-ab-white: #ffffff;
29
42
  --kol-color-ab-black: #000000;
43
+ --kol-color-white: #fcfbf8;
44
+ --kol-color-black: #0e0e11;
30
45
 
31
46
  /* Surface tiers (page-level) — Light Mode (default) */
32
47
  --kol-surface-primary: #fafafa;
package/kol-opacity.css CHANGED
@@ -447,43 +447,209 @@
447
447
  .hover\:text-default:hover { color: var(--kol-fg-body); }
448
448
 
449
449
  /* ============================================================================
450
- * ALIASESthe old `absolute` spelling (renamed to `ab`, user ruling 2026-08-28)
450
+ * `absolute`THE THEME'S OWN POLES, FROZEN (user ruling 2026-08-30)
451
451
  *
452
- * Kept so no consumer breaks silently on a name change: `--kol-fg-absolute-NN`
453
- * and `.bg-fg-absolute-NN` still resolve, to the same value as before. New code
454
- * writes `ab`. Drop these once the estate has moved.
452
+ * From 2026-08-28 to 2026-08-30 this name was a deprecated ALIAS of `ab`, kept
453
+ * through the rename. It is a family again, and a different one:
454
+ *
455
+ * fg-ab-NN pure #000000 at NN%% — the absolute end of the range
456
+ * fg-absolute-NN the theme's #0e0e11 at NN%% — its own near-black, frozen
457
+ *
458
+ * Both are theme-invariant; they differ in which pole they mix from. The
459
+ * `-inverse` twin of each is the light pole, and it is the half that was
460
+ * missing — `fg-ab-inverse-*` never existed, so "a white wash that does not
461
+ * flip" had no token and got hand-written as a color-mix at the call site.
462
+ *
463
+ * ⚠️ THE MEANING OF `fg-absolute-*` CHANGED HERE. It was #000000 and is now
464
+ * #0e0e11 — a delta of 3/255 at full alpha, invisible at the stops anyone uses,
465
+ * but a real change. Live consumers when this shipped: kol-website's
466
+ * HomeSignup, PrintDetailOverlay, and the brand app's color.js / components.js.
455
467
  * ============================================================================ */
456
468
  :root {
457
- --kol-fg-absolute-01: var(--kol-fg-ab-01);
458
- --kol-fg-absolute-02: var(--kol-fg-ab-02);
459
- --kol-fg-absolute-04: var(--kol-fg-ab-04);
460
- --kol-fg-absolute-08: var(--kol-fg-ab-08);
461
- --kol-fg-absolute-12: var(--kol-fg-ab-12);
462
- --kol-fg-absolute-16: var(--kol-fg-ab-16);
463
- --kol-fg-absolute-24: var(--kol-fg-ab-24);
464
- --kol-fg-absolute-32: var(--kol-fg-ab-32);
465
- --kol-fg-absolute-40: var(--kol-fg-ab-40);
466
- --kol-fg-absolute-48: var(--kol-fg-ab-48);
467
- --kol-fg-absolute-64: var(--kol-fg-ab-64);
468
- --kol-fg-absolute-72: var(--kol-fg-ab-72);
469
- --kol-fg-absolute-80: var(--kol-fg-ab-80);
470
- --kol-fg-absolute-88: var(--kol-fg-ab-88);
471
- --kol-fg-absolute-96: var(--kol-fg-ab-96);
472
- --kol-color-absolute-black: var(--kol-color-ab-black);
473
- --kol-color-absolute-white: var(--kol-color-ab-white);
469
+ /* fg-absolute */
470
+ --kol-fg-absolute-01: color-mix(in srgb, var(--kol-color-black) 1%, transparent);
471
+ --kol-fg-absolute-02: color-mix(in srgb, var(--kol-color-black) 2%, transparent);
472
+ --kol-fg-absolute-04: color-mix(in srgb, var(--kol-color-black) 4%, transparent);
473
+ --kol-fg-absolute-08: color-mix(in srgb, var(--kol-color-black) 8%, transparent);
474
+ --kol-fg-absolute-12: color-mix(in srgb, var(--kol-color-black) 12%, transparent);
475
+ --kol-fg-absolute-16: color-mix(in srgb, var(--kol-color-black) 16%, transparent);
476
+ --kol-fg-absolute-24: color-mix(in srgb, var(--kol-color-black) 24%, transparent);
477
+ --kol-fg-absolute-32: color-mix(in srgb, var(--kol-color-black) 32%, transparent);
478
+ --kol-fg-absolute-40: color-mix(in srgb, var(--kol-color-black) 40%, transparent);
479
+ --kol-fg-absolute-48: color-mix(in srgb, var(--kol-color-black) 48%, transparent);
480
+ --kol-fg-absolute-64: color-mix(in srgb, var(--kol-color-black) 64%, transparent);
481
+ --kol-fg-absolute-72: color-mix(in srgb, var(--kol-color-black) 72%, transparent);
482
+ --kol-fg-absolute-80: color-mix(in srgb, var(--kol-color-black) 80%, transparent);
483
+ --kol-fg-absolute-88: color-mix(in srgb, var(--kol-color-black) 88%, transparent);
484
+ --kol-fg-absolute-96: color-mix(in srgb, var(--kol-color-black) 96%, transparent);
485
+ /* fg-absolute-inverse */
486
+ --kol-fg-absolute-inverse-01: color-mix(in srgb, var(--kol-color-white) 1%, transparent);
487
+ --kol-fg-absolute-inverse-02: color-mix(in srgb, var(--kol-color-white) 2%, transparent);
488
+ --kol-fg-absolute-inverse-04: color-mix(in srgb, var(--kol-color-white) 4%, transparent);
489
+ --kol-fg-absolute-inverse-08: color-mix(in srgb, var(--kol-color-white) 8%, transparent);
490
+ --kol-fg-absolute-inverse-12: color-mix(in srgb, var(--kol-color-white) 12%, transparent);
491
+ --kol-fg-absolute-inverse-16: color-mix(in srgb, var(--kol-color-white) 16%, transparent);
492
+ --kol-fg-absolute-inverse-24: color-mix(in srgb, var(--kol-color-white) 24%, transparent);
493
+ --kol-fg-absolute-inverse-32: color-mix(in srgb, var(--kol-color-white) 32%, transparent);
494
+ --kol-fg-absolute-inverse-40: color-mix(in srgb, var(--kol-color-white) 40%, transparent);
495
+ --kol-fg-absolute-inverse-48: color-mix(in srgb, var(--kol-color-white) 48%, transparent);
496
+ --kol-fg-absolute-inverse-64: color-mix(in srgb, var(--kol-color-white) 64%, transparent);
497
+ --kol-fg-absolute-inverse-72: color-mix(in srgb, var(--kol-color-white) 72%, transparent);
498
+ --kol-fg-absolute-inverse-80: color-mix(in srgb, var(--kol-color-white) 80%, transparent);
499
+ --kol-fg-absolute-inverse-88: color-mix(in srgb, var(--kol-color-white) 88%, transparent);
500
+ --kol-fg-absolute-inverse-96: color-mix(in srgb, var(--kol-color-white) 96%, transparent);
501
+ /* fg-ab-inverse */
502
+ --kol-fg-ab-inverse-01: color-mix(in srgb, var(--kol-color-ab-white) 1%, transparent);
503
+ --kol-fg-ab-inverse-02: color-mix(in srgb, var(--kol-color-ab-white) 2%, transparent);
504
+ --kol-fg-ab-inverse-04: color-mix(in srgb, var(--kol-color-ab-white) 4%, transparent);
505
+ --kol-fg-ab-inverse-08: color-mix(in srgb, var(--kol-color-ab-white) 8%, transparent);
506
+ --kol-fg-ab-inverse-12: color-mix(in srgb, var(--kol-color-ab-white) 12%, transparent);
507
+ --kol-fg-ab-inverse-16: color-mix(in srgb, var(--kol-color-ab-white) 16%, transparent);
508
+ --kol-fg-ab-inverse-24: color-mix(in srgb, var(--kol-color-ab-white) 24%, transparent);
509
+ --kol-fg-ab-inverse-32: color-mix(in srgb, var(--kol-color-ab-white) 32%, transparent);
510
+ --kol-fg-ab-inverse-40: color-mix(in srgb, var(--kol-color-ab-white) 40%, transparent);
511
+ --kol-fg-ab-inverse-48: color-mix(in srgb, var(--kol-color-ab-white) 48%, transparent);
512
+ --kol-fg-ab-inverse-64: color-mix(in srgb, var(--kol-color-ab-white) 64%, transparent);
513
+ --kol-fg-ab-inverse-72: color-mix(in srgb, var(--kol-color-ab-white) 72%, transparent);
514
+ --kol-fg-ab-inverse-80: color-mix(in srgb, var(--kol-color-ab-white) 80%, transparent);
515
+ --kol-fg-ab-inverse-88: color-mix(in srgb, var(--kol-color-ab-white) 88%, transparent);
516
+ --kol-fg-ab-inverse-96: color-mix(in srgb, var(--kol-color-ab-white) 96%, transparent);
517
+ --kol-color-absolute-black: var(--kol-color-black);
518
+ --kol-color-absolute-white: var(--kol-color-white);
474
519
  }
475
- .bg-fg-absolute-01 { background-color: var(--kol-fg-ab-01); }
476
- .bg-fg-absolute-02 { background-color: var(--kol-fg-ab-02); }
477
- .bg-fg-absolute-04 { background-color: var(--kol-fg-ab-04); }
478
- .bg-fg-absolute-08 { background-color: var(--kol-fg-ab-08); }
479
- .bg-fg-absolute-12 { background-color: var(--kol-fg-ab-12); }
480
- .bg-fg-absolute-16 { background-color: var(--kol-fg-ab-16); }
481
- .bg-fg-absolute-24 { background-color: var(--kol-fg-ab-24); }
482
- .bg-fg-absolute-32 { background-color: var(--kol-fg-ab-32); }
483
- .bg-fg-absolute-40 { background-color: var(--kol-fg-ab-40); }
484
- .bg-fg-absolute-48 { background-color: var(--kol-fg-ab-48); }
485
- .bg-fg-absolute-64 { background-color: var(--kol-fg-ab-64); }
486
- .bg-fg-absolute-72 { background-color: var(--kol-fg-ab-72); }
487
- .bg-fg-absolute-80 { background-color: var(--kol-fg-ab-80); }
488
- .bg-fg-absolute-88 { background-color: var(--kol-fg-ab-88); }
489
- .bg-fg-absolute-96 { background-color: var(--kol-fg-ab-96); }
520
+
521
+ .bg-fg-absolute-01 { background-color: var(--kol-fg-absolute-01); }
522
+ .bg-fg-absolute-02 { background-color: var(--kol-fg-absolute-02); }
523
+ .bg-fg-absolute-04 { background-color: var(--kol-fg-absolute-04); }
524
+ .bg-fg-absolute-08 { background-color: var(--kol-fg-absolute-08); }
525
+ .bg-fg-absolute-12 { background-color: var(--kol-fg-absolute-12); }
526
+ .bg-fg-absolute-16 { background-color: var(--kol-fg-absolute-16); }
527
+ .bg-fg-absolute-24 { background-color: var(--kol-fg-absolute-24); }
528
+ .bg-fg-absolute-32 { background-color: var(--kol-fg-absolute-32); }
529
+ .bg-fg-absolute-40 { background-color: var(--kol-fg-absolute-40); }
530
+ .bg-fg-absolute-48 { background-color: var(--kol-fg-absolute-48); }
531
+ .bg-fg-absolute-64 { background-color: var(--kol-fg-absolute-64); }
532
+ .bg-fg-absolute-72 { background-color: var(--kol-fg-absolute-72); }
533
+ .bg-fg-absolute-80 { background-color: var(--kol-fg-absolute-80); }
534
+ .bg-fg-absolute-88 { background-color: var(--kol-fg-absolute-88); }
535
+ .bg-fg-absolute-96 { background-color: var(--kol-fg-absolute-96); }
536
+ .text-fg-absolute-01 { color: var(--kol-fg-absolute-01); }
537
+ .text-fg-absolute-02 { color: var(--kol-fg-absolute-02); }
538
+ .text-fg-absolute-04 { color: var(--kol-fg-absolute-04); }
539
+ .text-fg-absolute-08 { color: var(--kol-fg-absolute-08); }
540
+ .text-fg-absolute-12 { color: var(--kol-fg-absolute-12); }
541
+ .text-fg-absolute-16 { color: var(--kol-fg-absolute-16); }
542
+ .text-fg-absolute-24 { color: var(--kol-fg-absolute-24); }
543
+ .text-fg-absolute-32 { color: var(--kol-fg-absolute-32); }
544
+ .text-fg-absolute-40 { color: var(--kol-fg-absolute-40); }
545
+ .text-fg-absolute-48 { color: var(--kol-fg-absolute-48); }
546
+ .text-fg-absolute-64 { color: var(--kol-fg-absolute-64); }
547
+ .text-fg-absolute-72 { color: var(--kol-fg-absolute-72); }
548
+ .text-fg-absolute-80 { color: var(--kol-fg-absolute-80); }
549
+ .text-fg-absolute-88 { color: var(--kol-fg-absolute-88); }
550
+ .text-fg-absolute-96 { color: var(--kol-fg-absolute-96); }
551
+ .border-fg-absolute-01 { border-color: var(--kol-fg-absolute-01); }
552
+ .border-fg-absolute-02 { border-color: var(--kol-fg-absolute-02); }
553
+ .border-fg-absolute-04 { border-color: var(--kol-fg-absolute-04); }
554
+ .border-fg-absolute-08 { border-color: var(--kol-fg-absolute-08); }
555
+ .border-fg-absolute-12 { border-color: var(--kol-fg-absolute-12); }
556
+ .border-fg-absolute-16 { border-color: var(--kol-fg-absolute-16); }
557
+ .border-fg-absolute-24 { border-color: var(--kol-fg-absolute-24); }
558
+ .border-fg-absolute-32 { border-color: var(--kol-fg-absolute-32); }
559
+ .border-fg-absolute-40 { border-color: var(--kol-fg-absolute-40); }
560
+ .border-fg-absolute-48 { border-color: var(--kol-fg-absolute-48); }
561
+ .border-fg-absolute-64 { border-color: var(--kol-fg-absolute-64); }
562
+ .border-fg-absolute-72 { border-color: var(--kol-fg-absolute-72); }
563
+ .border-fg-absolute-80 { border-color: var(--kol-fg-absolute-80); }
564
+ .border-fg-absolute-88 { border-color: var(--kol-fg-absolute-88); }
565
+ .border-fg-absolute-96 { border-color: var(--kol-fg-absolute-96); }
566
+ .bg-fg-absolute-inverse-01 { background-color: var(--kol-fg-absolute-inverse-01); }
567
+ .bg-fg-absolute-inverse-02 { background-color: var(--kol-fg-absolute-inverse-02); }
568
+ .bg-fg-absolute-inverse-04 { background-color: var(--kol-fg-absolute-inverse-04); }
569
+ .bg-fg-absolute-inverse-08 { background-color: var(--kol-fg-absolute-inverse-08); }
570
+ .bg-fg-absolute-inverse-12 { background-color: var(--kol-fg-absolute-inverse-12); }
571
+ .bg-fg-absolute-inverse-16 { background-color: var(--kol-fg-absolute-inverse-16); }
572
+ .bg-fg-absolute-inverse-24 { background-color: var(--kol-fg-absolute-inverse-24); }
573
+ .bg-fg-absolute-inverse-32 { background-color: var(--kol-fg-absolute-inverse-32); }
574
+ .bg-fg-absolute-inverse-40 { background-color: var(--kol-fg-absolute-inverse-40); }
575
+ .bg-fg-absolute-inverse-48 { background-color: var(--kol-fg-absolute-inverse-48); }
576
+ .bg-fg-absolute-inverse-64 { background-color: var(--kol-fg-absolute-inverse-64); }
577
+ .bg-fg-absolute-inverse-72 { background-color: var(--kol-fg-absolute-inverse-72); }
578
+ .bg-fg-absolute-inverse-80 { background-color: var(--kol-fg-absolute-inverse-80); }
579
+ .bg-fg-absolute-inverse-88 { background-color: var(--kol-fg-absolute-inverse-88); }
580
+ .bg-fg-absolute-inverse-96 { background-color: var(--kol-fg-absolute-inverse-96); }
581
+ .text-fg-absolute-inverse-01 { color: var(--kol-fg-absolute-inverse-01); }
582
+ .text-fg-absolute-inverse-02 { color: var(--kol-fg-absolute-inverse-02); }
583
+ .text-fg-absolute-inverse-04 { color: var(--kol-fg-absolute-inverse-04); }
584
+ .text-fg-absolute-inverse-08 { color: var(--kol-fg-absolute-inverse-08); }
585
+ .text-fg-absolute-inverse-12 { color: var(--kol-fg-absolute-inverse-12); }
586
+ .text-fg-absolute-inverse-16 { color: var(--kol-fg-absolute-inverse-16); }
587
+ .text-fg-absolute-inverse-24 { color: var(--kol-fg-absolute-inverse-24); }
588
+ .text-fg-absolute-inverse-32 { color: var(--kol-fg-absolute-inverse-32); }
589
+ .text-fg-absolute-inverse-40 { color: var(--kol-fg-absolute-inverse-40); }
590
+ .text-fg-absolute-inverse-48 { color: var(--kol-fg-absolute-inverse-48); }
591
+ .text-fg-absolute-inverse-64 { color: var(--kol-fg-absolute-inverse-64); }
592
+ .text-fg-absolute-inverse-72 { color: var(--kol-fg-absolute-inverse-72); }
593
+ .text-fg-absolute-inverse-80 { color: var(--kol-fg-absolute-inverse-80); }
594
+ .text-fg-absolute-inverse-88 { color: var(--kol-fg-absolute-inverse-88); }
595
+ .text-fg-absolute-inverse-96 { color: var(--kol-fg-absolute-inverse-96); }
596
+ .border-fg-absolute-inverse-01 { border-color: var(--kol-fg-absolute-inverse-01); }
597
+ .border-fg-absolute-inverse-02 { border-color: var(--kol-fg-absolute-inverse-02); }
598
+ .border-fg-absolute-inverse-04 { border-color: var(--kol-fg-absolute-inverse-04); }
599
+ .border-fg-absolute-inverse-08 { border-color: var(--kol-fg-absolute-inverse-08); }
600
+ .border-fg-absolute-inverse-12 { border-color: var(--kol-fg-absolute-inverse-12); }
601
+ .border-fg-absolute-inverse-16 { border-color: var(--kol-fg-absolute-inverse-16); }
602
+ .border-fg-absolute-inverse-24 { border-color: var(--kol-fg-absolute-inverse-24); }
603
+ .border-fg-absolute-inverse-32 { border-color: var(--kol-fg-absolute-inverse-32); }
604
+ .border-fg-absolute-inverse-40 { border-color: var(--kol-fg-absolute-inverse-40); }
605
+ .border-fg-absolute-inverse-48 { border-color: var(--kol-fg-absolute-inverse-48); }
606
+ .border-fg-absolute-inverse-64 { border-color: var(--kol-fg-absolute-inverse-64); }
607
+ .border-fg-absolute-inverse-72 { border-color: var(--kol-fg-absolute-inverse-72); }
608
+ .border-fg-absolute-inverse-80 { border-color: var(--kol-fg-absolute-inverse-80); }
609
+ .border-fg-absolute-inverse-88 { border-color: var(--kol-fg-absolute-inverse-88); }
610
+ .border-fg-absolute-inverse-96 { border-color: var(--kol-fg-absolute-inverse-96); }
611
+ .bg-fg-ab-inverse-01 { background-color: var(--kol-fg-ab-inverse-01); }
612
+ .bg-fg-ab-inverse-02 { background-color: var(--kol-fg-ab-inverse-02); }
613
+ .bg-fg-ab-inverse-04 { background-color: var(--kol-fg-ab-inverse-04); }
614
+ .bg-fg-ab-inverse-08 { background-color: var(--kol-fg-ab-inverse-08); }
615
+ .bg-fg-ab-inverse-12 { background-color: var(--kol-fg-ab-inverse-12); }
616
+ .bg-fg-ab-inverse-16 { background-color: var(--kol-fg-ab-inverse-16); }
617
+ .bg-fg-ab-inverse-24 { background-color: var(--kol-fg-ab-inverse-24); }
618
+ .bg-fg-ab-inverse-32 { background-color: var(--kol-fg-ab-inverse-32); }
619
+ .bg-fg-ab-inverse-40 { background-color: var(--kol-fg-ab-inverse-40); }
620
+ .bg-fg-ab-inverse-48 { background-color: var(--kol-fg-ab-inverse-48); }
621
+ .bg-fg-ab-inverse-64 { background-color: var(--kol-fg-ab-inverse-64); }
622
+ .bg-fg-ab-inverse-72 { background-color: var(--kol-fg-ab-inverse-72); }
623
+ .bg-fg-ab-inverse-80 { background-color: var(--kol-fg-ab-inverse-80); }
624
+ .bg-fg-ab-inverse-88 { background-color: var(--kol-fg-ab-inverse-88); }
625
+ .bg-fg-ab-inverse-96 { background-color: var(--kol-fg-ab-inverse-96); }
626
+ .text-fg-ab-inverse-01 { color: var(--kol-fg-ab-inverse-01); }
627
+ .text-fg-ab-inverse-02 { color: var(--kol-fg-ab-inverse-02); }
628
+ .text-fg-ab-inverse-04 { color: var(--kol-fg-ab-inverse-04); }
629
+ .text-fg-ab-inverse-08 { color: var(--kol-fg-ab-inverse-08); }
630
+ .text-fg-ab-inverse-12 { color: var(--kol-fg-ab-inverse-12); }
631
+ .text-fg-ab-inverse-16 { color: var(--kol-fg-ab-inverse-16); }
632
+ .text-fg-ab-inverse-24 { color: var(--kol-fg-ab-inverse-24); }
633
+ .text-fg-ab-inverse-32 { color: var(--kol-fg-ab-inverse-32); }
634
+ .text-fg-ab-inverse-40 { color: var(--kol-fg-ab-inverse-40); }
635
+ .text-fg-ab-inverse-48 { color: var(--kol-fg-ab-inverse-48); }
636
+ .text-fg-ab-inverse-64 { color: var(--kol-fg-ab-inverse-64); }
637
+ .text-fg-ab-inverse-72 { color: var(--kol-fg-ab-inverse-72); }
638
+ .text-fg-ab-inverse-80 { color: var(--kol-fg-ab-inverse-80); }
639
+ .text-fg-ab-inverse-88 { color: var(--kol-fg-ab-inverse-88); }
640
+ .text-fg-ab-inverse-96 { color: var(--kol-fg-ab-inverse-96); }
641
+ .border-fg-ab-inverse-01 { border-color: var(--kol-fg-ab-inverse-01); }
642
+ .border-fg-ab-inverse-02 { border-color: var(--kol-fg-ab-inverse-02); }
643
+ .border-fg-ab-inverse-04 { border-color: var(--kol-fg-ab-inverse-04); }
644
+ .border-fg-ab-inverse-08 { border-color: var(--kol-fg-ab-inverse-08); }
645
+ .border-fg-ab-inverse-12 { border-color: var(--kol-fg-ab-inverse-12); }
646
+ .border-fg-ab-inverse-16 { border-color: var(--kol-fg-ab-inverse-16); }
647
+ .border-fg-ab-inverse-24 { border-color: var(--kol-fg-ab-inverse-24); }
648
+ .border-fg-ab-inverse-32 { border-color: var(--kol-fg-ab-inverse-32); }
649
+ .border-fg-ab-inverse-40 { border-color: var(--kol-fg-ab-inverse-40); }
650
+ .border-fg-ab-inverse-48 { border-color: var(--kol-fg-ab-inverse-48); }
651
+ .border-fg-ab-inverse-64 { border-color: var(--kol-fg-ab-inverse-64); }
652
+ .border-fg-ab-inverse-72 { border-color: var(--kol-fg-ab-inverse-72); }
653
+ .border-fg-ab-inverse-80 { border-color: var(--kol-fg-ab-inverse-80); }
654
+ .border-fg-ab-inverse-88 { border-color: var(--kol-fg-ab-inverse-88); }
655
+ .border-fg-ab-inverse-96 { border-color: var(--kol-fg-ab-inverse-96); }
package/kol-opaque.css CHANGED
@@ -396,3 +396,144 @@
396
396
  .border-oq-ab-inverse-80 { border-color: var(--kol-oq-ab-inverse-80); }
397
397
  .border-oq-ab-inverse-88 { border-color: var(--kol-oq-ab-inverse-88); }
398
398
  .border-oq-ab-inverse-96 { border-color: var(--kol-oq-ab-inverse-96); }
399
+
400
+ /* ============================================================================
401
+ * TOKENS — `absolute` opaque tiers (user ruling 2026-08-30)
402
+ *
403
+ * The `oq` half of the same split. `oq-ab-*` mixes the PURE poles (#000/#fff);
404
+ * these mix the THEME'S OWN poles (#0e0e11 / #fcfbf8), frozen in both themes.
405
+ *
406
+ * oq-absolute-NN near-black NN% into near-white — a light ground darkening
407
+ * oq-absolute-inverse-NN near-white NN% into near-black — a dark ground lightening
408
+ *
409
+ * Why both families exist: `ab` can step PAST the theme's ink, which is what a
410
+ * well needs; `absolute` sits exactly on the theme's own two ends, which is
411
+ * what chrome that must match a surface without following the theme needs.
412
+ * Neither flips — the flipping pairs are `oq-*` / `oq-inverse-*`.
413
+ * ============================================================================ */
414
+
415
+ :root {
416
+ --kol-oq-absolute-01: color-mix(in srgb, var(--kol-color-black) 1%, var(--kol-color-white));
417
+ --kol-oq-absolute-02: color-mix(in srgb, var(--kol-color-black) 2%, var(--kol-color-white));
418
+ --kol-oq-absolute-04: color-mix(in srgb, var(--kol-color-black) 4%, var(--kol-color-white));
419
+ --kol-oq-absolute-08: color-mix(in srgb, var(--kol-color-black) 8%, var(--kol-color-white));
420
+ --kol-oq-absolute-12: color-mix(in srgb, var(--kol-color-black) 12%, var(--kol-color-white));
421
+ --kol-oq-absolute-16: color-mix(in srgb, var(--kol-color-black) 16%, var(--kol-color-white));
422
+ --kol-oq-absolute-24: color-mix(in srgb, var(--kol-color-black) 24%, var(--kol-color-white));
423
+ --kol-oq-absolute-32: color-mix(in srgb, var(--kol-color-black) 32%, var(--kol-color-white));
424
+ --kol-oq-absolute-40: color-mix(in srgb, var(--kol-color-black) 40%, var(--kol-color-white));
425
+ --kol-oq-absolute-48: color-mix(in srgb, var(--kol-color-black) 48%, var(--kol-color-white));
426
+ --kol-oq-absolute-64: color-mix(in srgb, var(--kol-color-black) 64%, var(--kol-color-white));
427
+ --kol-oq-absolute-72: color-mix(in srgb, var(--kol-color-black) 72%, var(--kol-color-white));
428
+ --kol-oq-absolute-80: color-mix(in srgb, var(--kol-color-black) 80%, var(--kol-color-white));
429
+ --kol-oq-absolute-88: color-mix(in srgb, var(--kol-color-black) 88%, var(--kol-color-white));
430
+ --kol-oq-absolute-96: color-mix(in srgb, var(--kol-color-black) 96%, var(--kol-color-white));
431
+
432
+ --kol-oq-absolute-inverse-01: color-mix(in srgb, var(--kol-color-white) 1%, var(--kol-color-black));
433
+ --kol-oq-absolute-inverse-02: color-mix(in srgb, var(--kol-color-white) 2%, var(--kol-color-black));
434
+ --kol-oq-absolute-inverse-04: color-mix(in srgb, var(--kol-color-white) 4%, var(--kol-color-black));
435
+ --kol-oq-absolute-inverse-08: color-mix(in srgb, var(--kol-color-white) 8%, var(--kol-color-black));
436
+ --kol-oq-absolute-inverse-12: color-mix(in srgb, var(--kol-color-white) 12%, var(--kol-color-black));
437
+ --kol-oq-absolute-inverse-16: color-mix(in srgb, var(--kol-color-white) 16%, var(--kol-color-black));
438
+ --kol-oq-absolute-inverse-24: color-mix(in srgb, var(--kol-color-white) 24%, var(--kol-color-black));
439
+ --kol-oq-absolute-inverse-32: color-mix(in srgb, var(--kol-color-white) 32%, var(--kol-color-black));
440
+ --kol-oq-absolute-inverse-40: color-mix(in srgb, var(--kol-color-white) 40%, var(--kol-color-black));
441
+ --kol-oq-absolute-inverse-48: color-mix(in srgb, var(--kol-color-white) 48%, var(--kol-color-black));
442
+ --kol-oq-absolute-inverse-64: color-mix(in srgb, var(--kol-color-white) 64%, var(--kol-color-black));
443
+ --kol-oq-absolute-inverse-72: color-mix(in srgb, var(--kol-color-white) 72%, var(--kol-color-black));
444
+ --kol-oq-absolute-inverse-80: color-mix(in srgb, var(--kol-color-white) 80%, var(--kol-color-black));
445
+ --kol-oq-absolute-inverse-88: color-mix(in srgb, var(--kol-color-white) 88%, var(--kol-color-black));
446
+ --kol-oq-absolute-inverse-96: color-mix(in srgb, var(--kol-color-white) 96%, var(--kol-color-black));
447
+ }
448
+
449
+ /* CLASSES — absolute opaque tiers */
450
+ .bg-oq-absolute-01 { background-color: var(--kol-oq-absolute-01); }
451
+ .bg-oq-absolute-02 { background-color: var(--kol-oq-absolute-02); }
452
+ .bg-oq-absolute-04 { background-color: var(--kol-oq-absolute-04); }
453
+ .bg-oq-absolute-08 { background-color: var(--kol-oq-absolute-08); }
454
+ .bg-oq-absolute-12 { background-color: var(--kol-oq-absolute-12); }
455
+ .bg-oq-absolute-16 { background-color: var(--kol-oq-absolute-16); }
456
+ .bg-oq-absolute-24 { background-color: var(--kol-oq-absolute-24); }
457
+ .bg-oq-absolute-32 { background-color: var(--kol-oq-absolute-32); }
458
+ .bg-oq-absolute-40 { background-color: var(--kol-oq-absolute-40); }
459
+ .bg-oq-absolute-48 { background-color: var(--kol-oq-absolute-48); }
460
+ .bg-oq-absolute-64 { background-color: var(--kol-oq-absolute-64); }
461
+ .bg-oq-absolute-72 { background-color: var(--kol-oq-absolute-72); }
462
+ .bg-oq-absolute-80 { background-color: var(--kol-oq-absolute-80); }
463
+ .bg-oq-absolute-88 { background-color: var(--kol-oq-absolute-88); }
464
+ .bg-oq-absolute-96 { background-color: var(--kol-oq-absolute-96); }
465
+ .text-oq-absolute-01 { color: var(--kol-oq-absolute-01); }
466
+ .text-oq-absolute-02 { color: var(--kol-oq-absolute-02); }
467
+ .text-oq-absolute-04 { color: var(--kol-oq-absolute-04); }
468
+ .text-oq-absolute-08 { color: var(--kol-oq-absolute-08); }
469
+ .text-oq-absolute-12 { color: var(--kol-oq-absolute-12); }
470
+ .text-oq-absolute-16 { color: var(--kol-oq-absolute-16); }
471
+ .text-oq-absolute-24 { color: var(--kol-oq-absolute-24); }
472
+ .text-oq-absolute-32 { color: var(--kol-oq-absolute-32); }
473
+ .text-oq-absolute-40 { color: var(--kol-oq-absolute-40); }
474
+ .text-oq-absolute-48 { color: var(--kol-oq-absolute-48); }
475
+ .text-oq-absolute-64 { color: var(--kol-oq-absolute-64); }
476
+ .text-oq-absolute-72 { color: var(--kol-oq-absolute-72); }
477
+ .text-oq-absolute-80 { color: var(--kol-oq-absolute-80); }
478
+ .text-oq-absolute-88 { color: var(--kol-oq-absolute-88); }
479
+ .text-oq-absolute-96 { color: var(--kol-oq-absolute-96); }
480
+ .border-oq-absolute-01 { border-color: var(--kol-oq-absolute-01); }
481
+ .border-oq-absolute-02 { border-color: var(--kol-oq-absolute-02); }
482
+ .border-oq-absolute-04 { border-color: var(--kol-oq-absolute-04); }
483
+ .border-oq-absolute-08 { border-color: var(--kol-oq-absolute-08); }
484
+ .border-oq-absolute-12 { border-color: var(--kol-oq-absolute-12); }
485
+ .border-oq-absolute-16 { border-color: var(--kol-oq-absolute-16); }
486
+ .border-oq-absolute-24 { border-color: var(--kol-oq-absolute-24); }
487
+ .border-oq-absolute-32 { border-color: var(--kol-oq-absolute-32); }
488
+ .border-oq-absolute-40 { border-color: var(--kol-oq-absolute-40); }
489
+ .border-oq-absolute-48 { border-color: var(--kol-oq-absolute-48); }
490
+ .border-oq-absolute-64 { border-color: var(--kol-oq-absolute-64); }
491
+ .border-oq-absolute-72 { border-color: var(--kol-oq-absolute-72); }
492
+ .border-oq-absolute-80 { border-color: var(--kol-oq-absolute-80); }
493
+ .border-oq-absolute-88 { border-color: var(--kol-oq-absolute-88); }
494
+ .border-oq-absolute-96 { border-color: var(--kol-oq-absolute-96); }
495
+ .bg-oq-absolute-inverse-01 { background-color: var(--kol-oq-absolute-inverse-01); }
496
+ .bg-oq-absolute-inverse-02 { background-color: var(--kol-oq-absolute-inverse-02); }
497
+ .bg-oq-absolute-inverse-04 { background-color: var(--kol-oq-absolute-inverse-04); }
498
+ .bg-oq-absolute-inverse-08 { background-color: var(--kol-oq-absolute-inverse-08); }
499
+ .bg-oq-absolute-inverse-12 { background-color: var(--kol-oq-absolute-inverse-12); }
500
+ .bg-oq-absolute-inverse-16 { background-color: var(--kol-oq-absolute-inverse-16); }
501
+ .bg-oq-absolute-inverse-24 { background-color: var(--kol-oq-absolute-inverse-24); }
502
+ .bg-oq-absolute-inverse-32 { background-color: var(--kol-oq-absolute-inverse-32); }
503
+ .bg-oq-absolute-inverse-40 { background-color: var(--kol-oq-absolute-inverse-40); }
504
+ .bg-oq-absolute-inverse-48 { background-color: var(--kol-oq-absolute-inverse-48); }
505
+ .bg-oq-absolute-inverse-64 { background-color: var(--kol-oq-absolute-inverse-64); }
506
+ .bg-oq-absolute-inverse-72 { background-color: var(--kol-oq-absolute-inverse-72); }
507
+ .bg-oq-absolute-inverse-80 { background-color: var(--kol-oq-absolute-inverse-80); }
508
+ .bg-oq-absolute-inverse-88 { background-color: var(--kol-oq-absolute-inverse-88); }
509
+ .bg-oq-absolute-inverse-96 { background-color: var(--kol-oq-absolute-inverse-96); }
510
+ .text-oq-absolute-inverse-01 { color: var(--kol-oq-absolute-inverse-01); }
511
+ .text-oq-absolute-inverse-02 { color: var(--kol-oq-absolute-inverse-02); }
512
+ .text-oq-absolute-inverse-04 { color: var(--kol-oq-absolute-inverse-04); }
513
+ .text-oq-absolute-inverse-08 { color: var(--kol-oq-absolute-inverse-08); }
514
+ .text-oq-absolute-inverse-12 { color: var(--kol-oq-absolute-inverse-12); }
515
+ .text-oq-absolute-inverse-16 { color: var(--kol-oq-absolute-inverse-16); }
516
+ .text-oq-absolute-inverse-24 { color: var(--kol-oq-absolute-inverse-24); }
517
+ .text-oq-absolute-inverse-32 { color: var(--kol-oq-absolute-inverse-32); }
518
+ .text-oq-absolute-inverse-40 { color: var(--kol-oq-absolute-inverse-40); }
519
+ .text-oq-absolute-inverse-48 { color: var(--kol-oq-absolute-inverse-48); }
520
+ .text-oq-absolute-inverse-64 { color: var(--kol-oq-absolute-inverse-64); }
521
+ .text-oq-absolute-inverse-72 { color: var(--kol-oq-absolute-inverse-72); }
522
+ .text-oq-absolute-inverse-80 { color: var(--kol-oq-absolute-inverse-80); }
523
+ .text-oq-absolute-inverse-88 { color: var(--kol-oq-absolute-inverse-88); }
524
+ .text-oq-absolute-inverse-96 { color: var(--kol-oq-absolute-inverse-96); }
525
+ .border-oq-absolute-inverse-01 { border-color: var(--kol-oq-absolute-inverse-01); }
526
+ .border-oq-absolute-inverse-02 { border-color: var(--kol-oq-absolute-inverse-02); }
527
+ .border-oq-absolute-inverse-04 { border-color: var(--kol-oq-absolute-inverse-04); }
528
+ .border-oq-absolute-inverse-08 { border-color: var(--kol-oq-absolute-inverse-08); }
529
+ .border-oq-absolute-inverse-12 { border-color: var(--kol-oq-absolute-inverse-12); }
530
+ .border-oq-absolute-inverse-16 { border-color: var(--kol-oq-absolute-inverse-16); }
531
+ .border-oq-absolute-inverse-24 { border-color: var(--kol-oq-absolute-inverse-24); }
532
+ .border-oq-absolute-inverse-32 { border-color: var(--kol-oq-absolute-inverse-32); }
533
+ .border-oq-absolute-inverse-40 { border-color: var(--kol-oq-absolute-inverse-40); }
534
+ .border-oq-absolute-inverse-48 { border-color: var(--kol-oq-absolute-inverse-48); }
535
+ .border-oq-absolute-inverse-64 { border-color: var(--kol-oq-absolute-inverse-64); }
536
+ .border-oq-absolute-inverse-72 { border-color: var(--kol-oq-absolute-inverse-72); }
537
+ .border-oq-absolute-inverse-80 { border-color: var(--kol-oq-absolute-inverse-80); }
538
+ .border-oq-absolute-inverse-88 { border-color: var(--kol-oq-absolute-inverse-88); }
539
+ .border-oq-absolute-inverse-96 { border-color: var(--kol-oq-absolute-inverse-96); }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolkrabbi/kol-theme",
3
- "version": "0.102.0",
3
+ "version": "0.103.0",
4
4
  "description": "KOL (Kolkrabbi) design-system tokens + base CSS — brand-neutral. The canonical token/cascade layer every other KOL package and consumer builds on.",
5
5
  "license": "MIT",
6
6
  "type": "module",