@motion-proto/live-tokens 0.83.0 → 0.85.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 (48) hide show
  1. package/.claude/skills/live-tokens-create-component/references/token-naming.md +0 -1
  2. package/CHANGELOG.md +72 -0
  3. package/dist-plugin/{chunk-RFVYPNRO.js → chunk-GWMEYBZ2.js} +43 -1
  4. package/dist-plugin/{chunk-6JKUYCPL.js → chunk-ONYAIXCZ.js} +104 -1
  5. package/dist-plugin/{chunk-LBZISJPG.js → chunk-W5VQV32K.js} +1 -1
  6. package/dist-plugin/index.cjs +152 -7
  7. package/dist-plugin/index.js +3 -3
  8. package/dist-plugin/migrateData/index.cjs +108 -5
  9. package/dist-plugin/migrateData/index.js +2 -2
  10. package/dist-plugin/setColors/index.cjs +104 -1
  11. package/dist-plugin/setColors/index.js +1 -1
  12. package/dist-plugin/setGeometry/index.cjs +105 -3
  13. package/dist-plugin/setGeometry/index.js +2 -3
  14. package/dist-plugin/tokensCssMigrations/index.cjs +43 -1
  15. package/dist-plugin/tokensCssMigrations/index.js +1 -1
  16. package/package.json +1 -1
  17. package/src/editor/core/components/aliasKinds.ts +1 -1
  18. package/src/editor/core/store/editorPersistence.ts +46 -23
  19. package/src/editor/core/store/editorStore.ts +1 -5
  20. package/src/editor/core/store/editorTypes.ts +11 -7
  21. package/src/editor/core/themes/migrations/2026-09-20-scrim-color-and-opacity.ts +45 -0
  22. package/src/editor/core/themes/migrations/2026-09-21-scrim-surface.ts +56 -0
  23. package/src/editor/core/themes/migrations/2026-09-21-wash-color-and-opacity.ts +51 -0
  24. package/src/editor/core/themes/migrations/index.ts +6 -0
  25. package/src/editor/core/themes/slices/washes.ts +59 -77
  26. package/src/editor/skill-atlas/skillSources.generated.ts +1 -1
  27. package/src/editor/ui/UIPaletteSelector.svelte +5 -1
  28. package/src/editor/ui/sections/WashesSection.svelte +100 -99
  29. package/src/live-tokens/data/colors-and-type/autumn.json +9 -7
  30. package/src/live-tokens/data/colors-and-type/default.json +9 -7
  31. package/src/live-tokens/data/colors-and-type/halloween.json +9 -7
  32. package/src/live-tokens/data/colors-and-type/midnight-study.json +9 -7
  33. package/src/live-tokens/data/colors-and-type/ocean.json +9 -7
  34. package/src/live-tokens/data/colors-and-type/royal-velvet.json +9 -7
  35. package/src/live-tokens/data/colors-and-type/sketchy.json +9 -7
  36. package/src/live-tokens/data/colors-and-type/spring-meadow.json +9 -7
  37. package/src/live-tokens/data/colors-and-type/sunset.json +9 -7
  38. package/src/live-tokens/data/themes/autumn.json +11 -9
  39. package/src/live-tokens/data/themes/halloween.json +11 -9
  40. package/src/live-tokens/data/themes/midnight-study.json +11 -9
  41. package/src/live-tokens/data/themes/ocean.json +11 -9
  42. package/src/live-tokens/data/themes/royal-velvet.json +11 -9
  43. package/src/live-tokens/data/themes/sketchy.json +11 -9
  44. package/src/live-tokens/data/themes/spring-meadow.json +11 -9
  45. package/src/live-tokens/data/themes/sunset.json +11 -9
  46. package/src/live-tokens/data/tokens.generated.css +8 -6
  47. package/src/system/components/ImageLightbox.svelte +5 -19
  48. package/src/system/styles/tokens.css +22 -9
@@ -2271,12 +2271,14 @@
2271
2271
  "--columns-max-width": "1440px",
2272
2272
  "--columns-gutter": "32px",
