rizzo-css 0.0.68 → 0.0.70

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 (86) hide show
  1. package/README.md +3 -3
  2. package/bin/rizzo-css.js +6 -6
  3. package/dist/rizzo.min.css +8 -5
  4. package/package.json +1 -1
  5. package/scaffold/astro/Accordion.astro +1 -1
  6. package/scaffold/astro/Alert.astro +1 -1
  7. package/scaffold/astro/AlertDialog.astro +1 -1
  8. package/scaffold/astro/BackToTop.astro +1 -1
  9. package/scaffold/astro/Breadcrumb.astro +1 -1
  10. package/scaffold/astro/Collapsible.astro +1 -1
  11. package/scaffold/astro/CopyToClipboard.astro +2 -2
  12. package/scaffold/astro/DocsSidebar.astro +2 -1
  13. package/scaffold/astro/Dropdown.astro +1 -1
  14. package/scaffold/astro/FontSwitcher.astro +2 -2
  15. package/scaffold/astro/Footer.astro +1 -1
  16. package/scaffold/astro/Modal.astro +1 -1
  17. package/scaffold/astro/RangeCalendar.astro +215 -0
  18. package/scaffold/astro/Settings.astro +1 -1
  19. package/scaffold/astro/Sheet.astro +1 -1
  20. package/scaffold/astro/Table.astro +2 -2
  21. package/scaffold/astro/Tabs.astro +25 -8
  22. package/scaffold/astro/ThemeIcon.astro +17 -17
  23. package/scaffold/astro/ThemeSwitcher.astro +19 -19
  24. package/scaffold/astro/base/README-RIZZO.md +1 -1
  25. package/scaffold/astro/variants/full/README-RIZZO.md +1 -1
  26. package/scaffold/svelte/Navbar.svelte +14 -3
  27. package/scaffold/svelte/RangeCalendar.svelte +167 -0
  28. package/scaffold/svelte/base/README-RIZZO.md +1 -1
  29. package/scaffold/svelte/index.ts +1 -0
  30. package/scaffold/svelte/variants/full/README-RIZZO.md +1 -1
  31. package/scaffold/vanilla/README-RIZZO.md +2 -2
  32. package/scaffold/vanilla/components/accordion.html +60 -0
  33. package/scaffold/vanilla/components/alert-dialog.html +60 -0
  34. package/scaffold/vanilla/components/alert.html +60 -0
  35. package/scaffold/vanilla/components/aspect-ratio.html +60 -0
  36. package/scaffold/vanilla/components/avatar.html +60 -0
  37. package/scaffold/vanilla/components/back-to-top.html +60 -0
  38. package/scaffold/vanilla/components/badge.html +60 -0
  39. package/scaffold/vanilla/components/breadcrumb.html +60 -0
  40. package/scaffold/vanilla/components/button-group.html +60 -0
  41. package/scaffold/vanilla/components/button.html +60 -0
  42. package/scaffold/vanilla/components/calendar.html +60 -0
  43. package/scaffold/vanilla/components/cards.html +60 -0
  44. package/scaffold/vanilla/components/carousel.html +60 -0
  45. package/scaffold/vanilla/components/collapsible.html +60 -0
  46. package/scaffold/vanilla/components/context-menu.html +60 -0
  47. package/scaffold/vanilla/components/copy-to-clipboard.html +60 -0
  48. package/scaffold/vanilla/components/dashboard.html +60 -0
  49. package/scaffold/vanilla/components/divider.html +60 -0
  50. package/scaffold/vanilla/components/docs-sidebar.html +60 -0
  51. package/scaffold/vanilla/components/dropdown.html +60 -0
  52. package/scaffold/vanilla/components/empty.html +60 -0
  53. package/scaffold/vanilla/components/font-switcher.html +60 -0
  54. package/scaffold/vanilla/components/footer.html +60 -0
  55. package/scaffold/vanilla/components/forms.html +60 -0
  56. package/scaffold/vanilla/components/hover-card.html +60 -0
  57. package/scaffold/vanilla/components/icons.html +60 -0
  58. package/scaffold/vanilla/components/index.html +61 -0
  59. package/scaffold/vanilla/components/input-group.html +60 -0
  60. package/scaffold/vanilla/components/kbd.html +60 -0
  61. package/scaffold/vanilla/components/label.html +60 -0
  62. package/scaffold/vanilla/components/modal.html +60 -0
  63. package/scaffold/vanilla/components/navbar.html +60 -0
  64. package/scaffold/vanilla/components/pagination.html +60 -0
  65. package/scaffold/vanilla/components/popover.html +60 -0
  66. package/scaffold/vanilla/components/progress-bar.html +60 -0
  67. package/scaffold/vanilla/components/range-calendar.html +824 -0
  68. package/scaffold/vanilla/components/resizable.html +60 -0
  69. package/scaffold/vanilla/components/scroll-area.html +60 -0
  70. package/scaffold/vanilla/components/search.html +60 -0
  71. package/scaffold/vanilla/components/separator.html +60 -0
  72. package/scaffold/vanilla/components/settings.html +60 -0
  73. package/scaffold/vanilla/components/sheet.html +60 -0
  74. package/scaffold/vanilla/components/skeleton.html +60 -0
  75. package/scaffold/vanilla/components/slider.html +60 -0
  76. package/scaffold/vanilla/components/sound-effects.html +60 -0
  77. package/scaffold/vanilla/components/spinner.html +60 -0
  78. package/scaffold/vanilla/components/switch.html +60 -0
  79. package/scaffold/vanilla/components/table.html +60 -0
  80. package/scaffold/vanilla/components/tabs.html +60 -0
  81. package/scaffold/vanilla/components/theme-switcher.html +60 -0
  82. package/scaffold/vanilla/components/toast.html +60 -0
  83. package/scaffold/vanilla/components/toggle-group.html +60 -0
  84. package/scaffold/vanilla/components/toggle.html +60 -0
  85. package/scaffold/vanilla/components/tooltip.html +60 -0
  86. package/scaffold/vanilla/index.html +60 -0
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 52 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 53 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 52 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 53 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.68 or any version) -->
75
+ <!-- unpkg (pin version: replace @latest with @0.0.70 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 -->
package/bin/rizzo-css.js CHANGED
@@ -196,7 +196,7 @@ const THEMES = [...DARK_THEMES, ...LIGHT_THEMES];
196
196
  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
- 'Button', 'Badge', 'Card', 'Calendar', 'Carousel', 'Dashboard', 'Divider', 'DocsSidebar', 'Footer', 'Spinner', 'ProgressBar', 'Avatar', 'Alert',
199
+ 'Button', 'Badge', 'Card', 'Calendar', 'RangeCalendar', 'Carousel', 'Dashboard', 'Divider', 'DocsSidebar', 'Footer', 'Spinner', 'ProgressBar', 'Avatar', 'Alert',
200
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',
@@ -205,7 +205,7 @@ const SVELTE_COMPONENTS = [
205
205
  'Slider', 'Sheet', 'Popover', 'Toggle', 'ToggleGroup', 'ScrollArea', 'HoverCard', 'ContextMenu', 'ResizablePaneGroup', 'ResizablePane', 'ResizableHandle',
206
206
  ];
207
207
  const ASTRO_COMPONENTS = [
208
- 'Button', 'Badge', 'Card', 'Calendar', 'Carousel', 'Dashboard', 'Divider', 'DocsSidebar', 'Footer', 'Spinner', 'ProgressBar', 'Avatar', 'Alert',
208
+ 'Button', 'Badge', 'Card', 'Calendar', 'RangeCalendar', 'Carousel', 'Dashboard', 'Divider', 'DocsSidebar', 'Footer', 'Spinner', 'ProgressBar', 'Avatar', 'Alert',
209
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',
@@ -218,7 +218,7 @@ const VUE_COMPONENTS = [...ASTRO_COMPONENTS];
218
218
 
219
219
  // Base set for Manual: all interactive components we ship (so manual has a full working set). Full includes everything (same list).
220
220
  const RECOMMENDED_COMPONENTS = [
221
- 'Button', 'Badge', 'Card', 'Calendar', 'Carousel', 'Dashboard', 'Divider', 'DocsSidebar', 'Footer', 'Spinner', 'ProgressBar', 'Avatar', 'Alert',
221
+ 'Button', 'Badge', 'Card', 'Calendar', 'RangeCalendar', 'Carousel', 'Dashboard', 'Divider', 'DocsSidebar', 'Footer', 'Spinner', 'ProgressBar', 'Avatar', 'Alert',
222
222
  'BackToTop', 'Breadcrumb', 'FormGroup', 'Input', 'Checkbox', 'Textarea', 'Select', 'Radio',
223
223
  'CopyToClipboard', 'Tooltip', 'Pagination', 'Tabs', 'Accordion', 'Dropdown',
224
224
  'Modal', 'Toast', 'Table', 'ThemeSwitcher', 'FontSwitcher', 'SoundEffects',
@@ -290,7 +290,7 @@ function logAddedDeps(selected, expanded, framework) {
290
290
  // Vanilla scaffold: component name (same as ASTRO_COMPONENTS) -> components/*.html slug. New components (label, kbd, etc.) have stub pages in scaffold/vanilla/components/.
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
- Card: 'cards', Calendar: 'calendar', Carousel: 'carousel', Checkbox: 'forms', Collapsible: 'collapsible', ContextMenu: 'context-menu', CopyToClipboard: 'copy-to-clipboard', Dashboard: 'dashboard', Divider: 'divider', DocsSidebar: 'docs-sidebar', Dropdown: 'dropdown',
293
+ Card: 'cards', Calendar: 'calendar', RangeCalendar: 'range-calendar', Carousel: 'carousel', Checkbox: 'forms', Collapsible: 'collapsible', ContextMenu: 'context-menu', CopyToClipboard: 'copy-to-clipboard', Dashboard: 'dashboard', Divider: 'divider', DocsSidebar: 'docs-sidebar', Dropdown: 'dropdown',
294
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',
@@ -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 52 components each)
1127
+ --framework <fw> vanilla | astro | svelte | react | vue (same 53 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 52 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 53 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
  `);
@@ -130,8 +130,9 @@ div.navbar__link{background:none;border:none;color:inherit;cursor:pointer;font:i
130
130
  .back-to-top[data-visible="true"]{transition:none}}@media (width <= 640px){.settings__panel{max-width:100%;width:100%}}.modal__overlay{backdrop-filter:blur(var(--blur-sm));background-color:oklch(from var(--shadow-color) l c h/60%);bottom:0;left:0;opacity:0;pointer-events:none;position:fixed;right:0;top:0;transition:opacity var(--transition-slow) ease;z-index:var(--z-modal-backdrop)}.modal__overlay[aria-hidden="false"]{opacity:1;pointer-events:auto}.modal{background-color:var(--background);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-xl);display:flex;flex-direction:column;left:50%;max-height:var(--vh-90);max-width:var(--max-height-modal);opacity:0;pointer-events:none;position:fixed;top:50%;transform:translate(-50%,-50%);transition:opacity var(--transition-slow) ease,transform var(--transition-slow) ease;width:100%;z-index:var(--z-modal)}.modal[aria-hidden="false"]{opacity:1;pointer-events:auto}.modal__header{align-items:center;border-bottom:var(--border-width) solid var(--border);display:flex;flex-shrink:0;justify-content:space-between;padding:var(--spacing-6)}.modal__title{color:var(--text);font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);margin:0}.modal__close{align-items:center;background:none;border:none;border-radius:var(--radius);color:var(--text-dim);cursor:pointer;display:flex;flex-shrink:0;justify-content:center;padding:var(--spacing-2);transition:background-color var(--transition-base),color var(--transition-base)}.modal__close:hover{background-color:var(--background-alt);color:var(--text)}.modal__close:focus{box-shadow:0 0 0 3px oklch(from var(--accent) l c h/10%);outline:none}.modal__body{flex:1;min-height:0;overflow-y:auto;padding:var(--spacing-6)}.modal__footer{border-top:var(--border-width) solid var(--border);display:flex;flex-shrink:0;gap:var(--spacing-3);justify-content:flex-end;padding:var(--spacing-6)}.modal__footer:empty{display:none}.modal--sm{max-width:var(--spacing-96)}.modal--md{max-width:var(--max-height-modal)}.modal--lg{max-width:var(--max-width-modal-lg)}
131
131
  .reduced-motion .modal,.reduced-motion .modal__overlay{transition:none}@media (width <= 640px){.modal{bottom:auto;left:auto;margin:var(--spacing-4);max-height:95vh;max-width:95vw;right:auto;top:auto}.modal,.modal[aria-hidden="false"]{transform:none}
132
132
  .modal__body,
133
- .modal__footer,.modal__header{padding:var(--spacing-4)}}.copy-to-clipboard{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:inline-flex;font-family:var(--font-family-mono);font-size:var(--font-size-sm);gap:var(--spacing-2);padding:var(--spacing-2) var(--spacing-3);position:relative;transition:background-color var(--transition-base),border-color var(--transition-base),color var(--transition-base)}.copy-to-clipboard:hover{background-color:var(--background);border-color:var(--accent);color:var(--accent)}.copy-to-clipboard:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.copy-to-clipboard__text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.copy-to-clipboard__icon{align-items:center;color:var(--icon);display:flex;flex-shrink:0;height:var(--spacing-4);justify-content:center;transition:opacity var(--transition-base),transform var(--transition-base);width:var(--spacing-4)}.copy-to-clipboard__icon--check{opacity:0;position:absolute;right:var(--spacing-3);transform:scale(var(--scale-80))}.copy-to-clipboard__icon--check:not(.copy-to-clipboard__icon--hidden){opacity:1;transform:scale(var(--scale-100))}.copy-to-clipboard__icon--copy.copy-to-clipboard__icon--hidden{opacity:0;transform:scale(var(--scale-80))}.copy-to-clipboard__feedback{border-width:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.copy-to-clipboard--icon-only{padding:var(--spacing-2)}.copy-to-clipboard--icon-only .copy-to-clipboard__text{border-width:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.copy-to-clipboard--icon-only .copy-to-clipboard__icon--check{right:var(--spacing-2)}.alert{align-items:flex-start;background-color:var(--alert-bg);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);box-sizing:border-box;color:var(--text);display:flex;gap:var(--spacing-3);margin-bottom:var(--spacing-3);min-width:0;padding:var(--spacing-4) var(--spacing-5);position:relative;transition:opacity var(--transition-base),transform var(--transition-base);width:100%}.alert:last-child{margin-bottom:0}.alert__content{flex:1;min-width:0}.alert__close{align-items:center;background:none;border:1px solid transparent;border-radius:var(--radius);color:inherit;cursor:pointer;display:flex;fill:none;flex-shrink:0;height:var(--spacing-6);justify-content:center;margin:calc(var(--spacing-1)*-1) calc(var(--spacing-2)*-1) calc(var(--spacing-1)*-1) 0;opacity:var(--opacity-80);padding:0;stroke:currentcolor;transition:opacity var(--transition-base),background-color var(--transition-base),border-color var(--transition-base),color var(--transition-base);width:var(--spacing-6)}.alert__close:hover{background-color:oklch(from var(--background) l c h/25%);border-color:var(--border);color:var(--text);opacity:1}.alert__close:focus-visible{opacity:1;outline:var(--outline-width) solid currentcolor;outline-offset:var(--outline-offset)}.alert--success{background-color:var(--alert-success-bg);border-color:var(--success);color:var(--success-text)}.alert--error{background-color:var(--alert-error-bg);border-color:var(--error);color:var(--error-text)}.alert--warning{background-color:var(--alert-warning-bg);border-color:var(--warning)}.alert--warning,.alert--warning .alert__content,
134
- .alert--warning .alert__content strong{color:var(--warning-text)}.alert--warning .alert__close{color:var(--warning-text);opacity:.9}.alert--warning .alert__close:hover{color:var(--text)}.alert--info{background-color:var(--alert-info-bg);border-color:var(--info);color:var(--info-text)}.alert-examples-container{align-items:stretch;display:flex;flex-direction:column;justify-content:center;min-height:8rem}.example{background:var(--background-alt);border:1px solid var(--border);border-radius:var(--radius-lg);margin:var(--spacing-6) 0;padding:var(--spacing-4)}.example-title{color:var(--text-dim);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);letter-spacing:var(--letter-spacing-wider);margin-bottom:var(--spacing-3);text-transform:uppercase}.example-demo{align-items:center;display:flex;flex-wrap:wrap;gap:var(--spacing-3)}.toast{max-width:var(--spacing-96);pointer-events:none;position:fixed;width:100%;z-index:var(--z-toast)}.toast .alert{box-shadow:var(--shadow-lg);margin-bottom:var(--spacing-2);pointer-events:auto}
133
+ .modal__footer,.modal__header{padding:var(--spacing-4)}}.dashboard{display:flex;min-height:100vh}.dashboard__sidebar{background:var(--background-alt);border-right:1px solid var(--border);flex-shrink:0;padding:var(--spacing-4);width:16rem}.dashboard__nav{display:flex;flex-direction:column;gap:var(--spacing-1)}.dashboard__nav-link{border-radius:var(--radius-md);color:var(--text);display:block;padding:var(--spacing-2) var(--spacing-3);text-decoration:none}.dashboard__nav-link:hover{background:var(--background)}.dashboard__nav-link--active{background:var(--accent);color:var(--accent-text)}.dashboard__main{flex:1;overflow:auto;padding:var(--spacing-6)}@media (width <= 768px){.dashboard{flex-direction:column}.dashboard__sidebar{border-bottom:1px solid var(--border);border-right:none;width:100%}}.copy-to-clipboard{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:inline-flex;font-family:var(--font-family-mono);font-size:var(--font-size-sm);gap:var(--spacing-2);padding:var(--spacing-2) var(--spacing-3);position:relative;transition:background-color var(--transition-base),border-color var(--transition-base),color var(--transition-base)}.copy-to-clipboard:hover{background-color:var(--background);border-color:var(--accent);color:var(--accent)}.copy-to-clipboard:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.copy-to-clipboard__text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.copy-to-clipboard__icon{align-items:center;color:var(--icon);display:flex;flex-shrink:0;height:var(--spacing-4);justify-content:center;transition:opacity var(--transition-base),transform var(--transition-base);width:var(--spacing-4)}.copy-to-clipboard__icon--check{opacity:0;position:absolute;right:var(--spacing-3);transform:scale(var(--scale-80))}.copy-to-clipboard__icon--check:not(.copy-to-clipboard__icon--hidden){opacity:1;transform:scale(var(--scale-100))}.copy-to-clipboard__icon--copy.copy-to-clipboard__icon--hidden{opacity:0;transform:scale(var(--scale-80))}.copy-to-clipboard__feedback{border-width:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.copy-to-clipboard--icon-only{padding:var(--spacing-2)}.copy-to-clipboard--icon-only .copy-to-clipboard__text{border-width:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.copy-to-clipboard--icon-only .copy-to-clipboard__icon--check{right:var(--spacing-2)}.alert{align-items:flex-start;background-color:var(--alert-bg);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);box-sizing:border-box;color:var(--text);display:flex;gap:var(--spacing-3);margin-bottom:var(--spacing-3);min-width:0;padding:var(--spacing-4) var(--spacing-5);position:relative;transition:opacity var(--transition-base),transform var(--transition-base);width:100%}.alert:last-child{margin-bottom:0}.alert__content{flex:1;min-width:0}.alert__close{align-items:center;background:none;border:1px solid transparent;border-radius:var(--radius);color:inherit;cursor:pointer;display:flex;fill:none;flex-shrink:0;height:var(--spacing-6);justify-content:center;margin:calc(var(--spacing-1)*-1) calc(var(--spacing-2)*-1) calc(var(--spacing-1)*-1) 0;opacity:var(--opacity-80);padding:0;stroke:currentcolor;transition:opacity var(--transition-base),background-color var(--transition-base),border-color var(--transition-base),color var(--transition-base);width:var(--spacing-6)}.alert__close:hover{background-color:oklch(from var(--background) l c h/25%);border-color:var(--border);color:var(--text);opacity:1}.alert__close:focus-visible{opacity:1;outline:var(--outline-width) solid currentcolor;outline-offset:var(--outline-offset)}.alert--success{background-color:var(--alert-success-bg);border-color:var(--success);color:var(--success-text)}.alert--error{background-color:var(--alert-error-bg);border-color:var(--error);color:var(--error-text)}.alert--warning{background-color:var(--alert-warning-bg);border-color:var(--warning)}.alert--warning,.alert--warning .alert__content,
134
+ .alert--warning .alert__content strong{color:var(--warning-text)}.alert--warning .alert__close{color:var(--warning-text);opacity:.9}.alert--warning .alert__close:hover{color:var(--text)}.alert--info{background-color:var(--alert-info-bg);border-color:var(--info);color:var(--info-text)}.alert-examples-container{align-items:stretch;display:flex;flex-direction:column;justify-content:center;min-height:8rem}.example{background:var(--background-alt);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);margin:var(--spacing-6) 0;padding:var(--spacing-5)}.example-title{color:var(--text-dim);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);letter-spacing:var(--letter-spacing-wider);margin-bottom:var(--spacing-3);text-transform:uppercase}.react-doc-demo,
135
+ .vue-doc-demo-wrapper{min-height:2.5rem}.example-demo{align-items:center;display:flex;flex-wrap:wrap;gap:var(--spacing-3)}.toast{max-width:var(--spacing-96);pointer-events:none;position:fixed;width:100%;z-index:var(--z-toast)}.toast .alert{box-shadow:var(--shadow-lg);margin-bottom:var(--spacing-2);pointer-events:auto}
135
136
  .toast--bottom-right .alert,.toast--top-right .alert{animation:toast-slide-in-right var(--transition-slow) ease-out}
136
137
  .toast--bottom-left .alert,.toast--top-left .alert{animation:toast-slide-in-left var(--transition-slow) ease-out}
137
138
  .toast--bottom-center .alert,.toast--top-center .alert{animation:toast-slide-in-down var(--transition-slow) ease-out}@keyframes toast-slide-in-right{from{opacity:0;transform:translateX(100%)}to{opacity:1;transform:translateX(0)}}@keyframes toast-slide-in-left{from{opacity:0;transform:translateX(-100%)}to{opacity:1;transform:translateX(0)}}@keyframes toast-slide-in-down{from{opacity:0;transform:translateY(-100%)}to{opacity:1;transform:translateY(0)}}.reduced-motion .toast .alert{animation:none}.toast--top-right{right:var(--spacing-4)}.toast--top-left,.toast--top-right{top:var(--toast-top-offset,var(--spacing-4))}.toast--top-left{left:var(--spacing-4)}.toast--top-center{left:50%;top:var(--toast-top-offset,var(--spacing-4));transform:translateX(-50%)}.toast--bottom-right{bottom:var(--spacing-4);right:var(--spacing-4)}.toast--bottom-left{bottom:var(--spacing-4);left:var(--spacing-4)}.toast--bottom-center{bottom:var(--spacing-4);left:50%;transform:translateX(-50%)}.toast-container{display:flex;flex-direction:column;gap:var(--spacing-2);pointer-events:none;position:fixed;z-index:var(--z-toast)}.toast-container--top-right{align-items:flex-end;right:var(--spacing-4);top:var(--toast-top-offset,var(--spacing-4))}.toast-container--top-left{align-items:flex-start;left:var(--spacing-4);top:var(--toast-top-offset,var(--spacing-4))}.toast-container--top-center{align-items:center;left:50%;top:var(--toast-top-offset,var(--spacing-4));transform:translateX(-50%)}.toast-container--bottom-right{align-items:flex-end;bottom:var(--spacing-4);right:var(--spacing-4)}.toast-container--bottom-left{align-items:flex-start;bottom:var(--spacing-4);left:var(--spacing-4)}.toast-container--bottom-center{align-items:center;bottom:var(--spacing-4);left:50%;transform:translateX(-50%)}.toast-container .alert{box-shadow:var(--shadow-lg);max-width:24rem;pointer-events:auto;width:100%}
@@ -189,7 +190,7 @@ div.navbar__link{background:none;border:none;color:inherit;cursor:pointer;font:i
189
190
  .search__no-results-text{color:var(--text-dim);font-size:var(--font-size-sm);margin:0}.search__results-list{display:flex!important;flex-direction:column;gap:var(--spacing-1);min-height:0;padding-bottom:var(--spacing-4)}.search__results-list::after{content:"";display:block;flex-shrink:0;height:var(--spacing-8)}
190
191
  .search__results-list.is-hidden,.search__results-list[hidden]{display:none!important}.search__results-list:not([hidden], .is-hidden){display:flex!important;opacity:1!important;visibility:visible!important}.search__result-item{background-color:var(--background-alt)!important;border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);box-sizing:border-box;color:var(--text)!important;cursor:pointer;display:block!important;margin-bottom:0;min-height:auto!important;opacity:1!important;padding:var(--spacing-4) var(--spacing-5)!important;position:relative;text-decoration:none;transition:background-color var(--transition-fast),color var(--transition-fast),transform var(--transition-fast);visibility:visible!important;width:100%!important;z-index:calc(var(--z-base) + 3)}.search__result-item:hover{background-color:var(--background)!important;border-color:var(--accent);transform:translateX(var(--spacing-1))}
191
192
  .search__result-item:focus-visible,.search__result-item:hover{background-color:var(--background-alt);color:var(--accent);outline:none}.search__result-item[aria-selected="true"]{background-color:var(--background-alt);color:var(--accent);outline:var(--outline-width) solid var(--accent);outline-offset:calc(var(--outline-offset)*-1)}.search__result-item:focus-visible{box-shadow:inset 0 0 0 var(--outline-width) var(--accent);outline:var(--outline-width) solid var(--accent);outline-offset:calc(var(--outline-offset)*-1)}.search__result-category{color:var(--text-dim)!important;font-size:var(--font-size-xs);letter-spacing:var(--letter-spacing-wider);text-transform:uppercase}.search__result-category,.search__result-title{display:block!important;font-weight:var(--font-weight-semibold);margin-bottom:var(--spacing-2);visibility:visible!important}.search__result-title{color:var(--text)!important;font-size:var(--font-size-base);line-height:var(--line-height-snug)}.search__result-content{color:var(--text-dim)!important;display:-webkit-box;font-size:var(--font-size-sm);line-clamp:2;-webkit-line-clamp:2;line-height:var(--line-height-relaxed);-webkit-box-orient:vertical;margin-top:var(--spacing-1);overflow:hidden;visibility:visible!important}.navbar__search-wrapper .search{margin:0}@media (width <= 1024px){.navbar__search-wrapper .search__kbd{display:none}}.search__panel:focus-within{outline:none}@media (prefers-reduced-motion:reduce){.search__overlay,.search__panel,.search__result-item{transition:none}}.breadcrumb{width:100%}.breadcrumb__list{align-items:center;color:var(--text-dim);display:flex;flex-wrap:wrap;font-size:var(--font-size-sm);gap:var(--spacing-1) var(--spacing-2);list-style:none;margin:0;padding:0}.breadcrumb__item{align-items:center;display:inline-flex;gap:var(--spacing-2)}.breadcrumb__item--current .breadcrumb__current{color:var(--text);font-weight:var(--font-weight-medium)}.breadcrumb__link{color:var(--text-dim);text-decoration:none;transition:color var(--transition-base)}.breadcrumb__link:hover{color:var(--accent)}.breadcrumb__link:focus-visible{border-radius:var(--radius);outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.breadcrumb__current{color:var(--text-dim)}.breadcrumb__separator{align-items:center;color:var(--icon-dim);display:inline-flex;flex-shrink:0;opacity:var(--opacity-70);-webkit-user-select:none;-moz-user-select:none;user-select:none}.breadcrumb__separator-icon{color:inherit;transform:rotate(-90deg)}.breadcrumb--slash .breadcrumb__separator-icon{display:none}.breadcrumb--slash .breadcrumb__separator:not(:has(.breadcrumb__separator-icon)){margin:0 var(--spacing-0-125)}@media (width <= 639px){.breadcrumb__list{font-size:var(--font-size-xs);gap:var(--spacing-0-875) var(--spacing-1)}
192
- .breadcrumb__current,.breadcrumb__link{max-width:var(--spacing-24);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.breadcrumb__item--current .breadcrumb__current{max-width:none}}.pagination{width:100%}.pagination__list{align-items:center;display:flex;flex-wrap:wrap;gap:var(--spacing-1);justify-content:center;list-style:none;margin:0;padding:0}.pagination__item,.pagination__link{display:inline-flex}.pagination__link{align-items:center;background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);color:var(--text);font-family:var(--font-family);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);justify-content:center;min-height:var(--touch-target-min);min-width:var(--touch-target-min);padding:var(--spacing-2) var(--spacing-3);text-decoration:none;transition:background-color var(--transition-base),border-color var(--transition-base),color var(--transition-base)}.pagination__link:hover:not(.pagination__link--disabled, .pagination__link--current){background-color:var(--background);border-color:var(--accent);color:var(--accent)}.pagination__link:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.pagination__link--current{background-color:var(--background);border-color:var(--accent);color:var(--accent);cursor:default;font-weight:var(--font-weight-semibold)}.pagination__link--disabled{cursor:not-allowed;opacity:var(--opacity-60);pointer-events:none}.pagination__ellipsis{align-items:center;color:var(--text-dim);display:inline-flex;font-size:var(--font-size-sm);justify-content:center;min-height:var(--touch-target-min);min-width:var(--touch-target-min);padding:0 var(--spacing-2);-webkit-user-select:none;-moz-user-select:none;user-select:none}.accordion{background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);overflow:hidden;width:100%}.accordion__item{border-bottom:var(--border-width) solid var(--border)}.accordion__item:last-child{border-bottom:none}.accordion__heading{font-size:inherit;font-weight:inherit;margin:0}.accordion__trigger{align-items:center;background:none;border:none;color:var(--text);cursor:pointer;display:flex;font-family:var(--font-family);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);gap:var(--spacing-2);justify-content:space-between;min-height:var(--touch-target-min);padding:var(--spacing-3) var(--spacing-4);text-align:left;transition:background-color var(--transition-base),color var(--transition-base);width:100%}.accordion__trigger:hover{background-color:var(--background);color:var(--accent)}.accordion__trigger:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:calc(var(--outline-offset)*-1)}.accordion__trigger--expanded{background-color:var(--background);color:var(--accent)}.accordion__title{color:var(--text);flex:1;margin:0}.accordion__icon{color:var(--icon-dim);flex-shrink:0;transition:transform var(--transition-base)}.accordion__trigger--expanded .accordion__icon{color:var(--accent);transform:rotate(180deg)}.accordion__panel{max-height:0;overflow:hidden;transition:max-height var(--transition-slow) var(--ease-in-out-cubic)}.accordion__panel[hidden]{display:block;max-height:0}.accordion__panel--expanded{max-height:var(--accordion-panel-max-height,2000px)}.accordion__panel-inner{padding:0 var(--spacing-4) var(--spacing-4)}.accordion__panel-content{color:var(--text);font-size:var(--font-size-sm);line-height:var(--line-height-relaxed);padding-top:var(--spacing-2)}
193
+ .breadcrumb__current,.breadcrumb__link{max-width:var(--spacing-24);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.breadcrumb__item--current .breadcrumb__current{max-width:none}}.pagination{width:100%}.pagination__list{align-items:center;display:flex;flex-wrap:wrap;gap:var(--spacing-1);justify-content:center;list-style:none;margin:0;padding:0}.pagination__item,.pagination__link{display:inline-flex}.pagination__link{align-items:center;background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);color:var(--text);font-family:var(--font-family);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);justify-content:center;min-height:var(--touch-target-min);min-width:var(--touch-target-min);padding:var(--spacing-2) var(--spacing-3);text-decoration:none;transition:background-color var(--transition-base),border-color var(--transition-base),color var(--transition-base)}.pagination__link:hover:not(.pagination__link--disabled, .pagination__link--current){background-color:var(--background);border-color:var(--accent);color:var(--accent)}.pagination__link:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.pagination__link--current{background-color:var(--background);border-color:var(--accent);color:var(--accent);cursor:default;font-weight:var(--font-weight-semibold)}.pagination__link--disabled{cursor:not-allowed;opacity:var(--opacity-60);pointer-events:none}.pagination__ellipsis{align-items:center;color:var(--text-dim);display:inline-flex;font-size:var(--font-size-sm);justify-content:center;min-height:var(--touch-target-min);min-width:var(--touch-target-min);padding:0 var(--spacing-2);-webkit-user-select:none;-moz-user-select:none;user-select:none}.accordion{background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);overflow:hidden;width:100%}.accordion__item{border-bottom:var(--border-width) solid var(--border)}.accordion__item:last-child{border-bottom:none}.accordion__heading{font-size:inherit;font-weight:inherit;margin:0}.accordion__trigger{align-items:center;background:none;border:none;color:var(--text);cursor:pointer;display:flex;font-family:var(--font-family);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);gap:var(--spacing-2);justify-content:space-between;min-height:var(--touch-target-min);padding:var(--spacing-3) var(--spacing-4);text-align:left;transition:background-color var(--transition-base),color var(--transition-base);width:100%}.accordion__trigger:hover{background-color:var(--background);color:var(--text)}.accordion__trigger:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:calc(var(--outline-offset)*-1)}.accordion__trigger--expanded{background-color:var(--background);color:var(--text)}.accordion__title{color:var(--text);flex:1;margin:0}.accordion__icon{color:var(--icon-dim);flex-shrink:0;transition:transform var(--transition-base)}.accordion__trigger--expanded .accordion__icon{color:var(--text-dim);transform:rotate(180deg)}.accordion__panel{max-height:0;overflow:hidden;transition:max-height var(--transition-slow) var(--ease-in-out-cubic)}.accordion__panel[hidden]{display:block;max-height:0}.accordion__panel--expanded{max-height:var(--accordion-panel-max-height,2000px)}.accordion__panel-inner{padding:0 var(--spacing-4) var(--spacing-4)}.accordion__panel-content{color:var(--text);font-size:var(--font-size-sm);line-height:var(--line-height-relaxed);padding-top:var(--spacing-2)}
193
194
  .accordion__panel-content :global(ol:first-child),.accordion__panel-content :global(p:first-child),
194
195
  .accordion__panel-content :global(ul:first-child){margin-top:0}
195
196
  .accordion__panel-content :global(ol:last-child),.accordion__panel-content :global(p:last-child),
@@ -210,11 +211,13 @@ div.navbar__link{background:none;border:none;color:inherit;cursor:pointer;font:i
210
211
  .carousel__next:disabled,.carousel__prev:disabled{cursor:not-allowed;opacity:.5}
211
212
  .carousel__next svg,.carousel__prev svg{height:24px;width:24px}.carousel__indicators{display:flex;gap:var(--spacing-2);margin:0;padding:0}.carousel__indicator{background:var(--border);border:none;border-radius:var(--radius-full);cursor:pointer;height:var(--spacing-2);padding:0;transition:background var(--transition-fast);width:var(--spacing-2)}.carousel__indicator:hover{background:var(--text-dim)}.carousel__indicator[aria-selected="true"]{background:var(--accent)}.calendar{background:var(--background);border:1px solid var(--border);border-radius:var(--radius-md);display:inline-block;min-width:280px;padding:var(--spacing-4)}.calendar__header{align-items:center;display:flex;gap:var(--spacing-2);justify-content:space-between;margin-bottom:var(--spacing-3)}
212
213
  .calendar__next,.calendar__prev{align-items:center;background:transparent;border:none;border-radius:var(--radius-md);color:var(--text);cursor:pointer;display:inline-flex;height:36px;justify-content:center;padding:0;transition:background var(--transition-fast);width:36px}
213
- .calendar__next:hover,.calendar__prev:hover{background:var(--border)}.calendar__month{color:var(--text);font-size:var(--font-size-base);font-weight:var(--font-weight-semibold)}.calendar__grid{display:flex;flex-direction:column;gap:0}.calendar__row{display:grid;gap:0;grid-template-columns:repeat(7,1fr)}.calendar__weekday{color:var(--text-dim);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);padding:var(--spacing-1) var(--spacing-2);text-align:center}.calendar__day{align-items:center;background:transparent;border:none;border-radius:var(--radius-md);color:var(--text);cursor:pointer;display:inline-flex;font-size:var(--font-size-sm);height:36px;justify-content:center;margin:2px;min-width:36px;padding:0;transition:background var(--transition-fast)}.calendar__day:hover{background:var(--border)}.calendar__day--today{font-weight:var(--font-weight-semibold);outline:2px solid var(--accent);outline-offset:-2px}.calendar__day--selected{background:var(--accent);color:var(--background)}.calendar__day--selected:hover{background:var(--accent-hover);color:var(--background)}.calendar__day--other-month{color:var(--text-dim);opacity:.7}.home{padding:var(--content-padding-y) 0}.home__container{box-sizing:border-box;margin-left:auto;margin-right:auto;max-width:var(--container-default);min-width:0;padding-left:var(--content-padding-x);padding-right:var(--content-padding-x);width:100%}.home__announcement{align-items:center;background-color:oklch(from var(--accent-fg) l c h/8%);border:var(--border-width) solid oklch(from var(--accent-fg) l c h/14%);border-radius:var(--radius-lg);color:var(--text);display:flex;flex-wrap:wrap;font-size:var(--font-size-sm);gap:var(--spacing-2);justify-content:center;margin-bottom:var(--section-spacing);padding:var(--spacing-3) var(--spacing-4);text-decoration:none;transition:background-color var(--transition-base),border-color var(--transition-base)}.home__announcement:hover{background-color:oklch(from var(--accent-fg) l c h/12%);border-color:oklch(from var(--accent-fg) l c h/20%)}.home__announcement-label{color:var(--accent-fg);font-weight:var(--font-weight-semibold)}.home__announcement-text{color:var(--text-dim)}.home__announcement-arrow{color:var(--text-dim);transition:transform var(--transition-base)}.home__announcement:hover .home__announcement-arrow{transform:translateX(var(--spacing-0-5))}.home__hero{margin-bottom:var(--section-spacing-lg);padding:var(--spacing-14) 0 var(--spacing-16);text-align:center}.home__title{color:var(--text);font-size:var(--font-size-5xl);font-weight:var(--font-weight-extrabold);line-height:var(--line-height-tight);margin:0 0 var(--spacing-6) 0}.home__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)}.home__hero-ctas{display:flex;flex-wrap:wrap;gap:var(--spacing-4);justify-content:center;margin-top:var(--spacing-6)}.home__hero-cta{text-decoration:none}.home__examples-row{display:flex;flex-wrap:wrap;gap:var(--spacing-3);justify-content:center;margin-top:var(--spacing-10)}.home__example-pill{background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-full);color:var(--text);display:inline-block;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);padding:var(--spacing-2) var(--spacing-4);text-decoration:none;transition:background-color var(--transition-base),border-color var(--transition-base),color var(--transition-base)}.home__example-pill:hover{background-color:var(--background);border-color:var(--accent);color:var(--accent-fg)}.home__example-pill:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.home__showcase{margin-bottom:var(--section-spacing-lg)}.home__showcase-grid{display:grid;gap:var(--spacing-8);grid-template-columns:1fr;margin:0 auto;max-width:var(--spacing-150)}@media (width >= 768px){.home__showcase-grid{grid-template-columns:1fr 1fr;max-width:100%}}.home__showcase .home__example{margin-bottom:0}.home__showcase .home__example:last-child{grid-column:1/-1;justify-self:center;max-width:var(--spacing-80)}@media (width >= 768px){.home__showcase .home__example:last-child{grid-column:auto;max-width:100%}}.home__section-title{color:var(--text);font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);margin-bottom:var(--page-header-margin-bottom);text-align:center}.home__install{align-items:center;display:flex;flex-direction:column;justify-content:center;margin-bottom:var(--section-spacing-lg);max-width:100%;min-width:0}.home__install-grid{display:grid;gap:0;grid-template-columns:1fr;margin:0 auto;max-width:var(--spacing-150);min-width:0;width:100%}@media (width >= 768px){.home__install-grid{grid-template-columns:1fr auto 1fr;max-width:100%}}.home__install-block{align-items:stretch;background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;min-height:var(--spacing-24);min-width:0;overflow:hidden;padding:var(--spacing-6);width:100%}.home__install-or{align-items:center;color:var(--text-dim);display:flex;font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);gap:var(--spacing-4);justify-content:center;letter-spacing:var(--letter-spacing-wider);padding:var(--spacing-4) 0}
214
+ .calendar__next:hover,.calendar__prev:hover{background:var(--border)}.calendar__month{color:var(--text);font-size:var(--font-size-base);font-weight:var(--font-weight-semibold)}.calendar__grid{display:flex;flex-direction:column;gap:0}.calendar__row{display:grid;gap:0;grid-template-columns:repeat(7,1fr)}.calendar__weekday{color:var(--text-dim);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);padding:var(--spacing-1) var(--spacing-2);text-align:center}.calendar__day{align-items:center;background:transparent;border:none;border-radius:var(--radius-md);color:var(--text);cursor:pointer;display:inline-flex;font-size:var(--font-size-sm);height:36px;justify-content:center;margin:2px;min-width:36px;padding:0;transition:background var(--transition-fast)}.calendar__day:hover{background:var(--border)}.calendar__day--today{font-weight:var(--font-weight-semibold);outline:2px solid var(--accent);outline-offset:-2px}.calendar__day--selected{background:var(--accent);color:var(--background)}.calendar__day--selected:hover{background:var(--accent-hover);color:var(--background)}.calendar__day--other-month{color:var(--text-dim);opacity:.7}.calendar__day--in-range{background:oklch(from var(--accent) l c h/20%);color:var(--text)}.calendar__day--in-range:hover{background:oklch(from var(--accent) l c h/35%)}
215
+ .calendar__day--range-end,.calendar__day--range-start{background:var(--accent);color:var(--accent-text)}
216
+ .calendar__day--range-end:hover,.calendar__day--range-start:hover{background:var(--accent-hover);color:var(--accent-text-on-hover)}.home{padding:var(--content-padding-y) 0}.home__container{box-sizing:border-box;margin-left:auto;margin-right:auto;max-width:var(--container-default);min-width:0;padding-left:var(--content-padding-x);padding-right:var(--content-padding-x);width:100%}.home__announcement{align-items:center;background-color:oklch(from var(--accent-fg) l c h/8%);border:var(--border-width) solid oklch(from var(--accent-fg) l c h/14%);border-radius:var(--radius-lg);color:var(--text);display:flex;flex-wrap:wrap;font-size:var(--font-size-sm);gap:var(--spacing-2);justify-content:center;margin-bottom:var(--section-spacing);padding:var(--spacing-3) var(--spacing-4);text-decoration:none;transition:background-color var(--transition-base),border-color var(--transition-base)}.home__announcement:hover{background-color:oklch(from var(--accent-fg) l c h/12%);border-color:oklch(from var(--accent-fg) l c h/20%)}.home__announcement-label{color:var(--accent-fg);font-weight:var(--font-weight-semibold)}.home__announcement-text{color:var(--text-dim)}.home__announcement-arrow{color:var(--text-dim);transition:transform var(--transition-base)}.home__announcement:hover .home__announcement-arrow{transform:translateX(var(--spacing-0-5))}.home__hero{margin-bottom:var(--section-spacing-lg);padding:var(--spacing-14) 0 var(--spacing-16);text-align:center}.home__title{color:var(--text);font-size:var(--font-size-5xl);font-weight:var(--font-weight-extrabold);line-height:var(--line-height-tight);margin:0 0 var(--spacing-6) 0}.home__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)}.home__hero-ctas{display:flex;flex-wrap:wrap;gap:var(--spacing-4);justify-content:center;margin-top:var(--spacing-6)}.home__hero-cta{text-decoration:none}.home__examples-row{display:flex;flex-wrap:wrap;gap:var(--spacing-3);justify-content:center;margin-top:var(--spacing-10)}.home__example-pill{background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-full);color:var(--text);display:inline-block;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);padding:var(--spacing-2) var(--spacing-4);text-decoration:none;transition:background-color var(--transition-base),border-color var(--transition-base),color var(--transition-base)}.home__example-pill:hover{background-color:var(--background);border-color:var(--accent);color:var(--accent-fg)}.home__example-pill:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.home__showcase{margin-bottom:var(--section-spacing-lg)}.home__showcase-grid{display:grid;gap:var(--spacing-8);grid-template-columns:1fr;margin:0 auto;max-width:var(--spacing-150)}@media (width >= 768px){.home__showcase-grid{grid-template-columns:1fr 1fr;max-width:100%}}.home__showcase .home__example{margin-bottom:0}.home__showcase .home__example:last-child{grid-column:1/-1;justify-self:center;max-width:var(--spacing-80)}@media (width >= 768px){.home__showcase .home__example:last-child{grid-column:auto;max-width:100%}}.home__section-title{color:var(--text);font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);margin-bottom:var(--page-header-margin-bottom);text-align:center}.home__install{align-items:center;display:flex;flex-direction:column;justify-content:center;margin-bottom:var(--section-spacing-lg);max-width:100%;min-width:0}.home__install-grid{display:grid;gap:0;grid-template-columns:1fr;margin:0 auto;max-width:var(--spacing-150);min-width:0;width:100%}@media (width >= 768px){.home__install-grid{grid-template-columns:1fr auto 1fr;max-width:100%}}.home__install-block{align-items:stretch;background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;min-height:var(--spacing-24);min-width:0;overflow:hidden;padding:var(--spacing-6);width:100%}.home__install-or{align-items:center;color:var(--text-dim);display:flex;font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);gap:var(--spacing-4);justify-content:center;letter-spacing:var(--letter-spacing-wider);padding:var(--spacing-4) 0}
214
217
  .home__install-or::after,.home__install-or::before{border-top:var(--border-width) solid var(--border);content:"";flex:1;height:0}@media (width >= 768px){.home__install-or{flex-direction:column;gap:var(--spacing-4);padding:0 var(--spacing-4)}
215
218
  .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,
216
219
  .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,
217
- .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}
220
+ .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,.home__button-sizes{display:flex;flex-wrap:wrap;gap:var(--spacing-3)}.home__button-sizes{align-items:center;color:var(--text-dim);font-size:var(--font-size-sm);margin:var(--spacing-4) 0 0}.home__button-sizes-label{margin-right:var(--spacing-1)}.home__button-sizes .btn{margin:0}.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}
218
221
  .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;max-width:none}.theming-page .theming-page__hero-switcher{display:none!important}.theming-page .theming-page__mobile-dropdown-inner.dropdown{display:block;width:100%}.theming-page .theming-page__mobile-dropdown-inner .dropdown__trigger{justify-content:space-between;width:100%}.theming-page .theming-page__mobile-dropdown-inner .dropdown__menu{box-sizing:border-box;min-width:0;width:100%}.theming-page .theming-page__mobile-dropdown .dropdown__item-icon{color:var(--icon)}
219
222
  .theming-page .theming-page__mobile-dropdown .dropdown__item:focus-visible:not(.dropdown__item--disabled) .dropdown__item-icon,.theming-page .theming-page__mobile-dropdown .dropdown__item:hover:not(.dropdown__item--disabled) .dropdown__item-icon{color:var(--accent)}.theming-page .theming-page__mobile-dropdown .dropdown__item--active,
220
223
  .theming-page .theming-page__mobile-dropdown .dropdown__item--active:focus-visible,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rizzo-css",
3
- "version": "0.0.68",
3
+ "version": "0.0.70",
4
4
  "engines": {
5
5
  "node": ">=18"
6
6
  },
@@ -1,5 +1,5 @@
1
1
  ---
2
- import ChevronDown from './icons/ChevronDown.astro';
2
+ import ChevronDown from '../icons/ChevronDown.astro';
3
3
 
4
4
  interface AccordionItem {
5
5
  id: string;
@@ -1,5 +1,5 @@
1
1
  ---
2
- import Close from './icons/Close.astro';
2
+ import Close from '../icons/Close.astro';
3
3
 
4
4
  interface Props {
5
5
  variant?: 'success' | 'error' | 'warning' | 'info';
@@ -3,7 +3,7 @@
3
3
  * Alert Dialog: modal for confirm/cancel actions (destructive or important).
4
4
  * Uses role="alertdialog". Matches shadcn-svelte Alert Dialog.
5
5
  */
6
- import Close from './icons/Close.astro';
6
+ import Close from '../icons/Close.astro';
7
7
 
8
8
  interface Props {
9
9
  id?: string;
@@ -1,5 +1,5 @@
1
1
  ---
2
- import ChevronUp from './icons/ChevronUp.astro';
2
+ import ChevronUp from '../icons/ChevronUp.astro';
3
3
 
4
4
  interface Props {
5
5
  /** Scroll threshold in pixels before the button appears (default: 400). */
@@ -1,5 +1,5 @@
1
1
  ---
2
- import ChevronDown from './icons/ChevronDown.astro';
2
+ import ChevronDown from '../icons/ChevronDown.astro';
3
3
 
4
4
  interface BreadcrumbItem {
5
5
  label: string;
@@ -3,7 +3,7 @@
3
3
  * Single expand/collapse section (one trigger, one panel). Use Accordion for multiple sections.
4
4
  * Matches shadcn-svelte Collapsible pattern.
5
5
  */
6
- import ChevronDown from './icons/ChevronDown.astro';
6
+ import ChevronDown from '../icons/ChevronDown.astro';
7
7
 
8
8
  interface Props {
9
9
  id?: string;
@@ -1,6 +1,6 @@
1
1
  ---
2
- import Copy from './icons/Copy.astro';
3
- import Check from './icons/Check.astro';
2
+ import Copy from '../icons/Copy.astro';
3
+ import Check from '../icons/Check.astro';
4
4
 
5
5
  interface Props {
6
6
  value: string;
@@ -13,7 +13,8 @@ interface Props {
13
13
  const { currentPath, framework, omitId } = Astro.props;
14
14
  const pathPrefix = framework.pathPrefix; // /docs or /docs/svelte or /docs/vanilla
15
15
 
16
- function fullHref(link: { href: string; frameworkOnly?: boolean }) {
16
+ function fullHref(link: { href: string; frameworkOnly?: boolean; absolute?: boolean }) {
17
+ if (link.absolute && link.href.startsWith('/')) return link.href;
17
18
  const base = link.frameworkOnly ? pathPrefix : '/docs';
18
19
  return `${base}/${link.href}`;
19
20
  }
@@ -1,5 +1,5 @@
1
1
  ---
2
- import ChevronDown from './icons/ChevronDown.astro';
2
+ import ChevronDown from '../icons/ChevronDown.astro';
3
3
  import ThemeIcon from './ThemeIcon.astro';
4
4
 
5
5
  interface MenuItem {
@@ -1,6 +1,6 @@
1
1
  ---
2
- import ChevronDown from './icons/ChevronDown.astro';
3
- import { FONT_PAIRS, FONT_PAIR_DEFAULT } from '../config/fonts';
2
+ import ChevronDown from '../icons/ChevronDown.astro';
3
+ import { FONT_PAIRS, FONT_PAIR_DEFAULT } from '../../config/fonts';
4
4
 
5
5
  interface Props {
6
6
  /** Optional prefix for trigger/menu IDs to avoid duplicates when multiple FontSwitchers exist. */
@@ -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.68" with link to CHANGELOG */
16
+ /** Optional version string (e.g. from package.json); shown as "v0.0.70" with link to CHANGELOG */
17
17
  version?: string;
18
18
  }
19
19
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- import Close from './icons/Close.astro';
2
+ import Close from '../icons/Close.astro';
3
3
 
4
4
  interface Props {
5
5
  id?: string;
@@ -0,0 +1,215 @@
1
+ ---
2
+ interface Props {
3
+ id?: string;
4
+ /** Initial month as YYYY-MM (default: current month) */
5
+ initialMonth?: string;
6
+ /** Initial range start as YYYY-MM-DD (optional) */
7
+ rangeStart?: string;
8
+ /** Initial range end as YYYY-MM-DD (optional) */
9
+ rangeEnd?: string;
10
+ /** Accessible label (default: "Choose date range") */
11
+ label?: string;
12
+ class?: string;
13
+ }
14
+
15
+ const {
16
+ id,
17
+ initialMonth,
18
+ rangeStart,
19
+ rangeEnd,
20
+ label = 'Choose date range',
21
+ class: className = '',
22
+ } = Astro.props;
23
+
24
+ const calendarId = id || `range-calendar-${Math.random().toString(36).substr(2, 9)}`;
25
+ const classes = `calendar calendar--range ${className}`.trim();
26
+ const WEEKDAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
27
+ ---
28
+
29
+ <div
30
+ class={classes}
31
+ id={calendarId}
32
+ role="group"
33
+ aria-label={label}
34
+ data-range-calendar
35
+ data-initial-month={initialMonth ?? undefined}
36
+ data-range-start={rangeStart ?? undefined}
37
+ data-range-end={rangeEnd ?? undefined}
38
+ >
39
+ <div class="calendar__header">
40
+ <button type="button" class="calendar__prev" aria-label="Previous month" data-range-calendar-prev>
41
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m15 18-6-6 6-6"/></svg>
42
+ </button>
43
+ <div class="calendar__month" aria-live="polite" data-range-calendar-month-label>—</div>
44
+ <button type="button" class="calendar__next" aria-label="Next month" data-range-calendar-next>
45
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m9 18 6-6-6-6"/></svg>
46
+ </button>
47
+ </div>
48
+ <div class="calendar__grid" role="grid" aria-label="Month" data-range-calendar-grid>
49
+ <div class="calendar__row" role="row">
50
+ {WEEKDAYS.map((day) => (
51
+ <div class="calendar__weekday" role="columnheader" aria-label={day}>{day}</div>
52
+ ))}
53
+ </div>
54
+ <div class="calendar__body" data-range-calendar-body role="presentation">
55
+ <!-- Rows filled by script -->
56
+ </div>
57
+ </div>
58
+ </div>
59
+
60
+ <script define:vars={{ calendarId }}>
61
+ (function initRangeCalendar() {
62
+ const MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
63
+ const WEEKDAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
64
+
65
+ function parseYYYYMM(str) {
66
+ if (!str) return null;
67
+ const [y, m] = str.split('-').map(Number);
68
+ if (!y || !m || m < 1 || m > 12) return null;
69
+ return { year: y, month: m - 1 };
70
+ }
71
+
72
+ function toYYYYMM(year, month) {
73
+ return year + '-' + String(month + 1).padStart(2, '0');
74
+ }
75
+
76
+ function toYYYYMMDD(year, month, day) {
77
+ return year + '-' + String(month + 1).padStart(2, '0') + '-' + String(day).padStart(2, '0');
78
+ }
79
+
80
+ function dateStrToMs(s) {
81
+ const d = new Date(s);
82
+ return isNaN(d.getTime()) ? null : d.getTime();
83
+ }
84
+
85
+ function getMonthGrid(year, month) {
86
+ const first = new Date(year, month, 1);
87
+ const last = new Date(year, month + 1, 0);
88
+ const startDay = first.getDay();
89
+ const daysInMonth = last.getDate();
90
+ const weeks = [];
91
+ let week = [];
92
+ const pad = startDay;
93
+ const prevMonth = month === 0 ? 11 : month - 1;
94
+ const prevYear = month === 0 ? year - 1 : year;
95
+ const prevLast = new Date(prevYear, prevMonth + 1, 0).getDate();
96
+ for (let i = 0; i < pad; i++) {
97
+ week.push({ day: prevLast - pad + i + 1, year: prevYear, month: prevMonth, currentMonth: false });
98
+ }
99
+ for (let d = 1; d <= daysInMonth; d++) {
100
+ week.push({ day: d, year, month, currentMonth: true });
101
+ if (week.length === 7) { weeks.push(week); week = []; }
102
+ }
103
+ const nextMonth = month === 11 ? 0 : month + 1;
104
+ const nextYear = month === 11 ? year + 1 : year;
105
+ for (let i = 1; week.length < 7; i++) {
106
+ week.push({ day: i, year: nextYear, month: nextMonth, currentMonth: false });
107
+ }
108
+ if (week.length) weeks.push(week);
109
+ return weeks;
110
+ }
111
+
112
+ function render(root) {
113
+ const body = root.querySelector('[data-range-calendar-body]');
114
+ const labelEl = root.querySelector('[data-range-calendar-month-label]');
115
+ const gridEl = root.querySelector('[data-range-calendar-grid]');
116
+ if (!body || !labelEl || !gridEl) return;
117
+
118
+ let state = root._rangeCalendarState;
119
+ if (!state) {
120
+ const now = new Date();
121
+ state = { year: now.getFullYear(), month: now.getMonth(), start: null, end: null };
122
+ const initial = parseYYYYMM(root.dataset.initialMonth);
123
+ if (initial) { state.year = initial.year; state.month = initial.month; }
124
+ if (root.dataset.rangeStart) state.start = root.dataset.rangeStart;
125
+ if (root.dataset.rangeEnd) state.end = root.dataset.rangeEnd;
126
+ root._rangeCalendarState = state;
127
+ }
128
+
129
+ const today = new Date();
130
+ const todayStr = toYYYYMMDD(today.getFullYear(), today.getMonth(), today.getDate());
131
+ const startMs = state.start ? dateStrToMs(state.start) : null;
132
+ const endMs = state.end ? dateStrToMs(state.end) : null;
133
+ const [minMs, maxMs] = startMs != null && endMs != null
134
+ ? (startMs <= endMs ? [startMs, endMs] : [endMs, startMs])
135
+ : [null, null];
136
+
137
+ labelEl.textContent = MONTHS[state.month] + ' ' + state.year;
138
+ gridEl.setAttribute('aria-label', MONTHS[state.month] + ' ' + state.year);
139
+
140
+ const weeks = getMonthGrid(state.year, state.month);
141
+ body.innerHTML = '';
142
+ weeks.forEach(function (week) {
143
+ const row = document.createElement('div');
144
+ row.className = 'calendar__row';
145
+ row.setAttribute('role', 'row');
146
+ week.forEach(function (cell) {
147
+ const dateStr = toYYYYMMDD(cell.year, cell.month, cell.day);
148
+ const ms = dateStrToMs(dateStr);
149
+ const isToday = dateStr === todayStr;
150
+ const isStart = state.start === dateStr;
151
+ const isEnd = state.end === dateStr;
152
+ const inRange = minMs != null && maxMs != null && ms != null && ms >= minMs && ms <= maxMs && !isStart && !isEnd;
153
+
154
+ const cellDiv = document.createElement('div');
155
+ cellDiv.setAttribute('role', 'gridcell');
156
+ const btn = document.createElement('button');
157
+ btn.type = 'button';
158
+ btn.className = 'calendar__day';
159
+ if (!cell.currentMonth) btn.classList.add('calendar__day--other-month');
160
+ if (isToday) btn.classList.add('calendar__day--today');
161
+ if (isStart) btn.classList.add('calendar__day--range-start');
162
+ if (isEnd) btn.classList.add('calendar__day--range-end');
163
+ if (inRange) btn.classList.add('calendar__day--in-range');
164
+ btn.setAttribute('aria-label', 'Choose ' + MONTHS[cell.month] + ' ' + cell.day + ', ' + cell.year);
165
+ btn.textContent = String(cell.day);
166
+ btn.dataset.date = dateStr;
167
+ btn.addEventListener('click', function () {
168
+ if (state.start === null || (state.start !== null && state.end !== null)) {
169
+ state.start = dateStr;
170
+ state.end = null;
171
+ } else {
172
+ state.end = dateStr;
173
+ const s = dateStrToMs(state.start);
174
+ const e = dateStrToMs(state.end);
175
+ if (s != null && e != null && e < s) {
176
+ var t = state.start;
177
+ state.start = state.end;
178
+ state.end = t;
179
+ }
180
+ root.dispatchEvent(new CustomEvent('range-calendar-select', {
181
+ detail: { start: state.start, end: state.end },
182
+ bubbles: true
183
+ }));
184
+ }
185
+ render(root);
186
+ });
187
+ cellDiv.appendChild(btn);
188
+ row.appendChild(cellDiv);
189
+ });
190
+ body.appendChild(row);
191
+ });
192
+ }
193
+
194
+ function init() {
195
+ const root = document.getElementById(calendarId);
196
+ if (!root) return;
197
+ root.querySelector('[data-range-calendar-prev]')?.addEventListener('click', function () {
198
+ const s = root._rangeCalendarState || { year: new Date().getFullYear(), month: new Date().getMonth() };
199
+ if (s.month === 0) { s.month = 11; s.year--; } else s.month--;
200
+ root._rangeCalendarState = s;
201
+ render(root);
202
+ });
203
+ root.querySelector('[data-range-calendar-next]')?.addEventListener('click', function () {
204
+ const s = root._rangeCalendarState || { year: new Date().getFullYear(), month: new Date().getMonth() };
205
+ if (s.month === 11) { s.month = 0; s.year++; } else s.month++;
206
+ root._rangeCalendarState = s;
207
+ render(root);
208
+ });
209
+ render(root);
210
+ }
211
+
212
+ if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init);
213
+ else init();
214
+ })();
215
+ </script>
@@ -2,7 +2,7 @@
2
2
  import ThemeSwitcher from './ThemeSwitcher.astro';
3
3
  import FontSwitcher from './FontSwitcher.astro';
4
4
  import SoundEffects from './SoundEffects.astro';
5
- import Close from './icons/Close.astro';
5
+ import Close from '../icons/Close.astro';
6
6
 
7
7
  interface Props {
8
8
  open?: boolean;
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * Slide-out panel (drawer) from edge. Matches shadcn-svelte Sheet / Drawer.
4
4
  */
5
- import Close from './icons/Close.astro';
5
+ import Close from '../icons/Close.astro';
6
6
 
7
7
  interface Props {
8
8
  id?: string;
@@ -1,6 +1,6 @@
1
1
  ---
2
- import Sort from './icons/Sort.astro';
3
- import Filter from './icons/Filter.astro';
2
+ import Sort from '../icons/Sort.astro';
3
+ import Filter from '../icons/Filter.astro';
4
4
 
5
5
  export interface TableColumn {
6
6
  key: string;