/* NTIS buttons — Button, IconButton. Every value is a semantic token, so dark
   and light differ only through tokens/theme-*.css. `.is-hover/.is-active/
   .is-focus/.is-disabled` force a state for specimens; never ship them. */
.ntis-btn{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:var(--gap-inline);height:var(--field-h);padding-inline:var(--space-6);border:var(--border-hairline) solid transparent;border-radius:var(--radius-md);background:transparent;font-family:var(--font-core);font-size:15px;font-weight:var(--w-medium);line-height:1;text-decoration:none;white-space:nowrap;cursor:pointer;transition:var(--t-color),var(--t-shadow),var(--t-transform);-webkit-user-select:none;user-select:none}
.ntis-btn--sm{height:var(--field-h-sm);padding-inline:var(--space-4);font-size:var(--fs-body-sm);border-radius:var(--radius-sm)}
.ntis-btn--lg{height:var(--field-h-lg);padding-inline:var(--space-8);font-size:var(--fs-body-lg)}
.ntis-btn--block{width:100%}
.ntis-btn:active:not(:disabled),.ntis-btn.is-active{transform:translateY(1px)}
.ntis-btn[aria-busy="true"]{cursor:progress}

/* Primary — the button gradient (one per view). Physical direction, never mirrored. */
.ntis-btn--primary{background:var(--gradient-button);color:var(--text-on-action);font-weight:var(--w-bold);box-shadow:var(--elev-1)}
.ntis-btn--primary:hover:not(:disabled),.ntis-btn--primary.is-hover{background:var(--gradient-button-hover);box-shadow:var(--elev-2)}
.ntis-btn--primary:active:not(:disabled),.ntis-btn--primary.is-active{background:var(--gradient-button-hover);box-shadow:var(--elev-inset)}
/* Secondary — solid nili */
.ntis-btn--secondary{background:var(--brand-secondary);color:var(--text-on-brand)}
.ntis-btn--secondary:hover:not(:disabled),.ntis-btn--secondary.is-hover{background:var(--brand-secondary-hover)}
.ntis-btn--secondary:active:not(:disabled),.ntis-btn--secondary.is-active{background:var(--brand-secondary-active)}
/* Outline — hairline, transparent so it sits on any surface */
.ntis-btn--outline{color:var(--brand-secondary-ink);border-color:var(--border-default)}
.ntis-btn--outline:hover:not(:disabled),.ntis-btn--outline.is-hover{background:var(--fill-hover);border-color:var(--border-strong);color:var(--text-strong)}
.ntis-btn--outline:active:not(:disabled),.ntis-btn--outline.is-active{background:var(--fill-pressed)}
/* Ghost */
.ntis-btn--ghost{color:var(--brand-secondary-ink)}
.ntis-btn--ghost:hover:not(:disabled),.ntis-btn--ghost.is-hover{background:var(--fill-hover);color:var(--text-strong)}
.ntis-btn--ghost:active:not(:disabled),.ntis-btn--ghost.is-active{background:var(--fill-pressed)}
/* Danger — wine; also the only wine most screens carry */
.ntis-btn--danger{background:var(--brand-tertiary);color:var(--text-on-brand)}
.ntis-btn--danger:hover:not(:disabled),.ntis-btn--danger.is-hover{background:var(--brand-tertiary-hover)}
.ntis-btn--danger:active:not(:disabled),.ntis-btn--danger.is-active{background:var(--brand-tertiary-active)}
/* Link — text action */
.ntis-btn--link{height:auto;padding:0;border:0;border-radius:var(--radius-xs);color:var(--text-link)}
.ntis-btn--link:hover:not(:disabled),.ntis-btn--link.is-hover{color:var(--text-link-hover);text-decoration:underline;text-underline-offset:3px}
.ntis-btn--link:active,.ntis-btn--link.is-active{transform:none}

/* Focus — declared after hover so a hovered, focused button keeps its ring */
.ntis-btn:focus-visible:not(:disabled),.ntis-btn.is-focus{outline:none;box-shadow:var(--focus-ring)}
.ntis-btn--danger:focus-visible:not(:disabled),.ntis-btn--danger.is-focus{box-shadow:var(--focus-ring-danger)}
/* Disabled — explicit tokens, never opacity */
.ntis-btn:disabled,.ntis-btn[aria-disabled="true"],.ntis-btn.is-disabled{background:var(--fill-disabled);color:var(--text-disabled);border-color:transparent;box-shadow:none;cursor:not-allowed;transform:none}
.ntis-btn[aria-disabled="true"]{pointer-events:none}
.ntis-btn--outline:disabled,.ntis-btn--outline.is-disabled{background:transparent;border-color:var(--border-subtle)}
.ntis-btn--ghost:disabled,.ntis-btn--ghost.is-disabled,.ntis-btn--link:disabled,.ntis-btn--link.is-disabled{background:transparent}

.ntis-btn__spinner{flex:none;width:15px;height:15px;border:2px solid currentColor;border-inline-end-color:transparent;border-radius:var(--radius-circle);animation:ntis-spin 700ms linear infinite}
@keyframes ntis-spin{to{transform:rotate(360deg)}}

/* IconButton — icon-only; always carries a label (aria-label + title) */
.ntis-iconbtn{display:inline-flex;align-items:center;justify-content:center;flex:none;width:var(--field-h);height:var(--field-h);padding:0;border:var(--border-hairline) solid transparent;border-radius:var(--radius-md);background:transparent;color:var(--text-muted);cursor:pointer;transition:var(--t-color),var(--t-shadow)}
.ntis-iconbtn--sm{width:var(--field-h-sm);height:var(--field-h-sm);border-radius:var(--radius-sm)}
.ntis-iconbtn--lg{width:var(--field-h-lg);height:var(--field-h-lg)}
.ntis-iconbtn:hover:not(:disabled),.ntis-iconbtn.is-hover{background:var(--fill-hover);color:var(--text-strong)}
.ntis-iconbtn:active:not(:disabled),.ntis-iconbtn.is-active{background:var(--fill-pressed)}
.ntis-iconbtn--outline{border-color:var(--border-default)}
.ntis-iconbtn--outline:hover:not(:disabled),.ntis-iconbtn--outline.is-hover{border-color:var(--border-strong)}
.ntis-iconbtn--solid{background:var(--brand-primary);color:var(--text-on-brand)}
.ntis-iconbtn--solid:hover:not(:disabled),.ntis-iconbtn--solid.is-hover{background:var(--brand-primary-hover);color:var(--text-on-brand)}
.ntis-iconbtn--solid:active:not(:disabled),.ntis-iconbtn--solid.is-active{background:var(--brand-primary-active)}
.ntis-iconbtn:focus-visible:not(:disabled),.ntis-iconbtn.is-focus{outline:none;box-shadow:var(--focus-ring)}
.ntis-iconbtn:disabled,.ntis-iconbtn.is-disabled{background:transparent;color:var(--text-disabled);cursor:not-allowed}
.ntis-iconbtn--outline:disabled,.ntis-iconbtn--outline.is-disabled{border-color:var(--border-subtle)}
.ntis-iconbtn--solid:disabled,.ntis-iconbtn--solid.is-disabled{background:var(--fill-disabled)}
