/* ── FSHNiSTA cursor ────────────────────────────────────────────
   Always purple. Only exception: purple backgrounds → flip colour.
────────────────────────────────────────────────────────────── */
.cursor {
  position: fixed;
  width: 9px;
  height: 9px;
  border-radius: 50%;
  pointer-events: none;
  z-index: 9999;
  left: 0; top: 0;
  opacity: 0;
  background: #7C1CE1;
  box-shadow: 0 0 10px rgba(124,28,225,0.55);
  transition: width .18s ease, height .18s ease,
              background .12s ease, box-shadow .12s ease, opacity .2s ease;
  will-change: left, top, background;
}

.cursor-ring {
  position: fixed;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  border: 1.5px solid rgba(124,28,225,0.45);
  pointer-events: none;
  z-index: 9998;
  left: 0; top: 0;
  opacity: 0;
  transition: width .28s ease, height .28s ease,
              border-color .12s ease, opacity .2s ease;
  will-change: left, top;
}

/* Visible — JS adds on first mousemove */
.cursor.visible      { opacity: 1; }
.cursor-ring.visible { opacity: 1; }

/* Hover grow */
.cursor.hovering      { width: 13px; height: 13px; }
.cursor-ring.hovering { width: 50px; height: 50px; }

/* On purple background: JS sets --cursor-brand-color and --cursor-brand-ring
   white in dark mode, black in light mode */
.cursor.on-brand {
  background: var(--cursor-brand-color, #ffffff);
  box-shadow: none;
}
.cursor-ring.on-brand {
  border-color: var(--cursor-brand-ring, rgba(255,255,255,0.5));
}

/* Touch / coarse pointer devices — never show */
@media (hover: none), (pointer: coarse) {
  .cursor, .cursor-ring { display: none !important; }
}