/* Component classes (shadcn/ui-derived). The React components in components/ render these; plain HTML can use them directly. */
@keyframes ds-pop{from{opacity:0;transform:translateY(-4px) scale(.98)}}
@keyframes ds-fade{from{opacity:0}}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);height:var(--control);padding:0 var(--space-4);border:1px solid transparent;border-radius:var(--radius-md);font-family:var(--font-sans);font-size:var(--text-base);font-weight:500;line-height:1;white-space:nowrap;cursor:pointer;text-decoration:none;color:var(--foreground);background:transparent;user-select:none;transition:background-color var(--duration) var(--ease),border-color var(--duration) var(--ease),box-shadow var(--duration) var(--ease),color var(--duration) var(--ease)}
.btn:hover{text-decoration:none}
.btn:focus-visible{outline:none;border-color:var(--ring);box-shadow:0 0 0 3px var(--ring-soft)}
.btn:disabled,.btn[aria-disabled=true]{opacity:.5;pointer-events:none}
.btn svg,.btn .icon{flex:none;width:16px;height:16px}
.btn-default,.btn-primary{background:var(--primary);color:var(--primary-foreground)}
.btn-default:hover,.btn-primary:hover{background:var(--primary-hover);color:var(--primary-foreground)}
.btn-default:active,.btn-primary:active{background:var(--primary-active)}
.btn-secondary{background:var(--secondary);color:var(--secondary-foreground)}.btn-secondary:hover{background:var(--secondary-hover)}
.btn-outline{background:var(--background);border-color:var(--input);box-shadow:var(--shadow-xs)}.btn-outline:hover{background:var(--accent)}
.btn-ghost:hover{background:var(--accent)}.btn-ghost:active{background:var(--secondary-hover)}
.btn-destructive{background:var(--destructive);color:#fff}.btn-destructive:hover{background:var(--destructive-hover);color:#fff}
.btn-dark{background:var(--foreground);color:var(--background)}.btn-dark:hover{background:var(--zinc-800);color:var(--background)}
.btn-link{height:auto;padding:0;color:var(--primary);text-underline-offset:4px}.btn-link:hover{text-decoration:underline;color:var(--primary-hover)}
.btn-sm{height:var(--control-sm);padding:0 var(--space-3);gap:6px;font-size:var(--text-sm);border-radius:var(--radius-sm)}
.btn-lg{height:var(--control-lg);padding:0 var(--space-6)}
.btn-icon{width:var(--control);padding:0}
.btn-icon-sm{width:var(--control-sm);height:var(--control-sm);padding:0;border-radius:var(--radius-sm)}
.btn-pill{border-radius:var(--radius-full)}
.btn-block{width:100%}
.input{display:flex;align-items:center;width:100%;height:var(--control);padding:0 var(--space-3);font-family:var(--font-sans);font-size:var(--text-base);color:var(--foreground);background:var(--background);border:1px solid var(--input);border-radius:var(--radius-md);box-shadow:var(--shadow-xs);outline:none;transition:border-color var(--duration) var(--ease),box-shadow var(--duration) var(--ease)}
.input::placeholder{color:var(--muted-foreground)}
.input:focus,.input:focus-visible{border-color:var(--ring);box-shadow:0 0 0 3px var(--ring-soft)}
.input[aria-invalid=true]{border-color:var(--destructive);box-shadow:0 0 0 3px rgb(220 38 38 / .14)}
.input:disabled{opacity:.5;cursor:not-allowed;background:var(--muted)}
textarea.input,.textarea{min-height:76px;height:auto;padding:var(--space-2) var(--space-3);resize:vertical;line-height:var(--leading-normal)}
.input-sm{height:var(--control-sm);font-size:var(--text-sm)}
.label,.field>label{display:inline-flex;align-items:center;gap:var(--space-2);font-size:var(--text-base);font-weight:500;line-height:1;color:var(--foreground);user-select:none}
.field{display:grid;gap:var(--space-2)}
.field-hint{font-size:var(--text-sm);color:var(--muted-foreground)}
.field-error{font-size:var(--text-sm);color:var(--destructive)}
.checkbox{display:inline-grid;place-items:center;flex:none;width:16px;height:16px;padding:0;border:1px solid var(--zinc-300);border-radius:var(--radius-xs);background:var(--background);color:var(--primary-foreground);box-shadow:var(--shadow-xs);cursor:pointer;transition:background-color var(--duration) var(--ease),border-color var(--duration) var(--ease)}
.checkbox[data-state=checked]{background:var(--primary);border-color:var(--primary)}
.checkbox svg{width:12px;height:12px}
.checkbox:focus-visible,.radio:focus-visible,.switch:focus-visible{outline:none;box-shadow:0 0 0 3px var(--ring-soft);border-color:var(--ring)}
.checkbox:disabled,.radio:disabled,.switch:disabled{opacity:.5;cursor:not-allowed}
.check-row{display:inline-flex;align-items:center;gap:var(--space-2-5);font-size:var(--text-base);color:var(--foreground);cursor:pointer;user-select:none}
.check-row[data-disabled]{opacity:.5;cursor:not-allowed}
.radio-group{display:grid;gap:var(--space-3)}
.radio-group[data-orientation=horizontal]{grid-auto-flow:column;justify-content:start;gap:var(--space-5)}
.radio{display:grid;place-items:center;flex:none;width:16px;height:16px;padding:0;border:1px solid var(--zinc-300);border-radius:50%;background:var(--background);box-shadow:var(--shadow-xs);cursor:pointer}
.radio[data-state=checked]{border-color:var(--primary)}
.radio[data-state=checked]::after{content:"";width:8px;height:8px;border-radius:50%;background:var(--primary)}
.switch{position:relative;display:inline-flex;align-items:center;flex:none;width:32px;height:18px;padding:0;border:1px solid transparent;border-radius:var(--radius-full);background:var(--zinc-200);cursor:pointer;transition:background-color var(--duration) var(--ease)}
.switch[data-state=checked]{background:var(--primary)}
.switch-thumb{display:block;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 1px 2px rgb(0 0 0 / .2);transition:transform var(--duration) var(--ease)}
.switch[data-state=checked] .switch-thumb{transform:translateX(14px)}
.slider{position:relative;display:flex;align-items:center;width:100%;height:20px;touch-action:none;user-select:none;cursor:pointer}
.slider[data-disabled]{opacity:.5;pointer-events:none}
.slider-track{position:relative;flex:1;height:4px;border-radius:var(--radius-full);background:var(--zinc-200);overflow:hidden}
.slider-range{position:absolute;top:0;bottom:0;background:var(--primary)}
.slider-thumb{position:absolute;top:50%;width:16px;height:16px;margin:-8px 0 0 -8px;border-radius:50%;background:#fff;border:1.5px solid var(--primary);box-shadow:var(--shadow-sm);transition:box-shadow var(--duration) var(--ease)}
.slider-thumb:hover,.slider-thumb:focus-visible{outline:none;box-shadow:0 0 0 4px var(--ring-soft)}
.select{position:relative;display:inline-block;width:100%}
.select-trigger{justify-content:space-between;gap:var(--space-2);text-align:left;cursor:pointer}
.select-trigger>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.select-trigger[data-placeholder]>span{color:var(--muted-foreground)}
.select-trigger>svg{flex:none;width:16px;height:16px;color:var(--muted-foreground)}
.select-content{position:absolute;z-index:50;top:calc(100% + 4px);left:0;min-width:100%;max-height:280px;overflow:auto;padding:var(--space-1);background:var(--popover);color:var(--popover-foreground);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-md);animation:ds-pop 120ms var(--ease)}
.select-item{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);height:32px;padding:0 var(--space-2);border-radius:var(--radius-sm);font-size:var(--text-base);white-space:nowrap;cursor:pointer}
.select-item:hover{background:var(--accent)}
.select-item svg{width:14px;height:14px;color:var(--foreground)}
.toggle-group{display:inline-flex;align-items:center;gap:var(--space-1-5)}
.toggle{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:var(--control);min-width:var(--control);padding:0 var(--space-3);border:1px solid transparent;border-radius:var(--radius-md);background:var(--muted);font-family:var(--font-sans);font-size:var(--text-base);font-weight:500;color:var(--foreground);cursor:pointer;transition:background-color var(--duration) var(--ease),color var(--duration) var(--ease),border-color var(--duration) var(--ease)}
.toggle:hover{background:var(--secondary-hover)}
.toggle:focus-visible{outline:none;box-shadow:0 0 0 3px var(--ring-soft)}
.toggle svg,.toggle .icon{width:16px;height:16px}
.toggle[data-state=on]{background:var(--primary-soft);color:var(--primary-soft-foreground);border-color:var(--red-200)}
.toggle-sm{height:var(--control-sm);min-width:var(--control-sm);padding:0 var(--space-2);font-size:var(--text-sm)}
.toggle-group[data-variant=solid] .toggle[data-state=on]{background:var(--foreground);color:var(--background);border-color:var(--foreground)}
.toggle-group[data-variant=outline]{gap:0;border-radius:var(--radius-md);box-shadow:var(--shadow-xs)}
.toggle-group[data-variant=outline] .toggle{background:var(--background);border-color:var(--input);border-radius:0}
.toggle-group[data-variant=outline] .toggle+.toggle{border-left-width:0}
.toggle-group[data-variant=outline] .toggle:first-child{border-radius:var(--radius-md) 0 0 var(--radius-md)}
.toggle-group[data-variant=outline] .toggle:last-child{border-radius:0 var(--radius-md) var(--radius-md) 0}
.toggle-group[data-variant=outline] .toggle:hover{background:var(--accent)}
.toggle-group[data-variant=outline] .toggle[data-state=on]{background:var(--accent);color:var(--foreground);border-color:var(--input)}
.badge,.tag{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border:1px solid transparent;border-radius:var(--radius-sm);font-size:var(--text-xs);font-weight:500;line-height:16px;white-space:nowrap}
.badge svg,.badge .icon{width:12px;height:12px}
.badge-default,.tag-accent{background:var(--primary);color:var(--primary-foreground)}
.badge-soft{background:var(--primary-soft);color:var(--primary-soft-foreground)}
.badge-secondary,.tag-neutral,.tag-accent-2{background:var(--secondary);color:var(--secondary-foreground)}
.badge-outline,.tag-outline{border-color:var(--border);color:var(--foreground)}
.badge-destructive{background:var(--destructive);color:#fff}
.badge-success{background:var(--success-soft);color:var(--success-foreground)}
.badge-warning{background:var(--warning-soft);color:var(--warning-foreground)}
.badge-pill{border-radius:var(--radius-full)}
.badge-caps{font-size:10px;font-weight:600;letter-spacing:var(--tracking-wide);text-transform:uppercase}
.card{display:flex;flex-direction:column;gap:var(--space-6);padding:var(--space-6) 0;background:var(--card);color:var(--card-foreground);border:1px solid var(--border);border-radius:var(--radius-xl);box-shadow:var(--shadow-card)}
.card-flush{padding:0;gap:0;overflow:hidden}
.card-header{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px;padding:0 var(--space-6)}
.card-title{grid-column:1;margin:0;font-size:var(--text-lg);font-weight:600;line-height:var(--leading-tight);letter-spacing:-0.01em}
.card-description{grid-column:1;margin:0;font-size:var(--text-base);color:var(--muted-foreground)}
.card-action{grid-column:2;grid-row:1 / span 2;align-self:start}
.card-content{padding:0 var(--space-6)}
.card-footer{display:flex;align-items:center;gap:var(--space-2);padding:0 var(--space-6)}
.card-kicker{font-size:var(--text-xs);font-weight:500;color:var(--primary)}
.card-body{margin:0;font-size:var(--text-base);color:var(--muted-foreground)}
.card-meta{display:flex;align-items:center;gap:6px;font-size:var(--text-sm);color:var(--muted-foreground)}
.elev-sm{box-shadow:var(--shadow-sm)}.elev-md{box-shadow:var(--shadow-md)}.elev-lg{box-shadow:var(--shadow-lg)}
.avatar{position:relative;display:inline-grid;place-items:center;flex:none;width:32px;height:32px;border-radius:50%;overflow:hidden;background:var(--muted);color:var(--foreground);font-size:var(--text-sm);font-weight:500}
.avatar img{width:100%;height:100%;object-fit:cover}
.avatar-ring{box-shadow:0 0 0 2px var(--background)}
.separator{flex:none;margin:0;border:0;background:var(--border)}
.separator[data-orientation=horizontal],.hr{height:1px;width:100%}
.separator[data-orientation=vertical]{width:1px;align-self:stretch}
.hr{border:0;background:var(--border);margin:var(--space-4) 0}
.alert{display:grid;grid-template-columns:16px minmax(0,1fr);column-gap:var(--space-3);row-gap:2px;align-items:start;width:100%;padding:var(--space-3) var(--space-4);border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--card);color:var(--foreground);font-size:var(--text-base)}
.alert-icon{grid-row:1 / span 2;display:flex;margin-top:2px}.alert-icon svg{width:16px;height:16px}
.alert-title{grid-column:2;font-weight:500;line-height:1.4}
.alert-description{grid-column:2;color:var(--muted-foreground);line-height:var(--leading-normal)}
.alert-destructive{color:var(--destructive);border-color:var(--red-200);background:var(--red-50)}
.alert-destructive .alert-description{color:var(--red-700)}
.tabs{display:flex;flex-direction:column;gap:var(--space-3)}
.tabs-list{display:inline-flex;align-items:center;align-self:flex-start;height:36px;padding:3px;border-radius:var(--radius-lg);background:var(--muted);color:var(--muted-foreground)}
.tabs-trigger{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:100%;padding:0 var(--space-3);border:1px solid transparent;border-radius:var(--radius-md);background:transparent;font-family:var(--font-sans);font-size:var(--text-base);font-weight:500;color:inherit;white-space:nowrap;cursor:pointer;transition:color var(--duration) var(--ease),background-color var(--duration) var(--ease)}
.tabs-trigger:hover{color:var(--foreground)}
.tabs-trigger:focus-visible{outline:none;box-shadow:0 0 0 3px var(--ring-soft)}
.tabs-trigger svg,.tabs-trigger .icon{width:16px;height:16px}
.tabs-trigger[data-state=active]{background:var(--background);color:var(--foreground);box-shadow:var(--shadow-sm)}
.tabs[data-variant=underline] .tabs-list{height:auto;padding:0;gap:var(--space-8);background:transparent;border-radius:0;border-bottom:1px solid var(--border);align-self:stretch}
.tabs[data-variant=underline] .tabs-trigger{height:48px;padding:0 2px;border:0;border-bottom:2px solid transparent;border-radius:0;margin-bottom:-1px}
.tabs[data-variant=underline] .tabs-trigger[data-state=active]{box-shadow:none;background:transparent;border-bottom-color:var(--foreground)}
.tabs-content{font-size:var(--text-base)}
.dialog-backdrop{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:var(--space-4);background:var(--overlay);animation:ds-fade 150ms var(--ease)}
.dialog{position:relative;display:grid;gap:var(--space-4);width:min(480px,100%);padding:var(--space-6);background:var(--background);border:1px solid var(--border);border-radius:var(--radius-xl);box-shadow:var(--shadow-lg);animation:ds-pop 180ms var(--ease)}
.dialog-header{display:grid;gap:6px;padding-right:var(--space-6)}
.dialog-title{margin:0;font-size:var(--text-xl);font-weight:600;line-height:var(--leading-tight);letter-spacing:-0.01em}
.dialog-description,.dialog-body{margin:0;font-size:var(--text-base);color:var(--muted-foreground)}
.dialog-footer,.dialog-actions{display:flex;justify-content:flex-end;gap:var(--space-2)}
.dialog-close{position:absolute;top:14px;right:14px;color:var(--muted-foreground)}
.tooltip-wrap{position:relative;display:inline-flex}
.tooltip{position:absolute;z-index:60;left:50%;bottom:calc(100% + 6px);transform:translateX(-50%);padding:6px 10px;border-radius:var(--radius-md);background:var(--foreground);color:var(--background);font-size:var(--text-xs);font-weight:500;line-height:1.3;white-space:nowrap;pointer-events:none;animation:ds-fade 120ms var(--ease)}
.tooltip[data-side=bottom]{bottom:auto;top:calc(100% + 6px)}
.table{width:100%;border-collapse:collapse;font-size:var(--text-base)}
.table th{height:40px;padding:0 var(--space-2);text-align:left;font-weight:500;color:var(--muted-foreground);border-bottom:1px solid var(--border);white-space:nowrap}
.table td{padding:var(--space-2);border-bottom:1px solid var(--border)}
.table tbody tr:hover{background:color-mix(in srgb,var(--muted) 60%,transparent)}
.nav{display:flex;align-items:center;gap:var(--space-6);height:64px;padding:0 var(--space-6);background:var(--background);border-bottom:1px solid var(--border)}
.nav-brand{margin-right:auto;font-size:var(--text-xl);font-weight:600;letter-spacing:var(--tracking-tight)}
.nav a{color:var(--muted-foreground);text-decoration:none;font-size:var(--text-base);font-weight:500}
.nav a:hover,.nav a[aria-current]{color:var(--foreground)}
.icon{display:inline-block;flex:none;width:16px;height:16px;background:currentColor;-webkit-mask:var(--icon) center / contain no-repeat;mask:var(--icon) center / contain no-repeat}
.ph{display:grid;place-items:center;background:repeating-linear-gradient(135deg,var(--zinc-100) 0 8px,var(--zinc-50) 8px 16px);color:var(--muted-foreground);font-family:var(--font-mono);font-size:var(--text-xs)}
.text-muted{color:var(--muted-foreground)}
.mono{font-family:var(--font-mono)}
.grayscale{filter:grayscale(1) contrast(1.08)}