2273
2273
  "--columns-margin": "0px",
2274
- "--scrim-low": "color-mix(in srgb, var(--surface-neutral-lowest) 38%, transparent)",
2275
- "--scrim": "color-mix(in srgb, var(--surface-neutral-lowest) 51%, transparent)",
2276
- "--scrim-high": "color-mix(in srgb, var(--surface-neutral-lowest) 64%, transparent)",
2277
- "--tint-low": "color-mix(in srgb, var(--text-primary) 5%, transparent)",
2278
- "--tint": "color-mix(in srgb, var(--text-primary) 10%, transparent)",
2279
- "--tint-high": "color-mix(in srgb, var(--text-primary) 15%, transparent)",
2274
+ "--scrim-color": "var(--surface-neutral-lowest)",
2275
+ "--scrim-opacity-low": "0.7",
2276
+ "--scrim-opacity": "0.8",
2277
+ "--scrim-opacity-high": "0.9",
2278
+ "--tint-color": "var(--text-primary)",
2279
+ "--tint-opacity-low": "0.05",
2280
+ "--tint-opacity": "0.1",
2281
+ "--tint-opacity-high": "0.15",
2280
2282
  "--shadow-sm": "1px 1px 2px hsla(237, 18%, 3%, 0.9)",
2281
2283
  "--shadow-md": "3px 3px 6px hsla(237, 18%, 3%, 0.9)",
2282
2284
  "--shadow-lg": "5px 5px 9px hsla(237, 18%, 3%, 0.9)",
@@ -2528,7 +2530,7 @@
2528
2530
  "family": null
2529
2531
  }
2530
2532
  ],
2531
- "schemaVersion": 8
2533
+ "schemaVersion": 9
2532
2534
  },
2533
2535
  "componentConfigs": {
2534
2536
  "badge": {
@@ -3197,7 +3199,7 @@
3197
3199
  "--imagelightbox-tile-border": "--color-transparent",
3198
3200
  "--imagelightbox-tile-border-width": "--border-width-0",
3199
3201
  "--imagelightbox-tile-shadow": "--shadow-md",
3200
- "--imagelightbox-scrim-surface": "color-mix(in srgb, var(--color-neutral-950) 76%, transparent)",
3202
+ "--imagelightbox-scrim-surface": "--scrim-high",
3201
3203
  "--imagelightbox-chrome-surface": "--surface-neutral-low",
3202
3204
  "--imagelightbox-chrome-border": "--border-brand",
3203
3205
  "--imagelightbox-chrome-border-width": "--border-width-1",
@@ -4052,5 +4054,5 @@
4052
4054
  }
4053
4055
  }
4054
4056
  },
4055
- "componentSchemaVersion": 36
4057
+ "componentSchemaVersion": 38
4056
4058
  }
@@ -2228,12 +2228,14 @@
2228
2228
  "--columns-max-width": "1440px",
2229
2229
  "--columns-gutter": "32px",
2230
2230
  "--columns-margin": "0px",
2231
- "--scrim-low": "color-mix(in srgb, var(--surface-neutral-lowest) 38%, transparent)",
2232
- "--scrim": "color-mix(in srgb, var(--surface-neutral-lowest) 51%, transparent)",
2233
- "--scrim-high": "color-mix(in srgb, var(--surface-neutral-lowest) 64%, transparent)",
2234
- "--tint-low": "color-mix(in srgb, var(--text-primary) 5%, transparent)",
2235
- "--tint": "color-mix(in srgb, var(--text-primary) 10%, transparent)",
2236
- "--tint-high": "color-mix(in srgb, var(--text-primary) 15%, transparent)",
2231
+ "--scrim-color": "var(--surface-neutral-lowest)",
2232
+ "--scrim-opacity-low": "0.7",
2233
+ "--scrim-opacity": "0.8",
2234
+ "--scrim-opacity-high": "0.9",
2235
+ "--tint-color": "var(--text-primary)",
2236
+ "--tint-opacity-low": "0.05",
2237
+ "--tint-opacity": "0.1",
2238
+ "--tint-opacity-high": "0.15",
2237
2239
  "--shadow-sm": "1px 1px 2px hsla(237, 18%, 3%, 0.2)",
