@motion-proto/live-tokens 0.61.0 → 0.62.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 (36) hide show
  1. package/.claude/skills/live-tokens-build-page/SKILL.md +1 -1
  2. package/.claude/skills/live-tokens-pair-fonts/SKILL.md +1 -1
  3. package/CHANGELOG.md +73 -0
  4. package/dist-plugin/{chunk-OIOXU7FR.js → chunk-OPYOK2CA.js} +45 -25
  5. package/dist-plugin/index.cjs +45 -25
  6. package/dist-plugin/index.js +1 -1
  7. package/dist-plugin/tokensCssMigrations/index.cjs +45 -25
  8. package/dist-plugin/tokensCssMigrations/index.js +1 -1
  9. package/package.json +1 -1
  10. package/src/app/site.css +16 -0
  11. package/src/editor/component-editor/CardEditor.svelte +7 -1
  12. package/src/editor/component-editor/scaffolding/VariantGroup.svelte +25 -2
  13. package/src/editor/core/sketch/maskField.ts +70 -34
  14. package/src/editor/core/sketch/sketchLayer.ts +24 -3
  15. package/src/editor/core/sketch/sketchPresets.ts +10 -11
  16. package/src/editor/core/sketch/sketchStore.ts +89 -18
  17. package/src/editor/docs/content/sketch-mode.md +7 -2
  18. package/src/editor/docs/content.generated.ts +1 -1
  19. package/src/editor/overlay/LiveTokensRouter.svelte +8 -0
  20. package/src/editor/ui/sections/textStyles.ts +15 -1
  21. package/src/editor/ui/sketch/SketchTab.svelte +33 -81
  22. package/src/live-tokens/data/colors-and-type/midnight-study.json +40 -30
  23. package/src/live-tokens/data/themes/autumn.json +3 -3
  24. package/src/live-tokens/data/themes/halloween.json +3 -3
  25. package/src/live-tokens/data/themes/midnight-study.json +61 -49
  26. package/src/live-tokens/data/themes/ocean.json +3 -3
  27. package/src/live-tokens/data/themes/royal-velvet.json +3 -3
  28. package/src/live-tokens/data/themes/sketchy.json +3 -3
  29. package/src/live-tokens/data/themes/spring-meadow.json +3 -3
  30. package/src/live-tokens/data/themes/sunset.json +3 -3
  31. package/src/system/components/Card.svelte +27 -9
  32. package/src/system/components/ImageLightbox.svelte +5 -2
  33. package/src/system/components/SectionDivider.svelte +3 -3
  34. package/src/system/components/SegmentedControl.svelte +11 -9
  35. package/src/system/styles/tokens.css +13 -5
  36. package/template/src/pages/Home.svelte +1 -11
@@ -4,7 +4,7 @@
4
4
  import UISegmentedControl from '../UISegmentedControl.svelte';
5
5
  import SketchDial from './SketchDial.svelte';
6
6
  import SketchRange from './SketchRange.svelte';
7
- import { buildMaskUri, MASK_TILE } from '../../core/sketch/maskField';
7
+ import { buildMaskUri } from '../../core/sketch/maskField';
8
8
  import SketchPreview from './SketchPreview.svelte';
9
9
  import { onMount } from 'svelte';
10
10
  import UIPillButton from '../UIPillButton.svelte';
@@ -191,7 +191,12 @@
191
191
  ceiling is a few blobs across a card, which is where it still reads as
192
192
  uneven ink. */
193
193
  const SIZE = { min: 20, max: 250 };
194
- const BLUR_MAX = 8;
194
+ const BLUR_MAX = 64;
195
+ /** Squared response. A blur only reads as a different blur while it is small,
196
+ so a linear walk to 64px would spend a tenth of the dial on everything
197
+ legible and the rest sliding between shades of gone. */
198
+ const blurPos = (px: number) => Math.round(Math.sqrt(px / BLUR_MAX) * 100);
199
+ const blurVal = (t: number) => Math.round(BLUR_MAX * (t / 100) ** 2 * 4) / 4;
195
200
 
