@kolkrabbi/kol-theme 0.188.0 → 0.190.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-animation.css CHANGED
@@ -202,38 +202,47 @@
202
202
  * Touch has no hover and gets nothing: the front is the card. Reduced
203
203
  * motion drops the turn's transition, so both flips become the cut.
204
204
  * ───────────────────────────────────────────────────────────────────── */
205
- .kol-card[data-back] .kol-card-turn-inner {
205
+ /* THE WHOLE CARD TURNS (AppCardWholeFlip, kol-monitor 2026-10-24 — user: *"it doesnt truly flip the card, there is
206
+ * still the background that remains"*): `flip-card`'s attributes ride a TURNER around the card root, so the root — its
207
+ * ground included — is the front face and nothing stays behind; `flip-image` and `hover` still mark the root. The
208
+ * reveal is OPT-IN: hover (and keyboard focus) turn a card only under `data-back-hover` (*"hover flips card? default
209
+ * off"*), and `data-flipped` turns it on the consumer's word (*"make the cards flip on a shortcut"*) — a page turns
210
+ * every card on a key. The turn is monitor's: 450ms ease, both faces backface-hidden, never a timed visibility. */
211
+ [data-back] .kol-card-turn-inner {
206
212
  position: relative;
207
213
  }
208
- .kol-card[data-back] .kol-card-face--back {
214
+ [data-back] .kol-card-face--back {
209
215
  position: absolute;
210
216
  inset: 0;
211
217
  }
212
- .kol-card[data-back^="flip"] .kol-card-turn,
213
- .kol-card[data-back="flip-card"] {
218
+ [data-back^="flip"] .kol-card-turn,
219
+ [data-back="flip-card"].kol-card-turn {
214
220
  perspective: 1000px;
215
221
  }
216
- .kol-card[data-back^="flip"] .kol-card-turn-inner {
222
+ [data-back^="flip"] .kol-card-turn-inner {
217
223
  transform-style: preserve-3d;
218
- transition: transform 0.4s ease-out;
224
+ transition: transform 450ms ease;
219
225
  }
220
- .kol-card[data-back^="flip"] .kol-card-face {
226
+ [data-back^="flip"] .kol-card-face {
221
227
  backface-visibility: hidden;
228
+ -webkit-backface-visibility: hidden;
222
229
  }
223
- .kol-card[data-back^="flip"] .kol-card-face--back {
230
+ [data-back^="flip"] .kol-card-face--back {
224
231
  transform: rotateY(180deg);
225
232
  }
226
- .kol-card[data-back="hover"] .kol-card-face--back {
233
+ [data-back="hover"] .kol-card-face--back {
227
234
  opacity: 0;
228
235
  }
229
236
  @media (hover: hover) {
230
- .kol-card[data-back^="flip"]:hover .kol-card-turn-inner { transform: rotateY(180deg); }
231
- .kol-card[data-back="hover"]:hover .kol-card-face--back { opacity: 1; }
237
+ [data-back^="flip"][data-back-hover]:hover .kol-card-turn-inner { transform: rotateY(180deg); }
238
+ [data-back="hover"][data-back-hover]:hover .kol-card-face--back { opacity: 1; }
232
239
  }
233
- .kol-card[data-back^="flip"]:focus-visible .kol-card-turn-inner { transform: rotateY(180deg); }
234
- .kol-card[data-back="hover"]:focus-visible .kol-card-face--back { opacity: 1; }
240
+ [data-back^="flip"][data-back-hover]:focus-within .kol-card-turn-inner,
241
+ [data-back^="flip"][data-flipped] .kol-card-turn-inner { transform: rotateY(180deg); }
242
+ [data-back="hover"][data-back-hover]:focus-within .kol-card-face--back,
243
+ [data-back="hover"][data-flipped] .kol-card-face--back { opacity: 1; }
235
244
  @media (prefers-reduced-motion: reduce) {
236
- .kol-card[data-back^="flip"] .kol-card-turn-inner { transition: none; }
245
+ [data-back^="flip"] .kol-card-turn-inner { transition: none; }
237
246
  }
238
247
 
239
248
  /* ─────────────────────────────────────────────────────────────────────
@@ -441,6 +450,30 @@
441
450
  /* near is not enough for a line — it lights on the edge itself, not 20px out */
442
451
  .kol-rail-grab--line.is-near:not(:hover):not(.is-dragging):not(:focus-visible)::before { opacity: 0; }
443
452
 
453
+ /* A HORIZONTAL EDGE wears the same pill, turned (his review 2026-10-25: *"why does bottom rail not have the same grab
454
+ * system as other rails?"* — `Rail resizable` drew a full-width wash until then). `--top` is a bottom rail's handle on
455
+ * its top edge, `--bottom` a top rail's on its bottom edge; the pill travels on x (`useGrabEdge({ axis: 'x' })`,
456
+ * `--kol-rail-grab-x`), held half its length from either end as the vertical one is. */
457
+ .kol-rail-grab--top,
458
+ .kol-rail-grab--bottom {
459
+ top: auto;
460
+ bottom: auto;
461
+ right: 0;
462
+ left: 0;
463
+ width: auto;
464
+ height: 8px;
465
+ cursor: row-resize;
466
+ }
467
+ .kol-rail-grab--top { top: -3.5px; }
468
+ .kol-rail-grab--bottom { bottom: -3.5px; }
469
+ .kol-rail-grab--top::before,
470
+ .kol-rail-grab--bottom::before {
471
+ top: 50%;
472
+ left: clamp(2.25rem, var(--kol-rail-grab-x, 50%), calc(100% - 2.25rem));
473
+ width: 4.5rem;
474
+ height: 0.125rem;
475
+ }
476
+
444
477
  /* A RIGHT-HAND RAIL's handle sits on its LEFT edge, facing the page (2026-09-30 — the modifier
445
478
  * EditorShell has stamped since 0.x, `kol-rail-grab--${side}`, had no rule, so a right rail's pill
446
479
  * sat on its outer edge; the workshop shell's right rail needs the same). */
@@ -137,6 +137,10 @@
137
137
  .kol-control-sm { padding: 4px 12px; }
138
138
  .kol-control-md { padding: 6px 16px; }
139
139
  .kol-control-lg { padding: 8px 20px; }
140
+ /* THE RAIL PRESET (his review 2026-10-25: *"change padding from 12 to 8 on input here and call it a variant or preset
141
+ * for input on rails"*): a control in a rail's row keeps its rung's height and takes 8 at the sides — a slider's
142
+ * readout chip is three digits, not a field. `Input preset="rail"`; the Slider's `readoutPreset` passes it on. */
143
+ .kol-control--rail { padding-inline: 8px; }
140
144
 
141
145
  /* ─── Disabled ─── */
142
146
 
@@ -21,7 +21,9 @@
21
21
  * read kol-framework's `--kol-sidenav-w` for this, so an app that loads kol-framework.css
22
22
  * (fxr) opened to 320 on a wide screen and one that does not (mirror, monitor) fell back to
23
23
  * 264 — the same rail, two widths, decided by an unrelated import. */
24
- --kol-shell-rail-open: 264px;
24
+ /* the open rail is the rail width — 380, the same as a side rail (his ruling 2026-10-25: *"navrail expanded also gets the
25
+ same width as we just set"*); it ramped 264 · 320 from 1536 until then */
26
+ --kol-shell-rail-open: 380px;
25
27
  /* Page gutter — PageShell's padding and PageBleed's negative margin.
26
28
  * ONE LADDER FOR THE ESTATE (two-page-scaffolds-one-job, kol-client-olina
27
29
  * 2026-09-03): this is `--kol-pad-section-x`, the page-content ladder every
@@ -36,7 +38,7 @@
36
38
  * pair cannot drift. */
37
39
  --kol-shell-page-pad: var(--kol-pad-section-x, clamp(20px, 5vw, 48px));
38
40
  }
39
- @media (min-width: 1536px) { :root { --kol-shell-rail-open: 320px; } }
41
+
40
42
 
41
43
  /* ── PageShell ──────────────────────────────────────────────────────────── */
42
44
 
@@ -49,6 +49,22 @@
49
49
  * 24. CommandOverlay (field-aligned rows) and the Quick Look header (a toolbar) keep their own. */
50
50
  --kol-pad-overlay: var(--kol-spacing-5);
51
51
 
52
+ /* RAIL TIERS (RailKit, kol-monitor 2026-10-24 — user: *"currently settings is showing 380 wide and padding is totally
53
+ * different in the rail and the settings"*). One width and one padding per tier, the same `app` · `site` split the
54
+ * cards and the page headers take; `Rail variant` and `SettingsPanel tier` read them, so a page rail and the settings
55
+ * rail of one app cannot disagree. Both tiers are 380 — the settings rail as locked 2026-08-27; `app` stood at 320
56
+ * (the shell rail's open width on a wide screen) from 2026-10-24 until his ruling on round 18 the next day (*"why is
57
+ * settings now less wide? it was fine before?"*). fxr's inspector rides the shell rail's 264 · 320 ramp and monitor's
58
+ * patch table had 440 — their adoption items. The padding is the overlay inset in both — the 2026-10-18 ruling — named
59
+ * per tier so one can move without the other. */
60
+ --kol-rail-w-app: 380px;
61
+ --kol-rail-w-site: 380px;
62
+ /* THE RAIL'S INSET IS 16, EVERY RAIL, EVERY WIDTH (his review 2026-10-25: *"the entire padding on the bottom rail and
63
+ side rail is completely different then the navrail? why dont we unify?"* · then, on 20: *"MAKE 16!!!"*). It was the
64
+ overlay inset (20 · 24 from 768); an hour at the page's 48 read as *"you went backwards"*, 20 as still too much. */
65
+ --kol-pad-rail-app: var(--kol-spacing-4);
66
+ --kol-pad-rail-site: var(--kol-pad-overlay);
67
+
52
68
  /* CARD padding (2026-08-15, content-card ruling) — flat, stepped by the
53
69
  * card's `size` prop, never by breakpoint. 12/16/24. */
54
70
  --kol-pad-card-sm: 0.75rem;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolkrabbi/kol-theme",
3
- "version": "0.188.0",
3
+ "version": "0.190.0",
4
4
  "description": "Tokens and base CSS",
5
5
  "license": "MIT",
6
6
  "type": "module",