/* ===== 3Drawers component library — namespaced .ds-* classes =====
 * Ported/adapted from the "3Drawers Studio design system" claude.ai project
 * (components/components.css), id 3f1889a6-5d00-4156-8e46-73cdaab7c26b.
 * Source classes are tds-* (pill buttons, no uppercase, thin borders) —
 * renamed to ds-* here, same as the prior port. Keep in sync via
 * DesignSync; app-specific extensions live in components/overrides.css,
 * NOT here. */
.ds-btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);font-family:var(--font-display);font-weight:var(--weight-semibold);font-size:var(--text-base);letter-spacing:normal;padding:12px 22px;border:none;border-radius:var(--radius-pill);background:var(--color-primary);color:var(--text-on-brand);text-decoration:none;cursor:pointer;box-shadow:var(--shadow-sm);transition:transform var(--duration-fast) var(--ease-bounce),box-shadow var(--duration-fast) var(--ease-bounce),background var(--duration-fast) var(--ease-out)}
.ds-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:var(--shadow-md);background:var(--color-primary-hover)}
.ds-btn:active:not(:disabled){transform:translateY(1px);box-shadow:var(--shadow-press);background:var(--color-primary-press)}
.ds-btn:disabled{opacity:.45;cursor:not-allowed;transform:none;box-shadow:none}
.ds-btn.ds-btn-secondary{background:var(--color-secondary);color:var(--text-on-brand)}
.ds-btn.ds-btn-secondary:hover:not(:disabled){background:var(--color-secondary-hover)}
.ds-btn.ds-btn-danger{background:var(--color-danger);color:var(--text-on-brand)}
.ds-btn.ds-btn-danger:hover:not(:disabled){filter:brightness(1.08)}
.ds-btn.ds-btn-ghost{background:transparent;color:var(--text-primary);box-shadow:none;border:var(--border-width) solid var(--border-default)}
.ds-btn.ds-btn-ghost:hover:not(:disabled){background:var(--surface-sunken);transform:translateY(-2px);box-shadow:none}
.ds-btn.ds-btn-ghost:active:not(:disabled){transform:translateY(1px)}
.ds-btn.ds-btn-sm{padding:8px 16px;font-size:var(--text-sm)}
.ds-btn.ds-btn-lg{padding:15px 28px;font-size:var(--text-md)}

/* Standalone icon-only button (theme toggle, etc.) — not meant to compose
   with .ds-btn's pill/color modifiers, it's its own self-contained shape. */
.ds-btn-icon{border:none;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-md);width:2.5rem;height:2.5rem;flex:none;padding:0;background:var(--surface-sunken);color:var(--text-primary);transition:transform var(--duration-fast) var(--ease-bounce),background var(--duration-fast) var(--ease-out)}
.ds-btn-icon:hover:not(:disabled){transform:translateY(-2px) scale(1.05)}
.ds-btn-icon:active:not(:disabled){transform:scale(.94)}

.ds-field{display:flex;flex-direction:column;gap:6px;font-family:var(--font-body)}
.ds-label{font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--text-primary)}
.ds-hint{font-size:12px;color:var(--text-tertiary)}
.ds-hint.ds-hint-error{color:var(--color-danger)}
.ds-input,.ds-textarea,.ds-select{font-family:var(--font-body);font-size:var(--text-base);color:var(--text-primary);background:var(--surface-card);border:var(--border-width) solid var(--border-default);border-radius:var(--radius-md);padding:11px 14px;transition:box-shadow var(--duration-fast) var(--ease-out),border-color var(--duration-fast) var(--ease-out)}
.ds-input:focus,.ds-textarea:focus,.ds-select:focus{outline:none;border-color:var(--color-info);box-shadow:0 0 0 3px color-mix(in oklch,var(--color-info) 35%,transparent)}
.ds-input.ds-input-error,.ds-textarea.ds-input-error{border-color:var(--color-danger)}
.ds-input:disabled,.ds-textarea:disabled,.ds-select:disabled{opacity:.5;cursor:not-allowed;background:var(--surface-sunken)}
.ds-textarea{resize:vertical;min-height:90px}
.ds-select{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--text-primary) 50%),linear-gradient(135deg,var(--text-primary) 50%,transparent 50%);background-position:calc(100% - 20px) center,calc(100% - 14px) center;background-size:6px 6px,6px 6px;background-repeat:no-repeat;padding-right:36px}