196
201
  /** Tones the field is flattened into, in the order the dial walks them:
197
202
  smooth, then coarsening all the way down to two. The stored value is the
@@ -213,18 +218,12 @@
213
218
  let outputMin = $derived(Math.round(s.maskOutputMin * 100));
214
219
  let outputMax = $derived(Math.round(s.maskOutputMax * 100));
215
220
  let stepPos = $derived(Math.max(0, STEP_TONES.indexOf(s.maskPosterize)));
221
+ let blurStep = $derived(blurPos(s.maskSoftness));
216
222
  const setOutput = (min: number, max: number) =>
217
223
  updateSketchSettings({ maskOutputMin: min / 100, maskOutputMax: max / 100 });
218
224
 
219
- // The same stages the fill filter runs, painted at true pixel size over a
220
- // sample card, so blob size here is blob size on the components and the
221
- // card's shadow is always on show: coverage that ate it would be a bug you
222
- // saw at once.
225
+ // The finished field, the last stage and the one the components get.
223
226
  let maskPreview = $derived(buildMaskUri(s));
224
- // The field itself after each stage, white for ink.
225
- let stageTiles = $derived(
226
- (['noise', 'output', 'blur'] as const).map((stage) => ({ stage, uri: buildMaskUri(s, 9, stage) })),
227
- );
228
227
  </script>
229
228
 
230
229
  <div class="sketch-tab">
@@ -538,21 +537,7 @@
538
537
  </div>
539
538
 
540
539
  <figure class="scope" class:muted={!s.maskOn}>
541
- <div class="sample">
542
- <div
543
- class="ink"
544
- style:mask-image={maskPreview}
545
- style:mask-size="{MASK_TILE}px {MASK_TILE}px"
546
- ></div>
547
- </div>
548
- <div class="stages">
549
- {#each stageTiles as { stage, uri } (stage)}
550
- <figure>
551
- <div class="tile" style:mask-image={uri} style:mask-size="{MASK_TILE}px {MASK_TILE}px"></div>
552
- <figcaption>{stage}</figcaption>
553
- </figure>
554
- {/each}
555
- </div>
540
+ <div class="field" style:mask-image={maskPreview}></div>
556
541
  </figure>
557
542
 
558
543
  <h5>Noise</h5>
@@ -580,10 +565,13 @@
580
565
  onchange={(v) => updateSketchSettings({ maskOctaves: v })}
581
566
  />
582
567
 
583
- <h5>Output</h5>
568
+ <h5>Levels</h5>
584
569
  <p class="group-note">
585
- How much ink the field lays down. The low handle is the palest the fill
586
- gets and the high handle the densest: 0 is bare, 100 is whole.
570
+ The field runs black to white before these apply. Output states the
571
+ range of ink the mask paints between, 0 bare to 100 whole, and the
572
+ whole field is squeezed into it: raise the low handle and the
573
+ darkest patch rises with it, drop the high handle and the densest
574
+ falls. Nothing is ever cut off at a handle.
587
575
  </p>
588
576
  <SketchRange
589
577
  label="Output" low={outputMin} high={outputMax} min={0} max={100} step={1}
@@ -602,10 +590,11 @@
602
590
 
603
591
  <h5>Blur</h5>
604
592
  <SketchDial
605
- label="Blur" value={s.maskSoftness} min={0} max={BLUR_MAX} step={0.25}
593
+ label="Blur" value={blurStep} min={0} max={100} step={1}
606
594
  readout={px(s.maskSoftness)}
607
- hint="Softens the blotch edges. Few tones with a little blur give a hard blotch with a soft rim."
608
- onchange={(v) => updateSketchSettings({ maskSoftness: v })}
595
+ ends={['hard', 'clouded']}
596
+ hint="Softens the blotch edges. Few tones with a little blur give a hard blotch with a soft rim; wound right up the field goes to weather."
597
+ onchange={(v) => updateSketchSettings({ maskSoftness: blurVal(v) })}
609
598
  />
610
599
  </div>
611
600
  </div>
@@ -1196,69 +1185,32 @@
1196
1185
  pointer-events: none;
1197
1186
  }
1198
1187
 
1188
+ /* The ground the field is cut out of, so a masked-away pixel reads as black
1189
+ rather than as the panel. */
1199
1190
  .scope {
1200
1191
  margin: 0;
1201
- display: flex;
1202
- flex-direction: column;
1203
- gap: var(--ui-space-4);
1204
- transition: opacity var(--ui-transition-base);
1205
- }
1206
-
1207
- .scope.muted {
1208
- opacity: 0.4;
1209
- }
1210
-
1211
- /* The shadow sits on the card and the mask on the fill inside it: the same
1212
- split the fill layer makes, so what this shows is what the page does. */
1213
- .sample {
1214
- height: 6rem;
1215
- padding: var(--ui-space-16) var(--ui-space-24);
1216
1192
  border: 1px solid var(--ui-border-low);
1217
1193
  border-radius: var(--ui-radius-sm);
1218
1194
  background: var(--ui-surface-lowest);
1219
1195
  overflow: hidden;
1196
+ transition: opacity var(--ui-transition-base);
1220
1197
  }
1221
1198
 
