/* Shared, contemporary controls; retain each simulation's faction palette. */
button:not(.chapter):not(.chapter-button){border-radius:12px;transition:background .2s,box-shadow .2s,opacity .2s;}
button:focus-visible,a:focus-visible{outline:3px solid #ca9a4d;outline-offset:4px}
button:disabled{cursor:not-allowed;opacity:.45}
.atlas-links a,.study-header nav a{border-radius:10px;padding:8px 12px;transition:background .2s}
.atlas-links a:hover,.study-header nav a:hover{background:#8d94741a}
.map-tools button,.map-controls button,.story-controls button{box-shadow:0 2px 6px #102c2812,inset 0 1px 0 #ffffff50;border:1px solid #88888830}
#play{width:auto;min-width:114px;height:46px;flex-shrink:0;display:flex;align-items:center;justify-content:center;gap:9px;padding:0 18px;border-radius:15px;background:linear-gradient(145deg,#355a53,#203b37);color:#fff;border:1px solid #ffffff28;box-shadow:0 4px 12px #15352c24,inset 0 1px 0 #ffffff20;font:600 13px/1 system-ui,sans-serif;white-space:nowrap;}
#play svg{width:17px;height:17px;fill:currentColor;flex-shrink:0}
#play:hover{background:linear-gradient(145deg,#426b63,#294b43)}
#play.awaiting-play{animation:invite-play 2s ease-in-out infinite}
.alexander-crown{transform-box:fill-box;transform-origin:center;filter:drop-shadow(0 2px 3px #14282388)}
.campaign-playing .alexander-crown{animation:live-crown 1.7s ease-in-out infinite}
@keyframes invite-play{0%,100%{transform:scale(1);box-shadow:0 4px 12px #15352c24,0 0 0 0 #31584e25}50%{transform:scale(1.045);box-shadow:0 4px 14px #15352c30,0 0 0 7px #31584e00}}
@keyframes live-crown{0%,100%{transform:scale(1)}50%{transform:scale(1.16)}}
@media(prefers-reduced-motion:reduce){#play.awaiting-play,.campaign-playing .alexander-crown{animation:none}}
@media(max-width:600px){#play{min-width:98px;padding:0 12px;font-size:12px}.atlas-links a,.study-header nav a{padding:7px 8px}}
.arrival-symbol{transform-origin:0 0;filter:drop-shadow(0 3px 7px #63211f50)}
.campaign-playing .arrival-symbol{animation:arrival-pump 1.4s ease-in-out infinite}
.arrival-callout{cursor:pointer;filter:drop-shadow(0 3px 6px #162c3740)}
.clashing-sword{transform-origin:12px 12px}
.campaign-playing .clashing-sword.left{animation:sword-left 1.4s ease-in-out infinite}
.campaign-playing .clashing-sword.right{animation:sword-right 1.4s ease-in-out infinite}
@keyframes arrival-pump{0%,100%{transform:scale(1.65)}50%{transform:scale(1.92)}}
@keyframes sword-left{0%,100%{transform:rotate(-15deg)}40%,60%{transform:rotate(10deg)}}
@keyframes sword-right{0%,100%{transform:rotate(15deg)}40%,60%{transform:rotate(-10deg)}}
.narration-controls{display:flex;align-items:center;gap:10px;margin:12px 0;flex-wrap:wrap}.narration-controls button{padding:8px 12px;background:#244c44;color:white;border:0;font-size:13px}.narration-controls small{flex:1;min-width:100px}
@media(prefers-reduced-motion:reduce){.campaign-playing .arrival-symbol,.campaign-playing .clashing-sword{animation:none}}
.campaign-playing .commander-icon.underway{transform-origin:0 0;animation:live-crown 1.7s ease-in-out infinite}
@media(prefers-reduced-motion:reduce){.campaign-playing .commander-icon.underway{animation:none}}

/* Scale only the icon, preserving its geographic anchor and leader line. */
.map-marker-visual{transform-origin:0 0;transition:transform .18s ease-out;cursor:pointer}
.battle:not(.noninteractive):hover .map-marker-visual,.poi:hover .map-marker-visual,.battle:focus-visible .map-marker-visual,.poi:focus-visible .map-marker-visual{transform:scale(1.65);filter:drop-shadow(0 2px 4px #102c2870)}
.city:hover circle:not(.hit),.city:focus-visible circle:not(.hit){transform:scale(1.5);transform-origin:0 0}
@media(prefers-reduced-motion:reduce){.map-marker-visual{transition:none}}

.marker-caption{opacity:0;visibility:hidden;transition:opacity .15s;filter:drop-shadow(0 2px 4px #102c2860)}
.battle:hover .marker-caption,.poi:hover .marker-caption,.battle:focus-within .marker-caption,.poi:focus-within .marker-caption,.marker-caption.current{opacity:1;visibility:visible}
.battle:active .map-marker-visual,.poi:active .map-marker-visual{transform:scale(1.65)}
@media(prefers-reduced-motion:reduce){.marker-caption{transition:none}}

.indian-key{display:inline-block;width:13px;height:9px;border:1px solid #9c4c35;background:#c87656;border-radius:2px;margin-right:5px}
.campaign-event{position:absolute;z-index:5;width:300px;max-width:calc(100% - 24px);padding:13px 16px;background:#fff9e9f5;color:#263e37;border:1px solid #b89555;border-radius:14px;box-shadow:0 8px 28px #152c3333;pointer-events:auto}
.campaign-event[hidden]{display:none}.campaign-event>div{font:700 10px system-ui;letter-spacing:1px;color:#8c542b;margin-bottom:5px}.campaign-event strong{font:600 16px Georgia,serif}.campaign-event p{font:12px/1.55 system-ui;margin:7px 0}.campaign-event a{font:10px system-ui;color:#755633}.campaign-event:after{content:'';position:absolute;bottom:-8px;left:calc(50% - 7px);width:14px;height:14px;transform:rotate(45deg);background:#fff9e9;border-right:1px solid #b89555;border-bottom:1px solid #b89555}

.noninteractive,.noninteractive .map-marker-visual{cursor:default!important}.noninteractive .map-marker-visual{transform:none!important}.unavailable-encounter{cursor:default;transform:none!important}
