/* Square cursor for the TPM Miami landing page (desktop, fine pointers only).
   A small filled blue square rides the pointer; a larger outlined square
   follows with easing and turns as it travels. Over anything clickable the
   outline grows and squares up while the dot folds away. The native cursor
   is hidden only once the script has confirmed a mouse-class pointer, so
   phones, tablets and reduced-motion visitors never lose their cursor. */
.cur-dot, .cur-ring { visibility: hidden; opacity: 0; }
body.has-cursor-fx .cur-dot,
body.has-cursor-fx .cur-ring {
  visibility: visible; opacity: 1;
  position: fixed; top: 0; left: 0;
  z-index: 2147483000;
  pointer-events: none;
  will-change: transform;
}
body.has-cursor-fx .cur-dot {
  width: 8px; height: 8px;
  background: #6FA6FF;
  box-shadow: 0 0 12px rgba(111, 166, 255, .55);
  transform: translate(-50%, -50%);
  transition: width .22s ease, height .22s ease, opacity .22s ease;
}
body.has-cursor-fx .cur-ring {
  width: 40px; height: 40px;
  border: 1px solid rgba(111, 166, 255, .75);
  transform: translate(-50%, -50%) rotate(var(--cur-turn, 0deg));
  transition: width .28s cubic-bezier(.2,.8,.2,1), height .28s cubic-bezier(.2,.8,.2,1), border-color .28s ease, background-color .28s ease;
}
body.has-cursor-fx .cur-ring.grow {
  width: 68px; height: 68px;
  border-color: #6FA6FF;
  background: rgba(111, 166, 255, .08);
}
body.has-cursor-fx .cur-dot.grow { width: 0; height: 0; opacity: 0; }
body.has-cursor-fx .cur-ring.press { width: 26px; height: 26px; background: rgba(111, 166, 255, .22); }
body.has-cursor-fx .cur-dot.cur-away, body.has-cursor-fx .cur-ring.cur-away { opacity: 0; }
body.has-cursor-fx, body.has-cursor-fx a, body.has-cursor-fx button,
body.has-cursor-fx input, body.has-cursor-fx label, body.has-cursor-fx select,
body.has-cursor-fx textarea, body.has-cursor-fx [role="button"] { cursor: none; }
/* The intake gate hides every other body child while it is pending; the
   squares must stay visible there or the gate has no cursor at all. */
html.tpm-intake-pending body.has-cursor-fx > #cur-dot.cur-dot,
html.tpm-intake-pending body.has-cursor-fx > #cur-ring.cur-ring { visibility: visible !important; opacity: 1 !important; pointer-events: none !important; }
/* Top-layer dialogs paint above the squares; give those their cursor back. */
body.has-cursor-fx dialog, body.has-cursor-fx dialog * { cursor: auto; }
body.has-cursor-fx dialog a, body.has-cursor-fx dialog button { cursor: pointer; }
@media (prefers-reduced-motion: reduce) {
  body.has-cursor-fx .cur-ring { transition: none; }
}
