-
+
Log out?
@@ -40,7 +43,10 @@ export default function Logout({ isAuthenticated }: Props) {
) : (
-
+
Logged out
diff --git a/modules/Users/src/SimpleModule.Users/Pages/Account/Register.tsx b/modules/Users/src/SimpleModule.Users/Pages/Account/Register.tsx
index c99db305..46ec6c8f 100644
--- a/modules/Users/src/SimpleModule.Users/Pages/Account/Register.tsx
+++ b/modules/Users/src/SimpleModule.Users/Pages/Account/Register.tsx
@@ -31,14 +31,19 @@ export default function Register({ returnUrl, externalLogins, errors }: Props) {
S
Create an account
diff --git a/packages/SimpleModule.Theme.Default/theme.css b/packages/SimpleModule.Theme.Default/theme.css
index 7dcf5245..94f1ae59 100644
--- a/packages/SimpleModule.Theme.Default/theme.css
+++ b/packages/SimpleModule.Theme.Default/theme.css
@@ -1,108 +1,176 @@
/* ============================================================
- SimpleModule Design System — Bold & Modern
- Gradient accents · Glass morphism · Dark mode
+ SimpleModule Design System — "Quiet Editorial"
+ Refined dev-tool aesthetic · warm dark mode · OKLCH color
+ ============================================================
+ Token names match v1 so module pages stay source-compatible.
+ Only the *values* and a handful of component finishes change.
============================================================ */
@theme {
- /* --- Primary: Emerald --- */
- --color-primary: #059669;
- --color-primary-hover: #047857;
- --color-primary-light: #34d399;
- --color-primary-subtle: rgba(5, 150, 105, 0.08);
- --color-primary-ring: rgba(5, 150, 105, 0.25);
+ /* --- Primary: Emerald, retuned via OKLCH for vibrancy --- */
+ --color-primary: oklch(0.62 0.16 158);
+ --color-primary-hover: oklch(0.55 0.17 158);
+ --color-primary-light: oklch(0.78 0.16 158);
+ --color-primary-subtle: oklch(0.62 0.16 158 / 0.09);
+ --color-primary-ring: oklch(0.62 0.16 158 / 0.32);
- /* --- Accent: Teal --- */
- --color-accent: #0f766e;
- --color-accent-hover: #115e59;
+ /* --- Accent: Deeper teal for gradient anchor --- */
+ --color-accent: oklch(0.5 0.11 192);
+ --color-accent-hover: oklch(0.42 0.11 192);
/* --- Semantic: Success --- */
- --color-success: #059669;
- --color-success-light: #34d399;
- --color-success-bg: rgba(5, 150, 105, 0.1);
- --color-success-text: #047857;
-
- /* --- Semantic: Danger --- */
- --color-danger: #e11d48;
- --color-danger-hover: #be123c;
- --color-danger-bg: rgba(225, 29, 72, 0.08);
- --color-danger-text: #9f1239;
-
- /* --- Semantic: Warning --- */
- --color-warning: #d97706;
- --color-warning-bg: rgba(217, 119, 6, 0.08);
- --color-warning-border: rgba(217, 119, 6, 0.2);
- --color-warning-text: #92400e;
-
- /* --- Semantic: Info --- */
- --color-info: #0ea5e9;
- --color-info-bg: rgba(14, 165, 233, 0.08);
-
- /* --- Surfaces (Light) --- */
- --color-surface: #ffffff;
- --color-surface-raised: #f8fafc;
- --color-surface-sunken: #f1f5f9;
- --color-surface-overlay: rgba(255, 255, 255, 0.8);
+ --color-success: oklch(0.62 0.16 158);
+ --color-success-light: oklch(0.78 0.16 158);
+ --color-success-bg: oklch(0.62 0.16 158 / 0.1);
+ --color-success-text: oklch(0.48 0.15 158);
+
+ /* --- Semantic: Danger (rose, warmer than red) --- */
+ --color-danger: oklch(0.6 0.21 17);
+ --color-danger-hover: oklch(0.52 0.21 17);
+ --color-danger-bg: oklch(0.6 0.21 17 / 0.09);
+ --color-danger-text: oklch(0.5 0.2 17);
+
+ /* --- Semantic: Warning (amber) --- */
+ --color-warning: oklch(0.72 0.16 60);
+ --color-warning-bg: oklch(0.72 0.16 60 / 0.1);
+ --color-warning-border: oklch(0.72 0.16 60 / 0.25);
+ --color-warning-text: oklch(0.5 0.13 60);
+
+ /* --- Semantic: Info (sky, pulled cooler) --- */
+ --color-info: oklch(0.65 0.16 232);
+ --color-info-bg: oklch(0.65 0.16 232 / 0.1);
+
+ /* --- Surfaces (Light) — warm-leaning, not pure slate --- */
+ --color-surface: oklch(1 0 0);
+ --color-surface-raised: oklch(0.985 0.003 80);
+ --color-surface-sunken: oklch(0.965 0.005 80);
+ --color-surface-overlay: oklch(1 0 0 / 0.78);
/* --- Text (Light) --- */
- --color-text: #0f172a;
- --color-text-secondary: #475569;
- --color-text-muted: #94a3b8;
- --color-text-inverse: #ffffff;
+ --color-text: oklch(0.22 0.015 250);
+ --color-text-secondary: oklch(0.45 0.015 250);
+ --color-text-muted: oklch(0.62 0.012 250);
+ --color-text-inverse: oklch(1 0 0);
/* --- Borders (Light) --- */
- --color-border: #e2e8f0;
- --color-border-strong: #cbd5e1;
+ --color-border: oklch(0.92 0.005 80);
+ --color-border-strong: oklch(0.85 0.008 80);
/* --- Code --- */
- --color-code-bg: #1e293b;
- --color-code-text: #e2e8f0;
+ --color-code-bg: oklch(0.22 0.02 260);
+ --color-code-text: oklch(0.92 0.01 80);
/* --- Misc --- */
- --color-dark: #0f172a;
- --color-muted: #94a3b8;
- --color-ring: rgba(5, 150, 105, 0.4);
-
- /* --- Shadows (themeable) --- */
- --shadow-primary: 0 4px 14px rgba(5, 150, 105, 0.35);
- --shadow-primary-hover: 0 6px 20px rgba(5, 150, 105, 0.5);
- --shadow-danger: 0 4px 14px rgba(225, 29, 72, 0.25);
- --shadow-danger-hover: 0 6px 20px rgba(225, 29, 72, 0.4);
+ --color-dark: oklch(0.18 0.012 260);
+ --color-muted: oklch(0.62 0.012 250);
+ --color-ring: oklch(0.62 0.16 158 / 0.45);
+
+ /* --- Shadows: layered, soft, intentional --- */
+ --shadow-xs: 0 1px 2px 0 oklch(0.18 0.012 260 / 0.05);
+ --shadow-sm: 0 1px 2px 0 oklch(0.18 0.012 260 / 0.06), 0 1px 3px 0 oklch(0.18 0.012 260 / 0.04);
+ --shadow-md:
+ 0 4px 8px -2px oklch(0.18 0.012 260 / 0.08), 0 2px 4px -2px oklch(0.18 0.012 260 / 0.05);
+ --shadow-lg:
+ 0 12px 24px -8px oklch(0.18 0.012 260 / 0.12), 0 4px 8px -4px oklch(0.18 0.012 260 / 0.06);
+ --shadow-xl:
+ 0 24px 48px -12px oklch(0.18 0.012 260 / 0.18), 0 8px 16px -8px oklch(0.18 0.012 260 / 0.08);
+ --shadow-primary:
+ 0 6px 18px -4px oklch(0.62 0.16 158 / 0.42), 0 2px 4px -2px oklch(0.62 0.16 158 / 0.25);
+ --shadow-primary-hover:
+ 0 10px 28px -6px oklch(0.62 0.16 158 / 0.55), 0 4px 8px -4px oklch(0.62 0.16 158 / 0.3);
+ --shadow-danger: 0 6px 18px -4px oklch(0.6 0.21 17 / 0.32);
+ --shadow-danger-hover: 0 10px 28px -6px oklch(0.6 0.21 17 / 0.45);
+
+ /* --- Type roots --- */
+ --font-display:
+ "Fraunces", "Iowan Old Style", "Apple Garamond", "Baskerville", "Times New Roman", Times,
+ "Source Serif Pro", serif;
+ --font-body: "Geist", "Inter", system-ui, -apple-system, sans-serif;
+ --font-mono: "JetBrains Mono", "Fira Code", ui-monospace, "SF Mono", Menlo, monospace;
+
+ /* --- Motion --- */
+ --duration-instant: 80ms;
+ --duration-fast: 150ms;
+ --duration-base: 200ms;
+ --duration-moderate: 300ms;
+ --duration-slow: 500ms;
+ --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
+ --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
+ --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
+
+ /* --- Layering --- */
+ --z-base: 0;
+ --z-sticky: 10;
+ --z-overlay: 20;
+ --z-sidebar: 40;
+ --z-dropdown: 50;
+ --z-modal: 60;
+ --z-toast: 80;
+ --z-tooltip: 90;
+
+ /* --- Opacity scale --- */
+ --opacity-disabled: 0.45;
+ --opacity-muted: 0.65;
+ --opacity-overlay: 0.78;
+ --opacity-backdrop: 0.5;
}
/* ============================================================
- Dark Mode Overrides
+ Dark Mode — Warm, deep, intentional (not cold slate)
============================================================ */
.dark {
- --color-primary-subtle: rgba(5, 150, 105, 0.15);
- --color-primary-ring: rgba(5, 150, 105, 0.35);
-
- --color-success-bg: rgba(52, 211, 153, 0.12);
- --color-success-text: #6ee7b7;
-
- --color-danger-bg: rgba(225, 29, 72, 0.12);
- --color-danger-text: #fda4af;
-
- --color-warning-bg: rgba(217, 119, 6, 0.12);
- --color-warning-border: rgba(217, 119, 6, 0.3);
- --color-warning-text: #fcd34d;
-
- --color-info-bg: rgba(14, 165, 233, 0.12);
-
- --color-surface: #0f172a;
- --color-surface-raised: #1e293b;
- --color-surface-sunken: #0b1120;
- --color-surface-overlay: rgba(15, 23, 42, 0.85);
-
- --color-text: #f1f5f9;
- --color-text-secondary: #94a3b8;
- --color-text-muted: #64748b;
- --color-text-inverse: #0f172a;
-
- --color-border: #1e293b;
- --color-border-strong: #334155;
-
- --color-code-bg: #020617;
- --color-code-text: #e2e8f0;
+ --color-primary: oklch(0.72 0.16 158);
+ --color-primary-hover: oklch(0.78 0.16 158);
+ --color-primary-light: oklch(0.85 0.13 158);
+ --color-primary-subtle: oklch(0.72 0.16 158 / 0.14);
+ --color-primary-ring: oklch(0.72 0.16 158 / 0.4);
+ --color-accent: oklch(0.62 0.11 192);
+ --color-accent-hover: oklch(0.7 0.11 192);
+
+ --color-success: oklch(0.78 0.16 158);
+ --color-success-bg: oklch(0.72 0.16 158 / 0.14);
+ --color-success-text: oklch(0.85 0.13 158);
+
+ --color-danger: oklch(0.7 0.2 17);
+ --color-danger-hover: oklch(0.78 0.2 17);
+ --color-danger-bg: oklch(0.7 0.2 17 / 0.14);
+ --color-danger-text: oklch(0.85 0.13 17);
+
+ --color-warning-bg: oklch(0.72 0.16 60 / 0.15);
+ --color-warning-border: oklch(0.72 0.16 60 / 0.35);
+ --color-warning-text: oklch(0.86 0.14 60);
+
+ --color-info: oklch(0.75 0.13 232);
+ --color-info-bg: oklch(0.75 0.13 232 / 0.14);
+
+ /* Warm dark surfaces — hue 60 (toward amber) at very low chroma.
+ Net effect: looks like rich graphite, never blue-cold. */
+ --color-surface: oklch(0.205 0.006 60);
+ --color-surface-raised: oklch(0.245 0.007 60);
+ --color-surface-sunken: oklch(0.16 0.006 60);
+ --color-surface-overlay: oklch(0.205 0.006 60 / 0.78);
+
+ --color-text: oklch(0.96 0.005 80);
+ --color-text-secondary: oklch(0.74 0.008 80);
+ --color-text-muted: oklch(0.55 0.008 80);
+ --color-text-inverse: oklch(0.16 0.006 60);
+
+ --color-border: oklch(0.3 0.008 60);
+ --color-border-strong: oklch(0.4 0.01 60);
+
+ --color-code-bg: oklch(0.135 0.006 60);
+ --color-code-text: oklch(0.92 0.008 80);
+
+ /* Heavier dark shadows + colored primary glow */
+ --shadow-xs: 0 1px 2px 0 oklch(0 0 0 / 0.4);
+ --shadow-sm: 0 1px 2px 0 oklch(0 0 0 / 0.45), 0 1px 3px 0 oklch(0 0 0 / 0.3);
+ --shadow-md: 0 4px 8px -2px oklch(0 0 0 / 0.5), 0 2px 4px -2px oklch(0 0 0 / 0.35);
+ --shadow-lg: 0 14px 28px -8px oklch(0 0 0 / 0.6), 0 4px 8px -4px oklch(0 0 0 / 0.4);
+ --shadow-xl: 0 32px 64px -16px oklch(0 0 0 / 0.7), 0 8px 16px -8px oklch(0 0 0 / 0.45);
+ --shadow-primary:
+ 0 6px 22px -4px oklch(0.72 0.16 158 / 0.42), 0 0 0 1px oklch(0.72 0.16 158 / 0.2);
+ --shadow-primary-hover:
+ 0 12px 34px -8px oklch(0.72 0.16 158 / 0.55), 0 0 0 1px oklch(0.72 0.16 158 / 0.3);
}
/* ============================================================
@@ -113,11 +181,15 @@
scroll-behavior: smooth;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
+ text-rendering: optimizeLegibility;
}
body {
@apply bg-surface-sunken text-text transition-colors duration-300;
- font-family: "DM Sans", system-ui, sans-serif;
+ font-family: var(--font-body);
+ font-feature-settings: "ss01", "cv11", "cv05";
+ font-optical-sizing: auto;
+ letter-spacing: -0.005em;
}
h1,
@@ -127,22 +199,33 @@
h5,
h6 {
margin-top: 0;
- font-family: "Sora", "DM Sans", system-ui, sans-serif;
- @apply font-bold tracking-tight text-text;
+ font-family: var(--font-display);
+ font-optical-sizing: auto;
+ font-variation-settings:
+ "opsz" 144,
+ "SOFT" 30,
+ "WONK" 0;
+ letter-spacing: -0.025em;
+ @apply font-medium text-text;
}
h1 {
- @apply text-xl sm:text-2xl;
+ @apply text-2xl sm:text-3xl;
+ letter-spacing: -0.035em;
+ font-weight: 500;
}
h2 {
- @apply text-lg sm:text-xl;
+ @apply text-xl sm:text-2xl;
+ letter-spacing: -0.03em;
}
h3 {
- @apply text-base sm:text-lg;
+ @apply text-lg sm:text-xl;
}
label {
@apply block mb-1.5 font-medium text-sm text-text-secondary;
+ font-family: var(--font-body);
+ letter-spacing: 0;
}
input[type="email"],
@@ -150,6 +233,7 @@
input[type="text"],
input[type="tel"] {
@apply w-full px-3 py-2.5 sm:px-4 sm:py-3 bg-surface border border-border rounded-xl text-sm text-text transition-all duration-200 placeholder-text-muted;
+ box-shadow: var(--shadow-xs);
}
input[type="email"]:focus,
@@ -171,7 +255,11 @@
}
::selection {
- background: rgba(5, 150, 105, 0.2);
+ background: oklch(0.62 0.16 158 / 0.25);
+ color: var(--color-text);
+ }
+ .dark ::selection {
+ background: oklch(0.72 0.16 158 / 0.3);
}
}
@@ -181,24 +269,26 @@
@layer components {
/* --- Glass Card --- */
.glass-card {
- @apply bg-surface-overlay border border-border rounded-2xl shadow-lg;
- backdrop-filter: blur(20px) saturate(180%);
- -webkit-backdrop-filter: blur(20px) saturate(180%);
+ @apply bg-surface-overlay border border-border rounded-2xl;
+ backdrop-filter: blur(24px) saturate(180%);
+ -webkit-backdrop-filter: blur(24px) saturate(180%);
+ box-shadow: var(--shadow-lg);
}
.dark .glass-card {
- @apply shadow-2xl;
box-shadow:
- 0 0 0 1px rgba(148, 163, 184, 0.05),
- 0 25px 50px -12px rgba(0, 0, 0, 0.5);
+ inset 0 1px 0 0 oklch(1 0 0 / 0.04),
+ var(--shadow-xl);
}
- /* --- Buttons (base via shared selector) --- */
+ /* --- Buttons --- */
.btn-primary,
.btn-secondary,
.btn-ghost,
.btn-danger,
.btn-outline {
- @apply inline-flex items-center justify-center gap-2 px-5 py-2.5 rounded-xl text-sm font-semibold cursor-pointer no-underline transition-all duration-200 ease-out border-none;
+ @apply inline-flex items-center justify-center gap-2 px-5 py-2.5 rounded-xl text-sm font-medium cursor-pointer no-underline transition-all duration-200 ease-out border-none;
+ font-family: var(--font-body);
+ letter-spacing: -0.005em;
}
.btn-primary:active,
.btn-secondary:active,
@@ -209,20 +299,22 @@
}
.btn-primary {
- @apply text-white;
- background: linear-gradient(135deg, var(--color-primary), var(--color-accent));
- box-shadow: 0 4px 14px rgba(5, 150, 105, 0.35);
+ @apply text-white bg-primary;
+ box-shadow: var(--shadow-primary);
}
.btn-primary:hover {
- box-shadow: 0 6px 20px rgba(5, 150, 105, 0.5);
+ background: var(--color-primary-hover);
+ box-shadow: var(--shadow-primary-hover);
transform: translateY(-1px);
}
.btn-secondary {
@apply bg-surface text-text border border-border;
+ box-shadow: var(--shadow-xs);
}
.btn-secondary:hover {
@apply bg-surface-raised border-border-strong;
+ box-shadow: var(--shadow-sm);
}
.btn-ghost {
@@ -234,11 +326,11 @@
.btn-danger {
@apply text-white bg-danger;
- box-shadow: 0 4px 14px rgba(225, 29, 72, 0.25);
+ box-shadow: var(--shadow-danger);
}
.btn-danger:hover {
@apply bg-danger-hover;
- box-shadow: 0 6px 20px rgba(225, 29, 72, 0.4);
+ box-shadow: var(--shadow-danger-hover);
transform: translateY(-1px);
}
@@ -262,12 +354,13 @@
@apply mb-5;
}
- /* --- Badges (base via shared selector) --- */
+ /* --- Badges --- */
.badge-success,
.badge-danger,
.badge-warning,
.badge-info {
- @apply inline-flex items-center px-2.5 py-1 rounded-full text-xs font-semibold;
+ @apply inline-flex items-center px-2.5 py-1 rounded-full text-xs font-medium;
+ letter-spacing: 0;
}
.badge-success {
@apply bg-success-bg text-success-text;
@@ -282,7 +375,7 @@
@apply bg-info-bg text-primary;
}
- /* --- Alerts (base via shared selector) --- */
+ /* --- Alerts --- */
.alert-success,
.alert-danger,
.alert-warning,
@@ -304,8 +397,9 @@
/* --- Code Block --- */
.code-block {
- @apply bg-code-bg text-code-text rounded-xl p-4 font-mono text-xs overflow-auto border border-border;
- font-family: "JetBrains Mono", "Fira Code", monospace;
+ @apply bg-code-bg text-code-text rounded-xl p-4 text-xs overflow-auto border border-border;
+ font-family: var(--font-mono);
+ font-feature-settings: "calt", "liga";
}
/* --- Section Panel --- */
@@ -313,21 +407,27 @@
@apply mb-8;
}
.panel-title {
- @apply text-base font-bold mb-4 pb-3 flex items-center gap-2;
- font-family: "Sora", system-ui, sans-serif;
+ @apply text-base font-semibold mb-4 pb-3 flex items-center gap-2.5;
+ font-family: var(--font-display);
+ font-variation-settings:
+ "opsz" 144,
+ "SOFT" 0,
+ "WONK" 0;
+ letter-spacing: -0.02em;
}
.panel-title::before {
content: "";
- @apply w-1 h-5 rounded-full;
- background: linear-gradient(180deg, var(--color-primary), var(--color-accent));
+ @apply w-1 h-5 rounded-full bg-primary;
}
/* --- Card --- */
.card {
@apply bg-surface border border-border rounded-xl sm:rounded-2xl p-4 sm:p-5 transition-all duration-200;
+ box-shadow: var(--shadow-xs);
}
.card:hover {
@apply border-border-strong;
+ box-shadow: var(--shadow-sm);
}
/* --- Mobile table scroll wrapper --- */
@@ -338,7 +438,7 @@
@apply min-w-[600px] sm:min-w-0;
}
- /* --- Scrollbar hide (for horizontal tab bars) --- */
+ /* --- Scrollbar hide --- */
.scrollbar-hide {
-ms-overflow-style: none;
scrollbar-width: none;
@@ -385,14 +485,25 @@
@apply bg-surface-raised text-text;
}
- /* --- Sidebar Nav Link (app layout, with icon) --- */
+ /* --- Sidebar Nav Link --- */
.sidebar-nav-link-active,
.sidebar-nav-link-inactive {
- @apply flex items-center gap-3 px-3 py-2 rounded-xl text-sm no-underline transition-all duration-150 outline-none focus-visible:ring-4 focus-visible:ring-primary-ring;
+ @apply relative flex items-center gap-3 px-3 py-2 rounded-xl text-sm no-underline transition-all duration-150 outline-none focus-visible:ring-4 focus-visible:ring-primary-ring;
}
.sidebar-nav-link-active {
@apply font-medium text-primary bg-primary-subtle;
}
+ .sidebar-nav-link-active::before {
+ content: "";
+ position: absolute;
+ left: -0.75rem;
+ top: 50%;
+ transform: translateY(-50%);
+ width: 3px;
+ height: 1.25rem;
+ border-radius: 0 3px 3px 0;
+ background: var(--color-primary);
+ }
.sidebar-nav-link-inactive {
@apply text-text-secondary;
}
@@ -417,6 +528,8 @@
Utilities
============================================================ */
@layer utilities {
+ /* Kept as a class for backwards-compatibility, but now renders as solid primary.
+ The visual gradient treatment was removed across the system. */
.gradient-text {
color: var(--color-primary);
}
@@ -430,7 +543,7 @@
inset: 0;
border-radius: inherit;
padding: 1px;
- background: linear-gradient(135deg, var(--color-primary), var(--color-accent));
+ background: var(--color-primary);
mask:
linear-gradient(#fff 0 0) content-box,
linear-gradient(#fff 0 0);
@@ -438,59 +551,39 @@
-webkit-mask-composite: xor;
pointer-events: none;
}
+
+ .font-display {
+ font-family: var(--font-display);
+ font-optical-sizing: auto;
+ }
+ .font-body {
+ font-family: var(--font-body);
+ }
}
/* ============================================================
- Animated Background Mesh
+ Animated Background Mesh — softer, slower, with grain
============================================================ */
@layer components {
+ /* Flat ambient background — no gradients. Kept as a class so consumers
+ that still mount
continue to render correctly. */
.bg-mesh {
position: fixed;
inset: 0;
z-index: -1;
- overflow: hidden;
background: var(--color-surface-sunken);
}
- .bg-mesh::before,
- .bg-mesh::after {
+
+ /* Subtle film grain — texture, not gradient. Adds warmth in dark mode. */
+ .dark body::before {
content: "";
- position: absolute;
- border-radius: 50%;
- filter: blur(100px);
- opacity: 0.15;
- animation: mesh-float 20s ease-in-out infinite;
- }
- .bg-mesh::before {
- width: 600px;
- height: 600px;
- background: var(--color-primary);
- top: -10%;
- right: -10%;
- }
- .bg-mesh::after {
- width: 500px;
- height: 500px;
- background: var(--color-accent);
- bottom: -10%;
- left: -10%;
- animation-delay: -10s;
- animation-direction: reverse;
- }
- .dark .bg-mesh::before,
- .dark .bg-mesh::after {
- opacity: 0.08;
- }
- @keyframes mesh-float {
- 0%,
- 100% {
- transform: translate(0, 0) scale(1);
- }
- 33% {
- transform: translate(40px, -30px) scale(1.05);
- }
- 66% {
- transform: translate(-20px, 20px) scale(0.95);
- }
+ position: fixed;
+ inset: 0;
+ pointer-events: none;
+ z-index: 0;
+ opacity: 0.025;
+ mix-blend-mode: overlay;
+ background-image: url("data:image/svg+xml;utf8, ");
}
/* --- Spinner --- */
@@ -516,7 +609,8 @@
right: 0;
top: calc(100% + 6px);
width: 240px;
- @apply bg-surface border border-border rounded-xl shadow-lg;
+ @apply bg-surface border border-border rounded-xl;
+ box-shadow: var(--shadow-lg);
opacity: 0;
transform: translateY(-4px) scale(0.97);
pointer-events: none;
@@ -530,7 +624,6 @@
transform: translateY(0) scale(1);
pointer-events: auto;
}
- /* Inside sidebar: open upward */
.app-sidebar .user-dropdown {
top: auto;
bottom: calc(100% + 6px);
@@ -543,8 +636,8 @@
}
.dark .user-dropdown {
box-shadow:
- 0 0 0 1px rgba(148, 163, 184, 0.06),
- 0 20px 40px -8px rgba(0, 0, 0, 0.6);
+ inset 0 1px 0 0 oklch(1 0 0 / 0.04),
+ var(--shadow-xl);
}
.user-dropdown-header {
@apply px-4 py-3 border-b border-border;
@@ -571,16 +664,26 @@
/* --- Dashboard Cards --- */
.dash-card {
@apply bg-surface border border-border rounded-xl sm:rounded-2xl p-4 sm:p-5 transition-all duration-200;
+ box-shadow: var(--shadow-xs);
}
.dash-card:hover {
- @apply border-border-strong shadow-md;
+ @apply border-border-strong;
+ box-shadow: var(--shadow-md);
+ transform: translateY(-1px);
}
.dash-stat {
- @apply text-xl sm:text-2xl font-bold tracking-tight;
- font-family: "Sora", system-ui, sans-serif;
+ @apply text-2xl sm:text-3xl tracking-tight;
+ font-family: var(--font-display);
+ font-variation-settings:
+ "opsz" 144,
+ "SOFT" 30,
+ "WONK" 0;
+ font-weight: 500;
+ letter-spacing: -0.035em;
}
.dash-label {
@apply text-xs text-text-muted uppercase tracking-wider font-medium mt-1;
+ letter-spacing: 0.08em;
}
/* --- Validation --- */
@@ -604,10 +707,12 @@
transition:
width 0.2s ease,
transform 0.25s ease;
- /* Mobile: hidden off-screen by default */
width: 16rem;
transform: translateX(-100%);
}
+ .dark .app-sidebar {
+ background: var(--color-surface);
+ }
.app-sidebar.app-sidebar-open {
transform: translateX(0);
}
@@ -625,7 +730,6 @@
margin-left: 0;
transition: margin-left 0.2s ease;
}
- /* Mobile overlay backdrop */
.app-sidebar-backdrop {
@apply fixed inset-0 bg-black/50 z-30;
opacity: 0;
@@ -640,13 +744,15 @@
@apply fixed bottom-4 z-50 w-7 h-7 rounded-full bg-surface border border-border items-center justify-center text-text-muted hover:text-text hover:bg-surface-raised cursor-pointer transition-all duration-200;
left: 1rem;
display: none;
+ box-shadow: var(--shadow-sm);
}
- /* Mobile top bar toggle */
.app-mobile-header {
@apply sticky top-0 z-20 flex items-center gap-3 border-b border-border bg-surface px-4 py-3;
+ backdrop-filter: blur(12px) saturate(180%);
+ -webkit-backdrop-filter: blur(12px) saturate(180%);
+ background: var(--color-surface-overlay);
}
- /* ---- Desktop (md+): sidebar always visible, content offset ---- */
@media (min-width: 768px) {
.app-sidebar {
transform: translateX(0);
@@ -674,18 +780,27 @@
display: none;
}
}
+
/* --- Markdown Content --- */
.markdown-content h1 {
- @apply text-2xl font-bold mt-6 mb-3 text-text;
- font-family: "Sora", sans-serif;
+ @apply text-3xl mt-6 mb-3 text-text;
+ font-family: var(--font-display);
+ font-variation-settings:
+ "opsz" 144,
+ "SOFT" 0;
+ letter-spacing: -0.035em;
+ font-weight: 500;
}
.markdown-content h2 {
- @apply text-xl font-bold mt-5 mb-2 text-text;
- font-family: "Sora", sans-serif;
+ @apply text-2xl mt-5 mb-2 text-text;
+ font-family: var(--font-display);
+ letter-spacing: -0.03em;
+ font-weight: 500;
}
.markdown-content h3 {
- @apply text-lg font-semibold mt-4 mb-2 text-text;
- font-family: "Sora", sans-serif;
+ @apply text-xl mt-4 mb-2 text-text;
+ font-family: var(--font-display);
+ font-weight: 500;
}
.markdown-content h4 {
@apply text-base font-semibold mt-3 mb-1 text-text;
@@ -703,7 +818,8 @@
@apply mb-1;
}
.markdown-content code {
- @apply bg-surface-sunken text-text px-1.5 py-0.5 rounded text-xs font-mono;
+ @apply bg-surface-sunken text-text px-1.5 py-0.5 rounded text-xs;
+ font-family: var(--font-mono);
}
.markdown-content pre {
@apply bg-code-bg text-code-text rounded-xl p-4 mb-3 overflow-auto text-xs;
@@ -716,6 +832,10 @@
}
.markdown-content blockquote {
@apply border-l-4 border-primary/30 pl-4 italic text-text-muted my-3;
+ font-family: var(--font-display);
+ font-variation-settings:
+ "opsz" 144,
+ "SOFT" 50;
}
.markdown-content img {
@apply max-w-full rounded-lg my-3;
@@ -747,14 +867,43 @@
}
/* biome-ignore lint/style/noDescendingSpecificity: base layer table styles require element+element selectors */
table th {
- @apply text-left text-xs font-semibold text-text-muted uppercase tracking-wider pb-3;
+ @apply text-left text-xs font-semibold text-text-muted uppercase px-4 pt-4 pb-3;
+ letter-spacing: 0.08em;
+ background: var(--color-surface-sunken);
+ vertical-align: middle;
+ white-space: nowrap;
}
/* biome-ignore lint/style/noDescendingSpecificity: base layer table styles require element+element selectors */
table td {
- @apply py-2.5 border-t border-border text-text-secondary;
+ @apply px-4 py-3 border-t border-border text-text-secondary;
+ vertical-align: middle;
+ }
+ /* Extra inset on first/last column so content doesn't hug the table edge. */
+ table th:first-child,
+ table td:first-child {
+ @apply pl-5;
+ }
+ table th:last-child,
+ table td:last-child {
+ @apply pr-5;
+ }
+ /* Numeric / utility column alignment helpers — apply via class on td/th. */
+ table td.num,
+ table th.num {
+ @apply text-right;
+ font-family: var(--font-mono);
+ font-variant-numeric: tabular-nums;
+ }
+ /* Row hover affordance — opt in by setting `data-interactive` on the
+ so read-only tables (recovery codes, dashboard error lists,
+ RateLimiting policy summaries) don't pick up an interactive cue. */
+ table[data-interactive] tbody tr {
+ transition: background-color var(--duration-fast) var(--ease-out);
+ }
+ table[data-interactive] tbody tr:hover {
+ background: var(--color-surface-raised);
}
- /* ---- Scrollbar ---- */
::-webkit-scrollbar {
width: 6px;
height: 6px;
diff --git a/packages/SimpleModule.UI/components/button.tsx b/packages/SimpleModule.UI/components/button.tsx
index 88c36b7a..d485be09 100644
--- a/packages/SimpleModule.UI/components/button.tsx
+++ b/packages/SimpleModule.UI/components/button.tsx
@@ -9,7 +9,7 @@ const buttonVariants = cva(
variants: {
variant: {
primary:
- 'text-white bg-gradient-to-br from-primary to-accent shadow-(--shadow-primary) hover:shadow-(--shadow-primary-hover) hover:-translate-y-px',
+ 'text-white bg-primary shadow-(--shadow-primary) hover:bg-primary-hover hover:shadow-(--shadow-primary-hover) hover:-translate-y-px',
secondary:
'bg-surface text-text border border-border hover:bg-surface-raised hover:border-border-strong',
ghost: 'bg-transparent text-text-secondary hover:bg-primary-subtle hover:text-primary',
diff --git a/packages/SimpleModule.UI/components/data-grid-page.tsx b/packages/SimpleModule.UI/components/data-grid-page.tsx
index 439ce489..c7d1f664 100644
--- a/packages/SimpleModule.UI/components/data-grid-page.tsx
+++ b/packages/SimpleModule.UI/components/data-grid-page.tsx
@@ -1,6 +1,7 @@
import type * as React from 'react';
import { Card, CardContent } from './card';
import { DataGrid } from './data-grid';
+import { EmptyState } from './empty-state';
import { PageShell, type PageShellProps } from './page-shell';
interface DataGridPageProps extends Omit {
@@ -18,17 +19,16 @@ interface DataGridPageProps extends Omit
-
+
);
@@ -50,12 +50,12 @@ function DataGridPage({
{data.length === 0 ? (
-
- {emptyIcon}
-
{emptyTitle}
-
{emptyDescription}
- {emptyAction &&
{emptyAction}
}
-
+
) : (
diff --git a/packages/SimpleModule.UI/components/dialog.tsx b/packages/SimpleModule.UI/components/dialog.tsx
index 0e331f20..1c77c013 100644
--- a/packages/SimpleModule.UI/components/dialog.tsx
+++ b/packages/SimpleModule.UI/components/dialog.tsx
@@ -15,7 +15,7 @@ const DialogOverlay = React.forwardRef<
, 'title'> {
+ /** Icon shown inside a circular surface above the title. */
+ icon?: React.ReactNode;
+ /** Headline. */
+ title: React.ReactNode;
+ /** Body copy explaining the empty state and what to try next. */
+ description?: React.ReactNode;
+ /** Primary call-to-action (renders to the right of any secondary action). */
+ action?: React.ReactNode;
+ /** Optional secondary action (cancel/clear). */
+ secondaryAction?: React.ReactNode;
+ /**
+ * Semantic level for the title element. Defaults to `h2` because EmptyState
+ * commonly nests directly under a PageShell ``, so `h2` keeps the
+ * document outline contiguous. Override when the page has additional
+ * heading levels between the page title and this empty state.
+ */
+ headingLevel?: HeadingLevel;
+}
+
+const EmptyState = React.forwardRef(
+ (
+ { className, icon, title, description, action, secondaryAction, headingLevel = 'h2', ...props },
+ ref,
+ ) => {
+ const TitleTag = headingLevel;
+ return (
+
+ {icon && (
+
+ {icon}
+
+ )}
+
+ {title}
+
+ {description && (
+
+ {description}
+
+ )}
+ {(action || secondaryAction) && (
+
+ {secondaryAction}
+ {action}
+
+ )}
+
+ );
+ },
+);
+EmptyState.displayName = 'EmptyState';
+
+export type { EmptyStateProps };
+export { EmptyState };
diff --git a/packages/SimpleModule.UI/components/filter-bar.tsx b/packages/SimpleModule.UI/components/filter-bar.tsx
new file mode 100644
index 00000000..14e8d9f5
--- /dev/null
+++ b/packages/SimpleModule.UI/components/filter-bar.tsx
@@ -0,0 +1,46 @@
+import * as React from 'react';
+import { cn } from '../lib/utils';
+
+interface FilterBarProps extends React.HTMLAttributes {
+ /**
+ * Slot for the primary search input. Use the SearchInput component for
+ * a consistent affordance.
+ */
+ search?: React.ReactNode;
+ /** Slot for inline filter/sort controls (buttons, popovers, chips). */
+ controls?: React.ReactNode;
+ /** Slot for primary actions like "New X". Pushed to the right edge. */
+ actions?: React.ReactNode;
+}
+
+/**
+ * FilterBar — the canonical toolbar for data-grid pages.
+ *
+ * Layout:
+ * [ search ][ controls ] [ actions ]
+ * ^
+ * pushed right via flex-grow spacer
+ *
+ * Wraps cleanly on mobile (every slot wraps to its own row).
+ */
+const FilterBar = React.forwardRef(
+ ({ className, search, controls, actions, ...props }, ref) => (
+
+ {search &&
{search}
}
+ {controls &&
{controls}
}
+
+ {actions &&
{actions}
}
+
+ ),
+);
+FilterBar.displayName = 'FilterBar';
+
+export type { FilterBarProps };
+export { FilterBar };
diff --git a/packages/SimpleModule.UI/components/index.ts b/packages/SimpleModule.UI/components/index.ts
index 01ca4b20..8f4eceac 100644
--- a/packages/SimpleModule.UI/components/index.ts
+++ b/packages/SimpleModule.UI/components/index.ts
@@ -73,10 +73,13 @@ export {
DropdownMenuSub,
DropdownMenuTrigger,
} from './dropdown-menu';
+export { EmptyState, type EmptyStateProps } from './empty-state';
export { Field, FieldDescription, FieldError, FieldGroup } from './field';
+export { FilterBar, type FilterBarProps } from './filter-bar';
export { Grid, gridVariants } from './grid';
export { HoverCard, HoverCardContent, HoverCardTrigger } from './hover-card';
export { Input, inputVariants } from './input';
+export { Kbd, type KbdProps } from './kbd';
export { Label } from './label';
export type { MenuItem, PublicMenuItem, SharedProps } from './layouts';
// Layouts
@@ -87,6 +90,7 @@ export {
resolveLayout,
UserDropdown,
} from './layouts';
+export { NumberInput, type NumberInputProps } from './number-input';
export { PageHeader } from './page-header';
export { type BreadcrumbEntry, PageShell, type PageShellProps } from './page-shell';
export { Popover, PopoverContent, PopoverTrigger } from './popover';
@@ -94,6 +98,7 @@ export { Progress } from './progress';
export { RadioGroup, RadioGroupItem } from './radio-group';
export { ResizableHandle, ResizablePanel, ResizablePanelGroup } from './resizable';
export { ScrollArea, ScrollBar } from './scroll-area';
+export { SearchInput, type SearchInputProps } from './search-input';
export { Section } from './section';
export {
Select,
@@ -136,6 +141,7 @@ export { Skeleton } from './skeleton';
export { Slider } from './slider';
export { Spinner, spinnerVariants } from './spinner';
export { Stack, stackVariants } from './stack';
+export { Stat, type StatProps, statVariants } from './stat';
export { Switch } from './switch';
export { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from './table';
export { Tabs, TabsContent, TabsList, TabsTrigger } from './tabs';
diff --git a/packages/SimpleModule.UI/components/kbd.tsx b/packages/SimpleModule.UI/components/kbd.tsx
new file mode 100644
index 00000000..fb622e79
--- /dev/null
+++ b/packages/SimpleModule.UI/components/kbd.tsx
@@ -0,0 +1,25 @@
+import * as React from 'react';
+import { cn } from '../lib/utils';
+
+interface KbdProps extends React.HTMLAttributes {}
+
+const Kbd = React.forwardRef(({ className, children, ...props }, ref) => (
+
+ {children}
+
+));
+Kbd.displayName = 'Kbd';
+
+export type { KbdProps };
+export { Kbd };
diff --git a/packages/SimpleModule.UI/components/layouts/app-layout.tsx b/packages/SimpleModule.UI/components/layouts/app-layout.tsx
index 28da3a55..560dcf2f 100644
--- a/packages/SimpleModule.UI/components/layouts/app-layout.tsx
+++ b/packages/SimpleModule.UI/components/layouts/app-layout.tsx
@@ -84,12 +84,12 @@ export function AppLayout({ children }: { children: React.ReactNode }) {
S
@@ -107,12 +107,12 @@ export function AppLayout({ children }: { children: React.ReactNode }) {
S
diff --git a/packages/SimpleModule.UI/components/layouts/dark-mode-toggle.tsx b/packages/SimpleModule.UI/components/layouts/dark-mode-toggle.tsx
index 486d28a7..03efce7f 100644
--- a/packages/SimpleModule.UI/components/layouts/dark-mode-toggle.tsx
+++ b/packages/SimpleModule.UI/components/layouts/dark-mode-toggle.tsx
@@ -1,3 +1,5 @@
+import * as React from 'react';
+
declare global {
interface Window {
toggleTheme?: () => void;
@@ -5,22 +7,64 @@ declare global {
}
export function DarkModeToggle() {
+ const [isDark, setIsDark] = React.useState(() =>
+ typeof document !== 'undefined' ? document.documentElement.classList.contains('dark') : false,
+ );
+
+ React.useEffect(() => {
+ if (typeof document === 'undefined') return;
+ const observer = new MutationObserver(() => {
+ setIsDark(document.documentElement.classList.contains('dark'));
+ });
+ observer.observe(document.documentElement, {
+ attributes: true,
+ attributeFilter: ['class'],
+ });
+ return () => observer.disconnect();
+ }, []);
+
return (
window.toggleTheme?.()}
- className="p-1.5 rounded-lg text-text-muted hover:text-text hover:bg-surface-raised transition-colors"
- aria-label="Toggle theme"
+ className="relative inline-flex h-7 w-7 items-center justify-center rounded-lg text-text-secondary transition-all duration-200 hover:bg-surface-raised hover:text-text focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-ring"
+ aria-label={isDark ? 'Switch to light mode' : 'Switch to dark mode'}
+ aria-pressed={isDark}
>
+ {/* Sun */}
+
+
+
+
-
+ {/* Moon */}
+
);
diff --git a/packages/SimpleModule.UI/components/layouts/public-layout-mobile.tsx b/packages/SimpleModule.UI/components/layouts/public-layout-mobile.tsx
index 2b975246..9d3837a2 100644
--- a/packages/SimpleModule.UI/components/layouts/public-layout-mobile.tsx
+++ b/packages/SimpleModule.UI/components/layouts/public-layout-mobile.tsx
@@ -131,12 +131,12 @@ export function MobileOverlay({
S
diff --git a/packages/SimpleModule.UI/components/layouts/public-layout.tsx b/packages/SimpleModule.UI/components/layouts/public-layout.tsx
index c1d17a28..0f492940 100644
--- a/packages/SimpleModule.UI/components/layouts/public-layout.tsx
+++ b/packages/SimpleModule.UI/components/layouts/public-layout.tsx
@@ -25,12 +25,12 @@ export function PublicLayout({ children }: { children: React.ReactNode }) {
S
diff --git a/packages/SimpleModule.UI/components/layouts/user-dropdown.tsx b/packages/SimpleModule.UI/components/layouts/user-dropdown.tsx
index 6a7f7470..9c0dcd37 100644
--- a/packages/SimpleModule.UI/components/layouts/user-dropdown.tsx
+++ b/packages/SimpleModule.UI/components/layouts/user-dropdown.tsx
@@ -57,7 +57,7 @@ export function UserDropdown({ displayName, userInitial, items, csrfToken }: Use
{userInitial}
diff --git a/packages/SimpleModule.UI/components/number-input.tsx b/packages/SimpleModule.UI/components/number-input.tsx
new file mode 100644
index 00000000..6a3647e2
--- /dev/null
+++ b/packages/SimpleModule.UI/components/number-input.tsx
@@ -0,0 +1,156 @@
+import * as React from 'react';
+import { cn } from '../lib/utils';
+import { Button } from './button';
+
+type RootHTMLProps = Omit, 'value' | 'onChange'>;
+
+interface NumberInputProps extends RootHTMLProps {
+ value: number;
+ onChange: (next: number) => void;
+ /** Step delta for the +/- controls. Defaults to 1. */
+ step?: number;
+ /** Inclusive minimum value. */
+ min?: number;
+ /** Inclusive maximum value. */
+ max?: number;
+ /**
+ * Value to restore when the user clears the input and blurs without typing
+ * a new number. Defaults to `min` when provided, otherwise `0`.
+ */
+ emptyFallback?: number;
+}
+
+const clamp = (n: number, min?: number, max?: number) => {
+ if (typeof min === 'number' && n < min) return min;
+ if (typeof max === 'number' && n > max) return max;
+ return n;
+};
+
+const NumberInput = React.forwardRef(
+ (
+ { className, value, onChange, step = 1, min, max, disabled, emptyFallback, onBlur, ...props },
+ ref,
+ ) => {
+ // Local string state mirrors `value` so the user can type freely (including
+ // an empty string while editing) without the controlled prop snapping the
+ // field back. The numeric `value` is the source of truth on render/blur.
+ const [display, setDisplay] = React.useState(String(value));
+ const valueRef = React.useRef(value);
+
+ React.useEffect(() => {
+ if (value !== valueRef.current) {
+ setDisplay(String(value));
+ valueRef.current = value;
+ }
+ }, [value]);
+
+ const atMin = typeof min === 'number' && value <= min;
+ const atMax = typeof max === 'number' && value >= max;
+
+ const handleInput = (e: React.ChangeEvent) => {
+ const raw = e.target.value;
+ setDisplay(raw);
+ if (raw === '' || raw === '-') return; // mid-edit; don't emit yet
+ const next = Number.parseFloat(raw);
+ if (Number.isNaN(next)) return;
+ const clamped = clamp(next, min, max);
+ valueRef.current = clamped;
+ onChange(clamped);
+ };
+
+ const handleBlur = (e: React.FocusEvent) => {
+ if (display === '' || display === '-' || Number.isNaN(Number.parseFloat(display))) {
+ const restore = emptyFallback ?? min ?? 0;
+ setDisplay(String(restore));
+ if (restore !== value) {
+ valueRef.current = restore;
+ onChange(restore);
+ }
+ }
+ onBlur?.(e);
+ };
+
+ const setNumeric = (next: number) => {
+ const clamped = clamp(next, min, max);
+ setDisplay(String(clamped));
+ valueRef.current = clamped;
+ onChange(clamped);
+ };
+
+ return (
+
+ setNumeric(value - step)}
+ disabled={disabled || atMin}
+ aria-label="Decrement"
+ >
+
+
+
+
+
+ setNumeric(value + step)}
+ disabled={disabled || atMax}
+ aria-label="Increment"
+ >
+
+
+
+
+
+
+ );
+ },
+);
+NumberInput.displayName = 'NumberInput';
+
+export type { NumberInputProps };
+export { NumberInput };
diff --git a/packages/SimpleModule.UI/components/page-header.tsx b/packages/SimpleModule.UI/components/page-header.tsx
index e63d1cf0..ebaf9c2b 100644
--- a/packages/SimpleModule.UI/components/page-header.tsx
+++ b/packages/SimpleModule.UI/components/page-header.tsx
@@ -19,8 +19,13 @@ const PageHeader = React.forwardRef(
>
{title}
diff --git a/packages/SimpleModule.UI/components/search-input.tsx b/packages/SimpleModule.UI/components/search-input.tsx
new file mode 100644
index 00000000..547b307f
--- /dev/null
+++ b/packages/SimpleModule.UI/components/search-input.tsx
@@ -0,0 +1,49 @@
+import * as React from 'react';
+import { cn } from '../lib/utils';
+import { Input, type InputProps } from './input';
+import { Kbd } from './kbd';
+
+interface SearchInputProps extends Omit
{
+ /** Optional keyboard shortcut hint shown as a Kbd on the right edge. e.g. `'⌘K'`. */
+ shortcut?: string;
+}
+
+const SearchIcon = () => (
+
+
+
+
+);
+
+const SearchInput = React.forwardRef(
+ ({ className, shortcut, placeholder = 'Search…', suffix, ...props }, ref) => (
+ }
+ suffix={suffix ?? (shortcut ? {shortcut} : undefined)}
+ // Hide the native webkit/blink search clear (×) button so it does not
+ // overlap or compete with the suffix slot.
+ className={cn(
+ '[&::-webkit-search-cancel-button]:appearance-none [&::-webkit-search-decoration]:appearance-none',
+ className,
+ )}
+ {...props}
+ />
+ ),
+);
+SearchInput.displayName = 'SearchInput';
+
+export type { SearchInputProps };
+export { SearchInput };
diff --git a/packages/SimpleModule.UI/components/section.tsx b/packages/SimpleModule.UI/components/section.tsx
index edf074c8..9cbcaf36 100644
--- a/packages/SimpleModule.UI/components/section.tsx
+++ b/packages/SimpleModule.UI/components/section.tsx
@@ -11,7 +11,7 @@ const Section = React.forwardRef(
{title && (
{title}
diff --git a/packages/SimpleModule.UI/components/sheet.tsx b/packages/SimpleModule.UI/components/sheet.tsx
index 715d29bd..725ddbb3 100644
--- a/packages/SimpleModule.UI/components/sheet.tsx
+++ b/packages/SimpleModule.UI/components/sheet.tsx
@@ -14,7 +14,7 @@ const SheetOverlay = React.forwardRef<
>(({ className, ...props }, ref) => (
, 'children'>,
+ VariantProps {
+ /** Headline value, e.g. `14`, `2.7`, `98.4`, `v1.4`. */
+ value: React.ReactNode;
+ /** Unit suffix shown muted next to the value, e.g. `ms`, `%`. */
+ unit?: React.ReactNode;
+ /** Small uppercase label below the value. */
+ label: React.ReactNode;
+ /** Optional trend marker shown next to the value. */
+ trend?: 'up' | 'down' | 'flat';
+ /** Optional small change text, e.g. "+12% vs last week". */
+ change?: React.ReactNode;
+}
+
+const TREND_COLOR: Record, string> = {
+ up: 'text-success',
+ down: 'text-danger',
+ flat: 'text-text-muted',
+};
+
+const TrendIcon = ({ trend }: { trend: NonNullable }) => {
+ if (trend === 'up') {
+ return (
+
+
+
+
+ );
+ }
+ if (trend === 'down') {
+ return (
+
+
+
+
+ );
+ }
+ return (
+
+
+
+ );
+};
+
+/**
+ * Dashboard tile metric.
+ *
+ * When `onClick` is provided the Stat renders as a `` so it is fully
+ * keyboard-operable and exposes the correct semantic role to assistive tech.
+ * Otherwise it renders as a plain ``.
+ */
+const Stat = React.forwardRef
(
+ ({ className, interactive, lift, value, unit, label, trend, change, onClick, ...props }, ref) => {
+ const isInteractive = interactive ?? onClick != null;
+ const body = (
+ <>
+
+ {value}
+ {unit && {unit} }
+ {trend && (
+
+
+
+ )}
+
+ {label}
+ {change && {change}
}
+ >
+ );
+
+ if (isInteractive) {
+ return (
+ }
+ type="button"
+ onClick={onClick as React.MouseEventHandler}
+ className={cn(statVariants({ interactive: true, lift }), 'w-full', className)}
+ {...(props as React.ButtonHTMLAttributes)}
+ >
+ {body}
+
+ );
+ }
+
+ return (
+ }
+ className={cn(statVariants({ interactive: false, lift }), className)}
+ {...(props as React.HTMLAttributes)}
+ >
+ {body}
+
+ );
+ },
+);
+Stat.displayName = 'Stat';
+
+export type { StatProps };
+export { Stat, statVariants };
diff --git a/packages/SimpleModule.UI/components/tooltip.tsx b/packages/SimpleModule.UI/components/tooltip.tsx
index 1eac81dd..66468c2f 100644
--- a/packages/SimpleModule.UI/components/tooltip.tsx
+++ b/packages/SimpleModule.UI/components/tooltip.tsx
@@ -15,7 +15,7 @@ const TooltipContent = React.forwardRef<
ref={ref}
sideOffset={sideOffset}
className={cn(
- 'z-50 overflow-hidden rounded-lg bg-dark px-3 py-1.5 text-xs text-text-inverse animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',
+ 'z-[90] overflow-hidden rounded-lg bg-dark px-3 py-1.5 text-xs text-text-inverse animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',
className,
)}
{...props}
diff --git a/packages/SimpleModule.UI/registry/templates/page-header.tsx b/packages/SimpleModule.UI/registry/templates/page-header.tsx
index 7969fad9..03f6803b 100644
--- a/packages/SimpleModule.UI/registry/templates/page-header.tsx
+++ b/packages/SimpleModule.UI/registry/templates/page-header.tsx
@@ -16,8 +16,13 @@ const PageHeader = React.forwardRef(
>
{title}
diff --git a/packages/SimpleModule.UI/registry/templates/section.tsx b/packages/SimpleModule.UI/registry/templates/section.tsx
index edf074c8..9cbcaf36 100644
--- a/packages/SimpleModule.UI/registry/templates/section.tsx
+++ b/packages/SimpleModule.UI/registry/templates/section.tsx
@@ -11,7 +11,7 @@ const Section = React.forwardRef
(
{title && (
{title}
diff --git a/template/SimpleModule.Host/Styles/app.css b/template/SimpleModule.Host/Styles/app.css
index 10e8589c..3e3969b6 100644
--- a/template/SimpleModule.Host/Styles/app.css
+++ b/template/SimpleModule.Host/Styles/app.css
@@ -5,3 +5,4 @@
@source "../../../modules/**/Views/**/*.tsx";
@source "../../../modules/**/Pages/**/*.tsx";
@source "./_scan/";
+@source "../../../docs/design-system/";
diff --git a/template/SimpleModule.Host/wwwroot/css/app.css b/template/SimpleModule.Host/wwwroot/css/app.css
index 41024fa5..042d66f1 100644
--- a/template/SimpleModule.Host/wwwroot/css/app.css
+++ b/template/SimpleModule.Host/wwwroot/css/app.css
@@ -1,2 +1,5351 @@
/*! tailwindcss v4.2.2 | 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-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--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-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-content:""}}}@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-50:oklch(97.1% .013 17.38);--color-red-200:oklch(88.5% .062 18.334);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-800:oklch(44.4% .177 26.899);--color-green-600:oklch(62.7% .194 149.214);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-7xl:80rem;--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;--font-weight-extrabold:800;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-out:cubic-bezier(0, 0, .2, 1);--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;--blur-sm:8px;--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-primary:#059669;--color-primary-hover:#047857;--color-primary-subtle:#05966914;--color-primary-ring:#05966940;--color-accent:#0f766e;--color-success:#059669;--color-success-bg:#0596691a;--color-success-text:#047857;--color-danger:#e11d48;--color-danger-hover:#be123c;--color-danger-bg:#e11d4814;--color-danger-text:#9f1239;--color-warning-bg:#d9770614;--color-warning-border:#d9770633;--color-warning-text:#92400e;--color-info:#0ea5e9;--color-info-bg:#0ea5e914;--color-surface:#fff;--color-surface-raised:#f8fafc;--color-surface-sunken:#f1f5f9;--color-surface-overlay:#fffc;--color-text:#0f172a;--color-text-secondary:#475569;--color-text-muted:#94a3b8;--color-text-inverse:#fff;--color-border:#e2e8f0;--color-border-strong:#cbd5e1;--color-code-bg:#1e293b;--color-code-text:#e2e8f0;--color-dark:#0f172a;--color-muted:#94a3b8;--color-ring:#05966966;--shadow-primary:0 4px 14px #05966959;--shadow-primary-hover:0 6px 20px #05966980;--shadow-danger:0 4px 14px #e11d4840;--shadow-danger-hover:0 6px 20px #e11d4866}}@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}::-webkit-calendar-picker-indicator{line-height:1}:-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}html{scroll-behavior:smooth;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{background-color:var(--color-surface-sunken);color:var(--color-text);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));--tw-duration:.3s;font-family:DM Sans,system-ui,sans-serif;transition-duration:.3s}h1,h2,h3,h4,h5,h6{--tw-font-weight:var(--font-weight-bold);font-family:Sora,DM Sans,system-ui,sans-serif;font-weight:var(--font-weight-bold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);color:var(--color-text);margin-top:0}h1{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}@media (min-width:40rem){h1{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}}h2{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}@media (min-width:40rem){h2{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}h3{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}@media (min-width:40rem){h3{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}}label{margin-bottom: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);color:var(--color-text-secondary);display:block}input[type=email],input[type=password],input[type=text],input[type=tel]{border-radius:var(--radius-xl);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border);background-color:var(--color-surface);width:100%;padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-text)}:is(input[type=email],input[type=password],input[type=text],input[type=tel])::placeholder{color:var(--color-text-muted)}input[type=email],input[type=password],input[type=text],input[type=tel]{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s}@media (min-width:40rem){input[type=email],input[type=password],input[type=text],input[type=tel]{padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3)}}input[type=email]:focus,input[type=password]:focus,input[type=text]:focus,input[type=tel]:focus{border-color:var(--color-primary);--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);--tw-ring-color:var(--color-primary-ring);--tw-outline-style:none;outline-style:none}a{color:var(--color-primary);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));--tw-duration:.15s;transition-duration:.15s}a:hover{color:var(--color-primary-hover)}hr{margin-block:calc(var(--spacing) * 6);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--color-border)}::selection{background:#05966933}table{width:100%;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}table th{padding-bottom:calc(var(--spacing) * 3);text-align:left;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider);color:var(--color-text-muted);text-transform:uppercase}table td{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--color-border);padding-block:calc(var(--spacing) * 2.5);color:var(--color-text-secondary)}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background-color:var(--color-border-strong);border-radius:3.40282e38px}::-webkit-scrollbar-thumb:hover{background-color:var(--color-text-muted)}}@layer components{.glass-card{border-radius:var(--radius-2xl);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border);background-color:var(--color-surface-overlay);--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);-webkit-backdrop-filter:blur(20px)saturate(180%)}.dark .glass-card{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);box-shadow:0 0 0 1px #94a3b80d,0 25px 50px -12px #00000080}.btn-primary,.btn-secondary,.btn-ghost,.btn-danger,.btn-outline{cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing) * 2);border-radius:var(--radius-xl);--tw-border-style:none;padding-inline:calc(var(--spacing) * 5);padding-block:calc(var(--spacing) * 2.5);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);transition-property:all;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:var(--ease-out);transition-duration:.2s;transition-timing-function:var(--ease-out);border-style:none;text-decoration-line:none;display:inline-flex}.btn-primary:active,.btn-secondary:active,.btn-ghost:active,.btn-danger:active,.btn-outline:active{transform:scale(.97)}.btn-primary{color:var(--color-white);background:linear-gradient(135deg, var(--color-primary), var(--color-accent));box-shadow:0 4px 14px #05966959}.btn-primary:hover{transform:translateY(-1px);box-shadow:0 6px 20px #05966980}.btn-secondary{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border);background-color:var(--color-surface);color:var(--color-text)}.btn-secondary:hover{border-color:var(--color-border-strong);background-color:var(--color-surface-raised)}.btn-ghost{color:var(--color-text-secondary);background-color:#0000}.btn-ghost:hover{background-color:var(--color-primary-subtle);color:var(--color-primary)}.btn-danger{background-color:var(--color-danger);color:var(--color-white);box-shadow:0 4px 14px #e11d4840}.btn-danger:hover{background-color:var(--color-danger-hover);transform:translateY(-1px);box-shadow:0 6px 20px #e11d4866}.btn-outline{border-style:var(--tw-border-style);border-width:2px;border-color:#0596694d}@supports (color:color-mix(in lab, red, red)){.btn-outline{border-color:color-mix(in oklab, var(--color-primary) 30%, transparent)}}.btn-outline{color:var(--color-primary);background-color:#0000}.btn-outline:hover{border-color:var(--color-primary);background-color:var(--color-primary-subtle)}.btn-sm{border-radius:var(--radius-lg);padding-inline:calc(var(--spacing) * 3.5);padding-block:calc(var(--spacing) * 1.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.btn-lg{padding-inline:calc(var(--spacing) * 8);padding-block:calc(var(--spacing) * 3.5);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.form-group{margin-bottom:calc(var(--spacing) * 5)}.badge-success,.badge-danger,.badge-warning,.badge-info{padding-inline:calc(var(--spacing) * 2.5);padding-block:calc(var(--spacing) * 1);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);border-radius:3.40282e38px;align-items:center;display:inline-flex}.badge-success{background-color:var(--color-success-bg);color:var(--color-success-text)}.badge-danger{background-color:var(--color-danger-bg);color:var(--color-danger-text)}.badge-warning{background-color:var(--color-warning-bg);color:var(--color-warning-text)}.badge-info{background-color:var(--color-info-bg);color:var(--color-primary)}.alert-success,.alert-danger,.alert-warning,.alert-info{border-radius:var(--radius-xl);border-style:var(--tw-border-style);padding:calc(var(--spacing) * 4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));border-width:1px}.alert-success{border-color:#05966933}@supports (color:color-mix(in lab, red, red)){.alert-success{border-color:color-mix(in oklab, var(--color-success) 20%, transparent)}}.alert-success{background-color:var(--color-success-bg);color:var(--color-success-text)}.alert-danger{border-color:#e11d4833}@supports (color:color-mix(in lab, red, red)){.alert-danger{border-color:color-mix(in oklab, var(--color-danger) 20%, transparent)}}.alert-danger{background-color:var(--color-danger-bg);color:var(--color-danger-text)}.alert-warning{border-color:var(--color-warning-border);background-color:var(--color-warning-bg);color:var(--color-warning-text)}.alert-info{border-color:#0ea5e933}@supports (color:color-mix(in lab, red, red)){.alert-info{border-color:color-mix(in oklab, var(--color-info) 20%, transparent)}}.alert-info{background-color:var(--color-info-bg);color:var(--color-primary)}.code-block{border-radius:var(--radius-xl);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border);background-color:var(--color-code-bg);padding:calc(var(--spacing) * 4);font-family:var(--font-mono);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-code-text);font-family:JetBrains Mono,Fira Code,monospace;overflow:auto}.panel{margin-bottom:calc(var(--spacing) * 8)}.panel-title{margin-bottom:calc(var(--spacing) * 4);align-items:center;gap:calc(var(--spacing) * 2);padding-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-bold);font-weight:var(--font-weight-bold);font-family:Sora,system-ui,sans-serif;display:flex}.panel-title:before{content:"";height:calc(var(--spacing) * 5);width:calc(var(--spacing) * 1);background:linear-gradient(180deg, var(--color-primary), var(--color-accent));border-radius:3.40282e38px}.card{border-radius:var(--radius-xl);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border);background-color:var(--color-surface);padding:calc(var(--spacing) * 4);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s}@media (min-width:40rem){.card{border-radius:var(--radius-2xl);padding:calc(var(--spacing) * 5)}}.card:hover{border-color:var(--color-border-strong)}.table-responsive{margin-inline:calc(var(--spacing) * -4);overflow-x:auto}@media (min-width:40rem){.table-responsive{margin-inline:calc(var(--spacing) * 0)}}.table-responsive>table{min-width:600px}@media (min-width:40rem){.table-responsive>table{min-width:calc(var(--spacing) * 0)}}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-hide::-webkit-scrollbar{display:none}.manage-tab{align-items:center;gap:calc(var(--spacing) * 2);border-bottom-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));white-space:nowrap;color:var(--color-text-muted);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));--tw-duration:.15s;border-color:#0000;border-bottom-width:2px;flex-shrink:0;text-decoration-line:none;transition-duration:.15s;display:inline-flex}.manage-tab:hover{color:var(--color-text)}.manage-tab-active{align-items:center;gap:calc(var(--spacing) * 2);border-bottom-style:var(--tw-border-style);border-bottom-width:2px;border-color:var(--color-primary);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2.5);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);white-space:nowrap;color:var(--color-primary);flex-shrink:0;text-decoration-line:none;display:inline-flex}.public-overlay{inset:calc(var(--spacing) * 0);z-index:50;background-color:var(--color-surface);opacity:0;pointer-events:none;transition:opacity .25s;position:fixed}.public-overlay.open{opacity:1;pointer-events:auto}.nav-link-active,.nav-link-inactive{border-radius:var(--radius-xl);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;text-decoration-line:none;transition-duration:.15s;display:block}.nav-link-active{background-color:var(--color-primary-subtle);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--color-primary)}.nav-link-inactive{color:var(--color-text-secondary)}.nav-link-inactive:hover{background-color:var(--color-surface-raised);color:var(--color-text)}.sidebar-nav-link-active,.sidebar-nav-link-inactive{align-items:center;gap:calc(var(--spacing) * 3);border-radius:var(--radius-xl);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;--tw-outline-style:none;outline-style:none;text-decoration-line:none;transition-duration:.15s;display:flex}:is(.sidebar-nav-link-active,.sidebar-nav-link-inactive):focus-visible{--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);--tw-ring-color:var(--color-primary-ring)}.sidebar-nav-link-active{background-color:var(--color-primary-subtle);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-primary)}.sidebar-nav-link-inactive{color:var(--color-text-secondary)}.sidebar-nav-link-inactive:hover{background-color:var(--color-surface-raised);color:var(--color-text)}.bg-mesh{z-index:-1;background:var(--color-surface-sunken);position:fixed;inset:0;overflow:hidden}.bg-mesh:before,.bg-mesh:after{content:"";filter:blur(100px);opacity:.15;border-radius:50%;animation:20s ease-in-out infinite mesh-float;position:absolute}.bg-mesh:before{background:var(--color-primary);width:600px;height:600px;top:-10%;right:-10%}.bg-mesh:after{background:var(--color-accent);width:500px;height:500px;animation-direction:reverse;animation-delay:-10s;bottom:-10%;left:-10%}.dark .bg-mesh:before,.dark .bg-mesh:after{opacity:.08}@keyframes mesh-float{0%,to{transform:translate(0)scale(1)}33%{transform:translate(40px,-30px)scale(1.05)}66%{transform:translate(-20px,20px)scale(.95)}}.spinner{margin-left:calc(var(--spacing) * 2);height:calc(var(--spacing) * 4);width:calc(var(--spacing) * 4);animation:var(--animate-spin);border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-border);border-top-color:var(--color-primary);vertical-align:middle;border-radius:3.40282e38px;display:inline-block}.user-dropdown-wrap{position:relative}.user-dropdown-trigger{cursor:pointer;align-items:center;gap:calc(var(--spacing) * 2);border-radius:var(--radius-xl);--tw-border-style:none;padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * 1.5);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;background-color:#0000;border-style:none;transition-duration:.2s;display:flex}.user-dropdown-trigger:hover,.user-dropdown-trigger[aria-expanded=true]{background-color:var(--color-surface-raised)}.user-dropdown{border-radius:var(--radius-xl);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border);background-color:var(--color-surface);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);width:240px;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);opacity:0;pointer-events:none;z-index:100;transition:opacity .18s,transform .18s;position:absolute;top:calc(100% + 6px);right:0;transform:translateY(-4px)scale(.97)}.user-dropdown.open{opacity:1;pointer-events:auto;transform:translateY(0)scale(1)}.app-sidebar .user-dropdown{inset:auto auto calc(100% + 6px) 0;transform:translateY(4px)scale(.97)}.app-sidebar .user-dropdown.open{transform:translateY(0)scale(1)}.dark .user-dropdown{box-shadow:0 0 0 1px #94a3b80f,0 20px 40px -8px #0009}.user-dropdown-header{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-border);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3)}.user-dropdown-body{padding-block:calc(var(--spacing) * 1.5)}.user-dropdown-item{cursor:pointer;align-items:center;gap:calc(var(--spacing) * 2.5);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-text-secondary);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));--tw-duration:.15s;text-decoration-line:none;transition-duration:.15s;display:flex}.user-dropdown-item:hover{background-color:var(--color-surface-raised);color:var(--color-text)}.user-dropdown-divider{margin-block:calc(var(--spacing) * 1.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--color-border)}.user-dropdown-item.danger{color:var(--color-danger)}.user-dropdown-item.danger:hover{background-color:var(--color-danger-bg);color:var(--color-danger)}.dash-card{border-radius:var(--radius-xl);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border);background-color:var(--color-surface);padding:calc(var(--spacing) * 4);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s}@media (min-width:40rem){.dash-card{border-radius:var(--radius-2xl);padding:calc(var(--spacing) * 5)}}.dash-card:hover{border-color:var(--color-border-strong);--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)}.dash-stat{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}@media (min-width:40rem){.dash-stat{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}}.dash-stat{font-family:Sora,system-ui,sans-serif}.dash-label{margin-top:calc(var(--spacing) * 1);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);--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider);color:var(--color-text-muted);text-transform:uppercase}.validation-message{margin-top: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-danger)}.app-layout{flex-direction:column;min-height:100vh;display:flex}.app-sidebar{border-right-style:var(--tw-border-style);border-right-width:1px;border-color:var(--color-border);background-color:var(--color-surface);z-index:40;flex-shrink:0;width:16rem;transition:width .2s,transform .25s;position:fixed;top:0;bottom:0;left:0;transform:translate(-100%)}.app-sidebar.app-sidebar-open{transform:translate(0)}.app-sidebar.app-sidebar-collapsed{width:4rem}.app-sidebar.app-sidebar-collapsed .sidebar-label{display:none}.app-sidebar.app-sidebar-collapsed .sidebar-icon{margin:0 auto}.app-content{flex:1;margin-left:0;transition:margin-left .2s}.app-sidebar-backdrop{inset:calc(var(--spacing) * 0);z-index:30;background-color:#00000080;position:fixed}@supports (color:color-mix(in lab, red, red)){.app-sidebar-backdrop{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.app-sidebar-backdrop{opacity:0;pointer-events:none;transition:opacity .25s}.app-sidebar-backdrop.visible{opacity:1;pointer-events:auto}.app-sidebar-toggle{bottom:calc(var(--spacing) * 4);z-index:50;height:calc(var(--spacing) * 7);width:calc(var(--spacing) * 7);cursor:pointer;border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border);background-color:var(--color-surface);color:var(--color-text-muted);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;border-radius:3.40282e38px;justify-content:center;align-items:center;transition-duration:.2s;position:fixed}@media (hover:hover){.app-sidebar-toggle:hover{background-color:var(--color-surface-raised);color:var(--color-text)}}.app-sidebar-toggle{display:none;left:1rem}.app-mobile-header{top:calc(var(--spacing) * 0);z-index:20;align-items:center;gap:calc(var(--spacing) * 3);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-border);background-color:var(--color-surface);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3);display:flex;position:sticky}@media (min-width:768px){.app-sidebar{transform:translate(0)}.app-content{margin-left:16rem}.app-sidebar-collapsed~.app-content{margin-left:4rem}.app-sidebar-backdrop{display:none}.app-sidebar-toggle{display:flex;left:15rem}.app-sidebar-collapsed~.app-sidebar-toggle{left:3rem}.app-mobile-header,.public-overlay{display:none}}.markdown-content h1{margin-top:calc(var(--spacing) * 6);margin-bottom:calc(var(--spacing) * 3);font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);color:var(--color-text);font-family:Sora,sans-serif}.markdown-content h2{margin-top:calc(var(--spacing) * 5);margin-bottom:calc(var(--spacing) * 2);font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);color:var(--color-text);font-family:Sora,sans-serif}.markdown-content h3{margin-top:calc(var(--spacing) * 4);margin-bottom:calc(var(--spacing) * 2);font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--color-text);font-family:Sora,sans-serif}.markdown-content h4{margin-top:calc(var(--spacing) * 3);margin-bottom:calc(var(--spacing) * 1);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--color-text)}.markdown-content p{margin-bottom:calc(var(--spacing) * 3);--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed);color:var(--color-text-secondary)}.markdown-content ul{margin-bottom:calc(var(--spacing) * 3);padding-left:calc(var(--spacing) * 6);color:var(--color-text-secondary);list-style-type:disc}.markdown-content ol{margin-bottom:calc(var(--spacing) * 3);padding-left:calc(var(--spacing) * 6);color:var(--color-text-secondary);list-style-type:decimal}.markdown-content li{margin-bottom:calc(var(--spacing) * 1)}.markdown-content code{background-color:var(--color-surface-sunken);padding-inline:calc(var(--spacing) * 1.5);padding-block:calc(var(--spacing) * .5);font-family:var(--font-mono);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-text);border-radius:.25rem}.markdown-content pre{margin-bottom:calc(var(--spacing) * 3);border-radius:var(--radius-xl);background-color:var(--color-code-bg);padding:calc(var(--spacing) * 4);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-code-text);overflow:auto}.markdown-content pre code{padding:calc(var(--spacing) * 0);color:var(--color-code-text);background-color:#0000}.markdown-content a{color:var(--color-primary)}@media (hover:hover){.markdown-content a:hover{text-decoration-line:underline}}.markdown-content blockquote{margin-block:calc(var(--spacing) * 3);border-left-style:var(--tw-border-style);border-color:#0596694d;border-left-width:4px}@supports (color:color-mix(in lab, red, red)){.markdown-content blockquote{border-color:color-mix(in oklab, var(--color-primary) 30%, transparent)}}.markdown-content blockquote{padding-left:calc(var(--spacing) * 4);color:var(--color-text-muted);font-style:italic}.markdown-content img{margin-block:calc(var(--spacing) * 3);border-radius:var(--radius-lg);max-width:100%}.markdown-content table{margin-block:calc(var(--spacing) * 3);border-collapse:collapse;width:100%;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.markdown-content th{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-border);padding:calc(var(--spacing) * 2);text-align:left;--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--color-text)}.markdown-content td{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-border);padding:calc(var(--spacing) * 2);color:var(--color-text-secondary)}.markdown-content hr{margin-block:calc(var(--spacing) * 6);border-color:var(--color-border)}.markdown-content>:first-child{margin-top:calc(var(--spacing) * 0)}}@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.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)}.inset-y-0{inset-block:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-1{top:calc(var(--spacing) * 1)}.top-1\/2{top:50%}.top-4{top:calc(var(--spacing) * 4)}.top-\[50\%\]{top:50%}.top-full{top:100%}.right-0{right:calc(var(--spacing) * 0)}.right-1{right:calc(var(--spacing) * 1)}.right-4{right:calc(var(--spacing) * 4)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-0{left:calc(var(--spacing) * 0)}.left-1{left:calc(var(--spacing) * 1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing) * 2)}.left-\[50\%\]{left:50%}.left-full{left:100%}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[100\]{z-index:100}.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-1{margin-inline:calc(var(--spacing) * -1)}.-mx-4{margin-inline:calc(var(--spacing) * -4)}.mx-auto{margin-inline:auto}.my-0\.5{margin-block:calc(var(--spacing) * .5)}.my-1{margin-block:calc(var(--spacing) * 1)}.my-1\.5{margin-block:calc(var(--spacing) * 1.5)}.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-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.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-1\.5{margin-right:calc(var(--spacing) * 1.5)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-0{margin-bottom:calc(var(--spacing) * 0)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.mb-16{margin-bottom:calc(var(--spacing) * 16)}.-ml-1{margin-left:calc(var(--spacing) * -1)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-16{height:calc(var(--spacing) * 16)}.h-36{height:calc(var(--spacing) * 36)}.h-\[18px\]{height:18px}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-30{max-height:calc(var(--spacing) * 30)}.max-h-50{max-height:calc(var(--spacing) * 50)}.max-h-96{max-height:calc(var(--spacing) * 96)}.max-h-\[300px\]{max-height:300px}.max-h-\[500px\]{max-height:500px}.max-h-\[calc\(100vh-2rem\)\]{max-height:calc(100vh - 2rem)}.max-h-screen{max-height:100vh}.min-h-\[60vh\]{min-height:60vh}.min-h-\[80px\]{min-height:80px}.min-h-\[180px\]{min-height:180px}.min-h-\[200px\]{min-height:200px}.min-h-\[220px\]{min-height:220px}.min-h-\[calc\(100vh-12rem\)\]{min-height:calc(100vh - 12rem)}.min-h-\[calc\(100vh-16rem\)\]{min-height:calc(100vh - 16rem)}.min-h-screen{min-height:100vh}.w-0{width:calc(var(--spacing) * 0)}.w-1{width:calc(var(--spacing) * 1)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-11{width:calc(var(--spacing) * 11)}.w-12{width:calc(var(--spacing) * 12)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-36{width:calc(var(--spacing) * 36)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-\[18px\]{width:18px}.w-\[70px\]{width:70px}.w-\[100px\]{width:100px}.w-\[160px\]{width:160px}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-\[140px\]{max-width:140px}.max-w-\[200px\]{max-width:200px}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[160px\]{min-width:160px}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-\[-50\%\]{--tw-translate-x:-50%;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-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-180{rotate:180deg}.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-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-y{resize:vertical}.list-decimal{list-style-type:decimal}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-nowrap{flex-wrap:nowrap}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0{gap:calc(var(--spacing) * 0)}.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-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}:where(.space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 0) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-y-reverse)))}: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-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * 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-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-x-1>: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)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[2px\]{border-radius:2px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.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-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-\[--color-border\]{border-color:--color-border}.border-border{border-color:var(--color-border)}.border-border\/50{border-color:#e2e8f080}@supports (color:color-mix(in lab, red, red)){.border-border\/50{border-color:color-mix(in oklab, var(--color-border) 50%, transparent)}}.border-current\/30{border-color:currentColor}@supports (color:color-mix(in lab, red, red)){.border-current\/30{border-color:color-mix(in oklab, currentcolor 30%, transparent)}}.border-danger{border-color:var(--color-danger)}.border-danger\/20{border-color:#e11d4833}@supports (color:color-mix(in lab, red, red)){.border-danger\/20{border-color:color-mix(in oklab, var(--color-danger) 20%, transparent)}}.border-danger\/30{border-color:#e11d484d}@supports (color:color-mix(in lab, red, red)){.border-danger\/30{border-color:color-mix(in oklab, var(--color-danger) 30%, transparent)}}.border-info\/20{border-color:#0ea5e933}@supports (color:color-mix(in lab, red, red)){.border-info\/20{border-color:color-mix(in oklab, var(--color-info) 20%, transparent)}}.border-primary{border-color:var(--color-primary)}.border-primary\/30{border-color:#0596694d}@supports (color:color-mix(in lab, red, red)){.border-primary\/30{border-color:color-mix(in oklab, var(--color-primary) 30%, transparent)}}.border-red-200{border-color:var(--color-red-200)}.border-success\/20{border-color:#05966933}@supports (color:color-mix(in lab, red, red)){.border-success\/20{border-color:color-mix(in oklab, var(--color-success) 20%, transparent)}}.border-transparent{border-color:#0000}.border-warning-border{border-color:var(--color-warning-border)}.border-t-current{border-top-color:currentColor}.border-t-primary{border-top-color:var(--color-primary)}.border-t-transparent{border-top-color:#0000}.border-l-transparent{border-left-color:#0000}.bg-\[--color-bg\]{background-color:--color-bg}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-border{background-color:var(--color-border)}.bg-border-strong{background-color:var(--color-border-strong)}.bg-danger{background-color:var(--color-danger)}.bg-danger-bg{background-color:var(--color-danger-bg)}.bg-danger\/10{background-color:#e11d481a}@supports (color:color-mix(in lab, red, red)){.bg-danger\/10{background-color:color-mix(in oklab, var(--color-danger) 10%, transparent)}}.bg-dark{background-color:var(--color-dark)}.bg-dark\/60{background-color:#0f172a99}@supports (color:color-mix(in lab, red, red)){.bg-dark\/60{background-color:color-mix(in oklab, var(--color-dark) 60%, transparent)}}.bg-info-bg{background-color:var(--color-info-bg)}.bg-muted{background-color:var(--color-muted)}.bg-primary{background-color:var(--color-primary)}.bg-primary-subtle{background-color:var(--color-primary-subtle)}.bg-primary\/5{background-color:#0596690d}@supports (color:color-mix(in lab, red, red)){.bg-primary\/5{background-color:color-mix(in oklab, var(--color-primary) 5%, transparent)}}.bg-red-50{background-color:var(--color-red-50)}.bg-success-bg{background-color:var(--color-success-bg)}.bg-success\/10{background-color:#0596691a}@supports (color:color-mix(in lab, red, red)){.bg-success\/10{background-color:color-mix(in oklab, var(--color-success) 10%, transparent)}}.bg-surface{background-color:var(--color-surface)}.bg-surface-overlay{background-color:var(--color-surface-overlay)}.bg-surface-raised{background-color:var(--color-surface-raised)}.bg-surface-sunken{background-color:var(--color-surface-sunken)}.bg-transparent{background-color:#0000}.bg-warning-bg{background-color:var(--color-warning-bg)}.bg-white{background-color:var(--color-white)}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-primary{--tw-gradient-from:var(--color-primary);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-accent{--tw-gradient-to:var(--color-accent);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.fill-current{fill:currentColor}.p-0{padding:calc(var(--spacing) * 0)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.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-8{padding:calc(var(--spacing) * 8)}.p-\[1px\]{padding:1px}.px-0{padding-inline:calc(var(--spacing) * 0)}.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)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.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-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-12{padding-block:calc(var(--spacing) * 12)}.pt-0{padding-top:calc(var(--spacing) * 0)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-10{padding-right:calc(var(--spacing) * 10)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.pl-8{padding-left:calc(var(--spacing) * 8)}.pl-10{padding-left:calc(var(--spacing) * 10)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.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-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.8rem\]{font-size:.8rem}.text-\[8rem\]{font-size:8rem}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.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-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-accent{color:var(--color-accent)}.text-border{color:var(--color-border)}.text-current{color:currentColor}.text-danger{color:var(--color-danger)}.text-danger-text{color:var(--color-danger-text)}.text-green-600{color:var(--color-green-600)}.text-info{color:var(--color-info)}.text-muted{color:var(--color-muted)}.text-primary{color:var(--color-primary)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-800{color:var(--color-red-800)}.text-success{color:var(--color-success)}.text-success-text{color:var(--color-success-text)}.text-text{color:var(--color-text)}.text-text-inverse{color:var(--color-text-inverse)}.text-text-muted{color:var(--color-text-muted)}.text-text-muted\/20{color:#94a3b833}@supports (color:color-mix(in lab, red, red)){.text-text-muted\/20{color:color-mix(in oklab, var(--color-text-muted) 20%, transparent)}}.text-text-muted\/50{color:#94a3b880}@supports (color:color-mix(in lab, red, red)){.text-text-muted\/50{color:color-mix(in oklab, var(--color-text-muted) 50%, transparent)}}.text-text-secondary{color:var(--color-text-secondary)}.text-warning-text{color:var(--color-warning-text)}.text-white{color:var(--color-white)}.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,)}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.accent-primary{accent-color:var(--color-primary)}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-90{opacity:.9}.opacity-100{opacity:1}.shadow{--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)}.shadow-\(--shadow-danger\){--tw-shadow:var(--shadow-danger);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\(--shadow-primary\){--tw-shadow:var(--shadow-primary);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--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)}.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-sm{--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)}.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)}.ring-0{--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)}.ring-offset-surface{--tw-ring-offset-color:var(--color-surface)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.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,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.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,display,content-visibility,overlay,pointer-events;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-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-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))}.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-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-all{-webkit-user-select:all;user-select:all}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}.group-hover\:scale-105:is(:where(.group):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:bg-primary\/10:is(:where(.group):hover *){background-color:#0596691a}@supports (color:color-mix(in lab, red, red)){.group-hover\:bg-primary\/10:is(:where(.group):hover *){background-color:color-mix(in oklab, var(--color-primary) 10%, transparent)}}.group-hover\:text-primary:is(:where(.group):hover *){color:var(--color-primary)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/sub\:block:is(:where(.group\/sub):hover *){display:block}}.placeholder\:text-text-muted::placeholder{color:var(--color-text-muted)}.before\:h-5:before{content:var(--tw-content);height:calc(var(--spacing) * 5)}.before\:w-1:before{content:var(--tw-content);width:calc(var(--spacing) * 1)}.before\:rounded-full:before{content:var(--tw-content);border-radius:3.40282e38px}.before\:bg-gradient-to-b:before{content:var(--tw-content);--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.before\:from-primary:before{content:var(--tw-content);--tw-gradient-from:var(--color-primary);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.before\:to-accent:before{content:var(--tw-content);--tw-gradient-to:var(--color-accent);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.before\:content-\[\'\'\]:before{--tw-content:"";content:var(--tw-content)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing) * 0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing) * 1)}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}@media (hover:hover){.hover\:-translate-y-px:hover{--tw-translate-y:-1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:border-border-strong:hover{border-color:var(--color-border-strong)}.hover\:border-primary:hover{border-color:var(--color-primary)}.hover\:border-primary\/30:hover{border-color:#0596694d}@supports (color:color-mix(in lab, red, red)){.hover\:border-primary\/30:hover{border-color:color-mix(in oklab, var(--color-primary) 30%, transparent)}}.hover\:bg-danger-hover:hover{background-color:var(--color-danger-hover)}.hover\:bg-muted\/50:hover{background-color:#94a3b880}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab, var(--color-muted) 50%, transparent)}}.hover\:bg-primary:hover{background-color:var(--color-primary)}.hover\:bg-primary-subtle:hover{background-color:var(--color-primary-subtle)}.hover\:bg-primary\/90:hover{background-color:#059669e6}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, var(--color-primary) 90%, transparent)}}.hover\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\:bg-surface-raised:hover{background-color:var(--color-surface-raised)}.hover\:bg-surface-sunken:hover{background-color:var(--color-surface-sunken)}.hover\:text-danger\/80:hover{color:#e11d48cc}@supports (color:color-mix(in lab, red, red)){.hover\:text-danger\/80:hover{color:color-mix(in oklab, var(--color-danger) 80%, transparent)}}.hover\:text-primary:hover{color:var(--color-primary)}.hover\:text-text:hover{color:var(--color-text)}.hover\:text-text-inverse:hover{color:var(--color-text-inverse)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\(--shadow-danger-hover\):hover{--tw-shadow:var(--shadow-danger-hover);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.hover\:shadow-\(--shadow-primary-hover\):hover{--tw-shadow:var(--shadow-primary-hover);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.hover\:shadow-md:hover{--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)}.hover\:shadow-xl:hover{--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)}}.focus\:border-danger:focus{border-color:var(--color-danger)}.focus\:border-primary:focus{border-color:var(--color-primary)}.focus\:bg-primary:focus{background-color:var(--color-primary)}.focus\:bg-primary-subtle:focus{background-color:var(--color-primary-subtle)}.focus\:bg-surface-raised:focus{background-color:var(--color-surface-raised)}.focus\:text-primary:focus{color:var(--color-primary)}.focus\:text-text:focus{color:var(--color-text)}.focus\:text-text-inverse:focus{color:var(--color-text-inverse)}.focus\:opacity-100:focus{opacity:1}.focus\:ring-4:focus{--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)}.focus\:ring-danger-bg:focus{--tw-ring-color:var(--color-danger-bg)}.focus\:ring-primary-ring:focus{--tw-ring-color:var(--color-primary-ring)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.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-4:focus-visible{--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)}.focus-visible\:ring-primary-ring:focus-visible{--tw-ring-color:var(--color-primary-ring)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:var(--color-ring)}.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}.active\:scale-\[0\.97\]:active{scale:.97}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.aria-selected\:bg-primary-subtle[aria-selected=true]{background-color:var(--color-primary-subtle)}.aria-selected\:bg-primary-subtle\/50[aria-selected=true]{background-color:#0596690a}@supports (color:color-mix(in lab, red, red)){.aria-selected\:bg-primary-subtle\/50[aria-selected=true]{background-color:color-mix(in oklab, var(--color-primary-subtle) 50%, transparent)}}.aria-selected\:text-text[aria-selected=true]{color:var(--color-text)}.aria-selected\:text-text-muted[aria-selected=true]{color:var(--color-text-muted)}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.data-\[active\]\:bg-primary-subtle[data-active]{background-color:var(--color-primary-subtle)}.data-\[active\]\:font-semibold[data-active]{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.data-\[active\]\:text-primary[data-active]{color:var(--color-primary)}.data-\[direction\=vertical\]\:flex-col[data-direction=vertical]{flex-direction:column}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[selected\=true\]\:bg-primary-subtle[data-selected=true]{background-color:var(--color-primary-subtle)}.data-\[selected\=true\]\:text-primary[data-selected=true]{color:var(--color-primary)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=active\]\:bg-surface[data-state=active]{background-color:var(--color-surface)}.data-\[state\=active\]\:text-text[data-state=active]{color:var(--color-text)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:calc(var(--spacing) * 5);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:var(--color-primary)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--color-primary)}.data-\[state\=checked\]\:text-text-inverse[data-state=checked]{color:var(--color-text-inverse)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=on\]\:bg-primary-subtle[data-state=on]{background-color:var(--color-primary-subtle)}.data-\[state\=on\]\:text-primary[data-state=on]{color:var(--color-primary)}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=unchecked\]\:bg-border-strong[data-state=unchecked]{background-color:var(--color-border-strong)}.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}@media (min-width:40rem){.sm\:top-auto{top:auto}.sm\:right-0{right:calc(var(--spacing) * 0)}.sm\:bottom-0{bottom:calc(var(--spacing) * 0)}.sm\:mx-0{margin-inline:calc(var(--spacing) * 0)}.sm\:mt-6{margin-top:calc(var(--spacing) * 6)}.sm\:mb-4{margin-bottom:calc(var(--spacing) * 4)}.sm\:mb-6{margin-bottom:calc(var(--spacing) * 6)}.sm\:mb-8{margin-bottom:calc(var(--spacing) * 8)}.sm\:h-16{height:calc(var(--spacing) * 16)}.sm\:h-48{height:calc(var(--spacing) * 48)}.sm\:min-h-\[200px\]{min-height:200px}.sm\:min-h-\[220px\]{min-height:220px}.sm\:min-h-\[250px\]{min-height:250px}.sm\:min-h-\[280px\]{min-height:280px}.sm\:w-16{width:calc(var(--spacing) * 16)}.sm\:w-48{width:calc(var(--spacing) * 48)}.sm\:w-\[160px\]{width:160px}.sm\:w-\[180px\]{width:180px}.sm\:w-auto{width:auto}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:flex-wrap{flex-wrap:wrap}.sm\:items-center{align-items:center}.sm\:items-end{align-items:flex-end}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-end{justify-content:flex-end}.sm\:gap-0{gap:calc(var(--spacing) * 0)}.sm\:gap-2{gap:calc(var(--spacing) * 2)}.sm\:gap-3{gap:calc(var(--spacing) * 3)}.sm\:gap-4{gap:calc(var(--spacing) * 4)}:where(.sm\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 0) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-y-reverse)))}:where(.sm\: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(.sm\: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)))}:where(.sm\:space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse)))}.sm\:p-3{padding:calc(var(--spacing) * 3)}.sm\:p-5{padding:calc(var(--spacing) * 5)}.sm\:p-6{padding:calc(var(--spacing) * 6)}.sm\:p-8{padding:calc(var(--spacing) * 8)}.sm\:px-0{padding-inline:calc(var(--spacing) * 0)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:py-6{padding-block:calc(var(--spacing) * 6)}.sm\:pt-4{padding-top:calc(var(--spacing) * 4)}.sm\:pt-6{padding-top:calc(var(--spacing) * 6)}.sm\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.sm\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.sm\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}@media (min-width:48rem){.md\:flex{display:flex}.md\:hidden{display:none}.md\:inline-flex{display:inline-flex}.md\:max-w-\[420px\]{max-width:420px}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-\[2fr_3fr\]{grid-template-columns:2fr 3fr}.md\:gap-6{gap:calc(var(--spacing) * 6)}}@media (min-width:64rem){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:gap-6{gap:calc(var(--spacing) * 6)}.lg\:px-8{padding-inline:calc(var(--spacing) * 8)}}@media (min-width:80rem){.xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}.\[\&_\.recharts-cartesian-axis-tick_text\]\:fill-text-muted .recharts-cartesian-axis-tick text{fill:var(--color-text-muted)}.\[\&_\.recharts-cartesian-grid_line\[stroke\]\]\:stroke-border\/50 .recharts-cartesian-grid line[stroke]{stroke:#e2e8f080}@supports (color:color-mix(in lab, red, red)){.\[\&_\.recharts-cartesian-grid_line\[stroke\]\]\:stroke-border\/50 .recharts-cartesian-grid line[stroke]{stroke:color-mix(in oklab, var(--color-border) 50%, transparent)}}.\[\&_\.recharts-curve\.recharts-tooltip-cursor\]\:stroke-border .recharts-curve.recharts-tooltip-cursor{stroke:var(--color-border)}.\[\&_\.recharts-dot\[stroke\]\]\:stroke-transparent .recharts-dot[stroke]{stroke:#0000}.\[\&_\.recharts-layer\]\:outline-none .recharts-layer{--tw-outline-style:none;outline-style:none}.\[\&_\.recharts-polar-grid_\[stroke\]\]\:stroke-border .recharts-polar-grid [stroke]{stroke:var(--color-border)}.\[\&_\.recharts-radial-bar-background-sector\]\:fill-surface-sunken .recharts-radial-bar-background-sector,.\[\&_\.recharts-rectangle\.recharts-tooltip-cursor\]\:fill-surface-sunken .recharts-rectangle.recharts-tooltip-cursor{fill:var(--color-surface-sunken)}.\[\&_\.recharts-reference-line_\[stroke\]\]\:stroke-border .recharts-reference-line [stroke]{stroke:var(--color-border)}.\[\&_\.recharts-sector\]\:outline-none .recharts-sector{--tw-outline-style:none;outline-style:none}.\[\&_\.recharts-sector\[stroke\]\]\:stroke-transparent .recharts-sector[stroke]{stroke:#0000}.\[\&_\.recharts-surface\]\:outline-none .recharts-surface{--tw-outline-style:none;outline-style:none}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing) * 2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing) * 1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group-heading\]\]\:text-text-muted [cmdk-group-heading]{color:var(--color-text-muted)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\:has\(\[aria-selected\]\)\]\:bg-primary-subtle:has([aria-selected]){background-color:var(--color-primary-subtle)}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:first-child:has([aria-selected]){border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:last-child:has([aria-selected]){border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.\[\&\:has\(\[aria-selected\]\.day-outside\)\]\:bg-primary-subtle\/50:has([aria-selected].day-outside){background-color:#0596690a}@supports (color:color-mix(in lab, red, red)){.\[\&\:has\(\[aria-selected\]\.day-outside\)\]\:bg-primary-subtle\/50:has([aria-selected].day-outside){background-color:color-mix(in oklab, var(--color-primary-subtle) 50%, transparent)}}.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing) * 0)}.\[\&\>\[data-slot\=prefix\]\]\:pointer-events-none>[data-slot=prefix]{pointer-events:none}.\[\&\>\[data-slot\=prefix\]\]\:absolute>[data-slot=prefix]{position:absolute}.\[\&\>\[data-slot\=prefix\]\]\:left-3>[data-slot=prefix]{left:calc(var(--spacing) * 3)}.\[\&\>\[data-slot\=prefix\]\]\:text-text-muted>[data-slot=prefix]{color:var(--color-text-muted)}.\[\&\>\[data-slot\=suffix\]\]\:absolute>[data-slot=suffix]{position:absolute}.\[\&\>\[data-slot\=suffix\]\]\:right-3>[data-slot=suffix]{right:calc(var(--spacing) * 3)}.\[\&\>\[data-slot\=suffix\]\]\:text-text-muted>[data-slot=suffix]{color:var(--color-text-muted)}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>svg\]\:h-2\.5>svg{height:calc(var(--spacing) * 2.5)}.\[\&\>svg\]\:h-3>svg{height:calc(var(--spacing) * 3)}.\[\&\>svg\]\:h-3\.5>svg{height:calc(var(--spacing) * 3.5)}.\[\&\>svg\]\:w-2\.5>svg{width:calc(var(--spacing) * 2.5)}.\[\&\>svg\]\:w-3>svg{width:calc(var(--spacing) * 3)}.\[\&\>svg\]\:w-3\.5>svg{width:calc(var(--spacing) * 3.5)}.\[\&\>svg\]\:text-text-muted>svg{color:var(--color-text-muted)}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}[data-direction=vertical] .\[\[data-direction\=vertical\]_\&\]\:h-px{height:1px}[data-direction=vertical] .\[\[data-direction\=vertical\]_\&\]\:w-full{width:100%}[data-direction=vertical] .\[\[data-direction\=vertical\]_\&\]\:after\:left-0:after{content:var(--tw-content);left:calc(var(--spacing) * 0)}[data-direction=vertical] .\[\[data-direction\=vertical\]_\&\]\:after\:h-1:after{content:var(--tw-content);height:calc(var(--spacing) * 1)}[data-direction=vertical] .\[\[data-direction\=vertical\]_\&\]\:after\:w-full:after{content:var(--tw-content);width:100%}[data-direction=vertical] .\[\[data-direction\=vertical\]_\&\]\:after\:translate-x-0:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}[data-direction=vertical] .\[\[data-direction\=vertical\]_\&\]\:after\:-translate-y-1\/2:after{content:var(--tw-content);--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.focus-ring{--tw-outline-style:none;outline-style:none}.focus-ring:focus-visible{border-color:var(--color-primary);--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);--tw-ring-color:var(--color-primary-ring)}.focus-ring-danger{--tw-outline-style:none;outline-style:none}.focus-ring-danger:focus-visible{border-color:var(--color-danger);--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);--tw-ring-color:var(--color-danger-bg)}.gradient-text{color:var(--color-primary)}.gradient-border{position:relative}.gradient-border:before{content:"";border-radius:inherit;background:linear-gradient(135deg, var(--color-primary), var(--color-accent));-webkit-mask-composite:xor;pointer-events:none;-webkit-mask-composite:xor;-webkit-mask-source-type:auto,auto;padding:1px;position:absolute;inset:0;-webkit-mask-image:linear-gradient(#fff 0 0),linear-gradient(#fff 0 0);mask-image:linear-gradient(#fff 0 0),linear-gradient(#fff 0 0);-webkit-mask-position:0 0,0 0;mask-position:0 0,0 0;-webkit-mask-size:auto,auto;mask-size:auto,auto;-webkit-mask-repeat:repeat,repeat;mask-repeat:repeat,repeat;-webkit-mask-clip:content-box,border-box;mask-clip:content-box,border-box;-webkit-mask-origin:content-box,border-box;mask-origin:content-box,border-box;-webkit-mask-composite:xor;mask-composite:exclude;-webkit-mask-source-type:auto,auto;mask-mode:match-source,match-source}}.dark{--color-primary-subtle:#05966926;--color-primary-ring:#05966959;--color-success-bg:#34d3991f;--color-success-text:#6ee7b7;--color-danger-bg:#e11d481f;--color-danger-text:#fda4af;--color-warning-bg:#d977061f;--color-warning-border:#d977064d;--color-warning-text:#fcd34d;--color-info-bg:#0ea5e91f;--color-surface:#0f172a;--color-surface-raised:#1e293b;--color-surface-sunken:#0b1120;--color-surface-overlay:#0f172ad9;--color-text:#f1f5f9;--color-text-secondary:#94a3b8;--color-text-muted:#64748b;--color-text-inverse:#0f172a;--color-border:#1e293b;--color-border-strong:#334155;--color-code-bg:#020617;--color-code-text:#e2e8f0}@media (prefers-reduced-motion:reduce){.app-sidebar,.app-sidebar-backdrop,.app-sidebar-toggle,.public-overlay{transition:none!important}}@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-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@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-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";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}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@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-mono: "JetBrains Mono", "Fira Code", ui-monospace, "SF Mono", Menlo, monospace;
+ --color-red-50: oklch(97.1% 0.013 17.38);
+ --color-red-200: oklch(88.5% 0.062 18.334);
+ --color-red-400: oklch(70.4% 0.191 22.216);
+ --color-red-500: oklch(63.7% 0.237 25.331);
+ --color-red-600: oklch(57.7% 0.245 27.325);
+ --color-red-700: oklch(50.5% 0.213 27.518);
+ --color-red-800: oklch(44.4% 0.177 26.899);
+ --color-amber-400: oklch(82.8% 0.189 84.429);
+ --color-amber-600: oklch(66.6% 0.179 58.318);
+ --color-yellow-600: oklch(68.1% 0.162 75.834);
+ --color-green-400: oklch(79.2% 0.209 151.711);
+ --color-green-600: oklch(62.7% 0.194 149.214);
+ --color-green-700: oklch(52.7% 0.154 150.069);
+ --color-blue-50: oklch(97% 0.014 254.604);
+ --color-blue-100: oklch(93.2% 0.032 255.585);
+ --color-blue-300: oklch(80.9% 0.105 251.813);
+ --color-blue-400: oklch(70.7% 0.165 254.624);
+ --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-gray-50: oklch(98.5% 0.002 247.839);
+ --color-gray-100: oklch(96.7% 0.003 264.542);
+ --color-gray-200: oklch(92.8% 0.006 264.531);
+ --color-gray-300: oklch(87.2% 0.01 258.338);
+ --color-gray-400: oklch(70.7% 0.022 261.325);
+ --color-gray-500: oklch(55.1% 0.027 264.364);
+ --color-gray-600: oklch(44.6% 0.03 256.802);
+ --color-gray-700: oklch(37.3% 0.034 259.733);
+ --color-gray-800: oklch(27.8% 0.033 256.848);
+ --color-black: #000;
+ --color-white: #fff;
+ --spacing: 0.25rem;
+ --container-sm: 24rem;
+ --container-md: 28rem;
+ --container-lg: 32rem;
+ --container-xl: 36rem;
+ --container-2xl: 42rem;
+ --container-3xl: 48rem;
+ --container-4xl: 56rem;
+ --container-6xl: 72rem;
+ --container-7xl: 80rem;
+ --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);
+ --text-5xl: 3rem;
+ --text-5xl--line-height: 1;
+ --text-6xl: 3.75rem;
+ --text-6xl--line-height: 1;
+ --font-weight-normal: 400;
+ --font-weight-medium: 500;
+ --font-weight-semibold: 600;
+ --font-weight-bold: 700;
+ --font-weight-extrabold: 800;
+ --tracking-tight: -0.025em;
+ --tracking-wide: 0.025em;
+ --tracking-wider: 0.05em;
+ --tracking-widest: 0.1em;
+ --leading-tight: 1.25;
+ --leading-relaxed: 1.625;
+ --radius-sm: 0.25rem;
+ --radius-md: 0.375rem;
+ --radius-lg: 0.5rem;
+ --radius-xl: 0.75rem;
+ --radius-2xl: 1rem;
+ --shadow-xs: 0 1px 2px 0 oklch(0.18 0.012 260 / 0.05);
+ --shadow-sm: 0 1px 2px 0 oklch(0.18 0.012 260 / 0.06), 0 1px 3px 0 oklch(0.18 0.012 260 / 0.04);
+ --shadow-md: 0 4px 8px -2px oklch(0.18 0.012 260 / 0.08), 0 2px 4px -2px oklch(0.18 0.012 260 / 0.05);
+ --shadow-lg: 0 12px 24px -8px oklch(0.18 0.012 260 / 0.12), 0 4px 8px -4px oklch(0.18 0.012 260 / 0.06);
+ --shadow-xl: 0 24px 48px -12px oklch(0.18 0.012 260 / 0.18), 0 8px 16px -8px oklch(0.18 0.012 260 / 0.08);
+ --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
+ --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
+ --animate-spin: spin 1s linear infinite;
+ --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
+ --blur-sm: 8px;
+ --blur-lg: 16px;
+ --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-primary: oklch(0.62 0.16 158);
+ --color-primary-hover: oklch(0.55 0.17 158);
+ --color-primary-light: oklch(0.78 0.16 158);
+ --color-primary-subtle: oklch(0.62 0.16 158 / 0.09);
+ --color-primary-ring: oklch(0.62 0.16 158 / 0.32);
+ --color-accent: oklch(0.5 0.11 192);
+ --color-accent-hover: oklch(0.42 0.11 192);
+ --color-success: oklch(0.62 0.16 158);
+ --color-success-light: oklch(0.78 0.16 158);
+ --color-success-bg: oklch(0.62 0.16 158 / 0.1);
+ --color-success-text: oklch(0.48 0.15 158);
+ --color-danger: oklch(0.6 0.21 17);
+ --color-danger-hover: oklch(0.52 0.21 17);
+ --color-danger-bg: oklch(0.6 0.21 17 / 0.09);
+ --color-danger-text: oklch(0.5 0.2 17);
+ --color-warning: oklch(0.72 0.16 60);
+ --color-warning-bg: oklch(0.72 0.16 60 / 0.1);
+ --color-warning-border: oklch(0.72 0.16 60 / 0.25);
+ --color-warning-text: oklch(0.5 0.13 60);
+ --color-info: oklch(0.65 0.16 232);
+ --color-info-bg: oklch(0.65 0.16 232 / 0.1);
+ --color-surface: oklch(1 0 0);
+ --color-surface-raised: oklch(0.985 0.003 80);
+ --color-surface-sunken: oklch(0.965 0.005 80);
+ --color-surface-overlay: oklch(1 0 0 / 0.78);
+ --color-text: oklch(0.22 0.015 250);
+ --color-text-secondary: oklch(0.45 0.015 250);
+ --color-text-muted: oklch(0.62 0.012 250);
+ --color-text-inverse: oklch(1 0 0);
+ --color-border: oklch(0.92 0.005 80);
+ --color-border-strong: oklch(0.85 0.008 80);
+ --color-code-bg: oklch(0.22 0.02 260);
+ --color-code-text: oklch(0.92 0.01 80);
+ --color-dark: oklch(0.18 0.012 260);
+ --color-muted: oklch(0.62 0.012 250);
+ --color-ring: oklch(0.62 0.16 158 / 0.45);
+ --shadow-primary: 0 6px 18px -4px oklch(0.62 0.16 158 / 0.42), 0 2px 4px -2px oklch(0.62 0.16 158 / 0.25);
+ --shadow-primary-hover: 0 10px 28px -6px oklch(0.62 0.16 158 / 0.55), 0 4px 8px -4px oklch(0.62 0.16 158 / 0.3);
+ --shadow-danger: 0 6px 18px -4px oklch(0.6 0.21 17 / 0.32);
+ --shadow-danger-hover: 0 10px 28px -6px oklch(0.6 0.21 17 / 0.45);
+ --font-display: "Fraunces", "Iowan Old Style", "Apple Garamond", "Baskerville", "Times New Roman", Times,
+ "Source Serif Pro", serif;
+ --font-body: "Geist", "Inter", system-ui, -apple-system, sans-serif;
+ --duration-instant: 80ms;
+ --duration-fast: 150ms;
+ --duration-base: 200ms;
+ --duration-moderate: 300ms;
+ --duration-slow: 500ms;
+ --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
+ --z-base: 0;
+ --z-sticky: 10;
+ --z-overlay: 20;
+ --z-sidebar: 40;
+ --z-dropdown: 50;
+ --z-modal: 60;
+ --z-toast: 80;
+ --z-tooltip: 90;
+ --opacity-disabled: 0.45;
+ --opacity-muted: 0.65;
+ --opacity-overlay: 0.78;
+ --opacity-backdrop: 0.5;
+ }
+}
+@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;
+ }
+ ::-webkit-calendar-picker-indicator {
+ line-height: 1;
+ }
+ :-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-auto {
+ pointer-events: auto;
+ }
+ .pointer-events-none {
+ pointer-events: none;
+ }
+ .collapse {
+ visibility: collapse;
+ }
+ .invisible {
+ visibility: hidden;
+ }
+ .visible {
+ visibility: visible;
+ }
+ .sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip-path: inset(50%);
+ white-space: nowrap;
+ border-width: 0;
+ }
+ .absolute {
+ position: absolute;
+ }
+ .fixed {
+ position: fixed;
+ }
+ .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);
+ }
+ .inset-y-0 {
+ inset-block: calc(var(--spacing) * 0);
+ }
+ .start {
+ inset-inline-start: var(--spacing);
+ }
+ .end {
+ inset-inline-end: var(--spacing);
+ }
+ .top-0 {
+ top: calc(var(--spacing) * 0);
+ }
+ .top-1 {
+ top: calc(var(--spacing) * 1);
+ }
+ .top-1\/2 {
+ top: calc(1 / 2 * 100%);
+ }
+ .top-4 {
+ top: calc(var(--spacing) * 4);
+ }
+ .top-20 {
+ top: calc(var(--spacing) * 20);
+ }
+ .top-\[50\%\] {
+ top: 50%;
+ }
+ .top-full {
+ top: 100%;
+ }
+ .right-0 {
+ right: calc(var(--spacing) * 0);
+ }
+ .right-1 {
+ right: calc(var(--spacing) * 1);
+ }
+ .right-4 {
+ right: calc(var(--spacing) * 4);
+ }
+ .bottom-0 {
+ bottom: calc(var(--spacing) * 0);
+ }
+ .bottom-4 {
+ bottom: calc(var(--spacing) * 4);
+ }
+ .left-0 {
+ left: calc(var(--spacing) * 0);
+ }
+ .left-1 {
+ left: calc(var(--spacing) * 1);
+ }
+ .left-1\/2 {
+ left: calc(1 / 2 * 100%);
+ }
+ .left-2 {
+ left: calc(var(--spacing) * 2);
+ }
+ .left-\[50\%\] {
+ left: 50%;
+ }
+ .left-full {
+ left: 100%;
+ }
+ .isolate {
+ isolation: isolate;
+ }
+ .z-10 {
+ z-index: 10;
+ }
+ .z-30 {
+ z-index: 30;
+ }
+ .z-40 {
+ z-index: 40;
+ }
+ .z-50 {
+ z-index: 50;
+ }
+ .z-\[60\] {
+ z-index: 60;
+ }
+ .z-\[90\] {
+ z-index: 90;
+ }
+ .z-\[100\] {
+ z-index: 100;
+ }
+ .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);
+ }
+ .m-2 {
+ margin: calc(var(--spacing) * 2);
+ }
+ .-mx-1 {
+ margin-inline: calc(var(--spacing) * -1);
+ }
+ .-mx-4 {
+ margin-inline: calc(var(--spacing) * -4);
+ }
+ .mx-auto {
+ margin-inline: auto;
+ }
+ .my-0\.5 {
+ margin-block: calc(var(--spacing) * 0.5);
+ }
+ .my-1 {
+ margin-block: calc(var(--spacing) * 1);
+ }
+ .my-1\.5 {
+ margin-block: calc(var(--spacing) * 1.5);
+ }
+ .my-4 {
+ margin-block: calc(var(--spacing) * 4);
+ }
+ .my-6 {
+ margin-block: calc(var(--spacing) * 6);
+ }
+ .my-8 {
+ margin-block: calc(var(--spacing) * 8);
+ }
+ .-mt-4 {
+ margin-top: calc(var(--spacing) * -4);
+ }
+ .mt-0\.5 {
+ margin-top: calc(var(--spacing) * 0.5);
+ }
+ .mt-1 {
+ margin-top: calc(var(--spacing) * 1);
+ }
+ .mt-1\.5 {
+ margin-top: calc(var(--spacing) * 1.5);
+ }
+ .mt-2 {
+ margin-top: calc(var(--spacing) * 2);
+ }
+ .mt-3 {
+ margin-top: calc(var(--spacing) * 3);
+ }
+ .mt-4 {
+ margin-top: calc(var(--spacing) * 4);
+ }
+ .mt-6 {
+ margin-top: calc(var(--spacing) * 6);
+ }
+ .mt-7 {
+ margin-top: calc(var(--spacing) * 7);
+ }
+ .mt-8 {
+ margin-top: calc(var(--spacing) * 8);
+ }
+ .mt-10 {
+ margin-top: calc(var(--spacing) * 10);
+ }
+ .mt-15 {
+ margin-top: calc(var(--spacing) * 15);
+ }
+ .mr-1\.5 {
+ margin-right: calc(var(--spacing) * 1.5);
+ }
+ .mr-2 {
+ margin-right: calc(var(--spacing) * 2);
+ }
+ .\!mb-0 {
+ margin-bottom: calc(var(--spacing) * 0) !important;
+ }
+ .-mb-px {
+ margin-bottom: -1px;
+ }
+ .mb-0 {
+ margin-bottom: calc(var(--spacing) * 0);
+ }
+ .mb-0\.5 {
+ margin-bottom: calc(var(--spacing) * 0.5);
+ }
+ .mb-1 {
+ margin-bottom: calc(var(--spacing) * 1);
+ }
+ .mb-1\.5 {
+ margin-bottom: calc(var(--spacing) * 1.5);
+ }
+ .mb-2 {
+ margin-bottom: calc(var(--spacing) * 2);
+ }
+ .mb-3 {
+ margin-bottom: calc(var(--spacing) * 3);
+ }
+ .mb-4 {
+ margin-bottom: calc(var(--spacing) * 4);
+ }
+ .mb-5 {
+ margin-bottom: calc(var(--spacing) * 5);
+ }
+ .mb-6 {
+ margin-bottom: calc(var(--spacing) * 6);
+ }
+ .mb-7 {
+ margin-bottom: calc(var(--spacing) * 7);
+ }
+ .mb-8 {
+ margin-bottom: calc(var(--spacing) * 8);
+ }
+ .mb-10 {
+ margin-bottom: calc(var(--spacing) * 10);
+ }
+ .mb-14 {
+ margin-bottom: calc(var(--spacing) * 14);
+ }
+ .mb-16 {
+ margin-bottom: calc(var(--spacing) * 16);
+ }
+ .-ml-1 {
+ margin-left: calc(var(--spacing) * -1);
+ }
+ .ml-0 {
+ margin-left: calc(var(--spacing) * 0);
+ }
+ .ml-0\.5 {
+ margin-left: calc(var(--spacing) * 0.5);
+ }
+ .ml-1 {
+ margin-left: calc(var(--spacing) * 1);
+ }
+ .ml-1\.5 {
+ margin-left: calc(var(--spacing) * 1.5);
+ }
+ .ml-2 {
+ margin-left: calc(var(--spacing) * 2);
+ }
+ .ml-4 {
+ margin-left: calc(var(--spacing) * 4);
+ }
+ .ml-7 {
+ margin-left: calc(var(--spacing) * 7);
+ }
+ .ml-auto {
+ margin-left: auto;
+ }
+ .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;
+ }
+ .h-1\.5 {
+ height: calc(var(--spacing) * 1.5);
+ }
+ .h-2 {
+ height: calc(var(--spacing) * 2);
+ }
+ .h-2\.5 {
+ height: calc(var(--spacing) * 2.5);
+ }
+ .h-3 {
+ height: calc(var(--spacing) * 3);
+ }
+ .h-3\.5 {
+ height: calc(var(--spacing) * 3.5);
+ }
+ .h-4 {
+ height: calc(var(--spacing) * 4);
+ }
+ .h-5 {
+ height: calc(var(--spacing) * 5);
+ }
+ .h-6 {
+ height: calc(var(--spacing) * 6);
+ }
+ .h-7 {
+ height: calc(var(--spacing) * 7);
+ }
+ .h-8 {
+ height: calc(var(--spacing) * 8);
+ }
+ .h-9 {
+ height: calc(var(--spacing) * 9);
+ }
+ .h-10 {
+ height: calc(var(--spacing) * 10);
+ }
+ .h-11 {
+ height: calc(var(--spacing) * 11);
+ }
+ .h-12 {
+ height: calc(var(--spacing) * 12);
+ }
+ .h-14 {
+ height: calc(var(--spacing) * 14);
+ }
+ .h-16 {
+ height: calc(var(--spacing) * 16);
+ }
+ .h-36 {
+ height: calc(var(--spacing) * 36);
+ }
+ .h-\[1\.25rem\] {
+ height: 1.25rem;
+ }
+ .h-\[18px\] {
+ height: 18px;
+ }
+ .h-\[var\(--radix-select-trigger-height\)\] {
+ height: var(--radix-select-trigger-height);
+ }
+ .h-full {
+ height: 100%;
+ }
+ .h-px {
+ height: 1px;
+ }
+ .h-screen {
+ height: 100vh;
+ }
+ .max-h-30 {
+ max-height: calc(var(--spacing) * 30);
+ }
+ .max-h-50 {
+ max-height: calc(var(--spacing) * 50);
+ }
+ .max-h-96 {
+ max-height: calc(var(--spacing) * 96);
+ }
+ .max-h-\[300px\] {
+ max-height: 300px;
+ }
+ .max-h-\[500px\] {
+ max-height: 500px;
+ }
+ .max-h-\[calc\(100vh-2rem\)\] {
+ max-height: calc(100vh - 2rem);
+ }
+ .max-h-screen {
+ max-height: 100vh;
+ }
+ .min-h-\[60vh\] {
+ min-height: 60vh;
+ }
+ .min-h-\[80px\] {
+ min-height: 80px;
+ }
+ .min-h-\[180px\] {
+ min-height: 180px;
+ }
+ .min-h-\[200px\] {
+ min-height: 200px;
+ }
+ .min-h-\[220px\] {
+ min-height: 220px;
+ }
+ .min-h-\[calc\(100vh-12rem\)\] {
+ min-height: calc(100vh - 12rem);
+ }
+ .min-h-\[calc\(100vh-16rem\)\] {
+ min-height: calc(100vh - 16rem);
+ }
+ .min-h-screen {
+ min-height: 100vh;
+ }
+ .w-0 {
+ width: calc(var(--spacing) * 0);
+ }
+ .w-1 {
+ width: calc(var(--spacing) * 1);
+ }
+ .w-1\.5 {
+ width: calc(var(--spacing) * 1.5);
+ }
+ .w-2 {
+ width: calc(var(--spacing) * 2);
+ }
+ .w-2\.5 {
+ width: calc(var(--spacing) * 2.5);
+ }
+ .w-3 {
+ width: calc(var(--spacing) * 3);
+ }
+ .w-3\.5 {
+ width: calc(var(--spacing) * 3.5);
+ }
+ .w-3\/4 {
+ width: calc(3 / 4 * 100%);
+ }
+ .w-4 {
+ width: calc(var(--spacing) * 4);
+ }
+ .w-5 {
+ width: calc(var(--spacing) * 5);
+ }
+ .w-6 {
+ width: calc(var(--spacing) * 6);
+ }
+ .w-7 {
+ width: calc(var(--spacing) * 7);
+ }
+ .w-8 {
+ width: calc(var(--spacing) * 8);
+ }
+ .w-9 {
+ width: calc(var(--spacing) * 9);
+ }
+ .w-10 {
+ width: calc(var(--spacing) * 10);
+ }
+ .w-11 {
+ width: calc(var(--spacing) * 11);
+ }
+ .w-12 {
+ width: calc(var(--spacing) * 12);
+ }
+ .w-14 {
+ width: calc(var(--spacing) * 14);
+ }
+ .w-16 {
+ width: calc(var(--spacing) * 16);
+ }
+ .w-20 {
+ width: calc(var(--spacing) * 20);
+ }
+ .w-24 {
+ width: calc(var(--spacing) * 24);
+ }
+ .w-36 {
+ width: calc(var(--spacing) * 36);
+ }
+ .w-64 {
+ width: calc(var(--spacing) * 64);
+ }
+ .w-72 {
+ width: calc(var(--spacing) * 72);
+ }
+ .w-100 {
+ width: calc(var(--spacing) * 100);
+ }
+ .w-\[18px\] {
+ width: 18px;
+ }
+ .w-\[70px\] {
+ width: 70px;
+ }
+ .w-\[100px\] {
+ width: 100px;
+ }
+ .w-\[160px\] {
+ width: 160px;
+ }
+ .w-auto {
+ width: auto;
+ }
+ .w-full {
+ width: 100%;
+ }
+ .w-px {
+ width: 1px;
+ }
+ .max-w-2xl {
+ max-width: var(--container-2xl);
+ }
+ .max-w-3xl {
+ max-width: var(--container-3xl);
+ }
+ .max-w-4xl {
+ max-width: var(--container-4xl);
+ }
+ .max-w-6xl {
+ max-width: var(--container-6xl);
+ }
+ .max-w-7xl {
+ max-width: var(--container-7xl);
+ }
+ .max-w-\[140px\] {
+ max-width: 140px;
+ }
+ .max-w-\[200px\] {
+ max-width: 200px;
+ }
+ .max-w-\[calc\(100vw-2rem\)\] {
+ max-width: calc(100vw - 2rem);
+ }
+ .max-w-full {
+ max-width: 100%;
+ }
+ .max-w-lg {
+ max-width: var(--container-lg);
+ }
+ .max-w-md {
+ max-width: var(--container-md);
+ }
+ .max-w-prose {
+ max-width: 65ch;
+ }
+ .max-w-sm {
+ max-width: var(--container-sm);
+ }
+ .max-w-xl {
+ max-width: var(--container-xl);
+ }
+ .min-w-0 {
+ min-width: calc(var(--spacing) * 0);
+ }
+ .min-w-\[1\.25rem\] {
+ min-width: 1.25rem;
+ }
+ .min-w-\[8rem\] {
+ min-width: 8rem;
+ }
+ .min-w-\[16rem\] {
+ min-width: 16rem;
+ }
+ .min-w-\[160px\] {
+ min-width: 160px;
+ }
+ .min-w-\[180px\] {
+ min-width: 180px;
+ }
+ .min-w-\[640px\] {
+ min-width: 640px;
+ }
+ .min-w-\[var\(--radix-select-trigger-width\)\] {
+ min-width: var(--radix-select-trigger-width);
+ }
+ .flex-1 {
+ flex: 1;
+ }
+ .flex-shrink {
+ flex-shrink: 1;
+ }
+ .flex-shrink-0 {
+ flex-shrink: 0;
+ }
+ .shrink {
+ flex-shrink: 1;
+ }
+ .shrink-0 {
+ flex-shrink: 0;
+ }
+ .flex-grow {
+ flex-grow: 1;
+ }
+ .grow {
+ flex-grow: 1;
+ }
+ .caption-bottom {
+ caption-side: bottom;
+ }
+ .border-collapse {
+ border-collapse: collapse;
+ }
+ .-translate-x-1\/2 {
+ --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);
+ translate: var(--tw-translate-x) var(--tw-translate-y);
+ }
+ .-translate-x-full {
+ --tw-translate-x: -100%;
+ translate: var(--tw-translate-x) var(--tw-translate-y);
+ }
+ .translate-x-0 {
+ --tw-translate-x: calc(var(--spacing) * 0);
+ translate: var(--tw-translate-x) var(--tw-translate-y);
+ }
+ .translate-x-\[-50\%\] {
+ --tw-translate-x: -50%;
+ 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-\[-50\%\] {
+ --tw-translate-y: -50%;
+ translate: var(--tw-translate-x) var(--tw-translate-y);
+ }
+ .rotate-90 {
+ rotate: 90deg;
+ }
+ .rotate-180 {
+ rotate: 180deg;
+ }
+ .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-default {
+ cursor: default;
+ }
+ .cursor-pointer {
+ cursor: pointer;
+ }
+ .touch-none {
+ touch-action: none;
+ }
+ .resize {
+ resize: both;
+ }
+ .resize-y {
+ resize: vertical;
+ }
+ .list-decimal {
+ list-style-type: decimal;
+ }
+ .list-none {
+ list-style-type: none;
+ }
+ .\[appearance\:textfield\] {
+ appearance: textfield;
+ }
+ .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-col-reverse {
+ flex-direction: column-reverse;
+ }
+ .flex-row {
+ flex-direction: row;
+ }
+ .flex-nowrap {
+ flex-wrap: nowrap;
+ }
+ .flex-wrap {
+ flex-wrap: wrap;
+ }
+ .items-baseline {
+ align-items: baseline;
+ }
+ .items-center {
+ align-items: center;
+ }
+ .items-end {
+ align-items: flex-end;
+ }
+ .items-start {
+ align-items: flex-start;
+ }
+ .items-stretch {
+ align-items: stretch;
+ }
+ .justify-between {
+ justify-content: space-between;
+ }
+ .justify-center {
+ justify-content: center;
+ }
+ .justify-end {
+ justify-content: flex-end;
+ }
+ .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-5 {
+ gap: calc(var(--spacing) * 5);
+ }
+ .gap-6 {
+ gap: calc(var(--spacing) * 6);
+ }
+ .gap-8 {
+ gap: calc(var(--spacing) * 8);
+ }
+ .gap-12 {
+ gap: calc(var(--spacing) * 12);
+ }
+ .space-y-0 {
+ :where(& > :not(:last-child)) {
+ --tw-space-y-reverse: 0;
+ margin-block-start: calc(calc(var(--spacing) * 0) * var(--tw-space-y-reverse));
+ margin-block-end: calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-y-reverse)));
+ }
+ }
+ .space-y-0\.5 {
+ :where(& > :not(:last-child)) {
+ --tw-space-y-reverse: 0;
+ margin-block-start: calc(calc(var(--spacing) * 0.5) * var(--tw-space-y-reverse));
+ margin-block-end: calc(calc(var(--spacing) * 0.5) * calc(1 - var(--tw-space-y-reverse)));
+ }
+ }
+ .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-3 {
+ :where(& > :not(:last-child)) {
+ --tw-space-y-reverse: 0;
+ margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));
+ margin-block-end: calc(calc(var(--spacing) * 3) * 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-5 {
+ :where(& > :not(:last-child)) {
+ --tw-space-y-reverse: 0;
+ margin-block-start: calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));
+ margin-block-end: calc(calc(var(--spacing) * 5) * 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)));
+ }
+ }
+ .space-y-8 {
+ :where(& > :not(:last-child)) {
+ --tw-space-y-reverse: 0;
+ margin-block-start: calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));
+ margin-block-end: calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)));
+ }
+ }
+ .gap-x-6 {
+ column-gap: calc(var(--spacing) * 6);
+ }
+ .space-x-1 {
+ :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)));
+ }
+ }
+ .gap-y-2 {
+ row-gap: calc(var(--spacing) * 2);
+ }
+ .divide-y {
+ :where(& > :not(:last-child)) {
+ --tw-divide-y-reverse: 0;
+ border-bottom-style: var(--tw-border-style);
+ border-top-style: var(--tw-border-style);
+ border-top-width: calc(1px * var(--tw-divide-y-reverse));
+ border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
+ }
+ }
+ .divide-gray-200 {
+ :where(& > :not(:last-child)) {
+ border-color: var(--color-gray-200);
+ }
+ }
+ .truncate {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+ .overflow-auto {
+ overflow: auto;
+ }
+ .overflow-hidden {
+ overflow: hidden;
+ }
+ .overflow-visible {
+ overflow: visible;
+ }
+ .overflow-x-auto {
+ overflow-x: auto;
+ }
+ .overflow-x-hidden {
+ overflow-x: hidden;
+ }
+ .overflow-y-auto {
+ overflow-y: auto;
+ }
+ .rounded {
+ border-radius: 0.25rem;
+ }
+ .rounded-2xl {
+ border-radius: var(--radius-2xl);
+ }
+ .rounded-\[2px\] {
+ border-radius: 2px;
+ }
+ .rounded-\[18px\] {
+ border-radius: 18px;
+ }
+ .rounded-\[inherit\] {
+ border-radius: inherit;
+ }
+ .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-none {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ }
+ .rounded-r-none {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ }
+ .border {
+ border-style: var(--tw-border-style);
+ border-width: 1px;
+ }
+ .border-0 {
+ border-style: var(--tw-border-style);
+ border-width: 0px;
+ }
+ .border-2 {
+ border-style: var(--tw-border-style);
+ border-width: 2px;
+ }
+ .border-\[1\.5px\] {
+ border-style: var(--tw-border-style);
+ border-width: 1.5px;
+ }
+ .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-b-2 {
+ border-bottom-style: var(--tw-border-style);
+ border-bottom-width: 2px;
+ }
+ .border-l {
+ border-left-style: var(--tw-border-style);
+ border-left-width: 1px;
+ }
+ .border-l-0 {
+ border-left-style: var(--tw-border-style);
+ border-left-width: 0px;
+ }
+ .border-l-2 {
+ border-left-style: var(--tw-border-style);
+ border-left-width: 2px;
+ }
+ .border-dashed {
+ --tw-border-style: dashed;
+ border-style: dashed;
+ }
+ .border-none {
+ --tw-border-style: none;
+ border-style: none;
+ }
+ .border-\[--color-border\] {
+ border-color: --color-border;
+ }
+ .border-accent {
+ border-color: var(--color-accent);
+ }
+ .border-border {
+ border-color: var(--color-border);
+ }
+ .border-border-strong {
+ border-color: var(--color-border-strong);
+ }
+ .border-border\/50 {
+ border-color: color-mix(in srgb, oklch(0.92 0.005 80) 50%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, var(--color-border) 50%, transparent);
+ }
+ }
+ .border-current\/30 {
+ border-color: currentcolor;
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, currentcolor 30%, transparent);
+ }
+ }
+ .border-danger {
+ border-color: var(--color-danger);
+ }
+ .border-danger\/20 {
+ border-color: color-mix(in srgb, oklch(0.6 0.21 17) 20%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, var(--color-danger) 20%, transparent);
+ }
+ }
+ .border-danger\/30 {
+ border-color: color-mix(in srgb, oklch(0.6 0.21 17) 30%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, var(--color-danger) 30%, transparent);
+ }
+ }
+ .border-gray-200 {
+ border-color: var(--color-gray-200);
+ }
+ .border-gray-300 {
+ border-color: var(--color-gray-300);
+ }
+ .border-info\/20 {
+ border-color: color-mix(in srgb, oklch(0.65 0.16 232) 20%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, var(--color-info) 20%, transparent);
+ }
+ }
+ .border-primary {
+ border-color: var(--color-primary);
+ }
+ .border-primary\/30 {
+ border-color: color-mix(in srgb, oklch(0.62 0.16 158) 30%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, var(--color-primary) 30%, transparent);
+ }
+ }
+ .border-red-200 {
+ border-color: var(--color-red-200);
+ }
+ .border-success\/20 {
+ border-color: color-mix(in srgb, oklch(0.62 0.16 158) 20%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, var(--color-success) 20%, transparent);
+ }
+ }
+ .border-transparent {
+ border-color: transparent;
+ }
+ .border-warning-border {
+ border-color: var(--color-warning-border);
+ }
+ .border-warning\/30 {
+ border-color: color-mix(in srgb, oklch(0.72 0.16 60) 30%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, var(--color-warning) 30%, transparent);
+ }
+ }
+ .border-t-current {
+ border-top-color: currentcolor;
+ }
+ .border-t-primary {
+ border-top-color: var(--color-primary);
+ }
+ .border-t-transparent {
+ border-top-color: transparent;
+ }
+ .border-l-transparent {
+ border-left-color: transparent;
+ }
+ .bg-\[--color-bg\] {
+ background-color: --color-bg;
+ }
+ .bg-black\/50 {
+ 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);
+ }
+ }
+ .bg-blue-50 {
+ background-color: var(--color-blue-50);
+ }
+ .bg-blue-100 {
+ background-color: var(--color-blue-100);
+ }
+ .bg-blue-600 {
+ background-color: var(--color-blue-600);
+ }
+ .bg-border {
+ background-color: var(--color-border);
+ }
+ .bg-border-strong {
+ background-color: var(--color-border-strong);
+ }
+ .bg-code-bg {
+ background-color: var(--color-code-bg);
+ }
+ .bg-danger {
+ background-color: var(--color-danger);
+ }
+ .bg-danger-bg {
+ background-color: var(--color-danger-bg);
+ }
+ .bg-danger\/10 {
+ background-color: color-mix(in srgb, oklch(0.6 0.21 17) 10%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-danger) 10%, transparent);
+ }
+ }
+ .bg-dark {
+ background-color: var(--color-dark);
+ }
+ .bg-dark\/60 {
+ background-color: color-mix(in srgb, oklch(0.18 0.012 260) 60%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-dark) 60%, transparent);
+ }
+ }
+ .bg-gray-50 {
+ background-color: var(--color-gray-50);
+ }
+ .bg-gray-100 {
+ background-color: var(--color-gray-100);
+ }
+ .bg-green-600 {
+ background-color: var(--color-green-600);
+ }
+ .bg-info-bg {
+ background-color: var(--color-info-bg);
+ }
+ .bg-muted {
+ background-color: var(--color-muted);
+ }
+ .bg-primary {
+ background-color: var(--color-primary);
+ }
+ .bg-primary-subtle {
+ background-color: var(--color-primary-subtle);
+ }
+ .bg-primary\/5 {
+ background-color: color-mix(in srgb, oklch(0.62 0.16 158) 5%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-primary) 5%, transparent);
+ }
+ }
+ .bg-red-50 {
+ background-color: var(--color-red-50);
+ }
+ .bg-red-600 {
+ background-color: var(--color-red-600);
+ }
+ .bg-success-bg {
+ background-color: var(--color-success-bg);
+ }
+ .bg-success\/10 {
+ background-color: color-mix(in srgb, oklch(0.62 0.16 158) 10%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-success) 10%, transparent);
+ }
+ }
+ .bg-surface {
+ background-color: var(--color-surface);
+ }
+ .bg-surface-overlay {
+ background-color: var(--color-surface-overlay);
+ }
+ .bg-surface-raised {
+ background-color: var(--color-surface-raised);
+ }
+ .bg-surface-sunken {
+ background-color: var(--color-surface-sunken);
+ }
+ .bg-surface\/80 {
+ background-color: color-mix(in srgb, oklch(1 0 0) 80%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-surface) 80%, transparent);
+ }
+ }
+ .bg-transparent {
+ background-color: transparent;
+ }
+ .bg-warning-bg {
+ background-color: var(--color-warning-bg);
+ }
+ .bg-white {
+ background-color: var(--color-white);
+ }
+ .bg-gradient-to-br {
+ --tw-gradient-position: to bottom right in oklab;
+ background-image: linear-gradient(var(--tw-gradient-stops));
+ }
+ .from-primary {
+ --tw-gradient-from: var(--color-primary);
+ --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
+ }
+ .to-accent {
+ --tw-gradient-to: var(--color-accent);
+ --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
+ }
+ .fill-current {
+ fill: currentcolor;
+ }
+ .p-0 {
+ padding: calc(var(--spacing) * 0);
+ }
+ .p-1 {
+ padding: calc(var(--spacing) * 1);
+ }
+ .p-1\.5 {
+ padding: calc(var(--spacing) * 1.5);
+ }
+ .p-2 {
+ padding: calc(var(--spacing) * 2);
+ }
+ .p-2\.5 {
+ padding: calc(var(--spacing) * 2.5);
+ }
+ .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-8 {
+ padding: calc(var(--spacing) * 8);
+ }
+ .p-\[1px\] {
+ padding: 1px;
+ }
+ .px-0 {
+ padding-inline: calc(var(--spacing) * 0);
+ }
+ .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);
+ }
+ .px-2\.5 {
+ padding-inline: calc(var(--spacing) * 2.5);
+ }
+ .px-3 {
+ padding-inline: calc(var(--spacing) * 3);
+ }
+ .px-3\.5 {
+ padding-inline: calc(var(--spacing) * 3.5);
+ }
+ .px-4 {
+ padding-inline: calc(var(--spacing) * 4);
+ }
+ .px-5 {
+ padding-inline: calc(var(--spacing) * 5);
+ }
+ .px-6 {
+ padding-inline: calc(var(--spacing) * 6);
+ }
+ .px-8 {
+ padding-inline: calc(var(--spacing) * 8);
+ }
+ .py-0\.5 {
+ padding-block: calc(var(--spacing) * 0.5);
+ }
+ .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-2\.5 {
+ padding-block: calc(var(--spacing) * 2.5);
+ }
+ .py-3 {
+ padding-block: calc(var(--spacing) * 3);
+ }
+ .py-3\.5 {
+ padding-block: calc(var(--spacing) * 3.5);
+ }
+ .py-4 {
+ padding-block: calc(var(--spacing) * 4);
+ }
+ .py-6 {
+ padding-block: calc(var(--spacing) * 6);
+ }
+ .py-8 {
+ padding-block: calc(var(--spacing) * 8);
+ }
+ .py-10 {
+ padding-block: calc(var(--spacing) * 10);
+ }
+ .py-12 {
+ padding-block: calc(var(--spacing) * 12);
+ }
+ .py-20 {
+ padding-block: calc(var(--spacing) * 20);
+ }
+ .pt-0 {
+ padding-top: calc(var(--spacing) * 0);
+ }
+ .pt-1 {
+ padding-top: calc(var(--spacing) * 1);
+ }
+ .pt-2 {
+ padding-top: calc(var(--spacing) * 2);
+ }
+ .pt-3 {
+ padding-top: calc(var(--spacing) * 3);
+ }
+ .pt-4 {
+ padding-top: calc(var(--spacing) * 4);
+ }
+ .pt-8 {
+ padding-top: calc(var(--spacing) * 8);
+ }
+ .pt-10 {
+ padding-top: calc(var(--spacing) * 10);
+ }
+ .pt-12 {
+ padding-top: calc(var(--spacing) * 12);
+ }
+ .pt-32 {
+ padding-top: calc(var(--spacing) * 32);
+ }
+ .pr-2 {
+ padding-right: calc(var(--spacing) * 2);
+ }
+ .pr-10 {
+ padding-right: calc(var(--spacing) * 10);
+ }
+ .pb-2 {
+ padding-bottom: calc(var(--spacing) * 2);
+ }
+ .pb-3 {
+ padding-bottom: calc(var(--spacing) * 3);
+ }
+ .pb-4 {
+ padding-bottom: calc(var(--spacing) * 4);
+ }
+ .pb-8 {
+ padding-bottom: calc(var(--spacing) * 8);
+ }
+ .pb-20 {
+ padding-bottom: calc(var(--spacing) * 20);
+ }
+ .pb-32 {
+ padding-bottom: calc(var(--spacing) * 32);
+ }
+ .pl-4 {
+ padding-left: calc(var(--spacing) * 4);
+ }
+ .pl-5 {
+ padding-left: calc(var(--spacing) * 5);
+ }
+ .pl-8 {
+ padding-left: calc(var(--spacing) * 8);
+ }
+ .pl-10 {
+ padding-left: calc(var(--spacing) * 10);
+ }
+ .text-center {
+ text-align: center;
+ }
+ .text-left {
+ text-align: left;
+ }
+ .text-right {
+ text-align: right;
+ }
+ .align-middle {
+ vertical-align: middle;
+ }
+ .font-display {
+ font-family: var(--font-display);
+ }
+ .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-4xl {
+ font-size: var(--text-4xl);
+ line-height: var(--tw-leading, var(--text-4xl--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-xl {
+ font-size: var(--text-xl);
+ line-height: var(--tw-leading, var(--text-xl--line-height));
+ }
+ .text-xs {
+ font-size: var(--text-xs);
+ line-height: var(--tw-leading, var(--text-xs--line-height));
+ }
+ .text-\[0\.6rem\] {
+ font-size: 0.6rem;
+ }
+ .text-\[0\.8rem\] {
+ font-size: 0.8rem;
+ }
+ .text-\[0\.65rem\] {
+ font-size: 0.65rem;
+ }
+ .text-\[8rem\] {
+ font-size: 8rem;
+ }
+ .leading-none {
+ --tw-leading: 1;
+ line-height: 1;
+ }
+ .leading-relaxed {
+ --tw-leading: var(--leading-relaxed);
+ line-height: var(--leading-relaxed);
+ }
+ .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-extrabold {
+ --tw-font-weight: var(--font-weight-extrabold);
+ font-weight: var(--font-weight-extrabold);
+ }
+ .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-wide {
+ --tw-tracking: var(--tracking-wide);
+ letter-spacing: var(--tracking-wide);
+ }
+ .tracking-wider {
+ --tw-tracking: var(--tracking-wider);
+ letter-spacing: var(--tracking-wider);
+ }
+ .tracking-widest {
+ --tw-tracking: var(--tracking-widest);
+ letter-spacing: var(--tracking-widest);
+ }
+ .break-words {
+ overflow-wrap: break-word;
+ }
+ .break-all {
+ word-break: break-all;
+ }
+ .whitespace-nowrap {
+ white-space: nowrap;
+ }
+ .whitespace-pre-wrap {
+ white-space: pre-wrap;
+ }
+ .text-accent {
+ color: var(--color-accent);
+ }
+ .text-amber-600 {
+ color: var(--color-amber-600);
+ }
+ .text-blue-500 {
+ color: var(--color-blue-500);
+ }
+ .text-blue-600 {
+ color: var(--color-blue-600);
+ }
+ .text-blue-800 {
+ color: var(--color-blue-800);
+ }
+ .text-border {
+ color: var(--color-border);
+ }
+ .text-code-text {
+ color: var(--color-code-text);
+ }
+ .text-current {
+ color: currentcolor;
+ }
+ .text-danger {
+ color: var(--color-danger);
+ }
+ .text-danger-text {
+ color: var(--color-danger-text);
+ }
+ .text-gray-500 {
+ color: var(--color-gray-500);
+ }
+ .text-gray-600 {
+ color: var(--color-gray-600);
+ }
+ .text-gray-700 {
+ color: var(--color-gray-700);
+ }
+ .text-green-600 {
+ color: var(--color-green-600);
+ }
+ .text-info {
+ color: var(--color-info);
+ }
+ .text-muted {
+ color: var(--color-muted);
+ }
+ .text-primary {
+ color: var(--color-primary);
+ }
+ .text-red-500 {
+ color: var(--color-red-500);
+ }
+ .text-red-600 {
+ color: var(--color-red-600);
+ }
+ .text-red-800 {
+ color: var(--color-red-800);
+ }
+ .text-success {
+ color: var(--color-success);
+ }
+ .text-success-text {
+ color: var(--color-success-text);
+ }
+ .text-text {
+ color: var(--color-text);
+ }
+ .text-text-inverse {
+ color: var(--color-text-inverse);
+ }
+ .text-text-muted {
+ color: var(--color-text-muted);
+ }
+ .text-text-muted\/20 {
+ color: color-mix(in srgb, oklch(0.62 0.012 250) 20%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ color: color-mix(in oklab, var(--color-text-muted) 20%, transparent);
+ }
+ }
+ .text-text-muted\/50 {
+ color: color-mix(in srgb, oklch(0.62 0.012 250) 50%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ color: color-mix(in oklab, var(--color-text-muted) 50%, transparent);
+ }
+ }
+ .text-text-secondary {
+ color: var(--color-text-secondary);
+ }
+ .text-warning {
+ color: var(--color-warning);
+ }
+ .text-warning-text {
+ color: var(--color-warning-text);
+ }
+ .text-white {
+ color: var(--color-white);
+ }
+ .text-white\/80 {
+ color: color-mix(in srgb, #fff 80%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ color: color-mix(in oklab, var(--color-white) 80%, transparent);
+ }
+ }
+ .text-yellow-600 {
+ color: var(--color-yellow-600);
+ }
+ .lowercase {
+ text-transform: lowercase;
+ }
+ .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,);
+ }
+ .no-underline {
+ text-decoration-line: none;
+ }
+ .underline {
+ text-decoration-line: underline;
+ }
+ .placeholder-text-muted {
+ &::placeholder {
+ color: var(--color-text-muted);
+ }
+ }
+ .accent-primary {
+ accent-color: var(--color-primary);
+ }
+ .opacity-0 {
+ opacity: 0%;
+ }
+ .opacity-40 {
+ opacity: 40%;
+ }
+ .opacity-50 {
+ opacity: 50%;
+ }
+ .opacity-60 {
+ opacity: 60%;
+ }
+ .opacity-90 {
+ opacity: 90%;
+ }
+ .opacity-100 {
+ opacity: 100%;
+ }
+ .shadow {
+ --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);
+ }
+ .shadow-\(--shadow-danger\) {
+ --tw-shadow: var(--shadow-danger);
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
+ }
+ .shadow-\(--shadow-primary\) {
+ --tw-shadow: var(--shadow-primary);
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
+ }
+ .shadow-lg {
+ --tw-shadow: 0 12px 24px -8px var(--tw-shadow-color, oklch(0.18 0.012 260 / 0.12)), 0 4px 8px -4px var(--tw-shadow-color, oklch(0.18 0.012 260 / 0.06));
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
+ }
+ .shadow-md {
+ --tw-shadow: 0 4px 8px -2px var(--tw-shadow-color, oklch(0.18 0.012 260 / 0.08)), 0 2px 4px -2px var(--tw-shadow-color, oklch(0.18 0.012 260 / 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);
+ }
+ .shadow-sm {
+ --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, oklch(0.18 0.012 260 / 0.06)), 0 1px 3px 0 var(--tw-shadow-color, oklch(0.18 0.012 260 / 0.04));
+ 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 24px 48px -12px var(--tw-shadow-color, oklch(0.18 0.012 260 / 0.18)), 0 8px 16px -8px var(--tw-shadow-color, oklch(0.18 0.012 260 / 0.08));
+ 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-0 {
+ --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);
+ }
+ .ring-offset-surface {
+ --tw-ring-offset-color: var(--color-surface);
+ }
+ .outline {
+ outline-style: var(--tw-outline-style);
+ outline-width: 1px;
+ }
+ .blur {
+ --tw-blur: blur(8px);
+ 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,);
+ }
+ .backdrop-blur-lg {
+ --tw-backdrop-blur: blur(var(--blur-lg));
+ -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
+ backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
+ }
+ .backdrop-blur-sm {
+ --tw-backdrop-blur: blur(var(--blur-sm));
+ -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
+ backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
+ }
+ .backdrop-filter {
+ -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
+ backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
+ }
+ .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, display, content-visibility, overlay, pointer-events;
+ 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-opacity {
+ transition-property: opacity;
+ 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-150 {
+ --tw-duration: 150ms;
+ transition-duration: 150ms;
+ }
+ .duration-200 {
+ --tw-duration: 200ms;
+ transition-duration: 200ms;
+ }
+ .duration-300 {
+ --tw-duration: 300ms;
+ transition-duration: 300ms;
+ }
+ .duration-500 {
+ --tw-duration: 500ms;
+ transition-duration: 500ms;
+ }
+ .ease-in-out {
+ --tw-ease: var(--ease-in-out);
+ transition-timing-function: var(--ease-in-out);
+ }
+ .ease-out {
+ --tw-ease: var(--ease-out);
+ transition-timing-function: var(--ease-out);
+ }
+ .outline-none {
+ --tw-outline-style: none;
+ outline-style: none;
+ }
+ .select-all {
+ -webkit-user-select: all;
+ user-select: all;
+ }
+ .select-none {
+ -webkit-user-select: none;
+ user-select: none;
+ }
+ .group-hover\:block {
+ &:is(:where(.group):hover *) {
+ @media (hover: hover) {
+ display: block;
+ }
+ }
+ }
+ .group-hover\:scale-105 {
+ &:is(:where(.group):hover *) {
+ @media (hover: hover) {
+ --tw-scale-x: 105%;
+ --tw-scale-y: 105%;
+ --tw-scale-z: 105%;
+ scale: var(--tw-scale-x) var(--tw-scale-y);
+ }
+ }
+ }
+ .group-hover\:bg-primary\/10 {
+ &:is(:where(.group):hover *) {
+ @media (hover: hover) {
+ background-color: color-mix(in srgb, oklch(0.62 0.16 158) 10%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-primary) 10%, transparent);
+ }
+ }
+ }
+ }
+ .group-hover\:text-primary {
+ &:is(:where(.group):hover *) {
+ @media (hover: hover) {
+ color: var(--color-primary);
+ }
+ }
+ }
+ .group-hover\:opacity-100 {
+ &:is(:where(.group):hover *) {
+ @media (hover: hover) {
+ opacity: 100%;
+ }
+ }
+ }
+ .group-hover\/sub\:block {
+ &:is(:where(.group\/sub):hover *) {
+ @media (hover: hover) {
+ display: block;
+ }
+ }
+ }
+ .placeholder\:text-text-muted {
+ &::placeholder {
+ color: var(--color-text-muted);
+ }
+ }
+ .before\:h-5 {
+ &::before {
+ content: var(--tw-content);
+ height: calc(var(--spacing) * 5);
+ }
+ }
+ .before\:w-1 {
+ &::before {
+ content: var(--tw-content);
+ width: calc(var(--spacing) * 1);
+ }
+ }
+ .before\:rounded-full {
+ &::before {
+ content: var(--tw-content);
+ border-radius: calc(infinity * 1px);
+ }
+ }
+ .before\:bg-gradient-to-b {
+ &::before {
+ content: var(--tw-content);
+ --tw-gradient-position: to bottom in oklab;
+ background-image: linear-gradient(var(--tw-gradient-stops));
+ }
+ }
+ .before\:from-primary {
+ &::before {
+ content: var(--tw-content);
+ --tw-gradient-from: var(--color-primary);
+ --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
+ }
+ }
+ .before\:to-accent {
+ &::before {
+ content: var(--tw-content);
+ --tw-gradient-to: var(--color-accent);
+ --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
+ }
+ }
+ .before\:content-\[\'\'\] {
+ &::before {
+ --tw-content: '';
+ content: var(--tw-content);
+ }
+ }
+ .after\:absolute {
+ &::after {
+ content: var(--tw-content);
+ position: absolute;
+ }
+ }
+ .after\:inset-y-0 {
+ &::after {
+ content: var(--tw-content);
+ inset-block: calc(var(--spacing) * 0);
+ }
+ }
+ .after\:left-1\/2 {
+ &::after {
+ content: var(--tw-content);
+ left: calc(1 / 2 * 100%);
+ }
+ }
+ .after\:w-1 {
+ &::after {
+ content: var(--tw-content);
+ width: calc(var(--spacing) * 1);
+ }
+ }
+ .after\:-translate-x-1\/2 {
+ &::after {
+ content: var(--tw-content);
+ --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);
+ translate: var(--tw-translate-x) var(--tw-translate-y);
+ }
+ }
+ .last\:border-0 {
+ &:last-child {
+ border-style: var(--tw-border-style);
+ border-width: 0px;
+ }
+ }
+ .last\:border-b-0 {
+ &:last-child {
+ border-bottom-style: var(--tw-border-style);
+ border-bottom-width: 0px;
+ }
+ }
+ .focus-within\:relative {
+ &:focus-within {
+ position: relative;
+ }
+ }
+ .focus-within\:z-20 {
+ &:focus-within {
+ z-index: 20;
+ }
+ }
+ .hover\:-translate-y-px {
+ &:hover {
+ @media (hover: hover) {
+ --tw-translate-y: -1px;
+ translate: var(--tw-translate-x) var(--tw-translate-y);
+ }
+ }
+ }
+ .hover\:border-border {
+ &:hover {
+ @media (hover: hover) {
+ border-color: var(--color-border);
+ }
+ }
+ }
+ .hover\:border-border-strong {
+ &:hover {
+ @media (hover: hover) {
+ border-color: var(--color-border-strong);
+ }
+ }
+ }
+ .hover\:border-primary {
+ &:hover {
+ @media (hover: hover) {
+ border-color: var(--color-primary);
+ }
+ }
+ }
+ .hover\:border-primary\/30 {
+ &:hover {
+ @media (hover: hover) {
+ border-color: color-mix(in srgb, oklch(0.62 0.16 158) 30%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, var(--color-primary) 30%, transparent);
+ }
+ }
+ }
+ }
+ .hover\:bg-blue-700 {
+ &:hover {
+ @media (hover: hover) {
+ background-color: var(--color-blue-700);
+ }
+ }
+ }
+ .hover\:bg-danger-hover {
+ &:hover {
+ @media (hover: hover) {
+ background-color: var(--color-danger-hover);
+ }
+ }
+ }
+ .hover\:bg-gray-50 {
+ &:hover {
+ @media (hover: hover) {
+ background-color: var(--color-gray-50);
+ }
+ }
+ }
+ .hover\:bg-gray-100 {
+ &:hover {
+ @media (hover: hover) {
+ background-color: var(--color-gray-100);
+ }
+ }
+ }
+ .hover\:bg-green-700 {
+ &:hover {
+ @media (hover: hover) {
+ background-color: var(--color-green-700);
+ }
+ }
+ }
+ .hover\:bg-muted\/50 {
+ &:hover {
+ @media (hover: hover) {
+ background-color: color-mix(in srgb, oklch(0.62 0.012 250) 50%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-muted) 50%, transparent);
+ }
+ }
+ }
+ }
+ .hover\:bg-primary {
+ &:hover {
+ @media (hover: hover) {
+ background-color: var(--color-primary);
+ }
+ }
+ }
+ .hover\:bg-primary-hover {
+ &:hover {
+ @media (hover: hover) {
+ background-color: var(--color-primary-hover);
+ }
+ }
+ }
+ .hover\:bg-primary-subtle {
+ &:hover {
+ @media (hover: hover) {
+ background-color: var(--color-primary-subtle);
+ }
+ }
+ }
+ .hover\:bg-primary\/90 {
+ &:hover {
+ @media (hover: hover) {
+ background-color: color-mix(in srgb, oklch(0.62 0.16 158) 90%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-primary) 90%, transparent);
+ }
+ }
+ }
+ }
+ .hover\:bg-red-50 {
+ &:hover {
+ @media (hover: hover) {
+ background-color: var(--color-red-50);
+ }
+ }
+ }
+ .hover\:bg-red-700 {
+ &:hover {
+ @media (hover: hover) {
+ background-color: var(--color-red-700);
+ }
+ }
+ }
+ .hover\:bg-surface-raised {
+ &:hover {
+ @media (hover: hover) {
+ background-color: var(--color-surface-raised);
+ }
+ }
+ }
+ .hover\:bg-surface-sunken {
+ &:hover {
+ @media (hover: hover) {
+ background-color: var(--color-surface-sunken);
+ }
+ }
+ }
+ .hover\:text-blue-800 {
+ &:hover {
+ @media (hover: hover) {
+ color: var(--color-blue-800);
+ }
+ }
+ }
+ .hover\:text-danger\/80 {
+ &:hover {
+ @media (hover: hover) {
+ color: color-mix(in srgb, oklch(0.6 0.21 17) 80%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ color: color-mix(in oklab, var(--color-danger) 80%, transparent);
+ }
+ }
+ }
+ }
+ .hover\:text-gray-700 {
+ &:hover {
+ @media (hover: hover) {
+ color: var(--color-gray-700);
+ }
+ }
+ }
+ .hover\:text-primary {
+ &:hover {
+ @media (hover: hover) {
+ color: var(--color-primary);
+ }
+ }
+ }
+ .hover\:text-red-800 {
+ &:hover {
+ @media (hover: hover) {
+ color: var(--color-red-800);
+ }
+ }
+ }
+ .hover\:text-text {
+ &:hover {
+ @media (hover: hover) {
+ color: var(--color-text);
+ }
+ }
+ }
+ .hover\:text-text-inverse {
+ &:hover {
+ @media (hover: hover) {
+ color: var(--color-text-inverse);
+ }
+ }
+ }
+ .hover\:text-white {
+ &:hover {
+ @media (hover: hover) {
+ color: var(--color-white);
+ }
+ }
+ }
+ .hover\:no-underline {
+ &:hover {
+ @media (hover: hover) {
+ text-decoration-line: none;
+ }
+ }
+ }
+ .hover\:underline {
+ &:hover {
+ @media (hover: hover) {
+ text-decoration-line: underline;
+ }
+ }
+ }
+ .hover\:opacity-100 {
+ &:hover {
+ @media (hover: hover) {
+ opacity: 100%;
+ }
+ }
+ }
+ .hover\:shadow-\(--shadow-danger-hover\) {
+ &:hover {
+ @media (hover: hover) {
+ --tw-shadow: var(--shadow-danger-hover);
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
+ }
+ }
+ }
+ .hover\:shadow-\(--shadow-primary-hover\) {
+ &:hover {
+ @media (hover: hover) {
+ --tw-shadow: var(--shadow-primary-hover);
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
+ }
+ }
+ }
+ .hover\:shadow-md {
+ &:hover {
+ @media (hover: hover) {
+ --tw-shadow: 0 4px 8px -2px var(--tw-shadow-color, oklch(0.18 0.012 260 / 0.08)), 0 2px 4px -2px var(--tw-shadow-color, oklch(0.18 0.012 260 / 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\:shadow-xl {
+ &:hover {
+ @media (hover: hover) {
+ --tw-shadow: 0 24px 48px -12px var(--tw-shadow-color, oklch(0.18 0.012 260 / 0.18)), 0 8px 16px -8px var(--tw-shadow-color, oklch(0.18 0.012 260 / 0.08));
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
+ }
+ }
+ }
+ .focus\:border-danger {
+ &:focus {
+ border-color: var(--color-danger);
+ }
+ }
+ .focus\:border-primary {
+ &:focus {
+ border-color: var(--color-primary);
+ }
+ }
+ .focus\:bg-primary {
+ &:focus {
+ background-color: var(--color-primary);
+ }
+ }
+ .focus\:bg-primary-subtle {
+ &:focus {
+ background-color: var(--color-primary-subtle);
+ }
+ }
+ .focus\:bg-surface-raised {
+ &:focus {
+ background-color: var(--color-surface-raised);
+ }
+ }
+ .focus\:text-primary {
+ &:focus {
+ color: var(--color-primary);
+ }
+ }
+ .focus\:text-text {
+ &:focus {
+ color: var(--color-text);
+ }
+ }
+ .focus\:text-text-inverse {
+ &:focus {
+ color: var(--color-text-inverse);
+ }
+ }
+ .focus\:opacity-100 {
+ &:focus {
+ opacity: 100%;
+ }
+ }
+ .focus\:ring-2 {
+ &: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\:ring-4 {
+ &:focus {
+ --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);
+ }
+ }
+ .focus\:ring-blue-500 {
+ &:focus {
+ --tw-ring-color: var(--color-blue-500);
+ }
+ }
+ .focus\:ring-danger-bg {
+ &:focus {
+ --tw-ring-color: var(--color-danger-bg);
+ }
+ }
+ .focus\:ring-primary-ring {
+ &:focus {
+ --tw-ring-color: var(--color-primary-ring);
+ }
+ }
+ .focus\:ring-primary\/15 {
+ &:focus {
+ --tw-ring-color: color-mix(in srgb, oklch(0.62 0.16 158) 15%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ --tw-ring-color: color-mix(in oklab, var(--color-primary) 15%, transparent);
+ }
+ }
+ }
+ .focus\:outline-none {
+ &:focus {
+ --tw-outline-style: none;
+ outline-style: none;
+ }
+ }
+ .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-4 {
+ &:focus-visible {
+ --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);
+ }
+ }
+ .focus-visible\:ring-primary-ring {
+ &:focus-visible {
+ --tw-ring-color: var(--color-primary-ring);
+ }
+ }
+ .focus-visible\:ring-ring {
+ &:focus-visible {
+ --tw-ring-color: var(--color-ring);
+ }
+ }
+ .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;
+ }
+ }
+ .active\:scale-\[0\.97\] {
+ &:active {
+ scale: 0.97;
+ }
+ }
+ .disabled\:pointer-events-none {
+ &:disabled {
+ pointer-events: none;
+ }
+ }
+ .disabled\:cursor-not-allowed {
+ &:disabled {
+ cursor: not-allowed;
+ }
+ }
+ .disabled\:opacity-50 {
+ &:disabled {
+ opacity: 50%;
+ }
+ }
+ .aria-selected\:bg-primary-subtle {
+ &[aria-selected="true"] {
+ background-color: var(--color-primary-subtle);
+ }
+ }
+ .aria-selected\:bg-primary-subtle\/50 {
+ &[aria-selected="true"] {
+ background-color: color-mix(in srgb, oklch(0.62 0.16 158 / 0.09) 50%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-primary-subtle) 50%, transparent);
+ }
+ }
+ }
+ .aria-selected\:text-text {
+ &[aria-selected="true"] {
+ color: var(--color-text);
+ }
+ }
+ .aria-selected\:text-text-muted {
+ &[aria-selected="true"] {
+ color: var(--color-text-muted);
+ }
+ }
+ .aria-selected\:opacity-100 {
+ &[aria-selected="true"] {
+ opacity: 100%;
+ }
+ }
+ .data-\[active\]\:bg-primary-subtle {
+ &[data-active] {
+ background-color: var(--color-primary-subtle);
+ }
+ }
+ .data-\[active\]\:font-semibold {
+ &[data-active] {
+ --tw-font-weight: var(--font-weight-semibold);
+ font-weight: var(--font-weight-semibold);
+ }
+ }
+ .data-\[active\]\:text-primary {
+ &[data-active] {
+ color: var(--color-primary);
+ }
+ }
+ .data-\[direction\=vertical\]\:flex-col {
+ &[data-direction="vertical"] {
+ flex-direction: column;
+ }
+ }
+ .data-\[disabled\]\:pointer-events-none {
+ &[data-disabled] {
+ pointer-events: none;
+ }
+ }
+ .data-\[disabled\]\:opacity-50 {
+ &[data-disabled] {
+ opacity: 50%;
+ }
+ }
+ .data-\[disabled\=true\]\:pointer-events-none {
+ &[data-disabled="true"] {
+ pointer-events: none;
+ }
+ }
+ .data-\[disabled\=true\]\:opacity-50 {
+ &[data-disabled="true"] {
+ opacity: 50%;
+ }
+ }
+ .data-\[selected\=true\]\:bg-primary-subtle {
+ &[data-selected="true"] {
+ background-color: var(--color-primary-subtle);
+ }
+ }
+ .data-\[selected\=true\]\:text-primary {
+ &[data-selected="true"] {
+ color: var(--color-primary);
+ }
+ }
+ .data-\[side\=bottom\]\:translate-y-1 {
+ &[data-side="bottom"] {
+ --tw-translate-y: calc(var(--spacing) * 1);
+ translate: var(--tw-translate-x) var(--tw-translate-y);
+ }
+ }
+ .data-\[side\=top\]\:-translate-y-1 {
+ &[data-side="top"] {
+ --tw-translate-y: calc(var(--spacing) * -1);
+ translate: var(--tw-translate-x) var(--tw-translate-y);
+ }
+ }
+ .data-\[state\=active\]\:bg-surface {
+ &[data-state="active"] {
+ background-color: var(--color-surface);
+ }
+ }
+ .data-\[state\=active\]\:text-text {
+ &[data-state="active"] {
+ color: var(--color-text);
+ }
+ }
+ .data-\[state\=active\]\:shadow-sm {
+ &[data-state="active"] {
+ --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, oklch(0.18 0.012 260 / 0.06)), 0 1px 3px 0 var(--tw-shadow-color, oklch(0.18 0.012 260 / 0.04));
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
+ }
+ }
+ .data-\[state\=checked\]\:translate-x-5 {
+ &[data-state="checked"] {
+ --tw-translate-x: calc(var(--spacing) * 5);
+ translate: var(--tw-translate-x) var(--tw-translate-y);
+ }
+ }
+ .data-\[state\=checked\]\:border-primary {
+ &[data-state="checked"] {
+ border-color: var(--color-primary);
+ }
+ }
+ .data-\[state\=checked\]\:bg-primary {
+ &[data-state="checked"] {
+ background-color: var(--color-primary);
+ }
+ }
+ .data-\[state\=checked\]\:text-text-inverse {
+ &[data-state="checked"] {
+ color: var(--color-text-inverse);
+ }
+ }
+ .data-\[state\=closed\]\:duration-300 {
+ &[data-state="closed"] {
+ --tw-duration: 300ms;
+ transition-duration: 300ms;
+ }
+ }
+ .data-\[state\=on\]\:bg-primary-subtle {
+ &[data-state="on"] {
+ background-color: var(--color-primary-subtle);
+ }
+ }
+ .data-\[state\=on\]\:text-primary {
+ &[data-state="on"] {
+ color: var(--color-primary);
+ }
+ }
+ .data-\[state\=open\]\:duration-500 {
+ &[data-state="open"] {
+ --tw-duration: 500ms;
+ transition-duration: 500ms;
+ }
+ }
+ .data-\[state\=unchecked\]\:translate-x-0 {
+ &[data-state="unchecked"] {
+ --tw-translate-x: calc(var(--spacing) * 0);
+ translate: var(--tw-translate-x) var(--tw-translate-y);
+ }
+ }
+ .data-\[state\=unchecked\]\:bg-border-strong {
+ &[data-state="unchecked"] {
+ background-color: var(--color-border-strong);
+ }
+ }
+ .data-\[swipe\=cancel\]\:translate-x-0 {
+ &[data-swipe="cancel"] {
+ --tw-translate-x: calc(var(--spacing) * 0);
+ translate: var(--tw-translate-x) var(--tw-translate-y);
+ }
+ }
+ .data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\] {
+ &[data-swipe="end"] {
+ --tw-translate-x: var(--radix-toast-swipe-end-x);
+ translate: var(--tw-translate-x) var(--tw-translate-y);
+ }
+ }
+ .data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\] {
+ &[data-swipe="move"] {
+ --tw-translate-x: var(--radix-toast-swipe-move-x);
+ translate: var(--tw-translate-x) var(--tw-translate-y);
+ }
+ }
+ .data-\[swipe\=move\]\:transition-none {
+ &[data-swipe="move"] {
+ transition-property: none;
+ }
+ }
+ .sm\:sticky {
+ @media (width >= 40rem) {
+ position: sticky;
+ }
+ }
+ .sm\:top-20 {
+ @media (width >= 40rem) {
+ top: calc(var(--spacing) * 20);
+ }
+ }
+ .sm\:top-auto {
+ @media (width >= 40rem) {
+ top: auto;
+ }
+ }
+ .sm\:right-0 {
+ @media (width >= 40rem) {
+ right: calc(var(--spacing) * 0);
+ }
+ }
+ .sm\:bottom-0 {
+ @media (width >= 40rem) {
+ bottom: calc(var(--spacing) * 0);
+ }
+ }
+ .sm\:mx-0 {
+ @media (width >= 40rem) {
+ margin-inline: calc(var(--spacing) * 0);
+ }
+ }
+ .sm\:mt-6 {
+ @media (width >= 40rem) {
+ margin-top: calc(var(--spacing) * 6);
+ }
+ }
+ .sm\:mb-4 {
+ @media (width >= 40rem) {
+ margin-bottom: calc(var(--spacing) * 4);
+ }
+ }
+ .sm\:mb-6 {
+ @media (width >= 40rem) {
+ margin-bottom: calc(var(--spacing) * 6);
+ }
+ }
+ .sm\:mb-8 {
+ @media (width >= 40rem) {
+ margin-bottom: calc(var(--spacing) * 8);
+ }
+ }
+ .sm\:block {
+ @media (width >= 40rem) {
+ display: block;
+ }
+ }
+ .sm\:flex {
+ @media (width >= 40rem) {
+ display: flex;
+ }
+ }
+ .sm\:inline-flex {
+ @media (width >= 40rem) {
+ display: inline-flex;
+ }
+ }
+ .sm\:h-16 {
+ @media (width >= 40rem) {
+ height: calc(var(--spacing) * 16);
+ }
+ }
+ .sm\:h-48 {
+ @media (width >= 40rem) {
+ height: calc(var(--spacing) * 48);
+ }
+ }
+ .sm\:min-h-\[200px\] {
+ @media (width >= 40rem) {
+ min-height: 200px;
+ }
+ }
+ .sm\:min-h-\[220px\] {
+ @media (width >= 40rem) {
+ min-height: 220px;
+ }
+ }
+ .sm\:min-h-\[250px\] {
+ @media (width >= 40rem) {
+ min-height: 250px;
+ }
+ }
+ .sm\:min-h-\[280px\] {
+ @media (width >= 40rem) {
+ min-height: 280px;
+ }
+ }
+ .sm\:w-16 {
+ @media (width >= 40rem) {
+ width: calc(var(--spacing) * 16);
+ }
+ }
+ .sm\:w-48 {
+ @media (width >= 40rem) {
+ width: calc(var(--spacing) * 48);
+ }
+ }
+ .sm\:w-56 {
+ @media (width >= 40rem) {
+ width: calc(var(--spacing) * 56);
+ }
+ }
+ .sm\:w-\[160px\] {
+ @media (width >= 40rem) {
+ width: 160px;
+ }
+ }
+ .sm\:w-\[180px\] {
+ @media (width >= 40rem) {
+ width: 180px;
+ }
+ }
+ .sm\:w-auto {
+ @media (width >= 40rem) {
+ width: auto;
+ }
+ }
+ .sm\:max-w-lg {
+ @media (width >= 40rem) {
+ max-width: var(--container-lg);
+ }
+ }
+ .sm\:max-w-sm {
+ @media (width >= 40rem) {
+ max-width: var(--container-sm);
+ }
+ }
+ .sm\:grid-cols-2 {
+ @media (width >= 40rem) {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ }
+ }
+ .sm\:grid-cols-3 {
+ @media (width >= 40rem) {
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ }
+ }
+ .sm\:flex-col {
+ @media (width >= 40rem) {
+ flex-direction: column;
+ }
+ }
+ .sm\:flex-row {
+ @media (width >= 40rem) {
+ flex-direction: row;
+ }
+ }
+ .sm\:flex-wrap {
+ @media (width >= 40rem) {
+ flex-wrap: wrap;
+ }
+ }
+ .sm\:items-center {
+ @media (width >= 40rem) {
+ align-items: center;
+ }
+ }
+ .sm\:items-end {
+ @media (width >= 40rem) {
+ align-items: flex-end;
+ }
+ }
+ .sm\:items-start {
+ @media (width >= 40rem) {
+ align-items: flex-start;
+ }
+ }
+ .sm\:justify-between {
+ @media (width >= 40rem) {
+ justify-content: space-between;
+ }
+ }
+ .sm\:justify-end {
+ @media (width >= 40rem) {
+ justify-content: flex-end;
+ }
+ }
+ .sm\:gap-0 {
+ @media (width >= 40rem) {
+ gap: calc(var(--spacing) * 0);
+ }
+ }
+ .sm\:gap-2 {
+ @media (width >= 40rem) {
+ gap: calc(var(--spacing) * 2);
+ }
+ }
+ .sm\:gap-3 {
+ @media (width >= 40rem) {
+ gap: calc(var(--spacing) * 3);
+ }
+ }
+ .sm\:gap-4 {
+ @media (width >= 40rem) {
+ gap: calc(var(--spacing) * 4);
+ }
+ }
+ .sm\:gap-6 {
+ @media (width >= 40rem) {
+ gap: calc(var(--spacing) * 6);
+ }
+ }
+ .sm\:gap-8 {
+ @media (width >= 40rem) {
+ gap: calc(var(--spacing) * 8);
+ }
+ }
+ .sm\:space-y-0 {
+ @media (width >= 40rem) {
+ :where(& > :not(:last-child)) {
+ --tw-space-y-reverse: 0;
+ margin-block-start: calc(calc(var(--spacing) * 0) * var(--tw-space-y-reverse));
+ margin-block-end: calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-y-reverse)));
+ }
+ }
+ }
+ .sm\:space-y-4 {
+ @media (width >= 40rem) {
+ :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)));
+ }
+ }
+ }
+ .sm\:space-y-6 {
+ @media (width >= 40rem) {
+ :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)));
+ }
+ }
+ }
+ .sm\:space-x-4 {
+ @media (width >= 40rem) {
+ :where(& > :not(:last-child)) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse));
+ margin-inline-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse)));
+ }
+ }
+ }
+ .sm\:overflow-x-visible {
+ @media (width >= 40rem) {
+ overflow-x: visible;
+ }
+ }
+ .sm\:rounded-2xl {
+ @media (width >= 40rem) {
+ border-radius: var(--radius-2xl);
+ }
+ }
+ .sm\:p-3 {
+ @media (width >= 40rem) {
+ padding: calc(var(--spacing) * 3);
+ }
+ }
+ .sm\:p-4 {
+ @media (width >= 40rem) {
+ padding: calc(var(--spacing) * 4);
+ }
+ }
+ .sm\:p-5 {
+ @media (width >= 40rem) {
+ padding: calc(var(--spacing) * 5);
+ }
+ }
+ .sm\:p-6 {
+ @media (width >= 40rem) {
+ padding: calc(var(--spacing) * 6);
+ }
+ }
+ .sm\:p-8 {
+ @media (width >= 40rem) {
+ padding: calc(var(--spacing) * 8);
+ }
+ }
+ .sm\:px-0 {
+ @media (width >= 40rem) {
+ padding-inline: calc(var(--spacing) * 0);
+ }
+ }
+ .sm\:px-4 {
+ @media (width >= 40rem) {
+ padding-inline: calc(var(--spacing) * 4);
+ }
+ }
+ .sm\:px-6 {
+ @media (width >= 40rem) {
+ padding-inline: calc(var(--spacing) * 6);
+ }
+ }
+ .sm\:px-8 {
+ @media (width >= 40rem) {
+ padding-inline: calc(var(--spacing) * 8);
+ }
+ }
+ .sm\:px-10 {
+ @media (width >= 40rem) {
+ padding-inline: calc(var(--spacing) * 10);
+ }
+ }
+ .sm\:py-3 {
+ @media (width >= 40rem) {
+ padding-block: calc(var(--spacing) * 3);
+ }
+ }
+ .sm\:py-6 {
+ @media (width >= 40rem) {
+ padding-block: calc(var(--spacing) * 6);
+ }
+ }
+ .sm\:py-16 {
+ @media (width >= 40rem) {
+ padding-block: calc(var(--spacing) * 16);
+ }
+ }
+ .sm\:pt-4 {
+ @media (width >= 40rem) {
+ padding-top: calc(var(--spacing) * 4);
+ }
+ }
+ .sm\:pt-6 {
+ @media (width >= 40rem) {
+ padding-top: calc(var(--spacing) * 6);
+ }
+ }
+ .sm\:pt-14 {
+ @media (width >= 40rem) {
+ padding-top: calc(var(--spacing) * 14);
+ }
+ }
+ .sm\:text-2xl {
+ @media (width >= 40rem) {
+ font-size: var(--text-2xl);
+ line-height: var(--tw-leading, var(--text-2xl--line-height));
+ }
+ }
+ .sm\:text-3xl {
+ @media (width >= 40rem) {
+ font-size: var(--text-3xl);
+ line-height: var(--tw-leading, var(--text-3xl--line-height));
+ }
+ }
+ .sm\:text-4xl {
+ @media (width >= 40rem) {
+ font-size: var(--text-4xl);
+ line-height: var(--tw-leading, var(--text-4xl--line-height));
+ }
+ }
+ .sm\:text-5xl {
+ @media (width >= 40rem) {
+ font-size: var(--text-5xl);
+ line-height: var(--tw-leading, var(--text-5xl--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-xl {
+ @media (width >= 40rem) {
+ font-size: var(--text-xl);
+ line-height: var(--tw-leading, var(--text-xl--line-height));
+ }
+ }
+ .md\:block {
+ @media (width >= 48rem) {
+ display: block;
+ }
+ }
+ .md\:flex {
+ @media (width >= 48rem) {
+ display: flex;
+ }
+ }
+ .md\:hidden {
+ @media (width >= 48rem) {
+ display: none;
+ }
+ }
+ .md\:inline-flex {
+ @media (width >= 48rem) {
+ display: inline-flex;
+ }
+ }
+ .md\:w-56 {
+ @media (width >= 48rem) {
+ width: calc(var(--spacing) * 56);
+ }
+ }
+ .md\:max-w-\[420px\] {
+ @media (width >= 48rem) {
+ max-width: 420px;
+ }
+ }
+ .md\:grid-cols-2 {
+ @media (width >= 48rem) {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ }
+ }
+ .md\:grid-cols-3 {
+ @media (width >= 48rem) {
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ }
+ }
+ .md\:grid-cols-4 {
+ @media (width >= 48rem) {
+ grid-template-columns: repeat(4, minmax(0, 1fr));
+ }
+ }
+ .md\:grid-cols-\[1fr_18rem\] {
+ @media (width >= 48rem) {
+ grid-template-columns: 1fr 18rem;
+ }
+ }
+ .md\:grid-cols-\[2fr_3fr\] {
+ @media (width >= 48rem) {
+ grid-template-columns: 2fr 3fr;
+ }
+ }
+ .md\:flex-row {
+ @media (width >= 48rem) {
+ flex-direction: row;
+ }
+ }
+ .md\:gap-6 {
+ @media (width >= 48rem) {
+ gap: calc(var(--spacing) * 6);
+ }
+ }
+ .md\:border-r {
+ @media (width >= 48rem) {
+ border-right-style: var(--tw-border-style);
+ border-right-width: 1px;
+ }
+ }
+ .md\:border-b-0 {
+ @media (width >= 48rem) {
+ border-bottom-style: var(--tw-border-style);
+ border-bottom-width: 0px;
+ }
+ }
+ .md\:p-8 {
+ @media (width >= 48rem) {
+ padding: calc(var(--spacing) * 8);
+ }
+ }
+ .md\:px-6 {
+ @media (width >= 48rem) {
+ padding-inline: calc(var(--spacing) * 6);
+ }
+ }
+ .md\:text-2xl {
+ @media (width >= 48rem) {
+ font-size: var(--text-2xl);
+ line-height: var(--tw-leading, var(--text-2xl--line-height));
+ }
+ }
+ .lg\:col-span-2 {
+ @media (width >= 64rem) {
+ grid-column: span 2 / span 2;
+ }
+ }
+ .lg\:block {
+ @media (width >= 64rem) {
+ display: block;
+ }
+ }
+ .lg\:grid-cols-2 {
+ @media (width >= 64rem) {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ }
+ }
+ .lg\:grid-cols-3 {
+ @media (width >= 64rem) {
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ }
+ }
+ .lg\:grid-cols-4 {
+ @media (width >= 64rem) {
+ grid-template-columns: repeat(4, minmax(0, 1fr));
+ }
+ }
+ .lg\:grid-cols-\[1fr_13rem\] {
+ @media (width >= 64rem) {
+ grid-template-columns: 1fr 13rem;
+ }
+ }
+ .lg\:gap-6 {
+ @media (width >= 64rem) {
+ gap: calc(var(--spacing) * 6);
+ }
+ }
+ .lg\:px-8 {
+ @media (width >= 64rem) {
+ padding-inline: calc(var(--spacing) * 8);
+ }
+ }
+ .lg\:text-6xl {
+ @media (width >= 64rem) {
+ font-size: var(--text-6xl);
+ line-height: var(--tw-leading, var(--text-6xl--line-height));
+ }
+ }
+ .xl\:grid-cols-5 {
+ @media (width >= 80rem) {
+ grid-template-columns: repeat(5, minmax(0, 1fr));
+ }
+ }
+ .xl\:grid-cols-6 {
+ @media (width >= 80rem) {
+ grid-template-columns: repeat(6, minmax(0, 1fr));
+ }
+ }
+ .dark\:block {
+ @media (prefers-color-scheme: dark) {
+ display: block;
+ }
+ }
+ .dark\:hidden {
+ @media (prefers-color-scheme: dark) {
+ display: none;
+ }
+ }
+ .dark\:divide-gray-700 {
+ @media (prefers-color-scheme: dark) {
+ :where(& > :not(:last-child)) {
+ border-color: var(--color-gray-700);
+ }
+ }
+ }
+ .dark\:border-gray-600 {
+ @media (prefers-color-scheme: dark) {
+ border-color: var(--color-gray-600);
+ }
+ }
+ .dark\:border-gray-700 {
+ @media (prefers-color-scheme: dark) {
+ border-color: var(--color-gray-700);
+ }
+ }
+ .dark\:bg-blue-900\/30 {
+ @media (prefers-color-scheme: dark) {
+ background-color: color-mix(in srgb, oklch(37.9% 0.146 265.522) 30%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-blue-900) 30%, transparent);
+ }
+ }
+ }
+ .dark\:bg-gray-800 {
+ @media (prefers-color-scheme: dark) {
+ background-color: var(--color-gray-800);
+ }
+ }
+ .dark\:text-amber-400 {
+ @media (prefers-color-scheme: dark) {
+ color: var(--color-amber-400);
+ }
+ }
+ .dark\:text-blue-300 {
+ @media (prefers-color-scheme: dark) {
+ color: var(--color-blue-300);
+ }
+ }
+ .dark\:text-blue-400 {
+ @media (prefers-color-scheme: dark) {
+ color: var(--color-blue-400);
+ }
+ }
+ .dark\:text-gray-400 {
+ @media (prefers-color-scheme: dark) {
+ color: var(--color-gray-400);
+ }
+ }
+ .dark\:text-green-400 {
+ @media (prefers-color-scheme: dark) {
+ color: var(--color-green-400);
+ }
+ }
+ .dark\:text-red-400 {
+ @media (prefers-color-scheme: dark) {
+ color: var(--color-red-400);
+ }
+ }
+ .dark\:hover\:bg-gray-800\/50 {
+ @media (prefers-color-scheme: dark) {
+ &:hover {
+ @media (hover: hover) {
+ background-color: color-mix(in srgb, oklch(27.8% 0.033 256.848) 50%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-gray-800) 50%, transparent);
+ }
+ }
+ }
+ }
+ }
+ .dark\:hover\:text-blue-300 {
+ @media (prefers-color-scheme: dark) {
+ &:hover {
+ @media (hover: hover) {
+ color: var(--color-blue-300);
+ }
+ }
+ }
+ }
+ .dark\:hover\:text-gray-300 {
+ @media (prefers-color-scheme: dark) {
+ &:hover {
+ @media (hover: hover) {
+ color: var(--color-gray-300);
+ }
+ }
+ }
+ }
+ .print\:block {
+ @media print {
+ display: block;
+ }
+ }
+ .print\:bg-transparent {
+ @media print {
+ background-color: transparent;
+ }
+ }
+ .print\:text-black {
+ @media print {
+ color: var(--color-black);
+ }
+ }
+ .\[\&_\.recharts-cartesian-axis-tick_text\]\:fill-text-muted {
+ & .recharts-cartesian-axis-tick text {
+ fill: var(--color-text-muted);
+ }
+ }
+ .\[\&_\.recharts-cartesian-grid_line\[stroke\]\]\:stroke-border\/50 {
+ & .recharts-cartesian-grid line[stroke] {
+ stroke: color-mix(in srgb, oklch(0.92 0.005 80) 50%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ stroke: color-mix(in oklab, var(--color-border) 50%, transparent);
+ }
+ }
+ }
+ .\[\&_\.recharts-curve\.recharts-tooltip-cursor\]\:stroke-border {
+ & .recharts-curve.recharts-tooltip-cursor {
+ stroke: var(--color-border);
+ }
+ }
+ .\[\&_\.recharts-dot\[stroke\]\]\:stroke-transparent {
+ & .recharts-dot[stroke] {
+ stroke: transparent;
+ }
+ }
+ .\[\&_\.recharts-layer\]\:outline-none {
+ & .recharts-layer {
+ --tw-outline-style: none;
+ outline-style: none;
+ }
+ }
+ .\[\&_\.recharts-polar-grid_\[stroke\]\]\:stroke-border {
+ & .recharts-polar-grid [stroke] {
+ stroke: var(--color-border);
+ }
+ }
+ .\[\&_\.recharts-radial-bar-background-sector\]\:fill-surface-sunken {
+ & .recharts-radial-bar-background-sector {
+ fill: var(--color-surface-sunken);
+ }
+ }
+ .\[\&_\.recharts-rectangle\.recharts-tooltip-cursor\]\:fill-surface-sunken {
+ & .recharts-rectangle.recharts-tooltip-cursor {
+ fill: var(--color-surface-sunken);
+ }
+ }
+ .\[\&_\.recharts-reference-line_\[stroke\]\]\:stroke-border {
+ & .recharts-reference-line [stroke] {
+ stroke: var(--color-border);
+ }
+ }
+ .\[\&_\.recharts-sector\]\:outline-none {
+ & .recharts-sector {
+ --tw-outline-style: none;
+ outline-style: none;
+ }
+ }
+ .\[\&_\.recharts-sector\[stroke\]\]\:stroke-transparent {
+ & .recharts-sector[stroke] {
+ stroke: transparent;
+ }
+ }
+ .\[\&_\.recharts-surface\]\:outline-none {
+ & .recharts-surface {
+ --tw-outline-style: none;
+ outline-style: none;
+ }
+ }
+ .\[\&_\[cmdk-group-heading\]\]\:px-2 {
+ & [cmdk-group-heading] {
+ padding-inline: calc(var(--spacing) * 2);
+ }
+ }
+ .\[\&_\[cmdk-group-heading\]\]\:py-1\.5 {
+ & [cmdk-group-heading] {
+ padding-block: calc(var(--spacing) * 1.5);
+ }
+ }
+ .\[\&_\[cmdk-group-heading\]\]\:text-xs {
+ & [cmdk-group-heading] {
+ font-size: var(--text-xs);
+ line-height: var(--tw-leading, var(--text-xs--line-height));
+ }
+ }
+ .\[\&_\[cmdk-group-heading\]\]\:font-medium {
+ & [cmdk-group-heading] {
+ --tw-font-weight: var(--font-weight-medium);
+ font-weight: var(--font-weight-medium);
+ }
+ }
+ .\[\&_\[cmdk-group-heading\]\]\:text-text-muted {
+ & [cmdk-group-heading] {
+ color: var(--color-text-muted);
+ }
+ }
+ .\[\&_p\]\:leading-relaxed {
+ & p {
+ --tw-leading: var(--leading-relaxed);
+ line-height: var(--leading-relaxed);
+ }
+ }
+ .\[\&_tr\]\:border-b {
+ & tr {
+ border-bottom-style: var(--tw-border-style);
+ border-bottom-width: 1px;
+ }
+ }
+ .\[\&_tr\:last-child\]\:border-0 {
+ & tr:last-child {
+ border-style: var(--tw-border-style);
+ border-width: 0px;
+ }
+ }
+ .\[\&\:\:-webkit-inner-spin-button\]\:appearance-none {
+ &::-webkit-inner-spin-button {
+ appearance: none;
+ }
+ }
+ .\[\&\:\:-webkit-outer-spin-button\]\:appearance-none {
+ &::-webkit-outer-spin-button {
+ appearance: none;
+ }
+ }
+ .\[\&\:\:-webkit-search-cancel-button\]\:appearance-none {
+ &::-webkit-search-cancel-button {
+ appearance: none;
+ }
+ }
+ .\[\&\:\:-webkit-search-decoration\]\:appearance-none {
+ &::-webkit-search-decoration {
+ appearance: none;
+ }
+ }
+ .\[\&\:has\(\[aria-selected\]\)\]\:bg-primary-subtle {
+ &:has([aria-selected]) {
+ background-color: var(--color-primary-subtle);
+ }
+ }
+ .first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md {
+ &:first-child {
+ &:has([aria-selected]) {
+ border-top-left-radius: var(--radius-md);
+ border-bottom-left-radius: var(--radius-md);
+ }
+ }
+ }
+ .last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md {
+ &:last-child {
+ &:has([aria-selected]) {
+ border-top-right-radius: var(--radius-md);
+ border-bottom-right-radius: var(--radius-md);
+ }
+ }
+ }
+ .\[\&\:has\(\[aria-selected\]\.day-outside\)\]\:bg-primary-subtle\/50 {
+ &:has([aria-selected].day-outside) {
+ background-color: color-mix(in srgb, oklch(0.62 0.16 158 / 0.09) 50%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-primary-subtle) 50%, transparent);
+ }
+ }
+ }
+ .\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md {
+ &:has([aria-selected].day-range-end) {
+ border-top-right-radius: var(--radius-md);
+ border-bottom-right-radius: var(--radius-md);
+ }
+ }
+ .\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0 {
+ &:has([role=checkbox]) {
+ padding-right: calc(var(--spacing) * 0);
+ }
+ }
+ .\[\&\>\[data-slot\=prefix\]\]\:pointer-events-none {
+ &>[data-slot=prefix] {
+ pointer-events: none;
+ }
+ }
+ .\[\&\>\[data-slot\=prefix\]\]\:absolute {
+ &>[data-slot=prefix] {
+ position: absolute;
+ }
+ }
+ .\[\&\>\[data-slot\=prefix\]\]\:left-3 {
+ &>[data-slot=prefix] {
+ left: calc(var(--spacing) * 3);
+ }
+ }
+ .\[\&\>\[data-slot\=prefix\]\]\:text-text-muted {
+ &>[data-slot=prefix] {
+ color: var(--color-text-muted);
+ }
+ }
+ .\[\&\>\[data-slot\=suffix\]\]\:absolute {
+ &>[data-slot=suffix] {
+ position: absolute;
+ }
+ }
+ .\[\&\>\[data-slot\=suffix\]\]\:right-3 {
+ &>[data-slot=suffix] {
+ right: calc(var(--spacing) * 3);
+ }
+ }
+ .\[\&\>\[data-slot\=suffix\]\]\:text-text-muted {
+ &>[data-slot=suffix] {
+ color: var(--color-text-muted);
+ }
+ }
+ .\[\&\>span\]\:line-clamp-1 {
+ &>span {
+ overflow: hidden;
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: 1;
+ }
+ }
+ .\[\&\>svg\]\:h-2\.5 {
+ &>svg {
+ height: calc(var(--spacing) * 2.5);
+ }
+ }
+ .\[\&\>svg\]\:h-3 {
+ &>svg {
+ height: calc(var(--spacing) * 3);
+ }
+ }
+ .\[\&\>svg\]\:h-3\.5 {
+ &>svg {
+ height: calc(var(--spacing) * 3.5);
+ }
+ }
+ .\[\&\>svg\]\:h-5 {
+ &>svg {
+ height: calc(var(--spacing) * 5);
+ }
+ }
+ .\[\&\>svg\]\:w-2\.5 {
+ &>svg {
+ width: calc(var(--spacing) * 2.5);
+ }
+ }
+ .\[\&\>svg\]\:w-3 {
+ &>svg {
+ width: calc(var(--spacing) * 3);
+ }
+ }
+ .\[\&\>svg\]\:w-3\.5 {
+ &>svg {
+ width: calc(var(--spacing) * 3.5);
+ }
+ }
+ .\[\&\>svg\]\:w-5 {
+ &>svg {
+ width: calc(var(--spacing) * 5);
+ }
+ }
+ .\[\&\>svg\]\:text-text-muted {
+ &>svg {
+ color: var(--color-text-muted);
+ }
+ }
+ .\[\&\[data-state\=open\]\>svg\]\:rotate-180 {
+ &[data-state=open]>svg {
+ rotate: 180deg;
+ }
+ }
+ .\[\[data-direction\=vertical\]_\&\]\:h-px {
+ [data-direction=vertical] & {
+ height: 1px;
+ }
+ }
+ .\[\[data-direction\=vertical\]_\&\]\:w-full {
+ [data-direction=vertical] & {
+ width: 100%;
+ }
+ }
+ .\[\[data-direction\=vertical\]_\&\]\:after\:left-0 {
+ [data-direction=vertical] & {
+ &::after {
+ content: var(--tw-content);
+ left: calc(var(--spacing) * 0);
+ }
+ }
+ }
+ .\[\[data-direction\=vertical\]_\&\]\:after\:h-1 {
+ [data-direction=vertical] & {
+ &::after {
+ content: var(--tw-content);
+ height: calc(var(--spacing) * 1);
+ }
+ }
+ }
+ .\[\[data-direction\=vertical\]_\&\]\:after\:w-full {
+ [data-direction=vertical] & {
+ &::after {
+ content: var(--tw-content);
+ width: 100%;
+ }
+ }
+ }
+ .\[\[data-direction\=vertical\]_\&\]\:after\:translate-x-0 {
+ [data-direction=vertical] & {
+ &::after {
+ content: var(--tw-content);
+ --tw-translate-x: calc(var(--spacing) * 0);
+ translate: var(--tw-translate-x) var(--tw-translate-y);
+ }
+ }
+ }
+ .\[\[data-direction\=vertical\]_\&\]\:after\:-translate-y-1\/2 {
+ [data-direction=vertical] & {
+ &::after {
+ content: var(--tw-content);
+ --tw-translate-y: calc(calc(1 / 2 * 100%) * -1);
+ translate: var(--tw-translate-x) var(--tw-translate-y);
+ }
+ }
+ }
+}
+.dark {
+ --color-primary: oklch(0.72 0.16 158);
+ --color-primary-hover: oklch(0.78 0.16 158);
+ --color-primary-light: oklch(0.85 0.13 158);
+ --color-primary-subtle: oklch(0.72 0.16 158 / 0.14);
+ --color-primary-ring: oklch(0.72 0.16 158 / 0.4);
+ --color-accent: oklch(0.62 0.11 192);
+ --color-accent-hover: oklch(0.7 0.11 192);
+ --color-success: oklch(0.78 0.16 158);
+ --color-success-bg: oklch(0.72 0.16 158 / 0.14);
+ --color-success-text: oklch(0.85 0.13 158);
+ --color-danger: oklch(0.7 0.2 17);
+ --color-danger-hover: oklch(0.78 0.2 17);
+ --color-danger-bg: oklch(0.7 0.2 17 / 0.14);
+ --color-danger-text: oklch(0.85 0.13 17);
+ --color-warning-bg: oklch(0.72 0.16 60 / 0.15);
+ --color-warning-border: oklch(0.72 0.16 60 / 0.35);
+ --color-warning-text: oklch(0.86 0.14 60);
+ --color-info: oklch(0.75 0.13 232);
+ --color-info-bg: oklch(0.75 0.13 232 / 0.14);
+ --color-surface: oklch(0.205 0.006 60);
+ --color-surface-raised: oklch(0.245 0.007 60);
+ --color-surface-sunken: oklch(0.16 0.006 60);
+ --color-surface-overlay: oklch(0.205 0.006 60 / 0.78);
+ --color-text: oklch(0.96 0.005 80);
+ --color-text-secondary: oklch(0.74 0.008 80);
+ --color-text-muted: oklch(0.55 0.008 80);
+ --color-text-inverse: oklch(0.16 0.006 60);
+ --color-border: oklch(0.3 0.008 60);
+ --color-border-strong: oklch(0.4 0.01 60);
+ --color-code-bg: oklch(0.135 0.006 60);
+ --color-code-text: oklch(0.92 0.008 80);
+ --shadow-xs: 0 1px 2px 0 oklch(0 0 0 / 0.4);
+ --shadow-sm: 0 1px 2px 0 oklch(0 0 0 / 0.45), 0 1px 3px 0 oklch(0 0 0 / 0.3);
+ --shadow-md: 0 4px 8px -2px oklch(0 0 0 / 0.5), 0 2px 4px -2px oklch(0 0 0 / 0.35);
+ --shadow-lg: 0 14px 28px -8px oklch(0 0 0 / 0.6), 0 4px 8px -4px oklch(0 0 0 / 0.4);
+ --shadow-xl: 0 32px 64px -16px oklch(0 0 0 / 0.7), 0 8px 16px -8px oklch(0 0 0 / 0.45);
+ --shadow-primary: 0 6px 22px -4px oklch(0.72 0.16 158 / 0.42), 0 0 0 1px oklch(0.72 0.16 158 / 0.2);
+ --shadow-primary-hover: 0 12px 34px -8px oklch(0.72 0.16 158 / 0.55), 0 0 0 1px oklch(0.72 0.16 158 / 0.3);
+}
+@layer base {
+ html {
+ scroll-behavior: smooth;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-rendering: optimizeLegibility;
+ }
+ body {
+ background-color: var(--color-surface-sunken);
+ color: var(--color-text);
+ 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));
+ --tw-duration: 300ms;
+ transition-duration: 300ms;
+ font-family: var(--font-body);
+ font-feature-settings: "ss01", "cv11", "cv05";
+ font-optical-sizing: auto;
+ letter-spacing: -0.005em;
+ }
+ h1, h2, h3, h4, h5, h6 {
+ margin-top: 0;
+ font-family: var(--font-display);
+ font-optical-sizing: auto;
+ font-variation-settings: "opsz" 144, "SOFT" 30, "WONK" 0;
+ letter-spacing: -0.025em;
+ --tw-font-weight: var(--font-weight-medium);
+ font-weight: var(--font-weight-medium);
+ color: var(--color-text);
+ }
+ h1 {
+ font-size: var(--text-2xl);
+ line-height: var(--tw-leading, var(--text-2xl--line-height));
+ @media (width >= 40rem) {
+ font-size: var(--text-3xl);
+ line-height: var(--tw-leading, var(--text-3xl--line-height));
+ }
+ letter-spacing: -0.035em;
+ font-weight: 500;
+ }
+ h2 {
+ font-size: var(--text-xl);
+ line-height: var(--tw-leading, var(--text-xl--line-height));
+ @media (width >= 40rem) {
+ font-size: var(--text-2xl);
+ line-height: var(--tw-leading, var(--text-2xl--line-height));
+ }
+ letter-spacing: -0.03em;
+ }
+ h3 {
+ font-size: var(--text-lg);
+ line-height: var(--tw-leading, var(--text-lg--line-height));
+ @media (width >= 40rem) {
+ font-size: var(--text-xl);
+ line-height: var(--tw-leading, var(--text-xl--line-height));
+ }
+ }
+ label {
+ margin-bottom: calc(var(--spacing) * 1.5);
+ display: block;
+ 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-text-secondary);
+ font-family: var(--font-body);
+ letter-spacing: 0;
+ }
+ input[type="email"], input[type="password"], input[type="text"], input[type="tel"] {
+ width: 100%;
+ border-radius: var(--radius-xl);
+ border-style: var(--tw-border-style);
+ border-width: 1px;
+ border-color: var(--color-border);
+ background-color: var(--color-surface);
+ padding-inline: calc(var(--spacing) * 3);
+ padding-block: calc(var(--spacing) * 2.5);
+ font-size: var(--text-sm);
+ line-height: var(--tw-leading, var(--text-sm--line-height));
+ color: var(--color-text);
+ &::placeholder {
+ color: var(--color-text-muted);
+ }
+ transition-property: all;
+ 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;
+ @media (width >= 40rem) {
+ padding-inline: calc(var(--spacing) * 4);
+ }
+ @media (width >= 40rem) {
+ padding-block: calc(var(--spacing) * 3);
+ }
+ box-shadow: var(--shadow-xs);
+ }
+ input[type="email"]:focus, input[type="password"]:focus, input[type="text"]:focus, input[type="tel"]:focus {
+ border-color: var(--color-primary);
+ --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);
+ --tw-ring-color: var(--color-primary-ring);
+ --tw-outline-style: none;
+ outline-style: none;
+ }
+ a {
+ color: var(--color-primary);
+ 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));
+ --tw-duration: 150ms;
+ transition-duration: 150ms;
+ }
+ a:hover {
+ color: var(--color-primary-hover);
+ }
+ hr {
+ margin-block: calc(var(--spacing) * 6);
+ border-top-style: var(--tw-border-style);
+ border-top-width: 1px;
+ border-color: var(--color-border);
+ }
+ ::selection {
+ background: oklch(0.62 0.16 158 / 0.25);
+ color: var(--color-text);
+ }
+ .dark ::selection {
+ background: oklch(0.72 0.16 158 / 0.3);
+ }
+}
+@layer components {
+ .glass-card {
+ border-radius: var(--radius-2xl);
+ border-style: var(--tw-border-style);
+ border-width: 1px;
+ border-color: var(--color-border);
+ background-color: var(--color-surface-overlay);
+ backdrop-filter: blur(24px) saturate(180%);
+ -webkit-backdrop-filter: blur(24px) saturate(180%);
+ box-shadow: var(--shadow-lg);
+ }
+ .dark .glass-card {
+ box-shadow: inset 0 1px 0 0 oklch(1 0 0 / 0.04), var(--shadow-xl);
+ }
+ .btn-primary, .btn-secondary, .btn-ghost, .btn-danger, .btn-outline {
+ display: inline-flex;
+ cursor: pointer;
+ align-items: center;
+ justify-content: center;
+ gap: calc(var(--spacing) * 2);
+ border-radius: var(--radius-xl);
+ --tw-border-style: none;
+ border-style: none;
+ padding-inline: calc(var(--spacing) * 5);
+ padding-block: calc(var(--spacing) * 2.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);
+ text-decoration-line: none;
+ transition-property: all;
+ 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: var(--ease-out);
+ transition-timing-function: var(--ease-out);
+ font-family: var(--font-body);
+ letter-spacing: -0.005em;
+ }
+ .btn-primary:active, .btn-secondary:active, .btn-ghost:active, .btn-danger:active, .btn-outline:active {
+ transform: scale(0.97);
+ }
+ .btn-primary {
+ background-color: var(--color-primary);
+ color: var(--color-white);
+ box-shadow: var(--shadow-primary);
+ }
+ .btn-primary:hover {
+ background: var(--color-primary-hover);
+ box-shadow: var(--shadow-primary-hover);
+ transform: translateY(-1px);
+ }
+ .btn-secondary {
+ border-style: var(--tw-border-style);
+ border-width: 1px;
+ border-color: var(--color-border);
+ background-color: var(--color-surface);
+ color: var(--color-text);
+ box-shadow: var(--shadow-xs);
+ }
+ .btn-secondary:hover {
+ border-color: var(--color-border-strong);
+ background-color: var(--color-surface-raised);
+ box-shadow: var(--shadow-sm);
+ }
+ .btn-ghost {
+ background-color: transparent;
+ color: var(--color-text-secondary);
+ }
+ .btn-ghost:hover {
+ background-color: var(--color-primary-subtle);
+ color: var(--color-primary);
+ }
+ .btn-danger {
+ background-color: var(--color-danger);
+ color: var(--color-white);
+ box-shadow: var(--shadow-danger);
+ }
+ .btn-danger:hover {
+ background-color: var(--color-danger-hover);
+ box-shadow: var(--shadow-danger-hover);
+ transform: translateY(-1px);
+ }
+ .btn-outline {
+ border-style: var(--tw-border-style);
+ border-width: 2px;
+ border-color: color-mix(in srgb, oklch(0.62 0.16 158) 30%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, var(--color-primary) 30%, transparent);
+ }
+ background-color: transparent;
+ color: var(--color-primary);
+ }
+ .btn-outline:hover {
+ border-color: var(--color-primary);
+ background-color: var(--color-primary-subtle);
+ }
+ .btn-sm {
+ border-radius: var(--radius-lg);
+ padding-inline: calc(var(--spacing) * 3.5);
+ padding-block: calc(var(--spacing) * 1.5);
+ font-size: var(--text-xs);
+ line-height: var(--tw-leading, var(--text-xs--line-height));
+ }
+ .btn-lg {
+ padding-inline: calc(var(--spacing) * 8);
+ padding-block: calc(var(--spacing) * 3.5);
+ font-size: var(--text-base);
+ line-height: var(--tw-leading, var(--text-base--line-height));
+ }
+ .form-group {
+ margin-bottom: calc(var(--spacing) * 5);
+ }
+ .badge-success, .badge-danger, .badge-warning, .badge-info {
+ display: inline-flex;
+ align-items: center;
+ border-radius: calc(infinity * 1px);
+ padding-inline: calc(var(--spacing) * 2.5);
+ padding-block: calc(var(--spacing) * 1);
+ 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);
+ letter-spacing: 0;
+ }
+ .badge-success {
+ background-color: var(--color-success-bg);
+ color: var(--color-success-text);
+ }
+ .badge-danger {
+ background-color: var(--color-danger-bg);
+ color: var(--color-danger-text);
+ }
+ .badge-warning {
+ background-color: var(--color-warning-bg);
+ color: var(--color-warning-text);
+ }
+ .badge-info {
+ background-color: var(--color-info-bg);
+ color: var(--color-primary);
+ }
+ .alert-success, .alert-danger, .alert-warning, .alert-info {
+ border-radius: var(--radius-xl);
+ border-style: var(--tw-border-style);
+ border-width: 1px;
+ padding: calc(var(--spacing) * 4);
+ font-size: var(--text-sm);
+ line-height: var(--tw-leading, var(--text-sm--line-height));
+ }
+ .alert-success {
+ border-color: color-mix(in srgb, oklch(0.62 0.16 158) 20%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, var(--color-success) 20%, transparent);
+ }
+ background-color: var(--color-success-bg);
+ color: var(--color-success-text);
+ }
+ .alert-danger {
+ border-color: color-mix(in srgb, oklch(0.6 0.21 17) 20%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, var(--color-danger) 20%, transparent);
+ }
+ background-color: var(--color-danger-bg);
+ color: var(--color-danger-text);
+ }
+ .alert-warning {
+ border-color: var(--color-warning-border);
+ background-color: var(--color-warning-bg);
+ color: var(--color-warning-text);
+ }
+ .alert-info {
+ border-color: color-mix(in srgb, oklch(0.65 0.16 232) 20%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, var(--color-info) 20%, transparent);
+ }
+ background-color: var(--color-info-bg);
+ color: var(--color-primary);
+ }
+ .code-block {
+ overflow: auto;
+ border-radius: var(--radius-xl);
+ border-style: var(--tw-border-style);
+ border-width: 1px;
+ border-color: var(--color-border);
+ background-color: var(--color-code-bg);
+ padding: calc(var(--spacing) * 4);
+ font-size: var(--text-xs);
+ line-height: var(--tw-leading, var(--text-xs--line-height));
+ color: var(--color-code-text);
+ font-family: var(--font-mono);
+ font-feature-settings: "calt", "liga";
+ }
+ .panel {
+ margin-bottom: calc(var(--spacing) * 8);
+ }
+ .panel-title {
+ margin-bottom: calc(var(--spacing) * 4);
+ display: flex;
+ align-items: center;
+ gap: calc(var(--spacing) * 2.5);
+ padding-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-semibold);
+ font-weight: var(--font-weight-semibold);
+ font-family: var(--font-display);
+ font-variation-settings: "opsz" 144, "SOFT" 0, "WONK" 0;
+ letter-spacing: -0.02em;
+ }
+ .panel-title::before {
+ content: "";
+ height: calc(var(--spacing) * 5);
+ width: calc(var(--spacing) * 1);
+ border-radius: calc(infinity * 1px);
+ background-color: var(--color-primary);
+ }
+ .card {
+ border-radius: var(--radius-xl);
+ border-style: var(--tw-border-style);
+ border-width: 1px;
+ border-color: var(--color-border);
+ background-color: var(--color-surface);
+ padding: calc(var(--spacing) * 4);
+ transition-property: all;
+ 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;
+ @media (width >= 40rem) {
+ border-radius: var(--radius-2xl);
+ }
+ @media (width >= 40rem) {
+ padding: calc(var(--spacing) * 5);
+ }
+ box-shadow: var(--shadow-xs);
+ }
+ .card:hover {
+ border-color: var(--color-border-strong);
+ box-shadow: var(--shadow-sm);
+ }
+ .table-responsive {
+ margin-inline: calc(var(--spacing) * -4);
+ overflow-x: auto;
+ @media (width >= 40rem) {
+ margin-inline: calc(var(--spacing) * 0);
+ }
+ }
+ .table-responsive > table {
+ min-width: 600px;
+ @media (width >= 40rem) {
+ min-width: calc(var(--spacing) * 0);
+ }
+ }
+ .scrollbar-hide {
+ -ms-overflow-style: none;
+ scrollbar-width: none;
+ }
+ .scrollbar-hide::-webkit-scrollbar {
+ display: none;
+ }
+ .manage-tab {
+ display: inline-flex;
+ flex-shrink: 0;
+ align-items: center;
+ gap: calc(var(--spacing) * 2);
+ border-bottom-style: var(--tw-border-style);
+ border-bottom-width: 2px;
+ border-color: transparent;
+ padding-inline: calc(var(--spacing) * 4);
+ padding-block: calc(var(--spacing) * 2.5);
+ font-size: var(--text-sm);
+ line-height: var(--tw-leading, var(--text-sm--line-height));
+ white-space: nowrap;
+ color: var(--color-text-muted);
+ text-decoration-line: none;
+ 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));
+ --tw-duration: 150ms;
+ transition-duration: 150ms;
+ }
+ .manage-tab:hover {
+ color: var(--color-text);
+ }
+ .manage-tab-active {
+ display: inline-flex;
+ flex-shrink: 0;
+ align-items: center;
+ gap: calc(var(--spacing) * 2);
+ border-bottom-style: var(--tw-border-style);
+ border-bottom-width: 2px;
+ border-color: var(--color-primary);
+ padding-inline: calc(var(--spacing) * 4);
+ padding-block: calc(var(--spacing) * 2.5);
+ 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);
+ white-space: nowrap;
+ color: var(--color-primary);
+ text-decoration-line: none;
+ }
+ .public-overlay {
+ position: fixed;
+ inset: calc(var(--spacing) * 0);
+ z-index: 50;
+ background-color: var(--color-surface);
+ opacity: 0;
+ pointer-events: none;
+ transition: opacity 0.25s ease;
+ }
+ .public-overlay.open {
+ opacity: 1;
+ pointer-events: auto;
+ }
+ .nav-link-active, .nav-link-inactive {
+ display: block;
+ border-radius: var(--radius-xl);
+ padding-inline: calc(var(--spacing) * 4);
+ padding-block: calc(var(--spacing) * 2.5);
+ font-size: var(--text-sm);
+ line-height: var(--tw-leading, var(--text-sm--line-height));
+ text-decoration-line: none;
+ transition-property: all;
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
+ --tw-duration: 150ms;
+ transition-duration: 150ms;
+ }
+ .nav-link-active {
+ background-color: var(--color-primary-subtle);
+ --tw-font-weight: var(--font-weight-semibold);
+ font-weight: var(--font-weight-semibold);
+ color: var(--color-primary);
+ }
+ .nav-link-inactive {
+ color: var(--color-text-secondary);
+ }
+ .nav-link-inactive:hover {
+ background-color: var(--color-surface-raised);
+ color: var(--color-text);
+ }
+ .sidebar-nav-link-active, .sidebar-nav-link-inactive {
+ position: relative;
+ display: flex;
+ align-items: center;
+ gap: calc(var(--spacing) * 3);
+ border-radius: var(--radius-xl);
+ padding-inline: calc(var(--spacing) * 3);
+ padding-block: calc(var(--spacing) * 2);
+ font-size: var(--text-sm);
+ line-height: var(--tw-leading, var(--text-sm--line-height));
+ text-decoration-line: none;
+ transition-property: all;
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
+ --tw-duration: 150ms;
+ transition-duration: 150ms;
+ --tw-outline-style: none;
+ outline-style: none;
+ &:focus-visible {
+ --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);
+ }
+ &:focus-visible {
+ --tw-ring-color: var(--color-primary-ring);
+ }
+ }
+ .sidebar-nav-link-active {
+ background-color: var(--color-primary-subtle);
+ --tw-font-weight: var(--font-weight-medium);
+ font-weight: var(--font-weight-medium);
+ color: var(--color-primary);
+ }
+ .sidebar-nav-link-active::before {
+ content: "";
+ position: absolute;
+ left: -0.75rem;
+ top: 50%;
+ transform: translateY(-50%);
+ width: 3px;
+ height: 1.25rem;
+ border-radius: 0 3px 3px 0;
+ background: var(--color-primary);
+ }
+ .sidebar-nav-link-inactive {
+ color: var(--color-text-secondary);
+ }
+ .sidebar-nav-link-inactive:hover {
+ background-color: var(--color-surface-raised);
+ color: var(--color-text);
+ }
+}
+@layer utilities {
+ .focus-ring {
+ --tw-outline-style: none;
+ outline-style: none;
+ &:focus-visible {
+ border-color: var(--color-primary);
+ }
+ &:focus-visible {
+ --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);
+ }
+ &:focus-visible {
+ --tw-ring-color: var(--color-primary-ring);
+ }
+ }
+ .focus-ring-danger {
+ --tw-outline-style: none;
+ outline-style: none;
+ &:focus-visible {
+ border-color: var(--color-danger);
+ }
+ &:focus-visible {
+ --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);
+ }
+ &:focus-visible {
+ --tw-ring-color: var(--color-danger-bg);
+ }
+ }
+}
+@layer utilities {
+ .gradient-text {
+ color: var(--color-primary);
+ }
+ .gradient-border {
+ position: relative;
+ }
+ .gradient-border::before {
+ content: "";
+ position: absolute;
+ inset: 0;
+ border-radius: inherit;
+ padding: 1px;
+ background: var(--color-primary);
+ mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
+ mask-composite: exclude;
+ -webkit-mask-composite: xor;
+ pointer-events: none;
+ }
+ .font-display {
+ font-family: var(--font-display);
+ font-optical-sizing: auto;
+ }
+ .font-body {
+ font-family: var(--font-body);
+ }
+}
+@layer components {
+ .bg-mesh {
+ position: fixed;
+ inset: 0;
+ z-index: -1;
+ background: var(--color-surface-sunken);
+ }
+ .dark body::before {
+ content: "";
+ position: fixed;
+ inset: 0;
+ pointer-events: none;
+ z-index: 0;
+ opacity: 0.025;
+ mix-blend-mode: overlay;
+ background-image: url("data:image/svg+xml;utf8, ");
+ }
+ .spinner {
+ margin-left: calc(var(--spacing) * 2);
+ display: inline-block;
+ height: calc(var(--spacing) * 4);
+ width: calc(var(--spacing) * 4);
+ animation: var(--animate-spin);
+ border-radius: calc(infinity * 1px);
+ border-style: var(--tw-border-style);
+ border-width: 2px;
+ border-color: var(--color-border);
+ border-top-color: var(--color-primary);
+ vertical-align: middle;
+ }
+ .user-dropdown-wrap {
+ position: relative;
+ }
+ .user-dropdown-trigger {
+ display: flex;
+ cursor: pointer;
+ align-items: center;
+ gap: calc(var(--spacing) * 2);
+ border-radius: var(--radius-xl);
+ --tw-border-style: none;
+ border-style: none;
+ background-color: transparent;
+ padding-inline: calc(var(--spacing) * 2);
+ padding-block: calc(var(--spacing) * 1.5);
+ transition-property: all;
+ 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;
+ }
+ .user-dropdown-trigger:hover {
+ background-color: var(--color-surface-raised);
+ }
+ .user-dropdown-trigger[aria-expanded="true"] {
+ background-color: var(--color-surface-raised);
+ }
+ .user-dropdown {
+ position: absolute;
+ right: 0;
+ top: calc(100% + 6px);
+ width: 240px;
+ border-radius: var(--radius-xl);
+ border-style: var(--tw-border-style);
+ border-width: 1px;
+ border-color: var(--color-border);
+ background-color: var(--color-surface);
+ box-shadow: var(--shadow-lg);
+ opacity: 0;
+ transform: translateY(-4px) scale(0.97);
+ pointer-events: none;
+ transition: opacity 0.18s ease, transform 0.18s ease;
+ z-index: 100;
+ }
+ .user-dropdown.open {
+ opacity: 1;
+ transform: translateY(0) scale(1);
+ pointer-events: auto;
+ }
+ .app-sidebar .user-dropdown {
+ top: auto;
+ bottom: calc(100% + 6px);
+ left: 0;
+ right: auto;
+ transform: translateY(4px) scale(0.97);
+ }
+ .app-sidebar .user-dropdown.open {
+ transform: translateY(0) scale(1);
+ }
+ .dark .user-dropdown {
+ box-shadow: inset 0 1px 0 0 oklch(1 0 0 / 0.04), var(--shadow-xl);
+ }
+ .user-dropdown-header {
+ border-bottom-style: var(--tw-border-style);
+ border-bottom-width: 1px;
+ border-color: var(--color-border);
+ padding-inline: calc(var(--spacing) * 4);
+ padding-block: calc(var(--spacing) * 3);
+ }
+ .user-dropdown-body {
+ padding-block: calc(var(--spacing) * 1.5);
+ }
+ .user-dropdown-item {
+ display: flex;
+ cursor: pointer;
+ align-items: center;
+ gap: calc(var(--spacing) * 2.5);
+ padding-inline: calc(var(--spacing) * 4);
+ padding-block: calc(var(--spacing) * 2);
+ font-size: var(--text-sm);
+ line-height: var(--tw-leading, var(--text-sm--line-height));
+ color: var(--color-text-secondary);
+ text-decoration-line: none;
+ 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));
+ --tw-duration: 150ms;
+ transition-duration: 150ms;
+ }
+ .user-dropdown-item:hover {
+ background-color: var(--color-surface-raised);
+ color: var(--color-text);
+ }
+ .user-dropdown-divider {
+ margin-block: calc(var(--spacing) * 1.5);
+ border-top-style: var(--tw-border-style);
+ border-top-width: 1px;
+ border-color: var(--color-border);
+ }
+ .user-dropdown-item.danger {
+ color: var(--color-danger);
+ }
+ .user-dropdown-item.danger:hover {
+ background-color: var(--color-danger-bg);
+ color: var(--color-danger);
+ }
+ .dash-card {
+ border-radius: var(--radius-xl);
+ border-style: var(--tw-border-style);
+ border-width: 1px;
+ border-color: var(--color-border);
+ background-color: var(--color-surface);
+ padding: calc(var(--spacing) * 4);
+ transition-property: all;
+ 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;
+ @media (width >= 40rem) {
+ border-radius: var(--radius-2xl);
+ }
+ @media (width >= 40rem) {
+ padding: calc(var(--spacing) * 5);
+ }
+ box-shadow: var(--shadow-xs);
+ }
+ .dash-card:hover {
+ border-color: var(--color-border-strong);
+ box-shadow: var(--shadow-md);
+ transform: translateY(-1px);
+ }
+ .dash-stat {
+ font-size: var(--text-2xl);
+ line-height: var(--tw-leading, var(--text-2xl--line-height));
+ --tw-tracking: var(--tracking-tight);
+ letter-spacing: var(--tracking-tight);
+ @media (width >= 40rem) {
+ font-size: var(--text-3xl);
+ line-height: var(--tw-leading, var(--text-3xl--line-height));
+ }
+ font-family: var(--font-display);
+ font-variation-settings: "opsz" 144, "SOFT" 30, "WONK" 0;
+ font-weight: 500;
+ letter-spacing: -0.035em;
+ }
+ .dash-label {
+ margin-top: calc(var(--spacing) * 1);
+ 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);
+ --tw-tracking: var(--tracking-wider);
+ letter-spacing: var(--tracking-wider);
+ color: var(--color-text-muted);
+ text-transform: uppercase;
+ letter-spacing: 0.08em;
+ }
+ .validation-message {
+ margin-top: 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-danger);
+ }
+ .app-layout {
+ display: flex;
+ flex-direction: column;
+ min-height: 100vh;
+ }
+ .app-sidebar {
+ flex-shrink: 0;
+ border-right-style: var(--tw-border-style);
+ border-right-width: 1px;
+ border-color: var(--color-border);
+ background-color: var(--color-surface);
+ position: fixed;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ z-index: 40;
+ transition: width 0.2s ease, transform 0.25s ease;
+ width: 16rem;
+ transform: translateX(-100%);
+ }
+ .dark .app-sidebar {
+ background: var(--color-surface);
+ }
+ .app-sidebar.app-sidebar-open {
+ transform: translateX(0);
+ }
+ .app-sidebar.app-sidebar-collapsed {
+ width: 4rem;
+ }
+ .app-sidebar.app-sidebar-collapsed .sidebar-label {
+ display: none;
+ }
+ .app-sidebar.app-sidebar-collapsed .sidebar-icon {
+ margin: 0 auto;
+ }
+ .app-content {
+ flex: 1;
+ margin-left: 0;
+ transition: margin-left 0.2s ease;
+ }
+ .app-sidebar-backdrop {
+ position: fixed;
+ inset: calc(var(--spacing) * 0);
+ z-index: 30;
+ 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;
+ pointer-events: none;
+ transition: opacity 0.25s ease;
+ }
+ .app-sidebar-backdrop.visible {
+ opacity: 1;
+ pointer-events: auto;
+ }
+ .app-sidebar-toggle {
+ position: fixed;
+ bottom: calc(var(--spacing) * 4);
+ z-index: 50;
+ height: calc(var(--spacing) * 7);
+ width: calc(var(--spacing) * 7);
+ cursor: pointer;
+ align-items: center;
+ justify-content: center;
+ border-radius: calc(infinity * 1px);
+ border-style: var(--tw-border-style);
+ border-width: 1px;
+ border-color: var(--color-border);
+ background-color: var(--color-surface);
+ color: var(--color-text-muted);
+ transition-property: all;
+ 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;
+ &:hover {
+ @media (hover: hover) {
+ background-color: var(--color-surface-raised);
+ }
+ }
+ &:hover {
+ @media (hover: hover) {
+ color: var(--color-text);
+ }
+ }
+ left: 1rem;
+ display: none;
+ box-shadow: var(--shadow-sm);
+ }
+ .app-mobile-header {
+ position: sticky;
+ top: calc(var(--spacing) * 0);
+ z-index: 20;
+ display: flex;
+ align-items: center;
+ gap: calc(var(--spacing) * 3);
+ border-bottom-style: var(--tw-border-style);
+ border-bottom-width: 1px;
+ border-color: var(--color-border);
+ background-color: var(--color-surface);
+ padding-inline: calc(var(--spacing) * 4);
+ padding-block: calc(var(--spacing) * 3);
+ backdrop-filter: blur(12px) saturate(180%);
+ -webkit-backdrop-filter: blur(12px) saturate(180%);
+ background: var(--color-surface-overlay);
+ }
+ @media (min-width: 768px) {
+ .app-sidebar {
+ transform: translateX(0);
+ }
+ .app-content {
+ margin-left: 16rem;
+ }
+ .app-sidebar-collapsed ~ .app-content {
+ margin-left: 4rem;
+ }
+ .app-sidebar-backdrop {
+ display: none;
+ }
+ .app-sidebar-toggle {
+ display: flex;
+ left: 15rem;
+ }
+ .app-sidebar-collapsed ~ .app-sidebar-toggle {
+ left: 3rem;
+ }
+ .app-mobile-header {
+ display: none;
+ }
+ .public-overlay {
+ display: none;
+ }
+ }
+ .markdown-content h1 {
+ margin-top: calc(var(--spacing) * 6);
+ margin-bottom: calc(var(--spacing) * 3);
+ font-size: var(--text-3xl);
+ line-height: var(--tw-leading, var(--text-3xl--line-height));
+ color: var(--color-text);
+ font-family: var(--font-display);
+ font-variation-settings: "opsz" 144, "SOFT" 0;
+ letter-spacing: -0.035em;
+ font-weight: 500;
+ }
+ .markdown-content h2 {
+ margin-top: calc(var(--spacing) * 5);
+ margin-bottom: calc(var(--spacing) * 2);
+ font-size: var(--text-2xl);
+ line-height: var(--tw-leading, var(--text-2xl--line-height));
+ color: var(--color-text);
+ font-family: var(--font-display);
+ letter-spacing: -0.03em;
+ font-weight: 500;
+ }
+ .markdown-content h3 {
+ margin-top: calc(var(--spacing) * 4);
+ margin-bottom: calc(var(--spacing) * 2);
+ font-size: var(--text-xl);
+ line-height: var(--tw-leading, var(--text-xl--line-height));
+ color: var(--color-text);
+ font-family: var(--font-display);
+ font-weight: 500;
+ }
+ .markdown-content h4 {
+ margin-top: calc(var(--spacing) * 3);
+ margin-bottom: calc(var(--spacing) * 1);
+ font-size: var(--text-base);
+ line-height: var(--tw-leading, var(--text-base--line-height));
+ --tw-font-weight: var(--font-weight-semibold);
+ font-weight: var(--font-weight-semibold);
+ color: var(--color-text);
+ }
+ .markdown-content p {
+ margin-bottom: calc(var(--spacing) * 3);
+ --tw-leading: var(--leading-relaxed);
+ line-height: var(--leading-relaxed);
+ color: var(--color-text-secondary);
+ }
+ .markdown-content ul {
+ margin-bottom: calc(var(--spacing) * 3);
+ list-style-type: disc;
+ padding-left: calc(var(--spacing) * 6);
+ color: var(--color-text-secondary);
+ }
+ .markdown-content ol {
+ margin-bottom: calc(var(--spacing) * 3);
+ list-style-type: decimal;
+ padding-left: calc(var(--spacing) * 6);
+ color: var(--color-text-secondary);
+ }
+ .markdown-content li {
+ margin-bottom: calc(var(--spacing) * 1);
+ }
+ .markdown-content code {
+ border-radius: 0.25rem;
+ background-color: var(--color-surface-sunken);
+ padding-inline: calc(var(--spacing) * 1.5);
+ padding-block: calc(var(--spacing) * 0.5);
+ font-size: var(--text-xs);
+ line-height: var(--tw-leading, var(--text-xs--line-height));
+ color: var(--color-text);
+ font-family: var(--font-mono);
+ }
+ .markdown-content pre {
+ margin-bottom: calc(var(--spacing) * 3);
+ overflow: auto;
+ border-radius: var(--radius-xl);
+ background-color: var(--color-code-bg);
+ padding: calc(var(--spacing) * 4);
+ font-size: var(--text-xs);
+ line-height: var(--tw-leading, var(--text-xs--line-height));
+ color: var(--color-code-text);
+ }
+ .markdown-content pre code {
+ background-color: transparent;
+ padding: calc(var(--spacing) * 0);
+ color: var(--color-code-text);
+ }
+ .markdown-content a {
+ color: var(--color-primary);
+ &:hover {
+ @media (hover: hover) {
+ text-decoration-line: underline;
+ }
+ }
+ }
+ .markdown-content blockquote {
+ margin-block: calc(var(--spacing) * 3);
+ border-left-style: var(--tw-border-style);
+ border-left-width: 4px;
+ border-color: color-mix(in srgb, oklch(0.62 0.16 158) 30%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, var(--color-primary) 30%, transparent);
+ }
+ padding-left: calc(var(--spacing) * 4);
+ color: var(--color-text-muted);
+ font-style: italic;
+ font-family: var(--font-display);
+ font-variation-settings: "opsz" 144, "SOFT" 50;
+ }
+ .markdown-content img {
+ margin-block: calc(var(--spacing) * 3);
+ max-width: 100%;
+ border-radius: var(--radius-lg);
+ }
+ .markdown-content table {
+ margin-block: calc(var(--spacing) * 3);
+ width: 100%;
+ border-collapse: collapse;
+ font-size: var(--text-sm);
+ line-height: var(--tw-leading, var(--text-sm--line-height));
+ }
+ .markdown-content th {
+ border-bottom-style: var(--tw-border-style);
+ border-bottom-width: 1px;
+ border-color: var(--color-border);
+ padding: calc(var(--spacing) * 2);
+ text-align: left;
+ --tw-font-weight: var(--font-weight-semibold);
+ font-weight: var(--font-weight-semibold);
+ color: var(--color-text);
+ }
+ .markdown-content td {
+ border-bottom-style: var(--tw-border-style);
+ border-bottom-width: 1px;
+ border-color: var(--color-border);
+ padding: calc(var(--spacing) * 2);
+ color: var(--color-text-secondary);
+ }
+ .markdown-content hr {
+ margin-block: calc(var(--spacing) * 6);
+ border-color: var(--color-border);
+ }
+ .markdown-content > *:first-child {
+ margin-top: calc(var(--spacing) * 0);
+ }
+}
+@layer base {
+ table {
+ width: 100%;
+ font-size: var(--text-sm);
+ line-height: var(--tw-leading, var(--text-sm--line-height));
+ }
+ table th {
+ padding-inline: calc(var(--spacing) * 4);
+ padding-top: calc(var(--spacing) * 4);
+ padding-bottom: calc(var(--spacing) * 3);
+ text-align: left;
+ font-size: var(--text-xs);
+ line-height: var(--tw-leading, var(--text-xs--line-height));
+ --tw-font-weight: var(--font-weight-semibold);
+ font-weight: var(--font-weight-semibold);
+ color: var(--color-text-muted);
+ text-transform: uppercase;
+ letter-spacing: 0.08em;
+ background: var(--color-surface-sunken);
+ vertical-align: middle;
+ white-space: nowrap;
+ }
+ table td {
+ border-top-style: var(--tw-border-style);
+ border-top-width: 1px;
+ border-color: var(--color-border);
+ padding-inline: calc(var(--spacing) * 4);
+ padding-block: calc(var(--spacing) * 3);
+ color: var(--color-text-secondary);
+ vertical-align: middle;
+ }
+ table th:first-child, table td:first-child {
+ padding-left: calc(var(--spacing) * 5);
+ }
+ table th:last-child, table td:last-child {
+ padding-right: calc(var(--spacing) * 5);
+ }
+ table td.num, table th.num {
+ text-align: right;
+ font-family: var(--font-mono);
+ font-variant-numeric: tabular-nums;
+ }
+ table[data-interactive] tbody tr {
+ transition: background-color var(--duration-fast) var(--ease-out);
+ }
+ table[data-interactive] tbody tr:hover {
+ background: var(--color-surface-raised);
+ }
+ ::-webkit-scrollbar {
+ width: 6px;
+ height: 6px;
+ }
+ ::-webkit-scrollbar-track {
+ background: transparent;
+ }
+ ::-webkit-scrollbar-thumb {
+ border-radius: calc(infinity * 1px);
+ background-color: var(--color-border-strong);
+ }
+ ::-webkit-scrollbar-thumb:hover {
+ background-color: var(--color-text-muted);
+ }
+}
+@media (prefers-reduced-motion: reduce) {
+ .app-sidebar, .app-sidebar-backdrop, .app-sidebar-toggle, .public-overlay {
+ transition: none !important;
+ }
+}
+@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-divide-y-reverse {
+ syntax: "*";
+ inherits: false;
+ initial-value: 0;
+}
+@property --tw-border-style {
+ syntax: "*";
+ inherits: false;
+ initial-value: solid;
+}
+@property --tw-gradient-position {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-gradient-from {
+ syntax: "";
+ inherits: false;
+ initial-value: #0000;
+}
+@property --tw-gradient-via {
+ syntax: "";
+ inherits: false;
+ initial-value: #0000;
+}
+@property --tw-gradient-to {
+ syntax: "";
+ inherits: false;
+ initial-value: #0000;
+}
+@property --tw-gradient-stops {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-gradient-via-stops {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-gradient-from-position {
+ syntax: "";
+ inherits: false;
+ initial-value: 0%;
+}
+@property --tw-gradient-via-position {
+ syntax: "";
+ inherits: false;
+ initial-value: 50%;
+}
+@property --tw-gradient-to-position {
+ syntax: "";
+ inherits: false;
+ initial-value: 100%;
+}
+@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-backdrop-blur {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-backdrop-brightness {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-backdrop-contrast {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-backdrop-grayscale {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-backdrop-hue-rotate {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-backdrop-invert {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-backdrop-opacity {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-backdrop-saturate {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-backdrop-sepia {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-duration {
+ syntax: "*";
+ 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;
+}
+@property --tw-content {
+ syntax: "*";
+ initial-value: "";
+ inherits: false;
+}
+@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-divide-y-reverse: 0;
+ --tw-border-style: solid;
+ --tw-gradient-position: initial;
+ --tw-gradient-from: #0000;
+ --tw-gradient-via: #0000;
+ --tw-gradient-to: #0000;
+ --tw-gradient-stops: initial;
+ --tw-gradient-via-stops: initial;
+ --tw-gradient-from-position: 0%;
+ --tw-gradient-via-position: 50%;
+ --tw-gradient-to-position: 100%;
+ --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-backdrop-blur: initial;
+ --tw-backdrop-brightness: initial;
+ --tw-backdrop-contrast: initial;
+ --tw-backdrop-grayscale: initial;
+ --tw-backdrop-hue-rotate: initial;
+ --tw-backdrop-invert: initial;
+ --tw-backdrop-opacity: initial;
+ --tw-backdrop-saturate: initial;
+ --tw-backdrop-sepia: initial;
+ --tw-duration: initial;
+ --tw-ease: initial;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ --tw-scale-z: 1;
+ --tw-content: "";
+ }
+ }
+}
diff --git a/template/SimpleModule.Host/wwwroot/index.html b/template/SimpleModule.Host/wwwroot/index.html
index 22292500..c539cf77 100644
--- a/template/SimpleModule.Host/wwwroot/index.html
+++ b/template/SimpleModule.Host/wwwroot/index.html
@@ -6,7 +6,7 @@
-
+