/* TVP interaction system: hover, cursor, press, keyboard focus. One sheet, linked after tvp-tokens.css on every platform page.
   BASELINE ONLY: every rule is wrapped in :where() (zero specificity), so a page's own .btn:hover / .tab:hover etc. still wins.
   It adds feedback where a page gave none, and never changes colour on its own (no contrast change; shadow, lift, ring only).
   Hover is gated to real pointers; keyboard gets the same cue through :focus-visible; motion is off for reduced-motion users. */

/* 1. Smooth 180ms response on everything clickable */
:where(button,[role=button],[role=tab],[onclick],a[href],summary,select,input,textarea,label[for],.btn,.tab,.link,.kpi,.afchip,.sitem,.palrow){
  transition:background-color .18s ease,border-color .18s ease,color .18s ease,box-shadow .18s ease,transform .18s ease;
}

/* 2. Cursor affordance */
:where(button,[role=button],[role=tab],summary,select,label[for],input[type=checkbox],input[type=radio],input[type=file],input[type=submit],[onclick]):not(:disabled,[disabled],[aria-disabled=true]){cursor:pointer}
:where(button,[role=button],input,select,textarea):is(:disabled,[disabled],[aria-disabled=true]){cursor:not-allowed}

@media (hover:hover){
  /* 3. Buttons: lift 1px with a soft shadow (not inside the dark top bar / side rail, where the page's own hover is the cue) */
  :where(button,[role=button],.btn,.cbtn):not(:disabled,[disabled],[aria-disabled=true]):hover{box-shadow:var(--tvp-shadow-xs)}
  :where(button,[role=button],.btn,.cbtn):not(:disabled,[disabled],[aria-disabled=true]):not(.top *,.side *,.tab,.sitem):hover{transform:translateY(-1px)}

  /* 4. Cards and tiles that open something */
  :where(.kpi[onclick],.kpi[style*="cursor:pointer"],.card[onclick],[data-href]):hover{box-shadow:var(--tvp-shadow-card-hover);border-color:var(--tvp-steel-glow);transform:translateY(-2px)}

  /* 5. Table rows that open a record */
  :where(tr[onclick],tr[style*="cursor:pointer"]):hover>:where(td,th){background-color:var(--tvp-paper-2)}

  /* 6. Anything else clickable carrying only an inline cursor (chips, close crosses, inline links): a soft ring */
  :where(span,div,a,b,i,li)[style*="cursor:pointer"]:not(.kpi,tr):hover{box-shadow:var(--tvp-focus-glow)}

  /* 7. Plain text links with no class of their own */
  :where(a[href]:not([class])):hover{text-decoration:underline;text-underline-offset:2px}

  /* 8. Form controls: the border warms before the click */
  :where(input:not([type=checkbox],[type=radio],[type=range],[type=file]),select,textarea):not(:disabled,[readonly]):hover{border-color:var(--tvp-steel-glow)}
  :where(label:has(>input[type=checkbox],>input[type=radio])):hover{color:var(--tvp-ink)}
}

/* 9. Press: back down, no shadow */
:where(button,[role=button],.btn,.cbtn,.kpi[onclick]):not(:disabled,[disabled],[aria-disabled=true]):active{transform:translateY(0);box-shadow:none}

/* 10. Keyboard: same cue as hover, visible ring (pages that already define :focus-visible keep theirs) */
:where(button,[role=button],[role=tab],[onclick],a[href],summary,select,input,textarea,[tabindex]):focus-visible{outline:2px solid var(--tvp-steel);outline-offset:2px}

@media (prefers-reduced-motion:reduce){
  :where(*){transition-duration:.01ms !important}
  :where(button,[role=button],.btn,.cbtn,.kpi,.card):is(:hover,:active){transform:none !important}
}
