diff --git a/resources/views/components/scheme-picker.blade.php b/resources/views/components/scheme-picker.blade.php
index 1c9172c6..dadb7c96 100644
--- a/resources/views/components/scheme-picker.blade.php
+++ b/resources/views/components/scheme-picker.blade.php
@@ -8,7 +8,10 @@
(`$store.theme.previewScheme`); storing it — and telling `Scheme::resolveProfileUsing()` — is
the application's. The dots are the only colours not drawn from tokens: they show other
profiles than the page's, so they are custom properties set inline from the scheme file's
- checked hexes, light or dark with the page. Without profiles it renders nothing.
+ checked hexes, light or dark with the page. The inline pair is the standard contrast level,
+ which is what the server can know; Alpine swaps in the level on screen
+ (`$store.theme.resolvedContrast`) so a dot never promises a colour the page would not paint.
+ Without profiles it renders nothing.
Props: `label`, `hint`, `name` (needed with `x-model`), `profiles` (default: every generated
profile). A validation message for the bound property replaces the hint. --}}
@@ -26,10 +29,32 @@
$name ??= $model ?: 'scheme';
$errorKey = $model ?: (filled($attributes->get('name')) ? (string) $attributes->get('name') : null);
$messages = $errorKey !== null && isset($errors) ? \Illuminate\Support\Arr::flatten($errors->get($errorKey)) : [];
+ $roles = ['primary', 'secondary', 'tertiary'];
+
+ // profile => level => theme => role => hex, for the dots. Every level is filled — a profile
+ // the caller passed in by hand, or a scheme file without the levels, repeats its standard
+ // colours — so the binding below never asks whether a level is there.
+ $swatches = [];
+
+ foreach (\NoNameWeb\LivewireMaterial\Support\Scheme::LEVELS as $level) {
+ $generated = $level === 'standard' ? [] : \NoNameWeb\LivewireMaterial\Support\Scheme::profiles(contrast: $level);
+
+ foreach ($profiles as $profile => $scheme) {
+ foreach (['light', 'dark'] as $theme) {
+ foreach ($roles as $role) {
+ $swatches[$profile][$level][$theme][$role] = ($generated[$profile] ?? $scheme)[$theme][$role];
+ }
+ }
+ }
+ }
@endphp
@if ($profiles !== [])
-