@motion-proto/live-tokens 0.73.0 → 0.74.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.
Files changed (73) hide show
  1. package/.claude/skills/live-tokens-build-page/SKILL.md +2 -2
  2. package/.claude/skills/live-tokens-check-compliance/SKILL.md +2 -2
  3. package/.claude/skills/live-tokens-create-component/SKILL.md +4 -4
  4. package/.claude/skills/live-tokens-create-theme/SKILL.md +80 -0
  5. package/.claude/skills/live-tokens-create-theme/references/design-directions.md +94 -0
  6. package/.claude/skills/live-tokens-set-colors/SKILL.md +140 -0
  7. package/.claude/skills/live-tokens-set-colors/references/color-anchors.md +80 -0
  8. package/.claude/skills/{live-tokens-adjust-geometry → live-tokens-set-geometry}/SKILL.md +12 -7
  9. package/.claude/skills/live-tokens-set-geometry/references/geometry-anchors.md +61 -0
  10. package/.claude/skills/{live-tokens-pair-fonts → live-tokens-set-type}/SKILL.md +18 -15
  11. package/.claude/skills/live-tokens-set-type/references/type-anchors.md +60 -0
  12. package/CHANGELOG.md +91 -0
  13. package/README.md +24 -15
  14. package/bin/check-page.mjs +3 -3
  15. package/bin/cli.mjs +92 -55
  16. package/bin/lib/liveState.mjs +110 -0
  17. package/bin/save-theme.mjs +177 -0
  18. package/bin/set-colors.mjs +191 -0
  19. package/bin/{adjust.mjs → set-geometry.mjs} +18 -50
  20. package/bin/{set-fonts.mjs → set-type.mjs} +21 -55
  21. package/dist-plugin/{chunk-RIXO2E55.js → chunk-7VRTBGJT.js} +1 -1
  22. package/dist-plugin/{chunk-YLCOIGQC.js → chunk-V3YF6CGT.js} +56 -2
  23. package/dist-plugin/index.cjs +58 -3
  24. package/dist-plugin/index.js +11 -11
  25. package/dist-plugin/migrateData/index.cjs +56 -1
  26. package/dist-plugin/migrateData/index.js +2 -2
  27. package/dist-plugin/{generateColorsAndType → setColors}/index.cjs +1109 -1071
  28. package/dist-plugin/{generateColorsAndType → setColors}/index.d.cts +33 -24
  29. package/dist-plugin/{generateColorsAndType → setColors}/index.d.ts +33 -24
  30. package/dist-plugin/{generateColorsAndType → setColors}/index.js +45 -63
  31. package/dist-plugin/{adjust → setGeometry}/index.cjs +60 -5
  32. package/dist-plugin/{adjust → setGeometry}/index.d.cts +1 -1
  33. package/dist-plugin/{adjust → setGeometry}/index.d.ts +1 -1
  34. package/dist-plugin/{adjust → setGeometry}/index.js +1 -1
  35. package/dist-plugin/{fontPairing → setType}/index.cjs +4 -4
  36. package/dist-plugin/{fontPairing → setType}/index.d.cts +1 -1
  37. package/dist-plugin/{fontPairing → setType}/index.d.ts +1 -1
  38. package/dist-plugin/{themeTypes-DSV3Zisf.d.cts → themeTypes-BxRtuN5V.d.cts} +1 -1
  39. package/dist-plugin/{themeTypes-DSV3Zisf.d.ts → themeTypes-BxRtuN5V.d.ts} +1 -1
  40. package/package.json +2 -1
  41. package/src/editor/core/themes/{generateColorsAndType.ts → buildColors.ts} +82 -96
  42. package/src/editor/core/themes/migrations/2026-09-03-drop-legacy-component-keys.ts +62 -0
  43. package/src/editor/core/themes/migrations/index.ts +2 -0
  44. package/src/editor/docs/content/themes-workflow.md +2 -2
  45. package/src/editor/docs/content.generated.ts +1 -1
  46. package/src/editor/overlay/LiveEditorOverlay.svelte +519 -28
  47. package/src/editor/skill-atlas/SkillAtlas.svelte +2 -2
  48. package/src/editor/skill-atlas/skillSources.generated.ts +19 -15
  49. package/src/editor/skill-atlas/skillTrees.ts +785 -632
  50. package/src/live-tokens/data/colors-and-type/autumn.json +1 -37
  51. package/src/live-tokens/data/colors-and-type/default.json +1 -37
  52. package/src/live-tokens/data/colors-and-type/halloween.json +1 -37
  53. package/src/live-tokens/data/colors-and-type/midnight-study.json +1 -37
  54. package/src/live-tokens/data/colors-and-type/ocean.json +1 -37
  55. package/src/live-tokens/data/colors-and-type/royal-velvet.json +1 -37
  56. package/src/live-tokens/data/colors-and-type/sketchy.json +1 -37
  57. package/src/live-tokens/data/colors-and-type/spring-meadow.json +1 -37
  58. package/src/live-tokens/data/colors-and-type/sunset.json +1 -37
  59. package/src/live-tokens/data/themes/autumn.json +1 -37
  60. package/src/live-tokens/data/themes/halloween.json +1 -37
  61. package/src/live-tokens/data/themes/midnight-study.json +1 -37
  62. package/src/live-tokens/data/themes/ocean.json +1 -37
  63. package/src/live-tokens/data/themes/royal-velvet.json +1 -37
  64. package/src/live-tokens/data/themes/sketchy.json +1 -37
  65. package/src/live-tokens/data/themes/spring-meadow.json +1 -37
  66. package/src/live-tokens/data/themes/sunset.json +1 -37
  67. package/src/live-tokens/data/tokens.generated.css +0 -36
  68. package/.claude/skills/live-tokens-generate-theme/SKILL.md +0 -156
  69. package/.claude/skills/live-tokens-generate-theme/references/mood-vocabulary.md +0 -43
  70. package/.claude/skills/live-tokens-generate-theme/references/named-themes.md +0 -18
  71. package/.claude/skills/live-tokens-generate-theme/references/style-vocabulary.md +0 -35
  72. package/bin/generate-theme.mjs +0 -260
  73. /package/dist-plugin/{fontPairing → setType}/index.js +0 -0
@@ -2224,42 +2224,6 @@
2224
2224
  "--gradient-2": "linear-gradient(135deg, var(--color-special-400) 0%, var(--color-special-700) 100%)",
2225
2225
  "--gradient-3": "linear-gradient(90deg, var(--color-brand-500) 0%, var(--color-accent-500) 100%)",
2226
2226
  "--gradient-4": "linear-gradient(180deg, var(--color-canvas-200) 0%, var(--color-canvas-500) 100%)",
