/* Keep expensive full-screen paint effects off small screens and touch devices. */
@media(max-width:760px),(pointer:coarse){
 .grain{display:none}
 body{background:var(--bg)}
 dialog::backdrop{backdrop-filter:none;-webkit-backdrop-filter:none}
 dialog,.event-dialog{box-shadow:0 12px 32px #0008;animation:none}
 .speaker-stage{animation:none}
 .speaker-seat,.event-sigil{text-shadow:none;box-shadow:none}
 .route-card:hover,.role-guide-card:hover{transform:none;box-shadow:none}
 .person.selected{box-shadow:none}
 .tutorial-beacon{animation:none;box-shadow:none}
 .tutorial-beacon::after{content:'';position:absolute;inset:-3px;border:1px solid var(--gold);border-radius:inherit;pointer-events:none;animation:mobile-guide-pulse 1.8s ease-out infinite}
 .tutorial-target{box-shadow:none}
}
@keyframes mobile-guide-pulse{0%{opacity:.8;transform:scale(1)}100%{opacity:0;transform:scale(1.14)}}
@media(prefers-reduced-motion:reduce){.tutorial-beacon::after{animation:none}}

/* Local selection, notes and marks remain responsive while the server saves. */
.busy button{pointer-events:auto}
body.busy::after{content:'正在处理并保存…';position:fixed;z-index:10000;top:0;left:50%;transform:translateX(-50%);padding:5px 14px;border-radius:0 0 9px 9px;background:#d8c18d;color:#17221d;font-size:12px;pointer-events:none}
.rail{contain:layout style}.game-records{content-visibility:auto;contain-intrinsic-size:auto 500px}