1222
- .ink {
1223
- box-shadow: var(--ui-shadow-md);
1224
- }
1225
-
1226
- .stages {
1227
- display: grid;
1228
- grid-template-columns: repeat(3, 1fr);
1229
- gap: var(--ui-space-8);
1230
- }
1231
-
1232
- .stages figure {
1233
- margin: 0;
1199
+ .scope.muted {
1200
+ opacity: 0.4;
1234
1201
  }
1235
1202
 
1236
- .tile {
1237
- height: var(--ui-space-48);
1238
- border-radius: var(--ui-radius-sm);
1203
+ /* One readout of the finished field: the whole tile, repeated across the
1204
+ strip, white on that ground so 0 reads as black and 100 as white. Neither
1205
+ was readable before. The field was painted at page-px size, which showed a
1206
+ crop off the top of the tile that never reached the bright end, over an ink
1207
+ colour that could not have painted it if it had. */
1208
+ .field {
1209
+ height: 7rem;
1239
1210
  background: var(--ui-text-primary);
1240
1211
  mask-mode: luminance;
1241
1212
  mask-repeat: repeat;
1242
- }
1243
-
1244
- .stages figcaption {
1245
- margin-top: var(--ui-space-2);
1246
- font-size: var(--ui-font-size-xs);
1247
- text-align: center;
1248
- text-transform: uppercase;
1249
- letter-spacing: 0.06em;
1250
- color: var(--ui-text-tertiary);
1251
- }
1252
-
1253
- .ink {
1254
- height: 100%;
1255
- border-radius: var(--ui-radius-md);
1256
- /* An ink colour, not a surface one: the point of the swatch is the
1257
- blotches, and the surface rungs sit within a shade or two of the ground
1258
- under them, which showed the finished field as a flat dark rectangle. */
1259
- background: var(--ui-text-muted);
1260
- mask-mode: luminance;
1261
- mask-repeat: repeat;
1213
+ mask-size: contain;
1262
1214
  }
1263
1215
 
1264
1216
  </style>
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "Midnight Study",
3
- "createdAt": "2026-08-12T20:13:46.264Z",
4
- "updatedAt": "2026-08-13T14:14:20.015Z",
3
+ "createdAt": "2026-08-27T17:01:37.984Z",
4
+ "updatedAt": "2026-08-27T17:01:37.984Z",
5
5
  "editorConfigs": {
6
6
  "Brand": {
7
7
  "baseColor": {
@@ -2262,10 +2262,6 @@
2262
2262
  }
2263
2263
  },
2264
2264
  "cssVariables": {
2265
- "--gradient-1": "linear-gradient(90deg, var(--color-brand-400) 0%, var(--color-brand-700) 100%)",
2266
- "--gradient-2": "linear-gradient(135deg, var(--color-special-500) 0%, var(--color-brand-500) 100%)",
2267
- "--gradient-3": "linear-gradient(90deg, var(--color-brand-500) 0%, var(--color-accent-500) 100%)",
2268
- "--gradient-4": "linear-gradient(180deg, var(--color-canvas-600) 0%, var(--color-canvas-900) 100%)",
2269
2265
  "--badge-trait-surface": "var(--surface-brand)",
2270
2266
  "--badge-trait-text": "var(--text-brand)",
2271
2267
  "--badge-trait-text-font-family": "var(--font-sans)",
@@ -2316,7 +2312,15 @@
2316
2312
  "--shadow-md": "3px 3px 6px hsla(237, 18%, 3%, 0.9)",
2317
2313
  "--shadow-lg": "5px 5px 9px hsla(237, 18%, 3%, 0.9)",
2318
2314
  "--shadow-xl": "6px 7px 13px hsla(237, 18%, 3%, 0.9)",
2319
- "--shadow-2xl": "8px 9px 16px hsla(237, 18%, 3%, 0.9)"
2315
+ "--shadow-2xl": "8px 9px 16px hsla(237, 18%, 3%, 0.9)",
2316
+ "--gradient-1": "linear-gradient(90deg, var(--color-brand-400) 0%, var(--color-brand-700) 100%)",
2317
+ "--gradient-1-stops": "var(--color-brand-400) 0%, var(--color-brand-700) 100%",
2318
+ "--gradient-2": "linear-gradient(135deg, var(--color-special-500) 0%, var(--color-brand-500) 100%)",
2319
+ "--gradient-2-stops": "var(--color-special-500) 0%, var(--color-brand-500) 100%",
2320
+ "--gradient-3": "linear-gradient(90deg, var(--color-brand-500) 0%, var(--color-accent-500) 100%)",
2321
+ "--gradient-3-stops": "var(--color-brand-500) 0%, var(--color-accent-500) 100%",
2322
+ "--gradient-4": "linear-gradient(180deg, color-mix(in srgb, var(--color-canvas-600) 49%, transparent) 0%, var(--color-canvas-850) 14.2%, var(--color-canvas-900) 83.8%)",
2323
+ "--gradient-4-stops": "color-mix(in srgb, var(--color-canvas-600) 49%, transparent) 0%, var(--color-canvas-850) 14.2%, var(--color-canvas-900) 83.8%"
2320
2324
  },
2321
2325
  "fontSources": [
2322
2326
  {
@@ -2469,25 +2473,6 @@
2469
2473
  ]
2470
2474
  }
2471
2475
  ],
2472
- "harmonyAxes": [
2473
- {
2474
- "hue": 300,
2475
- "family": "Brand"
2476
- },
2477
- {
2478
- "hue": 340,
2479
- "family": "Accent"
2480
- },
2481
- {
2482
- "hue": 268,
2483
- "family": "Canvas"
2484
- },
2485
- {
2486
- "hue": 210,
2487
- "family": null
2488
- }
2489
- ],
2490
- "schemaVersion": 3,
2491
2476
  "gradients": [
2492
2477
  {
2493
2478
  "variable": "--gradient-1",
@@ -2541,13 +2526,38 @@
2541
2526
  "stops": [
2542
2527
  {
2543
2528
  "position": 0,
2544
- "color": "--color-canvas-600"
2529
+ "color": "--color-canvas-600",
2530
+ "opacity": 49
2545
2531
  },
2546
2532
  {
2547
- "position": 100,
2533
+ "position": 14.2,
2534
+ "color": "--color-canvas-850",
2535
+ "opacity": 100
2536
+ },
2537
+ {
2538
+ "position": 83.8,
2548
2539
  "color": "--color-canvas-900"
2549
2540
  }
2550
2541
  ]
2551
2542
  }
2552
- ]
2553
- }
2543
+ ],
2544
+ "harmonyAxes": [
2545
+ {
2546
+ "hue": 300,
2547
+ "family": "Brand"
2548
+ },
2549
+ {
2550
+ "hue": 340,
2551
+ "family": "Accent"
2552
+ },
2553
+ {
2554
+ "hue": 268,
2555
+ "family": "Canvas"
2556
+ },
2557
+ {
2558
+ "hue": 210,
2559
+ "family": null
2560
+ }
2561
+ ],
2562
+ "schemaVersion": 5
2563
+ }
@@ -3530,7 +3530,7 @@
3530
3530
  "--sectiondivider-lg-description": "--text-alternate",