2227
- "--badge-trait-surface": "var(--surface-brand)",
2228
- "--badge-trait-text": "var(--text-brand)",
2229
- "--badge-trait-text-font-family": "var(--font-sans)",
2230
- "--badge-trait-text-font-size": "var(--font-size-sm)",
2231
- "--badge-trait-text-font-weight": "var(--font-weight-light)",
2232
- "--badge-trait-text-line-height": "var(--line-height-none)",
2233
- "--badge-trait-border": "var(--border-brand-medium)",
2234
- "--badge-trait-border-width": "var(--border-width-1)",
2235
- "--badge-trait-shadow": "transparent",
2236
- "--sectiondivider-title": "var(--text-primary)",
2237
- "--sectiondivider-title-font-family": "var(--font-display)",
2238
- "--sectiondivider-title-font-size": "var(--font-size-5xl)",
2239
- "--sectiondivider-title-font-weight": "var(--font-weight-normal)",
2240
- "--sectiondivider-title-line-height": "var(--line-height-none)",
2241
- "--sectiondivider-title-border-width": "var(--border-width-4)",
2242
- "--sectiondivider-title-stroke-color": "var(--surface-canvas-lowest)",
2243
- "--sectiondivider-description": "var(--text-secondary)",
2244
- "--sectiondivider-description-font-family": "var(--font-sans)",
2245
- "--sectiondivider-description-font-size": "var(--font-size-md)",
2246
- "--sectiondivider-description-font-weight": "var(--font-weight-normal)",
2247
- "--sectiondivider-description-line-height": "var(--line-height-normal)",
2248
- "--dialog-primary-default-surface": "var(--surface-neutral-high)",
2249
- "--dialog-primary-default-text": "var(--text-primary)",
2250
- "--dialog-primary-default-border": "var(--border-neutral-medium)",
2251
- "--dialog-primary-default-border-width": "var(--border-width-1)",
2252
- "--dialog-primary-hover-surface": "var(--surface-neutral-higher)",
2253
- "--dialog-primary-hover-text": "var(--text-primary)",
2254
- "--dialog-primary-hover-border": "var(--border-neutral-strong)",
2255
- "--dialog-primary-hover-border-width": "var(--border-width-1)",
2256
- "--dialog-secondary-default-text": "var(--text-primary)",
2257
- "--dialog-secondary-default-border": "var(--border-neutral-medium)",
2258
- "--dialog-secondary-default-border-width": "var(--border-width-1)",
2259
- "--dialog-secondary-hover-surface": "var(--surface-neutral-lower)",
2260
- "--dialog-secondary-hover-text": "var(--text-primary)",
2261
- "--dialog-secondary-hover-border": "var(--border-neutral-strong)",
2262
- "--dialog-secondary-hover-border-width": "var(--border-width-1)",
2263
2227
  "--columns-count": "12",
2264
2228
  "--columns-max-width": "1440px",
2265
2229
  "--columns-gutter": "32px",
@@ -2445,7 +2409,7 @@
2445
2409
  "family": null
2446
2410
  }
2447
2411
  ],
2448
- "schemaVersion": 3,
2412
+ "schemaVersion": 8,
2449
2413
  "gradients": [
2450
2414
  {
2451
2415
  "variable": "--gradient-1",
@@ -2256,42 +2256,6 @@
2256
2256
  "--gradient-2": "linear-gradient(135deg, var(--color-special-500) 0%, var(--color-brand-500) 100%)",
2257
2257
  "--gradient-3": "linear-gradient(90deg, var(--color-accent-400) 0%, var(--color-accent-700) 100%)",
2258
2258
  "--gradient-4": "linear-gradient(180deg, var(--color-canvas-600) 0%, var(--color-canvas-900) 100%)",
2259
- "--badge-trait-surface": "var(--surface-brand)",
2260
- "--badge-trait-text": "var(--text-brand)",
2261
- "--badge-trait-text-font-family": "var(--font-sans)",
2262
- "--badge-trait-text-font-size": "var(--font-size-sm)",
2263
- "--badge-trait-text-font-weight": "var(--font-weight-light)",
2264
- "--badge-trait-text-line-height": "var(--line-height-none)",
2265
- "--badge-trait-border": "var(--border-brand-medium)",
2266
- "--badge-trait-border-width": "var(--border-width-1)",
2267
- "--badge-trait-shadow": "transparent",
2268
- "--sectiondivider-title": "var(--text-primary)",
2269
- "--sectiondivider-title-font-family": "var(--font-display)",
2270
- "--sectiondivider-title-font-size": "var(--font-size-5xl)",
2271
- "--sectiondivider-title-font-weight": "var(--font-weight-normal)",
2272
- "--sectiondivider-title-line-height": "var(--line-height-none)",
2273
- "--sectiondivider-title-border-width": "var(--border-width-4)",
2274
- "--sectiondivider-title-stroke-color": "var(--surface-canvas-lowest)",
2275
- "--sectiondivider-description": "var(--text-secondary)",
2276
- "--sectiondivider-description-font-family": "var(--font-sans)",
2277
- "--sectiondivider-description-font-size": "var(--font-size-md)",
2278
- "--sectiondivider-description-font-weight": "var(--font-weight-normal)",
2279
- "--sectiondivider-description-line-height": "var(--line-height-normal)",
2280
- "--dialog-primary-default-surface": "var(--surface-neutral-high)",
2281
- "--dialog-primary-default-text": "var(--text-primary)",
2282
- "--dialog-primary-default-border": "var(--border-neutral-medium)",
2283
- "--dialog-primary-default-border-width": "var(--border-width-1)",
2284
- "--dialog-primary-hover-surface": "var(--surface-neutral-higher)",
2285
- "--dialog-primary-hover-text": "var(--text-primary)",
2286
- "--dialog-primary-hover-border": "var(--border-neutral-strong)",
2287
- "--dialog-primary-hover-border-width": "var(--border-width-1)",
2288
- "--dialog-secondary-default-text": "var(--text-primary)",
2289
- "--dialog-secondary-default-border": "var(--border-neutral-medium)",
2290
- "--dialog-secondary-default-border-width": "var(--border-width-1)",
2291
- "--dialog-secondary-hover-surface": "var(--surface-neutral-lower)",
2292
- "--dialog-secondary-hover-text": "var(--text-primary)",
2293
- "--dialog-secondary-hover-border": "var(--border-neutral-strong)",
2294
- "--dialog-secondary-hover-border-width": "var(--border-width-1)",
2295
2259
  "--columns-count": "12",
2296
2260
  "--columns-max-width": "1440px",
2297
2261
  "--columns-gutter": "32px",
@@ -2476,7 +2440,7 @@
2476
2440
  "family": null
2477
2441
  }
2478
2442
  ],
