rizzo-css 0.0.55 → 0.0.57

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 (64) hide show
  1. package/README.md +2 -2
  2. package/bin/rizzo-css.js +96 -34
  3. package/dist/rizzo.min.css +13 -4
  4. package/package.json +1 -1
  5. package/scaffold/astro/base/README-RIZZO.md +9 -8
  6. package/scaffold/astro/variants/full/README-RIZZO.md +9 -8
  7. package/scaffold/shared/sound-effects-inline.js +19 -2
  8. package/scaffold/svelte/base/README-RIZZO.md +9 -8
  9. package/scaffold/svelte/index.ts +1 -0
  10. package/scaffold/svelte/variants/full/README-RIZZO.md +9 -8
  11. package/scaffold/svelte/variants/full/src/routes/+layout.svelte +9 -0
  12. package/scaffold/vanilla/README-RIZZO.md +14 -12
  13. package/scaffold/vanilla/components/accordion.html +14 -0
  14. package/scaffold/vanilla/components/alert-dialog.html +14 -0
  15. package/scaffold/vanilla/components/alert.html +14 -0
  16. package/scaffold/vanilla/components/aspect-ratio.html +14 -0
  17. package/scaffold/vanilla/components/avatar.html +14 -0
  18. package/scaffold/vanilla/components/back-to-top.html +14 -0
  19. package/scaffold/vanilla/components/badge.html +14 -0
  20. package/scaffold/vanilla/components/breadcrumb.html +14 -0
  21. package/scaffold/vanilla/components/button-group.html +14 -0
  22. package/scaffold/vanilla/components/button.html +14 -0
  23. package/scaffold/vanilla/components/cards.html +14 -0
  24. package/scaffold/vanilla/components/collapsible.html +14 -0
  25. package/scaffold/vanilla/components/context-menu.html +14 -0
  26. package/scaffold/vanilla/components/copy-to-clipboard.html +14 -0
  27. package/scaffold/vanilla/components/dashboard.html +14 -0
  28. package/scaffold/vanilla/components/divider.html +14 -0
  29. package/scaffold/vanilla/components/docs-sidebar.html +14 -0
  30. package/scaffold/vanilla/components/dropdown.html +14 -0
  31. package/scaffold/vanilla/components/empty.html +14 -0
  32. package/scaffold/vanilla/components/font-switcher.html +14 -0
  33. package/scaffold/vanilla/components/footer.html +14 -0
  34. package/scaffold/vanilla/components/forms.html +14 -0
  35. package/scaffold/vanilla/components/hover-card.html +14 -0
  36. package/scaffold/vanilla/components/icons.html +14 -0
  37. package/scaffold/vanilla/components/index.html +14 -0
  38. package/scaffold/vanilla/components/kbd.html +14 -0
  39. package/scaffold/vanilla/components/label.html +14 -0
  40. package/scaffold/vanilla/components/modal.html +14 -0
  41. package/scaffold/vanilla/components/navbar.html +14 -0
  42. package/scaffold/vanilla/components/pagination.html +14 -0
  43. package/scaffold/vanilla/components/popover.html +14 -0
  44. package/scaffold/vanilla/components/progress-bar.html +14 -0
  45. package/scaffold/vanilla/components/resizable.html +14 -0
  46. package/scaffold/vanilla/components/scroll-area.html +14 -0
  47. package/scaffold/vanilla/components/search.html +14 -0
  48. package/scaffold/vanilla/components/separator.html +14 -0
  49. package/scaffold/vanilla/components/settings.html +14 -0
  50. package/scaffold/vanilla/components/sheet.html +14 -0
  51. package/scaffold/vanilla/components/skeleton.html +14 -0
  52. package/scaffold/vanilla/components/slider.html +14 -0
  53. package/scaffold/vanilla/components/sound-effects.html +14 -0
  54. package/scaffold/vanilla/components/spinner.html +14 -0
  55. package/scaffold/vanilla/components/switch.html +14 -0
  56. package/scaffold/vanilla/components/table.html +14 -0
  57. package/scaffold/vanilla/components/tabs.html +14 -0
  58. package/scaffold/vanilla/components/theme-switcher.html +14 -0
  59. package/scaffold/vanilla/components/toast.html +14 -0
  60. package/scaffold/vanilla/components/toggle-group.html +14 -0
  61. package/scaffold/vanilla/components/toggle.html +14 -0
  62. package/scaffold/vanilla/components/tooltip.html +14 -0
  63. package/scaffold/vanilla/index.html +14 -0
  64. package/scaffold/vanilla/variants/docs/getting-started.html +35 -0
package/README.md CHANGED
@@ -53,7 +53,7 @@ You install **the same package** for every framework: `npm install rizzo-css`. N
53
53
 
54
54
  With `npx rizzo-css add --path <dir>`, the CLI still suggests the correct href for your framework (e.g. Astro/Svelte get a leading `/` path).
55
55
 
56
- Scaffolds in the package: `scaffold/vanilla/`, `scaffold/astro/base/` and `scaffold/astro/variants/` (docs, dashboard, full), `scaffold/svelte/base/` and `scaffold/svelte/variants/`, plus `scaffold/astro/` and `scaffold/svelte/` (all components), and `scaffold/config/` (font pairs for Settings). **New and existing use the same flow:** choose **Landing** | **Docs** | **Dashboard** | **Full**. Landing/Docs/Dashboard = component picker (all components or pick). Full = site clone. **We never overwrite your existing files**; skipped content goes in **RIZZO-SETUP.md**. You must add the stylesheet `<link>` yourself (CLI prints the exact tag). Every scaffold includes LICENSE-RIZZO, README-RIZZO.md, and .gitignore; Astro/Svelte include package.json and .env.example.
56
+ Scaffolds in the package: `scaffold/vanilla/` (and `scaffold/vanilla/variants/docs`, `dashboard`, `full`), `scaffold/astro/base/` and `scaffold/astro/variants/` (docs, dashboard, full), `scaffold/svelte/base/` and `scaffold/svelte/variants/`, plus `scaffold/astro/` and `scaffold/svelte/` (all components), and `scaffold/config/` (font pairs for Settings). **Every framework gets the same four templates:** **Landing** | **Docs** | **Dashboard** | **Full**. Landing/Docs/Dashboard = component picker (all or pick). Full = site clone (all components). **We never overwrite your existing files**; skipped content goes in **RIZZO-SETUP.md**. You must add the stylesheet `<link>` yourself (CLI prints the exact tag). Every scaffold includes LICENSE-RIZZO, README-RIZZO.md, and .gitignore; Astro/Svelte include package.json and .env.example.
57
57
 
58
58
  ## Use
59
59
 
@@ -68,7 +68,7 @@ import 'rizzo-css';
68
68
  **Without a bundler (plain HTML):** Use a CDN. Both unpkg and jsDelivr resolve the package root to the built CSS (via the `unpkg` / `jsdelivr` fields in this package). For reliability or to pin a version, use the explicit path:
69
69
 
70
70
  ```html
71
- <!-- unpkg (pin version: replace @latest with @0.0.55 or any version) -->
71
+ <!-- unpkg (pin version: replace @latest with @0.0.57 or any version) -->
72
72
  <link rel="stylesheet" href="https://unpkg.com/rizzo-css@latest/dist/rizzo.min.css" />
73
73
 
74
74
  <!-- or jsDelivr -->
package/bin/rizzo-css.js CHANGED
@@ -16,7 +16,51 @@ const CLI_BANNER = ` /\\___/\\
16
16
  | |_) || | / / / / | | | | | \\___ \\___ \\
17
17
  | _ < | | / /_ / /| |_| | | |___ ___) |__) |
18
18
  |_| \\_\\___/____/____\\___/ \\____|____/____/
19
- Design system · Vanilla · Astro · Svelte`;
19
+
20
+ Design system · Vanilla · Astro · Svelte`;
21
+
22
+ /** Rainbow theme colors for "RIZZOCSS" block (from our themes: red → orange → yellow → green → blue → purple → pink). */
23
+ const BANNER_RAINBOW = [
24
+ { r: 196, g: 69, b: 54 }, /* red-velvet-cupcake accent */
25
+ { r: 224, g: 124, b: 62 }, /* rocky-blood-orange / orangy-one-light */
26
+ { r: 212, g: 168, b: 0 }, /* sunflower / minimal-dark-neon-yellow */
27
+ { r: 45, g: 157, b: 120 }, /* green-breeze-light / hack-the-box */
28
+ { r: 0, g: 82, b: 189 }, /* github-light primary */
29
+ { r: 124, g: 58, b: 237 }, /* shades-of-purple / semi-light-purple */
30
+ { r: 217, g: 70, b: 239 }, /* cute-pink / pink-cat-boo */
31
+ ];
32
+
33
+ /** ANSI 24-bit foreground; reset with \\x1b[0m */
34
+ function ansiFg(r, g, b) {
35
+ return '\x1b[38;2;' + r + ';' + g + ';' + b + 'm';
36
+ }
37
+ const ANSI_RESET = '\x1b[0m';
38
+
39
+ /** Evenly spread column bounds (6 chars per color for first 6, rest for 7th). */
40
+ const BANNER_BOUNDS = [0, 6, 12, 18, 24, 30, 36];
41
+
42
+ /** Returns banner with "RIZZOCSS" block art in rainbow theme colors. No ANSI if stdout is not TTY or FORCE_COLOR=0. */
43
+ function getBanner() {
44
+ const useColor = (process.stdout.isTTY || process.env.FORCE_COLOR === '1') && process.env.FORCE_COLOR !== '0';
45
+ if (!useColor) return CLI_BANNER;
46
+ const lines = CLI_BANNER.split('\n');
47
+ const RIZZOCSS_START = 5;
48
+ const RIZZOCSS_END = 9;
49
+ for (let i = RIZZOCSS_START; i <= RIZZOCSS_END; i++) {
50
+ const line = lines[i];
51
+ let out = '';
52
+ for (let s = 0; s < BANNER_BOUNDS.length; s++) {
53
+ const start = BANNER_BOUNDS[s];
54
+ const end = s === BANNER_BOUNDS.length - 1 ? line.length : BANNER_BOUNDS[s + 1];
55
+ if (start < line.length) {
56
+ const col = BANNER_RAINBOW[s % BANNER_RAINBOW.length];
57
+ out += ansiFg(col.r, col.g, col.b) + line.slice(start, Math.min(end, line.length)) + ANSI_RESET;
58
+ }
59
+ }
60
+ lines[i] = out;
61
+ }
62
+ return lines.join('\n');
63
+ }
20
64
 
21
65
  const RIZZO_CONFIG_FILE = 'rizzo-css.json';
22
66
  /** Scaffold README filename; avoids overwriting an existing project README.md. */
@@ -914,7 +958,7 @@ function multiSelectMenu(options, title, initialSelected) {
914
958
  }
915
959
 
