@motion-proto/live-tokens 0.60.1 → 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 (49) 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 +107 -0
  4. package/dist-plugin/{chunk-XWXIMTWZ.js → chunk-7TQQTHI6.js} +10 -1
  5. package/dist-plugin/{chunk-LW4SR7AZ.js → chunk-O6GQ6GBH.js} +1 -1
  6. package/dist-plugin/{chunk-E5QYON4L.js → chunk-OPYOK2CA.js} +77 -26
  7. package/dist-plugin/generateColorsAndType/index.js +2 -2
  8. package/dist-plugin/index.cjs +179 -25
  9. package/dist-plugin/index.js +99 -4
  10. package/dist-plugin/tokensCssMigrations/index.cjs +76 -25
  11. package/dist-plugin/tokensCssMigrations/index.js +2 -2
  12. package/package.json +6 -1
  13. package/src/app/site.css +16 -0
  14. package/src/editor/component-editor/CardEditor.svelte +7 -1
  15. package/src/editor/component-editor/ImageLightboxEditor.svelte +2 -1
  16. package/src/editor/component-editor/scaffolding/VariantGroup.svelte +25 -2
  17. package/src/editor/core/sketch/maskField.ts +70 -34
  18. package/src/editor/core/sketch/sketchLayer.ts +24 -3
  19. package/src/editor/core/sketch/sketchPresets.ts +10 -11
  20. package/src/editor/core/sketch/sketchStore.ts +89 -18
  21. package/src/editor/docs/Docs.svelte +1 -0
  22. package/src/editor/docs/chapters.ts +1 -0
  23. package/src/editor/docs/content/light-and-dark.md +90 -0
  24. package/src/editor/docs/content/sketch-mode.md +7 -2
  25. package/src/editor/docs/content.generated.ts +2 -1
  26. package/src/editor/overlay/LiveTokensRouter.svelte +8 -0
  27. package/src/editor/ui/sections/textStyles.ts +15 -1
  28. package/src/editor/ui/sketch/SketchTab.svelte +33 -81
  29. package/src/live-tokens/data/colors-and-type/midnight-study.json +40 -30
  30. package/src/live-tokens/data/themes/autumn.json +4 -3
  31. package/src/live-tokens/data/themes/halloween.json +4 -3
  32. package/src/live-tokens/data/themes/midnight-study.json +62 -49
  33. package/src/live-tokens/data/themes/ocean.json +4 -3
  34. package/src/live-tokens/data/themes/royal-velvet.json +4 -3
  35. package/src/live-tokens/data/themes/sketchy.json +4 -3
  36. package/src/live-tokens/data/themes/spring-meadow.json +4 -3
  37. package/src/live-tokens/data/themes/sunset.json +4 -3
  38. package/src/live-tokens/data/tokens.generated.css +5 -0
  39. package/src/system/backdrop/backdrop.ts +197 -0
  40. package/src/system/backdrop/index.ts +16 -0
  41. package/src/system/backdrop/watch.ts +139 -0
  42. package/src/system/components/Card.svelte +27 -9
  43. package/src/system/components/FloatingTokenTags.svelte +1 -1
  44. package/src/system/components/ImageLightbox.svelte +8 -4
  45. package/src/system/components/SectionDivider.svelte +3 -3
  46. package/src/system/components/SegmentedControl.svelte +11 -9
  47. package/src/system/styles/tokens.css +33 -5
  48. package/template/src/pages/Home.svelte +1 -11
  49. package/src/system/internal/backgroundContrast.ts +0 -62
@@ -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
+ }
@@ -3166,6 +3166,7 @@
3166
3166
  "createdAt": "2026-05-26T02:03:38.863Z",
3167
3167
  "updatedAt": "2026-08-19T22:39:32.785Z",
