rizzo-css 0.0.64 → 0.0.66

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 (69) hide show
  1. package/README.md +4 -4
  2. package/bin/rizzo-css.js +5 -5
  3. package/dist/rizzo.min.css +21 -2
  4. package/package.json +2 -2
  5. package/scaffold/astro/Footer.astro +1 -1
  6. package/scaffold/astro/InputGroup.astro +74 -0
  7. package/scaffold/astro/base/README-RIZZO.md +1 -1
  8. package/scaffold/astro/base/src/pages/index.astro +2 -2
  9. package/scaffold/astro/variants/full/README-RIZZO.md +1 -1
  10. package/scaffold/astro/variants/full/src/pages/index.astro +2 -2
  11. package/scaffold/shared/sound-effects-inline.js +1 -1
  12. package/scaffold/svelte/InputGroup.svelte +71 -0
  13. package/scaffold/svelte/base/README-RIZZO.md +1 -1
  14. package/scaffold/svelte/base/package.json +2 -2
  15. package/scaffold/svelte/variants/full/README-RIZZO.md +1 -1
  16. package/scaffold/svelte/variants/full/package.json +2 -2
  17. package/scaffold/vanilla/README-RIZZO.md +2 -2
  18. package/scaffold/vanilla/components/accordion.html +24 -0
  19. package/scaffold/vanilla/components/alert-dialog.html +24 -0
  20. package/scaffold/vanilla/components/alert.html +24 -0
  21. package/scaffold/vanilla/components/aspect-ratio.html +24 -0
  22. package/scaffold/vanilla/components/avatar.html +24 -0
  23. package/scaffold/vanilla/components/back-to-top.html +24 -0
  24. package/scaffold/vanilla/components/badge.html +24 -0
  25. package/scaffold/vanilla/components/breadcrumb.html +24 -0
  26. package/scaffold/vanilla/components/button-group.html +24 -0
  27. package/scaffold/vanilla/components/button.html +24 -0
  28. package/scaffold/vanilla/components/cards.html +24 -0
  29. package/scaffold/vanilla/components/collapsible.html +24 -0
  30. package/scaffold/vanilla/components/context-menu.html +24 -0
  31. package/scaffold/vanilla/components/copy-to-clipboard.html +24 -0
  32. package/scaffold/vanilla/components/dashboard.html +24 -0
  33. package/scaffold/vanilla/components/divider.html +24 -0
  34. package/scaffold/vanilla/components/docs-sidebar.html +24 -0
  35. package/scaffold/vanilla/components/dropdown.html +24 -0
  36. package/scaffold/vanilla/components/empty.html +24 -0
  37. package/scaffold/vanilla/components/font-switcher.html +24 -0
  38. package/scaffold/vanilla/components/footer.html +24 -0
  39. package/scaffold/vanilla/components/forms.html +24 -0
  40. package/scaffold/vanilla/components/hover-card.html +24 -0
  41. package/scaffold/vanilla/components/icons.html +24 -0
  42. package/scaffold/vanilla/components/index.html +25 -0
  43. package/scaffold/vanilla/components/input-group.html +752 -0
  44. package/scaffold/vanilla/components/kbd.html +24 -0
  45. package/scaffold/vanilla/components/label.html +24 -0
  46. package/scaffold/vanilla/components/modal.html +24 -0
  47. package/scaffold/vanilla/components/navbar.html +24 -0
  48. package/scaffold/vanilla/components/pagination.html +24 -0
  49. package/scaffold/vanilla/components/popover.html +24 -0
  50. package/scaffold/vanilla/components/progress-bar.html +24 -0
  51. package/scaffold/vanilla/components/resizable.html +24 -0
  52. package/scaffold/vanilla/components/scroll-area.html +24 -0
  53. package/scaffold/vanilla/components/search.html +24 -0
  54. package/scaffold/vanilla/components/separator.html +24 -0
  55. package/scaffold/vanilla/components/settings.html +24 -0
  56. package/scaffold/vanilla/components/sheet.html +24 -0
  57. package/scaffold/vanilla/components/skeleton.html +24 -0
  58. package/scaffold/vanilla/components/slider.html +24 -0
  59. package/scaffold/vanilla/components/sound-effects.html +24 -0
  60. package/scaffold/vanilla/components/spinner.html +24 -0
  61. package/scaffold/vanilla/components/switch.html +24 -0
  62. package/scaffold/vanilla/components/table.html +24 -0
  63. package/scaffold/vanilla/components/tabs.html +24 -0
  64. package/scaffold/vanilla/components/theme-switcher.html +24 -0
  65. package/scaffold/vanilla/components/toast.html +24 -0
  66. package/scaffold/vanilla/components/toggle-group.html +24 -0
  67. package/scaffold/vanilla/components/toggle.html +24 -0
  68. package/scaffold/vanilla/components/tooltip.html +24 -0
  69. package/scaffold/vanilla/index.html +26 -2
package/README.md CHANGED
@@ -16,7 +16,7 @@ bun add rizzo-css
16
16
 
17
17
  The package works with **npm**, **pnpm**, **yarn**, and **bun**. After install, run the CLI with your manager’s runner: `npx` (npm/yarn), `pnpm dlx`, or `bunx`.
18
18
 
19
- **Quick start (no install):** `npx rizzo-css init` — choose **framework** (Vanilla, Astro, Svelte, React, or Vue), then **add to existing** or **create new**. Both flows use the **same template choice**: **Landing** (hero/features), **Docs** (sidebar + sample doc), **Dashboard** (sidebar + stats/table), or **Full** (clone of the docs site). Landing/Docs/Dashboard = component picker (all 56 or pick). We **never overwrite your existing files**; any skipped content is in **RIZZO-SETUP.md**. You must add the `<link>` yourself (CLI prints the exact tag). Non-interactive: `npx rizzo-css init --yes --framework vanilla|astro|svelte|react|vue --template landing|docs|dashboard|full` or `npx rizzo-css add --template landing|docs|dashboard|full`. Optional **rizzo-css.json** and `add --install-package`. All get the **same CSS and component styles**. To use the **official Svelte or Astro create command** plus Rizzo, create the app first, then run `npx rizzo-css add`:
19
+ **Quick start (no install):** `npx rizzo-css init` — choose **framework** (Vanilla, Astro, Svelte, React, or Vue), then **add to existing** or **create new**. Both flows use the **same template choice**: **Landing** (hero/features), **Docs** (sidebar + sample doc), **Dashboard** (sidebar + stats/table), or **Full** (clone of the docs site). Landing/Docs/Dashboard = component picker (all 50 or pick). We **never overwrite your existing files**; any skipped content is in **RIZZO-SETUP.md**. You must add the `<link>` yourself (CLI prints the exact tag). Non-interactive: `npx rizzo-css init --yes --framework vanilla|astro|svelte|react|vue --template landing|docs|dashboard|full` or `npx rizzo-css add --template landing|docs|dashboard|full`. Optional **rizzo-css.json** and `add --install-package`. All get the **same CSS and component styles**. To use the **official Svelte or Astro create command** plus Rizzo, create the app first, then run `npx rizzo-css add`:
20
20
 
21
21
  ```bash
22
22
  npm create svelte@latest my-app && cd my-app && npx rizzo-css add
@@ -25,7 +25,7 @@ npm create astro@latest my-app && cd my-app && npx rizzo-css add
25
25
 
26
26
  **Running the CLI:** npm → `npx`; pnpm → `pnpm dlx`; yarn → `npx` (Yarn 1 has no `dlx`; works with Yarn 2+ too); bun → `bunx`. The [docs site](https://rizzo-css.vercel.app/docs/getting-started) tabs show the correct command for each manager.
27
27
 
28
- **Same flow for new and existing:** Both prompt for **Landing** | **Docs** | **Dashboard** | **Full**. Landing/Docs/Dashboard = component picker (all 56 or pick). Full = site clone (no picker); also writes **RIZZO-SNIPPET.txt** (link + theme) unless `--no-snippet`. `npx rizzo-css doctor` checks config and CSS path. `npx rizzo-css theme` lists themes.
28
+ **Same flow for new and existing:** Both prompt for **Landing** | **Docs** | **Dashboard** | **Full**. Landing/Docs/Dashboard = component picker (all 50 or pick). Full = site clone (no picker); also writes **RIZZO-SNIPPET.txt** (link + theme) unless `--no-snippet`. `npx rizzo-css doctor` checks config and CSS path. `npx rizzo-css theme` lists themes.
29
29
 
30
30
  | | **Create new** (`init` → new) | **Add to existing** (`add` or `init` → existing) |
31
31
  |---|------------------------------|--------------------------------------------------|
@@ -72,7 +72,7 @@ import 'rizzo-css';
72
72
  **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:
73
73
 
74
74
  ```html