916
960
  function printHelp() {
917
- console.log(CLI_BANNER);
961
+ console.log(getBanner());
918
962
  console.log(`
919
963
  rizzo-css CLI — Add Rizzo CSS to your project (Vanilla, Astro, Svelte)
920
964
 
@@ -1053,7 +1097,7 @@ function cmdTheme() {
1053
1097
  function cmdDoctor() {
1054
1098
  const cwd = process.cwd();
1055
1099
  const config = readRizzoConfig(cwd);
1056
- console.log(CLI_BANNER);
1100
+ console.log(getBanner());
1057
1101
  console.log(' Doctor — check config, CSS path, and layout link\n');
1058
1102
  let ok = true;
1059
1103
  if (!config) {
@@ -1349,7 +1393,7 @@ function copyVanillaComponents(projectDir, selectedNames, replacements) {
1349
1393
  }
1350
1394
  }
1351
1395
  const indexLinks = slugsToCopy.map((s) => ' <li><a href="' + s + '.html">' + s + '</a></li>').join('\n');
1352
- const navHtml = replacements['{{NAVBAR_HTML}}'] || '';
1396
+ const navHtml = getNavbarHtmlVanilla(title, '../index.html');
1353
1397
  const indexHtml = `<!DOCTYPE html>
1354
1398
  <html lang="en" data-theme="${replacements['{{DATA_THEME}}'] || 'github-dark-classic'}">
1355
1399
  <head>
@@ -1941,7 +1985,7 @@ async function cmdInit(argv) {
1941
1985
  defaultDark = DARK_THEMES[0];
1942
1986
  defaultLight = LIGHT_THEMES[0];
1943
1987
  } else {
1944
- console.log(CLI_BANNER);
1988
+ console.log(getBanner());
1945
1989
  framework = await selectMenu(
1946
1990
  [
1947
1991
  { value: 'vanilla', label: 'Vanilla JS (HTML + CSS + same styles & components)', color: C.vanilla },
@@ -2061,7 +2105,7 @@ async function cmdInit(argv) {
2061
2105
  const useAstroBase = selectedTemplate === 'full' && fullAllComponents && framework === 'astro' && existsSync(astroCoreDir) && !useFullVariant;
2062
2106
  const useSvelteBase = selectedTemplate === 'full' && fullAllComponents && framework === 'svelte' && existsSync(svelteCoreDir) && !useFullVariant;
2063
2107
  const useVanillaCore = selectedTemplate === 'full' && fullAllComponents && framework === 'vanilla' && existsSync(getScaffoldVanillaIndex()) && !useFullVariant && selectedVariation === 'landing';
2064
- const useVanillaWithOverlay = selectedTemplate === 'full' && fullAllComponents && framework === 'vanilla' && (selectedVariation === 'docs' || selectedVariation === 'dashboard') && getVariantDir('vanilla', selectedVariation);
2108
+ const useVanillaWithOverlay = selectedTemplate === 'full' && framework === 'vanilla' && (selectedVariation === 'docs' || selectedVariation === 'dashboard') && getVariantDir('vanilla', selectedVariation);
2065
2109
 
2066
2110
  // Full gets all required dependencies so everything works; manual gets deps when user picks (see prompt labels).
2067
2111
  let componentsToCopy = selectedComponents;
@@ -2070,7 +2114,7 @@ async function cmdInit(argv) {
2070
2114
  logAddedDeps(selectedComponents, componentsToCopy, framework);
2071
2115
  }
2072
2116
  let vanillaSoundScript = '';
2073
- if (framework === 'vanilla' && (useVanillaCore || componentsToCopy.includes('Settings') || componentsToCopy.includes('SoundEffects'))) {
2117
+ if (framework === 'vanilla' && (useVanillaCore || useVanillaWithOverlay || componentsToCopy.includes('Settings') || componentsToCopy.includes('SoundEffects'))) {
2074
2118
  const soundPath = join(getPackageRoot(), 'scaffold', 'shared', 'sound-effects-inline.js');
2075
2119
  if (existsSync(soundPath)) {
2076
2120
  let script = readFileSync(soundPath, 'utf8');
@@ -2079,17 +2123,20 @@ async function cmdInit(argv) {
2079
2123
  }
2080
2124
  }
2081
2125
 
2082
- // Astro layout: inject Navbar and Settings when those components are selected so the settings menu works.
2083
- if ((framework === 'astro') && (useHandpickAstro || useAstroBase)) {
2084
- const hasNavbar = componentsToCopy.includes('Navbar');
2085
- const hasSettings = componentsToCopy.includes('Settings');
2086
- const hasSound = useAstroBase || hasSettings || componentsToCopy.includes('SoundEffects');
2126
+ // Astro layout: inject Navbar, Settings, Footer when Full variant or when those components are selected.
2127
+ const astroFullLayout = (framework === 'astro') && (useFullVariant || useHandpickAstro || useAstroBase);
2128
+ if (astroFullLayout) {
2129
+ const hasNavbar = useFullVariant || componentsToCopy.includes('Navbar');
2130
+ const hasSettings = useFullVariant || componentsToCopy.includes('Settings');
2131
+ const hasFooter = useFullVariant || componentsToCopy.includes('Footer');
2132
+ const hasSound = useFullVariant || useAstroBase || hasSettings || componentsToCopy.includes('SoundEffects');
2087
2133
  const layoutImports = [];
2088
2134
  if (hasNavbar) layoutImports.push("import Navbar from '../components/rizzo/Navbar.astro';");
2089
2135
  if (hasSettings) layoutImports.push("import Settings from '../components/rizzo/Settings.astro';");
2136
+ if (hasFooter) layoutImports.push("import Footer from '../components/rizzo/Footer.astro';");
2090
2137
  replacements['{{RIZZO_LAYOUT_IMPORTS}}'] = layoutImports.length ? '\n' + layoutImports.join('\n') + '\n' : '\n';
2091
2138
  replacements['{{RIZZO_LAYOUT_BODY_TOP}}'] = hasNavbar ? '\n <Navbar />' : '';
2092
- replacements['{{RIZZO_LAYOUT_BODY_BOTTOM}}'] = hasSettings ? '\n <Settings />' : '';
2139
+ replacements['{{RIZZO_LAYOUT_BODY_BOTTOM}}'] = [hasSettings ? '\n <Settings />' : '', hasFooter ? '\n <Footer />' : ''].filter(Boolean).join('');
2093
2140
  if (hasSound) {
2094
2141
  const soundPath = join(getPackageRoot(), 'scaffold', 'shared', 'sound-effects-inline.js');
2095
2142
  if (existsSync(soundPath)) {
@@ -2102,6 +2149,13 @@ async function cmdInit(argv) {
2102
2149
  replacements['{{RIZZO_LAYOUT_BODY_BOTTOM}}'] = '';
2103
2150
  }
2104
2151
 
2152
+ if (useFullVariant && framework === 'svelte') {
2153
+ const soundPath = join(getPackageRoot(), 'scaffold', 'shared', 'sound-effects-inline.js');
2154
+ if (existsSync(soundPath)) {
2155
+ replacements['{{RIZZO_SOUND_SCRIPT}}'] = '\n <script>\n' + readFileSync(soundPath, 'utf8') + '\n </script>';
2156
+ }
2157
+ }
2158
+
2105
2159
  // Svelte app.html: inject sound script when Settings or SoundEffects is included (identical behavior to Astro).
2106
2160
  if ((framework === 'svelte') && (useHandpickSvelte || useSvelteBase)) {
2107
2161
  const hasSound = useSvelteBase || componentsToCopy.includes('Settings') || componentsToCopy.includes('SoundEffects');
@@ -2123,6 +2177,7 @@ async function cmdInit(argv) {
2123
2177
  const fullDir = getVariantDir('astro', 'full');
2124
2178
  copyDirRecursiveWithReplacements(fullDir, projectDir, replacements);
2125
2179
  copyRizzoCssAndFontsForAstro(projectDir, cssSource);
2180
+ copyAstroComponents(projectDir, componentsToCopy);
2126
2181
  cssTarget = join(projectDir, 'public', 'css', 'rizzo.min.css');
2127
2182
  if (existsSync(cssTarget) && statSync(cssTarget).size < 5000) {
2128
2183
  console.warn('\nWarning: rizzo.min.css is very small. From repo root run: pnpm build:css');
@@ -2135,6 +2190,7 @@ async function cmdInit(argv) {
2135
2190
  const fullDir = getVariantDir('svelte', 'full');
2136
2191
  copyDirRecursiveWithReplacements(fullDir, projectDir, replacements);
2137
2192
  copyRizzoCssAndFontsForSvelte(projectDir, cssSource);
2193
+ copySvelteComponents(projectDir, componentsToCopy);
2138
2194
  cssTarget = join(projectDir, 'static', 'css', 'rizzo.min.css');
2139
2195
  if (existsSync(cssTarget) && statSync(cssTarget).size < 5000) {
2140
2196
  console.warn('\nWarning: rizzo.min.css is very small. From repo root run: pnpm build:css');
@@ -2144,8 +2200,11 @@ async function cmdInit(argv) {
2144
2200
  copyRizzoIcons(projectDir, 'svelte');
2145
2201
  } else if (useFullVariant && framework === 'vanilla') {
2146
2202
  mkdirSync(projectDir, { recursive: true });
2203
+ replacements['{{LINK_HREF}}'] = pathsForScaffold.linkHref || 'css/rizzo.min.css';
2204
+ replacements['{{NAVBAR_HTML}}'] = getNavbarHtmlVanilla(name || 'App', 'index.html');
2147
2205
  const fullDir = getVariantDir('vanilla', 'full');
2148
2206
  copyDirRecursiveWithReplacements(fullDir, projectDir, replacements);
2207
+ copyVanillaComponents(projectDir, Object.keys(VANILLA_COMPONENT_SLUGS), replacements);
2149
2208
  const cssDir = join(projectDir, pathsForScaffold.targetDir);
2150
2209
  cssTarget = join(cssDir, 'rizzo.min.css');
2151
2210
  mkdirSync(cssDir, { recursive: true });
@@ -2230,7 +2289,7 @@ async function cmdInit(argv) {
2230
2289
  copyRizzoIcons(projectDir, 'svelte');
2231
2290
  copySvelteComponents(projectDir, componentsToCopy);
2232
2291
  }
2233
- } else if (useVanillaCore) {
2292
+ } else if (useVanillaCore || useVanillaWithOverlay) {
2234
2293
  const cssDir = join(projectDir, pathsForScaffold.targetDir);
2235
2294
  cssTarget = join(cssDir, 'rizzo.min.css');
2236
2295
  const linkHref = 'css/rizzo.min.css';
@@ -2241,26 +2300,28 @@ async function cmdInit(argv) {
2241
2300
  if (statSync(cssTarget).size < 5000) {
2242
2301
  console.warn('\nWarning: rizzo.min.css is very small. From repo root run: pnpm build:css');
2243
2302
  }
2244
- const vanillaScaffoldPath = getScaffoldVanillaIndex();
2245
- indexPath = join(projectDir, 'index.html');
2246
- let indexHtml = readFileSync(vanillaScaffoldPath, 'utf8');
2247
- const navbarForIndex = getNavbarHtmlVanilla(name || 'App', 'index.html');
2248
- indexHtml = indexHtml
2249
- .replace(/\{\{DATA_THEME\}\}/g, theme)
2250
- .replace(/\{\{DEFAULT_DARK\}\}/g, defaultDark)
2251
- .replace(/\{\{DEFAULT_LIGHT\}\}/g, defaultLight)
2252
- .replace(/\{\{THEME_LIST_COMMENT\}\}/g, themeComment)
2253
- .replace(/\{\{TITLE\}\}/g, name || 'App')
2254
- .replace(/\{\{LINK_HREF\}\}/g, linkHref)
2255
- .replace(/\{\{NAVBAR_HTML\}\}/g, navbarForIndex);
2256
2303
  const vanillaSkipped = [];
2257
- if (existsSync(indexPath)) {
2258
- vanillaSkipped.push({ relativePath: 'index.html', content: indexHtml });
2259
- } else {
2260
- writeFileSync(indexPath, indexHtml, 'utf8');
2261
- }
2262
2304
  if (useVanillaWithOverlay) {
2263
2305
  copyVariantOverlay(projectDir, 'vanilla', selectedVariation, { ...replacements, '{{LINK_HREF}}': linkHref, '{{TITLE}}': name || 'App', '{{DATA_THEME}}': theme, '{{THEME_LIST_COMMENT}}': themeComment });
2306
+ indexPath = join(projectDir, 'index.html');
2307
+ } else {
2308
+ const vanillaScaffoldPath = getScaffoldVanillaIndex();
2309
+ indexPath = join(projectDir, 'index.html');
2310
+ let indexHtml = readFileSync(vanillaScaffoldPath, 'utf8');
2311
+ const navbarForIndex = getNavbarHtmlVanilla(name || 'App', 'index.html');
2312
+ indexHtml = indexHtml
2313
+ .replace(/\{\{DATA_THEME\}\}/g, theme)
2314
+ .replace(/\{\{DEFAULT_DARK\}\}/g, defaultDark)
2315
+ .replace(/\{\{DEFAULT_LIGHT\}\}/g, defaultLight)
2316
+ .replace(/\{\{THEME_LIST_COMMENT\}\}/g, themeComment)
2317
+ .replace(/\{\{TITLE\}\}/g, name || 'App')
2318
+ .replace(/\{\{LINK_HREF\}\}/g, linkHref)
2319
+ .replace(/\{\{NAVBAR_HTML\}\}/g, navbarForIndex);
2320
+ if (existsSync(indexPath)) {
2321
+ vanillaSkipped.push({ relativePath: 'index.html', content: indexHtml });
2322
+ } else {
2323
+ writeFileSync(indexPath, indexHtml, 'utf8');
2324
+ }
2264
2325
  }
2265
2326
  copyRizzoIcons(projectDir, 'vanilla');
2266
2327
  const vanillaReadme = join(getPackageRoot(), 'scaffold', 'vanilla', SCAFFOLD_README_FILENAME);
@@ -2275,7 +2336,8 @@ async function cmdInit(argv) {
2275
2336
  writeFileSync(join(projectDir, 'js', 'main.js'), mainJs, 'utf8');
2276
2337
  }
2277
2338
  const vanillaCoreRepl = { ...replacements, '{{LINK_HREF}}': linkHref };
2278
- copyVanillaComponents(projectDir, Object.keys(VANILLA_COMPONENT_SLUGS), vanillaCoreRepl);
2339
+ const vanillaComponentSet = (useVanillaCore || fullAllComponents) ? Object.keys(VANILLA_COMPONENT_SLUGS) : selectedComponents;
2340
+ copyVanillaComponents(projectDir, vanillaComponentSet, vanillaCoreRepl);
2279
2341
  if (vanillaSkipped.length > 0) {
2280
2342
  writeFileSync(join(projectDir, RIZZO_SETUP_FILE), buildRizzoSetupMd('vanilla', { linkHref, theme, defaultDark, defaultLight, skippedFiles: vanillaSkipped }), 'utf8');
2281
2343
  }
@@ -2379,8 +2441,8 @@ async function cmdInit(argv) {
2379
2441
  console.log(' - ' + cssTarget);
2380
2442
  if (indexPath) console.log(' - ' + indexPath);
2381
2443
  if (framework === 'vanilla') {
2382
- if (useVanillaCore) {
2383
- console.log(' - Vanilla JS (full): theme switcher, js/main.js, icons, component showcase, ' + SCAFFOLD_README_FILENAME + '.');
2444
+ if (useVanillaCore || useVanillaWithOverlay) {
2445
+ console.log(' - Vanilla JS (full): theme switcher, js/main.js, icons, component showcase, ' + SCAFFOLD_README_FILENAME + '.' + (useVanillaWithOverlay ? ' (' + selectedVariation + ' template)' : ''));
2384
2446
  } else if (selectedTemplate === 'landing') {
2385
2447
  console.log(' - ' + RIZZO_SETUP_FILE + ' has instructions and snippets.');
2386
2448
  } else {
@@ -168,7 +168,8 @@ div.navbar__link{background:none;border:none;color:inherit;cursor:pointer;font:i
168
168
  [data-theme="shades-of-purple"] .devicon--docker .devicon__path--dark,
169
169
  [data-theme="shades-of-purple"] .devicon--playwright .devicon__path--dark,
170
170
  [data-theme="shades-of-purple"] .devicon--rust .devicon__path{fill:var(--icon)}@media (width <= 640px){.icons-grid{gap:var(--spacing-2);grid-template-columns:repeat(2,1fr)}.icon-card{min-height:8.5rem;padding:var(--spacing-2)}.icon-card__preview{margin-bottom:var(--spacing-1);min-height:var(--spacing-24)}.icon-card__icon{height:var(--spacing-8);width:var(--spacing-8)}.icon-card__name{font-size:calc(var(--font-size-xs)*.875)}.icon-card__hint{font-size:calc(var(--font-size-xs)*.75)}}.dropdown{display:inline-block;position:relative}.dropdown__trigger{align-items:center;background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);color:var(--text);cursor:pointer;display:flex;font-family:var(--font-family);font-size:var(--font-size-sm);gap:var(--spacing-2);padding:var(--spacing-2) var(--spacing-4);transition:background-color var(--transition-base),border-color var(--transition-base),color var(--transition-base)}.dropdown__trigger:hover{background-color:var(--background);border-color:var(--accent);color:var(--accent)}.dropdown__trigger:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.dropdown__trigger[aria-expanded="true"] .dropdown__icon{transform:rotate(180deg)}
171
- .dropdown__trigger:focus-visible .dropdown__icon,.dropdown__trigger:hover .dropdown__icon{color:var(--accent)}.dropdown__trigger-text{flex:1;text-align:left}.dropdown__icon{color:var(--icon);flex-shrink:0;transition:transform var(--transition-base),color var(--transition-base)}.dropdown__menu{background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-md);list-style:none;margin:0;max-width:calc(100vw - var(--spacing-8));min-width:var(--spacing-64);opacity:0;overflow:visible!important;padding:var(--spacing-2) 0;position:absolute;top:calc(100% + var(--spacing-2));transform:translateY(calc(var(--spacing-2)*-1));transition:opacity var(--transition-base),visibility var(--transition-base),transform var(--transition-base);visibility:hidden;width:-moz-max-content;width:max-content;z-index:var(--z-dropdown)}.dropdown__menu--left{left:0}.dropdown__menu--right{right:0}.dropdown__menu--start{left:0}.dropdown__menu--end{right:0}.dropdown__menu--open{opacity:1;transform:translateY(0);visibility:visible}.dropdown__item{align-items:center;background-color:transparent;border:none;color:var(--text);cursor:pointer;display:flex;font-family:var(--font-family);font-size:var(--font-size-sm);gap:var(--spacing-2);min-height:var(--touch-target-min);overflow:hidden;padding:var(--spacing-2) var(--spacing-4);text-align:left;text-decoration:none;text-overflow:ellipsis;transition:background-color var(--transition-fast),color var(--transition-fast);-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap;width:100%}
171
+ .dropdown__trigger:focus-visible .dropdown__icon,.dropdown__trigger:hover .dropdown__icon{color:var(--accent)}
172
+ #themes-preview .dropdown__trigger:focus-visible .themes-page__trigger-icon,#themes-preview .dropdown__trigger:hover .themes-page__trigger-icon{color:var(--accent)!important;stroke:var(--accent)!important}.dropdown__trigger-text{flex:1;text-align:left}.dropdown__icon{color:var(--icon);flex-shrink:0;transition:transform var(--transition-base),color var(--transition-base)}.dropdown__menu{background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-md);list-style:none;margin:0;max-width:calc(100vw - var(--spacing-8));min-width:var(--spacing-64);opacity:0;overflow:visible!important;padding:var(--spacing-2) 0;position:absolute;top:calc(100% + var(--spacing-2));transform:translateY(calc(var(--spacing-2)*-1));transition:opacity var(--transition-base),visibility var(--transition-base),transform var(--transition-base);visibility:hidden;width:-moz-max-content;width:max-content;z-index:var(--z-dropdown)}.dropdown__menu--left{left:0}.dropdown__menu--right{right:0}.dropdown__menu--start{left:0}.dropdown__menu--end{right:0}.dropdown__menu--open{opacity:1;transform:translateY(0);visibility:visible}.dropdown__item{align-items:center;background-color:transparent;border:none;color:var(--text);cursor:pointer;display:flex;font-family:var(--font-family);font-size:var(--font-size-sm);gap:var(--spacing-2);min-height:var(--touch-target-min);overflow:hidden;padding:var(--spacing-2) var(--spacing-4);text-align:left;text-decoration:none;text-overflow:ellipsis;transition:background-color var(--transition-fast),color var(--transition-fast);-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap;width:100%}
172
173
  .dropdown__item:focus-visible:not(.dropdown__item--disabled),.dropdown__item:hover:not(.dropdown__item--disabled){background-color:var(--background);color:var(--accent);outline:none}.dropdown__item:focus-visible:not(.dropdown__item--disabled){box-shadow:inset 0 0 0 var(--outline-width) var(--accent)}.dropdown__item--disabled{cursor:not-allowed;opacity:var(--opacity-50);pointer-events:none}.dropdown__item-icon{flex-shrink:0;height:var(--spacing-4);width:var(--spacing-4)}.dropdown__separator{background-color:var(--border);height:var(--border-width);margin:var(--spacing-2) 0}.dropdown__item-wrapper,.dropdown__item-wrapper--has-submenu{overflow:visible;position:relative}.dropdown__item--has-submenu{align-items:center;display:flex;justify-content:space-between}.dropdown__item-arrow{color:var(--icon);flex-shrink:0;height:var(--spacing-3);margin-left:var(--spacing-2);transition:transform var(--transition-base),color var(--transition-base);width:var(--spacing-3)}
173
174
  .dropdown__item:focus-visible:not(.dropdown__item--disabled) .dropdown__item-arrow,.dropdown__item:hover:not(.dropdown__item--disabled) .dropdown__item-arrow{color:var(--accent)}.dropdown__item-wrapper--has-submenu .dropdown__submenu--open ~ .dropdown__item-arrow,
174
175
  .dropdown__item-wrapper--has-submenu:has(.dropdown__submenu--open) .dropdown__item-arrow{transform:rotate(-90deg)}.dropdown__item-wrapper--has-submenu .dropdown__item[aria-expanded="true"] .dropdown__item-arrow{transform:rotate(-90deg)}.dropdown__submenu{background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-md);display:block;left:0;list-style:none;margin:0;max-width:100%;min-width:100%;opacity:0;overflow:visible!important;padding:var(--spacing-2) 0;pointer-events:none;position:absolute;right:0;top:100%;transform:translateY(calc(var(--spacing-2)*-1));transition:opacity var(--transition-base),visibility var(--transition-base),transform var(--transition-base);visibility:hidden;width:100%;z-index:var(--z-dropdown-submenu)}.dropdown__submenu--open{display:block!important;opacity:1!important;pointer-events:all!important;transform:translateY(0)!important;visibility:visible!important}.dropdown__submenu-item{min-height:var(--touch-target-min);padding:var(--spacing-2) var(--spacing-4)}.dropdown__submenu .dropdown__item{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (width <= 640px){.dropdown__menu{left:0;max-width:calc(100vw - var(--spacing-4));min-width:100%;right:auto}.dropdown__menu--right{left:auto;right:0}.dropdown__submenu{max-width:100%}}@media (prefers-reduced-motion:reduce){.dropdown__menu{transform:none;transition:opacity var(--transition-fast),visibility var(--transition-fast)}.dropdown__menu--open{transform:none}.dropdown__icon{transition:none}}.search{display:inline-block}.search,.search__trigger-wrapper{position:relative}.search__trigger{align-items:center;background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);color:var(--text);cursor:pointer;display:flex;font-family:var(--font-family);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);gap:var(--spacing-2);min-height:var(--touch-target-min);min-width:var(--touch-target-min);padding:var(--spacing-2) var(--spacing-3);transition:background-color var(--transition-base),border-color var(--transition-base)}@media (width <= 1024px){.search__trigger{gap:0}.search__icon{flex-shrink:0;height:var(--spacing-5);width:var(--spacing-5)}}.search__icon{color:var(--icon)}.search__trigger:hover{background-color:var(--background);border-color:var(--accent);color:var(--text)}.search__trigger:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.search__kbd{align-items:center;display:none;font-family:var(--font-family-mono);font-size:.875rem;gap:var(--spacing-1);line-height:1;margin-left:auto}.search__kbd-modifier{align-items:center;display:inline-flex}.search__kbd-modifier svg{flex-shrink:0;height:.875rem;width:.875rem}.search__kbd kbd{background-color:var(--background);border:var(--border-width) solid var(--border);border-radius:var(--radius);font-size:inherit;line-height:1;padding:var(--spacing-0-125) var(--spacing-0-375)}@media (width >= 768px){.search__kbd{display:flex}}.search__overlay{backdrop-filter:blur(var(--blur-sm));background-color:var(--overlay);bottom:0;box-sizing:border-box;height:100%;left:0;min-height:100vh;min-height:100dvh;opacity:0;pointer-events:none;position:fixed;right:0;top:0;transition:opacity .2s ease-out;width:100%;z-index:var(--z-search-overlay)}.search__overlay[aria-hidden="false"]{opacity:1;pointer-events:all;z-index:var(--z-search-overlay)}.search__overlay[aria-hidden="true"]{display:none}@media (width <= 1024px){.search__overlay[aria-hidden="true"]{display:none!important;pointer-events:none!important}.search__overlay{backdrop-filter:blur(2px);background-color:oklch(from var(--overlay) l c h/60%)}}.search__panel{background-color:var(--background);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-xl);box-sizing:border-box;display:flex;flex-direction:column;left:50%;max-height:calc(100vh - var(--spacing-8));max-height:calc(100dvh - var(--spacing-8));max-width:var(--spacing-150);opacity:0;outline:none;overflow:hidden;padding-bottom:var(--spacing-6);pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%);transition:opacity .2s ease-out;width:calc(100% - var(--spacing-8));z-index:var(--z-search-panel)}.search__panel[aria-hidden="true"]{display:none}.search__panel[aria-hidden="false"][data-open="true"]{background-color:var(--background);display:flex;opacity:1;pointer-events:all}@media (width <= 640px){.search__panel{max-height:calc(100dvh - var(--spacing-8));max-width:none;width:calc(100% - var(--spacing-8))}}@media (width <= 1024px){.search__panel[aria-hidden="false"][data-open="true"] .search__header{background-color:var(--background)!important;position:relative;z-index:var(--z-1)}}.search__header{background-color:var(--background);border-bottom:var(--border-width) solid var(--border);border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg);gap:var(--spacing-3);padding:var(--spacing-5) var(--spacing-6);position:relative}.search__close-btn,.search__header{align-items:center;display:flex;flex-shrink:0}.search__close-btn{background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);color:var(--text);cursor:pointer;font-family:var(--font-family);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);gap:var(--spacing-2);justify-content:center;min-height:var(--touch-target-min);min-width:var(--touch-target-min);padding:var(--spacing-2);transition:background-color var(--transition-base),border-color var(--transition-base)}.search__close-btn:hover{background-color:var(--background-alt);border-color:var(--accent);color:var(--accent)}.search__close-btn:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.search__close-btn:active{background-color:var(--background-alt)}.search__close-text{display:none}@media (width > 1024px){.search__close-btn{min-height:var(--touch-target-min);min-width:var(--touch-target-min);padding:var(--spacing-2)}}@media (width <= 1024px){.search__header{gap:var(--spacing-2);padding:var(--spacing-4)}.search__close-btn{min-height:var(--touch-target-min);padding:var(--spacing-2) var(--spacing-4);white-space:nowrap}.search__close-text{display:inline}.search__input-wrapper{flex:1;min-width:0}}.search__input-wrapper{align-items:center;display:flex;flex:1;position:relative}.search__input-icon{color:var(--icon-dim);flex-shrink:0;height:var(--spacing-5);left:var(--spacing-4);pointer-events:none;position:absolute;top:50%;transform:translateY(-50%);width:var(--spacing-5);z-index:calc(var(--z-base) + 2)}.search__input{background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);box-sizing:border-box;color:var(--text);font-family:var(--font-family);font-size:var(--font-size-base);padding:var(--spacing-3) calc(var(--spacing-14) + var(--spacing-0-125)) var(--spacing-3) var(--spacing-16)!important;transition:border-color var(--transition-base),background-color var(--transition-base);width:100%}.search__input:focus{background-color:var(--background);border-color:var(--accent);outline:none}.search__input::-moz-placeholder{color:var(--text-dim)}.search__input::placeholder{color:var(--text-dim)}.search__clear{align-items:center;background:none;border:none;border-radius:var(--radius);color:var(--text-dim);cursor:pointer;display:flex;height:var(--spacing-8);justify-content:center;opacity:0;padding:0;pointer-events:none;position:absolute;right:var(--spacing-3);transition:color var(--transition-base),background-color var(--transition-base);width:var(--spacing-8);z-index:calc(var(--z-base) + 3)}.search__clear[aria-hidden="false"]{opacity:1;pointer-events:all}@media (width <= 1024px){.search__clear{display:none!important}}.search__clear:hover{background-color:var(--background);color:var(--text)}.search__clear:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.search__results{background-color:var(--background)!important;display:flex!important;flex:1;flex-direction:column;height:auto!important;left:0!important;max-height:calc(var(--vh-70) - var(--spacing-20));min-height:var(--spacing-75)!important;opacity:1!important;overflow-x:hidden;overflow-y:auto;padding:var(--spacing-4) var(--spacing-6) var(--spacing-8) var(--spacing-6);position:relative!important;right:auto!important;visibility:visible!important;width:100%!important;z-index:calc(var(--z-base) + 1)}.search__empty,
@@ -197,13 +198,21 @@ div.navbar__link{background:none;border:none;color:inherit;cursor:pointer;font:i
197
198
  .home__install-or::after,.home__install-or::before{border-left:var(--border-width) solid var(--border);border-top:none;flex:1;min-height:var(--spacing-8);width:0}}.home__install-title{color:var(--text);font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);margin:0 0 var(--spacing-2) 0;text-align:center}.home__install-label{color:var(--text-dim);font-size:var(--font-size-sm);margin:0 0 var(--spacing-4) 0;text-align:center}.home__install-copy{align-items:center;display:flex;justify-content:center;width:100%}.home__install-copy .copy-to-clipboard{justify-content:space-between;width:100%}.home__install-copy .copy-to-clipboard__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.home__cli-tabs{margin-top:var(--spacing-1)}.home__cli-tabs .cli-command-tabs__tabs,
198
199
  .home__cli-tabs .package-install-tabs__tabs{margin-top:0}.home__cli-tabs .tabs__list{margin-bottom:var(--spacing-2);overflow-x:visible;overflow-y:visible;scrollbar-width:none}.home__cli-tabs .tabs__list::-webkit-scrollbar{display:none}.home__cli-tabs .tabs__panel{min-height:0;padding:0}.home__cli-tabs .cli-command-tabs__panel .code-block__header{padding:var(--spacing-1) var(--spacing-2)}.home__cli-tabs .cli-command-tabs__panel .code-block pre{padding:var(--spacing-2)}.home__cli-tabs .cli-command-tabs__panel .code-block,
199
200
  .home__cli-tabs .package-install-tabs__panel .code-block{margin:0;min-width:0;overflow:hidden}.home__features{margin-bottom:var(--spacing-16)}.home__features-intro{color:var(--text-dim);font-size:var(--font-size-lg);line-height:var(--line-height-relaxed);margin:0 auto var(--spacing-10) auto;max-width:var(--spacing-125);text-align:center}.home__features-featured{display:grid;gap:var(--spacing-6);grid-template-columns:repeat(auto-fit,minmax(min(100%,var(--spacing-80)),1fr));margin-bottom:var(--spacing-8)}.home__features-supporting-label{color:var(--text-dim);font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);letter-spacing:var(--letter-spacing-wider);margin:0 0 var(--spacing-4) 0;text-align:center;text-transform:uppercase}.home__grid{display:grid;gap:var(--spacing-6);grid-template-columns:repeat(auto-fit,minmax(var(--spacing-75),1fr));margin-bottom:var(--spacing-16)}.home__grid--supporting{gap:var(--spacing-5);margin-bottom:0}.home__card{background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);color:var(--text);padding:var(--spacing-6);transition:border-color var(--transition-base),box-shadow var(--transition-base)}.home__card:hover{border-color:var(--border);box-shadow:var(--shadow-sm)}.home__card--featured{border-color:var(--border);border-top:3px solid oklch(from var(--accent) l c h/24%);padding:var(--spacing-8)}.home__card--featured:hover{border-color:oklch(from var(--accent) l c h/28%);border-top-color:oklch(from var(--accent) l c h/40%);box-shadow:var(--shadow-md)}.home__card--supporting{display:flex;flex-direction:column;min-height:var(--spacing-32);padding:var(--spacing-5)}.home__card--supporting h3{font-size:var(--font-size-base);margin-bottom:var(--spacing-2)}.home__card--supporting p{font-size:var(--font-size-sm)}.home__card-icon{background-color:oklch(from var(--accent) l c h/14%);border-radius:var(--radius-md);color:var(--accent-fg);display:inline-block;font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);letter-spacing:var(--letter-spacing-wider);margin-bottom:var(--spacing-3);padding:var(--spacing-1) var(--spacing-2);text-transform:uppercase}.home__card h3{color:var(--text);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);margin:0 0 var(--spacing-3) 0}.home__card--featured h3{font-size:var(--font-size-xl);margin-bottom:var(--spacing-4)}.home__card p{color:var(--text-dim);line-height:var(--line-height-relaxed);margin:0}.home__examples{margin-bottom:var(--spacing-16)}.home__example{background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);margin-bottom:var(--spacing-8);padding:var(--spacing-8)}.home__example h3{color:var(--text);font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);margin:0 0 var(--spacing-4) 0}.home__example p{color:var(--text-dim);margin-bottom:var(--spacing-4)}.home__button-group{display:flex;flex-wrap:wrap;gap:var(--spacing-3)}.home__theme-demo{max-width:var(--spacing-75)}.home__theme-demo .theme-switcher{position:relative;width:100%;z-index:var(--z-dropdown)}.home__theme-demo .theme-switcher__menu{z-index:var(--z-dropdown)}.home__add-command{margin-bottom:var(--spacing-16)}.home__add-command-block{align-items:stretch;background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);display:flex;gap:var(--spacing-2);max-width:100%;min-width:0;overflow:hidden}.home__add-command-block pre{color:var(--text);flex:1;font-family:var(--font-family-mono);font-size:var(--font-size-sm);line-height:var(--line-height-relaxed);margin:0;min-width:0;overflow-x:auto;padding:var(--spacing-4)}.home__add-command-block code{white-space:pre}.home__add-command-copy{align-self:center;flex-shrink:0;margin-right:var(--spacing-2)}.home__docs{margin-bottom:var(--spacing-8)}.home__docs-grid{display:grid;gap:var(--spacing-6);grid-template-columns:repeat(auto-fit,minmax(var(--spacing-70),1fr))}.home__doc-card{background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);color:var(--text);display:block;padding:var(--spacing-6);text-decoration:none;transition:border-color var(--transition-base),transform var(--transition-base),box-shadow var(--transition-base)}.home__doc-card:hover{border-color:var(--accent);box-shadow:var(--shadow-md);transform:translateY(calc(var(--spacing-0-125)*-1))}.home__doc-card:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.home__doc-card h3{color:var(--accent-fg);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);margin:0 0 var(--spacing-2) 0}.home__doc-card p{color:var(--text-dim);line-height:var(--line-height-relaxed);margin:0}@media (width <= 640px){.home__announcement{align-items:center;flex-direction:column;gap:var(--spacing-1-5);padding:var(--spacing-3) var(--spacing-4);text-align:center}.home__announcement-text{line-height:var(--line-height-relaxed)}.home__title{font-size:var(--font-size-4xl)}.home__subtitle{font-size:var(--font-size-lg)}.home__showcase-grid{max-width:100%}.home__showcase .home__example:last-child{justify-self:stretch;max-width:100%}.home__theme-demo{max-width:100%;width:100%}.home__install-grid{grid-template-columns:1fr}.home__features-intro{font-size:var(--font-size-base)}.home__features-featured{grid-template-columns:1fr}.home__card--supporting{min-height:0}
200
- .home__docs-grid,.home__grid{grid-template-columns:1fr}}.docs-section-grid{display:grid;gap:var(--spacing-6);grid-template-columns:repeat(auto-fill,minmax(var(--spacing-70),1fr));margin:var(--section-spacing) 0}.docs-format-tabs{border-bottom:var(--border-width) solid var(--border);display:flex;flex-wrap:wrap;gap:var(--spacing-2);margin:var(--spacing-8) 0 var(--spacing-4);overflow-x:auto;padding-bottom:var(--spacing-2)}.docs-format-tab{align-items:center;background:none;border:none;border-bottom:var(--border-width-2) solid transparent;border-radius:0;color:var(--text-dim);cursor:pointer;display:inline-flex;font-family:var(--font-family);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);margin-bottom:calc(var(--spacing-2)*-1);padding:var(--spacing-2) var(--spacing-4);transition:color var(--transition-base),border-color var(--transition-base);white-space:nowrap}.docs-format-tab:hover{color:var(--text)}.docs-format-tab[aria-selected="true"]{border-bottom-color:var(--accent-fg);color:var(--accent-fg)}.docs-format-tab:focus-visible{border-radius:var(--radius);outline:var(--outline-width) solid var(--accent-fg);outline-offset:var(--outline-offset)}.colors-doc__format-section{margin-bottom:var(--section-spacing)}.colors-doc__format-heading{color:var(--text);font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);margin:0 0 var(--spacing-2) 0}.colors-doc__format-intro{color:var(--text-dim);font-size:var(--font-size-base);margin:0 0 var(--spacing-4) 0}.colors-doc .color-format-tabs{border-bottom:var(--border-width) solid var(--border);display:flex;flex-wrap:wrap;gap:var(--spacing-2);margin:var(--spacing-4) 0 var(--spacing-4);overflow-x:auto;padding-bottom:var(--spacing-2)}.colors-doc .color-format-tab{align-items:center;background:none;border:none;border-bottom:var(--border-width-2) solid transparent;border-radius:0;color:var(--text-dim);cursor:pointer;display:inline-flex;font-family:var(--font-family);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);margin-bottom:calc(var(--spacing-2)*-1);padding:var(--spacing-2) var(--spacing-4);transition:color var(--transition-base),border-color var(--transition-base);white-space:nowrap}.colors-doc .color-format-tab:hover{color:var(--text)}.colors-doc .color-format-tab[aria-selected="true"]{border-bottom-color:var(--accent-fg);color:var(--accent-fg)}.colors-doc .color-format-tab:focus-visible{border-radius:var(--radius);outline:var(--outline-width) solid var(--accent-fg);outline-offset:var(--outline-offset)}.colors-doc .color-card{background-color:var(--color-card-bg,var(--background,#64748b))!important;border-radius:var(--radius-lg);display:flex;flex-direction:column;min-height:var(--spacing-80);overflow:hidden}.colors-doc .color-card .color-swatch{background-color:var(--swatch-bg,var(--background,#64748b))!important;flex:1 1 auto;min-height:var(--spacing-80);position:relative}.colors-doc .color-card .color-swatch .color-swatch__bg{background-color:var(--swatch-bg,var(--background,#64748b))!important;border-radius:inherit;inset:0;pointer-events:none;position:absolute;z-index:0}.colors-doc .color-card .color-swatch > .color-swatch__info{background-color:#1e293b!important;color:#f1f5f9!important;position:relative;z-index:1}.colors-doc .color-swatch .copy-to-clipboard__text{color:inherit;min-height:1.5em;overflow:visible!important;text-overflow:clip!important;white-space:normal!important;word-break:break-all}@media (width <= 640px){.docs-section-grid{grid-template-columns:1fr}}.theming-page__hero{margin-bottom:var(--section-spacing-lg);padding:var(--spacing-14) 0 var(--spacing-16);text-align:center}.theming-page__hero-title{color:var(--text);font-size:var(--font-size-4xl);font-weight:var(--font-weight-extrabold);line-height:var(--line-height-tight);margin:0 0 var(--spacing-6) 0}.theming-page__hero-subtitle{color:var(--text-dim);font-size:var(--font-size-xl);line-height:var(--line-height-relaxed);margin:0 auto var(--spacing-8) auto;max-width:var(--spacing-175)}.theming-page__hero-demo{align-items:center;display:inline-flex;flex-direction:column;margin-top:var(--spacing-6)}.theming-page__mobile-dropdown{display:none;max-width:var(--theme-switcher-width);width:100%}.theming-page__mobile-dropdown-inner{width:100%}@media (width <= 1024px){.theming-page .theming-page__mobile-dropdown{display:block!important}.theming-page .theming-page__hero-switcher{display:none!important}}@media (width <= 640px){.theming-page__hero-title{font-size:var(--font-size-3xl)}.theming-page__hero-subtitle{font-size:var(--font-size-lg)}}.theming-page .card a{color:var(--text);transition:color var(--transition-base)}.theming-page .card a:hover{color:var(--accent-fg)}.theming-page .card:hover{transform:translateY(calc(var(--spacing-0-125)*-1));transition:transform var(--transition-base)}.reduced-motion .theming-page .card:hover{transform:none}.theming-page__grid{display:grid;gap:var(--spacing-6);grid-template-columns:repeat(auto-fill,minmax(var(--spacing-70),1fr));margin:var(--section-spacing) 0}.theming-page__card-header{align-items:center;display:flex;gap:var(--spacing-3);margin-bottom:var(--spacing-3)}.theming-page__card-header h3{margin:0}.theming-page__card-desc{color:var(--text-dim);font-size:var(--font-size-sm);line-height:var(--line-height-relaxed);margin:0 0 var(--spacing-2)}.theming-page__card-meta{color:var(--text-dim);font-size:var(--font-size-xs);margin:0}.theming-page__card-meta:last-of-type{margin-top:var(--spacing-1)}
201
+ .home__docs-grid,.home__grid{grid-template-columns:1fr}}.docs-section-grid{display:grid;gap:var(--spacing-6);grid-template-columns:repeat(auto-fill,minmax(var(--spacing-70),1fr));margin:var(--section-spacing) 0}.docs-format-tabs{border-bottom:var(--border-width) solid var(--border);display:flex;flex-wrap:wrap;gap:var(--spacing-2);margin:var(--spacing-8) 0 var(--spacing-4);overflow-x:auto;padding-bottom:var(--spacing-2)}.docs-format-tab{align-items:center;background:none;border:none;border-bottom:var(--border-width-2) solid transparent;border-radius:0;color:var(--text-dim);cursor:pointer;display:inline-flex;font-family:var(--font-family);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);margin-bottom:calc(var(--spacing-2)*-1);padding:var(--spacing-2) var(--spacing-4);transition:color var(--transition-base),border-color var(--transition-base);white-space:nowrap}.docs-format-tab:hover{color:var(--text)}.docs-format-tab[aria-selected="true"]{border-bottom-color:var(--accent-fg);color:var(--accent-fg)}.docs-format-tab:focus-visible{border-radius:var(--radius);outline:var(--outline-width) solid var(--accent-fg);outline-offset:var(--outline-offset)}.colors-doc__format-section{margin-bottom:var(--section-spacing)}.colors-doc__format-heading{color:var(--text);font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);margin:0 0 var(--spacing-2) 0}.colors-doc__format-intro{color:var(--text-dim);font-size:var(--font-size-base);margin:0 0 var(--spacing-4) 0}.colors-doc .color-format-tabs{border-bottom:var(--border-width) solid var(--border);display:flex;flex-wrap:wrap;gap:var(--spacing-2);margin:var(--spacing-4) 0 var(--spacing-4);overflow-x:auto;padding-bottom:var(--spacing-2)}.colors-doc .color-format-tab{align-items:center;background:none;border:none;border-bottom:var(--border-width-2) solid transparent;border-radius:0;color:var(--text-dim);cursor:pointer;display:inline-flex;font-family:var(--font-family);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);margin-bottom:calc(var(--spacing-2)*-1);padding:var(--spacing-2) var(--spacing-4);transition:color var(--transition-base),border-color var(--transition-base);white-space:nowrap}.colors-doc .color-format-tab:hover{color:var(--text)}.colors-doc .color-format-tab[aria-selected="true"]{border-bottom-color:var(--accent-fg);color:var(--accent-fg)}.colors-doc .color-format-tab:focus-visible{border-radius:var(--radius);outline:var(--outline-width) solid var(--accent-fg);outline-offset:var(--outline-offset)}.colors-doc .color-card{background-color:var(--color-card-bg,var(--swatch-bg,var(--background)))!important;border-radius:var(--radius-lg);display:flex;flex-direction:column;min-height:var(--spacing-80);overflow:hidden}.colors-doc .color-card .color-swatch{background-color:var(--swatch-bg,var(--background))!important;flex:1 1 auto;min-height:var(--spacing-80);position:relative}.colors-doc .color-card .color-swatch .color-swatch__bg{background-color:var(--swatch-bg,var(--background))!important;border-radius:inherit;inset:0;pointer-events:none;position:absolute;z-index:0}.colors-doc .color-card .color-swatch > .color-swatch__info{background-color:var(--background)!important;color:var(--text)!important;position:relative;z-index:1}.colors-doc .color-swatch .copy-to-clipboard__text{color:inherit;min-height:1.5em;overflow:visible!important;text-overflow:clip!important;white-space:normal!important;word-break:break-all}@media (width <= 640px){.docs-section-grid{grid-template-columns:1fr}}.theming-page__hero{margin-bottom:var(--spacing-10);padding:var(--spacing-12) 0 var(--spacing-10);text-align:center}.theming-page__hero-title{color:var(--text);font-size:var(--font-size-4xl);font-weight:var(--font-weight-extrabold);line-height:var(--line-height-tight);margin:0 0 var(--spacing-4) 0}.theming-page__hero-subtitle{color:var(--text-dim);font-size:var(--font-size-xl);line-height:var(--line-height-relaxed);margin:0 auto var(--spacing-6) auto;max-width:var(--spacing-175)}.theming-page__hero-demo{align-items:center;display:inline-flex;flex-direction:column;margin-top:var(--spacing-5)}.theming-page .docs__content > section{margin-bottom:var(--spacing-10);margin-top:0}.theming-page .docs__content > section:last-child{margin-bottom:0}.theming-page .docs__content > section > h2{margin-bottom:var(--spacing-5);margin-top:0;padding-bottom:var(--spacing-2)}.theming-page__mobile-dropdown{display:none;max-width:var(--theme-switcher-width);width:100%}.theming-page__mobile-dropdown-inner{width:100%}@media (width <= 1024px){.theming-page .theming-page__mobile-dropdown{display:block!important}.theming-page .theming-page__hero-switcher{display:none!important}}@media (width <= 640px){.theming-page__hero-title{font-size:var(--font-size-3xl)}.theming-page__hero-subtitle{font-size:var(--font-size-lg)}}.theming-page .card a{color:var(--text);transition:color var(--transition-base)}.theming-page .card a:hover{color:var(--accent-fg)}.theming-page .card:hover{transform:translateY(calc(var(--spacing-0-125)*-1));transition:transform var(--transition-base)}.reduced-motion .theming-page .card:hover{transform:none}.theming-page__grid{display:grid;gap:var(--spacing-4);grid-template-columns:1fr;margin:0}.theming-page__grid .card{min-width:0;width:100%}.theming-page__card-header{align-items:center;display:flex;gap:var(--spacing-3);margin-bottom:var(--spacing-2)}.theming-page__card-header h3{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);margin:0}.theming-page__card-desc{color:var(--text-dim);font-size:var(--font-size-sm);line-height:var(--line-height-relaxed);margin:0 0 var(--spacing-2)}.theming-page__card-meta{color:var(--text-dim);font-size:var(--font-size-xs);margin:0}.theming-page__card-meta:last-of-type{margin-top:var(--spacing-1)}
201
202
  .block-card-link,.component-card-link{text-decoration:none}