.ds-checkbox,.ds-radio{display:inline-flex;align-items:center;gap:10px;font-family:var(--font-body);font-size:var(--text-base);cursor:pointer;color:var(--text-primary)}
.ds-checkbox input,.ds-radio input{position:absolute;opacity:0;width:20px;height:20px;margin:0;cursor:pointer}
.ds-checkbox .ds-box{width:20px;height:20px;flex-shrink:0;border:var(--border-width-thick) solid var(--border-strong);border-radius:6px;background:var(--surface-card);display:inline-flex;align-items:center;justify-content:center;transition:background var(--duration-fast) var(--ease-bounce),transform var(--duration-fast) var(--ease-bounce)}
.ds-checkbox input:checked + .ds-box{background:var(--color-primary);border-color:var(--color-primary);transform:scale(1.08)}
.ds-checkbox input:checked + .ds-box::after{content:"";width:5px;height:10px;border:solid var(--text-on-brand);border-width:0 2px 2px 0;transform:rotate(40deg) translate(-1px,-1px)}
.ds-checkbox input:focus-visible + .ds-box{box-shadow:0 0 0 3px color-mix(in oklch,var(--color-info) 35%,transparent)}
.ds-radio .ds-dot{width:20px;height:20px;flex-shrink:0;border:var(--border-width-thick) solid var(--border-strong);border-radius:50%;background:var(--surface-card);display:inline-flex;align-items:center;justify-content:center;transition:background var(--duration-fast) var(--ease-bounce),transform var(--duration-fast) var(--ease-bounce)}
.ds-radio input:checked + .ds-dot{border-color:var(--color-primary);transform:scale(1.08)}
.ds-radio input:checked + .ds-dot::after{content:"";width:9px;height:9px;border-radius:50%;background:var(--color-primary)}
.ds-radio input:focus-visible + .ds-dot{box-shadow:0 0 0 3px color-mix(in oklch,var(--color-info) 35%,transparent)}

.ds-switch{position:relative;display:inline-flex;align-items:center;gap:10px;cursor:pointer;font-family:var(--font-body)}
.ds-switch input{position:absolute;opacity:0;width:44px;height:26px;margin:0;cursor:pointer}
.ds-switch .ds-track{width:44px;height:26px;border-radius:var(--radius-pill);background:var(--neutral-200);position:relative;transition:background var(--duration-base) var(--ease-out)}
.ds-switch .ds-track::after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:var(--shadow-sm);transition:transform var(--duration-base) var(--ease-bounce)}
.ds-switch input:checked + .ds-track{background:var(--color-secondary)}
.ds-switch input:checked + .ds-track::after{transform:translateX(20px)}

.ds-badge{display:inline-flex;align-items:center;gap:5px;font-family:var(--font-body);font-size:var(--text-xs);font-weight:var(--weight-semibold);padding:4px 10px;border-radius:var(--radius-pill);background:var(--surface-sunken);color:var(--text-primary)}
.ds-badge.ds-badge-success{background:var(--color-success-bg);color:var(--color-success-ink)}
.ds-badge.ds-badge-error{background:var(--color-danger-bg);color:var(--color-danger-ink)}
.ds-badge.ds-badge-warning{background:var(--color-warning-bg);color:var(--color-warning-ink)}
.ds-badge.ds-badge-info{background:var(--color-info-bg);color:var(--color-info-ink)}

.ds-tag{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-mono);font-size:12px;font-weight:var(--weight-medium);padding:5px 10px;border-radius:var(--radius-sm);background:var(--surface-sunken);color:var(--text-secondary);border:var(--border-width) solid var(--border-subtle)}

.ds-card{background:var(--surface-card);border:var(--border-width) solid var(--border-subtle);border-radius:var(--radius-lg);padding:var(--space-6);box-shadow:var(--shadow-sm)}
.ds-card.ds-card-flat{box-shadow:none}
.ds-card .ds-card-title{font-family:var(--font-display);font-size:var(--text-lg);margin:0 0 8px}
.ds-card .ds-card-body{font-family:var(--font-body);color:var(--text-secondary);font-size:var(--text-base);margin:0}

.ds-tabs{display:flex;gap:4px;background:var(--surface-sunken);padding:4px;border-radius:var(--radius-pill);width:fit-content}
.ds-tab{border:none;background:transparent;font-family:var(--font-body);font-weight:var(--weight-semibold);font-size:var(--text-sm);padding:8px 18px;border-radius:var(--radius-pill);cursor:pointer;color:var(--text-secondary);transition:all var(--duration-fast) var(--ease-bounce)}
.ds-tab.ds-tab-active{background:var(--surface-card);color:var(--color-primary);box-shadow:var(--shadow-sm)}
.ds-tab:disabled{opacity:.45;cursor:not-allowed}