2238
2240
  "--shadow-md": "3px 3px 6px hsla(237, 18%, 3%, 0.2)",
2239
2241
  "--shadow-lg": "5px 5px 9px hsla(237, 18%, 3%, 0.2)",
@@ -2409,7 +2411,7 @@
2409
2411
  "family": null
2410
2412
  }
2411
2413
  ],
2412
- "schemaVersion": 8,
2414
+ "schemaVersion": 9,
2413
2415
  "gradients": [
2414
2416
  {
2415
2417
  "variable": "--gradient-1",
@@ -3139,7 +3141,7 @@
3139
3141
  "--imagelightbox-tile-border": "--color-transparent",
3140
3142
  "--imagelightbox-tile-border-width": "--border-width-0",
3141
3143
  "--imagelightbox-tile-shadow": "--shadow-md",
3142
- "--imagelightbox-scrim-surface": "color-mix(in srgb, var(--color-neutral-950) 76%, transparent)",
3144
+ "--imagelightbox-scrim-surface": "--scrim-high",
3143
3145
  "--imagelightbox-chrome-surface": "--surface-neutral-low",
3144
3146
  "--imagelightbox-chrome-border": "--border-brand",
3145
3147
  "--imagelightbox-chrome-border-width": "--border-width-1",
@@ -3993,5 +3995,5 @@
3993
3995
  }
3994
3996
  }
3995
3997
  },
3996
- "componentSchemaVersion": 36
3998
+ "componentSchemaVersion": 38
3997
3999
  }
@@ -2260,12 +2260,14 @@
2260
2260
  "--columns-max-width": "1440px",
2261
2261
  "--columns-gutter": "32px",
2262
2262
  "--columns-margin": "0px",
2263
- "--scrim-low": "color-mix(in srgb, var(--surface-neutral-lowest) 38%, transparent)",
2264
- "--scrim": "color-mix(in srgb, var(--surface-neutral-lowest) 51%, transparent)",
2265
- "--scrim-high": "color-mix(in srgb, var(--surface-neutral-lowest) 64%, transparent)",
2266
- "--tint-low": "color-mix(in srgb, var(--text-primary) 5%, transparent)",
2267
- "--tint": "color-mix(in srgb, var(--text-primary) 10%, transparent)",
2268
- "--tint-high": "color-mix(in srgb, var(--text-primary) 15%, transparent)",
2263
+ "--scrim-color": "var(--surface-neutral-lowest)",
2264
+ "--scrim-opacity-low": "0.7",
2265
+ "--scrim-opacity": "0.8",
2266
+ "--scrim-opacity-high": "0.9",
2267
+ "--tint-color": "var(--text-primary)",
2268
+ "--tint-opacity-low": "0.05",
2269
+ "--tint-opacity": "0.1",
2270
+ "--tint-opacity-high": "0.15",
2269
2271
  "--shadow-sm": "1px 1px 2px hsla(237, 18%, 3%, 0.9)",
2270
2272
  "--shadow-md": "3px 3px 6px hsla(237, 18%, 3%, 0.9)",
2271
2273
  "--shadow-lg": "5px 5px 9px hsla(237, 18%, 3%, 0.9)",
@@ -2440,7 +2442,7 @@
2440
2442
  "family": null
2441
2443
  }
2442
2444
  ],
2443
- "schemaVersion": 8,
2445
+ "schemaVersion": 9,
2444
2446
  "gradients": [
2445
2447
  {
2446
2448
  "variable": "--gradient-1",
@@ -3170,7 +3172,7 @@
3170
3172
  "--imagelightbox-tile-border": "--color-transparent",
3171
3173
  "--imagelightbox-tile-border-width": "--border-width-1",
3172
3174
  "--imagelightbox-tile-shadow": "--shadow-md",
3173
- "--imagelightbox-scrim-surface": "color-mix(in srgb, var(--color-neutral-950) 76%, transparent)",
3175
+ "--imagelightbox-scrim-surface": "--scrim-high",
3174
3176
  "--imagelightbox-chrome-surface": "--surface-neutral-low",
3175
3177
  "--imagelightbox-chrome-border": "--border-brand",
3176
3178
  "--imagelightbox-chrome-border-width": "--border-width-2",
@@ -4024,5 +4026,5 @@
4024
4026
  }
4025
4027
  }