202
- .block-card-link:hover,.component-card-link:hover{text-decoration:underline;text-underline-offset:.15em}.theme-by{color:var(--text-dim);font-size:var(--font-size-sm);margin:0 0 var(--spacing-4) 0}.theme-by a{color:var(--accent-fg);text-decoration:none;transition:color var(--transition-base)}.theme-by a:hover{color:var(--accent-fg-hover);text-decoration:underline}html:has([data-docs]){scroll-behavior:smooth}.docs{align-items:stretch;background-color:var(--background);display:flex;flex-direction:row;min-height:calc(100vh - 4rem);padding:var(--content-padding-y) 0;position:relative}.docs__sidebar-toggle{align-items:center;background-color:var(--accent);border:none;border-radius:var(--radius-md);bottom:var(--spacing-6);box-shadow:var(--shadow-lg);color:var(--accent-text);cursor:pointer;display:none;font-family:var(--font-family);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);gap:var(--spacing-2);left:var(--spacing-6);padding:var(--spacing-3) var(--spacing-4);position:fixed;transition:background-color var(--transition-base),transform var(--transition-base);z-index:calc(var(--z-settings) - 1)}.docs__sidebar-toggle:hover{background-color:var(--accent-hover)}.docs__sidebar-toggle:focus-visible{outline:var(--outline-width) solid var(--accent-text);outline-offset:var(--outline-offset)}.docs__sidebar-toggle-icon{display:flex;flex-direction:column;gap:var(--spacing-0-375)}.docs__sidebar-toggle-icon span{background-color:currentcolor;border-radius:1px;display:block;height:2px;width:var(--spacing-4)}.docs__sidebar-overlay{background-color:oklch(0 0 0deg/40%);display:none;inset:0;opacity:0;position:fixed;transition:opacity var(--transition-base),visibility var(--transition-base);visibility:hidden;z-index:calc(var(--z-settings) - 2)}.docs--sidebar-open .docs__sidebar-overlay{opacity:1;visibility:visible}.docs__main{background-color:var(--background);flex:1 1 0%;min-width:0;width:100%}@media (width >= 1025px){#docs-sidebar-container{align-items:stretch;display:flex;flex-direction:column;min-height:0}}.docs-sidebar{background-color:var(--background);border-right:var(--border-width) solid var(--border);flex-shrink:0;overflow-y:auto;padding:var(--spacing-6) var(--spacing-4) var(--spacing-8) 0;width:var(--docs-sidebar-width,14rem)}@media (width >= 1025px){.docs-sidebar{align-self:flex-start;max-height:calc(100vh - var(--spacing-16) - var(--spacing-4));position:sticky;top:calc(var(--spacing-16) + var(--spacing-4));z-index:1}}.docs-sidebar__nav{display:flex;flex-direction:column;gap:var(--spacing-6)}.docs-sidebar__group-label{color:var(--text-dim);font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);letter-spacing:var(--letter-spacing-wider);margin:0 0 var(--spacing-2) 0;padding:var(--spacing-2) var(--spacing-3) var(--spacing-2);text-transform:uppercase}.docs-sidebar__list{list-style:none;margin:0;padding:0}.docs-sidebar__item{margin:0}.docs-sidebar__link{border-radius:var(--radius-md);color:var(--text);display:block;font-size:var(--font-size-base);padding:var(--spacing-2) var(--spacing-3);text-decoration:none;transition:color var(--transition-base),background-color var(--transition-base)}.docs-sidebar__link:hover{background-color:var(--background-alt);color:var(--text)}.docs-sidebar__link--active{background-color:oklch(from var(--accent-fg) l c h/12%);color:var(--accent-fg);font-weight:var(--font-weight-medium)}.docs-sidebar__link--active:hover{background-color:oklch(from var(--accent-fg) l c h/16%);color:var(--accent-fg-hover)}.docs-sidebar__sublist{border-left:2px solid var(--border);list-style:none;margin:0 0 0 var(--spacing-2);padding:0}.docs-sidebar__subitem{margin:0}.docs-sidebar__sublink{border-radius:0 var(--radius-md) var(--radius-md) 0;color:var(--text);display:block;font-size:var(--font-size-sm);padding:var(--spacing-1) var(--spacing-2) var(--spacing-1) var(--spacing-3);text-decoration:none;transition:color var(--transition-base),background-color var(--transition-base)}.docs-sidebar__sublink:hover{background-color:var(--background-alt);color:var(--text)}.docs-sidebar__sublink--active{background-color:oklch(from var(--accent-fg) l c h/12%);color:var(--accent-fg);font-weight:var(--font-weight-medium)}.docs-sidebar__sublink--active:hover{background-color:oklch(from var(--accent-fg) l c h/16%);color:var(--accent-fg-hover)}.docs-sidebar-demo{background-color:var(--background);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);max-height:18rem;overflow:auto;padding:var(--spacing-3)}.docs-sidebar-demo .docs-sidebar{border-right:none;max-height:none;padding:0 var(--spacing-2) var(--spacing-4) 0;position:static;width:11rem}.docs-sidebar-demo .docs-sidebar__nav{gap:var(--spacing-4)}.docs-sidebar-demo .docs-sidebar__group-label,
203
+ .block-card-link:hover,.component-card-link:hover{text-decoration:underline;text-underline-offset:.15em}.theme-by{color:var(--text-dim);font-size:var(--font-size-sm);margin:0 0 var(--spacing-4) 0}.theme-by a{color:var(--accent-fg);text-decoration:none;transition:color var(--transition-base)}.theme-by a:hover{color:var(--accent-fg-hover);text-decoration:underline}html:has([data-docs]){scroll-behavior:smooth}.docs{align-items:stretch;background-color:var(--background);display:flex;flex-direction:row;min-height:calc(100vh - 4rem);padding:var(--content-padding-y) 0;position:relative}.docs__sidebar-toggle{align-items:center;background-color:var(--accent);border:none;border-radius:var(--radius-md);bottom:var(--spacing-6);box-shadow:var(--shadow-lg);color:var(--accent-text);cursor:pointer;display:none;font-family:var(--font-family);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);gap:var(--spacing-2);left:var(--spacing-6);padding:var(--spacing-3) var(--spacing-4);position:fixed;transition:background-color var(--transition-base),transform var(--transition-base);z-index:calc(var(--z-settings) - 1)}.docs__sidebar-toggle:hover{background-color:var(--accent-hover)}.docs__sidebar-toggle:focus-visible{outline:var(--outline-width) solid var(--accent-text);outline-offset:var(--outline-offset)}.docs__sidebar-toggle-icon{display:flex;flex-direction:column;gap:var(--spacing-0-375)}.docs__sidebar-toggle-icon span{background-color:currentcolor;border-radius:1px;display:block;height:2px;width:var(--spacing-4)}.docs__sidebar-overlay{background-color:var(--overlay);display:none;inset:0;opacity:0;position:fixed;transition:opacity var(--transition-base),visibility var(--transition-base);visibility:hidden;z-index:calc(var(--z-settings) - 2)}.docs--sidebar-open .docs__sidebar-overlay{opacity:1;visibility:visible}.docs__main{background-color:var(--background);flex:1 1 0%;min-width:0;width:100%}@media (width >= 1025px){#docs-sidebar-container{align-items:stretch;display:flex;flex-direction:column;min-height:0}}.docs-sidebar{background-color:var(--background);border-right:var(--border-width) solid var(--border);flex-shrink:0;overflow-y:auto;padding:var(--spacing-6) var(--spacing-4) var(--spacing-8) 0;width:var(--docs-sidebar-width,14rem)}@media (width >= 1025px){.docs-sidebar{align-self:flex-start;max-height:calc(100vh - var(--spacing-16) - var(--spacing-4));position:sticky;top:calc(var(--spacing-16) + var(--spacing-4));z-index:1}}.docs-sidebar__nav{display:flex;flex-direction:column;gap:var(--spacing-6)}.docs-sidebar__group-label{color:var(--text-dim);font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);letter-spacing:var(--letter-spacing-wider);margin:0 0 var(--spacing-2) 0;padding:var(--spacing-2) var(--spacing-3) var(--spacing-2);text-transform:uppercase}.docs-sidebar__list{list-style:none;margin:0;padding:0}.docs-sidebar__item{margin:0}.docs-sidebar__link{border-radius:var(--radius-md);color:var(--text);display:block;font-size:var(--font-size-base);padding:var(--spacing-2) var(--spacing-3);text-decoration:none;transition:color var(--transition-base),background-color var(--transition-base)}.docs-sidebar__link:hover{background-color:var(--background-alt);color:var(--text)}.docs-sidebar__link--active{background-color:oklch(from var(--accent-fg) l c h/12%);color:var(--accent-fg);font-weight:var(--font-weight-medium)}.docs-sidebar__link--active:hover{background-color:oklch(from var(--accent-fg) l c h/16%);color:var(--accent-fg-hover)}.docs-sidebar__sublist{border-left:2px solid var(--border);list-style:none;margin:0 0 0 var(--spacing-2);padding:0}.docs-sidebar__subitem{margin:0}.docs-sidebar__sublink{border-radius:0 var(--radius-md) var(--radius-md) 0;color:var(--text);display:block;font-size:var(--font-size-sm);padding:var(--spacing-1) var(--spacing-2) var(--spacing-1) var(--spacing-3);text-decoration:none;transition:color var(--transition-base),background-color var(--transition-base)}.docs-sidebar__sublink:hover{background-color:var(--background-alt);color:var(--text)}.docs-sidebar__sublink--active{background-color:oklch(from var(--accent-fg) l c h/12%);color:var(--accent-fg);font-weight:var(--font-weight-medium)}.docs-sidebar__sublink--active:hover{background-color:oklch(from var(--accent-fg) l c h/16%);color:var(--accent-fg-hover)}.docs-sidebar-demo{background-color:var(--background);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);max-height:18rem;overflow:auto;padding:var(--spacing-3)}.docs-sidebar-demo .docs-sidebar{border-right:none;max-height:none;padding:0 var(--spacing-2) var(--spacing-4) 0;position:static;width:11rem}.docs-sidebar-demo .docs-sidebar__nav{gap:var(--spacing-4)}.docs-sidebar-demo .docs-sidebar__group-label,
203
204
  .docs-sidebar-demo h2.docs-sidebar__group-label{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);margin-bottom:var(--spacing-1);padding:var(--spacing-1) var(--spacing-2) var(--spacing-1)}.docs-sidebar-demo .docs-sidebar__link{font-size:var(--font-size-sm);padding:var(--spacing-1) var(--spacing-2)}.docs-sidebar-demo .docs-sidebar__sublist{margin-left:var(--spacing-1)}.docs-sidebar-demo .docs-sidebar__sublink{font-size:var(--font-size-xs);padding:var(--spacing-0-5) var(--spacing-1) var(--spacing-0-5) var(--spacing-2)}.theme-page__header{align-items:center;display:flex;gap:var(--spacing-3);margin-bottom:var(--spacing-2)}.theme-page__header h2{margin:0}html.docs-sidebar-mobile #docs-sidebar-container{display:none!important}@media (width <= 1024px){#docs-sidebar-container,
