/* Ripple Impact Cursor — disabled on touch & reduced motion */
@media (hover: hover) and (pointer: fine) {
  body.has-custom-cursor {
    cursor: none;
  }

  body.has-custom-cursor a,
  body.has-custom-cursor button,
  body.has-custom-cursor [role="button"],
  body.has-custom-cursor input,
  body.has-custom-cursor textarea,
  body.has-custom-cursor select,
  body.has-custom-cursor label {
    cursor: none;
  }
}

.cursor-system {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 10000;
}

.cursor-system[hidden] {
  display: none;
}

.cursor-core {
  position: fixed;
  width: 12px;
  height: 12px;
  margin-block-start: -6px;
  margin-inline-start: -6px;
  border-radius: 50%;
  background: var(--color-orange);
  box-shadow: 0 0 12px var(--color-orange), 0 0 4px var(--color-neon);
  transform: translate3d(var(--cx, 0), var(--cy, 0), 0);
  transition: width 0.2s, height 0.2s, margin 0.2s, background 0.2s;
  will-change: transform;
}

.cursor-core.is-hover {
  width: 28px;
  height: 28px;
  margin-block-start: -14px;
  margin-inline-start: -14px;
  background: transparent;
  border: 2px solid var(--color-neon);
  box-shadow: 0 0 16px rgba(149, 255, 0, 0.5);
}

.cursor-core.is-pressed {
  transform: translate3d(var(--cx, 0), var(--cy, 0), 0) scale(0.75);
}

.cursor-ring {
  position: fixed;
  width: 40px;
  height: 40px;
  margin-block-start: -20px;
  margin-inline-start: -20px;
  border-radius: 50%;
  border: 1px solid rgba(255, 122, 0, 0.45);
  transform: translate3d(var(--rx, 0), var(--ry, 0), 0);
  transition: transform 0.12s ease-out, width 0.25s, height 0.25s, margin 0.25s, border-color 0.25s;
  will-change: transform;
}

.cursor-ring.is-hover {
  width: 56px;
  height: 56px;
  margin-block-start: -28px;
  margin-inline-start: -28px;
  border-color: var(--color-neon);
}

.cursor-ripples {
  position: fixed;
  inset: 0;
  overflow: hidden;
}

.cursor-ripple {
  position: absolute;
  border-radius: 50%;
  border: 2px solid var(--color-orange);
  transform: translate(-50%, -50%) scale(0);
  animation: ripple-impact 0.7s ease-out forwards;
  opacity: 0.85;
  box-shadow: 0 0 20px rgba(255, 122, 0, 0.4);
}

.cursor-ripple--secondary {
  border-color: var(--color-neon);
  animation-delay: 0.05s;
  animation-duration: 0.85s;
}

@keyframes ripple-impact {
  0% {
    transform: translate(-50%, -50%) scale(0);
    opacity: 0.9;
  }
  100% {
    transform: translate(-50%, -50%) scale(2.8);
    opacity: 0;
  }
}