4026
4028
  },
4027
- "componentSchemaVersion": 36
4029
+ "componentSchemaVersion": 38
4028
4030
  }
@@ -2214,12 +2214,14 @@
2214
2214
  "--columns-max-width": "1440px",
2215
2215
  "--columns-gutter": "32px",
2216
2216
  "--columns-margin": "0px",
2217
- "--scrim-low": "color-mix(in srgb, var(--surface-neutral-lowest) 38%, transparent)",
2218
- "--scrim": "color-mix(in srgb, var(--surface-neutral-lowest) 51%, transparent)",
2219
- "--scrim-high": "color-mix(in srgb, var(--surface-neutral-lowest) 64%, transparent)",
2220
- "--tint-low": "color-mix(in srgb, var(--text-primary) 5%, transparent)",
2221
- "--tint": "color-mix(in srgb, var(--text-primary) 10%, transparent)",
2222
- "--tint-high": "color-mix(in srgb, var(--text-primary) 15%, transparent)",
2217
+ "--scrim-color": "var(--surface-neutral-lowest)",
2218
+ "--scrim-opacity-low": "0.7",
2219
+ "--scrim-opacity": "0.8",
2220
+ "--scrim-opacity-high": "0.9",
2221
+ "--tint-color": "var(--text-primary)",
2222
+ "--tint-opacity-low": "0.05",
2223
+ "--tint-opacity": "0.1",
2224
+ "--tint-opacity-high": "0.15",
2223
2225
  "--shadow-sm": "1px 1px 2px hsla(237, 18%, 3%, 0.2)",
2224
2226
  "--shadow-md": "3px 3px 6px hsla(237, 18%, 3%, 0.2)",
2225
2227
  "--shadow-lg": "5px 5px 9px hsla(237, 18%, 3%, 0.2)",
@@ -2485,7 +2487,7 @@
2485
2487
  "family": null
2486
2488
  }
2487
2489
  ],
2488
- "schemaVersion": 8
2490
+ "schemaVersion": 9
2489
2491
  },
2490
2492
  "componentConfigs": {
2491
2493
  "badge": {
@@ -3153,7 +3155,7 @@
3153
3155
  "--imagelightbox-tile-border": "--color-transparent",
3154
3156
  "--imagelightbox-tile-border-width": "--border-width-1",
3155
3157
  "--imagelightbox-tile-shadow": "--shadow-md",
3156
- "--imagelightbox-scrim-surface": "color-mix(in srgb, var(--color-neutral-950) 76%, transparent)",
3158
+ "--imagelightbox-scrim-surface": "--scrim-high",
3157
3159
  "--imagelightbox-chrome-surface": "--surface-neutral-low",
3158
3160
  "--imagelightbox-chrome-border": "--border-brand",
3159
3161
  "--imagelightbox-chrome-border-width": "--border-width-1",
@@ -4007,5 +4009,5 @@
4007
4009
  }
4008
4010
  }
4009
4011
  },
4010
- "componentSchemaVersion": 36
4012
+ "componentSchemaVersion": 38
4011
4013
  }
@@ -2214,12 +2214,14 @@
2214
2214
  "--columns-max-width": "1440px",
2215
2215
  "--columns-gutter": "32px",
2216
2216
  "--columns-margin": "0px",
