@kolkrabbi/kol-theme 0.13.2 → 0.13.4

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.
@@ -867,3 +867,75 @@ a:hover .icon-hover,
867
867
  border-top: 1px solid var(--kol-fg-08);
868
868
  border-bottom: 1px solid var(--kol-fg-08);
869
869
  }
870
+
871
+ /* ───── IconFrame — a static square frame holding one icon ─────
872
+ * Promoted 2026-07-30 from kol-website's SectionTitle, where the pattern was an
873
+ * anonymous <span> wearing `kol-btn kol-btn-secondary kol-btn-md kol-btn-icon`.
874
+ *
875
+ * These classes exist INSTEAD of reusing kol-btn-*, and that is the whole point
876
+ * of the component. On a <span>, the button's hover/active/focus/disabled rules
877
+ * are suppressed by the ELEMENT — "no states" was an accident of the tag, one
878
+ * element change away from leaking back. Here there are simply no state rules
879
+ * to inherit: no :hover, no :active, no :focus-visible, no :disabled, no
880
+ * transition, no cursor.
881
+ *
882
+ * Background/foreground/geometry are byte-identical to the kol-btn equivalents
883
+ * (declarations mirrored from .kol-btn-{variant} above and the pinned squares
884
+ * at .kol-btn-icon.kol-btn-{size}), so surfaces that migrate don't shift a
885
+ * pixel. `primary` and `secondary` are inverse pairs — they flip with the theme
886
+ * from the tokens alone, no per-theme props. */
887
+ .kol-icon-frame {
888
+ display: inline-flex;
889
+ align-items: center;
890
+ justify-content: center;
891
+ flex-shrink: 0;
892
+ line-height: 0;
893
+ border-radius: var(--kol-radius-sm);
894
+ padding: 0;
895
+ }
896
+
897
+ /* pinned squares — the box never moves with glyph size (user law 2026-07-28) */
898
+ .kol-icon-frame-sm { width: 28px; height: 28px; }
899
+ .kol-icon-frame-md { width: 32px; height: 32px; }
900
+ .kol-icon-frame-lg { width: 36px; height: 36px; }
901
+
902
+ .kol-icon-frame-primary {
903
+ background: var(--kol-surface-secondary);
904
+ color: var(--kol-surface-on-primary);
905
+ border: 1px solid transparent;
906
+ }
907
+ .kol-icon-frame-secondary {
908
+ background: var(--kol-surface-on-primary);
909
+ color: var(--kol-surface-primary);
910
+ border: 1px solid transparent;
911
+ }
912
+ .kol-icon-frame-accent {
913
+ background: var(--kol-accent-primary);
914
+ color: var(--kol-accent-on-primary);
915
+ border: 1px solid transparent;
916
+ }
917
+ .kol-icon-frame-outline {
918
+ background: transparent;
919
+ color: var(--kol-surface-on-primary);
920
+ border: 1px solid var(--kol-oq-16);
921
+ }
922
+ .kol-icon-frame-ghost {
923
+ background: transparent;
924
+ color: var(--kol-oq-48);
925
+ border: 1px solid transparent;
926
+ }
927
+ .kol-icon-frame-nav {
928
+ background: transparent;
929
+ color: var(--kol-oq-64);
930
+ border: 1px solid transparent;
931
+ }
932
+ .kol-icon-frame-grey {
933
+ background: var(--kol-oq-12);
934
+ color: var(--kol-surface-on-primary);
935
+ border: 1px solid transparent;
936
+ }
937
+ .kol-icon-frame-danger {
938
+ background: var(--ui-error);
939
+ color: var(--kol-color-absolute-white);
940
+ border: 1px solid transparent;
941
+ }
@@ -243,6 +243,91 @@
243
243
  .tag-md { font-size: 12px; font-weight: 470; padding: 5px 12px; }
244
244
  .tag-lg { font-size: 14px; font-weight: 470; padding: 6px 14px; }
245
245
 
