@kolkrabbi/kol-theme 0.163.0 → 0.164.1

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.
@@ -1324,9 +1324,14 @@ a.kol-icon-frame {
1324
1324
  /* THE TOUCH RUNG (D5, 2026-09-29 — see kol-base-tokens.css): every text control types 16 / 22 on
1325
1325
  * touch, so a derived box grows exactly as the pinned tokens do — xs/sm 4+4+22+2 = 32, md
1326
1326
  * 6+6+22+2 = 36, lg 40. Two classes, so it outranks the size's own kol-mono-* class. */
1327
- .kol-btn.kol-btn-xs, .kol-btn.kol-btn-sm, .kol-btn.kol-btn-md, .kol-btn.kol-btn-lg,
1327
+ /* NOT INSIDE A HARDWARE PANEL (2026-10-02, kol-monitor's Patch module): a module is drawn at the
1328
+ * rack's own zoom, and its `xs` controls are the PANEL rung — 8px type in a 22px box on a 96px
1329
+ * plate. The rung lifted its dropdown to 16 / 32 and it no longer fitted. `.kol-hw-panel` marks
1330
+ * the plate (ModuleFrame) and a list portalled out of one (Dropdown); `:where()` keeps the
1331
+ * rule's specificity where it was. The box tokens are pinned back in kol-components-controls.css. */
1332
+ :is(.kol-btn.kol-btn-xs, .kol-btn.kol-btn-sm, .kol-btn.kol-btn-md, .kol-btn.kol-btn-lg,
1328
1333
  .kol-control.kol-control-xs, .kol-control.kol-control-sm, .kol-control.kol-control-md, .kol-control.kol-control-lg,
1329
- .kol-seg .kol-seg-cell, .kol-menu-btn.kol-menu-btn {
1334
+ .kol-seg .kol-seg-cell, .kol-menu-btn.kol-menu-btn):where(:not(.kol-hw-panel, .kol-hw-panel *)) {
1330
1335
  font-size: 16px;
1331
1336
  line-height: 22px;
1332
1337
  }
@@ -34,3 +34,28 @@
34
34
  --kol-ctl-signal-input: #4ade80;
35
35
  --kol-ctl-cv-attenuate: #497DA2;
36
36
  }
37
+
38
+ /* A HARDWARE PANEL KEEPS ITS DESK SIZES ON TOUCH (2026-10-02). The touch rung (kol-base-tokens.css)
39
+ * grows every control box on a coarse pointer — xs 22 → 32 — so a finger can hit app chrome. A
40
+ * module is not app chrome: it is drawn at the rack's zoom, which is how it is made reachable, and
41
+ * its controls are sized to the plate. `.kol-hw-panel` is ModuleFrame's root, and Dropdown puts it
42
+ * on a list it portals out of one. The type half of the rung skips the same marker
43
+ * (kol-components-atoms.css). */
44
+ @media (pointer: coarse) {
45
+ .kol-hw-panel {
46
+ --kol-ctl-xs: 22px;
47
+ --kol-ctl-sm: 26px;
48
+ --kol-ctl-md: 32px;
49
+ --kol-ctl-lg: 40px;
50
+ }
51
+ }
52
+
53
+ /* THE PLATE IS THE GROUND (2026-10-02, kol-monitor's Patch module). An outline or ghost dropdown
54
+ * paints its list in `--kol-tone-ground` — "the ground it sits on", `surface-primary` unless
55
+ * something says otherwise (kol-components-molecules.css, TONE). A module's plate is
56
+ * `surface-secondary`, so the list came out page-coloured, darker than the trigger above it. The
57
+ * default plate says what it is; a consumer that passes its own plate class sets the ground with it. */
58
+ .kol-hw-panel.bg-surface-secondary {
59
+ --kol-tone-ground: var(--kol-surface-secondary);
60
+ }
61
+
@@ -142,6 +142,12 @@
142
142
  * variables on the panel; the list scrolls at the ceiling as it always could. */
143
143
  .kol-dd-list {
144
144
  padding: var(--kol-spacing-1);
145
+ /* THE ROWS SIT ON THE TRIGGER'S TEXT EDGE (2026-10-02). The trigger always carries a 1px border
146
+ * (transparent on a filled tone); the panel carries one only on outline. So a filled panel's
147
+ * rows stood 1px left of the trigger's text. The list makes up the difference: 4px, plus the
148
+ * trigger's 1, less whatever border the panel has. (`0px`, not `0`, in the tone bundles — a
149
+ * unitless zero cannot be subtracted from a length.) */
150
+ padding-inline: calc(var(--kol-spacing-1) + 1px - var(--kol-tone-panel-border-w, 0px));
145
151
  overflow-y: auto;
146
152
  min-height: 0;
147
153
  max-height: calc(var(--kol-dd-max-rows, 10) * var(--kol-dd-row-h, 2rem) + var(--kol-spacing-1) * 2);
@@ -1986,7 +1992,7 @@
1986
1992
  --kol-tone-pressed-image: none;
1987
1993
  --kol-tone-pressed-fg: var(--kol-surface-primary);
1988
1994
  --kol-tone-panel-bg: var(--kol-surface-secondary);
1989
- --kol-tone-panel-border-w: 0;
1995
+ --kol-tone-panel-border-w: 0px;
1990
1996
  --kol-tone-panel-border: transparent;
1991
1997
  }
1992
1998
  /* `secondary` PAINTS THE PAGE SURFACE (tone-secondary-is-inverse, kol-client-olina
@@ -2011,7 +2017,7 @@
2011
2017
  --kol-tone-pressed-image: none;
2012
2018
  --kol-tone-pressed-fg: var(--kol-surface-primary);
2013
2019
  --kol-tone-panel-bg: var(--kol-surface-primary);
2014
- --kol-tone-panel-border-w: 0;
2020
+ --kol-tone-panel-border-w: 0px;
2015
2021
  --kol-tone-panel-border: transparent;
2016
2022
  }
2017
2023
  /* `inverted` — the text color as fill: Button's / IconFrame's `secondary`
@@ -2035,7 +2041,7 @@
2035
2041
  --kol-tone-pressed-image: none;
2036
2042
  --kol-tone-pressed-fg: var(--kol-surface-primary);
2037
2043
  --kol-tone-panel-bg: var(--kol-surface-on-primary);
2038
- --kol-tone-panel-border-w: 0;
2044
+ --kol-tone-panel-border-w: 0px;
2039
2045
  --kol-tone-panel-border: transparent;
2040
2046
  }
2041
2047
  .kol-tone-outline,
@@ -2073,7 +2079,7 @@
2073
2079
  --kol-tone-pressed-image: none;
2074
2080
  --kol-tone-pressed-fg: var(--kol-surface-primary);
2075
2081
  --kol-tone-panel-bg: var(--kol-tone-ground, var(--kol-surface-primary));
2076
- --kol-tone-panel-border-w: 0;
2082
+ --kol-tone-panel-border-w: 0px;
2077
2083
  --kol-tone-panel-border: transparent;
2078
2084
  }
2079
2085
  .kol-tone-grey,
@@ -2092,7 +2098,7 @@
2092
2098
  --kol-tone-pressed-image: none;
2093
2099
  --kol-tone-pressed-fg: var(--kol-surface-primary);
2094
2100
  --kol-tone-panel-bg: var(--kol-oq-12);
2095
- --kol-tone-panel-border-w: 0;
2101
+ --kol-tone-panel-border-w: 0px;
2096
2102
  --kol-tone-panel-border: transparent;
2097
2103
  }
2098
2104
  .kol-tone-sunken,
@@ -2111,7 +2117,7 @@
2111
2117
  --kol-tone-pressed-image: linear-gradient(var(--kol-fg-08), var(--kol-fg-08));
2112
2118
  --kol-tone-pressed-fg: var(--kol-fg-96);
2113
2119
  --kol-tone-panel-bg: var(--kol-surface-sunken);
2114
- --kol-tone-panel-border-w: 0;
2120
+ --kol-tone-panel-border-w: 0px;
2115
2121
  --kol-tone-panel-border: transparent;
2116
2122
  }
2117
2123
  :where(.kol-btn-nav) {
@@ -2129,7 +2135,7 @@
2129
2135
  --kol-tone-pressed-image: none;
2130
2136
  --kol-tone-pressed-fg: var(--kol-surface-primary);
2131
2137
  --kol-tone-panel-bg: var(--kol-tone-ground, var(--kol-surface-primary));
2132
- --kol-tone-panel-border-w: 0;
2138
+ --kol-tone-panel-border-w: 0px;
2133
2139
  --kol-tone-panel-border: transparent;
2134
2140
  }
2135
2141
  :where(.kol-icon-frame-nav) {
@@ -2147,7 +2153,7 @@
2147
2153
  --kol-tone-pressed-image: none;
2148
2154
  --kol-tone-pressed-fg: var(--kol-surface-primary);
2149
2155
  --kol-tone-panel-bg: var(--kol-tone-ground, var(--kol-surface-primary));
2150
- --kol-tone-panel-border-w: 0;
2156
+ --kol-tone-panel-border-w: 0px;
2151
2157
  --kol-tone-panel-border: transparent;
2152
2158
  }
2153
2159
  :where(.kol-control--plain) {
@@ -2165,7 +2171,7 @@
2165
2171
  --kol-tone-pressed-image: none;
2166
2172
  --kol-tone-pressed-fg: var(--kol-surface-primary);
2167
2173
  --kol-tone-panel-bg: var(--kol-tone-ground, var(--kol-surface-primary));
2168
- --kol-tone-panel-border-w: 0;
2174
+ --kol-tone-panel-border-w: 0px;
2169
2175
  --kol-tone-panel-border: transparent;
2170
2176
  }
2171
2177
  :where(.kol-btn-danger, .kol-icon-frame-danger) {
@@ -2183,7 +2189,7 @@
2183
2189
  --kol-tone-pressed-image: none;
2184
2190
  --kol-tone-pressed-fg: var(--kol-surface-primary);
2185
2191
  --kol-tone-panel-bg: var(--ui-error);
2186
- --kol-tone-panel-border-w: 0;
2192
+ --kol-tone-panel-border-w: 0px;
2187
2193
  --kol-tone-panel-border: transparent;
2188
2194
  }
2189
2195
  :where(.kol-btn-accent, .kol-icon-frame-accent) {
@@ -2201,7 +2207,7 @@
2201
2207
  --kol-tone-pressed-image: none;
2202
2208
  --kol-tone-pressed-fg: var(--kol-surface-primary);
2203
2209
  --kol-tone-panel-bg: var(--kol-accent-primary);
2204
- --kol-tone-panel-border-w: 0;
2210
+ --kol-tone-panel-border-w: 0px;
2205
2211
  --kol-tone-panel-border: transparent;
2206
2212
  }
2207
2213
 
@@ -168,6 +168,19 @@
168
168
  min-width: 0;
169
169
  }
170
170
 
171
+ /* A `.kol-page` INSIDE THE SHELL YIELDS ITS X (kol-website, 2026-10-02). "Pages do not pad
172
+ * themselves on x" was written above on 2026-09-28 and kol-framework's `PageSection` never heard
173
+ * it: `.kol-page` pads `--kol-pad-section-x` again, so a section sat 48 + 48 = 96px off the rail
174
+ * at 1440 — and kol-workshop's own `ExhibitPage` / `ExhibitOverview` are built from it. The cap
175
+ * goes with the pad: inside the shell the width is the page's call, made once in `MainColumn`
176
+ * (canvas · shell · none), and `.kol-page`'s own `--kol-container-max` + auto margin was a
177
+ * second answer that re-capped and re-centred a `none` page. The block padding stays. */
178
+ .shell-main .kol-page {
179
+ padding-inline: 0;
180
+ max-width: none;
181
+ margin-inline: 0;
182
+ }
183
+
171
184
  /* THE TYPED WORDMARK — the shell's second mark as live type in the Tight cut
172
185
  * (2026-09-28), sized so its caps stand as tall as the drawn KOLKRABBI mark
173
186
  * beside it (h-6). The display voice is uppercase by contract. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolkrabbi/kol-theme",
3
- "version": "0.163.0",
3
+ "version": "0.164.1",
4
4
  "description": "Tokens and base CSS",
5
5
  "license": "MIT",
6
6
  "type": "module",