/* Shared surface-aware cursor. Surface state inverts the filled cursor while
   label visibility stays independent from visual compositing effects. */
.pointer-cursor {
  position: fixed;
  /* The modal lives above the page canvas; the cursor must remain the top visual layer. */
  z-index: 300;
  top: 0;
  left: 0;
  width: 0;
  height: 0;
  pointer-events: none;
  --cursor-fill: #111;
  --cursor-content: #fff;
  opacity: 0;
  visibility: hidden;
  transition: opacity 160ms ease, visibility 160ms step-end;
}

.pointer-cursor.is-visible {
  opacity: 1;
  visibility: visible;
  will-change: transform;
  transition: opacity 160ms ease;
}

.pointer-cursor__dot {
  position: relative;
  z-index: 0;
  display: block;
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: var(--cursor-fill);
  transform: translate(-50%, -50%);
  transition: width 320ms var(--adhemas-motion-ease), height 320ms var(--adhemas-motion-ease), background-color 220ms ease, border-color 220ms ease;
}

.pointer-cursor__label {
  position: absolute;
  z-index: 1;
  top: 50%;
  left: 50%;
  color: var(--cursor-content);
  font-size: 13px;
  font-weight: 700;
  letter-spacing: .01em;
  line-height: 1;
  -webkit-text-stroke: .25px currentColor;
  pointer-events: none;
  white-space: nowrap;
  opacity: 0;
  transform: translate(-50%, -50%) scale(.88);
  transition: opacity 160ms ease, transform 240ms var(--adhemas-motion-ease);
}

.pointer-cursor.has-label .pointer-cursor__label,
.pointer-cursor.has-target .pointer-cursor__label {
  opacity: 1;
  transform: translate(-50%, -50%) scale(1);
}

.pointer-cursor.has-target .pointer-cursor__dot {
  width: 80px;
  height: 80px;
  background: var(--cursor-fill);
  border: 0;
  opacity: 1;
}

.pointer-cursor__icon {
  position: absolute;
  z-index: 1;
  top: 50%;
  left: 50%;
  display: grid;
  place-items: center;
  width: 20px;
  height: 20px;
  color: var(--cursor-content);
  opacity: 0;
  transform: translate(-50%, -50%) scale(.88);
  transition: opacity 160ms ease, transform 240ms var(--adhemas-motion-ease);
  pointer-events: none;
}

.pointer-cursor__lock {
  display: block;
  width: 16px;
  height: 16px;
}

body.is-dark-surface .pointer-cursor { --cursor-content: #000; }
body.is-dark-surface .pointer-cursor { --cursor-fill: #fff; }
body.case-access-open .pointer-cursor { --cursor-content: #fff; }
body.case-access-open .pointer-cursor { --cursor-fill: #111; }

.pointer-cursor.has-icon .pointer-cursor__icon {
  opacity: 1;
  transform: translate(-50%, -50%) scale(1);
}

.pointer-cursor.has-icon .pointer-cursor__label {
  opacity: 0;
  transform: translate(-50%, -50%) scale(.88);
}

body.is-custom-cursor-active,
body.is-custom-cursor-active a,
body.is-custom-cursor-active button,
body.is-custom-cursor-active .work-card {
  cursor: none;
}

body.is-custom-cursor-active .work-card--soon {
  cursor: none;
}

@media (hover: none), (pointer: coarse) {
  .pointer-cursor { display: none; }
}