75
- <!-- unpkg (pin version: replace @latest with @0.0.64 or any version) -->
75
+ <!-- unpkg (pin version: replace @latest with @0.0.66 or any version) -->
76
76
  <link rel="stylesheet" href="https://unpkg.com/rizzo-css@latest/dist/rizzo.min.css" />
77
77
 
78
78
  <!-- or jsDelivr -->
@@ -95,7 +95,7 @@ Theme IDs and full docs: [Theming](https://rizzo-css.vercel.app/docs/theming).
95
95
 
96
96
  ## Docs
97
97
 
98
- Full documentation: **[rizzo-css.vercel.app](https://rizzo-css.vercel.app)** — **Docs** (Getting Started, Design System, Theming, Accessibility), **Components**, **Blocks** (pre-built layouts), **Themes**, **Colors**, and usage for Vanilla, Astro, and Svelte.
98
+ Full documentation: **[rizzo-css.vercel.app](https://rizzo-css.vercel.app)** — **Docs** (Getting Started, Design System, Theming, Accessibility), **Components**, **Blocks** (pre-built layouts), **Themes**, **Colors**, and usage for Vanilla, Astro, Svelte, React, and Vue.
99
99
 
100
100
  ## Package contents
101
101
 
package/bin/rizzo-css.js CHANGED
@@ -197,7 +197,7 @@ const VALID_THEME_VALUES = ['system', ...THEMES];
197
197
  // Components available for scaffold (must match scaffold/svelte and scaffold/astro; missing files are skipped on copy)
198
198
  const SVELTE_COMPONENTS = [
199
199
  'Button', 'Badge', 'Card', 'Dashboard', 'Divider', 'DocsSidebar', 'Footer', 'Spinner', 'ProgressBar', 'Avatar', 'Alert',
200
- 'BackToTop', 'Breadcrumb', 'FormGroup', 'Input', 'Checkbox', 'Textarea', 'Select', 'Radio',
200
+ 'BackToTop', 'Breadcrumb', 'FormGroup', 'Input', 'InputGroup', 'Checkbox', 'Textarea', 'Select', 'Radio',
201
201
  'CopyToClipboard', 'Tooltip', 'Pagination', 'Tabs', 'Accordion', 'Dropdown',
202
202
  'Modal', 'Toast', 'Table', 'ThemeSwitcher', 'FontSwitcher', 'SoundEffects',
203
203
  'Navbar', 'Settings', 'Search', 'Icons', 'Skeleton', 'Switch',
@@ -206,7 +206,7 @@ const SVELTE_COMPONENTS = [
206
206
  ];
207
207
  const ASTRO_COMPONENTS = [
208
208
  'Button', 'Badge', 'Card', 'Dashboard', 'Divider', 'DocsSidebar', 'Footer', 'Spinner', 'ProgressBar', 'Avatar', 'Alert',
209
- 'BackToTop', 'Breadcrumb', 'FormGroup', 'Input', 'Checkbox', 'Textarea', 'Select', 'Radio',
209
+ 'BackToTop', 'Breadcrumb', 'FormGroup', 'Input', 'InputGroup', 'Checkbox', 'Textarea', 'Select', 'Radio',
210
210
  'CopyToClipboard', 'Tooltip', 'Pagination', 'Tabs', 'Accordion', 'Dropdown',
211
211
  'Modal', 'Toast', 'Table', 'ThemeSwitcher', 'FontSwitcher', 'SoundEffects',
212
212
  'Navbar', 'Settings', 'Search', 'Icons', 'Skeleton', 'Switch',
@@ -291,7 +291,7 @@ function logAddedDeps(selected, expanded, framework) {
291
291
  const VANILLA_COMPONENT_SLUGS = {
292
292
  Accordion: 'accordion', Alert: 'alert', AlertDialog: 'alert-dialog', AspectRatio: 'aspect-ratio', Avatar: 'avatar', BackToTop: 'back-to-top', Badge: 'badge', Breadcrumb: 'breadcrumb', Button: 'button', ButtonGroup: 'button-group',
293
293
  Card: 'cards', Checkbox: 'forms', Collapsible: 'collapsible', ContextMenu: 'context-menu', CopyToClipboard: 'copy-to-clipboard', Dashboard: 'dashboard', Divider: 'divider', DocsSidebar: 'docs-sidebar', Dropdown: 'dropdown',
294
- Empty: 'empty', Footer: 'footer', FormGroup: 'forms', HoverCard: 'hover-card', Input: 'forms', Icons: 'icons', Kbd: 'kbd', Label: 'label',
294
+ Empty: 'empty', Footer: 'footer', FormGroup: 'forms', HoverCard: 'hover-card', Input: 'forms', InputGroup: 'input-group', Icons: 'icons', Kbd: 'kbd', Label: 'label',
295
295
  Modal: 'modal', Navbar: 'navbar', Pagination: 'pagination', Popover: 'popover', ProgressBar: 'progress-bar',
296
296
  Radio: 'forms', ResizableHandle: 'resizable', ResizablePane: 'resizable', ResizablePaneGroup: 'resizable', ScrollArea: 'scroll-area', Search: 'search', Separator: 'separator', Select: 'forms', Settings: 'settings', Sheet: 'sheet',
297
297
  Skeleton: 'skeleton', Slider: 'slider', SoundEffects: 'sound-effects', Spinner: 'spinner', Switch: 'switch', Table: 'table',
@@ -1124,7 +1124,7 @@ Commands:
1124
1124
  Options (init):
1125
1125
  --yes Non-interactive: scaffold new in cwd with defaults (framework: astro, template: landing)
1126
1126
  --path <dir> Project directory (relative to cwd or absolute). Scaffold and run install there. With --yes; interactive: "Enter path" option.
1127
- --framework <fw> vanilla | astro | svelte | react | vue (same 56 components each)
1127
+ --framework <fw> vanilla | astro | svelte | react | vue (same 50 components each)
1128
1128
  --template <t> create new: css-only | landing | docs | dashboard | full (default: landing). add: same options.
1129
1129
  --package-manager <pm> npm | pnpm | yarn | bun (with --yes, or skip PM prompt when interactive)
1130
1130
  --install After scaffolding, run package manager install in project directory (no prompt)
@@ -1189,7 +1189,7 @@ Component dependencies (Full template):
1189
1189
  Full list of available components and what relies on what: npx rizzo-css help components
1190
1190
 
1191
1191
  Frameworks:
1192
- Scaffolds (init/add): Vanilla, Astro, Svelte, React, Vue. Same 56 components in each framework’s syntax; same CSS and BEM. Docs: https://rizzo-css.vercel.app/docs/react and Vue.
1192
+ Scaffolds (init/add): Vanilla, Astro, Svelte, React, Vue. Same 50 components in each framework’s syntax; same CSS and BEM. Docs: https://rizzo-css.vercel.app/docs/react and Vue.
1193
1193
 
1194
1194
  Docs: https://rizzo-css.vercel.app
1195
1195
  `);
@@ -4,6 +4,13 @@ ol[role="list"],ul[role="list"]{list-style:none}body{line-height:1.5;margin:0;ma
4
4
  button,h1, h2, h3, h4, h5, h6, input, label{line-height:1.1}h1, h2, h3, h4, h5, h6{text-wrap:balance}a:not([class]){-webkit-text-decoration-skip:ink;color:currentcolor;text-decoration-skip-ink:auto}img,
5
5
  picture{display:block;max-width:100%} button,input, select,
6
6
  textarea{font-family:inherit;font-size:inherit}textarea:not([rows]){min-height:10em}:target{scroll-margin-block:5ex}body,html{background-color:var(--background);color:var(--text);transition:color var(--theme-transition-duration) ease-out,background-color var(--theme-transition-duration) ease-out,border-color var(--theme-transition-duration) ease-out}a{color:var(--accent-fg);text-decoration:none}a:hover{color:var(--accent-fg-hover)}
7
+ .dashboard__nav a,.dashboard__nav a:hover,
8
+ .dashboard__nav-link,
9
+ .dashboard__nav-link:hover,
10
+ .docs-layout-demo__nav a,
11
+ .docs-layout-demo__nav a:hover,
12
+ .docs-layout-demo__nav-link,
13
+ .docs-layout-demo__nav-link:hover,
7
14
  .docs-sidebar a,
8
15
  .navbar a,
9
16
  [role="menu"] a,
@@ -89,7 +96,8 @@ input[type="radio"]:disabled{cursor:not-allowed;opacity:var(--opacity-60)}.check
89
96
  .radio-label:hover{color:var(--accent)}.checkbox-label:has(input:disabled),
90
97
  .radio-label:has(input:disabled){cursor:not-allowed;opacity:var(--opacity-60)}.checkbox-label:has(input:disabled):hover,
91
98
  .radio-label:has(input:disabled):hover{color:var(--text)}.checkbox-group,
92
- .radio-group{display:flex;flex-direction:column;gap:var(--spacing-3)}input[type="file"]{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-base);padding:var(--spacing-0-625) var(--spacing-3);width:100%}input[type="file"]:focus{border-color:var(--accent);box-shadow:0 0 0 var(--spacing-3) oklch(from var(--accent) l c h/10%);outline:none}input[type="file"]:disabled{cursor:not-allowed;opacity:var(--opacity-60)}input[type="range"]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--background-alt);border-radius:var(--radius);height:var(--spacing-2);outline:none;width:100%}input[type="range"]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background-color:var(--accent);border:var(--outline-width) solid var(--background-alt);border-radius:var(--radius-circle);box-shadow:0 0 0 var(--spacing-0-125) var(--accent);cursor:pointer;height:var(--spacing-5);width:var(--spacing-5)}input[type="range"]::-moz-range-thumb{background-color:var(--accent);border:var(--outline-width) solid var(--background-alt);border-radius:var(--radius-circle);box-shadow:0 0 0 var(--spacing-0-125) var(--accent);cursor:pointer;height:var(--spacing-5);width:var(--spacing-5)}input[type="range"]:focus::-webkit-slider-thumb{box-shadow:0 0 0 var(--spacing-0-125) var(--accent),0 0 0 var(--spacing-1) oklch(from var(--accent) l c h/10%)}input[type="range"]:focus::-moz-range-thumb{box-shadow:0 0 0 var(--spacing-0-125) var(--accent),0 0 0 var(--spacing-1) oklch(from var(--accent) l c h/10%)}fieldset{border:var(--border-width) solid var(--border);border-radius:var(--radius-md);margin:0 0 var(--spacing-6);padding:var(--spacing-4)}legend{color:var(--text);font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);padding:0 var(--spacing-2)}.form-error{color:var(--error)}.form-error,.form-success{display:block;font-size:var(--font-size-xs);margin-top:var(--spacing-0-375)}.form-success{color:var(--success)}.form-row{display:flex;gap:var(--spacing-4);margin-bottom:var(--spacing-6)}.form-row .form-group{flex:1;margin-bottom:0}@media (width <= 640px){.form-row{flex-direction:column;gap:var(--spacing-0)}}main{max-width:100%;overflow-x:clip;width:100%}.layout__container{box-sizing:border-box;min-width:0;padding:0;width:100%}.container,.layout__container{margin:0 auto;max-width:var(--container-default)}.container{padding:0 var(--content-padding-x)}.card{background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);box-sizing:border-box;color:var(--text);display:flex;flex-direction:column;min-width:0;padding:var(--spacing-6);transition:border-color var(--transition-base),box-shadow var(--transition-base),transform var(--transition-base);width:100%}.card--elevated{border:none;box-shadow:var(--shadow-md)}.card--elevated:hover{box-shadow:var(--shadow-lg);transform:translateY(calc(var(--spacing-0-125)*-1))}.card--outlined{background-color:transparent;border:var(--outline-width) solid var(--border)}.card--outlined:hover{border-color:var(--accent)}.card--filled{background-color:var(--background);border:var(--border-width) solid var(--border)}.card__header{border-bottom:var(--border-width) solid var(--border);margin-bottom:var(--spacing-4);padding-bottom:var(--spacing-4)}.card__header:empty{display:none}.card__body{flex:1}.card__body:empty{display:none}.card__body h2,
99
+ .radio-group{display:flex;flex-direction:column;gap:var(--spacing-3)}input[type="file"]{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-base);padding:var(--spacing-0-625) var(--spacing-3);width:100%}input[type="file"]:focus{border-color:var(--accent);box-shadow:0 0 0 var(--spacing-3) oklch(from var(--accent) l c h/10%);outline:none}input[type="file"]:disabled{cursor:not-allowed;opacity:var(--opacity-60)}input[type="range"]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--background-alt);border-radius:var(--radius);height:var(--spacing-2);outline:none;width:100%}input[type="range"]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background-color:var(--accent);border:var(--outline-width) solid var(--background-alt);border-radius:var(--radius-circle);box-shadow:0 0 0 var(--spacing-0-125) var(--accent);cursor:pointer;height:var(--spacing-5);width:var(--spacing-5)}input[type="range"]::-moz-range-thumb{background-color:var(--accent);border:var(--outline-width) solid var(--background-alt);border-radius:var(--radius-circle);box-shadow:0 0 0 var(--spacing-0-125) var(--accent);cursor:pointer;height:var(--spacing-5);width:var(--spacing-5)}input[type="range"]:focus::-webkit-slider-thumb{box-shadow:0 0 0 var(--spacing-0-125) var(--accent),0 0 0 var(--spacing-1) oklch(from var(--accent) l c h/10%)}input[type="range"]:focus::-moz-range-thumb{box-shadow:0 0 0 var(--spacing-0-125) var(--accent),0 0 0 var(--spacing-1) oklch(from var(--accent) l c h/10%)}fieldset{border:var(--border-width) solid var(--border);border-radius:var(--radius-md);margin:0 0 var(--spacing-6);padding:var(--spacing-4)}legend{color:var(--text);font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);padding:0 var(--spacing-2)}.form-error{color:var(--error)}.form-error,.form-success{display:block;font-size:var(--font-size-xs);margin-top:var(--spacing-0-375)}.form-success{color:var(--success)}.input-group{display:flex;width:100%}.input-group__wrapper{background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);display:flex;flex:1;min-width:0;transition:border-color var(--transition-base),box-shadow var(--transition-base)}.input-group__wrapper:focus-within{border-color:var(--accent);box-shadow:0 0 0 var(--spacing-3) oklch(from var(--accent) l c h/10%);outline:none}.input-group__addon{align-items:center;background-color:var(--background);border:var(--border-width) solid var(--border);color:var(--text-dim);display:inline-flex;font-size:var(--font-size-base);padding:var(--spacing-0-625) var(--spacing-3);white-space:nowrap}.input-group__addon--prefix{border-radius:var(--radius-md) 0 0 var(--radius-md);border-right:none}.input-group__addon--suffix{border-left:none;border-radius:0 var(--radius-md) var(--radius-md) 0}.input-group__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:var(--border-width) solid var(--border);border-radius:0;color:var(--text);flex:1;font-family:var(--font-family);font-size:var(--font-size-base);line-height:var(--line-height-normal);min-width:0;padding:var(--spacing-0-625) var(--spacing-3);transition:border-color var(--transition-base)}.input-group__input::-moz-placeholder{color:var(--text-dim);opacity:var(--opacity-70)}.input-group__input::placeholder{color:var(--text-dim);opacity:var(--opacity-70)}.input-group__wrapper:has(.input-group__addon--prefix):not(:has(.input-group__addon--suffix)) .input-group__input{border-left:none;border-radius:0 var(--radius-md) var(--radius-md) 0}.input-group__wrapper:has(.input-group__addon--suffix):not(:has(.input-group__addon--prefix)) .input-group__input{border-radius:var(--radius-md) 0 0 var(--radius-md);border-right:none}.input-group__wrapper:has(.input-group__addon--prefix):has(.input-group__addon--suffix) .input-group__input{border-left:none;border-right:none}.input-group__input:focus{border-color:transparent;box-shadow:none;outline:none}.input-group__input:disabled,
100
+ .input-group__wrapper:has(.input-group__input:disabled){cursor:not-allowed;opacity:var(--opacity-60)}.input-group--error .input-group__wrapper{border-color:var(--error)}.input-group--error .input-group__wrapper:focus-within{border-color:var(--error);box-shadow:0 0 0 var(--spacing-3) oklch(from var(--error) l c h/10%)}.input-group--success .input-group__wrapper{border-color:var(--success)}.input-group--success .input-group__wrapper:focus-within{border-color:var(--success);box-shadow:0 0 0 var(--spacing-3) oklch(from var(--success) l c h/10%)}.form-row{display:flex;gap:var(--spacing-4);margin-bottom:var(--spacing-6)}.form-row .form-group{flex:1;margin-bottom:0}@media (width <= 640px){.form-row{flex-direction:column;gap:var(--spacing-0)}}main{max-width:100%;overflow-x:clip;width:100%}.layout__container{box-sizing:border-box;min-width:0;padding:0;width:100%}.container,.layout__container{margin:0 auto;max-width:var(--container-default)}.container{padding:0 var(--content-padding-x)}.card{background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);box-sizing:border-box;color:var(--text);display:flex;flex-direction:column;min-width:0;padding:var(--spacing-6);transition:border-color var(--transition-base),box-shadow var(--transition-base),transform var(--transition-base);width:100%}.card--elevated{border:none;box-shadow:var(--shadow-md)}.card--elevated:hover{box-shadow:var(--shadow-lg);transform:translateY(calc(var(--spacing-0-125)*-1))}.card--outlined{background-color:transparent;border:var(--outline-width) solid var(--border)}.card--outlined:hover{border-color:var(--accent)}.card--filled{background-color:var(--background);border:var(--border-width) solid var(--border)}.card__header{border-bottom:var(--border-width) solid var(--border);margin-bottom:var(--spacing-4);padding-bottom:var(--spacing-4)}.card__header:empty{display:none}.card__body{flex:1}.card__body:empty{display:none}.card__body h2,
93
101
  .card__body h3,
94
102
  .card__body h4{color:var(--text)}.card a{text-decoration:none}
95
103
  .card a:hover,.card:hover a{text-decoration:underline;text-underline-offset:.15em}.card__footer{border-top:var(--border-width) solid var(--border);margin-top:var(--spacing-4);padding-top:var(--spacing-4)}.card__footer:empty{display:none}.card__image{border-radius:var(--radius-lg) var(--radius-lg) 0 0;display:block;height:auto;margin:calc(var(--spacing-6)*-1) calc(var(--spacing-6)*-1) var(--spacing-6) calc(var(--spacing-6)*-1);-o-object-fit:cover;object-fit:cover;width:100%}.card:has(.card__image){padding-top:0}.card__image + .card__header{margin-top:0;padding-top:0}.card__title{color:var(--text);font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);margin:0 0 var(--spacing-2) 0}.card__subtitle{color:var(--text-dim);font-size:var(--font-size-sm);margin:0}section{background-color:var(--background);color:var(--text)}.border{border:var(--border-width) solid var(--border)}.border-top{border-top:var(--border-width) solid var(--border)}.border-bottom{border-bottom:var(--border-width) solid var(--border)}.border-left{border-left:var(--border-width) solid var(--border)}.border-right{border-right:var(--border-width) solid var(--border)}.m-0{margin:0}.m-1{margin:.25rem}.m-2{margin:.5rem}.m-3{margin:.75rem}.m-4{margin:1rem}.m-5{margin:1.25rem}.m-6{margin:1.5rem}.m-8{margin:2rem}.m-10{margin:2.5rem}.m-12{margin:3rem}.m-16{margin:4rem}.m-20{margin:5rem}.m-24{margin:6rem}.m-auto{margin:auto}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-10{margin-top:2.5rem}.mt-12{margin-top:3rem}.mt-16{margin-top:4rem}.mt-20{margin-top:5rem}.mt-24{margin-top:6rem}.mt-auto{margin-top:auto}.mr-0{margin-right:0}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mr-5{margin-right:1.25rem}.mr-6{margin-right:1.5rem}.mr-8{margin-right:2rem}.mr-10{margin-right:2.5rem}.mr-12{margin-right:3rem}.mr-16{margin-right:4rem}.mr-20{margin-right:5rem}.mr-24{margin-right:6rem}.mr-auto{margin-right:auto}.mb-0{margin-bottom:0}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-16{margin-bottom:4rem}.mb-20{margin-bottom:5rem}.mb-24{margin-bottom:6rem}.mb-auto{margin-bottom:auto}.ml-0{margin-left:0}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-5{margin-left:1.25rem}.ml-6{margin-left:1.5rem}.ml-8{margin-left:2rem}.ml-10{margin-left:2.5rem}.ml-12{margin-left:3rem}.ml-16{margin-left:4rem}.ml-20{margin-left:5rem}.ml-24{margin-left:6rem}.ml-auto{margin-left:auto}.mx-0{margin-left:0;margin-right:0}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-5{margin-left:1.25rem;margin-right:1.25rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.mx-8{margin-left:2rem;margin-right:2rem}.mx-10{margin-left:2.5rem;margin-right:2.5rem}.mx-12{margin-left:3rem;margin-right:3rem}.mx-16{margin-left:4rem;margin-right:4rem}.mx-20{margin-left:5rem;margin-right:5rem}.mx-24{margin-left:6rem;margin-right:6rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-bottom:0;margin-top:0}.my-1{margin-bottom:.25rem;margin-top:.25rem}.my-2{margin-bottom:.5rem;margin-top:.5rem}.my-3{margin-bottom:.75rem;margin-top:.75rem}.my-4{margin-bottom:1rem;margin-top:1rem}.my-5{margin-bottom:1.25rem;margin-top:1.25rem}.my-6{margin-bottom:1.5rem;margin-top:1.5rem}.my-8{margin-bottom:2rem;margin-top:2rem}.my-10{margin-bottom:2.5rem;margin-top:2.5rem}.my-12{margin-bottom:3rem;margin-top:3rem}.my-16{margin-bottom:4rem;margin-top:4rem}.my-20{margin-bottom:5rem;margin-top:5rem}.my-24{margin-bottom:6rem;margin-top:6rem}.my-auto{margin-bottom:auto;margin-top:auto}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.p-10{padding:2.5rem}.p-12{padding:3rem}.p-16{padding:4rem}.p-20{padding:5rem}.p-24{padding:6rem}.pt-0{padding-top:0}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-6{padding-top:1.5rem}.pt-8{padding-top:2rem}.pt-10{padding-top:2.5rem}.pt-12{padding-top:3rem}.pt-16{padding-top:4rem}.pt-20{padding-top:5rem}.pt-24{padding-top:6rem}.pr-0{padding-right:0}.pr-1{padding-right:.25rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pr-5{padding-right:1.25rem}.pr-6{padding-right:1.5rem}.pr-8{padding-right:2rem}.pr-10{padding-right:2.5rem}.pr-12{padding-right:3rem}.pr-16{padding-right:4rem}.pr-20{padding-right:5rem}.pr-24{padding-right:6rem}.pb-0{padding-bottom:0}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-5{padding-bottom:1.25rem}.pb-6{padding-bottom:1.5rem}.pb-8{padding-bottom:2rem}.pb-10{padding-bottom:2.5rem}.pb-12{padding-bottom:3rem}.pb-16{padding-bottom:4rem}.pb-20{padding-bottom:5rem}.pb-24{padding-bottom:6rem}.pl-0{padding-left:0}.pl-1{padding-left:.25rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pl-6{padding-left:1.5rem}.pl-8{padding-left:2rem}.pl-10{padding-left:2.5rem}.pl-12{padding-left:3rem}.pl-16{padding-left:4rem}.pl-20{padding-left:5rem}.pl-24{padding-left:6rem}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-12{padding-left:3rem;padding-right:3rem}.px-16{padding-left:4rem;padding-right:4rem}.px-20{padding-left:5rem;padding-right:5rem}.px-24{padding-left:6rem;padding-right:6rem}.py-0{padding-bottom:0;padding-top:0}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-8{padding-bottom:2rem;padding-top:2rem}.py-10{padding-bottom:2.5rem;padding-top:2.5rem}.py-12{padding-bottom:3rem;padding-top:3rem}.py-16{padding-bottom:4rem;padding-top:4rem}.py-20{padding-bottom:5rem;padding-top:5rem}.py-24{padding-bottom:6rem;padding-top:6rem}.container-sm{max-width:640px}.container-md,.container-sm{margin-left:auto;margin-right:auto;padding-left:var(--spacing-4);padding-right:var(--spacing-4)}.container-md{max-width:768px}.container-lg{max-width:1024px}.container-lg,.container-xl{margin-left:auto;margin-right:auto;padding-left:var(--spacing-4);padding-right:var(--spacing-4)}.container-xl{max-width:1280px}.container-2xl{max-width:1536px}.container-2xl,.container-full{margin-left:auto;margin-right:auto;padding-left:var(--spacing-4);padding-right:var(--spacing-4)}.container-full{max-width:100%}.w-auto{width:auto}.w-full{width:100%}.w-screen{width:100vw}.w-fit{width:-moz-fit-content;width:fit-content}.w-max{width:-moz-max-content;width:max-content}.w-min{width:-moz-min-content;width:min-content}.w-0{width:0}.w-1{width:.25rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-20{width:5rem}.w-24{width:6rem}.w-32{width:8rem}.w-40{width:10rem}.w-48{width:12rem}.w-56{width:14rem}.w-64{width:16rem}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.h-fit{height:-moz-fit-content;height:fit-content}.h-max{height:-moz-max-content;height:max-content}.h-min{height:-moz-min-content;height:min-content}.h-0{height:0}.h-1{height:.25rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-16{height:4rem}.h-20{height:5rem}.h-24{height:6rem}.h-32{height:8rem}.h-40{height:10rem}.h-48{height:12rem}.h-56{height:14rem}.h-64{height:16rem}.min-w-0{min-width:0}.min-w-full{min-width:100%}.min-w-min{min-width:-moz-min-content;min-width:min-content}.min-w-max{min-width:-moz-max-content;min-width:max-content}.min-w-fit{min-width:-moz-fit-content;min-width:fit-content}.min-h-0{min-height:0}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.min-h-fit{min-height:-moz-fit-content;min-height:fit-content}.min-h-max{min-height:-moz-max-content;min-height:max-content}.min-h-min{min-height:-moz-min-content;min-height:min-content}.max-w-none{max-width:none}.max-w-xs{max-width:20rem}.max-w-sm{max-width:24rem}.max-w-md{max-width:28rem}.max-w-lg{max-width:32rem}.max-w-xl{max-width:36rem}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-full{max-width:100%}.max-w-screen-sm{max-width:640px}.max-w-screen-md{max-width:768px}.max-w-screen-lg{max-width:1024px}.max-w-screen-xl{max-width:1280px}.max-w-screen-2xl{max-width:1536px}.max-h-none{max-height:none}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.max-h-fit{max-height:-moz-fit-content;max-height:fit-content}.max-h-max{max-height:-moz-max-content;max-height:max-content}.max-h-min{max-height:-moz-min-content;max-height:min-content}.max-h-0{max-height:0}.max-h-1{max-height:.25rem}.max-h-2{max-height:.5rem}.max-h-3{max-height:.75rem}.max-h-4{max-height:1rem}.max-h-5{max-height:1.25rem}.max-h-6{max-height:1.5rem}.max-h-8{max-height:2rem}.max-h-10{max-height:2.5rem}.max-h-12{max-height:3rem}.max-h-16{max-height:4rem}.max-h-20{max-height:5rem}.max-h-24{max-height:6rem}.max-h-32{max-height:8rem}.max-h-40{max-height:10rem}.max-h-48{max-height:12rem}.max-h-56{max-height:14rem}.max-h-64{max-height:16rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.inline-grid{display:inline-grid}.table{display:table}.table-row{display:table-row}.table-cell{display:table-cell}.contents{display:contents}.list-item{display:list-item}.hidden{display:none}@media (width >= 640px){.sm\:block{display:block}.sm\:inline-block{display:inline-block}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:grid{display:grid}.sm\:inline-grid{display:inline-grid}.sm\:hidden{display:none}}@media (width >= 768px){.md\:block{display:block}.md\:inline-block{display:inline-block}.md\:inline{display:inline}.md\:flex{display:flex}.md\:inline-flex{display:inline-flex}.md\:grid{display:grid}.md\:inline-grid{display:inline-grid}.md\:hidden{display:none}}@media (width >= 1024px){.lg\:block{display:block}.lg\:inline-block{display:inline-block}.lg\:inline{display:inline}.lg\:flex{display:flex}.lg\:inline-flex{display:inline-flex}.lg\:grid{display:grid}.lg\:inline-grid{display:inline-grid}.lg\:hidden{display:none}}@media (width >= 1280px){.xl\:block{display:block}.xl\:inline-block{display:inline-block}.xl\:inline{display:inline}.xl\:flex{display:flex}.xl\:inline-flex{display:inline-flex}.xl\:grid{display:grid}.xl\:inline-grid{display:inline-grid}.xl\:hidden{display:none}}@media (width >= 1536px){.xxl\:block{display:block}.xxl\:inline-block{display:inline-block}.xxl\:inline{display:inline}.xxl\:flex{display:flex}.xxl\:inline-flex{display:inline-flex}.xxl\:grid{display:grid}.xxl\:inline-grid{display:inline-grid}.xxl\:hidden{display:none}}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-auto{z-index:auto}.z-dropdown{z-index:1000}.z-dropdown-submenu{z-index:1001}.z-modal{z-index:2000}.z-modal-backdrop{z-index:1999}.z-tooltip{z-index:3000}.z-toast{z-index:4000}.z-navbar{z-index:5000}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-full{border-radius:9999px}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-t-sm{border-top-left-radius:.125rem;border-top-right-radius:.125rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}.rounded-t-full{border-top-left-radius:9999px;border-top-right-radius:9999px}.rounded-r-none{border-bottom-right-radius:0;border-top-right-radius:0}.rounded-r-sm{border-bottom-right-radius:.125rem;border-top-right-radius:.125rem}.rounded-r{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.rounded-r-md{border-bottom-right-radius:.375rem;border-top-right-radius:.375rem}.rounded-r-lg{border-bottom-right-radius:.5rem;border-top-right-radius:.5rem}.rounded-r-xl{border-bottom-right-radius:.75rem;border-top-right-radius:.75rem}.rounded-r-2xl{border-bottom-right-radius:1rem;border-top-right-radius:1rem}.rounded-r-full{border-bottom-right-radius:9999px;border-top-right-radius:9999px}.rounded-b-none{border-bottom-left-radius:0;border-bottom-right-radius:0}.rounded-b-sm{border-bottom-left-radius:.125rem;border-bottom-right-radius:.125rem}.rounded-b{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-b-md{border-bottom-left-radius:.375rem;border-bottom-right-radius:.375rem}.rounded-b-lg{border-bottom-left-radius:.5rem;border-bottom-right-radius:.5rem}.rounded-b-xl{border-bottom-left-radius:.75rem;border-bottom-right-radius:.75rem}.rounded-b-2xl{border-bottom-left-radius:1rem;border-bottom-right-radius:1rem}.rounded-b-full{border-bottom-left-radius:9999px;border-bottom-right-radius:9999px}.rounded-l-none{border-bottom-left-radius:0;border-top-left-radius:0}.rounded-l-sm{border-bottom-left-radius:.125rem;border-top-left-radius:.125rem}.rounded-l{border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.rounded-l-md{border-bottom-left-radius:.375rem;border-top-left-radius:.375rem}.rounded-l-lg{border-bottom-left-radius:.5rem;border-top-left-radius:.5rem}.rounded-l-xl{border-bottom-left-radius:.75rem;border-top-left-radius:.75rem}.rounded-l-2xl{border-bottom-left-radius:1rem;border-top-left-radius:1rem}.rounded-l-full{border-bottom-left-radius:9999px;border-top-left-radius:9999px}.border-0{border-width:0}.border{border-width:1px}.border-2{border-width:2px}.border-4{border-width:4px}.border-8{border-width:8px}.border-t-0{border-top-width:0}.border-t{border-top-width:1px}.border-t-2{border-top-width:2px}.border-t-4{border-top-width:4px}.border-t-8{border-top-width:8px}.border-r-0{border-right-width:0}.border-r{border-right-width:1px}.border-r-2{border-right-width:2px}.border-r-4{border-right-width:4px}.border-r-8{border-right-width:8px}.border-b-0{border-bottom-width:0}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-b-4{border-bottom-width:4px}.border-b-8{border-bottom-width:8px}.border-l-0{border-left-width:0}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-l-4{border-left-width:4px}.border-l-8{border-left-width:8px}.border-transparent{border-color:transparent}.border-color{border-color:var(--border)}.border-accent{border-color:var(--accent)}.border-success{border-color:var(--success)}.border-warning{border-color:var(--warning)}.border-error{border-color:var(--error)}.border-info{border-color:var(--info)}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.flex-wrap-reverse{flex-wrap:wrap-reverse}.flex-nowrap{flex-wrap:nowrap}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.justify-evenly{justify-content:space-evenly}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.self-auto{align-self:auto}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.self-stretch{align-self:stretch}.self-baseline{align-self:baseline}.flex-1{flex:1 1 0%}.flex-auto{flex:1 1 auto}.flex-initial{flex:0 1 auto}.flex-none{flex:none}.grow{flex-grow:1}.grow-0{flex-grow:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-none{grid-template-columns:none}.grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.grid-rows-none{grid-template-rows:none}.col-auto{grid-column:auto}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-5{grid-column:span 5/span 5}.col-span-6{grid-column:span 6/span 6}.col-span-full{grid-column:1/-1}.row-auto{grid-row:auto}.row-span-1{grid-row:span 1/span 1}.row-span-2{grid-row:span 2/span 2}.row-span-3{grid-row:span 3/span 3}.row-span-4{grid-row:span 4/span 4}.row-span-5{grid-row:span 5/span 5}.row-span-6{grid-row:span 6/span 6}.row-span-full{grid-row:1/-1}.gap-0{gap:0}.gap-1{gap:var(--spacing-1)}.gap-2{gap:var(--spacing-2)}.gap-3{gap:var(--spacing-3)}.gap-4{gap:var(--spacing-4)}.gap-5{gap:var(--spacing-5)}.gap-6{gap:var(--spacing-6)}.gap-8{gap:var(--spacing-8)}.gap-10{gap:var(--spacing-10)}.gap-12{gap:var(--spacing-12)}.gap-16{gap:var(--spacing-16)}.gap-20{gap:var(--spacing-20)}.gap-24{gap:var(--spacing-24)}.gap-x-0{-moz-column-gap:0;column-gap:0}.gap-x-1{-moz-column-gap:var(--spacing-1);column-gap:var(--spacing-1)}.gap-x-2{-moz-column-gap:var(--spacing-2);column-gap:var(--spacing-2)}.gap-x-3{-moz-column-gap:var(--spacing-3);column-gap:var(--spacing-3)}.gap-x-4{-moz-column-gap:var(--spacing-4);column-gap:var(--spacing-4)}.gap-x-5{-moz-column-gap:var(--spacing-5);column-gap:var(--spacing-5)}.gap-x-6{-moz-column-gap:var(--spacing-6);column-gap:var(--spacing-6)}.gap-x-8{-moz-column-gap:var(--spacing-8);column-gap:var(--spacing-8)}.gap-x-10{-moz-column-gap:var(--spacing-10);column-gap:var(--spacing-10)}.gap-x-12{-moz-column-gap:var(--spacing-12);column-gap:var(--spacing-12)}.gap-x-16{-moz-column-gap:var(--spacing-16);column-gap:var(--spacing-16)}.gap-x-20{-moz-column-gap:var(--spacing-20);column-gap:var(--spacing-20)}.gap-x-24{-moz-column-gap:var(--spacing-24);column-gap:var(--spacing-24)}.gap-y-0{row-gap:0}.gap-y-1{row-gap:var(--spacing-1)}.gap-y-2{row-gap:var(--spacing-2)}.gap-y-3{row-gap:var(--spacing-3)}.gap-y-4{row-gap:var(--spacing-4)}.gap-y-5{row-gap:var(--spacing-5)}.gap-y-6{row-gap:var(--spacing-6)}.gap-y-8{row-gap:var(--spacing-8)}.gap-y-10{row-gap:var(--spacing-10)}.gap-y-12{row-gap:var(--spacing-12)}.gap-y-16{row-gap:var(--spacing-16)}.gap-y-20{row-gap:var(--spacing-20)}.gap-y-24{row-gap:var(--spacing-24)}.transition-none{transition-property:none}.transition-all{transition-property:all}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke}.transition-opacity{transition-property:opacity}.transition-shadow{transition-property:box-shadow}.transition-transform{transition-property:transform}.duration-75{transition-duration:75ms}.duration-100{transition-duration:.1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.duration-1000{transition-duration:1s}.ease-linear{transition-timing-function:linear}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.delay-75{transition-delay:75ms}.delay-100{transition-delay:.1s}.delay-150{transition-delay:.15s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-500{transition-delay:.5s}.delay-700{transition-delay:.7s}.delay-1000{transition-delay:1s}.transition-fast{transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-base{transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-slow{transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1)}@media (prefers-reduced-motion:reduce){
@@ -219,7 +227,18 @@ div.navbar__link{background:none;border:none;color:inherit;cursor:pointer;font:i
219
227
  #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,
220
228
  #themes-preview .themes-page__preview-dropdown-menu .dropdown__item[aria-current="true"] span,
221
229
  #themes-preview .themes-page__preview-dropdown-menu .dropdown__item[aria-current="true"]:focus-visible span,
222
- #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,
230
+ #themes-preview .themes-page__preview-dropdown-menu .dropdown__item[aria-current="true"]:hover span{color:var(--accent)!important}.block-preview-wrapper{border:1px solid var(--border);border-radius:var(--radius-lg);margin:var(--spacing-6) 0;overflow:hidden}.block-preview-wrapper--hero{background:var(--background-alt);padding:var(--spacing-16) var(--spacing-6);text-align:center}.block-preview-wrapper--pricing{background:var(--background-alt);padding:var(--spacing-6)}.block-preview-wrapper--docs{min-height:16rem}.block-preview-wrapper--dashboard{min-height:24rem}.docs-dim{color:var(--text-dim);font-size:var(--font-size-sm);margin-top:0}.landing-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)}.landing-hero__subtitle{color:var(--text-dim);font-size:var(--font-size-xl);line-height:var(--line-height-relaxed);margin:0 auto var(--spacing-8);max-width:var(--spacing-175)}.landing-hero__ctas{display:flex;flex-wrap:wrap;gap:var(--spacing-3);justify-content:center}.pricing-grid{display:grid;gap:var(--spacing-6);grid-template-columns:repeat(auto-fit,minmax(min(100%,16rem),1fr));margin:0 auto;max-width:56rem}.pricing-card{display:flex;flex-direction:column}.pricing-card .card__body{display:flex;flex:1;flex-direction:column}.pricing-card--featured{border-color:var(--accent);box-shadow:0 0 0 2px oklch(from var(--accent) l c h/20%)}.pricing-card__badge{align-self:flex-start;margin-bottom:var(--spacing-2)}.pricing-card__name{color:var(--text);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);margin:0 0 var(--spacing-2)}.pricing-card__price{color:var(--text);font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);margin:0 0 var(--spacing-0-5)}.pricing-card__currency,
231
+ .pricing-card__period-inline{color:var(--text-dim);font-size:var(--font-size-lg);font-weight:var(--font-weight-normal)}.pricing-card__period{color:var(--text-dim);font-size:var(--font-size-sm);margin:0 0 var(--spacing-4)}.pricing-card__features{color:var(--text);flex:1;font-size:var(--font-size-sm);list-style:none;margin:0 0 var(--spacing-6);padding:0}.pricing-card__features li{padding:var(--spacing-1) 0;padding-left:var(--spacing-4);position:relative}.pricing-card__features li::before{background:var(--accent);border-radius:50%;content:"";height:.35em;left:0;position:absolute;top:.65em;width:.35em}.pricing-card__cta{justify-content:center;width:100%}.dashboard-page__header{margin-bottom:var(--spacing-6)}.dashboard-page__title{color:var(--text);font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);margin:0 0 var(--spacing-1)}.dashboard-page__subtitle{color:var(--text-dim);font-size:var(--font-size-sm);margin:0}.dashboard-page__stats-grid{display:grid;gap:var(--spacing-4);grid-template-columns:repeat(auto-fill,minmax(10rem,1fr));margin-bottom:var(--spacing-8)}.dashboard-page__stat .card__body{display:flex;flex-direction:column;gap:var(--spacing-1)}.dashboard-page__stat .card__label{color:var(--text-dim);font-size:var(--font-size-sm)}.dashboard-page__stat .card__value{color:var(--text);font-size:var(--font-size-xl);font-weight:var(--font-weight-bold)}.dashboard-page__section-title{color:var(--text);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);margin:0 0 var(--spacing-4)}.docs-layout-demo{display:flex;min-height:16rem}.docs-layout-demo__sidebar{background:var(--background-alt);border-right:1px solid var(--border);flex-shrink:0;padding:var(--spacing-4);width:12rem}.docs-layout-demo__nav{display:flex;flex-direction:column;gap:var(--spacing-1)}.docs-layout-demo__nav-link{border-radius:var(--radius-md);color:var(--text);display:block;font-size:var(--font-size-sm);padding:var(--spacing-2) var(--spacing-3);text-decoration:none}.docs-layout-demo__nav-link:hover{background:var(--background)}.docs-layout-demo__nav-link--active{background:var(--accent);color:var(--accent-text)}.docs-layout-demo__main{flex:1;overflow:auto;padding:var(--spacing-6)}.docs-layout-demo__header{margin-bottom:var(--spacing-4)}.docs-layout-demo__title{color:var(--text);font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);margin:0 0 var(--spacing-1)}.docs-layout-demo__desc{color:var(--text-dim);margin:0}.docs-layout-demo__content{margin-top:var(--spacing-4)}.block-preview-wrapper--login,
232
+ .block-preview-wrapper--signup{align-items:center;background:var(--background-alt);display:flex;justify-content:center;min-height:20rem;padding:var(--spacing-16) var(--spacing-6)}.login-block,
233
+ .signup-block{display:flex;flex-direction:column;gap:var(--spacing-6);max-width:24rem;width:100%}.login-block__brand,
234
+ .signup-block__brand{align-items:center;color:var(--text);display:flex;font-weight:var(--font-weight-semibold);gap:var(--spacing-2);justify-content:center;text-decoration:none}.login-block__brand:hover,
235
+ .signup-block__brand:hover{color:var(--accent-fg);text-decoration:none}.login-block__brand-icon,
236
+ .signup-block__brand-icon{align-items:center;background:var(--accent);border-radius:var(--radius);color:var(--accent-text);display:flex;font-size:var(--font-size-sm);height:1.5rem;justify-content:center;width:1.5rem}.login-block__form,
237
+ .signup-block__form{background:var(--background);border:1px solid var(--border);border-radius:var(--radius-lg);display:flex;flex-direction:column;gap:var(--spacing-4);padding:var(--spacing-6)}.login-block__title,
238
+ .signup-block__title{color:var(--text);font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);margin:0 0 var(--spacing-1)}.login-block__footer,
239
+ .signup-block__footer{color:var(--text-dim);font-size:var(--font-size-sm);text-align:center}.login-block__footer a,
240
+ .signup-block__footer a{color:var(--accent-fg);text-decoration:underline;text-underline-offset:.15em}.login-block__footer a:hover,
241
+ .signup-block__footer a:hover{color:var(--accent-fg-hover)}[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,
223
242
  .card .card__body h3,
224
243
  .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)}}
225
244
  [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,13 +1,13 @@
1
1
  {
2
2
  "name": "rizzo-css",
3
- "version": "0.0.64",
3
+ "version": "0.0.66",
4
4
  "engines": {
5
5
  "node": ">=18"
6
6
  },
7
7
  "scripts": {
8
8
  "prepublishOnly": "cd ../.. && pnpm run lint:css:fix && pnpm run build:css && node scripts/copy-scaffold.js && node scripts/prepare-vanilla-scaffold.js"
9
9
  },
10
- "description": "A modern CSS design system with semantic theming, 14 themes, accessible components (BEM), and pre-built blocks. Same CSS and components for Vanilla JS, Astro, Svelte, React, and Vue; CLI scaffolds all five; blocks include Landing hero, Pricing, Dashboard, Docs layout.",
10
+ "description": "A modern CSS design system with semantic theming, 14 themes, accessible components (BEM), and pre-built blocks. Same CSS and components for Vanilla JS, Astro, Svelte, React, and Vue; CLI scaffolds all five; blocks include Landing hero, Pricing, Dashboard, Docs layout, Login, Sign up.",
11
11
  "style": "dist/rizzo.min.css",
12
12
  "main": "dist/rizzo.min.css",
13
13
  "unpkg": "dist/rizzo.min.css",
@@ -13,7 +13,7 @@ interface Props {
13
13
  links?: FooterLink[];
14
14
  /** Optional class for the root element */
15
15
  class?: string;
16
- /** Optional version string (e.g. from package.json); shown as "v0.0.64" with link to CHANGELOG */
16
+ /** Optional version string (e.g. from package.json); shown as "v0.0.66" with link to CHANGELOG */
17
17
  version?: string;
18
18
  }
19
19
 
@@ -0,0 +1,74 @@
1
+ ---
2
+ /**
3
+ * Input Group – input with optional prefix and/or suffix addons.
4
+ * BEM: input-group, input-group__wrapper, input-group__addon, input-group__addon--prefix|--suffix, input-group__input.
5
+ * Uses design tokens (--border, --accent, --text-dim, --radius-md, etc.).
6
+ */
7
+ interface Props {
8
+ id?: string;
9
+ name?: string;
10
+ type?: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url' | 'search';
11
+ value?: string;
12
+ placeholder?: string;
13
+ required?: boolean;
14
+ disabled?: boolean;
15
+ readonly?: boolean;
16
+ autocomplete?: string;
17
+ class?: string;
18
+ error?: boolean;
19
+ success?: boolean;
20
+ /** ID for the inner input (for label for=""). */
21
+ inputId?: string;
22
+ }
23
+
24
+ const {
25
+ id,
26
+ name,
27
+ type = 'text',
28
+ value,
29
+ placeholder,
30
+ required = false,
31
+ disabled = false,
32
+ readonly = false,
33
+ autocomplete,
34
+ class: className = '',
35
+ error = false,
36
+ success = false,
37
+ inputId,
38
+ } = Astro.props;
39
+
40
+ const inputIdFinal = inputId ?? id ?? `input-group-${Math.random().toString(36).slice(2, 9)}`;
41
+ const errorClass = error ? 'input-group--error' : '';
42
+ const successClass = success ? 'input-group--success' : '';
43
+ const rootClass = ['input-group', errorClass, successClass, className].filter(Boolean).join(' ');
44
+ const hasPrefix = Astro.slots.has('prefix');
45
+ const hasSuffix = Astro.slots.has('suffix');
46
+ ---
47
+
48
+ <div class={rootClass}>
49
+ <div class="input-group__wrapper">
50
+ {hasPrefix && (
51
+ <span class="input-group__addon input-group__addon--prefix" aria-hidden="true">
52
+ <slot name="prefix" />
53
+ </span>
54
+ )}
55
+ <input
56
+ id={inputIdFinal}
57
+ name={name}
58
+ type={type}
59
+ value={value}
60
+ placeholder={placeholder}
61
+ required={required}
62
+ disabled={disabled}
63
+ readonly={readonly}
64
+ autocomplete={autocomplete}
65
+ class="input-group__input"
66
+ aria-invalid={error ? 'true' : undefined}
67
+ />
68
+ {hasSuffix && (
69
+ <span class="input-group__addon input-group__addon--suffix" aria-hidden="true">
70
+ <slot name="suffix" />
71
+ </span>
72
+ )}
73
+ </div>
74
+ </div>
@@ -15,7 +15,7 @@
15
15
  Design system · Vanilla · Astro · Svelte
16
16
  </pre>
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
+ 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 50 or pick). Same template choice for **Add to existing** (`npx rizzo-css add`).
19
19
 
20
20
  ## Setup
21
21
 
@@ -10,7 +10,7 @@ const ADD_COMMAND = 'npx rizzo-css add <ComponentName>';
10
10
  <div class="home__container">
11
11
  <header class="home__hero">
12
12
  <h1 class="home__title">Rizzo CSS</h1>
13
- <p class="home__subtitle">A modern CSS design system with semantic theming, accessibility-first components, and one CLI for Vanilla, Astro, and Svelte. Start here then make it your own.</p>
13
+ <p class="home__subtitle">A modern CSS design system with semantic theming, accessibility-first components, and one CLI for Vanilla, Astro, Svelte, React, and Vue. Start here then make it your own.</p>
14
14
  <div class="home__hero-ctas">
15
15
  <a href={`${DOCS_BASE}/docs/getting-started`} class="btn btn-primary home__hero-cta" target="_blank" rel="noopener noreferrer">Get Started<span class="sr-only"> (opens in new tab)</span></a>
16
16
  <a href={`${DOCS_BASE}/docs/components`} class="btn btn-outline home__hero-cta" target="_blank" rel="noopener noreferrer">View Components<span class="sr-only"> (opens in new tab)</span></a>
@@ -19,7 +19,7 @@ const ADD_COMMAND = 'npx rizzo-css add <ComponentName>';
19
19
 
20
20
  <section class="home__features" aria-labelledby="home-features-heading">
21
21
  <h2 id="home-features-heading" class="home__section-title">Features</h2>
22
- <p class="home__features-intro">A complete design system that works across Vanilla, Astro, and Svelte — same CSS, same components, zero lock-in.</p>
22
+ <p class="home__features-intro">A complete design system that works across Vanilla, Astro, Svelte, React, and Vue — same CSS, same components, zero lock-in.</p>
23
23
  <div class="home__features-featured">
24
24
  <div class="home__card home__card--featured">
25
25
  <span class="home__card-icon" aria-hidden="true">Themes</span>
@@ -15,7 +15,7 @@
15
15
  Design system · Vanilla · Astro · Svelte
16
16
  </pre>
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
+ 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 50 or pick). Same template choice for **Add to existing** (`npx rizzo-css add`).
19
19
 
20
20
  ## Setup
21
21
 
@@ -10,7 +10,7 @@ const ADD_COMMAND = 'npx rizzo-css add <ComponentName>';
10
10
  <div class="home__container">
11
11
  <header class="home__hero">
12
12
  <h1 class="home__title">Rizzo CSS</h1>
13
- <p class="home__subtitle">A modern CSS design system with semantic theming, accessibility-first components, and one CLI for Vanilla, Astro, and Svelte. Start here then make it your own.</p>
13
+ <p class="home__subtitle">A modern CSS design system with semantic theming, accessibility-first components, and one CLI for Vanilla, Astro, Svelte, React, and Vue. Start here then make it your own.</p>
14
14
  <div class="home__hero-ctas">
15
15
  <a href={`${DOCS_BASE}/docs/getting-started`} class="btn btn-primary home__hero-cta" target="_blank" rel="noopener noreferrer">Get Started<span class="sr-only"> (opens in new tab)</span></a>
16
16
  <a href={`${DOCS_BASE}/docs/components`} class="btn btn-outline home__hero-cta" target="_blank" rel="noopener noreferrer">View Components<span class="sr-only"> (opens in new tab)</span></a>
@@ -19,7 +19,7 @@ const ADD_COMMAND = 'npx rizzo-css add <ComponentName>';
19
19
 
20
20
  <section class="home__features" aria-labelledby="home-features-heading">
21
21
  <h2 id="home-features-heading" class="home__section-title">Features</h2>
22
- <p class="home__features-intro">A complete design system that works across Vanilla, Astro, and Svelte — same CSS, same components, zero lock-in.</p>
22
+ <p class="home__features-intro">A complete design system that works across Vanilla, Astro, Svelte, React, and Vue — same CSS, same components, zero lock-in.</p>
23
23
  <div class="home__features-featured">
24
24
  <div class="home__card home__card--featured">
25
25
  <span class="home__card-icon" aria-hidden="true">Themes</span>
@@ -1,4 +1,4 @@
1
- // Sound effects: play on click/tap when user has enabled (localStorage soundEffects === 'true'). Uses /assets/sfx/click.mp3 (or relative assets/sfx for Vanilla), then click.wav fallback, else Web Audio fallback. Single source for main site (Layout.astro) and all shipped scaffolds (Astro, Svelte, Vanilla); keep behavior in sync. Includes nav links and logo (a[href], .navbar__link, .navbar__brand-link). Supports touch (touchend) so mobile plays like desktop.
1
+ // Sound effects: play on click/tap when user has enabled (localStorage soundEffects === 'true'). Uses /assets/sfx/click.mp3 (or relative assets/sfx for Vanilla), then click.wav fallback, else Web Audio fallback. Single source for main site (Layout.astro) and all shipped scaffolds (Astro, Svelte, React, Vue, Vanilla); keep behavior in sync. Includes nav links and logo (a[href], .navbar__link, .navbar__brand-link). Supports touch (touchend) so mobile plays like desktop.
2
2
  (function() {
3
3
  var SOUND_KEY = 'soundEffects';
4
4
  var THROTTLE_MS = 120;
@@ -0,0 +1,71 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+
4
+ interface Props {
5
+ value?: string;
6
+ id?: string;
7
+ name?: string;
8
+ type?: string;
9
+ placeholder?: string;
10
+ required?: boolean;
11
+ disabled?: boolean;
12
+ readonly?: boolean;
13
+ error?: boolean;
14
+ success?: boolean;
15
+ class?: string;
16
+ children?: Snippet;
17
+ prefix?: Snippet;
18
+ suffix?: Snippet;
19
+ }
20
+
21
+ let {
22
+ value = $bindable(''),
23
+ id,
24
+ name,
25
+ type = 'text',
26
+ placeholder,
27
+ required = false,
28
+ disabled = false,
29
+ readonly = false,
30
+ error = false,
31
+ success = false,
32
+ class: className = '',
33
+ prefix,
34
+ suffix,
35
+ }: Props = $props();
36
+
37
+ const rootClass = $derived(
38
+ ['input-group', error && 'input-group--error', success && 'input-group--success', className]
39
+ .filter(Boolean)
40
+ .join(' ')
41
+ .trim()
42
+ );
43
+ const inputId = $derived(id ?? `input-group-${Math.random().toString(36).slice(2, 9)}`);
44
+ </script>
45
+
46
+ <div class={rootClass}>
47
+ <div class="input-group__wrapper">
48
+ {#if prefix}
49
+ <span class="input-group__addon input-group__addon--prefix" aria-hidden="true">
50
+ {@render prefix()}
51
+ </span>
52
+ {/if}
53
+ <input
54
+ id={inputId}
55
+ {name}
56
+ {type}
57
+ bind:value
58
+ {placeholder}
59
+ {required}
60
+ {disabled}
61
+ {readonly}
62
+ class="input-group__input"
63
+ aria-invalid={error ? 'true' : undefined}
64
+ />
65
+ {#if suffix}
66
+ <span class="input-group__addon input-group__addon--suffix" aria-hidden="true">
67
+ {@render suffix()}
68
+ </span>
69
+ {/if}
70
+ </div>
71
+ </div>
@@ -15,7 +15,7 @@
15
15
  Design system · Vanilla · Astro · Svelte
16
16
  </pre>
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
+ 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 50 or pick). Same template choice for **Add to existing** (`npx rizzo-css add`).
19
19
 
20
20
  ## Setup
21
21
 
@@ -10,9 +10,9 @@
10
10
  },
11
11
  "devDependencies": {
12
12
  "@sveltejs/adapter-auto": "^7.0.0",
13
- "@sveltejs/kit": "^2.50.2",
13
+ "@sveltejs/kit": "^2.53.4",
14
14
  "@sveltejs/vite-plugin-svelte": "^6.2.4",
15
- "svelte": "^5.49.2",
15
+ "svelte": "^5.53.5",
16
16
  "svelte-check": "^4.3.6",
17
17
  "typescript": "^5.9.3",
18
18
  "vite": "^7.3.1"
@@ -15,7 +15,7 @@
15
15
  Design system · Vanilla · Astro · Svelte
16
16
  </pre>
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
+ 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 50 or pick). Same template choice for **Add to existing** (`npx rizzo-css add`).
19
19
 
20
20
  ## Setup
21
21
 
@@ -10,9 +10,9 @@
10
10
  },
11
11
  "devDependencies": {
12
12
  "@sveltejs/adapter-auto": "^7.0.0",
13
- "@sveltejs/kit": "^2.50.2",
13
+ "@sveltejs/kit": "^2.53.4",
14
14
  "@sveltejs/vite-plugin-svelte": "^6.2.4",
15
- "svelte": "^5.49.2",
15
+ "svelte": "^5.53.5",
16
16
  "svelte-check": "^4.3.6",
17
17
  "typescript": "^5.9.3",
18
18
  "vite": "^7.3.1"
@@ -15,7 +15,7 @@
15
15
  Design system · Vanilla · Astro · Svelte
16
16
  </pre>
17
17
 
18
- This project was scaffolded with `npx rizzo-css init` when you chose **Create new project** and Vanilla JS, then **Landing**, **Docs**, **Dashboard**, or **Full**. **Full** = clone of the docs site. **Landing** / **Docs** / **Dashboard** = CSS, fonts, icons, sfx + component picker (all 56 or pick); Landing adds hero/features; Docs adds sidebar + sample doc; Dashboard adds sidebar + stats/table. **Add to existing project** (or `npx rizzo-css add`) uses the **same template choice**; you must add the stylesheet `<link>` yourself (CLI prints the exact tag).
18
+ This project was scaffolded with `npx rizzo-css init` when you chose **Create new project** and Vanilla JS, then **Landing**, **Docs**, **Dashboard**, or **Full**. **Full** = clone of the docs site. **Landing** / **Docs** / **Dashboard** = CSS, fonts, icons, sfx + component picker (all 50 or pick); Landing adds hero/features; Docs adds sidebar + sample doc; Dashboard adds sidebar + stats/table. **Add to existing project** (or `npx rizzo-css add`) uses the **same template choice**; you must add the stylesheet `<link>` yourself (CLI prints the exact tag).
19
19
 
20
20
  ## First-time setup
21
21
 
@@ -28,7 +28,7 @@ If you prefer to load CSS from a CDN instead of the local file, replace the `<li
28
28
  - `<link rel="stylesheet" href="https://unpkg.com/rizzo-css@latest/dist/rizzo.min.css" />`
29
29
  - Or jsDelivr: `https://cdn.jsdelivr.net/npm/rizzo-css@latest/dist/rizzo.min.css`
30
30
 
31
- (Replace `@latest` with a specific version, e.g. `@0.0.64`, in production.)
31
+ (Replace `@latest` with a specific version, e.g. `@0.0.66`, in production.)
32
32
 
33
33
  The CLI replaces placeholders in `index.html` (e.g. `{{DATA_THEME}}`, `{{TITLE}}`) when you run `rizzo-css init`. The theme selected during init is used on first load when you have no saved preference in the browser.
34
34