.ds-tooltip{position:relative;display:inline-flex}
.ds-tooltip .ds-tooltip-bubble{position:absolute;bottom:calc(100% + 10px);left:50%;transform:translateX(-50%);background:var(--neutral-800);color:#fff;font-family:var(--font-body);font-size:13px;padding:6px 12px;border-radius:var(--radius-sm);white-space:nowrap;opacity:0;pointer-events:none;transition:opacity var(--duration-fast) var(--ease-out),transform var(--duration-fast) var(--ease-out);z-index:20}
.ds-tooltip .ds-tooltip-bubble::after{content:"";position:absolute;top:100%;left:50%;transform:translateX(-50%);border:6px solid transparent;border-top-color:var(--neutral-800)}
.ds-tooltip:hover .ds-tooltip-bubble{opacity:1;transform:translateX(-50%) translateY(-2px)}

.ds-toast{display:flex;align-items:flex-start;gap:12px;background:var(--surface-card);border:var(--border-width) solid var(--border-subtle);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);padding:12px 16px;font-family:var(--font-body);max-width:360px}
.ds-toast.ds-toast-success{border-color:var(--color-success)}
.ds-toast.ds-toast-error{border-color:var(--color-danger)}
.ds-toast .ds-toast-title{font-weight:800;margin:0 0 2px;font-size:var(--text-base)}
.ds-toast .ds-toast-body{margin:0;font-size:14px;color:var(--text-secondary)}

.ds-dialog-overlay{position:fixed;inset:0;background:var(--surface-overlay);display:flex;align-items:center;justify-content:center;z-index:100}
.ds-dialog{background:var(--surface-card);border-radius:var(--radius-xl);box-shadow:var(--shadow-lg);padding:var(--space-8);max-width:440px;width:90%;position:relative}
.ds-dialog .ds-dialog-title{font-family:var(--font-display);font-size:var(--text-xl);margin:0 0 10px}
.ds-dialog .ds-dialog-body{font-family:var(--font-body);color:var(--text-secondary);margin:0 0 22px;line-height:1.5}
.ds-dialog .ds-dialog-actions{display:flex;gap:10px;justify-content:flex-end}
.ds-dialog .ds-dialog-close{position:absolute;top:14px;right:14px;border:var(--border-width) solid var(--border-default);background:var(--surface-sunken);width:30px;height:30px;border-radius:50%;cursor:pointer;font-size:15px;line-height:1}

.ds-accordion-item{border:var(--border-width) solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-card);overflow:hidden;box-shadow:var(--shadow-sm)}
.ds-accordion-item + .ds-accordion-item{margin-top:12px}
.ds-accordion-q{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 18px;cursor:pointer;font-family:var(--font-display);font-size:15px;user-select:none}
.ds-accordion-q .ds-toggle{width:26px;height:26px;flex-shrink:0;border:var(--border-width) solid var(--border-default);border-radius:var(--radius-sm);display:inline-flex;align-items:center;justify-content:center;background:var(--color-accent);transition:transform var(--duration-base) var(--ease-out)}
.ds-accordion-item.ds-open .ds-toggle{transform:rotate(45deg);background:var(--color-danger);color:var(--text-on-brand)}
.ds-accordion-a{max-height:0;overflow:hidden;transition:max-height .3s ease}
.ds-accordion-item.ds-open .ds-accordion-a{max-height:400px}
.ds-accordion-a-inner{padding:2px 18px 16px;border-top:1px dashed var(--border-default);font-family:var(--font-body);color:var(--text-secondary);font-size:15px}

.ds-stepper{display:inline-flex;align-items:center;border:var(--border-width) solid var(--border-default);border-radius:var(--radius-sm);overflow:hidden;background:var(--surface-card)}
.ds-stepper button{width:36px;height:40px;border:none;background:var(--surface-sunken);cursor:pointer;font-family:var(--font-display);font-size:18px;color:var(--text-primary)}
.ds-stepper button:hover{background:var(--color-accent)}
.ds-stepper button:disabled{opacity:.4;cursor:not-allowed}
.ds-stepper input{width:64px;text-align:center;border:none;border-left:var(--border-width) solid var(--border-default);border-right:var(--border-width) solid var(--border-default);font-family:var(--font-body);font-weight:700;font-size:var(--text-base);height:40px;background:var(--surface-card);color:var(--text-primary)}
.ds-stepper .ds-stepper-unit{padding:0 10px;font-family:var(--font-mono);font-size:15px;color:var(--text-secondary)}

.ds-swatches{display:flex;gap:8px;flex-wrap:wrap}
.ds-swatch{width:28px;height:28px;border-radius:50%;border:var(--border-width-thick) solid transparent;cursor:pointer;position:relative;transition:transform var(--duration-fast) var(--ease-bounce),border-color var(--duration-fast) var(--ease-out)}
.ds-swatch:hover{transform:scale(1.1)}