2217
- "--scrim-low": "color-mix(in srgb, var(--surface-neutral-lowest) 38%, transparent)",
2218
- "--scrim": "color-mix(in srgb, var(--surface-neutral-lowest) 51%, transparent)",
2219
- "--scrim-high": "color-mix(in srgb, var(--surface-neutral-lowest) 64%, transparent)",
2220
- "--tint-low": "color-mix(in srgb, var(--text-primary) 5%, transparent)",
2221
- "--tint": "color-mix(in srgb, var(--text-primary) 10%, transparent)",
2222
- "--tint-high": "color-mix(in srgb, var(--text-primary) 15%, transparent)",
2217
+ "--scrim-color": "var(--surface-neutral-lowest)",
2218
+ "--scrim-opacity-low": "0.7",
2219
+ "--scrim-opacity": "0.8",
2220
+ "--scrim-opacity-high": "0.9",
2221
+ "--tint-color": "var(--text-primary)",
2222
+ "--tint-opacity-low": "0.05",
2223
+ "--tint-opacity": "0.1",
2224
+ "--tint-opacity-high": "0.15",
2223
2225
  "--shadow-sm": "1px 1px 2px hsla(237, 18%, 3%, 0.2)",
2224
2226
  "--shadow-md": "3px 3px 6px hsla(237, 18%, 3%, 0.2)",
2225
2227
  "--shadow-lg": "5px 5px 9px hsla(237, 18%, 3%, 0.2)",
@@ -2396,7 +2398,7 @@
2396
2398
  "family": null
2397
2399
  }
2398
2400
  ],
2399
- "schemaVersion": 8,
2401
+ "schemaVersion": 9,
2400
2402
  "gradients": [
2401
2403
  {
2402
2404
  "variable": "--gradient-1",
@@ -3126,7 +3128,7 @@
3126
3128
  "--imagelightbox-tile-border": "--color-transparent",
3127
3129
  "--imagelightbox-tile-border-width": "--border-width-0",
3128
3130
  "--imagelightbox-tile-shadow": "--shadow-md",
3129
- "--imagelightbox-scrim-surface": "color-mix(in srgb, var(--color-neutral-950) 76%, transparent)",
3131
+ "--imagelightbox-scrim-surface": "--scrim-high",
3130
3132
  "--imagelightbox-chrome-surface": "--surface-neutral-low",
3131
3133
  "--imagelightbox-chrome-border": "--border-brand",
3132
3134
  "--imagelightbox-chrome-border-width": "--border-width-1",
@@ -3980,5 +3982,5 @@
3980
3982
  }
3981
3983
  }
3982
3984
  },
3983
- "componentSchemaVersion": 36
3985
+ "componentSchemaVersion": 38
3984
3986
  }
@@ -2275,12 +2275,14 @@
2275
2275
  "--columns-max-width": "1440px",
2276
2276
  "--columns-gutter": "32px",
2277
2277
  "--columns-margin": "0px",
2278
- "--scrim-low": "color-mix(in srgb, var(--surface-neutral-lowest) 38%, transparent)",
2279
- "--scrim": "color-mix(in srgb, var(--surface-neutral-lowest) 51%, transparent)",
2280
- "--scrim-high": "color-mix(in srgb, var(--surface-neutral-lowest) 64%, transparent)",
2281
- "--tint-low": "color-mix(in srgb, var(--text-primary) 5%, transparent)",
2282
- "--tint": "color-mix(in srgb, var(--text-primary) 10%, transparent)",
2283
- "--tint-high": "color-mix(in srgb, var(--text-primary) 15%, transparent)",
2278
+ "--scrim-color": "var(--surface-neutral-lowest)",
2279
+ "--scrim-opacity-low": "0.7",
2280
+ "--scrim-opacity": "0.8",
2281
+ "--scrim-opacity-high": "0.9",
2282
+ "--tint-color": "var(--text-primary)",
2283
+ "--tint-opacity-low": "0.05",
2284
+ "--tint-opacity": "0.1",
2285
+ "--tint-opacity-high": "0.15",
2284
2286
  "--shadow-sm": "1px 1px 2px hsla(237, 18%, 3%, 0.9)",
2285
2287
  "--shadow-md": "3px 3px 6px hsla(237, 18%, 3%, 0.9)",
2286
2288
  "--shadow-lg": "5px 5px 9px hsla(237, 18%, 3%, 0.9)",