3168
3168
  "aliases": {
3169
+ "--imagelightbox-tile-surface": "--color-transparent",
3169
3170
  "--imagelightbox-tile-radius": "--radius-4xl",
3170
3171
  "--imagelightbox-tile-border": "--color-transparent",
3171
3172
  "--imagelightbox-tile-border-width": "--border-width-0",
@@ -3529,7 +3530,7 @@
3529
3530
  "--sectiondivider-lg-description": "--text-alternate",
3530
3531
  "--sectiondivider-lg-eyebrow": "--text-brand",
3531
3532
  "--sectiondivider-lg-border": "--color-transparent",
3532
- "--sectiondivider-lg-title-outline-color": "--surface-canvas-lowest",
3533
+ "--sectiondivider-lg-title-outline-color": "transparent",
3533
3534
  "--sectiondivider-lg-hairline-color": "--border-brand-medium",
3534
3535
  "--sectiondivider-md-title-font-family": "--font-display",
3535
3536
  "--sectiondivider-md-title-font-weight": "--font-weight-bold",
@@ -3558,7 +3559,7 @@
3558
3559
  "--sectiondivider-md-description": "--text-secondary",
3559
3560
  "--sectiondivider-md-eyebrow": "--text-tertiary",
3560
3561
  "--sectiondivider-md-border": "--color-transparent",
3561
- "--sectiondivider-md-title-outline-color": "--surface-accent-lowest",
3562
+ "--sectiondivider-md-title-outline-color": "transparent",
3562
3563
  "--sectiondivider-md-hairline-color": "--border-brand-medium",
3563
3564
  "--sectiondivider-sm-title-font-family": "--font-display",
3564
3565
  "--sectiondivider-sm-title-font-weight": "--font-weight-medium",
@@ -3587,7 +3588,7 @@
3587
3588
  "--sectiondivider-sm-description": "--text-secondary",
3588
3589
  "--sectiondivider-sm-eyebrow": "--text-tertiary",
3589
3590
  "--sectiondivider-sm-border": "--color-transparent",
3590
- "--sectiondivider-sm-title-outline-color": "color-mix(in srgb, var(--surface-neutral-lowest) 25%, transparent)",
3591
+ "--sectiondivider-sm-title-outline-color": "transparent",
3591
3592
  "--sectiondivider-sm-hairline-color": "color-mix(in srgb, var(--border-brand-medium) 50%, transparent)"
3592
3593
  }
3593
3594
  },
@@ -3205,6 +3205,7 @@
3205
3205
  "createdAt": "2026-05-26T02:03:38.863Z",
3206
3206
  "updatedAt": "2026-08-19T22:39:32.785Z",
3207
3207
  "aliases": {
3208
+ "--imagelightbox-tile-surface": "--color-transparent",
3208
3209
  "--imagelightbox-tile-radius": "--radius-none",
3209
3210
  "--imagelightbox-tile-border": "--color-transparent",
3210
3211
  "--imagelightbox-tile-border-width": "--border-width-2",
@@ -3568,7 +3569,7 @@
3568
3569
  "--sectiondivider-lg-description": "--text-alternate",
3569
3570
  "--sectiondivider-lg-eyebrow": "--text-brand",
3570
3571
  "--sectiondivider-lg-border": "--color-transparent",
3571
- "--sectiondivider-lg-title-outline-color": "--surface-canvas-lowest",
3572
+ "--sectiondivider-lg-title-outline-color": "transparent",
3572
3573
  "--sectiondivider-lg-hairline-color": "--border-brand-medium",
3573
3574
  "--sectiondivider-md-title-font-family": "--font-display",
3574
3575
  "--sectiondivider-md-title-font-weight": "--font-weight-bold",
@@ -3597,7 +3598,7 @@
3597
3598
  "--sectiondivider-md-description": "--text-secondary",
3598
3599
  "--sectiondivider-md-eyebrow": "--text-tertiary",
3599
3600
  "--sectiondivider-md-border": "--color-transparent",
3600
- "--sectiondivider-md-title-outline-color": "--surface-accent-lowest",
3601
+ "--sectiondivider-md-title-outline-color": "transparent",
3601
3602
  "--sectiondivider-md-hairline-color": "--border-brand-medium",
3602
3603
  "--sectiondivider-sm-title-font-family": "--font-display",
3603
3604
  "--sectiondivider-sm-title-font-weight": "--font-weight-medium",
@@ -3626,7 +3627,7 @@
3626
3627
  "--sectiondivider-sm-description": "--text-secondary",
3627
3628
  "--sectiondivider-sm-eyebrow": "--text-tertiary",
3628
3629
  "--sectiondivider-sm-border": "--color-transparent",
3629
- "--sectiondivider-sm-title-outline-color": "color-mix(in srgb, var(--surface-neutral-lowest) 25%, transparent)",
3630
+ "--sectiondivider-sm-title-outline-color": "transparent",
3630
3631
  "--sectiondivider-sm-hairline-color": "color-mix(in srgb, var(--border-brand-medium) 50%, transparent)"
3631
3632
  }
3632
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",
@@ -3212,6 +3223,7 @@
3212
3223
  "createdAt": "2026-05-26T02:03:38.863Z",
3213
3224
  "updatedAt": "2026-08-19T22:39:32.785Z",
