/* ---------- Buttons ---------- */
.button{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:42px;padding:0 18px;border-radius:var(--pill);border:1px solid transparent;font-size:.875rem;font-weight:560;line-height:1.2;white-space:nowrap;transition:background .16s,border-color .16s,color .16s,transform .16s var(--ease),box-shadow .16s}
.button:active:not(:disabled){transform:translateY(1px)}
.button:disabled{opacity:.45}
.button.primary{background:var(--ink);color:#fff}
.button.primary:hover:not(:disabled){background:var(--ink-hover)}
.button.secondary{background:var(--surface);color:var(--ink);border-color:var(--line-strong)}
.button.secondary:hover:not(:disabled){background:var(--surface-2);border-color:#c9c3b7}
.button.ghost{color:var(--ink-2)}
.button.ghost:hover:not(:disabled){background:var(--surface-3);color:var(--ink)}
.button.danger{background:var(--danger);color:#fff}
.button.danger:hover:not(:disabled){background:#9a2c24}
.button.danger-outline{background:var(--surface);color:var(--danger);border-color:var(--danger-line)}
.button.danger-outline:hover:not(:disabled){background:var(--danger-soft)}
.button.large{min-height:48px;padding:0 24px;font-size:.9375rem}
.button.compact{min-height:34px;padding:0 13px;font-size:.8125rem}
.button.full{width:100%}

.icon-button{display:inline-grid;place-items:center;min-width:36px;min-height:36px;border-radius:var(--radius-sm);color:var(--ink-2);transition:background .16s,color .16s}
.icon-button:hover:not(:disabled){background:var(--surface-3);color:var(--ink)}
.icon-button:disabled{opacity:.4}

.text-button{display:inline-flex;align-items:center;gap:6px;padding:4px 2px;color:var(--accent);font-size:.875rem;font-weight:520;border-radius:6px}
.text-button:hover:not(:disabled){color:var(--accent-ink);text-decoration:underline;text-underline-offset:3px}
.text-button.neutral{color:var(--ink-2)}
.text-button.neutral:hover:not(:disabled){color:var(--ink)}
.text-button:disabled{opacity:.45}

/* ---------- Forms ---------- */
.form-stack{display:flex;flex-direction:column;gap:16px}
.field{display:flex;flex-direction:column;gap:7px;font-size:.8125rem;font-weight:560;color:var(--ink)}
.field>.field-label{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.field-optional{font-weight:400;color:var(--ink-3);font-size:.75rem}
input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file]),select,textarea{width:100%;min-height:42px;padding:9px 13px;border:1px solid var(--line-strong);border-radius:10px;background:var(--surface);font-size:.9375rem;font-weight:400;line-height:1.5;transition:border-color .16s,box-shadow .16s}
textarea{resize:vertical;min-height:80px}
input::placeholder,textarea::placeholder{color:var(--ink-4)}
input:not([type=checkbox]):not([type=range]):hover:not(:disabled),select:hover:not(:disabled),textarea:hover:not(:disabled){border-color:#c9c3b7}
input:not([type=checkbox]):not([type=range]):focus-visible,select:focus-visible,textarea:focus-visible{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(47,91,211,.16);border-radius:10px}
input[aria-invalid=true],textarea[aria-invalid=true]{border-color:var(--danger)}
input:disabled,select:disabled,textarea:disabled{background:var(--surface-2);color:var(--ink-3)}
input[type=checkbox]{width:18px;height:18px;margin:0;accent-color:var(--ink);flex-shrink:0}
select{appearance:none;padding-right:36px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2362656d' stroke-width='2.4' stroke-linecap='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 13px center}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.form-error{display:flex;align-items:flex-start;gap:8px;margin:0;color:var(--danger);font-size:.8125rem;line-height:1.6}
.form-error>svg{margin-top:2px}
.password-error{color:var(--danger);font-size:.8125rem;font-weight:400}

/* ---------- Status pill ---------- */
.status{display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 10px;border-radius:var(--pill);background:var(--surface-3);color:var(--ink-2);font-size:.75rem;font-weight:560;white-space:nowrap}
.status::before{content:'';width:6px;height:6px;border-radius:50%;background:currentColor}
.status.queued,.status.reviewing,.status.modeling{background:var(--progress-soft);color:var(--progress)}
.status.pending_review{background:var(--review-soft);color:var(--review)}
.status.needs_info{background:var(--warn-soft);color:var(--warn)}
.status.ready{background:var(--ok-soft);color:var(--ok)}
.status.failed{background:var(--danger-soft);color:var(--danger)}

/* ---------- Notices ---------- */
.notice{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:var(--surface);color:var(--ink-2);font-size:.875rem;line-height:1.65}
.notice>svg{margin-top:2px;flex-shrink:0}
.notice>span{flex:1;min-width:0}
.notice.info{background:var(--progress-soft);border-color:var(--progress-line);color:var(--accent-ink)}
.notice.warn{background:var(--warn-soft);border-color:var(--warn-line);color:var(--warn)}
.notice.ok{background:var(--ok-soft);border-color:var(--ok-line);color:var(--ok)}
.notice.error{background:var(--danger-soft);border-color:var(--danger-line);color:var(--danger)}
.notice button{font-weight:600;color:inherit;text-decoration:underline;text-underline-offset:3px}

/* ---------- Segmented control & filter chips ---------- */
.segmented{display:inline-grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:2px;padding:3px;border-radius:var(--pill);background:var(--surface-3);border:1px solid var(--line)}
.segmented>button{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:36px;padding:0 16px;border-radius:var(--pill);color:var(--ink-2);font-size:.875rem;font-weight:540;white-space:nowrap;transition:background .16s,color .16s,box-shadow .16s}
.segmented>button:hover:not(:disabled){color:var(--ink)}
.segmented>button[aria-pressed=true]{background:var(--surface);color:var(--ink);box-shadow:var(--shadow-xs),0 0 0 1px var(--line)}
.segmented>button:disabled{opacity:.5}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chips>button{display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 14px;border-radius:var(--pill);border:1px solid var(--line);background:var(--surface);color:var(--ink-2);font-size:.8125rem;font-weight:540;transition:all .16s}
.chips>button:hover{border-color:var(--line-strong);color:var(--ink)}
.chips>button[aria-pressed=true]{background:var(--ink);border-color:var(--ink);color:#fff}
.chips>button .chip-count{font-family:var(--mono);font-size:.75rem;opacity:.7}

/* ---------- Cards / panels ---------- */
.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:20px}
.panel-title{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}
.panel-title h2,.panel-title h3{display:flex;align-items:center;gap:8px;font-size:1rem}
.panel-title small{color:var(--ink-3);font-size:.75rem;font-weight:400}

.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:48px 24px;border:1px dashed var(--line-strong);border-radius:var(--radius);background:var(--surface-2);text-align:center}
.empty-state .empty-icon{display:grid;place-items:center;width:52px;height:52px;border-radius:16px;background:var(--surface);border:1px solid var(--line);color:var(--ink-3);margin-bottom:4px}
.empty-state strong{font-size:1rem;font-weight:620}
.empty-state p{color:var(--ink-2);font-size:.875rem;max-width:340px}
.empty-state .button{margin-top:8px}

/* ---------- Progress element ---------- */
progress{appearance:none;-webkit-appearance:none;display:block;width:100%;height:6px;border:0;border-radius:var(--pill);background:var(--surface-3);overflow:hidden;accent-color:var(--ink)}
progress::-webkit-progress-bar{background:var(--surface-3);border-radius:var(--pill)}
progress::-webkit-progress-value{background:var(--ink);border-radius:var(--pill);transition:width .3s var(--ease)}
progress::-moz-progress-bar{background:var(--ink);border-radius:var(--pill)}

/* ---------- Dialog & sheet ---------- */
.dialog{width:min(460px,calc(100% - 32px));max-height:min(88dvh,900px);padding:0;border:1px solid var(--line);border-radius:20px;background:var(--surface);color:var(--ink);box-shadow:var(--shadow-lg);overscroll-behavior:contain;animation:dialogIn .22s var(--ease)}
.dialog-wide{width:min(760px,calc(100% - 32px))}
.dialog::backdrop{background:rgba(22,24,29,.32);backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);touch-action:none;animation:fadeIn .2s}
.dialog-inner{padding:26px 28px 28px}
.dialog-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:6px}
.dialog-heading h2{font-size:1.25rem;font-weight:650;letter-spacing:-.02em;overflow-wrap:anywhere;padding-top:2px}
.dialog-heading .icon-button{margin:-4px -8px 0 0}
.dialog-heading-hidden{position:absolute;top:18px;right:20px;margin:0}
@keyframes dialogIn{from{opacity:0;transform:translateY(10px) scale(.985)}to{opacity:1;transform:none}}

.dialog.sheet{position:fixed;inset:0 0 0 auto;margin:0;max-width:100%;width:min(480px,100%);height:100dvh;max-height:none;border:0;border-left:1px solid var(--line);border-radius:22px 0 0 22px;animation:sheetIn .28s var(--ease)}
.dialog.sheet .dialog-inner{min-height:100%;display:flex;flex-direction:column;padding:26px 28px calc(28px + env(safe-area-inset-bottom,0px))}
.dialog.sheet .dialog-heading{margin-bottom:22px}
.dialog.sheet .dialog-heading h2{font-size:1.375rem}
@keyframes sheetIn{from{transform:translateX(40px);opacity:0}to{transform:none;opacity:1}}
@media(max-width:640px){
  .dialog-inner{padding:22px 20px 24px}
  .dialog.sheet{inset:auto 0 0 0;width:100%;height:auto;max-height:94dvh;border-left:0;border-top:1px solid var(--line);border-radius:22px 22px 0 0;animation:sheetUp .28s var(--ease)}
  .dialog.sheet .dialog-inner{min-height:0;padding:22px 20px calc(22px + env(safe-area-inset-bottom,0px))}
  .form-row{grid-template-columns:1fr}
}
@keyframes sheetUp{from{transform:translateY(40px);opacity:0}to{transform:none;opacity:1}}