2479
- "schemaVersion": 3,
2443
+ "schemaVersion": 8,
2480
2444
  "gradients": [
2481
2445
  {
2482
2446
  "variable": "--gradient-1",
@@ -2210,42 +2210,6 @@
2210
2210
  "--gradient-2": "linear-gradient(135deg, var(--color-special-500) 0%, var(--color-brand-500) 100%)",
2211
2211
  "--gradient-3": "linear-gradient(90deg, var(--color-brand-500) 0%, var(--color-accent-500) 100%)",
2212
2212
  "--gradient-4": "linear-gradient(180deg, var(--color-canvas-200) 0%, var(--color-canvas-500) 100%)",
2213
- "--badge-trait-surface": "var(--surface-brand)",
2214
- "--badge-trait-text": "var(--text-brand)",
2215
- "--badge-trait-text-font-family": "var(--font-sans)",
2216
- "--badge-trait-text-font-size": "var(--font-size-sm)",
2217
- "--badge-trait-text-font-weight": "var(--font-weight-light)",
2218
- "--badge-trait-text-line-height": "var(--line-height-none)",
2219
- "--badge-trait-border": "var(--border-brand-medium)",
2220
- "--badge-trait-border-width": "var(--border-width-1)",
2221
- "--badge-trait-shadow": "transparent",
2222
- "--sectiondivider-title": "var(--text-primary)",
2223
- "--sectiondivider-title-font-family": "var(--font-display)",
2224
- "--sectiondivider-title-font-size": "var(--font-size-5xl)",
2225
- "--sectiondivider-title-font-weight": "var(--font-weight-normal)",
2226
- "--sectiondivider-title-line-height": "var(--line-height-none)",
2227
- "--sectiondivider-title-border-width": "var(--border-width-4)",
2228
- "--sectiondivider-title-stroke-color": "var(--surface-canvas-lowest)",
2229
- "--sectiondivider-description": "var(--text-secondary)",
2230
- "--sectiondivider-description-font-family": "var(--font-sans)",
2231
- "--sectiondivider-description-font-size": "var(--font-size-md)",
2232
- "--sectiondivider-description-font-weight": "var(--font-weight-normal)",
2233
- "--sectiondivider-description-line-height": "var(--line-height-normal)",
2234
- "--dialog-primary-default-surface": "var(--surface-neutral-high)",
2235
- "--dialog-primary-default-text": "var(--text-primary)",
2236
- "--dialog-primary-default-border": "var(--border-neutral-medium)",
2237
- "--dialog-primary-default-border-width": "var(--border-width-1)",
2238
- "--dialog-primary-hover-surface": "var(--surface-neutral-higher)",
2239
- "--dialog-primary-hover-text": "var(--text-primary)",
2240
- "--dialog-primary-hover-border": "var(--border-neutral-strong)",
2241
- "--dialog-primary-hover-border-width": "var(--border-width-1)",
2242
- "--dialog-secondary-default-text": "var(--text-primary)",
2243
- "--dialog-secondary-default-border": "var(--border-neutral-medium)",
2244
- "--dialog-secondary-default-border-width": "var(--border-width-1)",
2245
- "--dialog-secondary-hover-surface": "var(--surface-neutral-lower)",
2246
- "--dialog-secondary-hover-text": "var(--text-primary)",
2247
- "--dialog-secondary-hover-border": "var(--border-neutral-strong)",
2248
- "--dialog-secondary-hover-border-width": "var(--border-width-1)",
2249
2213
  "--columns-count": "12",
2250
2214
  "--columns-max-width": "1440px",
2251
2215
  "--columns-gutter": "32px",
@@ -2521,7 +2485,7 @@
2521
2485
  "family": null
2522
2486
  }
2523
2487
  ],
2524
- "schemaVersion": 5
2488
+ "schemaVersion": 8
2525
2489
  },
2526
2490
  "componentConfigs": {
2527
2491
  "badge": {
@@ -2210,42 +2210,6 @@
2210
2210
  "--gradient-2": "linear-gradient(135deg, var(--color-special-400) 0%, var(--color-special-700) 100%)",
2211
2211
  "--gradient-3": "linear-gradient(90deg, var(--color-brand-500) 0%, var(--color-accent-500) 100%)",
2212
2212
  "--gradient-4": "linear-gradient(180deg, var(--color-canvas-200) 0%, var(--color-canvas-500) 100%)",
2213
- "--badge-trait-surface": "var(--surface-brand)",
2214
- "--badge-trait-text": "var(--text-brand)",
2215
- "--badge-trait-text-font-family": "var(--font-sans)",
2216
- "--badge-trait-text-font-size": "var(--font-size-sm)",
2217
- "--badge-trait-text-font-weight": "var(--font-weight-light)",
2218
- "--badge-trait-text-line-height": "var(--line-height-none)",
2219
- "--badge-trait-border": "var(--border-brand-medium)",
2220
- "--badge-trait-border-width": "var(--border-width-1)",
2221
- "--badge-trait-shadow": "transparent",
2222
- "--sectiondivider-title": "var(--text-primary)",
2223
- "--sectiondivider-title-font-family": "var(--font-display)",
2224
- "--sectiondivider-title-font-size": "var(--font-size-5xl)",
2225
- "--sectiondivider-title-font-weight": "var(--font-weight-normal)",
2226
- "--sectiondivider-title-line-height": "var(--line-height-none)",
2227
- "--sectiondivider-title-border-width": "var(--border-width-4)",
2228
- "--sectiondivider-title-stroke-color": "var(--surface-canvas-lowest)",
2229
- "--sectiondivider-description": "var(--text-secondary)",
2230
- "--sectiondivider-description-font-family": "var(--font-sans)",
2231
- "--sectiondivider-description-font-size": "var(--font-size-md)",
2232
- "--sectiondivider-description-font-weight": "var(--font-weight-normal)",
2233
- "--sectiondivider-description-line-height": "var(--line-height-normal)",
2234
- "--dialog-primary-default-surface": "var(--surface-neutral-high)",
2235
- "--dialog-primary-default-text": "var(--text-primary)",
2236
- "--dialog-primary-default-border": "var(--border-neutral-medium)",
2237
- "--dialog-primary-default-border-width": "var(--border-width-1)",
2238
- "--dialog-primary-hover-surface": "var(--surface-neutral-higher)",
2239
- "--dialog-primary-hover-text": "var(--text-primary)",
2240
- "--dialog-primary-hover-border": "var(--border-neutral-strong)",
2241
- "--dialog-primary-hover-border-width": "var(--border-width-1)",
2242
- "--dialog-secondary-default-text": "var(--text-primary)",
2243
- "--dialog-secondary-default-border": "var(--border-neutral-medium)",
2244
- "--dialog-secondary-default-border-width": "var(--border-width-1)",
2245
- "--dialog-secondary-hover-surface": "var(--surface-neutral-lower)",
2246
- "--dialog-secondary-hover-text": "var(--text-primary)",
2247
- "--dialog-secondary-hover-border": "var(--border-neutral-strong)",
2248
- "--dialog-secondary-hover-border-width": "var(--border-width-1)",
2249
2213
  "--columns-count": "12",
2250
2214
  "--columns-max-width": "1440px",
2251
2215
  "--columns-gutter": "32px",
@@ -2432,7 +2396,7 @@
2432
2396
  "family": null
2433
2397
  }
2434
2398
  ],
