/* PROSOLWEB_CURSOR_BUSY_V4. Only the ring rotates; the favicon-inspired P is fixed. */
#ps-cursor-busy-v3 {
  --ps-busy-assets: ready;
  display: none;
  position: fixed;
  top: 0;
  left: 0;
  width: 32px;
  height: 32px;
  margin: 0;
  padding: 0;
  border: 0;
  pointer-events: none !important;
  user-select: none;
  z-index: 2147483647;
  contain: layout style;
  background: url("prosol-cursor-busy-mark.svg?v=20260908-cursor-v3") center / 32px 32px no-repeat;
}
#ps-cursor-busy-v3::after {
  content: "";
  position: absolute;
  inset: 0;
  background: url("prosol-cursor-busy-ring.svg?v=20260908-cursor-v3") center / contain no-repeat;
  transform-origin: 50% 50%;
}
@media screen and (hover: hover) and (pointer: fine) and (forced-colors: none) {
  html.prosol-cursor-brand #ps-cursor-busy-v3[data-visible="true"] { display: block; }
  html.prosol-cursor-brand #ps-cursor-busy-v3[data-visible="true"]::after { animation: ps-cursor-busy-v3-spin .9s linear infinite; }
  /* Native V2 arrow keeps the actual hotspot; the badge sits beside it. */
  html.prosol-cursor-brand [data-ps-cursor-busy-v3="true"] { cursor: var(--ps-cursor-arrow, progress) !important; }
}
@keyframes ps-cursor-busy-v3-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) {
  html.prosol-cursor-brand #ps-cursor-busy-v3[data-visible="true"]::after { animation: none; }
}

/* Temporary flags on the hovered element beat legacy normal/inline rules.
   The controller removes its flags before reading CSS or when leaving the page.
   Do not apply cursor:none or a universal forced cursor: special states matter. */
@media screen and (hover: hover) and (pointer: fine) and (forced-colors: none) {
  html.prosol-cursor-brand [data-ps-cursor-kind-v4="arrow"] {
    cursor: var(--ps-cursor-arrow, default) !important;
  }
  html.prosol-cursor-brand [data-ps-cursor-kind-v4="pointer"] {
    cursor: var(--ps-cursor-pointer, pointer) !important;
  }
}
