# Theme presets

> Named themes (light or dark plus brand colours): Nasaq, purple, rose and emerald, each dark and light. A picker with live previews, useThemePreset to apply and remember the choice, overrides for tenant colours, and ThemePresetScope to preview a region.

Source: https://docs.nasaqui.com/components/theme-presets

## Install

```bash
npx shadcn@latest add https://docs.nasaqui.com/r/theme-presets.json
```

A set of named themes the reader can choose from, each a light or dark mode plus brand colours. The picker is a
`ThemeGallery` with previews; `useThemePreset` applies the choice to the app, remembers it, and layers any
overrides (such as a tenant's colour) on top.

## When to use

- An appearance setting with more than light and dark: "Purple", "Rose light".
- Products that ship a few colour themes over one brand manifest.

## When not to use

- Only light, dark and system: use `ThemeToggle` from Switchers.
- Colours from a database for a white-label tenant, with no choice for the reader: use `BrandingProvider`.

## Import

```tsx
import { ThemePresetPicker, useThemePreset } from "@fadymondy/nasaq/web";
```

## Quick start

```tsx
function AppearanceSettings({ tenantBrand }: { tenantBrand?: string }) {
  const { value, setValue } = useThemePreset({ overrides: { brand: tenantBrand } });
  return <ThemePresetPicker value={value} onValueChange={setValue} overrides={{ brand: tenantBrand }} />;
}
```

## Anatomy

```
ThemePresetPicker     a ThemeGallery (data-slot="theme-gallery"), one radio card per preset
ThemePresetScope      data-slot="theme-preset-scope" data-theme=mode
└─ region             data-brand="runtime", the preset's variables inline
```

## API

### `ThemePreset`

`{ id, label, labelAr?, mode: "light" | "dark", brand?, brandDark?, accent? }`. Without colours a preset keeps
the active brand manifest (the built-in `nasaq` and `nasaq-light`).

### `ThemePresetPicker`

All `ThemeGallery` props except `themes` (`value`, `defaultValue`, `onValueChange`, `label`, `columns`,
`disabled`, `name`, `labels`, `className`), plus:

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `presets?` | `readonly ThemePreset[]` | `THEME_PRESETS` | The choices. |
| `overrides?` | `ThemeOverrides` | none | `{ brand?, brandDark?, accent? }`, shown in every preview. |

### `useThemePreset(options)`

| Option | Default | Description |
| --- | --- | --- |
| `presets` | `THEME_PRESETS` | |
| `defaultValue` | first preset | Used when nothing is stored. |
| `storageKey` | `"nasaq-theme-preset"` | `null` turns persistence off. |
| `overrides` | none | Colours over the chosen preset. |
| `apply` | `true` | Writes the variables on `<html>` and calls `NasaqProvider`'s `setTheme(preset.mode)`. |

Returns `{ value, preset, setValue, presets }`.

### Helpers

- `applyThemePreset(root, preset, overrides)` writes the variables on any element and returns a cleanup.
- `themePresetVars(preset, overrides)` returns `--nq-brand-l/-d`, `--nq-action-l/-d`, `--nq-on-action-l/-d` and
  `--nq-accent-brand`. Invalid colours are dropped, so a bad stored value falls back to the manifest.
- `ThemePresetScope` renders children in a preset without touching the page.

## Accessibility

- The picker is a radio group with arrow-key navigation; each card is named by its label, and the sun or moon icon
  is decorative.
- Text on the action colour is ink or ivory, whichever has more contrast.

## RTL & i18n

Arabic labels come from `labelAr` when the locale is Arabic. Previews mirror with the layout.

## Styling & tokens

Presets set only the brand variables; every other role (surfaces, text, borders) comes from the light or dark
token set, so all presets keep Nasaq's contrast.

## Do / Don't

- Do keep the same family in light and dark so a reader can switch mode without losing their colour.
- Don't define surfaces or text colours in a preset; let the mode supply them.

## Related

- [Appearance pickers](https://docs.nasaqui.com/components/appearance-pickers)
- [BrandingProvider](https://docs.nasaqui.com/components/branding-provider)
- [Switchers](https://docs.nasaqui.com/components/switchers)

## Lab

https://docs.nasaqui.com/?path=/docs/components-brand-theme-presets--docs

## Code

### React

```tsx
function AppearanceSettings({ tenantBrand }: { tenantBrand?: string }) {
  const { value, setValue } = useThemePreset({ overrides: { brand: tenantBrand } });
  return <ThemePresetPicker value={value} onValueChange={setValue} overrides={{ brand: tenantBrand }} />;
}
```

### shadcn

```tsx
function AppearanceSettings({ tenantBrand }: { tenantBrand?: string }) {
  const { value, setValue } = useThemePreset({ overrides: { brand: tenantBrand } });
  return <ThemePresetPicker value={value} onValueChange={setValue} overrides={{ brand: tenantBrand }} />;
}
```

### Vue

```vue
<script setup lang="ts">
import { NqThemePresetPicker, NqThemePresetScope, THEME_PRESETS, useThemePreset } from "@fadymondy/nasaq/vue";
import { computed } from "vue";

// `apply: false` keeps the example from restyling the page it is shown in; the scope below previews the choice.
const { value, preset, setValue } = useThemePreset({ apply: false, storageKey: null, overrides: { brand: "#0e7490" } });
const current = computed(() => preset.value ?? THEME_PRESETS[0]!);
</script>

<template>
  <div class="flex flex-col gap-6">
    <NqThemePresetPicker :model-value="value" :overrides="{ brand: '#0e7490' }" @update:model-value="setValue" />
    <NqThemePresetScope :preset="current" :overrides="{ brand: '#0e7490' }" class="rounded-card border border-border p-4">
      <p class="text-label">Preview</p>
      <p class="text-body-sm text-muted-foreground">This region shows the selected theme without changing the page.</p>
    </NqThemePresetScope>
  </div>
</template>
```

### Blade

```blade
<div class="flex flex-col gap-4">
    <x-nq::theme-presets.picker default-value="purple-light" />
    <x-nq::theme-presets.scope preset="rose-light" class="rounded-card border border-border p-4">
        <p class="text-label">Rose light preview</p>
        <x-nq::button>Primary action</x-nq::button>
    </x-nq::theme-presets.scope>
</div>
```

### HTML + Alpine

```html
<div class="flex flex-col gap-4">
    <div data-slot="theme-gallery" class="flex min-w-0 flex-col gap-2">
    <div id="nq-theme-8d80b38f" class="text-label text-foreground">Theme</div>    <div role="radiogroup" x-data="nqRadioGroup('purple-light')" x-modelable="value" x-bind="root" 
         aria-labelledby="nq-theme-8d80b38f"                 class="grid gap-3 grid-cols-2 sm:grid-cols-4">
                                <button type="button" role="radio" data-slot="theme-card" x-bind="radio('nasaq')" aria-checked="false" tabindex="-1"
                 data-unchecked                                 class="group relative flex min-w-0 cursor-pointer flex-col gap-2 rounded-card border border-border bg-card p-2 text-start outline-none transition-colors hover:border-nq-line-strong focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus data-checked:border-primary data-checked:bg-nq-selected data-disabled:pointer-events-none data-disabled:opacity-50">
                <span aria-hidden="true" class="relative flex h-20 overflow-hidden rounded-control border border-border" style="background: #0B1429">
                    <span class="flex w-1/3 flex-col gap-1 p-1.5" style="background: #0E1A3C">
                        <span class="h-1.5 w-full rounded-full opacity-80" style="background: var(--nq-brand-d)"></span>
                        <span class="h-1 w-3/4 rounded-full opacity-40" style="background: #F0EBE1"></span>
                        <span class="h-1 w-1/2 rounded-full opacity-40" style="background: #F0EBE1"></span>
                    </span>
                    <span class="flex flex-1 flex-col gap-1.5 p-2">
                        <span class="h-2 w-2/3 rounded-full opacity-70" style="background: #F0EBE1"></span>
                        <span class="h-1.5 w-full rounded-full opacity-30" style="background: #F0EBE1"></span>
                        <span class="h-1.5 w-5/6 rounded-full opacity-30" style="background: #F0EBE1"></span>
                        <span class="mt-auto h-3.5 w-1/3 rounded-control" style="background: var(--nq-brand-d)"></span>
                    </span>
                </span>
                <span class="flex min-w-0 items-center gap-1.5 px-0.5 pb-0.5">
                    <svg aria-hidden="true" class="size-3.5 shrink-0 text-muted-foreground" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"/>
</svg>                                        <span class="min-w-0 flex-1">
                        <span class="block truncate text-label text-foreground">Nasaq</span>
                    </span>
                    <span data-slot="radio-indicator" x-show="isChecked('nasaq')"  style="display: none"  class="grid size-4 shrink-0 place-items-center rounded-full bg-primary text-primary-foreground">
                        <svg aria-hidden="true" class="size-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M20 6 9 17l-5-5"/>
</svg>                    </span>
                </span>
            </button>
                                <button type="button" role="radio" data-slot="theme-card" x-bind="radio('nasaq-light')" aria-checked="false" tabindex="-1"
                 data-unchecked                                 class="group relative flex min-w-0 cursor-pointer flex-col gap-2 rounded-card border border-border bg-card p-2 text-start outline-none transition-colors hover:border-nq-line-strong focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus data-checked:border-primary data-checked:bg-nq-selected data-disabled:pointer-events-none data-disabled:opacity-50">
                <span aria-hidden="true" class="relative flex h-20 overflow-hidden rounded-control border border-border" style="background: #F0EBE1">
                    <span class="flex w-1/3 flex-col gap-1 p-1.5" style="background: #F7F4EC">
                        <span class="h-1.5 w-full rounded-full opacity-80" style="background: var(--nq-brand-l)"></span>
                        <span class="h-1 w-3/4 rounded-full opacity-40" style="background: #0E1A3C"></span>
                        <span class="h-1 w-1/2 rounded-full opacity-40" style="background: #0E1A3C"></span>
                    </span>
                    <span class="flex flex-1 flex-col gap-1.5 p-2">
                        <span class="h-2 w-2/3 rounded-full opacity-70" style="background: #0E1A3C"></span>
                        <span class="h-1.5 w-full rounded-full opacity-30" style="background: #0E1A3C"></span>
                        <span class="h-1.5 w-5/6 rounded-full opacity-30" style="background: #0E1A3C"></span>
                        <span class="mt-auto h-3.5 w-1/3 rounded-control" style="background: var(--nq-brand-l)"></span>
                    </span>
                </span>
                <span class="flex min-w-0 items-center gap-1.5 px-0.5 pb-0.5">
                    <svg aria-hidden="true" class="size-3.5 shrink-0 text-muted-foreground" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="4"/>
  <path d="M12 2v2"/>
  <path d="M12 20v2"/>
  <path d="m4.93 4.93 1.41 1.41"/>
  <path d="m17.66 17.66 1.41 1.41"/>
  <path d="M2 12h2"/>
  <path d="M20 12h2"/>
  <path d="m6.34 17.66-1.41 1.41"/>
  <path d="m19.07 4.93-1.41 1.41"/>
</svg>                    <span class="min-w-0 flex-1">
                        <span class="block truncate text-label text-foreground">Nasaq light</span>
                    </span>
                    <span data-slot="radio-indicator" x-show="isChecked('nasaq-light')"  style="display: none"  class="grid size-4 shrink-0 place-items-center rounded-full bg-primary text-primary-foreground">
                        <svg aria-hidden="true" class="size-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M20 6 9 17l-5-5"/>
</svg>                    </span>
                </span>
            </button>
                                <button type="button" role="radio" data-slot="theme-card" x-bind="radio('purple')" aria-checked="false" tabindex="-1"
                 data-unchecked                                 class="group relative flex min-w-0 cursor-pointer flex-col gap-2 rounded-card border border-border bg-card p-2 text-start outline-none transition-colors hover:border-nq-line-strong focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus data-checked:border-primary data-checked:bg-nq-selected data-disabled:pointer-events-none data-disabled:opacity-50">
                <span aria-hidden="true" class="relative flex h-20 overflow-hidden rounded-control border border-border" style="background: #0B1429">
                    <span class="flex w-1/3 flex-col gap-1 p-1.5" style="background: #0E1A3C">
                        <span class="h-1.5 w-full rounded-full opacity-80" style="background: #9B6DF5"></span>
                        <span class="h-1 w-3/4 rounded-full opacity-40" style="background: #F0EBE1"></span>
                        <span class="h-1 w-1/2 rounded-full opacity-40" style="background: #F0EBE1"></span>
                    </span>
                    <span class="flex flex-1 flex-col gap-1.5 p-2">
                        <span class="h-2 w-2/3 rounded-full opacity-70" style="background: #F0EBE1"></span>
                        <span class="h-1.5 w-full rounded-full opacity-30" style="background: #F0EBE1"></span>
                        <span class="h-1.5 w-5/6 rounded-full opacity-30" style="background: #F0EBE1"></span>
                        <span class="mt-auto h-3.5 w-1/3 rounded-control" style="background: #9B6DF5"></span>
                    </span>
                </span>
                <span class="flex min-w-0 items-center gap-1.5 px-0.5 pb-0.5">
                    <svg aria-hidden="true" class="size-3.5 shrink-0 text-muted-foreground" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"/>
</svg>                                        <span class="min-w-0 flex-1">
                        <span class="block truncate text-label text-foreground">Purple</span>
                    </span>
                    <span data-slot="radio-indicator" x-show="isChecked('purple')"  style="display: none"  class="grid size-4 shrink-0 place-items-center rounded-full bg-primary text-primary-foreground">
                        <svg aria-hidden="true" class="size-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M20 6 9 17l-5-5"/>
</svg>                    </span>
                </span>
            </button>
                                <button type="button" role="radio" data-slot="theme-card" x-bind="radio('purple-light')" aria-checked="true" tabindex="0"
                 data-checked                                 class="group relative flex min-w-0 cursor-pointer flex-col gap-2 rounded-card border border-border bg-card p-2 text-start outline-none transition-colors hover:border-nq-line-strong focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus data-checked:border-primary data-checked:bg-nq-selected data-disabled:pointer-events-none data-disabled:opacity-50">
                <span aria-hidden="true" class="relative flex h-20 overflow-hidden rounded-control border border-border" style="background: #F0EBE1">
                    <span class="flex w-1/3 flex-col gap-1 p-1.5" style="background: #F7F4EC">
                        <span class="h-1.5 w-full rounded-full opacity-80" style="background: #7C3AED"></span>
                        <span class="h-1 w-3/4 rounded-full opacity-40" style="background: #0E1A3C"></span>
                        <span class="h-1 w-1/2 rounded-full opacity-40" style="background: #0E1A3C"></span>
                    </span>
                    <span class="flex flex-1 flex-col gap-1.5 p-2">
                        <span class="h-2 w-2/3 rounded-full opacity-70" style="background: #0E1A3C"></span>
                        <span class="h-1.5 w-full rounded-full opacity-30" style="background: #0E1A3C"></span>
                        <span class="h-1.5 w-5/6 rounded-full opacity-30" style="background: #0E1A3C"></span>
                        <span class="mt-auto h-3.5 w-1/3 rounded-control" style="background: #7C3AED"></span>
                    </span>
                </span>
                <span class="flex min-w-0 items-center gap-1.5 px-0.5 pb-0.5">
                    <svg aria-hidden="true" class="size-3.5 shrink-0 text-muted-foreground" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="4"/>
  <path d="M12 2v2"/>
  <path d="M12 20v2"/>
  <path d="m4.93 4.93 1.41 1.41"/>
  <path d="m17.66 17.66 1.41 1.41"/>
  <path d="M2 12h2"/>
  <path d="M20 12h2"/>
  <path d="m6.34 17.66-1.41 1.41"/>
  <path d="m19.07 4.93-1.41 1.41"/>
</svg>                    <span class="min-w-0 flex-1">
                        <span class="block truncate text-label text-foreground">Purple light</span>
                    </span>
                    <span data-slot="radio-indicator" x-show="isChecked('purple-light')"  class="grid size-4 shrink-0 place-items-center rounded-full bg-primary text-primary-foreground">
                        <svg aria-hidden="true" class="size-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M20 6 9 17l-5-5"/>
</svg>                    </span>
                </span>
            </button>
                                <button type="button" role="radio" data-slot="theme-card" x-bind="radio('rose')" aria-checked="false" tabindex="-1"
                 data-unchecked                                 class="group relative flex min-w-0 cursor-pointer flex-col gap-2 rounded-card border border-border bg-card p-2 text-start outline-none transition-colors hover:border-nq-line-strong focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus data-checked:border-primary data-checked:bg-nq-selected data-disabled:pointer-events-none data-disabled:opacity-50">
                <span aria-hidden="true" class="relative flex h-20 overflow-hidden rounded-control border border-border" style="background: #0B1429">
                    <span class="flex w-1/3 flex-col gap-1 p-1.5" style="background: #0E1A3C">
                        <span class="h-1.5 w-full rounded-full opacity-80" style="background: #F5427B"></span>
                        <span class="h-1 w-3/4 rounded-full opacity-40" style="background: #F0EBE1"></span>
                        <span class="h-1 w-1/2 rounded-full opacity-40" style="background: #F0EBE1"></span>
                    </span>
                    <span class="flex flex-1 flex-col gap-1.5 p-2">
                        <span class="h-2 w-2/3 rounded-full opacity-70" style="background: #F0EBE1"></span>
                        <span class="h-1.5 w-full rounded-full opacity-30" style="background: #F0EBE1"></span>
                        <span class="h-1.5 w-5/6 rounded-full opacity-30" style="background: #F0EBE1"></span>
                        <span class="mt-auto h-3.5 w-1/3 rounded-control" style="background: #F5427B"></span>
                    </span>
                </span>
                <span class="flex min-w-0 items-center gap-1.5 px-0.5 pb-0.5">
                    <svg aria-hidden="true" class="size-3.5 shrink-0 text-muted-foreground" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"/>
</svg>                                        <span class="min-w-0 flex-1">
                        <span class="block truncate text-label text-foreground">Rose</span>
                    </span>
                    <span data-slot="radio-indicator" x-show="isChecked('rose')"  style="display: none"  class="grid size-4 shrink-0 place-items-center rounded-full bg-primary text-primary-foreground">
                        <svg aria-hidden="true" class="size-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M20 6 9 17l-5-5"/>
</svg>                    </span>
                </span>
            </button>
                                <button type="button" role="radio" data-slot="theme-card" x-bind="radio('rose-light')" aria-checked="false" tabindex="-1"
                 data-unchecked                                 class="group relative flex min-w-0 cursor-pointer flex-col gap-2 rounded-card border border-border bg-card p-2 text-start outline-none transition-colors hover:border-nq-line-strong focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus data-checked:border-primary data-checked:bg-nq-selected data-disabled:pointer-events-none data-disabled:opacity-50">
                <span aria-hidden="true" class="relative flex h-20 overflow-hidden rounded-control border border-border" style="background: #F0EBE1">
                    <span class="flex w-1/3 flex-col gap-1 p-1.5" style="background: #F7F4EC">
                        <span class="h-1.5 w-full rounded-full opacity-80" style="background: #E11D48"></span>
                        <span class="h-1 w-3/4 rounded-full opacity-40" style="background: #0E1A3C"></span>
                        <span class="h-1 w-1/2 rounded-full opacity-40" style="background: #0E1A3C"></span>
                    </span>
                    <span class="flex flex-1 flex-col gap-1.5 p-2">
                        <span class="h-2 w-2/3 rounded-full opacity-70" style="background: #0E1A3C"></span>
                        <span class="h-1.5 w-full rounded-full opacity-30" style="background: #0E1A3C"></span>
                        <span class="h-1.5 w-5/6 rounded-full opacity-30" style="background: #0E1A3C"></span>
                        <span class="mt-auto h-3.5 w-1/3 rounded-control" style="background: #E11D48"></span>
                    </span>
                </span>
                <span class="flex min-w-0 items-center gap-1.5 px-0.5 pb-0.5">
                    <svg aria-hidden="true" class="size-3.5 shrink-0 text-muted-foreground" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="4"/>
  <path d="M12 2v2"/>
  <path d="M12 20v2"/>
  <path d="m4.93 4.93 1.41 1.41"/>
  <path d="m17.66 17.66 1.41 1.41"/>
  <path d="M2 12h2"/>
  <path d="M20 12h2"/>
  <path d="m6.34 17.66-1.41 1.41"/>
  <path d="m19.07 4.93-1.41 1.41"/>
</svg>                    <span class="min-w-0 flex-1">
                        <span class="block truncate text-label text-foreground">Rose light</span>
                    </span>
                    <span data-slot="radio-indicator" x-show="isChecked('rose-light')"  style="display: none"  class="grid size-4 shrink-0 place-items-center rounded-full bg-primary text-primary-foreground">
                        <svg aria-hidden="true" class="size-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M20 6 9 17l-5-5"/>
</svg>                    </span>
                </span>
            </button>
                                <button type="button" role="radio" data-slot="theme-card" x-bind="radio('emerald')" aria-checked="false" tabindex="-1"
                 data-unchecked                                 class="group relative flex min-w-0 cursor-pointer flex-col gap-2 rounded-card border border-border bg-card p-2 text-start outline-none transition-colors hover:border-nq-line-strong focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus data-checked:border-primary data-checked:bg-nq-selected data-disabled:pointer-events-none data-disabled:opacity-50">
                <span aria-hidden="true" class="relative flex h-20 overflow-hidden rounded-control border border-border" style="background: #0B1429">
                    <span class="flex w-1/3 flex-col gap-1 p-1.5" style="background: #0E1A3C">
                        <span class="h-1.5 w-full rounded-full opacity-80" style="background: #10B981"></span>
                        <span class="h-1 w-3/4 rounded-full opacity-40" style="background: #F0EBE1"></span>
                        <span class="h-1 w-1/2 rounded-full opacity-40" style="background: #F0EBE1"></span>
                    </span>
                    <span class="flex flex-1 flex-col gap-1.5 p-2">
                        <span class="h-2 w-2/3 rounded-full opacity-70" style="background: #F0EBE1"></span>
                        <span class="h-1.5 w-full rounded-full opacity-30" style="background: #F0EBE1"></span>
                        <span class="h-1.5 w-5/6 rounded-full opacity-30" style="background: #F0EBE1"></span>
                        <span class="mt-auto h-3.5 w-1/3 rounded-control" style="background: #10B981"></span>
                    </span>
                </span>
                <span class="flex min-w-0 items-center gap-1.5 px-0.5 pb-0.5">
                    <svg aria-hidden="true" class="size-3.5 shrink-0 text-muted-foreground" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"/>
</svg>                                        <span class="min-w-0 flex-1">
                        <span class="block truncate text-label text-foreground">Emerald</span>
                    </span>
                    <span data-slot="radio-indicator" x-show="isChecked('emerald')"  style="display: none"  class="grid size-4 shrink-0 place-items-center rounded-full bg-primary text-primary-foreground">
                        <svg aria-hidden="true" class="size-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M20 6 9 17l-5-5"/>
</svg>                    </span>
                </span>
            </button>
                                <button type="button" role="radio" data-slot="theme-card" x-bind="radio('emerald-light')" aria-checked="false" tabindex="-1"
                 data-unchecked                                 class="group relative flex min-w-0 cursor-pointer flex-col gap-2 rounded-card border border-border bg-card p-2 text-start outline-none transition-colors hover:border-nq-line-strong focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus data-checked:border-primary data-checked:bg-nq-selected data-disabled:pointer-events-none data-disabled:opacity-50">
                <span aria-hidden="true" class="relative flex h-20 overflow-hidden rounded-control border border-border" style="background: #F0EBE1">
                    <span class="flex w-1/3 flex-col gap-1 p-1.5" style="background: #F7F4EC">
                        <span class="h-1.5 w-full rounded-full opacity-80" style="background: #059669"></span>
                        <span class="h-1 w-3/4 rounded-full opacity-40" style="background: #0E1A3C"></span>
                        <span class="h-1 w-1/2 rounded-full opacity-40" style="background: #0E1A3C"></span>
                    </span>
                    <span class="flex flex-1 flex-col gap-1.5 p-2">
                        <span class="h-2 w-2/3 rounded-full opacity-70" style="background: #0E1A3C"></span>
                        <span class="h-1.5 w-full rounded-full opacity-30" style="background: #0E1A3C"></span>
                        <span class="h-1.5 w-5/6 rounded-full opacity-30" style="background: #0E1A3C"></span>
                        <span class="mt-auto h-3.5 w-1/3 rounded-control" style="background: #059669"></span>
                    </span>
                </span>
                <span class="flex min-w-0 items-center gap-1.5 px-0.5 pb-0.5">
                    <svg aria-hidden="true" class="size-3.5 shrink-0 text-muted-foreground" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="4"/>
  <path d="M12 2v2"/>
  <path d="M12 20v2"/>
  <path d="m4.93 4.93 1.41 1.41"/>
  <path d="m17.66 17.66 1.41 1.41"/>
  <path d="M2 12h2"/>
  <path d="M20 12h2"/>
  <path d="m6.34 17.66-1.41 1.41"/>
  <path d="m19.07 4.93-1.41 1.41"/>
</svg>                    <span class="min-w-0 flex-1">
                        <span class="block truncate text-label text-foreground">Emerald light</span>
                    </span>
                    <span data-slot="radio-indicator" x-show="isChecked('emerald-light')"  style="display: none"  class="grid size-4 shrink-0 place-items-center rounded-full bg-primary text-primary-foreground">
                        <svg aria-hidden="true" class="size-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M20 6 9 17l-5-5"/>
</svg>                    </span>
                </span>
            </button>
                    </div>
</div>
    <div data-slot="theme-preset-scope" data-theme="light" class="contents">
    <div data-brand="runtime" style="--nq-brand-l: #E11D48; --nq-action-l: #E11D48; --nq-on-action-l: #F0EBE1; --nq-brand-d: #F5427B; --nq-action-d: #F5427B; --nq-on-action-d: #0E1A3C; --nq-accent-brand: #1F8A99; --nq-brand: var(--nq-brand-l); --nq-action: var(--nq-action-l); --nq-on-action: var(--nq-on-action-l); --nq-primary-action: var(--nq-action-l)" class="bg-background text-foreground rounded-card border border-border p-4"><p class="text-label">Rose light preview</p>
        <button data-slot="button"
     type="button"                         class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border-border bg-card text-foreground hover:bg-nq-hover h-control px-[var(--nq-control-pad)]">
        Primary action</button></div>
</div>
</div>
```