3531
3531
  "--sectiondivider-lg-eyebrow": "--text-brand",
3532
3532
  "--sectiondivider-lg-border": "--color-transparent",
3533
- "--sectiondivider-lg-title-outline-color": "--surface-canvas-lowest",
3533
+ "--sectiondivider-lg-title-outline-color": "transparent",
3534
3534
  "--sectiondivider-lg-hairline-color": "--border-brand-medium",
3535
3535
  "--sectiondivider-md-title-font-family": "--font-display",
3536
3536
  "--sectiondivider-md-title-font-weight": "--font-weight-bold",
@@ -3559,7 +3559,7 @@
3559
3559
  "--sectiondivider-md-description": "--text-secondary",
3560
3560
  "--sectiondivider-md-eyebrow": "--text-tertiary",
3561
3561
  "--sectiondivider-md-border": "--color-transparent",
3562
- "--sectiondivider-md-title-outline-color": "--surface-accent-lowest",
3562
+ "--sectiondivider-md-title-outline-color": "transparent",
3563
3563
  "--sectiondivider-md-hairline-color": "--border-brand-medium",
3564
3564
  "--sectiondivider-sm-title-font-family": "--font-display",
3565
3565
  "--sectiondivider-sm-title-font-weight": "--font-weight-medium",
@@ -3588,7 +3588,7 @@
3588
3588
  "--sectiondivider-sm-description": "--text-secondary",
3589
3589
  "--sectiondivider-sm-eyebrow": "--text-tertiary",
3590
3590
  "--sectiondivider-sm-border": "--color-transparent",
3591
- "--sectiondivider-sm-title-outline-color": "color-mix(in srgb, var(--surface-neutral-lowest) 25%, transparent)",
3591
+ "--sectiondivider-sm-title-outline-color": "transparent",
3592
3592
  "--sectiondivider-sm-hairline-color": "color-mix(in srgb, var(--border-brand-medium) 50%, transparent)"
3593
3593
  }
3594
3594
  },
@@ -3569,7 +3569,7 @@
3569
3569
  "--sectiondivider-lg-description": "--text-alternate",
3570
3570
  "--sectiondivider-lg-eyebrow": "--text-brand",
3571
3571
  "--sectiondivider-lg-border": "--color-transparent",
3572
- "--sectiondivider-lg-title-outline-color": "--surface-canvas-lowest",
3572
+ "--sectiondivider-lg-title-outline-color": "transparent",
3573
3573
  "--sectiondivider-lg-hairline-color": "--border-brand-medium",
3574
3574
  "--sectiondivider-md-title-font-family": "--font-display",
3575
3575
  "--sectiondivider-md-title-font-weight": "--font-weight-bold",
@@ -3598,7 +3598,7 @@
3598
3598
  "--sectiondivider-md-description": "--text-secondary",