204
205
  .docs-sidebar,
205
206
  .docs__sidebar-overlay,
206
- .docs__sidebar-toggle{display:none!important}}@media (width >= 1025px){.docs__sidebar-overlay[aria-hidden="true"]{display:none!important}}[data-theme="github-dark-classic"]{--bg:oklch(18% 0.012 264deg);--bg-alt:oklch(15% 0.01 264deg);--current-line:oklch(20% 0.012 264deg);--selection:oklch(28% 0.08 255deg);--fg:oklch(91% 0.004 264deg);--fg-dim:oklch(66% 0.01 264deg);--comment:oklch(52% 0.015 264deg);--cyan:oklch(72% 0.12 250deg);--green:oklch(72% 0.19 145deg);--orange:oklch(78% 0.12 55deg);--pink:oklch(68% 0.14 15deg);--purple:oklch(68% 0.14 300deg);--red:oklch(68% 0.16 15deg);--yellow:oklch(88% 0.12 95deg);--background:var(--bg);--background-alt:var(--bg-alt);--text:var(--fg);--text-dim:var(--fg-dim);--icon:var(--fg);--icon-dim:oklch(75% 0.01 264deg);--border:oklch(13% 0.01 264deg);--accent:oklch(45% 0.18 250deg);--accent-hover:oklch(48% 0.18 250deg);--accent-text:oklch(100% 0 0deg);--accent-text-on-hover:var(--accent-text);--accent-fg:var(--cyan);--accent-fg-hover:oklch(78% 0.12 250deg);--success:var(--green);--success-hover:oklch(78% 0.16 145deg);--success-text:oklch(100% 0 0deg);--success-text-on-solid:oklch(22% 0.03 145deg);--warning:var(--orange);--warning-hover:oklch(85% 0.1 55deg);--warning-text:oklch(100% 0 0deg);--warning-text-on-solid:oklch(22% 0.02 55deg);--error:var(--red);--error-hover:oklch(75% 0.14 15deg);--error-text:oklch(100% 0 0deg);--error-text-on-solid:oklch(22% 0.03 25deg);--info:var(--cyan);--info-hover:oklch(78% 0.1 250deg);--info-text:oklch(100% 0 0deg);--info-text-on-solid:oklch(22% 0.03 250deg);--scrollbar-thumb:oklch(42% 0.02 264deg);--scrollbar-thumb-hover:oklch(52% 0.03 264deg);--scrollbar-thumb-active:oklch(58% 0.04 264deg);.card .card__body h2,
207
+ .docs__sidebar-toggle{display:none!important}}@media (width >= 1025px){.docs__sidebar-overlay[aria-hidden="true"]{display:none!important}}
208
+ #themes-preview .themes-page__preview-dropdown-menu .dropdown__item:focus-visible:not(.dropdown__item--disabled) svg,#themes-preview .themes-page__preview-dropdown-menu .dropdown__item:hover:not(.dropdown__item--disabled) svg,
209
+ #themes-preview .themes-page__preview-dropdown-menu .dropdown__item[aria-current="true"] svg,
210
+ #themes-preview .themes-page__preview-dropdown-menu .dropdown__item[aria-current="true"]:focus-visible svg,
211
+ #themes-preview .themes-page__preview-dropdown-menu .dropdown__item[aria-current="true"]:hover svg{color:var(--accent)!important;stroke:var(--accent)!important}
212
+ #themes-preview .themes-page__preview-dropdown-menu .dropdown__item:focus-visible:not(.dropdown__item--disabled) span,#themes-preview .themes-page__preview-dropdown-menu .dropdown__item:hover:not(.dropdown__item--disabled) span,
213
+ #themes-preview .themes-page__preview-dropdown-menu .dropdown__item[aria-current="true"] span,
214
+ #themes-preview .themes-page__preview-dropdown-menu .dropdown__item[aria-current="true"]:focus-visible span,
215
+ #themes-preview .themes-page__preview-dropdown-menu .dropdown__item[aria-current="true"]:hover span{color:var(--accent)!important}[data-theme="github-dark-classic"]{--bg:oklch(18% 0.012 264deg);--bg-alt:oklch(15% 0.01 264deg);--current-line:oklch(20% 0.012 264deg);--selection:oklch(28% 0.08 255deg);--fg:oklch(91% 0.004 264deg);--fg-dim:oklch(66% 0.01 264deg);--comment:oklch(52% 0.015 264deg);--cyan:oklch(72% 0.12 250deg);--green:oklch(72% 0.19 145deg);--orange:oklch(78% 0.12 55deg);--pink:oklch(68% 0.14 15deg);--purple:oklch(68% 0.14 300deg);--red:oklch(68% 0.16 15deg);--yellow:oklch(88% 0.12 95deg);--background:var(--bg);--background-alt:var(--bg-alt);--text:var(--fg);--text-dim:var(--fg-dim);--icon:var(--fg);--icon-dim:oklch(75% 0.01 264deg);--border:oklch(13% 0.01 264deg);--accent:oklch(45% 0.18 250deg);--accent-hover:oklch(48% 0.18 250deg);--accent-text:oklch(100% 0 0deg);--accent-text-on-hover:var(--accent-text);--accent-fg:var(--cyan);--accent-fg-hover:oklch(78% 0.12 250deg);--success:var(--green);--success-hover:oklch(78% 0.16 145deg);--success-text:oklch(100% 0 0deg);--success-text-on-solid:oklch(22% 0.03 145deg);--warning:var(--orange);--warning-hover:oklch(85% 0.1 55deg);--warning-text:oklch(100% 0 0deg);--warning-text-on-solid:oklch(22% 0.02 55deg);--error:var(--red);--error-hover:oklch(75% 0.14 15deg);--error-text:oklch(100% 0 0deg);--error-text-on-solid:oklch(22% 0.03 25deg);--info:var(--cyan);--info-hover:oklch(78% 0.1 250deg);--info-text:oklch(100% 0 0deg);--info-text-on-solid:oklch(22% 0.03 250deg);--scrollbar-thumb:oklch(42% 0.02 264deg);--scrollbar-thumb-hover:oklch(52% 0.03 264deg);--scrollbar-thumb-active:oklch(58% 0.04 264deg);.card .card__body h2,
207
216
  .card .card__body h3,