@@ -2448,7 +2450,7 @@
2448
2450
  "family": null
2449
2451
  }
2450
2452
  ],
2451
- "schemaVersion": 8,
2453
+ "schemaVersion": 9,
2452
2454
  "gradients": [
2453
2455
  {
2454
2456
  "variable": "--gradient-1",
@@ -3178,7 +3180,7 @@
3178
3180
  "--imagelightbox-tile-border": "--color-transparent",
3179
3181
  "--imagelightbox-tile-border-width": "--border-width-0",
3180
3182
  "--imagelightbox-tile-shadow": "--shadow-md",
3181
- "--imagelightbox-scrim-surface": "color-mix(in srgb, var(--color-neutral-950) 76%, transparent)",
3183
+ "--imagelightbox-scrim-surface": "--scrim-high",
3182
3184
  "--imagelightbox-chrome-surface": "--surface-neutral-low",
3183
3185
  "--imagelightbox-chrome-border": "--border-brand",
3184
3186
  "--imagelightbox-chrome-border-width": "--border-width-1",
@@ -4032,5 +4034,5 @@
4032
4034
  }
4033
4035
  }
4034
4036
  },
4035
- "componentSchemaVersion": 36
4037
+ "componentSchemaVersion": 38
4036
4038
  }
@@ -11,12 +11,14 @@
11
11
  --columns-max-width: 1440px;
12
12
  --columns-gutter: 32px;
13
13
  --columns-margin: 0px;
14
- --scrim-low: color-mix(in srgb, var(--surface-neutral-lowest) 38%, transparent);
15
- --scrim: color-mix(in srgb, var(--surface-neutral-lowest) 51%, transparent);
16
- --scrim-high: color-mix(in srgb, var(--surface-neutral-lowest) 64%, transparent);
17
- --tint-low: color-mix(in srgb, var(--text-primary) 5%, transparent);
18
- --tint: color-mix(in srgb, var(--text-primary) 10%, transparent);
19
- --tint-high: color-mix(in srgb, var(--text-primary) 15%, transparent);
14
+ --scrim-color: var(--surface-neutral-lowest);
15
+ --scrim-opacity-low: 0.7;
16
+ --scrim-opacity: 0.8;
17
+ --scrim-opacity-high: 0.9;
18
+ --tint-color: var(--text-primary);
19
+ --tint-opacity-low: 0.05;
20
+ --tint-opacity: 0.1;
21
+ --tint-opacity-high: 0.15;
20
22
  --shadow-sm: 1px 1px 2px hsla(237, 18%, 3%, 0.9);
21
23
  --shadow-md: 3px 3px 6px hsla(237, 18%, 3%, 0.9);
22
24
  --shadow-lg: 5px 5px 9px hsla(237, 18%, 3%, 0.9);
@@ -57,14 +57,11 @@
57
57
  /** The width of that line, as any CSS length. Overrides
58
58
  `--imagelightbox-tile-border-width`. */
59
59
  borderWidth?: string | undefined;
60
- /** The scrim behind the open image, for this instance, as any CSS fill.
61
- Overrides `--imagelightbox-scrim-surface`. The modal portals to
62
- <body>, out of reach of a wrapper around the tile, so a page that wants
63
- its own scrim has to say so here. */
60
+ /** The scrim behind the open image, for this instance, as any CSS fill,
61
+ such as `var(--scrim-low)`. Overrides `--imagelightbox-scrim-surface`.
62
+ The modal portals to <body>, out of reach of a wrapper around the tile,
63
+ so a page that wants its own scrim has to say so here. */
64
64
  scrim?: string | undefined;
65
- /** How much of `scrim` covers the page, 0 to 1. Needs `scrim`: it is
66
- mixed with it, and on its own there is no colour to mix. */
67
- scrimOpacity?: number | undefined;
68
65
  /** When true, shows a bottom toolbar (zoom in/out + percent) and a top-right close button, and enables wheel/drag zoom inside the open modal. When false, click anywhere closes. */
69
66
  extended?: boolean;