3599
3599
  "--sectiondivider-md-eyebrow": "--text-tertiary",
3600
3600
  "--sectiondivider-md-border": "--color-transparent",
3601
- "--sectiondivider-md-title-outline-color": "--surface-accent-lowest",
3601
+ "--sectiondivider-md-title-outline-color": "transparent",
3602
3602
  "--sectiondivider-md-hairline-color": "--border-brand-medium",
3603
3603
  "--sectiondivider-sm-title-font-family": "--font-display",
3604
3604
  "--sectiondivider-sm-title-font-weight": "--font-weight-medium",
@@ -3627,7 +3627,7 @@
3627
3627
  "--sectiondivider-sm-description": "--text-secondary",
3628
3628
  "--sectiondivider-sm-eyebrow": "--text-tertiary",
3629
3629
  "--sectiondivider-sm-border": "--color-transparent",
3630
- "--sectiondivider-sm-title-outline-color": "color-mix(in srgb, var(--surface-neutral-lowest) 25%, transparent)",
3630
+ "--sectiondivider-sm-title-outline-color": "transparent",
3631
3631
  "--sectiondivider-sm-hairline-color": "color-mix(in srgb, var(--border-brand-medium) 50%, transparent)"
3632
3632
  }
3633
3633
  },
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "Midnight Study",
3
3
  "createdAt": "2026-08-13T10:21:46.867Z",
4
- "updatedAt": "2026-08-19T22:39:32.785Z",
4
+ "updatedAt": "2026-08-27T17:03:51.623Z",
5
5
  "schemaVersion": 4,
6
6
  "colorsAndType": {
7
7
  "name": "Midnight Study",
8
- "createdAt": "2026-08-12T20:13:46.264Z",
9
- "updatedAt": "2026-08-13T14:14:20.015Z",
8
+ "createdAt": "2026-08-27T17:01:37.984Z",
9
+ "updatedAt": "2026-08-27T17:01:37.984Z",
10
10
  "editorConfigs": {
11
11
  "Brand": {
12
12
  "baseColor": {
@@ -2267,10 +2267,6 @@
2267
2267
  }
2268
2268
  },
2269
2269
  "cssVariables": {
2270
- "--gradient-1": "linear-gradient(90deg, var(--color-brand-400) 0%, var(--color-brand-700) 100%)",
2271
- "--gradient-2": "linear-gradient(135deg, var(--color-special-500) 0%, var(--color-brand-500) 100%)",
2272
- "--gradient-3": "linear-gradient(90deg, var(--color-brand-500) 0%, var(--color-accent-500) 100%)",
2273
- "--gradient-4": "linear-gradient(180deg, var(--color-canvas-600) 0%, var(--color-canvas-900) 100%)",
2274
2270
  "--badge-trait-surface": "var(--surface-brand)",
2275
2271
  "--badge-trait-text": "var(--text-brand)",
2276
2272
  "--badge-trait-text-font-family": "var(--font-sans)",
@@ -2321,7 +2317,15 @@
2321
2317
  "--shadow-md": "3px 3px 6px hsla(237, 18%, 3%, 0.9)",
2322
2318
  "--shadow-lg": "5px 5px 9px hsla(237, 18%, 3%, 0.9)",
2323
2319
  "--shadow-xl": "6px 7px 13px hsla(237, 18%, 3%, 0.9)",
2324
- "--shadow-2xl": "8px 9px 16px hsla(237, 18%, 3%, 0.9)"
2320
+ "--shadow-2xl": "8px 9px 16px hsla(237, 18%, 3%, 0.9)",
2321
+ "--gradient-1": "linear-gradient(90deg, var(--color-brand-400) 0%, var(--color-brand-700) 100%)",
2322
+ "--gradient-1-stops": "var(--color-brand-400) 0%, var(--color-brand-700) 100%",
2323
+ "--gradient-2": "linear-gradient(135deg, var(--color-special-500) 0%, var(--color-brand-500) 100%)",
2324
+ "--gradient-2-stops": "var(--color-special-500) 0%, var(--color-brand-500) 100%",
2325
+ "--gradient-3": "linear-gradient(90deg, var(--color-brand-500) 0%, var(--color-accent-500) 100%)",
2326
+ "--gradient-3-stops": "var(--color-brand-500) 0%, var(--color-accent-500) 100%",
2327
+ "--gradient-4": "linear-gradient(180deg, color-mix(in srgb, var(--color-canvas-600) 49%, transparent) 0%, var(--color-canvas-850) 14.2%, var(--color-canvas-900) 83.8%)",
2328
+ "--gradient-4-stops": "color-mix(in srgb, var(--color-canvas-600) 49%, transparent) 0%, var(--color-canvas-850) 14.2%, var(--color-canvas-900) 83.8%"
2325
2329
  },
2326
2330
  "fontSources": [
2327
2331
  {
@@ -2474,25 +2478,6 @@
2474
2478
  ]
2475
2479
  }
2476
2480
  ],
2477
- "harmonyAxes": [
2478
- {
2479
- "hue": 300,
2480
- "family": "Brand"
2481
- },
2482
- {
2483
- "hue": 340,
2484
- "family": "Accent"
2485
- },
2486
- {
2487
- "hue": 268,
2488
- "family": "Canvas"
2489
- },
2490
- {
2491
- "hue": 210,
2492
- "family": null
2493
- }
2494
- ],
2495
- "schemaVersion": 3,
2496
2481
  "gradients": [
2497
2482
  {
2498
2483
  "variable": "--gradient-1",
@@ -2546,15 +2531,40 @@
2546
2531
  "stops": [
2547
2532
  {
2548
2533
  "position": 0,
2549
- "color": "--color-canvas-600"
2534
+ "color": "--color-canvas-600",
2535
+ "opacity": 49
2550
2536
  },
2551
2537
  {
2552
- "position": 100,
2538
+ "position": 14.2,
2539
+ "color": "--color-canvas-850",
2540
+ "opacity": 100
2541
+ },
2542
+ {
2543
+ "position": 83.8,
2553
2544
  "color": "--color-canvas-900"
2554
2545
  }
2555
2546
  ]
2556
2547
  }
2557
- ]
2548
+ ],
2549
+ "harmonyAxes": [
2550
+ {
2551
+ "hue": 300,
2552
+ "family": "Brand"
2553
+ },
2554
+ {
2555
+ "hue": 340,
2556
+ "family": "Accent"
2557
+ },
2558
+ {
2559
+ "hue": 268,
2560
+ "family": "Canvas"
2561
+ },
2562
+ {
2563
+ "hue": 210,
2564
+ "family": null
2565
+ }
2566
+ ],
2567
+ "schemaVersion": 5
2558
2568
  },