208
217
  .card .card__body h4,.footer__link{color:var(--fg)}}@supports (color:oklch(from red l c h)){[data-theme="github-dark-classic"]{--color-accent-50:oklch(from var(--accent) 0.97deg 0.03 h);--color-accent-100:oklch(from var(--accent) 0.93deg 0.06 h);--color-accent-200:oklch(from var(--accent) 0.88deg 0.1 h);--color-accent-300:oklch(from var(--accent) 0.78deg 0.14 h);--color-accent-400:oklch(from var(--accent) 0.65deg 0.16 h);--color-accent-500:var(--accent);--color-accent-600:oklch(from var(--accent) 0.45deg 0.18 h);--color-accent-700:oklch(from var(--accent) 0.38deg 0.16 h);--color-accent-800:oklch(from var(--accent) 0.3deg 0.12 h);--color-accent-900:oklch(from var(--accent) 0.22deg 0.08 h);--color-accent-950:oklch(from var(--accent) 0.15deg 0.05 h);--color-success-50:oklch(from var(--success) 0.97deg 0.03 h);--color-success-100:oklch(from var(--success) 0.93deg 0.06 h);--color-success-200:oklch(from var(--success) 0.88deg 0.1 h);--color-success-300:oklch(from var(--success) 0.78deg 0.14 h);--color-success-400:oklch(from var(--success) 0.65deg 0.16 h);--color-success-500:var(--success);--color-success-600:oklch(from var(--success) 0.45deg 0.18 h);--color-success-700:oklch(from var(--success) 0.38deg 0.16 h);--color-success-800:oklch(from var(--success) 0.3deg 0.12 h);--color-success-900:oklch(from var(--success) 0.22deg 0.08 h);--color-success-950:oklch(from var(--success) 0.15deg 0.05 h);--color-warning-50:oklch(from var(--warning) 0.97deg 0.03 h);--color-warning-100:oklch(from var(--warning) 0.93deg 0.06 h);--color-warning-200:oklch(from var(--warning) 0.88deg 0.1 h);--color-warning-300:oklch(from var(--warning) 0.82deg 0.12 h);--color-warning-400:oklch(from var(--warning) 0.75deg 0.14 h);--color-warning-500:var(--warning);--color-warning-600:oklch(from var(--warning) 0.55deg 0.14 h);--color-warning-700:oklch(from var(--warning) 0.45deg 0.12 h);--color-warning-800:oklch(from var(--warning) 0.35deg 0.1 h);--color-warning-900:oklch(from var(--warning) 0.25deg 0.06 h);--color-warning-950:oklch(from var(--warning) 0.18deg 0.04 h);--color-error-50:oklch(from var(--error) 0.97deg 0.03 h);--color-error-100:oklch(from var(--error) 0.93deg 0.06 h);--color-error-200:oklch(from var(--error) 0.88deg 0.1 h);--color-error-300:oklch(from var(--error) 0.78deg 0.14 h);--color-error-400:oklch(from var(--error) 0.65deg 0.18 h);--color-error-500:var(--error);--color-error-600:oklch(from var(--error) 0.45deg 0.2 h);--color-error-700:oklch(from var(--error) 0.38deg 0.18 h);--color-error-800:oklch(from var(--error) 0.3deg 0.14 h);--color-error-900:oklch(from var(--error) 0.22deg 0.1 h);--color-error-950:oklch(from var(--error) 0.15deg 0.06 h);--color-info-50:oklch(from var(--info) 0.97deg 0.03 h);--color-info-100:oklch(from var(--info) 0.93deg 0.06 h);--color-info-200:oklch(from var(--info) 0.88deg 0.08 h);--color-info-300:oklch(from var(--info) 0.78deg 0.1 h);--color-info-400:oklch(from var(--info) 0.65deg 0.12 h);--color-info-500:var(--info);--color-info-600:oklch(from var(--info) 0.45deg 0.12 h);--color-info-700:oklch(from var(--info) 0.38deg 0.1 h);--color-info-800:oklch(from var(--info) 0.3deg 0.08 h);--color-info-900:oklch(from var(--info) 0.22deg 0.06 h);--color-info-950:oklch(from var(--info) 0.15deg 0.04 h)}}
