/* Shared audience/VR controls. Independent scale/translate preserve positioned controls. */
:root.vf-interaction-enabled :is(button, a[href], [role="button"], [role="radio"]) {
  -webkit-tap-highlight-color: transparent;
  touch-action: manipulation;
  transition: scale 140ms cubic-bezier(.2,.8,.2,1), translate 140ms ease, filter 100ms ease, border-color 100ms ease, box-shadow 140ms ease;
}
.vf-interaction-enabled :where(button, a[href], [role="button"], [role="radio"]):focus-visible {
  outline: 2px solid #8bdcff !important;
  outline-offset: 3px;
}
:root.vf-interaction-enabled .vf-pressed:not(:disabled):not([aria-disabled="true"]) {
  scale: var(--vf-press-scale, .975);
  translate: 0 1px;
  filter: brightness(1.12);
  border-color: #8bdcff !important;
  transition-duration: 65ms;
  /* Uniform fill covers the whole control, independent of the touch position. */
  box-shadow: inset 0 0 0 100vmax rgba(116, 210, 255, .14), inset 0 2px 5px rgba(0, 7, 20, .3), 0 2px 7px rgba(0, 7, 20, .15) !important;
}
:root.vf-interaction-enabled .vf-pressed[data-feedback-size="small"] { --vf-press-scale: .95; }
:root.vf-interaction-enabled .vf-pressed[data-feedback-size="card"] { --vf-press-scale: .985; }
.vf-interaction-enabled .phone-shell .primary-action {
  box-shadow: 0 6px 16px rgba(45, 112, 238, .19), inset 0 1px rgba(255,255,255,.15) !important;
}
.vf-interaction-enabled .phone-shell :is(.entry-origin-option, .option-button)[aria-checked="true"],
.vf-interaction-enabled .phone-shell .option-button[aria-pressed="true"] {
  border-color: #77d8ff !important;
  box-shadow: inset 0 0 0 1px rgba(119,216,255,.45) !important;
}
.vf-interaction-enabled .entry-origin-option { position: relative; }
.vf-choice-check { position: absolute; right: 8px; bottom: 8px; color: #b9f0ff; font-size: 14px; }
.vf-interaction-enabled .entry-origin-option > small { padding-right: 18px; }
.vf-interaction-enabled .phone-shell :is(.bar-icon, .language-toggle, .mini-menu, .route-context-card > button),
.vf-interaction-enabled :is(.map-navigation-head > button, .info-card__close, .vf-broadcast-close, .vf-broadcast-detail-action, .vf-broadcast-image-preview-close, .venue-svg-preview__close) {
  min-width: 44px !important;
  min-height: 44px !important;
}
.vf-interaction-enabled .phone-shell .route-context-card > button { padding: 8px 10px; }
.vf-interaction-enabled [aria-busy="true"][data-action="download"] {
  cursor: progress;
  opacity: .85;
  display: flex;
  justify-content: center;
  align-items: center;
  gap: 8px;
}
.vf-busy-spinner,
.vf-map-pending .vf-map-status::before {
  content: "";
  display: inline-block;
  width: 16px;
  height: 16px;
  flex: 0 0 16px;
  border: 2px solid rgba(139,220,255,.25);
  border-top-color: #8bdcff;
  border-radius: 50%;
  animation: vf-feedback-spin 700ms linear infinite;
}
.vf-map-pending, .vf-map-error { position: relative; }
.phone-shell .uploaded-map-shell:is(.vf-map-pending, .vf-map-error) > img { opacity: 0 !important; pointer-events: none; }
.vf-map-status {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  gap: 10px;
  background: #0b2542;
  color: #cfe6ff;
  font-size: 13px;
  z-index: 2;
}
.vf-map-retry {
  min-height: 44px;
  padding: 8px 18px;
  border: 1px solid #479bc9;
  border-radius: 10px;
  color: #e5f6ff;
  background: #133e64;
  font: inherit;
}
.vf-map-ready > img { animation: vf-map-reveal 160ms ease-out; }
@keyframes vf-feedback-spin { to { rotate: 360deg; } }
@keyframes vf-map-reveal { from { opacity: .35; } to { opacity: 1; } }
@media (prefers-reduced-motion: reduce) {
  .vf-interaction-enabled :where(button, a[href], [role="button"], [role="radio"]) { transition: none !important; }
  .vf-interaction-enabled .vf-pressed { scale: 1 !important; translate: none !important; }
  .vf-interaction-enabled :is(.glass-button, .option-button, .primary-action, .secondary-action, .route-point-option, .zone-real-scene-button):active { transform: none !important; }
  .vf-busy-spinner, .vf-map-pending .vf-map-status::before, .vf-map-ready > img { animation: none; }
}
