/*  Custom pointer: the app's indigo arrow with a rounded badge sitting under it.

    Drawn as an inline SVG data URI rather than a .cur/.png file so it stays sharp on high-DPI
    screens and follows the brand colour without shipping an image asset. The badge is empty by
    design — it is the shape only, with no glyph inside it.

    The two trailing numbers in `cursor: url(...) 2 2` are the hotspot: the pixel inside the image
    that actually points. Leaving them off makes the OS guess (usually the top-left corner of the
    canvas), and the click would land a few pixels away from the arrow tip.

    A plain keyword fallback follows every url() — if a browser refuses the data URI the element
    still shows a sensible pointer instead of reverting to the default arrow everywhere.
*/

:root {
    /* Arrow only — nothing sits under it. The canvas is trimmed to 24×28 so the image is the mark
       itself; a larger canvas with empty space still counts as the cursor and pushes the hotspot
       maths around for no benefit. White outline keeps it readable over dark panels and photos. */
    --eo-cursor-arrow: url('data:image/svg+xml;utf8,\
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="28" viewBox="0 0 24 28">\
<path d="M3 2 L3 24 L9 18.6 L13 27.4 L17.2 25.5 L13.2 17 L21 17 Z" \
fill="%235b56ea" stroke="%23ffffff" stroke-width="1.6" stroke-linejoin="round"/>\
</svg>') 3 2;

    /* Clickable: the same arrow inverted, so a link still reads differently from plain text
       without adding a second shape. */
    --eo-cursor-pointer: url('data:image/svg+xml;utf8,\
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="28" viewBox="0 0 24 28">\
<path d="M3 2 L3 24 L9 18.6 L13 27.4 L17.2 25.5 L13.2 17 L21 17 Z" \
fill="%23ffffff" stroke="%235b56ea" stroke-width="2" stroke-linejoin="round"/>\
</svg>') 3 2;

    /* Text, resize and busy states reuse the same mark where a custom one helps, and fall back to
       the platform cursor where the platform one carries meaning the arrow cannot. */
    --eo-cursor-move: url('data:image/svg+xml;utf8,\
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="28" viewBox="0 0 24 28">\
<path d="M3 2 L3 24 L9 18.6 L13 27.4 L17.2 25.5 L13.2 17 L21 17 Z" \
fill="%235b56ea" stroke="%23ffffff" stroke-width="1.6" stroke-linejoin="round" opacity="0.75"/>\
</svg>') 3 2;
}

body.inventory-body,
body.inventory-body .inventory-shell {
    cursor: var(--eo-cursor-arrow), default;
}

/* Anything clickable gets the inverted badge, so the cursor still distinguishes a link from plain
   text — which is the one job the default cursor set actually does. */
body.inventory-body a,
body.inventory-body button,
body.inventory-body [role="button"],
body.inventory-body .btn,
body.inventory-body .lk-card,
body.inventory-body summary,
body.inventory-body label[for],
body.inventory-body select,
body.inventory-body .crm-stage-tile,
body.inventory-body .action-card {
    cursor: var(--eo-cursor-pointer), pointer;
}

/* Everything below keeps a platform cursor on purpose. Each of these shapes says something the
   arrow cannot — where the caret will land, which way a column resizes, that a control is refusing
   input — so replacing them with the brand arrow would cost information, not add polish. */

body.inventory-body input:not([type="button"]):not([type="submit"]):not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="range"]):not([type="color"]),
body.inventory-body textarea,
body.inventory-body [contenteditable="true"] {
    cursor: text;
}

body.inventory-body [disabled],
body.inventory-body .disabled,
body.inventory-body button:disabled,
body.inventory-body select:disabled,
body.inventory-body input:disabled,
body.inventory-body textarea:disabled {
    cursor: not-allowed;
}

/* Column resize handles, splitters and sortable rows. */
body.inventory-body .lookup-shell .resizer,
body.inventory-body th[data-resize],
body.inventory-body .col-resizer { cursor: col-resize; }

body.inventory-body [draggable="true"],
body.inventory-body .sortable-handle,
body.inventory-body .drag-handle { cursor: var(--eo-cursor-move), grab; }

body.inventory-body [draggable="true"]:active,
body.inventory-body .drag-handle:active { cursor: grabbing; }

/* A busy overlay should say "wait", not "click me". */
body.inventory-body.is-loading,
body.inventory-body .eo-loader-overlay,
body.inventory-body [aria-busy="true"] { cursor: wait; }

/* Help affordances keep the question-mark cursor. */
body.inventory-body [title]:not(a):not(button):not(.btn),
body.inventory-body abbr[title] { cursor: help; }

/* Touch devices have no pointer to draw; the custom image is wasted bytes and can interfere with
   tap highlighting. */
@media (hover: none), (pointer: coarse) {
    body.inventory-body,
    body.inventory-body .inventory-shell,
    body.inventory-body a,
    body.inventory-body button,
    body.inventory-body .btn {
        cursor: auto;
    }
}