209
218
  [data-theme="github-dark-classic"] ::-webkit-scrollbar-thumb,[data-theme="github-dark-classic"]::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rizzo-css",
3
- "version": "0.0.55",
3
+ "version": "0.0.57",
4
4
  "engines": { "node": ">=18" },
5
5
  "scripts": {
6
6
  "prepublishOnly": "cd ../.. && pnpm run lint:css:fix && pnpm run build:css && node scripts/copy-scaffold.js && node scripts/prepare-vanilla-scaffold.js"
@@ -1,18 +1,19 @@
1
1
  # Astro + Rizzo CSS
2
2
 
3
- ```
3
+ <pre style="font-family: ui-monospace, monospace; font-size: 0.85em; line-height: 1.2;">
4
4
  /\___/\
5
5
  __( o o )__
6
6
  ( =^= )
7
7
  _/ ~ \_
8
8
  / \_____/ \
9
- ____ ___ _____________ ____ ____ ____
10
- | _ \|_ _|__ /__ / _ \ / ___/ ___/ ___|
11
- | |_) || | / / / / | | | | | \___ \___ \
12
- | _ < | | / /_ / /| |_| | | |___ ___) |__) |
13
- |_| \_\___/____/____\___/ \____|____/____/
14
- Design system · Vanilla · Astro · Svelte
15
- ```
9
+ <span style="color:#c44536"> ____ </span><span style="color:#e07c3e"> ___ _</span><span style="color:#d4a800">______</span><span style="color:#2d9d78">______</span><span style="color:#0052bd"> _</span><span style="color:#7c3aed">___ __</span><span style="color:#d946ef">__ ____</span>
10
+ <span style="color:#c44536">| _ \</span><span style="color:#e07c3e">|_ _|_</span><span style="color:#d4a800">_ /__</span><span style="color:#2d9d78"> / _ </span><span style="color:#0052bd">\ / </span><span style="color:#7c3aed">___/ _</span><span style="color:#d946ef">__/ ___|</span>
11
+ <span style="color:#c44536">| |_) </span><span style="color:#e07c3e">|| | </span><span style="color:#d4a800">/ / /</span><span style="color:#2d9d78"> / | |</span><span style="color:#0052bd"> | | |</span><span style="color:#7c3aed"> \__</span><span style="color:#d946ef">_ \___ \</span>
12
+ <span style="color:#c44536">| _ &lt;</span><span style="color:#e07c3e"> | | /</span><span style="color:#d4a800"> /_ / </span><span style="color:#2d9d78">/| |_|</span><span style="color:#0052bd"> | | |</span><span style="color:#7c3aed">___ __</span><span style="color:#d946ef">_) |__) |</span>
13
+ <span style="color:#c44536">|_| \_</span><span style="color:#e07c3e">\___/_</span><span style="color:#d4a800">___/__</span><span style="color:#2d9d78">__\___</span><span style="color:#0052bd">/ \_</span><span style="color:#7c3aed">___|__</span><span style="color:#d946ef">__/____/</span>
14
+
15
+ Design system · Vanilla · Astro · Svelte
16
+ </pre>
16
17
 