3214
3225
  "aliases": {
3226
+ "--imagelightbox-tile-surface": "--color-transparent",
3215
3227
  "--imagelightbox-tile-radius": "--radius-2xl",
3216
3228
  "--imagelightbox-tile-border": "--color-transparent",
3217
3229
  "--imagelightbox-tile-border-width": "--border-width-0",
@@ -3452,8 +3464,8 @@
3452
3464
  "panel": {
3453
3465
  "name": "midnight-study",
3454
3466
  "component": "panel",
3455
- "createdAt": "2026-06-01T09:34:52.417Z",
3456
- "updatedAt": "2026-08-19T22:39:32.785Z",
3467
+ "createdAt": "2026-08-27T17:03:50.744Z",
3468
+ "updatedAt": "2026-08-27T17:03:50.744Z",
3457
3469
  "aliases": {
3458
3470
  "--panel-frame-border": "--border-neutral",
3459
3471
  "--panel-frame-border-width": "--border-width-1",
@@ -3477,10 +3489,11 @@
3477
3489
  ]
3478
3490
  }
3479
3491
  },
3480
- "--panel-stage-padding": "--space-10",
3481
- "--panel-stage-inline-padding": "--space-10",
3482
- "--panel-stage-gap": "--space-12"
3483
- }
3492
+ "--panel-stage-padding": "--space-16",
3493
+ "--panel-stage-inline-padding": "--space-24",
3494
+ "--panel-stage-gap": "--space-16"
3495
+ },
3496
+ "config": {}
3484
3497
  },
3485
3498
  "progressbar": {
3486
3499
  "name": "midnight-study",
@@ -3575,7 +3588,7 @@
3575
3588
  "--sectiondivider-lg-description": "--text-alternate",
3576
3589
  "--sectiondivider-lg-eyebrow": "--text-brand",
3577
3590
  "--sectiondivider-lg-border": "--color-transparent",
3578
- "--sectiondivider-lg-title-outline-color": "--surface-canvas-lowest",
3591
+ "--sectiondivider-lg-title-outline-color": "transparent",
3579
3592
  "--sectiondivider-lg-hairline-color": "--border-brand-medium",
3580
3593
  "--sectiondivider-md-title-font-family": "--font-display",
3581
3594
  "--sectiondivider-md-title-font-weight": "--font-weight-bold",
@@ -3604,7 +3617,7 @@
3604
3617
  "--sectiondivider-md-description": "--text-secondary",
3605
3618
  "--sectiondivider-md-eyebrow": "--text-tertiary",
3606
3619
  "--sectiondivider-md-border": "--color-transparent",
3607
- "--sectiondivider-md-title-outline-color": "--surface-accent-lowest",
3620
+ "--sectiondivider-md-title-outline-color": "transparent",
3608
3621
  "--sectiondivider-md-hairline-color": "--border-brand-medium",
3609
3622
  "--sectiondivider-sm-title-font-family": "--font-display",
3610
3623
  "--sectiondivider-sm-title-font-weight": "--font-weight-medium",
@@ -3633,7 +3646,7 @@
3633
3646
  "--sectiondivider-sm-description": "--text-secondary",
3634
3647
  "--sectiondivider-sm-eyebrow": "--text-tertiary",
3635
3648
  "--sectiondivider-sm-border": "--color-transparent",
3636
- "--sectiondivider-sm-title-outline-color": "color-mix(in srgb, var(--surface-neutral-lowest) 25%, transparent)",
3649
+ "--sectiondivider-sm-title-outline-color": "transparent",
3637
3650
  "--sectiondivider-sm-hairline-color": "color-mix(in srgb, var(--border-brand-medium) 50%, transparent)"
3638
3651
  }
3639
3652
  },
@@ -3165,6 +3165,7 @@
3165
3165
  "createdAt": "2026-05-26T02:03:38.863Z",
3166
3166
  "updatedAt": "2026-08-19T22:39:32.785Z",
