@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.
@@ -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
+ }
@@ -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.111.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",