From 1c1a4131141f7db0a8c007a65eddfce6eee80c42 Mon Sep 17 00:00:00 2001 From: "David M. Johnson" <875324+dmjio@users.noreply.github.com> Date: Thu, 21 Aug 2025 08:56:35 -0500 Subject: [PATCH 01/11] Update sidebar.njk alphabetize --- docs/src/_includes/partials/sidebar.njk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/_includes/partials/sidebar.njk b/docs/src/_includes/partials/sidebar.njk index 8b857e8..3d69bd9 100644 --- a/docs/src/_includes/partials/sidebar.njk +++ b/docs/src/_includes/partials/sidebar.njk @@ -98,8 +98,8 @@ { label: "Popover", url: "/components/popover", attrs: link_attrs }, { label: "Radio Group", url: "/components/radio-group", attrs: link_attrs }, { label: "Select", url: "/components/select", attrs: link_attrs }, - { label: "Skeleton", url: "/components/skeleton", attrs: link_attrs }, { label: "Sidebar", url: "/components/sidebar", attrs: link_attrs }, + { label: "Skeleton", url: "/components/skeleton", attrs: link_attrs }, { label: "Slider", url: "/components/slider", attrs: link_attrs }, { label: "Switch", url: "/components/switch", attrs: link_attrs }, { label: "Table", url: "/components/table", attrs: link_attrs }, From 045d13cd492486d30ce99a782165d53e9558cdf2 Mon Sep 17 00:00:00 2001 From: Ronan Berder Date: Thu, 30 Oct 2025 10:03:34 +0700 Subject: [PATCH 02/11] Added kbd and command --- AGENTS.md | 69 ++++++ docs/src/_includes/layouts/base.njk | 1 + docs/src/_includes/partials/sidebar.njk | 2 + docs/src/assets/styles.css | 270 ++++++++++++++++++++++ docs/src/components/command.njk | 295 ++++++++++++++++++++++++ docs/src/components/kbd.njk | 68 ++++++ src/css/basecoat.css | 89 +++++++ src/jinja/command.html.jinja | 121 ++++++++++ src/js/command.js | 172 ++++++++++++++ src/nunjucks/command.njk | 121 ++++++++++ 10 files changed, 1208 insertions(+) create mode 100644 AGENTS.md create mode 100644 docs/src/components/command.njk create mode 100644 docs/src/components/kbd.njk create mode 100644 src/jinja/command.html.jinja create mode 100644 src/js/command.js create mode 100644 src/nunjucks/command.njk diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..754cfdc --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,69 @@ +# Basecoat – Agent Guide + +## What is Basecoat? + +Basecoat is a vanilla JavaScript/HTML/CSS port of shadcn/ui components. It reuses shadcn/ui's design patterns and Tailwind CSS classes while maintaining semantic HTML, native browser elements, and full accessibility (ARIA attributes, proper hierarchies, keyboard navigation). The goal is to provide shadcn-quality components without React dependencies. + +## Quickstart + +- Install deps: `npm i` +- Dev docs server: `npm run docs:dev` +- Build CSS/JS: `npm run build` +- Build static docs: `npm run docs:build` + +## What to edit (and what not) + +- Edit sources only: + - `src/css/basecoat.css` – All component CSS classes (Tailwind + custom) + - `src/js/*.js` – Individual component JS files (kebab-case, ESM) + `basecoat.js` (component registry) + - `src/nunjucks/*.njk` and `src/jinja/*.html.jinja` – Component template macros + - `docs/src/components/*.njk` – Component documentation pages with examples + - `docs/src/_includes/` – Layout templates, partials, and navigation +- Do not edit build outputs: + - `packages/*/dist` – built CSS/JS bundles + - `_site/` – generated docs site + +## Project layout + +- Workspaces: root npm workspace with publishable packages in `packages/*`. +- Packages: + - `packages/css` – built CSS and JS bundles under `dist/`. + - `packages/cli` – CLI; distributed assets live under `dist/`. +- Docs site: `docs/src` (Eleventy); output goes to `_site/`. + +## Conventions + +- ESM everywhere (`import`/`export`). +- Prettier defaults (2 spaces; single quotes per file preference). +- Filenames for assets: kebab-case (e.g., `dropdown-menu.js`, `basecoat.cdn.css`). +- JS naming: `camelCase` for vars/functions; `PascalCase` for DOM classes and exported component names when applicable. + +## Common tasks + +- Update a component's CSS/JS: Edit `src/css/basecoat.css` and/or `src/js/*.js`. +- Update a component template: Edit `src/nunjucks/*.njk` and/or `src/jinja/*.html.jinja`. +- Add a new component: Create JS, CSS, templates, and docs page under `docs/src/components/*.njk`. +- Update navigation: Edit files in `docs/src/_includes/partials/`. + +## Testing + +No automated testing configured. User validates manually via the docs site (`npm run docs:dev`). + +## Commits and PRs + +- Commits: concise, imperative (≤72 chars), optional scope. + - Example: `select: prevent change event on init`. +- PRs: include description, linked issues (e.g., `Closes #123`), and before/after screenshots or code snippets for visual/behavioral changes. +- Keep PRs focused; update docs examples when components or APIs change. + +## Environment and tooling + +- Node 18+ recommended. +- Eleventy config: `.eleventy.js`. +- Tailwind via `@tailwindcss/cli` v4. +- Build uses Tailwind CLI and `terser`; both are provided via devDependencies. + +## Package references + +- `packages/css` usage and details: see `packages/css/README.md`. +- `packages/cli` usage and details: see `packages/cli/README.md`. diff --git a/docs/src/_includes/layouts/base.njk b/docs/src/_includes/layouts/base.njk index 444b061..fac8ac7 100644 --- a/docs/src/_includes/layouts/base.njk +++ b/docs/src/_includes/layouts/base.njk @@ -70,6 +70,7 @@ {# JS #} + diff --git a/docs/src/_includes/partials/sidebar.njk b/docs/src/_includes/partials/sidebar.njk index 3d69bd9..14b11c8 100644 --- a/docs/src/_includes/partials/sidebar.njk +++ b/docs/src/_includes/partials/sidebar.njk @@ -88,6 +88,8 @@ { label: "Button", url: "/components/button", attrs: link_attrs }, { label: "Card", url: "/components/card", attrs: link_attrs }, { label: "Checkbox", url: "/components/checkbox", attrs: link_attrs }, + { label: "Kbd", url: "/components/kbd", attrs: link_attrs }, + { label: "Command", url: "/components/command", attrs: link_attrs }, { label: "Combobox", url: "/components/combobox", attrs: link_attrs }, { label: "Dialog", url: "/components/dialog", attrs: link_attrs }, { label: "Dropdown Menu", url: "/components/dropdown-menu", attrs: link_attrs }, diff --git a/docs/src/assets/styles.css b/docs/src/assets/styles.css index ec436dc..e0050c1 100644 --- a/docs/src/assets/styles.css +++ b/docs/src/assets/styles.css @@ -251,6 +251,9 @@ .invisible { visibility: hidden; } + .visible { + visibility: visible; + } .sr-only { position: absolute; width: 1px; @@ -268,6 +271,9 @@ .relative { position: relative; } + .static { + position: static; + } .sticky { position: sticky; } @@ -686,6 +692,9 @@ .gap-x-2 { column-gap: calc(var(--spacing) * 2); } + .gap-x-4 { + column-gap: calc(var(--spacing) * 4); + } .gap-x-10 { column-gap: calc(var(--spacing) * 10); } @@ -826,6 +835,9 @@ .px-1 { padding-inline: calc(var(--spacing) * 1); } + .px-1\.5 { + padding-inline: calc(var(--spacing) * 1.5); + } .px-2 { padding-inline: calc(var(--spacing) * 2); } @@ -841,6 +853,9 @@ .px-\[0\.3rem\] { padding-inline: 0.3rem; } + .py-0\.5 { + padding-block: calc(var(--spacing) * 0.5); + } .py-1\.5 { padding-block: calc(var(--spacing) * 1.5); } @@ -859,6 +874,9 @@ .pt-2 { padding-top: calc(var(--spacing) * 2); } + .pr-2 { + padding-right: calc(var(--spacing) * 2); + } .pb-4 { padding-bottom: calc(var(--spacing) * 4); } @@ -2352,6 +2370,231 @@ display: none; } } +@layer components { + .command { + inset-block: calc(var(--spacing) * 0); + opacity: 0%; + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + transition-behavior: allow-discrete; + &:is([open],:popover-open) { + opacity: 100%; + &::backdrop { + opacity: 100%; + } + > article { + --tw-scale-x: 100%; + --tw-scale-y: 100%; + --tw-scale-z: 100%; + scale: var(--tw-scale-x) var(--tw-scale-y); + } + @starting-style { + opacity: 0%; + &::backdrop { + opacity: 0%; + } + > article { + --tw-scale-x: 95%; + --tw-scale-y: 95%; + --tw-scale-z: 95%; + scale: var(--tw-scale-x) var(--tw-scale-y); + } + } + } + &::backdrop { + background-color: color-mix(in srgb, #000 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-black) 50%, transparent); + } + opacity: 0%; + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + transition-behavior: allow-discrete; + } + > article { + position: fixed; + top: 50%; + left: 50%; + z-index: 50; + display: flex; + max-height: min(640px, calc(100% - 2rem)); + width: 100%; + max-width: calc(100% - 2rem); + --tw-translate-x: calc(calc(1/2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + --tw-translate-y: calc(calc(1/2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + flex-direction: column; + overflow: hidden; + border-radius: var(--radius-lg); + border-style: var(--tw-border-style); + border-width: 1px; + background-color: var(--color-background); + --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + @media (width >= 40rem) { + max-width: var(--container-lg); + } + --tw-scale-x: 95%; + --tw-scale-y: 95%; + --tw-scale-z: 95%; + scale: var(--tw-scale-x) var(--tw-scale-y); + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + > header { + display: flex; + align-items: center; + gap: calc(var(--spacing) * 2); + border-bottom-style: var(--tw-border-style); + border-bottom-width: 1px; + padding-inline: calc(var(--spacing) * 3); + svg { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + flex-shrink: 0; + opacity: 50%; + } + input { + display: flex; + height: calc(var(--spacing) * 10); + width: 100%; + border-radius: var(--radius-md); + background-color: transparent; + padding-block: calc(var(--spacing) * 3); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + --tw-outline-style: none; + outline-style: none; + @media (forced-colors: active) { + outline: 2px solid transparent; + outline-offset: 2px; + } + &::placeholder { + color: var(--color-muted-foreground); + } + &:disabled { + cursor: not-allowed; + } + &:disabled { + opacity: 50%; + } + } + } + [role='listbox'] { + max-height: 300px; + overflow-x: hidden; + overflow-y: auto; + padding: calc(var(--spacing) * 1); + [role='option'] { + position: relative; + display: flex; + width: 100%; + cursor: default; + align-items: center; + gap: calc(var(--spacing) * 2); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + border-radius: var(--radius-sm); + padding-inline: calc(var(--spacing) * 2); + padding-block: calc(var(--spacing) * 1.5); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + --tw-outline-style: none; + outline-style: none; + @media (forced-colors: active) { + outline: 2px solid transparent; + outline-offset: 2px; + } + -webkit-user-select: none; + user-select: none; + &:disabled { + pointer-events: none; + } + &:disabled { + opacity: 50%; + } + &[aria-disabled="true"] { + pointer-events: none; + } + &[aria-disabled="true"] { + opacity: 50%; + } + &[aria-hidden="true"] { + display: none; + } + & svg { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + } + & svg { + flex-shrink: 0; + } + & svg { + color: var(--color-muted-foreground); + } + &.active { + background-color: var(--color-accent); + color: var(--color-accent-foreground); + } + } + [role='heading'] { + display: flex; + padding-inline: calc(var(--spacing) * 2); + padding-block: calc(var(--spacing) * 1.5); + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + color: var(--color-muted-foreground); + } + [role='group']:not(:has([role='option']:not([aria-hidden='true']))) { + display: none; + } + [role='separator'] { + margin-inline: calc(var(--spacing) * -1); + border-color: var(--color-border); + } + &:not(:has([data-value]:not([aria-hidden='true'])))::before { + margin: calc(var(--spacing) * -1); + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + padding-inline: calc(var(--spacing) * 3); + padding-block: calc(var(--spacing) * 6); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + } + &[data-empty]:not(:has([data-value]:not([aria-hidden='true'])))::before { + --tw-content: attr(data-empty); + content: var(--tw-content); + } + &:not([data-empty]):not(:has([data-value]:not([aria-hidden='true'])))::before { + --tw-content: 'No results found'; + content: var(--tw-content); + } + } + } + &:not([data-command-initialized]) [role='option'] { + &:hover { + @media (hover: hover) { + background-color: var(--color-accent); + } + } + &:hover { + @media (hover: hover) { + color: var(--color-accent-foreground); + } + } + } + } +} @layer components { .dialog { inset-block: calc(var(--spacing) * 0); @@ -2736,6 +2979,33 @@ } } } +@layer components { + kbd { + pointer-events: none; + display: inline-flex; + height: calc(var(--spacing) * 5); + width: fit-content; + min-width: calc(var(--spacing) * 5); + align-items: center; + justify-content: center; + gap: calc(var(--spacing) * 1); + border-radius: var(--radius-sm); + background-color: var(--color-muted); + padding-inline: calc(var(--spacing) * 1); + font-family: var(--font-sans); + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + color: var(--color-muted-foreground); + -webkit-user-select: none; + user-select: none; + & svg:not([class*='size-']) { + width: calc(var(--spacing) * 3); + height: calc(var(--spacing) * 3); + } + } +} @layer components { .form label, .label { display: flex; diff --git a/docs/src/components/command.njk b/docs/src/components/command.njk new file mode 100644 index 0000000..9d61f4e --- /dev/null +++ b/docs/src/components/command.njk @@ -0,0 +1,295 @@ +--- +layout: layouts/page.njk +title: Command +description: Fast, composable command menu for quick navigation and actions. Triggered with ⌘K or Ctrl+K. +toc: + - label: Usage + id: usage + children: + - label: HTML + JavaScript + id: usage-html-js + children: + - label: "Step 1: Include the JavaScript files" + id: usage-html-js-1 + - label: "Step 2: Add your command HTML" + id: usage-html-js-2 + - label: HTML structure + id: usage-html-js-3 + - label: JavaScript events + id: usage-html-js-4 + - label: JavaScript methods + id: usage-html-js-5 + - label: Jinja and Nunjucks + id: usage-macro + - label: Examples + id: examples + children: + - label: With groups + id: example-groups +--- + +{% from "macros/code_preview.njk" import code_preview %} +{% from "macros/code_block.njk" import code_block %} +{% from "command.njk" import command %} + +{% set code_html %} +{% call command( + id="demo-command", + placeholder="Type a command or search...", + empty_text="No results found." +) %} +
+ + Calendar +
+
+ + Search Emoji +
+
+ + Calculator +
+{% endcall %} +{% endset %} + +{{ code_preview("command", code_html | prettyHtml) }} + +
+

Press ⌘K (or Ctrl+K on Windows/Linux) to open the command menu.

+
+ +

Usage

+ +

HTML + JavaScript

+ +

Step 1: Include the JavaScript files

+ +
+

You can either include the JavaScript file for all the components, or just the one for this component by adding this to the <head> of your page:

+
+ +{% set code_script %} +{% endset %} +{{ code_block(code_script | prettyHtml, "html") }} + +
+ + Components with JavaScript + {% lucide "arrow-right" %} + + + Use the CLI + {% lucide "arrow-right" %} + + + command.js + {% lucide "arrow-right" %} + +
+ +

Step 2: Add your command HTML

+ +{{ code_block(code_html | prettyHtml, "html") }} + +

HTML structure

+ +
+
+
<div class="command">
+
Wraps around the entire component. +
+
<dialog class="command">
+
The native dialog element that creates the modal backdrop and handles focus trapping. Automatically opens with ⌘K/Ctrl+K keyboard shortcut. +
+
<article>
+
Contains the command menu content. +
+
<header>
+
Contains the search input with icon: +
+
<input type="text" role="combobox">
+
The search input that filters commands. Attributes: +
    +
  • placeholder: Placeholder text
  • +
  • aria-autocomplete="list": Indicates autocomplete behavior
  • +
  • aria-expanded="true": Listbox is always visible
  • +
  • aria-controls="{ LISTBOX_ID }": Points to the listbox id
  • +
  • aria-activedescendant="{ OPTION_ID }": Points to the active option id
  • +
+
+
+
+
<div role="listbox">
+
The listbox containing the command options. Supports groups, separators, and headings: +
+
<div role="option" data-value="{ VALUE }">
+
Command option that can be selected. Must have: +
    +
  • data-value: Unique value for the command
  • +
  • data-keywords Optional: Additional search keywords (comma-separated)
  • +
  • data-label Optional: Alternative label for filtering (defaults to text content)
  • +
  • id Optional: For aria-activedescendant
  • +
+
+
<div role="group"> Optional
+
Groups related commands together. Can have aria-labelledby pointing to a heading.
+
<span role="heading"> Optional
+
Group heading. Should have an id if referenced by aria-labelledby.
+
<hr role="separator"> Optional
+
Visual separator between groups.
+
+
+
<footer>
+
Empty state message, shown when no results match the search.
+
+
+
+
+
+
+
+
+ +

JavaScript events

+ +
+
+
basecoat:initialized
+
Once the component is fully initialized, it dispatches a custom (non-bubbling) basecoat:initialized event on itself.
+
command:select
+
When a command is selected (via click or Enter key), the component dispatches a custom (bubbling) command:select event on itself, with the selected value in event.detail (e.g. {detail: {value: "calendar"}}).
+
+
+ +{% set code_event %} + +{% endset %} +{{ code_block(code_event | prettyHtml, "html") }} + +

JavaScript methods

+ +
+

The command component uses the native <dialog> element, so you can use the standard dialog methods:

+
+
showModal()
+
Opens the command menu as a modal dialog:
+
+
+ +{% set code_open %} + +{% endset %} +{{ code_block(code_open | prettyHtml, "html") }} + +
+
+
close()
+
Closes the command menu:
+
+
+ +{% set code_close %} + +{% endset %} +{{ code_block(code_close | prettyHtml, "html") }} + +

Jinja and Nunjucks

+ +
+

You can use the command() Nunjucks or Jinja macro for this component.

+
+ +
+ + Use Nunjucks or Jinja macros + {% lucide "arrow-right" %} + + + Jinja macro + {% lucide "arrow-right" %} + + + Nunjucks macro + {% lucide "arrow-right" %} + +
+ +{% set raw_code %}{% raw %}{% call command( + id="my-command", + placeholder="Type a command or search..." +) %} +
Calendar
+
Search Emoji
+
Calculator
+{% endcall %}{% endraw %}{% endset %} +{{ code_block(raw_code, "jinja") }} + +

Examples

+ +

With groups

+ +{% set code_groups %} +{% call command( + id="demo-command-groups", + placeholder="Type a command or search..." +) %} +
+ Suggestions +
+ + Calendar +
+
+ + Search Emoji +
+
+ + Calculator +
+
+
+
+ Settings +
+ + Profile +
+
+ + Billing +
+
+ + Settings +
+
+{% endcall %} +{% endset %} +{{ code_preview("command-groups", code_groups | prettyHtml) }} + +
+

This example includes data-keywords attributes for better search matching. Try searching for "payment" to see the Billing option appear.

+
+ diff --git a/docs/src/components/kbd.njk b/docs/src/components/kbd.njk new file mode 100644 index 0000000..e545a65 --- /dev/null +++ b/docs/src/components/kbd.njk @@ -0,0 +1,68 @@ +--- +layout: layouts/page.njk +title: Kbd +description: Used to display textual user input from keyboard. +toc: + - label: Usage + id: usage + - label: Examples + id: examples + children: + - label: Group + id: example-group + - label: Button + id: example-button +--- + +{% from "macros/code_preview.njk" import code_preview %} +{% from "macros/code_block.njk" import code_block %} + +{% set code_html %} +
+ + ⌘ + ⇧ + ⌥ + ⌃ + + + Ctrl + + + B + +
+{% endset %} + +{{ code_preview("kbd", code_html | prettyHtml) }} + +

Usage

+ +{{ code_block(code_html | prettyHtml, "html") }} + +

Examples

+ +

Group

+ +{% set group_html %} +

+ Use + + Ctrl + B + Ctrl + K + + to open the command palette +

+{% endset %} + +{{ code_preview("kbd-group", group_html | prettyHtml) }} + +

Button

+ +{% set button_html %} +
+ + +
+{% endset %} + +{{ code_preview("kbd-button", button_html | prettyHtml) }} \ No newline at end of file diff --git a/src/css/basecoat.css b/src/css/basecoat.css index 4800630..f2bb74c 100644 --- a/src/css/basecoat.css +++ b/src/css/basecoat.css @@ -442,6 +442,85 @@ } } +/* Command */ +@layer components { + .command { + @apply inset-y-0 opacity-0 transition-all transition-discrete; + + &:is([open],:popover-open) { + @apply opacity-100; + + &::backdrop { + @apply opacity-100; + } + > article { + @apply scale-100; + } + + @starting-style { + @apply opacity-0; + + &::backdrop { + @apply opacity-0; + } + > article { + @apply scale-95; + } + } + } + &::backdrop { + @apply bg-black/50 opacity-0 transition-all transition-discrete; + } + > article { + @apply bg-background fixed top-[50%] left-[50%] z-50 flex flex-col w-full max-w-[calc(100%_-_2rem)] -translate-x-1/2 -translate-y-1/2 overflow-hidden rounded-lg border shadow-lg sm:max-w-lg max-h-[min(640px,calc(100%_-_2rem))]; + @apply transition-all scale-95; + + > header { + @apply flex items-center border-b px-3 gap-2; + + svg { + @apply size-4 shrink-0 opacity-50; + } + input { + @apply placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50; + } + } + [role='listbox'] { + @apply max-h-[300px] overflow-y-auto overflow-x-hidden p-1; + + [role='option'] { + @apply aria-hidden:hidden [&_svg]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none [&_svg]:shrink-0 [&_svg]:size-4 aria-disabled:opacity-50 aria-disabled:pointer-events-none disabled:opacity-50 disabled:pointer-events-none w-full truncate; + + &.active { + @apply bg-accent text-accent-foreground; + } + } + [role='heading'] { + @apply text-muted-foreground flex px-2 py-1.5 text-xs font-medium; + } + [role='group']:not(:has([role='option']:not([aria-hidden='true']))) { + @apply hidden; + } + [role='separator'] { + @apply border-border -mx-1; + } + &:not(:has([data-value]:not([aria-hidden='true'])))::before { + @apply flex items-center justify-center py-6 px-3 text-sm truncate -m-1; + } + &[data-empty]:not(:has([data-value]:not([aria-hidden='true'])))::before { + @apply content-[attr(data-empty)]; + } + &:not([data-empty]):not(:has([data-value]:not([aria-hidden='true'])))::before { + @apply content-['No_results_found']; + } + } + } + &:not([data-command-initialized]) [role='option'] { + @apply hover:bg-accent hover:text-accent-foreground; + } + } +} + /* Dialog */ @layer components { .dialog { @@ -576,6 +655,14 @@ } } +/* Kbd */ +@layer components { + kbd { + @apply bg-muted text-muted-foreground pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm px-1 font-sans text-xs font-medium select-none [&_svg:not([class*='size-'])]:size-3; + /* [[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background dark:[[data-slot=tooltip-content]_&]:bg-background/10 */ + } +} + /* Label */ @layer components { .form label, @@ -1036,6 +1123,8 @@ /* Tooltip */ @layer components { + + [data-tooltip] { @apply relative; diff --git a/src/jinja/command.html.jinja b/src/jinja/command.html.jinja new file mode 100644 index 0000000..cb12d00 --- /dev/null +++ b/src/jinja/command.html.jinja @@ -0,0 +1,121 @@ +{# + Renders a command menu component with search and keyboard navigation. + + @param id {string} [optional] - Unique identifier for the command component. + @param items {array} [optional] - Array of items to render (alternative to using caller). + @param placeholder {string} [optional] [default="Type a command or search..."] - Placeholder text for the search input. + @param empty_text {string} [optional] [default="No results found."] - Text displayed when no results match the search. + @param main_attrs {object} [optional] - Additional HTML attributes for the main container div. + @param dialog_attrs {object} [optional] - Additional HTML attributes for the dialog element. + @param input_attrs {object} [optional] - Additional HTML attributes for the search input. + @param listbox_attrs {object} [optional] - Additional HTML attributes for the listbox div. + @param open {boolean} [optional] [default=False] - Whether the command menu should be open initially. +#} +{% macro command( + id=None, + items=None, + placeholder="Type a command or search...", + empty_text="No results found.", + main_attrs={}, + dialog_attrs={}, + input_attrs={}, + listbox_attrs={}, + open=False +) %} +{% set id = id or ("command-" ~ range(100000, 999999) | random | string) %} + +
+
+ + +
+
+ {% if items and items|length > 0 %} + {{ render_command_items(items, id ~ "-items" if id else "items") }} + {% else %} + {{ caller() if caller }} + {% endif %} +
+
+
+{% endmacro %} + +{# + Renders a list of items for the command component. + + @param items {array} - The array of items to render. + @param parent_id_prefix {string} [optional] - The prefix for the item id. +#} +{% macro render_command_items(items, parent_id_prefix="items") %} + {% for item in items %} + {% set item_id = parent_id_prefix ~ "-" ~ loop.index %} + {% if item.type == "group" %} + {% set group_label_id = item.id if item.id else "group-label-" + item_id %} +
+ {{ item.label }} + {{ render_command_items(item.items, item_id) if item.items }} +
+ {% elif item.type == "separator" %} +
+ {% elif item.type == "item" or not item.type %} +
+ {{ item.content | safe if item.content else item.label }} +
+ {% endif %} + {% endfor %} +{% endmacro %} + diff --git a/src/js/command.js b/src/js/command.js new file mode 100644 index 0000000..793a412 --- /dev/null +++ b/src/js/command.js @@ -0,0 +1,172 @@ +(() => { + const initCommand = (dialog) => { + const input = dialog.querySelector('header input'); + const listbox = dialog.querySelector('[role="listbox"]'); + + if (!input || !listbox) { + const missing = []; + if (!input) missing.push('input'); + if (!listbox) missing.push('listbox'); + console.error(`Command component initialization failed. Missing element(s): ${missing.join(', ')}`, dialog); + return; + } + + const options = Array.from(listbox.querySelectorAll('[role="option"]')); + let visibleOptions = [...options]; + let activeIndex = -1; + + const setActiveOption = (index) => { + if (activeIndex > -1 && options[activeIndex]) { + options[activeIndex].classList.remove('active'); + } + + activeIndex = index; + + if (activeIndex > -1) { + const activeOption = options[activeIndex]; + activeOption.classList.add('active'); + if (activeOption.id) { + input.setAttribute('aria-activedescendant', activeOption.id); + } else { + input.removeAttribute('aria-activedescendant'); + } + } else { + input.removeAttribute('aria-activedescendant'); + } + }; + + const filterOptions = () => { + const searchTerm = input.value.trim().toLowerCase(); + + setActiveOption(-1); + + visibleOptions = []; + options.forEach(option => { + const optionText = (option.dataset.label || option.textContent).trim().toLowerCase(); + const keywords = (option.dataset.keywords || '').toLowerCase(); + const matches = optionText.includes(searchTerm) || keywords.includes(searchTerm); + option.setAttribute('aria-hidden', String(!matches)); + if (matches) { + visibleOptions.push(option); + } + }); + + // empty state handled via CSS on [role="listbox"][data-empty] + }; + + const selectOption = (option) => { + if (!option) return; + + const event = new CustomEvent('command:select', { + detail: { value: option.dataset.value }, + bubbles: true + }); + dialog.dispatchEvent(event); + + dialog.close(); + }; + + input.addEventListener('input', filterOptions); + + const handleKeyNavigation = (event) => { + if (!['ArrowDown', 'ArrowUp', 'Enter', 'Home', 'End'].includes(event.key)) { + return; + } + + if (event.key === 'Enter') { + event.preventDefault(); + if (activeIndex > -1) { + selectOption(options[activeIndex]); + } + return; + } + + if (visibleOptions.length === 0) return; + + event.preventDefault(); + + const currentVisibleIndex = activeIndex > -1 ? visibleOptions.indexOf(options[activeIndex]) : -1; + let nextVisibleIndex = currentVisibleIndex; + + switch (event.key) { + case 'ArrowDown': + if (currentVisibleIndex < visibleOptions.length - 1) { + nextVisibleIndex = currentVisibleIndex + 1; + } else if (currentVisibleIndex === -1) { + nextVisibleIndex = 0; + } + break; + case 'ArrowUp': + if (currentVisibleIndex > 0) { + nextVisibleIndex = currentVisibleIndex - 1; + } + break; + case 'Home': + nextVisibleIndex = 0; + break; + case 'End': + nextVisibleIndex = visibleOptions.length - 1; + break; + } + + if (nextVisibleIndex !== currentVisibleIndex && nextVisibleIndex >= 0) { + const newActiveOption = visibleOptions[nextVisibleIndex]; + setActiveOption(options.indexOf(newActiveOption)); + newActiveOption.scrollIntoView({ block: 'nearest', behavior: 'smooth' }); + } + }; + + listbox.addEventListener('mousemove', (event) => { + const option = event.target.closest('[role="option"]'); + if (option && visibleOptions.includes(option)) { + const index = options.indexOf(option); + if (index !== activeIndex) { + setActiveOption(index); + } + } + }); + + listbox.addEventListener('mouseleave', () => { + setActiveOption(-1); + }); + + listbox.addEventListener('click', (event) => { + const clickedOption = event.target.closest('[role="option"]'); + if (clickedOption && visibleOptions.includes(clickedOption)) { + selectOption(clickedOption); + } + }); + + input.addEventListener('keydown', handleKeyNavigation); + + dialog.addEventListener('close', () => { + input.value = ''; + visibleOptions = [...options]; + options.forEach(opt => opt.setAttribute('aria-hidden', 'false')); + setActiveOption(-1); + }); + + dialog.dataset.commandInitialized = true; + dialog.dispatchEvent(new CustomEvent('basecoat:initialized')); + }; + + document.addEventListener('keydown', (event) => { + if ((event.metaKey || event.ctrlKey) && event.key === 'k') { + event.preventDefault(); + const firstCommand = document.querySelector('.command'); + if (firstCommand) { + if (firstCommand.open) { + firstCommand.close(); + } else { + firstCommand.showModal(); + const input = firstCommand.querySelector('header input'); + if (input) input.focus(); + } + } + } + }); + + if (window.basecoat) { + window.basecoat.register('command', '.command:not([data-command-initialized])', initCommand); + } +})(); diff --git a/src/nunjucks/command.njk b/src/nunjucks/command.njk new file mode 100644 index 0000000..edeff42 --- /dev/null +++ b/src/nunjucks/command.njk @@ -0,0 +1,121 @@ +{# + Renders a command menu component with search and keyboard navigation. + + @param id {string} [optional] - Unique identifier for the command component. + @param items {array} [optional] - Array of items to render (alternative to using caller). + @param placeholder {string} [optional] [default="Type a command or search..."] - Placeholder text for the search input. + @param empty_text {string} [optional] [default="No results found."] - Text displayed when no results match the search. + @param main_attrs {object} [optional] - Additional HTML attributes for the main container div. + @param dialog_attrs {object} [optional] - Additional HTML attributes for the dialog element. + @param input_attrs {object} [optional] - Additional HTML attributes for the search input. + @param listbox_attrs {object} [optional] - Additional HTML attributes for the listbox div. + @param open {boolean} [optional] [default=false] - Whether the command menu should be open initially. +#} +{% macro command( + id=None, + items=None, + placeholder="Type a command or search...", + empty_text="No results found.", + main_attrs={}, + dialog_attrs={}, + input_attrs={}, + listbox_attrs={}, + open=false +) %} +{% set id = id or ("command-" + (range(100000, 999999) | random | string)) %} + +
+
+ + +
+
+ {% if items and items.length > 0 %} + {{ render_command_items(items, id ~ "-items" if id else "items") }} + {% else %} + {{ caller() if caller }} + {% endif %} +
+
+
+{% endmacro %} + +{# + Renders a list of items for the command component. + + @param items {array} - The array of items to render. + @param parent_id_prefix {string} [optional] - The prefix for the item id. +#} +{% macro render_command_items(items, parent_id_prefix="items") %} + {% for item in items %} + {% set item_id = parent_id_prefix ~ "-" ~ loop.index %} + {% if item.type == "group" %} + {% set group_label_id = item.id if item.id else "group-label-" + item_id %} +
+ {{ item.label }} + {{ render_command_items(item.items, item_id) if item.items }} +
+ {% elif item.type == "separator" %} +
+ {% elif item.type == "item" or not item.type %} +
+ {{ item.content | safe if item.content else item.label }} +
+ {% endif %} + {% endfor %} +{% endmacro %} + From 6148716f68fabc22402060d671bd98fb11a34abd Mon Sep 17 00:00:00 2001 From: Ronan Berder Date: Thu, 30 Oct 2025 19:09:21 +0800 Subject: [PATCH 03/11] Adding kbd and draft command --- docs/src/assets/styles.css | 336 +++++++++++++++++++----------- docs/src/components/command.njk | 358 ++++++++------------------------ src/css/basecoat.css | 94 ++++++--- src/jinja/command.html.jinja | 88 +++++++- src/js/command.js | 61 +++--- src/nunjucks/command.njk | 146 +++++++++---- 6 files changed, 576 insertions(+), 507 deletions(-) diff --git a/docs/src/assets/styles.css b/docs/src/assets/styles.css index e0050c1..98a413d 100644 --- a/docs/src/assets/styles.css +++ b/docs/src/assets/styles.css @@ -251,9 +251,6 @@ .invisible { visibility: hidden; } - .visible { - visibility: visible; - } .sr-only { position: absolute; width: 1px; @@ -523,6 +520,9 @@ .max-w-\[300px\] { max-width: 300px; } + .max-w-\[450px\] { + max-width: 450px; + } .max-w-lg { max-width: var(--container-lg); } @@ -808,6 +808,9 @@ .bg-sidebar-primary { background-color: var(--color-sidebar-primary); } + .bg-transparent { + background-color: transparent; + } .object-cover { object-fit: cover; } @@ -835,9 +838,6 @@ .px-1 { padding-inline: calc(var(--spacing) * 1); } - .px-1\.5 { - padding-inline: calc(var(--spacing) * 1.5); - } .px-2 { padding-inline: calc(var(--spacing) * 2); } @@ -853,9 +853,6 @@ .px-\[0\.3rem\] { padding-inline: 0.3rem; } - .py-0\.5 { - padding-block: calc(var(--spacing) * 0.5); - } .py-1\.5 { padding-block: calc(var(--spacing) * 1.5); } @@ -1017,6 +1014,10 @@ .opacity-100 { opacity: 100%; } + .shadow-md { + --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } .shadow-none { --tw-shadow: 0 0 #0000; box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); @@ -2371,7 +2372,7 @@ } } @layer components { - .command { + .command-dialog { inset-block: calc(var(--spacing) * 0); opacity: 0%; transition-property: all; @@ -2444,141 +2445,226 @@ transition-property: all; transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); transition-duration: var(--tw-duration, var(--default-transition-duration)); - > header { - display: flex; - align-items: center; - gap: calc(var(--spacing) * 2); - border-bottom-style: var(--tw-border-style); - border-bottom-width: 1px; - padding-inline: calc(var(--spacing) * 3); - svg { + > button, > form[method='dialog'] { + position: absolute; + top: calc(var(--spacing) * 4); + right: calc(var(--spacing) * 4); + } + > button, > form[method='dialog'] > button { + border-radius: var(--radius-xs); + opacity: 70%; + --tw-ring-offset-color: var(--color-background); + transition-property: opacity; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + &:hover { + @media (hover: hover) { + opacity: 100%; + } + } + &:focus { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + &:focus { + --tw-ring-color: var(--color-ring); + } + &:focus { + --tw-ring-offset-width: 2px; + --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + } + &:focus { + --tw-outline-style: none; + outline-style: none; + @media (forced-colors: active) { + outline: 2px solid transparent; + outline-offset: 2px; + } + } + &:disabled { + pointer-events: none; + } + &[data-state="open"] { + background-color: var(--color-accent); + } + &[data-state="open"] { + color: var(--color-muted-foreground); + } + & svg { + pointer-events: none; + } + & svg { + flex-shrink: 0; + } + & svg:not([class*='size-']) { width: calc(var(--spacing) * 4); height: calc(var(--spacing) * 4); - flex-shrink: 0; - opacity: 50%; - } - input { - display: flex; - height: calc(var(--spacing) * 10); - width: 100%; - border-radius: var(--radius-md); - background-color: transparent; - padding-block: calc(var(--spacing) * 3); - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - --tw-outline-style: none; - outline-style: none; - @media (forced-colors: active) { - outline: 2px solid transparent; - outline-offset: 2px; - } - &::placeholder { - color: var(--color-muted-foreground); - } - &:disabled { - cursor: not-allowed; - } - &:disabled { - opacity: 50%; - } } } + } + .command { + > header input { + height: calc(var(--spacing) * 12); + } [role='listbox'] { - max-height: 300px; - overflow-x: hidden; - overflow-y: auto; - padding: calc(var(--spacing) * 1); + padding-inline: calc(var(--spacing) * 2); [role='option'] { - position: relative; - display: flex; - width: 100%; - cursor: default; - align-items: center; - gap: calc(var(--spacing) * 2); - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - border-radius: var(--radius-sm); padding-inline: calc(var(--spacing) * 2); - padding-block: calc(var(--spacing) * 1.5); - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - --tw-outline-style: none; - outline-style: none; - @media (forced-colors: active) { - outline: 2px solid transparent; - outline-offset: 2px; - } - -webkit-user-select: none; - user-select: none; - &:disabled { - pointer-events: none; - } - &:disabled { - opacity: 50%; - } - &[aria-disabled="true"] { - pointer-events: none; - } - &[aria-disabled="true"] { - opacity: 50%; - } - &[aria-hidden="true"] { - display: none; - } + padding-block: calc(var(--spacing) * 3); & svg { - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - } - & svg { - flex-shrink: 0; - } - & svg { - color: var(--color-muted-foreground); - } - &.active { - background-color: var(--color-accent); - color: var(--color-accent-foreground); + width: calc(var(--spacing) * 5); + height: calc(var(--spacing) * 5); } } [role='heading'] { - display: flex; padding-inline: calc(var(--spacing) * 2); padding-block: calc(var(--spacing) * 1.5); - font-size: var(--text-xs); - line-height: var(--tw-leading, var(--text-xs--line-height)); --tw-font-weight: var(--font-weight-medium); font-weight: var(--font-weight-medium); color: var(--color-muted-foreground); } - [role='group']:not(:has([role='option']:not([aria-hidden='true']))) { + } + } + } + .command { + > header { + display: flex; + align-items: center; + gap: calc(var(--spacing) * 2); + border-bottom-style: var(--tw-border-style); + border-bottom-width: 1px; + padding-inline: calc(var(--spacing) * 3); + svg { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + flex-shrink: 0; + opacity: 50%; + } + input { + display: flex; + height: calc(var(--spacing) * 10); + width: 100%; + border-radius: var(--radius-md); + background-color: transparent; + padding-block: calc(var(--spacing) * 3); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + --tw-outline-style: none; + outline-style: none; + @media (forced-colors: active) { + outline: 2px solid transparent; + outline-offset: 2px; + } + &::placeholder { + color: var(--color-muted-foreground); + } + &:disabled { + cursor: not-allowed; + } + &:disabled { + opacity: 50%; + } + } + } + [role='listbox'] { + max-height: 300px; + overflow-x: hidden; + overflow-y: auto; + padding: calc(var(--spacing) * 1); + [role='option'] { + position: relative; + display: flex; + width: 100%; + cursor: default; + align-items: center; + gap: calc(var(--spacing) * 2); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + border-radius: var(--radius-sm); + padding-inline: calc(var(--spacing) * 2); + padding-block: calc(var(--spacing) * 1.5); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + --tw-outline-style: none; + outline-style: none; + @media (forced-colors: active) { + outline: 2px solid transparent; + outline-offset: 2px; + } + -webkit-user-select: none; + user-select: none; + &:disabled { + pointer-events: none; + } + &:disabled { + opacity: 50%; + } + &[aria-disabled="true"] { + pointer-events: none; + } + &[aria-disabled="true"] { + opacity: 50%; + } + &[aria-hidden="true"] { display: none; } - [role='separator'] { - margin-inline: calc(var(--spacing) * -1); - border-color: var(--color-border); + & svg { + pointer-events: none; } - &:not(:has([data-value]:not([aria-hidden='true'])))::before { - margin: calc(var(--spacing) * -1); - display: flex; - align-items: center; - justify-content: center; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - padding-inline: calc(var(--spacing) * 3); - padding-block: calc(var(--spacing) * 6); - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); + & svg { + flex-shrink: 0; } - &[data-empty]:not(:has([data-value]:not([aria-hidden='true'])))::before { - --tw-content: attr(data-empty); - content: var(--tw-content); + & svg:not([class*='size-']) { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); } - &:not([data-empty]):not(:has([data-value]:not([aria-hidden='true'])))::before { - --tw-content: 'No results found'; - content: var(--tw-content); + & svg:not([class*='text-']) { + color: var(--color-muted-foreground); } + &.active { + background-color: var(--color-accent); + color: var(--color-accent-foreground); + } + } + [role='heading'] { + display: flex; + padding-inline: calc(var(--spacing) * 2); + padding-block: calc(var(--spacing) * 1.5); + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + color: var(--color-muted-foreground); + } + [role='group']:not(:has([role='option']:not([aria-hidden='true']))) { + display: none; + } + [role='separator'] { + margin-inline: calc(var(--spacing) * -1); + margin-block: calc(var(--spacing) * 1); + border-color: var(--color-border); + } + &:not(:has([data-value]:not([aria-hidden='true'])))::before { + margin: calc(var(--spacing) * -1); + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + padding-inline: calc(var(--spacing) * 3); + padding-block: calc(var(--spacing) * 6); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + } + &[data-empty]:not(:has([data-value]:not([aria-hidden='true'])))::before { + --tw-content: attr(data-empty); + content: var(--tw-content); + } + &:not([data-empty]):not(:has([data-value]:not([aria-hidden='true'])))::before { + --tw-content: 'No results found'; + content: var(--tw-content); } } &:not([data-command-initialized]) [role='option'] { @@ -2593,6 +2679,9 @@ } } } + &:has(> header input:not(:placeholder-shown)) [role='separator'] { + display: none; + } } } @layer components { @@ -3553,6 +3642,9 @@ content: var(--tw-content); } } + [data-popover]:has(> header input:not(:placeholder-shown)) [role='separator'] { + display: none; + } &:not([data-select-initialized]) [data-popover] [role='option'] { &:hover { @media (hover: hover) { diff --git a/docs/src/components/command.njk b/docs/src/components/command.njk index 9d61f4e..58797d4 100644 --- a/docs/src/components/command.njk +++ b/docs/src/components/command.njk @@ -1,295 +1,121 @@ --- layout: layouts/page.njk title: Command -description: Fast, composable command menu for quick navigation and actions. Triggered with ⌘K or Ctrl+K. +description: Fast, composable command menu for quick navigation and actions. toc: - label: Usage id: usage - children: - - label: HTML + JavaScript - id: usage-html-js - children: - - label: "Step 1: Include the JavaScript files" - id: usage-html-js-1 - - label: "Step 2: Add your command HTML" - id: usage-html-js-2 - - label: HTML structure - id: usage-html-js-3 - - label: JavaScript events - id: usage-html-js-4 - - label: JavaScript methods - id: usage-html-js-5 - - label: Jinja and Nunjucks - id: usage-macro - label: Examples id: examples children: - - label: With groups - id: example-groups + - label: Dialog + id: example-dialog --- {% from "macros/code_preview.njk" import code_preview %} {% from "macros/code_block.njk" import code_block %} -{% from "command.njk" import command %} +{% from "command.njk" import command, command_dialog %} -{% set code_html %} +{% macro command_items(suggestions_id="suggestions", settings_id="settings") %} +
+ Suggestions +
+ {% lucide "calendar" %} + Calendar +
+
+ {% lucide "smile" %} + Search Emoji +
+
+ {% lucide "calculator" %} + Calculator +
+
+
+
+ Settings +
+ {% lucide "user" %} + Profile + ⌘P +
+
+ {% lucide "credit-card" %} + Billing + ⌘B +
+
+ {% lucide "settings" %} + Settings + ⌘S +
+
+{% endmacro %} + +{% set code_standalone %} {% call command( - id="demo-command", - placeholder="Type a command or search...", - empty_text="No results found." + id="demo-command-standalone", + main_attrs={ "class": "rounded-lg border shadow-md" } ) %} -
- - Calendar -
-
- - Search Emoji -
-
- - Calculator -
+{{ command_items("suggestions", "settings") }} {% endcall %} {% endset %} -{{ code_preview("command", code_html | prettyHtml) }} - -
-

Press ⌘K (or Ctrl+K on Windows/Linux) to open the command menu.

-
+{{ code_preview("command-standalone", code_standalone | prettyHtml, class=" w-full max-w-[450px]") }}

Usage

-

HTML + JavaScript

- -

Step 1: Include the JavaScript files

- -
-

You can either include the JavaScript file for all the components, or just the one for this component by adding this to the <head> of your page:

-
- -{% set code_script %} -{% endset %} -{{ code_block(code_script | prettyHtml, "html") }} - - - -

Step 2: Add your command HTML

- -{{ code_block(code_html | prettyHtml, "html") }} - -

HTML structure

- -
-
-
<div class="command">
-
Wraps around the entire component. -
-
<dialog class="command">
-
The native dialog element that creates the modal backdrop and handles focus trapping. Automatically opens with ⌘K/Ctrl+K keyboard shortcut. -
-
<article>
-
Contains the command menu content. -
-
<header>
-
Contains the search input with icon: -
-
<input type="text" role="combobox">
-
The search input that filters commands. Attributes: -
    -
  • placeholder: Placeholder text
  • -
  • aria-autocomplete="list": Indicates autocomplete behavior
  • -
  • aria-expanded="true": Listbox is always visible
  • -
  • aria-controls="{ LISTBOX_ID }": Points to the listbox id
  • -
  • aria-activedescendant="{ OPTION_ID }": Points to the active option id
  • -
-
-
-
-
<div role="listbox">
-
The listbox containing the command options. Supports groups, separators, and headings: -
-
<div role="option" data-value="{ VALUE }">
-
Command option that can be selected. Must have: -
    -
  • data-value: Unique value for the command
  • -
  • data-keywords Optional: Additional search keywords (comma-separated)
  • -
  • data-label Optional: Alternative label for filtering (defaults to text content)
  • -
  • id Optional: For aria-activedescendant
  • -
-
-
<div role="group"> Optional
-
Groups related commands together. Can have aria-labelledby pointing to a heading.
-
<span role="heading"> Optional
-
Group heading. Should have an id if referenced by aria-labelledby.
-
<hr role="separator"> Optional
-
Visual separator between groups.
-
-
-
<footer>
-
Empty state message, shown when no results match the search.
-
-
-
-
-
-
-
-
- -

JavaScript events

- -
-
-
basecoat:initialized
-
Once the component is fully initialized, it dispatches a custom (non-bubbling) basecoat:initialized event on itself.
-
command:select
-
When a command is selected (via click or Enter key), the component dispatches a custom (bubbling) command:select event on itself, with the selected value in event.detail (e.g. {detail: {value: "calendar"}}).
-
-
- -{% set code_event %} - -{% endset %} -{{ code_block(code_event | prettyHtml, "html") }} - -

JavaScript methods

- -
-

The command component uses the native <dialog> element, so you can use the standard dialog methods:

-
-
showModal()
-
Opens the command menu as a modal dialog:
-
-
- -{% set code_open %} - -{% endset %} -{{ code_block(code_open | prettyHtml, "html") }} - -
-
-
close()
-
Closes the command menu:
-
-
- -{% set code_close %} - -{% endset %} -{{ code_block(code_close | prettyHtml, "html") }} - -

Jinja and Nunjucks

- -
-

You can use the command() Nunjucks or Jinja macro for this component.

-
- - - -{% set raw_code %}{% raw %}{% call command( - id="my-command", - placeholder="Type a command or search..." -) %} -
Calendar
-
Search Emoji
-
Calculator
-{% endcall %}{% endraw %}{% endset %} -{{ code_block(raw_code, "jinja") }} +{{ code_block(code_standalone | prettyHtml, "html") }}

Examples

-

With groups

- -{% set code_groups %} -{% call command( - id="demo-command-groups", - placeholder="Type a command or search..." -) %} -
- Suggestions -
- - Calendar -
-
- - Search Emoji -
-
- - Calculator -
-
-
-
- Settings -
- - Profile -
-
- - Billing -
-
- - Settings -
-
-{% endcall %} -{% endset %} -{{ code_preview("command-groups", code_groups | prettyHtml) }} +

Dialog

-

This example includes data-keywords attributes for better search matching. Try searching for "payment" to see the Billing option appear.

+

Press ⌘J

+{% set code_dialog %} + + +{% call command_dialog(id="demo-command-dialog") %} +{{ command_items("cmd-suggestions", "cmd-settings") }} +{% endcall %} + + +{% endset %} + +{{ code_preview("command-dialog", code_dialog | prettyHtml) }} + +
+

To show the command menu in a dialog, use the command_dialog macro.

+
+ +{{ code_block(code_dialog | prettyHtml, "html") }} diff --git a/src/css/basecoat.css b/src/css/basecoat.css index f2bb74c..dfdce7a 100644 --- a/src/css/basecoat.css +++ b/src/css/basecoat.css @@ -444,7 +444,7 @@ /* Command */ @layer components { - .command { + .command-dialog { @apply inset-y-0 opacity-0 transition-all transition-discrete; &:is([open],:popover-open) { @@ -475,49 +475,79 @@ @apply bg-background fixed top-[50%] left-[50%] z-50 flex flex-col w-full max-w-[calc(100%_-_2rem)] -translate-x-1/2 -translate-y-1/2 overflow-hidden rounded-lg border shadow-lg sm:max-w-lg max-h-[min(640px,calc(100%_-_2rem))]; @apply transition-all scale-95; - > header { - @apply flex items-center border-b px-3 gap-2; + > button, + > form[method='dialog'] { + @apply absolute top-4 right-4; + } + > button, + > form[method='dialog'] > button { + @apply ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4; + } + } - svg { - @apply size-4 shrink-0 opacity-50; - } - input { - @apply placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50; - } + .command { + > header input { + @apply h-12; } [role='listbox'] { - @apply max-h-[300px] overflow-y-auto overflow-x-hidden p-1; + @apply px-2; [role='option'] { - @apply aria-hidden:hidden [&_svg]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none [&_svg]:shrink-0 [&_svg]:size-4 aria-disabled:opacity-50 aria-disabled:pointer-events-none disabled:opacity-50 disabled:pointer-events-none w-full truncate; - - &.active { - @apply bg-accent text-accent-foreground; - } + @apply py-3 px-2 [&_svg]:size-5; } [role='heading'] { - @apply text-muted-foreground flex px-2 py-1.5 text-xs font-medium; + @apply px-2 py-1.5 font-medium text-muted-foreground; } - [role='group']:not(:has([role='option']:not([aria-hidden='true']))) { - @apply hidden; - } - [role='separator'] { - @apply border-border -mx-1; - } - &:not(:has([data-value]:not([aria-hidden='true'])))::before { - @apply flex items-center justify-center py-6 px-3 text-sm truncate -m-1; - } - &[data-empty]:not(:has([data-value]:not([aria-hidden='true'])))::before { - @apply content-[attr(data-empty)]; - } - &:not([data-empty]):not(:has([data-value]:not([aria-hidden='true'])))::before { - @apply content-['No_results_found']; + } + } + } + + .command { + > header { + @apply flex items-center border-b px-3 gap-2; + + svg { + @apply size-4 shrink-0 opacity-50; + } + input { + @apply placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50; + } + } + [role='listbox'] { + @apply max-h-[300px] overflow-y-auto overflow-x-hidden p-1; + + [role='option'] { + @apply aria-hidden:hidden relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none aria-disabled:opacity-50 aria-disabled:pointer-events-none disabled:opacity-50 disabled:pointer-events-none w-full truncate [&_svg:not([class*='text-'])]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4; + + &.active { + @apply bg-accent text-accent-foreground; } } + [role='heading'] { + @apply text-muted-foreground flex px-2 py-1.5 text-xs font-medium; + } + [role='group']:not(:has([role='option']:not([aria-hidden='true']))) { + @apply hidden; + } + [role='separator'] { + @apply border-border -mx-1 my-1; + } + &:not(:has([data-value]:not([aria-hidden='true'])))::before { + @apply flex items-center justify-center py-6 px-3 text-sm truncate -m-1; + } + &[data-empty]:not(:has([data-value]:not([aria-hidden='true'])))::before { + @apply content-[attr(data-empty)]; + } + &:not([data-empty]):not(:has([data-value]:not([aria-hidden='true'])))::before { + @apply content-['No_results_found']; + } } &:not([data-command-initialized]) [role='option'] { @apply hover:bg-accent hover:text-accent-foreground; } + &:has(> header input:not(:placeholder-shown)) [role='separator'] { + @apply hidden; + } } } @@ -659,7 +689,6 @@ @layer components { kbd { @apply bg-muted text-muted-foreground pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm px-1 font-sans text-xs font-medium select-none [&_svg:not([class*='size-'])]:size-3; - /* [[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background dark:[[data-slot=tooltip-content]_&]:bg-background/10 */ } } @@ -867,6 +896,9 @@ @apply content-['No_results_found']; } } + [data-popover]:has(> header input:not(:placeholder-shown)) [role='separator'] { + @apply hidden; + } &:not([data-select-initialized]) [data-popover] [role='option'] { @apply hover:bg-accent hover:text-accent-foreground; } diff --git a/src/jinja/command.html.jinja b/src/jinja/command.html.jinja index cb12d00..63e63e7 100644 --- a/src/jinja/command.html.jinja +++ b/src/jinja/command.html.jinja @@ -1,15 +1,13 @@ {# - Renders a command menu component with search and keyboard navigation. + Renders a standalone command menu component with search and keyboard navigation. @param id {string} [optional] - Unique identifier for the command component. @param items {array} [optional] - Array of items to render (alternative to using caller). @param placeholder {string} [optional] [default="Type a command or search..."] - Placeholder text for the search input. @param empty_text {string} [optional] [default="No results found."] - Text displayed when no results match the search. @param main_attrs {object} [optional] - Additional HTML attributes for the main container div. - @param dialog_attrs {object} [optional] - Additional HTML attributes for the dialog element. @param input_attrs {object} [optional] - Additional HTML attributes for the search input. @param listbox_attrs {object} [optional] - Additional HTML attributes for the listbox div. - @param open {boolean} [optional] [default=False] - Whether the command menu should be open initially. #} {% macro command( id=None, @@ -17,26 +15,90 @@ placeholder="Type a command or search...", empty_text="No results found.", main_attrs={}, + input_attrs={}, + listbox_attrs={} +) %} +{% set id = id or ("command-" ~ range(100000, 999999) | random | string) %} +
+
+ + +
+
+ {% if items and items|length > 0 %} + {{ render_command_items(items, id ~ "-items" if id else "items") }} + {% else %} + {{ caller() if caller }} + {% endif %} +
+
+{% endmacro %} + +{# + Renders a command dialog (modal command palette). + + @param id {string} [optional] - Unique identifier for the command dialog. + @param items {array} [optional] - Array of items to render (alternative to using caller). + @param placeholder {string} [optional] [default="Type a command or search..."] - Placeholder text for the search input. + @param empty_text {string} [optional] [default="No results found."] - Text displayed when no results match the search. + @param dialog_attrs {object} [optional] - Additional HTML attributes for the dialog element. + @param input_attrs {object} [optional] - Additional HTML attributes for the search input. + @param listbox_attrs {object} [optional] - Additional HTML attributes for the listbox div. + @param open {boolean} [optional] [default=False] - Whether the command dialog should be open initially. +#} +{% macro command_dialog( + id=None, + items=None, + placeholder="Type a command or search...", + empty_text="No results found.", dialog_attrs={}, input_attrs={}, listbox_attrs={}, open=False ) %} -{% set id = id or ("command-" ~ range(100000, 999999) | random | string) %} +{% set id = id or ("command-dialog-" ~ range(100000, 999999) | random | string) %} -
+
+
-
+ + +
{% endmacro %} @@ -107,6 +173,7 @@ data-value="{{ item.value }}" {% if item.keywords %}data-keywords="{{ item.keywords }}"{% endif %} {% if item.label %}data-label="{{ item.label }}"{% endif %} + {% if item.disabled %}aria-disabled="true"{% endif %} {% if item.attrs %} {% for key, value in item.attrs.items() %} {{ key }}="{{ value }}" @@ -118,4 +185,3 @@ {% endif %} {% endfor %} {% endmacro %} - diff --git a/src/js/command.js b/src/js/command.js index 793a412..21633ee 100644 --- a/src/js/command.js +++ b/src/js/command.js @@ -1,13 +1,13 @@ (() => { - const initCommand = (dialog) => { - const input = dialog.querySelector('header input'); - const listbox = dialog.querySelector('[role="listbox"]'); + const initCommand = (container) => { + const input = container.querySelector('header input'); + const listbox = container.querySelector('[role="listbox"]'); if (!input || !listbox) { const missing = []; if (!input) missing.push('input'); if (!listbox) missing.push('listbox'); - console.error(`Command component initialization failed. Missing element(s): ${missing.join(', ')}`, dialog); + console.error(`Command component initialization failed. Missing element(s): ${missing.join(', ')}`, container); return; } @@ -51,7 +51,10 @@ } }); - // empty state handled via CSS on [role="listbox"][data-empty] + if (visibleOptions.length > 0) { + setActiveOption(options.indexOf(visibleOptions[0])); + visibleOptions[0].scrollIntoView({ block: 'nearest' }); + } }; const selectOption = (option) => { @@ -61,9 +64,7 @@ detail: { value: option.dataset.value }, bubbles: true }); - dialog.dispatchEvent(event); - - dialog.close(); + container.dispatchEvent(event); }; input.addEventListener('input', filterOptions); @@ -92,13 +93,13 @@ case 'ArrowDown': if (currentVisibleIndex < visibleOptions.length - 1) { nextVisibleIndex = currentVisibleIndex + 1; - } else if (currentVisibleIndex === -1) { - nextVisibleIndex = 0; } break; case 'ArrowUp': if (currentVisibleIndex > 0) { nextVisibleIndex = currentVisibleIndex - 1; + } else if (currentVisibleIndex === -1) { + nextVisibleIndex = 0; } break; case 'Home': @@ -109,7 +110,7 @@ break; } - if (nextVisibleIndex !== currentVisibleIndex && nextVisibleIndex >= 0) { + if (nextVisibleIndex !== currentVisibleIndex) { const newActiveOption = visibleOptions[nextVisibleIndex]; setActiveOption(options.indexOf(newActiveOption)); newActiveOption.scrollIntoView({ block: 'nearest', behavior: 'smooth' }); @@ -127,7 +128,11 @@ }); listbox.addEventListener('mouseleave', () => { - setActiveOption(-1); + if (visibleOptions.length > 0) { + setActiveOption(options.indexOf(visibleOptions[0])); + } else { + setActiveOption(-1); + } }); listbox.addEventListener('click', (event) => { @@ -139,32 +144,14 @@ input.addEventListener('keydown', handleKeyNavigation); - dialog.addEventListener('close', () => { - input.value = ''; - visibleOptions = [...options]; - options.forEach(opt => opt.setAttribute('aria-hidden', 'false')); - setActiveOption(-1); - }); - - dialog.dataset.commandInitialized = true; - dialog.dispatchEvent(new CustomEvent('basecoat:initialized')); - }; - - document.addEventListener('keydown', (event) => { - if ((event.metaKey || event.ctrlKey) && event.key === 'k') { - event.preventDefault(); - const firstCommand = document.querySelector('.command'); - if (firstCommand) { - if (firstCommand.open) { - firstCommand.close(); - } else { - firstCommand.showModal(); - const input = firstCommand.querySelector('header input'); - if (input) input.focus(); - } - } + if (visibleOptions.length > 0) { + setActiveOption(options.indexOf(visibleOptions[0])); + visibleOptions[0].scrollIntoView({ block: 'nearest' }); } - }); + + container.dataset.commandInitialized = true; + container.dispatchEvent(new CustomEvent('basecoat:initialized')); + }; if (window.basecoat) { window.basecoat.register('command', '.command:not([data-command-initialized])', initCommand); diff --git a/src/nunjucks/command.njk b/src/nunjucks/command.njk index edeff42..46b8e50 100644 --- a/src/nunjucks/command.njk +++ b/src/nunjucks/command.njk @@ -1,15 +1,13 @@ {# - Renders a command menu component with search and keyboard navigation. + Renders a standalone command menu component with search and keyboard navigation. @param id {string} [optional] - Unique identifier for the command component. @param items {array} [optional] - Array of items to render (alternative to using caller). @param placeholder {string} [optional] [default="Type a command or search..."] - Placeholder text for the search input. @param empty_text {string} [optional] [default="No results found."] - Text displayed when no results match the search. @param main_attrs {object} [optional] - Additional HTML attributes for the main container div. - @param dialog_attrs {object} [optional] - Additional HTML attributes for the dialog element. @param input_attrs {object} [optional] - Additional HTML attributes for the search input. @param listbox_attrs {object} [optional] - Additional HTML attributes for the listbox div. - @param open {boolean} [optional] [default=false] - Whether the command menu should be open initially. #} {% macro command( id=None, @@ -17,60 +15,128 @@ placeholder="Type a command or search...", empty_text="No results found.", main_attrs={}, + input_attrs={}, + listbox_attrs={} +) %} +{% set id = id or ("command-" + (range(100000, 999999) | random | string)) %} +
+
+ + +
+
+ {% if items and items.length > 0 %} + {{ render_command_items(items, id ~ "-items" if id else "items") }} + {% else %} + {{ caller() if caller }} + {% endif %} +
+
+{% endmacro %} + +{# + Renders a command dialog (modal command palette). + + @param id {string} [optional] - Unique identifier for the command dialog. + @param items {array} [optional] - Array of items to render (alternative to using caller). + @param placeholder {string} [optional] [default="Type a command or search..."] - Placeholder text for the search input. + @param empty_text {string} [optional] [default="No results found."] - Text displayed when no results match the search. + @param dialog_attrs {object} [optional] - Additional HTML attributes for the dialog element. + @param input_attrs {object} [optional] - Additional HTML attributes for the search input. + @param listbox_attrs {object} [optional] - Additional HTML attributes for the listbox div. + @param open {boolean} [optional] [default=false] - Whether the command dialog should be open initially. +#} +{% macro command_dialog( + id=None, + items=None, + placeholder="Type a command or search...", + empty_text="No results found.", dialog_attrs={}, input_attrs={}, listbox_attrs={}, open=false ) %} -{% set id = id or ("command-" + (range(100000, 999999) | random | string)) %} +{% set id = id or ("command-dialog-" + (range(100000, 999999) | random | string)) %}
-
- - +
+ + +
+
-
-
- {% if items and items.length > 0 %} - {{ render_command_items(items, id ~ "-items" if id else "items") }} - {% else %} - {{ caller() if caller }} - {% endif %} + {% if items and items.length > 0 %} + {{ render_command_items(items, id ~ "-items" if id else "items") }} + {% else %} + {{ caller() if caller }} + {% endif %} +
+
{% endmacro %} @@ -107,6 +173,7 @@ data-value="{{ item.value }}" {% if item.keywords %}data-keywords="{{ item.keywords }}"{% endif %} {% if item.label %}data-label="{{ item.label }}"{% endif %} + {% if item.disabled %}aria-disabled="true"{% endif %} {% if item.attrs %} {% for key, value in item.attrs %} {{ key }}="{{ value }}" @@ -118,4 +185,3 @@ {% endif %} {% endfor %} {% endmacro %} - From 15473865b44ae05750afdc11d105b091d8ea0f8a Mon Sep 17 00:00:00 2001 From: Ronan Berder Date: Fri, 31 Oct 2025 08:56:44 +0800 Subject: [PATCH 04/11] Cleaning up button group --- docs/src/_includes/partials/sidebar.njk | 1 + docs/src/assets/styles.css | 319 ++++++++++++++---------- docs/src/components/button-group.njk | 245 ++++++++++++++++++ docs/src/components/command.njk | 10 +- src/css/basecoat.css | 79 ++++-- 5 files changed, 498 insertions(+), 156 deletions(-) create mode 100644 docs/src/components/button-group.njk diff --git a/docs/src/_includes/partials/sidebar.njk b/docs/src/_includes/partials/sidebar.njk index 14b11c8..28733cc 100644 --- a/docs/src/_includes/partials/sidebar.njk +++ b/docs/src/_includes/partials/sidebar.njk @@ -86,6 +86,7 @@ { label: "Badge", url: "/components/badge", attrs: link_attrs }, { label: "Breadcrumb", url: "/components/breadcrumb", attrs: link_attrs }, { label: "Button", url: "/components/button", attrs: link_attrs }, + { label: "Button Group", url: "/components/button-group", attrs: link_attrs }, { label: "Card", url: "/components/card", attrs: link_attrs }, { label: "Checkbox", url: "/components/checkbox", attrs: link_attrs }, { label: "Kbd", url: "/components/kbd", attrs: link_attrs }, diff --git a/docs/src/assets/styles.css b/docs/src/assets/styles.css index 98a413d..757ca65 100644 --- a/docs/src/assets/styles.css +++ b/docs/src/assets/styles.css @@ -505,6 +505,9 @@ .w-\[271px\] { width: 271px; } + .w-fit { + width: fit-content; + } .w-full { width: 100%; } @@ -622,6 +625,9 @@ .items-start { align-items: flex-start; } + .items-stretch { + align-items: stretch; + } .justify-between { justify-content: space-between; } @@ -817,6 +823,9 @@ .\!p-3\.5 { padding: calc(var(--spacing) * 3.5) !important; } + .p-0 { + padding: calc(var(--spacing) * 0); + } .p-1 { padding: calc(var(--spacing) * 1); } @@ -1843,6 +1852,149 @@ } } } +@layer components { + .badge, .badge-primary, .badge-secondary, .badge-destructive, .badge-outline { + display: inline-flex; + width: fit-content; + flex-shrink: 0; + align-items: center; + justify-content: center; + gap: calc(var(--spacing) * 1); + overflow: hidden; + border-radius: var(--radius-md); + border-style: var(--tw-border-style); + border-width: 1px; + padding-inline: calc(var(--spacing) * 2); + padding-block: calc(var(--spacing) * 0.5); + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + white-space: nowrap; + transition-property: color,box-shadow; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + &:focus-visible { + border-color: var(--color-ring); + } + &:focus-visible { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + &:focus-visible { + --tw-ring-color: var(--color-ring); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); + } + } + &[aria-invalid="true"] { + border-color: var(--color-destructive); + } + &[aria-invalid="true"] { + --tw-ring-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); + } + } + &:is(.dark *) { + &[aria-invalid="true"] { + --tw-ring-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-destructive) 40%, transparent); + } + } + } + &>svg { + pointer-events: none; + } + &>svg { + width: calc(var(--spacing) * 3); + height: calc(var(--spacing) * 3); + } + } + .badge, .badge-primary { + border-color: transparent; + background-color: var(--color-primary); + color: var(--color-primary-foreground); + a& { + &:hover { + @media (hover: hover) { + background-color: var(--color-primary); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-primary) 90%, transparent); + } + } + } + } + } + .badge-secondary { + border-color: transparent; + background-color: var(--color-secondary); + color: var(--color-secondary-foreground); + a& { + &:hover { + @media (hover: hover) { + background-color: var(--color-secondary); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-secondary) 90%, transparent); + } + } + } + } + } + .badge-destructive { + border-color: transparent; + background-color: var(--color-destructive); + color: var(--color-white); + &:focus-visible { + --tw-ring-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); + } + } + &:is(.dark *) { + background-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-destructive) 60%, transparent); + } + } + &:is(.dark *) { + &:focus-visible { + --tw-ring-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-destructive) 40%, transparent); + } + } + } + a& { + &:hover { + @media (hover: hover) { + background-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-destructive) 90%, transparent); + } + } + } + } + } + .badge-outline { + color: var(--color-foreground); + a& { + &:hover { + @media (hover: hover) { + background-color: var(--color-accent); + } + } + } + a& { + &:hover { + @media (hover: hover) { + color: var(--color-accent-foreground); + } + } + } + } +} @layer components { .btn, .btn-primary, .btn-secondary, .btn-outline, .btn-ghost, .btn-link, .btn-destructive, .btn-sm, .btn-sm-primary, .btn-sm-secondary, .btn-sm-outline, .btn-sm-ghost, .btn-sm-link, .btn-sm-destructive, .btn-lg, .btn-lg-primary, .btn-lg-secondary, .btn-lg-outline, .btn-lg-ghost, .btn-lg-link, .btn-lg-destructive, .btn-icon, .btn-icon-primary, .btn-icon-secondary, .btn-icon-outline, .btn-icon-ghost, .btn-icon-link, .btn-icon-destructive, .btn-sm-icon, .btn-sm-icon-primary, .btn-sm-icon-secondary, .btn-sm-icon-outline, .btn-sm-icon-ghost, .btn-sm-icon-link, .btn-sm-icon-destructive, .btn-lg-icon, .btn-lg-icon-primary, .btn-lg-icon-secondary, .btn-lg-icon-outline, .btn-lg-icon-ghost, .btn-lg-icon-link, .btn-lg-icon-destructive { display: inline-flex; @@ -2065,146 +2217,49 @@ } } } -@layer components { - .badge, .badge-primary, .badge-secondary, .badge-destructive, .badge-outline { - display: inline-flex; - width: fit-content; +.button-group { + isolation: isolate; + display: inline-flex; + > *:hover, > *:focus-visible, > :is(.dropdown-menu, .popover) > button:hover, > :is(.dropdown-menu, .popover) > button:focus-visible { + position: relative; + z-index: 10; + } + > hr[role='separator'] { + margin: calc(var(--spacing) * 0); + height: auto; + width: calc(var(--spacing) * 0); flex-shrink: 0; - align-items: center; - justify-content: center; - gap: calc(var(--spacing) * 1); - overflow: hidden; - border-radius: var(--radius-md); + align-self: stretch; border-style: var(--tw-border-style); border-width: 1px; - padding-inline: calc(var(--spacing) * 2); - padding-block: calc(var(--spacing) * 0.5); - font-size: var(--text-xs); - line-height: var(--tw-leading, var(--text-xs--line-height)); - --tw-font-weight: var(--font-weight-medium); - font-weight: var(--font-weight-medium); - white-space: nowrap; - transition-property: color,box-shadow; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - &:focus-visible { - border-color: var(--color-ring); + border-color: var(--color-input); + } + &:not([data-orientation='vertical']) { + > *:not(:first-child), > :is(.dropdown-menu, .popover):not(:first-child) > button { + margin-left: -1px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } - &:focus-visible { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - &:focus-visible { - --tw-ring-color: var(--color-ring); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); - } - } - &[aria-invalid="true"] { - border-color: var(--color-destructive); - } - &[aria-invalid="true"] { - --tw-ring-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); - } - } - &:is(.dark *) { - &[aria-invalid="true"] { - --tw-ring-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-destructive) 40%, transparent); - } - } - } - &>svg { - pointer-events: none; - } - &>svg { - width: calc(var(--spacing) * 3); - height: calc(var(--spacing) * 3); + > *:not(:last-child), > :is(.dropdown-menu, .popover):not(:last-child) > button { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } } - .badge, .badge-primary { - border-color: transparent; - background-color: var(--color-primary); - color: var(--color-primary-foreground); - a& { - &:hover { - @media (hover: hover) { - background-color: var(--color-primary); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-primary) 90%, transparent); - } - } - } + &[data-orientation='vertical'] { + flex-direction: column; + > hr[role='separator'] { + height: 1px; + width: auto; } - } - .badge-secondary { - border-color: transparent; - background-color: var(--color-secondary); - color: var(--color-secondary-foreground); - a& { - &:hover { - @media (hover: hover) { - background-color: var(--color-secondary); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-secondary) 90%, transparent); - } - } - } + > *:not(:first-child) { + margin-top: -1px; + margin-left: calc(var(--spacing) * 0); + border-top-left-radius: 0; + border-top-right-radius: 0; } - } - .badge-destructive { - border-color: transparent; - background-color: var(--color-destructive); - color: var(--color-white); - &:focus-visible { - --tw-ring-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); - } - } - &:is(.dark *) { - background-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-destructive) 60%, transparent); - } - } - &:is(.dark *) { - &:focus-visible { - --tw-ring-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-destructive) 40%, transparent); - } - } - } - a& { - &:hover { - @media (hover: hover) { - background-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-destructive) 90%, transparent); - } - } - } - } - } - .badge-outline { - color: var(--color-foreground); - a& { - &:hover { - @media (hover: hover) { - background-color: var(--color-accent); - } - } - } - a& { - &:hover { - @media (hover: hover) { - color: var(--color-accent-foreground); - } - } + > *:not(:last-child) { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; } } } diff --git a/docs/src/components/button-group.njk b/docs/src/components/button-group.njk new file mode 100644 index 0000000..401629b --- /dev/null +++ b/docs/src/components/button-group.njk @@ -0,0 +1,245 @@ +--- +layout: layouts/page.njk +title: Button Group +description: A container that groups related buttons together with consistent styling. +toc: + - label: Usage + id: usage + - label: Examples + id: examples + children: + - label: Orientation + id: example-orientation + - label: Nested + id: example-nested + - label: Separator + id: example-separator + - label: Dropdown Menu + id: example-dropdown-menu + - label: Popover + id: example-popover +--- + +{% from "dropdown-menu.njk" import dropdown_menu %} +{% from "popover.njk" import popover %} +{% from "macros/code_preview.njk" import code_preview %} +{% from "macros/code_block.njk" import code_block %} + +{% set code_default %} +
+ + +
+ + +
+ +
+ + {% set trigger %} + {% lucide "ellipsis" %} + {% endset %} + {% call dropdown_menu( + trigger=trigger, + trigger_attrs={"class": "btn-icon-outline"}, + popover_attrs={"data-align": "end"} + ) %} +
+ {% lucide "mail-check" %} + Mark as Read +
+
+ {% lucide "archive" %} + Archive +
+
+
+ {% lucide "clock" %} + Snooze +
+
+ {% lucide "calendar" %} + Add to Calendar +
+
+ {% lucide "list-filter-plus" %} + Add to List +
+
+ + {% endcall %} +
+{% endset %} + +{{ code_preview("button-group-default", code_default | prettyHtml) }} + +

Usage

+ +{{ code_block(code_default | prettyHtml, "html") }} + +

Examples

+ +

Orientation

+ +
+

Use data-orientation="vertical" to stack buttons vertically.

+
+ +{% set code_orientation %} +
+ + +
+{% endset %} + +{{ code_preview("button-group-orientation", code_orientation | prettyHtml) }} + +

Size

+ +{% set code_size %} +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+{% endset %} + +{{ code_preview("button-group-size", code_size | prettyHtml) }} + +

Nested

+ +{% set code_nested %} +
+
+ + + + + +
+
+ + +
+
+{% endset %} + +{{ code_preview("button-group-nested", code_nested | prettyHtml) }} + +

Separator

+ +
+

Use <hr role="separator"> to visually divide buttons within a group.

+
+ +{% set code_separator %} +
+ +
+ +
+{% endset %} + +{{ code_preview("button-group-separator", code_separator | prettyHtml) }} + +

Dropdown Menu

+ +{% set code_dropdown_menu %} +
+ + {% set trigger %} + {% lucide "chevron-down" %} + {% endset %} + {% call dropdown_menu( + trigger=trigger, + trigger_attrs={"class": "btn-icon-outline"}, + popover_attrs={"data-align": "end"} + ) %} +
+ {% lucide "volume-off" %} + Mute Conversation +
+
+ {% lucide "check" %} + Mark as Read +
+
+ {% lucide "triangle-alert" %} + Report Conversation +
+
+ {% lucide "user-round-x" %} + Block User +
+
+ {% lucide "share" %} + Share Conversation +
+
+ {% lucide "copy" %} + Copy Conversation +
+
+ + {% endcall %} +
+{% endset %} + +{{ code_preview("button-group-dropdown-menu", code_dropdown_menu | prettyHtml) }} + +

Popover

+ +{% set code_popover %} +
+ + {% call popover( + trigger=trigger, + trigger_attrs={"class": "btn-icon-outline"}, + popover_attrs={"class": "w-72 p-0", "data-align": "end"} + ) %} +
Agent Tasks
+
+ +

Start a new task with Copilot

+

+ Describe your task in natural language. Copilot will work in the + background and open a pull request for your review. +

+
+ {% endcall %} +
+{% endset %} + +{{ code_preview("button-group-popover", code_popover | prettyHtml) }} \ No newline at end of file diff --git a/docs/src/components/command.njk b/docs/src/components/command.njk index 58797d4..ca2be6d 100644 --- a/docs/src/components/command.njk +++ b/docs/src/components/command.njk @@ -19,11 +19,11 @@ toc: {% macro command_items(suggestions_id="suggestions", settings_id="settings") %}
Suggestions -
+
{% lucide "calendar" %} Calendar
-
+
{% lucide "smile" %} Search Emoji
@@ -35,17 +35,17 @@ toc:
Settings -
+
{% lucide "user" %} Profile ⌘P
-
+
{% lucide "credit-card" %} Billing ⌘B
-
+
{% lucide "settings" %} Settings ⌘S diff --git a/src/css/basecoat.css b/src/css/basecoat.css index dfdce7a..a83b4f4 100644 --- a/src/css/basecoat.css +++ b/src/css/basecoat.css @@ -181,6 +181,30 @@ } } +/* Badge */ +@layer components { + .badge, + .badge-primary, + .badge-secondary, + .badge-destructive, + .badge-outline { + @apply inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden; + } + .badge, + .badge-primary { + @apply border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90; + } + .badge-secondary { + @apply border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90; + } + .badge-destructive { + @apply border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60; + } + .badge-outline { + @apply text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground; + } +} + /* Button */ @layer components { .btn, @@ -359,27 +383,44 @@ } } -/* Badge */ -@layer components { - .badge, - .badge-primary, - .badge-secondary, - .badge-destructive, - .badge-outline { - @apply inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden; +/* Button Group */ +.button-group { + @apply inline-flex isolate; + + > *:hover, + > *:focus-visible, + > :is(.dropdown-menu, .popover) > button:hover, + > :is(.dropdown-menu, .popover) > button:focus-visible { + @apply relative z-10; } - .badge, - .badge-primary { - @apply border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90; + + > hr[role='separator'] { + @apply w-0 h-auto self-stretch border border-input shrink-0 m-0; } - .badge-secondary { - @apply border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90; - } - .badge-destructive { - @apply border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60; - } - .badge-outline { - @apply text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground; + + &:not([data-orientation='vertical']) { + > *:not(:first-child), + > :is(.dropdown-menu, .popover):not(:first-child) > button { + @apply -ml-px rounded-l-none; + } + > *:not(:last-child), + > :is(.dropdown-menu, .popover):not(:last-child) > button { + @apply rounded-r-none; + } + } + &[data-orientation='vertical'] { + @apply flex-col; + + > hr[role='separator'] { + @apply w-auto h-px; + } + + > *:not(:first-child) { + @apply -mt-px ml-0 rounded-t-none; + } + > *:not(:last-child) { + @apply rounded-b-none; + } } } From ab44d6d48afc0535fe22f78f0ea2b1c27c1a755a Mon Sep 17 00:00:00 2001 From: Ronan Berder Date: Sun, 2 Nov 2025 11:56:40 +0800 Subject: [PATCH 05/11] Adding empty, field and item, working on input group --- AGENTS.md | 18 + docs/css/custom.css | 2 +- docs/css/styles.css | 138 ++++++- docs/src/_includes/layouts/base.njk | 1 - docs/src/_includes/macros/code_block.njk | 2 +- docs/src/_includes/partials/sidebar.njk | 22 +- docs/src/assets/styles.css | 471 +++++++++++++++++++++-- docs/src/components/accordion.njk | 4 +- docs/src/components/alert.njk | 17 +- docs/src/components/avatar.njk | 21 +- docs/src/components/breadcrumb.njk | 17 +- docs/src/components/button-group.njk | 12 +- docs/src/components/command.njk | 182 ++++++++- docs/src/components/dialog.njk | 4 +- docs/src/components/empty.njk | 209 ++++++++++ docs/src/components/field.njk | 316 +++++++++++++++ docs/src/components/input-group.njk | 247 ++++++++++++ docs/src/components/item.njk | 311 +++++++++++++++ docs/src/components/kbd.njk | 10 +- package-lock.json | 8 +- package.json | 3 +- packages/cli/package.json | 3 +- src/css/basecoat.css | 105 ++--- src/jinja/command.html.jinja | 96 ++--- src/jinja/dialog.html.jinja | 6 +- src/js/command.js | 117 +++--- src/js/select.js | 9 +- src/nunjucks/command.njk | 96 ++--- src/nunjucks/dialog.njk | 6 +- 29 files changed, 2154 insertions(+), 299 deletions(-) create mode 100644 docs/src/components/empty.njk create mode 100644 docs/src/components/field.njk create mode 100644 docs/src/components/input-group.njk create mode 100644 docs/src/components/item.njk diff --git a/AGENTS.md b/AGENTS.md index 754cfdc..1247087 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -38,6 +38,24 @@ Basecoat is a vanilla JavaScript/HTML/CSS port of shadcn/ui components. It reuse - Filenames for assets: kebab-case (e.g., `dropdown-menu.js`, `basecoat.cdn.css`). - JS naming: `camelCase` for vars/functions; `PascalCase` for DOM classes and exported component names when applicable. +## Design Principles + +- **Minimal code**: Prefer native HTML elements and browser behavior over JavaScript abstractions +- **Accessibility-first**: Semantic HTML, proper ARIA attributes, keyboard navigation +- **CSS patterns**: + - Use `border` for lines/separators (not `background` on `
`) + - Use `:is()` and `:has()` for compact selectors + - Use `isolation: isolate` to contain z-index stacking contexts + - Use `data-*` attributes for styling states, `aria-*` for accessibility semantics +- **Component patterns**: + - Dialog variants use wrapper classes (e.g., `.command-dialog` wraps `.command`) + - JavaScript components register with `window.basecoat.register()` + - Emit custom events for user actions (e.g., `command:select`) + - Filter disabled options (`aria-disabled="true"`) from all interactions +- **When NOT to create a component**: + - If it's just composition of existing elements (users can do it with standard HTML/Tailwind) + - If behavior is fully native (e.g., fieldset, legend) + ## Common tasks - Update a component's CSS/JS: Edit `src/css/basecoat.css` and/or `src/js/*.js`. diff --git a/docs/css/custom.css b/docs/css/custom.css index 37f4d57..44236ba 100644 --- a/docs/css/custom.css +++ b/docs/css/custom.css @@ -27,7 +27,7 @@ @apply font-medium underline underline-offset-4; } code:not(pre > code) { - @apply relative rounded-md bg-muted px-[0.3rem] py-[0.2rem] font-mono text-sm; + @apply relative rounded-md bg-muted/50 px-[0.3rem] py-[0.2rem] font-mono text-sm; } blockquote { @apply border-l-4 border-border pl-4; diff --git a/docs/css/styles.css b/docs/css/styles.css index 029084f..c1ddbaf 100644 --- a/docs/css/styles.css +++ b/docs/css/styles.css @@ -5,4 +5,140 @@ @import "./themes/claude.css"; @import "./themes/doom-64.css"; -@import "./themes/supabase.css"; \ No newline at end of file +@import "./themes/supabase.css"; + + +/* @theme inline { + --breakpoint-3xl: 1600px; + --breakpoint-4xl: 2000px; + --font-sans: var(--font-sans); + --font-mono: var(--font-mono); + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + --color-background: var(--background); + --color-foreground: var(--foreground); + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + --color-destructive: var(--destructive); + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); + --color-chart-1: var(--chart-1); + --color-chart-2: var(--chart-2); + --color-chart-3: var(--chart-3); + --color-chart-4: var(--chart-4); + --color-chart-5: var(--chart-5); + --color-sidebar: var(--sidebar); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-ring: var(--sidebar-ring); + --color-surface: var(--surface); + --color-surface-foreground: var(--surface-foreground); + --color-code: var(--code); + --color-code-foreground: var(--code-foreground); + --color-code-highlight: var(--code-highlight); + --color-code-number: var(--code-number); + --color-selection: var(--selection); + --color-selection-foreground: var(--selection-foreground); + } + + :root { + --radius: 0.625rem; + --background: oklch(1 0 0); + --foreground: oklch(0.145 0 0); + --card: oklch(1 0 0); + --card-foreground: oklch(0.145 0 0); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.145 0 0); + --primary: oklch(0.205 0 0); + --primary-foreground: oklch(0.985 0 0); + --secondary: oklch(0.97 0 0); + --secondary-foreground: oklch(0.205 0 0); + --muted: oklch(0.97 0 0); + --muted-foreground: oklch(0.556 0 0); + --accent: oklch(0.97 0 0); + --accent-foreground: oklch(0.205 0 0); + --destructive: oklch(0.577 0.245 27.325); + --border: oklch(0.922 0 0); + --input: oklch(0.922 0 0); + --ring: oklch(0.708 0 0); + --chart-1: var(--color-blue-300); + --chart-2: var(--color-blue-500); + --chart-3: var(--color-blue-600); + --chart-4: var(--color-blue-700); + --chart-5: var(--color-blue-800); + --sidebar: oklch(0.985 0 0); + --sidebar-foreground: oklch(0.145 0 0); + --sidebar-primary: oklch(0.205 0 0); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.97 0 0); + --sidebar-accent-foreground: oklch(0.205 0 0); + --sidebar-border: oklch(0.922 0 0); + --sidebar-ring: oklch(0.708 0 0); + --surface: oklch(0.98 0 0); + --surface-foreground: var(--foreground); + --code: var(--surface); + --code-foreground: var(--surface-foreground); + --code-highlight: oklch(0.96 0 0); + --code-number: oklch(0.56 0 0); + --selection: oklch(0.145 0 0); + --selection-foreground: oklch(1 0 0); + } + + .dark { + --background: oklch(0.145 0 0); + --foreground: oklch(0.985 0 0); + --card: oklch(0.205 0 0); + --card-foreground: oklch(0.985 0 0); + --popover: oklch(0.269 0 0); + --popover-foreground: oklch(0.985 0 0); + --primary: oklch(0.922 0 0); + --primary-foreground: oklch(0.205 0 0); + --secondary: oklch(0.269 0 0); + --secondary-foreground: oklch(0.985 0 0); + --muted: oklch(0.269 0 0); + --muted-foreground: oklch(0.708 0 0); + --accent: oklch(0.371 0 0); + --accent-foreground: oklch(0.985 0 0); + --destructive: oklch(0.704 0.191 22.216); + --border: oklch(1 0 0 / 10%); + --input: oklch(1 0 0 / 15%); + --ring: oklch(0.556 0 0); + --chart-1: var(--color-blue-300); + --chart-2: var(--color-blue-500); + --chart-3: var(--color-blue-600); + --chart-4: var(--color-blue-700); + --chart-5: var(--color-blue-800); + --sidebar: oklch(0.205 0 0); + --sidebar-foreground: oklch(0.985 0 0); + --sidebar-primary: oklch(0.488 0.243 264.376); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.269 0 0); + --sidebar-accent-foreground: oklch(0.985 0 0); + --sidebar-border: oklch(1 0 0 / 10%); + --sidebar-ring: oklch(0.439 0 0); + --surface: oklch(0.2 0 0); + --surface-foreground: oklch(0.708 0 0); + --code: var(--surface); + --code-foreground: var(--surface-foreground); + --code-highlight: oklch(0.27 0 0); + --code-number: oklch(0.72 0 0); + --selection: oklch(0.922 0 0); + --selection-foreground: oklch(0.205 0 0); + } */ \ No newline at end of file diff --git a/docs/src/_includes/layouts/base.njk b/docs/src/_includes/layouts/base.njk index fac8ac7..d93d3c5 100644 --- a/docs/src/_includes/layouts/base.njk +++ b/docs/src/_includes/layouts/base.njk @@ -99,7 +99,6 @@ {% if head %}{{ head | safe }}{% endif %} diff --git a/docs/src/_includes/macros/code_block.njk b/docs/src/_includes/macros/code_block.njk index af87e0a..5495c6c 100644 --- a/docs/src/_includes/macros/code_block.njk +++ b/docs/src/_includes/macros/code_block.njk @@ -1,6 +1,6 @@ {% macro code_block(code, language="html", class="my-4") %}
-
{{- code | escape -}}
+
{{- code | escape -}}
+ +
+{% endset %} +{{ code_block(code_simple | prettyHtml, "html") }}

Examples

@@ -216,7 +224,7 @@ toc: {{ code_preview("button-group-dropdown-menu", code_dropdown_menu | prettyHtml) }} -

Popover

+

Popover

{% set code_popover %}
diff --git a/docs/src/components/command.njk b/docs/src/components/command.njk index ca2be6d..f98c155 100644 --- a/docs/src/components/command.njk +++ b/docs/src/components/command.njk @@ -5,6 +5,20 @@ description: Fast, composable command menu for quick navigation and actions. toc: - label: Usage id: usage + children: + - label: HTML + JavaScript + id: usage-html-js + children: + - label: "Step 1: Include the JavaScript files" + id: usage-html-js-1 + - label: "Step 2: Add your command HTML" + id: usage-html-js-2 + - label: HTML structure + id: usage-html-js-3 + - label: JavaScript events + id: usage-html-js-4 + - label: Jinja and Nunjucks + id: usage-macro - label: Examples id: examples children: @@ -19,15 +33,15 @@ toc: {% macro command_items(suggestions_id="suggestions", settings_id="settings") %}
Suggestions -
+
{% lucide "calendar" %} Calendar
-
+
{% lucide "smile" %} Search Emoji
-
+
{% lucide "calculator" %} Calculator
@@ -35,17 +49,17 @@ toc:
Settings -
+
{% lucide "user" %} Profile ⌘P
-
+
{% lucide "credit-card" %} Billing ⌘B
-
+
{% lucide "settings" %} Settings ⌘S @@ -66,14 +80,152 @@ toc:

Usage

+

HTML + JavaScript

+ +

Step 1: Include the JavaScript files

+ +
+

You can either include the JavaScript file for all the components, or just the one for this component by adding this to the <head> of your page:

+
+ +{% set code_script %} +{% endset %} +{{ code_block(code_script | prettyHtml, "html") }} + + + +

Step 2: Add your command HTML

+ +
+

You can use the command menu standalone:

+
+ {{ code_block(code_standalone | prettyHtml, "html") }} +
+

Wrap the command menu in a <dialog class="command-dialog"> to display in a dialog:

+
+ +{% set code_dialog %} + +
+ +
+
+{% endset %} + +{{ code_block(code_dialog | prettyHtml, "html") }} + +

HTML structure

+ +
+
+
<dialog class="command-dialog"> Optional
+
For dialog variant, wraps a <div class="command"> to display as a modal. Uses native <dialog> behavior and requires aria-label or aria-labelledby for accessibility. +
+
<div class="command">
+
Wraps around the entire command component. Can be used standalone or inside a dialog. +
+
<header>
+
Contains the search input to filter command options. +
+
<input type="text">
+
The search input. Should have: +
    +
  • role="combobox": indicates the input controls a menu with filtering
  • +
  • aria-expanded="true": the menu is always expanded
  • +
  • aria-controls="{ MENU_ID }": points to the menu's id
  • +
+
+
+
+
<div role="menu">
+
The menu containing the command items. Should have id="{ MENU_ID }" refered to by the input's aria-controls attribute. +
+
<div role="menuitem">
+
Command item that triggers an action when clicked. In a command-dialog, clicking a menuitem automatically closes the dialog unless the data-keep-command-open attribute is present. Optional attributes: +
    +
  • data-label: custom label for filtering (if different from text content)
  • +
  • data-keywords: additional keywords for enhanced filtering
  • +
  • aria-disabled="true": marks item as disabled (excluded from keyboard navigation and filtering)
  • +
+
+
<hr role="separator"> Optional
+
Separator between groups/items. Hidden when filtering is active.
+
<div role="group"> Optional
+
Group of items, can have aria-labelledby attribute to link to a heading.
+
<span role="heading">
+
Group heading, must have an id attribute if you use the aria-labelledby attribute on the group.
+
+
+
+
+
+
+
+
+ +

JavaScript events

+ +
+
+
basecoat:initialized
+
Once the component is fully initialized, it dispatches a custom (non-bubbling) basecoat:initialized event on itself.
+
+
+ +

Jinja and Nunjucks

+ +
+

You can use the command() or command_dialog() Nunjucks or Jinja macros for this component.

+
+ + + +{% set raw_code %}{% raw %}{% call command() %} +
+ ... + Calendar +
+
+ ... + Settings +
+{% endcall %}{% endraw %}{% endset %} +{{ code_block(raw_code, "jinja") }} +

Examples

Dialog

-

Press ⌘J

+

You can use some simple JavaScript to open the command menu with a keyboard shortcut (in this case ⌘J).

{% set code_dialog %} @@ -83,7 +235,7 @@ toc: onclick="document.getElementById('demo-command-dialog').showModal()" > Open command menu - ⌘ J + ⌘J {% call command_dialog(id="demo-command-dialog") %} @@ -103,19 +255,7 @@ toc: } } }); - - const cmdDialog = document.getElementById('demo-command-dialog'); - cmdDialog?.addEventListener('command:select', (e) => { - console.log('Selected command:', e.detail.value); - cmdDialog.close(); - }); {% endset %} -{{ code_preview("command-dialog", code_dialog | prettyHtml) }} - -
-

To show the command menu in a dialog, use the command_dialog macro.

-
- -{{ code_block(code_dialog | prettyHtml, "html") }} +{{ code_preview("command-dialog", code_dialog | prettyHtml) }} \ No newline at end of file diff --git a/docs/src/components/dialog.njk b/docs/src/components/dialog.njk index a734cec..dafa34c 100644 --- a/docs/src/components/dialog.njk +++ b/docs/src/components/dialog.njk @@ -69,8 +69,8 @@ toc:
  • onclick: closes the dialog when the backdrop is clicked.
  • -
    <article>
    -
    Wraps the content of the dialog. It includes an onclick attribute to prevent from closing the dialog if we have an onclick event on <dialog>. +
    <div>
    +
    Wraps the content of the dialog.
    <header>
    Contains the header for the dialog: diff --git a/docs/src/components/empty.njk b/docs/src/components/empty.njk new file mode 100644 index 0000000..0da962b --- /dev/null +++ b/docs/src/components/empty.njk @@ -0,0 +1,209 @@ +--- +layout: layouts/page.njk +title: Empty +description: Display empty states with icons, titles, descriptions, and actions. +toc: + - label: Usage + id: usage + children: + - label: HTML structure + id: html-structure + - label: Examples + id: examples + children: + - label: Outline + id: example-outline + - label: Avatar + id: example-avatar + - label: Avatar Group + id: example-avatar-group + - label: Input Group + id: example-input-group +--- + +{% from "macros/code_preview.njk" import code_preview %} +{% from "macros/code_block.njk" import code_block %} + +
    + {% lucide "circle-alert" %} +

    There is no dedicated Empty component in Basecoat.

    +
    + +{% set code_default %} +
    +
    +
    + {% lucide "folder-code" %} +
    +

    No Projects Yet

    +

    + You haven't created any projects yet. Get started by creating your first project. +

    +
    +
    +
    + + +
    +
    + + Learn More + {% lucide "arrow-up-right" %} + +
    +{% endset %} + +{{ code_preview("empty-default", code_default) }} + +

    Usage

    + +
    +

    The example simply uses Tailwind utility classes to create an empty state layout.

    +
    + +{{ code_block(code_default) }} + +

    HTML structure

    + +
    +
    +
    <div>
    +
    Main container with centered layout utilities: +
      +
    • flex flex-col items-center justify-center: centers content
    • +
    • gap-6: spacing between sections
    • +
    • p-6 md:p-12: responsive padding
    • +
    • text-center text-balance: centered text with better wrapping
    • +
    +
    +
    <header>
    +
    Header section containing the icon/avatar, title, and description: +
      +
    • max-w-sm: constrains width for readability
    • +
    • gap-2 or gap-3: spacing between elements
    • +
    +
    +
    <div> Optional
    +
    Media container for icon or avatar: +
      +
    • For icons: bg-muted text-foreground size-10 rounded-lg
    • +
    • For avatars: size-12 rounded-full grayscale
    • +
    • For avatar groups: flex -space-x-2 with ring utilities
    • +
    +
    +
    <h3>
    +
    Title with text-lg font-medium tracking-tight
    +
    <p>
    +
    Description with text-muted-foreground text-sm/relaxed
    +
    +
    +
    <section> Optional
    +
    Content area for actions (buttons, inputs, etc.): +
      +
    • max-w-sm or max-w-md: constrains width
    • +
    • flex flex-col items-center gap-3: vertical layout with spacing
    • +
    +
    +
    <a> or other elements Optional
    +
    Additional links or actions outside the main content section
    +
    +
    +
    +
    + +

    Examples

    + +

    Outline

    + +{% set code_outline %} +
    +
    +
    + {% lucide "cloud" %} +
    +

    Cloud Storage Empty

    +

    + Upload files to your cloud storage to access them anywhere. +

    +
    +
    + +
    +
    +{% endset %} + +{{ code_preview("empty-outline", code_outline) }} + +

    Avatar

    + +{% set code_avatar %} +
    +
    +
    + @shadcn +
    +

    User Offline

    +

    + This user is currently offline. You can leave a message to notify them or try again later. +

    +
    +
    + +
    +
    +{% endset %} + +{{ code_preview("empty-avatar", code_avatar) }} + +

    Avatar Group

    + +{% set code_avatar_group %} +
    +
    +
    +
    + @hunvreus + @shadcn + @adamwathan +
    +
    +

    No Team Members

    +

    + Invite your team to collaborate on this project. +

    +
    +
    + +
    +
    +{% endset %} + +{{ code_preview("empty-avatar-group", code_avatar_group) }} + +

    Input Group

    + +{% set code_input_group %} +
    +
    +

    404 - Not Found

    +

    + The page you're looking for doesn't exist. Try searching for what you need below. +

    +
    +
    +
    + + {% lucide "search" , { "class": "absolute left-3 top-1/2 -translate-y-1/2 pointer-events-none text-muted-foreground pointer-events-none shrink-0 size-4" } %} + / +
    +

    + Need help? Contact support +

    +
    +
    +{% endset %} + +{{ code_preview("empty-input-group", code_input_group) }} \ No newline at end of file diff --git a/docs/src/components/field.njk b/docs/src/components/field.njk new file mode 100644 index 0000000..6bf8bd4 --- /dev/null +++ b/docs/src/components/field.njk @@ -0,0 +1,316 @@ +--- +layout: layouts/page.njk +title: Field +description: Combine labels, controls, and help text to compose accessible form fields. +toc: + - label: Usage + id: usage + - label: Examples + id: examples + children: + - label: Input + id: example-input + - label: Textarea + id: example-textarea + - label: Select + id: example-select + - label: Fieldset + id: example-fieldset + - label: Checkbox + id: example-checkbox + - label: Radio Group + id: example-radio + - label: Switch + id: example-switch +--- + +{% from "macros/code_preview.njk" import code_preview %} +{% from "macros/code_block.njk" import code_block %} + +{% set code_demo %} +
    +
    + Payment Method +

    All transactions are secure and encrypted

    + +
    + + +
    + +
    + + +

    Enter your 16-digit card number

    +
    + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + + +
    + Billing Address +

    The billing address associated with your payment method

    + +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    + + +
    +
    +{% endset %} + +{{ code_preview("field-demo", code_demo) }} + +

    Usage

    + +
    +

    Field provides semantic HTML patterns for accessible forms:

    +
      +
    • <fieldset> and <legend> for grouping related fields
    • +
    • role="group" with .field class for individual fields
    • +
    • .description class for helper text
    • +
    • .error class with role="alert" for error messages
    • +
    • aria-describedby to associate descriptions and errors with inputs
    • +
    +
    + +{{ code_block(code) }} + +

    Examples

    + +

    Input

    + +{% set code_input %} +
    +
    + + +

    Choose a unique username for your account

    +
    + +
    + + +

    Must be at least 8 characters

    + +
    +
    +{% endset %} + +{{ code_preview("field-input", code_input) }} + +

    Textarea

    + +{% set code_textarea %} +
    + + +

    Brief description for your profile (max 200 characters)

    +
    +{% endset %} + +{{ code_preview("field-textarea", code_textarea) }} + +

    Select

    + +{% set code_select %} +
    + + +

    Choose your country of residence

    +
    +{% endset %} + +{{ code_preview("field-select", code_select) }} + +

    Fieldset

    + +
    +

    Group related fields with <fieldset class="fieldset"> and <legend>.

    +
    + +{% set code_fieldset %} +
    +
    + Profile +

    This information will be displayed on your profile

    + +
    + + +

    Your first and last name

    +
    + +
    + + + +
    + +
    + + +
    +
    + + +
    +{% endset %} + +{{ code_preview("field-fieldset", code_fieldset) }} + +

    Checkbox

    + +{% set code_checkbox %} +
    + Tasks +

    Select the tasks you want to receive updates for

    + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    +{% endset %} + +{{ code_preview("field-checkbox", code_checkbox) }} + +

    Radio Group

    + +{% set code_radio %} +
    + Notify me about +

    Choose which notifications you want to receive

    + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    +{% endset %} + +{{ code_preview("field-radio", code_radio) }} + +

    Switch

    + +
    +

    Use horizontal layout for switches by wrapping in a flex container.

    +
    + +{% set code_switch %} +
    + Notifications +

    Configure how you receive notifications

    + +
    +
    +
    + +

    Receive emails about new products and features

    +
    + +
    + +
    +
    + +

    Receive emails about account security

    +
    + +
    +
    +
    +{% endset %} + +{{ code_preview("field-switch", code_switch) }} + +

    Accessibility

    + +
    +
      +
    • Always use <label> elements with for attribute matching input id
    • +
    • Associate helper text and errors using aria-describedby on the input
    • +
    • Use aria-invalid="true" on inputs with errors
    • +
    • Use role="alert" on error messages for screen reader announcements
    • +
    • Group related fields with <fieldset> and <legend>
    • +
    • Use role="group" for individual field wrappers
    • +
    +
    + + + diff --git a/docs/src/components/input-group.njk b/docs/src/components/input-group.njk new file mode 100644 index 0000000..c5a89da --- /dev/null +++ b/docs/src/components/input-group.njk @@ -0,0 +1,247 @@ +--- +layout: layouts/page.njk +title: Input Group +description: Display additional information or actions alongside inputs using simple HTML patterns. +toc: + - label: Usage + id: usage + - label: Examples + id: examples + children: + - label: Icon Prefix + id: example-icon-prefix + - label: Icon Suffix + id: example-icon-suffix + - label: Text Prefix/Suffix + id: example-text + - label: Button Suffix + id: example-button + - label: Multiple Elements + id: example-multiple + - label: Textarea + id: example-textarea +--- + +{% from "macros/code_preview.njk" import code_preview %} +{% from "macros/code_block.njk" import code_block %} + +{% set code_default %} +
    + +
    + {% lucide "search" %} +
    +
    +{% endset %} + +{{ code_preview("input-group-default", code_default) }} + +

    Usage

    + +
    +

    Input groups are achieved through composition using relative positioning and Tailwind utilities. No special component needed - just wrap your input with a positioned container and add your icons, text, or buttons.

    +

    Key patterns:

    +
      +
    • Use relative wrapper around input
    • +
    • Position content with absolute + top-1/2 -translate-y-1/2
    • +
    • Add padding to input (pl-* or pr-*) to make room for content
    • +
    • Use pointer-events-none for decorative icons
    • +
    +
    + +{{ code_block(code_default) }} + +

    Examples

    + +

    Icon Prefix

    + +
    +

    Add an icon at the start of the input field.

    +
    + +{% set code_icon_prefix %} +
    +
    + +
    + {% lucide "search" %} +
    +
    + +
    + +
    + {% lucide "mail" %} +
    +
    +
    +{% endset %} + +{{ code_preview("input-group-icon-prefix", code_icon_prefix) }} + +

    Icon Suffix

    + +
    +

    Add an icon at the end of the input field.

    +
    + +{% set code_icon_suffix %} +
    +
    + +
    + {% lucide "check" %} +
    +
    + +
    + +
    + {% lucide "credit-card" %} + {% lucide "info" %} +
    +
    +
    +{% endset %} + +{{ code_preview("input-group-icon-suffix", code_icon_suffix) }} + +

    Text Prefix/Suffix

    + +
    +

    Display text before or after the input value.

    +
    + +{% set code_text %} +
    +
    + +
    + $ +
    +
    + USD +
    +
    + +
    + +
    + https:// +
    +
    + +
    + +
    + @company.com +
    +
    +
    +{% endset %} + +{{ code_preview("input-group-text", code_text) }} + +

    Button Suffix

    + +
    +

    Add interactive buttons inside the input.

    +
    + +{% set code_button %} +
    +
    + + +
    + +
    + + +
    + +
    + + +
    +
    +{% endset %} + +{{ code_preview("input-group-button", code_button) }} + +

    Multiple Elements

    + +
    +

    Combine multiple icons, text, and buttons.

    +
    + +{% set code_multiple %} +
    +
    + +
    + {% lucide "search" %} +
    +
    + ⌘K +
    +
    + +
    + +
    + https:// +
    + +
    +
    +{% endset %} + +{{ code_preview("input-group-multiple", code_multiple) }} + +

    Textarea

    + +
    +

    Add buttons to textareas for actions like submit.

    +
    + +{% set code_textarea %} +
    +
    + + +
    + +
    + +
    + 120 characters left + +
    +
    +
    +{% endset %} + +{{ code_preview("input-group-textarea", code_textarea) }} + +

    Accessibility

    + +
    +
      +
    • Use pointer-events-none for decorative icons that shouldn't be interactive
    • +
    • Ensure buttons have proper aria-label or visible text
    • +
    • Maintain sufficient padding so text doesn't overlap with icons/buttons
    • +
    • Use semantic button types (type="button" vs type="submit")
    • +
    +
    + diff --git a/docs/src/components/item.njk b/docs/src/components/item.njk new file mode 100644 index 0000000..54afdda --- /dev/null +++ b/docs/src/components/item.njk @@ -0,0 +1,311 @@ +--- +layout: layouts/page.njk +title: Item +description: A versatile component that you can use to display any content. +toc: + - label: Examples + id: examples + children: + - label: Variants + id: example-variants + - label: Size + id: example-size + - label: Icon + id: example-icon + - label: Avatar + id: example-avatar + - label: Image + id: example-image + - label: Group + id: example-group + - label: Header + id: example-header + - label: Link + id: example-link +--- + +{% from "macros/code_block.njk" import code_block %} +{% from "macros/code_preview.njk" import code_preview %} + +
    + {% lucide "circle-alert" %} +

    There is no dedicated Item component in Basecoat.

    +
    + +{% set code_basic %} +
    +
    +
    +

    Basic Item

    +

    A simple item with title and description.

    +
    + +
    + + +
    + {% lucide "badge-check" %} +
    +
    +

    Your profile has been verified.

    +
    +
    + {% lucide "chevron-right" %} +
    +
    +
    +{% endset %} + +{{ code_preview("item-basic", code_basic | prettyHtml, class="w-full max-w-md") }} + +

    Examples

    + +

    Variants

    + +{% set code_variants %} +
    +
    +
    +

    Default Variant

    +

    Standard styling with subtle background and borders.

    +
    + +
    + +
    +
    +

    Outline Variant

    +

    Outlined style with clear borders and transparent background.

    +
    + +
    + +
    +
    +

    Muted Variant

    +

    Subdued appearance with muted colors for secondary content.

    +
    + +
    +
    +{% endset %} + +{{ code_preview("item-variants", code_variants) }} + +

    Size

    + +
    +

    Use different padding and gap sizes for compact or spacious layouts.

    +
    + +{{ code_preview("item-size", code_basic) }} + +

    Icon

    + +{% set code_icon %} +
    +
    + {% lucide "shield-alert" %} +
    +
    +

    Security Alert

    +

    New login detected from unknown device.

    +
    + +
    +{% endset %} + +{{ code_preview("item-icon", code_icon, class="max-w-lg") }} + + +

    Avatar

    + +{% set code_avatar %} +
    +
    + hunvreus +
    +

    hunvreus

    +

    Last seen 5 months ago

    +
    + +
    + +
    +
    + @hunvreus + @shadcn + @adamwathan +
    +
    +

    No Team Members

    +

    Invite your team to collaborate on this project.

    +
    + +
    +
    +{% endset %} + +{{ code_preview("item-avatar", code_avatar, class="w-full max-w-lg") }} + +

    Image

    + +{% set code_image %} + +{% endset %} + +{{ code_preview("item-image", code_image) }} + + +

    Group

    + +{% set code_group %} +
    +
    + Ronan Berder +
    +

    hunvreus

    +

    hunvreus@gmail.com

    +
    + +
    + + + +
    + shadcn +
    +

    shadcn

    +

    shadcn@vercel.com

    +
    + +
    + + + +
    + Adam Wathan +
    +

    adamwathan

    +

    adam.wathan@gmail.com

    +
    + +
    +
    +{% endset %} + +{{ code_preview("item-group", code_group, class="w-full max-w-md") }} + + +

    Header

    + +{% set code_header %} +
    +
    + v0-1.5-sm +
    +

    v0-1.5-sm

    +

    Everyday tasks and UI generation.

    +
    +
    + +
    + v0-1.5-lg +
    +

    v0-1.5-lg

    +

    Advanced thinking or reasoning.

    +
    +
    + +
    + v0-2.0-mini +
    +

    v0-2.0-mini

    +

    Open Source model for everyone.

    +
    +
    +
    +{% endset %} + +{{ code_preview("item-header", code_header) }} + + + +
    +

    Items can be rendered as links by using an <a> element. Hover and focus states are applied automatically.

    +
    + +{% set code_link %} + +{% endset %} + +{{ code_preview("item-link", code_link, class="w-full max-w-md") }} \ No newline at end of file diff --git a/docs/src/components/kbd.njk b/docs/src/components/kbd.njk index e545a65..5abbb02 100644 --- a/docs/src/components/kbd.njk +++ b/docs/src/components/kbd.njk @@ -37,7 +37,15 @@ toc:

    Usage

    -{{ code_block(code_html | prettyHtml, "html") }} +
    +

    Simply use the <kbd> element:

    +
    + +{% set code_simple %} +⌘K +{% endset %} + +{{ code_block(code_simple | prettyHtml, "html") }}

    Examples

    diff --git a/package-lock.json b/package-lock.json index 525ffcb..df412f2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "basecoat", - "version": "0.2.0-beta.1", + "version": "0.3.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "basecoat", - "version": "0.2.0-beta.1", + "version": "0.3.2", "license": "MIT", "workspaces": [ "packages/*" @@ -4337,7 +4337,7 @@ }, "packages/cli": { "name": "basecoat-cli", - "version": "0.2.0-beta.1", + "version": "0.3.2", "license": "MIT", "dependencies": { "commander": "^13.1.0", @@ -4350,7 +4350,7 @@ }, "packages/css": { "name": "basecoat-css", - "version": "0.2.0-beta.1", + "version": "0.3.2", "license": "MIT" } } diff --git a/package.json b/package.json index 3fd1c46..afc3f99 100644 --- a/package.json +++ b/package.json @@ -21,8 +21,7 @@ "css", "html", "jinja", - "nunjucks", - "alpinejs" + "nunjucks" ], "license": "MIT", "repository": { diff --git a/packages/cli/package.json b/packages/cli/package.json index af8a3dd..4b59715 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -30,8 +30,7 @@ "css", "html", "jinja", - "nunjucks", - "alpinejs" + "nunjucks" ], "repository": { "type": "git", diff --git a/src/css/basecoat.css b/src/css/basecoat.css index a83b4f4..5d15493 100644 --- a/src/css/basecoat.css +++ b/src/css/basecoat.css @@ -146,10 +146,6 @@ border-radius: var(--scrollbar-radius); } } - /* Alpine.js */ - [x-cloak] { - display: none !important; - } } /* Alert */ @@ -385,11 +381,9 @@ /* Button Group */ .button-group { - @apply inline-flex isolate; + @apply inline-flex w-fit items-stretch isolate; - > *:hover, > *:focus-visible, - > :is(.dropdown-menu, .popover) > button:hover, > :is(.dropdown-menu, .popover) > button:focus-visible { @apply relative z-10; } @@ -401,7 +395,7 @@ &:not([data-orientation='vertical']) { > *:not(:first-child), > :is(.dropdown-menu, .popover):not(:first-child) > button { - @apply -ml-px rounded-l-none; + @apply rounded-l-none border-l-0; } > *:not(:last-child), > :is(.dropdown-menu, .popover):not(:last-child) > button { @@ -416,7 +410,7 @@ } > *:not(:first-child) { - @apply -mt-px ml-0 rounded-t-none; + @apply rounded-t-none border-t-0; } > *:not(:last-child) { @apply rounded-b-none; @@ -451,7 +445,7 @@ /* Checkbox */ @layer components { - .form input[type='checkbox']:not([role='switch']), + :is(.form, .field) input[type='checkbox']:not([role='switch']), .input[type='checkbox']:not([role='switch']) { @apply appearance-none border-input dark:bg-input/30 checked:bg-primary dark:checked:bg-primary checked:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50; @@ -494,7 +488,7 @@ &::backdrop { @apply opacity-100; } - > article { + > * { @apply scale-100; } @@ -504,7 +498,7 @@ &::backdrop { @apply opacity-0; } - > article { + > * { @apply scale-95; } } @@ -512,7 +506,7 @@ &::backdrop { @apply bg-black/50 opacity-0 transition-all transition-discrete; } - > article { + > * { @apply bg-background fixed top-[50%] left-[50%] z-50 flex flex-col w-full max-w-[calc(100%_-_2rem)] -translate-x-1/2 -translate-y-1/2 overflow-hidden rounded-lg border shadow-lg sm:max-w-lg max-h-[min(640px,calc(100%_-_2rem))]; @apply transition-all scale-95; @@ -530,10 +524,10 @@ > header input { @apply h-12; } - [role='listbox'] { + [role='menu'] { @apply px-2; - [role='option'] { + [role='menuitem'] { @apply py-3 px-2 [&_svg]:size-5; } [role='heading'] { @@ -554,11 +548,11 @@ @apply placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50; } } - [role='listbox'] { + [role='menu'] { @apply max-h-[300px] overflow-y-auto overflow-x-hidden p-1; - [role='option'] { - @apply aria-hidden:hidden relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none aria-disabled:opacity-50 aria-disabled:pointer-events-none disabled:opacity-50 disabled:pointer-events-none w-full truncate [&_svg:not([class*='text-'])]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4; + [role='menuitem'] { + @apply aria-hidden:hidden relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none aria-disabled:opacity-50 aria-disabled:pointer-events-none disabled:opacity-50 disabled:pointer-events-none w-full truncate [&_svg:not([class*='text-'])]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4; &.active { @apply bg-accent text-accent-foreground; @@ -567,7 +561,7 @@ [role='heading'] { @apply text-muted-foreground flex px-2 py-1.5 text-xs font-medium; } - [role='group']:not(:has([role='option']:not([aria-hidden='true']))) { + [role='group']:not(:has([role='menuitem']:not([aria-hidden='true']))) { @apply hidden; } [role='separator'] { @@ -583,7 +577,7 @@ @apply content-['No_results_found']; } } - &:not([data-command-initialized]) [role='option'] { + &:not([data-command-initialized]) [role='menuitem'] { @apply hover:bg-accent hover:text-accent-foreground; } &:has(> header input:not(:placeholder-shown)) [role='separator'] { @@ -603,7 +597,7 @@ &::backdrop { @apply opacity-100; } - > article { + > * { @apply scale-100; } @@ -613,7 +607,7 @@ &::backdrop { @apply opacity-0; } - > article { + > * { @apply scale-95; } } @@ -621,7 +615,7 @@ &::backdrop { @apply bg-black/50 opacity-0 transition-all transition-discrete; } - > article { + > * { @apply bg-background fixed top-[50%] left-[50%] z-50 flex flex-col w-full max-w-[calc(100%_-_2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-lg border p-6 shadow-lg sm:max-w-lg max-h-[calc(100%_-_2rem)]; @apply transition-all scale-95; @@ -692,21 +686,46 @@ } } +/* Field */ +@layer components { + .fieldset { + @apply flex flex-col gap-6; + + > legend { + @apply text-base font-medium mb-3; + } + + > .description { + @apply text-sm text-muted-foreground; + } + } + .field { + @apply flex flex-col w-full gap-3 data-[invalid=true]:text-destructive [&>*]:w-full [&>.sr-only]:w-auto; + + .description { + @apply text-sm text-muted-foreground; + } + .error { + @apply text-sm text-destructive font-medium; + } + } +} + /* Input */ @layer components { - .form input[type='text'], - .form input[type='email'], - .form input[type='password'], - .form input[type='number'], - .form input[type='file'], - .form input[type='tel'], - .form input[type='url'], - .form input[type='search'], - .form input[type='date'], - .form input[type='datetime-local'], - .form input[type='month'], - .form input[type='week'], - .form input[type='time'], + :is(.form, .field) input[type='text'], + :is(.form, .field) input[type='email'], + :is(.form, .field) input[type='password'], + :is(.form, .field) input[type='number'], + :is(.form, .field) input[type='file'], + :is(.form, .field) input[type='tel'], + :is(.form, .field) input[type='url'], + :is(.form, .field) input[type='search'], + :is(.form, .field) input[type='date'], + :is(.form, .field) input[type='datetime-local'], + :is(.form, .field) input[type='month'], + :is(.form, .field) input[type='week'], + :is(.form, .field) input[type='time'], .input[type='text'], .input[type='email'], .input[type='password'], @@ -735,7 +754,7 @@ /* Label */ @layer components { - .form label, + :is(.form, .field) label, .label { @apply flex items-center gap-2 text-sm leading-none font-medium select-none peer-disabled:pointer-events-none peer-disabled:opacity-50; @@ -820,7 +839,7 @@ /* Radio */ @layer components { - .form input[type='radio'], + :is(.form, .field) input[type='radio'], .input[type='radio'] { @apply appearance-none border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 relative; @@ -832,7 +851,7 @@ /* Range */ @layer components { - .form input[type='range'], + :is(.form, .field) input[type='range'], .input[type='range'] { @apply appearance-none flex items-center p-0 outline-none; --slider-value: 20%; @@ -881,7 +900,7 @@ /* Select */ @layer components { - .form select, + :is(.form, .field) select, select.select { @apply appearance-none border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent pl-3 pr-9 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 h-9; @apply bg-[image:var(--chevron-down-icon-50)] bg-no-repeat bg-position-[center_right_0.75rem] bg-size-[1rem]; @@ -1068,7 +1087,7 @@ /* Switch */ @layer components { - .form input[type='checkbox'][role='switch'], + :is(.form, .field) input[type='checkbox'][role='switch'], .input[type='checkbox'][role='switch'] { @apply appearance-none focus-visible:border-ring focus-visible:ring-ring/50 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50; @apply bg-input dark:bg-input/80 checked:bg-primary dark:checked:bg-primary; @@ -1130,7 +1149,7 @@ /* Textarea */ @layer components { - .form textarea, + :is(.form, .field) textarea, .textarea { @apply border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm; } @@ -1196,8 +1215,6 @@ /* Tooltip */ @layer components { - - [data-tooltip] { @apply relative; diff --git a/src/jinja/command.html.jinja b/src/jinja/command.html.jinja index 63e63e7..b05feca 100644 --- a/src/jinja/command.html.jinja +++ b/src/jinja/command.html.jinja @@ -7,7 +7,7 @@ @param empty_text {string} [optional] [default="No results found."] - Text displayed when no results match the search. @param main_attrs {object} [optional] - Additional HTML attributes for the main container div. @param input_attrs {object} [optional] - Additional HTML attributes for the search input. - @param listbox_attrs {object} [optional] - Additional HTML attributes for the listbox div. + @param menu_attrs {object} [optional] - Additional HTML attributes for the menu div. #} {% macro command( id=None, @@ -16,7 +16,7 @@ empty_text="No results found.", main_attrs={}, input_attrs={}, - listbox_attrs={} + menu_attrs={} ) %} {% set id = id or ("command-" ~ range(100000, 999999) | random | string) %}
    @@ -73,7 +73,7 @@ @param empty_text {string} [optional] [default="No results found."] - Text displayed when no results match the search. @param dialog_attrs {object} [optional] - Additional HTML attributes for the dialog element. @param input_attrs {object} [optional] - Additional HTML attributes for the search input. - @param listbox_attrs {object} [optional] - Additional HTML attributes for the listbox div. + @param menu_attrs {object} [optional] - Additional HTML attributes for the menu div. @param open {boolean} [optional] [default=False] - Whether the command dialog should be open initially. #} {% macro command_dialog( @@ -83,7 +83,7 @@ empty_text="No results found.", dialog_attrs={}, input_attrs={}, - listbox_attrs={}, + menu_attrs={}, open=False ) %} {% set id = id or ("command-dialog-" ~ range(100000, 999999) | random | string) %} @@ -97,54 +97,56 @@ {% if key != 'class' %}{{ key }}="{{ value }}"{% endif %} {% endfor %} > -
    -
    -
    - - -
    -
    +
    + + - {% if items and items|length > 0 %} - {{ render_command_items(items, id ~ "-items" if id else "items") }} - {% else %} - {{ caller() if caller }} - {% endif %} -
    + + -
    +
    {% endmacro %} {# Renders a list of items for the command component. - @param items {array} - The array of items to render. + @param items {array} - Array of items to render. Each item can be: + - { type: "item", label: "Text", content: "HTML", keywords: "search terms", disabled: true, attrs: {} } + - { type: "group", label: "Group Title", items: [...] } + - { type: "separator" } + Note: Use attrs to add data-label for alternative search text if needed. @param parent_id_prefix {string} [optional] - The prefix for the item id. #} {% macro render_command_items(items, parent_id_prefix="items") %} @@ -169,10 +171,8 @@ {% elif item.type == "item" or not item.type %}
    -
    +
    {% if title or description %}
    {% endif %} -
    +
    {% endmacro %} \ No newline at end of file diff --git a/src/js/command.js b/src/js/command.js index 21633ee..c4970ea 100644 --- a/src/js/command.js +++ b/src/js/command.js @@ -1,32 +1,36 @@ (() => { const initCommand = (container) => { const input = container.querySelector('header input'); - const listbox = container.querySelector('[role="listbox"]'); + const menu = container.querySelector('[role="menu"]'); - if (!input || !listbox) { + if (!input || !menu) { const missing = []; if (!input) missing.push('input'); - if (!listbox) missing.push('listbox'); + if (!menu) missing.push('menu'); console.error(`Command component initialization failed. Missing element(s): ${missing.join(', ')}`, container); return; } - const options = Array.from(listbox.querySelectorAll('[role="option"]')); - let visibleOptions = [...options]; + const allMenuItems = Array.from(menu.querySelectorAll('[role="menuitem"]')); + const menuItems = allMenuItems.filter(item => + !item.hasAttribute('disabled') && + item.getAttribute('aria-disabled') !== 'true' + ); + let visibleMenuItems = [...menuItems]; let activeIndex = -1; - const setActiveOption = (index) => { - if (activeIndex > -1 && options[activeIndex]) { - options[activeIndex].classList.remove('active'); + const setActiveItem = (index) => { + if (activeIndex > -1 && menuItems[activeIndex]) { + menuItems[activeIndex].classList.remove('active'); } activeIndex = index; if (activeIndex > -1) { - const activeOption = options[activeIndex]; - activeOption.classList.add('active'); - if (activeOption.id) { - input.setAttribute('aria-activedescendant', activeOption.id); + const activeItem = menuItems[activeIndex]; + activeItem.classList.add('active'); + if (activeItem.id) { + input.setAttribute('aria-activedescendant', activeItem.id); } else { input.removeAttribute('aria-activedescendant'); } @@ -35,39 +39,29 @@ } }; - const filterOptions = () => { + const filterMenuItems = () => { const searchTerm = input.value.trim().toLowerCase(); - setActiveOption(-1); + setActiveItem(-1); - visibleOptions = []; - options.forEach(option => { - const optionText = (option.dataset.label || option.textContent).trim().toLowerCase(); - const keywords = (option.dataset.keywords || '').toLowerCase(); - const matches = optionText.includes(searchTerm) || keywords.includes(searchTerm); - option.setAttribute('aria-hidden', String(!matches)); - if (matches) { - visibleOptions.push(option); + visibleMenuItems = []; + allMenuItems.forEach(item => { + const itemText = (item.dataset.label || item.textContent).trim().toLowerCase(); + const keywords = (item.dataset.keywords || '').toLowerCase(); + const matches = itemText.includes(searchTerm) || keywords.includes(searchTerm); + item.setAttribute('aria-hidden', String(!matches)); + if (matches && menuItems.includes(item)) { + visibleMenuItems.push(item); } }); - if (visibleOptions.length > 0) { - setActiveOption(options.indexOf(visibleOptions[0])); - visibleOptions[0].scrollIntoView({ block: 'nearest' }); + if (visibleMenuItems.length > 0) { + setActiveItem(menuItems.indexOf(visibleMenuItems[0])); + visibleMenuItems[0].scrollIntoView({ block: 'nearest' }); } }; - const selectOption = (option) => { - if (!option) return; - - const event = new CustomEvent('command:select', { - detail: { value: option.dataset.value }, - bubbles: true - }); - container.dispatchEvent(event); - }; - - input.addEventListener('input', filterOptions); + input.addEventListener('input', filterMenuItems); const handleKeyNavigation = (event) => { if (!['ArrowDown', 'ArrowUp', 'Enter', 'Home', 'End'].includes(event.key)) { @@ -77,21 +71,21 @@ if (event.key === 'Enter') { event.preventDefault(); if (activeIndex > -1) { - selectOption(options[activeIndex]); + menuItems[activeIndex]?.click(); } return; } - if (visibleOptions.length === 0) return; + if (visibleMenuItems.length === 0) return; event.preventDefault(); - const currentVisibleIndex = activeIndex > -1 ? visibleOptions.indexOf(options[activeIndex]) : -1; + const currentVisibleIndex = activeIndex > -1 ? visibleMenuItems.indexOf(menuItems[activeIndex]) : -1; let nextVisibleIndex = currentVisibleIndex; switch (event.key) { case 'ArrowDown': - if (currentVisibleIndex < visibleOptions.length - 1) { + if (currentVisibleIndex < visibleMenuItems.length - 1) { nextVisibleIndex = currentVisibleIndex + 1; } break; @@ -106,47 +100,42 @@ nextVisibleIndex = 0; break; case 'End': - nextVisibleIndex = visibleOptions.length - 1; + nextVisibleIndex = visibleMenuItems.length - 1; break; } if (nextVisibleIndex !== currentVisibleIndex) { - const newActiveOption = visibleOptions[nextVisibleIndex]; - setActiveOption(options.indexOf(newActiveOption)); - newActiveOption.scrollIntoView({ block: 'nearest', behavior: 'smooth' }); + const newActiveItem = visibleMenuItems[nextVisibleIndex]; + setActiveItem(menuItems.indexOf(newActiveItem)); + newActiveItem.scrollIntoView({ block: 'nearest', behavior: 'smooth' }); } }; - listbox.addEventListener('mousemove', (event) => { - const option = event.target.closest('[role="option"]'); - if (option && visibleOptions.includes(option)) { - const index = options.indexOf(option); + menu.addEventListener('mousemove', (event) => { + const menuItem = event.target.closest('[role="menuitem"]'); + if (menuItem && visibleMenuItems.includes(menuItem)) { + const index = menuItems.indexOf(menuItem); if (index !== activeIndex) { - setActiveOption(index); + setActiveItem(index); } } }); - listbox.addEventListener('mouseleave', () => { - if (visibleOptions.length > 0) { - setActiveOption(options.indexOf(visibleOptions[0])); - } else { - setActiveOption(-1); - } - }); - - listbox.addEventListener('click', (event) => { - const clickedOption = event.target.closest('[role="option"]'); - if (clickedOption && visibleOptions.includes(clickedOption)) { - selectOption(clickedOption); + menu.addEventListener('click', (event) => { + const clickedItem = event.target.closest('[role="menuitem"]'); + if (clickedItem && visibleMenuItems.includes(clickedItem)) { + const dialog = container.closest('dialog.command-dialog'); + if (dialog && !clickedItem.hasAttribute('data-keep-command-open')) { + dialog.close(); + } } }); input.addEventListener('keydown', handleKeyNavigation); - if (visibleOptions.length > 0) { - setActiveOption(options.indexOf(visibleOptions[0])); - visibleOptions[0].scrollIntoView({ block: 'nearest' }); + if (visibleMenuItems.length > 0) { + setActiveItem(menuItems.indexOf(visibleMenuItems[0])); + visibleMenuItems[0].scrollIntoView({ block: 'nearest' }); } container.dataset.commandInitialized = true; diff --git a/src/js/select.js b/src/js/select.js index 8e10dc8..352dcb8 100644 --- a/src/js/select.js +++ b/src/js/select.js @@ -16,7 +16,8 @@ return; } - const options = Array.from(listbox.querySelectorAll('[role="option"]')); + const allOptions = Array.from(listbox.querySelectorAll('[role="option"]')); + const options = allOptions.filter(opt => opt.getAttribute('aria-disabled') !== 'true'); let visibleOptions = [...options]; let activeIndex = -1; @@ -69,7 +70,7 @@ const resetFilter = () => { filter.value = ''; visibleOptions = [...options]; - options.forEach(opt => opt.setAttribute('aria-hidden', 'false')); + allOptions.forEach(opt => opt.setAttribute('aria-hidden', 'false')); }; if (hasTransition()) { @@ -110,11 +111,11 @@ setActiveOption(-1); visibleOptions = []; - options.forEach(option => { + allOptions.forEach(option => { const optionText = (option.dataset.label || option.textContent).trim().toLowerCase(); const matches = optionText.includes(searchTerm); option.setAttribute('aria-hidden', String(!matches)); - if (matches) { + if (matches && options.includes(option)) { visibleOptions.push(option); } }); diff --git a/src/nunjucks/command.njk b/src/nunjucks/command.njk index 46b8e50..f3b6b84 100644 --- a/src/nunjucks/command.njk +++ b/src/nunjucks/command.njk @@ -7,7 +7,7 @@ @param empty_text {string} [optional] [default="No results found."] - Text displayed when no results match the search. @param main_attrs {object} [optional] - Additional HTML attributes for the main container div. @param input_attrs {object} [optional] - Additional HTML attributes for the search input. - @param listbox_attrs {object} [optional] - Additional HTML attributes for the listbox div. + @param menu_attrs {object} [optional] - Additional HTML attributes for the menu div. #} {% macro command( id=None, @@ -16,7 +16,7 @@ empty_text="No results found.", main_attrs={}, input_attrs={}, - listbox_attrs={} + menu_attrs={} ) %} {% set id = id or ("command-" + (range(100000, 999999) | random | string)) %}
    @@ -73,7 +73,7 @@ @param empty_text {string} [optional] [default="No results found."] - Text displayed when no results match the search. @param dialog_attrs {object} [optional] - Additional HTML attributes for the dialog element. @param input_attrs {object} [optional] - Additional HTML attributes for the search input. - @param listbox_attrs {object} [optional] - Additional HTML attributes for the listbox div. + @param menu_attrs {object} [optional] - Additional HTML attributes for the menu div. @param open {boolean} [optional] [default=false] - Whether the command dialog should be open initially. #} {% macro command_dialog( @@ -83,7 +83,7 @@ empty_text="No results found.", dialog_attrs={}, input_attrs={}, - listbox_attrs={}, + menu_attrs={}, open=false ) %} {% set id = id or ("command-dialog-" + (range(100000, 999999) | random | string)) %} @@ -97,54 +97,56 @@ {% if key != 'class' %}{{ key }}="{{ value }}"{% endif %} {% endfor %} > -
    -
    -
    - - -
    -
    +
    + + - {% if items and items.length > 0 %} - {{ render_command_items(items, id ~ "-items" if id else "items") }} - {% else %} - {{ caller() if caller }} - {% endif %} -
    + + -
    +
    {% endmacro %} {# Renders a list of items for the command component. - @param items {array} - The array of items to render. + @param items {array} - Array of items to render. Each item can be: + - { type: "item", label: "Text", content: "HTML", keywords: "search terms", disabled: true, attrs: {} } + - { type: "group", label: "Group Title", items: [...] } + - { type: "separator" } + Note: Use attrs to add data-label for alternative search text if needed. @param parent_id_prefix {string} [optional] - The prefix for the item id. #} {% macro render_command_items(items, parent_id_prefix="items") %} @@ -169,10 +171,8 @@ {% elif item.type == "item" or not item.type %}
    -
    +
    {% if title or description %}
    {% endif %} -
    +
    {% endmacro %} \ No newline at end of file From 0c16664e4b3e0e8e3c3dd3c5375944d8ee0d2d2a Mon Sep 17 00:00:00 2001 From: Ronan Berder Date: Mon, 3 Nov 2025 11:51:39 +0800 Subject: [PATCH 06/11] Adding Input Group, cleaning up other new components --- docs/src/assets/styles.css | 449 +++++++++++++++++++++++++--- docs/src/components/field.njk | 263 ++++++++++------ docs/src/components/input-group.njk | 404 ++++++++++++++++--------- docs/src/components/item.njk | 9 + src/css/basecoat.css | 6 +- 5 files changed, 848 insertions(+), 283 deletions(-) diff --git a/docs/src/assets/styles.css b/docs/src/assets/styles.css index d8a18c6..a68b102 100644 --- a/docs/src/assets/styles.css +++ b/docs/src/assets/styles.css @@ -11,6 +11,7 @@ --color-amber-100: oklch(96.2% 0.059 95.617); --color-amber-900: oklch(41.4% 0.112 45.904); --color-amber-950: oklch(27.9% 0.077 45.635); + --color-yellow-500: oklch(79.5% 0.184 86.047); --color-green-50: oklch(98.2% 0.018 155.826); --color-green-500: oklch(72.3% 0.219 149.579); --color-green-600: oklch(62.7% 0.194 149.214); @@ -24,7 +25,6 @@ --color-blue-800: oklch(42.4% 0.199 265.638); --color-blue-900: oklch(37.9% 0.146 265.522); --color-blue-950: oklch(28.2% 0.091 267.935); - --color-purple-500: oklch(62.7% 0.265 303.9); --color-neutral-300: oklch(87% 0 0); --color-neutral-800: oklch(26.9% 0 0); --color-black: #000; @@ -304,6 +304,9 @@ .right-1 { right: calc(var(--spacing) * 1); } + .right-1\.5 { + right: calc(var(--spacing) * 1.5); + } .right-2 { right: calc(var(--spacing) * 2); } @@ -313,12 +316,18 @@ .right-3 { right: calc(var(--spacing) * 3); } + .bottom-0 { + bottom: calc(var(--spacing) * 0); + } .bottom-2 { bottom: calc(var(--spacing) * 2); } .bottom-3 { bottom: calc(var(--spacing) * 3); } + .left-1\.5 { + left: calc(var(--spacing) * 1.5); + } .left-1\/2 { left: calc(1/2 * 100%); } @@ -355,6 +364,9 @@ max-width: 96rem; } } + .m-0 { + margin: calc(var(--spacing) * 0); + } .mx-auto { margin-inline: auto; } @@ -450,6 +462,10 @@ width: calc(var(--spacing) * 2.5); height: calc(var(--spacing) * 2.5); } + .size-3 { + width: calc(var(--spacing) * 3); + height: calc(var(--spacing) * 3); + } .size-3\.5 { width: calc(var(--spacing) * 3.5); height: calc(var(--spacing) * 3.5); @@ -458,10 +474,6 @@ width: calc(var(--spacing) * 4); height: calc(var(--spacing) * 4); } - .size-5 { - width: calc(var(--spacing) * 5); - height: calc(var(--spacing) * 5); - } .size-6 { width: calc(var(--spacing) * 6); height: calc(var(--spacing) * 6); @@ -486,10 +498,6 @@ width: calc(var(--spacing) * 12); height: calc(var(--spacing) * 12); } - .size-16 { - width: calc(var(--spacing) * 16); - height: calc(var(--spacing) * 16); - } .h-4 { height: calc(var(--spacing) * 4); } @@ -508,8 +516,8 @@ .h-14 { height: calc(var(--spacing) * 14); } - .h-px { - height: 1px; + .h-auto { + height: auto; } .max-h-64 { max-height: calc(var(--spacing) * 64); @@ -526,18 +534,42 @@ .max-h-\[650px\] { max-height: 650px; } + .min-h-21 { + min-height: calc(var(--spacing) * 21); + } + .min-h-22 { + min-height: calc(var(--spacing) * 22); + } .min-h-24 { min-height: calc(var(--spacing) * 24); } + .min-h-25 { + min-height: calc(var(--spacing) * 25); + } + .min-h-26 { + min-height: calc(var(--spacing) * 26); + } + .min-h-27 { + min-height: calc(var(--spacing) * 27); + } + .min-h-28 { + min-height: calc(var(--spacing) * 28); + } + .min-h-30 { + min-height: calc(var(--spacing) * 30); + } .min-h-32 { min-height: calc(var(--spacing) * 32); } - .min-h-64 { - min-height: calc(var(--spacing) * 64); + .min-h-77 { + min-height: calc(var(--spacing) * 77); } .min-h-\[350px\] { min-height: 350px; } + .w-0 { + width: calc(var(--spacing) * 0); + } .w-1\/2 { width: calc(1/2 * 100%); } @@ -586,6 +618,15 @@ .w-max { width: max-content; } + .max-w-23 { + max-width: calc(var(--spacing) * 23); + } + .max-w-24 { + max-width: calc(var(--spacing) * 24); + } + .max-w-72 { + max-width: calc(var(--spacing) * 72); + } .max-w-\[75\%\] { max-width: 75%; } @@ -814,14 +855,14 @@ .self-start { align-self: flex-start; } + .self-stretch { + align-self: stretch; + } .truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .overflow-hidden { - overflow: hidden; - } .overflow-x-auto { overflow-x: auto; } @@ -834,6 +875,9 @@ .rounded-\[2px\] { border-radius: 2px; } + .rounded-\[calc\(var\(--radius\)-5px\)\] { + border-radius: calc(var(--radius) - 5px); + } .rounded-full { border-radius: calc(infinity * 1px); } @@ -843,12 +887,23 @@ .rounded-md { border-radius: var(--radius-md); } + .rounded-none { + border-radius: 0; + } .rounded-sm { border-radius: var(--radius-sm); } .rounded-xl { border-radius: var(--radius-xl); } + .rounded-l-md { + border-top-left-radius: var(--radius-md); + border-bottom-left-radius: var(--radius-md); + } + .rounded-r-md { + border-top-right-radius: var(--radius-md); + border-bottom-right-radius: var(--radius-md); + } .border { border-style: var(--tw-border-style); border-width: 1px; @@ -861,10 +916,22 @@ border-top-style: var(--tw-border-style); border-top-width: 1px; } + .border-r { + border-right-style: var(--tw-border-style); + border-right-width: 1px; + } + .border-r-0 { + border-right-style: var(--tw-border-style); + border-right-width: 0px; + } .border-b { border-bottom-style: var(--tw-border-style); border-bottom-width: 1px; } + .border-l-0 { + border-left-style: var(--tw-border-style); + border-left-width: 0px; + } .border-dashed { --tw-border-style: dashed; border-style: dashed; @@ -881,9 +948,18 @@ border-color: color-mix(in oklab, var(--color-border) 50%, transparent); } } + .border-input { + border-color: var(--color-input); + } .border-muted { border-color: var(--color-muted); } + .border-muted-foreground\/20 { + border-color: var(--color-muted-foreground); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-muted-foreground) 20%, transparent); + } + } .border-transparent { border-color: transparent; } @@ -902,21 +978,18 @@ .bg-background { background-color: var(--color-background); } - .bg-blue-500 { - background-color: var(--color-blue-500); - } .bg-card { background-color: var(--color-card); } .bg-foreground { background-color: var(--color-foreground); } - .bg-green-500 { - background-color: var(--color-green-500); - } .bg-muted { background-color: var(--color-muted); } + .bg-muted-foreground { + background-color: var(--color-muted-foreground); + } .bg-muted\/50 { background-color: var(--color-muted); @supports (color: color-mix(in lab, red, red)) { @@ -926,9 +999,6 @@ .bg-primary { background-color: var(--color-primary); } - .bg-purple-500 { - background-color: var(--color-purple-500); - } .bg-sidebar-primary { background-color: var(--color-sidebar-primary); } @@ -980,6 +1050,9 @@ .px-4 { padding-inline: calc(var(--spacing) * 4); } + .px-9 { + padding-inline: calc(var(--spacing) * 9); + } .px-\[0\.3rem\] { padding-inline: 0.3rem; } @@ -995,54 +1068,135 @@ .py-4 { padding-block: calc(var(--spacing) * 4); } + .py-15 { + padding-block: calc(var(--spacing) * 15); + } .py-\[0\.2rem\] { padding-block: 0.2rem; } + .pt-1\.5 { + padding-top: calc(var(--spacing) * 1.5); + } .pt-2 { padding-top: calc(var(--spacing) * 2); } + .pt-3 { + padding-top: calc(var(--spacing) * 3); + } + .pt-10 { + padding-top: calc(var(--spacing) * 10); + } + .pt-12 { + padding-top: calc(var(--spacing) * 12); + } + .pt-14 { + padding-top: calc(var(--spacing) * 14); + } + .pt-15 { + padding-top: calc(var(--spacing) * 15); + } .pr-2 { padding-right: calc(var(--spacing) * 2); } + .pr-9 { + padding-right: calc(var(--spacing) * 9); + } .pr-10 { padding-right: calc(var(--spacing) * 10); } + .pr-12 { + padding-right: calc(var(--spacing) * 12); + } .pr-16 { padding-right: calc(var(--spacing) * 16); } .pr-20 { padding-right: calc(var(--spacing) * 20); } + .pr-22 { + padding-right: calc(var(--spacing) * 22); + } + .pr-24 { + padding-right: calc(var(--spacing) * 24); + } + .pr-26 { + padding-right: calc(var(--spacing) * 26); + } + .pr-28 { + padding-right: calc(var(--spacing) * 28); + } + .pr-30 { + padding-right: calc(var(--spacing) * 30); + } .pr-32 { padding-right: calc(var(--spacing) * 32); } + .pr-129 { + padding-right: calc(var(--spacing) * 129); + } + .pb-3 { + padding-bottom: calc(var(--spacing) * 3); + } .pb-4 { padding-bottom: calc(var(--spacing) * 4); } .pb-10 { padding-bottom: calc(var(--spacing) * 10); } + .pb-10\.5 { + padding-bottom: calc(var(--spacing) * 10.5); + } + .pb-11 { + padding-bottom: calc(var(--spacing) * 11); + } .pb-12 { padding-bottom: calc(var(--spacing) * 12); } + .pb-14 { + padding-bottom: calc(var(--spacing) * 14); + } + .pb-17 { + padding-bottom: calc(var(--spacing) * 17); + } .pl-6 { padding-left: calc(var(--spacing) * 6); } + .pl-7 { + padding-left: calc(var(--spacing) * 7); + } .pl-8 { padding-left: calc(var(--spacing) * 8); } .pl-8\.5 { padding-left: calc(var(--spacing) * 8.5); } + .pl-9 { + padding-left: calc(var(--spacing) * 9); + } .pl-10 { padding-left: calc(var(--spacing) * 10); } .pl-12 { padding-left: calc(var(--spacing) * 12); } + .pl-14 { + padding-left: calc(var(--spacing) * 14); + } + .pl-15 { + padding-left: calc(var(--spacing) * 15); + } + .pl-16 { + padding-left: calc(var(--spacing) * 16); + } + .pl-19 { + padding-left: calc(var(--spacing) * 19); + } .pl-20 { padding-left: calc(var(--spacing) * 20); } + .pl-21 { + padding-left: calc(var(--spacing) * 21); + } .text-center { text-align: center; } @@ -1162,9 +1316,6 @@ .text-sidebar-primary-foreground { color: var(--color-sidebar-primary-foreground); } - .text-white { - color: var(--color-white); - } .uppercase { text-transform: uppercase; } @@ -1285,6 +1436,21 @@ visibility: visible; } } + .group-data-\[disabled\=true\]\:pointer-events-none { + &:is(:where(.group)[data-disabled="true"] *) { + pointer-events: none; + } + } + .group-data-\[disabled\=true\]\:opacity-50 { + &:is(:where(.group)[data-disabled="true"] *) { + opacity: 50%; + } + } + .group-data-\[disabled\=true\]\/field\:opacity-50 { + &:is(:where(.group\/field)[data-disabled="true"] *) { + opacity: 50%; + } + } .group-\[\.copied\]\:block { &:is(:where(.group):is(.copied) *) { display: block; @@ -1300,6 +1466,16 @@ border-color: var(--color-primary); } } + .peer-disabled\:cursor-not-allowed { + &:is(:where(.peer):disabled ~ *) { + cursor: not-allowed; + } + } + .peer-disabled\:opacity-50 { + &:is(:where(.peer):disabled ~ *) { + opacity: 50%; + } + } .last\:border-b-0 { &:last-child { border-bottom-style: var(--tw-border-style); @@ -1385,6 +1561,13 @@ } } } + .hover\:bg-foreground { + &:hover { + @media (hover: hover) { + background-color: var(--color-foreground); + } + } + } .hover\:bg-muted { &:hover { @media (hover: hover) { @@ -1392,6 +1575,13 @@ } } } + .hover\:text-accent-foreground { + &:hover { + @media (hover: hover) { + color: var(--color-accent-foreground); + } + } + } .hover\:text-foreground { &:hover { @media (hover: hover) { @@ -1466,11 +1656,60 @@ pointer-events: none; } } + .disabled\:border { + &:disabled { + border-style: var(--tw-border-style); + border-width: 1px; + } + } .disabled\:opacity-50 { &:disabled { opacity: 50%; } } + .has-data-\[state\=checked\]\:border-primary { + &:has(*[data-state="checked"]) { + border-color: var(--color-primary); + } + } + .has-data-\[state\=checked\]\:bg-primary\/5 { + &:has(*[data-state="checked"]) { + background-color: var(--color-primary); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-primary) 5%, transparent); + } + } + } + .has-\[\:checkd\]\:border { + &:has(*:is(:checkd)) { + border-style: var(--tw-border-style); + border-width: 1px; + } + } + .has-\[\:checked\]\:border-primary { + &:has(*:is(:checked)) { + border-color: var(--color-primary); + } + } + .has-\[\:checked\]\:bg-muted { + &:has(*:is(:checked)) { + background-color: var(--color-muted); + } + } + .has-\[\:checked\]\:bg-primary\/5 { + &:has(*:is(:checked)) { + background-color: var(--color-primary); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-primary) 5%, transparent); + } + } + } + .has-\[input\:checkd\]\:border { + &:has(*:is(input:checkd)) { + border-style: var(--tw-border-style); + border-width: 1px; + } + } .has-\[input\[type\=\'checkbox\'\]\:checked\]\:border-blue-600 { &:has(*:is(input[type='checkbox']:checked)) { border-color: var(--color-blue-600); @@ -1491,6 +1730,32 @@ background-color: var(--color-green-50); } } + .has-\[\>\[data-slot\=field\]\]\:w-full { + &:has(>[data-slot=field]) { + width: 100%; + } + } + .has-\[\>\[data-slot\=field\]\]\:flex-col { + &:has(>[data-slot=field]) { + flex-direction: column; + } + } + .has-\[\>\[data-slot\=field\]\]\:rounded-md { + &:has(>[data-slot=field]) { + border-radius: var(--radius-md); + } + } + .has-\[\>\[data-slot\=field\]\]\:border { + &:has(>[data-slot=field]) { + border-style: var(--tw-border-style); + border-width: 1px; + } + } + .has-\[\>svg\]\:px-2 { + &:has(>svg) { + padding-inline: calc(var(--spacing) * 2); + } + } .has-\[\>svg\]\:px-2\.5 { &:has(>svg) { padding-inline: calc(var(--spacing) * 2.5); @@ -1509,6 +1774,35 @@ } } } + .aria-pressed\:bg-transparent { + &[aria-pressed="true"] { + background-color: transparent; + } + } + .aria-pressed\:text-blue-500 { + &[aria-pressed="true"] { + color: var(--color-blue-500); + } + } + .aria-pressed\:text-blue-600 { + &[aria-pressed="true"] { + color: var(--color-blue-600); + } + } + .aria-pressed\:text-yellow-500 { + &[aria-pressed="true"] { + color: var(--color-yellow-500); + } + } + .aria-pressed\:hover\:bg-accent { + &[aria-pressed="true"] { + &:hover { + @media (hover: hover) { + background-color: var(--color-accent); + } + } + } + } .max-sm\:flex-col { @media (width < 40rem) { flex-direction: column; @@ -1691,6 +1985,18 @@ } } } + .dark\:hover\:bg-accent\/50 { + &:is(.dark *) { + &:hover { + @media (hover: hover) { + background-color: var(--color-accent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-accent) 50%, transparent); + } + } + } + } + } .dark\:hover\:bg-destructive\/20 { &:is(.dark *) { &:hover { @@ -1713,6 +2019,26 @@ } } } + .dark\:has-data-\[state\=checked\]\:bg-primary\/10 { + &:is(.dark *) { + &:has(*[data-state="checked"]) { + background-color: var(--color-primary); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-primary) 10%, transparent); + } + } + } + } + .dark\:has-\[\:checked\]\:bg-primary\/10 { + &:is(.dark *) { + &:has(*:is(:checked)) { + background-color: var(--color-primary); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-primary) 10%, transparent); + } + } + } + } .dark\:has-\[input\[type\=\'checkbox\'\]\:checked\]\:border-blue-900 { &:is(.dark *) { &:has(*:is(input[type='checkbox']:checked)) { @@ -1751,6 +2077,20 @@ } } } + .dark\:aria-pressed\:hover\:bg-accent\/50 { + &:is(.dark *) { + &[aria-pressed="true"] { + &:hover { + @media (hover: hover) { + background-color: var(--color-accent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-accent) 50%, transparent); + } + } + } + } + } + } .\[\&_\[data-new-link\]\:\:after\]\:ml-auto { & [data-new-link]::after { margin-left: auto; @@ -1962,11 +2302,6 @@ padding-left: calc(var(--spacing) * 4); } } - .\[\&\+\[data-slot\=item-content\]\]\:flex-none { - &+[data-slot=item-content] { - flex: none; - } - } .md\:\*\:\[\.card\]\:basis-1\/4 { @media (width >= 48rem) { :is(& > *) { @@ -1995,6 +2330,19 @@ } } } + .\[disabled\]\:border { + &:is(disabled) { + border-style: var(--tw-border-style); + border-width: 1px; + } + } + .\[\&\>\*\]\:data-\[slot\=field\]\:p-4 { + &>* { + &[data-slot="field"] { + padding: calc(var(--spacing) * 4); + } + } + } .\[\&\>a\]\:underline { &>a { text-decoration-line: underline; @@ -2015,12 +2363,37 @@ margin-bottom: calc(var(--spacing) * 3); } } + .\[\&\>svg\]\:size-3 { + &>svg { + width: calc(var(--spacing) * 3); + height: calc(var(--spacing) * 3); + } + } + .\[\&\>svg\]\:size-4 { + &>svg { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + } + } .\[\&\>svg\]\:size-6 { &>svg { width: calc(var(--spacing) * 6); height: calc(var(--spacing) * 6); } } + .aria-pressed\:\[\&\>svg\]\:fill-blue-600 { + &[aria-pressed="true"] { + &>svg { + fill: var(--color-blue-600); + } + } + } + .\[\&\>svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3\.5 { + &>svg:not([class*='size-']) { + width: calc(var(--spacing) * 3.5); + height: calc(var(--spacing) * 3.5); + } + } } :root { --radius: 0.625rem; @@ -3387,11 +3760,11 @@ line-height: var(--tw-leading, var(--text-base--line-height)); --tw-font-weight: var(--font-weight-medium); font-weight: var(--font-weight-medium); - } - > .description { - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - color: var(--color-muted-foreground); + & + p { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + color: var(--color-muted-foreground); + } } } .field { diff --git a/docs/src/components/field.njk b/docs/src/components/field.njk index 6bf8bd4..3589847 100644 --- a/docs/src/components/field.njk +++ b/docs/src/components/field.njk @@ -29,9 +29,9 @@ toc: {% set code_demo %}
    -
    +
    Payment Method -

    All transactions are secure and encrypted

    +

    All transactions are secure and encrypted

    @@ -47,7 +47,7 @@ toc:
    - @@ -65,7 +65,7 @@ toc:
    - @@ -84,13 +84,15 @@ toc: -
    +
    Billing Address -

    The billing address associated with your payment method

    +

    The billing address associated with your payment method

    -
    - - +
    +
    @@ -101,7 +103,7 @@ toc:
    -
    +
    @@ -116,10 +118,10 @@ toc:

    Field provides semantic HTML patterns for accessible forms:

    • <fieldset> and <legend> for grouping related fields
    • -
    • role="group" with .field class for individual fields
    • -
    • .description class for helper text
    • +
    • <p> after <legend> is automatically styled as description text
    • +
    • role="group" with .field class for individual field containers
    • +
    • .description class for field-level helper text (requires aria-describedby)
    • .error class with role="alert" for error messages
    • -
    • aria-describedby to associate descriptions and errors with inputs
    @@ -130,53 +132,91 @@ toc:

    Input

    {% set code_input %} -
    +
    -

    Choose a unique username for your account

    +

    Choose a unique username for your account.

    - -

    Must be at least 8 characters

    - +

    Must be at least 8 characters long.

    +
    {% endset %} -{{ code_preview("field-input", code_input) }} +{{ code_preview("field-input", code_input, class="w-full max-w-md") }}

    Textarea

    {% set code_textarea %} -
    - - -

    Brief description for your profile (max 200 characters)

    +
    + + +

    Share your thoughts about our service.

    {% endset %} -{{ code_preview("field-textarea", code_textarea) }} +{{ code_preview("field-textarea", code_textarea, class="w-full max-w-md") }}

    Select

    {% set code_select %} -
    - - + + + + + + + + + -

    Choose your country of residence

    +

    Select your department or area of work.

    {% endset %} -{{ code_preview("field-select", code_select) }} +{{ code_preview("field-select", code_select, class="w-full max-w-md") }} + +

    Slider

    + +{% set code %} +
    + +

    Set your budget: $150

    + +
    + +{% endset %} +{{ code_preview("slider", code, "w-full max-w-sm") }}

    Fieldset

    @@ -186,9 +226,9 @@ toc: {% set code_fieldset %} -
    +
    Profile -

    This information will be displayed on your profile

    +

    This information will be displayed on your profile

    @@ -217,54 +257,84 @@ toc:

    Checkbox

    {% set code_checkbox %} -
    - Tasks -

    Select the tasks you want to receive updates for

    +
    + Show these items on the desktop +

    Select the items you want to show on the desktop.

    -
    - - +
    +
    -
    - - +
    +
    -
    - - +
    + +
    +
    + +
    +
    + +
    + +
    +
    + +
    + +

    Your Desktop & Documents folders are being synced with iCloud Drive. You can access them from other devices.

    +
    {% endset %} -{{ code_preview("field-checkbox", code_checkbox) }} +{{ code_preview("field-checkbox", code_checkbox, class="w-full max-w-md") }}

    Radio Group

    {% set code_radio %} -
    - Notify me about -

    Choose which notifications you want to receive

    +
    + Subscription plan +

    Yearly and lifetime plans offer significant savings.

    -
    -
    - - +
    +
    +
    -
    - - +
    +
    -
    - - +
    +
    {% endset %} -{{ code_preview("field-radio", code_radio) }} +{{ code_preview("field-radio", code_radio, class="w-full max-w-md") }}

    Switch

    @@ -273,44 +343,43 @@ toc: {% set code_switch %} -
    - Notifications -

    Configure how you receive notifications

    - -
    -
    -
    - -

    Receive emails about new products and features

    -
    - -
    - -
    -
    - -

    Receive emails about account security

    -
    - -
    +
    +
    + +

    Enable multi-factor authentication. If you do not have a two-factor device, you can use a one-time code sent to your email.

    -
    + +
    {% endset %} -{{ code_preview("field-switch", code_switch) }} +{{ code_preview("field-switch", code_switch, class="w-full max-w-md") }} -

    Accessibility

    - -
    -
      -
    • Always use <label> elements with for attribute matching input id
    • -
    • Associate helper text and errors using aria-describedby on the input
    • -
    • Use aria-invalid="true" on inputs with errors
    • -
    • Use role="alert" on error messages for screen reader announcements
    • -
    • Group related fields with <fieldset> and <legend>
    • -
    • Use role="group" for individual field wrappers
    • -
    -
    +

    Choice Card

    +{% set code_choice_card %} +
    + Compute Environment +

    Select the compute environment for your cluster.

    +
    + +
    +
    + +
    +
    +{% endset %} +{{ code_preview("field-choice-card", code_choice_card, class="w-full max-w-md") }} \ No newline at end of file diff --git a/docs/src/components/input-group.njk b/docs/src/components/input-group.njk index c5a89da..5f9bfcb 100644 --- a/docs/src/components/input-group.njk +++ b/docs/src/components/input-group.njk @@ -1,247 +1,361 @@ --- layout: layouts/page.njk title: Input Group -description: Display additional information or actions alongside inputs using simple HTML patterns. +description: Display additional information or actions to an input or textarea. toc: - label: Usage id: usage - label: Examples id: examples children: - - label: Icon Prefix - id: example-icon-prefix - - label: Icon Suffix - id: example-icon-suffix - - label: Text Prefix/Suffix + - label: Icon + id: example-icon + - label: Text id: example-text - - label: Button Suffix + - label: Button id: example-button - - label: Multiple Elements - id: example-multiple + - label: Tooltip + id: example-tooltip - label: Textarea id: example-textarea + - label: Spinner + id: example-spinner + - label: Dropdown + id: example-dropdown + - label: Group + id: example-group --- {% from "macros/code_preview.njk" import code_preview %} {% from "macros/code_block.njk" import code_block %} +{% from "dropdown-menu.njk" import dropdown_menu %} +{% from "popover.njk" import popover %} + +
    + {% lucide "circle-alert" %} +

    There is no dedicated Input Group component in Basecoat.

    +
    {% set code_default %} -
    - -
    - {% lucide "search" %} +
    +
    + +
    + {% lucide "search" %} +
    +
    12 results
    +
    + +
    + +
    https://
    +
    {% lucide "info" %}
    +
    + +
    + +
    + + {{ dropdown_menu( + id="demo-dropdown-menu", + trigger="Auto", + trigger_attrs={"class": "btn-sm-ghost text-muted-foreground hover:text-accent-foreground h-6 p-2"}, + popover_attrs={"data-side": "top", "class": "min-w-32"}, + items=[ + { type: "item", label: "Auto" }, + { type: "item", label: "Agent" }, + { type: "item", label: "Manual" } + ] + ) }} +
    52% used
    +
    + +
    +
    + +
    + +
    {% lucide "check" %}
    {% endset %} -{{ code_preview("input-group-default", code_default) }} +{{ code_preview("input-group-default", code_default, class="w-full max-w-sm") }}

    Usage

    -

    Input groups are achieved through composition using relative positioning and Tailwind utilities. No special component needed - just wrap your input with a positioned container and add your icons, text, or buttons.

    -

    Key patterns:

    -
      -
    • Use relative wrapper around input
    • -
    • Position content with absolute + top-1/2 -translate-y-1/2
    • -
    • Add padding to input (pl-* or pr-*) to make room for content
    • -
    • Use pointer-events-none for decorative icons
    • -
    +

    Input groups are pure HTML composition using Tailwind utility classes. There is no dedicated component: use relative positioning on a wrapper, add your content with absolute positioning, and adjust input padding to make room.

    +

    Browse the examples below and copy the pattern that fits your needs.

    -{{ code_block(code_default) }} -

    Examples

    -

    Icon Prefix

    +

    Icon

    -
    -

    Add an icon at the start of the input field.

    -
    - -{% set code_icon_prefix %} -
    +{% set code_icon %} +
    - -
    + +
    {% lucide "search" %}
    - +
    - -
    + +
    {% lucide "mail" %}
    -
    -{% endset %} -{{ code_preview("input-group-icon-prefix", code_icon_prefix) }} - -

    Icon Suffix

    - -
    -

    Add an icon at the end of the input field.

    -
    - -{% set code_icon_suffix %} -
    - -
    + +
    + {% lucide "credit-card" %} +
    +
    {% lucide "check" %}
    - +
    -
    - {% lucide "credit-card" %} +
    + {% lucide "star" %} {% lucide "info" %}
    {% endset %} -{{ code_preview("input-group-icon-suffix", code_icon_suffix) }} +{{ code_preview("input-group-icon-prefix", code_icon, class="w-full max-w-sm") }} -

    Text Prefix/Suffix

    - -
    -

    Display text before or after the input value.

    -
    +

    Text

    {% set code_text %} -
    +
    - -
    - $ -
    -
    - USD -
    + +
    $
    +
    USD
    - +
    - -
    - https:// -
    + +
    https://
    +
    .com
    - +
    - -
    - @company.com -
    + +
    @company.com
    +
    + +
    + +
    +
    120 characters left
    +
    {% endset %} -{{ code_preview("input-group-text", code_text) }} +{{ code_preview("input-group-text", code_text, class="w-full max-w-sm") }} -

    Button Suffix

    - -
    -

    Add interactive buttons inside the input.

    -
    +

    Button

    {% set code_button %} -
    +
    - - + +
    - +
    - - + + +
    + {% set trigger %} + {% lucide "info" %} + {% endset %} + {% call popover( + trigger=trigger, + trigger_attrs={"class": "btn-sm-icon-ghost rounded-full size-6"}, + popover_attrs={"class": "max-w-72"} + ) %} +

    Your connection is not secure.

    +

    You should not enter any sensitive information on this site.

    + {% endcall %} +
    https://
    +
    - +
    - - + +
    {% endset %} -{{ code_preview("input-group-button", code_button) }} +{{ code_preview("input-group-button", code_button, class="w-full max-w-sm") }} -

    Multiple Elements

    +

    Tooltip

    -
    -

    Combine multiple icons, text, and buttons.

    -
    - -{% set code_multiple %} -
    +{% set code_tooltip %} +
    - -
    - {% lucide "search" %} -
    -
    - ⌘K -
    + +
    {% lucide "info" %}
    - +
    - -
    - https:// -
    - + +
    {% lucide "circle-help" %}
    +
    + +
    + +
    {% lucide "circle-help" %}
    {% endset %} -{{ code_preview("input-group-multiple", code_multiple) }} +{{ code_preview("input-group-tooltip", code_tooltip, class="w-full max-w-sm") }}

    Textarea

    -
    -

    Add buttons to textareas for actions like submit.

    -
    - {% set code_textarea %} -
    -
    - - + + +
    + Line 1, Column 1 + +
    +
    +{% endset %} + +{{ code_preview("input-group-textarea", code_textarea, class="w-full max-w-md") }} + +

    Spinner

    + +{% set code_spinner %} +
    +
    + +
    + {% lucide "loader-circle" %} +
    - -
    - 120 characters left - + +
    + {% lucide "loader-circle" %} +
    +
    + +
    + +
    +
    Saving...
    +
    + {% lucide "loader-circle" %} +
    +
    +
    + +
    + +
    + {% lucide "loader" %} +
    +
    + Please wait...
    {% endset %} -{{ code_preview("input-group-textarea", code_textarea) }} +{{ code_preview("input-group-spinner", code_spinner, class="w-full max-w-md") }} -

    Accessibility

    +

    Dropdown

    -
    -
      -
    • Use pointer-events-none for decorative icons that shouldn't be interactive
    • -
    • Ensure buttons have proper aria-label or visible text
    • -
    • Maintain sufficient padding so text doesn't overlap with icons/buttons
    • -
    • Use semantic button types (type="button" vs type="submit")
    • -
    -
    +{% set code_dropdown %} +
    +
    + + {% set trigger %} + {% lucide "ellipsis" %} + {% endset %} + {{ dropdown_menu( + main_attrs={"class": "absolute right-1.5 top-1/2 -translate-y-1/2"}, + trigger=trigger, + trigger_attrs={"class": "btn-sm-icon-ghost text-muted-foreground hover:text-accent-foreground size-6"}, + popover_attrs={"data-align": "end", "class": "min-w-32"}, + items=[ + { type: "item", label: "Settings" }, + { type: "item", label: "Copy path" }, + { type: "item", label: "Open location" } + ] + ) }} +
    +
    + + {% set trigger %} + Search in... + {% lucide "chevron-down", { "class": "size-3" } %} + {% endset %} + {{ dropdown_menu( + main_attrs={"class": "absolute right-1.5 top-1/2 -translate-y-1/2"}, + trigger=trigger, + trigger_attrs={"class": "btn-sm-ghost text-muted-foreground hover:text-accent-foreground p-2 h-6"}, + popover_attrs={"data-align": "end", "class": "min-w-32"}, + items=[ + { type: "item", label: "Documentation" }, + { type: "item", label: "Blog Posts" }, + { type: "item", label: "Changelog" } + ] + ) }} +
    +
    +{% endset %} + +{{ code_preview("input-group-dropdown", code_dropdown, class="w-full max-w-sm") }} + +

    Group

    + +{% set code_group %} +
    + +
    + +
    {% lucide "link-2" %}
    +
    +
    .com
    +
    +{% endset %} + +{{ code_preview("input-group-group", code_group, class="w-full max-w-sm") }} \ No newline at end of file diff --git a/docs/src/components/item.njk b/docs/src/components/item.njk index 54afdda..6af2b36 100644 --- a/docs/src/components/item.njk +++ b/docs/src/components/item.njk @@ -3,6 +3,8 @@ layout: layouts/page.njk title: Item description: A versatile component that you can use to display any content. toc: + - label: Usage + id: usage - label: Examples id: examples children: @@ -58,6 +60,13 @@ toc: {{ code_preview("item-basic", code_basic | prettyHtml, class="w-full max-w-md") }} +

    Usage

    + +
    +

    Items are pure HTML composition using Tailwind utility classes. Use semantic elements like <article> or <a>, apply flex layout, and compose with standard HTML elements like <h3>, <p>, <img>, or <button>.

    +

    Browse the examples below and copy the pattern that fits your needs.

    +
    +

    Examples

    Variants

    diff --git a/src/css/basecoat.css b/src/css/basecoat.css index 5d15493..3f5da68 100644 --- a/src/css/basecoat.css +++ b/src/css/basecoat.css @@ -693,10 +693,10 @@ > legend { @apply text-base font-medium mb-3; - } - > .description { - @apply text-sm text-muted-foreground; + & + p { + @apply text-sm text-muted-foreground; + } } } .field { From e5aed697c8a3e988b76da4f18bc9af9cec876c54 Mon Sep 17 00:00:00 2001 From: Ronan Berder Date: Mon, 3 Nov 2025 13:51:40 +0800 Subject: [PATCH 07/11] Adding spinner --- docs/src/_includes/macros/code_block.njk | 2 +- docs/src/_includes/partials/sidebar.njk | 2 + docs/src/assets/styles.css | 323 +++++------------------ docs/src/components/command.njk | 4 +- docs/src/components/empty.njk | 58 +--- docs/src/components/input-group.njk | 29 +- docs/src/components/item.njk | 8 +- docs/src/components/kbd.njk | 24 +- docs/src/components/progress.njk | 44 +++ docs/src/components/spinner.njk | 215 +++++++++++++++ src/css/basecoat.css | 4 +- 11 files changed, 365 insertions(+), 348 deletions(-) create mode 100644 docs/src/components/progress.njk create mode 100644 docs/src/components/spinner.njk diff --git a/docs/src/_includes/macros/code_block.njk b/docs/src/_includes/macros/code_block.njk index 5495c6c..f60a19a 100644 --- a/docs/src/_includes/macros/code_block.njk +++ b/docs/src/_includes/macros/code_block.njk @@ -16,7 +16,7 @@ " class="btn-icon-ghost size-8 absolute right-2.5 top-2 text-muted-foreground hover:text-foreground group" > - {% lucide "clipboard", {"class": "group-[.copied]:hidden" } %} + {% lucide "copy", {"class": "group-[.copied]:hidden" } %} {% lucide "check", {"class": "hidden group-[.copied]:block" } %}
    diff --git a/docs/src/_includes/partials/sidebar.njk b/docs/src/_includes/partials/sidebar.njk index 6b2e736..98bc8d4 100644 --- a/docs/src/_includes/partials/sidebar.njk +++ b/docs/src/_includes/partials/sidebar.njk @@ -111,11 +111,13 @@ { label: "Label", url: "/components/label", attrs: link_attrs }, { label: "Pagination", url: "/components/pagination", attrs: link_attrs }, { label: "Popover", url: "/components/popover", attrs: link_attrs }, + { label: "Progress", url: "/components/progress", attrs: new_link_attrs }, { label: "Radio Group", url: "/components/radio-group", attrs: link_attrs }, { label: "Select", url: "/components/select", attrs: link_attrs }, { label: "Sidebar", url: "/components/sidebar", attrs: link_attrs }, { label: "Skeleton", url: "/components/skeleton", attrs: link_attrs }, { label: "Slider", url: "/components/slider", attrs: link_attrs }, + { label: "Spinner", url: "/components/spinner", attrs: new_link_attrs }, { label: "Switch", url: "/components/switch", attrs: link_attrs }, { label: "Table", url: "/components/table", attrs: link_attrs }, { label: "Tabs", url: "/components/tabs", attrs: link_attrs }, diff --git a/docs/src/assets/styles.css b/docs/src/assets/styles.css index a68b102..25433bf 100644 --- a/docs/src/assets/styles.css +++ b/docs/src/assets/styles.css @@ -7,6 +7,7 @@ "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --color-red-500: oklch(63.7% 0.237 25.331); --color-amber-50: oklch(98.7% 0.022 95.277); --color-amber-100: oklch(96.2% 0.059 95.617); --color-amber-900: oklch(41.4% 0.112 45.904); @@ -25,6 +26,7 @@ --color-blue-800: oklch(42.4% 0.199 265.638); --color-blue-900: oklch(37.9% 0.146 265.522); --color-blue-950: oklch(28.2% 0.091 267.935); + --color-purple-500: oklch(62.7% 0.265 303.9); --color-neutral-300: oklch(87% 0 0); --color-neutral-800: oklch(26.9% 0 0); --color-black: #000; @@ -257,9 +259,6 @@ .invisible { visibility: hidden; } - .visible { - visibility: visible; - } .sr-only { position: absolute; width: 1px; @@ -301,15 +300,9 @@ .top-22 { top: calc(var(--spacing) * 22); } - .right-1 { - right: calc(var(--spacing) * 1); - } .right-1\.5 { right: calc(var(--spacing) * 1.5); } - .right-2 { - right: calc(var(--spacing) * 2); - } .right-2\.5 { right: calc(var(--spacing) * 2.5); } @@ -319,12 +312,6 @@ .bottom-0 { bottom: calc(var(--spacing) * 0); } - .bottom-2 { - bottom: calc(var(--spacing) * 2); - } - .bottom-3 { - bottom: calc(var(--spacing) * 3); - } .left-1\.5 { left: calc(var(--spacing) * 1.5); } @@ -439,6 +426,9 @@ .hidden { display: none; } + .inline { + display: inline; + } .inline-block { display: inline-block; } @@ -498,6 +488,12 @@ width: calc(var(--spacing) * 12); height: calc(var(--spacing) * 12); } + .h-1\.5 { + height: calc(var(--spacing) * 1.5); + } + .h-2 { + height: calc(var(--spacing) * 2); + } .h-4 { height: calc(var(--spacing) * 4); } @@ -516,8 +512,8 @@ .h-14 { height: calc(var(--spacing) * 14); } - .h-auto { - height: auto; + .h-full { + height: 100%; } .max-h-64 { max-height: calc(var(--spacing) * 64); @@ -534,33 +530,12 @@ .max-h-\[650px\] { max-height: 650px; } - .min-h-21 { - min-height: calc(var(--spacing) * 21); - } - .min-h-22 { - min-height: calc(var(--spacing) * 22); - } - .min-h-24 { - min-height: calc(var(--spacing) * 24); - } .min-h-25 { min-height: calc(var(--spacing) * 25); } - .min-h-26 { - min-height: calc(var(--spacing) * 26); - } .min-h-27 { min-height: calc(var(--spacing) * 27); } - .min-h-28 { - min-height: calc(var(--spacing) * 28); - } - .min-h-30 { - min-height: calc(var(--spacing) * 30); - } - .min-h-32 { - min-height: calc(var(--spacing) * 32); - } .min-h-77 { min-height: calc(var(--spacing) * 77); } @@ -582,6 +557,15 @@ .w-4 { width: calc(var(--spacing) * 4); } + .w-7 { + width: calc(var(--spacing) * 7); + } + .w-7\.5 { + width: calc(var(--spacing) * 7.5); + } + .w-8 { + width: calc(var(--spacing) * 8); + } .w-10 { width: calc(var(--spacing) * 10); } @@ -618,12 +602,6 @@ .w-max { width: max-content; } - .max-w-23 { - max-width: calc(var(--spacing) * 23); - } - .max-w-24 { - max-width: calc(var(--spacing) * 24); - } .max-w-72 { max-width: calc(var(--spacing) * 72); } @@ -657,6 +635,9 @@ .max-w-xl { max-width: var(--container-xl); } + .max-w-xs { + max-width: var(--container-xs); + } .min-w-0 { min-width: calc(var(--spacing) * 0); } @@ -855,14 +836,14 @@ .self-start { align-self: flex-start; } - .self-stretch { - align-self: stretch; - } .truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } + .overflow-hidden { + overflow: hidden; + } .overflow-x-auto { overflow-x: auto; } @@ -875,9 +856,6 @@ .rounded-\[2px\] { border-radius: 2px; } - .rounded-\[calc\(var\(--radius\)-5px\)\] { - border-radius: calc(var(--radius) - 5px); - } .rounded-full { border-radius: calc(infinity * 1px); } @@ -948,18 +926,9 @@ border-color: color-mix(in oklab, var(--color-border) 50%, transparent); } } - .border-input { - border-color: var(--color-input); - } .border-muted { border-color: var(--color-muted); } - .border-muted-foreground\/20 { - border-color: var(--color-muted-foreground); - @supports (color: color-mix(in lab, red, red)) { - border-color: color-mix(in oklab, var(--color-muted-foreground) 20%, transparent); - } - } .border-transparent { border-color: transparent; } @@ -999,6 +968,15 @@ .bg-primary { background-color: var(--color-primary); } + .bg-primary\/20 { + background-color: var(--color-primary); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-primary) 20%, transparent); + } + } + .bg-secondary { + background-color: var(--color-secondary); + } .bg-sidebar-primary { background-color: var(--color-sidebar-primary); } @@ -1026,6 +1004,9 @@ .p-4 { padding: calc(var(--spacing) * 4); } + .p-5 { + padding: calc(var(--spacing) * 5); + } .p-6 { padding: calc(var(--spacing) * 6); } @@ -1068,9 +1049,6 @@ .py-4 { padding-block: calc(var(--spacing) * 4); } - .py-15 { - padding-block: calc(var(--spacing) * 15); - } .py-\[0\.2rem\] { padding-block: 0.2rem; } @@ -1080,18 +1058,6 @@ .pt-2 { padding-top: calc(var(--spacing) * 2); } - .pt-3 { - padding-top: calc(var(--spacing) * 3); - } - .pt-10 { - padding-top: calc(var(--spacing) * 10); - } - .pt-12 { - padding-top: calc(var(--spacing) * 12); - } - .pt-14 { - padding-top: calc(var(--spacing) * 14); - } .pt-15 { padding-top: calc(var(--spacing) * 15); } @@ -1113,48 +1079,24 @@ .pr-20 { padding-right: calc(var(--spacing) * 20); } - .pr-22 { - padding-right: calc(var(--spacing) * 22); - } .pr-24 { padding-right: calc(var(--spacing) * 24); } .pr-26 { padding-right: calc(var(--spacing) * 26); } - .pr-28 { - padding-right: calc(var(--spacing) * 28); - } .pr-30 { padding-right: calc(var(--spacing) * 30); } - .pr-32 { - padding-right: calc(var(--spacing) * 32); - } - .pr-129 { - padding-right: calc(var(--spacing) * 129); - } .pb-3 { padding-bottom: calc(var(--spacing) * 3); } .pb-4 { padding-bottom: calc(var(--spacing) * 4); } - .pb-10 { - padding-bottom: calc(var(--spacing) * 10); - } - .pb-10\.5 { - padding-bottom: calc(var(--spacing) * 10.5); - } - .pb-11 { - padding-bottom: calc(var(--spacing) * 11); - } .pb-12 { padding-bottom: calc(var(--spacing) * 12); } - .pb-14 { - padding-bottom: calc(var(--spacing) * 14); - } .pb-17 { padding-bottom: calc(var(--spacing) * 17); } @@ -1173,27 +1115,9 @@ .pl-9 { padding-left: calc(var(--spacing) * 9); } - .pl-10 { - padding-left: calc(var(--spacing) * 10); - } - .pl-12 { - padding-left: calc(var(--spacing) * 12); - } - .pl-14 { - padding-left: calc(var(--spacing) * 14); - } .pl-15 { padding-left: calc(var(--spacing) * 15); } - .pl-16 { - padding-left: calc(var(--spacing) * 16); - } - .pl-19 { - padding-left: calc(var(--spacing) * 19); - } - .pl-20 { - padding-left: calc(var(--spacing) * 20); - } .pl-21 { padding-left: calc(var(--spacing) * 21); } @@ -1295,6 +1219,9 @@ .text-amber-900 { color: var(--color-amber-900); } + .text-blue-500 { + color: var(--color-blue-500); + } .text-destructive { color: var(--color-destructive); } @@ -1313,9 +1240,18 @@ .text-primary-foreground { color: var(--color-primary-foreground); } + .text-purple-500 { + color: var(--color-purple-500); + } + .text-red-500 { + color: var(--color-red-500); + } .text-sidebar-primary-foreground { color: var(--color-sidebar-primary-foreground); } + .text-yellow-500 { + color: var(--color-yellow-500); + } .uppercase { text-transform: uppercase; } @@ -1357,10 +1293,6 @@ --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } - .ring { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } .ring-offset-background { --tw-ring-offset-color: var(--color-background); } @@ -1436,19 +1368,14 @@ visibility: visible; } } - .group-data-\[disabled\=true\]\:pointer-events-none { - &:is(:where(.group)[data-disabled="true"] *) { - pointer-events: none; + .group-data-\[copied\=true\]\:block { + &:is(:where(.group)[data-copied="true"] *) { + display: block; } } - .group-data-\[disabled\=true\]\:opacity-50 { - &:is(:where(.group)[data-disabled="true"] *) { - opacity: 50%; - } - } - .group-data-\[disabled\=true\]\/field\:opacity-50 { - &:is(:where(.group\/field)[data-disabled="true"] *) { - opacity: 50%; + .group-data-\[copied\=true\]\:hidden { + &:is(:where(.group)[data-copied="true"] *) { + display: none; } } .group-\[\.copied\]\:block { @@ -1466,16 +1393,6 @@ border-color: var(--color-primary); } } - .peer-disabled\:cursor-not-allowed { - &:is(:where(.peer):disabled ~ *) { - cursor: not-allowed; - } - } - .peer-disabled\:opacity-50 { - &:is(:where(.peer):disabled ~ *) { - opacity: 50%; - } - } .last\:border-b-0 { &:last-child { border-bottom-style: var(--tw-border-style); @@ -1534,13 +1451,6 @@ } } } - .hover\:bg-accent { - &:hover { - @media (hover: hover) { - background-color: var(--color-accent); - } - } - } .hover\:bg-accent\/50 { &:hover { @media (hover: hover) { @@ -1656,46 +1566,16 @@ pointer-events: none; } } - .disabled\:border { - &:disabled { - border-style: var(--tw-border-style); - border-width: 1px; - } - } .disabled\:opacity-50 { &:disabled { opacity: 50%; } } - .has-data-\[state\=checked\]\:border-primary { - &:has(*[data-state="checked"]) { - border-color: var(--color-primary); - } - } - .has-data-\[state\=checked\]\:bg-primary\/5 { - &:has(*[data-state="checked"]) { - background-color: var(--color-primary); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-primary) 5%, transparent); - } - } - } - .has-\[\:checkd\]\:border { - &:has(*:is(:checkd)) { - border-style: var(--tw-border-style); - border-width: 1px; - } - } .has-\[\:checked\]\:border-primary { &:has(*:is(:checked)) { border-color: var(--color-primary); } } - .has-\[\:checked\]\:bg-muted { - &:has(*:is(:checked)) { - background-color: var(--color-muted); - } - } .has-\[\:checked\]\:bg-primary\/5 { &:has(*:is(:checked)) { background-color: var(--color-primary); @@ -1704,12 +1584,6 @@ } } } - .has-\[input\:checkd\]\:border { - &:has(*:is(input:checkd)) { - border-style: var(--tw-border-style); - border-width: 1px; - } - } .has-\[input\[type\=\'checkbox\'\]\:checked\]\:border-blue-600 { &:has(*:is(input[type='checkbox']:checked)) { border-color: var(--color-blue-600); @@ -1730,32 +1604,6 @@ background-color: var(--color-green-50); } } - .has-\[\>\[data-slot\=field\]\]\:w-full { - &:has(>[data-slot=field]) { - width: 100%; - } - } - .has-\[\>\[data-slot\=field\]\]\:flex-col { - &:has(>[data-slot=field]) { - flex-direction: column; - } - } - .has-\[\>\[data-slot\=field\]\]\:rounded-md { - &:has(>[data-slot=field]) { - border-radius: var(--radius-md); - } - } - .has-\[\>\[data-slot\=field\]\]\:border { - &:has(>[data-slot=field]) { - border-style: var(--tw-border-style); - border-width: 1px; - } - } - .has-\[\>svg\]\:px-2 { - &:has(>svg) { - padding-inline: calc(var(--spacing) * 2); - } - } .has-\[\>svg\]\:px-2\.5 { &:has(>svg) { padding-inline: calc(var(--spacing) * 2.5); @@ -1779,21 +1627,11 @@ background-color: transparent; } } - .aria-pressed\:text-blue-500 { - &[aria-pressed="true"] { - color: var(--color-blue-500); - } - } .aria-pressed\:text-blue-600 { &[aria-pressed="true"] { color: var(--color-blue-600); } } - .aria-pressed\:text-yellow-500 { - &[aria-pressed="true"] { - color: var(--color-yellow-500); - } - } .aria-pressed\:hover\:bg-accent { &[aria-pressed="true"] { &:hover { @@ -1985,18 +1823,6 @@ } } } - .dark\:hover\:bg-accent\/50 { - &:is(.dark *) { - &:hover { - @media (hover: hover) { - background-color: var(--color-accent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-accent) 50%, transparent); - } - } - } - } - } .dark\:hover\:bg-destructive\/20 { &:is(.dark *) { &:hover { @@ -2019,16 +1845,6 @@ } } } - .dark\:has-data-\[state\=checked\]\:bg-primary\/10 { - &:is(.dark *) { - &:has(*[data-state="checked"]) { - background-color: var(--color-primary); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-primary) 10%, transparent); - } - } - } - } .dark\:has-\[\:checked\]\:bg-primary\/10 { &:is(.dark *) { &:has(*:is(:checked)) { @@ -2330,19 +2146,6 @@ } } } - .\[disabled\]\:border { - &:is(disabled) { - border-style: var(--tw-border-style); - border-width: 1px; - } - } - .\[\&\>\*\]\:data-\[slot\=field\]\:p-4 { - &>* { - &[data-slot="field"] { - padding: calc(var(--spacing) * 4); - } - } - } .\[\&\>a\]\:underline { &>a { text-decoration-line: underline; @@ -2388,12 +2191,6 @@ } } } - .\[\&\>svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3\.5 { - &>svg:not([class*='size-']) { - width: calc(var(--spacing) * 3.5); - height: calc(var(--spacing) * 3.5); - } - } } :root { --radius: 0.625rem; @@ -2597,7 +2394,7 @@ justify-content: center; gap: calc(var(--spacing) * 1); overflow: hidden; - border-radius: var(--radius-md); + border-radius: calc(infinity * 1px); border-style: var(--tw-border-style); border-width: 1px; padding-inline: calc(var(--spacing) * 2); @@ -3909,7 +3706,7 @@ } } @layer components { - kbd { + .kbd { pointer-events: none; display: inline-flex; height: calc(var(--spacing) * 5); diff --git a/docs/src/components/command.njk b/docs/src/components/command.njk index f98c155..3f468a3 100644 --- a/docs/src/components/command.njk +++ b/docs/src/components/command.njk @@ -225,7 +225,7 @@ toc:

    Dialog

    -

    You can use some simple JavaScript to open the command menu with a keyboard shortcut (in this case ⌘J).

    +

    You can use some simple JavaScript to open the command menu with a keyboard shortcut (in this case ⌘J).

    {% set code_dialog %} @@ -235,7 +235,7 @@ toc: onclick="document.getElementById('demo-command-dialog').showModal()" > Open command menu - ⌘J + ⌘J {% call command_dialog(id="demo-command-dialog") %} diff --git a/docs/src/components/empty.njk b/docs/src/components/empty.njk index 0da962b..c094e45 100644 --- a/docs/src/components/empty.njk +++ b/docs/src/components/empty.njk @@ -5,9 +5,6 @@ description: Display empty states with icons, titles, descriptions, and actions. toc: - label: Usage id: usage - children: - - label: HTML structure - id: html-structure - label: Examples id: examples children: @@ -58,57 +55,8 @@ toc:

    Usage

    -

    The example simply uses Tailwind utility classes to create an empty state layout.

    -
    - -{{ code_block(code_default) }} - -

    HTML structure

    - -
    -
    -
    <div>
    -
    Main container with centered layout utilities: -
      -
    • flex flex-col items-center justify-center: centers content
    • -
    • gap-6: spacing between sections
    • -
    • p-6 md:p-12: responsive padding
    • -
    • text-center text-balance: centered text with better wrapping
    • -
    -
    -
    <header>
    -
    Header section containing the icon/avatar, title, and description: -
      -
    • max-w-sm: constrains width for readability
    • -
    • gap-2 or gap-3: spacing between elements
    • -
    -
    -
    <div> Optional
    -
    Media container for icon or avatar: -
      -
    • For icons: bg-muted text-foreground size-10 rounded-lg
    • -
    • For avatars: size-12 rounded-full grayscale
    • -
    • For avatar groups: flex -space-x-2 with ring utilities
    • -
    -
    -
    <h3>
    -
    Title with text-lg font-medium tracking-tight
    -
    <p>
    -
    Description with text-muted-foreground text-sm/relaxed
    -
    -
    -
    <section> Optional
    -
    Content area for actions (buttons, inputs, etc.): -
      -
    • max-w-sm or max-w-md: constrains width
    • -
    • flex flex-col items-center gap-3: vertical layout with spacing
    • -
    -
    -
    <a> or other elements Optional
    -
    Additional links or actions outside the main content section
    -
    -
    -
    +

    Empty states are pure HTML composition using Tailwind utility classes. Use flex layout utilities to center content, and compose with semantic elements like <header>, <h3>, <p>, and <button>.

    +

    Browse the examples below and copy the pattern that fits your needs.

    Examples

    @@ -186,7 +134,7 @@ toc:

    Input Group

    {% set code_input_group %} -
    +

    404 - Not Found

    diff --git a/docs/src/components/input-group.njk b/docs/src/components/input-group.njk index 5f9bfcb..8e5d17e 100644 --- a/docs/src/components/input-group.njk +++ b/docs/src/components/input-group.njk @@ -173,8 +173,19 @@ toc:

    - +
    +
    @@ -264,15 +275,15 @@ toc:
    -
    - {% lucide "loader-circle" %} +
    + {% lucide "loader-circle", { "class": "animate-spin" } %}
    -
    - {% lucide "loader-circle" %} +
    + {% lucide "loader-circle", { "class": "animate-spin" } %}
    @@ -280,16 +291,16 @@ toc:
    Saving...
    -
    - {% lucide "loader-circle" %} +
    + {% lucide "loader-circle", { "class": "animate-spin" } %}
    -
    - {% lucide "loader" %} +
    + {% lucide "loader-circle", { "class": "animate-spin" } %}
    Please wait... diff --git a/docs/src/components/item.njk b/docs/src/components/item.njk index 6af2b36..eacbaeb 100644 --- a/docs/src/components/item.njk +++ b/docs/src/components/item.njk @@ -45,7 +45,7 @@ toc: -
    -

    4:05

    +

    4:05

    @@ -200,7 +200,7 @@ toc:
    -

    3:30

    +

    3:30

    diff --git a/docs/src/components/kbd.njk b/docs/src/components/kbd.njk index 5abbb02..da60653 100644 --- a/docs/src/components/kbd.njk +++ b/docs/src/components/kbd.njk @@ -20,15 +20,15 @@ toc: {% set code_html %}
    - ⌘ - ⇧ - ⌥ - ⌃ + ⌘ + ⇧ + ⌥ + ⌃ - Ctrl + Ctrl + - B + B
    {% endset %} @@ -38,11 +38,11 @@ toc:

    Usage

    -

    Simply use the <kbd> element:

    +

    Use the <kbd> element with the kbd class:

    {% set code_simple %} -⌘K +⌘K {% endset %} {{ code_block(code_simple | prettyHtml, "html") }} @@ -55,8 +55,8 @@ toc:

    Use - Ctrl + B - Ctrl + K + Ctrl + B + Ctrl + K to open the command palette

    @@ -68,8 +68,8 @@ toc: {% set button_html %}
    - - + +
    {% endset %} diff --git a/docs/src/components/progress.njk b/docs/src/components/progress.njk new file mode 100644 index 0000000..b86fb5a --- /dev/null +++ b/docs/src/components/progress.njk @@ -0,0 +1,44 @@ +--- +layout: layouts/page.njk +title: Progress +description: Displays an indicator showing the completion progress of a task, typically displayed as a progress bar. +toc: + - label: Usage + id: usage +--- + +{% from "macros/code_preview.njk" import code_preview %} +{% from "macros/code_block.njk" import code_block %} + +
    + {% lucide "circle-alert" %} +

    There is no dedicated Progress component in Basecoat.

    +
    + +{% set code_default %} +
    +
    +
    + +{% endset %} + +{{ code_preview("progress-default", code_default, class="w-full max-w-sm") }} + +

    Usage

    + +
    +

    Progress bars are pure HTML composition using Tailwind utility classes. Use a container div for the track and an inner div for the indicator. Set the indicator's width with inline styles or via JavaScript.

    +
    + +{% set code_usage %} +
    +
    +
    +{% endset %} + +{{ code_block(code_usage) }} + diff --git a/docs/src/components/spinner.njk b/docs/src/components/spinner.njk new file mode 100644 index 0000000..6109b06 --- /dev/null +++ b/docs/src/components/spinner.njk @@ -0,0 +1,215 @@ +--- +layout: layouts/page.njk +title: Spinner +description: An indicator that can be used to show a loading state. +toc: + - label: Usage + id: usage + - label: Examples + id: examples + children: + - label: Size + id: example-size + - label: Color + id: example-color + - label: Button + id: example-button + - label: Badge + id: example-badge + - label: Input Group + id: example-input-group + - label: Empty + id: example-empty + - label: Item + id: example-item +--- + +{% from "macros/code_preview.njk" import code_preview %} +{% from "macros/code_block.njk" import code_block %} + +
    + {% lucide "circle-alert" %} +

    There is no dedicated Spinner component in Basecoat.

    +
    + +{% set code_default %} +
    +
    + {% lucide "loader-circle", { "role": "status", "aria-label": "Loading", "class": "animate-spin" } %} +
    +
    +

    Processing payment...

    +
    +
    +

    $100.00

    +
    +
    +{% endset %} + +{{ code_preview("spinner-default", code_default, class="w-full max-w-xs") }} + +

    Usage

    + +
    +

    Spinners are pure HTML using the loader-circle Lucide icon with the animate-spin Tailwind utility. Add role="status" and aria-label="Loading" for accessibility.

    +

    Browse the examples below and copy the pattern that fits your needs.

    +
    + +

    Examples

    + +

    Size

    + +
    +

    Use the size-* utility class to change the size of the spinner.

    +
    + +{% set code_size %} +
    + {% lucide "loader-circle", { "role": "status", "aria-label": "Loading", "class": "size-3 animate-spin" } %} + {% lucide "loader-circle", { "role": "status", "aria-label": "Loading", "class": "size-4 animate-spin" } %} + {% lucide "loader-circle", { "role": "status", "aria-label": "Loading", "class": "size-6 animate-spin" } %} + {% lucide "loader-circle", { "role": "status", "aria-label": "Loading", "class": "size-8 animate-spin" } %} +
    +{% endset %} + +{{ code_preview("spinner-size", code_size) }} + +

    Color

    + +
    +

    Use the text-* utility class to change the color of the spinner.

    +
    + +{% set code_color %} +
    + {% lucide "loader-circle", { "role": "status", "aria-label": "Loading", "class": "size-6 animate-spin text-red-500" } %} + {% lucide "loader-circle", { "role": "status", "aria-label": "Loading", "class": "size-6 animate-spin text-green-500" } %} + {% lucide "loader-circle", { "role": "status", "aria-label": "Loading", "class": "size-6 animate-spin text-blue-500" } %} + {% lucide "loader-circle", { "role": "status", "aria-label": "Loading", "class": "size-6 animate-spin text-yellow-500" } %} + {% lucide "loader-circle", { "role": "status", "aria-label": "Loading", "class": "size-6 animate-spin text-purple-500" } %} +
    +{% endset %} + +{{ code_preview("spinner-color", code_color) }} + +

    Button

    + +
    +

    Add a spinner to a button to indicate a loading state.

    +
    + +{% set code_button %} +
    + + + +
    +{% endset %} + +{{ code_preview("spinner-button", code_button) }} + +

    Badge

    + +{% set code_badge %} +
    + + {% lucide "loader-circle", { "role": "status", "aria-label": "Loading", "class": "animate-spin" } %} + Syncing + + + {% lucide "loader-circle", { "role": "status", "aria-label": "Loading", "class": "animate-spin" } %} + Updating + + + {% lucide "loader-circle", { "role": "status", "aria-label": "Loading", "class": "animate-spin" } %} + Processing + +
    +{% endset %} + +{{ code_preview("spinner-badge", code_badge) }} + +

    Input Group

    + +
    +

    Input groups can have spinners positioned inside them.

    +
    + +{% set code_input_group %} +
    +
    + +
    + {% lucide "loader-circle", { "role": "status", "aria-label": "Loading", "class": "animate-spin" } %} +
    +
    + +
    + +
    + {% lucide "loader-circle", { "role": "status", "aria-label": "Loading", "class": "size-4 animate-spin text-muted-foreground" } %} + Validating... + +
    +
    +
    +{% endset %} + +{{ code_preview("spinner-input-group", code_input_group, class="w-full max-w-md") }} + +

    Empty

    + +
    +

    Use a spinner in empty states to indicate a loading or processing state.

    +
    + +{% set code_empty %} +
    +
    +
    + {% lucide "loader-circle", { "role": "status", "aria-label": "Loading", "class": "animate-spin size-4" } %} +
    +

    Processing your request

    +

    Please wait while we process your request. Do not refresh the page.

    +
    +
    + +
    +
    +{% endset %} + +{{ code_preview("spinner-empty", code_empty) }} + +

    Item

    + +{% set code_item %} +
    +
    + {% lucide "loader-circle", { "role": "status", "aria-label": "Loading", "class": "animate-spin size-4 text-muted-foreground" } %} +
    +
    +

    Downloading...

    +

    129 MB / 1000 MB

    +
    + +
    +
    +
    +
    +
    +
    +{% endset %} + +{{ code_preview("spinner-item", code_item, class="w-full max-w-md") }} + diff --git a/src/css/basecoat.css b/src/css/basecoat.css index 3f5da68..0292f79 100644 --- a/src/css/basecoat.css +++ b/src/css/basecoat.css @@ -184,7 +184,7 @@ .badge-secondary, .badge-destructive, .badge-outline { - @apply inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden; + @apply inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden; } .badge, .badge-primary { @@ -747,7 +747,7 @@ /* Kbd */ @layer components { - kbd { + .kbd { @apply bg-muted text-muted-foreground pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm px-1 font-sans text-xs font-medium select-none [&_svg:not([class*='size-'])]:size-3; } } From eed1938d2fc267394a88d334be93817384e906ee Mon Sep 17 00:00:00 2001 From: Ronan Berder Date: Mon, 3 Nov 2025 14:14:56 +0800 Subject: [PATCH 08/11] Adding Icons section --- docs/src/assets/styles.css | 6176 +----------------------------------- docs/src/installation.njk | 31 + 2 files changed, 32 insertions(+), 6175 deletions(-) diff --git a/docs/src/assets/styles.css b/docs/src/assets/styles.css index 25433bf..f166b29 100644 --- a/docs/src/assets/styles.css +++ b/docs/src/assets/styles.css @@ -1,6176 +1,2 @@ /*! tailwindcss v4.1.4 | MIT License | https://tailwindcss.com */ -@layer properties; -@layer theme, base, components, utilities; -@layer theme { - :root, :host { - --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", - "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", - "Courier New", monospace; - --color-red-500: oklch(63.7% 0.237 25.331); - --color-amber-50: oklch(98.7% 0.022 95.277); - --color-amber-100: oklch(96.2% 0.059 95.617); - --color-amber-900: oklch(41.4% 0.112 45.904); - --color-amber-950: oklch(27.9% 0.077 45.635); - --color-yellow-500: oklch(79.5% 0.184 86.047); - --color-green-50: oklch(98.2% 0.018 155.826); - --color-green-500: oklch(72.3% 0.219 149.579); - --color-green-600: oklch(62.7% 0.194 149.214); - --color-green-900: oklch(39.3% 0.095 152.535); - --color-green-950: oklch(26.6% 0.065 152.934); - --color-blue-50: oklch(97% 0.014 254.604); - --color-blue-300: oklch(80.9% 0.105 251.813); - --color-blue-500: oklch(62.3% 0.214 259.815); - --color-blue-600: oklch(54.6% 0.245 262.881); - --color-blue-700: oklch(48.8% 0.243 264.376); - --color-blue-800: oklch(42.4% 0.199 265.638); - --color-blue-900: oklch(37.9% 0.146 265.522); - --color-blue-950: oklch(28.2% 0.091 267.935); - --color-purple-500: oklch(62.7% 0.265 303.9); - --color-neutral-300: oklch(87% 0 0); - --color-neutral-800: oklch(26.9% 0 0); - --color-black: #000; - --color-white: #fff; - --spacing: 0.25rem; - --breakpoint-md: 48rem; - --breakpoint-lg: 64rem; - --container-xs: 20rem; - --container-sm: 24rem; - --container-md: 28rem; - --container-lg: 32rem; - --container-xl: 36rem; - --text-xs: 0.75rem; - --text-xs--line-height: calc(1 / 0.75); - --text-sm: 0.875rem; - --text-sm--line-height: calc(1.25 / 0.875); - --text-base: 1rem; - --text-base--line-height: calc(1.5 / 1); - --text-lg: 1.125rem; - --text-lg--line-height: calc(1.75 / 1.125); - --text-xl: 1.25rem; - --text-xl--line-height: calc(1.75 / 1.25); - --text-2xl: 1.5rem; - --text-2xl--line-height: calc(2 / 1.5); - --text-3xl: 1.875rem; - --text-3xl--line-height: calc(2.25 / 1.875); - --text-4xl: 2.25rem; - --text-4xl--line-height: calc(2.5 / 2.25); - --font-weight-normal: 400; - --font-weight-medium: 500; - --font-weight-semibold: 600; - --font-weight-bold: 700; - --tracking-tight: -0.025em; - --tracking-normal: 0em; - --tracking-widest: 0.1em; - --leading-tight: 1.25; - --leading-snug: 1.375; - --leading-normal: 1.5; - --leading-relaxed: 1.625; - --radius-xs: 0.125rem; - --radius-sm: calc(var(--radius) - 4px); - --radius-md: calc(var(--radius) - 2px); - --radius-lg: var(--radius); - --radius-xl: calc(var(--radius) + 4px); - --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); - --animate-spin: spin 1s linear infinite; - --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; - --aspect-video: 16 / 9; - --default-transition-duration: 150ms; - --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - --default-font-family: var(--font-sans); - --default-mono-font-family: var(--font-mono); - --color-background: var(--background); - --color-foreground: var(--foreground); - --color-card: var(--card); - --color-card-foreground: var(--card-foreground); - --color-popover: var(--popover); - --color-popover-foreground: var(--popover-foreground); - --color-primary: var(--primary); - --color-primary-foreground: var(--primary-foreground); - --color-secondary: var(--secondary); - --color-secondary-foreground: var(--secondary-foreground); - --color-muted: var(--muted); - --color-muted-foreground: var(--muted-foreground); - --color-accent: var(--accent); - --color-accent-foreground: var(--accent-foreground); - --color-destructive: var(--destructive); - --color-border: var(--border); - --color-input: var(--input); - --color-ring: var(--ring); - --color-sidebar: var(--sidebar); - --color-sidebar-foreground: var(--sidebar-foreground); - --color-sidebar-primary: var(--sidebar-primary); - --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); - --color-sidebar-accent: var(--sidebar-accent); - --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); - --color-sidebar-border: var(--sidebar-border); - --color-sidebar-ring: var(--sidebar-ring); - } -} -@layer base { - *, ::after, ::before, ::backdrop, ::file-selector-button { - box-sizing: border-box; - margin: 0; - padding: 0; - border: 0 solid; - } - html, :host { - line-height: 1.5; - -webkit-text-size-adjust: 100%; - tab-size: 4; - font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"); - font-feature-settings: var(--default-font-feature-settings, normal); - font-variation-settings: var(--default-font-variation-settings, normal); - -webkit-tap-highlight-color: transparent; - } - hr { - height: 0; - color: inherit; - border-top-width: 1px; - } - abbr:where([title]) { - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; - } - h1, h2, h3, h4, h5, h6 { - font-size: inherit; - font-weight: inherit; - } - a { - color: inherit; - -webkit-text-decoration: inherit; - text-decoration: inherit; - } - b, strong { - font-weight: bolder; - } - code, kbd, samp, pre { - font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace); - font-feature-settings: var(--default-mono-font-feature-settings, normal); - font-variation-settings: var(--default-mono-font-variation-settings, normal); - font-size: 1em; - } - small { - font-size: 80%; - } - sub, sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; - } - sub { - bottom: -0.25em; - } - sup { - top: -0.5em; - } - table { - text-indent: 0; - border-color: inherit; - border-collapse: collapse; - } - :-moz-focusring { - outline: auto; - } - progress { - vertical-align: baseline; - } - summary { - display: list-item; - } - ol, ul, menu { - list-style: none; - } - img, svg, video, canvas, audio, iframe, embed, object { - display: block; - vertical-align: middle; - } - img, video { - max-width: 100%; - height: auto; - } - button, input, select, optgroup, textarea, ::file-selector-button { - font: inherit; - font-feature-settings: inherit; - font-variation-settings: inherit; - letter-spacing: inherit; - color: inherit; - border-radius: 0; - background-color: transparent; - opacity: 1; - } - :where(select:is([multiple], [size])) optgroup { - font-weight: bolder; - } - :where(select:is([multiple], [size])) optgroup option { - padding-inline-start: 20px; - } - ::file-selector-button { - margin-inline-end: 4px; - } - ::placeholder { - opacity: 1; - } - @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) { - ::placeholder { - color: currentcolor; - @supports (color: color-mix(in lab, red, red)) { - color: color-mix(in oklab, currentcolor 50%, transparent); - } - } - } - textarea { - resize: vertical; - } - ::-webkit-search-decoration { - -webkit-appearance: none; - } - ::-webkit-date-and-time-value { - min-height: 1lh; - text-align: inherit; - } - ::-webkit-datetime-edit { - display: inline-flex; - } - ::-webkit-datetime-edit-fields-wrapper { - padding: 0; - } - ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field { - padding-block: 0; - } - :-moz-ui-invalid { - box-shadow: none; - } - button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button { - appearance: button; - } - ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { - height: auto; - } - [hidden]:where(:not([hidden="until-found"])) { - display: none !important; - } -} -@layer utilities { - .pointer-events-none { - pointer-events: none; - } - .invisible { - visibility: hidden; - } - .sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border-width: 0; - } - .absolute { - position: absolute; - } - .relative { - position: relative; - } - .static { - position: static; - } - .sticky { - position: sticky; - } - .inset-0 { - inset: calc(var(--spacing) * 0); - } - .inset-x-0 { - inset-inline: calc(var(--spacing) * 0); - } - .top-0 { - top: calc(var(--spacing) * 0); - } - .top-1\/2 { - top: calc(1/2 * 100%); - } - .top-2 { - top: calc(var(--spacing) * 2); - } - .top-22 { - top: calc(var(--spacing) * 22); - } - .right-1\.5 { - right: calc(var(--spacing) * 1.5); - } - .right-2\.5 { - right: calc(var(--spacing) * 2.5); - } - .right-3 { - right: calc(var(--spacing) * 3); - } - .bottom-0 { - bottom: calc(var(--spacing) * 0); - } - .left-1\.5 { - left: calc(var(--spacing) * 1.5); - } - .left-1\/2 { - left: calc(1/2 * 100%); - } - .left-2 { - left: calc(var(--spacing) * 2); - } - .left-3 { - left: calc(var(--spacing) * 3); - } - .isolate { - isolation: isolate; - } - .z-10 { - z-index: 10; - } - .col-span-2 { - grid-column: span 2 / span 2; - } - .container { - width: 100%; - @media (width >= 40rem) { - max-width: 40rem; - } - @media (width >= 48rem) { - max-width: 48rem; - } - @media (width >= 64rem) { - max-width: 64rem; - } - @media (width >= 80rem) { - max-width: 80rem; - } - @media (width >= 96rem) { - max-width: 96rem; - } - } - .m-0 { - margin: calc(var(--spacing) * 0); - } - .mx-auto { - margin-inline: auto; - } - .my-4 { - margin-block: calc(var(--spacing) * 4); - } - .my-6 { - margin-block: calc(var(--spacing) * 6); - } - .mt-4 { - margin-top: calc(var(--spacing) * 4); - } - .mt-6 { - margin-top: calc(var(--spacing) * 6); - } - .mt-8 { - margin-top: calc(var(--spacing) * 8); - } - .mr-auto { - margin-right: auto; - } - .mb-1 { - margin-bottom: calc(var(--spacing) * 1); - } - .mb-2 { - margin-bottom: calc(var(--spacing) * 2); - } - .mb-4 { - margin-bottom: calc(var(--spacing) * 4); - } - .mb-6 { - margin-bottom: calc(var(--spacing) * 6); - } - .mb-8 { - margin-bottom: calc(var(--spacing) * 8); - } - .mb-12 { - margin-bottom: calc(var(--spacing) * 12); - } - .-ml-1\.5 { - margin-left: calc(var(--spacing) * -1.5); - } - .ml-auto { - margin-left: auto; - } - .line-clamp-1 { - overflow: hidden; - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 1; - } - .line-clamp-2 { - overflow: hidden; - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 2; - } - .block { - display: block; - } - .contents { - display: contents; - } - .flex { - display: flex; - } - .grid { - display: grid; - } - .hidden { - display: none; - } - .inline { - display: inline; - } - .inline-block { - display: inline-block; - } - .inline-flex { - display: inline-flex; - } - .table { - display: table; - } - .aspect-square { - aspect-ratio: 1 / 1; - } - .aspect-video { - aspect-ratio: var(--aspect-video); - } - .size-2 { - width: calc(var(--spacing) * 2); - height: calc(var(--spacing) * 2); - } - .size-2\.5 { - width: calc(var(--spacing) * 2.5); - height: calc(var(--spacing) * 2.5); - } - .size-3 { - width: calc(var(--spacing) * 3); - height: calc(var(--spacing) * 3); - } - .size-3\.5 { - width: calc(var(--spacing) * 3.5); - height: calc(var(--spacing) * 3.5); - } - .size-4 { - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - } - .size-6 { - width: calc(var(--spacing) * 6); - height: calc(var(--spacing) * 6); - } - .size-7 { - width: calc(var(--spacing) * 7); - height: calc(var(--spacing) * 7); - } - .size-8 { - width: calc(var(--spacing) * 8); - height: calc(var(--spacing) * 8); - } - .size-9 { - width: calc(var(--spacing) * 9); - height: calc(var(--spacing) * 9); - } - .size-10 { - width: calc(var(--spacing) * 10); - height: calc(var(--spacing) * 10); - } - .size-12 { - width: calc(var(--spacing) * 12); - height: calc(var(--spacing) * 12); - } - .h-1\.5 { - height: calc(var(--spacing) * 1.5); - } - .h-2 { - height: calc(var(--spacing) * 2); - } - .h-4 { - height: calc(var(--spacing) * 4); - } - .h-6 { - height: calc(var(--spacing) * 6); - } - .h-8 { - height: calc(var(--spacing) * 8); - } - .h-10 { - height: calc(var(--spacing) * 10); - } - .h-12 { - height: calc(var(--spacing) * 12); - } - .h-14 { - height: calc(var(--spacing) * 14); - } - .h-full { - height: 100%; - } - .max-h-64 { - max-height: calc(var(--spacing) * 64); - } - .max-h-\[150px\] { - max-height: 150px; - } - .max-h-\[200px\] { - max-height: 200px; - } - .max-h-\[612px\] { - max-height: 612px; - } - .max-h-\[650px\] { - max-height: 650px; - } - .min-h-25 { - min-height: calc(var(--spacing) * 25); - } - .min-h-27 { - min-height: calc(var(--spacing) * 27); - } - .min-h-77 { - min-height: calc(var(--spacing) * 77); - } - .min-h-\[350px\] { - min-height: 350px; - } - .w-0 { - width: calc(var(--spacing) * 0); - } - .w-1\/2 { - width: calc(1/2 * 100%); - } - .w-2\/3 { - width: calc(2/3 * 100%); - } - .w-3\/4 { - width: calc(3/4 * 100%); - } - .w-4 { - width: calc(var(--spacing) * 4); - } - .w-7 { - width: calc(var(--spacing) * 7); - } - .w-7\.5 { - width: calc(var(--spacing) * 7.5); - } - .w-8 { - width: calc(var(--spacing) * 8); - } - .w-10 { - width: calc(var(--spacing) * 10); - } - .w-48 { - width: calc(var(--spacing) * 48); - } - .w-72 { - width: calc(var(--spacing) * 72); - } - .w-80 { - width: calc(var(--spacing) * 80); - } - .w-\[100px\] { - width: 100px; - } - .w-\[150px\] { - width: 150px; - } - .w-\[180px\] { - width: 180px; - } - .w-\[200px\] { - width: 200px; - } - .w-\[271px\] { - width: 271px; - } - .w-fit { - width: fit-content; - } - .w-full { - width: 100%; - } - .w-max { - width: max-content; - } - .max-w-72 { - max-width: calc(var(--spacing) * 72); - } - .max-w-\[75\%\] { - max-width: 75%; - } - .max-w-\[200px\] { - max-width: 200px; - } - .max-w-\[300px\] { - max-width: 300px; - } - .max-w-\[450px\] { - max-width: 450px; - } - .max-w-lg { - max-width: var(--container-lg); - } - .max-w-md { - max-width: var(--container-md); - } - .max-w-screen-lg { - max-width: var(--breakpoint-lg); - } - .max-w-screen-md { - max-width: var(--breakpoint-md); - } - .max-w-sm { - max-width: var(--container-sm); - } - .max-w-xl { - max-width: var(--container-xl); - } - .max-w-xs { - max-width: var(--container-xs); - } - .min-w-0 { - min-width: calc(var(--spacing) * 0); - } - .min-w-5 { - min-width: calc(var(--spacing) * 5); - } - .min-w-32 { - min-width: calc(var(--spacing) * 32); - } - .min-w-56 { - min-width: calc(var(--spacing) * 56); - } - .min-w-\[8rem\] { - min-width: 8rem; - } - .flex-1 { - flex: 1; - } - .flex-none { - flex: none; - } - .flex-shrink { - flex-shrink: 1; - } - .shrink-0 { - flex-shrink: 0; - } - .-translate-x-1\/2 { - --tw-translate-x: calc(calc(1/2 * 100%) * -1); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - .-translate-y-1\/2 { - --tw-translate-y: calc(calc(1/2 * 100%) * -1); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - .translate-y-0\.5 { - --tw-translate-y: calc(var(--spacing) * 0.5); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - .transform { - transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,); - } - .animate-pulse { - animation: var(--animate-pulse); - } - .animate-spin { - animation: var(--animate-spin); - } - .cursor-pointer { - cursor: pointer; - } - .scroll-m-20 { - scroll-margin: calc(var(--spacing) * 20); - } - .scroll-mt-14 { - scroll-margin-top: calc(var(--spacing) * 14); - } - .scroll-mt-16 { - scroll-margin-top: calc(var(--spacing) * 16); - } - .list-decimal { - list-style-type: decimal; - } - .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)); - } - .flex-col { - flex-direction: column; - } - .flex-row { - flex-direction: row; - } - .flex-wrap { - flex-wrap: wrap; - } - .items-center { - align-items: center; - } - .items-start { - align-items: flex-start; - } - .items-stretch { - align-items: stretch; - } - .justify-between { - justify-content: space-between; - } - .justify-center { - justify-content: center; - } - .justify-start { - justify-content: flex-start; - } - .gap-0\.5 { - gap: calc(var(--spacing) * 0.5); - } - .gap-1 { - gap: calc(var(--spacing) * 1); - } - .gap-1\.5 { - gap: calc(var(--spacing) * 1.5); - } - .gap-2 { - gap: calc(var(--spacing) * 2); - } - .gap-2\.5 { - gap: calc(var(--spacing) * 2.5); - } - .gap-3 { - gap: calc(var(--spacing) * 3); - } - .gap-4 { - gap: calc(var(--spacing) * 4); - } - .gap-6 { - gap: calc(var(--spacing) * 6); - } - .gap-8 { - gap: calc(var(--spacing) * 8); - } - .gap-10 { - gap: calc(var(--spacing) * 10); - } - .gap-12 { - gap: calc(var(--spacing) * 12); - } - .space-y-1 { - :where(& > :not(:last-child)) { - --tw-space-y-reverse: 0; - margin-block-start: calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse)); - margin-block-end: calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse))); - } - } - .space-y-2 { - :where(& > :not(:last-child)) { - --tw-space-y-reverse: 0; - margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse)); - margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse))); - } - } - .space-y-4 { - :where(& > :not(:last-child)) { - --tw-space-y-reverse: 0; - margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse)); - margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse))); - } - } - .space-y-6 { - :where(& > :not(:last-child)) { - --tw-space-y-reverse: 0; - margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse)); - margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse))); - } - } - .gap-x-1\.5 { - column-gap: calc(var(--spacing) * 1.5); - } - .gap-x-2 { - column-gap: calc(var(--spacing) * 2); - } - .gap-x-4 { - column-gap: calc(var(--spacing) * 4); - } - .gap-x-10 { - column-gap: calc(var(--spacing) * 10); - } - .-space-x-2 { - :where(& > :not(:last-child)) { - --tw-space-x-reverse: 0; - margin-inline-start: calc(calc(var(--spacing) * -2) * var(--tw-space-x-reverse)); - margin-inline-end: calc(calc(var(--spacing) * -2) * calc(1 - var(--tw-space-x-reverse))); - } - } - .space-x-2 { - :where(& > :not(:last-child)) { - --tw-space-x-reverse: 0; - margin-inline-start: calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse)); - margin-inline-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse))); - } - } - .gap-y-4 { - row-gap: calc(var(--spacing) * 4); - } - .gap-y-6 { - row-gap: calc(var(--spacing) * 6); - } - .gap-y-10 { - row-gap: calc(var(--spacing) * 10); - } - .self-start { - align-self: flex-start; - } - .truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - .overflow-hidden { - overflow: hidden; - } - .overflow-x-auto { - overflow-x: auto; - } - .overflow-y-auto { - overflow-y: auto; - } - .rounded { - border-radius: 0.25rem; - } - .rounded-\[2px\] { - border-radius: 2px; - } - .rounded-full { - border-radius: calc(infinity * 1px); - } - .rounded-lg { - border-radius: var(--radius-lg); - } - .rounded-md { - border-radius: var(--radius-md); - } - .rounded-none { - border-radius: 0; - } - .rounded-sm { - border-radius: var(--radius-sm); - } - .rounded-xl { - border-radius: var(--radius-xl); - } - .rounded-l-md { - border-top-left-radius: var(--radius-md); - border-bottom-left-radius: var(--radius-md); - } - .rounded-r-md { - border-top-right-radius: var(--radius-md); - border-bottom-right-radius: var(--radius-md); - } - .border { - border-style: var(--tw-border-style); - border-width: 1px; - } - .border-2 { - border-style: var(--tw-border-style); - border-width: 2px; - } - .border-t { - border-top-style: var(--tw-border-style); - border-top-width: 1px; - } - .border-r { - border-right-style: var(--tw-border-style); - border-right-width: 1px; - } - .border-r-0 { - border-right-style: var(--tw-border-style); - border-right-width: 0px; - } - .border-b { - border-bottom-style: var(--tw-border-style); - border-bottom-width: 1px; - } - .border-l-0 { - border-left-style: var(--tw-border-style); - border-left-width: 0px; - } - .border-dashed { - --tw-border-style: dashed; - border-style: dashed; - } - .border-amber-50 { - border-color: var(--color-amber-50); - } - .border-border { - border-color: var(--color-border); - } - .border-border\/50 { - border-color: var(--color-border); - @supports (color: color-mix(in lab, red, red)) { - border-color: color-mix(in oklab, var(--color-border) 50%, transparent); - } - } - .border-muted { - border-color: var(--color-muted); - } - .border-transparent { - border-color: transparent; - } - .\!bg-muted\/40 { - background-color: var(--color-muted) !important; - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-muted) 40%, transparent) !important; - } - } - .bg-accent { - background-color: var(--color-accent); - } - .bg-amber-50 { - background-color: var(--color-amber-50); - } - .bg-background { - background-color: var(--color-background); - } - .bg-card { - background-color: var(--color-card); - } - .bg-foreground { - background-color: var(--color-foreground); - } - .bg-muted { - background-color: var(--color-muted); - } - .bg-muted-foreground { - background-color: var(--color-muted-foreground); - } - .bg-muted\/50 { - background-color: var(--color-muted); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-muted) 50%, transparent); - } - } - .bg-primary { - background-color: var(--color-primary); - } - .bg-primary\/20 { - background-color: var(--color-primary); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-primary) 20%, transparent); - } - } - .bg-secondary { - background-color: var(--color-secondary); - } - .bg-sidebar-primary { - background-color: var(--color-sidebar-primary); - } - .bg-transparent { - background-color: transparent; - } - .object-cover { - object-fit: cover; - } - .\!p-3\.5 { - padding: calc(var(--spacing) * 3.5) !important; - } - .p-0 { - padding: calc(var(--spacing) * 0); - } - .p-1 { - padding: calc(var(--spacing) * 1); - } - .p-2 { - padding: calc(var(--spacing) * 2); - } - .p-3 { - padding: calc(var(--spacing) * 3); - } - .p-4 { - padding: calc(var(--spacing) * 4); - } - .p-5 { - padding: calc(var(--spacing) * 5); - } - .p-6 { - padding: calc(var(--spacing) * 6); - } - .p-10 { - padding: calc(var(--spacing) * 10); - } - .px-0 { - padding-inline: calc(var(--spacing) * 0); - } - .px-1 { - padding-inline: calc(var(--spacing) * 1); - } - .px-2 { - padding-inline: calc(var(--spacing) * 2); - } - .px-2\.5 { - padding-inline: calc(var(--spacing) * 2.5); - } - .px-3 { - padding-inline: calc(var(--spacing) * 3); - } - .px-4 { - padding-inline: calc(var(--spacing) * 4); - } - .px-9 { - padding-inline: calc(var(--spacing) * 9); - } - .px-\[0\.3rem\] { - padding-inline: 0.3rem; - } - .py-1\.5 { - padding-block: calc(var(--spacing) * 1.5); - } - .py-2 { - padding-block: calc(var(--spacing) * 2); - } - .py-3 { - padding-block: calc(var(--spacing) * 3); - } - .py-4 { - padding-block: calc(var(--spacing) * 4); - } - .py-\[0\.2rem\] { - padding-block: 0.2rem; - } - .pt-1\.5 { - padding-top: calc(var(--spacing) * 1.5); - } - .pt-2 { - padding-top: calc(var(--spacing) * 2); - } - .pt-15 { - padding-top: calc(var(--spacing) * 15); - } - .pr-2 { - padding-right: calc(var(--spacing) * 2); - } - .pr-9 { - padding-right: calc(var(--spacing) * 9); - } - .pr-10 { - padding-right: calc(var(--spacing) * 10); - } - .pr-12 { - padding-right: calc(var(--spacing) * 12); - } - .pr-16 { - padding-right: calc(var(--spacing) * 16); - } - .pr-20 { - padding-right: calc(var(--spacing) * 20); - } - .pr-24 { - padding-right: calc(var(--spacing) * 24); - } - .pr-26 { - padding-right: calc(var(--spacing) * 26); - } - .pr-30 { - padding-right: calc(var(--spacing) * 30); - } - .pb-3 { - padding-bottom: calc(var(--spacing) * 3); - } - .pb-4 { - padding-bottom: calc(var(--spacing) * 4); - } - .pb-12 { - padding-bottom: calc(var(--spacing) * 12); - } - .pb-17 { - padding-bottom: calc(var(--spacing) * 17); - } - .pl-6 { - padding-left: calc(var(--spacing) * 6); - } - .pl-7 { - padding-left: calc(var(--spacing) * 7); - } - .pl-8 { - padding-left: calc(var(--spacing) * 8); - } - .pl-8\.5 { - padding-left: calc(var(--spacing) * 8.5); - } - .pl-9 { - padding-left: calc(var(--spacing) * 9); - } - .pl-15 { - padding-left: calc(var(--spacing) * 15); - } - .pl-21 { - padding-left: calc(var(--spacing) * 21); - } - .text-center { - text-align: center; - } - .text-left { - text-align: left; - } - .text-right { - text-align: right; - } - .font-mono { - font-family: var(--font-mono); - } - .text-2xl { - font-size: var(--text-2xl); - line-height: var(--tw-leading, var(--text-2xl--line-height)); - } - .text-3xl { - font-size: var(--text-3xl); - line-height: var(--tw-leading, var(--text-3xl--line-height)); - } - .text-base { - font-size: var(--text-base); - line-height: var(--tw-leading, var(--text-base--line-height)); - } - .text-lg { - font-size: var(--text-lg); - line-height: var(--tw-leading, var(--text-lg--line-height)); - } - .text-sm { - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - } - .text-sm\/relaxed { - font-size: var(--text-sm); - line-height: var(--leading-relaxed); - } - .text-xs { - font-size: var(--text-xs); - line-height: var(--tw-leading, var(--text-xs--line-height)); - } - .text-\[1\.05rem\] { - font-size: 1.05rem; - } - .leading-none { - --tw-leading: 1; - line-height: 1; - } - .leading-normal { - --tw-leading: var(--leading-normal); - line-height: var(--leading-normal); - } - .leading-snug { - --tw-leading: var(--leading-snug); - line-height: var(--leading-snug); - } - .leading-tight { - --tw-leading: var(--leading-tight); - line-height: var(--leading-tight); - } - .font-bold { - --tw-font-weight: var(--font-weight-bold); - font-weight: var(--font-weight-bold); - } - .font-medium { - --tw-font-weight: var(--font-weight-medium); - font-weight: var(--font-weight-medium); - } - .font-normal { - --tw-font-weight: var(--font-weight-normal); - font-weight: var(--font-weight-normal); - } - .font-semibold { - --tw-font-weight: var(--font-weight-semibold); - font-weight: var(--font-weight-semibold); - } - .tracking-tight { - --tw-tracking: var(--tracking-tight); - letter-spacing: var(--tracking-tight); - } - .tracking-widest { - --tw-tracking: var(--tracking-widest); - letter-spacing: var(--tracking-widest); - } - .text-balance { - text-wrap: balance; - } - .break-words { - overflow-wrap: break-word; - } - .whitespace-nowrap { - white-space: nowrap; - } - .whitespace-pre-wrap { - white-space: pre-wrap; - } - .text-amber-900 { - color: var(--color-amber-900); - } - .text-blue-500 { - color: var(--color-blue-500); - } - .text-destructive { - color: var(--color-destructive); - } - .text-foreground { - color: var(--color-foreground); - } - .text-green-500 { - color: var(--color-green-500); - } - .text-muted-foreground { - color: var(--color-muted-foreground); - } - .text-neutral-800 { - color: var(--color-neutral-800); - } - .text-primary-foreground { - color: var(--color-primary-foreground); - } - .text-purple-500 { - color: var(--color-purple-500); - } - .text-red-500 { - color: var(--color-red-500); - } - .text-sidebar-primary-foreground { - color: var(--color-sidebar-primary-foreground); - } - .text-yellow-500 { - color: var(--color-yellow-500); - } - .uppercase { - text-transform: uppercase; - } - .tabular-nums { - --tw-numeric-spacing: tabular-nums; - font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,); - } - .underline { - text-decoration-line: underline; - } - .underline-offset-4 { - text-underline-offset: 4px; - } - .opacity-0 { - opacity: 0%; - } - .opacity-50 { - opacity: 50%; - } - .opacity-60 { - opacity: 60%; - } - .opacity-100 { - opacity: 100%; - } - .shadow-md { - --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - .shadow-none { - --tw-shadow: 0 0 #0000; - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - .shadow-xl { - --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - .shadow-xs { - --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - .ring-offset-background { - --tw-ring-offset-color: var(--color-background); - } - .outline { - outline-style: var(--tw-outline-style); - outline-width: 1px; - } - .grayscale { - --tw-grayscale: grayscale(100%); - filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); - } - .filter { - filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); - } - .transition { - transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - } - .transition-all { - transition-property: all; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - } - .transition-colors { - transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - } - .transition-transform { - transition-property: transform, translate, scale, rotate; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - } - .duration-100 { - --tw-duration: 100ms; - transition-duration: 100ms; - } - .duration-200 { - --tw-duration: 200ms; - transition-duration: 200ms; - } - .duration-400 { - --tw-duration: 400ms; - transition-duration: 400ms; - } - .outline-none { - --tw-outline-style: none; - outline-style: none; - } - .select-none { - -webkit-user-select: none; - user-select: none; - } - .group-open\:rotate-180 { - &:is(:where(.group):is([open], :popover-open, :open) *) { - rotate: 180deg; - } - } - .group-has-\[\[data-slot\=item-description\]\]\/item\:translate-y-0\.5 { - &:is(:where(.group\/item):has(*:is([data-slot=item-description])) *) { - --tw-translate-y: calc(var(--spacing) * 0.5); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - } - .group-has-\[\[data-slot\=item-description\]\]\/item\:self-start { - &:is(:where(.group\/item):has(*:is([data-slot=item-description])) *) { - align-self: flex-start; - } - } - .group-aria-checked\:visible { - &:is(:where(.group)[aria-checked="true"] *) { - visibility: visible; - } - } - .group-data-\[copied\=true\]\:block { - &:is(:where(.group)[data-copied="true"] *) { - display: block; - } - } - .group-data-\[copied\=true\]\:hidden { - &:is(:where(.group)[data-copied="true"] *) { - display: none; - } - } - .group-\[\.copied\]\:block { - &:is(:where(.group):is(.copied) *) { - display: block; - } - } - .group-\[\.copied\]\:hidden { - &:is(:where(.group):is(.copied) *) { - display: none; - } - } - .peer-checked\:border-primary { - &:is(:where(.peer):checked ~ *) { - border-color: var(--color-primary); - } - } - .last\:border-b-0 { - &:last-child { - border-bottom-style: var(--tw-border-style); - border-bottom-width: 0px; - } - } - .checked\:border-blue-600 { - &:checked { - border-color: var(--color-blue-600); - } - } - .checked\:border-green-600 { - &:checked { - border-color: var(--color-green-600); - } - } - .checked\:bg-blue-500 { - &:checked { - background-color: var(--color-blue-500); - } - } - .checked\:bg-blue-600 { - &:checked { - background-color: var(--color-blue-600); - } - } - .checked\:bg-green-600 { - &:checked { - background-color: var(--color-green-600); - } - } - .checked\:before\:bg-background { - &:checked { - &::before { - content: var(--tw-content); - background-color: var(--color-background); - } - } - } - .checked\:after\:bg-white { - &:checked { - &::after { - content: var(--tw-content); - background-color: var(--color-white); - } - } - } - .hover\:space-x-1 { - &:hover { - @media (hover: hover) { - :where(& > :not(:last-child)) { - --tw-space-x-reverse: 0; - margin-inline-start: calc(calc(var(--spacing) * 1) * var(--tw-space-x-reverse)); - margin-inline-end: calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-x-reverse))); - } - } - } - } - .hover\:bg-accent\/50 { - &:hover { - @media (hover: hover) { - background-color: var(--color-accent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-accent) 50%, transparent); - } - } - } - } - .hover\:bg-destructive\/10 { - &:hover { - @media (hover: hover) { - background-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-destructive) 10%, transparent); - } - } - } - } - .hover\:bg-foreground { - &:hover { - @media (hover: hover) { - background-color: var(--color-foreground); - } - } - } - .hover\:bg-muted { - &:hover { - @media (hover: hover) { - background-color: var(--color-muted); - } - } - } - .hover\:text-accent-foreground { - &:hover { - @media (hover: hover) { - color: var(--color-accent-foreground); - } - } - } - .hover\:text-foreground { - &:hover { - @media (hover: hover) { - color: var(--color-foreground); - } - } - } - .hover\:underline { - &:hover { - @media (hover: hover) { - text-decoration-line: underline; - } - } - } - .focus\:bg-destructive\/10 { - &:focus { - background-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-destructive) 10%, transparent); - } - } - } - .focus\:text-destructive { - &:focus { - color: var(--color-destructive); - } - } - .focus-visible\:border-ring { - &:focus-visible { - border-color: var(--color-ring); - } - } - .focus-visible\:ring-2 { - &:focus-visible { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - } - .focus-visible\:ring-\[3px\] { - &:focus-visible { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - } - .focus-visible\:ring-ring { - &:focus-visible { - --tw-ring-color: var(--color-ring); - } - } - .focus-visible\:ring-ring\/50 { - &:focus-visible { - --tw-ring-color: var(--color-ring); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); - } - } - } - .focus-visible\:ring-offset-2 { - &:focus-visible { - --tw-ring-offset-width: 2px; - --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - } - } - .focus-visible\:outline-none { - &:focus-visible { - --tw-outline-style: none; - outline-style: none; - } - } - .disabled\:pointer-events-none { - &:disabled { - pointer-events: none; - } - } - .disabled\:opacity-50 { - &:disabled { - opacity: 50%; - } - } - .has-\[\:checked\]\:border-primary { - &:has(*:is(:checked)) { - border-color: var(--color-primary); - } - } - .has-\[\:checked\]\:bg-primary\/5 { - &:has(*:is(:checked)) { - background-color: var(--color-primary); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-primary) 5%, transparent); - } - } - } - .has-\[input\[type\=\'checkbox\'\]\:checked\]\:border-blue-600 { - &:has(*:is(input[type='checkbox']:checked)) { - border-color: var(--color-blue-600); - } - } - .has-\[input\[type\=\'checkbox\'\]\:checked\]\:bg-blue-50 { - &:has(*:is(input[type='checkbox']:checked)) { - background-color: var(--color-blue-50); - } - } - .has-\[input\[type\=\'radio\'\]\:checked\]\:border-green-600 { - &:has(*:is(input[type='radio']:checked)) { - border-color: var(--color-green-600); - } - } - .has-\[input\[type\=\'radio\'\]\:checked\]\:bg-green-50 { - &:has(*:is(input[type='radio']:checked)) { - background-color: var(--color-green-50); - } - } - .has-\[\>svg\]\:px-2\.5 { - &:has(>svg) { - padding-inline: calc(var(--spacing) * 2.5); - } - } - .aria-invalid\:border-destructive { - &[aria-invalid="true"] { - border-color: var(--color-destructive); - } - } - .aria-invalid\:ring-destructive\/20 { - &[aria-invalid="true"] { - --tw-ring-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); - } - } - } - .aria-pressed\:bg-transparent { - &[aria-pressed="true"] { - background-color: transparent; - } - } - .aria-pressed\:text-blue-600 { - &[aria-pressed="true"] { - color: var(--color-blue-600); - } - } - .aria-pressed\:hover\:bg-accent { - &[aria-pressed="true"] { - &:hover { - @media (hover: hover) { - background-color: var(--color-accent); - } - } - } - } - .max-sm\:flex-col { - @media (width < 40rem) { - flex-direction: column; - } - } - .sm\:max-w-\[425px\] { - @media (width >= 40rem) { - max-width: 425px; - } - } - .sm\:gap-2\.5 { - @media (width >= 40rem) { - gap: calc(var(--spacing) * 2.5); - } - } - .sm\:text-3xl { - @media (width >= 40rem) { - font-size: var(--text-3xl); - line-height: var(--tw-leading, var(--text-3xl--line-height)); - } - } - .sm\:text-base { - @media (width >= 40rem) { - font-size: var(--text-base); - line-height: var(--tw-leading, var(--text-base--line-height)); - } - } - .sm\:text-lg { - @media (width >= 40rem) { - font-size: var(--text-lg); - line-height: var(--tw-leading, var(--text-lg--line-height)); - } - } - .md\:ml-4 { - @media (width >= 48rem) { - margin-left: calc(var(--spacing) * 4); - } - } - .md\:w-\[239px\] { - @media (width >= 48rem) { - width: 239px; - } - } - .md\:max-w-\[200px\] { - @media (width >= 48rem) { - max-width: 200px; - } - } - .md\:flex-row { - @media (width >= 48rem) { - flex-direction: row; - } - } - .md\:border-l { - @media (width >= 48rem) { - border-left-style: var(--tw-border-style); - border-left-width: 1px; - } - } - .md\:p-6 { - @media (width >= 48rem) { - padding: calc(var(--spacing) * 6); - } - } - .md\:p-12 { - @media (width >= 48rem) { - padding: calc(var(--spacing) * 12); - } - } - .md\:pl-8 { - @media (width >= 48rem) { - padding-left: calc(var(--spacing) * 8); - } - } - .md\:text-4xl { - @media (width >= 48rem) { - font-size: var(--text-4xl); - line-height: var(--tw-leading, var(--text-4xl--line-height)); - } - } - .lg\:grid-cols-2 { - @media (width >= 64rem) { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - } - .xl\:block { - @media (width >= 80rem) { - display: block; - } - } - .xl\:p-12 { - @media (width >= 80rem) { - padding: calc(var(--spacing) * 12); - } - } - .xl\:text-4xl { - @media (width >= 80rem) { - font-size: var(--text-4xl); - line-height: var(--tw-leading, var(--text-4xl--line-height)); - } - } - .\@md\:w-auto { - @container (width >= 28rem) { - width: auto; - } - } - .\@md\:min-w-sm { - @container (width >= 28rem) { - min-width: var(--container-sm); - } - } - .dark\:block { - &:is(.dark *) { - display: block; - } - } - .dark\:hidden { - &:is(.dark *) { - display: none; - } - } - .dark\:border-amber-950 { - &:is(.dark *) { - border-color: var(--color-amber-950); - } - } - .dark\:bg-amber-950 { - &:is(.dark *) { - background-color: var(--color-amber-950); - } - } - .dark\:text-amber-100 { - &:is(.dark *) { - color: var(--color-amber-100); - } - } - .dark\:text-neutral-300 { - &:is(.dark *) { - color: var(--color-neutral-300); - } - } - .dark\:checked\:border-blue-700 { - &:is(.dark *) { - &:checked { - border-color: var(--color-blue-700); - } - } - } - .dark\:checked\:bg-blue-600 { - &:is(.dark *) { - &:checked { - background-color: var(--color-blue-600); - } - } - } - .dark\:checked\:bg-blue-700 { - &:is(.dark *) { - &:checked { - background-color: var(--color-blue-700); - } - } - } - .dark\:checked\:bg-input\/30 { - &:is(.dark *) { - &:checked { - background-color: var(--color-input); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-input) 30%, transparent); - } - } - } - } - .dark\:checked\:before\:bg-primary { - &:is(.dark *) { - &:checked { - &::before { - content: var(--tw-content); - background-color: var(--color-primary); - } - } - } - } - .dark\:hover\:bg-destructive\/20 { - &:is(.dark *) { - &:hover { - @media (hover: hover) { - background-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); - } - } - } - } - } - .dark\:focus\:bg-destructive\/20 { - &:is(.dark *) { - &:focus { - background-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); - } - } - } - } - .dark\:has-\[\:checked\]\:bg-primary\/10 { - &:is(.dark *) { - &:has(*:is(:checked)) { - background-color: var(--color-primary); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-primary) 10%, transparent); - } - } - } - } - .dark\:has-\[input\[type\=\'checkbox\'\]\:checked\]\:border-blue-900 { - &:is(.dark *) { - &:has(*:is(input[type='checkbox']:checked)) { - border-color: var(--color-blue-900); - } - } - } - .dark\:has-\[input\[type\=\'checkbox\'\]\:checked\]\:bg-blue-950 { - &:is(.dark *) { - &:has(*:is(input[type='checkbox']:checked)) { - background-color: var(--color-blue-950); - } - } - } - .dark\:has-\[input\[type\=\'radio\'\]\:checked\]\:border-green-900 { - &:is(.dark *) { - &:has(*:is(input[type='radio']:checked)) { - border-color: var(--color-green-900); - } - } - } - .dark\:has-\[input\[type\=\'radio\'\]\:checked\]\:bg-green-950 { - &:is(.dark *) { - &:has(*:is(input[type='radio']:checked)) { - background-color: var(--color-green-950); - } - } - } - .dark\:aria-invalid\:ring-destructive\/40 { - &:is(.dark *) { - &[aria-invalid="true"] { - --tw-ring-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-destructive) 40%, transparent); - } - } - } - } - .dark\:aria-pressed\:hover\:bg-accent\/50 { - &:is(.dark *) { - &[aria-pressed="true"] { - &:hover { - @media (hover: hover) { - background-color: var(--color-accent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-accent) 50%, transparent); - } - } - } - } - } - } - .\[\&_\[data-new-link\]\:\:after\]\:ml-auto { - & [data-new-link]::after { - margin-left: auto; - } - } - .\[\&_\[data-new-link\]\:\:after\]\:rounded-md { - & [data-new-link]::after { - border-radius: var(--radius-md); - } - } - .\[\&_\[data-new-link\]\:\:after\]\:bg-sidebar-primary { - & [data-new-link]::after { - background-color: var(--color-sidebar-primary); - } - } - .\[\&_\[data-new-link\]\:\:after\]\:px-2 { - & [data-new-link]::after { - padding-inline: calc(var(--spacing) * 2); - } - } - .\[\&_\[data-new-link\]\:\:after\]\:py-0\.5 { - & [data-new-link]::after { - padding-block: calc(var(--spacing) * 0.5); - } - } - .\[\&_\[data-new-link\]\:\:after\]\:text-xs { - & [data-new-link]::after { - font-size: var(--text-xs); - line-height: var(--tw-leading, var(--text-xs--line-height)); - } - } - .\[\&_\[data-new-link\]\:\:after\]\:font-medium { - & [data-new-link]::after { - --tw-font-weight: var(--font-weight-medium); - font-weight: var(--font-weight-medium); - } - } - .\[\&_\[data-new-link\]\:\:after\]\:text-sidebar-primary-foreground { - & [data-new-link]::after { - color: var(--color-sidebar-primary-foreground); - } - } - .\[\&_\[data-new-link\]\:\:after\]\:content-\[\'New\'\] { - & [data-new-link]::after { - --tw-content: 'New'; - content: var(--tw-content); - } - } - .\[\&_a\]\:inline-block { - & a { - display: inline-block; - } - } - .\[\&_a\]\:text-muted-foreground { - & a { - color: var(--color-muted-foreground); - } - } - .\[\&_a\]\:no-underline { - & a { - text-decoration-line: none; - } - } - .\[\&_a\]\:transition-colors { - & a { - transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - } - } - .\[\&_a\]\:hover\:text-foreground { - & a { - &:hover { - @media (hover: hover) { - color: var(--color-foreground); - } - } - } - } - .\[\&_img\]\:size-8 { - & img { - width: calc(var(--spacing) * 8); - height: calc(var(--spacing) * 8); - } - } - .\[\&_img\]\:size-12 { - & img { - width: calc(var(--spacing) * 12); - height: calc(var(--spacing) * 12); - } - } - .\[\&_img\]\:shrink-0 { - & img { - flex-shrink: 0; - } - } - .\[\&_img\]\:rounded-full { - & img { - border-radius: calc(infinity * 1px); - } - } - .\[\&_img\]\:object-cover { - & img { - object-fit: cover; - } - } - .\[\&_img\]\:ring-2 { - & img { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - } - .\[\&_img\]\:ring-background { - & img { - --tw-ring-color: var(--color-background); - } - } - .\[\&_img\]\:ring-card { - & img { - --tw-ring-color: var(--color-card); - } - } - .\[\&_img\]\:grayscale { - & img { - --tw-grayscale: grayscale(100%); - filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); - } - } - .\[\&_img\]\:transition-all { - & img { - transition-property: all; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - } - } - .\[\&_img\]\:duration-300 { - & img { - --tw-duration: 300ms; - transition-duration: 300ms; - } - } - .\[\&_img\]\:ease-in-out { - & img { - --tw-ease: var(--ease-in-out); - transition-timing-function: var(--ease-in-out); - } - } - .\[\&_li\]\:mt-0 { - & li { - margin-top: calc(var(--spacing) * 0); - } - } - .\[\&_li\]\:pt-2 { - & li { - padding-top: calc(var(--spacing) * 2); - } - } - .\[\&_svg\]\:pointer-events-none { - & svg { - pointer-events: none; - } - } - .\[\&_svg\]\:size-4 { - & svg { - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - } - } - .\[\&_svg\]\:size-5 { - & svg { - width: calc(var(--spacing) * 5); - height: calc(var(--spacing) * 5); - } - } - .\[\&_svg\]\:shrink-0 { - & svg { - flex-shrink: 0; - } - } - .\[\&_svg\]\:\!text-destructive { - & svg { - color: var(--color-destructive) !important; - } - } - .\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 { - & svg:not([class*='size-']) { - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - } - } - .\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-6 { - & svg:not([class*='size-']) { - width: calc(var(--spacing) * 6); - height: calc(var(--spacing) * 6); - } - } - .\[\&_ul\]\:m-0 { - & ul { - margin: calc(var(--spacing) * 0); - } - } - .\[\&_ul\]\:list-none { - & ul { - list-style-type: none; - } - } - .\[\&_ul_ul\]\:pl-4 { - & ul ul { - padding-left: calc(var(--spacing) * 4); - } - } - .md\:\*\:\[\.card\]\:basis-1\/4 { - @media (width >= 48rem) { - :is(& > *) { - &:is(.card) { - flex-basis: calc(1/4 * 100%); - } - } - } - } - .\[a\]\:transition-colors { - &:is(a) { - transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - } - } - .\[a\]\:hover\:bg-accent\/50 { - &:is(a) { - &:hover { - @media (hover: hover) { - background-color: var(--color-accent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-accent) 50%, transparent); - } - } - } - } - } - .\[\&\>a\]\:underline { - &>a { - text-decoration-line: underline; - } - } - .\[\&\>a\]\:underline-offset-4 { - &>a { - text-underline-offset: 4px; - } - } - .\[\&\>a\:hover\]\:text-primary { - &>a:hover { - color: var(--color-primary); - } - } - .\[\&\>svg\]\:mb-3 { - &>svg { - margin-bottom: calc(var(--spacing) * 3); - } - } - .\[\&\>svg\]\:size-3 { - &>svg { - width: calc(var(--spacing) * 3); - height: calc(var(--spacing) * 3); - } - } - .\[\&\>svg\]\:size-4 { - &>svg { - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - } - } - .\[\&\>svg\]\:size-6 { - &>svg { - width: calc(var(--spacing) * 6); - height: calc(var(--spacing) * 6); - } - } - .aria-pressed\:\[\&\>svg\]\:fill-blue-600 { - &[aria-pressed="true"] { - &>svg { - fill: var(--color-blue-600); - } - } - } -} -:root { - --radius: 0.625rem; - --background: oklch(1 0 0); - --foreground: oklch(0.145 0 0); - --card: oklch(1 0 0); - --card-foreground: oklch(0.145 0 0); - --popover: oklch(1 0 0); - --popover-foreground: oklch(0.145 0 0); - --primary: oklch(0.205 0 0); - --primary-foreground: oklch(0.985 0 0); - --secondary: oklch(0.97 0 0); - --secondary-foreground: oklch(0.205 0 0); - --muted: oklch(0.97 0 0); - --muted-foreground: oklch(0.556 0 0); - --accent: oklch(0.97 0 0); - --accent-foreground: oklch(0.205 0 0); - --destructive: oklch(0.577 0.245 27.325); - --border: oklch(0.922 0 0); - --input: oklch(0.922 0 0); - --ring: oklch(0.708 0 0); - --chart-1: oklch(0.646 0.222 41.116); - --chart-2: oklch(0.6 0.118 184.704); - --chart-3: oklch(0.398 0.07 227.392); - --chart-4: oklch(0.828 0.189 84.429); - --chart-5: oklch(0.769 0.188 70.08); - --sidebar: oklch(0.985 0 0); - --sidebar-foreground: oklch(0.145 0 0); - --sidebar-primary: oklch(0.205 0 0); - --sidebar-primary-foreground: oklch(0.985 0 0); - --sidebar-accent: oklch(0.97 0 0); - --sidebar-accent-foreground: oklch(0.205 0 0); - --sidebar-border: oklch(0.922 0 0); - --sidebar-ring: oklch(0.708 0 0); - --sidebar-width: 16rem; - --sidebar-mobile-width: 18rem; - --scrollbar-track: transparent; - --scrollbar-thumb: rgba(0, 0, 0, 0.3); - --scrollbar-width: 6px; - --scrollbar-radius: 6px; - --chevron-down-icon: url('data:image/svg+xml;utf8,'); - --chevron-down-icon-50: url('data:image/svg+xml;utf8,'); - --check-icon: url('data:image/svg+xml;utf8,'); -} -.dark { - --background: oklch(0.145 0 0); - --foreground: oklch(0.985 0 0); - --card: oklch(0.205 0 0); - --card-foreground: oklch(0.985 0 0); - --popover: oklch(0.269 0 0); - --popover-foreground: oklch(0.985 0 0); - --primary: oklch(0.922 0 0); - --primary-foreground: oklch(0.205 0 0); - --secondary: oklch(0.269 0 0); - --secondary-foreground: oklch(0.985 0 0); - --muted: oklch(0.269 0 0); - --muted-foreground: oklch(0.708 0 0); - --accent: oklch(0.371 0 0); - --accent-foreground: oklch(0.985 0 0); - --destructive: oklch(0.704 0.191 22.216); - --border: oklch(1 0 0 / 10%); - --input: oklch(1 0 0 / 15%); - --ring: oklch(0.556 0 0); - --chart-1: oklch(0.488 0.243 264.376); - --chart-2: oklch(0.696 0.17 162.48); - --chart-3: oklch(0.769 0.188 70.08); - --chart-4: oklch(0.627 0.265 303.9); - --chart-5: oklch(0.645 0.246 16.439); - --sidebar: oklch(0.205 0 0); - --sidebar-foreground: oklch(0.985 0 0); - --sidebar-primary: oklch(0.488 0.243 264.376); - --sidebar-primary-foreground: oklch(0.985 0 0); - --sidebar-accent: oklch(0.269 0 0); - --sidebar-accent-foreground: oklch(0.985 0 0); - --sidebar-border: oklch(1 0 0 / 10%); - --sidebar-ring: oklch(0.439 0 0); - --scrollbar-thumb: rgba(255, 255, 255, 0.3); - --chevron-down-icon: url('data:image/svg+xml;utf8,'); - --chevron-down-icon-50: url('data:image/svg+xml;utf8,'); - --check-icon: url('data:image/svg+xml;utf8,'); - color-scheme: dark; -} -@layer base { - * { - border-color: var(--color-border); - outline-color: var(--color-ring); - @supports (color: color-mix(in lab, red, red)) { - outline-color: color-mix(in oklab, var(--color-ring) 50%, transparent); - } - } - html { - scroll-behavior: smooth; - } - body { - overscroll-behavior: none; - background-color: var(--color-background); - color: var(--color-foreground); - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - } - .scrollbar { - scrollbar-width: thin; - scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track); - &::-webkit-scrollbar { - width: var(--scrollbar-width); - } - &::-webkit-scrollbar-track { - background: var(--scrollbar-track); - } - &::-webkit-scrollbar-thumb { - background: var(--scrollbar-thumb); - border-radius: var(--scrollbar-radius); - } - } -} -@layer components { - .alert, .alert-destructive { - position: relative; - display: grid; - width: 100%; - grid-template-columns: 0 1fr; - align-items: flex-start; - row-gap: calc(var(--spacing) * 0.5); - border-radius: var(--radius-lg); - border-style: var(--tw-border-style); - border-width: 1px; - padding-inline: calc(var(--spacing) * 4); - padding-block: calc(var(--spacing) * 3); - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - &:has(>svg) { - grid-template-columns: calc(var(--spacing) * 4) 1fr; - } - &:has(>svg) { - column-gap: calc(var(--spacing) * 3); - } - &>svg { - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - } - &>svg { - --tw-translate-y: calc(var(--spacing) * 0.5); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - &>svg { - color: currentcolor; - } - h2 { - grid-column-start: 2; - overflow: hidden; - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 1; - min-height: calc(var(--spacing) * 4); - --tw-font-weight: var(--font-weight-medium); - font-weight: var(--font-weight-medium); - --tw-tracking: var(--tracking-tight); - letter-spacing: var(--tracking-tight); - } - section { - grid-column-start: 2; - display: grid; - justify-items: start; - gap: calc(var(--spacing) * 1); - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - color: var(--color-muted-foreground); - & p { - --tw-leading: var(--leading-relaxed); - line-height: var(--leading-relaxed); - } - ul { - list-style-position: inside; - list-style-type: disc; - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - } - } - } - .alert { - background-color: var(--color-card); - color: var(--color-card-foreground); - } - .alert-destructive { - background-color: var(--color-card); - color: var(--color-destructive); - &>svg { - color: currentcolor; - } - section { - color: var(--color-destructive); - } - } -} -@layer components { - .badge, .badge-primary, .badge-secondary, .badge-destructive, .badge-outline { - display: inline-flex; - width: fit-content; - flex-shrink: 0; - align-items: center; - justify-content: center; - gap: calc(var(--spacing) * 1); - overflow: hidden; - border-radius: calc(infinity * 1px); - border-style: var(--tw-border-style); - border-width: 1px; - padding-inline: calc(var(--spacing) * 2); - padding-block: calc(var(--spacing) * 0.5); - font-size: var(--text-xs); - line-height: var(--tw-leading, var(--text-xs--line-height)); - --tw-font-weight: var(--font-weight-medium); - font-weight: var(--font-weight-medium); - white-space: nowrap; - transition-property: color,box-shadow; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - &:focus-visible { - border-color: var(--color-ring); - } - &:focus-visible { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - &:focus-visible { - --tw-ring-color: var(--color-ring); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); - } - } - &[aria-invalid="true"] { - border-color: var(--color-destructive); - } - &[aria-invalid="true"] { - --tw-ring-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); - } - } - &:is(.dark *) { - &[aria-invalid="true"] { - --tw-ring-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-destructive) 40%, transparent); - } - } - } - &>svg { - pointer-events: none; - } - &>svg { - width: calc(var(--spacing) * 3); - height: calc(var(--spacing) * 3); - } - } - .badge, .badge-primary { - border-color: transparent; - background-color: var(--color-primary); - color: var(--color-primary-foreground); - a& { - &:hover { - @media (hover: hover) { - background-color: var(--color-primary); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-primary) 90%, transparent); - } - } - } - } - } - .badge-secondary { - border-color: transparent; - background-color: var(--color-secondary); - color: var(--color-secondary-foreground); - a& { - &:hover { - @media (hover: hover) { - background-color: var(--color-secondary); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-secondary) 90%, transparent); - } - } - } - } - } - .badge-destructive { - border-color: transparent; - background-color: var(--color-destructive); - color: var(--color-white); - &:focus-visible { - --tw-ring-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); - } - } - &:is(.dark *) { - background-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-destructive) 60%, transparent); - } - } - &:is(.dark *) { - &:focus-visible { - --tw-ring-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-destructive) 40%, transparent); - } - } - } - a& { - &:hover { - @media (hover: hover) { - background-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-destructive) 90%, transparent); - } - } - } - } - } - .badge-outline { - color: var(--color-foreground); - a& { - &:hover { - @media (hover: hover) { - background-color: var(--color-accent); - } - } - } - a& { - &:hover { - @media (hover: hover) { - color: var(--color-accent-foreground); - } - } - } - } -} -@layer components { - .btn, .btn-primary, .btn-secondary, .btn-outline, .btn-ghost, .btn-link, .btn-destructive, .btn-sm, .btn-sm-primary, .btn-sm-secondary, .btn-sm-outline, .btn-sm-ghost, .btn-sm-link, .btn-sm-destructive, .btn-lg, .btn-lg-primary, .btn-lg-secondary, .btn-lg-outline, .btn-lg-ghost, .btn-lg-link, .btn-lg-destructive, .btn-icon, .btn-icon-primary, .btn-icon-secondary, .btn-icon-outline, .btn-icon-ghost, .btn-icon-link, .btn-icon-destructive, .btn-sm-icon, .btn-sm-icon-primary, .btn-sm-icon-secondary, .btn-sm-icon-outline, .btn-sm-icon-ghost, .btn-sm-icon-link, .btn-sm-icon-destructive, .btn-lg-icon, .btn-lg-icon-primary, .btn-lg-icon-secondary, .btn-lg-icon-outline, .btn-lg-icon-ghost, .btn-lg-icon-link, .btn-lg-icon-destructive { - display: inline-flex; - flex-shrink: 0; - cursor: pointer; - align-items: center; - justify-content: center; - border-radius: var(--radius-md); - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - --tw-font-weight: var(--font-weight-medium); - font-weight: var(--font-weight-medium); - white-space: nowrap; - transition-property: all; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - --tw-outline-style: none; - outline-style: none; - &:focus-visible { - border-color: var(--color-ring); - } - &:focus-visible { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - &:focus-visible { - --tw-ring-color: var(--color-ring); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); - } - } - &:disabled { - pointer-events: none; - } - &:disabled { - opacity: 50%; - } - &[aria-invalid="true"] { - border-color: var(--color-destructive); - } - &[aria-invalid="true"] { - --tw-ring-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); - } - } - &:is(.dark *) { - &[aria-invalid="true"] { - --tw-ring-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-destructive) 40%, transparent); - } - } - } - & svg { - pointer-events: none; - } - & svg { - flex-shrink: 0; - } - & svg:not([class*='size-']) { - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - } - } - .btn, .btn-primary, .btn-secondary, .btn-outline, .btn-ghost, .btn-link, .btn-destructive { - height: calc(var(--spacing) * 9); - gap: calc(var(--spacing) * 2); - padding-inline: calc(var(--spacing) * 4); - padding-block: calc(var(--spacing) * 2); - &:has(>svg) { - padding-inline: calc(var(--spacing) * 3); - } - } - .btn-icon, .btn-icon-primary, .btn-icon-secondary, .btn-icon-outline, .btn-icon-ghost, .btn-icon-link, .btn-icon-destructive { - width: calc(var(--spacing) * 9); - height: calc(var(--spacing) * 9); - } - .btn-sm, .btn-sm-primary, .btn-sm-secondary, .btn-sm-outline, .btn-sm-ghost, .btn-sm-link, .btn-sm-destructive { - height: calc(var(--spacing) * 8); - gap: calc(var(--spacing) * 1.5); - padding-inline: calc(var(--spacing) * 3); - &:has(>svg) { - padding-inline: calc(var(--spacing) * 2.5); - } - } - .btn-sm-icon, .btn-sm-icon-primary, .btn-sm-icon-secondary, .btn-sm-icon-outline, .btn-sm-icon-ghost, .btn-sm-icon-link, .btn-sm-icon-destructive { - width: calc(var(--spacing) * 8); - height: calc(var(--spacing) * 8); - } - .btn-lg, .btn-lg-primary, .btn-lg-secondary, .btn-lg-outline, .btn-lg-ghost, .btn-lg-link, .btn-lg-destructive { - height: calc(var(--spacing) * 10); - gap: calc(var(--spacing) * 2); - padding-inline: calc(var(--spacing) * 6); - &:has(>svg) { - padding-inline: calc(var(--spacing) * 4); - } - } - .btn-lg-icon, .btn-lg-icon-primary, .btn-lg-icon-secondary, .btn-lg-icon-outline, .btn-lg-icon-ghost, .btn-lg-icon-link, .btn-lg-icon-destructive { - width: calc(var(--spacing) * 10); - height: calc(var(--spacing) * 10); - } - .btn, .btn-primary, .btn-sm, .btn-sm-primary, .btn-lg, .btn-lg-primary, .btn-icon, .btn-icon-primary, .btn-sm-icon, .btn-sm-icon-primary, .btn-lg-icon, .btn-lg-icon-primary { - background-color: var(--color-primary); - color: var(--color-primary-foreground); - --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - &:hover { - @media (hover: hover) { - background-color: var(--color-primary); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-primary) 90%, transparent); - } - } - } - &[aria-pressed='true'] { - background-color: var(--color-primary); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-primary) 90%, transparent); - } - } - } - .btn-secondary, .btn-sm-secondary, .btn-lg-secondary, .btn-icon-secondary, .btn-sm-icon-secondary, .btn-lg-icon-secondary { - background-color: var(--color-secondary); - color: var(--color-secondary-foreground); - --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - &:hover, &[aria-pressed='true'] { - background-color: var(--color-secondary); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-secondary) 80%, transparent); - } - } - } - .btn-outline, .btn-sm-outline, .btn-lg-outline, .btn-icon-outline, .btn-sm-icon-outline, .btn-lg-icon-outline { - border-style: var(--tw-border-style); - border-width: 1px; - background-color: var(--color-background); - --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - &:is(.dark *) { - border-color: var(--color-input); - } - &:is(.dark *) { - background-color: var(--color-input); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-input) 30%, transparent); - } - } - &:hover, &[aria-pressed='true'] { - background-color: var(--color-accent); - color: var(--color-accent-foreground); - &:is(.dark *) { - background-color: var(--color-accent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-accent) 50%, transparent); - } - } - } - } - .btn-ghost, .btn-sm-ghost, .btn-lg-ghost, .btn-icon-ghost, .btn-sm-icon-ghost, .btn-lg-icon-ghost { - &:hover, &[aria-pressed='true'] { - background-color: var(--color-accent); - color: var(--color-accent-foreground); - &:is(.dark *) { - background-color: var(--color-accent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-accent) 50%, transparent); - } - } - } - } - .btn-link, .btn-sm-link, .btn-lg-link, .btn-icon-link, .btn-sm-icon-link, .btn-lg-icon-link { - color: var(--color-primary); - text-underline-offset: 4px; - &:hover, &[aria-pressed='true'] { - &:hover { - @media (hover: hover) { - text-decoration-line: underline; - } - } - } - } - .btn-destructive, .btn-sm-destructive, .btn-lg-destructive, .btn-icon-destructive, .btn-sm-icon-destructive, .btn-lg-icon-destructive { - background-color: var(--color-destructive); - color: var(--color-white); - --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - &:focus-visible { - --tw-ring-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); - } - } - &:is(.dark *) { - background-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-destructive) 60%, transparent); - } - } - &:is(.dark *) { - &:focus-visible { - --tw-ring-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-destructive) 40%, transparent); - } - } - } - &:hover, &[aria-pressed='true'] { - background-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-destructive) 90%, transparent); - } - &:is(.dark *) { - background-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-destructive) 50%, transparent); - } - } - } - } -} -.button-group { - isolation: isolate; - display: inline-flex; - width: fit-content; - align-items: stretch; - > *:focus-visible, > :is(.dropdown-menu, .popover) > button:focus-visible { - position: relative; - z-index: 10; - } - > hr[role='separator'] { - margin: calc(var(--spacing) * 0); - height: auto; - width: calc(var(--spacing) * 0); - flex-shrink: 0; - align-self: stretch; - border-style: var(--tw-border-style); - border-width: 1px; - border-color: var(--color-input); - } - &:not([data-orientation='vertical']) { - > *:not(:first-child), > :is(.dropdown-menu, .popover):not(:first-child) > button { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - border-left-style: var(--tw-border-style); - border-left-width: 0px; - } - > *:not(:last-child), > :is(.dropdown-menu, .popover):not(:last-child) > button { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - } - &[data-orientation='vertical'] { - flex-direction: column; - > hr[role='separator'] { - height: 1px; - width: auto; - } - > *:not(:first-child) { - border-top-left-radius: 0; - border-top-right-radius: 0; - border-top-style: var(--tw-border-style); - border-top-width: 0px; - } - > *:not(:last-child) { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; - } - } -} -@layer components { - .card { - display: flex; - flex-direction: column; - gap: calc(var(--spacing) * 6); - border-radius: var(--radius-xl); - border-style: var(--tw-border-style); - border-width: 1px; - background-color: var(--color-card); - padding-block: calc(var(--spacing) * 6); - color: var(--color-card-foreground); - --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - > header { - container-type: inline-size; - container-name: card-header; - display: grid; - grid-auto-rows: min-content; - grid-template-rows: auto auto; - align-items: flex-start; - gap: calc(var(--spacing) * 1.5); - padding-inline: calc(var(--spacing) * 6); - &:has(*[data-slot="card-action"]) { - grid-template-columns: 1fr auto; - } - &:is(.border-b) { - padding-bottom: calc(var(--spacing) * 6); - } - h2 { - --tw-leading: 1; - line-height: 1; - --tw-font-weight: var(--font-weight-semibold); - font-weight: var(--font-weight-semibold); - } - p { - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - color: var(--color-muted-foreground); - } - } - > section { - padding-inline: calc(var(--spacing) * 6); - } - > footer { - display: flex; - align-items: center; - padding-inline: calc(var(--spacing) * 6); - &:is(.border-t) { - padding-top: calc(var(--spacing) * 6); - } - } - } -} -@layer components { - :is(.form, .field) input[type='checkbox']:not([role='switch']), .input[type='checkbox']:not([role='switch']) { - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - flex-shrink: 0; - appearance: none; - border-radius: 4px; - border-style: var(--tw-border-style); - border-width: 1px; - border-color: var(--color-input); - --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - transition-property: box-shadow; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - --tw-outline-style: none; - outline-style: none; - &:checked { - border-color: var(--color-primary); - } - &:checked { - background-color: var(--color-primary); - } - &:focus-visible { - border-color: var(--color-ring); - } - &:focus-visible { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - &:focus-visible { - --tw-ring-color: var(--color-ring); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); - } - } - &:disabled { - cursor: not-allowed; - } - &:disabled { - opacity: 50%; - } - &[aria-invalid="true"] { - border-color: var(--color-destructive); - } - &[aria-invalid="true"] { - --tw-ring-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); - } - } - &:is(.dark *) { - background-color: var(--color-input); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-input) 30%, transparent); - } - } - &:is(.dark *) { - &:checked { - background-color: var(--color-primary); - } - } - &:is(.dark *) { - &[aria-invalid="true"] { - --tw-ring-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-destructive) 40%, transparent); - } - } - } - &:checked:after { - display: block; - width: calc(var(--spacing) * 3.5); - height: calc(var(--spacing) * 3.5); - background-color: var(--color-primary-foreground); - --tw-content: ''; - content: var(--tw-content); - mask-image: var(--check-icon); - mask-size: 0.875rem; - mask-position: center; - mask-repeat: no-repeat; - } - } -} -@layer components { - details { - &::details-content { - block-size: 0; - display: block; - opacity: 0%; - transition-property: all; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - transition-behavior: allow-discrete; - } - &[open]::details-content { - block-size: auto; - block-size: calc-size(auto, size); - opacity: 100%; - } - summary { - display: inline-flex; - cursor: pointer; - align-items: center; - } - } - details > summary::-webkit-details-marker { - display: none; - } -} -@layer components { - .command-dialog { - inset-block: calc(var(--spacing) * 0); - opacity: 0%; - transition-property: all; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - transition-behavior: allow-discrete; - &:is([open],:popover-open) { - opacity: 100%; - &::backdrop { - opacity: 100%; - } - > * { - --tw-scale-x: 100%; - --tw-scale-y: 100%; - --tw-scale-z: 100%; - scale: var(--tw-scale-x) var(--tw-scale-y); - } - @starting-style { - opacity: 0%; - &::backdrop { - opacity: 0%; - } - > * { - --tw-scale-x: 95%; - --tw-scale-y: 95%; - --tw-scale-z: 95%; - scale: var(--tw-scale-x) var(--tw-scale-y); - } - } - } - &::backdrop { - background-color: color-mix(in srgb, #000 50%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-black) 50%, transparent); - } - opacity: 0%; - transition-property: all; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - transition-behavior: allow-discrete; - } - > * { - position: fixed; - top: 50%; - left: 50%; - z-index: 50; - display: flex; - max-height: min(640px, calc(100% - 2rem)); - width: 100%; - max-width: calc(100% - 2rem); - --tw-translate-x: calc(calc(1/2 * 100%) * -1); - translate: var(--tw-translate-x) var(--tw-translate-y); - --tw-translate-y: calc(calc(1/2 * 100%) * -1); - translate: var(--tw-translate-x) var(--tw-translate-y); - flex-direction: column; - overflow: hidden; - border-radius: var(--radius-lg); - border-style: var(--tw-border-style); - border-width: 1px; - background-color: var(--color-background); - --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - @media (width >= 40rem) { - max-width: var(--container-lg); - } - --tw-scale-x: 95%; - --tw-scale-y: 95%; - --tw-scale-z: 95%; - scale: var(--tw-scale-x) var(--tw-scale-y); - transition-property: all; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - > button, > form[method='dialog'] { - position: absolute; - top: calc(var(--spacing) * 4); - right: calc(var(--spacing) * 4); - } - > button, > form[method='dialog'] > button { - border-radius: var(--radius-xs); - opacity: 70%; - --tw-ring-offset-color: var(--color-background); - transition-property: opacity; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - &:hover { - @media (hover: hover) { - opacity: 100%; - } - } - &:focus { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - &:focus { - --tw-ring-color: var(--color-ring); - } - &:focus { - --tw-ring-offset-width: 2px; - --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - } - &:focus { - --tw-outline-style: none; - outline-style: none; - @media (forced-colors: active) { - outline: 2px solid transparent; - outline-offset: 2px; - } - } - &:disabled { - pointer-events: none; - } - &[data-state="open"] { - background-color: var(--color-accent); - } - &[data-state="open"] { - color: var(--color-muted-foreground); - } - & svg { - pointer-events: none; - } - & svg { - flex-shrink: 0; - } - & svg:not([class*='size-']) { - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - } - } - } - .command { - > header input { - height: calc(var(--spacing) * 12); - } - [role='menu'] { - padding-inline: calc(var(--spacing) * 2); - [role='menuitem'] { - padding-inline: calc(var(--spacing) * 2); - padding-block: calc(var(--spacing) * 3); - & svg { - width: calc(var(--spacing) * 5); - height: calc(var(--spacing) * 5); - } - } - [role='heading'] { - padding-inline: calc(var(--spacing) * 2); - padding-block: calc(var(--spacing) * 1.5); - --tw-font-weight: var(--font-weight-medium); - font-weight: var(--font-weight-medium); - color: var(--color-muted-foreground); - } - } - } - } - .command { - > header { - display: flex; - align-items: center; - gap: calc(var(--spacing) * 2); - border-bottom-style: var(--tw-border-style); - border-bottom-width: 1px; - padding-inline: calc(var(--spacing) * 3); - svg { - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - flex-shrink: 0; - opacity: 50%; - } - input { - display: flex; - height: calc(var(--spacing) * 10); - width: 100%; - border-radius: var(--radius-md); - background-color: transparent; - padding-block: calc(var(--spacing) * 3); - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - --tw-outline-style: none; - outline-style: none; - @media (forced-colors: active) { - outline: 2px solid transparent; - outline-offset: 2px; - } - &::placeholder { - color: var(--color-muted-foreground); - } - &:disabled { - cursor: not-allowed; - } - &:disabled { - opacity: 50%; - } - } - } - [role='menu'] { - max-height: 300px; - overflow-x: hidden; - overflow-y: auto; - padding: calc(var(--spacing) * 1); - [role='menuitem'] { - position: relative; - display: flex; - width: 100%; - cursor: default; - align-items: center; - gap: calc(var(--spacing) * 2); - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - border-radius: var(--radius-sm); - padding-inline: calc(var(--spacing) * 2); - padding-block: calc(var(--spacing) * 1.5); - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - --tw-outline-style: none; - outline-style: none; - @media (forced-colors: active) { - outline: 2px solid transparent; - outline-offset: 2px; - } - -webkit-user-select: none; - user-select: none; - &:disabled { - pointer-events: none; - } - &:disabled { - opacity: 50%; - } - &[aria-disabled="true"] { - pointer-events: none; - } - &[aria-disabled="true"] { - opacity: 50%; - } - &[aria-hidden="true"] { - display: none; - } - & svg { - pointer-events: none; - } - & svg { - flex-shrink: 0; - } - & svg:not([class*='size-']) { - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - } - & svg:not([class*='text-']) { - color: var(--color-muted-foreground); - } - &.active { - background-color: var(--color-accent); - color: var(--color-accent-foreground); - } - } - [role='heading'] { - display: flex; - padding-inline: calc(var(--spacing) * 2); - padding-block: calc(var(--spacing) * 1.5); - font-size: var(--text-xs); - line-height: var(--tw-leading, var(--text-xs--line-height)); - --tw-font-weight: var(--font-weight-medium); - font-weight: var(--font-weight-medium); - color: var(--color-muted-foreground); - } - [role='group']:not(:has([role='menuitem']:not([aria-hidden='true']))) { - display: none; - } - [role='separator'] { - margin-inline: calc(var(--spacing) * -1); - margin-block: calc(var(--spacing) * 1); - border-color: var(--color-border); - } - &:not(:has([data-value]:not([aria-hidden='true'])))::before { - margin: calc(var(--spacing) * -1); - display: flex; - align-items: center; - justify-content: center; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - padding-inline: calc(var(--spacing) * 3); - padding-block: calc(var(--spacing) * 6); - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - } - &[data-empty]:not(:has([data-value]:not([aria-hidden='true'])))::before { - --tw-content: attr(data-empty); - content: var(--tw-content); - } - &:not([data-empty]):not(:has([data-value]:not([aria-hidden='true'])))::before { - --tw-content: 'No results found'; - content: var(--tw-content); - } - } - &:not([data-command-initialized]) [role='menuitem'] { - &:hover { - @media (hover: hover) { - background-color: var(--color-accent); - } - } - &:hover { - @media (hover: hover) { - color: var(--color-accent-foreground); - } - } - } - &:has(> header input:not(:placeholder-shown)) [role='separator'] { - display: none; - } - } -} -@layer components { - .dialog { - inset-block: calc(var(--spacing) * 0); - opacity: 0%; - transition-property: all; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - transition-behavior: allow-discrete; - &:is([open],:popover-open) { - opacity: 100%; - &::backdrop { - opacity: 100%; - } - > * { - --tw-scale-x: 100%; - --tw-scale-y: 100%; - --tw-scale-z: 100%; - scale: var(--tw-scale-x) var(--tw-scale-y); - } - @starting-style { - opacity: 0%; - &::backdrop { - opacity: 0%; - } - > * { - --tw-scale-x: 95%; - --tw-scale-y: 95%; - --tw-scale-z: 95%; - scale: var(--tw-scale-x) var(--tw-scale-y); - } - } - } - &::backdrop { - background-color: color-mix(in srgb, #000 50%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-black) 50%, transparent); - } - opacity: 0%; - transition-property: all; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - transition-behavior: allow-discrete; - } - > * { - position: fixed; - top: 50%; - left: 50%; - z-index: 50; - display: flex; - max-height: calc(100% - 2rem); - width: 100%; - max-width: calc(100% - 2rem); - --tw-translate-x: calc(calc(1/2 * 100%) * -1); - translate: var(--tw-translate-x) var(--tw-translate-y); - --tw-translate-y: calc(calc(1/2 * 100%) * -1); - translate: var(--tw-translate-x) var(--tw-translate-y); - flex-direction: column; - gap: calc(var(--spacing) * 4); - border-radius: var(--radius-lg); - border-style: var(--tw-border-style); - border-width: 1px; - background-color: var(--color-background); - padding: calc(var(--spacing) * 6); - --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - @media (width >= 40rem) { - max-width: var(--container-lg); - } - --tw-scale-x: 95%; - --tw-scale-y: 95%; - --tw-scale-z: 95%; - scale: var(--tw-scale-x) var(--tw-scale-y); - transition-property: all; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - > header { - display: flex; - flex-direction: column; - gap: calc(var(--spacing) * 2); - text-align: center; - @media (width >= 40rem) { - text-align: left; - } - > h2 { - font-size: var(--text-lg); - line-height: var(--tw-leading, var(--text-lg--line-height)); - --tw-leading: 1; - line-height: 1; - --tw-font-weight: var(--font-weight-semibold); - font-weight: var(--font-weight-semibold); - } - > p { - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - color: var(--color-muted-foreground); - } - } - > section { - margin-inline: calc(var(--spacing) * -6); - flex: 1; - padding-inline: calc(var(--spacing) * 6); - } - > footer { - display: flex; - flex-direction: column-reverse; - gap: calc(var(--spacing) * 2); - @media (width >= 40rem) { - flex-direction: row; - } - @media (width >= 40rem) { - justify-content: flex-end; - } - } - > button, > form[method='dialog'] { - position: absolute; - top: calc(var(--spacing) * 4); - right: calc(var(--spacing) * 4); - } - > button, > form[method='dialog'] > button { - border-radius: var(--radius-xs); - opacity: 70%; - --tw-ring-offset-color: var(--color-background); - transition-property: opacity; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - &:hover { - @media (hover: hover) { - opacity: 100%; - } - } - &:focus { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - &:focus { - --tw-ring-color: var(--color-ring); - } - &:focus { - --tw-ring-offset-width: 2px; - --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - } - &:focus { - --tw-outline-style: none; - outline-style: none; - @media (forced-colors: active) { - outline: 2px solid transparent; - outline-offset: 2px; - } - } - &:disabled { - pointer-events: none; - } - &[data-state="open"] { - background-color: var(--color-accent); - } - &[data-state="open"] { - color: var(--color-muted-foreground); - } - & svg { - pointer-events: none; - } - & svg { - flex-shrink: 0; - } - & svg:not([class*='size-']) { - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - } - } - } - } -} -@layer components { - .dropdown-menu { - position: relative; - display: inline-flex; - [data-popover] { - padding: calc(var(--spacing) * 1); - min-width: anchor-size(width); - [role='menuitem'], [role='menuitemcheckbox'], [role='menuitemradio'] { - position: relative; - display: flex; - width: 100%; - cursor: default; - align-items: center; - gap: calc(var(--spacing) * 2); - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - border-radius: var(--radius-sm); - padding-inline: calc(var(--spacing) * 2); - padding-block: calc(var(--spacing) * 1.5); - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - --tw-outline-style: none; - outline-style: none; - @media (forced-colors: active) { - outline: 2px solid transparent; - outline-offset: 2px; - } - -webkit-user-select: none; - user-select: none; - &:disabled { - pointer-events: none; - } - &:disabled { - opacity: 50%; - } - &[aria-disabled="true"] { - pointer-events: none; - } - &[aria-disabled="true"] { - opacity: 50%; - } - &[aria-hidden="true"] { - display: none; - } - & svg { - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - } - & svg { - flex-shrink: 0; - } - & svg { - color: var(--color-muted-foreground); - } - &:not([aria-disabled='true']) { - &:focus-visible { - background-color: var(--color-accent); - } - &:focus-visible { - color: var(--color-accent-foreground); - } - } - &.active { - background-color: var(--color-accent); - color: var(--color-accent-foreground); - } - } - [role='menu'] [role='heading'] { - display: flex; - padding-inline: calc(var(--spacing) * 2); - padding-block: calc(var(--spacing) * 1.5); - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - --tw-font-weight: var(--font-weight-medium); - font-weight: var(--font-weight-medium); - } - [role='separator'] { - margin-inline: calc(var(--spacing) * -1); - margin-block: calc(var(--spacing) * 1); - border-color: var(--color-border); - } - } - &:not([data-dropdown-menu-initialized]) [data-popover] { - [role='menuitem'], [role='menuitemcheckbox'], [role='menuitemradio'] { - &:hover { - @media (hover: hover) { - background-color: var(--color-accent); - } - } - &:hover { - @media (hover: hover) { - color: var(--color-accent-foreground); - } - } - } - } - } -} -@layer components { - .fieldset { - display: flex; - flex-direction: column; - gap: calc(var(--spacing) * 6); - > legend { - margin-bottom: calc(var(--spacing) * 3); - font-size: var(--text-base); - line-height: var(--tw-leading, var(--text-base--line-height)); - --tw-font-weight: var(--font-weight-medium); - font-weight: var(--font-weight-medium); - & + p { - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - color: var(--color-muted-foreground); - } - } - } - .field { - display: flex; - width: 100%; - flex-direction: column; - gap: calc(var(--spacing) * 3); - &[data-invalid="true"] { - color: var(--color-destructive); - } - &>* { - width: 100%; - } - &>.sr-only { - width: auto; - } - .description { - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - color: var(--color-muted-foreground); - } - .error { - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - --tw-font-weight: var(--font-weight-medium); - font-weight: var(--font-weight-medium); - color: var(--color-destructive); - } - } -} -@layer components { - :is(.form, .field) input[type='text'], :is(.form, .field) input[type='email'], :is(.form, .field) input[type='password'], :is(.form, .field) input[type='number'], :is(.form, .field) input[type='file'], :is(.form, .field) input[type='tel'], :is(.form, .field) input[type='url'], :is(.form, .field) input[type='search'], :is(.form, .field) input[type='date'], :is(.form, .field) input[type='datetime-local'], :is(.form, .field) input[type='month'], :is(.form, .field) input[type='week'], :is(.form, .field) input[type='time'], .input[type='text'], .input[type='email'], .input[type='password'], .input[type='number'], .input[type='file'], .input[type='tel'], .input[type='url'], .input[type='search'], .input[type='date'], .input[type='datetime-local'], .input[type='month'], .input[type='week'], .input[type='time'] { - display: flex; - height: calc(var(--spacing) * 9); - width: 100%; - min-width: calc(var(--spacing) * 0); - appearance: none; - border-radius: var(--radius-md); - border-style: var(--tw-border-style); - border-width: 1px; - border-color: var(--color-input); - background-color: transparent; - padding-inline: calc(var(--spacing) * 3); - padding-block: calc(var(--spacing) * 1); - font-size: var(--text-base); - line-height: var(--tw-leading, var(--text-base--line-height)); - --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - transition-property: color,box-shadow; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - --tw-outline-style: none; - outline-style: none; - & *::selection { - background-color: var(--color-primary); - } - &::selection { - background-color: var(--color-primary); - } - & *::selection { - color: var(--color-primary-foreground); - } - &::selection { - color: var(--color-primary-foreground); - } - &::file-selector-button { - display: inline-flex; - } - &::file-selector-button { - height: calc(var(--spacing) * 7); - } - &::file-selector-button { - border-style: var(--tw-border-style); - border-width: 0px; - } - &::file-selector-button { - background-color: transparent; - } - &::file-selector-button { - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - } - &::file-selector-button { - --tw-font-weight: var(--font-weight-medium); - font-weight: var(--font-weight-medium); - } - &::file-selector-button { - color: var(--color-foreground); - } - &::placeholder { - color: var(--color-muted-foreground); - } - &:disabled { - pointer-events: none; - } - &:disabled { - cursor: not-allowed; - } - &:disabled { - opacity: 50%; - } - @media (width >= 48rem) { - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - } - &:is(.dark *) { - background-color: var(--color-input); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-input) 30%, transparent); - } - } - &:focus-visible { - border-color: var(--color-ring); - } - &:focus-visible { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - &:focus-visible { - --tw-ring-color: var(--color-ring); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); - } - } - &[aria-invalid="true"] { - border-color: var(--color-destructive); - } - &[aria-invalid="true"] { - --tw-ring-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); - } - } - &:is(.dark *) { - &[aria-invalid="true"] { - --tw-ring-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-destructive) 40%, transparent); - } - } - } - } -} -@layer components { - .kbd { - pointer-events: none; - display: inline-flex; - height: calc(var(--spacing) * 5); - width: fit-content; - min-width: calc(var(--spacing) * 5); - align-items: center; - justify-content: center; - gap: calc(var(--spacing) * 1); - border-radius: var(--radius-sm); - background-color: var(--color-muted); - padding-inline: calc(var(--spacing) * 1); - font-family: var(--font-sans); - font-size: var(--text-xs); - line-height: var(--tw-leading, var(--text-xs--line-height)); - --tw-font-weight: var(--font-weight-medium); - font-weight: var(--font-weight-medium); - color: var(--color-muted-foreground); - -webkit-user-select: none; - user-select: none; - & svg:not([class*='size-']) { - width: calc(var(--spacing) * 3); - height: calc(var(--spacing) * 3); - } - } -} -@layer components { - :is(.form, .field) label, .label { - display: flex; - align-items: center; - gap: calc(var(--spacing) * 2); - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - --tw-leading: 1; - line-height: 1; - --tw-font-weight: var(--font-weight-medium); - font-weight: var(--font-weight-medium); - -webkit-user-select: none; - user-select: none; - &:is(:where(.peer):disabled ~ *) { - pointer-events: none; - } - &:is(:where(.peer):disabled ~ *) { - opacity: 50%; - } - &:has(>*:disabled), &:has(+*:disabled) { - pointer-events: none; - opacity: 50%; - } - } -} -@layer components { - [data-popover] { - visibility: visible; - position: absolute; - z-index: 50; - width: max-content; - min-width: 100%; - --tw-scale-x: 100%; - --tw-scale-y: 100%; - --tw-scale-z: 100%; - scale: var(--tw-scale-x) var(--tw-scale-y); - overflow-x: hidden; - overflow-y: auto; - border-radius: var(--radius-md); - border-style: var(--tw-border-style); - border-width: 1px; - background-color: var(--color-popover); - color: var(--color-popover-foreground); - opacity: 100%; - --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - transition-property: all; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - &[aria-hidden='true'] { - visibility: hidden; - --tw-scale-x: 95%; - --tw-scale-y: 95%; - --tw-scale-z: 95%; - scale: var(--tw-scale-x) var(--tw-scale-y); - opacity: 0%; - &:not([data-side]), &[data-side='bottom'] { - --tw-translate-y: calc(var(--spacing) * -2); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - &[data-side='top'] { - --tw-translate-y: calc(var(--spacing) * 2); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - &[data-side='left'] { - --tw-translate-x: calc(var(--spacing) * 2); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - &[data-side='right'] { - --tw-translate-x: calc(var(--spacing) * -2); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - } - &:not([data-side]), &[data-side='bottom'] { - top: 100%; - margin-top: calc(var(--spacing) * 1); - } - &[data-side='top'] { - bottom: 100%; - margin-bottom: calc(var(--spacing) * 1); - } - &[data-side='left'] { - right: 100%; - margin-right: calc(var(--spacing) * 1); - } - &[data-side='right'] { - left: 100%; - margin-left: calc(var(--spacing) * 1); - } - &:not([data-side]), &[data-side='bottom'], &[data-side='top'] { - &:not([data-align]), &[data-align='start'] { - left: calc(var(--spacing) * 0); - } - &[data-align='end'] { - right: calc(var(--spacing) * 0); - } - &[data-align='center'] { - left: calc(1/2 * 100%); - --tw-translate-x: calc(calc(1/2 * 100%) * -1); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - } - &[data-side='left'], &[data-side='right'] { - &:not([data-align]), &[data-align='start'] { - top: calc(var(--spacing) * 0); - } - &[data-align='end'] { - bottom: calc(var(--spacing) * 0); - } - &[data-align='center'] { - top: calc(1/2 * 100%); - --tw-translate-y: calc(calc(1/2 * 100%) * -1); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - } - } - .popover { - position: relative; - display: inline-flex; - [data-popover] { - padding: calc(var(--spacing) * 4); - } - } -} -@layer components { - :is(.form, .field) input[type='radio'], .input[type='radio'] { - position: relative; - aspect-ratio: 1 / 1; - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - flex-shrink: 0; - appearance: none; - border-radius: calc(infinity * 1px); - border-style: var(--tw-border-style); - border-width: 1px; - border-color: var(--color-input); - color: var(--color-primary); - --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - transition-property: color,box-shadow; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - --tw-outline-style: none; - outline-style: none; - &:focus-visible { - border-color: var(--color-ring); - } - &:focus-visible { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - &:focus-visible { - --tw-ring-color: var(--color-ring); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); - } - } - &:disabled { - cursor: not-allowed; - } - &:disabled { - opacity: 50%; - } - &[aria-invalid="true"] { - border-color: var(--color-destructive); - } - &[aria-invalid="true"] { - --tw-ring-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); - } - } - &:is(.dark *) { - background-color: var(--color-input); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-input) 30%, transparent); - } - } - &:is(.dark *) { - &[aria-invalid="true"] { - --tw-ring-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-destructive) 40%, transparent); - } - } - } - &:checked:before { - position: absolute; - top: calc(1/2 * 100%); - left: calc(1/2 * 100%); - width: calc(var(--spacing) * 2); - height: calc(var(--spacing) * 2); - --tw-translate-x: calc(calc(1/2 * 100%) * -1); - translate: var(--tw-translate-x) var(--tw-translate-y); - --tw-translate-y: calc(calc(1/2 * 100%) * -1); - translate: var(--tw-translate-x) var(--tw-translate-y); - border-radius: calc(infinity * 1px); - background-color: var(--color-primary); - --tw-content: ''; - content: var(--tw-content); - } - } -} -@layer components { - :is(.form, .field) input[type='range'], .input[type='range'] { - display: flex; - appearance: none; - align-items: center; - padding: calc(var(--spacing) * 0); - --tw-outline-style: none; - outline-style: none; - --slider-value: 20%; - &:hover, &:focus-visible { - &::-webkit-slider-thumb { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - &::-moz-range-thumb { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - &::-ms-thumb { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - } - &::-webkit-slider-thumb { - margin-top: calc(var(--spacing) * -1.25); - display: block; - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - flex-shrink: 0; - appearance: none; - border-radius: calc(infinity * 1px); - border-style: var(--tw-border-style); - border-width: 1px; - border-color: var(--color-primary); - background-color: var(--color-background); - --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - --tw-ring-color: var(--color-ring); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); - } - } - &::-webkit-slider-runnable-track { - height: calc(var(--spacing) * 1.5); - width: 100%; - appearance: none; - border-radius: calc(infinity * 1px); - background: linear-gradient(to right, var(--primary) var(--slider-value), var(--muted) var(--slider-value)); - } - &::-moz-range-thumb { - margin-top: calc(var(--spacing) * -1.25); - display: block; - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - flex-shrink: 0; - appearance: none; - border-radius: calc(infinity * 1px); - border-style: var(--tw-border-style); - border-width: 1px; - border-color: var(--color-primary); - background-color: var(--color-background); - --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - --tw-ring-color: var(--color-ring); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); - } - } - &::-moz-range-track { - height: calc(var(--spacing) * 1.5); - width: 100%; - appearance: none; - border-radius: calc(infinity * 1px); - background: linear-gradient(to right, var(--primary) var(--slider-value), var(--muted) var(--slider-value)); - } - &::-ms-thumb { - margin-top: calc(var(--spacing) * -1.25); - display: block; - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - flex-shrink: 0; - appearance: none; - border-radius: calc(infinity * 1px); - border-style: var(--tw-border-style); - border-width: 1px; - border-color: var(--color-primary); - background-color: var(--color-background); - --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - --tw-ring-color: var(--color-ring); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); - } - } - &::-ms-track { - height: calc(var(--spacing) * 1.5); - width: 100%; - appearance: none; - border-radius: calc(infinity * 1px); - } - &::-ms-fill-lower { - border-radius: calc(infinity * 1px); - background-color: var(--color-primary); - } - &::-ms-fill-upper { - border-radius: calc(infinity * 1px); - background-color: var(--color-muted); - } - } -} -@layer components { - :is(.form, .field) select, select.select { - display: flex; - height: calc(var(--spacing) * 9); - width: fit-content; - appearance: none; - align-items: center; - justify-content: space-between; - gap: calc(var(--spacing) * 2); - border-radius: var(--radius-md); - border-style: var(--tw-border-style); - border-width: 1px; - border-color: var(--color-input); - background-color: transparent; - padding-block: calc(var(--spacing) * 2); - padding-right: calc(var(--spacing) * 9); - padding-left: calc(var(--spacing) * 3); - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - white-space: nowrap; - --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - transition-property: color,box-shadow; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - --tw-outline-style: none; - outline-style: none; - &:focus-visible { - border-color: var(--color-ring); - } - &:focus-visible { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - &:focus-visible { - --tw-ring-color: var(--color-ring); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); - } - } - &:disabled { - cursor: not-allowed; - } - &:disabled { - opacity: 50%; - } - &[aria-invalid="true"] { - border-color: var(--color-destructive); - } - &[aria-invalid="true"] { - --tw-ring-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); - } - } - &:is(.dark *) { - background-color: var(--color-input); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-input) 30%, transparent); - } - } - &:is(.dark *) { - &:hover { - @media (hover: hover) { - background-color: var(--color-input); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-input) 50%, transparent); - } - } - } - } - &:is(.dark *) { - &[aria-invalid="true"] { - --tw-ring-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-destructive) 40%, transparent); - } - } - } - background-image: var(--chevron-down-icon-50); - background-size: 1rem; - background-position: center right 0.75rem; - background-repeat: no-repeat; - option, optgroup { - background-color: var(--color-popover); - color: var(--color-popover-foreground); - } - } - *:not(select).select { - position: relative; - display: inline-flex; - [data-popover] { - padding: calc(var(--spacing) * 1); - [role='option'] { - position: relative; - display: flex; - width: 100%; - cursor: default; - align-items: center; - gap: calc(var(--spacing) * 2); - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - border-radius: var(--radius-sm); - padding-block: calc(var(--spacing) * 1.5); - padding-right: calc(var(--spacing) * 7.5); - padding-left: calc(var(--spacing) * 2); - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - --tw-outline-style: none; - outline-style: none; - @media (forced-colors: active) { - outline: 2px solid transparent; - outline-offset: 2px; - } - -webkit-user-select: none; - user-select: none; - &:disabled { - pointer-events: none; - } - &:disabled { - opacity: 50%; - } - &[aria-disabled="true"] { - pointer-events: none; - } - &[aria-disabled="true"] { - opacity: 50%; - } - &[aria-hidden="true"] { - display: none; - } - & svg { - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - } - & svg { - flex-shrink: 0; - } - & svg { - color: var(--color-muted-foreground); - } - &[aria-selected='true'] { - background-image: var(--check-icon); - background-size: 0.875rem; - background-position: center right 0.5rem; - background-repeat: no-repeat; - } - &.active, &:focus-visible { - background-color: var(--color-accent); - color: var(--color-accent-foreground); - } - } - [role='listbox'] [role='heading'] { - display: flex; - padding-inline: calc(var(--spacing) * 2); - padding-block: calc(var(--spacing) * 1.5); - font-size: var(--text-xs); - line-height: var(--tw-leading, var(--text-xs--line-height)); - color: var(--color-muted-foreground); - } - [role='listbox'] [role='group']:not(:has([role='option']:not([aria-hidden='true']))) { - display: none; - } - [role='separator'] { - margin-inline: calc(var(--spacing) * -1); - margin-block: calc(var(--spacing) * 1); - border-color: var(--color-border); - } - > header { - margin-inline: calc(var(--spacing) * -1); - margin-top: calc(var(--spacing) * -1); - margin-bottom: calc(var(--spacing) * 1); - display: flex; - height: calc(var(--spacing) * 9); - align-items: center; - gap: calc(var(--spacing) * 2); - border-bottom-style: var(--tw-border-style); - border-bottom-width: 1px; - padding-inline: calc(var(--spacing) * 3); - svg { - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - flex-shrink: 0; - opacity: 50%; - } - input[role='combobox'] { - display: flex; - height: calc(var(--spacing) * 10); - width: 100%; - min-width: calc(var(--spacing) * 0); - flex: 1; - border-radius: var(--radius-md); - background-color: transparent; - padding-block: calc(var(--spacing) * 3); - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - --tw-outline-style: none; - outline-style: none; - @media (forced-colors: active) { - outline: 2px solid transparent; - outline-offset: 2px; - } - &::placeholder { - color: var(--color-muted-foreground); - } - &:disabled { - cursor: not-allowed; - } - &:disabled { - opacity: 50%; - } - } - } - [role='listbox']:not(:has([data-value]:not([aria-hidden='true'])))::before { - display: flex; - align-items: center; - justify-content: center; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - padding: calc(var(--spacing) * 6); - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - } - [role='listbox'][data-empty]:not(:has([data-value]:not([aria-hidden='true'])))::before { - --tw-content: attr(data-empty); - content: var(--tw-content); - } - [role='listbox']:not([data-empty]):not(:has([data-value]:not([aria-hidden='true'])))::before { - --tw-content: 'No results found'; - content: var(--tw-content); - } - } - [data-popover]:has(> header input:not(:placeholder-shown)) [role='separator'] { - display: none; - } - &:not([data-select-initialized]) [data-popover] [role='option'] { - &:hover { - @media (hover: hover) { - background-color: var(--color-accent); - } - } - &:hover { - @media (hover: hover) { - color: var(--color-accent-foreground); - } - } - } - } -} -.sidebar { - &:not([data-sidebar-initialized]) { - @media (width < 48rem) { - display: none; - } - } - &:not([aria-hidden]), &[aria-hidden=false] { - @media (width < 48rem) { - position: fixed; - } - @media (width < 48rem) { - inset: calc(var(--spacing) * 0); - } - @media (width < 48rem) { - z-index: 40; - } - @media (width < 48rem) { - background-color: color-mix(in srgb, #000 50%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-black) 50%, transparent); - } - } - } - nav { - position: fixed; - inset-block: calc(var(--spacing) * 0); - z-index: 50; - display: flex; - width: var(--sidebar-mobile-width); - flex-direction: column; - background-color: var(--color-sidebar); - color: var(--color-sidebar-foreground); - transition-property: transform, translate, scale, rotate; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - --tw-duration: 300ms; - transition-duration: 300ms; - --tw-ease: var(--ease-in-out); - transition-timing-function: var(--ease-in-out); - @media (width >= 48rem) { - width: var(--sidebar-width); - } - } - & + * { - transition-property: margin; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - --tw-duration: 300ms; - transition-duration: 300ms; - --tw-ease: var(--ease-in-out); - transition-timing-function: var(--ease-in-out); - } - &:not([data-side]), &[data-side=left] { - nav { - left: calc(var(--spacing) * 0); - border-right-style: var(--tw-border-style); - border-right-width: 1px; - } - & + * { - position: relative; - @media (width >= 48rem) { - margin-left: var(--sidebar-width); - } - } - &[aria-hidden=true] { - nav { - --tw-translate-x: -100%; - translate: var(--tw-translate-x) var(--tw-translate-y); - } - & + * { - @media (width >= 48rem) { - margin-left: calc(var(--spacing) * 0); - } - } - } - } - &[data-side=right] { - nav { - right: calc(var(--spacing) * 0); - border-left-style: var(--tw-border-style); - border-left-width: 1px; - } - & + * { - position: relative; - @media (width >= 48rem) { - margin-right: var(--sidebar-width); - } - } - &[aria-hidden=true] { - nav { - --tw-translate-x: 100%; - translate: var(--tw-translate-x) var(--tw-translate-y); - } - & + * { - @media (width >= 48rem) { - margin-right: calc(var(--spacing) * 0); - } - } - } - } - nav { - > header, > footer { - display: flex; - flex-direction: column; - gap: calc(var(--spacing) * 2); - padding: calc(var(--spacing) * 2); - } - [role=separator] { - margin-inline: calc(var(--spacing) * 2); - width: auto; - border-color: var(--color-sidebar-border); - } - > section { - display: flex; - min-height: calc(var(--spacing) * 0); - flex: 1; - flex-direction: column; - gap: calc(var(--spacing) * 2); - overflow-y: auto; - > [role=group] { - position: relative; - display: flex; - width: 100%; - min-width: calc(var(--spacing) * 0); - flex-direction: column; - padding: calc(var(--spacing) * 2); - } - h3 { - display: flex; - height: calc(var(--spacing) * 8); - flex-shrink: 0; - align-items: center; - border-radius: var(--radius-md); - padding-inline: calc(var(--spacing) * 2); - font-size: var(--text-xs); - line-height: var(--tw-leading, var(--text-xs--line-height)); - --tw-font-weight: var(--font-weight-medium); - font-weight: var(--font-weight-medium); - color: var(--color-sidebar-foreground); - @supports (color: color-mix(in lab, red, red)) { - color: color-mix(in oklab, var(--color-sidebar-foreground) 70%, transparent); - } - --tw-ring-color: var(--color-sidebar-ring); - --tw-outline-style: none; - outline-style: none; - @media (forced-colors: active) { - outline: 2px solid transparent; - outline-offset: 2px; - } - transition-property: margin,opacity; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - --tw-duration: 200ms; - transition-duration: 200ms; - --tw-ease: linear; - transition-timing-function: linear; - &:focus-visible { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - &>svg { - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - } - &>svg { - flex-shrink: 0; - } - } - ul { - display: flex; - width: 100%; - min-width: calc(var(--spacing) * 0); - flex-direction: column; - gap: calc(var(--spacing) * 1); - li { - position: relative; - > a, > details > summary { - display: flex; - width: 100%; - align-items: center; - gap: calc(var(--spacing) * 2); - overflow: hidden; - border-radius: var(--radius-md); - padding: calc(var(--spacing) * 2); - text-align: left; - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - --tw-ring-color: var(--color-sidebar-ring); - --tw-outline-style: none; - outline-style: none; - @media (forced-colors: active) { - outline: 2px solid transparent; - outline-offset: 2px; - } - transition-property: width,height,padding; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - &:hover { - @media (hover: hover) { - background-color: var(--color-sidebar-accent); - } - } - &:hover { - @media (hover: hover) { - color: var(--color-sidebar-accent-foreground); - } - } - &:focus-visible { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - &:active { - background-color: var(--color-sidebar-accent); - } - &:active { - color: var(--color-sidebar-accent-foreground); - } - &:disabled { - pointer-events: none; - } - &:disabled { - opacity: 50%; - } - &[aria-disabled="true"] { - pointer-events: none; - } - &[aria-disabled="true"] { - opacity: 50%; - } - &>span:last-child { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - &>svg { - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - } - &>svg { - flex-shrink: 0; - } - &[aria-current=page] { - background-color: var(--color-sidebar-accent); - } - &[aria-current=page] { - --tw-font-weight: var(--font-weight-medium); - font-weight: var(--font-weight-medium); - } - &[aria-current=page] { - color: var(--color-sidebar-accent-foreground); - } - &:not([data-variant]), &[data-variant=default] { - &:hover { - @media (hover: hover) { - background-color: var(--color-sidebar-accent); - } - } - &:hover { - @media (hover: hover) { - color: var(--color-sidebar-accent-foreground); - } - } - } - &[data-variant=outline] { - background-color: var(--color-background); - --tw-shadow: 0 0 0 1px var(--tw-shadow-color, hsl(var(--sidebar-border))); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - &:hover { - @media (hover: hover) { - background-color: var(--color-sidebar-accent); - } - } - &:hover { - @media (hover: hover) { - color: var(--color-sidebar-accent-foreground); - } - } - &:hover { - @media (hover: hover) { - --tw-shadow: 0 0 0 1px var(--tw-shadow-color, hsl(var(--sidebar-accent))); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - } - } - &:not([data-size]), &[data-size=default] { - height: calc(var(--spacing) * 8); - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - } - &[data-size=sm] { - height: calc(var(--spacing) * 7); - font-size: var(--text-xs); - line-height: var(--tw-leading, var(--text-xs--line-height)); - } - &[data-size=lg] { - height: calc(var(--spacing) * 12); - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - &:is(:where(.group)[data-collapsible="icon"] *) { - padding: calc(var(--spacing) * 0) !important; - } - } - } - > details { - &:not([open]) { - > summary { - &::after { - rotate: calc(90deg * -1); - } - } - } - > summary { - &::after { - margin-left: auto; - display: block; - width: calc(var(--spacing) * 3.5); - height: calc(var(--spacing) * 3.5); - background-color: var(--color-primary); - transition-property: transform, translate, scale, rotate; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - --tw-ease: linear; - transition-timing-function: linear; - --tw-content: ''; - content: var(--tw-content); - mask-image: var(--chevron-down-icon); - mask-size: 1rem; - mask-position: center; - mask-repeat: no-repeat; - } - } - &::details-content { - padding-inline: calc(var(--spacing) * 3.5); - } - } - } - ul { - display: flex; - width: 100%; - min-width: calc(var(--spacing) * 0); - --tw-translate-x: 1px; - translate: var(--tw-translate-x) var(--tw-translate-y); - flex-direction: column; - gap: calc(var(--spacing) * 1); - border-left-style: var(--tw-border-style); - border-left-width: 1px; - border-color: var(--color-sidebar-border); - padding-inline: calc(var(--spacing) * 2.5); - padding-block: calc(var(--spacing) * 0.5); - } - } - } - } -} -@layer components { - :is(.form, .field) input[type='checkbox'][role='switch'], .input[type='checkbox'][role='switch'] { - display: inline-flex; - height: 1.15rem; - width: calc(var(--spacing) * 8); - flex-shrink: 0; - appearance: none; - align-items: center; - border-radius: calc(infinity * 1px); - border-style: var(--tw-border-style); - border-width: 1px; - border-color: transparent; - --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - transition-property: all; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - --tw-outline-style: none; - outline-style: none; - &:focus-visible { - border-color: var(--color-ring); - } - &:focus-visible { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - &:focus-visible { - --tw-ring-color: var(--color-ring); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); - } - } - &:disabled { - cursor: not-allowed; - } - &:disabled { - opacity: 50%; - } - background-color: var(--color-input); - &:checked { - background-color: var(--color-primary); - } - &:is(.dark *) { - background-color: var(--color-input); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-input) 80%, transparent); - } - } - &:is(.dark *) { - &:checked { - background-color: var(--color-primary); - } - } - &::before { - content: var(--tw-content); - pointer-events: none; - } - &::before { - content: var(--tw-content); - display: block; - } - &::before { - content: var(--tw-content); - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - } - &::before { - content: var(--tw-content); - border-radius: calc(infinity * 1px); - } - &::before { - content: var(--tw-content); - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - &::before { - content: var(--tw-content); - transition-property: all; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - } - &::before { - content: var(--tw-content); - --tw-content: ''; - content: var(--tw-content); - } - &::before { - content: var(--tw-content); - background-color: var(--color-background); - } - &:is(.dark *) { - &::before { - content: var(--tw-content); - background-color: var(--color-foreground); - } - } - &:checked { - &::before { - content: var(--tw-content); - margin-inline-start: calc(var(--spacing) * 3.5); - } - } - &:is(.dark *) { - &:checked { - &::before { - content: var(--tw-content); - background-color: var(--color-primary-foreground); - } - } - } - } -} -@layer components { - .table { - width: 100%; - caption-side: bottom; - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - thead { - & tr { - border-bottom-style: var(--tw-border-style); - border-bottom-width: 1px; - } - } - tbody { - & tr:last-child { - border-style: var(--tw-border-style); - border-width: 0px; - } - } - tfoot { - border-top-style: var(--tw-border-style); - border-top-width: 1px; - background-color: var(--color-muted); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-muted) 50%, transparent); - } - --tw-font-weight: var(--font-weight-medium); - font-weight: var(--font-weight-medium); - &>tr { - &:last-child { - border-bottom-style: var(--tw-border-style); - border-bottom-width: 0px; - } - } - } - tr { - border-bottom-style: var(--tw-border-style); - border-bottom-width: 1px; - transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - &:hover { - @media (hover: hover) { - background-color: var(--color-muted); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-muted) 50%, transparent); - } - } - } - } - th { - height: calc(var(--spacing) * 10); - padding-inline: calc(var(--spacing) * 2); - text-align: left; - vertical-align: middle; - --tw-font-weight: var(--font-weight-medium); - font-weight: var(--font-weight-medium); - white-space: nowrap; - color: var(--color-foreground); - &:has([role=checkbox]) { - padding-right: calc(var(--spacing) * 0); - } - &>[role=checkbox] { - --tw-translate-y: 2px; - translate: var(--tw-translate-x) var(--tw-translate-y); - } - } - td { - padding: calc(var(--spacing) * 2); - vertical-align: middle; - white-space: nowrap; - &:has([role=checkbox]) { - padding-right: calc(var(--spacing) * 0); - } - &>[role=checkbox] { - --tw-translate-y: 2px; - translate: var(--tw-translate-x) var(--tw-translate-y); - } - } - caption { - margin-top: calc(var(--spacing) * 4); - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - color: var(--color-muted-foreground); - } - } -} -@layer components { - .tabs { - display: flex; - flex-direction: column; - gap: calc(var(--spacing) * 2); - [role='tablist'] { - display: inline-flex; - height: calc(var(--spacing) * 9); - width: fit-content; - align-items: center; - justify-content: center; - border-radius: var(--radius-lg); - background-color: var(--color-muted); - padding: 3px; - color: var(--color-muted-foreground); - [role='tab'] { - display: inline-flex; - height: calc(100% - 1px); - flex: 1; - align-items: center; - justify-content: center; - gap: calc(var(--spacing) * 1.5); - border-radius: var(--radius-md); - border-style: var(--tw-border-style); - border-width: 1px; - border-color: transparent; - padding-inline: calc(var(--spacing) * 2); - padding-block: calc(var(--spacing) * 1); - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - --tw-font-weight: var(--font-weight-medium); - font-weight: var(--font-weight-medium); - white-space: nowrap; - color: var(--color-foreground); - transition-property: color,box-shadow; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - &:focus-visible { - border-color: var(--color-ring); - } - &:focus-visible { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - &:focus-visible { - --tw-ring-color: var(--color-ring); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); - } - } - &:focus-visible { - outline-style: var(--tw-outline-style); - outline-width: 1px; - } - &:focus-visible { - outline-color: var(--color-ring); - } - &:disabled { - pointer-events: none; - } - &:disabled { - opacity: 50%; - } - &:is(.dark *) { - color: var(--color-muted-foreground); - } - & svg { - pointer-events: none; - } - & svg { - flex-shrink: 0; - } - & svg:not([class*='size-']) { - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - } - &[aria-selected='true'] { - background-color: var(--color-background); - --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - &:is(.dark *) { - border-color: var(--color-input); - } - &:is(.dark *) { - background-color: var(--color-input); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-input) 30%, transparent); - } - } - &:is(.dark *) { - color: var(--color-foreground); - } - } - } - } - [role='tabpanel'] { - flex: 1; - --tw-outline-style: none; - outline-style: none; - } - } -} -@layer components { - :is(.form, .field) textarea, .textarea { - display: flex; - field-sizing: content; - min-height: calc(var(--spacing) * 16); - width: 100%; - border-radius: var(--radius-md); - border-style: var(--tw-border-style); - border-width: 1px; - border-color: var(--color-input); - background-color: transparent; - padding-inline: calc(var(--spacing) * 3); - padding-block: calc(var(--spacing) * 2); - font-size: var(--text-base); - line-height: var(--tw-leading, var(--text-base--line-height)); - --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - transition-property: color,box-shadow; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - --tw-outline-style: none; - outline-style: none; - &::placeholder { - color: var(--color-muted-foreground); - } - &:focus-visible { - border-color: var(--color-ring); - } - &:focus-visible { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - &:focus-visible { - --tw-ring-color: var(--color-ring); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); - } - } - &:disabled { - cursor: not-allowed; - } - &:disabled { - opacity: 50%; - } - &[aria-invalid="true"] { - border-color: var(--color-destructive); - } - &[aria-invalid="true"] { - --tw-ring-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); - } - } - @media (width >= 48rem) { - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - } - &:is(.dark *) { - background-color: var(--color-input); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-input) 30%, transparent); - } - } - &:is(.dark *) { - &[aria-invalid="true"] { - --tw-ring-color: var(--color-destructive); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-destructive) 40%, transparent); - } - } - } - } -} -@layer components { - .toaster { - pointer-events: none; - position: fixed; - bottom: calc(var(--spacing) * 0); - z-index: 50; - display: flex; - width: 100%; - flex-direction: column-reverse; - padding: calc(var(--spacing) * 4); - @media (width >= 40rem) { - max-width: calc(var(--spacing) * 90); - } - &:not([data-align]), &[data-align='end'] { - right: calc(var(--spacing) * 0); - } - &[data-align='start'] { - left: calc(var(--spacing) * 0); - } - &[data-align='center'] { - left: calc(1/2 * 100%); - --tw-translate-x: calc(calc(1/2 * 100%) * -1); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - .toast { - pointer-events: auto; - margin-top: calc(var(--spacing) * 4); - display: grid; - width: 100%; - animation: toast-up 0.3s ease-in-out; - grid-template-rows: 1fr; - transition-property: grid-template-rows,opacity,margin; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - --tw-duration: 300ms; - transition-duration: 300ms; - --tw-ease: var(--ease-in-out); - transition-timing-function: var(--ease-in-out); - .toast-content { - display: flex; - align-items: center; - gap: calc(var(--spacing) * 2.5); - overflow: hidden; - border-radius: var(--radius-lg); - border-style: var(--tw-border-style); - border-width: 1px; - background-color: var(--color-popover); - padding: calc(var(--spacing) * 3); - font-size: 13px; - color: var(--color-popover-foreground); - --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - svg { - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - flex-shrink: 0; - } - section { - h2 { - --tw-font-weight: var(--font-weight-medium); - font-weight: var(--font-weight-medium); - --tw-tracking: var(--tracking-tight); - letter-spacing: var(--tracking-tight); - } - p { - word-break: break-all; - color: var(--color-muted-foreground); - } - } - footer { - margin-left: auto; - display: flex; - flex-direction: column; - gap: calc(var(--spacing) * 2); - [data-toast-action], [data-toast-cancel] { - height: calc(var(--spacing) * 6); - padding-inline: calc(var(--spacing) * 2.5); - font-size: var(--text-xs); - line-height: var(--tw-leading, var(--text-xs--line-height)); - } - } - } - &[aria-hidden='true'] { - margin: calc(var(--spacing) * 0); - grid-template-rows: 0fr; - overflow: hidden; - border-style: var(--tw-border-style); - border-width: 0px; - padding: calc(var(--spacing) * 0); - opacity: 0%; - .toast-content { - border-style: var(--tw-border-style); - border-width: 0px; - } - } - } - } -} -@keyframes toast-up { - from { - opacity: 0; - transform: translateY(100%); - } -} -@layer components { - [data-tooltip] { - position: relative; - &:before { - pointer-events: none; - visibility: hidden; - position: absolute; - z-index: 60; - width: fit-content; - max-width: var(--container-xs); - --tw-scale-x: 95%; - --tw-scale-y: 95%; - --tw-scale-z: 95%; - scale: var(--tw-scale-x) var(--tw-scale-y); - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - border-radius: var(--radius-md); - background-color: var(--color-primary); - padding-inline: calc(var(--spacing) * 3); - padding-block: calc(var(--spacing) * 1.5); - font-size: var(--text-xs); - line-height: var(--tw-leading, var(--text-xs--line-height)); - color: var(--color-primary-foreground); - opacity: 0%; - transition-property: all; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - --tw-content: attr(data-tooltip); - content: var(--tw-content); - } - &:hover:before { - visibility: visible; - --tw-scale-x: 100%; - --tw-scale-y: 100%; - --tw-scale-z: 100%; - scale: var(--tw-scale-x) var(--tw-scale-y); - opacity: 100%; - } - &:focus-visible:not(:hover):before { - display: none; - } - &:not([data-side]), &[data-side='top'] { - &::before { - content: var(--tw-content); - bottom: 100%; - } - &::before { - content: var(--tw-content); - margin-bottom: calc(var(--spacing) * 1.5); - } - &::before { - content: var(--tw-content); - --tw-translate-y: calc(var(--spacing) * 2); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - &:hover { - @media (hover: hover) { - &::before { - content: var(--tw-content); - --tw-translate-y: calc(var(--spacing) * 0); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - } - } - } - &[data-side='bottom'] { - &::before { - content: var(--tw-content); - top: 100%; - } - &::before { - content: var(--tw-content); - margin-top: calc(var(--spacing) * 1.5); - } - &::before { - content: var(--tw-content); - --tw-translate-y: calc(var(--spacing) * -2); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - &:hover { - @media (hover: hover) { - &::before { - content: var(--tw-content); - --tw-translate-y: calc(var(--spacing) * 0); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - } - } - } - &:not([data-side]), &[data-side='top'], &[data-side='bottom'] { - &[data-align='start'] { - &::before { - content: var(--tw-content); - left: calc(var(--spacing) * 0); - } - } - &[data-align='end'] { - &::before { - content: var(--tw-content); - right: calc(var(--spacing) * 0); - } - } - &:not([data-align]), &[data-align='center'] { - &::before { - content: var(--tw-content); - left: calc(1/2 * 100%); - } - &::before { - content: var(--tw-content); - --tw-translate-x: calc(calc(1/2 * 100%) * -1); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - } - } - &[data-side='left'] { - &::before { - content: var(--tw-content); - right: 100%; - } - &::before { - content: var(--tw-content); - margin-right: calc(var(--spacing) * 1.5); - } - &::before { - content: var(--tw-content); - --tw-translate-x: calc(var(--spacing) * 2); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - &:hover { - @media (hover: hover) { - &::before { - content: var(--tw-content); - --tw-translate-x: calc(var(--spacing) * 0); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - } - } - } - &[data-side='right'] { - &::before { - content: var(--tw-content); - left: 100%; - } - &::before { - content: var(--tw-content); - margin-left: calc(var(--spacing) * 1.5); - } - &::before { - content: var(--tw-content); - --tw-translate-x: calc(var(--spacing) * -2); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - &:hover { - @media (hover: hover) { - &::before { - content: var(--tw-content); - --tw-translate-x: calc(var(--spacing) * 0); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - } - } - } - &[data-side='left'], &[data-side='right'] { - &[data-align='start'] { - &::before { - content: var(--tw-content); - top: calc(var(--spacing) * 0); - } - } - &[data-align='end'] { - &::before { - content: var(--tw-content); - bottom: calc(var(--spacing) * 0); - } - } - &:not([data-align]), &[data-align='center'] { - &::before { - content: var(--tw-content); - top: calc(1/2 * 100%); - } - &::before { - content: var(--tw-content); - --tw-translate-y: calc(calc(1/2 * 100%) * -1); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - } - } - } -} -.htmx-indicator { - visibility: hidden; - opacity: 0%; - transition-property: all; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - transition-behavior: allow-discrete; -} -.htmx-indicator:not(.htmx-request) { - display: none; -} -.htmx-request, .htmx-request.htmx-indicator { - visibility: visible; - opacity: 100%; -} -.content { - > h2 { - margin-top: calc(var(--spacing) * 12); - margin-bottom: calc(var(--spacing) * 6); - scroll-margin: calc(var(--spacing) * 22); - font-size: var(--text-2xl); - line-height: var(--tw-leading, var(--text-2xl--line-height)); - --tw-font-weight: var(--font-weight-semibold); - font-weight: var(--font-weight-semibold); - --tw-tracking: var(--tracking-tight); - letter-spacing: var(--tracking-tight); - &:first-child { - margin-top: calc(var(--spacing) * 0); - } - @media (width >= 64rem) { - margin-top: calc(var(--spacing) * 20); - } - } - > h3 { - margin-top: calc(var(--spacing) * 8); - margin-bottom: calc(var(--spacing) * 6); - scroll-margin: calc(var(--spacing) * 22); - font-size: var(--text-xl); - line-height: var(--tw-leading, var(--text-xl--line-height)); - --tw-font-weight: var(--font-weight-semibold); - font-weight: var(--font-weight-semibold); - --tw-tracking: var(--tracking-tight); - letter-spacing: var(--tracking-tight); - } - > h4 { - margin-block: calc(var(--spacing) * 6); - scroll-margin: calc(var(--spacing) * 22); - --tw-font-weight: var(--font-weight-semibold); - font-weight: var(--font-weight-semibold); - --tw-tracking: var(--tracking-tight); - letter-spacing: var(--tracking-tight); - } - .prose { - margin-block: calc(var(--spacing) * 6); - a { - --tw-font-weight: var(--font-weight-medium); - font-weight: var(--font-weight-medium); - text-decoration-line: underline; - text-underline-offset: 4px; - } - code:not(pre > code) { - position: relative; - border-radius: var(--radius-md); - background-color: var(--color-muted); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-muted) 50%, transparent); - } - padding-inline: 0.3rem; - padding-block: 0.2rem; - font-family: var(--font-mono); - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - } - blockquote { - border-left-style: var(--tw-border-style); - border-left-width: 4px; - border-color: var(--color-border); - padding-left: calc(var(--spacing) * 4); - } - ol { - margin-left: calc(var(--spacing) * 6); - list-style-type: decimal; - } - ul { - margin-left: calc(var(--spacing) * 6); - list-style-type: disc; - } - ol, ul { - li { - margin-top: calc(var(--spacing) * 2); - } - } - dl { - margin-block: calc(var(--spacing) * 6); - border-bottom-style: var(--tw-border-style); - border-bottom-width: 1px; - padding-bottom: calc(var(--spacing) * 3); - dt { - margin-top: calc(var(--spacing) * 3); - border-top-style: var(--tw-border-style); - border-top-width: 1px; - padding-top: calc(var(--spacing) * 3); - &:first-child { - margin-top: calc(var(--spacing) * 0); - } - } - dd { - margin-top: calc(var(--spacing) * 2); - } - dl { - margin-block: calc(var(--spacing) * 0); - margin-top: calc(var(--spacing) * 4); - border-bottom-style: var(--tw-border-style); - border-bottom-width: 0px; - padding-bottom: calc(var(--spacing) * 0); - padding-left: calc(var(--spacing) * 8); - } - } - b, strong { - --tw-font-weight: var(--font-weight-semibold); - font-weight: var(--font-weight-semibold); - } - > p, > blockquote, > ul, > ol, > dl, > table, > pre, > p { - margin-block: calc(var(--spacing) * 6); - } - > *:first-child { - margin-top: calc(var(--spacing) * 0) !important; - } - > *:last-child { - margin-bottom: calc(var(--spacing) * 0) !important; - } - } - .step { - counter-increment: step; - &:before { - position: absolute; - margin-right: calc(var(--spacing) * 2); - display: inline-flex; - height: calc(var(--spacing) * 8); - width: calc(var(--spacing) * 8); - align-items: center; - justify-content: center; - border-radius: calc(infinity * 1px); - border-style: var(--tw-border-style); - border-width: 4px; - border-color: var(--color-background); - background-color: var(--color-muted); - text-align: center; - text-indent: -1px; - font-family: var(--font-mono); - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - --tw-font-weight: var(--font-weight-semibold); - font-weight: var(--font-weight-semibold); - @media (width >= 48rem) { - height: calc(var(--spacing) * 9); - } - @media (width >= 48rem) { - width: calc(var(--spacing) * 9); - } - @media (width >= 48rem) { - margin-top: -4px; - } - @media (width >= 48rem) { - margin-left: -50px; - } - content: counter(step); - } - > h3 { - display: flex; - min-height: calc(var(--spacing) * 8); - align-items: center; - @media (width < 48rem) { - margin-left: calc(var(--spacing) * 10); - } - } - } -} -:root { - --hljs-bg: #fff; - --hljs-color: #24292e; - --hljs-keyword: #d73a49; - --hljs-title: #6f42c1; - --hljs-literal: #005cc5; - --hljs-string: #032f62; - --hljs-symbol: #e36209; - --hljs-comment: #6a737d; - --hljs-tag: #22863a; - --hljs-section: #005cc5; - --hljs-bullet: #735c0f; - --hljs-addition-color: #22863a; - --hljs-addition-bg: #f0fff4; - --hljs-deletion-color: #b31d28; - --hljs-deletion-bg: #ffeef0; -} -html.dark { - --hljs-bg: #0d1117; - --hljs-color: #c9d1d9; - --hljs-keyword: #ff7b72; - --hljs-title: #d2a8ff; - --hljs-literal: #79c0ff; - --hljs-string: #a5d6ff; - --hljs-symbol: #ffa657; - --hljs-comment: #8b949e; - --hljs-tag: #7ee787; - --hljs-section: #1f6feb; - --hljs-bullet: #f2cc60; - --hljs-addition-color: #aff5b4; - --hljs-addition-bg: #033a16; - --hljs-deletion-color: #ffdcd7; - --hljs-deletion-bg: #67060c; -} -pre code.hljs { - display: block; - overflow-x: auto; - padding: 1em; -} -code.hljs { - padding: 3px 5px; -} -.hljs { - color: var(--hljs-color); - background: var(--hljs-bg); -} -.hljs-doctag, .hljs-keyword, .hljs-meta .hljs-keyword, .hljs-template-tag, .hljs-template-variable, .hljs-type, .hljs-variable.language_ { - color: var(--hljs-keyword); -} -.hljs-title, .hljs-title.class_, .hljs-title.class_.inherited__, .hljs-title.function_ { - color: var(--hljs-title); -} -.hljs-attr, .hljs-attribute, .hljs-literal, .hljs-meta, .hljs-number, .hljs-operator, .hljs-selector-attr, .hljs-selector-class, .hljs-selector-id, .hljs-variable { - color: var(--hljs-literal); -} -.hljs-meta .hljs-string, .hljs-regexp, .hljs-string { - color: var(--hljs-string); -} -.hljs-built_in, .hljs-symbol { - color: var(--hljs-symbol); -} -.hljs-code, .hljs-comment, .hljs-formula { - color: var(--hljs-comment); -} -.hljs-name, .hljs-quote, .hljs-selector-pseudo, .hljs-selector-tag { - color: var(--hljs-tag); -} -.hljs-subst { - color: var(--hljs-color); -} -.hljs-section { - color: var(--hljs-section); - font-weight: 700; -} -.hljs-bullet { - color: var(--hljs-bullet); -} -.hljs-emphasis { - font-style: italic; -} -.hljs-strong { - font-weight: 700; -} -.hljs-addition { - color: var(--hljs-addition-color); - background-color: var(--hljs-addition-bg); -} -.hljs-deletion { - color: var(--hljs-deletion-color); - background-color: var(--hljs-deletion-bg); -} -.theme-claude { - &:root { - --background: oklch(0.98 0.01 95.10); - --foreground: oklch(0.34 0.03 95.72); - --card: oklch(0.98 0.01 95.10); - --card-foreground: oklch(0.19 0.00 106.59); - --popover: oklch(1.00 0 0); - --popover-foreground: oklch(0.27 0.02 98.94); - --primary: oklch(0.62 0.14 39.04); - --primary-foreground: oklch(1.00 0 0); - --secondary: oklch(0.92 0.01 92.99); - --secondary-foreground: oklch(0.43 0.02 98.60); - --muted: oklch(0.93 0.02 90.24); - --muted-foreground: oklch(0.61 0.01 97.42); - --accent: oklch(0.92 0.01 92.99); - --accent-foreground: oklch(0.27 0.02 98.94); - --destructive: oklch(0.19 0.00 106.59); - --destructive-foreground: oklch(1.00 0 0); - --border: oklch(0.88 0.01 97.36); - --input: oklch(0.76 0.02 98.35); - --ring: oklch(0.59 0.17 253.06); - --chart-1: oklch(0.56 0.13 43.00); - --chart-2: oklch(0.69 0.16 290.41); - --chart-3: oklch(0.88 0.03 93.13); - --chart-4: oklch(0.88 0.04 298.18); - --chart-5: oklch(0.56 0.13 42.06); - --sidebar: oklch(0.97 0.01 98.88); - --sidebar-foreground: oklch(0.36 0.01 106.65); - --sidebar-primary: oklch(0.62 0.14 39.04); - --sidebar-primary-foreground: oklch(0.99 0 0); - --sidebar-accent: oklch(0.92 0.01 92.99); - --sidebar-accent-foreground: oklch(0.33 0 0); - --sidebar-border: oklch(0.94 0 0); - --sidebar-ring: oklch(0.77 0 0); - --font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; - --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; - --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - --radius: 0.5rem; - --shadow-2xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05); - --shadow-xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05); - --shadow-sm: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 1px 2px -1px hsl(0 0% 0% / 0.10); - --shadow: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 1px 2px -1px hsl(0 0% 0% / 0.10); - --shadow-md: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 2px 4px -1px hsl(0 0% 0% / 0.10); - --shadow-lg: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 4px 6px -1px hsl(0 0% 0% / 0.10); - --shadow-xl: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 8px 10px -1px hsl(0 0% 0% / 0.10); - --shadow-2xl: 0 1px 3px 0px hsl(0 0% 0% / 0.25); - } - &.dark { - --background: oklch(0.27 0.00 106.64); - --foreground: oklch(0.81 0.01 93.01); - --card: oklch(0.27 0.00 106.64); - --card-foreground: oklch(0.98 0.01 95.10); - --popover: oklch(0.31 0.00 106.60); - --popover-foreground: oklch(0.92 0.00 106.48); - --primary: oklch(0.67 0.13 38.76); - --primary-foreground: oklch(1.00 0 0); - --secondary: oklch(0.98 0.01 95.10); - --secondary-foreground: oklch(0.31 0.00 106.60); - --muted: oklch(0.22 0.00 106.71); - --muted-foreground: oklch(0.77 0.02 99.07); - --accent: oklch(0.21 0.01 95.42); - --accent-foreground: oklch(0.97 0.01 98.88); - --destructive: oklch(0.64 0.21 25.33); - --destructive-foreground: oklch(1.00 0 0); - --border: oklch(0.36 0.01 106.89); - --input: oklch(0.43 0.01 100.22); - --ring: oklch(0.59 0.17 253.06); - --chart-1: oklch(0.56 0.13 43.00); - --chart-2: oklch(0.69 0.16 290.41); - --chart-3: oklch(0.21 0.01 95.42); - --chart-4: oklch(0.31 0.05 289.32); - --chart-5: oklch(0.56 0.13 42.06); - --sidebar: oklch(0.24 0.00 67.71); - --sidebar-foreground: oklch(0.81 0.01 93.01); - --sidebar-primary: oklch(0.33 0 0); - --sidebar-primary-foreground: oklch(0.99 0 0); - --sidebar-accent: oklch(0.17 0.00 106.62); - --sidebar-accent-foreground: oklch(0.81 0.01 93.01); - --sidebar-border: oklch(0.94 0 0); - --sidebar-ring: oklch(0.77 0 0); - --font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; - --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; - --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - --radius: 0.5rem; - --shadow-2xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05); - --shadow-xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05); - --shadow-sm: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 1px 2px -1px hsl(0 0% 0% / 0.10); - --shadow: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 1px 2px -1px hsl(0 0% 0% / 0.10); - --shadow-md: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 2px 4px -1px hsl(0 0% 0% / 0.10); - --shadow-lg: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 4px 6px -1px hsl(0 0% 0% / 0.10); - --shadow-xl: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 8px 10px -1px hsl(0 0% 0% / 0.10); - --shadow-2xl: 0 1px 3px 0px hsl(0 0% 0% / 0.25); - } -} -.theme-doom-64 { - &:root { - --background: oklch(0.85 0 0); - --foreground: oklch(0.24 0 0); - --card: oklch(0.76 0 0); - --card-foreground: oklch(0.24 0 0); - --popover: oklch(0.76 0 0); - --popover-foreground: oklch(0.24 0 0); - --primary: oklch(0.50 0.19 27.48); - --primary-foreground: oklch(1.00 0 0); - --secondary: oklch(0.50 0.09 126.19); - --secondary-foreground: oklch(1.00 0 0); - --muted: oklch(0.78 0 0); - --muted-foreground: oklch(0.41 0 0); - --accent: oklch(0.59 0.10 245.74); - --accent-foreground: oklch(1.00 0 0); - --destructive: oklch(0.71 0.20 46.46); - --destructive-foreground: oklch(0 0 0); - --border: oklch(0.43 0 0); - --input: oklch(0.43 0 0); - --ring: oklch(0.50 0.19 27.48); - --chart-1: oklch(0.50 0.19 27.48); - --chart-2: oklch(0.50 0.09 126.19); - --chart-3: oklch(0.59 0.10 245.74); - --chart-4: oklch(0.71 0.20 46.46); - --chart-5: oklch(0.57 0.04 40.43); - --sidebar: oklch(0.76 0 0); - --sidebar-foreground: oklch(0.24 0 0); - --sidebar-primary: oklch(0.50 0.19 27.48); - --sidebar-primary-foreground: oklch(1.00 0 0); - --sidebar-accent: oklch(0.59 0.10 245.74); - --sidebar-accent-foreground: oklch(1.00 0 0); - --sidebar-border: oklch(0.43 0 0); - --sidebar-ring: oklch(0.50 0.19 27.48); - --font-sans: "Oxanium", sans-serif; - --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; - --font-mono: "Source Code Pro", monospace; - --radius: 0px; - --shadow-2xs: 0px 2px 4px 0px hsl(0 0% 0% / 0.20); - --shadow-xs: 0px 2px 4px 0px hsl(0 0% 0% / 0.20); - --shadow-sm: 0px 2px 4px 0px hsl(0 0% 0% / 0.40), 0px 1px 2px -1px hsl(0 0% 0% / 0.40); - --shadow: 0px 2px 4px 0px hsl(0 0% 0% / 0.40), 0px 1px 2px -1px hsl(0 0% 0% / 0.40); - --shadow-md: 0px 2px 4px 0px hsl(0 0% 0% / 0.40), 0px 2px 4px -1px hsl(0 0% 0% / 0.40); - --shadow-lg: 0px 2px 4px 0px hsl(0 0% 0% / 0.40), 0px 4px 6px -1px hsl(0 0% 0% / 0.40); - --shadow-xl: 0px 2px 4px 0px hsl(0 0% 0% / 0.40), 0px 8px 10px -1px hsl(0 0% 0% / 0.40); - --shadow-2xl: 0px 2px 4px 0px hsl(0 0% 0% / 1.00); - } - &.dark { - --background: oklch(0.22 0 0); - --foreground: oklch(0.91 0 0); - --card: oklch(0.29 0 0); - --card-foreground: oklch(0.91 0 0); - --popover: oklch(0.29 0 0); - --popover-foreground: oklch(0.91 0 0); - --primary: oklch(0.61 0.21 27.03); - --primary-foreground: oklch(1.00 0 0); - --secondary: oklch(0.64 0.15 133.01); - --secondary-foreground: oklch(0 0 0); - --muted: oklch(0.26 0 0); - --muted-foreground: oklch(0.71 0 0); - --accent: oklch(0.75 0.12 244.75); - --accent-foreground: oklch(0 0 0); - --destructive: oklch(0.78 0.17 68.09); - --destructive-foreground: oklch(0 0 0); - --border: oklch(0.41 0 0); - --input: oklch(0.41 0 0); - --ring: oklch(0.61 0.21 27.03); - --chart-1: oklch(0.61 0.21 27.03); - --chart-2: oklch(0.64 0.15 133.01); - --chart-3: oklch(0.75 0.12 244.75); - --chart-4: oklch(0.78 0.17 68.09); - --chart-5: oklch(0.65 0.03 40.80); - --sidebar: oklch(0.19 0 0); - --sidebar-foreground: oklch(0.91 0 0); - --sidebar-primary: oklch(0.61 0.21 27.03); - --sidebar-primary-foreground: oklch(1.00 0 0); - --sidebar-accent: oklch(0.75 0.12 244.75); - --sidebar-accent-foreground: oklch(0 0 0); - --sidebar-border: oklch(0.41 0 0); - --sidebar-ring: oklch(0.61 0.21 27.03); - --font-sans: "Oxanium", sans-serif; - --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; - --font-mono: "Source Code Pro", monospace; - --radius: 0px; - --shadow-2xs: 0px 2px 5px 0px hsl(0 0% 0% / 0.30); - --shadow-xs: 0px 2px 5px 0px hsl(0 0% 0% / 0.30); - --shadow-sm: 0px 2px 5px 0px hsl(0 0% 0% / 0.60), 0px 1px 2px -1px hsl(0 0% 0% / 0.60); - --shadow: 0px 2px 5px 0px hsl(0 0% 0% / 0.60), 0px 1px 2px -1px hsl(0 0% 0% / 0.60); - --shadow-md: 0px 2px 5px 0px hsl(0 0% 0% / 0.60), 0px 2px 4px -1px hsl(0 0% 0% / 0.60); - --shadow-lg: 0px 2px 5px 0px hsl(0 0% 0% / 0.60), 0px 4px 6px -1px hsl(0 0% 0% / 0.60); - --shadow-xl: 0px 2px 5px 0px hsl(0 0% 0% / 0.60), 0px 8px 10px -1px hsl(0 0% 0% / 0.60); - --shadow-2xl: 0px 2px 5px 0px hsl(0 0% 0% / 1.50); - } -} -.theme-supabase { - &:root { - --background: oklch(0.99 0 0); - --foreground: oklch(0.20 0 0); - --card: oklch(0.99 0 0); - --card-foreground: oklch(0.20 0 0); - --popover: oklch(0.99 0 0); - --popover-foreground: oklch(0.44 0 0); - --primary: oklch(0.83 0.13 160.91); - --primary-foreground: oklch(0.26 0.01 166.46); - --secondary: oklch(0.99 0 0); - --secondary-foreground: oklch(0.20 0 0); - --muted: oklch(0.95 0 0); - --muted-foreground: oklch(0.24 0 0); - --accent: oklch(0.95 0 0); - --accent-foreground: oklch(0.24 0 0); - --destructive: oklch(0.55 0.19 32.73); - --destructive-foreground: oklch(0.99 0.00 17.21); - --border: oklch(0.90 0 0); - --input: oklch(0.90 0 0); - --ring: oklch(0.83 0.13 160.91); - --chart-1: oklch(0.83 0.13 160.91); - --chart-2: oklch(0.62 0.19 259.81); - --chart-3: oklch(0.61 0.22 292.72); - --chart-4: oklch(0.77 0.16 70.08); - --chart-5: oklch(0.70 0.15 162.48); - --sidebar: oklch(0.99 0 0); - --sidebar-foreground: oklch(0.55 0 0); - --sidebar-primary: oklch(0.83 0.13 160.91); - --sidebar-primary-foreground: oklch(0.26 0.01 166.46); - --sidebar-accent: oklch(0.95 0 0); - --sidebar-accent-foreground: oklch(0.24 0 0); - --sidebar-border: oklch(0.90 0 0); - --sidebar-ring: oklch(0.83 0.13 160.91); - --font-sans: Outfit, sans-serif; - --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; - --font-mono: monospace; - --radius: 0.5rem; - --shadow-2xs: 0px 1px 3px 0px hsl(0 0% 0% / 0.09); - --shadow-xs: 0px 1px 3px 0px hsl(0 0% 0% / 0.09); - --shadow-sm: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 1px 2px -1px hsl(0 0% 0% / 0.17); - --shadow: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 1px 2px -1px hsl(0 0% 0% / 0.17); - --shadow-md: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 2px 4px -1px hsl(0 0% 0% / 0.17); - --shadow-lg: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 4px 6px -1px hsl(0 0% 0% / 0.17); - --shadow-xl: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 8px 10px -1px hsl(0 0% 0% / 0.17); - --shadow-2xl: 0px 1px 3px 0px hsl(0 0% 0% / 0.43); - --tracking-normal: 0.025em; - } - &.dark { - --background: oklch(0.18 0 0); - --foreground: oklch(0.93 0.01 255.51); - --card: oklch(0.20 0 0); - --card-foreground: oklch(0.93 0.01 255.51); - --popover: oklch(0.26 0 0); - --popover-foreground: oklch(0.73 0 0); - --primary: oklch(0.44 0.10 156.76); - --primary-foreground: oklch(0.92 0.01 167.16); - --secondary: oklch(0.26 0 0); - --secondary-foreground: oklch(0.99 0 0); - --muted: oklch(0.24 0 0); - --muted-foreground: oklch(0.71 0 0); - --accent: oklch(0.31 0 0); - --accent-foreground: oklch(0.99 0 0); - --destructive: oklch(0.31 0.09 29.79); - --destructive-foreground: oklch(0.94 0.00 34.31); - --border: oklch(0.28 0 0); - --input: oklch(0.28 0 0); - --ring: oklch(0.80 0.18 151.71); - --chart-1: oklch(0.80 0.18 151.71); - --chart-2: oklch(0.71 0.14 254.62); - --chart-3: oklch(0.71 0.16 293.54); - --chart-4: oklch(0.84 0.16 84.43); - --chart-5: oklch(0.78 0.13 181.91); - --sidebar: oklch(0.18 0 0); - --sidebar-foreground: oklch(0.63 0 0); - --sidebar-primary: oklch(0.44 0.10 156.76); - --sidebar-primary-foreground: oklch(0.92 0.01 167.16); - --sidebar-accent: oklch(0.31 0 0); - --sidebar-accent-foreground: oklch(0.99 0 0); - --sidebar-border: oklch(0.28 0 0); - --sidebar-ring: oklch(0.80 0.18 151.71); - --font-sans: Outfit, sans-serif; - --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; - --font-mono: monospace; - --radius: 0.5rem; - --shadow-2xs: 0px 1px 3px 0px hsl(0 0% 0% / 0.09); - --shadow-xs: 0px 1px 3px 0px hsl(0 0% 0% / 0.09); - --shadow-sm: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 1px 2px -1px hsl(0 0% 0% / 0.17); - --shadow: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 1px 2px -1px hsl(0 0% 0% / 0.17); - --shadow-md: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 2px 4px -1px hsl(0 0% 0% / 0.17); - --shadow-lg: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 4px 6px -1px hsl(0 0% 0% / 0.17); - --shadow-xl: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 8px 10px -1px hsl(0 0% 0% / 0.17); - --shadow-2xl: 0px 1px 3px 0px hsl(0 0% 0% / 0.43); - } - body { - letter-spacing: var(--tracking-normal); - } -} -@property --tw-translate-x { - syntax: "*"; - inherits: false; - initial-value: 0; -} -@property --tw-translate-y { - syntax: "*"; - inherits: false; - initial-value: 0; -} -@property --tw-translate-z { - syntax: "*"; - inherits: false; - initial-value: 0; -} -@property --tw-rotate-x { - syntax: "*"; - inherits: false; -} -@property --tw-rotate-y { - syntax: "*"; - inherits: false; -} -@property --tw-rotate-z { - syntax: "*"; - inherits: false; -} -@property --tw-skew-x { - syntax: "*"; - inherits: false; -} -@property --tw-skew-y { - syntax: "*"; - inherits: false; -} -@property --tw-space-y-reverse { - syntax: "*"; - inherits: false; - initial-value: 0; -} -@property --tw-space-x-reverse { - syntax: "*"; - inherits: false; - initial-value: 0; -} -@property --tw-border-style { - syntax: "*"; - inherits: false; - initial-value: solid; -} -@property --tw-leading { - syntax: "*"; - inherits: false; -} -@property --tw-font-weight { - syntax: "*"; - inherits: false; -} -@property --tw-tracking { - syntax: "*"; - inherits: false; -} -@property --tw-ordinal { - syntax: "*"; - inherits: false; -} -@property --tw-slashed-zero { - syntax: "*"; - inherits: false; -} -@property --tw-numeric-figure { - syntax: "*"; - inherits: false; -} -@property --tw-numeric-spacing { - syntax: "*"; - inherits: false; -} -@property --tw-numeric-fraction { - syntax: "*"; - inherits: false; -} -@property --tw-shadow { - syntax: "*"; - inherits: false; - initial-value: 0 0 #0000; -} -@property --tw-shadow-color { - syntax: "*"; - inherits: false; -} -@property --tw-shadow-alpha { - syntax: ""; - inherits: false; - initial-value: 100%; -} -@property --tw-inset-shadow { - syntax: "*"; - inherits: false; - initial-value: 0 0 #0000; -} -@property --tw-inset-shadow-color { - syntax: "*"; - inherits: false; -} -@property --tw-inset-shadow-alpha { - syntax: ""; - inherits: false; - initial-value: 100%; -} -@property --tw-ring-color { - syntax: "*"; - inherits: false; -} -@property --tw-ring-shadow { - syntax: "*"; - inherits: false; - initial-value: 0 0 #0000; -} -@property --tw-inset-ring-color { - syntax: "*"; - inherits: false; -} -@property --tw-inset-ring-shadow { - syntax: "*"; - inherits: false; - initial-value: 0 0 #0000; -} -@property --tw-ring-inset { - syntax: "*"; - inherits: false; -} -@property --tw-ring-offset-width { - syntax: ""; - inherits: false; - initial-value: 0px; -} -@property --tw-ring-offset-color { - syntax: "*"; - inherits: false; - initial-value: #fff; -} -@property --tw-ring-offset-shadow { - syntax: "*"; - inherits: false; - initial-value: 0 0 #0000; -} -@property --tw-outline-style { - syntax: "*"; - inherits: false; - initial-value: solid; -} -@property --tw-blur { - syntax: "*"; - inherits: false; -} -@property --tw-brightness { - syntax: "*"; - inherits: false; -} -@property --tw-contrast { - syntax: "*"; - inherits: false; -} -@property --tw-grayscale { - syntax: "*"; - inherits: false; -} -@property --tw-hue-rotate { - syntax: "*"; - inherits: false; -} -@property --tw-invert { - syntax: "*"; - inherits: false; -} -@property --tw-opacity { - syntax: "*"; - inherits: false; -} -@property --tw-saturate { - syntax: "*"; - inherits: false; -} -@property --tw-sepia { - syntax: "*"; - inherits: false; -} -@property --tw-drop-shadow { - syntax: "*"; - inherits: false; -} -@property --tw-drop-shadow-color { - syntax: "*"; - inherits: false; -} -@property --tw-drop-shadow-alpha { - syntax: ""; - inherits: false; - initial-value: 100%; -} -@property --tw-drop-shadow-size { - syntax: "*"; - inherits: false; -} -@property --tw-duration { - syntax: "*"; - inherits: false; -} -@property --tw-content { - syntax: "*"; - initial-value: ""; - inherits: false; -} -@property --tw-ease { - syntax: "*"; - inherits: false; -} -@property --tw-scale-x { - syntax: "*"; - inherits: false; - initial-value: 1; -} -@property --tw-scale-y { - syntax: "*"; - inherits: false; - initial-value: 1; -} -@property --tw-scale-z { - syntax: "*"; - inherits: false; - initial-value: 1; -} -@keyframes spin { - to { - transform: rotate(360deg); - } -} -@keyframes pulse { - 50% { - opacity: 0.5; - } -} -@layer properties { - @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) { - *, ::before, ::after, ::backdrop { - --tw-translate-x: 0; - --tw-translate-y: 0; - --tw-translate-z: 0; - --tw-rotate-x: initial; - --tw-rotate-y: initial; - --tw-rotate-z: initial; - --tw-skew-x: initial; - --tw-skew-y: initial; - --tw-space-y-reverse: 0; - --tw-space-x-reverse: 0; - --tw-border-style: solid; - --tw-leading: initial; - --tw-font-weight: initial; - --tw-tracking: initial; - --tw-ordinal: initial; - --tw-slashed-zero: initial; - --tw-numeric-figure: initial; - --tw-numeric-spacing: initial; - --tw-numeric-fraction: initial; - --tw-shadow: 0 0 #0000; - --tw-shadow-color: initial; - --tw-shadow-alpha: 100%; - --tw-inset-shadow: 0 0 #0000; - --tw-inset-shadow-color: initial; - --tw-inset-shadow-alpha: 100%; - --tw-ring-color: initial; - --tw-ring-shadow: 0 0 #0000; - --tw-inset-ring-color: initial; - --tw-inset-ring-shadow: 0 0 #0000; - --tw-ring-inset: initial; - --tw-ring-offset-width: 0px; - --tw-ring-offset-color: #fff; - --tw-ring-offset-shadow: 0 0 #0000; - --tw-outline-style: solid; - --tw-blur: initial; - --tw-brightness: initial; - --tw-contrast: initial; - --tw-grayscale: initial; - --tw-hue-rotate: initial; - --tw-invert: initial; - --tw-opacity: initial; - --tw-saturate: initial; - --tw-sepia: initial; - --tw-drop-shadow: initial; - --tw-drop-shadow-color: initial; - --tw-drop-shadow-alpha: 100%; - --tw-drop-shadow-size: initial; - --tw-duration: initial; - --tw-content: ""; - --tw-ease: initial; - --tw-scale-x: 1; - --tw-scale-y: 1; - --tw-scale-z: 1; - } - } -} +@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-content:"";--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-500:oklch(63.7% .237 25.331);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-yellow-500:oklch(79.5% .184 86.047);--color-green-50:oklch(98.2% .018 155.826);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-900:oklch(39.3% .095 152.535);--color-green-950:oklch(26.6% .065 152.934);--color-blue-50:oklch(97% .014 254.604);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-blue-950:oklch(28.2% .091 267.935);--color-purple-500:oklch(62.7% .265 303.9);--color-neutral-300:oklch(87% 0 0);--color-neutral-800:oklch(26.9% 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-md:48rem;--breakpoint-lg:64rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25/1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-normal:0em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-normal:1.5;--leading-relaxed:1.625;--radius-xs:.125rem;--radius-sm:calc(var(--radius) - 4px);--radius-md:calc(var(--radius) - 2px);--radius-lg:var(--radius);--radius-xl:calc(var(--radius) + 4px);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-background:var(--background);--color-foreground:var(--foreground);--color-card:var(--card);--color-card-foreground:var(--card-foreground);--color-popover:var(--popover);--color-popover-foreground:var(--popover-foreground);--color-primary:var(--primary);--color-primary-foreground:var(--primary-foreground);--color-secondary:var(--secondary);--color-secondary-foreground:var(--secondary-foreground);--color-muted:var(--muted);--color-muted-foreground:var(--muted-foreground);--color-accent:var(--accent);--color-accent-foreground:var(--accent-foreground);--color-destructive:var(--destructive);--color-border:var(--border);--color-input:var(--input);--color-ring:var(--ring);--color-sidebar:var(--sidebar);--color-sidebar-foreground:var(--sidebar-foreground);--color-sidebar-primary:var(--sidebar-primary);--color-sidebar-primary-foreground:var(--sidebar-primary-foreground);--color-sidebar-accent:var(--sidebar-accent);--color-sidebar-accent-foreground:var(--sidebar-accent-foreground);--color-sidebar-border:var(--sidebar-border);--color-sidebar-ring:var(--sidebar-ring)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--color-border);outline-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){*{outline-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}html{scroll-behavior:smooth}body{overscroll-behavior:none;background-color:var(--color-background);color:var(--color-foreground);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.scrollbar{scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb)var(--scrollbar-track)}.scrollbar::-webkit-scrollbar{width:var(--scrollbar-width)}.scrollbar::-webkit-scrollbar-track{background:var(--scrollbar-track)}.scrollbar::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:var(--scrollbar-radius)}}@layer components{.alert,.alert-destructive{align-items:flex-start;row-gap:calc(var(--spacing)*.5);border-radius:var(--radius-lg);border-style:var(--tw-border-style);width:100%;padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));border-width:1px;grid-template-columns:0 1fr;display:grid;position:relative}:is(.alert,.alert-destructive):has(>svg){grid-template-columns:calc(var(--spacing)*4)1fr;column-gap:calc(var(--spacing)*3)}:is(.alert,.alert-destructive)>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);--tw-translate-y:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y);color:currentColor}:is(.alert,.alert-destructive) h2{-webkit-line-clamp:1;min-height:calc(var(--spacing)*4);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);-webkit-box-orient:vertical;grid-column-start:2;display:-webkit-box;overflow:hidden}:is(.alert,.alert-destructive) section{justify-items:start;gap:calc(var(--spacing)*1);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-muted-foreground);grid-column-start:2;display:grid}:is(.alert,.alert-destructive) section p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}:is(.alert,.alert-destructive) section ul{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));list-style-type:disc;list-style-position:inside}.alert{background-color:var(--color-card);color:var(--color-card-foreground)}.alert-destructive{background-color:var(--color-card);color:var(--color-destructive)}.alert-destructive>svg{color:currentColor}.alert-destructive section{color:var(--color-destructive)}.badge,.badge-primary,.badge-secondary,.badge-destructive,.badge-outline{justify-content:center;align-items:center;gap:calc(var(--spacing)*1);border-style:var(--tw-border-style);width:fit-content;padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));border-width:1px;border-radius:3.40282e38px;flex-shrink:0;display:inline-flex;overflow:hidden}:is(.badge,.badge-primary,.badge-secondary,.badge-destructive,.badge-outline):focus-visible{border-color:var(--color-ring);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){:is(.badge,.badge-primary,.badge-secondary,.badge-destructive,.badge-outline):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}:is(.badge,.badge-primary,.badge-secondary,.badge-destructive,.badge-outline)[aria-invalid=true]{border-color:var(--color-destructive);--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(.badge,.badge-primary,.badge-secondary,.badge-destructive,.badge-outline)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}:is(.badge,.badge-primary,.badge-secondary,.badge-destructive,.badge-outline):is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(.badge,.badge-primary,.badge-secondary,.badge-destructive,.badge-outline):is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)40%,transparent)}}:is(.badge,.badge-primary,.badge-secondary,.badge-destructive,.badge-outline)>svg{pointer-events:none;width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.badge,.badge-primary{background-color:var(--color-primary);color:var(--color-primary-foreground);border-color:#0000}@media (hover:hover){a:is(.badge,.badge-primary):hover{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){a:is(.badge,.badge-primary):hover{background-color:color-mix(in oklab,var(--color-primary)90%,transparent)}}}.badge-secondary{background-color:var(--color-secondary);color:var(--color-secondary-foreground);border-color:#0000}@media (hover:hover){a.badge-secondary:hover{background-color:var(--color-secondary)}@supports (color:color-mix(in lab, red, red)){a.badge-secondary:hover{background-color:color-mix(in oklab,var(--color-secondary)90%,transparent)}}}.badge-destructive{background-color:var(--color-destructive);color:var(--color-white);border-color:#0000}.badge-destructive:focus-visible{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.badge-destructive:focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}.badge-destructive:is(.dark *){background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.badge-destructive:is(.dark *){background-color:color-mix(in oklab,var(--color-destructive)60%,transparent)}}.badge-destructive:is(.dark *):focus-visible{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.badge-destructive:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-destructive)40%,transparent)}}@media (hover:hover){a.badge-destructive:hover{background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){a.badge-destructive:hover{background-color:color-mix(in oklab,var(--color-destructive)90%,transparent)}}}.badge-outline{color:var(--color-foreground)}@media (hover:hover){a.badge-outline:hover{background-color:var(--color-accent);color:var(--color-accent-foreground)}}.btn,.btn-primary,.btn-secondary,.btn-outline,.btn-ghost,.btn-link,.btn-destructive,.btn-sm,.btn-sm-primary,.btn-sm-secondary,.btn-sm-outline,.btn-sm-ghost,.btn-sm-link,.btn-sm-destructive,.btn-lg,.btn-lg-primary,.btn-lg-secondary,.btn-lg-outline,.btn-lg-ghost,.btn-lg-link,.btn-lg-destructive,.btn-icon,.btn-icon-primary,.btn-icon-secondary,.btn-icon-outline,.btn-icon-ghost,.btn-icon-link,.btn-icon-destructive,.btn-sm-icon,.btn-sm-icon-primary,.btn-sm-icon-secondary,.btn-sm-icon-outline,.btn-sm-icon-ghost,.btn-sm-icon-link,.btn-sm-icon-destructive,.btn-lg-icon,.btn-lg-icon-primary,.btn-lg-icon-secondary,.btn-lg-icon-outline,.btn-lg-icon-ghost,.btn-lg-icon-link,.btn-lg-icon-destructive{cursor:pointer;border-radius:var(--radius-md);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-outline-style:none;outline-style:none;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}:is(.btn,.btn-primary,.btn-secondary,.btn-outline,.btn-ghost,.btn-link,.btn-destructive,.btn-sm,.btn-sm-primary,.btn-sm-secondary,.btn-sm-outline,.btn-sm-ghost,.btn-sm-link,.btn-sm-destructive,.btn-lg,.btn-lg-primary,.btn-lg-secondary,.btn-lg-outline,.btn-lg-ghost,.btn-lg-link,.btn-lg-destructive,.btn-icon,.btn-icon-primary,.btn-icon-secondary,.btn-icon-outline,.btn-icon-ghost,.btn-icon-link,.btn-icon-destructive,.btn-sm-icon,.btn-sm-icon-primary,.btn-sm-icon-secondary,.btn-sm-icon-outline,.btn-sm-icon-ghost,.btn-sm-icon-link,.btn-sm-icon-destructive,.btn-lg-icon,.btn-lg-icon-primary,.btn-lg-icon-secondary,.btn-lg-icon-outline,.btn-lg-icon-ghost,.btn-lg-icon-link,.btn-lg-icon-destructive):focus-visible{border-color:var(--color-ring);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){:is(.btn,.btn-primary,.btn-secondary,.btn-outline,.btn-ghost,.btn-link,.btn-destructive,.btn-sm,.btn-sm-primary,.btn-sm-secondary,.btn-sm-outline,.btn-sm-ghost,.btn-sm-link,.btn-sm-destructive,.btn-lg,.btn-lg-primary,.btn-lg-secondary,.btn-lg-outline,.btn-lg-ghost,.btn-lg-link,.btn-lg-destructive,.btn-icon,.btn-icon-primary,.btn-icon-secondary,.btn-icon-outline,.btn-icon-ghost,.btn-icon-link,.btn-icon-destructive,.btn-sm-icon,.btn-sm-icon-primary,.btn-sm-icon-secondary,.btn-sm-icon-outline,.btn-sm-icon-ghost,.btn-sm-icon-link,.btn-sm-icon-destructive,.btn-lg-icon,.btn-lg-icon-primary,.btn-lg-icon-secondary,.btn-lg-icon-outline,.btn-lg-icon-ghost,.btn-lg-icon-link,.btn-lg-icon-destructive):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}:is(.btn,.btn-primary,.btn-secondary,.btn-outline,.btn-ghost,.btn-link,.btn-destructive,.btn-sm,.btn-sm-primary,.btn-sm-secondary,.btn-sm-outline,.btn-sm-ghost,.btn-sm-link,.btn-sm-destructive,.btn-lg,.btn-lg-primary,.btn-lg-secondary,.btn-lg-outline,.btn-lg-ghost,.btn-lg-link,.btn-lg-destructive,.btn-icon,.btn-icon-primary,.btn-icon-secondary,.btn-icon-outline,.btn-icon-ghost,.btn-icon-link,.btn-icon-destructive,.btn-sm-icon,.btn-sm-icon-primary,.btn-sm-icon-secondary,.btn-sm-icon-outline,.btn-sm-icon-ghost,.btn-sm-icon-link,.btn-sm-icon-destructive,.btn-lg-icon,.btn-lg-icon-primary,.btn-lg-icon-secondary,.btn-lg-icon-outline,.btn-lg-icon-ghost,.btn-lg-icon-link,.btn-lg-icon-destructive):disabled{pointer-events:none;opacity:.5}:is(.btn,.btn-primary,.btn-secondary,.btn-outline,.btn-ghost,.btn-link,.btn-destructive,.btn-sm,.btn-sm-primary,.btn-sm-secondary,.btn-sm-outline,.btn-sm-ghost,.btn-sm-link,.btn-sm-destructive,.btn-lg,.btn-lg-primary,.btn-lg-secondary,.btn-lg-outline,.btn-lg-ghost,.btn-lg-link,.btn-lg-destructive,.btn-icon,.btn-icon-primary,.btn-icon-secondary,.btn-icon-outline,.btn-icon-ghost,.btn-icon-link,.btn-icon-destructive,.btn-sm-icon,.btn-sm-icon-primary,.btn-sm-icon-secondary,.btn-sm-icon-outline,.btn-sm-icon-ghost,.btn-sm-icon-link,.btn-sm-icon-destructive,.btn-lg-icon,.btn-lg-icon-primary,.btn-lg-icon-secondary,.btn-lg-icon-outline,.btn-lg-icon-ghost,.btn-lg-icon-link,.btn-lg-icon-destructive)[aria-invalid=true]{border-color:var(--color-destructive);--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(.btn,.btn-primary,.btn-secondary,.btn-outline,.btn-ghost,.btn-link,.btn-destructive,.btn-sm,.btn-sm-primary,.btn-sm-secondary,.btn-sm-outline,.btn-sm-ghost,.btn-sm-link,.btn-sm-destructive,.btn-lg,.btn-lg-primary,.btn-lg-secondary,.btn-lg-outline,.btn-lg-ghost,.btn-lg-link,.btn-lg-destructive,.btn-icon,.btn-icon-primary,.btn-icon-secondary,.btn-icon-outline,.btn-icon-ghost,.btn-icon-link,.btn-icon-destructive,.btn-sm-icon,.btn-sm-icon-primary,.btn-sm-icon-secondary,.btn-sm-icon-outline,.btn-sm-icon-ghost,.btn-sm-icon-link,.btn-sm-icon-destructive,.btn-lg-icon,.btn-lg-icon-primary,.btn-lg-icon-secondary,.btn-lg-icon-outline,.btn-lg-icon-ghost,.btn-lg-icon-link,.btn-lg-icon-destructive)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}:is(.btn,.btn-primary,.btn-secondary,.btn-outline,.btn-ghost,.btn-link,.btn-destructive,.btn-sm,.btn-sm-primary,.btn-sm-secondary,.btn-sm-outline,.btn-sm-ghost,.btn-sm-link,.btn-sm-destructive,.btn-lg,.btn-lg-primary,.btn-lg-secondary,.btn-lg-outline,.btn-lg-ghost,.btn-lg-link,.btn-lg-destructive,.btn-icon,.btn-icon-primary,.btn-icon-secondary,.btn-icon-outline,.btn-icon-ghost,.btn-icon-link,.btn-icon-destructive,.btn-sm-icon,.btn-sm-icon-primary,.btn-sm-icon-secondary,.btn-sm-icon-outline,.btn-sm-icon-ghost,.btn-sm-icon-link,.btn-sm-icon-destructive,.btn-lg-icon,.btn-lg-icon-primary,.btn-lg-icon-secondary,.btn-lg-icon-outline,.btn-lg-icon-ghost,.btn-lg-icon-link,.btn-lg-icon-destructive):is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(.btn,.btn-primary,.btn-secondary,.btn-outline,.btn-ghost,.btn-link,.btn-destructive,.btn-sm,.btn-sm-primary,.btn-sm-secondary,.btn-sm-outline,.btn-sm-ghost,.btn-sm-link,.btn-sm-destructive,.btn-lg,.btn-lg-primary,.btn-lg-secondary,.btn-lg-outline,.btn-lg-ghost,.btn-lg-link,.btn-lg-destructive,.btn-icon,.btn-icon-primary,.btn-icon-secondary,.btn-icon-outline,.btn-icon-ghost,.btn-icon-link,.btn-icon-destructive,.btn-sm-icon,.btn-sm-icon-primary,.btn-sm-icon-secondary,.btn-sm-icon-outline,.btn-sm-icon-ghost,.btn-sm-icon-link,.btn-sm-icon-destructive,.btn-lg-icon,.btn-lg-icon-primary,.btn-lg-icon-secondary,.btn-lg-icon-outline,.btn-lg-icon-ghost,.btn-lg-icon-link,.btn-lg-icon-destructive):is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)40%,transparent)}}:is(.btn,.btn-primary,.btn-secondary,.btn-outline,.btn-ghost,.btn-link,.btn-destructive,.btn-sm,.btn-sm-primary,.btn-sm-secondary,.btn-sm-outline,.btn-sm-ghost,.btn-sm-link,.btn-sm-destructive,.btn-lg,.btn-lg-primary,.btn-lg-secondary,.btn-lg-outline,.btn-lg-ghost,.btn-lg-link,.btn-lg-destructive,.btn-icon,.btn-icon-primary,.btn-icon-secondary,.btn-icon-outline,.btn-icon-ghost,.btn-icon-link,.btn-icon-destructive,.btn-sm-icon,.btn-sm-icon-primary,.btn-sm-icon-secondary,.btn-sm-icon-outline,.btn-sm-icon-ghost,.btn-sm-icon-link,.btn-sm-icon-destructive,.btn-lg-icon,.btn-lg-icon-primary,.btn-lg-icon-secondary,.btn-lg-icon-outline,.btn-lg-icon-ghost,.btn-lg-icon-link,.btn-lg-icon-destructive) svg{pointer-events:none;flex-shrink:0}:is(.btn,.btn-primary,.btn-secondary,.btn-outline,.btn-ghost,.btn-link,.btn-destructive,.btn-sm,.btn-sm-primary,.btn-sm-secondary,.btn-sm-outline,.btn-sm-ghost,.btn-sm-link,.btn-sm-destructive,.btn-lg,.btn-lg-primary,.btn-lg-secondary,.btn-lg-outline,.btn-lg-ghost,.btn-lg-link,.btn-lg-destructive,.btn-icon,.btn-icon-primary,.btn-icon-secondary,.btn-icon-outline,.btn-icon-ghost,.btn-icon-link,.btn-icon-destructive,.btn-sm-icon,.btn-sm-icon-primary,.btn-sm-icon-secondary,.btn-sm-icon-outline,.btn-sm-icon-ghost,.btn-sm-icon-link,.btn-sm-icon-destructive,.btn-lg-icon,.btn-lg-icon-primary,.btn-lg-icon-secondary,.btn-lg-icon-outline,.btn-lg-icon-ghost,.btn-lg-icon-link,.btn-lg-icon-destructive) svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.btn,.btn-primary,.btn-secondary,.btn-outline,.btn-ghost,.btn-link,.btn-destructive{height:calc(var(--spacing)*9);gap:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*2)}:is(.btn,.btn-primary,.btn-secondary,.btn-outline,.btn-ghost,.btn-link,.btn-destructive):has(>svg){padding-inline:calc(var(--spacing)*3)}.btn-icon,.btn-icon-primary,.btn-icon-secondary,.btn-icon-outline,.btn-icon-ghost,.btn-icon-link,.btn-icon-destructive{width:calc(var(--spacing)*9);height:calc(var(--spacing)*9)}.btn-sm,.btn-sm-primary,.btn-sm-secondary,.btn-sm-outline,.btn-sm-ghost,.btn-sm-link,.btn-sm-destructive{height:calc(var(--spacing)*8);gap:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*3)}:is(.btn-sm,.btn-sm-primary,.btn-sm-secondary,.btn-sm-outline,.btn-sm-ghost,.btn-sm-link,.btn-sm-destructive):has(>svg){padding-inline:calc(var(--spacing)*2.5)}.btn-sm-icon,.btn-sm-icon-primary,.btn-sm-icon-secondary,.btn-sm-icon-outline,.btn-sm-icon-ghost,.btn-sm-icon-link,.btn-sm-icon-destructive{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.btn-lg,.btn-lg-primary,.btn-lg-secondary,.btn-lg-outline,.btn-lg-ghost,.btn-lg-link,.btn-lg-destructive{height:calc(var(--spacing)*10);gap:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*6)}:is(.btn-lg,.btn-lg-primary,.btn-lg-secondary,.btn-lg-outline,.btn-lg-ghost,.btn-lg-link,.btn-lg-destructive):has(>svg){padding-inline:calc(var(--spacing)*4)}.btn-lg-icon,.btn-lg-icon-primary,.btn-lg-icon-secondary,.btn-lg-icon-outline,.btn-lg-icon-ghost,.btn-lg-icon-link,.btn-lg-icon-destructive{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.btn,.btn-primary,.btn-sm,.btn-sm-primary,.btn-lg,.btn-lg-primary,.btn-icon,.btn-icon-primary,.btn-sm-icon,.btn-sm-icon-primary,.btn-lg-icon,.btn-lg-icon-primary{background-color:var(--color-primary);color:var(--color-primary-foreground);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){:is(.btn,.btn-primary,.btn-sm,.btn-sm-primary,.btn-lg,.btn-lg-primary,.btn-icon,.btn-icon-primary,.btn-sm-icon,.btn-sm-icon-primary,.btn-lg-icon,.btn-lg-icon-primary):hover{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){:is(.btn,.btn-primary,.btn-sm,.btn-sm-primary,.btn-lg,.btn-lg-primary,.btn-icon,.btn-icon-primary,.btn-sm-icon,.btn-sm-icon-primary,.btn-lg-icon,.btn-lg-icon-primary):hover{background-color:color-mix(in oklab,var(--color-primary)90%,transparent)}}}:is(.btn,.btn-primary,.btn-sm,.btn-sm-primary,.btn-lg,.btn-lg-primary,.btn-icon,.btn-icon-primary,.btn-sm-icon,.btn-sm-icon-primary,.btn-lg-icon,.btn-lg-icon-primary)[aria-pressed=true]{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){:is(.btn,.btn-primary,.btn-sm,.btn-sm-primary,.btn-lg,.btn-lg-primary,.btn-icon,.btn-icon-primary,.btn-sm-icon,.btn-sm-icon-primary,.btn-lg-icon,.btn-lg-icon-primary)[aria-pressed=true]{background-color:color-mix(in oklab,var(--color-primary)90%,transparent)}}.btn-secondary,.btn-sm-secondary,.btn-lg-secondary,.btn-icon-secondary,.btn-sm-icon-secondary,.btn-lg-icon-secondary{background-color:var(--color-secondary);color:var(--color-secondary-foreground);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}:is(.btn-secondary,.btn-sm-secondary,.btn-lg-secondary,.btn-icon-secondary,.btn-sm-icon-secondary,.btn-lg-icon-secondary):hover,:is(.btn-secondary,.btn-sm-secondary,.btn-lg-secondary,.btn-icon-secondary,.btn-sm-icon-secondary,.btn-lg-icon-secondary)[aria-pressed=true]{background-color:var(--color-secondary)}@supports (color:color-mix(in lab, red, red)){:is(:is(.btn-secondary,.btn-sm-secondary,.btn-lg-secondary,.btn-icon-secondary,.btn-sm-icon-secondary,.btn-lg-icon-secondary):hover,:is(.btn-secondary,.btn-sm-secondary,.btn-lg-secondary,.btn-icon-secondary,.btn-sm-icon-secondary,.btn-lg-icon-secondary)[aria-pressed=true]){background-color:color-mix(in oklab,var(--color-secondary)80%,transparent)}}.btn-outline,.btn-sm-outline,.btn-lg-outline,.btn-icon-outline,.btn-sm-icon-outline,.btn-lg-icon-outline{border-style:var(--tw-border-style);background-color:var(--color-background);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-width:1px}:is(.btn-outline,.btn-sm-outline,.btn-lg-outline,.btn-icon-outline,.btn-sm-icon-outline,.btn-lg-icon-outline):is(.dark *){border-color:var(--color-input);background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){:is(.btn-outline,.btn-sm-outline,.btn-lg-outline,.btn-icon-outline,.btn-sm-icon-outline,.btn-lg-icon-outline):is(.dark *){background-color:color-mix(in oklab,var(--color-input)30%,transparent)}}:is(.btn-outline,.btn-sm-outline,.btn-lg-outline,.btn-icon-outline,.btn-sm-icon-outline,.btn-lg-icon-outline):hover,:is(.btn-outline,.btn-sm-outline,.btn-lg-outline,.btn-icon-outline,.btn-sm-icon-outline,.btn-lg-icon-outline)[aria-pressed=true]{background-color:var(--color-accent);color:var(--color-accent-foreground)}:is(:is(.btn-outline,.btn-sm-outline,.btn-lg-outline,.btn-icon-outline,.btn-sm-icon-outline,.btn-lg-icon-outline):hover,:is(.btn-outline,.btn-sm-outline,.btn-lg-outline,.btn-icon-outline,.btn-sm-icon-outline,.btn-lg-icon-outline)[aria-pressed=true]):is(.dark *){background-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){:is(:is(.btn-outline,.btn-sm-outline,.btn-lg-outline,.btn-icon-outline,.btn-sm-icon-outline,.btn-lg-icon-outline):hover,:is(.btn-outline,.btn-sm-outline,.btn-lg-outline,.btn-icon-outline,.btn-sm-icon-outline,.btn-lg-icon-outline)[aria-pressed=true]):is(.dark *){background-color:color-mix(in oklab,var(--color-accent)50%,transparent)}}:is(.btn-ghost,.btn-sm-ghost,.btn-lg-ghost,.btn-icon-ghost,.btn-sm-icon-ghost,.btn-lg-icon-ghost):hover,:is(.btn-ghost,.btn-sm-ghost,.btn-lg-ghost,.btn-icon-ghost,.btn-sm-icon-ghost,.btn-lg-icon-ghost)[aria-pressed=true]{background-color:var(--color-accent);color:var(--color-accent-foreground)}:is(:is(.btn-ghost,.btn-sm-ghost,.btn-lg-ghost,.btn-icon-ghost,.btn-sm-icon-ghost,.btn-lg-icon-ghost):hover,:is(.btn-ghost,.btn-sm-ghost,.btn-lg-ghost,.btn-icon-ghost,.btn-sm-icon-ghost,.btn-lg-icon-ghost)[aria-pressed=true]):is(.dark *){background-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){:is(:is(.btn-ghost,.btn-sm-ghost,.btn-lg-ghost,.btn-icon-ghost,.btn-sm-icon-ghost,.btn-lg-icon-ghost):hover,:is(.btn-ghost,.btn-sm-ghost,.btn-lg-ghost,.btn-icon-ghost,.btn-sm-icon-ghost,.btn-lg-icon-ghost)[aria-pressed=true]):is(.dark *){background-color:color-mix(in oklab,var(--color-accent)50%,transparent)}}.btn-link,.btn-sm-link,.btn-lg-link,.btn-icon-link,.btn-sm-icon-link,.btn-lg-icon-link{color:var(--color-primary);text-underline-offset:4px}@media (hover:hover){:is(:is(.btn-link,.btn-sm-link,.btn-lg-link,.btn-icon-link,.btn-sm-icon-link,.btn-lg-icon-link):hover,:is(.btn-link,.btn-sm-link,.btn-lg-link,.btn-icon-link,.btn-sm-icon-link,.btn-lg-icon-link)[aria-pressed=true]):hover{text-decoration-line:underline}}.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive{background-color:var(--color-destructive);color:var(--color-white);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive):focus-visible{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive):is(.dark *){background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive):is(.dark *){background-color:color-mix(in oklab,var(--color-destructive)60%,transparent)}}:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive):is(.dark *):focus-visible{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive):is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-destructive)40%,transparent)}}:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive):hover,:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive)[aria-pressed=true]{background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive):hover,:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive)[aria-pressed=true]){background-color:color-mix(in oklab,var(--color-destructive)90%,transparent)}}:is(:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive):hover,:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive)[aria-pressed=true]):is(.dark *){background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive):hover,:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive)[aria-pressed=true]):is(.dark *){background-color:color-mix(in oklab,var(--color-destructive)50%,transparent)}}.card{gap:calc(var(--spacing)*6);border-radius:var(--radius-xl);border-style:var(--tw-border-style);background-color:var(--color-card);padding-block:calc(var(--spacing)*6);color:var(--color-card-foreground);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-width:1px;flex-direction:column;display:flex}.card>header{align-items:flex-start;gap:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*6);grid-template-rows:auto auto;grid-auto-rows:min-content;display:grid;container:card-header/inline-size}.card>header:has([data-slot=card-action]){grid-template-columns:1fr auto}.card>header.border-b{padding-bottom:calc(var(--spacing)*6)}.card>header h2{--tw-leading:1;--tw-font-weight:var(--font-weight-semibold);line-height:1;font-weight:var(--font-weight-semibold)}.card>header p{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-muted-foreground)}.card>section{padding-inline:calc(var(--spacing)*6)}.card>footer{padding-inline:calc(var(--spacing)*6);align-items:center;display:flex}.card>footer.border-t{padding-top:calc(var(--spacing)*6)}:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);appearance:none;border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-input);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-outline-style:none;border-radius:4px;outline-style:none;flex-shrink:0}:is(:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch])):checked{border-color:var(--color-primary);background-color:var(--color-primary)}:is(:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch])):focus-visible{border-color:var(--color-ring);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch])):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}:is(:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch])):disabled{cursor:not-allowed;opacity:.5}:is(:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch]))[aria-invalid=true]{border-color:var(--color-destructive);--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch]))[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}:is(:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch])):is(.dark *){background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch])):is(.dark *){background-color:color-mix(in oklab,var(--color-input)30%,transparent)}}:is(:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch])):is(.dark *):checked{background-color:var(--color-primary)}:is(:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch])):is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch])):is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)40%,transparent)}}:is(:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch])):checked:after{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5);background-color:var(--color-primary-foreground);--tw-content:"";content:var(--tw-content);-webkit-mask-image:var(--check-icon);-webkit-mask-image:var(--check-icon);mask-image:var(--check-icon);display:block;-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:.875rem;mask-size:.875rem;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}details::details-content{opacity:0;block-size:0;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));transition-behavior:allow-discrete;display:block}details[open]::details-content{block-size:auto;block-size:calc-size(auto,size);opacity:1}details summary{cursor:pointer;align-items:center;display:inline-flex}details>summary::-webkit-details-marker{display:none}.command-dialog{inset-block:calc(var(--spacing)*0);opacity:0;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));transition-behavior:allow-discrete}.command-dialog:is([open],:popover-open),.command-dialog:is([open],:popover-open)::backdrop{opacity:1}.command-dialog:is([open],:popover-open)>*{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}@starting-style{.command-dialog:is([open],:popover-open),.command-dialog:is([open],:popover-open)::backdrop{opacity:0}.command-dialog:is([open],:popover-open)>*{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}}.command-dialog::backdrop{opacity:0;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));transition-behavior:allow-discrete;background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.command-dialog::backdrop{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.command-dialog>*{z-index:50;--tw-translate-x:calc(calc(1/2*100%)*-1);width:100%;max-width:calc(100% - 2rem);max-height:min(640px,100% - 2rem);translate:var(--tw-translate-x)var(--tw-translate-y);--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);border-radius:var(--radius-lg);border-style:var(--tw-border-style);background-color:var(--color-background);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));border-width:1px;flex-direction:column;display:flex;position:fixed;top:50%;left:50%;overflow:hidden}@media (min-width:40rem){.command-dialog>*{max-width:var(--container-lg)}}.command-dialog>*>button,.command-dialog>*>form[method=dialog]{top:calc(var(--spacing)*4);right:calc(var(--spacing)*4);position:absolute}.command-dialog>*>button,.command-dialog>*>form[method=dialog]>button{border-radius:var(--radius-xs);opacity:.7;--tw-ring-offset-color:var(--color-background);transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){:is(.command-dialog>*>button,.command-dialog>*>form[method=dialog]>button):hover{opacity:1}}:is(.command-dialog>*>button,.command-dialog>*>form[method=dialog]>button):focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring);--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:is(.command-dialog>*>button,.command-dialog>*>form[method=dialog]>button):focus{outline-offset:2px;outline:2px solid #0000}}:is(.command-dialog>*>button,.command-dialog>*>form[method=dialog]>button):disabled{pointer-events:none}:is(.command-dialog>*>button,.command-dialog>*>form[method=dialog]>button)[data-state=open]{background-color:var(--color-accent);color:var(--color-muted-foreground)}:is(.command-dialog>*>button,.command-dialog>*>form[method=dialog]>button) svg{pointer-events:none;flex-shrink:0}:is(.command-dialog>*>button,.command-dialog>*>form[method=dialog]>button) svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.command-dialog .command>header input{height:calc(var(--spacing)*12)}.command-dialog .command [role=menu]{padding-inline:calc(var(--spacing)*2)}.command-dialog .command [role=menu] [role=menuitem]{padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*3)}.command-dialog .command [role=menu] [role=menuitem] svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.command-dialog .command [role=menu] [role=heading]{padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1.5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-muted-foreground)}.command>header{align-items:center;gap:calc(var(--spacing)*2);border-bottom-style:var(--tw-border-style);padding-inline:calc(var(--spacing)*3);border-bottom-width:1px;display:flex}.command>header svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);opacity:.5;flex-shrink:0}.command>header input{height:calc(var(--spacing)*10);border-radius:var(--radius-md);width:100%;padding-block:calc(var(--spacing)*3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-outline-style:none;background-color:#0000;outline-style:none;display:flex}@media (forced-colors:active){.command>header input{outline-offset:2px;outline:2px solid #0000}}.command>header input::placeholder{color:var(--color-muted-foreground)}.command>header input:disabled{cursor:not-allowed;opacity:.5}.command [role=menu]{max-height:300px;padding:calc(var(--spacing)*1);overflow:hidden auto}.command [role=menu] [role=menuitem]{cursor:default;align-items:center;gap:calc(var(--spacing)*2);text-overflow:ellipsis;white-space:nowrap;border-radius:var(--radius-sm);width:100%;padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-outline-style:none;-webkit-user-select:none;user-select:none;outline-style:none;display:flex;position:relative;overflow:hidden}@media (forced-colors:active){.command [role=menu] [role=menuitem]{outline-offset:2px;outline:2px solid #0000}}.command [role=menu] [role=menuitem]:disabled,.command [role=menu] [role=menuitem][aria-disabled=true]{pointer-events:none;opacity:.5}.command [role=menu] [role=menuitem][aria-hidden=true]{display:none}.command [role=menu] [role=menuitem] svg{pointer-events:none;flex-shrink:0}.command [role=menu] [role=menuitem] svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.command [role=menu] [role=menuitem] svg:not([class*=text-]){color:var(--color-muted-foreground)}.command [role=menu] [role=menuitem].active{background-color:var(--color-accent);color:var(--color-accent-foreground)}.command [role=menu] [role=heading]{padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-muted-foreground);display:flex}.command [role=menu] [role=group]:not(:has([role=menuitem]:not([aria-hidden=true]))){display:none}.command [role=menu] [role=separator]{margin-inline:calc(var(--spacing)*-1);margin-block:calc(var(--spacing)*1);border-color:var(--color-border)}.command [role=menu]:not(:has([data-value]:not([aria-hidden=true]))):before{margin:calc(var(--spacing)*-1);text-overflow:ellipsis;white-space:nowrap;padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*6);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));justify-content:center;align-items:center;display:flex;overflow:hidden}.command [role=menu][data-empty]:not(:has([data-value]:not([aria-hidden=true]))):before{--tw-content:attr(data-empty);content:var(--tw-content)}.command [role=menu]:not([data-empty]):not(:has([data-value]:not([aria-hidden=true]))):before{--tw-content:"No results found";content:var(--tw-content)}@media (hover:hover){.command:not([data-command-initialized]) [role=menuitem]:hover{background-color:var(--color-accent);color:var(--color-accent-foreground)}}.command:has(>header input:not(:placeholder-shown)) [role=separator]{display:none}.dialog{inset-block:calc(var(--spacing)*0);opacity:0;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));transition-behavior:allow-discrete}.dialog:is([open],:popover-open),.dialog:is([open],:popover-open)::backdrop{opacity:1}.dialog:is([open],:popover-open)>*{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}@starting-style{.dialog:is([open],:popover-open),.dialog:is([open],:popover-open)::backdrop{opacity:0}.dialog:is([open],:popover-open)>*{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}}.dialog::backdrop{opacity:0;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));transition-behavior:allow-discrete;background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.dialog::backdrop{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.dialog>*{z-index:50;--tw-translate-x:calc(calc(1/2*100%)*-1);width:100%;max-width:calc(100% - 2rem);max-height:calc(100% - 2rem);translate:var(--tw-translate-x)var(--tw-translate-y);--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);gap:calc(var(--spacing)*4);border-radius:var(--radius-lg);border-style:var(--tw-border-style);background-color:var(--color-background);padding:calc(var(--spacing)*6);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));border-width:1px;flex-direction:column;display:flex;position:fixed;top:50%;left:50%}@media (min-width:40rem){.dialog>*{max-width:var(--container-lg)}}.dialog>*>header{gap:calc(var(--spacing)*2);text-align:center;flex-direction:column;display:flex}@media (min-width:40rem){.dialog>*>header{text-align:left}}.dialog>*>header>h2{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-leading:1;--tw-font-weight:var(--font-weight-semibold);line-height:1;font-weight:var(--font-weight-semibold)}.dialog>*>header>p{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-muted-foreground)}.dialog>*>section{margin-inline:calc(var(--spacing)*-6);padding-inline:calc(var(--spacing)*6);flex:1}.dialog>*>footer{gap:calc(var(--spacing)*2);flex-direction:column-reverse;display:flex}@media (min-width:40rem){.dialog>*>footer{flex-direction:row;justify-content:flex-end}}.dialog>*>button,.dialog>*>form[method=dialog]{top:calc(var(--spacing)*4);right:calc(var(--spacing)*4);position:absolute}.dialog>*>button,.dialog>*>form[method=dialog]>button{border-radius:var(--radius-xs);opacity:.7;--tw-ring-offset-color:var(--color-background);transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){:is(.dialog>*>button,.dialog>*>form[method=dialog]>button):hover{opacity:1}}:is(.dialog>*>button,.dialog>*>form[method=dialog]>button):focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring);--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:is(.dialog>*>button,.dialog>*>form[method=dialog]>button):focus{outline-offset:2px;outline:2px solid #0000}}:is(.dialog>*>button,.dialog>*>form[method=dialog]>button):disabled{pointer-events:none}:is(.dialog>*>button,.dialog>*>form[method=dialog]>button)[data-state=open]{background-color:var(--color-accent);color:var(--color-muted-foreground)}:is(.dialog>*>button,.dialog>*>form[method=dialog]>button) svg{pointer-events:none;flex-shrink:0}:is(.dialog>*>button,.dialog>*>form[method=dialog]>button) svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.dropdown-menu{display:inline-flex;position:relative}.dropdown-menu [data-popover]{padding:calc(var(--spacing)*1);min-width:anchor-size(width)}.dropdown-menu [data-popover] [role=menuitem],.dropdown-menu [data-popover] [role=menuitemcheckbox],.dropdown-menu [data-popover] [role=menuitemradio]{cursor:default;align-items:center;gap:calc(var(--spacing)*2);text-overflow:ellipsis;white-space:nowrap;border-radius:var(--radius-sm);width:100%;padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-outline-style:none;-webkit-user-select:none;user-select:none;outline-style:none;display:flex;position:relative;overflow:hidden}@media (forced-colors:active){:is(.dropdown-menu [data-popover] [role=menuitem],.dropdown-menu [data-popover] [role=menuitemcheckbox],.dropdown-menu [data-popover] [role=menuitemradio]){outline-offset:2px;outline:2px solid #0000}}:is(.dropdown-menu [data-popover] [role=menuitem],.dropdown-menu [data-popover] [role=menuitemcheckbox],.dropdown-menu [data-popover] [role=menuitemradio]):disabled,:is(.dropdown-menu [data-popover] [role=menuitem],.dropdown-menu [data-popover] [role=menuitemcheckbox],.dropdown-menu [data-popover] [role=menuitemradio])[aria-disabled=true]{pointer-events:none;opacity:.5}:is(.dropdown-menu [data-popover] [role=menuitem],.dropdown-menu [data-popover] [role=menuitemcheckbox],.dropdown-menu [data-popover] [role=menuitemradio])[aria-hidden=true]{display:none}:is(.dropdown-menu [data-popover] [role=menuitem],.dropdown-menu [data-popover] [role=menuitemcheckbox],.dropdown-menu [data-popover] [role=menuitemradio]) svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);color:var(--color-muted-foreground);flex-shrink:0}:is(.dropdown-menu [data-popover] [role=menuitem],.dropdown-menu [data-popover] [role=menuitemcheckbox],.dropdown-menu [data-popover] [role=menuitemradio]):not([aria-disabled=true]):focus-visible,:is(.dropdown-menu [data-popover] [role=menuitem],.dropdown-menu [data-popover] [role=menuitemcheckbox],.dropdown-menu [data-popover] [role=menuitemradio]).active{background-color:var(--color-accent);color:var(--color-accent-foreground)}.dropdown-menu [data-popover] [role=menu] [role=heading]{padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);display:flex}.dropdown-menu [data-popover] [role=separator]{margin-inline:calc(var(--spacing)*-1);margin-block:calc(var(--spacing)*1);border-color:var(--color-border)}@media (hover:hover){:is(.dropdown-menu:not([data-dropdown-menu-initialized]) [data-popover] [role=menuitem],.dropdown-menu:not([data-dropdown-menu-initialized]) [data-popover] [role=menuitemcheckbox],.dropdown-menu:not([data-dropdown-menu-initialized]) [data-popover] [role=menuitemradio]):hover{background-color:var(--color-accent);color:var(--color-accent-foreground)}}.fieldset{gap:calc(var(--spacing)*6);flex-direction:column;display:flex}.fieldset>legend{margin-bottom:calc(var(--spacing)*3);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.fieldset>legend+p{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-muted-foreground)}.field{gap:calc(var(--spacing)*3);flex-direction:column;width:100%;display:flex}.field[data-invalid=true]{color:var(--color-destructive)}.field>*{width:100%}.field>.sr-only{width:auto}.field .description{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-muted-foreground)}.field .error{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-destructive)}:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time]{height:calc(var(--spacing)*9);width:100%;min-width:calc(var(--spacing)*0);appearance:none;border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-input);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-outline-style:none;background-color:#0000;outline-style:none;display:flex}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time]) ::selection{background-color:var(--color-primary)}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time])::selection{background-color:var(--color-primary)}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time]) ::selection{color:var(--color-primary-foreground)}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time])::selection{color:var(--color-primary-foreground)}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time])::file-selector-button{display:inline-flex}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time])::file-selector-button{height:calc(var(--spacing)*7)}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time])::file-selector-button{border-style:var(--tw-border-style);border-width:0}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time])::file-selector-button{background-color:#0000}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time])::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time])::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time])::file-selector-button{color:var(--color-foreground)}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time])::placeholder{color:var(--color-muted-foreground)}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time]):disabled{pointer-events:none;cursor:not-allowed;opacity:.5}@media (min-width:48rem){:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time]){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time]):is(.dark *){background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time]):is(.dark *){background-color:color-mix(in oklab,var(--color-input)30%,transparent)}}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time]):focus-visible{border-color:var(--color-ring);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time]):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time])[aria-invalid=true]{border-color:var(--color-destructive);--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time])[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time]):is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time]):is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)40%,transparent)}}.kbd{pointer-events:none;height:calc(var(--spacing)*5);width:fit-content;min-width:calc(var(--spacing)*5);justify-content:center;align-items:center;gap:calc(var(--spacing)*1);border-radius:var(--radius-sm);background-color:var(--color-muted);padding-inline:calc(var(--spacing)*1);font-family:var(--font-sans);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-muted-foreground);-webkit-user-select:none;user-select:none;display:inline-flex}.kbd svg:not([class*=size-]){width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}:is(.form,.field) label,.label{align-items:center;gap:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:1;--tw-font-weight:var(--font-weight-medium);line-height:1;font-weight:var(--font-weight-medium);-webkit-user-select:none;user-select:none;display:flex}:is(:is(.form,.field) label,.label):is(:where(.peer):disabled~*),:is(:is(.form,.field) label,.label):has(>:disabled),:is(:is(.form,.field) label,.label):has(+:disabled){pointer-events:none;opacity:.5}[data-popover]{visibility:visible;z-index:50;--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;width:max-content;min-width:100%;scale:var(--tw-scale-x)var(--tw-scale-y);border-radius:var(--radius-md);border-style:var(--tw-border-style);background-color:var(--color-popover);color:var(--color-popover-foreground);opacity:1;--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));border-width:1px;position:absolute;overflow:hidden auto}[data-popover][aria-hidden=true]{visibility:hidden;--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y);opacity:0}[data-popover][aria-hidden=true]:not([data-side]),[data-popover][aria-hidden=true][data-side=bottom]{--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}[data-popover][aria-hidden=true][data-side=top]{--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}[data-popover][aria-hidden=true][data-side=left]{--tw-translate-x:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}[data-popover][aria-hidden=true][data-side=right]{--tw-translate-x:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}[data-popover]:not([data-side]),[data-popover][data-side=bottom]{margin-top:calc(var(--spacing)*1);top:100%}[data-popover][data-side=top]{margin-bottom:calc(var(--spacing)*1);bottom:100%}[data-popover][data-side=left]{margin-right:calc(var(--spacing)*1);right:100%}[data-popover][data-side=right]{margin-left:calc(var(--spacing)*1);left:100%}:is([data-popover]:not([data-side]),[data-popover][data-side=bottom],[data-popover][data-side=top]):not([data-align]),:is([data-popover]:not([data-side]),[data-popover][data-side=bottom],[data-popover][data-side=top])[data-align=start]{left:calc(var(--spacing)*0)}:is([data-popover]:not([data-side]),[data-popover][data-side=bottom],[data-popover][data-side=top])[data-align=end]{right:calc(var(--spacing)*0)}:is([data-popover]:not([data-side]),[data-popover][data-side=bottom],[data-popover][data-side=top])[data-align=center]{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);left:50%}:is([data-popover][data-side=left],[data-popover][data-side=right]):not([data-align]),:is([data-popover][data-side=left],[data-popover][data-side=right])[data-align=start]{top:calc(var(--spacing)*0)}:is([data-popover][data-side=left],[data-popover][data-side=right])[data-align=end]{bottom:calc(var(--spacing)*0)}:is([data-popover][data-side=left],[data-popover][data-side=right])[data-align=center]{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);top:50%}.popover{display:inline-flex;position:relative}.popover [data-popover]{padding:calc(var(--spacing)*4)}:is(.form,.field) input[type=radio],.input[type=radio]{aspect-ratio:1;width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);appearance:none;border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-input);color:var(--color-primary);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-outline-style:none;border-radius:3.40282e38px;outline-style:none;flex-shrink:0;position:relative}:is(:is(.form,.field) input[type=radio],.input[type=radio]):focus-visible{border-color:var(--color-ring);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=radio],.input[type=radio]):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}:is(:is(.form,.field) input[type=radio],.input[type=radio]):disabled{cursor:not-allowed;opacity:.5}:is(:is(.form,.field) input[type=radio],.input[type=radio])[aria-invalid=true]{border-color:var(--color-destructive);--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=radio],.input[type=radio])[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}:is(:is(.form,.field) input[type=radio],.input[type=radio]):is(.dark *){background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=radio],.input[type=radio]):is(.dark *){background-color:color-mix(in oklab,var(--color-input)30%,transparent)}}:is(:is(.form,.field) input[type=radio],.input[type=radio]):is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=radio],.input[type=radio]):is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)40%,transparent)}}:is(:is(.form,.field) input[type=radio],.input[type=radio]):checked:before{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2);--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);background-color:var(--color-primary);--tw-content:"";content:var(--tw-content);border-radius:3.40282e38px;position:absolute;top:50%;left:50%}:is(.form,.field) input[type=range],.input[type=range]{appearance:none;padding:calc(var(--spacing)*0);--tw-outline-style:none;--slider-value:20%;outline-style:none;align-items:center;display:flex}:is(:is(:is(.form,.field) input[type=range],.input[type=range]):hover,:is(:is(.form,.field) input[type=range],.input[type=range]):focus-visible)::-webkit-slider-thumb{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}:is(:is(:is(.form,.field) input[type=range],.input[type=range]):hover,:is(:is(.form,.field) input[type=range],.input[type=range]):focus-visible)::-moz-range-thumb{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}:is(:is(:is(.form,.field) input[type=range],.input[type=range]):hover,:is(:is(.form,.field) input[type=range],.input[type=range]):focus-visible)::-ms-thumb{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}:is(:is(.form,.field) input[type=range],.input[type=range])::-webkit-slider-thumb{margin-top:calc(var(--spacing)*-1.25);width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);appearance:none;border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-primary);background-color:var(--color-background);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring);border-radius:3.40282e38px;flex-shrink:0;display:block}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=range],.input[type=range])::-webkit-slider-thumb{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}:is(:is(.form,.field) input[type=range],.input[type=range])::-webkit-slider-runnable-track{height:calc(var(--spacing)*1.5);appearance:none;background:linear-gradient(to right,var(--primary)var(--slider-value),var(--muted)var(--slider-value));border-radius:3.40282e38px;width:100%}:is(:is(.form,.field) input[type=range],.input[type=range])::-moz-range-thumb{margin-top:calc(var(--spacing)*-1.25);width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);appearance:none;border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-primary);background-color:var(--color-background);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring);border-radius:3.40282e38px;flex-shrink:0;display:block}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=range],.input[type=range])::-moz-range-thumb{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}:is(:is(.form,.field) input[type=range],.input[type=range])::-moz-range-track{height:calc(var(--spacing)*1.5);appearance:none;background:linear-gradient(to right,var(--primary)var(--slider-value),var(--muted)var(--slider-value));border-radius:3.40282e38px;width:100%}:is(:is(.form,.field) input[type=range],.input[type=range])::-ms-thumb{margin-top:calc(var(--spacing)*-1.25);width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);appearance:none;border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-primary);background-color:var(--color-background);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring);border-radius:3.40282e38px;flex-shrink:0;display:block}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=range],.input[type=range])::-ms-thumb{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}:is(:is(.form,.field) input[type=range],.input[type=range])::-ms-track{height:calc(var(--spacing)*1.5);appearance:none;border-radius:3.40282e38px;width:100%}:is(:is(.form,.field) input[type=range],.input[type=range])::-ms-fill-lower{background-color:var(--color-primary);border-radius:3.40282e38px}:is(:is(.form,.field) input[type=range],.input[type=range])::-ms-fill-upper{background-color:var(--color-muted);border-radius:3.40282e38px}:is(.form,.field) select,select.select{height:calc(var(--spacing)*9);appearance:none;justify-content:space-between;align-items:center;gap:calc(var(--spacing)*2);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-input);width:fit-content;padding-block:calc(var(--spacing)*2);padding-right:calc(var(--spacing)*9);padding-left:calc(var(--spacing)*3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));white-space:nowrap;--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-outline-style:none;background-color:#0000;background-image:var(--chevron-down-icon-50);background-position:right .75rem center;background-repeat:no-repeat;background-size:1rem;outline-style:none;display:flex}:is(:is(.form,.field) select,select.select):focus-visible{border-color:var(--color-ring);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) select,select.select):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}:is(:is(.form,.field) select,select.select):disabled{cursor:not-allowed;opacity:.5}:is(:is(.form,.field) select,select.select)[aria-invalid=true]{border-color:var(--color-destructive);--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) select,select.select)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}:is(:is(.form,.field) select,select.select):is(.dark *){background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) select,select.select):is(.dark *){background-color:color-mix(in oklab,var(--color-input)30%,transparent)}}@media (hover:hover){:is(:is(.form,.field) select,select.select):is(.dark *):hover{background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) select,select.select):is(.dark *):hover{background-color:color-mix(in oklab,var(--color-input)50%,transparent)}}}:is(:is(.form,.field) select,select.select):is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) select,select.select):is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)40%,transparent)}}:is(:is(.form,.field) select,select.select) option,:is(:is(.form,.field) select,select.select) optgroup{background-color:var(--color-popover);color:var(--color-popover-foreground)}:not(select).select{display:inline-flex;position:relative}:not(select).select [data-popover]{padding:calc(var(--spacing)*1)}:not(select).select [data-popover] [role=option]{cursor:default;align-items:center;gap:calc(var(--spacing)*2);text-overflow:ellipsis;white-space:nowrap;border-radius:var(--radius-sm);width:100%;padding-block:calc(var(--spacing)*1.5);padding-right:calc(var(--spacing)*7.5);padding-left:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-outline-style:none;-webkit-user-select:none;user-select:none;outline-style:none;display:flex;position:relative;overflow:hidden}@media (forced-colors:active){:not(select).select [data-popover] [role=option]{outline-offset:2px;outline:2px solid #0000}}:not(select).select [data-popover] [role=option]:disabled,:not(select).select [data-popover] [role=option][aria-disabled=true]{pointer-events:none;opacity:.5}:not(select).select [data-popover] [role=option][aria-hidden=true]{display:none}:not(select).select [data-popover] [role=option] svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);color:var(--color-muted-foreground);flex-shrink:0}:not(select).select [data-popover] [role=option][aria-selected=true]{background-image:var(--check-icon);background-position:right .5rem center;background-repeat:no-repeat;background-size:.875rem}:not(select).select [data-popover] [role=option].active,:not(select).select [data-popover] [role=option]:focus-visible{background-color:var(--color-accent);color:var(--color-accent-foreground)}:not(select).select [data-popover] [role=listbox] [role=heading]{padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-muted-foreground);display:flex}:not(select).select [data-popover] [role=listbox] [role=group]:not(:has([role=option]:not([aria-hidden=true]))){display:none}:not(select).select [data-popover] [role=separator]{margin-inline:calc(var(--spacing)*-1);margin-block:calc(var(--spacing)*1);border-color:var(--color-border)}:not(select).select [data-popover]>header{margin-inline:calc(var(--spacing)*-1);margin-top:calc(var(--spacing)*-1);margin-bottom:calc(var(--spacing)*1);height:calc(var(--spacing)*9);align-items:center;gap:calc(var(--spacing)*2);border-bottom-style:var(--tw-border-style);padding-inline:calc(var(--spacing)*3);border-bottom-width:1px;display:flex}:not(select).select [data-popover]>header svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);opacity:.5;flex-shrink:0}:not(select).select [data-popover]>header input[role=combobox]{height:calc(var(--spacing)*10);width:100%;min-width:calc(var(--spacing)*0);border-radius:var(--radius-md);padding-block:calc(var(--spacing)*3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-outline-style:none;background-color:#0000;outline-style:none;flex:1;display:flex}@media (forced-colors:active){:not(select).select [data-popover]>header input[role=combobox]{outline-offset:2px;outline:2px solid #0000}}:not(select).select [data-popover]>header input[role=combobox]::placeholder{color:var(--color-muted-foreground)}:not(select).select [data-popover]>header input[role=combobox]:disabled{cursor:not-allowed;opacity:.5}:not(select).select [data-popover] [role=listbox]:not(:has([data-value]:not([aria-hidden=true]))):before{text-overflow:ellipsis;white-space:nowrap;padding:calc(var(--spacing)*6);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));justify-content:center;align-items:center;display:flex;overflow:hidden}:not(select).select [data-popover] [role=listbox][data-empty]:not(:has([data-value]:not([aria-hidden=true]))):before{--tw-content:attr(data-empty);content:var(--tw-content)}:not(select).select [data-popover] [role=listbox]:not([data-empty]):not(:has([data-value]:not([aria-hidden=true]))):before{--tw-content:"No results found";content:var(--tw-content)}:not(select).select [data-popover]:has(>header input:not(:placeholder-shown)) [role=separator]{display:none}@media (hover:hover){:not(select).select:not([data-select-initialized]) [data-popover] [role=option]:hover{background-color:var(--color-accent);color:var(--color-accent-foreground)}}:is(.form,.field) input[type=checkbox][role=switch],.input[type=checkbox][role=switch]{height:1.15rem;width:calc(var(--spacing)*8);appearance:none;border-style:var(--tw-border-style);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-outline-style:none;background-color:var(--color-input);border-width:1px;border-color:#0000;border-radius:3.40282e38px;outline-style:none;flex-shrink:0;align-items:center;display:inline-flex}:is(:is(.form,.field) input[type=checkbox][role=switch],.input[type=checkbox][role=switch]):focus-visible{border-color:var(--color-ring);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=checkbox][role=switch],.input[type=checkbox][role=switch]):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}:is(:is(.form,.field) input[type=checkbox][role=switch],.input[type=checkbox][role=switch]):disabled{cursor:not-allowed;opacity:.5}:is(:is(.form,.field) input[type=checkbox][role=switch],.input[type=checkbox][role=switch]):checked{background-color:var(--color-primary)}:is(:is(.form,.field) input[type=checkbox][role=switch],.input[type=checkbox][role=switch]):is(.dark *){background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=checkbox][role=switch],.input[type=checkbox][role=switch]):is(.dark *){background-color:color-mix(in oklab,var(--color-input)80%,transparent)}}:is(:is(.form,.field) input[type=checkbox][role=switch],.input[type=checkbox][role=switch]):is(.dark *):checked{background-color:var(--color-primary)}:is(:is(.form,.field) input[type=checkbox][role=switch],.input[type=checkbox][role=switch]):before{content:var(--tw-content);pointer-events:none;content:var(--tw-content);content:var(--tw-content);width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);content:var(--tw-content);content:var(--tw-content);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);content:var(--tw-content);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));content:var(--tw-content);--tw-content:"";content:var(--tw-content);content:var(--tw-content);background-color:var(--color-background);border-radius:3.40282e38px;display:block}:is(:is(.form,.field) input[type=checkbox][role=switch],.input[type=checkbox][role=switch]):is(.dark *):before{content:var(--tw-content);background-color:var(--color-foreground)}:is(:is(.form,.field) input[type=checkbox][role=switch],.input[type=checkbox][role=switch]):checked:before{content:var(--tw-content);margin-inline-start:calc(var(--spacing)*3.5)}:is(:is(.form,.field) input[type=checkbox][role=switch],.input[type=checkbox][role=switch]):is(.dark *):checked:before{content:var(--tw-content);background-color:var(--color-primary-foreground)}.table{caption-side:bottom;width:100%;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.table thead tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.table tbody tr:last-child{border-style:var(--tw-border-style);border-width:0}.table tfoot{border-top-style:var(--tw-border-style);background-color:var(--color-muted);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);border-top-width:1px}@supports (color:color-mix(in lab, red, red)){.table tfoot{background-color:color-mix(in oklab,var(--color-muted)50%,transparent)}}.table tfoot>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.table tr{border-bottom-style:var(--tw-border-style);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));border-bottom-width:1px}@media (hover:hover){.table tr:hover{background-color:var(--color-muted)}@supports (color:color-mix(in lab, red, red)){.table tr:hover{background-color:color-mix(in oklab,var(--color-muted)50%,transparent)}}}.table th{height:calc(var(--spacing)*10);padding-inline:calc(var(--spacing)*2);text-align:left;vertical-align:middle;--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;color:var(--color-foreground)}.table th:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.table th>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x)var(--tw-translate-y)}.table td{padding:calc(var(--spacing)*2);vertical-align:middle;white-space:nowrap}.table td:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.table td>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x)var(--tw-translate-y)}.table caption{margin-top:calc(var(--spacing)*4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-muted-foreground)}.tabs{gap:calc(var(--spacing)*2);flex-direction:column;display:flex}.tabs [role=tablist]{height:calc(var(--spacing)*9);border-radius:var(--radius-lg);background-color:var(--color-muted);width:fit-content;color:var(--color-muted-foreground);justify-content:center;align-items:center;padding:3px;display:inline-flex}.tabs [role=tablist] [role=tab]{justify-content:center;align-items:center;gap:calc(var(--spacing)*1.5);border-radius:var(--radius-md);border-style:var(--tw-border-style);height:calc(100% - 1px);padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;color:var(--color-foreground);transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));border-width:1px;border-color:#0000;flex:1;display:inline-flex}.tabs [role=tablist] [role=tab]:focus-visible{border-color:var(--color-ring);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){.tabs [role=tablist] [role=tab]:focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}.tabs [role=tablist] [role=tab]:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--color-ring)}.tabs [role=tablist] [role=tab]:disabled{pointer-events:none;opacity:.5}.tabs [role=tablist] [role=tab]:is(.dark *){color:var(--color-muted-foreground)}.tabs [role=tablist] [role=tab] svg{pointer-events:none;flex-shrink:0}.tabs [role=tablist] [role=tab] svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.tabs [role=tablist] [role=tab][aria-selected=true]{background-color:var(--color-background);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tabs [role=tablist] [role=tab][aria-selected=true]:is(.dark *){border-color:var(--color-input);background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){.tabs [role=tablist] [role=tab][aria-selected=true]:is(.dark *){background-color:color-mix(in oklab,var(--color-input)30%,transparent)}}.tabs [role=tablist] [role=tab][aria-selected=true]:is(.dark *){color:var(--color-foreground)}.tabs [role=tabpanel]{--tw-outline-style:none;outline-style:none;flex:1}:is(.form,.field) textarea,.textarea{field-sizing:content;min-height:calc(var(--spacing)*16);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-input);width:100%;padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-outline-style:none;background-color:#0000;outline-style:none;display:flex}:is(:is(.form,.field) textarea,.textarea)::placeholder{color:var(--color-muted-foreground)}:is(:is(.form,.field) textarea,.textarea):focus-visible{border-color:var(--color-ring);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) textarea,.textarea):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}:is(:is(.form,.field) textarea,.textarea):disabled{cursor:not-allowed;opacity:.5}:is(:is(.form,.field) textarea,.textarea)[aria-invalid=true]{border-color:var(--color-destructive);--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) textarea,.textarea)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}@media (min-width:48rem){:is(:is(.form,.field) textarea,.textarea){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}:is(:is(.form,.field) textarea,.textarea):is(.dark *){background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) textarea,.textarea):is(.dark *){background-color:color-mix(in oklab,var(--color-input)30%,transparent)}}:is(:is(.form,.field) textarea,.textarea):is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) textarea,.textarea):is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)40%,transparent)}}.toaster{pointer-events:none;bottom:calc(var(--spacing)*0);z-index:50;width:100%;padding:calc(var(--spacing)*4);flex-direction:column-reverse;display:flex;position:fixed}@media (min-width:40rem){.toaster{max-width:calc(var(--spacing)*90)}}.toaster:not([data-align]),.toaster[data-align=end]{right:calc(var(--spacing)*0)}.toaster[data-align=start]{left:calc(var(--spacing)*0)}.toaster[data-align=center]{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);left:50%}.toaster .toast{pointer-events:auto;margin-top:calc(var(--spacing)*4);width:100%;transition-property:grid-template-rows,opacity,margin;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;--tw-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out);grid-template-rows:1fr;animation:.3s ease-in-out toast-up;display:grid}.toaster .toast .toast-content{align-items:center;gap:calc(var(--spacing)*2.5);border-radius:var(--radius-lg);border-style:var(--tw-border-style);background-color:var(--color-popover);padding:calc(var(--spacing)*3);color:var(--color-popover-foreground);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-width:1px;font-size:13px;display:flex;overflow:hidden}.toaster .toast .toast-content svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);flex-shrink:0}.toaster .toast .toast-content section h2{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.toaster .toast .toast-content section p{word-break:break-all;color:var(--color-muted-foreground)}.toaster .toast .toast-content footer{gap:calc(var(--spacing)*2);flex-direction:column;margin-left:auto;display:flex}.toaster .toast .toast-content footer [data-toast-action],.toaster .toast .toast-content footer [data-toast-cancel]{height:calc(var(--spacing)*6);padding-inline:calc(var(--spacing)*2.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.toaster .toast[aria-hidden=true]{margin:calc(var(--spacing)*0);border-style:var(--tw-border-style);padding:calc(var(--spacing)*0);opacity:0;border-width:0;grid-template-rows:0fr;overflow:hidden}.toaster .toast[aria-hidden=true] .toast-content{border-style:var(--tw-border-style);border-width:0}[data-tooltip]{position:relative}[data-tooltip]:before{pointer-events:none;visibility:hidden;z-index:60;width:fit-content;max-width:var(--container-xs);--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y);text-overflow:ellipsis;white-space:nowrap;border-radius:var(--radius-md);background-color:var(--color-primary);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-primary-foreground);opacity:0;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-content:attr(data-tooltip);content:var(--tw-content);position:absolute;overflow:hidden}[data-tooltip]:hover:before{visibility:visible;--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y);opacity:1}[data-tooltip]:focus-visible:not(:hover):before{display:none}:is([data-tooltip]:not([data-side]),[data-tooltip][data-side=top]):before{content:var(--tw-content);content:var(--tw-content);margin-bottom:calc(var(--spacing)*1.5);content:var(--tw-content);--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y);bottom:100%}@media (hover:hover){:is([data-tooltip]:not([data-side]),[data-tooltip][data-side=top]):hover:before{content:var(--tw-content);--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}}[data-tooltip][data-side=bottom]:before{content:var(--tw-content);content:var(--tw-content);margin-top:calc(var(--spacing)*1.5);content:var(--tw-content);--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y);top:100%}@media (hover:hover){[data-tooltip][data-side=bottom]:hover:before{content:var(--tw-content);--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}}:is([data-tooltip]:not([data-side]),[data-tooltip][data-side=top],[data-tooltip][data-side=bottom])[data-align=start]:before{content:var(--tw-content);left:calc(var(--spacing)*0)}:is([data-tooltip]:not([data-side]),[data-tooltip][data-side=top],[data-tooltip][data-side=bottom])[data-align=end]:before{content:var(--tw-content);right:calc(var(--spacing)*0)}:is(:is([data-tooltip]:not([data-side]),[data-tooltip][data-side=top],[data-tooltip][data-side=bottom]):not([data-align]),:is([data-tooltip]:not([data-side]),[data-tooltip][data-side=top],[data-tooltip][data-side=bottom])[data-align=center]):before{content:var(--tw-content);content:var(--tw-content);--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);left:50%}[data-tooltip][data-side=left]:before{content:var(--tw-content);content:var(--tw-content);margin-right:calc(var(--spacing)*1.5);content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y);right:100%}@media (hover:hover){[data-tooltip][data-side=left]:hover:before{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}}[data-tooltip][data-side=right]:before{content:var(--tw-content);content:var(--tw-content);margin-left:calc(var(--spacing)*1.5);content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y);left:100%}@media (hover:hover){[data-tooltip][data-side=right]:hover:before{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}}:is([data-tooltip][data-side=left],[data-tooltip][data-side=right])[data-align=start]:before{content:var(--tw-content);top:calc(var(--spacing)*0)}:is([data-tooltip][data-side=left],[data-tooltip][data-side=right])[data-align=end]:before{content:var(--tw-content);bottom:calc(var(--spacing)*0)}:is(:is([data-tooltip][data-side=left],[data-tooltip][data-side=right]):not([data-align]),:is([data-tooltip][data-side=left],[data-tooltip][data-side=right])[data-align=center]):before{content:var(--tw-content);content:var(--tw-content);--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);top:50%}}@layer utilities{.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-22{top:calc(var(--spacing)*22)}.right-1\.5{right:calc(var(--spacing)*1.5)}.right-2\.5{right:calc(var(--spacing)*2.5)}.right-3{right:calc(var(--spacing)*3)}.bottom-0{bottom:calc(var(--spacing)*0)}.left-1\.5{left:calc(var(--spacing)*1.5)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.isolate{isolation:isolate}.z-10{z-index:10}.col-span-2{grid-column:span 2/span 2}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing)*0)}.mx-auto{margin-inline:auto}.my-4{margin-block:calc(var(--spacing)*4)}.my-6{margin-block:calc(var(--spacing)*6)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.mr-auto{margin-right:auto}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.-ml-1\.5{margin-left:calc(var(--spacing)*-1.5)}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.size-2\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.size-3{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.size-3\.5{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-7{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.size-8{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.size-9{width:calc(var(--spacing)*9);height:calc(var(--spacing)*9)}.size-10{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.h-2{height:calc(var(--spacing)*2)}.h-4{height:calc(var(--spacing)*4)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-full{height:100%}.max-h-64{max-height:calc(var(--spacing)*64)}.max-h-\[150px\]{max-height:150px}.max-h-\[200px\]{max-height:200px}.max-h-\[612px\]{max-height:612px}.max-h-\[650px\]{max-height:650px}.min-h-25{min-height:calc(var(--spacing)*25)}.min-h-27{min-height:calc(var(--spacing)*27)}.min-h-77{min-height:calc(var(--spacing)*77)}.min-h-\[350px\]{min-height:350px}.w-0{width:calc(var(--spacing)*0)}.w-1\/2{width:50%}.w-2\/3{width:66.6667%}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing)*4)}.w-7\.5{width:calc(var(--spacing)*7.5)}.w-10{width:calc(var(--spacing)*10)}.w-48{width:calc(var(--spacing)*48)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-\[100px\]{width:100px}.w-\[150px\]{width:150px}.w-\[180px\]{width:180px}.w-\[200px\]{width:200px}.w-\[271px\]{width:271px}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.max-w-72{max-width:calc(var(--spacing)*72)}.max-w-\[75\%\]{max-width:75%}.max-w-\[200px\]{max-width:200px}.max-w-\[300px\]{max-width:300px}.max-w-\[450px\]{max-width:450px}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-screen-lg{max-width:var(--breakpoint-lg)}.max-w-screen-md{max-width:var(--breakpoint-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-5{min-width:calc(var(--spacing)*5)}.min-w-32{min-width:calc(var(--spacing)*32)}.min-w-56{min-width:calc(var(--spacing)*56)}.min-w-\[8rem\]{min-width:8rem}.flex-1{flex:1}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0\.5{--tw-translate-y:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.scroll-m-20{scroll-margin:calc(var(--spacing)*20)}.scroll-mt-14{scroll-margin-top:calc(var(--spacing)*14)}.scroll-mt-16{scroll-margin-top:calc(var(--spacing)*16)}.list-decimal{list-style-type:decimal}.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))}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-start{justify-content:flex-start}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1\.5{column-gap:calc(var(--spacing)*1.5)}.gap-x-2{column-gap:calc(var(--spacing)*2)}.gap-x-4{column-gap:calc(var(--spacing)*4)}.gap-x-10{column-gap:calc(var(--spacing)*10)}:where(.-space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-4{row-gap:calc(var(--spacing)*4)}.gap-y-6{row-gap:calc(var(--spacing)*6)}.gap-y-10{row-gap:calc(var(--spacing)*10)}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[2px\]{border-radius:2px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-r-0{border-right-style:var(--tw-border-style);border-right-width:0}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-amber-50{border-color:var(--color-amber-50)}.border-border,.border-border\/50{border-color:var(--color-border)}@supports (color:color-mix(in lab, red, red)){.border-border\/50{border-color:color-mix(in oklab,var(--color-border)50%,transparent)}}.border-muted{border-color:var(--color-muted)}.border-transparent{border-color:#0000}.\!bg-muted\/40{background-color:var(--color-muted)!important}@supports (color:color-mix(in lab, red, red)){.\!bg-muted\/40{background-color:color-mix(in oklab,var(--color-muted)40%,transparent)!important}}.bg-accent{background-color:var(--color-accent)}.bg-amber-50{background-color:var(--color-amber-50)}.bg-background{background-color:var(--color-background)}.bg-card{background-color:var(--color-card)}.bg-foreground{background-color:var(--color-foreground)}.bg-muted{background-color:var(--color-muted)}.bg-muted-foreground{background-color:var(--color-muted-foreground)}.bg-muted\/50{background-color:var(--color-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/50{background-color:color-mix(in oklab,var(--color-muted)50%,transparent)}}.bg-primary,.bg-primary\/20{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/20{background-color:color-mix(in oklab,var(--color-primary)20%,transparent)}}.bg-sidebar-primary{background-color:var(--color-sidebar-primary)}.bg-transparent{background-color:#0000}.object-cover{object-fit:cover}.\!p-3\.5{padding:calc(var(--spacing)*3.5)!important}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-10{padding:calc(var(--spacing)*10)}.px-0{padding-inline:calc(var(--spacing)*0)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-9{padding-inline:calc(var(--spacing)*9)}.px-\[0\.3rem\]{padding-inline:.3rem}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-\[0\.2rem\]{padding-block:.2rem}.pt-1\.5{padding-top:calc(var(--spacing)*1.5)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-15{padding-top:calc(var(--spacing)*15)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-9{padding-right:calc(var(--spacing)*9)}.pr-10{padding-right:calc(var(--spacing)*10)}.pr-12{padding-right:calc(var(--spacing)*12)}.pr-16{padding-right:calc(var(--spacing)*16)}.pr-20{padding-right:calc(var(--spacing)*20)}.pr-24{padding-right:calc(var(--spacing)*24)}.pr-26{padding-right:calc(var(--spacing)*26)}.pr-30{padding-right:calc(var(--spacing)*30)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.pb-17{padding-bottom:calc(var(--spacing)*17)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-7{padding-left:calc(var(--spacing)*7)}.pl-8{padding-left:calc(var(--spacing)*8)}.pl-8\.5{padding-left:calc(var(--spacing)*8.5)}.pl-9{padding-left:calc(var(--spacing)*9)}.pl-15{padding-left:calc(var(--spacing)*15)}.pl-21{padding-left:calc(var(--spacing)*21)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-sm\/relaxed{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[1\.05rem\]{font-size:1.05rem}.leading-none{--tw-leading:1;line-height:1}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-900{color:var(--color-amber-900)}.text-blue-500{color:var(--color-blue-500)}.text-destructive{color:var(--color-destructive)}.text-foreground{color:var(--color-foreground)}.text-green-500{color:var(--color-green-500)}.text-muted-foreground{color:var(--color-muted-foreground)}.text-neutral-800{color:var(--color-neutral-800)}.text-primary-foreground{color:var(--color-primary-foreground)}.text-purple-500{color:var(--color-purple-500)}.text-red-500{color:var(--color-red-500)}.text-sidebar-primary-foreground{color:var(--color-sidebar-primary-foreground)}.text-yellow-500{color:var(--color-yellow-500)}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-100{opacity:1}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-offset-background{--tw-ring-offset-color:var(--color-background)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-400{--tw-duration:.4s;transition-duration:.4s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-open\:rotate-180:is(:where(.group):is([open],:popover-open,:open) *){rotate:180deg}.group-aria-checked\:visible:is(:where(.group)[aria-checked=true] *){visibility:visible}.group-data-\[copied\=true\]\:block:is(:where(.group)[data-copied=true] *){display:block}.group-data-\[copied\=true\]\:hidden:is(:where(.group)[data-copied=true] *){display:none}.group-\[\.copied\]\:block:is(:where(.group).copied *){display:block}.group-\[\.copied\]\:hidden:is(:where(.group).copied *){display:none}.peer-checked\:border-primary:is(:where(.peer):checked~*){border-color:var(--color-primary)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.checked\:border-blue-600:checked{border-color:var(--color-blue-600)}.checked\:border-green-600:checked{border-color:var(--color-green-600)}.checked\:bg-blue-500:checked{background-color:var(--color-blue-500)}.checked\:bg-blue-600:checked{background-color:var(--color-blue-600)}.checked\:bg-green-600:checked{background-color:var(--color-green-600)}.checked\:before\:bg-background:checked:before{content:var(--tw-content);background-color:var(--color-background)}.checked\:after\:bg-white:checked:after{content:var(--tw-content);background-color:var(--color-white)}@media (hover:hover){:where(.hover\:space-x-1:hover>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}.hover\:bg-accent\/50:hover{background-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/50:hover{background-color:color-mix(in oklab,var(--color-accent)50%,transparent)}}.hover\:bg-destructive\/10:hover{background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/10:hover{background-color:color-mix(in oklab,var(--color-destructive)10%,transparent)}}.hover\:bg-foreground:hover{background-color:var(--color-foreground)}.hover\:bg-muted:hover{background-color:var(--color-muted)}.hover\:text-accent-foreground:hover{color:var(--color-accent-foreground)}.hover\:text-foreground:hover{color:var(--color-foreground)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:bg-destructive\/10:focus{background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.focus\:bg-destructive\/10:focus{background-color:color-mix(in oklab,var(--color-destructive)10%,transparent)}}.focus\:text-destructive:focus{color:var(--color-destructive)}.focus-visible\:border-ring:focus-visible{border-color:var(--color-ring)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-ring:focus-visible,.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-50:disabled{opacity:.5}.has-\[\:checked\]\:border-primary:has(:checked){border-color:var(--color-primary)}.has-\[\:checked\]\:bg-primary\/5:has(:checked){background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.has-\[\:checked\]\:bg-primary\/5:has(:checked){background-color:color-mix(in oklab,var(--color-primary)5%,transparent)}}.has-\[input\[type\=\'checkbox\'\]\:checked\]\:border-blue-600:has(:is(input[type=checkbox]:checked)){border-color:var(--color-blue-600)}.has-\[input\[type\=\'checkbox\'\]\:checked\]\:bg-blue-50:has(:is(input[type=checkbox]:checked)){background-color:var(--color-blue-50)}.has-\[input\[type\=\'radio\'\]\:checked\]\:border-green-600:has(:is(input[type=radio]:checked)){border-color:var(--color-green-600)}.has-\[input\[type\=\'radio\'\]\:checked\]\:bg-green-50:has(:is(input[type=radio]:checked)){background-color:var(--color-green-50)}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing)*2.5)}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--color-destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}.aria-pressed\:bg-transparent[aria-pressed=true]{background-color:#0000}.aria-pressed\:text-blue-600[aria-pressed=true]{color:var(--color-blue-600)}@media (hover:hover){.aria-pressed\:hover\:bg-accent[aria-pressed=true]:hover{background-color:var(--color-accent)}}@media not all and (min-width:40rem){.max-sm\:flex-col{flex-direction:column}}@media (min-width:40rem){.sm\:max-w-\[425px\]{max-width:425px}.sm\:gap-2\.5{gap:calc(var(--spacing)*2.5)}.sm\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.sm\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.sm\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}}@media (min-width:48rem){.md\:ml-4{margin-left:calc(var(--spacing)*4)}.md\:w-\[239px\]{width:239px}.md\:max-w-\[200px\]{max-width:200px}.md\:flex-row{flex-direction:row}.md\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.md\:p-6{padding:calc(var(--spacing)*6)}.md\:p-12{padding:calc(var(--spacing)*12)}.md\:pl-8{padding-left:calc(var(--spacing)*8)}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}}@media (min-width:64rem){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:80rem){.xl\:block{display:block}.xl\:p-12{padding:calc(var(--spacing)*12)}.xl\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}}@container (min-width:28rem){.\@md\:w-auto{width:auto}.\@md\:min-w-sm{min-width:var(--container-sm)}}.dark\:block:is(.dark *){display:block}.dark\:hidden:is(.dark *){display:none}.dark\:border-amber-950:is(.dark *){border-color:var(--color-amber-950)}.dark\:bg-amber-950:is(.dark *){background-color:var(--color-amber-950)}.dark\:text-amber-100:is(.dark *){color:var(--color-amber-100)}.dark\:text-neutral-300:is(.dark *){color:var(--color-neutral-300)}.dark\:checked\:border-blue-700:is(.dark *):checked{border-color:var(--color-blue-700)}.dark\:checked\:bg-blue-600:is(.dark *):checked{background-color:var(--color-blue-600)}.dark\:checked\:bg-blue-700:is(.dark *):checked{background-color:var(--color-blue-700)}.dark\:checked\:bg-input\/30:is(.dark *):checked{background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){.dark\:checked\:bg-input\/30:is(.dark *):checked{background-color:color-mix(in oklab,var(--color-input)30%,transparent)}}.dark\:checked\:before\:bg-primary:is(.dark *):checked:before{content:var(--tw-content);background-color:var(--color-primary)}@media (hover:hover){.dark\:hover\:bg-destructive\/20:is(.dark *):hover{background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-destructive\/20:is(.dark *):hover{background-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}}.dark\:focus\:bg-destructive\/20:is(.dark *):focus{background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:focus\:bg-destructive\/20:is(.dark *):focus{background-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}.dark\:has-\[\:checked\]\:bg-primary\/10:is(.dark *):has(:checked){background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.dark\:has-\[\:checked\]\:bg-primary\/10:is(.dark *):has(:checked){background-color:color-mix(in oklab,var(--color-primary)10%,transparent)}}.dark\:has-\[input\[type\=\'checkbox\'\]\:checked\]\:border-blue-900:is(.dark *):has(:is(input[type=checkbox]:checked)){border-color:var(--color-blue-900)}.dark\:has-\[input\[type\=\'checkbox\'\]\:checked\]\:bg-blue-950:is(.dark *):has(:is(input[type=checkbox]:checked)){background-color:var(--color-blue-950)}.dark\:has-\[input\[type\=\'radio\'\]\:checked\]\:border-green-900:is(.dark *):has(:is(input[type=radio]:checked)){border-color:var(--color-green-900)}.dark\:has-\[input\[type\=\'radio\'\]\:checked\]\:bg-green-950:is(.dark *):has(:is(input[type=radio]:checked)){background-color:var(--color-green-950)}.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)40%,transparent)}}@media (hover:hover){.dark\:aria-pressed\:hover\:bg-accent\/50:is(.dark *)[aria-pressed=true]:hover{background-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.dark\:aria-pressed\:hover\:bg-accent\/50:is(.dark *)[aria-pressed=true]:hover{background-color:color-mix(in oklab,var(--color-accent)50%,transparent)}}}.\[\&_\[data-new-link\]\:\:after\]\:ml-auto [data-new-link]:after{margin-left:auto}.\[\&_\[data-new-link\]\:\:after\]\:rounded-md [data-new-link]:after{border-radius:var(--radius-md)}.\[\&_\[data-new-link\]\:\:after\]\:bg-sidebar-primary [data-new-link]:after{background-color:var(--color-sidebar-primary)}.\[\&_\[data-new-link\]\:\:after\]\:px-2 [data-new-link]:after{padding-inline:calc(var(--spacing)*2)}.\[\&_\[data-new-link\]\:\:after\]\:py-0\.5 [data-new-link]:after{padding-block:calc(var(--spacing)*.5)}.\[\&_\[data-new-link\]\:\:after\]\:text-xs [data-new-link]:after{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[data-new-link\]\:\:after\]\:font-medium [data-new-link]:after{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[data-new-link\]\:\:after\]\:text-sidebar-primary-foreground [data-new-link]:after{color:var(--color-sidebar-primary-foreground)}.\[\&_\[data-new-link\]\:\:after\]\:content-\[\'New\'\] [data-new-link]:after{--tw-content:"New";content:var(--tw-content)}.\[\&_a\]\:inline-block a{display:inline-block}.\[\&_a\]\:text-muted-foreground a{color:var(--color-muted-foreground)}.\[\&_a\]\:no-underline a{text-decoration-line:none}.\[\&_a\]\:transition-colors a{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.\[\&_a\]\:hover\:text-foreground a:hover{color:var(--color-foreground)}}.\[\&_img\]\:size-8 img{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.\[\&_img\]\:size-12 img{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.\[\&_img\]\:shrink-0 img{flex-shrink:0}.\[\&_img\]\:rounded-full img{border-radius:3.40282e38px}.\[\&_img\]\:object-cover img{object-fit:cover}.\[\&_img\]\:ring-2 img{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.\[\&_img\]\:ring-background img{--tw-ring-color:var(--color-background)}.\[\&_img\]\:ring-card img{--tw-ring-color:var(--color-card)}.\[\&_img\]\:grayscale img{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.\[\&_img\]\:transition-all img{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.\[\&_img\]\:duration-300 img{--tw-duration:.3s;transition-duration:.3s}.\[\&_img\]\:ease-in-out img{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.\[\&_li\]\:mt-0 li{margin-top:calc(var(--spacing)*0)}.\[\&_li\]\:pt-2 li{padding-top:calc(var(--spacing)*2)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:size-5 svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\]\:\!text-destructive svg{color:var(--color-destructive)!important}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-6 svg:not([class*=size-]){width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.\[\&_ul\]\:m-0 ul{margin:calc(var(--spacing)*0)}.\[\&_ul\]\:list-none ul{list-style-type:none}.\[\&_ul_ul\]\:pl-4 ul ul{padding-left:calc(var(--spacing)*4)}@media (min-width:48rem){:is(.md\:\*\:\[\.card\]\:basis-1\/4>*).card{flex-basis:25%}}.\[a\]\:transition-colors:is(a){transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.\[a\]\:hover\:bg-accent\/50:is(a):hover{background-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.\[a\]\:hover\:bg-accent\/50:is(a):hover{background-color:color-mix(in oklab,var(--color-accent)50%,transparent)}}}.\[\&\>a\]\:underline>a{text-decoration-line:underline}.\[\&\>a\]\:underline-offset-4>a{text-underline-offset:4px}.\[\&\>a\:hover\]\:text-primary>a:hover{color:var(--color-primary)}.\[\&\>svg\]\:mb-3>svg{margin-bottom:calc(var(--spacing)*3)}.\[\&\>svg\]\:size-3>svg{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:size-6>svg{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.aria-pressed\:\[\&\>svg\]\:fill-blue-600[aria-pressed=true]>svg{fill:var(--color-blue-600)}}:root{--radius:.625rem;--background:oklch(1 0 0);--foreground:oklch(.145 0 0);--card:oklch(1 0 0);--card-foreground:oklch(.145 0 0);--popover:oklch(1 0 0);--popover-foreground:oklch(.145 0 0);--primary:oklch(.205 0 0);--primary-foreground:oklch(.985 0 0);--secondary:oklch(.97 0 0);--secondary-foreground:oklch(.205 0 0);--muted:oklch(.97 0 0);--muted-foreground:oklch(.556 0 0);--accent:oklch(.97 0 0);--accent-foreground:oklch(.205 0 0);--destructive:oklch(.577 .245 27.325);--border:oklch(.922 0 0);--input:oklch(.922 0 0);--ring:oklch(.708 0 0);--chart-1:oklch(.646 .222 41.116);--chart-2:oklch(.6 .118 184.704);--chart-3:oklch(.398 .07 227.392);--chart-4:oklch(.828 .189 84.429);--chart-5:oklch(.769 .188 70.08);--sidebar:oklch(.985 0 0);--sidebar-foreground:oklch(.145 0 0);--sidebar-primary:oklch(.205 0 0);--sidebar-primary-foreground:oklch(.985 0 0);--sidebar-accent:oklch(.97 0 0);--sidebar-accent-foreground:oklch(.205 0 0);--sidebar-border:oklch(.922 0 0);--sidebar-ring:oklch(.708 0 0);--sidebar-width:16rem;--sidebar-mobile-width:18rem;--scrollbar-track:transparent;--scrollbar-thumb:#0000004d;--scrollbar-width:6px;--scrollbar-radius:6px;--chevron-down-icon:url("data:image/svg+xml;utf8,");--chevron-down-icon-50:url("data:image/svg+xml;utf8,");--check-icon:url("data:image/svg+xml;utf8,")}.dark{--background:oklch(.145 0 0);--foreground:oklch(.985 0 0);--card:oklch(.205 0 0);--card-foreground:oklch(.985 0 0);--popover:oklch(.269 0 0);--popover-foreground:oklch(.985 0 0);--primary:oklch(.922 0 0);--primary-foreground:oklch(.205 0 0);--secondary:oklch(.269 0 0);--secondary-foreground:oklch(.985 0 0);--muted:oklch(.269 0 0);--muted-foreground:oklch(.708 0 0);--accent:oklch(.371 0 0);--accent-foreground:oklch(.985 0 0);--destructive:oklch(.704 .191 22.216);--border:oklch(1 0 0/10%);--input:oklch(1 0 0/15%);--ring:oklch(.556 0 0);--chart-1:oklch(.488 .243 264.376);--chart-2:oklch(.696 .17 162.48);--chart-3:oklch(.769 .188 70.08);--chart-4:oklch(.627 .265 303.9);--chart-5:oklch(.645 .246 16.439);--sidebar:oklch(.205 0 0);--sidebar-foreground:oklch(.985 0 0);--sidebar-primary:oklch(.488 .243 264.376);--sidebar-primary-foreground:oklch(.985 0 0);--sidebar-accent:oklch(.269 0 0);--sidebar-accent-foreground:oklch(.985 0 0);--sidebar-border:oklch(1 0 0/10%);--sidebar-ring:oklch(.439 0 0);--scrollbar-thumb:#ffffff4d;--chevron-down-icon:url("data:image/svg+xml;utf8,");--chevron-down-icon-50:url("data:image/svg+xml;utf8,");--check-icon:url("data:image/svg+xml;utf8,");color-scheme:dark}.button-group{isolation:isolate;align-items:stretch;width:fit-content;display:inline-flex}.button-group>:focus-visible,.button-group>:is(.dropdown-menu,.popover)>button:focus-visible{z-index:10;position:relative}.button-group>hr[role=separator]{margin:calc(var(--spacing)*0);height:auto;width:calc(var(--spacing)*0);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-input);flex-shrink:0;align-self:stretch}.button-group:not([data-orientation=vertical])>:not(:first-child),.button-group:not([data-orientation=vertical])>:is(.dropdown-menu,.popover):not(:first-child)>button{border-left-style:var(--tw-border-style);border-left-width:0;border-top-left-radius:0;border-bottom-left-radius:0}.button-group:not([data-orientation=vertical])>:not(:last-child),.button-group:not([data-orientation=vertical])>:is(.dropdown-menu,.popover):not(:last-child)>button{border-top-right-radius:0;border-bottom-right-radius:0}.button-group[data-orientation=vertical]{flex-direction:column}.button-group[data-orientation=vertical]>hr[role=separator]{width:auto;height:1px}.button-group[data-orientation=vertical]>:not(:first-child){border-top-style:var(--tw-border-style);border-top-width:0;border-top-left-radius:0;border-top-right-radius:0}.button-group[data-orientation=vertical]>:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0}@media not all and (min-width:48rem){.sidebar:not([data-sidebar-initialized]){display:none}:is(.sidebar:not([aria-hidden]),.sidebar[aria-hidden=false]){inset:calc(var(--spacing)*0);z-index:40;background-color:#00000080;position:fixed}@supports (color:color-mix(in lab, red, red)){:is(.sidebar:not([aria-hidden]),.sidebar[aria-hidden=false]){background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}}.sidebar nav{inset-block:calc(var(--spacing)*0);z-index:50;width:var(--sidebar-mobile-width);background-color:var(--color-sidebar);color:var(--color-sidebar-foreground);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;--tw-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out);flex-direction:column;display:flex;position:fixed}@media (min-width:48rem){.sidebar nav{width:var(--sidebar-width)}}.sidebar+*{transition-property:margin;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;--tw-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out)}:is(.sidebar:not([data-side]),.sidebar[data-side=left]) nav{left:calc(var(--spacing)*0);border-right-style:var(--tw-border-style);border-right-width:1px}:is(.sidebar:not([data-side]),.sidebar[data-side=left])+*{position:relative}@media (min-width:48rem){:is(.sidebar:not([data-side]),.sidebar[data-side=left])+*{margin-left:var(--sidebar-width)}}:is(.sidebar:not([data-side]),.sidebar[data-side=left])[aria-hidden=true] nav{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}@media (min-width:48rem){:is(.sidebar:not([data-side]),.sidebar[data-side=left])[aria-hidden=true]+*{margin-left:calc(var(--spacing)*0)}}.sidebar[data-side=right] nav{right:calc(var(--spacing)*0);border-left-style:var(--tw-border-style);border-left-width:1px}.sidebar[data-side=right]+*{position:relative}@media (min-width:48rem){.sidebar[data-side=right]+*{margin-right:var(--sidebar-width)}}.sidebar[data-side=right][aria-hidden=true] nav{--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}@media (min-width:48rem){.sidebar[data-side=right][aria-hidden=true]+*{margin-right:calc(var(--spacing)*0)}}.sidebar nav>header,.sidebar nav>footer{gap:calc(var(--spacing)*2);padding:calc(var(--spacing)*2);flex-direction:column;display:flex}.sidebar nav [role=separator]{margin-inline:calc(var(--spacing)*2);border-color:var(--color-sidebar-border);width:auto}.sidebar nav>section{min-height:calc(var(--spacing)*0);gap:calc(var(--spacing)*2);flex-direction:column;flex:1;display:flex;overflow-y:auto}.sidebar nav>section>[role=group]{width:100%;min-width:calc(var(--spacing)*0);padding:calc(var(--spacing)*2);flex-direction:column;display:flex;position:relative}.sidebar nav>section h3{height:calc(var(--spacing)*8);border-radius:var(--radius-md);padding-inline:calc(var(--spacing)*2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-sidebar-foreground);--tw-ring-color:var(--color-sidebar-ring);--tw-outline-style:none;transition-property:margin,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;--tw-ease:linear;outline-style:none;flex-shrink:0;align-items:center;transition-duration:.2s;transition-timing-function:linear;display:flex}@supports (color:color-mix(in lab, red, red)){.sidebar nav>section h3{color:color-mix(in oklab,var(--color-sidebar-foreground)70%,transparent)}}@media (forced-colors:active){.sidebar nav>section h3{outline-offset:2px;outline:2px solid #0000}}.sidebar nav>section h3:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.sidebar nav>section h3>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);flex-shrink:0}.sidebar nav>section ul{width:100%;min-width:calc(var(--spacing)*0);gap:calc(var(--spacing)*1);flex-direction:column;display:flex}.sidebar nav>section ul li{position:relative}.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary{align-items:center;gap:calc(var(--spacing)*2);border-radius:var(--radius-md);width:100%;padding:calc(var(--spacing)*2);text-align:left;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-ring-color:var(--color-sidebar-ring);--tw-outline-style:none;transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));outline-style:none;display:flex;overflow:hidden}@media (forced-colors:active){:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary){outline-offset:2px;outline:2px solid #0000}}@media (hover:hover){:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary):hover{background-color:var(--color-sidebar-accent);color:var(--color-sidebar-accent-foreground)}}:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary):focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary):active{background-color:var(--color-sidebar-accent);color:var(--color-sidebar-accent-foreground)}:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary):disabled,:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary)[aria-disabled=true]{pointer-events:none;opacity:.5}:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary)>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary)>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);flex-shrink:0}:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary)[aria-current=page]{background-color:var(--color-sidebar-accent);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-sidebar-accent-foreground)}@media (hover:hover){:is(:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary):not([data-variant]),:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary)[data-variant=default]):hover{background-color:var(--color-sidebar-accent);color:var(--color-sidebar-accent-foreground)}}:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary)[data-variant=outline]{background-color:var(--color-background);--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary)[data-variant=outline]:hover{background-color:var(--color-sidebar-accent);color:var(--color-sidebar-accent-foreground);--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary):not([data-size]),:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary)[data-size=default]{height:calc(var(--spacing)*8);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary)[data-size=sm]{height:calc(var(--spacing)*7);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary)[data-size=lg]{height:calc(var(--spacing)*12);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary)[data-size=lg]:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.sidebar nav>section ul li>details:not([open])>summary:after{rotate:-90deg}.sidebar nav>section ul li>details>summary:after{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5);background-color:var(--color-primary);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-ease:linear;--tw-content:"";content:var(--tw-content);-webkit-mask-image:var(--chevron-down-icon);-webkit-mask-image:var(--chevron-down-icon);mask-image:var(--chevron-down-icon);margin-left:auto;transition-timing-function:linear;display:block;-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:1rem;mask-size:1rem;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.sidebar nav>section ul li>details::details-content{padding-inline:calc(var(--spacing)*3.5)}.sidebar nav>section ul ul{width:100%;min-width:calc(var(--spacing)*0);--tw-translate-x:1px;translate:var(--tw-translate-x)var(--tw-translate-y);gap:calc(var(--spacing)*1);border-left-style:var(--tw-border-style);border-left-width:1px;border-color:var(--color-sidebar-border);padding-inline:calc(var(--spacing)*2.5);padding-block:calc(var(--spacing)*.5);flex-direction:column;display:flex}@keyframes toast-up{0%{opacity:0;transform:translateY(100%)}}.htmx-indicator{visibility:hidden;opacity:0;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));transition-behavior:allow-discrete}.htmx-indicator:not(.htmx-request){display:none}.htmx-request,.htmx-request.htmx-indicator{visibility:visible;opacity:1}.content>h2{margin-top:calc(var(--spacing)*12);margin-bottom:calc(var(--spacing)*6);scroll-margin:calc(var(--spacing)*22);font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.content>h2:first-child{margin-top:calc(var(--spacing)*0)}@media (min-width:64rem){.content>h2{margin-top:calc(var(--spacing)*20)}}.content>h3{margin-top:calc(var(--spacing)*8);margin-bottom:calc(var(--spacing)*6);scroll-margin:calc(var(--spacing)*22);font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.content>h4{margin-block:calc(var(--spacing)*6);scroll-margin:calc(var(--spacing)*22);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.content .prose{margin-block:calc(var(--spacing)*6)}.content .prose a{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);text-underline-offset:4px;text-decoration-line:underline}.content .prose code:not(pre>code){border-radius:var(--radius-md);background-color:var(--color-muted);font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:.2rem;padding-inline:.3rem;position:relative}@supports (color:color-mix(in lab, red, red)){.content .prose code:not(pre>code){background-color:color-mix(in oklab,var(--color-muted)50%,transparent)}}.content .prose blockquote{border-left-style:var(--tw-border-style);border-left-width:4px;border-color:var(--color-border);padding-left:calc(var(--spacing)*4)}.content .prose ol{margin-left:calc(var(--spacing)*6);list-style-type:decimal}.content .prose ul{margin-left:calc(var(--spacing)*6);list-style-type:disc}:is(.content .prose ol,.content .prose ul) li{margin-top:calc(var(--spacing)*2)}.content .prose dl{margin-block:calc(var(--spacing)*6);border-bottom-style:var(--tw-border-style);padding-bottom:calc(var(--spacing)*3);border-bottom-width:1px}.content .prose dl dt{margin-top:calc(var(--spacing)*3);border-top-style:var(--tw-border-style);padding-top:calc(var(--spacing)*3);border-top-width:1px}.content .prose dl dt:first-child{margin-top:calc(var(--spacing)*0)}.content .prose dl dd{margin-top:calc(var(--spacing)*2)}.content .prose dl dl{margin-block:calc(var(--spacing)*0);margin-top:calc(var(--spacing)*4);border-bottom-style:var(--tw-border-style);padding-bottom:calc(var(--spacing)*0);padding-left:calc(var(--spacing)*8);border-bottom-width:0}.content .prose b,.content .prose strong{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.content .prose>p,.content .prose>blockquote,.content .prose>ul,.content .prose>ol,.content .prose>dl,.content .prose>table,.content .prose>pre,.content .prose>p{margin-block:calc(var(--spacing)*6)}.content .prose>:first-child{margin-top:calc(var(--spacing)*0)!important}.content .prose>:last-child{margin-bottom:calc(var(--spacing)*0)!important}.content .step{counter-increment:step}.content .step:before{margin-right:calc(var(--spacing)*2);height:calc(var(--spacing)*8);width:calc(var(--spacing)*8);border-style:var(--tw-border-style);border-width:4px;border-color:var(--color-background);background-color:var(--color-muted);text-align:center;text-indent:-1px;font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);content:counter(step);border-radius:3.40282e38px;justify-content:center;align-items:center;display:inline-flex;position:absolute}@media (min-width:48rem){.content .step:before{height:calc(var(--spacing)*9);width:calc(var(--spacing)*9);margin-top:-4px;margin-left:-50px}}.content .step>h3{min-height:calc(var(--spacing)*8);align-items:center;display:flex}@media not all and (min-width:48rem){.content .step>h3{margin-left:calc(var(--spacing)*10)}}:root{--hljs-bg:#fff;--hljs-color:#24292e;--hljs-keyword:#d73a49;--hljs-title:#6f42c1;--hljs-literal:#005cc5;--hljs-string:#032f62;--hljs-symbol:#e36209;--hljs-comment:#6a737d;--hljs-tag:#22863a;--hljs-section:#005cc5;--hljs-bullet:#735c0f;--hljs-addition-color:#22863a;--hljs-addition-bg:#f0fff4;--hljs-deletion-color:#b31d28;--hljs-deletion-bg:#ffeef0}html.dark{--hljs-bg:#0d1117;--hljs-color:#c9d1d9;--hljs-keyword:#ff7b72;--hljs-title:#d2a8ff;--hljs-literal:#79c0ff;--hljs-string:#a5d6ff;--hljs-symbol:#ffa657;--hljs-comment:#8b949e;--hljs-tag:#7ee787;--hljs-section:#1f6feb;--hljs-bullet:#f2cc60;--hljs-addition-color:#aff5b4;--hljs-addition-bg:#033a16;--hljs-deletion-color:#ffdcd7;--hljs-deletion-bg:#67060c}pre code.hljs{padding:1em;display:block;overflow-x:auto}code.hljs{padding:3px 5px}.hljs{color:var(--hljs-color);background:var(--hljs-bg)}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:var(--hljs-keyword)}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:var(--hljs-title)}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:var(--hljs-literal)}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:var(--hljs-string)}.hljs-built_in,.hljs-symbol{color:var(--hljs-symbol)}.hljs-code,.hljs-comment,.hljs-formula{color:var(--hljs-comment)}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:var(--hljs-tag)}.hljs-subst{color:var(--hljs-color)}.hljs-section{color:var(--hljs-section);font-weight:700}.hljs-bullet{color:var(--hljs-bullet)}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-addition{color:var(--hljs-addition-color);background-color:var(--hljs-addition-bg)}.hljs-deletion{color:var(--hljs-deletion-color);background-color:var(--hljs-deletion-bg)}.theme-claude:root{--background:oklch(.98 .01 95.1);--foreground:oklch(.34 .03 95.72);--card:oklch(.98 .01 95.1);--card-foreground:oklch(.19 0 106.59);--popover:oklch(1 0 0);--popover-foreground:oklch(.27 .02 98.94);--primary:oklch(.62 .14 39.04);--primary-foreground:oklch(1 0 0);--secondary:oklch(.92 .01 92.99);--secondary-foreground:oklch(.43 .02 98.6);--muted:oklch(.93 .02 90.24);--muted-foreground:oklch(.61 .01 97.42);--accent:oklch(.92 .01 92.99);--accent-foreground:oklch(.27 .02 98.94);--destructive:oklch(.19 0 106.59);--destructive-foreground:oklch(1 0 0);--border:oklch(.88 .01 97.36);--input:oklch(.76 .02 98.35);--ring:oklch(.59 .17 253.06);--chart-1:oklch(.56 .13 43);--chart-2:oklch(.69 .16 290.41);--chart-3:oklch(.88 .03 93.13);--chart-4:oklch(.88 .04 298.18);--chart-5:oklch(.56 .13 42.06);--sidebar:oklch(.97 .01 98.88);--sidebar-foreground:oklch(.36 .01 106.65);--sidebar-primary:oklch(.62 .14 39.04);--sidebar-primary-foreground:oklch(.99 0 0);--sidebar-accent:oklch(.92 .01 92.99);--sidebar-accent-foreground:oklch(.33 0 0);--sidebar-border:oklch(.94 0 0);--sidebar-ring:oklch(.77 0 0);--font-sans:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--radius:.5rem;--shadow-2xs:0 1px 3px 0px #0000000d;--shadow-xs:0 1px 3px 0px #0000000d;--shadow-sm:0 1px 3px 0px #0000001a,0 1px 2px -1px #0000001a;--shadow:0 1px 3px 0px #0000001a,0 1px 2px -1px #0000001a;--shadow-md:0 1px 3px 0px #0000001a,0 2px 4px -1px #0000001a;--shadow-lg:0 1px 3px 0px #0000001a,0 4px 6px -1px #0000001a;--shadow-xl:0 1px 3px 0px #0000001a,0 8px 10px -1px #0000001a;--shadow-2xl:0 1px 3px 0px #00000040}.theme-claude.dark{--background:oklch(.27 0 106.64);--foreground:oklch(.81 .01 93.01);--card:oklch(.27 0 106.64);--card-foreground:oklch(.98 .01 95.1);--popover:oklch(.31 0 106.6);--popover-foreground:oklch(.92 0 106.48);--primary:oklch(.67 .13 38.76);--primary-foreground:oklch(1 0 0);--secondary:oklch(.98 .01 95.1);--secondary-foreground:oklch(.31 0 106.6);--muted:oklch(.22 0 106.71);--muted-foreground:oklch(.77 .02 99.07);--accent:oklch(.21 .01 95.42);--accent-foreground:oklch(.97 .01 98.88);--destructive:oklch(.64 .21 25.33);--destructive-foreground:oklch(1 0 0);--border:oklch(.36 .01 106.89);--input:oklch(.43 .01 100.22);--ring:oklch(.59 .17 253.06);--chart-1:oklch(.56 .13 43);--chart-2:oklch(.69 .16 290.41);--chart-3:oklch(.21 .01 95.42);--chart-4:oklch(.31 .05 289.32);--chart-5:oklch(.56 .13 42.06);--sidebar:oklch(.24 0 67.71);--sidebar-foreground:oklch(.81 .01 93.01);--sidebar-primary:oklch(.33 0 0);--sidebar-primary-foreground:oklch(.99 0 0);--sidebar-accent:oklch(.17 0 106.62);--sidebar-accent-foreground:oklch(.81 .01 93.01);--sidebar-border:oklch(.94 0 0);--sidebar-ring:oklch(.77 0 0);--font-sans:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--radius:.5rem;--shadow-2xs:0 1px 3px 0px #0000000d;--shadow-xs:0 1px 3px 0px #0000000d;--shadow-sm:0 1px 3px 0px #0000001a,0 1px 2px -1px #0000001a;--shadow:0 1px 3px 0px #0000001a,0 1px 2px -1px #0000001a;--shadow-md:0 1px 3px 0px #0000001a,0 2px 4px -1px #0000001a;--shadow-lg:0 1px 3px 0px #0000001a,0 4px 6px -1px #0000001a;--shadow-xl:0 1px 3px 0px #0000001a,0 8px 10px -1px #0000001a;--shadow-2xl:0 1px 3px 0px #00000040}.theme-doom-64:root{--background:oklch(.85 0 0);--foreground:oklch(.24 0 0);--card:oklch(.76 0 0);--card-foreground:oklch(.24 0 0);--popover:oklch(.76 0 0);--popover-foreground:oklch(.24 0 0);--primary:oklch(.5 .19 27.48);--primary-foreground:oklch(1 0 0);--secondary:oklch(.5 .09 126.19);--secondary-foreground:oklch(1 0 0);--muted:oklch(.78 0 0);--muted-foreground:oklch(.41 0 0);--accent:oklch(.59 .1 245.74);--accent-foreground:oklch(1 0 0);--destructive:oklch(.71 .2 46.46);--destructive-foreground:oklch(0 0 0);--border:oklch(.43 0 0);--input:oklch(.43 0 0);--ring:oklch(.5 .19 27.48);--chart-1:oklch(.5 .19 27.48);--chart-2:oklch(.5 .09 126.19);--chart-3:oklch(.59 .1 245.74);--chart-4:oklch(.71 .2 46.46);--chart-5:oklch(.57 .04 40.43);--sidebar:oklch(.76 0 0);--sidebar-foreground:oklch(.24 0 0);--sidebar-primary:oklch(.5 .19 27.48);--sidebar-primary-foreground:oklch(1 0 0);--sidebar-accent:oklch(.59 .1 245.74);--sidebar-accent-foreground:oklch(1 0 0);--sidebar-border:oklch(.43 0 0);--sidebar-ring:oklch(.5 .19 27.48);--font-sans:"Oxanium",sans-serif;--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:"Source Code Pro",monospace;--radius:0px;--shadow-2xs:0px 2px 4px 0px #0003;--shadow-xs:0px 2px 4px 0px #0003;--shadow-sm:0px 2px 4px 0px #0006,0px 1px 2px -1px #0006;--shadow:0px 2px 4px 0px #0006,0px 1px 2px -1px #0006;--shadow-md:0px 2px 4px 0px #0006,0px 2px 4px -1px #0006;--shadow-lg:0px 2px 4px 0px #0006,0px 4px 6px -1px #0006;--shadow-xl:0px 2px 4px 0px #0006,0px 8px 10px -1px #0006;--shadow-2xl:0px 2px 4px 0px #000}.theme-doom-64.dark{--background:oklch(.22 0 0);--foreground:oklch(.91 0 0);--card:oklch(.29 0 0);--card-foreground:oklch(.91 0 0);--popover:oklch(.29 0 0);--popover-foreground:oklch(.91 0 0);--primary:oklch(.61 .21 27.03);--primary-foreground:oklch(1 0 0);--secondary:oklch(.64 .15 133.01);--secondary-foreground:oklch(0 0 0);--muted:oklch(.26 0 0);--muted-foreground:oklch(.71 0 0);--accent:oklch(.75 .12 244.75);--accent-foreground:oklch(0 0 0);--destructive:oklch(.78 .17 68.09);--destructive-foreground:oklch(0 0 0);--border:oklch(.41 0 0);--input:oklch(.41 0 0);--ring:oklch(.61 .21 27.03);--chart-1:oklch(.61 .21 27.03);--chart-2:oklch(.64 .15 133.01);--chart-3:oklch(.75 .12 244.75);--chart-4:oklch(.78 .17 68.09);--chart-5:oklch(.65 .03 40.8);--sidebar:oklch(.19 0 0);--sidebar-foreground:oklch(.91 0 0);--sidebar-primary:oklch(.61 .21 27.03);--sidebar-primary-foreground:oklch(1 0 0);--sidebar-accent:oklch(.75 .12 244.75);--sidebar-accent-foreground:oklch(0 0 0);--sidebar-border:oklch(.41 0 0);--sidebar-ring:oklch(.61 .21 27.03);--font-sans:"Oxanium",sans-serif;--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:"Source Code Pro",monospace;--radius:0px;--shadow-2xs:0px 2px 5px 0px #0000004d;--shadow-xs:0px 2px 5px 0px #0000004d;--shadow-sm:0px 2px 5px 0px #0009,0px 1px 2px -1px #0009;--shadow:0px 2px 5px 0px #0009,0px 1px 2px -1px #0009;--shadow-md:0px 2px 5px 0px #0009,0px 2px 4px -1px #0009;--shadow-lg:0px 2px 5px 0px #0009,0px 4px 6px -1px #0009;--shadow-xl:0px 2px 5px 0px #0009,0px 8px 10px -1px #0009;--shadow-2xl:0px 2px 5px 0px #000}.theme-supabase:root{--background:oklch(.99 0 0);--foreground:oklch(.2 0 0);--card:oklch(.99 0 0);--card-foreground:oklch(.2 0 0);--popover:oklch(.99 0 0);--popover-foreground:oklch(.44 0 0);--primary:oklch(.83 .13 160.91);--primary-foreground:oklch(.26 .01 166.46);--secondary:oklch(.99 0 0);--secondary-foreground:oklch(.2 0 0);--muted:oklch(.95 0 0);--muted-foreground:oklch(.24 0 0);--accent:oklch(.95 0 0);--accent-foreground:oklch(.24 0 0);--destructive:oklch(.55 .19 32.73);--destructive-foreground:oklch(.99 0 17.21);--border:oklch(.9 0 0);--input:oklch(.9 0 0);--ring:oklch(.83 .13 160.91);--chart-1:oklch(.83 .13 160.91);--chart-2:oklch(.62 .19 259.81);--chart-3:oklch(.61 .22 292.72);--chart-4:oklch(.77 .16 70.08);--chart-5:oklch(.7 .15 162.48);--sidebar:oklch(.99 0 0);--sidebar-foreground:oklch(.55 0 0);--sidebar-primary:oklch(.83 .13 160.91);--sidebar-primary-foreground:oklch(.26 .01 166.46);--sidebar-accent:oklch(.95 0 0);--sidebar-accent-foreground:oklch(.24 0 0);--sidebar-border:oklch(.9 0 0);--sidebar-ring:oklch(.83 .13 160.91);--font-sans:Outfit,sans-serif;--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:monospace;--radius:.5rem;--shadow-2xs:0px 1px 3px 0px #00000017;--shadow-xs:0px 1px 3px 0px #00000017;--shadow-sm:0px 1px 3px 0px #0000002b,0px 1px 2px -1px #0000002b;--shadow:0px 1px 3px 0px #0000002b,0px 1px 2px -1px #0000002b;--shadow-md:0px 1px 3px 0px #0000002b,0px 2px 4px -1px #0000002b;--shadow-lg:0px 1px 3px 0px #0000002b,0px 4px 6px -1px #0000002b;--shadow-xl:0px 1px 3px 0px #0000002b,0px 8px 10px -1px #0000002b;--shadow-2xl:0px 1px 3px 0px #0000006e;--tracking-normal:.025em}.theme-supabase.dark{--background:oklch(.18 0 0);--foreground:oklch(.93 .01 255.51);--card:oklch(.2 0 0);--card-foreground:oklch(.93 .01 255.51);--popover:oklch(.26 0 0);--popover-foreground:oklch(.73 0 0);--primary:oklch(.44 .1 156.76);--primary-foreground:oklch(.92 .01 167.16);--secondary:oklch(.26 0 0);--secondary-foreground:oklch(.99 0 0);--muted:oklch(.24 0 0);--muted-foreground:oklch(.71 0 0);--accent:oklch(.31 0 0);--accent-foreground:oklch(.99 0 0);--destructive:oklch(.31 .09 29.79);--destructive-foreground:oklch(.94 0 34.31);--border:oklch(.28 0 0);--input:oklch(.28 0 0);--ring:oklch(.8 .18 151.71);--chart-1:oklch(.8 .18 151.71);--chart-2:oklch(.71 .14 254.62);--chart-3:oklch(.71 .16 293.54);--chart-4:oklch(.84 .16 84.43);--chart-5:oklch(.78 .13 181.91);--sidebar:oklch(.18 0 0);--sidebar-foreground:oklch(.63 0 0);--sidebar-primary:oklch(.44 .1 156.76);--sidebar-primary-foreground:oklch(.92 .01 167.16);--sidebar-accent:oklch(.31 0 0);--sidebar-accent-foreground:oklch(.99 0 0);--sidebar-border:oklch(.28 0 0);--sidebar-ring:oklch(.8 .18 151.71);--font-sans:Outfit,sans-serif;--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:monospace;--radius:.5rem;--shadow-2xs:0px 1px 3px 0px #00000017;--shadow-xs:0px 1px 3px 0px #00000017;--shadow-sm:0px 1px 3px 0px #0000002b,0px 1px 2px -1px #0000002b;--shadow:0px 1px 3px 0px #0000002b,0px 1px 2px -1px #0000002b;--shadow-md:0px 1px 3px 0px #0000002b,0px 2px 4px -1px #0000002b;--shadow-lg:0px 1px 3px 0px #0000002b,0px 4px 6px -1px #0000002b;--shadow-xl:0px 1px 3px 0px #0000002b,0px 8px 10px -1px #0000002b;--shadow-2xl:0px 1px 3px 0px #0000006e}.theme-supabase body{letter-spacing:var(--tracking-normal)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}} \ No newline at end of file diff --git a/docs/src/installation.njk b/docs/src/installation.njk index d4eab7b..b13cb70 100644 --- a/docs/src/installation.njk +++ b/docs/src/installation.njk @@ -29,8 +29,12 @@ toc: id: install-cli - label: Use Nunjucks or Jinja macros id: install-macros + - label: Icons + id: install-icons - label: Theming id: install-theming + - label: Customization + id: install-customization --- {% from "macros/code_block.njk" import code_block %} @@ -192,6 +196,33 @@ import 'basecoat-css/tabs';{% endraw %}{% endset %} {% endcall %}{% endraw %}{% endset %} {{ code_block(code, "jinja") }} +

    Icons

    + +
    +

    Basecoat uses Lucide icons. You have three options:

    + +
      +
    • Copy SVG code: Visit lucide.dev/icons, click any icon to copy the SVG, and paste it directly in your HTML. Best for simple projects or occasional icon usage.
    • +
    • Install lucide: Follow the installation guide to install the lucide package and dynamically render icons. Best for projects that need many icons or want tree-shaking.
    • +
    • Use framework packages: Browse framework-specific packages (React, Vue, Angular, etc.) for component-based icon usage. Best if you're using a supported framework.
    • +
    +
    + + +

    Theming

    From f82b1d79d47c911f006c324f0ba05cee2323c196 Mon Sep 17 00:00:00 2001 From: Ronan Berder Date: Tue, 4 Nov 2025 12:46:00 +0800 Subject: [PATCH 09/11] Cleaning up Button Group --- docs/src/assets/styles.css | 6284 +++++++++++++++++++++++++- docs/src/components/alert-dialog.njk | 2 +- docs/src/components/alert.njk | 44 +- docs/src/components/avatar.njk | 22 +- docs/src/components/badge.njk | 20 +- docs/src/components/button-group.njk | 99 +- docs/src/components/input-group.njk | 8 +- src/css/basecoat.css | 12 +- 8 files changed, 6430 insertions(+), 61 deletions(-) diff --git a/docs/src/assets/styles.css b/docs/src/assets/styles.css index f166b29..89183ce 100644 --- a/docs/src/assets/styles.css +++ b/docs/src/assets/styles.css @@ -1,2 +1,6284 @@ /*! tailwindcss v4.1.4 | MIT License | https://tailwindcss.com */ -@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-content:"";--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-500:oklch(63.7% .237 25.331);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-yellow-500:oklch(79.5% .184 86.047);--color-green-50:oklch(98.2% .018 155.826);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-900:oklch(39.3% .095 152.535);--color-green-950:oklch(26.6% .065 152.934);--color-blue-50:oklch(97% .014 254.604);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-blue-950:oklch(28.2% .091 267.935);--color-purple-500:oklch(62.7% .265 303.9);--color-neutral-300:oklch(87% 0 0);--color-neutral-800:oklch(26.9% 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-md:48rem;--breakpoint-lg:64rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25/1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-normal:0em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-normal:1.5;--leading-relaxed:1.625;--radius-xs:.125rem;--radius-sm:calc(var(--radius) - 4px);--radius-md:calc(var(--radius) - 2px);--radius-lg:var(--radius);--radius-xl:calc(var(--radius) + 4px);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-background:var(--background);--color-foreground:var(--foreground);--color-card:var(--card);--color-card-foreground:var(--card-foreground);--color-popover:var(--popover);--color-popover-foreground:var(--popover-foreground);--color-primary:var(--primary);--color-primary-foreground:var(--primary-foreground);--color-secondary:var(--secondary);--color-secondary-foreground:var(--secondary-foreground);--color-muted:var(--muted);--color-muted-foreground:var(--muted-foreground);--color-accent:var(--accent);--color-accent-foreground:var(--accent-foreground);--color-destructive:var(--destructive);--color-border:var(--border);--color-input:var(--input);--color-ring:var(--ring);--color-sidebar:var(--sidebar);--color-sidebar-foreground:var(--sidebar-foreground);--color-sidebar-primary:var(--sidebar-primary);--color-sidebar-primary-foreground:var(--sidebar-primary-foreground);--color-sidebar-accent:var(--sidebar-accent);--color-sidebar-accent-foreground:var(--sidebar-accent-foreground);--color-sidebar-border:var(--sidebar-border);--color-sidebar-ring:var(--sidebar-ring)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--color-border);outline-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){*{outline-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}html{scroll-behavior:smooth}body{overscroll-behavior:none;background-color:var(--color-background);color:var(--color-foreground);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.scrollbar{scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb)var(--scrollbar-track)}.scrollbar::-webkit-scrollbar{width:var(--scrollbar-width)}.scrollbar::-webkit-scrollbar-track{background:var(--scrollbar-track)}.scrollbar::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:var(--scrollbar-radius)}}@layer components{.alert,.alert-destructive{align-items:flex-start;row-gap:calc(var(--spacing)*.5);border-radius:var(--radius-lg);border-style:var(--tw-border-style);width:100%;padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));border-width:1px;grid-template-columns:0 1fr;display:grid;position:relative}:is(.alert,.alert-destructive):has(>svg){grid-template-columns:calc(var(--spacing)*4)1fr;column-gap:calc(var(--spacing)*3)}:is(.alert,.alert-destructive)>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);--tw-translate-y:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y);color:currentColor}:is(.alert,.alert-destructive) h2{-webkit-line-clamp:1;min-height:calc(var(--spacing)*4);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);-webkit-box-orient:vertical;grid-column-start:2;display:-webkit-box;overflow:hidden}:is(.alert,.alert-destructive) section{justify-items:start;gap:calc(var(--spacing)*1);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-muted-foreground);grid-column-start:2;display:grid}:is(.alert,.alert-destructive) section p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}:is(.alert,.alert-destructive) section ul{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));list-style-type:disc;list-style-position:inside}.alert{background-color:var(--color-card);color:var(--color-card-foreground)}.alert-destructive{background-color:var(--color-card);color:var(--color-destructive)}.alert-destructive>svg{color:currentColor}.alert-destructive section{color:var(--color-destructive)}.badge,.badge-primary,.badge-secondary,.badge-destructive,.badge-outline{justify-content:center;align-items:center;gap:calc(var(--spacing)*1);border-style:var(--tw-border-style);width:fit-content;padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));border-width:1px;border-radius:3.40282e38px;flex-shrink:0;display:inline-flex;overflow:hidden}:is(.badge,.badge-primary,.badge-secondary,.badge-destructive,.badge-outline):focus-visible{border-color:var(--color-ring);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){:is(.badge,.badge-primary,.badge-secondary,.badge-destructive,.badge-outline):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}:is(.badge,.badge-primary,.badge-secondary,.badge-destructive,.badge-outline)[aria-invalid=true]{border-color:var(--color-destructive);--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(.badge,.badge-primary,.badge-secondary,.badge-destructive,.badge-outline)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}:is(.badge,.badge-primary,.badge-secondary,.badge-destructive,.badge-outline):is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(.badge,.badge-primary,.badge-secondary,.badge-destructive,.badge-outline):is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)40%,transparent)}}:is(.badge,.badge-primary,.badge-secondary,.badge-destructive,.badge-outline)>svg{pointer-events:none;width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.badge,.badge-primary{background-color:var(--color-primary);color:var(--color-primary-foreground);border-color:#0000}@media (hover:hover){a:is(.badge,.badge-primary):hover{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){a:is(.badge,.badge-primary):hover{background-color:color-mix(in oklab,var(--color-primary)90%,transparent)}}}.badge-secondary{background-color:var(--color-secondary);color:var(--color-secondary-foreground);border-color:#0000}@media (hover:hover){a.badge-secondary:hover{background-color:var(--color-secondary)}@supports (color:color-mix(in lab, red, red)){a.badge-secondary:hover{background-color:color-mix(in oklab,var(--color-secondary)90%,transparent)}}}.badge-destructive{background-color:var(--color-destructive);color:var(--color-white);border-color:#0000}.badge-destructive:focus-visible{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.badge-destructive:focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}.badge-destructive:is(.dark *){background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.badge-destructive:is(.dark *){background-color:color-mix(in oklab,var(--color-destructive)60%,transparent)}}.badge-destructive:is(.dark *):focus-visible{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.badge-destructive:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-destructive)40%,transparent)}}@media (hover:hover){a.badge-destructive:hover{background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){a.badge-destructive:hover{background-color:color-mix(in oklab,var(--color-destructive)90%,transparent)}}}.badge-outline{color:var(--color-foreground)}@media (hover:hover){a.badge-outline:hover{background-color:var(--color-accent);color:var(--color-accent-foreground)}}.btn,.btn-primary,.btn-secondary,.btn-outline,.btn-ghost,.btn-link,.btn-destructive,.btn-sm,.btn-sm-primary,.btn-sm-secondary,.btn-sm-outline,.btn-sm-ghost,.btn-sm-link,.btn-sm-destructive,.btn-lg,.btn-lg-primary,.btn-lg-secondary,.btn-lg-outline,.btn-lg-ghost,.btn-lg-link,.btn-lg-destructive,.btn-icon,.btn-icon-primary,.btn-icon-secondary,.btn-icon-outline,.btn-icon-ghost,.btn-icon-link,.btn-icon-destructive,.btn-sm-icon,.btn-sm-icon-primary,.btn-sm-icon-secondary,.btn-sm-icon-outline,.btn-sm-icon-ghost,.btn-sm-icon-link,.btn-sm-icon-destructive,.btn-lg-icon,.btn-lg-icon-primary,.btn-lg-icon-secondary,.btn-lg-icon-outline,.btn-lg-icon-ghost,.btn-lg-icon-link,.btn-lg-icon-destructive{cursor:pointer;border-radius:var(--radius-md);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-outline-style:none;outline-style:none;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}:is(.btn,.btn-primary,.btn-secondary,.btn-outline,.btn-ghost,.btn-link,.btn-destructive,.btn-sm,.btn-sm-primary,.btn-sm-secondary,.btn-sm-outline,.btn-sm-ghost,.btn-sm-link,.btn-sm-destructive,.btn-lg,.btn-lg-primary,.btn-lg-secondary,.btn-lg-outline,.btn-lg-ghost,.btn-lg-link,.btn-lg-destructive,.btn-icon,.btn-icon-primary,.btn-icon-secondary,.btn-icon-outline,.btn-icon-ghost,.btn-icon-link,.btn-icon-destructive,.btn-sm-icon,.btn-sm-icon-primary,.btn-sm-icon-secondary,.btn-sm-icon-outline,.btn-sm-icon-ghost,.btn-sm-icon-link,.btn-sm-icon-destructive,.btn-lg-icon,.btn-lg-icon-primary,.btn-lg-icon-secondary,.btn-lg-icon-outline,.btn-lg-icon-ghost,.btn-lg-icon-link,.btn-lg-icon-destructive):focus-visible{border-color:var(--color-ring);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){:is(.btn,.btn-primary,.btn-secondary,.btn-outline,.btn-ghost,.btn-link,.btn-destructive,.btn-sm,.btn-sm-primary,.btn-sm-secondary,.btn-sm-outline,.btn-sm-ghost,.btn-sm-link,.btn-sm-destructive,.btn-lg,.btn-lg-primary,.btn-lg-secondary,.btn-lg-outline,.btn-lg-ghost,.btn-lg-link,.btn-lg-destructive,.btn-icon,.btn-icon-primary,.btn-icon-secondary,.btn-icon-outline,.btn-icon-ghost,.btn-icon-link,.btn-icon-destructive,.btn-sm-icon,.btn-sm-icon-primary,.btn-sm-icon-secondary,.btn-sm-icon-outline,.btn-sm-icon-ghost,.btn-sm-icon-link,.btn-sm-icon-destructive,.btn-lg-icon,.btn-lg-icon-primary,.btn-lg-icon-secondary,.btn-lg-icon-outline,.btn-lg-icon-ghost,.btn-lg-icon-link,.btn-lg-icon-destructive):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}:is(.btn,.btn-primary,.btn-secondary,.btn-outline,.btn-ghost,.btn-link,.btn-destructive,.btn-sm,.btn-sm-primary,.btn-sm-secondary,.btn-sm-outline,.btn-sm-ghost,.btn-sm-link,.btn-sm-destructive,.btn-lg,.btn-lg-primary,.btn-lg-secondary,.btn-lg-outline,.btn-lg-ghost,.btn-lg-link,.btn-lg-destructive,.btn-icon,.btn-icon-primary,.btn-icon-secondary,.btn-icon-outline,.btn-icon-ghost,.btn-icon-link,.btn-icon-destructive,.btn-sm-icon,.btn-sm-icon-primary,.btn-sm-icon-secondary,.btn-sm-icon-outline,.btn-sm-icon-ghost,.btn-sm-icon-link,.btn-sm-icon-destructive,.btn-lg-icon,.btn-lg-icon-primary,.btn-lg-icon-secondary,.btn-lg-icon-outline,.btn-lg-icon-ghost,.btn-lg-icon-link,.btn-lg-icon-destructive):disabled{pointer-events:none;opacity:.5}:is(.btn,.btn-primary,.btn-secondary,.btn-outline,.btn-ghost,.btn-link,.btn-destructive,.btn-sm,.btn-sm-primary,.btn-sm-secondary,.btn-sm-outline,.btn-sm-ghost,.btn-sm-link,.btn-sm-destructive,.btn-lg,.btn-lg-primary,.btn-lg-secondary,.btn-lg-outline,.btn-lg-ghost,.btn-lg-link,.btn-lg-destructive,.btn-icon,.btn-icon-primary,.btn-icon-secondary,.btn-icon-outline,.btn-icon-ghost,.btn-icon-link,.btn-icon-destructive,.btn-sm-icon,.btn-sm-icon-primary,.btn-sm-icon-secondary,.btn-sm-icon-outline,.btn-sm-icon-ghost,.btn-sm-icon-link,.btn-sm-icon-destructive,.btn-lg-icon,.btn-lg-icon-primary,.btn-lg-icon-secondary,.btn-lg-icon-outline,.btn-lg-icon-ghost,.btn-lg-icon-link,.btn-lg-icon-destructive)[aria-invalid=true]{border-color:var(--color-destructive);--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(.btn,.btn-primary,.btn-secondary,.btn-outline,.btn-ghost,.btn-link,.btn-destructive,.btn-sm,.btn-sm-primary,.btn-sm-secondary,.btn-sm-outline,.btn-sm-ghost,.btn-sm-link,.btn-sm-destructive,.btn-lg,.btn-lg-primary,.btn-lg-secondary,.btn-lg-outline,.btn-lg-ghost,.btn-lg-link,.btn-lg-destructive,.btn-icon,.btn-icon-primary,.btn-icon-secondary,.btn-icon-outline,.btn-icon-ghost,.btn-icon-link,.btn-icon-destructive,.btn-sm-icon,.btn-sm-icon-primary,.btn-sm-icon-secondary,.btn-sm-icon-outline,.btn-sm-icon-ghost,.btn-sm-icon-link,.btn-sm-icon-destructive,.btn-lg-icon,.btn-lg-icon-primary,.btn-lg-icon-secondary,.btn-lg-icon-outline,.btn-lg-icon-ghost,.btn-lg-icon-link,.btn-lg-icon-destructive)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}:is(.btn,.btn-primary,.btn-secondary,.btn-outline,.btn-ghost,.btn-link,.btn-destructive,.btn-sm,.btn-sm-primary,.btn-sm-secondary,.btn-sm-outline,.btn-sm-ghost,.btn-sm-link,.btn-sm-destructive,.btn-lg,.btn-lg-primary,.btn-lg-secondary,.btn-lg-outline,.btn-lg-ghost,.btn-lg-link,.btn-lg-destructive,.btn-icon,.btn-icon-primary,.btn-icon-secondary,.btn-icon-outline,.btn-icon-ghost,.btn-icon-link,.btn-icon-destructive,.btn-sm-icon,.btn-sm-icon-primary,.btn-sm-icon-secondary,.btn-sm-icon-outline,.btn-sm-icon-ghost,.btn-sm-icon-link,.btn-sm-icon-destructive,.btn-lg-icon,.btn-lg-icon-primary,.btn-lg-icon-secondary,.btn-lg-icon-outline,.btn-lg-icon-ghost,.btn-lg-icon-link,.btn-lg-icon-destructive):is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(.btn,.btn-primary,.btn-secondary,.btn-outline,.btn-ghost,.btn-link,.btn-destructive,.btn-sm,.btn-sm-primary,.btn-sm-secondary,.btn-sm-outline,.btn-sm-ghost,.btn-sm-link,.btn-sm-destructive,.btn-lg,.btn-lg-primary,.btn-lg-secondary,.btn-lg-outline,.btn-lg-ghost,.btn-lg-link,.btn-lg-destructive,.btn-icon,.btn-icon-primary,.btn-icon-secondary,.btn-icon-outline,.btn-icon-ghost,.btn-icon-link,.btn-icon-destructive,.btn-sm-icon,.btn-sm-icon-primary,.btn-sm-icon-secondary,.btn-sm-icon-outline,.btn-sm-icon-ghost,.btn-sm-icon-link,.btn-sm-icon-destructive,.btn-lg-icon,.btn-lg-icon-primary,.btn-lg-icon-secondary,.btn-lg-icon-outline,.btn-lg-icon-ghost,.btn-lg-icon-link,.btn-lg-icon-destructive):is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)40%,transparent)}}:is(.btn,.btn-primary,.btn-secondary,.btn-outline,.btn-ghost,.btn-link,.btn-destructive,.btn-sm,.btn-sm-primary,.btn-sm-secondary,.btn-sm-outline,.btn-sm-ghost,.btn-sm-link,.btn-sm-destructive,.btn-lg,.btn-lg-primary,.btn-lg-secondary,.btn-lg-outline,.btn-lg-ghost,.btn-lg-link,.btn-lg-destructive,.btn-icon,.btn-icon-primary,.btn-icon-secondary,.btn-icon-outline,.btn-icon-ghost,.btn-icon-link,.btn-icon-destructive,.btn-sm-icon,.btn-sm-icon-primary,.btn-sm-icon-secondary,.btn-sm-icon-outline,.btn-sm-icon-ghost,.btn-sm-icon-link,.btn-sm-icon-destructive,.btn-lg-icon,.btn-lg-icon-primary,.btn-lg-icon-secondary,.btn-lg-icon-outline,.btn-lg-icon-ghost,.btn-lg-icon-link,.btn-lg-icon-destructive) svg{pointer-events:none;flex-shrink:0}:is(.btn,.btn-primary,.btn-secondary,.btn-outline,.btn-ghost,.btn-link,.btn-destructive,.btn-sm,.btn-sm-primary,.btn-sm-secondary,.btn-sm-outline,.btn-sm-ghost,.btn-sm-link,.btn-sm-destructive,.btn-lg,.btn-lg-primary,.btn-lg-secondary,.btn-lg-outline,.btn-lg-ghost,.btn-lg-link,.btn-lg-destructive,.btn-icon,.btn-icon-primary,.btn-icon-secondary,.btn-icon-outline,.btn-icon-ghost,.btn-icon-link,.btn-icon-destructive,.btn-sm-icon,.btn-sm-icon-primary,.btn-sm-icon-secondary,.btn-sm-icon-outline,.btn-sm-icon-ghost,.btn-sm-icon-link,.btn-sm-icon-destructive,.btn-lg-icon,.btn-lg-icon-primary,.btn-lg-icon-secondary,.btn-lg-icon-outline,.btn-lg-icon-ghost,.btn-lg-icon-link,.btn-lg-icon-destructive) svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.btn,.btn-primary,.btn-secondary,.btn-outline,.btn-ghost,.btn-link,.btn-destructive{height:calc(var(--spacing)*9);gap:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*2)}:is(.btn,.btn-primary,.btn-secondary,.btn-outline,.btn-ghost,.btn-link,.btn-destructive):has(>svg){padding-inline:calc(var(--spacing)*3)}.btn-icon,.btn-icon-primary,.btn-icon-secondary,.btn-icon-outline,.btn-icon-ghost,.btn-icon-link,.btn-icon-destructive{width:calc(var(--spacing)*9);height:calc(var(--spacing)*9)}.btn-sm,.btn-sm-primary,.btn-sm-secondary,.btn-sm-outline,.btn-sm-ghost,.btn-sm-link,.btn-sm-destructive{height:calc(var(--spacing)*8);gap:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*3)}:is(.btn-sm,.btn-sm-primary,.btn-sm-secondary,.btn-sm-outline,.btn-sm-ghost,.btn-sm-link,.btn-sm-destructive):has(>svg){padding-inline:calc(var(--spacing)*2.5)}.btn-sm-icon,.btn-sm-icon-primary,.btn-sm-icon-secondary,.btn-sm-icon-outline,.btn-sm-icon-ghost,.btn-sm-icon-link,.btn-sm-icon-destructive{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.btn-lg,.btn-lg-primary,.btn-lg-secondary,.btn-lg-outline,.btn-lg-ghost,.btn-lg-link,.btn-lg-destructive{height:calc(var(--spacing)*10);gap:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*6)}:is(.btn-lg,.btn-lg-primary,.btn-lg-secondary,.btn-lg-outline,.btn-lg-ghost,.btn-lg-link,.btn-lg-destructive):has(>svg){padding-inline:calc(var(--spacing)*4)}.btn-lg-icon,.btn-lg-icon-primary,.btn-lg-icon-secondary,.btn-lg-icon-outline,.btn-lg-icon-ghost,.btn-lg-icon-link,.btn-lg-icon-destructive{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.btn,.btn-primary,.btn-sm,.btn-sm-primary,.btn-lg,.btn-lg-primary,.btn-icon,.btn-icon-primary,.btn-sm-icon,.btn-sm-icon-primary,.btn-lg-icon,.btn-lg-icon-primary{background-color:var(--color-primary);color:var(--color-primary-foreground);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){:is(.btn,.btn-primary,.btn-sm,.btn-sm-primary,.btn-lg,.btn-lg-primary,.btn-icon,.btn-icon-primary,.btn-sm-icon,.btn-sm-icon-primary,.btn-lg-icon,.btn-lg-icon-primary):hover{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){:is(.btn,.btn-primary,.btn-sm,.btn-sm-primary,.btn-lg,.btn-lg-primary,.btn-icon,.btn-icon-primary,.btn-sm-icon,.btn-sm-icon-primary,.btn-lg-icon,.btn-lg-icon-primary):hover{background-color:color-mix(in oklab,var(--color-primary)90%,transparent)}}}:is(.btn,.btn-primary,.btn-sm,.btn-sm-primary,.btn-lg,.btn-lg-primary,.btn-icon,.btn-icon-primary,.btn-sm-icon,.btn-sm-icon-primary,.btn-lg-icon,.btn-lg-icon-primary)[aria-pressed=true]{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){:is(.btn,.btn-primary,.btn-sm,.btn-sm-primary,.btn-lg,.btn-lg-primary,.btn-icon,.btn-icon-primary,.btn-sm-icon,.btn-sm-icon-primary,.btn-lg-icon,.btn-lg-icon-primary)[aria-pressed=true]{background-color:color-mix(in oklab,var(--color-primary)90%,transparent)}}.btn-secondary,.btn-sm-secondary,.btn-lg-secondary,.btn-icon-secondary,.btn-sm-icon-secondary,.btn-lg-icon-secondary{background-color:var(--color-secondary);color:var(--color-secondary-foreground);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}:is(.btn-secondary,.btn-sm-secondary,.btn-lg-secondary,.btn-icon-secondary,.btn-sm-icon-secondary,.btn-lg-icon-secondary):hover,:is(.btn-secondary,.btn-sm-secondary,.btn-lg-secondary,.btn-icon-secondary,.btn-sm-icon-secondary,.btn-lg-icon-secondary)[aria-pressed=true]{background-color:var(--color-secondary)}@supports (color:color-mix(in lab, red, red)){:is(:is(.btn-secondary,.btn-sm-secondary,.btn-lg-secondary,.btn-icon-secondary,.btn-sm-icon-secondary,.btn-lg-icon-secondary):hover,:is(.btn-secondary,.btn-sm-secondary,.btn-lg-secondary,.btn-icon-secondary,.btn-sm-icon-secondary,.btn-lg-icon-secondary)[aria-pressed=true]){background-color:color-mix(in oklab,var(--color-secondary)80%,transparent)}}.btn-outline,.btn-sm-outline,.btn-lg-outline,.btn-icon-outline,.btn-sm-icon-outline,.btn-lg-icon-outline{border-style:var(--tw-border-style);background-color:var(--color-background);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-width:1px}:is(.btn-outline,.btn-sm-outline,.btn-lg-outline,.btn-icon-outline,.btn-sm-icon-outline,.btn-lg-icon-outline):is(.dark *){border-color:var(--color-input);background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){:is(.btn-outline,.btn-sm-outline,.btn-lg-outline,.btn-icon-outline,.btn-sm-icon-outline,.btn-lg-icon-outline):is(.dark *){background-color:color-mix(in oklab,var(--color-input)30%,transparent)}}:is(.btn-outline,.btn-sm-outline,.btn-lg-outline,.btn-icon-outline,.btn-sm-icon-outline,.btn-lg-icon-outline):hover,:is(.btn-outline,.btn-sm-outline,.btn-lg-outline,.btn-icon-outline,.btn-sm-icon-outline,.btn-lg-icon-outline)[aria-pressed=true]{background-color:var(--color-accent);color:var(--color-accent-foreground)}:is(:is(.btn-outline,.btn-sm-outline,.btn-lg-outline,.btn-icon-outline,.btn-sm-icon-outline,.btn-lg-icon-outline):hover,:is(.btn-outline,.btn-sm-outline,.btn-lg-outline,.btn-icon-outline,.btn-sm-icon-outline,.btn-lg-icon-outline)[aria-pressed=true]):is(.dark *){background-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){:is(:is(.btn-outline,.btn-sm-outline,.btn-lg-outline,.btn-icon-outline,.btn-sm-icon-outline,.btn-lg-icon-outline):hover,:is(.btn-outline,.btn-sm-outline,.btn-lg-outline,.btn-icon-outline,.btn-sm-icon-outline,.btn-lg-icon-outline)[aria-pressed=true]):is(.dark *){background-color:color-mix(in oklab,var(--color-accent)50%,transparent)}}:is(.btn-ghost,.btn-sm-ghost,.btn-lg-ghost,.btn-icon-ghost,.btn-sm-icon-ghost,.btn-lg-icon-ghost):hover,:is(.btn-ghost,.btn-sm-ghost,.btn-lg-ghost,.btn-icon-ghost,.btn-sm-icon-ghost,.btn-lg-icon-ghost)[aria-pressed=true]{background-color:var(--color-accent);color:var(--color-accent-foreground)}:is(:is(.btn-ghost,.btn-sm-ghost,.btn-lg-ghost,.btn-icon-ghost,.btn-sm-icon-ghost,.btn-lg-icon-ghost):hover,:is(.btn-ghost,.btn-sm-ghost,.btn-lg-ghost,.btn-icon-ghost,.btn-sm-icon-ghost,.btn-lg-icon-ghost)[aria-pressed=true]):is(.dark *){background-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){:is(:is(.btn-ghost,.btn-sm-ghost,.btn-lg-ghost,.btn-icon-ghost,.btn-sm-icon-ghost,.btn-lg-icon-ghost):hover,:is(.btn-ghost,.btn-sm-ghost,.btn-lg-ghost,.btn-icon-ghost,.btn-sm-icon-ghost,.btn-lg-icon-ghost)[aria-pressed=true]):is(.dark *){background-color:color-mix(in oklab,var(--color-accent)50%,transparent)}}.btn-link,.btn-sm-link,.btn-lg-link,.btn-icon-link,.btn-sm-icon-link,.btn-lg-icon-link{color:var(--color-primary);text-underline-offset:4px}@media (hover:hover){:is(:is(.btn-link,.btn-sm-link,.btn-lg-link,.btn-icon-link,.btn-sm-icon-link,.btn-lg-icon-link):hover,:is(.btn-link,.btn-sm-link,.btn-lg-link,.btn-icon-link,.btn-sm-icon-link,.btn-lg-icon-link)[aria-pressed=true]):hover{text-decoration-line:underline}}.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive{background-color:var(--color-destructive);color:var(--color-white);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive):focus-visible{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive):is(.dark *){background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive):is(.dark *){background-color:color-mix(in oklab,var(--color-destructive)60%,transparent)}}:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive):is(.dark *):focus-visible{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive):is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-destructive)40%,transparent)}}:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive):hover,:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive)[aria-pressed=true]{background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive):hover,:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive)[aria-pressed=true]){background-color:color-mix(in oklab,var(--color-destructive)90%,transparent)}}:is(:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive):hover,:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive)[aria-pressed=true]):is(.dark *){background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive):hover,:is(.btn-destructive,.btn-sm-destructive,.btn-lg-destructive,.btn-icon-destructive,.btn-sm-icon-destructive,.btn-lg-icon-destructive)[aria-pressed=true]):is(.dark *){background-color:color-mix(in oklab,var(--color-destructive)50%,transparent)}}.card{gap:calc(var(--spacing)*6);border-radius:var(--radius-xl);border-style:var(--tw-border-style);background-color:var(--color-card);padding-block:calc(var(--spacing)*6);color:var(--color-card-foreground);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-width:1px;flex-direction:column;display:flex}.card>header{align-items:flex-start;gap:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*6);grid-template-rows:auto auto;grid-auto-rows:min-content;display:grid;container:card-header/inline-size}.card>header:has([data-slot=card-action]){grid-template-columns:1fr auto}.card>header.border-b{padding-bottom:calc(var(--spacing)*6)}.card>header h2{--tw-leading:1;--tw-font-weight:var(--font-weight-semibold);line-height:1;font-weight:var(--font-weight-semibold)}.card>header p{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-muted-foreground)}.card>section{padding-inline:calc(var(--spacing)*6)}.card>footer{padding-inline:calc(var(--spacing)*6);align-items:center;display:flex}.card>footer.border-t{padding-top:calc(var(--spacing)*6)}:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);appearance:none;border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-input);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-outline-style:none;border-radius:4px;outline-style:none;flex-shrink:0}:is(:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch])):checked{border-color:var(--color-primary);background-color:var(--color-primary)}:is(:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch])):focus-visible{border-color:var(--color-ring);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch])):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}:is(:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch])):disabled{cursor:not-allowed;opacity:.5}:is(:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch]))[aria-invalid=true]{border-color:var(--color-destructive);--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch]))[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}:is(:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch])):is(.dark *){background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch])):is(.dark *){background-color:color-mix(in oklab,var(--color-input)30%,transparent)}}:is(:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch])):is(.dark *):checked{background-color:var(--color-primary)}:is(:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch])):is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch])):is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)40%,transparent)}}:is(:is(.form,.field) input[type=checkbox]:not([role=switch]),.input[type=checkbox]:not([role=switch])):checked:after{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5);background-color:var(--color-primary-foreground);--tw-content:"";content:var(--tw-content);-webkit-mask-image:var(--check-icon);-webkit-mask-image:var(--check-icon);mask-image:var(--check-icon);display:block;-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:.875rem;mask-size:.875rem;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}details::details-content{opacity:0;block-size:0;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));transition-behavior:allow-discrete;display:block}details[open]::details-content{block-size:auto;block-size:calc-size(auto,size);opacity:1}details summary{cursor:pointer;align-items:center;display:inline-flex}details>summary::-webkit-details-marker{display:none}.command-dialog{inset-block:calc(var(--spacing)*0);opacity:0;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));transition-behavior:allow-discrete}.command-dialog:is([open],:popover-open),.command-dialog:is([open],:popover-open)::backdrop{opacity:1}.command-dialog:is([open],:popover-open)>*{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}@starting-style{.command-dialog:is([open],:popover-open),.command-dialog:is([open],:popover-open)::backdrop{opacity:0}.command-dialog:is([open],:popover-open)>*{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}}.command-dialog::backdrop{opacity:0;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));transition-behavior:allow-discrete;background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.command-dialog::backdrop{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.command-dialog>*{z-index:50;--tw-translate-x:calc(calc(1/2*100%)*-1);width:100%;max-width:calc(100% - 2rem);max-height:min(640px,100% - 2rem);translate:var(--tw-translate-x)var(--tw-translate-y);--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);border-radius:var(--radius-lg);border-style:var(--tw-border-style);background-color:var(--color-background);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));border-width:1px;flex-direction:column;display:flex;position:fixed;top:50%;left:50%;overflow:hidden}@media (min-width:40rem){.command-dialog>*{max-width:var(--container-lg)}}.command-dialog>*>button,.command-dialog>*>form[method=dialog]{top:calc(var(--spacing)*4);right:calc(var(--spacing)*4);position:absolute}.command-dialog>*>button,.command-dialog>*>form[method=dialog]>button{border-radius:var(--radius-xs);opacity:.7;--tw-ring-offset-color:var(--color-background);transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){:is(.command-dialog>*>button,.command-dialog>*>form[method=dialog]>button):hover{opacity:1}}:is(.command-dialog>*>button,.command-dialog>*>form[method=dialog]>button):focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring);--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:is(.command-dialog>*>button,.command-dialog>*>form[method=dialog]>button):focus{outline-offset:2px;outline:2px solid #0000}}:is(.command-dialog>*>button,.command-dialog>*>form[method=dialog]>button):disabled{pointer-events:none}:is(.command-dialog>*>button,.command-dialog>*>form[method=dialog]>button)[data-state=open]{background-color:var(--color-accent);color:var(--color-muted-foreground)}:is(.command-dialog>*>button,.command-dialog>*>form[method=dialog]>button) svg{pointer-events:none;flex-shrink:0}:is(.command-dialog>*>button,.command-dialog>*>form[method=dialog]>button) svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.command-dialog .command>header input{height:calc(var(--spacing)*12)}.command-dialog .command [role=menu]{padding-inline:calc(var(--spacing)*2)}.command-dialog .command [role=menu] [role=menuitem]{padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*3)}.command-dialog .command [role=menu] [role=menuitem] svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.command-dialog .command [role=menu] [role=heading]{padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1.5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-muted-foreground)}.command>header{align-items:center;gap:calc(var(--spacing)*2);border-bottom-style:var(--tw-border-style);padding-inline:calc(var(--spacing)*3);border-bottom-width:1px;display:flex}.command>header svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);opacity:.5;flex-shrink:0}.command>header input{height:calc(var(--spacing)*10);border-radius:var(--radius-md);width:100%;padding-block:calc(var(--spacing)*3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-outline-style:none;background-color:#0000;outline-style:none;display:flex}@media (forced-colors:active){.command>header input{outline-offset:2px;outline:2px solid #0000}}.command>header input::placeholder{color:var(--color-muted-foreground)}.command>header input:disabled{cursor:not-allowed;opacity:.5}.command [role=menu]{max-height:300px;padding:calc(var(--spacing)*1);overflow:hidden auto}.command [role=menu] [role=menuitem]{cursor:default;align-items:center;gap:calc(var(--spacing)*2);text-overflow:ellipsis;white-space:nowrap;border-radius:var(--radius-sm);width:100%;padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-outline-style:none;-webkit-user-select:none;user-select:none;outline-style:none;display:flex;position:relative;overflow:hidden}@media (forced-colors:active){.command [role=menu] [role=menuitem]{outline-offset:2px;outline:2px solid #0000}}.command [role=menu] [role=menuitem]:disabled,.command [role=menu] [role=menuitem][aria-disabled=true]{pointer-events:none;opacity:.5}.command [role=menu] [role=menuitem][aria-hidden=true]{display:none}.command [role=menu] [role=menuitem] svg{pointer-events:none;flex-shrink:0}.command [role=menu] [role=menuitem] svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.command [role=menu] [role=menuitem] svg:not([class*=text-]){color:var(--color-muted-foreground)}.command [role=menu] [role=menuitem].active{background-color:var(--color-accent);color:var(--color-accent-foreground)}.command [role=menu] [role=heading]{padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-muted-foreground);display:flex}.command [role=menu] [role=group]:not(:has([role=menuitem]:not([aria-hidden=true]))){display:none}.command [role=menu] [role=separator]{margin-inline:calc(var(--spacing)*-1);margin-block:calc(var(--spacing)*1);border-color:var(--color-border)}.command [role=menu]:not(:has([data-value]:not([aria-hidden=true]))):before{margin:calc(var(--spacing)*-1);text-overflow:ellipsis;white-space:nowrap;padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*6);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));justify-content:center;align-items:center;display:flex;overflow:hidden}.command [role=menu][data-empty]:not(:has([data-value]:not([aria-hidden=true]))):before{--tw-content:attr(data-empty);content:var(--tw-content)}.command [role=menu]:not([data-empty]):not(:has([data-value]:not([aria-hidden=true]))):before{--tw-content:"No results found";content:var(--tw-content)}@media (hover:hover){.command:not([data-command-initialized]) [role=menuitem]:hover{background-color:var(--color-accent);color:var(--color-accent-foreground)}}.command:has(>header input:not(:placeholder-shown)) [role=separator]{display:none}.dialog{inset-block:calc(var(--spacing)*0);opacity:0;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));transition-behavior:allow-discrete}.dialog:is([open],:popover-open),.dialog:is([open],:popover-open)::backdrop{opacity:1}.dialog:is([open],:popover-open)>*{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}@starting-style{.dialog:is([open],:popover-open),.dialog:is([open],:popover-open)::backdrop{opacity:0}.dialog:is([open],:popover-open)>*{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}}.dialog::backdrop{opacity:0;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));transition-behavior:allow-discrete;background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.dialog::backdrop{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.dialog>*{z-index:50;--tw-translate-x:calc(calc(1/2*100%)*-1);width:100%;max-width:calc(100% - 2rem);max-height:calc(100% - 2rem);translate:var(--tw-translate-x)var(--tw-translate-y);--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);gap:calc(var(--spacing)*4);border-radius:var(--radius-lg);border-style:var(--tw-border-style);background-color:var(--color-background);padding:calc(var(--spacing)*6);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));border-width:1px;flex-direction:column;display:flex;position:fixed;top:50%;left:50%}@media (min-width:40rem){.dialog>*{max-width:var(--container-lg)}}.dialog>*>header{gap:calc(var(--spacing)*2);text-align:center;flex-direction:column;display:flex}@media (min-width:40rem){.dialog>*>header{text-align:left}}.dialog>*>header>h2{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-leading:1;--tw-font-weight:var(--font-weight-semibold);line-height:1;font-weight:var(--font-weight-semibold)}.dialog>*>header>p{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-muted-foreground)}.dialog>*>section{margin-inline:calc(var(--spacing)*-6);padding-inline:calc(var(--spacing)*6);flex:1}.dialog>*>footer{gap:calc(var(--spacing)*2);flex-direction:column-reverse;display:flex}@media (min-width:40rem){.dialog>*>footer{flex-direction:row;justify-content:flex-end}}.dialog>*>button,.dialog>*>form[method=dialog]{top:calc(var(--spacing)*4);right:calc(var(--spacing)*4);position:absolute}.dialog>*>button,.dialog>*>form[method=dialog]>button{border-radius:var(--radius-xs);opacity:.7;--tw-ring-offset-color:var(--color-background);transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){:is(.dialog>*>button,.dialog>*>form[method=dialog]>button):hover{opacity:1}}:is(.dialog>*>button,.dialog>*>form[method=dialog]>button):focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring);--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:is(.dialog>*>button,.dialog>*>form[method=dialog]>button):focus{outline-offset:2px;outline:2px solid #0000}}:is(.dialog>*>button,.dialog>*>form[method=dialog]>button):disabled{pointer-events:none}:is(.dialog>*>button,.dialog>*>form[method=dialog]>button)[data-state=open]{background-color:var(--color-accent);color:var(--color-muted-foreground)}:is(.dialog>*>button,.dialog>*>form[method=dialog]>button) svg{pointer-events:none;flex-shrink:0}:is(.dialog>*>button,.dialog>*>form[method=dialog]>button) svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.dropdown-menu{display:inline-flex;position:relative}.dropdown-menu [data-popover]{padding:calc(var(--spacing)*1);min-width:anchor-size(width)}.dropdown-menu [data-popover] [role=menuitem],.dropdown-menu [data-popover] [role=menuitemcheckbox],.dropdown-menu [data-popover] [role=menuitemradio]{cursor:default;align-items:center;gap:calc(var(--spacing)*2);text-overflow:ellipsis;white-space:nowrap;border-radius:var(--radius-sm);width:100%;padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-outline-style:none;-webkit-user-select:none;user-select:none;outline-style:none;display:flex;position:relative;overflow:hidden}@media (forced-colors:active){:is(.dropdown-menu [data-popover] [role=menuitem],.dropdown-menu [data-popover] [role=menuitemcheckbox],.dropdown-menu [data-popover] [role=menuitemradio]){outline-offset:2px;outline:2px solid #0000}}:is(.dropdown-menu [data-popover] [role=menuitem],.dropdown-menu [data-popover] [role=menuitemcheckbox],.dropdown-menu [data-popover] [role=menuitemradio]):disabled,:is(.dropdown-menu [data-popover] [role=menuitem],.dropdown-menu [data-popover] [role=menuitemcheckbox],.dropdown-menu [data-popover] [role=menuitemradio])[aria-disabled=true]{pointer-events:none;opacity:.5}:is(.dropdown-menu [data-popover] [role=menuitem],.dropdown-menu [data-popover] [role=menuitemcheckbox],.dropdown-menu [data-popover] [role=menuitemradio])[aria-hidden=true]{display:none}:is(.dropdown-menu [data-popover] [role=menuitem],.dropdown-menu [data-popover] [role=menuitemcheckbox],.dropdown-menu [data-popover] [role=menuitemradio]) svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);color:var(--color-muted-foreground);flex-shrink:0}:is(.dropdown-menu [data-popover] [role=menuitem],.dropdown-menu [data-popover] [role=menuitemcheckbox],.dropdown-menu [data-popover] [role=menuitemradio]):not([aria-disabled=true]):focus-visible,:is(.dropdown-menu [data-popover] [role=menuitem],.dropdown-menu [data-popover] [role=menuitemcheckbox],.dropdown-menu [data-popover] [role=menuitemradio]).active{background-color:var(--color-accent);color:var(--color-accent-foreground)}.dropdown-menu [data-popover] [role=menu] [role=heading]{padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);display:flex}.dropdown-menu [data-popover] [role=separator]{margin-inline:calc(var(--spacing)*-1);margin-block:calc(var(--spacing)*1);border-color:var(--color-border)}@media (hover:hover){:is(.dropdown-menu:not([data-dropdown-menu-initialized]) [data-popover] [role=menuitem],.dropdown-menu:not([data-dropdown-menu-initialized]) [data-popover] [role=menuitemcheckbox],.dropdown-menu:not([data-dropdown-menu-initialized]) [data-popover] [role=menuitemradio]):hover{background-color:var(--color-accent);color:var(--color-accent-foreground)}}.fieldset{gap:calc(var(--spacing)*6);flex-direction:column;display:flex}.fieldset>legend{margin-bottom:calc(var(--spacing)*3);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.fieldset>legend+p{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-muted-foreground)}.field{gap:calc(var(--spacing)*3);flex-direction:column;width:100%;display:flex}.field[data-invalid=true]{color:var(--color-destructive)}.field>*{width:100%}.field>.sr-only{width:auto}.field .description{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-muted-foreground)}.field .error{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-destructive)}:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time]{height:calc(var(--spacing)*9);width:100%;min-width:calc(var(--spacing)*0);appearance:none;border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-input);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-outline-style:none;background-color:#0000;outline-style:none;display:flex}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time]) ::selection{background-color:var(--color-primary)}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time])::selection{background-color:var(--color-primary)}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time]) ::selection{color:var(--color-primary-foreground)}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time])::selection{color:var(--color-primary-foreground)}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time])::file-selector-button{display:inline-flex}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time])::file-selector-button{height:calc(var(--spacing)*7)}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time])::file-selector-button{border-style:var(--tw-border-style);border-width:0}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time])::file-selector-button{background-color:#0000}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time])::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time])::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time])::file-selector-button{color:var(--color-foreground)}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time])::placeholder{color:var(--color-muted-foreground)}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time]):disabled{pointer-events:none;cursor:not-allowed;opacity:.5}@media (min-width:48rem){:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time]){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time]):is(.dark *){background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time]):is(.dark *){background-color:color-mix(in oklab,var(--color-input)30%,transparent)}}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time]):focus-visible{border-color:var(--color-ring);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time]):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time])[aria-invalid=true]{border-color:var(--color-destructive);--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time])[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time]):is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=text],:is(.form,.field) input[type=email],:is(.form,.field) input[type=password],:is(.form,.field) input[type=number],:is(.form,.field) input[type=file],:is(.form,.field) input[type=tel],:is(.form,.field) input[type=url],:is(.form,.field) input[type=search],:is(.form,.field) input[type=date],:is(.form,.field) input[type=datetime-local],:is(.form,.field) input[type=month],:is(.form,.field) input[type=week],:is(.form,.field) input[type=time],.input[type=text],.input[type=email],.input[type=password],.input[type=number],.input[type=file],.input[type=tel],.input[type=url],.input[type=search],.input[type=date],.input[type=datetime-local],.input[type=month],.input[type=week],.input[type=time]):is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)40%,transparent)}}.kbd{pointer-events:none;height:calc(var(--spacing)*5);width:fit-content;min-width:calc(var(--spacing)*5);justify-content:center;align-items:center;gap:calc(var(--spacing)*1);border-radius:var(--radius-sm);background-color:var(--color-muted);padding-inline:calc(var(--spacing)*1);font-family:var(--font-sans);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-muted-foreground);-webkit-user-select:none;user-select:none;display:inline-flex}.kbd svg:not([class*=size-]){width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}:is(.form,.field) label,.label{align-items:center;gap:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:1;--tw-font-weight:var(--font-weight-medium);line-height:1;font-weight:var(--font-weight-medium);-webkit-user-select:none;user-select:none;display:flex}:is(:is(.form,.field) label,.label):is(:where(.peer):disabled~*),:is(:is(.form,.field) label,.label):has(>:disabled),:is(:is(.form,.field) label,.label):has(+:disabled){pointer-events:none;opacity:.5}[data-popover]{visibility:visible;z-index:50;--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;width:max-content;min-width:100%;scale:var(--tw-scale-x)var(--tw-scale-y);border-radius:var(--radius-md);border-style:var(--tw-border-style);background-color:var(--color-popover);color:var(--color-popover-foreground);opacity:1;--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));border-width:1px;position:absolute;overflow:hidden auto}[data-popover][aria-hidden=true]{visibility:hidden;--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y);opacity:0}[data-popover][aria-hidden=true]:not([data-side]),[data-popover][aria-hidden=true][data-side=bottom]{--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}[data-popover][aria-hidden=true][data-side=top]{--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}[data-popover][aria-hidden=true][data-side=left]{--tw-translate-x:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}[data-popover][aria-hidden=true][data-side=right]{--tw-translate-x:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}[data-popover]:not([data-side]),[data-popover][data-side=bottom]{margin-top:calc(var(--spacing)*1);top:100%}[data-popover][data-side=top]{margin-bottom:calc(var(--spacing)*1);bottom:100%}[data-popover][data-side=left]{margin-right:calc(var(--spacing)*1);right:100%}[data-popover][data-side=right]{margin-left:calc(var(--spacing)*1);left:100%}:is([data-popover]:not([data-side]),[data-popover][data-side=bottom],[data-popover][data-side=top]):not([data-align]),:is([data-popover]:not([data-side]),[data-popover][data-side=bottom],[data-popover][data-side=top])[data-align=start]{left:calc(var(--spacing)*0)}:is([data-popover]:not([data-side]),[data-popover][data-side=bottom],[data-popover][data-side=top])[data-align=end]{right:calc(var(--spacing)*0)}:is([data-popover]:not([data-side]),[data-popover][data-side=bottom],[data-popover][data-side=top])[data-align=center]{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);left:50%}:is([data-popover][data-side=left],[data-popover][data-side=right]):not([data-align]),:is([data-popover][data-side=left],[data-popover][data-side=right])[data-align=start]{top:calc(var(--spacing)*0)}:is([data-popover][data-side=left],[data-popover][data-side=right])[data-align=end]{bottom:calc(var(--spacing)*0)}:is([data-popover][data-side=left],[data-popover][data-side=right])[data-align=center]{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);top:50%}.popover{display:inline-flex;position:relative}.popover [data-popover]{padding:calc(var(--spacing)*4)}:is(.form,.field) input[type=radio],.input[type=radio]{aspect-ratio:1;width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);appearance:none;border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-input);color:var(--color-primary);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-outline-style:none;border-radius:3.40282e38px;outline-style:none;flex-shrink:0;position:relative}:is(:is(.form,.field) input[type=radio],.input[type=radio]):focus-visible{border-color:var(--color-ring);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=radio],.input[type=radio]):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}:is(:is(.form,.field) input[type=radio],.input[type=radio]):disabled{cursor:not-allowed;opacity:.5}:is(:is(.form,.field) input[type=radio],.input[type=radio])[aria-invalid=true]{border-color:var(--color-destructive);--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=radio],.input[type=radio])[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}:is(:is(.form,.field) input[type=radio],.input[type=radio]):is(.dark *){background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=radio],.input[type=radio]):is(.dark *){background-color:color-mix(in oklab,var(--color-input)30%,transparent)}}:is(:is(.form,.field) input[type=radio],.input[type=radio]):is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=radio],.input[type=radio]):is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)40%,transparent)}}:is(:is(.form,.field) input[type=radio],.input[type=radio]):checked:before{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2);--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);background-color:var(--color-primary);--tw-content:"";content:var(--tw-content);border-radius:3.40282e38px;position:absolute;top:50%;left:50%}:is(.form,.field) input[type=range],.input[type=range]{appearance:none;padding:calc(var(--spacing)*0);--tw-outline-style:none;--slider-value:20%;outline-style:none;align-items:center;display:flex}:is(:is(:is(.form,.field) input[type=range],.input[type=range]):hover,:is(:is(.form,.field) input[type=range],.input[type=range]):focus-visible)::-webkit-slider-thumb{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}:is(:is(:is(.form,.field) input[type=range],.input[type=range]):hover,:is(:is(.form,.field) input[type=range],.input[type=range]):focus-visible)::-moz-range-thumb{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}:is(:is(:is(.form,.field) input[type=range],.input[type=range]):hover,:is(:is(.form,.field) input[type=range],.input[type=range]):focus-visible)::-ms-thumb{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}:is(:is(.form,.field) input[type=range],.input[type=range])::-webkit-slider-thumb{margin-top:calc(var(--spacing)*-1.25);width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);appearance:none;border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-primary);background-color:var(--color-background);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring);border-radius:3.40282e38px;flex-shrink:0;display:block}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=range],.input[type=range])::-webkit-slider-thumb{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}:is(:is(.form,.field) input[type=range],.input[type=range])::-webkit-slider-runnable-track{height:calc(var(--spacing)*1.5);appearance:none;background:linear-gradient(to right,var(--primary)var(--slider-value),var(--muted)var(--slider-value));border-radius:3.40282e38px;width:100%}:is(:is(.form,.field) input[type=range],.input[type=range])::-moz-range-thumb{margin-top:calc(var(--spacing)*-1.25);width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);appearance:none;border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-primary);background-color:var(--color-background);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring);border-radius:3.40282e38px;flex-shrink:0;display:block}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=range],.input[type=range])::-moz-range-thumb{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}:is(:is(.form,.field) input[type=range],.input[type=range])::-moz-range-track{height:calc(var(--spacing)*1.5);appearance:none;background:linear-gradient(to right,var(--primary)var(--slider-value),var(--muted)var(--slider-value));border-radius:3.40282e38px;width:100%}:is(:is(.form,.field) input[type=range],.input[type=range])::-ms-thumb{margin-top:calc(var(--spacing)*-1.25);width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);appearance:none;border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-primary);background-color:var(--color-background);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring);border-radius:3.40282e38px;flex-shrink:0;display:block}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=range],.input[type=range])::-ms-thumb{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}:is(:is(.form,.field) input[type=range],.input[type=range])::-ms-track{height:calc(var(--spacing)*1.5);appearance:none;border-radius:3.40282e38px;width:100%}:is(:is(.form,.field) input[type=range],.input[type=range])::-ms-fill-lower{background-color:var(--color-primary);border-radius:3.40282e38px}:is(:is(.form,.field) input[type=range],.input[type=range])::-ms-fill-upper{background-color:var(--color-muted);border-radius:3.40282e38px}:is(.form,.field) select,select.select{height:calc(var(--spacing)*9);appearance:none;justify-content:space-between;align-items:center;gap:calc(var(--spacing)*2);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-input);width:fit-content;padding-block:calc(var(--spacing)*2);padding-right:calc(var(--spacing)*9);padding-left:calc(var(--spacing)*3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));white-space:nowrap;--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-outline-style:none;background-color:#0000;background-image:var(--chevron-down-icon-50);background-position:right .75rem center;background-repeat:no-repeat;background-size:1rem;outline-style:none;display:flex}:is(:is(.form,.field) select,select.select):focus-visible{border-color:var(--color-ring);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) select,select.select):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}:is(:is(.form,.field) select,select.select):disabled{cursor:not-allowed;opacity:.5}:is(:is(.form,.field) select,select.select)[aria-invalid=true]{border-color:var(--color-destructive);--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) select,select.select)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}:is(:is(.form,.field) select,select.select):is(.dark *){background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) select,select.select):is(.dark *){background-color:color-mix(in oklab,var(--color-input)30%,transparent)}}@media (hover:hover){:is(:is(.form,.field) select,select.select):is(.dark *):hover{background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) select,select.select):is(.dark *):hover{background-color:color-mix(in oklab,var(--color-input)50%,transparent)}}}:is(:is(.form,.field) select,select.select):is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) select,select.select):is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)40%,transparent)}}:is(:is(.form,.field) select,select.select) option,:is(:is(.form,.field) select,select.select) optgroup{background-color:var(--color-popover);color:var(--color-popover-foreground)}:not(select).select{display:inline-flex;position:relative}:not(select).select [data-popover]{padding:calc(var(--spacing)*1)}:not(select).select [data-popover] [role=option]{cursor:default;align-items:center;gap:calc(var(--spacing)*2);text-overflow:ellipsis;white-space:nowrap;border-radius:var(--radius-sm);width:100%;padding-block:calc(var(--spacing)*1.5);padding-right:calc(var(--spacing)*7.5);padding-left:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-outline-style:none;-webkit-user-select:none;user-select:none;outline-style:none;display:flex;position:relative;overflow:hidden}@media (forced-colors:active){:not(select).select [data-popover] [role=option]{outline-offset:2px;outline:2px solid #0000}}:not(select).select [data-popover] [role=option]:disabled,:not(select).select [data-popover] [role=option][aria-disabled=true]{pointer-events:none;opacity:.5}:not(select).select [data-popover] [role=option][aria-hidden=true]{display:none}:not(select).select [data-popover] [role=option] svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);color:var(--color-muted-foreground);flex-shrink:0}:not(select).select [data-popover] [role=option][aria-selected=true]{background-image:var(--check-icon);background-position:right .5rem center;background-repeat:no-repeat;background-size:.875rem}:not(select).select [data-popover] [role=option].active,:not(select).select [data-popover] [role=option]:focus-visible{background-color:var(--color-accent);color:var(--color-accent-foreground)}:not(select).select [data-popover] [role=listbox] [role=heading]{padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-muted-foreground);display:flex}:not(select).select [data-popover] [role=listbox] [role=group]:not(:has([role=option]:not([aria-hidden=true]))){display:none}:not(select).select [data-popover] [role=separator]{margin-inline:calc(var(--spacing)*-1);margin-block:calc(var(--spacing)*1);border-color:var(--color-border)}:not(select).select [data-popover]>header{margin-inline:calc(var(--spacing)*-1);margin-top:calc(var(--spacing)*-1);margin-bottom:calc(var(--spacing)*1);height:calc(var(--spacing)*9);align-items:center;gap:calc(var(--spacing)*2);border-bottom-style:var(--tw-border-style);padding-inline:calc(var(--spacing)*3);border-bottom-width:1px;display:flex}:not(select).select [data-popover]>header svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);opacity:.5;flex-shrink:0}:not(select).select [data-popover]>header input[role=combobox]{height:calc(var(--spacing)*10);width:100%;min-width:calc(var(--spacing)*0);border-radius:var(--radius-md);padding-block:calc(var(--spacing)*3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-outline-style:none;background-color:#0000;outline-style:none;flex:1;display:flex}@media (forced-colors:active){:not(select).select [data-popover]>header input[role=combobox]{outline-offset:2px;outline:2px solid #0000}}:not(select).select [data-popover]>header input[role=combobox]::placeholder{color:var(--color-muted-foreground)}:not(select).select [data-popover]>header input[role=combobox]:disabled{cursor:not-allowed;opacity:.5}:not(select).select [data-popover] [role=listbox]:not(:has([data-value]:not([aria-hidden=true]))):before{text-overflow:ellipsis;white-space:nowrap;padding:calc(var(--spacing)*6);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));justify-content:center;align-items:center;display:flex;overflow:hidden}:not(select).select [data-popover] [role=listbox][data-empty]:not(:has([data-value]:not([aria-hidden=true]))):before{--tw-content:attr(data-empty);content:var(--tw-content)}:not(select).select [data-popover] [role=listbox]:not([data-empty]):not(:has([data-value]:not([aria-hidden=true]))):before{--tw-content:"No results found";content:var(--tw-content)}:not(select).select [data-popover]:has(>header input:not(:placeholder-shown)) [role=separator]{display:none}@media (hover:hover){:not(select).select:not([data-select-initialized]) [data-popover] [role=option]:hover{background-color:var(--color-accent);color:var(--color-accent-foreground)}}:is(.form,.field) input[type=checkbox][role=switch],.input[type=checkbox][role=switch]{height:1.15rem;width:calc(var(--spacing)*8);appearance:none;border-style:var(--tw-border-style);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-outline-style:none;background-color:var(--color-input);border-width:1px;border-color:#0000;border-radius:3.40282e38px;outline-style:none;flex-shrink:0;align-items:center;display:inline-flex}:is(:is(.form,.field) input[type=checkbox][role=switch],.input[type=checkbox][role=switch]):focus-visible{border-color:var(--color-ring);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=checkbox][role=switch],.input[type=checkbox][role=switch]):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}:is(:is(.form,.field) input[type=checkbox][role=switch],.input[type=checkbox][role=switch]):disabled{cursor:not-allowed;opacity:.5}:is(:is(.form,.field) input[type=checkbox][role=switch],.input[type=checkbox][role=switch]):checked{background-color:var(--color-primary)}:is(:is(.form,.field) input[type=checkbox][role=switch],.input[type=checkbox][role=switch]):is(.dark *){background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) input[type=checkbox][role=switch],.input[type=checkbox][role=switch]):is(.dark *){background-color:color-mix(in oklab,var(--color-input)80%,transparent)}}:is(:is(.form,.field) input[type=checkbox][role=switch],.input[type=checkbox][role=switch]):is(.dark *):checked{background-color:var(--color-primary)}:is(:is(.form,.field) input[type=checkbox][role=switch],.input[type=checkbox][role=switch]):before{content:var(--tw-content);pointer-events:none;content:var(--tw-content);content:var(--tw-content);width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);content:var(--tw-content);content:var(--tw-content);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);content:var(--tw-content);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));content:var(--tw-content);--tw-content:"";content:var(--tw-content);content:var(--tw-content);background-color:var(--color-background);border-radius:3.40282e38px;display:block}:is(:is(.form,.field) input[type=checkbox][role=switch],.input[type=checkbox][role=switch]):is(.dark *):before{content:var(--tw-content);background-color:var(--color-foreground)}:is(:is(.form,.field) input[type=checkbox][role=switch],.input[type=checkbox][role=switch]):checked:before{content:var(--tw-content);margin-inline-start:calc(var(--spacing)*3.5)}:is(:is(.form,.field) input[type=checkbox][role=switch],.input[type=checkbox][role=switch]):is(.dark *):checked:before{content:var(--tw-content);background-color:var(--color-primary-foreground)}.table{caption-side:bottom;width:100%;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.table thead tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.table tbody tr:last-child{border-style:var(--tw-border-style);border-width:0}.table tfoot{border-top-style:var(--tw-border-style);background-color:var(--color-muted);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);border-top-width:1px}@supports (color:color-mix(in lab, red, red)){.table tfoot{background-color:color-mix(in oklab,var(--color-muted)50%,transparent)}}.table tfoot>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.table tr{border-bottom-style:var(--tw-border-style);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));border-bottom-width:1px}@media (hover:hover){.table tr:hover{background-color:var(--color-muted)}@supports (color:color-mix(in lab, red, red)){.table tr:hover{background-color:color-mix(in oklab,var(--color-muted)50%,transparent)}}}.table th{height:calc(var(--spacing)*10);padding-inline:calc(var(--spacing)*2);text-align:left;vertical-align:middle;--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;color:var(--color-foreground)}.table th:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.table th>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x)var(--tw-translate-y)}.table td{padding:calc(var(--spacing)*2);vertical-align:middle;white-space:nowrap}.table td:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.table td>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x)var(--tw-translate-y)}.table caption{margin-top:calc(var(--spacing)*4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-muted-foreground)}.tabs{gap:calc(var(--spacing)*2);flex-direction:column;display:flex}.tabs [role=tablist]{height:calc(var(--spacing)*9);border-radius:var(--radius-lg);background-color:var(--color-muted);width:fit-content;color:var(--color-muted-foreground);justify-content:center;align-items:center;padding:3px;display:inline-flex}.tabs [role=tablist] [role=tab]{justify-content:center;align-items:center;gap:calc(var(--spacing)*1.5);border-radius:var(--radius-md);border-style:var(--tw-border-style);height:calc(100% - 1px);padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;color:var(--color-foreground);transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));border-width:1px;border-color:#0000;flex:1;display:inline-flex}.tabs [role=tablist] [role=tab]:focus-visible{border-color:var(--color-ring);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){.tabs [role=tablist] [role=tab]:focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}.tabs [role=tablist] [role=tab]:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--color-ring)}.tabs [role=tablist] [role=tab]:disabled{pointer-events:none;opacity:.5}.tabs [role=tablist] [role=tab]:is(.dark *){color:var(--color-muted-foreground)}.tabs [role=tablist] [role=tab] svg{pointer-events:none;flex-shrink:0}.tabs [role=tablist] [role=tab] svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.tabs [role=tablist] [role=tab][aria-selected=true]{background-color:var(--color-background);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tabs [role=tablist] [role=tab][aria-selected=true]:is(.dark *){border-color:var(--color-input);background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){.tabs [role=tablist] [role=tab][aria-selected=true]:is(.dark *){background-color:color-mix(in oklab,var(--color-input)30%,transparent)}}.tabs [role=tablist] [role=tab][aria-selected=true]:is(.dark *){color:var(--color-foreground)}.tabs [role=tabpanel]{--tw-outline-style:none;outline-style:none;flex:1}:is(.form,.field) textarea,.textarea{field-sizing:content;min-height:calc(var(--spacing)*16);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-input);width:100%;padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-outline-style:none;background-color:#0000;outline-style:none;display:flex}:is(:is(.form,.field) textarea,.textarea)::placeholder{color:var(--color-muted-foreground)}:is(:is(.form,.field) textarea,.textarea):focus-visible{border-color:var(--color-ring);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) textarea,.textarea):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}:is(:is(.form,.field) textarea,.textarea):disabled{cursor:not-allowed;opacity:.5}:is(:is(.form,.field) textarea,.textarea)[aria-invalid=true]{border-color:var(--color-destructive);--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) textarea,.textarea)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}@media (min-width:48rem){:is(:is(.form,.field) textarea,.textarea){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}:is(:is(.form,.field) textarea,.textarea):is(.dark *){background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) textarea,.textarea):is(.dark *){background-color:color-mix(in oklab,var(--color-input)30%,transparent)}}:is(:is(.form,.field) textarea,.textarea):is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){:is(:is(.form,.field) textarea,.textarea):is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)40%,transparent)}}.toaster{pointer-events:none;bottom:calc(var(--spacing)*0);z-index:50;width:100%;padding:calc(var(--spacing)*4);flex-direction:column-reverse;display:flex;position:fixed}@media (min-width:40rem){.toaster{max-width:calc(var(--spacing)*90)}}.toaster:not([data-align]),.toaster[data-align=end]{right:calc(var(--spacing)*0)}.toaster[data-align=start]{left:calc(var(--spacing)*0)}.toaster[data-align=center]{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);left:50%}.toaster .toast{pointer-events:auto;margin-top:calc(var(--spacing)*4);width:100%;transition-property:grid-template-rows,opacity,margin;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;--tw-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out);grid-template-rows:1fr;animation:.3s ease-in-out toast-up;display:grid}.toaster .toast .toast-content{align-items:center;gap:calc(var(--spacing)*2.5);border-radius:var(--radius-lg);border-style:var(--tw-border-style);background-color:var(--color-popover);padding:calc(var(--spacing)*3);color:var(--color-popover-foreground);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-width:1px;font-size:13px;display:flex;overflow:hidden}.toaster .toast .toast-content svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);flex-shrink:0}.toaster .toast .toast-content section h2{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.toaster .toast .toast-content section p{word-break:break-all;color:var(--color-muted-foreground)}.toaster .toast .toast-content footer{gap:calc(var(--spacing)*2);flex-direction:column;margin-left:auto;display:flex}.toaster .toast .toast-content footer [data-toast-action],.toaster .toast .toast-content footer [data-toast-cancel]{height:calc(var(--spacing)*6);padding-inline:calc(var(--spacing)*2.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.toaster .toast[aria-hidden=true]{margin:calc(var(--spacing)*0);border-style:var(--tw-border-style);padding:calc(var(--spacing)*0);opacity:0;border-width:0;grid-template-rows:0fr;overflow:hidden}.toaster .toast[aria-hidden=true] .toast-content{border-style:var(--tw-border-style);border-width:0}[data-tooltip]{position:relative}[data-tooltip]:before{pointer-events:none;visibility:hidden;z-index:60;width:fit-content;max-width:var(--container-xs);--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y);text-overflow:ellipsis;white-space:nowrap;border-radius:var(--radius-md);background-color:var(--color-primary);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-primary-foreground);opacity:0;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-content:attr(data-tooltip);content:var(--tw-content);position:absolute;overflow:hidden}[data-tooltip]:hover:before{visibility:visible;--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y);opacity:1}[data-tooltip]:focus-visible:not(:hover):before{display:none}:is([data-tooltip]:not([data-side]),[data-tooltip][data-side=top]):before{content:var(--tw-content);content:var(--tw-content);margin-bottom:calc(var(--spacing)*1.5);content:var(--tw-content);--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y);bottom:100%}@media (hover:hover){:is([data-tooltip]:not([data-side]),[data-tooltip][data-side=top]):hover:before{content:var(--tw-content);--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}}[data-tooltip][data-side=bottom]:before{content:var(--tw-content);content:var(--tw-content);margin-top:calc(var(--spacing)*1.5);content:var(--tw-content);--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y);top:100%}@media (hover:hover){[data-tooltip][data-side=bottom]:hover:before{content:var(--tw-content);--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}}:is([data-tooltip]:not([data-side]),[data-tooltip][data-side=top],[data-tooltip][data-side=bottom])[data-align=start]:before{content:var(--tw-content);left:calc(var(--spacing)*0)}:is([data-tooltip]:not([data-side]),[data-tooltip][data-side=top],[data-tooltip][data-side=bottom])[data-align=end]:before{content:var(--tw-content);right:calc(var(--spacing)*0)}:is(:is([data-tooltip]:not([data-side]),[data-tooltip][data-side=top],[data-tooltip][data-side=bottom]):not([data-align]),:is([data-tooltip]:not([data-side]),[data-tooltip][data-side=top],[data-tooltip][data-side=bottom])[data-align=center]):before{content:var(--tw-content);content:var(--tw-content);--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);left:50%}[data-tooltip][data-side=left]:before{content:var(--tw-content);content:var(--tw-content);margin-right:calc(var(--spacing)*1.5);content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y);right:100%}@media (hover:hover){[data-tooltip][data-side=left]:hover:before{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}}[data-tooltip][data-side=right]:before{content:var(--tw-content);content:var(--tw-content);margin-left:calc(var(--spacing)*1.5);content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y);left:100%}@media (hover:hover){[data-tooltip][data-side=right]:hover:before{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}}:is([data-tooltip][data-side=left],[data-tooltip][data-side=right])[data-align=start]:before{content:var(--tw-content);top:calc(var(--spacing)*0)}:is([data-tooltip][data-side=left],[data-tooltip][data-side=right])[data-align=end]:before{content:var(--tw-content);bottom:calc(var(--spacing)*0)}:is(:is([data-tooltip][data-side=left],[data-tooltip][data-side=right]):not([data-align]),:is([data-tooltip][data-side=left],[data-tooltip][data-side=right])[data-align=center]):before{content:var(--tw-content);content:var(--tw-content);--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);top:50%}}@layer utilities{.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-22{top:calc(var(--spacing)*22)}.right-1\.5{right:calc(var(--spacing)*1.5)}.right-2\.5{right:calc(var(--spacing)*2.5)}.right-3{right:calc(var(--spacing)*3)}.bottom-0{bottom:calc(var(--spacing)*0)}.left-1\.5{left:calc(var(--spacing)*1.5)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.isolate{isolation:isolate}.z-10{z-index:10}.col-span-2{grid-column:span 2/span 2}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing)*0)}.mx-auto{margin-inline:auto}.my-4{margin-block:calc(var(--spacing)*4)}.my-6{margin-block:calc(var(--spacing)*6)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.mr-auto{margin-right:auto}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.-ml-1\.5{margin-left:calc(var(--spacing)*-1.5)}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.size-2\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.size-3{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.size-3\.5{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-7{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.size-8{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.size-9{width:calc(var(--spacing)*9);height:calc(var(--spacing)*9)}.size-10{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.h-2{height:calc(var(--spacing)*2)}.h-4{height:calc(var(--spacing)*4)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-full{height:100%}.max-h-64{max-height:calc(var(--spacing)*64)}.max-h-\[150px\]{max-height:150px}.max-h-\[200px\]{max-height:200px}.max-h-\[612px\]{max-height:612px}.max-h-\[650px\]{max-height:650px}.min-h-25{min-height:calc(var(--spacing)*25)}.min-h-27{min-height:calc(var(--spacing)*27)}.min-h-77{min-height:calc(var(--spacing)*77)}.min-h-\[350px\]{min-height:350px}.w-0{width:calc(var(--spacing)*0)}.w-1\/2{width:50%}.w-2\/3{width:66.6667%}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing)*4)}.w-7\.5{width:calc(var(--spacing)*7.5)}.w-10{width:calc(var(--spacing)*10)}.w-48{width:calc(var(--spacing)*48)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-\[100px\]{width:100px}.w-\[150px\]{width:150px}.w-\[180px\]{width:180px}.w-\[200px\]{width:200px}.w-\[271px\]{width:271px}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.max-w-72{max-width:calc(var(--spacing)*72)}.max-w-\[75\%\]{max-width:75%}.max-w-\[200px\]{max-width:200px}.max-w-\[300px\]{max-width:300px}.max-w-\[450px\]{max-width:450px}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-screen-lg{max-width:var(--breakpoint-lg)}.max-w-screen-md{max-width:var(--breakpoint-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-5{min-width:calc(var(--spacing)*5)}.min-w-32{min-width:calc(var(--spacing)*32)}.min-w-56{min-width:calc(var(--spacing)*56)}.min-w-\[8rem\]{min-width:8rem}.flex-1{flex:1}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0\.5{--tw-translate-y:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.scroll-m-20{scroll-margin:calc(var(--spacing)*20)}.scroll-mt-14{scroll-margin-top:calc(var(--spacing)*14)}.scroll-mt-16{scroll-margin-top:calc(var(--spacing)*16)}.list-decimal{list-style-type:decimal}.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))}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-start{justify-content:flex-start}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1\.5{column-gap:calc(var(--spacing)*1.5)}.gap-x-2{column-gap:calc(var(--spacing)*2)}.gap-x-4{column-gap:calc(var(--spacing)*4)}.gap-x-10{column-gap:calc(var(--spacing)*10)}:where(.-space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-4{row-gap:calc(var(--spacing)*4)}.gap-y-6{row-gap:calc(var(--spacing)*6)}.gap-y-10{row-gap:calc(var(--spacing)*10)}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[2px\]{border-radius:2px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-r-0{border-right-style:var(--tw-border-style);border-right-width:0}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-amber-50{border-color:var(--color-amber-50)}.border-border,.border-border\/50{border-color:var(--color-border)}@supports (color:color-mix(in lab, red, red)){.border-border\/50{border-color:color-mix(in oklab,var(--color-border)50%,transparent)}}.border-muted{border-color:var(--color-muted)}.border-transparent{border-color:#0000}.\!bg-muted\/40{background-color:var(--color-muted)!important}@supports (color:color-mix(in lab, red, red)){.\!bg-muted\/40{background-color:color-mix(in oklab,var(--color-muted)40%,transparent)!important}}.bg-accent{background-color:var(--color-accent)}.bg-amber-50{background-color:var(--color-amber-50)}.bg-background{background-color:var(--color-background)}.bg-card{background-color:var(--color-card)}.bg-foreground{background-color:var(--color-foreground)}.bg-muted{background-color:var(--color-muted)}.bg-muted-foreground{background-color:var(--color-muted-foreground)}.bg-muted\/50{background-color:var(--color-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/50{background-color:color-mix(in oklab,var(--color-muted)50%,transparent)}}.bg-primary,.bg-primary\/20{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/20{background-color:color-mix(in oklab,var(--color-primary)20%,transparent)}}.bg-sidebar-primary{background-color:var(--color-sidebar-primary)}.bg-transparent{background-color:#0000}.object-cover{object-fit:cover}.\!p-3\.5{padding:calc(var(--spacing)*3.5)!important}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-10{padding:calc(var(--spacing)*10)}.px-0{padding-inline:calc(var(--spacing)*0)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-9{padding-inline:calc(var(--spacing)*9)}.px-\[0\.3rem\]{padding-inline:.3rem}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-\[0\.2rem\]{padding-block:.2rem}.pt-1\.5{padding-top:calc(var(--spacing)*1.5)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-15{padding-top:calc(var(--spacing)*15)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-9{padding-right:calc(var(--spacing)*9)}.pr-10{padding-right:calc(var(--spacing)*10)}.pr-12{padding-right:calc(var(--spacing)*12)}.pr-16{padding-right:calc(var(--spacing)*16)}.pr-20{padding-right:calc(var(--spacing)*20)}.pr-24{padding-right:calc(var(--spacing)*24)}.pr-26{padding-right:calc(var(--spacing)*26)}.pr-30{padding-right:calc(var(--spacing)*30)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.pb-17{padding-bottom:calc(var(--spacing)*17)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-7{padding-left:calc(var(--spacing)*7)}.pl-8{padding-left:calc(var(--spacing)*8)}.pl-8\.5{padding-left:calc(var(--spacing)*8.5)}.pl-9{padding-left:calc(var(--spacing)*9)}.pl-15{padding-left:calc(var(--spacing)*15)}.pl-21{padding-left:calc(var(--spacing)*21)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-sm\/relaxed{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[1\.05rem\]{font-size:1.05rem}.leading-none{--tw-leading:1;line-height:1}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-900{color:var(--color-amber-900)}.text-blue-500{color:var(--color-blue-500)}.text-destructive{color:var(--color-destructive)}.text-foreground{color:var(--color-foreground)}.text-green-500{color:var(--color-green-500)}.text-muted-foreground{color:var(--color-muted-foreground)}.text-neutral-800{color:var(--color-neutral-800)}.text-primary-foreground{color:var(--color-primary-foreground)}.text-purple-500{color:var(--color-purple-500)}.text-red-500{color:var(--color-red-500)}.text-sidebar-primary-foreground{color:var(--color-sidebar-primary-foreground)}.text-yellow-500{color:var(--color-yellow-500)}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-100{opacity:1}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-offset-background{--tw-ring-offset-color:var(--color-background)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-400{--tw-duration:.4s;transition-duration:.4s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-open\:rotate-180:is(:where(.group):is([open],:popover-open,:open) *){rotate:180deg}.group-aria-checked\:visible:is(:where(.group)[aria-checked=true] *){visibility:visible}.group-data-\[copied\=true\]\:block:is(:where(.group)[data-copied=true] *){display:block}.group-data-\[copied\=true\]\:hidden:is(:where(.group)[data-copied=true] *){display:none}.group-\[\.copied\]\:block:is(:where(.group).copied *){display:block}.group-\[\.copied\]\:hidden:is(:where(.group).copied *){display:none}.peer-checked\:border-primary:is(:where(.peer):checked~*){border-color:var(--color-primary)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.checked\:border-blue-600:checked{border-color:var(--color-blue-600)}.checked\:border-green-600:checked{border-color:var(--color-green-600)}.checked\:bg-blue-500:checked{background-color:var(--color-blue-500)}.checked\:bg-blue-600:checked{background-color:var(--color-blue-600)}.checked\:bg-green-600:checked{background-color:var(--color-green-600)}.checked\:before\:bg-background:checked:before{content:var(--tw-content);background-color:var(--color-background)}.checked\:after\:bg-white:checked:after{content:var(--tw-content);background-color:var(--color-white)}@media (hover:hover){:where(.hover\:space-x-1:hover>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}.hover\:bg-accent\/50:hover{background-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/50:hover{background-color:color-mix(in oklab,var(--color-accent)50%,transparent)}}.hover\:bg-destructive\/10:hover{background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/10:hover{background-color:color-mix(in oklab,var(--color-destructive)10%,transparent)}}.hover\:bg-foreground:hover{background-color:var(--color-foreground)}.hover\:bg-muted:hover{background-color:var(--color-muted)}.hover\:text-accent-foreground:hover{color:var(--color-accent-foreground)}.hover\:text-foreground:hover{color:var(--color-foreground)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:bg-destructive\/10:focus{background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.focus\:bg-destructive\/10:focus{background-color:color-mix(in oklab,var(--color-destructive)10%,transparent)}}.focus\:text-destructive:focus{color:var(--color-destructive)}.focus-visible\:border-ring:focus-visible{border-color:var(--color-ring)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-ring:focus-visible,.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-50:disabled{opacity:.5}.has-\[\:checked\]\:border-primary:has(:checked){border-color:var(--color-primary)}.has-\[\:checked\]\:bg-primary\/5:has(:checked){background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.has-\[\:checked\]\:bg-primary\/5:has(:checked){background-color:color-mix(in oklab,var(--color-primary)5%,transparent)}}.has-\[input\[type\=\'checkbox\'\]\:checked\]\:border-blue-600:has(:is(input[type=checkbox]:checked)){border-color:var(--color-blue-600)}.has-\[input\[type\=\'checkbox\'\]\:checked\]\:bg-blue-50:has(:is(input[type=checkbox]:checked)){background-color:var(--color-blue-50)}.has-\[input\[type\=\'radio\'\]\:checked\]\:border-green-600:has(:is(input[type=radio]:checked)){border-color:var(--color-green-600)}.has-\[input\[type\=\'radio\'\]\:checked\]\:bg-green-50:has(:is(input[type=radio]:checked)){background-color:var(--color-green-50)}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing)*2.5)}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--color-destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}.aria-pressed\:bg-transparent[aria-pressed=true]{background-color:#0000}.aria-pressed\:text-blue-600[aria-pressed=true]{color:var(--color-blue-600)}@media (hover:hover){.aria-pressed\:hover\:bg-accent[aria-pressed=true]:hover{background-color:var(--color-accent)}}@media not all and (min-width:40rem){.max-sm\:flex-col{flex-direction:column}}@media (min-width:40rem){.sm\:max-w-\[425px\]{max-width:425px}.sm\:gap-2\.5{gap:calc(var(--spacing)*2.5)}.sm\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.sm\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.sm\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}}@media (min-width:48rem){.md\:ml-4{margin-left:calc(var(--spacing)*4)}.md\:w-\[239px\]{width:239px}.md\:max-w-\[200px\]{max-width:200px}.md\:flex-row{flex-direction:row}.md\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.md\:p-6{padding:calc(var(--spacing)*6)}.md\:p-12{padding:calc(var(--spacing)*12)}.md\:pl-8{padding-left:calc(var(--spacing)*8)}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}}@media (min-width:64rem){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:80rem){.xl\:block{display:block}.xl\:p-12{padding:calc(var(--spacing)*12)}.xl\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}}@container (min-width:28rem){.\@md\:w-auto{width:auto}.\@md\:min-w-sm{min-width:var(--container-sm)}}.dark\:block:is(.dark *){display:block}.dark\:hidden:is(.dark *){display:none}.dark\:border-amber-950:is(.dark *){border-color:var(--color-amber-950)}.dark\:bg-amber-950:is(.dark *){background-color:var(--color-amber-950)}.dark\:text-amber-100:is(.dark *){color:var(--color-amber-100)}.dark\:text-neutral-300:is(.dark *){color:var(--color-neutral-300)}.dark\:checked\:border-blue-700:is(.dark *):checked{border-color:var(--color-blue-700)}.dark\:checked\:bg-blue-600:is(.dark *):checked{background-color:var(--color-blue-600)}.dark\:checked\:bg-blue-700:is(.dark *):checked{background-color:var(--color-blue-700)}.dark\:checked\:bg-input\/30:is(.dark *):checked{background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){.dark\:checked\:bg-input\/30:is(.dark *):checked{background-color:color-mix(in oklab,var(--color-input)30%,transparent)}}.dark\:checked\:before\:bg-primary:is(.dark *):checked:before{content:var(--tw-content);background-color:var(--color-primary)}@media (hover:hover){.dark\:hover\:bg-destructive\/20:is(.dark *):hover{background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-destructive\/20:is(.dark *):hover{background-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}}.dark\:focus\:bg-destructive\/20:is(.dark *):focus{background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:focus\:bg-destructive\/20:is(.dark *):focus{background-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}.dark\:has-\[\:checked\]\:bg-primary\/10:is(.dark *):has(:checked){background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.dark\:has-\[\:checked\]\:bg-primary\/10:is(.dark *):has(:checked){background-color:color-mix(in oklab,var(--color-primary)10%,transparent)}}.dark\:has-\[input\[type\=\'checkbox\'\]\:checked\]\:border-blue-900:is(.dark *):has(:is(input[type=checkbox]:checked)){border-color:var(--color-blue-900)}.dark\:has-\[input\[type\=\'checkbox\'\]\:checked\]\:bg-blue-950:is(.dark *):has(:is(input[type=checkbox]:checked)){background-color:var(--color-blue-950)}.dark\:has-\[input\[type\=\'radio\'\]\:checked\]\:border-green-900:is(.dark *):has(:is(input[type=radio]:checked)){border-color:var(--color-green-900)}.dark\:has-\[input\[type\=\'radio\'\]\:checked\]\:bg-green-950:is(.dark *):has(:is(input[type=radio]:checked)){background-color:var(--color-green-950)}.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)40%,transparent)}}@media (hover:hover){.dark\:aria-pressed\:hover\:bg-accent\/50:is(.dark *)[aria-pressed=true]:hover{background-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.dark\:aria-pressed\:hover\:bg-accent\/50:is(.dark *)[aria-pressed=true]:hover{background-color:color-mix(in oklab,var(--color-accent)50%,transparent)}}}.\[\&_\[data-new-link\]\:\:after\]\:ml-auto [data-new-link]:after{margin-left:auto}.\[\&_\[data-new-link\]\:\:after\]\:rounded-md [data-new-link]:after{border-radius:var(--radius-md)}.\[\&_\[data-new-link\]\:\:after\]\:bg-sidebar-primary [data-new-link]:after{background-color:var(--color-sidebar-primary)}.\[\&_\[data-new-link\]\:\:after\]\:px-2 [data-new-link]:after{padding-inline:calc(var(--spacing)*2)}.\[\&_\[data-new-link\]\:\:after\]\:py-0\.5 [data-new-link]:after{padding-block:calc(var(--spacing)*.5)}.\[\&_\[data-new-link\]\:\:after\]\:text-xs [data-new-link]:after{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[data-new-link\]\:\:after\]\:font-medium [data-new-link]:after{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[data-new-link\]\:\:after\]\:text-sidebar-primary-foreground [data-new-link]:after{color:var(--color-sidebar-primary-foreground)}.\[\&_\[data-new-link\]\:\:after\]\:content-\[\'New\'\] [data-new-link]:after{--tw-content:"New";content:var(--tw-content)}.\[\&_a\]\:inline-block a{display:inline-block}.\[\&_a\]\:text-muted-foreground a{color:var(--color-muted-foreground)}.\[\&_a\]\:no-underline a{text-decoration-line:none}.\[\&_a\]\:transition-colors a{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.\[\&_a\]\:hover\:text-foreground a:hover{color:var(--color-foreground)}}.\[\&_img\]\:size-8 img{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.\[\&_img\]\:size-12 img{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.\[\&_img\]\:shrink-0 img{flex-shrink:0}.\[\&_img\]\:rounded-full img{border-radius:3.40282e38px}.\[\&_img\]\:object-cover img{object-fit:cover}.\[\&_img\]\:ring-2 img{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.\[\&_img\]\:ring-background img{--tw-ring-color:var(--color-background)}.\[\&_img\]\:ring-card img{--tw-ring-color:var(--color-card)}.\[\&_img\]\:grayscale img{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.\[\&_img\]\:transition-all img{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.\[\&_img\]\:duration-300 img{--tw-duration:.3s;transition-duration:.3s}.\[\&_img\]\:ease-in-out img{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.\[\&_li\]\:mt-0 li{margin-top:calc(var(--spacing)*0)}.\[\&_li\]\:pt-2 li{padding-top:calc(var(--spacing)*2)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:size-5 svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\]\:\!text-destructive svg{color:var(--color-destructive)!important}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-6 svg:not([class*=size-]){width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.\[\&_ul\]\:m-0 ul{margin:calc(var(--spacing)*0)}.\[\&_ul\]\:list-none ul{list-style-type:none}.\[\&_ul_ul\]\:pl-4 ul ul{padding-left:calc(var(--spacing)*4)}@media (min-width:48rem){:is(.md\:\*\:\[\.card\]\:basis-1\/4>*).card{flex-basis:25%}}.\[a\]\:transition-colors:is(a){transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.\[a\]\:hover\:bg-accent\/50:is(a):hover{background-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.\[a\]\:hover\:bg-accent\/50:is(a):hover{background-color:color-mix(in oklab,var(--color-accent)50%,transparent)}}}.\[\&\>a\]\:underline>a{text-decoration-line:underline}.\[\&\>a\]\:underline-offset-4>a{text-underline-offset:4px}.\[\&\>a\:hover\]\:text-primary>a:hover{color:var(--color-primary)}.\[\&\>svg\]\:mb-3>svg{margin-bottom:calc(var(--spacing)*3)}.\[\&\>svg\]\:size-3>svg{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:size-6>svg{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.aria-pressed\:\[\&\>svg\]\:fill-blue-600[aria-pressed=true]>svg{fill:var(--color-blue-600)}}:root{--radius:.625rem;--background:oklch(1 0 0);--foreground:oklch(.145 0 0);--card:oklch(1 0 0);--card-foreground:oklch(.145 0 0);--popover:oklch(1 0 0);--popover-foreground:oklch(.145 0 0);--primary:oklch(.205 0 0);--primary-foreground:oklch(.985 0 0);--secondary:oklch(.97 0 0);--secondary-foreground:oklch(.205 0 0);--muted:oklch(.97 0 0);--muted-foreground:oklch(.556 0 0);--accent:oklch(.97 0 0);--accent-foreground:oklch(.205 0 0);--destructive:oklch(.577 .245 27.325);--border:oklch(.922 0 0);--input:oklch(.922 0 0);--ring:oklch(.708 0 0);--chart-1:oklch(.646 .222 41.116);--chart-2:oklch(.6 .118 184.704);--chart-3:oklch(.398 .07 227.392);--chart-4:oklch(.828 .189 84.429);--chart-5:oklch(.769 .188 70.08);--sidebar:oklch(.985 0 0);--sidebar-foreground:oklch(.145 0 0);--sidebar-primary:oklch(.205 0 0);--sidebar-primary-foreground:oklch(.985 0 0);--sidebar-accent:oklch(.97 0 0);--sidebar-accent-foreground:oklch(.205 0 0);--sidebar-border:oklch(.922 0 0);--sidebar-ring:oklch(.708 0 0);--sidebar-width:16rem;--sidebar-mobile-width:18rem;--scrollbar-track:transparent;--scrollbar-thumb:#0000004d;--scrollbar-width:6px;--scrollbar-radius:6px;--chevron-down-icon:url("data:image/svg+xml;utf8,");--chevron-down-icon-50:url("data:image/svg+xml;utf8,");--check-icon:url("data:image/svg+xml;utf8,")}.dark{--background:oklch(.145 0 0);--foreground:oklch(.985 0 0);--card:oklch(.205 0 0);--card-foreground:oklch(.985 0 0);--popover:oklch(.269 0 0);--popover-foreground:oklch(.985 0 0);--primary:oklch(.922 0 0);--primary-foreground:oklch(.205 0 0);--secondary:oklch(.269 0 0);--secondary-foreground:oklch(.985 0 0);--muted:oklch(.269 0 0);--muted-foreground:oklch(.708 0 0);--accent:oklch(.371 0 0);--accent-foreground:oklch(.985 0 0);--destructive:oklch(.704 .191 22.216);--border:oklch(1 0 0/10%);--input:oklch(1 0 0/15%);--ring:oklch(.556 0 0);--chart-1:oklch(.488 .243 264.376);--chart-2:oklch(.696 .17 162.48);--chart-3:oklch(.769 .188 70.08);--chart-4:oklch(.627 .265 303.9);--chart-5:oklch(.645 .246 16.439);--sidebar:oklch(.205 0 0);--sidebar-foreground:oklch(.985 0 0);--sidebar-primary:oklch(.488 .243 264.376);--sidebar-primary-foreground:oklch(.985 0 0);--sidebar-accent:oklch(.269 0 0);--sidebar-accent-foreground:oklch(.985 0 0);--sidebar-border:oklch(1 0 0/10%);--sidebar-ring:oklch(.439 0 0);--scrollbar-thumb:#ffffff4d;--chevron-down-icon:url("data:image/svg+xml;utf8,");--chevron-down-icon-50:url("data:image/svg+xml;utf8,");--check-icon:url("data:image/svg+xml;utf8,");color-scheme:dark}.button-group{isolation:isolate;align-items:stretch;width:fit-content;display:inline-flex}.button-group>:focus-visible,.button-group>:is(.dropdown-menu,.popover)>button:focus-visible{z-index:10;position:relative}.button-group>hr[role=separator]{margin:calc(var(--spacing)*0);height:auto;width:calc(var(--spacing)*0);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-input);flex-shrink:0;align-self:stretch}.button-group:not([data-orientation=vertical])>:not(:first-child),.button-group:not([data-orientation=vertical])>:is(.dropdown-menu,.popover):not(:first-child)>button{border-left-style:var(--tw-border-style);border-left-width:0;border-top-left-radius:0;border-bottom-left-radius:0}.button-group:not([data-orientation=vertical])>:not(:last-child),.button-group:not([data-orientation=vertical])>:is(.dropdown-menu,.popover):not(:last-child)>button{border-top-right-radius:0;border-bottom-right-radius:0}.button-group[data-orientation=vertical]{flex-direction:column}.button-group[data-orientation=vertical]>hr[role=separator]{width:auto;height:1px}.button-group[data-orientation=vertical]>:not(:first-child){border-top-style:var(--tw-border-style);border-top-width:0;border-top-left-radius:0;border-top-right-radius:0}.button-group[data-orientation=vertical]>:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0}@media not all and (min-width:48rem){.sidebar:not([data-sidebar-initialized]){display:none}:is(.sidebar:not([aria-hidden]),.sidebar[aria-hidden=false]){inset:calc(var(--spacing)*0);z-index:40;background-color:#00000080;position:fixed}@supports (color:color-mix(in lab, red, red)){:is(.sidebar:not([aria-hidden]),.sidebar[aria-hidden=false]){background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}}.sidebar nav{inset-block:calc(var(--spacing)*0);z-index:50;width:var(--sidebar-mobile-width);background-color:var(--color-sidebar);color:var(--color-sidebar-foreground);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;--tw-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out);flex-direction:column;display:flex;position:fixed}@media (min-width:48rem){.sidebar nav{width:var(--sidebar-width)}}.sidebar+*{transition-property:margin;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;--tw-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out)}:is(.sidebar:not([data-side]),.sidebar[data-side=left]) nav{left:calc(var(--spacing)*0);border-right-style:var(--tw-border-style);border-right-width:1px}:is(.sidebar:not([data-side]),.sidebar[data-side=left])+*{position:relative}@media (min-width:48rem){:is(.sidebar:not([data-side]),.sidebar[data-side=left])+*{margin-left:var(--sidebar-width)}}:is(.sidebar:not([data-side]),.sidebar[data-side=left])[aria-hidden=true] nav{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}@media (min-width:48rem){:is(.sidebar:not([data-side]),.sidebar[data-side=left])[aria-hidden=true]+*{margin-left:calc(var(--spacing)*0)}}.sidebar[data-side=right] nav{right:calc(var(--spacing)*0);border-left-style:var(--tw-border-style);border-left-width:1px}.sidebar[data-side=right]+*{position:relative}@media (min-width:48rem){.sidebar[data-side=right]+*{margin-right:var(--sidebar-width)}}.sidebar[data-side=right][aria-hidden=true] nav{--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}@media (min-width:48rem){.sidebar[data-side=right][aria-hidden=true]+*{margin-right:calc(var(--spacing)*0)}}.sidebar nav>header,.sidebar nav>footer{gap:calc(var(--spacing)*2);padding:calc(var(--spacing)*2);flex-direction:column;display:flex}.sidebar nav [role=separator]{margin-inline:calc(var(--spacing)*2);border-color:var(--color-sidebar-border);width:auto}.sidebar nav>section{min-height:calc(var(--spacing)*0);gap:calc(var(--spacing)*2);flex-direction:column;flex:1;display:flex;overflow-y:auto}.sidebar nav>section>[role=group]{width:100%;min-width:calc(var(--spacing)*0);padding:calc(var(--spacing)*2);flex-direction:column;display:flex;position:relative}.sidebar nav>section h3{height:calc(var(--spacing)*8);border-radius:var(--radius-md);padding-inline:calc(var(--spacing)*2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-sidebar-foreground);--tw-ring-color:var(--color-sidebar-ring);--tw-outline-style:none;transition-property:margin,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;--tw-ease:linear;outline-style:none;flex-shrink:0;align-items:center;transition-duration:.2s;transition-timing-function:linear;display:flex}@supports (color:color-mix(in lab, red, red)){.sidebar nav>section h3{color:color-mix(in oklab,var(--color-sidebar-foreground)70%,transparent)}}@media (forced-colors:active){.sidebar nav>section h3{outline-offset:2px;outline:2px solid #0000}}.sidebar nav>section h3:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.sidebar nav>section h3>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);flex-shrink:0}.sidebar nav>section ul{width:100%;min-width:calc(var(--spacing)*0);gap:calc(var(--spacing)*1);flex-direction:column;display:flex}.sidebar nav>section ul li{position:relative}.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary{align-items:center;gap:calc(var(--spacing)*2);border-radius:var(--radius-md);width:100%;padding:calc(var(--spacing)*2);text-align:left;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-ring-color:var(--color-sidebar-ring);--tw-outline-style:none;transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));outline-style:none;display:flex;overflow:hidden}@media (forced-colors:active){:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary){outline-offset:2px;outline:2px solid #0000}}@media (hover:hover){:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary):hover{background-color:var(--color-sidebar-accent);color:var(--color-sidebar-accent-foreground)}}:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary):focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary):active{background-color:var(--color-sidebar-accent);color:var(--color-sidebar-accent-foreground)}:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary):disabled,:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary)[aria-disabled=true]{pointer-events:none;opacity:.5}:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary)>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary)>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);flex-shrink:0}:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary)[aria-current=page]{background-color:var(--color-sidebar-accent);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-sidebar-accent-foreground)}@media (hover:hover){:is(:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary):not([data-variant]),:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary)[data-variant=default]):hover{background-color:var(--color-sidebar-accent);color:var(--color-sidebar-accent-foreground)}}:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary)[data-variant=outline]{background-color:var(--color-background);--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary)[data-variant=outline]:hover{background-color:var(--color-sidebar-accent);color:var(--color-sidebar-accent-foreground);--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary):not([data-size]),:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary)[data-size=default]{height:calc(var(--spacing)*8);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary)[data-size=sm]{height:calc(var(--spacing)*7);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary)[data-size=lg]{height:calc(var(--spacing)*12);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}:is(.sidebar nav>section ul li>a,.sidebar nav>section ul li>details>summary)[data-size=lg]:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.sidebar nav>section ul li>details:not([open])>summary:after{rotate:-90deg}.sidebar nav>section ul li>details>summary:after{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5);background-color:var(--color-primary);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-ease:linear;--tw-content:"";content:var(--tw-content);-webkit-mask-image:var(--chevron-down-icon);-webkit-mask-image:var(--chevron-down-icon);mask-image:var(--chevron-down-icon);margin-left:auto;transition-timing-function:linear;display:block;-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:1rem;mask-size:1rem;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.sidebar nav>section ul li>details::details-content{padding-inline:calc(var(--spacing)*3.5)}.sidebar nav>section ul ul{width:100%;min-width:calc(var(--spacing)*0);--tw-translate-x:1px;translate:var(--tw-translate-x)var(--tw-translate-y);gap:calc(var(--spacing)*1);border-left-style:var(--tw-border-style);border-left-width:1px;border-color:var(--color-sidebar-border);padding-inline:calc(var(--spacing)*2.5);padding-block:calc(var(--spacing)*.5);flex-direction:column;display:flex}@keyframes toast-up{0%{opacity:0;transform:translateY(100%)}}.htmx-indicator{visibility:hidden;opacity:0;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));transition-behavior:allow-discrete}.htmx-indicator:not(.htmx-request){display:none}.htmx-request,.htmx-request.htmx-indicator{visibility:visible;opacity:1}.content>h2{margin-top:calc(var(--spacing)*12);margin-bottom:calc(var(--spacing)*6);scroll-margin:calc(var(--spacing)*22);font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.content>h2:first-child{margin-top:calc(var(--spacing)*0)}@media (min-width:64rem){.content>h2{margin-top:calc(var(--spacing)*20)}}.content>h3{margin-top:calc(var(--spacing)*8);margin-bottom:calc(var(--spacing)*6);scroll-margin:calc(var(--spacing)*22);font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.content>h4{margin-block:calc(var(--spacing)*6);scroll-margin:calc(var(--spacing)*22);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.content .prose{margin-block:calc(var(--spacing)*6)}.content .prose a{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);text-underline-offset:4px;text-decoration-line:underline}.content .prose code:not(pre>code){border-radius:var(--radius-md);background-color:var(--color-muted);font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:.2rem;padding-inline:.3rem;position:relative}@supports (color:color-mix(in lab, red, red)){.content .prose code:not(pre>code){background-color:color-mix(in oklab,var(--color-muted)50%,transparent)}}.content .prose blockquote{border-left-style:var(--tw-border-style);border-left-width:4px;border-color:var(--color-border);padding-left:calc(var(--spacing)*4)}.content .prose ol{margin-left:calc(var(--spacing)*6);list-style-type:decimal}.content .prose ul{margin-left:calc(var(--spacing)*6);list-style-type:disc}:is(.content .prose ol,.content .prose ul) li{margin-top:calc(var(--spacing)*2)}.content .prose dl{margin-block:calc(var(--spacing)*6);border-bottom-style:var(--tw-border-style);padding-bottom:calc(var(--spacing)*3);border-bottom-width:1px}.content .prose dl dt{margin-top:calc(var(--spacing)*3);border-top-style:var(--tw-border-style);padding-top:calc(var(--spacing)*3);border-top-width:1px}.content .prose dl dt:first-child{margin-top:calc(var(--spacing)*0)}.content .prose dl dd{margin-top:calc(var(--spacing)*2)}.content .prose dl dl{margin-block:calc(var(--spacing)*0);margin-top:calc(var(--spacing)*4);border-bottom-style:var(--tw-border-style);padding-bottom:calc(var(--spacing)*0);padding-left:calc(var(--spacing)*8);border-bottom-width:0}.content .prose b,.content .prose strong{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.content .prose>p,.content .prose>blockquote,.content .prose>ul,.content .prose>ol,.content .prose>dl,.content .prose>table,.content .prose>pre,.content .prose>p{margin-block:calc(var(--spacing)*6)}.content .prose>:first-child{margin-top:calc(var(--spacing)*0)!important}.content .prose>:last-child{margin-bottom:calc(var(--spacing)*0)!important}.content .step{counter-increment:step}.content .step:before{margin-right:calc(var(--spacing)*2);height:calc(var(--spacing)*8);width:calc(var(--spacing)*8);border-style:var(--tw-border-style);border-width:4px;border-color:var(--color-background);background-color:var(--color-muted);text-align:center;text-indent:-1px;font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);content:counter(step);border-radius:3.40282e38px;justify-content:center;align-items:center;display:inline-flex;position:absolute}@media (min-width:48rem){.content .step:before{height:calc(var(--spacing)*9);width:calc(var(--spacing)*9);margin-top:-4px;margin-left:-50px}}.content .step>h3{min-height:calc(var(--spacing)*8);align-items:center;display:flex}@media not all and (min-width:48rem){.content .step>h3{margin-left:calc(var(--spacing)*10)}}:root{--hljs-bg:#fff;--hljs-color:#24292e;--hljs-keyword:#d73a49;--hljs-title:#6f42c1;--hljs-literal:#005cc5;--hljs-string:#032f62;--hljs-symbol:#e36209;--hljs-comment:#6a737d;--hljs-tag:#22863a;--hljs-section:#005cc5;--hljs-bullet:#735c0f;--hljs-addition-color:#22863a;--hljs-addition-bg:#f0fff4;--hljs-deletion-color:#b31d28;--hljs-deletion-bg:#ffeef0}html.dark{--hljs-bg:#0d1117;--hljs-color:#c9d1d9;--hljs-keyword:#ff7b72;--hljs-title:#d2a8ff;--hljs-literal:#79c0ff;--hljs-string:#a5d6ff;--hljs-symbol:#ffa657;--hljs-comment:#8b949e;--hljs-tag:#7ee787;--hljs-section:#1f6feb;--hljs-bullet:#f2cc60;--hljs-addition-color:#aff5b4;--hljs-addition-bg:#033a16;--hljs-deletion-color:#ffdcd7;--hljs-deletion-bg:#67060c}pre code.hljs{padding:1em;display:block;overflow-x:auto}code.hljs{padding:3px 5px}.hljs{color:var(--hljs-color);background:var(--hljs-bg)}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:var(--hljs-keyword)}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:var(--hljs-title)}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:var(--hljs-literal)}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:var(--hljs-string)}.hljs-built_in,.hljs-symbol{color:var(--hljs-symbol)}.hljs-code,.hljs-comment,.hljs-formula{color:var(--hljs-comment)}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:var(--hljs-tag)}.hljs-subst{color:var(--hljs-color)}.hljs-section{color:var(--hljs-section);font-weight:700}.hljs-bullet{color:var(--hljs-bullet)}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-addition{color:var(--hljs-addition-color);background-color:var(--hljs-addition-bg)}.hljs-deletion{color:var(--hljs-deletion-color);background-color:var(--hljs-deletion-bg)}.theme-claude:root{--background:oklch(.98 .01 95.1);--foreground:oklch(.34 .03 95.72);--card:oklch(.98 .01 95.1);--card-foreground:oklch(.19 0 106.59);--popover:oklch(1 0 0);--popover-foreground:oklch(.27 .02 98.94);--primary:oklch(.62 .14 39.04);--primary-foreground:oklch(1 0 0);--secondary:oklch(.92 .01 92.99);--secondary-foreground:oklch(.43 .02 98.6);--muted:oklch(.93 .02 90.24);--muted-foreground:oklch(.61 .01 97.42);--accent:oklch(.92 .01 92.99);--accent-foreground:oklch(.27 .02 98.94);--destructive:oklch(.19 0 106.59);--destructive-foreground:oklch(1 0 0);--border:oklch(.88 .01 97.36);--input:oklch(.76 .02 98.35);--ring:oklch(.59 .17 253.06);--chart-1:oklch(.56 .13 43);--chart-2:oklch(.69 .16 290.41);--chart-3:oklch(.88 .03 93.13);--chart-4:oklch(.88 .04 298.18);--chart-5:oklch(.56 .13 42.06);--sidebar:oklch(.97 .01 98.88);--sidebar-foreground:oklch(.36 .01 106.65);--sidebar-primary:oklch(.62 .14 39.04);--sidebar-primary-foreground:oklch(.99 0 0);--sidebar-accent:oklch(.92 .01 92.99);--sidebar-accent-foreground:oklch(.33 0 0);--sidebar-border:oklch(.94 0 0);--sidebar-ring:oklch(.77 0 0);--font-sans:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--radius:.5rem;--shadow-2xs:0 1px 3px 0px #0000000d;--shadow-xs:0 1px 3px 0px #0000000d;--shadow-sm:0 1px 3px 0px #0000001a,0 1px 2px -1px #0000001a;--shadow:0 1px 3px 0px #0000001a,0 1px 2px -1px #0000001a;--shadow-md:0 1px 3px 0px #0000001a,0 2px 4px -1px #0000001a;--shadow-lg:0 1px 3px 0px #0000001a,0 4px 6px -1px #0000001a;--shadow-xl:0 1px 3px 0px #0000001a,0 8px 10px -1px #0000001a;--shadow-2xl:0 1px 3px 0px #00000040}.theme-claude.dark{--background:oklch(.27 0 106.64);--foreground:oklch(.81 .01 93.01);--card:oklch(.27 0 106.64);--card-foreground:oklch(.98 .01 95.1);--popover:oklch(.31 0 106.6);--popover-foreground:oklch(.92 0 106.48);--primary:oklch(.67 .13 38.76);--primary-foreground:oklch(1 0 0);--secondary:oklch(.98 .01 95.1);--secondary-foreground:oklch(.31 0 106.6);--muted:oklch(.22 0 106.71);--muted-foreground:oklch(.77 .02 99.07);--accent:oklch(.21 .01 95.42);--accent-foreground:oklch(.97 .01 98.88);--destructive:oklch(.64 .21 25.33);--destructive-foreground:oklch(1 0 0);--border:oklch(.36 .01 106.89);--input:oklch(.43 .01 100.22);--ring:oklch(.59 .17 253.06);--chart-1:oklch(.56 .13 43);--chart-2:oklch(.69 .16 290.41);--chart-3:oklch(.21 .01 95.42);--chart-4:oklch(.31 .05 289.32);--chart-5:oklch(.56 .13 42.06);--sidebar:oklch(.24 0 67.71);--sidebar-foreground:oklch(.81 .01 93.01);--sidebar-primary:oklch(.33 0 0);--sidebar-primary-foreground:oklch(.99 0 0);--sidebar-accent:oklch(.17 0 106.62);--sidebar-accent-foreground:oklch(.81 .01 93.01);--sidebar-border:oklch(.94 0 0);--sidebar-ring:oklch(.77 0 0);--font-sans:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--radius:.5rem;--shadow-2xs:0 1px 3px 0px #0000000d;--shadow-xs:0 1px 3px 0px #0000000d;--shadow-sm:0 1px 3px 0px #0000001a,0 1px 2px -1px #0000001a;--shadow:0 1px 3px 0px #0000001a,0 1px 2px -1px #0000001a;--shadow-md:0 1px 3px 0px #0000001a,0 2px 4px -1px #0000001a;--shadow-lg:0 1px 3px 0px #0000001a,0 4px 6px -1px #0000001a;--shadow-xl:0 1px 3px 0px #0000001a,0 8px 10px -1px #0000001a;--shadow-2xl:0 1px 3px 0px #00000040}.theme-doom-64:root{--background:oklch(.85 0 0);--foreground:oklch(.24 0 0);--card:oklch(.76 0 0);--card-foreground:oklch(.24 0 0);--popover:oklch(.76 0 0);--popover-foreground:oklch(.24 0 0);--primary:oklch(.5 .19 27.48);--primary-foreground:oklch(1 0 0);--secondary:oklch(.5 .09 126.19);--secondary-foreground:oklch(1 0 0);--muted:oklch(.78 0 0);--muted-foreground:oklch(.41 0 0);--accent:oklch(.59 .1 245.74);--accent-foreground:oklch(1 0 0);--destructive:oklch(.71 .2 46.46);--destructive-foreground:oklch(0 0 0);--border:oklch(.43 0 0);--input:oklch(.43 0 0);--ring:oklch(.5 .19 27.48);--chart-1:oklch(.5 .19 27.48);--chart-2:oklch(.5 .09 126.19);--chart-3:oklch(.59 .1 245.74);--chart-4:oklch(.71 .2 46.46);--chart-5:oklch(.57 .04 40.43);--sidebar:oklch(.76 0 0);--sidebar-foreground:oklch(.24 0 0);--sidebar-primary:oklch(.5 .19 27.48);--sidebar-primary-foreground:oklch(1 0 0);--sidebar-accent:oklch(.59 .1 245.74);--sidebar-accent-foreground:oklch(1 0 0);--sidebar-border:oklch(.43 0 0);--sidebar-ring:oklch(.5 .19 27.48);--font-sans:"Oxanium",sans-serif;--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:"Source Code Pro",monospace;--radius:0px;--shadow-2xs:0px 2px 4px 0px #0003;--shadow-xs:0px 2px 4px 0px #0003;--shadow-sm:0px 2px 4px 0px #0006,0px 1px 2px -1px #0006;--shadow:0px 2px 4px 0px #0006,0px 1px 2px -1px #0006;--shadow-md:0px 2px 4px 0px #0006,0px 2px 4px -1px #0006;--shadow-lg:0px 2px 4px 0px #0006,0px 4px 6px -1px #0006;--shadow-xl:0px 2px 4px 0px #0006,0px 8px 10px -1px #0006;--shadow-2xl:0px 2px 4px 0px #000}.theme-doom-64.dark{--background:oklch(.22 0 0);--foreground:oklch(.91 0 0);--card:oklch(.29 0 0);--card-foreground:oklch(.91 0 0);--popover:oklch(.29 0 0);--popover-foreground:oklch(.91 0 0);--primary:oklch(.61 .21 27.03);--primary-foreground:oklch(1 0 0);--secondary:oklch(.64 .15 133.01);--secondary-foreground:oklch(0 0 0);--muted:oklch(.26 0 0);--muted-foreground:oklch(.71 0 0);--accent:oklch(.75 .12 244.75);--accent-foreground:oklch(0 0 0);--destructive:oklch(.78 .17 68.09);--destructive-foreground:oklch(0 0 0);--border:oklch(.41 0 0);--input:oklch(.41 0 0);--ring:oklch(.61 .21 27.03);--chart-1:oklch(.61 .21 27.03);--chart-2:oklch(.64 .15 133.01);--chart-3:oklch(.75 .12 244.75);--chart-4:oklch(.78 .17 68.09);--chart-5:oklch(.65 .03 40.8);--sidebar:oklch(.19 0 0);--sidebar-foreground:oklch(.91 0 0);--sidebar-primary:oklch(.61 .21 27.03);--sidebar-primary-foreground:oklch(1 0 0);--sidebar-accent:oklch(.75 .12 244.75);--sidebar-accent-foreground:oklch(0 0 0);--sidebar-border:oklch(.41 0 0);--sidebar-ring:oklch(.61 .21 27.03);--font-sans:"Oxanium",sans-serif;--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:"Source Code Pro",monospace;--radius:0px;--shadow-2xs:0px 2px 5px 0px #0000004d;--shadow-xs:0px 2px 5px 0px #0000004d;--shadow-sm:0px 2px 5px 0px #0009,0px 1px 2px -1px #0009;--shadow:0px 2px 5px 0px #0009,0px 1px 2px -1px #0009;--shadow-md:0px 2px 5px 0px #0009,0px 2px 4px -1px #0009;--shadow-lg:0px 2px 5px 0px #0009,0px 4px 6px -1px #0009;--shadow-xl:0px 2px 5px 0px #0009,0px 8px 10px -1px #0009;--shadow-2xl:0px 2px 5px 0px #000}.theme-supabase:root{--background:oklch(.99 0 0);--foreground:oklch(.2 0 0);--card:oklch(.99 0 0);--card-foreground:oklch(.2 0 0);--popover:oklch(.99 0 0);--popover-foreground:oklch(.44 0 0);--primary:oklch(.83 .13 160.91);--primary-foreground:oklch(.26 .01 166.46);--secondary:oklch(.99 0 0);--secondary-foreground:oklch(.2 0 0);--muted:oklch(.95 0 0);--muted-foreground:oklch(.24 0 0);--accent:oklch(.95 0 0);--accent-foreground:oklch(.24 0 0);--destructive:oklch(.55 .19 32.73);--destructive-foreground:oklch(.99 0 17.21);--border:oklch(.9 0 0);--input:oklch(.9 0 0);--ring:oklch(.83 .13 160.91);--chart-1:oklch(.83 .13 160.91);--chart-2:oklch(.62 .19 259.81);--chart-3:oklch(.61 .22 292.72);--chart-4:oklch(.77 .16 70.08);--chart-5:oklch(.7 .15 162.48);--sidebar:oklch(.99 0 0);--sidebar-foreground:oklch(.55 0 0);--sidebar-primary:oklch(.83 .13 160.91);--sidebar-primary-foreground:oklch(.26 .01 166.46);--sidebar-accent:oklch(.95 0 0);--sidebar-accent-foreground:oklch(.24 0 0);--sidebar-border:oklch(.9 0 0);--sidebar-ring:oklch(.83 .13 160.91);--font-sans:Outfit,sans-serif;--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:monospace;--radius:.5rem;--shadow-2xs:0px 1px 3px 0px #00000017;--shadow-xs:0px 1px 3px 0px #00000017;--shadow-sm:0px 1px 3px 0px #0000002b,0px 1px 2px -1px #0000002b;--shadow:0px 1px 3px 0px #0000002b,0px 1px 2px -1px #0000002b;--shadow-md:0px 1px 3px 0px #0000002b,0px 2px 4px -1px #0000002b;--shadow-lg:0px 1px 3px 0px #0000002b,0px 4px 6px -1px #0000002b;--shadow-xl:0px 1px 3px 0px #0000002b,0px 8px 10px -1px #0000002b;--shadow-2xl:0px 1px 3px 0px #0000006e;--tracking-normal:.025em}.theme-supabase.dark{--background:oklch(.18 0 0);--foreground:oklch(.93 .01 255.51);--card:oklch(.2 0 0);--card-foreground:oklch(.93 .01 255.51);--popover:oklch(.26 0 0);--popover-foreground:oklch(.73 0 0);--primary:oklch(.44 .1 156.76);--primary-foreground:oklch(.92 .01 167.16);--secondary:oklch(.26 0 0);--secondary-foreground:oklch(.99 0 0);--muted:oklch(.24 0 0);--muted-foreground:oklch(.71 0 0);--accent:oklch(.31 0 0);--accent-foreground:oklch(.99 0 0);--destructive:oklch(.31 .09 29.79);--destructive-foreground:oklch(.94 0 34.31);--border:oklch(.28 0 0);--input:oklch(.28 0 0);--ring:oklch(.8 .18 151.71);--chart-1:oklch(.8 .18 151.71);--chart-2:oklch(.71 .14 254.62);--chart-3:oklch(.71 .16 293.54);--chart-4:oklch(.84 .16 84.43);--chart-5:oklch(.78 .13 181.91);--sidebar:oklch(.18 0 0);--sidebar-foreground:oklch(.63 0 0);--sidebar-primary:oklch(.44 .1 156.76);--sidebar-primary-foreground:oklch(.92 .01 167.16);--sidebar-accent:oklch(.31 0 0);--sidebar-accent-foreground:oklch(.99 0 0);--sidebar-border:oklch(.28 0 0);--sidebar-ring:oklch(.8 .18 151.71);--font-sans:Outfit,sans-serif;--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:monospace;--radius:.5rem;--shadow-2xs:0px 1px 3px 0px #00000017;--shadow-xs:0px 1px 3px 0px #00000017;--shadow-sm:0px 1px 3px 0px #0000002b,0px 1px 2px -1px #0000002b;--shadow:0px 1px 3px 0px #0000002b,0px 1px 2px -1px #0000002b;--shadow-md:0px 1px 3px 0px #0000002b,0px 2px 4px -1px #0000002b;--shadow-lg:0px 1px 3px 0px #0000002b,0px 4px 6px -1px #0000002b;--shadow-xl:0px 1px 3px 0px #0000002b,0px 8px 10px -1px #0000002b;--shadow-2xl:0px 1px 3px 0px #0000006e}.theme-supabase body{letter-spacing:var(--tracking-normal)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}} \ No newline at end of file +@layer properties; +@layer theme, base, components, utilities; +@layer theme { + :root, :host { + --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", + "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; + --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", + "Courier New", monospace; + --color-red-500: oklch(63.7% 0.237 25.331); + --color-amber-50: oklch(98.7% 0.022 95.277); + --color-amber-100: oklch(96.2% 0.059 95.617); + --color-amber-900: oklch(41.4% 0.112 45.904); + --color-amber-950: oklch(27.9% 0.077 45.635); + --color-yellow-500: oklch(79.5% 0.184 86.047); + --color-green-50: oklch(98.2% 0.018 155.826); + --color-green-500: oklch(72.3% 0.219 149.579); + --color-green-600: oklch(62.7% 0.194 149.214); + --color-green-900: oklch(39.3% 0.095 152.535); + --color-green-950: oklch(26.6% 0.065 152.934); + --color-blue-50: oklch(97% 0.014 254.604); + --color-blue-300: oklch(80.9% 0.105 251.813); + --color-blue-500: oklch(62.3% 0.214 259.815); + --color-blue-600: oklch(54.6% 0.245 262.881); + --color-blue-700: oklch(48.8% 0.243 264.376); + --color-blue-800: oklch(42.4% 0.199 265.638); + --color-blue-900: oklch(37.9% 0.146 265.522); + --color-blue-950: oklch(28.2% 0.091 267.935); + --color-purple-500: oklch(62.7% 0.265 303.9); + --color-neutral-300: oklch(87% 0 0); + --color-neutral-800: oklch(26.9% 0 0); + --color-black: #000; + --color-white: #fff; + --spacing: 0.25rem; + --breakpoint-md: 48rem; + --breakpoint-lg: 64rem; + --container-xs: 20rem; + --container-sm: 24rem; + --container-md: 28rem; + --container-lg: 32rem; + --container-xl: 36rem; + --text-xs: 0.75rem; + --text-xs--line-height: calc(1 / 0.75); + --text-sm: 0.875rem; + --text-sm--line-height: calc(1.25 / 0.875); + --text-base: 1rem; + --text-base--line-height: calc(1.5 / 1); + --text-lg: 1.125rem; + --text-lg--line-height: calc(1.75 / 1.125); + --text-xl: 1.25rem; + --text-xl--line-height: calc(1.75 / 1.25); + --text-2xl: 1.5rem; + --text-2xl--line-height: calc(2 / 1.5); + --text-3xl: 1.875rem; + --text-3xl--line-height: calc(2.25 / 1.875); + --text-4xl: 2.25rem; + --text-4xl--line-height: calc(2.5 / 2.25); + --font-weight-normal: 400; + --font-weight-medium: 500; + --font-weight-semibold: 600; + --font-weight-bold: 700; + --tracking-tight: -0.025em; + --tracking-normal: 0em; + --tracking-widest: 0.1em; + --leading-tight: 1.25; + --leading-snug: 1.375; + --leading-normal: 1.5; + --leading-relaxed: 1.625; + --radius-xs: 0.125rem; + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + --shadow-2xs: 0 1px rgb(0 0 0 / 0.05); + --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05); + --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); + --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); + --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); + --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); + --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25); + --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); + --animate-spin: spin 1s linear infinite; + --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; + --aspect-video: 16 / 9; + --default-transition-duration: 150ms; + --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + --default-font-family: var(--font-sans); + --default-mono-font-family: var(--font-mono); + --color-background: var(--background); + --color-foreground: var(--foreground); + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + --color-destructive: var(--destructive); + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); + --color-sidebar: var(--sidebar); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-ring: var(--sidebar-ring); + } +} +@layer base { + *, ::after, ::before, ::backdrop, ::file-selector-button { + box-sizing: border-box; + margin: 0; + padding: 0; + border: 0 solid; + } + html, :host { + line-height: 1.5; + -webkit-text-size-adjust: 100%; + tab-size: 4; + font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"); + font-feature-settings: var(--default-font-feature-settings, normal); + font-variation-settings: var(--default-font-variation-settings, normal); + -webkit-tap-highlight-color: transparent; + } + hr { + height: 0; + color: inherit; + border-top-width: 1px; + } + abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + } + h1, h2, h3, h4, h5, h6 { + font-size: inherit; + font-weight: inherit; + } + a { + color: inherit; + -webkit-text-decoration: inherit; + text-decoration: inherit; + } + b, strong { + font-weight: bolder; + } + code, kbd, samp, pre { + font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace); + font-feature-settings: var(--default-mono-font-feature-settings, normal); + font-variation-settings: var(--default-mono-font-variation-settings, normal); + font-size: 1em; + } + small { + font-size: 80%; + } + sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + } + sub { + bottom: -0.25em; + } + sup { + top: -0.5em; + } + table { + text-indent: 0; + border-color: inherit; + border-collapse: collapse; + } + :-moz-focusring { + outline: auto; + } + progress { + vertical-align: baseline; + } + summary { + display: list-item; + } + ol, ul, menu { + list-style: none; + } + img, svg, video, canvas, audio, iframe, embed, object { + display: block; + vertical-align: middle; + } + img, video { + max-width: 100%; + height: auto; + } + button, input, select, optgroup, textarea, ::file-selector-button { + font: inherit; + font-feature-settings: inherit; + font-variation-settings: inherit; + letter-spacing: inherit; + color: inherit; + border-radius: 0; + background-color: transparent; + opacity: 1; + } + :where(select:is([multiple], [size])) optgroup { + font-weight: bolder; + } + :where(select:is([multiple], [size])) optgroup option { + padding-inline-start: 20px; + } + ::file-selector-button { + margin-inline-end: 4px; + } + ::placeholder { + opacity: 1; + } + @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) { + ::placeholder { + color: currentcolor; + @supports (color: color-mix(in lab, red, red)) { + color: color-mix(in oklab, currentcolor 50%, transparent); + } + } + } + textarea { + resize: vertical; + } + ::-webkit-search-decoration { + -webkit-appearance: none; + } + ::-webkit-date-and-time-value { + min-height: 1lh; + text-align: inherit; + } + ::-webkit-datetime-edit { + display: inline-flex; + } + ::-webkit-datetime-edit-fields-wrapper { + padding: 0; + } + ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field { + padding-block: 0; + } + :-moz-ui-invalid { + box-shadow: none; + } + button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button { + appearance: button; + } + ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { + height: auto; + } + [hidden]:where(:not([hidden="until-found"])) { + display: none !important; + } +} +@layer utilities { + .\@container { + container-type: inline-size; + } + .pointer-events-none { + pointer-events: none; + } + .invisible { + visibility: hidden; + } + .sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; + } + .absolute { + position: absolute; + } + .relative { + position: relative; + } + .static { + position: static; + } + .sticky { + position: sticky; + } + .inset-0 { + inset: calc(var(--spacing) * 0); + } + .inset-x-0 { + inset-inline: calc(var(--spacing) * 0); + } + .top-0 { + top: calc(var(--spacing) * 0); + } + .top-1 { + top: calc(var(--spacing) * 1); + } + .top-1\/2 { + top: calc(1/2 * 100%); + } + .top-2 { + top: calc(var(--spacing) * 2); + } + .top-22 { + top: calc(var(--spacing) * 22); + } + .right-1 { + right: calc(var(--spacing) * 1); + } + .right-1\.5 { + right: calc(var(--spacing) * 1.5); + } + .right-2 { + right: calc(var(--spacing) * 2); + } + .right-2\.5 { + right: calc(var(--spacing) * 2.5); + } + .right-3 { + right: calc(var(--spacing) * 3); + } + .bottom-0 { + bottom: calc(var(--spacing) * 0); + } + .left-1 { + left: calc(var(--spacing) * 1); + } + .left-1\.5 { + left: calc(var(--spacing) * 1.5); + } + .left-1\/2 { + left: calc(1/2 * 100%); + } + .left-2 { + left: calc(var(--spacing) * 2); + } + .left-3 { + left: calc(var(--spacing) * 3); + } + .isolate { + isolation: isolate; + } + .z-10 { + z-index: 10; + } + .col-span-2 { + grid-column: span 2 / span 2; + } + .container { + width: 100%; + @media (width >= 40rem) { + max-width: 40rem; + } + @media (width >= 48rem) { + max-width: 48rem; + } + @media (width >= 64rem) { + max-width: 64rem; + } + @media (width >= 80rem) { + max-width: 80rem; + } + @media (width >= 96rem) { + max-width: 96rem; + } + } + .m-0 { + margin: calc(var(--spacing) * 0); + } + .mx-auto { + margin-inline: auto; + } + .my-4 { + margin-block: calc(var(--spacing) * 4); + } + .my-6 { + margin-block: calc(var(--spacing) * 6); + } + .mt-4 { + margin-top: calc(var(--spacing) * 4); + } + .mt-6 { + margin-top: calc(var(--spacing) * 6); + } + .mt-8 { + margin-top: calc(var(--spacing) * 8); + } + .mr-auto { + margin-right: auto; + } + .mb-1 { + margin-bottom: calc(var(--spacing) * 1); + } + .mb-2 { + margin-bottom: calc(var(--spacing) * 2); + } + .mb-4 { + margin-bottom: calc(var(--spacing) * 4); + } + .mb-6 { + margin-bottom: calc(var(--spacing) * 6); + } + .mb-8 { + margin-bottom: calc(var(--spacing) * 8); + } + .mb-12 { + margin-bottom: calc(var(--spacing) * 12); + } + .-ml-1 { + margin-left: calc(var(--spacing) * -1); + } + .-ml-1\.5 { + margin-left: calc(var(--spacing) * -1.5); + } + .ml-auto { + margin-left: auto; + } + .line-clamp-1 { + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 1; + } + .line-clamp-2 { + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + } + .block { + display: block; + } + .contents { + display: contents; + } + .flex { + display: flex; + } + .grid { + display: grid; + } + .hidden { + display: none; + } + .inline { + display: inline; + } + .inline-block { + display: inline-block; + } + .inline-flex { + display: inline-flex; + } + .table { + display: table; + } + .aspect-square { + aspect-ratio: 1 / 1; + } + .aspect-video { + aspect-ratio: var(--aspect-video); + } + .size-2 { + width: calc(var(--spacing) * 2); + height: calc(var(--spacing) * 2); + } + .size-2\.5 { + width: calc(var(--spacing) * 2.5); + height: calc(var(--spacing) * 2.5); + } + .size-3 { + width: calc(var(--spacing) * 3); + height: calc(var(--spacing) * 3); + } + .size-3\.5 { + width: calc(var(--spacing) * 3.5); + height: calc(var(--spacing) * 3.5); + } + .size-4 { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + } + .size-6 { + width: calc(var(--spacing) * 6); + height: calc(var(--spacing) * 6); + } + .size-7 { + width: calc(var(--spacing) * 7); + height: calc(var(--spacing) * 7); + } + .size-8 { + width: calc(var(--spacing) * 8); + height: calc(var(--spacing) * 8); + } + .size-9 { + width: calc(var(--spacing) * 9); + height: calc(var(--spacing) * 9); + } + .size-10 { + width: calc(var(--spacing) * 10); + height: calc(var(--spacing) * 10); + } + .size-12 { + width: calc(var(--spacing) * 12); + height: calc(var(--spacing) * 12); + } + .h-2 { + height: calc(var(--spacing) * 2); + } + .h-4 { + height: calc(var(--spacing) * 4); + } + .h-5 { + height: calc(var(--spacing) * 5); + } + .h-6 { + height: calc(var(--spacing) * 6); + } + .h-8 { + height: calc(var(--spacing) * 8); + } + .h-10 { + height: calc(var(--spacing) * 10); + } + .h-12 { + height: calc(var(--spacing) * 12); + } + .h-14 { + height: calc(var(--spacing) * 14); + } + .h-full { + height: 100%; + } + .max-h-64 { + max-height: calc(var(--spacing) * 64); + } + .max-h-\[150px\] { + max-height: 150px; + } + .max-h-\[200px\] { + max-height: 200px; + } + .max-h-\[612px\] { + max-height: 612px; + } + .max-h-\[650px\] { + max-height: 650px; + } + .min-h-25 { + min-height: calc(var(--spacing) * 25); + } + .min-h-27 { + min-height: calc(var(--spacing) * 27); + } + .min-h-77 { + min-height: calc(var(--spacing) * 77); + } + .min-h-\[350px\] { + min-height: 350px; + } + .w-0 { + width: calc(var(--spacing) * 0); + } + .w-1 { + width: calc(var(--spacing) * 1); + } + .w-1\/2 { + width: calc(1/2 * 100%); + } + .w-2 { + width: calc(var(--spacing) * 2); + } + .w-2\/3 { + width: calc(2/3 * 100%); + } + .w-3 { + width: calc(var(--spacing) * 3); + } + .w-3\/4 { + width: calc(3/4 * 100%); + } + .w-4 { + width: calc(var(--spacing) * 4); + } + .w-7 { + width: calc(var(--spacing) * 7); + } + .w-7\.5 { + width: calc(var(--spacing) * 7.5); + } + .w-10 { + width: calc(var(--spacing) * 10); + } + .w-48 { + width: calc(var(--spacing) * 48); + } + .w-72 { + width: calc(var(--spacing) * 72); + } + .w-80 { + width: calc(var(--spacing) * 80); + } + .w-\[100px\] { + width: 100px; + } + .w-\[150px\] { + width: 150px; + } + .w-\[180px\] { + width: 180px; + } + .w-\[200px\] { + width: 200px; + } + .w-\[271px\] { + width: 271px; + } + .w-fit { + width: fit-content; + } + .w-full { + width: 100%; + } + .w-max { + width: max-content; + } + .max-w-72 { + max-width: calc(var(--spacing) * 72); + } + .max-w-\[75\%\] { + max-width: 75%; + } + .max-w-\[200px\] { + max-width: 200px; + } + .max-w-\[300px\] { + max-width: 300px; + } + .max-w-\[450px\] { + max-width: 450px; + } + .max-w-lg { + max-width: var(--container-lg); + } + .max-w-md { + max-width: var(--container-md); + } + .max-w-screen-lg { + max-width: var(--breakpoint-lg); + } + .max-w-screen-md { + max-width: var(--breakpoint-md); + } + .max-w-sm { + max-width: var(--container-sm); + } + .max-w-xl { + max-width: var(--container-xl); + } + .max-w-xs { + max-width: var(--container-xs); + } + .min-w-0 { + min-width: calc(var(--spacing) * 0); + } + .min-w-5 { + min-width: calc(var(--spacing) * 5); + } + .min-w-32 { + min-width: calc(var(--spacing) * 32); + } + .min-w-56 { + min-width: calc(var(--spacing) * 56); + } + .min-w-\[8rem\] { + min-width: 8rem; + } + .flex-1 { + flex: 1; + } + .flex-none { + flex: none; + } + .flex-shrink { + flex-shrink: 1; + } + .shrink-0 { + flex-shrink: 0; + } + .border-collapse { + border-collapse: collapse; + } + .-translate-x-1 { + --tw-translate-x: calc(var(--spacing) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + .-translate-x-1\/2 { + --tw-translate-x: calc(calc(1/2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + .-translate-y-1 { + --tw-translate-y: calc(var(--spacing) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + .-translate-y-1\/2 { + --tw-translate-y: calc(calc(1/2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + .translate-y-0 { + --tw-translate-y: calc(var(--spacing) * 0); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + .translate-y-0\.5 { + --tw-translate-y: calc(var(--spacing) * 0.5); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + .transform { + transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,); + } + .animate-pulse { + animation: var(--animate-pulse); + } + .animate-spin { + animation: var(--animate-spin); + } + .cursor-pointer { + cursor: pointer; + } + .resize { + resize: both; + } + .scroll-m-20 { + scroll-margin: calc(var(--spacing) * 20); + } + .scroll-mt-14 { + scroll-margin-top: calc(var(--spacing) * 14); + } + .scroll-mt-16 { + scroll-margin-top: calc(var(--spacing) * 16); + } + .list-inside { + list-style-position: inside; + } + .list-decimal { + list-style-type: decimal; + } + .list-disc { + list-style-type: disc; + } + .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)); + } + .flex-col { + flex-direction: column; + } + .flex-row { + flex-direction: row; + } + .flex-wrap { + flex-wrap: wrap; + } + .items-center { + align-items: center; + } + .items-start { + align-items: flex-start; + } + .items-stretch { + align-items: stretch; + } + .justify-between { + justify-content: space-between; + } + .justify-center { + justify-content: center; + } + .justify-start { + justify-content: flex-start; + } + .gap-0 { + gap: calc(var(--spacing) * 0); + } + .gap-0\.5 { + gap: calc(var(--spacing) * 0.5); + } + .gap-1 { + gap: calc(var(--spacing) * 1); + } + .gap-1\.5 { + gap: calc(var(--spacing) * 1.5); + } + .gap-2 { + gap: calc(var(--spacing) * 2); + } + .gap-2\.5 { + gap: calc(var(--spacing) * 2.5); + } + .gap-3 { + gap: calc(var(--spacing) * 3); + } + .gap-4 { + gap: calc(var(--spacing) * 4); + } + .gap-6 { + gap: calc(var(--spacing) * 6); + } + .gap-8 { + gap: calc(var(--spacing) * 8); + } + .gap-10 { + gap: calc(var(--spacing) * 10); + } + .gap-12 { + gap: calc(var(--spacing) * 12); + } + .space-y-1 { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse))); + } + } + .space-y-2 { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse))); + } + } + .space-y-4 { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse))); + } + } + .space-y-6 { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse))); + } + } + .gap-x-1 { + column-gap: calc(var(--spacing) * 1); + } + .gap-x-1\.5 { + column-gap: calc(var(--spacing) * 1.5); + } + .gap-x-2 { + column-gap: calc(var(--spacing) * 2); + } + .gap-x-4 { + column-gap: calc(var(--spacing) * 4); + } + .gap-x-10 { + column-gap: calc(var(--spacing) * 10); + } + .-space-x-2 { + :where(& > :not(:last-child)) { + --tw-space-x-reverse: 0; + margin-inline-start: calc(calc(var(--spacing) * -2) * var(--tw-space-x-reverse)); + margin-inline-end: calc(calc(var(--spacing) * -2) * calc(1 - var(--tw-space-x-reverse))); + } + } + .space-x-2 { + :where(& > :not(:last-child)) { + --tw-space-x-reverse: 0; + margin-inline-start: calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse)); + margin-inline-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse))); + } + } + .gap-y-4 { + row-gap: calc(var(--spacing) * 4); + } + .gap-y-6 { + row-gap: calc(var(--spacing) * 6); + } + .gap-y-10 { + row-gap: calc(var(--spacing) * 10); + } + .self-start { + align-self: flex-start; + } + .truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .overflow-hidden { + overflow: hidden; + } + .overflow-x-auto { + overflow-x: auto; + } + .overflow-y-auto { + overflow-y: auto; + } + .rounded { + border-radius: 0.25rem; + } + .rounded-\[2px\] { + border-radius: 2px; + } + .rounded-full { + border-radius: calc(infinity * 1px); + } + .rounded-lg { + border-radius: var(--radius-lg); + } + .rounded-md { + border-radius: var(--radius-md); + } + .rounded-none { + border-radius: 0; + } + .rounded-sm { + border-radius: var(--radius-sm); + } + .rounded-xl { + border-radius: var(--radius-xl); + } + .rounded-l-md { + border-top-left-radius: var(--radius-md); + border-bottom-left-radius: var(--radius-md); + } + .rounded-r-md { + border-top-right-radius: var(--radius-md); + border-bottom-right-radius: var(--radius-md); + } + .border { + border-style: var(--tw-border-style); + border-width: 1px; + } + .border-2 { + border-style: var(--tw-border-style); + border-width: 2px; + } + .border-t { + border-top-style: var(--tw-border-style); + border-top-width: 1px; + } + .border-r { + border-right-style: var(--tw-border-style); + border-right-width: 1px; + } + .border-r-0 { + border-right-style: var(--tw-border-style); + border-right-width: 0px; + } + .border-b { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 1px; + } + .border-l-0 { + border-left-style: var(--tw-border-style); + border-left-width: 0px; + } + .border-dashed { + --tw-border-style: dashed; + border-style: dashed; + } + .border-amber-50 { + border-color: var(--color-amber-50); + } + .border-border { + border-color: var(--color-border); + } + .border-border\/50 { + border-color: var(--color-border); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-border) 50%, transparent); + } + } + .border-muted { + border-color: var(--color-muted); + } + .border-transparent { + border-color: transparent; + } + .\!bg-muted\/40 { + background-color: var(--color-muted) !important; + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-muted) 40%, transparent) !important; + } + } + .bg-accent { + background-color: var(--color-accent); + } + .bg-amber-50 { + background-color: var(--color-amber-50); + } + .bg-background { + background-color: var(--color-background); + } + .bg-blue-500 { + background-color: var(--color-blue-500); + } + .bg-card { + background-color: var(--color-card); + } + .bg-foreground { + background-color: var(--color-foreground); + } + .bg-muted { + background-color: var(--color-muted); + } + .bg-muted-foreground { + background-color: var(--color-muted-foreground); + } + .bg-muted\/50 { + background-color: var(--color-muted); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-muted) 50%, transparent); + } + } + .bg-primary { + background-color: var(--color-primary); + } + .bg-primary\/20 { + background-color: var(--color-primary); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-primary) 20%, transparent); + } + } + .bg-sidebar-primary { + background-color: var(--color-sidebar-primary); + } + .bg-transparent { + background-color: transparent; + } + .mask-repeat { + mask-repeat: repeat; + } + .object-cover { + object-fit: cover; + } + .\!p-3\.5 { + padding: calc(var(--spacing) * 3.5) !important; + } + .p-0 { + padding: calc(var(--spacing) * 0); + } + .p-1 { + padding: calc(var(--spacing) * 1); + } + .p-2 { + padding: calc(var(--spacing) * 2); + } + .p-3 { + padding: calc(var(--spacing) * 3); + } + .p-4 { + padding: calc(var(--spacing) * 4); + } + .p-6 { + padding: calc(var(--spacing) * 6); + } + .p-10 { + padding: calc(var(--spacing) * 10); + } + .px-0 { + padding-inline: calc(var(--spacing) * 0); + } + .px-1 { + padding-inline: calc(var(--spacing) * 1); + } + .px-2 { + padding-inline: calc(var(--spacing) * 2); + } + .px-2\.5 { + padding-inline: calc(var(--spacing) * 2.5); + } + .px-3 { + padding-inline: calc(var(--spacing) * 3); + } + .px-4 { + padding-inline: calc(var(--spacing) * 4); + } + .px-9 { + padding-inline: calc(var(--spacing) * 9); + } + .px-\[0\.3rem\] { + padding-inline: 0.3rem; + } + .py-1 { + padding-block: calc(var(--spacing) * 1); + } + .py-1\.5 { + padding-block: calc(var(--spacing) * 1.5); + } + .py-2 { + padding-block: calc(var(--spacing) * 2); + } + .py-3 { + padding-block: calc(var(--spacing) * 3); + } + .py-4 { + padding-block: calc(var(--spacing) * 4); + } + .py-\[0\.2rem\] { + padding-block: 0.2rem; + } + .pt-1 { + padding-top: calc(var(--spacing) * 1); + } + .pt-1\.5 { + padding-top: calc(var(--spacing) * 1.5); + } + .pt-2 { + padding-top: calc(var(--spacing) * 2); + } + .pt-15 { + padding-top: calc(var(--spacing) * 15); + } + .pr-2 { + padding-right: calc(var(--spacing) * 2); + } + .pr-9 { + padding-right: calc(var(--spacing) * 9); + } + .pr-10 { + padding-right: calc(var(--spacing) * 10); + } + .pr-12 { + padding-right: calc(var(--spacing) * 12); + } + .pr-16 { + padding-right: calc(var(--spacing) * 16); + } + .pr-20 { + padding-right: calc(var(--spacing) * 20); + } + .pr-24 { + padding-right: calc(var(--spacing) * 24); + } + .pr-26 { + padding-right: calc(var(--spacing) * 26); + } + .pr-30 { + padding-right: calc(var(--spacing) * 30); + } + .pb-3 { + padding-bottom: calc(var(--spacing) * 3); + } + .pb-4 { + padding-bottom: calc(var(--spacing) * 4); + } + .pb-12 { + padding-bottom: calc(var(--spacing) * 12); + } + .pb-17 { + padding-bottom: calc(var(--spacing) * 17); + } + .pl-6 { + padding-left: calc(var(--spacing) * 6); + } + .pl-7 { + padding-left: calc(var(--spacing) * 7); + } + .pl-8 { + padding-left: calc(var(--spacing) * 8); + } + .pl-8\.5 { + padding-left: calc(var(--spacing) * 8.5); + } + .pl-9 { + padding-left: calc(var(--spacing) * 9); + } + .pl-15 { + padding-left: calc(var(--spacing) * 15); + } + .pl-21 { + padding-left: calc(var(--spacing) * 21); + } + .text-center { + text-align: center; + } + .text-left { + text-align: left; + } + .text-right { + text-align: right; + } + .font-mono { + font-family: var(--font-mono); + } + .text-2xl { + font-size: var(--text-2xl); + line-height: var(--tw-leading, var(--text-2xl--line-height)); + } + .text-3xl { + font-size: var(--text-3xl); + line-height: var(--tw-leading, var(--text-3xl--line-height)); + } + .text-base { + font-size: var(--text-base); + line-height: var(--tw-leading, var(--text-base--line-height)); + } + .text-lg { + font-size: var(--text-lg); + line-height: var(--tw-leading, var(--text-lg--line-height)); + } + .text-sm { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + } + .text-sm\/relaxed { + font-size: var(--text-sm); + line-height: var(--leading-relaxed); + } + .text-xs { + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + } + .text-\[1\.05rem\] { + font-size: 1.05rem; + } + .leading-none { + --tw-leading: 1; + line-height: 1; + } + .leading-normal { + --tw-leading: var(--leading-normal); + line-height: var(--leading-normal); + } + .leading-snug { + --tw-leading: var(--leading-snug); + line-height: var(--leading-snug); + } + .leading-tight { + --tw-leading: var(--leading-tight); + line-height: var(--leading-tight); + } + .font-bold { + --tw-font-weight: var(--font-weight-bold); + font-weight: var(--font-weight-bold); + } + .font-medium { + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + } + .font-normal { + --tw-font-weight: var(--font-weight-normal); + font-weight: var(--font-weight-normal); + } + .font-semibold { + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + } + .tracking-tight { + --tw-tracking: var(--tracking-tight); + letter-spacing: var(--tracking-tight); + } + .tracking-widest { + --tw-tracking: var(--tracking-widest); + letter-spacing: var(--tracking-widest); + } + .text-balance { + text-wrap: balance; + } + .text-wrap { + text-wrap: wrap; + } + .break-words { + overflow-wrap: break-word; + } + .whitespace-nowrap { + white-space: nowrap; + } + .whitespace-pre-wrap { + white-space: pre-wrap; + } + .text-amber-900 { + color: var(--color-amber-900); + } + .text-blue-500 { + color: var(--color-blue-500); + } + .text-destructive { + color: var(--color-destructive); + } + .text-foreground { + color: var(--color-foreground); + } + .text-green-500 { + color: var(--color-green-500); + } + .text-muted-foreground { + color: var(--color-muted-foreground); + } + .text-neutral-800 { + color: var(--color-neutral-800); + } + .text-primary-foreground { + color: var(--color-primary-foreground); + } + .text-purple-500 { + color: var(--color-purple-500); + } + .text-red-500 { + color: var(--color-red-500); + } + .text-sidebar-primary-foreground { + color: var(--color-sidebar-primary-foreground); + } + .text-white { + color: var(--color-white); + } + .text-yellow-500 { + color: var(--color-yellow-500); + } + .uppercase { + text-transform: uppercase; + } + .tabular-nums { + --tw-numeric-spacing: tabular-nums; + font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,); + } + .underline { + text-decoration-line: underline; + } + .underline-offset-4 { + text-underline-offset: 4px; + } + .opacity-0 { + opacity: 0%; + } + .opacity-50 { + opacity: 50%; + } + .opacity-60 { + opacity: 60%; + } + .opacity-100 { + opacity: 100%; + } + .shadow-md { + --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .shadow-none { + --tw-shadow: 0 0 #0000; + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .shadow-xl { + --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .shadow-xs { + --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .ring-offset-background { + --tw-ring-offset-color: var(--color-background); + } + .outline { + outline-style: var(--tw-outline-style); + outline-width: 1px; + } + .grayscale { + --tw-grayscale: grayscale(100%); + filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); + } + .filter { + filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); + } + .transition { + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .transition-all { + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .transition-colors { + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .transition-transform { + transition-property: transform, translate, scale, rotate; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .duration-100 { + --tw-duration: 100ms; + transition-duration: 100ms; + } + .duration-200 { + --tw-duration: 200ms; + transition-duration: 200ms; + } + .duration-400 { + --tw-duration: 400ms; + transition-duration: 400ms; + } + .outline-none { + --tw-outline-style: none; + outline-style: none; + } + .select-none { + -webkit-user-select: none; + user-select: none; + } + .group-open\:rotate-180 { + &:is(:where(.group):is([open], :popover-open, :open) *) { + rotate: 180deg; + } + } + .group-aria-checked\:visible { + &:is(:where(.group)[aria-checked="true"] *) { + visibility: visible; + } + } + .group-data-\[copied\=true\]\:block { + &:is(:where(.group)[data-copied="true"] *) { + display: block; + } + } + .group-data-\[copied\=true\]\:hidden { + &:is(:where(.group)[data-copied="true"] *) { + display: none; + } + } + .group-\[\.copied\]\:block { + &:is(:where(.group):is(.copied) *) { + display: block; + } + } + .group-\[\.copied\]\:hidden { + &:is(:where(.group):is(.copied) *) { + display: none; + } + } + .peer-checked\:border-primary { + &:is(:where(.peer):checked ~ *) { + border-color: var(--color-primary); + } + } + .last\:border-b-0 { + &:last-child { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 0px; + } + } + .checked\:border-blue-600 { + &:checked { + border-color: var(--color-blue-600); + } + } + .checked\:border-green-600 { + &:checked { + border-color: var(--color-green-600); + } + } + .checked\:bg-blue-500 { + &:checked { + background-color: var(--color-blue-500); + } + } + .checked\:bg-blue-600 { + &:checked { + background-color: var(--color-blue-600); + } + } + .checked\:bg-green-600 { + &:checked { + background-color: var(--color-green-600); + } + } + .checked\:before\:bg-background { + &:checked { + &::before { + content: var(--tw-content); + background-color: var(--color-background); + } + } + } + .checked\:after\:bg-white { + &:checked { + &::after { + content: var(--tw-content); + background-color: var(--color-white); + } + } + } + .hover\:space-x-1 { + &:hover { + @media (hover: hover) { + :where(& > :not(:last-child)) { + --tw-space-x-reverse: 0; + margin-inline-start: calc(calc(var(--spacing) * 1) * var(--tw-space-x-reverse)); + margin-inline-end: calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-x-reverse))); + } + } + } + } + .hover\:bg-accent\/50 { + &:hover { + @media (hover: hover) { + background-color: var(--color-accent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-accent) 50%, transparent); + } + } + } + } + .hover\:bg-destructive\/10 { + &:hover { + @media (hover: hover) { + background-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-destructive) 10%, transparent); + } + } + } + } + .hover\:bg-foreground { + &:hover { + @media (hover: hover) { + background-color: var(--color-foreground); + } + } + } + .hover\:bg-muted { + &:hover { + @media (hover: hover) { + background-color: var(--color-muted); + } + } + } + .hover\:text-accent-foreground { + &:hover { + @media (hover: hover) { + color: var(--color-accent-foreground); + } + } + } + .hover\:text-foreground { + &:hover { + @media (hover: hover) { + color: var(--color-foreground); + } + } + } + .hover\:underline { + &:hover { + @media (hover: hover) { + text-decoration-line: underline; + } + } + } + .focus\:bg-destructive\/10 { + &:focus { + background-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-destructive) 10%, transparent); + } + } + } + .focus\:text-destructive { + &:focus { + color: var(--color-destructive); + } + } + .focus-visible\:border-ring { + &:focus-visible { + border-color: var(--color-ring); + } + } + .focus-visible\:ring-2 { + &:focus-visible { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + .focus-visible\:ring-\[3px\] { + &:focus-visible { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + .focus-visible\:ring-ring { + &:focus-visible { + --tw-ring-color: var(--color-ring); + } + } + .focus-visible\:ring-ring\/50 { + &:focus-visible { + --tw-ring-color: var(--color-ring); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); + } + } + } + .focus-visible\:ring-offset-2 { + &:focus-visible { + --tw-ring-offset-width: 2px; + --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + } + } + .focus-visible\:outline-none { + &:focus-visible { + --tw-outline-style: none; + outline-style: none; + } + } + .disabled\:pointer-events-none { + &:disabled { + pointer-events: none; + } + } + .disabled\:opacity-50 { + &:disabled { + opacity: 50%; + } + } + .has-\[\:checked\]\:border-primary { + &:has(*:is(:checked)) { + border-color: var(--color-primary); + } + } + .has-\[\:checked\]\:bg-primary\/5 { + &:has(*:is(:checked)) { + background-color: var(--color-primary); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-primary) 5%, transparent); + } + } + } + .has-\[input\[type\=\'checkbox\'\]\:checked\]\:border-blue-600 { + &:has(*:is(input[type='checkbox']:checked)) { + border-color: var(--color-blue-600); + } + } + .has-\[input\[type\=\'checkbox\'\]\:checked\]\:bg-blue-50 { + &:has(*:is(input[type='checkbox']:checked)) { + background-color: var(--color-blue-50); + } + } + .has-\[input\[type\=\'radio\'\]\:checked\]\:border-green-600 { + &:has(*:is(input[type='radio']:checked)) { + border-color: var(--color-green-600); + } + } + .has-\[input\[type\=\'radio\'\]\:checked\]\:bg-green-50 { + &:has(*:is(input[type='radio']:checked)) { + background-color: var(--color-green-50); + } + } + .has-\[\>svg\]\:px-2\.5 { + &:has(>svg) { + padding-inline: calc(var(--spacing) * 2.5); + } + } + .aria-invalid\:border-destructive { + &[aria-invalid="true"] { + border-color: var(--color-destructive); + } + } + .aria-invalid\:ring-destructive\/20 { + &[aria-invalid="true"] { + --tw-ring-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); + } + } + } + .aria-pressed\:bg-transparent { + &[aria-pressed="true"] { + background-color: transparent; + } + } + .aria-pressed\:text-blue-600 { + &[aria-pressed="true"] { + color: var(--color-blue-600); + } + } + .aria-pressed\:hover\:bg-accent { + &[aria-pressed="true"] { + &:hover { + @media (hover: hover) { + background-color: var(--color-accent); + } + } + } + } + .max-sm\:flex-col { + @media (width < 40rem) { + flex-direction: column; + } + } + .sm\:max-w-\[425px\] { + @media (width >= 40rem) { + max-width: 425px; + } + } + .sm\:gap-2\.5 { + @media (width >= 40rem) { + gap: calc(var(--spacing) * 2.5); + } + } + .sm\:text-3xl { + @media (width >= 40rem) { + font-size: var(--text-3xl); + line-height: var(--tw-leading, var(--text-3xl--line-height)); + } + } + .sm\:text-base { + @media (width >= 40rem) { + font-size: var(--text-base); + line-height: var(--tw-leading, var(--text-base--line-height)); + } + } + .sm\:text-lg { + @media (width >= 40rem) { + font-size: var(--text-lg); + line-height: var(--tw-leading, var(--text-lg--line-height)); + } + } + .md\:ml-4 { + @media (width >= 48rem) { + margin-left: calc(var(--spacing) * 4); + } + } + .md\:w-\[239px\] { + @media (width >= 48rem) { + width: 239px; + } + } + .md\:max-w-\[200px\] { + @media (width >= 48rem) { + max-width: 200px; + } + } + .md\:flex-row { + @media (width >= 48rem) { + flex-direction: row; + } + } + .md\:border-l { + @media (width >= 48rem) { + border-left-style: var(--tw-border-style); + border-left-width: 1px; + } + } + .md\:p-6 { + @media (width >= 48rem) { + padding: calc(var(--spacing) * 6); + } + } + .md\:p-12 { + @media (width >= 48rem) { + padding: calc(var(--spacing) * 12); + } + } + .md\:pl-8 { + @media (width >= 48rem) { + padding-left: calc(var(--spacing) * 8); + } + } + .md\:text-4xl { + @media (width >= 48rem) { + font-size: var(--text-4xl); + line-height: var(--tw-leading, var(--text-4xl--line-height)); + } + } + .lg\:grid-cols-2 { + @media (width >= 64rem) { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + } + .xl\:block { + @media (width >= 80rem) { + display: block; + } + } + .xl\:p-12 { + @media (width >= 80rem) { + padding: calc(var(--spacing) * 12); + } + } + .xl\:text-4xl { + @media (width >= 80rem) { + font-size: var(--text-4xl); + line-height: var(--tw-leading, var(--text-4xl--line-height)); + } + } + .\@md\:w-auto { + @container (width >= 28rem) { + width: auto; + } + } + .\@md\:min-w-sm { + @container (width >= 28rem) { + min-width: var(--container-sm); + } + } + .dark\:block { + &:is(.dark *) { + display: block; + } + } + .dark\:hidden { + &:is(.dark *) { + display: none; + } + } + .dark\:border-amber-950 { + &:is(.dark *) { + border-color: var(--color-amber-950); + } + } + .dark\:bg-amber-950 { + &:is(.dark *) { + background-color: var(--color-amber-950); + } + } + .dark\:bg-blue-600 { + &:is(.dark *) { + background-color: var(--color-blue-600); + } + } + .dark\:text-amber-100 { + &:is(.dark *) { + color: var(--color-amber-100); + } + } + .dark\:text-neutral-300 { + &:is(.dark *) { + color: var(--color-neutral-300); + } + } + .dark\:checked\:border-blue-700 { + &:is(.dark *) { + &:checked { + border-color: var(--color-blue-700); + } + } + } + .dark\:checked\:bg-blue-600 { + &:is(.dark *) { + &:checked { + background-color: var(--color-blue-600); + } + } + } + .dark\:checked\:bg-blue-700 { + &:is(.dark *) { + &:checked { + background-color: var(--color-blue-700); + } + } + } + .dark\:checked\:bg-input\/30 { + &:is(.dark *) { + &:checked { + background-color: var(--color-input); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-input) 30%, transparent); + } + } + } + } + .dark\:checked\:before\:bg-primary { + &:is(.dark *) { + &:checked { + &::before { + content: var(--tw-content); + background-color: var(--color-primary); + } + } + } + } + .dark\:hover\:bg-destructive\/20 { + &:is(.dark *) { + &:hover { + @media (hover: hover) { + background-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); + } + } + } + } + } + .dark\:focus\:bg-destructive\/20 { + &:is(.dark *) { + &:focus { + background-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); + } + } + } + } + .dark\:has-\[\:checked\]\:bg-primary\/10 { + &:is(.dark *) { + &:has(*:is(:checked)) { + background-color: var(--color-primary); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-primary) 10%, transparent); + } + } + } + } + .dark\:has-\[input\[type\=\'checkbox\'\]\:checked\]\:border-blue-900 { + &:is(.dark *) { + &:has(*:is(input[type='checkbox']:checked)) { + border-color: var(--color-blue-900); + } + } + } + .dark\:has-\[input\[type\=\'checkbox\'\]\:checked\]\:bg-blue-950 { + &:is(.dark *) { + &:has(*:is(input[type='checkbox']:checked)) { + background-color: var(--color-blue-950); + } + } + } + .dark\:has-\[input\[type\=\'radio\'\]\:checked\]\:border-green-900 { + &:is(.dark *) { + &:has(*:is(input[type='radio']:checked)) { + border-color: var(--color-green-900); + } + } + } + .dark\:has-\[input\[type\=\'radio\'\]\:checked\]\:bg-green-950 { + &:is(.dark *) { + &:has(*:is(input[type='radio']:checked)) { + background-color: var(--color-green-950); + } + } + } + .dark\:aria-invalid\:ring-destructive\/40 { + &:is(.dark *) { + &[aria-invalid="true"] { + --tw-ring-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-destructive) 40%, transparent); + } + } + } + } + .dark\:aria-pressed\:hover\:bg-accent\/50 { + &:is(.dark *) { + &[aria-pressed="true"] { + &:hover { + @media (hover: hover) { + background-color: var(--color-accent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-accent) 50%, transparent); + } + } + } + } + } + } + .\[\&_\.text-muted-foreground\]\:hidden { + & .text-muted-foreground { + display: none; + } + } + .\[\&_\[data-name\]\]\:hidden { + & [data-name] { + display: none; + } + } + .\[\&_\[data-new-link\]\:\:after\]\:ml-auto { + & [data-new-link]::after { + margin-left: auto; + } + } + .\[\&_\[data-new-link\]\:\:after\]\:rounded-md { + & [data-new-link]::after { + border-radius: var(--radius-md); + } + } + .\[\&_\[data-new-link\]\:\:after\]\:bg-sidebar-primary { + & [data-new-link]::after { + background-color: var(--color-sidebar-primary); + } + } + .\[\&_\[data-new-link\]\:\:after\]\:px-2 { + & [data-new-link]::after { + padding-inline: calc(var(--spacing) * 2); + } + } + .\[\&_\[data-new-link\]\:\:after\]\:py-0\.5 { + & [data-new-link]::after { + padding-block: calc(var(--spacing) * 0.5); + } + } + .\[\&_\[data-new-link\]\:\:after\]\:text-xs { + & [data-new-link]::after { + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + } + } + .\[\&_\[data-new-link\]\:\:after\]\:font-medium { + & [data-new-link]::after { + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + } + } + .\[\&_\[data-new-link\]\:\:after\]\:text-sidebar-primary-foreground { + & [data-new-link]::after { + color: var(--color-sidebar-primary-foreground); + } + } + .\[\&_\[data-new-link\]\:\:after\]\:content-\[\'New\'\] { + & [data-new-link]::after { + --tw-content: 'New'; + content: var(--tw-content); + } + } + .\[\&_a\]\:inline-block { + & a { + display: inline-block; + } + } + .\[\&_a\]\:text-muted-foreground { + & a { + color: var(--color-muted-foreground); + } + } + .\[\&_a\]\:no-underline { + & a { + text-decoration-line: none; + } + } + .\[\&_a\]\:transition-colors { + & a { + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + } + .\[\&_a\]\:hover\:text-foreground { + & a { + &:hover { + @media (hover: hover) { + color: var(--color-foreground); + } + } + } + } + .\[\&_img\]\:size-8 { + & img { + width: calc(var(--spacing) * 8); + height: calc(var(--spacing) * 8); + } + } + .\[\&_img\]\:size-12 { + & img { + width: calc(var(--spacing) * 12); + height: calc(var(--spacing) * 12); + } + } + .\[\&_img\]\:shrink-0 { + & img { + flex-shrink: 0; + } + } + .\[\&_img\]\:rounded-full { + & img { + border-radius: calc(infinity * 1px); + } + } + .\[\&_img\]\:object-cover { + & img { + object-fit: cover; + } + } + .\[\&_img\]\:ring-2 { + & img { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + .\[\&_img\]\:ring-background { + & img { + --tw-ring-color: var(--color-background); + } + } + .\[\&_img\]\:ring-card { + & img { + --tw-ring-color: var(--color-card); + } + } + .\[\&_img\]\:grayscale { + & img { + --tw-grayscale: grayscale(100%); + filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); + } + } + .\[\&_img\]\:transition-all { + & img { + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + } + .\[\&_img\]\:duration-300 { + & img { + --tw-duration: 300ms; + transition-duration: 300ms; + } + } + .\[\&_img\]\:ease-in-out { + & img { + --tw-ease: var(--ease-in-out); + transition-timing-function: var(--ease-in-out); + } + } + .\[\&_li\]\:mt-0 { + & li { + margin-top: calc(var(--spacing) * 0); + } + } + .\[\&_li\]\:pt-2 { + & li { + padding-top: calc(var(--spacing) * 2); + } + } + .\[\&_span\]\:hidden { + & span { + display: none; + } + } + .\[\&_svg\]\:pointer-events-none { + & svg { + pointer-events: none; + } + } + .\[\&_svg\]\:size-4 { + & svg { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + } + } + .\[\&_svg\]\:size-5 { + & svg { + width: calc(var(--spacing) * 5); + height: calc(var(--spacing) * 5); + } + } + .\[\&_svg\]\:shrink-0 { + & svg { + flex-shrink: 0; + } + } + .\[\&_svg\]\:\!text-destructive { + & svg { + color: var(--color-destructive) !important; + } + } + .\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 { + & svg:not([class*='size-']) { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + } + } + .\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-6 { + & svg:not([class*='size-']) { + width: calc(var(--spacing) * 6); + height: calc(var(--spacing) * 6); + } + } + .\[\&_ul\]\:m-0 { + & ul { + margin: calc(var(--spacing) * 0); + } + } + .\[\&_ul\]\:list-none { + & ul { + list-style-type: none; + } + } + .\[\&_ul_ul\]\:pl-4 { + & ul ul { + padding-left: calc(var(--spacing) * 4); + } + } + .\[\&\.text-muted-foreground\]\:hidden { + &.text-muted-foreground { + display: none; + } + } + .md\:\*\:\[\.card\]\:basis-1\/4 { + @media (width >= 48rem) { + :is(& > *) { + &:is(.card) { + flex-basis: calc(1/4 * 100%); + } + } + } + } + .\[a\]\:transition-colors { + &:is(a) { + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + } + .\[a\]\:hover\:bg-accent\/50 { + &:is(a) { + &:hover { + @media (hover: hover) { + background-color: var(--color-accent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-accent) 50%, transparent); + } + } + } + } + } + .\[\&\>\.text-muted-foreground\]\:hidden { + &>.text-muted-foreground { + display: none; + } + } + .\[\&\>\[data-name\]\]\:hidden { + &>[data-name] { + display: none; + } + } + .\[\&\>a\]\:underline { + &>a { + text-decoration-line: underline; + } + } + .\[\&\>a\]\:underline-offset-4 { + &>a { + text-underline-offset: 4px; + } + } + .\[\&\>a\:hover\]\:text-primary { + &>a:hover { + color: var(--color-primary); + } + } + .\[\&\>em\]\:hidden { + &>em { + display: none; + } + } + .\[\&\>span_\.text-muted-foreground\]\:hidden { + &>span .text-muted-foreground { + display: none; + } + } + .\[\&\>svg\]\:mb-3 { + &>svg { + margin-bottom: calc(var(--spacing) * 3); + } + } + .\[\&\>svg\]\:size-3 { + &>svg { + width: calc(var(--spacing) * 3); + height: calc(var(--spacing) * 3); + } + } + .\[\&\>svg\]\:size-4 { + &>svg { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + } + } + .\[\&\>svg\]\:size-6 { + &>svg { + width: calc(var(--spacing) * 6); + height: calc(var(--spacing) * 6); + } + } + .aria-pressed\:\[\&\>svg\]\:fill-blue-600 { + &[aria-pressed="true"] { + &>svg { + fill: var(--color-blue-600); + } + } + } +} +:root { + --radius: 0.625rem; + --background: oklch(1 0 0); + --foreground: oklch(0.145 0 0); + --card: oklch(1 0 0); + --card-foreground: oklch(0.145 0 0); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.145 0 0); + --primary: oklch(0.205 0 0); + --primary-foreground: oklch(0.985 0 0); + --secondary: oklch(0.97 0 0); + --secondary-foreground: oklch(0.205 0 0); + --muted: oklch(0.97 0 0); + --muted-foreground: oklch(0.556 0 0); + --accent: oklch(0.97 0 0); + --accent-foreground: oklch(0.205 0 0); + --destructive: oklch(0.577 0.245 27.325); + --border: oklch(0.922 0 0); + --input: oklch(0.922 0 0); + --ring: oklch(0.708 0 0); + --chart-1: oklch(0.646 0.222 41.116); + --chart-2: oklch(0.6 0.118 184.704); + --chart-3: oklch(0.398 0.07 227.392); + --chart-4: oklch(0.828 0.189 84.429); + --chart-5: oklch(0.769 0.188 70.08); + --sidebar: oklch(0.985 0 0); + --sidebar-foreground: oklch(0.145 0 0); + --sidebar-primary: oklch(0.205 0 0); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.97 0 0); + --sidebar-accent-foreground: oklch(0.205 0 0); + --sidebar-border: oklch(0.922 0 0); + --sidebar-ring: oklch(0.708 0 0); + --sidebar-width: 16rem; + --sidebar-mobile-width: 18rem; + --scrollbar-track: transparent; + --scrollbar-thumb: rgba(0, 0, 0, 0.3); + --scrollbar-width: 6px; + --scrollbar-radius: 6px; + --chevron-down-icon: url('data:image/svg+xml;utf8,'); + --chevron-down-icon-50: url('data:image/svg+xml;utf8,'); + --check-icon: url('data:image/svg+xml;utf8,'); +} +.dark { + --background: oklch(0.145 0 0); + --foreground: oklch(0.985 0 0); + --card: oklch(0.205 0 0); + --card-foreground: oklch(0.985 0 0); + --popover: oklch(0.269 0 0); + --popover-foreground: oklch(0.985 0 0); + --primary: oklch(0.922 0 0); + --primary-foreground: oklch(0.205 0 0); + --secondary: oklch(0.269 0 0); + --secondary-foreground: oklch(0.985 0 0); + --muted: oklch(0.269 0 0); + --muted-foreground: oklch(0.708 0 0); + --accent: oklch(0.371 0 0); + --accent-foreground: oklch(0.985 0 0); + --destructive: oklch(0.704 0.191 22.216); + --border: oklch(1 0 0 / 10%); + --input: oklch(1 0 0 / 15%); + --ring: oklch(0.556 0 0); + --chart-1: oklch(0.488 0.243 264.376); + --chart-2: oklch(0.696 0.17 162.48); + --chart-3: oklch(0.769 0.188 70.08); + --chart-4: oklch(0.627 0.265 303.9); + --chart-5: oklch(0.645 0.246 16.439); + --sidebar: oklch(0.205 0 0); + --sidebar-foreground: oklch(0.985 0 0); + --sidebar-primary: oklch(0.488 0.243 264.376); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.269 0 0); + --sidebar-accent-foreground: oklch(0.985 0 0); + --sidebar-border: oklch(1 0 0 / 10%); + --sidebar-ring: oklch(0.439 0 0); + --scrollbar-thumb: rgba(255, 255, 255, 0.3); + --chevron-down-icon: url('data:image/svg+xml;utf8,'); + --chevron-down-icon-50: url('data:image/svg+xml;utf8,'); + --check-icon: url('data:image/svg+xml;utf8,'); + color-scheme: dark; +} +@layer base { + * { + border-color: var(--color-border); + outline-color: var(--color-ring); + @supports (color: color-mix(in lab, red, red)) { + outline-color: color-mix(in oklab, var(--color-ring) 50%, transparent); + } + } + html { + scroll-behavior: smooth; + } + body { + overscroll-behavior: none; + background-color: var(--color-background); + color: var(--color-foreground); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + .scrollbar { + scrollbar-width: thin; + scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track); + &::-webkit-scrollbar { + width: var(--scrollbar-width); + } + &::-webkit-scrollbar-track { + background: var(--scrollbar-track); + } + &::-webkit-scrollbar-thumb { + background: var(--scrollbar-thumb); + border-radius: var(--scrollbar-radius); + } + } +} +@layer components { + .alert, .alert-destructive { + position: relative; + display: grid; + width: 100%; + grid-template-columns: 0 1fr; + align-items: flex-start; + row-gap: calc(var(--spacing) * 0.5); + border-radius: var(--radius-lg); + border-style: var(--tw-border-style); + border-width: 1px; + padding-inline: calc(var(--spacing) * 4); + padding-block: calc(var(--spacing) * 3); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + &:has(>svg) { + grid-template-columns: calc(var(--spacing) * 4) 1fr; + } + &:has(>svg) { + column-gap: calc(var(--spacing) * 3); + } + &>svg { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + } + &>svg { + --tw-translate-y: calc(var(--spacing) * 0.5); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + &>svg { + color: currentcolor; + } + h2 { + grid-column-start: 2; + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 1; + min-height: calc(var(--spacing) * 4); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + --tw-tracking: var(--tracking-tight); + letter-spacing: var(--tracking-tight); + } + section { + grid-column-start: 2; + display: grid; + justify-items: start; + gap: calc(var(--spacing) * 1); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + color: var(--color-muted-foreground); + & p { + --tw-leading: var(--leading-relaxed); + line-height: var(--leading-relaxed); + } + ul { + list-style-position: inside; + list-style-type: disc; + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + } + } + } + .alert { + background-color: var(--color-card); + color: var(--color-card-foreground); + } + .alert-destructive { + background-color: var(--color-card); + color: var(--color-destructive); + &>svg { + color: currentcolor; + } + section { + color: var(--color-destructive); + } + } +} +@layer components { + .badge, .badge-primary, .badge-secondary, .badge-destructive, .badge-outline { + display: inline-flex; + width: fit-content; + flex-shrink: 0; + align-items: center; + justify-content: center; + gap: calc(var(--spacing) * 1); + overflow: hidden; + border-radius: calc(infinity * 1px); + border-style: var(--tw-border-style); + border-width: 1px; + padding-inline: calc(var(--spacing) * 2); + padding-block: calc(var(--spacing) * 0.5); + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + white-space: nowrap; + transition-property: color,box-shadow; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + &:focus-visible { + border-color: var(--color-ring); + } + &:focus-visible { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + &:focus-visible { + --tw-ring-color: var(--color-ring); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); + } + } + &[aria-invalid="true"] { + border-color: var(--color-destructive); + } + &[aria-invalid="true"] { + --tw-ring-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); + } + } + &:is(.dark *) { + &[aria-invalid="true"] { + --tw-ring-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-destructive) 40%, transparent); + } + } + } + &>svg { + pointer-events: none; + } + &>svg { + width: calc(var(--spacing) * 3); + height: calc(var(--spacing) * 3); + } + } + .badge, .badge-primary { + border-color: transparent; + background-color: var(--color-primary); + color: var(--color-primary-foreground); + a& { + &:hover { + @media (hover: hover) { + background-color: var(--color-primary); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-primary) 90%, transparent); + } + } + } + } + } + .badge-secondary { + border-color: transparent; + background-color: var(--color-secondary); + color: var(--color-secondary-foreground); + a& { + &:hover { + @media (hover: hover) { + background-color: var(--color-secondary); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-secondary) 90%, transparent); + } + } + } + } + } + .badge-destructive { + border-color: transparent; + background-color: var(--color-destructive); + color: var(--color-white); + &:focus-visible { + --tw-ring-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); + } + } + &:is(.dark *) { + background-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-destructive) 60%, transparent); + } + } + &:is(.dark *) { + &:focus-visible { + --tw-ring-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-destructive) 40%, transparent); + } + } + } + a& { + &:hover { + @media (hover: hover) { + background-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-destructive) 90%, transparent); + } + } + } + } + } + .badge-outline { + color: var(--color-foreground); + a& { + &:hover { + @media (hover: hover) { + background-color: var(--color-accent); + } + } + } + a& { + &:hover { + @media (hover: hover) { + color: var(--color-accent-foreground); + } + } + } + } +} +@layer components { + .btn, .btn-primary, .btn-secondary, .btn-outline, .btn-ghost, .btn-link, .btn-destructive, .btn-sm, .btn-sm-primary, .btn-sm-secondary, .btn-sm-outline, .btn-sm-ghost, .btn-sm-link, .btn-sm-destructive, .btn-lg, .btn-lg-primary, .btn-lg-secondary, .btn-lg-outline, .btn-lg-ghost, .btn-lg-link, .btn-lg-destructive, .btn-icon, .btn-icon-primary, .btn-icon-secondary, .btn-icon-outline, .btn-icon-ghost, .btn-icon-link, .btn-icon-destructive, .btn-sm-icon, .btn-sm-icon-primary, .btn-sm-icon-secondary, .btn-sm-icon-outline, .btn-sm-icon-ghost, .btn-sm-icon-link, .btn-sm-icon-destructive, .btn-lg-icon, .btn-lg-icon-primary, .btn-lg-icon-secondary, .btn-lg-icon-outline, .btn-lg-icon-ghost, .btn-lg-icon-link, .btn-lg-icon-destructive { + display: inline-flex; + flex-shrink: 0; + cursor: pointer; + align-items: center; + justify-content: center; + border-radius: var(--radius-md); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + white-space: nowrap; + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-outline-style: none; + outline-style: none; + &:focus-visible { + border-color: var(--color-ring); + } + &:focus-visible { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + &:focus-visible { + --tw-ring-color: var(--color-ring); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); + } + } + &:disabled { + pointer-events: none; + } + &:disabled { + opacity: 50%; + } + &[aria-invalid="true"] { + border-color: var(--color-destructive); + } + &[aria-invalid="true"] { + --tw-ring-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); + } + } + &:is(.dark *) { + &[aria-invalid="true"] { + --tw-ring-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-destructive) 40%, transparent); + } + } + } + & svg { + pointer-events: none; + } + & svg { + flex-shrink: 0; + } + & svg:not([class*='size-']) { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + } + } + .btn, .btn-primary, .btn-secondary, .btn-outline, .btn-ghost, .btn-link, .btn-destructive { + height: calc(var(--spacing) * 9); + gap: calc(var(--spacing) * 2); + padding-inline: calc(var(--spacing) * 4); + padding-block: calc(var(--spacing) * 2); + &:has(>svg) { + padding-inline: calc(var(--spacing) * 3); + } + } + .btn-icon, .btn-icon-primary, .btn-icon-secondary, .btn-icon-outline, .btn-icon-ghost, .btn-icon-link, .btn-icon-destructive { + width: calc(var(--spacing) * 9); + height: calc(var(--spacing) * 9); + } + .btn-sm, .btn-sm-primary, .btn-sm-secondary, .btn-sm-outline, .btn-sm-ghost, .btn-sm-link, .btn-sm-destructive { + height: calc(var(--spacing) * 8); + gap: calc(var(--spacing) * 1.5); + padding-inline: calc(var(--spacing) * 3); + &:has(>svg) { + padding-inline: calc(var(--spacing) * 2.5); + } + } + .btn-sm-icon, .btn-sm-icon-primary, .btn-sm-icon-secondary, .btn-sm-icon-outline, .btn-sm-icon-ghost, .btn-sm-icon-link, .btn-sm-icon-destructive { + width: calc(var(--spacing) * 8); + height: calc(var(--spacing) * 8); + } + .btn-lg, .btn-lg-primary, .btn-lg-secondary, .btn-lg-outline, .btn-lg-ghost, .btn-lg-link, .btn-lg-destructive { + height: calc(var(--spacing) * 10); + gap: calc(var(--spacing) * 2); + padding-inline: calc(var(--spacing) * 6); + &:has(>svg) { + padding-inline: calc(var(--spacing) * 4); + } + } + .btn-lg-icon, .btn-lg-icon-primary, .btn-lg-icon-secondary, .btn-lg-icon-outline, .btn-lg-icon-ghost, .btn-lg-icon-link, .btn-lg-icon-destructive { + width: calc(var(--spacing) * 10); + height: calc(var(--spacing) * 10); + } + .btn, .btn-primary, .btn-sm, .btn-sm-primary, .btn-lg, .btn-lg-primary, .btn-icon, .btn-icon-primary, .btn-sm-icon, .btn-sm-icon-primary, .btn-lg-icon, .btn-lg-icon-primary { + background-color: var(--color-primary); + color: var(--color-primary-foreground); + --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + &:hover { + @media (hover: hover) { + background-color: var(--color-primary); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-primary) 90%, transparent); + } + } + } + &[aria-pressed='true'] { + background-color: var(--color-primary); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-primary) 90%, transparent); + } + } + } + .btn-secondary, .btn-sm-secondary, .btn-lg-secondary, .btn-icon-secondary, .btn-sm-icon-secondary, .btn-lg-icon-secondary { + background-color: var(--color-secondary); + color: var(--color-secondary-foreground); + --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + &:hover, &[aria-pressed='true'] { + background-color: var(--color-secondary); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-secondary) 80%, transparent); + } + } + } + .btn-outline, .btn-sm-outline, .btn-lg-outline, .btn-icon-outline, .btn-sm-icon-outline, .btn-lg-icon-outline { + border-style: var(--tw-border-style); + border-width: 1px; + background-color: var(--color-background); + --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + &:is(.dark *) { + border-color: var(--color-input); + } + &:is(.dark *) { + background-color: var(--color-input); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-input) 30%, transparent); + } + } + &:hover, &[aria-pressed='true'] { + background-color: var(--color-accent); + color: var(--color-accent-foreground); + &:is(.dark *) { + background-color: var(--color-accent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-accent) 50%, transparent); + } + } + } + } + .btn-ghost, .btn-sm-ghost, .btn-lg-ghost, .btn-icon-ghost, .btn-sm-icon-ghost, .btn-lg-icon-ghost { + &:hover, &[aria-pressed='true'] { + background-color: var(--color-accent); + color: var(--color-accent-foreground); + &:is(.dark *) { + background-color: var(--color-accent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-accent) 50%, transparent); + } + } + } + } + .btn-link, .btn-sm-link, .btn-lg-link, .btn-icon-link, .btn-sm-icon-link, .btn-lg-icon-link { + color: var(--color-primary); + text-underline-offset: 4px; + &:hover, &[aria-pressed='true'] { + &:hover { + @media (hover: hover) { + text-decoration-line: underline; + } + } + } + } + .btn-destructive, .btn-sm-destructive, .btn-lg-destructive, .btn-icon-destructive, .btn-sm-icon-destructive, .btn-lg-icon-destructive { + background-color: var(--color-destructive); + color: var(--color-white); + --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + &:focus-visible { + --tw-ring-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); + } + } + &:is(.dark *) { + background-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-destructive) 60%, transparent); + } + } + &:is(.dark *) { + &:focus-visible { + --tw-ring-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-destructive) 40%, transparent); + } + } + } + &:hover, &[aria-pressed='true'] { + background-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-destructive) 90%, transparent); + } + &:is(.dark *) { + background-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-destructive) 50%, transparent); + } + } + } + } +} +.button-group { + isolation: isolate; + display: inline-flex; + width: fit-content; + align-items: stretch; + > *:focus-visible, > :is(.dropdown-menu, .popover, .select) > button:focus-visible { + position: relative; + z-index: 10; + } + > hr[role='separator'] { + margin: calc(var(--spacing) * 0); + height: auto; + width: calc(var(--spacing) * 0); + flex-shrink: 0; + align-self: stretch; + border-style: var(--tw-border-style); + border-width: 1px; + border-color: var(--color-input); + } + &:not([data-orientation='vertical']) { + > *:not(:first-child), > :is(.dropdown-menu, .popover, .select):not(:first-child) > button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-style: var(--tw-border-style); + border-left-width: 0px; + } + > *:not(:last-child), > :is(.dropdown-menu, .popover, .select):not(:last-child) > button { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + } + &[data-orientation='vertical'] { + flex-direction: column; + > hr[role='separator'] { + height: 1px; + width: auto; + } + > *:not(:first-child), > :is(.dropdown-menu, .popover, .select):not(:first-child) > button { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-top-style: var(--tw-border-style); + border-top-width: 0px; + } + > *:not(:last-child), > :is(.dropdown-menu, .popover, .select):not(:last-child) > button { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + } +} +@layer components { + .card { + display: flex; + flex-direction: column; + gap: calc(var(--spacing) * 6); + border-radius: var(--radius-xl); + border-style: var(--tw-border-style); + border-width: 1px; + background-color: var(--color-card); + padding-block: calc(var(--spacing) * 6); + color: var(--color-card-foreground); + --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + > header { + container-type: inline-size; + container-name: card-header; + display: grid; + grid-auto-rows: min-content; + grid-template-rows: auto auto; + align-items: flex-start; + gap: calc(var(--spacing) * 1.5); + padding-inline: calc(var(--spacing) * 6); + &:has(*[data-slot="card-action"]) { + grid-template-columns: 1fr auto; + } + &:is(.border-b) { + padding-bottom: calc(var(--spacing) * 6); + } + h2 { + --tw-leading: 1; + line-height: 1; + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + } + p { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + color: var(--color-muted-foreground); + } + } + > section { + padding-inline: calc(var(--spacing) * 6); + } + > footer { + display: flex; + align-items: center; + padding-inline: calc(var(--spacing) * 6); + &:is(.border-t) { + padding-top: calc(var(--spacing) * 6); + } + } + } +} +@layer components { + :is(.form, .field) input[type='checkbox']:not([role='switch']), .input[type='checkbox']:not([role='switch']) { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + flex-shrink: 0; + appearance: none; + border-radius: 4px; + border-style: var(--tw-border-style); + border-width: 1px; + border-color: var(--color-input); + --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + transition-property: box-shadow; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-outline-style: none; + outline-style: none; + &:checked { + border-color: var(--color-primary); + } + &:checked { + background-color: var(--color-primary); + } + &:focus-visible { + border-color: var(--color-ring); + } + &:focus-visible { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + &:focus-visible { + --tw-ring-color: var(--color-ring); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); + } + } + &:disabled { + cursor: not-allowed; + } + &:disabled { + opacity: 50%; + } + &[aria-invalid="true"] { + border-color: var(--color-destructive); + } + &[aria-invalid="true"] { + --tw-ring-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); + } + } + &:is(.dark *) { + background-color: var(--color-input); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-input) 30%, transparent); + } + } + &:is(.dark *) { + &:checked { + background-color: var(--color-primary); + } + } + &:is(.dark *) { + &[aria-invalid="true"] { + --tw-ring-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-destructive) 40%, transparent); + } + } + } + &:checked:after { + display: block; + width: calc(var(--spacing) * 3.5); + height: calc(var(--spacing) * 3.5); + background-color: var(--color-primary-foreground); + --tw-content: ''; + content: var(--tw-content); + mask-image: var(--check-icon); + mask-size: 0.875rem; + mask-position: center; + mask-repeat: no-repeat; + } + } +} +@layer components { + details { + &::details-content { + block-size: 0; + display: block; + opacity: 0%; + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + transition-behavior: allow-discrete; + } + &[open]::details-content { + block-size: auto; + block-size: calc-size(auto, size); + opacity: 100%; + } + summary { + display: inline-flex; + cursor: pointer; + align-items: center; + } + } + details > summary::-webkit-details-marker { + display: none; + } +} +@layer components { + .command-dialog { + inset-block: calc(var(--spacing) * 0); + opacity: 0%; + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + transition-behavior: allow-discrete; + &:is([open],:popover-open) { + opacity: 100%; + &::backdrop { + opacity: 100%; + } + > * { + --tw-scale-x: 100%; + --tw-scale-y: 100%; + --tw-scale-z: 100%; + scale: var(--tw-scale-x) var(--tw-scale-y); + } + @starting-style { + opacity: 0%; + &::backdrop { + opacity: 0%; + } + > * { + --tw-scale-x: 95%; + --tw-scale-y: 95%; + --tw-scale-z: 95%; + scale: var(--tw-scale-x) var(--tw-scale-y); + } + } + } + &::backdrop { + background-color: color-mix(in srgb, #000 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-black) 50%, transparent); + } + opacity: 0%; + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + transition-behavior: allow-discrete; + } + > * { + position: fixed; + top: 50%; + left: 50%; + z-index: 50; + display: flex; + max-height: min(640px, calc(100% - 2rem)); + width: 100%; + max-width: calc(100% - 2rem); + --tw-translate-x: calc(calc(1/2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + --tw-translate-y: calc(calc(1/2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + flex-direction: column; + overflow: hidden; + border-radius: var(--radius-lg); + border-style: var(--tw-border-style); + border-width: 1px; + background-color: var(--color-background); + --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + @media (width >= 40rem) { + max-width: var(--container-lg); + } + --tw-scale-x: 95%; + --tw-scale-y: 95%; + --tw-scale-z: 95%; + scale: var(--tw-scale-x) var(--tw-scale-y); + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + > button, > form[method='dialog'] { + position: absolute; + top: calc(var(--spacing) * 4); + right: calc(var(--spacing) * 4); + } + > button, > form[method='dialog'] > button { + border-radius: var(--radius-xs); + opacity: 70%; + --tw-ring-offset-color: var(--color-background); + transition-property: opacity; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + &:hover { + @media (hover: hover) { + opacity: 100%; + } + } + &:focus { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + &:focus { + --tw-ring-color: var(--color-ring); + } + &:focus { + --tw-ring-offset-width: 2px; + --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + } + &:focus { + --tw-outline-style: none; + outline-style: none; + @media (forced-colors: active) { + outline: 2px solid transparent; + outline-offset: 2px; + } + } + &:disabled { + pointer-events: none; + } + &[data-state="open"] { + background-color: var(--color-accent); + } + &[data-state="open"] { + color: var(--color-muted-foreground); + } + & svg { + pointer-events: none; + } + & svg { + flex-shrink: 0; + } + & svg:not([class*='size-']) { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + } + } + } + .command { + > header input { + height: calc(var(--spacing) * 12); + } + [role='menu'] { + padding-inline: calc(var(--spacing) * 2); + [role='menuitem'] { + padding-inline: calc(var(--spacing) * 2); + padding-block: calc(var(--spacing) * 3); + & svg { + width: calc(var(--spacing) * 5); + height: calc(var(--spacing) * 5); + } + } + [role='heading'] { + padding-inline: calc(var(--spacing) * 2); + padding-block: calc(var(--spacing) * 1.5); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + color: var(--color-muted-foreground); + } + } + } + } + .command { + > header { + display: flex; + align-items: center; + gap: calc(var(--spacing) * 2); + border-bottom-style: var(--tw-border-style); + border-bottom-width: 1px; + padding-inline: calc(var(--spacing) * 3); + svg { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + flex-shrink: 0; + opacity: 50%; + } + input { + display: flex; + height: calc(var(--spacing) * 10); + width: 100%; + border-radius: var(--radius-md); + background-color: transparent; + padding-block: calc(var(--spacing) * 3); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + --tw-outline-style: none; + outline-style: none; + @media (forced-colors: active) { + outline: 2px solid transparent; + outline-offset: 2px; + } + &::placeholder { + color: var(--color-muted-foreground); + } + &:disabled { + cursor: not-allowed; + } + &:disabled { + opacity: 50%; + } + } + } + [role='menu'] { + max-height: 300px; + overflow-x: hidden; + overflow-y: auto; + padding: calc(var(--spacing) * 1); + [role='menuitem'] { + position: relative; + display: flex; + width: 100%; + cursor: default; + align-items: center; + gap: calc(var(--spacing) * 2); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + border-radius: var(--radius-sm); + padding-inline: calc(var(--spacing) * 2); + padding-block: calc(var(--spacing) * 1.5); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + --tw-outline-style: none; + outline-style: none; + @media (forced-colors: active) { + outline: 2px solid transparent; + outline-offset: 2px; + } + -webkit-user-select: none; + user-select: none; + &:disabled { + pointer-events: none; + } + &:disabled { + opacity: 50%; + } + &[aria-disabled="true"] { + pointer-events: none; + } + &[aria-disabled="true"] { + opacity: 50%; + } + &[aria-hidden="true"] { + display: none; + } + & svg { + pointer-events: none; + } + & svg { + flex-shrink: 0; + } + & svg:not([class*='size-']) { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + } + & svg:not([class*='text-']) { + color: var(--color-muted-foreground); + } + &.active { + background-color: var(--color-accent); + color: var(--color-accent-foreground); + } + } + [role='heading'] { + display: flex; + padding-inline: calc(var(--spacing) * 2); + padding-block: calc(var(--spacing) * 1.5); + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + color: var(--color-muted-foreground); + } + [role='group']:not(:has([role='menuitem']:not([aria-hidden='true']))) { + display: none; + } + [role='separator'] { + margin-inline: calc(var(--spacing) * -1); + margin-block: calc(var(--spacing) * 1); + border-color: var(--color-border); + } + &:not(:has([data-value]:not([aria-hidden='true'])))::before { + margin: calc(var(--spacing) * -1); + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + padding-inline: calc(var(--spacing) * 3); + padding-block: calc(var(--spacing) * 6); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + } + &[data-empty]:not(:has([data-value]:not([aria-hidden='true'])))::before { + --tw-content: attr(data-empty); + content: var(--tw-content); + } + &:not([data-empty]):not(:has([data-value]:not([aria-hidden='true'])))::before { + --tw-content: 'No results found'; + content: var(--tw-content); + } + } + &:not([data-command-initialized]) [role='menuitem'] { + &:hover { + @media (hover: hover) { + background-color: var(--color-accent); + } + } + &:hover { + @media (hover: hover) { + color: var(--color-accent-foreground); + } + } + } + &:has(> header input:not(:placeholder-shown)) [role='separator'] { + display: none; + } + } +} +@layer components { + .dialog { + inset-block: calc(var(--spacing) * 0); + opacity: 0%; + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + transition-behavior: allow-discrete; + &:is([open],:popover-open) { + opacity: 100%; + &::backdrop { + opacity: 100%; + } + > * { + --tw-scale-x: 100%; + --tw-scale-y: 100%; + --tw-scale-z: 100%; + scale: var(--tw-scale-x) var(--tw-scale-y); + } + @starting-style { + opacity: 0%; + &::backdrop { + opacity: 0%; + } + > * { + --tw-scale-x: 95%; + --tw-scale-y: 95%; + --tw-scale-z: 95%; + scale: var(--tw-scale-x) var(--tw-scale-y); + } + } + } + &::backdrop { + background-color: color-mix(in srgb, #000 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-black) 50%, transparent); + } + opacity: 0%; + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + transition-behavior: allow-discrete; + } + > * { + position: fixed; + top: 50%; + left: 50%; + z-index: 50; + display: flex; + max-height: calc(100% - 2rem); + width: 100%; + max-width: calc(100% - 2rem); + --tw-translate-x: calc(calc(1/2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + --tw-translate-y: calc(calc(1/2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + flex-direction: column; + gap: calc(var(--spacing) * 4); + border-radius: var(--radius-lg); + border-style: var(--tw-border-style); + border-width: 1px; + background-color: var(--color-background); + padding: calc(var(--spacing) * 6); + --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + @media (width >= 40rem) { + max-width: var(--container-lg); + } + --tw-scale-x: 95%; + --tw-scale-y: 95%; + --tw-scale-z: 95%; + scale: var(--tw-scale-x) var(--tw-scale-y); + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + > header { + display: flex; + flex-direction: column; + gap: calc(var(--spacing) * 2); + text-align: center; + @media (width >= 40rem) { + text-align: left; + } + > h2 { + font-size: var(--text-lg); + line-height: var(--tw-leading, var(--text-lg--line-height)); + --tw-leading: 1; + line-height: 1; + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + } + > p { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + color: var(--color-muted-foreground); + } + } + > section { + margin-inline: calc(var(--spacing) * -6); + flex: 1; + padding-inline: calc(var(--spacing) * 6); + } + > footer { + display: flex; + flex-direction: column-reverse; + gap: calc(var(--spacing) * 2); + @media (width >= 40rem) { + flex-direction: row; + } + @media (width >= 40rem) { + justify-content: flex-end; + } + } + > button, > form[method='dialog'] { + position: absolute; + top: calc(var(--spacing) * 4); + right: calc(var(--spacing) * 4); + } + > button, > form[method='dialog'] > button { + border-radius: var(--radius-xs); + opacity: 70%; + --tw-ring-offset-color: var(--color-background); + transition-property: opacity; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + &:hover { + @media (hover: hover) { + opacity: 100%; + } + } + &:focus { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + &:focus { + --tw-ring-color: var(--color-ring); + } + &:focus { + --tw-ring-offset-width: 2px; + --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + } + &:focus { + --tw-outline-style: none; + outline-style: none; + @media (forced-colors: active) { + outline: 2px solid transparent; + outline-offset: 2px; + } + } + &:disabled { + pointer-events: none; + } + &[data-state="open"] { + background-color: var(--color-accent); + } + &[data-state="open"] { + color: var(--color-muted-foreground); + } + & svg { + pointer-events: none; + } + & svg { + flex-shrink: 0; + } + & svg:not([class*='size-']) { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + } + } + } + } +} +@layer components { + .dropdown-menu { + position: relative; + display: inline-flex; + [data-popover] { + padding: calc(var(--spacing) * 1); + min-width: anchor-size(width); + [role='menuitem'], [role='menuitemcheckbox'], [role='menuitemradio'] { + position: relative; + display: flex; + width: 100%; + cursor: default; + align-items: center; + gap: calc(var(--spacing) * 2); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + border-radius: var(--radius-sm); + padding-inline: calc(var(--spacing) * 2); + padding-block: calc(var(--spacing) * 1.5); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + --tw-outline-style: none; + outline-style: none; + @media (forced-colors: active) { + outline: 2px solid transparent; + outline-offset: 2px; + } + -webkit-user-select: none; + user-select: none; + &:disabled { + pointer-events: none; + } + &:disabled { + opacity: 50%; + } + &[aria-disabled="true"] { + pointer-events: none; + } + &[aria-disabled="true"] { + opacity: 50%; + } + &[aria-hidden="true"] { + display: none; + } + & svg { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + } + & svg { + flex-shrink: 0; + } + & svg { + color: var(--color-muted-foreground); + } + &:not([aria-disabled='true']) { + &:focus-visible { + background-color: var(--color-accent); + } + &:focus-visible { + color: var(--color-accent-foreground); + } + } + &.active { + background-color: var(--color-accent); + color: var(--color-accent-foreground); + } + } + [role='menu'] [role='heading'] { + display: flex; + padding-inline: calc(var(--spacing) * 2); + padding-block: calc(var(--spacing) * 1.5); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + } + [role='separator'] { + margin-inline: calc(var(--spacing) * -1); + margin-block: calc(var(--spacing) * 1); + border-color: var(--color-border); + } + } + &:not([data-dropdown-menu-initialized]) [data-popover] { + [role='menuitem'], [role='menuitemcheckbox'], [role='menuitemradio'] { + &:hover { + @media (hover: hover) { + background-color: var(--color-accent); + } + } + &:hover { + @media (hover: hover) { + color: var(--color-accent-foreground); + } + } + } + } + } +} +@layer components { + .fieldset { + display: flex; + flex-direction: column; + gap: calc(var(--spacing) * 6); + > legend { + margin-bottom: calc(var(--spacing) * 3); + font-size: var(--text-base); + line-height: var(--tw-leading, var(--text-base--line-height)); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + & + p { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + color: var(--color-muted-foreground); + } + } + } + .field { + display: flex; + width: 100%; + flex-direction: column; + gap: calc(var(--spacing) * 3); + &[data-invalid="true"] { + color: var(--color-destructive); + } + &>* { + width: 100%; + } + &>.sr-only { + width: auto; + } + .description { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + color: var(--color-muted-foreground); + } + .error { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + color: var(--color-destructive); + } + } +} +@layer components { + :is(.form, .field) input[type='text'], :is(.form, .field) input[type='email'], :is(.form, .field) input[type='password'], :is(.form, .field) input[type='number'], :is(.form, .field) input[type='file'], :is(.form, .field) input[type='tel'], :is(.form, .field) input[type='url'], :is(.form, .field) input[type='search'], :is(.form, .field) input[type='date'], :is(.form, .field) input[type='datetime-local'], :is(.form, .field) input[type='month'], :is(.form, .field) input[type='week'], :is(.form, .field) input[type='time'], .input[type='text'], .input[type='email'], .input[type='password'], .input[type='number'], .input[type='file'], .input[type='tel'], .input[type='url'], .input[type='search'], .input[type='date'], .input[type='datetime-local'], .input[type='month'], .input[type='week'], .input[type='time'] { + display: flex; + height: calc(var(--spacing) * 9); + width: 100%; + min-width: calc(var(--spacing) * 0); + appearance: none; + border-radius: var(--radius-md); + border-style: var(--tw-border-style); + border-width: 1px; + border-color: var(--color-input); + background-color: transparent; + padding-inline: calc(var(--spacing) * 3); + padding-block: calc(var(--spacing) * 1); + font-size: var(--text-base); + line-height: var(--tw-leading, var(--text-base--line-height)); + --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + transition-property: color,box-shadow; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-outline-style: none; + outline-style: none; + & *::selection { + background-color: var(--color-primary); + } + &::selection { + background-color: var(--color-primary); + } + & *::selection { + color: var(--color-primary-foreground); + } + &::selection { + color: var(--color-primary-foreground); + } + &::file-selector-button { + display: inline-flex; + } + &::file-selector-button { + height: calc(var(--spacing) * 7); + } + &::file-selector-button { + border-style: var(--tw-border-style); + border-width: 0px; + } + &::file-selector-button { + background-color: transparent; + } + &::file-selector-button { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + } + &::file-selector-button { + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + } + &::file-selector-button { + color: var(--color-foreground); + } + &::placeholder { + color: var(--color-muted-foreground); + } + &:disabled { + pointer-events: none; + } + &:disabled { + cursor: not-allowed; + } + &:disabled { + opacity: 50%; + } + @media (width >= 48rem) { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + } + &:is(.dark *) { + background-color: var(--color-input); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-input) 30%, transparent); + } + } + &:focus-visible { + border-color: var(--color-ring); + } + &:focus-visible { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + &:focus-visible { + --tw-ring-color: var(--color-ring); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); + } + } + &[aria-invalid="true"] { + border-color: var(--color-destructive); + } + &[aria-invalid="true"] { + --tw-ring-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); + } + } + &:is(.dark *) { + &[aria-invalid="true"] { + --tw-ring-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-destructive) 40%, transparent); + } + } + } + } +} +@layer components { + .kbd { + pointer-events: none; + display: inline-flex; + height: calc(var(--spacing) * 5); + width: fit-content; + min-width: calc(var(--spacing) * 5); + align-items: center; + justify-content: center; + gap: calc(var(--spacing) * 1); + border-radius: var(--radius-sm); + background-color: var(--color-muted); + padding-inline: calc(var(--spacing) * 1); + font-family: var(--font-sans); + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + color: var(--color-muted-foreground); + -webkit-user-select: none; + user-select: none; + & svg:not([class*='size-']) { + width: calc(var(--spacing) * 3); + height: calc(var(--spacing) * 3); + } + } +} +@layer components { + :is(.form, .field) label, .label { + display: flex; + align-items: center; + gap: calc(var(--spacing) * 2); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + --tw-leading: 1; + line-height: 1; + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + -webkit-user-select: none; + user-select: none; + &:is(:where(.peer):disabled ~ *) { + pointer-events: none; + } + &:is(:where(.peer):disabled ~ *) { + opacity: 50%; + } + &:has(>*:disabled), &:has(+*:disabled) { + pointer-events: none; + opacity: 50%; + } + } +} +@layer components { + [data-popover] { + visibility: visible; + position: absolute; + z-index: 50; + width: max-content; + min-width: 100%; + --tw-scale-x: 100%; + --tw-scale-y: 100%; + --tw-scale-z: 100%; + scale: var(--tw-scale-x) var(--tw-scale-y); + overflow-x: hidden; + overflow-y: auto; + border-radius: var(--radius-md); + border-style: var(--tw-border-style); + border-width: 1px; + background-color: var(--color-popover); + color: var(--color-popover-foreground); + opacity: 100%; + --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + &[aria-hidden='true'] { + visibility: hidden; + --tw-scale-x: 95%; + --tw-scale-y: 95%; + --tw-scale-z: 95%; + scale: var(--tw-scale-x) var(--tw-scale-y); + opacity: 0%; + &:not([data-side]), &[data-side='bottom'] { + --tw-translate-y: calc(var(--spacing) * -2); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + &[data-side='top'] { + --tw-translate-y: calc(var(--spacing) * 2); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + &[data-side='left'] { + --tw-translate-x: calc(var(--spacing) * 2); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + &[data-side='right'] { + --tw-translate-x: calc(var(--spacing) * -2); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + &:not([data-side]), &[data-side='bottom'] { + top: 100%; + margin-top: calc(var(--spacing) * 1); + } + &[data-side='top'] { + bottom: 100%; + margin-bottom: calc(var(--spacing) * 1); + } + &[data-side='left'] { + right: 100%; + margin-right: calc(var(--spacing) * 1); + } + &[data-side='right'] { + left: 100%; + margin-left: calc(var(--spacing) * 1); + } + &:not([data-side]), &[data-side='bottom'], &[data-side='top'] { + &:not([data-align]), &[data-align='start'] { + left: calc(var(--spacing) * 0); + } + &[data-align='end'] { + right: calc(var(--spacing) * 0); + } + &[data-align='center'] { + left: calc(1/2 * 100%); + --tw-translate-x: calc(calc(1/2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + &[data-side='left'], &[data-side='right'] { + &:not([data-align]), &[data-align='start'] { + top: calc(var(--spacing) * 0); + } + &[data-align='end'] { + bottom: calc(var(--spacing) * 0); + } + &[data-align='center'] { + top: calc(1/2 * 100%); + --tw-translate-y: calc(calc(1/2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + } + .popover { + position: relative; + display: inline-flex; + [data-popover] { + padding: calc(var(--spacing) * 4); + } + } +} +@layer components { + :is(.form, .field) input[type='radio'], .input[type='radio'] { + position: relative; + aspect-ratio: 1 / 1; + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + flex-shrink: 0; + appearance: none; + border-radius: calc(infinity * 1px); + border-style: var(--tw-border-style); + border-width: 1px; + border-color: var(--color-input); + color: var(--color-primary); + --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + transition-property: color,box-shadow; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-outline-style: none; + outline-style: none; + &:focus-visible { + border-color: var(--color-ring); + } + &:focus-visible { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + &:focus-visible { + --tw-ring-color: var(--color-ring); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); + } + } + &:disabled { + cursor: not-allowed; + } + &:disabled { + opacity: 50%; + } + &[aria-invalid="true"] { + border-color: var(--color-destructive); + } + &[aria-invalid="true"] { + --tw-ring-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); + } + } + &:is(.dark *) { + background-color: var(--color-input); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-input) 30%, transparent); + } + } + &:is(.dark *) { + &[aria-invalid="true"] { + --tw-ring-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-destructive) 40%, transparent); + } + } + } + &:checked:before { + position: absolute; + top: calc(1/2 * 100%); + left: calc(1/2 * 100%); + width: calc(var(--spacing) * 2); + height: calc(var(--spacing) * 2); + --tw-translate-x: calc(calc(1/2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + --tw-translate-y: calc(calc(1/2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + border-radius: calc(infinity * 1px); + background-color: var(--color-primary); + --tw-content: ''; + content: var(--tw-content); + } + } +} +@layer components { + :is(.form, .field) input[type='range'], .input[type='range'] { + display: flex; + appearance: none; + align-items: center; + padding: calc(var(--spacing) * 0); + --tw-outline-style: none; + outline-style: none; + --slider-value: 20%; + &:hover, &:focus-visible { + &::-webkit-slider-thumb { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + &::-moz-range-thumb { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + &::-ms-thumb { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + &::-webkit-slider-thumb { + margin-top: calc(var(--spacing) * -1.25); + display: block; + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + flex-shrink: 0; + appearance: none; + border-radius: calc(infinity * 1px); + border-style: var(--tw-border-style); + border-width: 1px; + border-color: var(--color-primary); + background-color: var(--color-background); + --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + --tw-ring-color: var(--color-ring); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); + } + } + &::-webkit-slider-runnable-track { + height: calc(var(--spacing) * 1.5); + width: 100%; + appearance: none; + border-radius: calc(infinity * 1px); + background: linear-gradient(to right, var(--primary) var(--slider-value), var(--muted) var(--slider-value)); + } + &::-moz-range-thumb { + margin-top: calc(var(--spacing) * -1.25); + display: block; + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + flex-shrink: 0; + appearance: none; + border-radius: calc(infinity * 1px); + border-style: var(--tw-border-style); + border-width: 1px; + border-color: var(--color-primary); + background-color: var(--color-background); + --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + --tw-ring-color: var(--color-ring); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); + } + } + &::-moz-range-track { + height: calc(var(--spacing) * 1.5); + width: 100%; + appearance: none; + border-radius: calc(infinity * 1px); + background: linear-gradient(to right, var(--primary) var(--slider-value), var(--muted) var(--slider-value)); + } + &::-ms-thumb { + margin-top: calc(var(--spacing) * -1.25); + display: block; + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + flex-shrink: 0; + appearance: none; + border-radius: calc(infinity * 1px); + border-style: var(--tw-border-style); + border-width: 1px; + border-color: var(--color-primary); + background-color: var(--color-background); + --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + --tw-ring-color: var(--color-ring); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); + } + } + &::-ms-track { + height: calc(var(--spacing) * 1.5); + width: 100%; + appearance: none; + border-radius: calc(infinity * 1px); + } + &::-ms-fill-lower { + border-radius: calc(infinity * 1px); + background-color: var(--color-primary); + } + &::-ms-fill-upper { + border-radius: calc(infinity * 1px); + background-color: var(--color-muted); + } + } +} +@layer components { + :is(.form, .field) select, select.select { + display: flex; + height: calc(var(--spacing) * 9); + width: fit-content; + appearance: none; + align-items: center; + justify-content: space-between; + gap: calc(var(--spacing) * 2); + border-radius: var(--radius-md); + border-style: var(--tw-border-style); + border-width: 1px; + border-color: var(--color-input); + background-color: transparent; + padding-block: calc(var(--spacing) * 2); + padding-right: calc(var(--spacing) * 9); + padding-left: calc(var(--spacing) * 3); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + white-space: nowrap; + --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + transition-property: color,box-shadow; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-outline-style: none; + outline-style: none; + &:focus-visible { + border-color: var(--color-ring); + } + &:focus-visible { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + &:focus-visible { + --tw-ring-color: var(--color-ring); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); + } + } + &:disabled { + cursor: not-allowed; + } + &:disabled { + opacity: 50%; + } + &[aria-invalid="true"] { + border-color: var(--color-destructive); + } + &[aria-invalid="true"] { + --tw-ring-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); + } + } + &:is(.dark *) { + background-color: var(--color-input); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-input) 30%, transparent); + } + } + &:is(.dark *) { + &:hover { + @media (hover: hover) { + background-color: var(--color-input); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-input) 50%, transparent); + } + } + } + } + &:is(.dark *) { + &[aria-invalid="true"] { + --tw-ring-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-destructive) 40%, transparent); + } + } + } + background-image: var(--chevron-down-icon-50); + background-size: 1rem; + background-position: center right 0.75rem; + background-repeat: no-repeat; + option, optgroup { + background-color: var(--color-popover); + color: var(--color-popover-foreground); + } + } + *:not(select).select { + position: relative; + display: inline-flex; + [data-popover] { + padding: calc(var(--spacing) * 1); + [role='option'] { + position: relative; + display: flex; + width: 100%; + cursor: default; + align-items: center; + gap: calc(var(--spacing) * 2); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + border-radius: var(--radius-sm); + padding-block: calc(var(--spacing) * 1.5); + padding-right: calc(var(--spacing) * 7.5); + padding-left: calc(var(--spacing) * 2); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + --tw-outline-style: none; + outline-style: none; + @media (forced-colors: active) { + outline: 2px solid transparent; + outline-offset: 2px; + } + -webkit-user-select: none; + user-select: none; + &:disabled { + pointer-events: none; + } + &:disabled { + opacity: 50%; + } + &[aria-disabled="true"] { + pointer-events: none; + } + &[aria-disabled="true"] { + opacity: 50%; + } + &[aria-hidden="true"] { + display: none; + } + & svg { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + } + & svg { + flex-shrink: 0; + } + & svg { + color: var(--color-muted-foreground); + } + &[aria-selected='true'] { + background-image: var(--check-icon); + background-size: 0.875rem; + background-position: center right 0.5rem; + background-repeat: no-repeat; + } + &.active, &:focus-visible { + background-color: var(--color-accent); + color: var(--color-accent-foreground); + } + } + [role='listbox'] [role='heading'] { + display: flex; + padding-inline: calc(var(--spacing) * 2); + padding-block: calc(var(--spacing) * 1.5); + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + color: var(--color-muted-foreground); + } + [role='listbox'] [role='group']:not(:has([role='option']:not([aria-hidden='true']))) { + display: none; + } + [role='separator'] { + margin-inline: calc(var(--spacing) * -1); + margin-block: calc(var(--spacing) * 1); + border-color: var(--color-border); + } + > header { + margin-inline: calc(var(--spacing) * -1); + margin-top: calc(var(--spacing) * -1); + margin-bottom: calc(var(--spacing) * 1); + display: flex; + height: calc(var(--spacing) * 9); + align-items: center; + gap: calc(var(--spacing) * 2); + border-bottom-style: var(--tw-border-style); + border-bottom-width: 1px; + padding-inline: calc(var(--spacing) * 3); + svg { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + flex-shrink: 0; + opacity: 50%; + } + input[role='combobox'] { + display: flex; + height: calc(var(--spacing) * 10); + width: 100%; + min-width: calc(var(--spacing) * 0); + flex: 1; + border-radius: var(--radius-md); + background-color: transparent; + padding-block: calc(var(--spacing) * 3); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + --tw-outline-style: none; + outline-style: none; + @media (forced-colors: active) { + outline: 2px solid transparent; + outline-offset: 2px; + } + &::placeholder { + color: var(--color-muted-foreground); + } + &:disabled { + cursor: not-allowed; + } + &:disabled { + opacity: 50%; + } + } + } + [role='listbox']:not(:has([data-value]:not([aria-hidden='true'])))::before { + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + padding: calc(var(--spacing) * 6); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + } + [role='listbox'][data-empty]:not(:has([data-value]:not([aria-hidden='true'])))::before { + --tw-content: attr(data-empty); + content: var(--tw-content); + } + [role='listbox']:not([data-empty]):not(:has([data-value]:not([aria-hidden='true'])))::before { + --tw-content: 'No results found'; + content: var(--tw-content); + } + } + [data-popover]:has(> header input:not(:placeholder-shown)) [role='separator'] { + display: none; + } + &:not([data-select-initialized]) [data-popover] [role='option'] { + &:hover { + @media (hover: hover) { + background-color: var(--color-accent); + } + } + &:hover { + @media (hover: hover) { + color: var(--color-accent-foreground); + } + } + } + } +} +.sidebar { + &:not([data-sidebar-initialized]) { + @media (width < 48rem) { + display: none; + } + } + &:not([aria-hidden]), &[aria-hidden=false] { + @media (width < 48rem) { + position: fixed; + } + @media (width < 48rem) { + inset: calc(var(--spacing) * 0); + } + @media (width < 48rem) { + z-index: 40; + } + @media (width < 48rem) { + background-color: color-mix(in srgb, #000 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-black) 50%, transparent); + } + } + } + nav { + position: fixed; + inset-block: calc(var(--spacing) * 0); + z-index: 50; + display: flex; + width: var(--sidebar-mobile-width); + flex-direction: column; + background-color: var(--color-sidebar); + color: var(--color-sidebar-foreground); + transition-property: transform, translate, scale, rotate; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-duration: 300ms; + transition-duration: 300ms; + --tw-ease: var(--ease-in-out); + transition-timing-function: var(--ease-in-out); + @media (width >= 48rem) { + width: var(--sidebar-width); + } + } + & + * { + transition-property: margin; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-duration: 300ms; + transition-duration: 300ms; + --tw-ease: var(--ease-in-out); + transition-timing-function: var(--ease-in-out); + } + &:not([data-side]), &[data-side=left] { + nav { + left: calc(var(--spacing) * 0); + border-right-style: var(--tw-border-style); + border-right-width: 1px; + } + & + * { + position: relative; + @media (width >= 48rem) { + margin-left: var(--sidebar-width); + } + } + &[aria-hidden=true] { + nav { + --tw-translate-x: -100%; + translate: var(--tw-translate-x) var(--tw-translate-y); + } + & + * { + @media (width >= 48rem) { + margin-left: calc(var(--spacing) * 0); + } + } + } + } + &[data-side=right] { + nav { + right: calc(var(--spacing) * 0); + border-left-style: var(--tw-border-style); + border-left-width: 1px; + } + & + * { + position: relative; + @media (width >= 48rem) { + margin-right: var(--sidebar-width); + } + } + &[aria-hidden=true] { + nav { + --tw-translate-x: 100%; + translate: var(--tw-translate-x) var(--tw-translate-y); + } + & + * { + @media (width >= 48rem) { + margin-right: calc(var(--spacing) * 0); + } + } + } + } + nav { + > header, > footer { + display: flex; + flex-direction: column; + gap: calc(var(--spacing) * 2); + padding: calc(var(--spacing) * 2); + } + [role=separator] { + margin-inline: calc(var(--spacing) * 2); + width: auto; + border-color: var(--color-sidebar-border); + } + > section { + display: flex; + min-height: calc(var(--spacing) * 0); + flex: 1; + flex-direction: column; + gap: calc(var(--spacing) * 2); + overflow-y: auto; + > [role=group] { + position: relative; + display: flex; + width: 100%; + min-width: calc(var(--spacing) * 0); + flex-direction: column; + padding: calc(var(--spacing) * 2); + } + h3 { + display: flex; + height: calc(var(--spacing) * 8); + flex-shrink: 0; + align-items: center; + border-radius: var(--radius-md); + padding-inline: calc(var(--spacing) * 2); + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + color: var(--color-sidebar-foreground); + @supports (color: color-mix(in lab, red, red)) { + color: color-mix(in oklab, var(--color-sidebar-foreground) 70%, transparent); + } + --tw-ring-color: var(--color-sidebar-ring); + --tw-outline-style: none; + outline-style: none; + @media (forced-colors: active) { + outline: 2px solid transparent; + outline-offset: 2px; + } + transition-property: margin,opacity; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-duration: 200ms; + transition-duration: 200ms; + --tw-ease: linear; + transition-timing-function: linear; + &:focus-visible { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + &>svg { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + } + &>svg { + flex-shrink: 0; + } + } + ul { + display: flex; + width: 100%; + min-width: calc(var(--spacing) * 0); + flex-direction: column; + gap: calc(var(--spacing) * 1); + li { + position: relative; + > a, > details > summary { + display: flex; + width: 100%; + align-items: center; + gap: calc(var(--spacing) * 2); + overflow: hidden; + border-radius: var(--radius-md); + padding: calc(var(--spacing) * 2); + text-align: left; + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + --tw-ring-color: var(--color-sidebar-ring); + --tw-outline-style: none; + outline-style: none; + @media (forced-colors: active) { + outline: 2px solid transparent; + outline-offset: 2px; + } + transition-property: width,height,padding; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + &:hover { + @media (hover: hover) { + background-color: var(--color-sidebar-accent); + } + } + &:hover { + @media (hover: hover) { + color: var(--color-sidebar-accent-foreground); + } + } + &:focus-visible { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + &:active { + background-color: var(--color-sidebar-accent); + } + &:active { + color: var(--color-sidebar-accent-foreground); + } + &:disabled { + pointer-events: none; + } + &:disabled { + opacity: 50%; + } + &[aria-disabled="true"] { + pointer-events: none; + } + &[aria-disabled="true"] { + opacity: 50%; + } + &>span:last-child { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + &>svg { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + } + &>svg { + flex-shrink: 0; + } + &[aria-current=page] { + background-color: var(--color-sidebar-accent); + } + &[aria-current=page] { + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + } + &[aria-current=page] { + color: var(--color-sidebar-accent-foreground); + } + &:not([data-variant]), &[data-variant=default] { + &:hover { + @media (hover: hover) { + background-color: var(--color-sidebar-accent); + } + } + &:hover { + @media (hover: hover) { + color: var(--color-sidebar-accent-foreground); + } + } + } + &[data-variant=outline] { + background-color: var(--color-background); + --tw-shadow: 0 0 0 1px var(--tw-shadow-color, hsl(var(--sidebar-border))); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + &:hover { + @media (hover: hover) { + background-color: var(--color-sidebar-accent); + } + } + &:hover { + @media (hover: hover) { + color: var(--color-sidebar-accent-foreground); + } + } + &:hover { + @media (hover: hover) { + --tw-shadow: 0 0 0 1px var(--tw-shadow-color, hsl(var(--sidebar-accent))); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + } + &:not([data-size]), &[data-size=default] { + height: calc(var(--spacing) * 8); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + } + &[data-size=sm] { + height: calc(var(--spacing) * 7); + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + } + &[data-size=lg] { + height: calc(var(--spacing) * 12); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + &:is(:where(.group)[data-collapsible="icon"] *) { + padding: calc(var(--spacing) * 0) !important; + } + } + } + > details { + &:not([open]) { + > summary { + &::after { + rotate: calc(90deg * -1); + } + } + } + > summary { + &::after { + margin-left: auto; + display: block; + width: calc(var(--spacing) * 3.5); + height: calc(var(--spacing) * 3.5); + background-color: var(--color-primary); + transition-property: transform, translate, scale, rotate; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-ease: linear; + transition-timing-function: linear; + --tw-content: ''; + content: var(--tw-content); + mask-image: var(--chevron-down-icon); + mask-size: 1rem; + mask-position: center; + mask-repeat: no-repeat; + } + } + &::details-content { + padding-inline: calc(var(--spacing) * 3.5); + } + } + } + ul { + display: flex; + width: 100%; + min-width: calc(var(--spacing) * 0); + --tw-translate-x: 1px; + translate: var(--tw-translate-x) var(--tw-translate-y); + flex-direction: column; + gap: calc(var(--spacing) * 1); + border-left-style: var(--tw-border-style); + border-left-width: 1px; + border-color: var(--color-sidebar-border); + padding-inline: calc(var(--spacing) * 2.5); + padding-block: calc(var(--spacing) * 0.5); + } + } + } + } +} +@layer components { + :is(.form, .field) input[type='checkbox'][role='switch'], .input[type='checkbox'][role='switch'] { + display: inline-flex; + height: 1.15rem; + width: calc(var(--spacing) * 8); + flex-shrink: 0; + appearance: none; + align-items: center; + border-radius: calc(infinity * 1px); + border-style: var(--tw-border-style); + border-width: 1px; + border-color: transparent; + --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-outline-style: none; + outline-style: none; + &:focus-visible { + border-color: var(--color-ring); + } + &:focus-visible { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + &:focus-visible { + --tw-ring-color: var(--color-ring); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); + } + } + &:disabled { + cursor: not-allowed; + } + &:disabled { + opacity: 50%; + } + background-color: var(--color-input); + &:checked { + background-color: var(--color-primary); + } + &:is(.dark *) { + background-color: var(--color-input); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-input) 80%, transparent); + } + } + &:is(.dark *) { + &:checked { + background-color: var(--color-primary); + } + } + &::before { + content: var(--tw-content); + pointer-events: none; + } + &::before { + content: var(--tw-content); + display: block; + } + &::before { + content: var(--tw-content); + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + } + &::before { + content: var(--tw-content); + border-radius: calc(infinity * 1px); + } + &::before { + content: var(--tw-content); + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + &::before { + content: var(--tw-content); + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + &::before { + content: var(--tw-content); + --tw-content: ''; + content: var(--tw-content); + } + &::before { + content: var(--tw-content); + background-color: var(--color-background); + } + &:is(.dark *) { + &::before { + content: var(--tw-content); + background-color: var(--color-foreground); + } + } + &:checked { + &::before { + content: var(--tw-content); + margin-inline-start: calc(var(--spacing) * 3.5); + } + } + &:is(.dark *) { + &:checked { + &::before { + content: var(--tw-content); + background-color: var(--color-primary-foreground); + } + } + } + } +} +@layer components { + .table { + width: 100%; + caption-side: bottom; + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + thead { + & tr { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 1px; + } + } + tbody { + & tr:last-child { + border-style: var(--tw-border-style); + border-width: 0px; + } + } + tfoot { + border-top-style: var(--tw-border-style); + border-top-width: 1px; + background-color: var(--color-muted); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-muted) 50%, transparent); + } + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + &>tr { + &:last-child { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 0px; + } + } + } + tr { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 1px; + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + &:hover { + @media (hover: hover) { + background-color: var(--color-muted); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-muted) 50%, transparent); + } + } + } + } + th { + height: calc(var(--spacing) * 10); + padding-inline: calc(var(--spacing) * 2); + text-align: left; + vertical-align: middle; + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + white-space: nowrap; + color: var(--color-foreground); + &:has([role=checkbox]) { + padding-right: calc(var(--spacing) * 0); + } + &>[role=checkbox] { + --tw-translate-y: 2px; + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + td { + padding: calc(var(--spacing) * 2); + vertical-align: middle; + white-space: nowrap; + &:has([role=checkbox]) { + padding-right: calc(var(--spacing) * 0); + } + &>[role=checkbox] { + --tw-translate-y: 2px; + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + caption { + margin-top: calc(var(--spacing) * 4); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + color: var(--color-muted-foreground); + } + } +} +@layer components { + .tabs { + display: flex; + flex-direction: column; + gap: calc(var(--spacing) * 2); + [role='tablist'] { + display: inline-flex; + height: calc(var(--spacing) * 9); + width: fit-content; + align-items: center; + justify-content: center; + border-radius: var(--radius-lg); + background-color: var(--color-muted); + padding: 3px; + color: var(--color-muted-foreground); + [role='tab'] { + display: inline-flex; + height: calc(100% - 1px); + flex: 1; + align-items: center; + justify-content: center; + gap: calc(var(--spacing) * 1.5); + border-radius: var(--radius-md); + border-style: var(--tw-border-style); + border-width: 1px; + border-color: transparent; + padding-inline: calc(var(--spacing) * 2); + padding-block: calc(var(--spacing) * 1); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + white-space: nowrap; + color: var(--color-foreground); + transition-property: color,box-shadow; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + &:focus-visible { + border-color: var(--color-ring); + } + &:focus-visible { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + &:focus-visible { + --tw-ring-color: var(--color-ring); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); + } + } + &:focus-visible { + outline-style: var(--tw-outline-style); + outline-width: 1px; + } + &:focus-visible { + outline-color: var(--color-ring); + } + &:disabled { + pointer-events: none; + } + &:disabled { + opacity: 50%; + } + &:is(.dark *) { + color: var(--color-muted-foreground); + } + & svg { + pointer-events: none; + } + & svg { + flex-shrink: 0; + } + & svg:not([class*='size-']) { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + } + &[aria-selected='true'] { + background-color: var(--color-background); + --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + &:is(.dark *) { + border-color: var(--color-input); + } + &:is(.dark *) { + background-color: var(--color-input); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-input) 30%, transparent); + } + } + &:is(.dark *) { + color: var(--color-foreground); + } + } + } + } + [role='tabpanel'] { + flex: 1; + --tw-outline-style: none; + outline-style: none; + } + } +} +@layer components { + :is(.form, .field) textarea, .textarea { + display: flex; + field-sizing: content; + min-height: calc(var(--spacing) * 16); + width: 100%; + border-radius: var(--radius-md); + border-style: var(--tw-border-style); + border-width: 1px; + border-color: var(--color-input); + background-color: transparent; + padding-inline: calc(var(--spacing) * 3); + padding-block: calc(var(--spacing) * 2); + font-size: var(--text-base); + line-height: var(--tw-leading, var(--text-base--line-height)); + --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + transition-property: color,box-shadow; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-outline-style: none; + outline-style: none; + &::placeholder { + color: var(--color-muted-foreground); + } + &:focus-visible { + border-color: var(--color-ring); + } + &:focus-visible { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + &:focus-visible { + --tw-ring-color: var(--color-ring); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent); + } + } + &:disabled { + cursor: not-allowed; + } + &:disabled { + opacity: 50%; + } + &[aria-invalid="true"] { + border-color: var(--color-destructive); + } + &[aria-invalid="true"] { + --tw-ring-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-destructive) 20%, transparent); + } + } + @media (width >= 48rem) { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + } + &:is(.dark *) { + background-color: var(--color-input); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-input) 30%, transparent); + } + } + &:is(.dark *) { + &[aria-invalid="true"] { + --tw-ring-color: var(--color-destructive); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-destructive) 40%, transparent); + } + } + } + } +} +@layer components { + .toaster { + pointer-events: none; + position: fixed; + bottom: calc(var(--spacing) * 0); + z-index: 50; + display: flex; + width: 100%; + flex-direction: column-reverse; + padding: calc(var(--spacing) * 4); + @media (width >= 40rem) { + max-width: calc(var(--spacing) * 90); + } + &:not([data-align]), &[data-align='end'] { + right: calc(var(--spacing) * 0); + } + &[data-align='start'] { + left: calc(var(--spacing) * 0); + } + &[data-align='center'] { + left: calc(1/2 * 100%); + --tw-translate-x: calc(calc(1/2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + .toast { + pointer-events: auto; + margin-top: calc(var(--spacing) * 4); + display: grid; + width: 100%; + animation: toast-up 0.3s ease-in-out; + grid-template-rows: 1fr; + transition-property: grid-template-rows,opacity,margin; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-duration: 300ms; + transition-duration: 300ms; + --tw-ease: var(--ease-in-out); + transition-timing-function: var(--ease-in-out); + .toast-content { + display: flex; + align-items: center; + gap: calc(var(--spacing) * 2.5); + overflow: hidden; + border-radius: var(--radius-lg); + border-style: var(--tw-border-style); + border-width: 1px; + background-color: var(--color-popover); + padding: calc(var(--spacing) * 3); + font-size: 13px; + color: var(--color-popover-foreground); + --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + svg { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + flex-shrink: 0; + } + section { + h2 { + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + --tw-tracking: var(--tracking-tight); + letter-spacing: var(--tracking-tight); + } + p { + word-break: break-all; + color: var(--color-muted-foreground); + } + } + footer { + margin-left: auto; + display: flex; + flex-direction: column; + gap: calc(var(--spacing) * 2); + [data-toast-action], [data-toast-cancel] { + height: calc(var(--spacing) * 6); + padding-inline: calc(var(--spacing) * 2.5); + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + } + } + } + &[aria-hidden='true'] { + margin: calc(var(--spacing) * 0); + grid-template-rows: 0fr; + overflow: hidden; + border-style: var(--tw-border-style); + border-width: 0px; + padding: calc(var(--spacing) * 0); + opacity: 0%; + .toast-content { + border-style: var(--tw-border-style); + border-width: 0px; + } + } + } + } +} +@keyframes toast-up { + from { + opacity: 0; + transform: translateY(100%); + } +} +@layer components { + [data-tooltip] { + position: relative; + &:before { + pointer-events: none; + visibility: hidden; + position: absolute; + z-index: 60; + width: fit-content; + max-width: var(--container-xs); + --tw-scale-x: 95%; + --tw-scale-y: 95%; + --tw-scale-z: 95%; + scale: var(--tw-scale-x) var(--tw-scale-y); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + border-radius: var(--radius-md); + background-color: var(--color-primary); + padding-inline: calc(var(--spacing) * 3); + padding-block: calc(var(--spacing) * 1.5); + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + color: var(--color-primary-foreground); + opacity: 0%; + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-content: attr(data-tooltip); + content: var(--tw-content); + } + &:hover:before { + visibility: visible; + --tw-scale-x: 100%; + --tw-scale-y: 100%; + --tw-scale-z: 100%; + scale: var(--tw-scale-x) var(--tw-scale-y); + opacity: 100%; + } + &:focus-visible:not(:hover):before { + display: none; + } + &:not([data-side]), &[data-side='top'] { + &::before { + content: var(--tw-content); + bottom: 100%; + } + &::before { + content: var(--tw-content); + margin-bottom: calc(var(--spacing) * 1.5); + } + &::before { + content: var(--tw-content); + --tw-translate-y: calc(var(--spacing) * 2); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + &:hover { + @media (hover: hover) { + &::before { + content: var(--tw-content); + --tw-translate-y: calc(var(--spacing) * 0); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + } + } + &[data-side='bottom'] { + &::before { + content: var(--tw-content); + top: 100%; + } + &::before { + content: var(--tw-content); + margin-top: calc(var(--spacing) * 1.5); + } + &::before { + content: var(--tw-content); + --tw-translate-y: calc(var(--spacing) * -2); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + &:hover { + @media (hover: hover) { + &::before { + content: var(--tw-content); + --tw-translate-y: calc(var(--spacing) * 0); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + } + } + &:not([data-side]), &[data-side='top'], &[data-side='bottom'] { + &[data-align='start'] { + &::before { + content: var(--tw-content); + left: calc(var(--spacing) * 0); + } + } + &[data-align='end'] { + &::before { + content: var(--tw-content); + right: calc(var(--spacing) * 0); + } + } + &:not([data-align]), &[data-align='center'] { + &::before { + content: var(--tw-content); + left: calc(1/2 * 100%); + } + &::before { + content: var(--tw-content); + --tw-translate-x: calc(calc(1/2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + } + &[data-side='left'] { + &::before { + content: var(--tw-content); + right: 100%; + } + &::before { + content: var(--tw-content); + margin-right: calc(var(--spacing) * 1.5); + } + &::before { + content: var(--tw-content); + --tw-translate-x: calc(var(--spacing) * 2); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + &:hover { + @media (hover: hover) { + &::before { + content: var(--tw-content); + --tw-translate-x: calc(var(--spacing) * 0); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + } + } + &[data-side='right'] { + &::before { + content: var(--tw-content); + left: 100%; + } + &::before { + content: var(--tw-content); + margin-left: calc(var(--spacing) * 1.5); + } + &::before { + content: var(--tw-content); + --tw-translate-x: calc(var(--spacing) * -2); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + &:hover { + @media (hover: hover) { + &::before { + content: var(--tw-content); + --tw-translate-x: calc(var(--spacing) * 0); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + } + } + &[data-side='left'], &[data-side='right'] { + &[data-align='start'] { + &::before { + content: var(--tw-content); + top: calc(var(--spacing) * 0); + } + } + &[data-align='end'] { + &::before { + content: var(--tw-content); + bottom: calc(var(--spacing) * 0); + } + } + &:not([data-align]), &[data-align='center'] { + &::before { + content: var(--tw-content); + top: calc(1/2 * 100%); + } + &::before { + content: var(--tw-content); + --tw-translate-y: calc(calc(1/2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + } + } +} +.htmx-indicator { + visibility: hidden; + opacity: 0%; + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + transition-behavior: allow-discrete; +} +.htmx-indicator:not(.htmx-request) { + display: none; +} +.htmx-request, .htmx-request.htmx-indicator { + visibility: visible; + opacity: 100%; +} +.content { + > h2 { + margin-top: calc(var(--spacing) * 12); + margin-bottom: calc(var(--spacing) * 6); + scroll-margin: calc(var(--spacing) * 22); + font-size: var(--text-2xl); + line-height: var(--tw-leading, var(--text-2xl--line-height)); + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + --tw-tracking: var(--tracking-tight); + letter-spacing: var(--tracking-tight); + &:first-child { + margin-top: calc(var(--spacing) * 0); + } + @media (width >= 64rem) { + margin-top: calc(var(--spacing) * 20); + } + } + > h3 { + margin-top: calc(var(--spacing) * 8); + margin-bottom: calc(var(--spacing) * 6); + scroll-margin: calc(var(--spacing) * 22); + font-size: var(--text-xl); + line-height: var(--tw-leading, var(--text-xl--line-height)); + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + --tw-tracking: var(--tracking-tight); + letter-spacing: var(--tracking-tight); + } + > h4 { + margin-block: calc(var(--spacing) * 6); + scroll-margin: calc(var(--spacing) * 22); + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + --tw-tracking: var(--tracking-tight); + letter-spacing: var(--tracking-tight); + } + .prose { + margin-block: calc(var(--spacing) * 6); + a { + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + text-decoration-line: underline; + text-underline-offset: 4px; + } + code:not(pre > code) { + position: relative; + border-radius: var(--radius-md); + background-color: var(--color-muted); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-muted) 50%, transparent); + } + padding-inline: 0.3rem; + padding-block: 0.2rem; + font-family: var(--font-mono); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + } + blockquote { + border-left-style: var(--tw-border-style); + border-left-width: 4px; + border-color: var(--color-border); + padding-left: calc(var(--spacing) * 4); + } + ol { + margin-left: calc(var(--spacing) * 6); + list-style-type: decimal; + } + ul { + margin-left: calc(var(--spacing) * 6); + list-style-type: disc; + } + ol, ul { + li { + margin-top: calc(var(--spacing) * 2); + } + } + dl { + margin-block: calc(var(--spacing) * 6); + border-bottom-style: var(--tw-border-style); + border-bottom-width: 1px; + padding-bottom: calc(var(--spacing) * 3); + dt { + margin-top: calc(var(--spacing) * 3); + border-top-style: var(--tw-border-style); + border-top-width: 1px; + padding-top: calc(var(--spacing) * 3); + &:first-child { + margin-top: calc(var(--spacing) * 0); + } + } + dd { + margin-top: calc(var(--spacing) * 2); + } + dl { + margin-block: calc(var(--spacing) * 0); + margin-top: calc(var(--spacing) * 4); + border-bottom-style: var(--tw-border-style); + border-bottom-width: 0px; + padding-bottom: calc(var(--spacing) * 0); + padding-left: calc(var(--spacing) * 8); + } + } + b, strong { + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + } + > p, > blockquote, > ul, > ol, > dl, > table, > pre, > p { + margin-block: calc(var(--spacing) * 6); + } + > *:first-child { + margin-top: calc(var(--spacing) * 0) !important; + } + > *:last-child { + margin-bottom: calc(var(--spacing) * 0) !important; + } + } + .step { + counter-increment: step; + &:before { + position: absolute; + margin-right: calc(var(--spacing) * 2); + display: inline-flex; + height: calc(var(--spacing) * 8); + width: calc(var(--spacing) * 8); + align-items: center; + justify-content: center; + border-radius: calc(infinity * 1px); + border-style: var(--tw-border-style); + border-width: 4px; + border-color: var(--color-background); + background-color: var(--color-muted); + text-align: center; + text-indent: -1px; + font-family: var(--font-mono); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + @media (width >= 48rem) { + height: calc(var(--spacing) * 9); + } + @media (width >= 48rem) { + width: calc(var(--spacing) * 9); + } + @media (width >= 48rem) { + margin-top: -4px; + } + @media (width >= 48rem) { + margin-left: -50px; + } + content: counter(step); + } + > h3 { + display: flex; + min-height: calc(var(--spacing) * 8); + align-items: center; + @media (width < 48rem) { + margin-left: calc(var(--spacing) * 10); + } + } + } +} +:root { + --hljs-bg: #fff; + --hljs-color: #24292e; + --hljs-keyword: #d73a49; + --hljs-title: #6f42c1; + --hljs-literal: #005cc5; + --hljs-string: #032f62; + --hljs-symbol: #e36209; + --hljs-comment: #6a737d; + --hljs-tag: #22863a; + --hljs-section: #005cc5; + --hljs-bullet: #735c0f; + --hljs-addition-color: #22863a; + --hljs-addition-bg: #f0fff4; + --hljs-deletion-color: #b31d28; + --hljs-deletion-bg: #ffeef0; +} +html.dark { + --hljs-bg: #0d1117; + --hljs-color: #c9d1d9; + --hljs-keyword: #ff7b72; + --hljs-title: #d2a8ff; + --hljs-literal: #79c0ff; + --hljs-string: #a5d6ff; + --hljs-symbol: #ffa657; + --hljs-comment: #8b949e; + --hljs-tag: #7ee787; + --hljs-section: #1f6feb; + --hljs-bullet: #f2cc60; + --hljs-addition-color: #aff5b4; + --hljs-addition-bg: #033a16; + --hljs-deletion-color: #ffdcd7; + --hljs-deletion-bg: #67060c; +} +pre code.hljs { + display: block; + overflow-x: auto; + padding: 1em; +} +code.hljs { + padding: 3px 5px; +} +.hljs { + color: var(--hljs-color); + background: var(--hljs-bg); +} +.hljs-doctag, .hljs-keyword, .hljs-meta .hljs-keyword, .hljs-template-tag, .hljs-template-variable, .hljs-type, .hljs-variable.language_ { + color: var(--hljs-keyword); +} +.hljs-title, .hljs-title.class_, .hljs-title.class_.inherited__, .hljs-title.function_ { + color: var(--hljs-title); +} +.hljs-attr, .hljs-attribute, .hljs-literal, .hljs-meta, .hljs-number, .hljs-operator, .hljs-selector-attr, .hljs-selector-class, .hljs-selector-id, .hljs-variable { + color: var(--hljs-literal); +} +.hljs-meta .hljs-string, .hljs-regexp, .hljs-string { + color: var(--hljs-string); +} +.hljs-built_in, .hljs-symbol { + color: var(--hljs-symbol); +} +.hljs-code, .hljs-comment, .hljs-formula { + color: var(--hljs-comment); +} +.hljs-name, .hljs-quote, .hljs-selector-pseudo, .hljs-selector-tag { + color: var(--hljs-tag); +} +.hljs-subst { + color: var(--hljs-color); +} +.hljs-section { + color: var(--hljs-section); + font-weight: 700; +} +.hljs-bullet { + color: var(--hljs-bullet); +} +.hljs-emphasis { + font-style: italic; +} +.hljs-strong { + font-weight: 700; +} +.hljs-addition { + color: var(--hljs-addition-color); + background-color: var(--hljs-addition-bg); +} +.hljs-deletion { + color: var(--hljs-deletion-color); + background-color: var(--hljs-deletion-bg); +} +.theme-claude { + &:root { + --background: oklch(0.98 0.01 95.10); + --foreground: oklch(0.34 0.03 95.72); + --card: oklch(0.98 0.01 95.10); + --card-foreground: oklch(0.19 0.00 106.59); + --popover: oklch(1.00 0 0); + --popover-foreground: oklch(0.27 0.02 98.94); + --primary: oklch(0.62 0.14 39.04); + --primary-foreground: oklch(1.00 0 0); + --secondary: oklch(0.92 0.01 92.99); + --secondary-foreground: oklch(0.43 0.02 98.60); + --muted: oklch(0.93 0.02 90.24); + --muted-foreground: oklch(0.61 0.01 97.42); + --accent: oklch(0.92 0.01 92.99); + --accent-foreground: oklch(0.27 0.02 98.94); + --destructive: oklch(0.19 0.00 106.59); + --destructive-foreground: oklch(1.00 0 0); + --border: oklch(0.88 0.01 97.36); + --input: oklch(0.76 0.02 98.35); + --ring: oklch(0.59 0.17 253.06); + --chart-1: oklch(0.56 0.13 43.00); + --chart-2: oklch(0.69 0.16 290.41); + --chart-3: oklch(0.88 0.03 93.13); + --chart-4: oklch(0.88 0.04 298.18); + --chart-5: oklch(0.56 0.13 42.06); + --sidebar: oklch(0.97 0.01 98.88); + --sidebar-foreground: oklch(0.36 0.01 106.65); + --sidebar-primary: oklch(0.62 0.14 39.04); + --sidebar-primary-foreground: oklch(0.99 0 0); + --sidebar-accent: oklch(0.92 0.01 92.99); + --sidebar-accent-foreground: oklch(0.33 0 0); + --sidebar-border: oklch(0.94 0 0); + --sidebar-ring: oklch(0.77 0 0); + --font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; + --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; + --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --radius: 0.5rem; + --shadow-2xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05); + --shadow-xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05); + --shadow-sm: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 1px 2px -1px hsl(0 0% 0% / 0.10); + --shadow: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 1px 2px -1px hsl(0 0% 0% / 0.10); + --shadow-md: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 2px 4px -1px hsl(0 0% 0% / 0.10); + --shadow-lg: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 4px 6px -1px hsl(0 0% 0% / 0.10); + --shadow-xl: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 8px 10px -1px hsl(0 0% 0% / 0.10); + --shadow-2xl: 0 1px 3px 0px hsl(0 0% 0% / 0.25); + } + &.dark { + --background: oklch(0.27 0.00 106.64); + --foreground: oklch(0.81 0.01 93.01); + --card: oklch(0.27 0.00 106.64); + --card-foreground: oklch(0.98 0.01 95.10); + --popover: oklch(0.31 0.00 106.60); + --popover-foreground: oklch(0.92 0.00 106.48); + --primary: oklch(0.67 0.13 38.76); + --primary-foreground: oklch(1.00 0 0); + --secondary: oklch(0.98 0.01 95.10); + --secondary-foreground: oklch(0.31 0.00 106.60); + --muted: oklch(0.22 0.00 106.71); + --muted-foreground: oklch(0.77 0.02 99.07); + --accent: oklch(0.21 0.01 95.42); + --accent-foreground: oklch(0.97 0.01 98.88); + --destructive: oklch(0.64 0.21 25.33); + --destructive-foreground: oklch(1.00 0 0); + --border: oklch(0.36 0.01 106.89); + --input: oklch(0.43 0.01 100.22); + --ring: oklch(0.59 0.17 253.06); + --chart-1: oklch(0.56 0.13 43.00); + --chart-2: oklch(0.69 0.16 290.41); + --chart-3: oklch(0.21 0.01 95.42); + --chart-4: oklch(0.31 0.05 289.32); + --chart-5: oklch(0.56 0.13 42.06); + --sidebar: oklch(0.24 0.00 67.71); + --sidebar-foreground: oklch(0.81 0.01 93.01); + --sidebar-primary: oklch(0.33 0 0); + --sidebar-primary-foreground: oklch(0.99 0 0); + --sidebar-accent: oklch(0.17 0.00 106.62); + --sidebar-accent-foreground: oklch(0.81 0.01 93.01); + --sidebar-border: oklch(0.94 0 0); + --sidebar-ring: oklch(0.77 0 0); + --font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; + --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; + --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --radius: 0.5rem; + --shadow-2xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05); + --shadow-xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05); + --shadow-sm: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 1px 2px -1px hsl(0 0% 0% / 0.10); + --shadow: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 1px 2px -1px hsl(0 0% 0% / 0.10); + --shadow-md: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 2px 4px -1px hsl(0 0% 0% / 0.10); + --shadow-lg: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 4px 6px -1px hsl(0 0% 0% / 0.10); + --shadow-xl: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 8px 10px -1px hsl(0 0% 0% / 0.10); + --shadow-2xl: 0 1px 3px 0px hsl(0 0% 0% / 0.25); + } +} +.theme-doom-64 { + &:root { + --background: oklch(0.85 0 0); + --foreground: oklch(0.24 0 0); + --card: oklch(0.76 0 0); + --card-foreground: oklch(0.24 0 0); + --popover: oklch(0.76 0 0); + --popover-foreground: oklch(0.24 0 0); + --primary: oklch(0.50 0.19 27.48); + --primary-foreground: oklch(1.00 0 0); + --secondary: oklch(0.50 0.09 126.19); + --secondary-foreground: oklch(1.00 0 0); + --muted: oklch(0.78 0 0); + --muted-foreground: oklch(0.41 0 0); + --accent: oklch(0.59 0.10 245.74); + --accent-foreground: oklch(1.00 0 0); + --destructive: oklch(0.71 0.20 46.46); + --destructive-foreground: oklch(0 0 0); + --border: oklch(0.43 0 0); + --input: oklch(0.43 0 0); + --ring: oklch(0.50 0.19 27.48); + --chart-1: oklch(0.50 0.19 27.48); + --chart-2: oklch(0.50 0.09 126.19); + --chart-3: oklch(0.59 0.10 245.74); + --chart-4: oklch(0.71 0.20 46.46); + --chart-5: oklch(0.57 0.04 40.43); + --sidebar: oklch(0.76 0 0); + --sidebar-foreground: oklch(0.24 0 0); + --sidebar-primary: oklch(0.50 0.19 27.48); + --sidebar-primary-foreground: oklch(1.00 0 0); + --sidebar-accent: oklch(0.59 0.10 245.74); + --sidebar-accent-foreground: oklch(1.00 0 0); + --sidebar-border: oklch(0.43 0 0); + --sidebar-ring: oklch(0.50 0.19 27.48); + --font-sans: "Oxanium", sans-serif; + --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; + --font-mono: "Source Code Pro", monospace; + --radius: 0px; + --shadow-2xs: 0px 2px 4px 0px hsl(0 0% 0% / 0.20); + --shadow-xs: 0px 2px 4px 0px hsl(0 0% 0% / 0.20); + --shadow-sm: 0px 2px 4px 0px hsl(0 0% 0% / 0.40), 0px 1px 2px -1px hsl(0 0% 0% / 0.40); + --shadow: 0px 2px 4px 0px hsl(0 0% 0% / 0.40), 0px 1px 2px -1px hsl(0 0% 0% / 0.40); + --shadow-md: 0px 2px 4px 0px hsl(0 0% 0% / 0.40), 0px 2px 4px -1px hsl(0 0% 0% / 0.40); + --shadow-lg: 0px 2px 4px 0px hsl(0 0% 0% / 0.40), 0px 4px 6px -1px hsl(0 0% 0% / 0.40); + --shadow-xl: 0px 2px 4px 0px hsl(0 0% 0% / 0.40), 0px 8px 10px -1px hsl(0 0% 0% / 0.40); + --shadow-2xl: 0px 2px 4px 0px hsl(0 0% 0% / 1.00); + } + &.dark { + --background: oklch(0.22 0 0); + --foreground: oklch(0.91 0 0); + --card: oklch(0.29 0 0); + --card-foreground: oklch(0.91 0 0); + --popover: oklch(0.29 0 0); + --popover-foreground: oklch(0.91 0 0); + --primary: oklch(0.61 0.21 27.03); + --primary-foreground: oklch(1.00 0 0); + --secondary: oklch(0.64 0.15 133.01); + --secondary-foreground: oklch(0 0 0); + --muted: oklch(0.26 0 0); + --muted-foreground: oklch(0.71 0 0); + --accent: oklch(0.75 0.12 244.75); + --accent-foreground: oklch(0 0 0); + --destructive: oklch(0.78 0.17 68.09); + --destructive-foreground: oklch(0 0 0); + --border: oklch(0.41 0 0); + --input: oklch(0.41 0 0); + --ring: oklch(0.61 0.21 27.03); + --chart-1: oklch(0.61 0.21 27.03); + --chart-2: oklch(0.64 0.15 133.01); + --chart-3: oklch(0.75 0.12 244.75); + --chart-4: oklch(0.78 0.17 68.09); + --chart-5: oklch(0.65 0.03 40.80); + --sidebar: oklch(0.19 0 0); + --sidebar-foreground: oklch(0.91 0 0); + --sidebar-primary: oklch(0.61 0.21 27.03); + --sidebar-primary-foreground: oklch(1.00 0 0); + --sidebar-accent: oklch(0.75 0.12 244.75); + --sidebar-accent-foreground: oklch(0 0 0); + --sidebar-border: oklch(0.41 0 0); + --sidebar-ring: oklch(0.61 0.21 27.03); + --font-sans: "Oxanium", sans-serif; + --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; + --font-mono: "Source Code Pro", monospace; + --radius: 0px; + --shadow-2xs: 0px 2px 5px 0px hsl(0 0% 0% / 0.30); + --shadow-xs: 0px 2px 5px 0px hsl(0 0% 0% / 0.30); + --shadow-sm: 0px 2px 5px 0px hsl(0 0% 0% / 0.60), 0px 1px 2px -1px hsl(0 0% 0% / 0.60); + --shadow: 0px 2px 5px 0px hsl(0 0% 0% / 0.60), 0px 1px 2px -1px hsl(0 0% 0% / 0.60); + --shadow-md: 0px 2px 5px 0px hsl(0 0% 0% / 0.60), 0px 2px 4px -1px hsl(0 0% 0% / 0.60); + --shadow-lg: 0px 2px 5px 0px hsl(0 0% 0% / 0.60), 0px 4px 6px -1px hsl(0 0% 0% / 0.60); + --shadow-xl: 0px 2px 5px 0px hsl(0 0% 0% / 0.60), 0px 8px 10px -1px hsl(0 0% 0% / 0.60); + --shadow-2xl: 0px 2px 5px 0px hsl(0 0% 0% / 1.50); + } +} +.theme-supabase { + &:root { + --background: oklch(0.99 0 0); + --foreground: oklch(0.20 0 0); + --card: oklch(0.99 0 0); + --card-foreground: oklch(0.20 0 0); + --popover: oklch(0.99 0 0); + --popover-foreground: oklch(0.44 0 0); + --primary: oklch(0.83 0.13 160.91); + --primary-foreground: oklch(0.26 0.01 166.46); + --secondary: oklch(0.99 0 0); + --secondary-foreground: oklch(0.20 0 0); + --muted: oklch(0.95 0 0); + --muted-foreground: oklch(0.24 0 0); + --accent: oklch(0.95 0 0); + --accent-foreground: oklch(0.24 0 0); + --destructive: oklch(0.55 0.19 32.73); + --destructive-foreground: oklch(0.99 0.00 17.21); + --border: oklch(0.90 0 0); + --input: oklch(0.90 0 0); + --ring: oklch(0.83 0.13 160.91); + --chart-1: oklch(0.83 0.13 160.91); + --chart-2: oklch(0.62 0.19 259.81); + --chart-3: oklch(0.61 0.22 292.72); + --chart-4: oklch(0.77 0.16 70.08); + --chart-5: oklch(0.70 0.15 162.48); + --sidebar: oklch(0.99 0 0); + --sidebar-foreground: oklch(0.55 0 0); + --sidebar-primary: oklch(0.83 0.13 160.91); + --sidebar-primary-foreground: oklch(0.26 0.01 166.46); + --sidebar-accent: oklch(0.95 0 0); + --sidebar-accent-foreground: oklch(0.24 0 0); + --sidebar-border: oklch(0.90 0 0); + --sidebar-ring: oklch(0.83 0.13 160.91); + --font-sans: Outfit, sans-serif; + --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; + --font-mono: monospace; + --radius: 0.5rem; + --shadow-2xs: 0px 1px 3px 0px hsl(0 0% 0% / 0.09); + --shadow-xs: 0px 1px 3px 0px hsl(0 0% 0% / 0.09); + --shadow-sm: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 1px 2px -1px hsl(0 0% 0% / 0.17); + --shadow: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 1px 2px -1px hsl(0 0% 0% / 0.17); + --shadow-md: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 2px 4px -1px hsl(0 0% 0% / 0.17); + --shadow-lg: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 4px 6px -1px hsl(0 0% 0% / 0.17); + --shadow-xl: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 8px 10px -1px hsl(0 0% 0% / 0.17); + --shadow-2xl: 0px 1px 3px 0px hsl(0 0% 0% / 0.43); + --tracking-normal: 0.025em; + } + &.dark { + --background: oklch(0.18 0 0); + --foreground: oklch(0.93 0.01 255.51); + --card: oklch(0.20 0 0); + --card-foreground: oklch(0.93 0.01 255.51); + --popover: oklch(0.26 0 0); + --popover-foreground: oklch(0.73 0 0); + --primary: oklch(0.44 0.10 156.76); + --primary-foreground: oklch(0.92 0.01 167.16); + --secondary: oklch(0.26 0 0); + --secondary-foreground: oklch(0.99 0 0); + --muted: oklch(0.24 0 0); + --muted-foreground: oklch(0.71 0 0); + --accent: oklch(0.31 0 0); + --accent-foreground: oklch(0.99 0 0); + --destructive: oklch(0.31 0.09 29.79); + --destructive-foreground: oklch(0.94 0.00 34.31); + --border: oklch(0.28 0 0); + --input: oklch(0.28 0 0); + --ring: oklch(0.80 0.18 151.71); + --chart-1: oklch(0.80 0.18 151.71); + --chart-2: oklch(0.71 0.14 254.62); + --chart-3: oklch(0.71 0.16 293.54); + --chart-4: oklch(0.84 0.16 84.43); + --chart-5: oklch(0.78 0.13 181.91); + --sidebar: oklch(0.18 0 0); + --sidebar-foreground: oklch(0.63 0 0); + --sidebar-primary: oklch(0.44 0.10 156.76); + --sidebar-primary-foreground: oklch(0.92 0.01 167.16); + --sidebar-accent: oklch(0.31 0 0); + --sidebar-accent-foreground: oklch(0.99 0 0); + --sidebar-border: oklch(0.28 0 0); + --sidebar-ring: oklch(0.80 0.18 151.71); + --font-sans: Outfit, sans-serif; + --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; + --font-mono: monospace; + --radius: 0.5rem; + --shadow-2xs: 0px 1px 3px 0px hsl(0 0% 0% / 0.09); + --shadow-xs: 0px 1px 3px 0px hsl(0 0% 0% / 0.09); + --shadow-sm: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 1px 2px -1px hsl(0 0% 0% / 0.17); + --shadow: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 1px 2px -1px hsl(0 0% 0% / 0.17); + --shadow-md: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 2px 4px -1px hsl(0 0% 0% / 0.17); + --shadow-lg: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 4px 6px -1px hsl(0 0% 0% / 0.17); + --shadow-xl: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 8px 10px -1px hsl(0 0% 0% / 0.17); + --shadow-2xl: 0px 1px 3px 0px hsl(0 0% 0% / 0.43); + } + body { + letter-spacing: var(--tracking-normal); + } +} +@property --tw-translate-x { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-translate-y { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-translate-z { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-rotate-x { + syntax: "*"; + inherits: false; +} +@property --tw-rotate-y { + syntax: "*"; + inherits: false; +} +@property --tw-rotate-z { + syntax: "*"; + inherits: false; +} +@property --tw-skew-x { + syntax: "*"; + inherits: false; +} +@property --tw-skew-y { + syntax: "*"; + inherits: false; +} +@property --tw-space-y-reverse { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-space-x-reverse { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-border-style { + syntax: "*"; + inherits: false; + initial-value: solid; +} +@property --tw-leading { + syntax: "*"; + inherits: false; +} +@property --tw-font-weight { + syntax: "*"; + inherits: false; +} +@property --tw-tracking { + syntax: "*"; + inherits: false; +} +@property --tw-ordinal { + syntax: "*"; + inherits: false; +} +@property --tw-slashed-zero { + syntax: "*"; + inherits: false; +} +@property --tw-numeric-figure { + syntax: "*"; + inherits: false; +} +@property --tw-numeric-spacing { + syntax: "*"; + inherits: false; +} +@property --tw-numeric-fraction { + syntax: "*"; + inherits: false; +} +@property --tw-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-shadow-color { + syntax: "*"; + inherits: false; +} +@property --tw-shadow-alpha { + syntax: ""; + inherits: false; + initial-value: 100%; +} +@property --tw-inset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-inset-shadow-color { + syntax: "*"; + inherits: false; +} +@property --tw-inset-shadow-alpha { + syntax: ""; + inherits: false; + initial-value: 100%; +} +@property --tw-ring-color { + syntax: "*"; + inherits: false; +} +@property --tw-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-inset-ring-color { + syntax: "*"; + inherits: false; +} +@property --tw-inset-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-ring-inset { + syntax: "*"; + inherits: false; +} +@property --tw-ring-offset-width { + syntax: ""; + inherits: false; + initial-value: 0px; +} +@property --tw-ring-offset-color { + syntax: "*"; + inherits: false; + initial-value: #fff; +} +@property --tw-ring-offset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-outline-style { + syntax: "*"; + inherits: false; + initial-value: solid; +} +@property --tw-blur { + syntax: "*"; + inherits: false; +} +@property --tw-brightness { + syntax: "*"; + inherits: false; +} +@property --tw-contrast { + syntax: "*"; + inherits: false; +} +@property --tw-grayscale { + syntax: "*"; + inherits: false; +} +@property --tw-hue-rotate { + syntax: "*"; + inherits: false; +} +@property --tw-invert { + syntax: "*"; + inherits: false; +} +@property --tw-opacity { + syntax: "*"; + inherits: false; +} +@property --tw-saturate { + syntax: "*"; + inherits: false; +} +@property --tw-sepia { + syntax: "*"; + inherits: false; +} +@property --tw-drop-shadow { + syntax: "*"; + inherits: false; +} +@property --tw-drop-shadow-color { + syntax: "*"; + inherits: false; +} +@property --tw-drop-shadow-alpha { + syntax: ""; + inherits: false; + initial-value: 100%; +} +@property --tw-drop-shadow-size { + syntax: "*"; + inherits: false; +} +@property --tw-duration { + syntax: "*"; + inherits: false; +} +@property --tw-content { + syntax: "*"; + initial-value: ""; + inherits: false; +} +@property --tw-ease { + syntax: "*"; + inherits: false; +} +@property --tw-scale-x { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-scale-y { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-scale-z { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@keyframes spin { + to { + transform: rotate(360deg); + } +} +@keyframes pulse { + 50% { + opacity: 0.5; + } +} +@layer properties { + @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) { + *, ::before, ::after, ::backdrop { + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-translate-z: 0; + --tw-rotate-x: initial; + --tw-rotate-y: initial; + --tw-rotate-z: initial; + --tw-skew-x: initial; + --tw-skew-y: initial; + --tw-space-y-reverse: 0; + --tw-space-x-reverse: 0; + --tw-border-style: solid; + --tw-leading: initial; + --tw-font-weight: initial; + --tw-tracking: initial; + --tw-ordinal: initial; + --tw-slashed-zero: initial; + --tw-numeric-figure: initial; + --tw-numeric-spacing: initial; + --tw-numeric-fraction: initial; + --tw-shadow: 0 0 #0000; + --tw-shadow-color: initial; + --tw-shadow-alpha: 100%; + --tw-inset-shadow: 0 0 #0000; + --tw-inset-shadow-color: initial; + --tw-inset-shadow-alpha: 100%; + --tw-ring-color: initial; + --tw-ring-shadow: 0 0 #0000; + --tw-inset-ring-color: initial; + --tw-inset-ring-shadow: 0 0 #0000; + --tw-ring-inset: initial; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-offset-shadow: 0 0 #0000; + --tw-outline-style: solid; + --tw-blur: initial; + --tw-brightness: initial; + --tw-contrast: initial; + --tw-grayscale: initial; + --tw-hue-rotate: initial; + --tw-invert: initial; + --tw-opacity: initial; + --tw-saturate: initial; + --tw-sepia: initial; + --tw-drop-shadow: initial; + --tw-drop-shadow-color: initial; + --tw-drop-shadow-alpha: 100%; + --tw-drop-shadow-size: initial; + --tw-duration: initial; + --tw-content: ""; + --tw-ease: initial; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-scale-z: 1; + } + } +} diff --git a/docs/src/components/alert-dialog.njk b/docs/src/components/alert-dialog.njk index 2b0d83c..dde193d 100644 --- a/docs/src/components/alert-dialog.njk +++ b/docs/src/components/alert-dialog.njk @@ -43,7 +43,7 @@ toc:

    The Alert Dialog component is identical to Dialog except for two small differences: we do not display a close button and we do not let the user close the dialog when clicking on the backdrop (no onclick attribute on the <dialog> or the <article> elements).

    -{{ code_block(code_html | prettyHtml, class="") }} +{{ code_block(code_html | prettyHtml) }}

    The component has the following HTML structure:

    diff --git a/docs/src/components/alert.njk b/docs/src/components/alert.njk index 0f1563d..4d6064d 100644 --- a/docs/src/components/alert.njk +++ b/docs/src/components/alert.njk @@ -19,20 +19,48 @@ toc: {% from "macros/code_preview.njk" import code_preview %} {% from "macros/code_block.njk" import code_block %} -{% set code %}
    - {% lucide "circle-check" %} -

    Success! Your changes have been saved

    -
    This is an alert with icon, title and description.
    -
    {% endset %} -{{ code_preview("alert", code) }} +{% set code %} +
    +
    + {% lucide "circle-check" %} +

    Success! Your changes have been saved

    +
    This is an alert with icon, title and description.
    +
    +
    + {% lucide "popcorn" %} +

    This Alert has a title and an icon. No description.

    +
    This is an alert with icon, title and description.
    +
    +
    + {% lucide "circle-check" %} +

    Unable to process your payment.

    +
    +

    Please verify your billing information and try again.

    +
      +
    • Check your card details
    • +
    • Ensure sufficient funds
    • +
    • Verify billing address
    • +
    +
    +
    +
    +{% endset %} +{{ code_preview("alert", code | prettyHtml) }}

    Usage

    -

    You can use one of the two classes: alert or alert-dialog.

    +

    Use the alert or alert-destructive.

    -{{ code_block(code) }} +{% set code_simple %} +
    + {% lucide "circle-check" %} +

    Success! Your changes have been saved

    +
    This is an alert with icon, title and description.
    +
    +{% endset %} +{{ code_block(code_simple | prettyHtml) }}

    The component has the following HTML structure:

    diff --git a/docs/src/components/avatar.njk b/docs/src/components/avatar.njk index 33d80c0..c9c09c8 100644 --- a/docs/src/components/avatar.njk +++ b/docs/src/components/avatar.njk @@ -16,21 +16,23 @@ toc:
    {% set code %} -
    - @hunvreus - @shadcn -
    - @hunvreus - @shadcn - @adamwathan -
    +
    + @hunvreus + @shadcn +
    + @hunvreus + @shadcn + @adamwathan
    +
    {% endset %} -{{ code_preview("avatar", code, "max-w-md") }} +{{ code_preview("avatar", code | prettyHtml, "w-full max-w-md") }}

    Usage

    -

    To make an avatar, simply apply Tailwind utility classes directly to an <img> element:

    +
    +

    Avatars are just <img> elements styled with Tailwind utility classes.

    +
    {% set code_simple %} @hunvreus diff --git a/docs/src/components/badge.njk b/docs/src/components/badge.njk index ef1f67a..5eff349 100644 --- a/docs/src/components/badge.njk +++ b/docs/src/components/badge.njk @@ -25,7 +25,25 @@ toc: {% from "macros/code_preview.njk" import code_preview %} {% from "macros/code_block.njk" import code_block %} -{% set code %}Badge{% endset %} +{% set code %} +
    +
    + Badge + Secondary + Destructive + Outline +
    +
    + + {% lucide "badge-check" %} + Verified + + 8 + 99 + 20+ +
    +
    +{% endset %} {{ code_preview("badge", code) }}

    Usage

    diff --git a/docs/src/components/button-group.njk b/docs/src/components/button-group.njk index abeb32a..289babb 100644 --- a/docs/src/components/button-group.njk +++ b/docs/src/components/button-group.njk @@ -14,28 +14,33 @@ toc: id: example-nested - label: Separator id: example-separator + - label: Input + id: example-input - label: Dropdown Menu id: example-dropdown-menu + - label: Select + id: example-select - label: Popover id: example-popover --- {% from "dropdown-menu.njk" import dropdown_menu %} {% from "popover.njk" import popover %} +{% from "select.njk" import select %} {% from "macros/code_preview.njk" import code_preview %} {% from "macros/code_block.njk" import code_block %} {% set code_default %}
    - +
    - - + +
    - + {% set trigger %} {% lucide "ellipsis" %} {% endset %} @@ -82,8 +87,8 @@ toc: {% set code_simple %}
    - - + +
    {% endset %} {{ code_block(code_simple | prettyHtml, "html") }} @@ -98,10 +103,10 @@ toc: {% set code_orientation %}
    - -
    @@ -114,22 +119,22 @@ toc: {% set code_size %}
    - - - - + + + +
    - - - - + + + +
    - - - - + + + +
    {% endset %} @@ -141,17 +146,17 @@ toc: {% set code_nested %}
    - - - - - + + + + +
    - -
    @@ -168,19 +173,32 @@ toc: {% set code_separator %}
    - +
    - +
    {% endset %} {{ code_preview("button-group-separator", code_separator | prettyHtml) }} + +

    Input

    + +{% set code_input %} +
    + + +
    +{% endset %} + +{{ code_preview("button-group-input", code_input | prettyHtml) }} + +

    Dropdown Menu

    {% set code_dropdown_menu %}
    - + {% set trigger %} {% lucide "chevron-down" %} {% endset %} @@ -224,11 +242,30 @@ toc: {{ code_preview("button-group-dropdown-menu", code_dropdown_menu | prettyHtml) }} +

    Select

    + +{% set code_select %} +
    +
    + {% call select(trigger_attrs={"class": "[&_[data-name]]:hidden"}) %} +
    $ US Dollar
    +
    € Euro
    +
    £ British Pound
    + {% endcall %} + +
    + + +
    +{% endset %} + +{{ code_preview("button-group-select", code_select | prettyHtml) }} +

    Popover

    {% set code_popover %}
    - diff --git a/docs/src/components/input-group.njk b/docs/src/components/input-group.njk index 8e5d17e..590bd9d 100644 --- a/docs/src/components/input-group.njk +++ b/docs/src/components/input-group.njk @@ -300,7 +300,7 @@ toc:
    - {% lucide "loader-circle", { "class": "animate-spin" } %} + {% lucide "loader", { "class": "animate-spin" } %}
    Please wait... @@ -321,7 +321,7 @@ toc: {% lucide "ellipsis" %} {% endset %} {{ dropdown_menu( - main_attrs={"class": "absolute right-1.5 top-1/2 -translate-y-1/2"}, + main_attrs={"class": "absolute right-1.5 top-1/2 -translate-y-1/2 z-10"}, trigger=trigger, trigger_attrs={"class": "btn-sm-icon-ghost text-muted-foreground hover:text-accent-foreground size-6"}, popover_attrs={"data-align": "end", "class": "min-w-32"}, @@ -360,12 +360,12 @@ toc: {% set code_group %}
    - +
    {% lucide "link-2" %}
    -
    .com
    +
    .com
    {% endset %} diff --git a/src/css/basecoat.css b/src/css/basecoat.css index 0292f79..0ed571b 100644 --- a/src/css/basecoat.css +++ b/src/css/basecoat.css @@ -384,7 +384,7 @@ @apply inline-flex w-fit items-stretch isolate; > *:focus-visible, - > :is(.dropdown-menu, .popover) > button:focus-visible { + > :is(.dropdown-menu, .popover, .select) > button:focus-visible { @apply relative z-10; } @@ -394,11 +394,11 @@ &:not([data-orientation='vertical']) { > *:not(:first-child), - > :is(.dropdown-menu, .popover):not(:first-child) > button { + > :is(.dropdown-menu, .popover, .select):not(:first-child) > button { @apply rounded-l-none border-l-0; } > *:not(:last-child), - > :is(.dropdown-menu, .popover):not(:last-child) > button { + > :is(.dropdown-menu, .popover, .select):not(:last-child) > button { @apply rounded-r-none; } } @@ -409,10 +409,12 @@ @apply w-auto h-px; } - > *:not(:first-child) { + > *:not(:first-child), + > :is(.dropdown-menu, .popover, .select):not(:first-child) > button { @apply rounded-t-none border-t-0; } - > *:not(:last-child) { + > *:not(:last-child), + > :is(.dropdown-menu, .popover, .select):not(:last-child) > button { @apply rounded-b-none; } } From b8d8b1741c7c775c3757ae23f2d98df9ea3532cb Mon Sep 17 00:00:00 2001 From: Ronan Berder Date: Tue, 4 Nov 2025 20:41:23 +0800 Subject: [PATCH 10/11] Fixing issues with field --- docs/src/assets/styles.css | 171 +++++++++++----------------------- docs/src/components/field.njk | 91 ++++++++++++------ src/css/basecoat.css | 22 ++++- 3 files changed, 131 insertions(+), 153 deletions(-) diff --git a/docs/src/assets/styles.css b/docs/src/assets/styles.css index 89183ce..498f08d 100644 --- a/docs/src/assets/styles.css +++ b/docs/src/assets/styles.css @@ -5,7 +5,6 @@ :root, :host { --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; --color-red-500: oklch(63.7% 0.237 25.331); @@ -72,13 +71,6 @@ --radius-md: calc(var(--radius) - 2px); --radius-lg: var(--radius); --radius-xl: calc(var(--radius) + 4px); - --shadow-2xs: 0 1px rgb(0 0 0 / 0.05); - --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05); - --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); - --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); - --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); - --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); - --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25); --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); --animate-spin: spin 1s linear infinite; --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; @@ -261,9 +253,6 @@ } } @layer utilities { - .\@container { - container-type: inline-size; - } .pointer-events-none { pointer-events: none; } @@ -302,9 +291,6 @@ .top-0 { top: calc(var(--spacing) * 0); } - .top-1 { - top: calc(var(--spacing) * 1); - } .top-1\/2 { top: calc(1/2 * 100%); } @@ -314,15 +300,9 @@ .top-22 { top: calc(var(--spacing) * 22); } - .right-1 { - right: calc(var(--spacing) * 1); - } .right-1\.5 { right: calc(var(--spacing) * 1.5); } - .right-2 { - right: calc(var(--spacing) * 2); - } .right-2\.5 { right: calc(var(--spacing) * 2.5); } @@ -332,9 +312,6 @@ .bottom-0 { bottom: calc(var(--spacing) * 0); } - .left-1 { - left: calc(var(--spacing) * 1); - } .left-1\.5 { left: calc(var(--spacing) * 1.5); } @@ -416,9 +393,6 @@ .mb-12 { margin-bottom: calc(var(--spacing) * 12); } - .-ml-1 { - margin-left: calc(var(--spacing) * -1); - } .-ml-1\.5 { margin-left: calc(var(--spacing) * -1.5); } @@ -571,30 +545,18 @@ .w-0 { width: calc(var(--spacing) * 0); } - .w-1 { - width: calc(var(--spacing) * 1); - } .w-1\/2 { width: calc(1/2 * 100%); } - .w-2 { - width: calc(var(--spacing) * 2); - } .w-2\/3 { width: calc(2/3 * 100%); } - .w-3 { - width: calc(var(--spacing) * 3); - } .w-3\/4 { width: calc(3/4 * 100%); } .w-4 { width: calc(var(--spacing) * 4); } - .w-7 { - width: calc(var(--spacing) * 7); - } .w-7\.5 { width: calc(var(--spacing) * 7.5); } @@ -697,29 +659,14 @@ .shrink-0 { flex-shrink: 0; } - .border-collapse { - border-collapse: collapse; - } - .-translate-x-1 { - --tw-translate-x: calc(var(--spacing) * -1); - translate: var(--tw-translate-x) var(--tw-translate-y); - } .-translate-x-1\/2 { --tw-translate-x: calc(calc(1/2 * 100%) * -1); translate: var(--tw-translate-x) var(--tw-translate-y); } - .-translate-y-1 { - --tw-translate-y: calc(var(--spacing) * -1); - translate: var(--tw-translate-x) var(--tw-translate-y); - } .-translate-y-1\/2 { --tw-translate-y: calc(calc(1/2 * 100%) * -1); translate: var(--tw-translate-x) var(--tw-translate-y); } - .translate-y-0 { - --tw-translate-y: calc(var(--spacing) * 0); - translate: var(--tw-translate-x) var(--tw-translate-y); - } .translate-y-0\.5 { --tw-translate-y: calc(var(--spacing) * 0.5); translate: var(--tw-translate-x) var(--tw-translate-y); @@ -736,9 +683,6 @@ .cursor-pointer { cursor: pointer; } - .resize { - resize: both; - } .scroll-m-20 { scroll-margin: calc(var(--spacing) * 20); } @@ -793,9 +737,6 @@ .justify-start { justify-content: flex-start; } - .gap-0 { - gap: calc(var(--spacing) * 0); - } .gap-0\.5 { gap: calc(var(--spacing) * 0.5); } @@ -857,9 +798,6 @@ margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse))); } } - .gap-x-1 { - column-gap: calc(var(--spacing) * 1); - } .gap-x-1\.5 { column-gap: calc(var(--spacing) * 1.5); } @@ -1045,9 +983,6 @@ .bg-transparent { background-color: transparent; } - .mask-repeat { - mask-repeat: repeat; - } .object-cover { object-fit: cover; } @@ -1099,9 +1034,6 @@ .px-\[0\.3rem\] { padding-inline: 0.3rem; } - .py-1 { - padding-block: calc(var(--spacing) * 1); - } .py-1\.5 { padding-block: calc(var(--spacing) * 1.5); } @@ -1117,9 +1049,6 @@ .py-\[0\.2rem\] { padding-block: 0.2rem; } - .pt-1 { - padding-top: calc(var(--spacing) * 1); - } .pt-1\.5 { padding-top: calc(var(--spacing) * 1.5); } @@ -1275,9 +1204,6 @@ .text-balance { text-wrap: balance; } - .text-wrap { - text-wrap: wrap; - } .break-words { overflow-wrap: break-word; } @@ -1975,11 +1901,6 @@ } } } - .\[\&_\.text-muted-foreground\]\:hidden { - & .text-muted-foreground { - display: none; - } - } .\[\&_\[data-name\]\]\:hidden { & [data-name] { display: none; @@ -2142,11 +2063,6 @@ padding-top: calc(var(--spacing) * 2); } } - .\[\&_span\]\:hidden { - & span { - display: none; - } - } .\[\&_svg\]\:pointer-events-none { & svg { pointer-events: none; @@ -2201,11 +2117,6 @@ padding-left: calc(var(--spacing) * 4); } } - .\[\&\.text-muted-foreground\]\:hidden { - &.text-muted-foreground { - display: none; - } - } .md\:\*\:\[\.card\]\:basis-1\/4 { @media (width >= 48rem) { :is(& > *) { @@ -2234,16 +2145,6 @@ } } } - .\[\&\>\.text-muted-foreground\]\:hidden { - &>.text-muted-foreground { - display: none; - } - } - .\[\&\>\[data-name\]\]\:hidden { - &>[data-name] { - display: none; - } - } .\[\&\>a\]\:underline { &>a { text-decoration-line: underline; @@ -2259,16 +2160,6 @@ color: var(--color-primary); } } - .\[\&\>em\]\:hidden { - &>em { - display: none; - } - } - .\[\&\>span_\.text-muted-foreground\]\:hidden { - &>span .text-muted-foreground { - display: none; - } - } .\[\&\>svg\]\:mb-3 { &>svg { margin-bottom: calc(var(--spacing) * 3); @@ -3666,9 +3557,7 @@ --tw-font-weight: var(--font-weight-medium); font-weight: var(--font-weight-medium); & + p { - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - color: var(--color-muted-foreground); + margin-top: calc(var(--spacing) * -1.5); } } } @@ -3686,17 +3575,63 @@ &>.sr-only { width: auto; } - .description { - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - color: var(--color-muted-foreground); - } - .error { + h2, h3 { + display: flex; + width: fit-content; + align-items: center; + gap: calc(var(--spacing) * 2); font-size: var(--text-sm); line-height: var(--tw-leading, var(--text-sm--line-height)); + --tw-leading: var(--leading-snug); + line-height: var(--leading-snug); --tw-font-weight: var(--font-weight-medium); font-weight: var(--font-weight-medium); + } + [role="alert"] { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + --tw-font-weight: var(--font-weight-normal); + font-weight: var(--font-weight-normal); color: var(--color-destructive); + ul { + margin-left: calc(var(--spacing) * 4); + display: flex; + list-style-type: disc; + flex-direction: column; + gap: calc(var(--spacing) * 1); + } + } + section { + display: flex; + flex: 1; + flex-direction: column; + gap: calc(var(--spacing) * 1.5); + --tw-leading: var(--leading-snug); + line-height: var(--leading-snug); + } + } + .fieldset legend + p, .field p { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + --tw-leading: var(--leading-normal); + line-height: var(--leading-normal); + --tw-font-weight: var(--font-weight-normal); + font-weight: var(--font-weight-normal); + color: var(--color-muted-foreground); + &:last-child { + margin-top: calc(var(--spacing) * 0); + } + &:nth-last-child(2) { + margin-top: calc(var(--spacing) * -1); + } + &>a { + text-decoration-line: underline; + } + &>a { + text-underline-offset: 4px; + } + &>a:hover { + color: var(--color-primary); } } } diff --git a/docs/src/components/field.njk b/docs/src/components/field.njk index 3589847..74e7f7e 100644 --- a/docs/src/components/field.njk +++ b/docs/src/components/field.njk @@ -27,6 +27,11 @@ toc: {% from "macros/code_preview.njk" import code_preview %} {% from "macros/code_block.njk" import code_block %} +
    + {% lucide "triangle-alert"%} +

    This component is still under development, API may change.

    +
    + {% set code_demo %}
    @@ -41,7 +46,7 @@ toc:
    -

    Enter your 16-digit card number

    +

    Enter your 16-digit card number

    @@ -115,18 +120,44 @@ toc:

    Usage

    -

    Field provides semantic HTML patterns for accessible forms:

    +

    Field uses semantic HTML with minimal classes. Two main patterns can be used independently or composed together:

      -
    • <fieldset> and <legend> for grouping related fields
    • -
    • <p> after <legend> is automatically styled as description text
    • -
    • role="group" with .field class for individual field containers
    • -
    • .description class for field-level helper text (requires aria-describedby)
    • -
    • .error class with role="alert" for error messages
    • +
    • <div role="group" class="field"> for individual field containers (label, input, helper text, errors)
    • +
    • <fieldset class="fieldset"> for grouping multiple related fields together
    +

    Elements inside these containers are styled automatically based on their purpose. Use aria-describedby to connect helper text and errors to inputs for accessibility.

    +

    Fields have the following HTML structure:

    +
    +
    <div role="group" class="field">
    +
    Field container. +
    +
    <label>
    +
    Label for the input.
    +
    <input>, <select> or <textarea>
    +
    Form input.
    +
    <p> Optional
    +
    Helper text. Use aria-describedby on the input to reference this element's id.
    +
    <p role="alert"> Optional
    +
    Error message. Use aria-describedby on the input and aria-invalid="true" to reference this element's id.
    +
    +
    +
    +

    Fieldsets have the following HTML structure:

    +
    +
    <fieldset class="fieldset">
    +
    Container for grouping related fields. +
    +
    <legend>
    +
    Heading for the fieldset.
    +
    <p> Optional
    +
    Description text. When placed directly after <legend>, automatically styled as muted text.
    +
    <div role="group" class="field"> Optional
    +
    Individual field containers (see structure above). You can include multiple .field elements, or place form controls directly in the fieldset.
    +
    +
    +
    -{{ code_block(code) }} -

    Examples

    Input

    @@ -136,12 +167,12 @@ toc:
    -

    Choose a unique username for your account.

    +

    Choose a unique username for your account.

    -

    Must be at least 8 characters long.

    +

    Must be at least 8 characters long.

    @@ -155,7 +186,7 @@ toc:
    -

    Share your thoughts about our service.

    +

    Share your thoughts about our service.

    {% endset %} @@ -177,7 +208,7 @@ toc: -

    Select your department or area of work.

    +

    Select your department or area of work.

    {% endset %} @@ -188,7 +219,7 @@ toc: {% set code %}
    -

    Set your budget: $150

    +

    Set your budget: $150