/* Reusable components. Requires tokens.css. */
*{box-sizing:border-box}html{font-size:16px;scroll-behavior:smooth}body{margin:0;background:var(--canvas);color:var(--text);font-family:var(--font-sans);font-size:var(--text-sm);line-height:var(--line-sm);-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit;color:inherit}button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}button{cursor:pointer}a{color:inherit}button:disabled{cursor:not-allowed}button{border:0}h1,h2,h3,h4,p{margin:0}h1{font-size:var(--text-3xl);line-height:var(--line-3xl);letter-spacing:-1.6px;font-weight:600}h2{font-size:var(--text-2xl);line-height:var(--line-2xl);letter-spacing:-1px;font-weight:600}h3{font-size:var(--text-xl);line-height:var(--line-xl);letter-spacing:-.6px;font-weight:600}h4{font-size:var(--text-lg);line-height:var(--line-lg);font-weight:600;letter-spacing:-.3px}p{max-width:68ch}small,.caption{font-size:var(--text-xs);line-height:var(--line-xs)}.muted{color:var(--muted)}.lead{font-size:var(--text-md);line-height:var(--line-md)}strong{font-weight:600}a,button,input,select,textarea{outline-offset:3px}:focus-visible{outline:2px solid var(--accent)}[hidden]{display:none!important}.icon,.lucide{width:var(--icon);height:var(--icon);flex-shrink:0;vertical-align:middle}.icon-lg .lucide{width:24px;height:24px}.icon{display:inline-flex;align-items:center;justify-content:center}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);min-height:var(--control);padding:9px 16px;border-radius:var(--radius-md);font-size:var(--text-sm);line-height:var(--line-sm);font-weight:500;border:1px solid transparent;text-decoration:none;background:transparent;transition:background var(--duration-fast),border-color var(--duration-fast),box-shadow var(--duration-fast);white-space:nowrap}.btn-primary{background:var(--text);color:var(--surface)}.btn-primary:hover{background:#48423b}.btn-secondary{background:var(--surface);border-color:var(--border-strong)}.btn-secondary:hover{background:var(--subtle);border-color:var(--text)}.btn-ghost:hover{background:var(--subtle)}.btn-danger{color:var(--danger);background:#faf0ee;border-color:#d8b4ae}.btn-danger:hover{background:#f5e3e0}.btn:disabled{background:var(--subtle);color:#787168;border-color:var(--border)}.btn-large{min-height:var(--control-lg);padding:11px 20px}.icon-button{padding:11px;width:44px;height:44px}.badge{display:inline-flex;align-items:center;gap:6px;font-size:var(--text-xs);line-height:var(--line-xs);padding:4px 10px;border:1px solid var(--border);border-radius:var(--radius-pill);background:var(--surface);color:var(--muted);font-weight:500}.badge-accent{color:var(--accent);border-color:#d8cfc3;background:var(--accent-soft)}.badge-success{color:var(--success);border-color:#c4d7cb;background:#edf4ef}.field{display:grid;gap:8px}.field label,.field-label{font-size:16px;line-height:24px;font-weight:500}.input,.select,.textarea{background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-md);width:100%;padding:11px 14px;min-height:48px;font-size:16px;line-height:24px;transition:border-color var(--duration-fast),box-shadow var(--duration-fast)}.textarea{resize:vertical;min-height:112px}.input::placeholder,.textarea::placeholder{color:var(--muted);opacity:1}.input:focus,.select:focus,.textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px #78665315;outline:2px solid var(--accent);outline-offset:2px}.input:disabled{background:var(--subtle);color:var(--muted)}.input[aria-invalid=true]{border-color:var(--danger)}.field-hint{color:var(--muted);font-size:14px;line-height:20px}.field-error{color:var(--danger);font-size:14px;line-height:20px;display:flex;gap:6px;align-items:center}.search-field{position:relative}.search-field>.icon{position:absolute;top:14px;left:14px;color:var(--muted)}.search-field .input{padding-left:44px}.choice{display:flex;align-items:center;gap:12px;cursor:pointer;min-height:44px}.choice input{width:20px;height:20px;accent-color:var(--accent);flex-shrink:0;margin:0}.switch{display:inline-flex;align-items:center;gap:12px;background:none;padding:6px 0;min-height:44px;text-align:left;font-size:16px}.switch-track{width:40px;height:24px;border-radius:999px;background:#92897d;padding:3px;display:inline-block;transition:background var(--duration-normal);flex-shrink:0}.switch-thumb{height:18px;width:18px;border-radius:50%;background:white;display:block;transition:transform var(--duration-normal)}.switch[aria-checked=true] .switch-track{background:var(--accent)}.switch[aria-checked=true] .switch-thumb{transform:translateX(16px)}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);overflow-x:auto}.tab{min-height:48px;padding:12px 16px;font-size:16px;background:transparent;color:var(--muted);border-bottom:2px solid transparent;white-space:nowrap}.tab:hover{color:var(--text);background:var(--subtle)}.tab[aria-selected=true]{color:var(--text);border-bottom-color:var(--text);font-weight:500}.notice{display:flex;align-items:flex-start;gap:12px;padding:16px;border:1px solid var(--border);border-radius:10px;background:var(--subtle);font-size:16px;line-height:24px}.notice>.icon{margin-top:2px}.notice.success{color:var(--success);background:#edf4ef;border-color:#c4d7cb}.notice.error{color:var(--danger);background:#faf0ee;border-color:#d8b4ae}.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden}.panel-body{padding:24px}.divider{height:1px;background:var(--border);border:0;margin:24px 0}.link{color:var(--accent);text-decoration:underline;text-underline-offset:4px}.mono{font-family:var(--font-mono);font-size:14px;line-height:20px;overflow-wrap:anywhere}.skeleton{background:#eae5dd;border-radius:4px;height:16px;animation:pulse 1.6s ease-in-out infinite}.spinner .lucide{animation:rotate 1s linear infinite}.empty-state{padding:32px 24px;text-align:center;display:grid;justify-items:center;gap:12px}.empty-state>.icon{width:48px;height:48px;border-radius:14px;background:var(--subtle);color:var(--muted)}dialog{border:1px solid var(--border);border-radius:16px;padding:24px;background:var(--surface);color:var(--text);max-width:520px;width:calc(100% - 32px);box-shadow:0 16px 64px #29272420}dialog::backdrop{background:#29272455;backdrop-filter:blur(3px)}.dialog-head{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px}.dialog-actions{display:flex;justify-content:flex-end;gap:12px;margin-top:24px}.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);padding:12px 20px;background:var(--text);color:var(--surface);border-radius:10px;box-shadow:var(--shadow);z-index:20;max-width:calc(100% - 32px);font-size:16px;line-height:24px}.tooltip-wrap{position:relative;display:inline-flex}.tooltip{display:none;position:absolute;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%);background:var(--text);color:white;padding:8px 12px;border-radius:6px;font-size:14px;line-height:20px;width:max-content;max-width:220px;z-index:5}.tooltip-wrap:hover .tooltip,.tooltip-wrap:focus-within .tooltip{display:block}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
