@kolkrabbi/kol-theme 0.33.0 → 0.35.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.
@@ -951,7 +951,9 @@ a.kol-icon-frame {
951
951
  }
952
952
  .kol-icon-frame-nav {
953
953
  background: transparent;
954
- color: var(--kol-oq-64);
954
+ /* full ink, not oq-64 (user re-rule 2026-08-09: header glyphs at 100%
955
+ * opacity — the dimmed row read as disabled beside the ThemeToggle). */
956
+ color: var(--kol-surface-on-primary);
955
957
  border: 1px solid transparent;
956
958
  }
957
959
  .kol-icon-frame-grey {
@@ -215,7 +215,7 @@
215
215
  border: 1px solid color-mix(in srgb, var(--kol-surface-on-secondary) 12%, transparent);
216
216
  background: color-mix(in srgb, var(--kol-surface-on-secondary) 6%, transparent);
217
217
  color: var(--kol-surface-on-secondary);
218
- border-radius: 10px;
218
+ border-radius: var(--kol-radius-sm);
219
219
  padding: 10px 14px;
220
220
  font-family: var(--kol-font-family-mono);
221
221
  font-size: 0.75rem;
@@ -376,7 +376,7 @@
376
376
  flex: 1;
377
377
  border: 1px solid color-mix(in srgb, var(--kol-surface-on-secondary) 10%, transparent);
378
378
  background: color-mix(in srgb, var(--kol-surface-on-secondary) 4%, transparent);
379
- border-radius: 10px;
379
+ border-radius: var(--kol-radius-sm);
380
380
  padding: 10px;
381
381
  font-family: var(--kol-font-family-mono);
382
382
  font-size: 0.75rem;
@@ -448,7 +448,7 @@
448
448
  .board-playback__section {
449
449
  background: color-mix(in srgb, var(--kol-surface-on-secondary) 3%, transparent);
450
450
  border: 1px solid color-mix(in srgb, var(--kol-surface-on-secondary) 8%, transparent);
451
- border-radius: 10px;
451
+ border-radius: var(--kol-radius-sm);
452
452
  padding: 14px 16px;
453
453
  display: flex;
454
454
  flex-direction: column;
@@ -479,7 +479,7 @@
479
479
 
480
480
  .board-playback__notes {
481
481
  min-height: 110px;
482
- border-radius: 10px;
482
+ border-radius: var(--kol-radius-sm);
483
483
  padding: 16px;
484
484
  background: color-mix(in srgb, var(--kol-surface-on-secondary) 4%, transparent);
485
485
  font-family: var(--kol-font-family-mono);
@@ -557,7 +557,7 @@
557
557
  .analysis-table-empty {
558
558
  padding: 32px;
559
559
  text-align: center;
560
- border-radius: 16px;
560
+ border-radius: var(--kol-radius-sm);
561
561
  border: 1px solid var(--kol-border-default);
562
562
  background: color-mix(in srgb, var(--kol-surface-secondary) 92%, transparent);
563
563
  color: var(--kol-surface-on-secondary);
@@ -749,7 +749,7 @@
749
749
  font-size: 0.75rem;
750
750
  letter-spacing: 0.08em;
751
751
  padding: 4px 10px;
752
- border-radius: 6px;
752
+ border-radius: var(--kol-radius-sm);
753
753
  align-self: flex-start;
754
754
  }
755
755
 
@@ -820,7 +820,7 @@
820
820
  font-size: 0.85rem;
821
821
  letter-spacing: 0.08em;
822
822
  padding: 4px 10px;
823
- border-radius: 6px;
823
+ border-radius: var(--kol-radius-sm);
824
824
  background: color-mix(in srgb, #0a682a 20%, transparent);
825
825
  color: #5dd27f;
826
826
  }
@@ -970,7 +970,7 @@
970
970
  .chess-hero__line-chart {
971
971
  height: 60px;
972
972
  background: color-mix(in srgb, var(--kol-surface-on-secondary) 4%, transparent);
973
- border-radius: 8px;
973
+ border-radius: var(--kol-radius-sm);
974
974
  padding: 12px;
975
975
  }
976
976
 
@@ -165,7 +165,7 @@
165
165
  background: transparent;
166
166
  color: var(--fv-black);
167
167
  border: 1px solid var(--fv-border-color);
168
- border-radius: 5px;
168
+ border-radius: var(--kol-radius-sm);
169
169
  transition: 0.2s;
170
170
  pointer-events: auto !important;
171
171
  }
@@ -296,7 +296,7 @@
296
296
  position: absolute;
297
297
  z-index: 10001;
298
298
  padding: 14px;
299
- border-radius: 8px;
299
+ border-radius: var(--kol-radius-sm);
300
300
  color: var(--fv-black);
301
301
  }
302
302
 
@@ -106,7 +106,7 @@
106
106
  .kol-popover {
107
107
  background: var(--kol-surface-secondary);
108
108
  border: 1px solid var(--kol-fg-08);
109
- border-radius: 6px;
109
+ border-radius: var(--kol-radius-sm);
110
110
  box-shadow: 0 8px 24px -8px rgba(0, 0, 0, 0.4),
111
111
  0 2px 6px -2px rgba(0, 0, 0, 0.3);
112
112
  z-index: 1000;
@@ -121,7 +121,7 @@
121
121
  align-items: center;
122
122
  gap: 6px;
123
123
  background: var(--kol-surface-secondary);
124
- border-radius: 6px;
124
+ border-radius: var(--kol-radius-sm);
125
125
  padding: 4px 4px 4px 8px;
126
126
  font-family: var(--kol-font-family-mono);
127
127
  font-size: 11px;
@@ -402,10 +402,16 @@
402
402
  border: 1px solid transparent;
403
403
  }
404
404
 
405
- .kol-badge-destructive {
406
- background-color: color-mix(in srgb, #ef4444 20%, transparent);
407
- color: #ef4444;
408
- border: 1px solid color-mix(in srgb, #ef4444 30%, transparent);
405
+ /* Tones ride the --ui-* ladder with StatusChip's exact fill formula — Badge
406
+ * and StatusChip are siblings and speak one language (user ruling
407
+ * 2026-08-09, "like a button and dropdown"). Canonical tone name is
408
+ * `error`; destructive/critical are legacy aliases of the same rule. */
409
+ .kol-badge-error,
410
+ .kol-badge-destructive,
411
+ .kol-badge-critical {
412
+ color: var(--ui-error);
413
+ background-color: color-mix(in srgb, var(--ui-error) 15%, var(--kol-surface-primary));
414
+ border: 1px solid transparent;
409
415
  }
410
416
 
411
417
  .kol-badge-outline {
@@ -415,27 +421,21 @@
415
421
  }
416
422
 
417
423
  .kol-badge-success {
418
- background-color: color-mix(in srgb, #22c55e 20%, transparent);
419
- color: #22c55e;
420
- border: 1px solid color-mix(in srgb, #22c55e 30%, transparent);
424
+ color: var(--ui-success);
425
+ background-color: color-mix(in srgb, var(--ui-success) 15%, var(--kol-surface-primary));
426
+ border: 1px solid transparent;
421
427
  }
422
428
 
423
429
  .kol-badge-warning {
424
- background-color: color-mix(in srgb, #eab308 20%, transparent);
425
- color: #eab308;
426
- border: 1px solid color-mix(in srgb, #eab308 30%, transparent);
427
- }
428
-
429
- .kol-badge-critical {
430
- background-color: color-mix(in srgb, #ef4444 20%, transparent);
431
- color: #ef4444;
432
- border: 1px solid color-mix(in srgb, #ef4444 30%, transparent);
430
+ color: var(--ui-warning);
431
+ background-color: color-mix(in srgb, var(--ui-warning) 15%, var(--kol-surface-primary));
432
+ border: 1px solid transparent;
433
433
  }
434
434
 
435
435
  .kol-badge-info {
436
- background-color: color-mix(in srgb, #3b82f6 20%, transparent);
437
- color: #3b82f6;
438
- border: 1px solid color-mix(in srgb, #3b82f6 30%, transparent);
436
+ color: var(--ui-info);
437
+ background-color: color-mix(in srgb, var(--ui-info) 15%, var(--kol-surface-primary));
438
+ border: 1px solid transparent;
439
439
  }
440
440
 
441
441
  .kol-badge-sm {
@@ -473,7 +473,7 @@
473
473
  .docs-card {
474
474
  display: block;
475
475
  padding: 16px;
476
- border-radius: 8px;
476
+ border-radius: var(--kol-radius-sm);
477
477
  border: 1px solid;
478
478
  border-color: color-mix(in srgb, var(--kol-surface-on-primary) 4%, transparent);
479
479
  background: transparent;
@@ -494,7 +494,7 @@
494
494
  /* Compact doc card for sidebar */
495
495
  .docs-card--compact {
496
496
  padding: 8px 12px;
497
- border-radius: 6px;
497
+ border-radius: var(--kol-radius-sm);
498
498
  }
499
499
 
500
500
  .docs-title-link {
@@ -625,7 +625,7 @@
625
625
  .docs-image {
626
626
  max-width: 100%;
627
627
  height: auto;
628
- border-radius: 8px;
628
+ border-radius: var(--kol-radius-sm);
629
629
  margin-block: 1.5rem;
630
630
  }
631
631
 
@@ -680,7 +680,7 @@
680
680
  gap: 6px;
681
681
  padding: 6px 12px;
682
682
  border: 1px solid color-mix(in srgb, var(--kol-surface-on-primary) 16%, transparent);
683
- border-radius: 6px;
683
+ border-radius: var(--kol-radius-sm);
684
684
  background: transparent;
685
685
  cursor: pointer;
686
686
  transition: all 0.15s ease;
@@ -733,7 +733,7 @@
733
733
  aspect-ratio: 1;
734
734
  position: relative;
735
735
  overflow: hidden;
736
- border-radius: 8px;
736
+ border-radius: var(--kol-radius-sm);
737
737
  background: color-mix(in srgb, var(--kol-surface-on-primary) 4%, transparent);
738
738
  }
739
739
 
package/kol-theme.css CHANGED
@@ -118,10 +118,14 @@
118
118
  ignored rather than followed. A value used six times is a rung. */
119
119
  --kol-radius-xs: 2px;
120
120
  --kol-radius-sm: 4px;
121
- --kol-radius-md: 8px;
122
- --kol-radius-lg: 12px;
123
- --kol-radius-xl: 16px;
124
- --kol-radius-2xl: 20px;
121
+ /* CONTAINERS ARE 4px (user ruling 2026-08-09, "change 8px radius to 4px in
122
+ containers. everywhere."). The repo ships 4px or full, nothing between —
123
+ md/lg/xl/2xl stay resolvable so no consumer's var() breaks, but they all
124
+ collapse to the 4px value. Do not re-widen a rung without a ruling. */
125
+ --kol-radius-md: 4px;
126
+ --kol-radius-lg: 4px;
127
+ --kol-radius-xl: 4px;
128
+ --kol-radius-2xl: 4px;
125
129
  --kol-radius-full: 9999px;
126
130
 
127
131
  /* Shadows (subtle elevation) */
@@ -912,7 +912,9 @@
912
912
  .kol-sans-heading-04 {
913
913
  font-family: var(--kol-font-family-sans-compact);
914
914
  font-size: var(--kol-text-heading-04);
915
- line-height: 100%;
915
+ /* 120% — was 100%, the one dip in the 110/110/120/x/125 ramp; 24px H4
916
+ * set solid, tighter than the 64px H1 (user ruling 2026-08-12). */
917
+ line-height: 120%;
916
918
  font-weight: 500;
917
919
  }
918
920
 
package/kol-utilities.css CHANGED
@@ -90,3 +90,36 @@
90
90
  .hide-number-spinners {
91
91
  -moz-appearance: textfield;
92
92
  }
93
+
94
+ /* Link underline — the animated hover affordance: draws in left→right on
95
+ * hover/focus, retracts right→left on leave (transform-origin swap, not a
96
+ * fade). Line is currentColor so it rides the text at any scale. Minted from
97
+ * kol-website's animations.css (NavLinkUnderline, 2026-08-12); DS version
98
+ * adds :focus-visible parity and reduced-motion handling.
99
+ * Thickness knob: --kol-link-underline-size (2px default — fine at mono-14,
100
+ * a heading-01 link may want 3px). */
101
+ .kol-link-underline {
102
+ position: relative;
103
+ }
104
+ .kol-link-underline::after {
105
+ content: '';
106
+ position: absolute;
107
+ left: 0;
108
+ bottom: -2px;
109
+ width: 100%;
110
+ height: var(--kol-link-underline-size, 2px);
111
+ background-color: currentColor;
112
+ transform-origin: bottom right;
113
+ transform: scaleX(0);
114
+ transition: transform 300ms cubic-bezier(0.65, 0.05, 0.36, 1);
115
+ }
116
+ .kol-link-underline:hover::after,
117
+ .kol-link-underline:focus-visible::after {
118
+ transform-origin: bottom left;
119
+ transform: scaleX(1);
120
+ }
121
+ @media (prefers-reduced-motion: reduce) {
122
+ .kol-link-underline::after {
123
+ transition: none;
124
+ }
125
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolkrabbi/kol-theme",
3
- "version": "0.33.0",
3
+ "version": "0.35.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",