.btn{justify-content:center;align-items:center;gap:var(--space-2);border-radius:var(--radius-md);cursor:pointer;white-space:nowrap;border:1px solid #0000;font-weight:600;transition:background-color .15s,border-color .15s,opacity .15s;display:inline-flex}.btn:disabled{opacity:.6;cursor:not-allowed}.btn:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.btn-sm{font-size:var(--fs-xs);padding:6px 12px}.btn-md{font-size:var(--fs-sm);padding:10px 20px}.btn-lg{font-size:var(--fs-md);padding:14px 28px}.btn-primary{background:var(--color-accent);color:var(--color-accent-contrast)}.btn-primary:hover:not(:disabled){filter:brightness(1.05)}.btn-secondary{background:var(--color-bg-elevated);color:var(--color-text-strong);border-color:var(--color-border)}.btn-secondary:hover:not(:disabled){border-color:var(--color-accent-border)}.btn-ghost{color:var(--color-text);background:0 0}.btn-ghost:hover:not(:disabled){background:var(--color-accent-bg);color:var(--color-text-strong)}.btn-danger{background:var(--color-danger);color:var(--color-accent-contrast)}.btn-danger:hover:not(:disabled){filter:brightness(1.05)}.card{background:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-5)}.badge{border-radius:var(--radius-full);font-size:var(--fs-xs);white-space:nowrap;align-items:center;padding:4px 10px;font-weight:600;display:inline-flex}.badge-success{background:var(--color-success-bg);color:var(--color-success)}.badge-warning{background:var(--color-warning-bg);color:var(--color-warning)}.badge-danger{background:var(--color-danger-bg);color:var(--color-danger)}.badge-info{background:var(--color-info-bg);color:var(--color-info)}.field{gap:var(--space-1);margin-bottom:var(--space-4);text-align:left;flex-direction:column;display:flex}.field-label{font-size:var(--fs-sm);color:var(--color-text-strong);font-weight:600}.field-error{font-size:var(--fs-xs);color:var(--color-danger);margin:0}.input{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);color:var(--color-text-strong);font-size:var(--fs-sm);padding:10px 12px}.input:focus-visible,.input:focus{outline:2px solid var(--color-accent);outline-offset:1px}.input-error{border-color:var(--color-danger)}.file-upload-input{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.file-upload-drop{align-items:center;gap:var(--space-1);padding:var(--space-5) var(--space-4);border:1px dashed var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);color:var(--color-text);text-align:center;cursor:pointer;flex-direction:column;transition:border-color .15s,background .15s;display:flex}.file-upload-drop:hover,.file-upload-drop:focus-visible{border-color:var(--color-accent-border);background:var(--color-accent-bg);outline:none}.file-upload-drop.is-dragging{border-color:var(--color-accent);background:var(--color-accent-bg)}.file-upload-drop.is-invalid{border-color:var(--color-danger)}.file-upload-drop.is-disabled{cursor:not-allowed;opacity:.6}.file-upload-icon{width:26px;height:26px;color:var(--color-accent)}.file-upload-cta{font-size:var(--fs-sm)}.file-upload-cta strong{color:var(--color-accent);font-weight:600}.file-upload-hint{font-size:var(--fs-xs);color:var(--color-text)}.file-list{margin:var(--space-2) 0 0;gap:var(--space-1);flex-direction:column;padding:0;list-style:none;display:flex}.file-item{align-items:center;gap:var(--space-2);padding:var(--space-1) var(--space-2);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-elevated);font-size:var(--fs-sm);display:flex}.file-item-name{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--color-text-strong);flex:1;overflow:hidden}.file-item-size{font-size:var(--fs-xs);color:var(--color-text);font-variant-numeric:tabular-nums;flex:none}.file-remove{color:var(--color-text);cursor:pointer;border-radius:var(--radius-sm);background:0 0;border:none;flex:none;padding:2px;display:inline-flex}.file-remove:hover{color:var(--color-danger);background:var(--color-danger-bg)}.file-remove svg{width:16px;height:16px}.avatar{background:var(--color-accent-bg);color:var(--color-accent);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-weight:700;display:inline-flex}.spinner{border:2px solid var(--color-border);border-top-color:var(--color-accent);border-radius:50%;width:20px;height:20px;animation:.7s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}