17
18
  Astro project with Rizzo CSS. Scaffolded with `npx rizzo-css init` when you chose **Create new** and Astro, then **Landing**, **Docs**, **Dashboard**, or **Full**. **Full** = clone of the docs site. **Landing** / **Docs** / **Dashboard** = base + component picker (all 56 or pick). Same template choice for **Add to existing** (`npx rizzo-css add`).
18
19
 
@@ -1,18 +1,19 @@
1
1
  # Astro + Rizzo CSS
2
2
 
3
- ```
3
+ <pre style="font-family: ui-monospace, monospace; font-size: 0.85em; line-height: 1.2;">
4
4
  /\___/\
5
5
  __( o o )__
6
6
  ( =^= )
7
7
  _/ ~ \_
8
8
  / \_____/ \
9
- ____ ___ _____________ ____ ____ ____
10
- | _ \|_ _|__ /__ / _ \ / ___/ ___/ ___|
11
- | |_) || | / / / / | | | | | \___ \___ \
12
- | _ < | | / /_ / /| |_| | | |___ ___) |__) |
13
- |_| \_\___/____/____\___/ \____|____/____/
14
- Design system · Vanilla · Astro · Svelte
15
- ```
9
+ <span style="color:#c44536"> ____ </span><span style="color:#e07c3e"> ___ _</span><span style="color:#d4a800">______</span><span style="color:#2d9d78">______</span><span style="color:#0052bd"> _</span><span style="color:#7c3aed">___ __</span><span style="color:#d946ef">__ ____</span>
10
+ <span style="color:#c44536">| _ \</span><span style="color:#e07c3e">|_ _|_</span><span style="color:#d4a800">_ /__</span><span style="color:#2d9d78"> / _ </span><span style="color:#0052bd">\ / </span><span style="color:#7c3aed">___/ _</span><span style="color:#d946ef">__/ ___|</span>
11
+ <span style="color:#c44536">| |_) </span><span style="color:#e07c3e">|| | </span><span style="color:#d4a800">/ / /</span><span style="color:#2d9d78"> / | |</span><span style="color:#0052bd"> | | |</span><span style="color:#7c3aed"> \__</span><span style="color:#d946ef">_ \___ \</span>
12
+ <span style="color:#c44536">| _ &lt;</span><span style="color:#e07c3e"> | | /</span><span style="color:#d4a800"> /_ / </span><span style="color:#2d9d78">/| |_|</span><span style="color:#0052bd"> | | |</span><span style="color:#7c3aed">___ __</span><span style="color:#d946ef">_) |__) |</span>
13
+ <span style="color:#c44536">|_| \_</span><span style="color:#e07c3e">\___/_</span><span style="color:#d4a800">___/__</span><span style="color:#2d9d78">__\___</span><span style="color:#0052bd">/ \_</span><span style="color:#7c3aed">___|__</span><span style="color:#d946ef">__/____/</span>
14
+
15
+ Design system · Vanilla · Astro · Svelte
16
+ </pre>
16
17
 