2559
2569
  "componentConfigs": {
2560
2570
  "badge": {
@@ -2886,10 +2896,10 @@
2886
2896
  "card": {
2887
2897
  "name": "midnight-study",
2888
2898
  "component": "card",
2889
- "createdAt": "2026-05-10T19:26:31.704Z",
2890
- "updatedAt": "2026-08-19T22:39:32.785Z",
2899
+ "createdAt": "2026-08-27T17:02:30.403Z",
2900
+ "updatedAt": "2026-08-27T17:02:30.403Z",
2891
2901
  "aliases": {
2892
- "--card-default-surface": "color-mix(in srgb, var(--surface-neutral-lower) 70%, transparent)",
2902
+ "--card-default-surface": "--gradient-4",
2893
2903
  "--card-default-border": "--border-neutral",
2894
2904
  "--card-default-border-width": "--border-width-1",
2895
2905
  "--card-default-radius": "--radius-sm",
@@ -2899,14 +2909,14 @@
2899
2909
  "--card-default-header-padding-bottom": "--space-8",
2900
2910
  "--card-default-header-padding-left": "--space-12",
2901
2911
  "--card-default-header-gap": "--space-6",
2902
- "--card-default-body-padding": "--space-10",
2903
- "--card-default-body-padding-top": "--space-10",
2904
- "--card-default-body-padding-right": "--space-12",
2905
- "--card-default-body-padding-bottom": "--space-10",
2906
- "--card-default-body-padding-left": "--space-12",
2912
+ "--card-default-body-padding": "--space-16",
2913
+ "--card-default-body-padding-top": "--space-16",
2914
+ "--card-default-body-padding-right": "--space-20",
2915
+ "--card-default-body-padding-bottom": "--space-48",
2916
+ "--card-default-body-padding-left": "--space-20",
2907
2917
  "--card-default-shadow": "--shadow-sm",
2908
2918
  "--card-default-blur": "--blur-none",
2909
- "--card-default-header-surface": "color-mix(in srgb, var(--surface-neutral-lowest) 80%, transparent)",
2919
+ "--card-default-header-surface": "color-mix(in srgb, var(--color-brand-700) 60%, transparent)",
2910
2920
  "--card-default-title": "--text-primary",
2911
2921
  "--card-default-title-font-family": "--font-sans",
2912
2922
  "--card-default-title-font-size": "--font-size-2xl",
@@ -2922,7 +2932,8 @@
2922
2932
  "--card-hover-shadow": "--shadow-md",
2923
2933
  "--card-hover-border-active": "--card-default-border",
2924
2934
  "--card-hover-shadow-active": "--card-default-shadow"
2925
- }
2935
+ },
2936
+ "config": {}
2926
2937
  },
2927
2938
  "codesnippet": {
2928
2939
  "name": "midnight-study",
@@ -3453,8 +3464,8 @@
3453
3464
  "panel": {
3454
3465
  "name": "midnight-study",
3455
3466
  "component": "panel",
3456
- "createdAt": "2026-06-01T09:34:52.417Z",
3457
- "updatedAt": "2026-08-19T22:39:32.785Z",
3467
+ "createdAt": "2026-08-27T17:03:50.744Z",
3468
+ "updatedAt": "2026-08-27T17:03:50.744Z",
3458
3469
  "aliases": {
3459
3470
  "--panel-frame-border": "--border-neutral",
3460
3471
  "--panel-frame-border-width": "--border-width-1",
@@ -3478,10 +3489,11 @@
3478
3489
  ]
3479
3490
  }
3480
3491
  },
3481
- "--panel-stage-padding": "--space-10",
3482
- "--panel-stage-inline-padding": "--space-10",
3483
- "--panel-stage-gap": "--space-12"
3484
- }
3492
+ "--panel-stage-padding": "--space-16",
3493
+ "--panel-stage-inline-padding": "--space-24",
3494
+ "--panel-stage-gap": "--space-16"
3495
+ },
3496
+ "config": {}
3485
3497
  },
