@kolkrabbi/kol-theme 0.111.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-components-atoms.css +37 -0
- package/kol-components-shell.css +40 -0
- package/package.json +1 -1
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",
|