/* ORBINTU global cursor system — five pixel cursors, and nothing else, on every page.
   Art + hotspots: cursor/build_cursor.py (single source) → site/orbintu/cursors/*.svg|png and the tokens in orbintu/base.css:
     --cursor-default  hand 1, finger pointing   everywhere (html/body)
     --cursor-hover    hand 2, finger bending    anything clickable
     --cursor-hold     hand 3, finger pressed    while the mouse button is held (html.ob-clicking, set by cursor.js)
     --cursor-text     pixel I-beam              text you can select or type
     --cursor-graphic  pixel crosshair           pictures, video, canvas
   Every hotspot sits on the art's own tip, so the click lands exactly under what you see.
   Component CSS uses the same tokens (never a bare OS keyword). Browser defaults that would show an OS cursor (e.g. every
   <label> is `cursor: default` in Chrome's own stylesheet) are covered here too. Real pointers only — touch keeps the system cursor. */
@media (pointer: fine) {
  a[href], button:not(:disabled), [role="button"]:not([aria-disabled="true"]), [role="tab"], [role="option"], [role="checkbox"],
  summary, select, label, option, input[type="submit"], input[type="button"], input[type="reset"], input[type="checkbox"],
  input[type="radio"], input[type="range"], input[type="color"], input[type="file"], input[type="file"]::file-selector-button,
  .ob-navi, .ob-ptab, .ob-role, .ob-rq, .ob-qb, .chipb, .opt, .switch, .row, .card[href], .ob-dd__i, .ob-mnav a, .cursor-pointer,
  [data-act]:not(input):not(textarea), [data-cursor="click"],
  /* …and everything inside them (the words and icons of a link/button), at zero specificity so the text-field rule below
     still wins for an input that sits inside a clickable row */
  :where(a[href], button:not(:disabled), [role="button"]:not([aria-disabled="true"]), [role="tab"], [role="option"], [role="checkbox"],
         summary, label, .ob-navi, .ob-ptab, .ob-role, .ob-rq, .ob-qb, .chipb, .opt, .switch, .row, .card[href],
         .ob-dd__i, .ob-mnav a, .cursor-pointer, [data-act]:not(input):not(textarea), [data-cursor="click"]) * {
    /* !important is deliberate: the ONE authoritative cursor for every interactive element (it only touches `cursor`) */
    cursor: var(--cursor-hover) !important;
  }
  /* disabled controls: the normal hand (never the OS "not allowed" sign) */
  button:disabled, button:disabled *, [aria-disabled="true"], [aria-disabled="true"] *, input:disabled, select:disabled, textarea:disabled {
    cursor: var(--cursor-default) !important;
  }

  /* pictures: the pixel crosshair. Not !important, so a canvas that manages its own cursor (the create-your-orbi field:
     crosshair / held hand while dragging) keeps it; images inside links still get the hover hand.
     Decorative graphics hidden from screen readers (like the pixel-drawn headings) keep the normal hand. */
  :where(img, picture, video, canvas, [data-cursor="graphic"]):not([aria-hidden="true"], [aria-hidden="true"] *) {
    cursor: var(--cursor-graphic);
  }

  /* text you can select or write gets the pixel I-beam (p/h1-h6/span/li/… in orbintu/base.css; here: real form controls,
     which otherwise fall through to the OS text cursor, and any other words under the mouse — cursor.js marks those) */
  input:not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]):not([type="file"]):not(:disabled),
  textarea:not(:disabled), [contenteditable]:not([contenteditable="false"]), [contenteditable]:not([contenteditable="false"]) *, [data-cursor="text"] {
    cursor: var(--cursor-text) !important;
  }
  [data-ob-text] { cursor: var(--cursor-text); }

  /* holding the click — on a control or on free area: the pressed hand for as long as the button is down. Last and
     !important so it wins over every rule above; cursor.js skips it when you press on text (drag-to-select keeps the I-beam). */
  html.ob-clicking, html.ob-clicking * { cursor: var(--cursor-hold) !important; }
}