3486
3498
  "progressbar": {
3487
3499
  "name": "midnight-study",
@@ -3576,7 +3588,7 @@
3576
3588
  "--sectiondivider-lg-description": "--text-alternate",
3577
3589
  "--sectiondivider-lg-eyebrow": "--text-brand",
3578
3590
  "--sectiondivider-lg-border": "--color-transparent",
3579
- "--sectiondivider-lg-title-outline-color": "--surface-canvas-lowest",
3591
+ "--sectiondivider-lg-title-outline-color": "transparent",
3580
3592
  "--sectiondivider-lg-hairline-color": "--border-brand-medium",
3581
3593
  "--sectiondivider-md-title-font-family": "--font-display",
3582
3594
  "--sectiondivider-md-title-font-weight": "--font-weight-bold",
@@ -3605,7 +3617,7 @@
3605
3617
  "--sectiondivider-md-description": "--text-secondary",
3606
3618
  "--sectiondivider-md-eyebrow": "--text-tertiary",
3607
3619
  "--sectiondivider-md-border": "--color-transparent",
3608
- "--sectiondivider-md-title-outline-color": "--surface-accent-lowest",
3620
+ "--sectiondivider-md-title-outline-color": "transparent",
3609
3621
  "--sectiondivider-md-hairline-color": "--border-brand-medium",
3610
3622
  "--sectiondivider-sm-title-font-family": "--font-display",
3611
3623
  "--sectiondivider-sm-title-font-weight": "--font-weight-medium",
@@ -3634,7 +3646,7 @@
3634
3646
  "--sectiondivider-sm-description": "--text-secondary",
3635
3647
  "--sectiondivider-sm-eyebrow": "--text-tertiary",
3636
3648
  "--sectiondivider-sm-border": "--color-transparent",
3637
- "--sectiondivider-sm-title-outline-color": "color-mix(in srgb, var(--surface-neutral-lowest) 25%, transparent)",
3649
+ "--sectiondivider-sm-title-outline-color": "transparent",
3638
3650
  "--sectiondivider-sm-hairline-color": "color-mix(in srgb, var(--border-brand-medium) 50%, transparent)"
3639
3651
  }
3640
3652
  },
@@ -3529,7 +3529,7 @@
3529
3529
  "--sectiondivider-lg-description": "--text-alternate",
3530
3530
  "--sectiondivider-lg-eyebrow": "--text-brand",
3531
3531
  "--sectiondivider-lg-border": "--color-transparent",
3532
- "--sectiondivider-lg-title-outline-color": "--surface-canvas-lowest",
3532
+ "--sectiondivider-lg-title-outline-color": "transparent",
3533
3533
  "--sectiondivider-lg-hairline-color": "--border-brand-medium",
3534
3534
  "--sectiondivider-md-title-font-family": "--font-display",
3535
3535
  "--sectiondivider-md-title-font-weight": "--font-weight-bold",
@@ -3558,7 +3558,7 @@
3558
3558
  "--sectiondivider-md-description": "--text-secondary",
3559
3559
  "--sectiondivider-md-eyebrow": "--text-tertiary",
3560
3560
  "--sectiondivider-md-border": "--color-transparent",
3561
- "--sectiondivider-md-title-outline-color": "--surface-accent-lowest",
3561
+ "--sectiondivider-md-title-outline-color": "transparent",
3562
3562
  "--sectiondivider-md-hairline-color": "--border-brand-medium",
3563
3563
  "--sectiondivider-sm-title-font-family": "--font-display",
3564
3564
  "--sectiondivider-sm-title-font-weight": "--font-weight-medium",
@@ -3587,7 +3587,7 @@
3587
3587
  "--sectiondivider-sm-description": "--text-secondary",