2435
- "schemaVersion": 3,
2399
+ "schemaVersion": 8,
2436
2400
  "gradients": [
2437
2401
  {
2438
2402
  "variable": "--gradient-1",
@@ -2271,42 +2271,6 @@
2271
2271
  "--gradient-2": "linear-gradient(135deg, var(--color-special-500) 0%, var(--color-brand-500) 100%)",
2272
2272
  "--gradient-3": "linear-gradient(90deg, var(--color-brand-500) 0%, var(--color-accent-500) 100%)",
2273
2273
  "--gradient-4": "linear-gradient(180deg, var(--color-canvas-600) 0%, var(--color-canvas-900) 100%)",
2274
- "--badge-trait-surface": "var(--surface-brand)",
2275
- "--badge-trait-text": "var(--text-brand)",
2276
- "--badge-trait-text-font-family": "var(--font-sans)",
2277
- "--badge-trait-text-font-size": "var(--font-size-sm)",
2278
- "--badge-trait-text-font-weight": "var(--font-weight-light)",
2279
- "--badge-trait-text-line-height": "var(--line-height-none)",
2280
- "--badge-trait-border": "var(--border-brand-medium)",
2281
- "--badge-trait-border-width": "var(--border-width-1)",
2282
- "--badge-trait-shadow": "transparent",
2283
- "--sectiondivider-title": "var(--text-primary)",
2284
- "--sectiondivider-title-font-family": "var(--font-display)",
2285
- "--sectiondivider-title-font-size": "var(--font-size-5xl)",
2286
- "--sectiondivider-title-font-weight": "var(--font-weight-normal)",
2287
- "--sectiondivider-title-line-height": "var(--line-height-none)",
2288
- "--sectiondivider-title-border-width": "var(--border-width-4)",
2289
- "--sectiondivider-title-stroke-color": "var(--surface-canvas-lowest)",
2290
- "--sectiondivider-description": "var(--text-secondary)",
2291
- "--sectiondivider-description-font-family": "var(--font-sans)",
2292
- "--sectiondivider-description-font-size": "var(--font-size-md)",
2293
- "--sectiondivider-description-font-weight": "var(--font-weight-normal)",
2294
- "--sectiondivider-description-line-height": "var(--line-height-normal)",
2295
- "--dialog-primary-default-surface": "var(--surface-neutral-high)",
2296
- "--dialog-primary-default-text": "var(--text-primary)",
2297
- "--dialog-primary-default-border": "var(--border-neutral-medium)",
2298
- "--dialog-primary-default-border-width": "var(--border-width-1)",
2299
- "--dialog-primary-hover-surface": "var(--surface-neutral-higher)",
2300
- "--dialog-primary-hover-text": "var(--text-primary)",
2301
- "--dialog-primary-hover-border": "var(--border-neutral-strong)",
2302
- "--dialog-primary-hover-border-width": "var(--border-width-1)",
2303
- "--dialog-secondary-default-text": "var(--text-primary)",
2304
- "--dialog-secondary-default-border": "var(--border-neutral-medium)",
2305
- "--dialog-secondary-default-border-width": "var(--border-width-1)",
2306
- "--dialog-secondary-hover-surface": "var(--surface-neutral-lower)",
2307
- "--dialog-secondary-hover-text": "var(--text-primary)",
2308
- "--dialog-secondary-hover-border": "var(--border-neutral-strong)",
2309
- "--dialog-secondary-hover-border-width": "var(--border-width-1)",
2310
2274
  "--columns-count": "12",
2311
2275
  "--columns-max-width": "1440px",
2312
2276
  "--columns-gutter": "32px",
@@ -2484,7 +2448,7 @@
2484
2448
  "family": null
2485
2449
  }
2486
2450
  ],
