.btn{--btn-bg: var(--color-surface-3);--btn-bg-hover: var(--color-border-strong);--btn-color: var(--color-text);display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);min-height:44px;padding:0 var(--space-5);border:1px solid transparent;border-radius:var(--radius-sm);background:var(--btn-bg);color:var(--btn-color);font-family:var(--font-display);font-size:var(--text-lg);font-weight:600;letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;cursor:pointer;transition:background var(--transition),border-color var(--transition),color var(--transition)}.btn:hover{background:var(--btn-bg-hover)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{--btn-bg: var(--color-brand);--btn-bg-hover: var(--color-brand-hover);--btn-color: var(--color-on-brand)}.btn-outline{--btn-bg: transparent;--btn-bg-hover: var(--color-brand-soft);border-color:var(--color-border-strong)}.btn-outline:hover{border-color:var(--color-brand)}.btn-ghost{--btn-bg: transparent;--btn-bg-hover: var(--color-surface-2)}.btn-danger{--btn-bg: var(--color-danger);--btn-bg-hover: #dc2626;--btn-color: #fff}.btn-sm{min-height:34px;padding:0 var(--space-3);font-size:var(--text-base)}.btn-block{width:100%}.field{display:grid;align-content:start;gap:var(--space-2);margin-bottom:var(--space-4)}.field-label{font-size:var(--text-sm);font-weight:600;color:var(--color-text-muted)}.input,.select,.textarea{width:100%;min-height:44px;padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface-2);color:var(--color-text);transition:border-color var(--transition),box-shadow var(--transition)}.textarea{min-height:120px;resize:vertical}.input:focus,.select:focus,.textarea:focus{outline:none;border-color:var(--color-brand);box-shadow:0 0 0 3px var(--color-brand-soft)}.field-error{font-size:var(--text-sm);color:var(--color-danger)}.checkbox{display:flex;align-items:flex-start;gap:var(--space-2);font-size:var(--text-sm);cursor:pointer}.checkbox input{width:18px;height:18px;margin-top:2px;accent-color:var(--color-brand)}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);box-shadow:var(--shadow-sm)}.card-body{padding:var(--space-5)}.alert{padding:var(--space-3) var(--space-4);border-radius:var(--radius-sm);border:1px solid var(--color-border);background:var(--color-surface-2);font-size:var(--text-sm)}.alert-error{border-color:#ef444466;background:#ef44441a;color:var(--color-danger)}.alert-success{border-color:#2fb36d66;background:#2fb36d1a;color:var(--color-success)}.badge{display:inline-flex;align-items:center;gap:var(--space-1);padding:2px var(--space-2);border-radius:var(--radius-pill);background:var(--color-surface-3);font-size:var(--text-xs);font-weight:600;text-transform:uppercase;letter-spacing:.04em}.badge-brand{background:var(--color-brand);color:var(--color-on-brand)}.badge-success{background:#2fb36d26;color:var(--color-success)}.badge-warning{background:#e3a12f26;color:var(--color-warning)}.modal-backdrop{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:var(--gutter);background:#0009}.modal{width:min(560px,100%);max-height:calc(100vh - 2 * var(--gutter));overflow:auto;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg)}.modal-header,.modal-footer{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);padding:var(--space-4) var(--space-5)}.modal-header{border-bottom:1px solid var(--color-border)}.modal-footer{justify-content:flex-end;border-top:1px solid var(--color-border)}.modal-body{padding:var(--space-5)}.toast-stack{position:fixed;right:var(--space-4);bottom:var(--space-4);z-index:200;display:grid;gap:var(--space-2)}.toast{min-width:260px;max-width:360px;padding:var(--space-3) var(--space-4);border-left:4px solid var(--color-info);border-radius:var(--radius-sm);background:var(--color-surface);box-shadow:var(--shadow);font-size:var(--text-sm)}.toast-success{border-left-color:var(--color-success)}.toast-error{border-left-color:var(--color-danger)}.spinner{width:28px;height:28px;border:3px solid var(--color-border);border-top-color:var(--color-brand);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.page-loading{display:grid;place-items:center;min-height:60vh}
