@kolkrabbi/kol-theme 0.110.0 → 0.112.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/kol-base-tokens.css +16 -5
- package/kol-components-atoms.css +37 -0
- package/kol-components-shell.css +40 -0
- package/package.json +1 -1
package/kol-base-tokens.css
CHANGED
|
@@ -74,11 +74,18 @@
|
|
|
74
74
|
* flips toward the ground, `oq-ab-96` IS the well everywhere — 245 under a
|
|
75
75
|
* 250 page in light, 10 under an 18 page in dark. The per-theme alias this
|
|
76
76
|
* replaced was the tell that the ladder underneath was wrong. */
|
|
77
|
-
/*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
77
|
+
/* ASYMMETRIC BY RULING (user 2026-08-30: pure white in light, the 96 rung in
|
|
78
|
+
* dark — *"I really only wanted that extreme for light"*).
|
|
79
|
+
*
|
|
80
|
+
* LIGHT takes the pole, `oq-ab-100` = #ffffff. A page wash moves 250 → 245,
|
|
81
|
+
* and at the old 96 rung the well was ALSO 245 — the collision this closes.
|
|
82
|
+
* At the pole the gap is 10 and no wash rung can reach it.
|
|
83
|
+
* DARK stays at `oq-ab-96` = 10 under an 18 page. Pure #000 was a 23-level
|
|
84
|
+
* step and too deep; dark never had the collision anyway, because its wash is
|
|
85
|
+
* a white film that moves the page AWAY from the well.
|
|
86
|
+
*
|
|
87
|
+
* Two declarations, not one. The single-token version was my elegance, not a
|
|
88
|
+
* requirement — the two themes want different depths and that is allowed. */
|
|
82
89
|
--kol-surface-sunken: var(--kol-oq-ab-100);
|
|
83
90
|
|
|
84
91
|
--kol-surface-inverse: #0e0e11;
|
|
@@ -107,6 +114,8 @@
|
|
|
107
114
|
--kol-surface-on-secondary: #f8f8f8;
|
|
108
115
|
|
|
109
116
|
--kol-surface-tertiary: #0e0e11;
|
|
117
|
+
/* the well is the 96 rung in dark, not the pole — see the light block */
|
|
118
|
+
--kol-surface-sunken: var(--kol-oq-ab-96);
|
|
110
119
|
--kol-surface-on-tertiary: #ffffff;
|
|
111
120
|
|
|
112
121
|
|
|
@@ -153,6 +162,8 @@
|
|
|
153
162
|
--kol-surface-on-secondary: #f8f8f8;
|
|
154
163
|
|
|
155
164
|
--kol-surface-tertiary: #0e0e11;
|
|
165
|
+
/* the well is the 96 rung in dark, not the pole — see the light block */
|
|
166
|
+
--kol-surface-sunken: var(--kol-oq-ab-96);
|
|
156
167
|
--kol-surface-on-tertiary: #ffffff;
|
|
157
168
|
|
|
158
169
|
|
package/kol-components-atoms.css
CHANGED
|
@@ -1317,3 +1317,40 @@ a.kol-icon-frame {
|
|
|
1317
1317
|
padding: 0;
|
|
1318
1318
|
}
|
|
1319
1319
|
|
|
1320
|
+
|
|
1321
|
+
/* ── COARSE-POINTER TEXT FLOOR ──────────────────────────────────────────────
|
|
1322
|
+
* iOS Safari zooms the page whenever a focused text field computes under 16px,
|
|
1323
|
+
* and it does NOT zoom back out on blur (InputTypeScaleZoomsIOS, kol-website
|
|
1324
|
+
* 2026-08-31). The DS's `sm` (12px) and `md` (14px) rungs both trip it, and md
|
|
1325
|
+
* is the default — so every consumer with an input has it, on every iPhone.
|
|
1326
|
+
*
|
|
1327
|
+
* The cost is that it does not look like a font-size bug: the page stays zoomed
|
|
1328
|
+
* and every subsequent screenshot reads as a catastrophic gutter failure. A
|
|
1329
|
+
* mobile audit chased a non-existent overflow across a dozen routes because of
|
|
1330
|
+
* this one rule.
|
|
1331
|
+
*
|
|
1332
|
+
* NOT a re-litigation of MobileTouchFloor (2026-08-26, "no type floor, 24px hit
|
|
1333
|
+
* floor"). That ruling is about legibility — how big text is DRAWN for a human.
|
|
1334
|
+
* This is a hard platform behaviour keyed on the computed `font-size` of the
|
|
1335
|
+
* focused field, regardless of how legible it is. Pointer devices do not move.
|
|
1336
|
+
*
|
|
1337
|
+
* `maximum-scale=1` would also stop it and is the wrong fix — it kills
|
|
1338
|
+
* pinch-zoom for everyone and fails WCAG 1.4.4.
|
|
1339
|
+
*
|
|
1340
|
+
* The type class (`kol-mono-*`) sits on the SHELL and the field INHERITS it, so
|
|
1341
|
+
* an element+class rule here beats it cleanly rather than tying on specificity
|
|
1342
|
+
* (ARCHITECTURE §5). The height pin travels with the size: Input pins its inner
|
|
1343
|
+
* field to the token's line-height (h-4 / h-[18px] / h-[22px]), so a 16px face
|
|
1344
|
+
* in an unlifted 16px box would clip. */
|
|
1345
|
+
@media (pointer: coarse) {
|
|
1346
|
+
.kol-control input,
|
|
1347
|
+
.kol-expand input {
|
|
1348
|
+
font-size: 16px;
|
|
1349
|
+
line-height: 22px;
|
|
1350
|
+
height: 22px;
|
|
1351
|
+
}
|
|
1352
|
+
.kol-control textarea {
|
|
1353
|
+
font-size: 16px;
|
|
1354
|
+
line-height: 22px;
|
|
1355
|
+
}
|
|
1356
|
+
}
|
package/kol-components-shell.css
CHANGED
|
@@ -78,3 +78,43 @@
|
|
|
78
78
|
background-color: var(--kol-fg-24);
|
|
79
79
|
color: inherit;
|
|
80
80
|
}
|
|
81
|
+
|
|
82
|
+
/* ── THE RAIL AS A DRAWER ────────────────────────────────────────────────────
|
|
83
|
+
* `AppShell touch="drawer"` below `drawerBelow` (ShellRailNoDrawerOnMobile,
|
|
84
|
+
* kol-chess 2026-08-31). At 390 the 48px rail is 12.3% of the viewport spent on
|
|
85
|
+
* chrome in the one place there is none to spare — a chess board went from
|
|
86
|
+
* 302px to 350px the moment it folded. `railToggleKey` could not help: it is a
|
|
87
|
+
* KEY, and a phone has no keyboard.
|
|
88
|
+
*
|
|
89
|
+
* JS owns the breakpoint and stamps `data-rail-drawer` on the shell root; CSS
|
|
90
|
+
* only paints. No media query here — the fold width is a prop, so a query would
|
|
91
|
+
* be a second source of truth for it. And no `!important`: the rail reads its
|
|
92
|
+
* own `--kol-shell-drawer-width` in drawer mode instead of the live rail token,
|
|
93
|
+
* so nothing here is fighting an inline style. */
|
|
94
|
+
[data-rail-drawer] .kol-shell-rail {
|
|
95
|
+
transform: translateX(-100%);
|
|
96
|
+
transition: transform 220ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
97
|
+
}
|
|
98
|
+
[data-rail-drawer="open"] .kol-shell-rail {
|
|
99
|
+
transform: translateX(0);
|
|
100
|
+
}
|
|
101
|
+
@media (prefers-reduced-motion: reduce) {
|
|
102
|
+
[data-rail-drawer] .kol-shell-rail { transition: none; }
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/* Above the rail, so it stays tappable with the drawer open. */
|
|
106
|
+
.kol-shell-drawer-trigger {
|
|
107
|
+
position: fixed;
|
|
108
|
+
top: 12px;
|
|
109
|
+
left: 12px;
|
|
110
|
+
z-index: calc(var(--kol-z-sticky) + 2);
|
|
111
|
+
width: 32px;
|
|
112
|
+
height: 32px;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.kol-shell-drawer-scrim {
|
|
116
|
+
position: fixed;
|
|
117
|
+
inset: 0;
|
|
118
|
+
z-index: calc(var(--kol-z-sticky) - 1);
|
|
119
|
+
background: color-mix(in srgb, var(--kol-color-ab-black) 48%, transparent);
|
|
120
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kolkrabbi/kol-theme",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.112.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",
|