/* ==========================================================================
   CURSOR-FOLLOW EFFECT
   Custom cursor for the public landing surface only.
   ========================================================================== */
.cursor-dot, .cursor-ring {
  position: fixed;
  top: 0;
  left: 0;
  pointer-events: none;
  z-index: 9999;
  border-radius: 50%;
  opacity: 0;
  transition:
    opacity 200ms ease,
    width 220ms var(--ease-spring),
    height 220ms var(--ease-spring),
    background-color 200ms ease,
    border-color 200ms ease,
    margin 220ms var(--ease-spring);
}
.cursor-dot.is-visible,
.cursor-ring.is-visible { opacity: 1; }

.cursor-dot {
  width: 8px;
  height: 8px;
  margin: -4px 0 0 -4px;
  background: var(--accent);
  box-shadow: 0 0 4px color-mix(in srgb, var(--accent) 50%, transparent);
}

.cursor-ring {
  width: 36px;
  height: 36px;
  margin: -18px 0 0 -18px;
  border: 1.5px solid color-mix(in srgb, var(--accent) 45%, transparent);
}

.cursor-ring.is-active {
  width: 60px;
  height: 60px;
  margin: -30px 0 0 -30px;
  border-color: color-mix(in srgb, var(--accent) 80%, transparent);
  background: color-mix(in srgb, var(--accent) 12%, transparent);
  backdrop-filter: blur(2px);
  -webkit-backdrop-filter: blur(2px);
}

/* Hiding the native cursor only where a real pointer exists — on touch
   devices there is no cursor to replace, and `cursor: none` there would
   do nothing but risk breaking tap targets. */
@media (hover: hover) and (pointer: fine) {
  body.cursor-follow-active,
  body.cursor-follow-active a,
  body.cursor-follow-active button,
  body.cursor-follow-active .course-card {
    cursor: none;
  }
  /* Faster transform so hovered cards keep up with the custom cursor
     instead of lagging visibly behind it. */
  .card-hoverable {
    transition:
      transform 60ms var(--ease-out),
      box-shadow var(--dur-base) var(--ease-out),
      border-color var(--dur-base) var(--ease-out);
  }
}

@media (prefers-reduced-motion: reduce) {
  .cursor-dot, .cursor-ring { display: none; }
  body.cursor-follow-active,
  body.cursor-follow-active a,
  body.cursor-follow-active button { cursor: auto; }
}