70
67
  /** Maximum zoom, as a multiple of the image's natural resolution: `1` = 100%
@@ -101,22 +98,11 @@
101
98
  border = undefined,
102
99
  borderWidth = undefined,
103
100
  scrim = undefined,
104
- scrimOpacity = undefined,
105
101
  extended = false,
106
102
  maxZoom = undefined,
107
103
  capNatural = false,
108
104
  }: Props = $props();
109
105
 
110
- // An opacity is mixed into the colour, so the two arrive as one fill. Without
111
- // a colour there is nothing to mix, and the theme's scrim stands.
112
- const scrimFill = $derived(
113
- scrim == null
114
- ? undefined
115
- : scrimOpacity == null
116
- ? scrim
117
- : `color-mix(in srgb, ${scrim} ${scrimOpacity * 100}%, transparent)`,
118
- );
119
-
120
106
  const items = $derived(
121
107
  images && images.length
122
108
  ? images
@@ -667,7 +653,7 @@
667
653
  <div
668
654
  bind:this={overlayEl}
669
655
  class="image-lightbox-overlay"
670
- style:--imagelightbox-scrim-surface={scrimFill}
656
+ style:--imagelightbox-scrim-surface={scrim}
671
657
  class:active={open}
672
658
  aria-hidden="true"
673
659
  onclick={closeLightbox}
@@ -267,17 +267,30 @@
267
267
  --surface-danger-highest: oklch(0.6696 0.1423 24.72);
268
268
 
269
269
  /* Scrims — translucent layers that dim what sits behind them. A scrim is not
270
- a tint: it darkens the content underneath, it does not shade a surface. */
271
- --scrim-low: rgba(20, 3, 0, 0.38);
272
- --scrim: rgba(20, 3, 0, 0.51);
273
- --scrim-high: rgba(20, 3, 0, 0.64);
270
+ a tint: it darkens the content underneath, it does not shade a surface.
271
+ Colour and strength are separate, so a theme can hold one and move the
272
+ other: set --scrim-color to a light value for a scrim that pales the page
273
+ instead of darkening it. The three stops stay, composed from the two, for
274
+ anywhere that wants one value. */
275
+ --scrim-color: rgb(20, 3, 0);
276
+ --scrim-opacity-low: 0.7;
277
+ --scrim-opacity: 0.8;
278
+ --scrim-opacity-high: 0.9;
279
+ --scrim-low: color-mix(in srgb, var(--scrim-color) calc(var(--scrim-opacity-low) * 100%), transparent);
280
+ --scrim: color-mix(in srgb, var(--scrim-color) calc(var(--scrim-opacity) * 100%), transparent);
281
+ --scrim-high: color-mix(in srgb, var(--scrim-color) calc(var(--scrim-opacity-high) * 100%), transparent);
274
282
 
275
283
  /* Tints — translucent washes that shade the surface they sit on, for a hover
276
- or an active row. The theme aliases these to the text color, so a tint
277
- lightens a dark theme and darkens a light one without picking a direction. */
278
- --tint-low: rgba(255, 255, 255, 0.05);
279
- --tint: rgba(255, 255, 255, 0.1);
280
- --tint-high: rgba(255, 255, 255, 0.15);
284
+ or an active row. The theme aliases --tint-color to the text color, so a
285
+ tint lightens a dark theme and darkens a light one without picking a
286
+ direction. Colour and strength are separate, as for scrims. */
287
+ --tint-color: rgb(255, 255, 255);
288
+ --tint-opacity-low: 0.05;
289
+ --tint-opacity: 0.1;
290
+ --tint-opacity-high: 0.15;
291
+ --tint-low: color-mix(in srgb, var(--tint-color) calc(var(--tint-opacity-low) * 100%), transparent);
292
+ --tint: color-mix(in srgb, var(--tint-color) calc(var(--tint-opacity) * 100%), transparent);
293
+ --tint-high: color-mix(in srgb, var(--tint-color) calc(var(--tint-opacity-high) * 100%), transparent);
281
294
 
282
295
  /* BORDERS — 5-point scales, faint → strong. */
283
296