17
18
  Astro project with Rizzo CSS. Scaffolded with `npx rizzo-css init` when you chose **Create new** and Astro, then **Full** template. **Full** = clone of the Rizzo docs site (no component picker). **Landing** / **Docs** / **Dashboard** = base + component picker (all 56 or pick). Same template choice for **Add to existing** (`npx rizzo-css add`).
18
19
 
@@ -2,7 +2,7 @@
2
2
  (function() {
3
3
  var SOUND_KEY = 'soundEffects';
4
4
  var THROTTLE_MS = 120;
5
- var clickableSelector = 'a[href], area[href], button, input[type="submit"], input[type="button"], input[type="checkbox"], input[type="radio"], input[type="reset"], select, summary, [role="button"], [role="link"], [role="menuitem"], [role="menuitemradio"], [role="tab"], [role="option"], [role="switch"], .btn, .tabs__tab, .dropdown__trigger, .accordion__trigger, [data-accordion-trigger], .navbar__link, .navbar__brand-link, .pagination__link, .breadcrumb__link, .search__trigger, .theme-switcher__option, .font-switcher__option, .framework-switcher__segment, .modal__close, .alert__close, .copy-btn, .copy-to-clipboard, [data-copy-btn], .docs-sidebar__link, .docs-sidebar__sublink, .docs__sidebar-toggle, .home__announcement, .home__example-pill, .block-card-link, .component-card-link, .home__doc-card, .skip-link, [data-sound-on-click]';
5
+ var clickableSelector = 'a[href], area[href], button, input[type="submit"], input[type="button"], input[type="checkbox"], input[type="radio"], input[type="reset"], select, summary, [role="button"], [role="link"], [role="menuitem"], [role="menuitemradio"], [role="tab"], [role="option"], [role="switch"], .btn, .tabs__tab, .dropdown__trigger, .accordion__trigger, [data-accordion-trigger], .navbar__link, .navbar__brand-link, .navbar__item, .pagination__link, .breadcrumb__link, .search__trigger, .theme-switcher__option, .font-switcher__option, .framework-switcher__segment, .modal__close, .alert__close, .copy-btn, .copy-to-clipboard, [data-copy-btn], .docs-sidebar__link, .docs-sidebar__sublink, .docs__sidebar-toggle, .home__announcement, .home__example-pill, .block-card-link, .component-card-link, .home__doc-card, .skip-link, [data-sound-on-click]';
6
6
  var audioContext = null;
7
7
  var soundBase = '/assets/sfx';
8
8
  var soundUrls = [soundBase + '/click.mp3', soundBase + '/click.wav'];
@@ -69,7 +69,12 @@
69
69
  playFallbackTone();
70
70
  } catch (e) {}
71
71
  }
72
- function getClickable(el) {
72
+ function getEventTargetElement(target) {
73
+ if (!target) return null;
74
+ return target.nodeType === 3 ? target.parentElement : target;
75
+ }
76
+ function getClickable(target) {
77
+ var el = getEventTargetElement(target);
73
78
  if (!el || !el.closest) return null;
74
79
  var clickable = el.closest(clickableSelector);
75
80
  if (!clickable) return null;
@@ -91,8 +96,20 @@
91
96
  playClickSound();
92
97
  setTimeout(function() { lastTouchSoundTarget = null; }, 450);
93
98
  }
99
+ function onDocumentPointerdown(e) {
100
+ if (e.pointerType === 'mouse' && e.button !== 0) return;
101
+ if (!e.isPrimary) return;
102
+ var clickable = getClickable(e.target);
103
+ if (!clickable) return;
104
+ if (lastTouchSoundTarget === clickable && (Date.now() - lastTouchSoundTime) < 400) return;
105
+ lastTouchSoundTarget = clickable;
106
+ lastTouchSoundTime = Date.now();
107
+ playClickSound();
108
+ setTimeout(function() { lastTouchSoundTarget = null; }, 450);
109
+ }
94
110
  function initSound() {
95
111
  document.addEventListener('click', onDocumentClick, true);
112
+ document.addEventListener('pointerdown', onDocumentPointerdown, true);
96
113
  if ('ontouchstart' in window || (navigator && navigator.maxTouchPoints > 0)) {
97
114
  document.addEventListener('touchend', onDocumentTouchend, true);
98
115
  }
@@ -1,18 +1,19 @@
1
1
  # SvelteKit + Rizzo CSS
2
2
 
3
- ```
3
+ <pre style="font-family: ui-monospace, monospace; font-size: 0.85em; line-height: 1.2;">
4
4
  /\___/\
5
5
  __( o o )__
6
6
  ( =^= )
7
7
  _/ ~ \_
8
8
  / \_____/ \
9
- ____ ___ _____________ ____ ____ ____
10
- | _ \|_ _|__ /__ / _ \ / ___/ ___/ ___|
11
- | |_) || | / / / / | | | | | \___ \___ \
12
- | _ < | | / /_ / /| |_| | | |___ ___) |__) |
13
- |_| \_\___/____/____\___/ \____|____/____/
14
- Design system · Vanilla · Astro · Svelte
15
- ```
9
+ <span style="color:#c44536"> ____ </span><span style="color:#e07c3e"> ___ _</span><span style="color:#d4a800">______</span><span style="color:#2d9d78">______</span><span style="color:#0052bd"> _</span><span style="color:#7c3aed">___ __</span><span style="color:#d946ef">__ ____</span>
10
+ <span style="color:#c44536">| _ \</span><span style="color:#e07c3e">|_ _|_</span><span style="color:#d4a800">_ /__</span><span style="color:#2d9d78"> / _ </span><span style="color:#0052bd">\ / </span><span style="color:#7c3aed">___/ _</span><span style="color:#d946ef">__/ ___|</span>
11
+ <span style="color:#c44536">| |_) </span><span style="color:#e07c3e">|| | </span><span style="color:#d4a800">/ / /</span><span style="color:#2d9d78"> / | |</span><span style="color:#0052bd"> | | |</span><span style="color:#7c3aed"> \__</span><span style="color:#d946ef">_ \___ \</span>
12
+ <span style="color:#c44536">| _ &lt;</span><span style="color:#e07c3e"> | | /</span><span style="color:#d4a800"> /_ / </span><span style="color:#2d9d78">/| |_|</span><span style="color:#0052bd"> | | |</span><span style="color:#7c3aed">___ __</span><span style="color:#d946ef">_) |__) |</span>
13
+ <span style="color:#c44536">|_| \_</span><span style="color:#e07c3e">\___/_</span><span style="color:#d4a800">___/__</span><span style="color:#2d9d78">__\___</span><span style="color:#0052bd">/ \_</span><span style="color:#7c3aed">___|__</span><span style="color:#d946ef">__/____/</span>
14
+
15
+ Design system · Vanilla · Astro · Svelte
16
+ </pre>
16
17
 
17
18
  SvelteKit project with Rizzo CSS. Scaffolded with `npx rizzo-css init` when you chose **Create new** and Svelte, then **Landing**, **Docs**, **Dashboard**, or **Full**. **Full** = clone of the docs site. **Landing** / **Docs** / **Dashboard** = base + component picker (all 56 or pick). Same template choice for **Add to existing** (`npx rizzo-css add`).
18
19
 
@@ -5,6 +5,7 @@
5
5
  export { default as Button } from './Button.svelte';
6
6
  export { default as Badge } from './Badge.svelte';
7
7
  export { default as Card } from './Card.svelte';
8
+ export { default as Dashboard } from './Dashboard.svelte';
8
9
  export { default as Divider } from './Divider.svelte';
9
10
  export { default as Footer } from './Footer.svelte';
10
11
  export type { FooterLink } from './Footer.svelte';
@@ -1,18 +1,19 @@
1
1
  # SvelteKit + Rizzo CSS
2
2
 
3
- ```
3
+ <pre style="font-family: ui-monospace, monospace; font-size: 0.85em; line-height: 1.2;">
4
4
  /\___/\
5
5
  __( o o )__
6
6
  ( =^= )
7
7
  _/ ~ \_
8
8
  / \_____/ \
9
- ____ ___ _____________ ____ ____ ____
10
- | _ \|_ _|__ /__ / _ \ / ___/ ___/ ___|
11
- | |_) || | / / / / | | | | | \___ \___ \
12
- | _ < | | / /_ / /| |_| | | |___ ___) |__) |
13
- |_| \_\___/____/____\___/ \____|____/____/
14
- Design system · Vanilla · Astro · Svelte
15
- ```
9
+ <span style="color:#c44536"> ____ </span><span style="color:#e07c3e"> ___ _</span><span style="color:#d4a800">______</span><span style="color:#2d9d78">______</span><span style="color:#0052bd"> _</span><span style="color:#7c3aed">___ __</span><span style="color:#d946ef">__ ____</span>
10
+ <span style="color:#c44536">| _ \</span><span style="color:#e07c3e">|_ _|_</span><span style="color:#d4a800">_ /__</span><span style="color:#2d9d78"> / _ </span><span style="color:#0052bd">\ / </span><span style="color:#7c3aed">___/ _</span><span style="color:#d946ef">__/ ___|</span>
11
+ <span style="color:#c44536">| |_) </span><span style="color:#e07c3e">|| | </span><span style="color:#d4a800">/ / /</span><span style="color:#2d9d78"> / | |</span><span style="color:#0052bd"> | | |</span><span style="color:#7c3aed"> \__</span><span style="color:#d946ef">_ \___ \</span>
12
+ <span style="color:#c44536">| _ &lt;</span><span style="color:#e07c3e"> | | /</span><span style="color:#d4a800"> /_ / </span><span style="color:#2d9d78">/| |_|</span><span style="color:#0052bd"> | | |</span><span style="color:#7c3aed">___ __</span><span style="color:#d946ef">_) |__) |</span>
13
+ <span style="color:#c44536">|_| \_</span><span style="color:#e07c3e">\___/_</span><span style="color:#d4a800">___/__</span><span style="color:#2d9d78">__\___</span><span style="color:#0052bd">/ \_</span><span style="color:#7c3aed">___|__</span><span style="color:#d946ef">__/____/</span>
14
+
15
+ Design system · Vanilla · Astro · Svelte
16
+ </pre>
16
17
 
17
18
  SvelteKit project with Rizzo CSS. Scaffolded with `npx rizzo-css init` when you chose **Create new** and Svelte, then **Full** template. **Full** = clone of the Rizzo docs site (no component picker). **Landing** / **Docs** / **Dashboard** = base + component picker (all 56 or pick). Same template choice for **Add to existing** (`npx rizzo-css add`).
18
19