.btn{--btn-bg:var(--color-action);--btn-text:var(--text-on-action);--btn-border:transparent;--btn-border-w:var(--border-w-sm);--btn-bg-hover:var(--color-action-hover);--btn-bg-active:var(--color-action-active);--btn-py:var(--control-py-md);--btn-px:var(--control-px-lg);--btn-fs:var(--fs-body);--btn-fw:var(--fw-medium);--btn-radius:var(--radius-md);--btn-gap:var(--sp-2);display:inline-flex;align-items:center;justify-content:center;gap:var(--btn-gap);font-family:var(--font-sans);font-size:var(--btn-fs);font-weight:var(--btn-fw);line-height:1;white-space:nowrap;cursor:pointer;border:var(--btn-border-w) solid var(--btn-border);border-radius:var(--btn-radius);padding:var(--btn-py) var(--btn-px);background:var(--btn-bg);color:var(--btn-text);text-decoration:none;transition:background var(--duration-fast) var(--ease-out),color var(--duration-fast) var(--ease-out),border-color var(--duration-fast) var(--ease-out),transform var(--duration-fast) var(--ease-out)}.btn:focus-visible{box-shadow:var(--shadow-focus)}.btn:hover:not(:disabled):not([aria-disabled=true]){background:var(--btn-bg-hover);color:var(--btn-text)}.btn:active:not(:disabled):not([aria-disabled=true]){background:var(--btn-bg-active);transform:translateY(var(--border-w-sm))}.btn:disabled,.btn[aria-disabled=true]{cursor:not-allowed;--btn-bg:var(--color-action-disabled);--btn-text:var(--text-disabled);--btn-border:transparent;opacity:var(--opacity-disabled)}.btn .spinner{--spinner-color:currentColor;--spinner-track:color-mix(in srgb,currentColor 28%,transparent)}.btn-primary{--btn-bg:var(--color-action);--btn-text:var(--text-on-action);--btn-border:transparent;--btn-bg-hover:var(--color-action-hover);--btn-bg-active:var(--color-action-active)}.btn-secondary{--btn-bg:var(--surface-2);--btn-text:var(--text-primary);--btn-border:var(--border-default);--btn-bg-hover:var(--surface-3);--btn-bg-active:var(--surface-3)}.btn-outline{--btn-bg:var(--color-action-soft);--btn-text:var(--color-action);--btn-border:var(--color-action);--btn-border-w:var(--border-w-md);--btn-bg-hover:var(--color-action-soft-hover);--btn-bg-active:var(--color-action-soft-hover)}.btn-ghost{--btn-bg:var(--surface-1);--btn-text:var(--text-secondary);--btn-border:var(--border-subtle);--btn-bg-hover:var(--surface-2);--btn-bg-active:var(--surface-3)}.btn-dashed{--btn-bg:var(--surface-1);--btn-text:var(--text-secondary);--btn-border:var(--border-default);--btn-bg-hover:var(--surface-2);--btn-bg-active:var(--surface-3);border-style:dashed}.btn-dashed:hover:not(:disabled):not([aria-disabled=true]){--btn-text:var(--text-primary);--btn-border:var(--border-strong)}.btn-danger{--btn-bg:var(--state-error);--btn-text:var(--text-inverse);--btn-border:transparent;--btn-bg-hover:var(--state-error-hover);--btn-bg-active:var(--state-error-text)}.btn-sm{--btn-py:var(--control-py-sm);--btn-px:var(--sp-3);--btn-fs:var(--fs-sm);--btn-radius:var(--radius-sm)}.btn-lg{--btn-py:var(--control-py-xl);--btn-px:var(--sp-6);--btn-fs:var(--fs-body-lg);--btn-radius:var(--radius-lg)}.btn-icon{--btn-py:var(--sp-2);--btn-px:var(--sp-2);min-width:var(--control-h-md)}.btn-sm.btn-icon{min-width:var(--control-h-sm)}.btn-lg.btn-icon{min-width:var(--control-h-lg)}