3588
3588
  "--sectiondivider-sm-eyebrow": "--text-tertiary",
3589
3589
  "--sectiondivider-sm-border": "--color-transparent",
3590
- "--sectiondivider-sm-title-outline-color": "color-mix(in srgb, var(--surface-neutral-lowest) 25%, transparent)",
3590
+ "--sectiondivider-sm-title-outline-color": "transparent",
3591
3591
  "--sectiondivider-sm-hairline-color": "color-mix(in srgb, var(--border-brand-medium) 50%, transparent)"
3592
3592
  }
3593
3593
  },
@@ -3560,7 +3560,7 @@
3560
3560
  "--sectiondivider-lg-description": "--text-alternate",
3561
3561
  "--sectiondivider-lg-eyebrow": "--text-brand",
3562
3562
  "--sectiondivider-lg-border": "--color-transparent",
3563
- "--sectiondivider-lg-title-outline-color": "--surface-canvas-lowest",
3563
+ "--sectiondivider-lg-title-outline-color": "transparent",
3564
3564
  "--sectiondivider-lg-hairline-color": "--border-brand-medium",
3565
3565
  "--sectiondivider-md-title-font-family": "--font-display",
3566
3566
  "--sectiondivider-md-title-font-weight": "--font-weight-bold",
@@ -3589,7 +3589,7 @@
3589
3589
  "--sectiondivider-md-description": "--text-secondary",
3590
3590
  "--sectiondivider-md-eyebrow": "--text-tertiary",
3591
3591
  "--sectiondivider-md-border": "--color-transparent",
3592
- "--sectiondivider-md-title-outline-color": "--surface-accent-lowest",
3592
+ "--sectiondivider-md-title-outline-color": "transparent",
3593
3593
  "--sectiondivider-md-hairline-color": "--border-brand-medium",
3594
3594
  "--sectiondivider-sm-title-font-family": "--font-display",
3595
3595
  "--sectiondivider-sm-title-font-weight": "--font-weight-medium",
@@ -3618,7 +3618,7 @@
3618
3618
  "--sectiondivider-sm-description": "--text-secondary",
3619
3619
  "--sectiondivider-sm-eyebrow": "--text-tertiary",
3620
3620
  "--sectiondivider-sm-border": "--color-transparent",
3621
- "--sectiondivider-sm-title-outline-color": "color-mix(in srgb, var(--surface-neutral-lowest) 25%, transparent)",
3621
+ "--sectiondivider-sm-title-outline-color": "transparent",
3622
3622
  "--sectiondivider-sm-hairline-color": "color-mix(in srgb, var(--border-brand-medium) 50%, transparent)"
3623
3623
  }
3624
3624
  },
@@ -3543,7 +3543,7 @@
3543
3543
  "--sectiondivider-lg-description": "--text-alternate",
3544
3544
  "--sectiondivider-lg-eyebrow": "--text-brand",
3545
3545
  "--sectiondivider-lg-border": "--color-transparent",
3546
- "--sectiondivider-lg-title-outline-color": "--surface-canvas-lowest",
3546
+ "--sectiondivider-lg-title-outline-color": "transparent",
3547
3547
  "--sectiondivider-lg-hairline-color": "--border-brand-medium",
3548
3548
  "--sectiondivider-md-title-font-family": "--font-display",
3549
3549
  "--sectiondivider-md-title-font-weight": "--font-weight-bold",
@@ -3572,7 +3572,7 @@
3572
3572
  "--sectiondivider-md-description": "--text-secondary",
3573
3573
  "--sectiondivider-md-eyebrow": "--text-tertiary",
3574
3574
  "--sectiondivider-md-border": "--color-transparent",
3575
- "--sectiondivider-md-title-outline-color": "--surface-accent-lowest",
3575
+ "--sectiondivider-md-title-outline-color": "transparent",
3576
3576
  "--sectiondivider-md-hairline-color": "--border-brand-medium",
3577
3577
  "--sectiondivider-sm-title-font-family": "--font-display",
3578
3578
  "--sectiondivider-sm-title-font-weight": "--font-weight-medium",
@@ -3601,7 +3601,7 @@
3601
3601
  "--sectiondivider-sm-description": "--text-secondary",
3602
3602
  "--sectiondivider-sm-eyebrow": "--text-tertiary",
3603
3603
  "--sectiondivider-sm-border": "--color-transparent",
3604
- "--sectiondivider-sm-title-outline-color": "color-mix(in srgb, var(--surface-neutral-lowest) 25%, transparent)",
3604
+ "--sectiondivider-sm-title-outline-color": "transparent",
3605
3605
  "--sectiondivider-sm-hairline-color": "color-mix(in srgb, var(--border-brand-medium) 50%, transparent)"
3606
3606
  }
3607
3607
  },