3167
3167
  "aliases": {
3168
+ "--imagelightbox-tile-surface": "--color-transparent",
3168
3169
  "--imagelightbox-tile-radius": "--radius-4xl",
3169
3170
  "--imagelightbox-tile-border": "--color-transparent",
3170
3171
  "--imagelightbox-tile-border-width": "--border-width-0",
@@ -3528,7 +3529,7 @@
3528
3529
  "--sectiondivider-lg-description": "--text-alternate",
3529
3530
  "--sectiondivider-lg-eyebrow": "--text-brand",
3530
3531
  "--sectiondivider-lg-border": "--color-transparent",
3531
- "--sectiondivider-lg-title-outline-color": "--surface-canvas-lowest",
3532
+ "--sectiondivider-lg-title-outline-color": "transparent",
3532
3533
  "--sectiondivider-lg-hairline-color": "--border-brand-medium",
3533
3534
  "--sectiondivider-md-title-font-family": "--font-display",
3534
3535
  "--sectiondivider-md-title-font-weight": "--font-weight-bold",
@@ -3557,7 +3558,7 @@
3557
3558
  "--sectiondivider-md-description": "--text-secondary",
3558
3559
  "--sectiondivider-md-eyebrow": "--text-tertiary",
3559
3560
  "--sectiondivider-md-border": "--color-transparent",
3560
- "--sectiondivider-md-title-outline-color": "--surface-accent-lowest",
3561
+ "--sectiondivider-md-title-outline-color": "transparent",
3561
3562
  "--sectiondivider-md-hairline-color": "--border-brand-medium",
3562
3563
  "--sectiondivider-sm-title-font-family": "--font-display",
3563
3564
  "--sectiondivider-sm-title-font-weight": "--font-weight-medium",
@@ -3586,7 +3587,7 @@
3586
3587
  "--sectiondivider-sm-description": "--text-secondary",
3587
3588
  "--sectiondivider-sm-eyebrow": "--text-tertiary",
3588
3589
  "--sectiondivider-sm-border": "--color-transparent",
3589
- "--sectiondivider-sm-title-outline-color": "color-mix(in srgb, var(--surface-neutral-lowest) 25%, transparent)",
3590
+ "--sectiondivider-sm-title-outline-color": "transparent",
3590
3591
  "--sectiondivider-sm-hairline-color": "color-mix(in srgb, var(--border-brand-medium) 50%, transparent)"
3591
3592
  }
3592
3593
  },
@@ -3196,6 +3196,7 @@
3196
3196
  "createdAt": "2026-05-26T02:03:38.863Z",
3197
3197
  "updatedAt": "2026-08-19T22:39:32.785Z",
3198
3198
  "aliases": {
3199
+ "--imagelightbox-tile-surface": "--color-transparent",
3199
3200
  "--imagelightbox-tile-radius": "--radius-2xl",
3200
3201
  "--imagelightbox-tile-border": "--color-transparent",
3201
3202
  "--imagelightbox-tile-border-width": "--border-width-1",
@@ -3559,7 +3560,7 @@
3559
3560
  "--sectiondivider-lg-description": "--text-alternate",
3560
3561
  "--sectiondivider-lg-eyebrow": "--text-brand",
3561
3562
  "--sectiondivider-lg-border": "--color-transparent",
3562
- "--sectiondivider-lg-title-outline-color": "--surface-canvas-lowest",
3563
+ "--sectiondivider-lg-title-outline-color": "transparent",
3563
3564
  "--sectiondivider-lg-hairline-color": "--border-brand-medium",
3564
3565
  "--sectiondivider-md-title-font-family": "--font-display",
3565
3566
  "--sectiondivider-md-title-font-weight": "--font-weight-bold",
@@ -3588,7 +3589,7 @@
3588
3589
  "--sectiondivider-md-description": "--text-secondary",
3589
3590
  "--sectiondivider-md-eyebrow": "--text-tertiary",
3590
3591
  "--sectiondivider-md-border": "--color-transparent",
3591
- "--sectiondivider-md-title-outline-color": "--surface-accent-lowest",
3592
+ "--sectiondivider-md-title-outline-color": "transparent",
3592
3593
  "--sectiondivider-md-hairline-color": "--border-brand-medium",
3593
3594
  "--sectiondivider-sm-title-font-family": "--font-display",
3594
3595
  "--sectiondivider-sm-title-font-weight": "--font-weight-medium",
@@ -3617,7 +3618,7 @@
3617
3618
  "--sectiondivider-sm-description": "--text-secondary",
3618
3619
  "--sectiondivider-sm-eyebrow": "--text-tertiary",
3619
3620
  "--sectiondivider-sm-border": "--color-transparent",
3620
- "--sectiondivider-sm-title-outline-color": "color-mix(in srgb, var(--surface-neutral-lowest) 25%, transparent)",
3621
+ "--sectiondivider-sm-title-outline-color": "transparent",
3621
3622
  "--sectiondivider-sm-hairline-color": "color-mix(in srgb, var(--border-brand-medium) 50%, transparent)"
3622
3623
  }
3623
3624
  },