246
+ /* ─────────────────────────────────────────────────────────────────────
247
+ * Tag color family — molecules/Tag.jsx `color` prop (wave-4 vault parity,
248
+ * 2026-07-30). Tag emits `tag tag--{color}` (chip) / `tag-naked
249
+ * tag--{color}` (text-only); the classes shipped in the JSX but the RULES
250
+ * never migrated out of the monorepo workshop — the same dangling trap as
251
+ * the palette tokens themselves (kol-color.css, 2026-07-16) — so every
252
+ * colored tag rendered dead. Re-authored from the monorepo colors spec
253
+ * (02-design-system/01-colors.md § Tag Color Classes): light mode =
254
+ * palette-*-light fill + dark ink; dark mode = saturated palette-* fill +
255
+ * light ink (yellow keeps dark ink); `dark` = the on-primary/surface flip.
256
+ * Inks are LITERALS (the surface poles): on a fixed palette fill a
257
+ * theme-flipping token is wrong by definition.
258
+ * ───────────────────────────────────────────────────────────────────── */
259
+
260
+ .tag {
261
+ display: inline-flex;
262
+ align-items: center;
263
+ gap: 6px;
264
+ border-radius: var(--kol-radius-full);
265
+ font-family: var(--kol-font-family-mono);
266
+ border: 1px solid transparent;
267
+ transition: background-color var(--kol-transition-base),
268
+ color var(--kol-transition-base);
269
+ }
270
+
271
+ /* naked — text-only: no fill, no chip padding (the reader-sidebar voice).
272
+ * Sits AFTER .tag-{size} so its padding reset wins at equal specificity. */
273
+ .tag-naked {
274
+ display: inline-flex;
275
+ align-items: center;
276
+ gap: 6px;
277
+ padding: 0;
278
+ background: transparent;
279
+ border: none;
280
+ font-family: var(--kol-font-family-mono);
281
+ }
282
+
283
+ /* Light mode (default): light fill + dark ink */
284
+ .tag--blue { background-color: var(--kol-palette-blue-light); color: #121215; }
285
+ .tag--teal { background-color: var(--kol-palette-teal-light); color: #121215; }
286
+ .tag--green { background-color: var(--kol-palette-green-light); color: #121215; }
287
+ .tag--yellow { background-color: var(--kol-palette-yellow-light); color: #121215; }
288
+ .tag--red { background-color: var(--kol-palette-red-light); color: #121215; }
289
+ .tag--orange { background-color: var(--kol-palette-orange-light); color: #121215; }
290
+ .tag--purple { background-color: var(--kol-palette-purple-light); color: #121215; }
291
+ .tag--dark { background-color: var(--kol-surface-on-primary); color: var(--kol-surface-primary); }
292
+
293
+ /* naked + color = saturated text, both modes (no fill to carry the pair) */
294
+ .tag-naked.tag--blue { background: transparent; color: var(--kol-palette-blue); }
295
+ .tag-naked.tag--teal { background: transparent; color: var(--kol-palette-teal); }
296
+ .tag-naked.tag--green { background: transparent; color: var(--kol-palette-green); }
297
+ .tag-naked.tag--yellow { background: transparent; color: var(--kol-palette-yellow); }
298
+ .tag-naked.tag--red { background: transparent; color: var(--kol-palette-red); }
299
+ .tag-naked.tag--orange { background: transparent; color: var(--kol-palette-orange); }
300
+ .tag-naked.tag--purple { background: transparent; color: var(--kol-palette-purple); }
301
+ .tag-naked.tag--dark { background: transparent; color: var(--kol-surface-on-primary); }
302
+
303
+ /* active (Tag.jsx emits .tag--active when active + colored) */
304
+ .tag--active { border-color: currentColor; }
305
+
306
+ /* Dark mode: saturated fill + light ink (yellow keeps dark ink). Scoped to
307
+ * .tag.tag--{color} so the chip flips while .tag-naked (equal specificity,
308
+ * earlier in the sheet) keeps its saturated TEXT — a bare .tag--{color}
309
+ * override here would out-order the naked rules and give text tags a fill.
310
+ * MIRROR of the system-follow block below — edit both. */
311
+ :is([data-theme="dark"], .dark) .tag.tag--blue { background-color: var(--kol-palette-blue); color: #fafafa; }
312
+ :is([data-theme="dark"], .dark) .tag.tag--teal { background-color: var(--kol-palette-teal); color: #fafafa; }
313
+ :is([data-theme="dark"], .dark) .tag.tag--green { background-color: var(--kol-palette-green); color: #fafafa; }
314
+ :is([data-theme="dark"], .dark) .tag.tag--yellow { background-color: var(--kol-palette-yellow); color: #121215; }
315
+ :is([data-theme="dark"], .dark) .tag.tag--red { background-color: var(--kol-palette-red); color: #fafafa; }
316
+ :is([data-theme="dark"], .dark) .tag.tag--orange { background-color: var(--kol-palette-orange); color: #fafafa; }
317
+ :is([data-theme="dark"], .dark) .tag.tag--purple { background-color: var(--kol-palette-purple); color: #fafafa; }
318
+
319
+ /* System-follow dark — only when no explicit theme is stamped (explicit >
320
+ * system > light, USER law). MIRROR of the block above — edit both. */
321
+ @media (prefers-color-scheme: dark) {
322
+ :root:not([data-theme]) .tag.tag--blue { background-color: var(--kol-palette-blue); color: #fafafa; }
323
+ :root:not([data-theme]) .tag.tag--teal { background-color: var(--kol-palette-teal); color: #fafafa; }
324
+ :root:not([data-theme]) .tag.tag--green { background-color: var(--kol-palette-green); color: #fafafa; }
325
+ :root:not([data-theme]) .tag.tag--yellow { background-color: var(--kol-palette-yellow); color: #121215; }
326
+ :root:not([data-theme]) .tag.tag--red { background-color: var(--kol-palette-red); color: #fafafa; }
327
+ :root:not([data-theme]) .tag.tag--orange { background-color: var(--kol-palette-orange); color: #fafafa; }
328
+ :root:not([data-theme]) .tag.tag--purple { background-color: var(--kol-palette-purple); color: #fafafa; }
329
+ }
330
+
246
331
  .control-unified-inverse {
247
332
  display: inline-flex;
248
333
  align-items: center;
@@ -264,11 +264,12 @@
264
264
  /* =============================================================================
265
265
  * DOCS CONTENT CLASSES
266
266
  * =============================================================================
267
- * Content-rendering styles for documentation pages. The rendered markdown body
268
- * is wrapped in `.kol-prose` (headings / p / code / lists / blockquote / links),
269
- * so the per-element `.docs-article *` type rules that used to live here are
270
- * gone. Only structural doc chrome (cards, frontmatter layout, callout rule,
271
- * media, tag graph) remains.
267
+ * Content-rendering styles for documentation pages. The reader types every
268
+ * element explicitly through the kol-doc-* roles (workshop 0.3.4 retype
269
+ * prose is the blog/CMS voice, never docs surfaces), so the per-element
270
+ * `.docs-article *` type rules that used to live here are gone. Only
271
+ * structural doc chrome (cards, frontmatter layout, callout rule, media,
272
+ * tag graph) remains.
272
273
  */
273
274
 
274
275
  /* Documentation Card (used in inventory listing) */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolkrabbi/kol-theme",
3
- "version": "0.13.2",
3
+ "version": "0.13.4",
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",