2487
- "schemaVersion": 3,
2451
+ "schemaVersion": 8,
2488
2452
  "gradients": [
2489
2453
  {
2490
2454
  "variable": "--gradient-1",
@@ -7,42 +7,6 @@
7
7
  --gradient-2: linear-gradient(135deg, var(--color-brand-500) 0%, var(--color-special-500) 100%);
8
8
  --gradient-3: linear-gradient(90deg, var(--color-success-500) 0%, var(--color-info-500) 100%);
9
9
  --gradient-4: linear-gradient(45deg, var(--color-danger-500) 0%, var(--color-warning-500) 100%);
10
- --badge-trait-surface: var(--surface-brand);
11
- --badge-trait-text: var(--text-brand);
12
- --badge-trait-text-font-family: var(--font-sans);
13
- --badge-trait-text-font-size: var(--font-size-sm);
14
- --badge-trait-text-font-weight: var(--font-weight-light);
15
- --badge-trait-text-line-height: var(--line-height-none);
16
- --badge-trait-border: var(--border-brand-medium);
17
- --badge-trait-border-width: var(--border-width-1);
18
- --badge-trait-shadow: transparent;
19
- --sectiondivider-title: var(--text-primary);
20
- --sectiondivider-title-font-family: var(--font-display);
21
- --sectiondivider-title-font-size: var(--font-size-5xl);
22
- --sectiondivider-title-font-weight: var(--font-weight-normal);
23
- --sectiondivider-title-line-height: var(--line-height-none);
24
- --sectiondivider-title-border-width: var(--border-width-4);
25
- --sectiondivider-title-stroke-color: var(--surface-canvas-lowest);
26
- --sectiondivider-description: var(--text-secondary);
27
- --sectiondivider-description-font-family: var(--font-sans);
28
- --sectiondivider-description-font-size: var(--font-size-md);
29
- --sectiondivider-description-font-weight: var(--font-weight-normal);
30
- --sectiondivider-description-line-height: var(--line-height-normal);
31
- --dialog-primary-default-surface: var(--surface-neutral-high);
32
- --dialog-primary-default-text: var(--text-primary);
33
- --dialog-primary-default-border: var(--border-neutral-medium);
34
- --dialog-primary-default-border-width: var(--border-width-1);
35
- --dialog-primary-hover-surface: var(--surface-neutral-higher);
36
- --dialog-primary-hover-text: var(--text-primary);
37
- --dialog-primary-hover-border: var(--border-neutral-strong);
38
- --dialog-primary-hover-border-width: var(--border-width-1);
39
- --dialog-secondary-default-text: var(--text-primary);
40
- --dialog-secondary-default-border: var(--border-neutral-medium);
41
- --dialog-secondary-default-border-width: var(--border-width-1);
42
- --dialog-secondary-hover-surface: var(--surface-neutral-lower);
43
- --dialog-secondary-hover-text: var(--text-primary);
44
- --dialog-secondary-hover-border: var(--border-neutral-strong);
45
- --dialog-secondary-hover-border-width: var(--border-width-1);
46
10
  --columns-count: 12;
47
11
  --columns-max-width: 1440px;
48
12
  --columns-gutter: 32px;
@@ -1,156 +0,0 @@
1
- ---
2
- name: live-tokens-generate-theme
3
- description: Generate a complete live-tokens theme (color, type, and geometry) from a natural-language brief, delegating the type and geometry halves to its sibling skills. Use whenever the user asks for a theme, look, vibe, brand feel, color scheme, or palette by mood, style, era, season, holiday, or hue; when they name only a color (something red-based, green and gold for St. Patrick's Day); or when they refine an existing theme (warmer, more contrast, calmer). Examples: bright and cheerful, dark and moody, brutalist, mid-century modern, Swiss and minimal, cyberpunk neon, editorial magazine, make it feel like a terminal. Not for a single token (use the editor), type alone (live-tokens-pair-fonts), or geometry alone (live-tokens-adjust-geometry).
4
- ---
5
-
6
- # Generating a theme from a brief
7
-
8
- A theme is three decisions made from one brief: color, type, and geometry. This skill owns the color decision directly and delegates the other two, so the whole look comes from the same reading of the brief. Never hand-author theme JSON and never edit the data tree directly.
9
-
10
- ## Workflow
11
-
12
- 1. Read the brief once and name its voice in a sentence: the mood, the hue family, the scheme, and the type and geometry that mood implies. Everything below keys off that sentence.
13
- 2. Read the anchor reference that matches the voice (feeling, idiom, or occasion; see Anchor references) before seeding. Each entry fixes all three decisions together and overrides the generic defaults here.
14
- 3. Translate the brief into a seed file using the framework below. Write it to `scratch/<slug>-brief.json`. Nothing else records the seeds, so this file is the only copy; one per slug is what makes the refinement pass below cheap.
15
- 4. Run `npx live-tokens generate-theme scratch/<slug>-brief.json`. It writes `themes/<slug>.json`, opens that theme, and prints a contrast report. Auto-corrections are fine. Unmet floors (exit 1) mean the seeds themselves are unworkable; each failure line names the seed to change, usually by raising its lightness or cutting its chroma. Fix the brief and re-run; the same name overwrites. Regeneration replaces that theme's whole color state, including palette edits made in the editor since the last run, so say so once when iterating.
16
- 5. Invoke **live-tokens-pair-fonts** with the same voice. Skip only when the user asked for colors specifically and said to leave the type alone.
17
- 6. Invoke **live-tokens-adjust-geometry** with the geometry the voice implies (table below). Skip when the voice implies nothing about geometry.
18
- 7. Tell the user to look at the running app, and that type and geometry sit in the unsaved buffer until they save the open theme. Offer refinements as edits to the same brief (see Refining a theme that exists).
19
-
20
- Order matters only for safety, and the order above is safe: the color generator carries the live buffers forward into the new theme file, so a color re-roll after fonts and geometry keeps both.
21
-
22
- Flags: `--dry-run` prints the report without writing; `--no-activate` writes without opening; `--carry-from <theme>` takes the non-color content (gradients, fonts, component aliases) from a named theme rather than from the live look. Generating a set needs it: the first run becomes the live look, so a second run without it carries the first theme's fonts and geometry into the second. Opening a theme never changes what the site ships. Only Adopt, in the editor, does that.
23
-
24
- ## The brief
25
-
26
- ```json
27
- {
28
- "name": "Spring Meadow",
29
- "scheme": "light",
30
- "seeds": {
31
- "Brand": { "l": 0.62, "c": 0.17, "h": 145 },
32
- "Accent": { "l": 0.80, "c": 0.15, "h": 95 },
33
- "Special": { "l": 0.60, "c": 0.19, "h": 300 },
34
- "Canvas": { "l": 0.93, "c": 0.04, "h": 120 },
35
- "Neutral": { "l": 0.55, "c": 0.012, "h": 140 },
36
- "Alternate": { "l": 0.58, "c": 0.009, "h": 60 },
37
- "Info": { "l": 0.60, "c": 0.15, "h": 255 },
38
- "Success": { "l": 0.60, "c": 0.16, "h": 150 },
39
- "Warning": { "l": 0.75, "c": 0.15, "h": 85 },
40
- "Danger": { "l": 0.58, "c": 0.20, "h": 25 }
41
- }
42
- }
43
- ```
44
-
45
- All 10 seeds are required; a seed may also be a `"#rrggbb"` string. OKLCH: `l` is 0 to 1 lightness, `c` is chroma (0 grey, about 0.37 max), `h` is hue in degrees. `name` becomes the file slug; `"default"` is refused. `canvasGradient` is an optional boolean, see below.
46
-
47
- Roles: **Brand** is the dominant chromatic identity; **Accent** the supporting color; **Special** the rare expressive tertiary; **Canvas** is the page background verbatim; **Neutral** drives neutral surfaces and body text; **Alternate** is the second near-grey family; the four statuses are conventional signals.
48
-
49
- ## Chroma budget: color is inversely proportional to area
50
-
51
- | Tier | Palettes | Chroma |
52
- |---|---|---|
53
- | Ground (about 60% of every screen) | Canvas, Neutral, Alternate | C 0.005 to 0.03 |
54
- | Dominant chromatic (about 30%) | Brand | C 0.10 to 0.20 |
55
- | Garnish (about 10%) | Accent, Special | may exceed Brand; at most one at full saturation |
56
- | Conditional | Info, Success, Warning, Danger | C 0.12 to 0.19 |
57
-
58
- A good theme reads as 3 or 4 hue families on screen, never 10. Neutral and Alternate stay near-grey but tinted toward the theme (Neutral near Brand's hue; Alternate offset 15 to 60 degrees, or a warm/cool counterpoint), never pure C = 0.
59
-
60
- ## Per-role bands
61
-
62
- | Seed | Light scheme | Dark scheme | Hue |
63
- |---|---|---|---|
64
- | Canvas | L 0.92 to 0.98, C 0.02 to 0.06 | L 0.15 to 0.28, C 0.01 to 0.05 | Brand's hue or its harmony slot |
65
- | Neutral, Alternate | L about 0.55, C 0.008 to 0.02 | same | per the chroma budget |
66
- | Brand | L 0.45 to 0.62, C 0.12 to 0.20 | L 0.70 to 0.83, C cut by a third | the brief's identity hue |
67
- | Accent | harmony slot, or at least 0.25 L from Brand when the mode collapses hue distance | lighten and desaturate like Brand | harmony slot |
68
- | Special | most expressive; default Brand hue +60 at about 65% of Brand's C | same transform | harmony slot |
69
- | Info | shared status L (0.55 to 0.65 light) | lighten like Brand | H 230 to 260 |
70
- | Success | shared status L | same | H 140 to 155 |
71
- | Warning | L 0.75 or higher (vivid yellow must be light) | same | H 70 to 90 |
72
- | Danger | shared status L, C 0.15 to 0.20 | same | H 20 to 30 |
73
-
74
- **The canvas carries the theme's identity, so commit to it.** The page background is the largest area on screen and the strongest difference between themes; a timid canvas makes every theme look the same. Below C 0.015 at L 0.95 a tint is imperceptible, which makes near-white a deliberate choice for clean or minimal briefs and never the default. Three levels of commitment:
75
-
76
- 1. *Tinted paper* (most UI briefs): C 0.02 to 0.06, with L down to 0.92 where the hue needs room.
77
- 2. *Colored ground* (expressive briefs): L 0.85 to 0.92 at C 0.05 to 0.10. The page is unmistakably mint, parchment, sky.
78
- 3. *Full-color ground* (holiday and statement briefs): the canvas is the theme color, like a red Christmas page with green and gold on it. Keep canvas L at or below 0.48 or at or above 0.85 so text has somewhere to go; the contrast gate enforces legibility either way.
79
-
80
- Also:
81
-
82
- - Blue tints cap very low at high L (H 264 at L 0.95 barely reaches C 0.03): lower L for a blue canvas rather than fighting the ceiling. Yellow, green, and cream tint generously at high L.
83
- - When generating a set of themes, make the canvases pairwise distinct in hue or in L. Two light themes both near (0.97, 0.01) read as one theme with different buttons.
84
- - A dark scheme is a transform, not just a dark canvas: every chromatic seed lightens to L 0.75 to 0.85 and drops about a third of its chroma, because saturated color vibrates on dark grounds.
85
- - Equal lightness reads as equal weight: give the four statuses one shared L, and do the same for Brand and Accent when they should balance.
86
- - Status hues never rotate with the harmony; only their L and C adapt to the mood.
87
-
88
- ## Mood dials
89
-
90
- Pleasantness rises with lightness (strongly) and saturation (weakly); energy rises with saturation; drama rises with dark plus saturated. Dominance, the third axis, is carried by surface contrast, type weight, and tightness rather than by color at all.
91
-
92
- That is the whole mechanism, and one dial moves without a reference: warm is hues 20 to 110 plus pink 290 to 360, cool is 140 to 290. For a brief that names a feeling, read `references/mood-vocabulary.md` instead of guessing the dial settings; each entry places the emotion on the three axes and gives the color, type, and geometry together.
93
-
94
- Avoid mid-lightness yellow-green (H 100 to 120 at L 0.5 to 0.7, C about 0.1) unless the brief asks for olive or toxic.
95
-
96
- ## Gamut guardrails
97
-
98
- The engine clamps to gamut regardless; these keep your intent achievable rather than silently muted.
99
-
100
- - Dark saturated yellow does not exist: H 90 at L 0.4 caps at C 0.08 and reads olive. Vivid yellow needs L 0.8 or more. Brown is dark low-chroma orange.
101
- - Vivid light blue does not exist: H 264 at L 0.9 caps at C 0.05. Rich blue lives at L 0.40 to 0.55.
102
- - Teal and sky cap at C 0.15.
103
- - Peak chroma anchors: red H20 C 0.25 at L 0.63; orange H60 C 0.18 at L 0.76; yellow H90 C 0.18 at L 0.86; green H140 C 0.28 at L 0.88; blue H264 C 0.28 at L 0.50; magenta H320 C 0.31 at L 0.65.
104
-
105
- ## Harmony
106
-
107
- Hue offsets from Brand: complementary +180; split-complementary +150/+210; triadic +120/+240; tetradic +60/+180/+240; square +90 steps; compound +30/+180/+210; analogous plus or minus 30; monochromatic same hue.
108
-
109
- - A vague or single-adjective brief takes monochromatic or analogous, with Accent separated from Brand by L and C rather than hue. The polished-UI default: Accent at Brand's hue and about 45% of its chroma, Special at +60 and about 65%.
110
- - A brief naming two colors: measure their hue gap and pick the matching mode (green plus gold is 60 to 90 degrees, so analogous or compound).
111
- - Drama or maximum contrast: complementary, triadic, or tetradic, and then tone one side down, since max-chroma text on a near-black ground vibrates.
112
-
113
- ## Canvas sky and shadows
114
-
115
- `"canvasGradient": true` renders the page background as a vertical gradient from the Canvas ramp. Default off. Turn it on only when the brief evokes atmosphere (sky, night, dusk, glow, underwater) or asks for a gradient outright; keep it off for crisp, flat, minimal, or corporate briefs and whenever in doubt, because a sky on every theme stops meaning anything. It needs a committed canvas (level 2 or 3); at the ramp edge the engine skips it and says so. Say why you enabled it in one line.
116
-
117
- Shadow opacity derives from Canvas lightness and re-derives on every run, so there is nothing to choose. When shadows read heavy or muddy, raise the Canvas seed's L.
118
-
119
- ## Anchor references
120
-
121
- Read the matching reference before seeding, and apply the bands above on top of it.
122
-
123
- - `references/mood-vocabulary.md` covers feelings: joyful, playful, optimistic, confident, serene, tender, cozy, earthy, clinical, wistful, contemplative, urgent, tense, defiant, melancholy, somber, ominous, austere. It opens with the valence, energy, and dominance axes, so a feeling it does not list still places on them.
124
- - `references/style-vocabulary.md` covers named idioms, eras, and genres: Swiss, Bauhaus, mid-century, art deco, terminal, cyberpunk, vaporwave, Y2K, blueprint, Scandinavian, Japandi, cottagecore, editorial, newsprint, riso, corporate, brutalist, Memphis, industrial. Each entry fixes color, type, and geometry as one set, so hand its Type and Geometry columns to the sibling skills verbatim.
125
- - `references/named-themes.md` covers holidays, seasons, and natural scenes: Christmas, Halloween, St. Patrick's, Ocean, Sunset, Autumn, Spring. A holiday or season brief is a statement brief: commitment level 2 or 3, with the named color on the ground rather than only on the buttons.
126
-
127
- Most briefs hit the first file. A brief that matches two ("cozy brutalist", "clinical Swiss") reads the idiom first and lets the feeling move the dials inside it: an idiom sets constraints, and dials move within constraints. A brief that names no feeling, idiom, or occasion at all takes the bands above and the geometry table below.
128
-
129
- ## Geometry from the voice
130
-
131
- The geometry lives in radius, padding, gap, and border width, and `live-tokens-adjust-geometry` knows the mechanics. Hand it the intent:
132
-
133
- | Voice | Geometry |
134
- |---|---|
135
- | playful, friendly, soft | rounder, a step airier; pill buttons when the brief is warm |
136
- | luxurious, elegant, editorial | sharper corners, airier padding, thin borders |
137
- | technical, dense, systematic | tighter spacing, small radius, square corners on containers |
138
- | calm, minimal | leave geometry alone unless the brief says otherwise |
139
-
140
- This table is the fallback. When the brief matched an entry in the mood or style reference, take the geometry from that entry instead: it is tuned to the same reading the color came from, and a style's geometry is often targeted rather than global.
141
-
142
- ## Refining a theme that exists
143
-
144
- "Warmer", "calmer", "more contrast" arrive against a theme that is already open, and the answer is a new brief rather than hand-edits. Edit `scratch/<slug>-brief.json` when it is still there. When it is not, recover the seeds: `src/live-tokens/data/themes/<slug>.json` holds each one verbatim at `colorsAndType.editorConfigs.<Palette>.baseColor` as `{l, c, h}`, and the Canvas seed's lightness tells you the scheme. Rebuild the brief from those ten values, move the dial the user named, re-run under the same name.
145
-
146
- One adjective moves one dial. Warmer and cooler rotate hue; calmer and louder move chroma; lighter, darker, and moodier move Canvas L and the scheme; more contrast widens the L gap between Canvas and Brand and takes chroma out of the ground rather than adding it to the garnish. Leave every seed the user did not name alone, because a refinement that re-rolls the whole palette reads as a different theme and loses the thing they liked.
147
-
148
- ## Files each step writes
149
-
150
- Color writes `themes/<slug>.json` and opens it. Type and geometry write the unsaved buffers, which the page already runs. One Save in the editor keeps all three; Adopt ships them. Component aliases and gradients carry forward from the live look into a generated theme; user-tuned gradients survive, stock ones rebuild from the new families.
151
-
152
- ## Verify
153
-
154
- - The color CLI exits 0 with every check passing (auto-corrected is fine), and the two sibling skills report what they changed.
155
- - The app (dev server running) shows the whole look after a reload, and the editor's Theme panel names the theme.
156
- - To return to the previous look, load the theme the CLI output named from the Theme panel; that discards the buffers too.
@@ -1,43 +0,0 @@
1
- # Mood vocabulary: feelings
2
-
3
- Read this when the brief names a feeling. Entries are starting points, not seeds
4
- to copy: apply the chroma budget, per-role bands, and canvas commitment rules
5
- from SKILL.md on top of them.
6
-
7
- Three axes place any feeling, including one the table omits:
8
-
9
- | Axis | Reads as | Carried by |
10
- |---|---|---|
11
- | Valence | pleasant against unpleasant | lightness, above everything else |
12
- | Energy | aroused against calm | chroma, and hue distance on screen |
13
- | Dominance | assertive against yielding | surface contrast, type weight, border weight, tightness |
14
-
15
- Valence and energy set the quadrant, and the table runs in quadrant order:
16
- pleasant-aroused, pleasant-calm, unpleasant-aroused, unpleasant-calm. Dominance
17
- separates confident from gentle inside one quadrant and lives almost entirely
18
- outside color.
19
-
20
- Energy spent on the ground tier fights the contrast gate, so keep chroma on the
21
- garnish. And a low-valence, low-energy brief taken literally reads as broken
22
- rather than sad, which is why every dark entry below holds one moment of color.
23
-
24
- | Brief | Anchors (L, C, H) | Type | Geometry |
25
- |---|---|---|---|
26
- | Joyful, exuberant, energetic | butter canvas (0.95, 0.05, 90), Brand (0.80, 0.17, 75), coral Accent (0.72, 0.18, 20), green Special (0.75, 0.16, 145); analogous warm. Yellow stays yellow only above L 0.80 | dynamic sans in both slots | radius +2, padding +1, pill buttons |
27
- | Playful, whimsical | tinted canvas (0.93, 0.05, 330), Special at full chroma; tetradic, the rare brief that wants four hue families | expressive display over a plain workhorse | pill buttons, rounder cards, wide gaps |
28
- | Optimistic, hopeful | sky canvas (0.94, 0.03, 220), Brand (0.62, 0.14, 200), warm yellow Accent (0.85, 0.14, 90); complementary across the warm/cool line, which reads as sunrise rather than sky | humanist sans, low contrast | radius +1 |
29
- | Confident, bold | canvas (0.90, 0.07, 250), Brand C 0.18 at L 0.55, wide L range between surfaces. High dominance is the point | heavy rational display, plain body | radius -1, borders +1, tight gaps |
30
- | Serene, tranquil | cool canvas (0.95, 0.03, 200), nothing above C 0.08, analogous 160 to 240 | dynamic sans, one family | soft radius, padding +1, no borders |
31
- | Tender, gentle, romantic | blush canvas (0.95, 0.03, 20), rose Brand (0.70, 0.08, 10), sage Accent (0.68, 0.06, 150); narrow L range, light weights | soft serif display over humanist sans | rounder, hairline borders |
32
- | Cozy, comforting | amber-cream canvas (0.92, 0.05, 75), rust Brand (0.55, 0.12, 40), neutrals at H 60; nothing cool on screen | dynamic serif over dynamic sans | radius +1, padding +1 |
33
- | Wistful, nostalgic, vintage, faded | faded canvas (0.92, 0.03, 70), every chromatic seed capped at C 0.10, hues warm and close. The feeling is chroma withheld, not darkness | rational serif display, quiet body | unchanged, hairline rules |
34
- | Earthy, grounded, natural | canvas (0.90, 0.05, 90) at commitment level 2, hues 30 to 140 at C 0.06 to 0.14, neutrals H 60 to 80; no magenta, no cyan, nothing over C 0.16 | dynamic serif over humanist sans | radius +1, padding +1 |
35
- | Clinical, sterile, precise | near-white canvas at C 0.01, the one brief an untinted ground suits; one cool Brand 200 to 260 at C 0.10; statuses carry the only other color | one neo-grotesque, tightly set | radius sm, tight gaps, hairline borders |
36
- | Contemplative, focused | canvas (0.94, 0.015, 250) or its dark twin (0.20, 0.02, 250), one cool Brand at C 0.10, almost no other hue | one quiet superfamily | padding +1, minimal borders |
37
- | Urgent, alarming | ground held near-neutral so the alarm lands, red Brand (0.58, 0.22, 27) given real area, Warning and Danger on one shared L | condensed grotesque, heavy | radius -2, borders +2, tight padding |
38
- | Tense, anxious | an uncomfortable ground, (0.88, 0.04, 105) light or (0.22, 0.03, 280) dark, plus a near-complementary pair that vibrates with one side toned down | neo-grotesque, tightly set | tight gaps, radius sm |
39
- | Defiant, rebellious, loud | near-black canvas (0.15, 0.01, 0), one acid hue (0.85, 0.20, 120), nothing else chromatic | heavy display; a mono body works | radius none, borders +3 |
40
- | Melancholy, moody, sad | dark; canvas (0.22, 0.03, 250), chromatic seeds C 0.06 to 0.10 at L 0.72 to 0.80, blue through violet, with Accent held at C 0.14 as the moment of color | rational serif display over quiet sans | padding +1, hairline borders |
41
- | Somber, grave, mournful | near-neutral dark canvas (0.18, 0.01, 260), one desaturated Brand, gradient off | rational serif in both slots | sharp, tight gaps, hairline rules |
42
- | Ominous, dramatic, haunted | dark canvas (0.15, 0.04, 300), one hot accent (0.75, 0.16, 30) used sparingly, canvasGradient on | heavy high-contrast display | sharp, borders +2 |
43
- | Austere, severe, cold | monochrome; canvas at either L extreme at C 0.01 or below, one low-chroma Brand, muted statuses. Highest dominance, lowest energy | one rational family | radius none, tight padding, hairline borders |
@@ -1,18 +0,0 @@
1
- # Named themes: canonical OKLCH anchors
2
-
3
- Read this when the brief names a holiday, a season, or a natural scene. These
4
- are starting points, not seeds to copy: apply the chroma budget, per-role bands,
5
- and canvas commitment rules from SKILL.md on top of them.
6
-
7
- Holiday briefs are statement briefs. Default to canvas commitment level 2 or 3,
8
- never cream, and put the named color on the ground, not only on the buttons.
9
-
10
- | Brief | Anchors (L, C, H) | Strongest form |
11
- |---|---|---|
12
- | Christmas | red (0.53, 0.21, 22), green (0.46, 0.11, 155), gold (0.77, 0.14, 91) | red canvas (0.42, 0.14, 25), green Brand, gold Accent, dark scheme. Softer: evergreen canvas (0.35, 0.07, 160) or deep cream (0.95, 0.04, 85). One of red or green owns the ground; never a 50/50 split. |
13
- | Halloween | pumpkin (0.70, 0.20, 46), purple (0.51, 0.21, 313), poison green (0.73, 0.20, 137) | orange canvas (0.45, 0.13, 55) with violet and poison-green accents, or near-black violet canvas with pumpkin Brand. Dark scheme either way. |
14
- | St. Patrick's | green (0.51, 0.13, 152) | green Brand, gold Accent, white or beige neutrals. |
15
- | Ocean | deep blue (0.35, 0.08, 237), aqua (0.78, 0.12, 214) | hues held to 180 to 240. |
16
- | Sunset | hues 90 to 320 through red | L falls 0.85 to 0.40 across the sweep. |
17
- | Autumn | parchment canvas (0.87, 0.06, 80), rust Brand (0.55, 0.15, 40), gold Accent (0.75, 0.15, 85), moss Special (0.55, 0.10, 120) | warm brown neutrals H 50 to 70; deep red H 25 welcome. |
18
- | Spring | pastels L 0.85 to 0.95, C 0.04 to 0.10 | greens 130 to 150, pinks 0 to 20, mint canvas. |
@@ -1,35 +0,0 @@
1
- # Style vocabulary: idioms, eras, and genres
2
-
3
- Read this when the brief names a design idiom, a decade, or a genre. A mood
4
- moves dials; an idiom sets constraints, and it overrides the generic defaults in
5
- SKILL.md: the polished-UI Accent at 45% of Brand's chroma is right for a vague
6
- brief and wrong for Bauhaus.
7
-
8
- Entries are starting points, not seeds to copy: apply the chroma budget,
9
- per-role bands, and canvas commitment rules on top of them. Riso, Memphis, and
10
- brutalist break the chroma budget on purpose. Break it in the one layer the
11
- style is about and hold the rest of the ground tier down.
12
-
13
- The table runs modernist, digital, quiet, print, expressive.
14
-
15
- | Brief | Anchors (L, C, H) | Type | Geometry |
16
- |---|---|---|---|
17
- | Swiss, International | near-white canvas (0.97, 0.01, 0), or true black for the poster reading; one red Brand (0.55, 0.22, 27) as the only hue on screen; Neutral at C 0.005, untinted on purpose; monochromatic | one rational neo-grotesque across both slots | radius none, tight gaps, hairline borders |
18
- | Bauhaus | paper canvas (0.95, 0.02, 85) under primaries at full commitment: red (0.58, 0.21, 27), blue (0.48, 0.20, 264), yellow (0.86, 0.17, 90); triadic | geometric sans, heavy display | radius none on containers, radius full on buttons alone, so the circle reads as a decision |
19
- | Mid-century modern | canvas (0.90, 0.05, 75), mustard (0.75, 0.13, 85), teal (0.55, 0.10, 195), burnt orange (0.60, 0.15, 45), walnut neutrals H 60; nothing over C 0.16; compound | dynamic sans, or a geometric display over a dynamic body | radius +1 to +2, padding +1, no borders |
20
- | Art deco, opulent, luxurious | near-black canvas (0.20, 0.02, 280), gold (0.78, 0.13, 88), jade (0.60, 0.10, 165); dark, one metallic accent, everything else grey | rational high-contrast serif display, quiet body | sharp, padding +1, thin borders |
21
- | Terminal, phosphor | canvas (0.16, 0.01, 150), phosphor green Brand (0.80, 0.16, 145), amber Accent (0.80, 0.13, 80); monochromatic, dark, gradient off | mono in both slots | radius none, tight padding, a 1px border on everything |
22
- | Cyberpunk, neon noir, futuristic | canvas (0.18, 0.04, 300), magenta Brand (0.78, 0.18, 330), cyan Accent (0.82, 0.12, 200); complementary, dark, canvasGradient on for the glow | wide geometric display, neutral body | sharp, tight gaps |
23
- | Vaporwave | sunset canvas (0.88, 0.06, 330), pink (0.72, 0.16, 350), cyan (0.80, 0.11, 205), lilac Special; light, gradient on | wide retro display, serif welcome | rounder, airier |
24
- | Y2K, bubble | chrome canvas (0.96, 0.015, 240), electric blue Brand (0.62, 0.18, 255), lime Accent (0.85, 0.17, 130) | geometric sans, heavy display | radius full on buttons with the padding a pill needs, generous spacing |
25
- | Blueprint | canvas (0.35, 0.07, 245), pale rules (0.90, 0.02, 240), one warm accent (0.75, 0.14, 60); dark | mono, or a technical grotesque; a mono body works here and almost nowhere else | radius none, 1px borders, tight grid |
26
- | Scandinavian, hygge | chalk canvas (0.96, 0.012, 70), sage Brand (0.60, 0.06, 150), clay Accent (0.70, 0.08, 40); nothing above C 0.10; analogous | dynamic sans on both sides | soft radius, padding +1, hairline borders |
27
- | Japandi, wabi-sabi | unbleached paper canvas (0.93, 0.025, 80), ink Brand (0.35, 0.02, 250), one earth Accent (0.62, 0.09, 45); near-monochrome | rational serif display over a quiet humanist body | radius sm, padding +2, no borders |
28
- | Cottagecore, botanical | cream canvas (0.94, 0.04, 85), moss (0.55, 0.10, 135), dusty rose (0.70, 0.09, 15), butter (0.85, 0.11, 95); warm analogous | dynamic serif display over humanist sans | rounder, airier |
29
- | Editorial, magazine | paper canvas (0.97, 0.015, 85), ink neutrals, one strong Brand (0.50, 0.18, 20) carried by rules and pull quotes | high-contrast serif display over a text serif or humanist sans | sharp, padding +1, hairline rules |
30
- | Newsprint, broadsheet | grey-warm canvas (0.91, 0.02, 80), near-black ink, nothing chromatic above C 0.10 | rational serif in both slots | radius none, tight gaps, hairline rules |
31
- | Risograph, zine | paper canvas (0.94, 0.03, 80) with two flat spot inks, fluoro pink (0.68, 0.22, 5) and blue (0.52, 0.18, 260); complementary, no midtones between them | expressive display over a plain workhorse | radius none, borders +2 |
32
- | Corporate, professional, trustworthy | canvas (0.97, 0.012, 250), navy Brand (0.48, 0.12, 255), teal Accent (0.60, 0.09, 195), conventional statuses | rational sans body with a rational serif or same-family display | leave it alone |
33
- | Brutalist | pure canvas, (0.98, 0, 0) or (0.15, 0, 0), with Neutral at C 0, untinted because that is the point; one alarming Brand (0.58, 0.24, 27) | neo-grotesque or mono at heavy weight | radius none, borders +2 to +3, tight padding |
34
- | Memphis, postmodern | pastel canvas (0.95, 0.03, 60) carrying full-chroma primaries and a hot pink Special (0.70, 0.20, 350); tetradic or square, four hue families on purpose | geometric display, plain body | targeted rather than global: pill buttons against radius-none cards |
35
- | Industrial, workshop, gritty | concrete canvas (0.88, 0.008, 250), or (0.22, 0.01, 250) dark, safety orange Brand (0.68, 0.18, 50), steel neutrals | condensed grotesque display over a plain body | radius sm, thick borders, tight padding |