.camp-mini-map{margin:0 0 18px;background:#1b2d2b;color:#e5eae1;overflow:hidden;border-bottom:1px solid #708d6777}
.camp-mini-map button{font:inherit;cursor:pointer;min-height:44px;border:1px solid #a0b38d;border-radius:12px;padding:9px 12px;color:#354c43;background:#dce2d8;box-shadow:0 3px 8px #25401e22}
.camp-mini-map button:focus-visible,.camp-mini-map [data-camp-sector]:focus-visible{outline:3px solid #42b1a9;outline-offset:3px}
.camp-map-viewport{position:relative;height:clamp(540px,66svh,680px);overflow:hidden;isolation:isolate;touch-action:none;user-select:none;background:#6b7559}
.camp-map-board{position:absolute;top:0;left:0;transform-origin:0 0;overflow:visible;will-change:transform}
.camp-map-board [data-camp-sector]{cursor:pointer}
.camp-map-viewport:after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;background:radial-gradient(ellipse at 50% 53%,transparent 35%,#273b3122 72%,#273b3166 110%)}
.camp-map-viewport>header{position:absolute;left:12px;right:12px;top:12px;display:flex;align-items:center;justify-content:space-between;gap:8px;z-index:3;pointer-events:none}
.camp-map-viewport>header>div{background:#dce2d8ed;border:1px solid #aebdac;border-radius:14px;padding:10px 13px;box-shadow:0 5px 12px #23391e22;color:#394e47}
.camp-map-viewport>header span{font-size:9px;font-weight:800;letter-spacing:1.3px;color:#596c60}
.camp-mini-map h2{margin:4px 0 0;font-size:21px;line-height:1.2;color:#2f463f}
.camp-map-viewport>header button{pointer-events:auto;font-weight:800;font-size:13px;white-space:nowrap}
.camp-tile-outline{opacity:0;pointer-events:none}
.camp-map-board .selected .camp-tile-outline{opacity:1}
.camp-map-board [data-camp-sector]:hover .camp-tile-outline{opacity:1}
.camp-building-art{transition:filter .15s}
.camp-map-board .selected .camp-building-art{filter:drop-shadow(0 0 3px #b7d1ca)}
.camp-map-badge{position:absolute;bottom:50px;left:12px;z-index:2;display:flex;flex-direction:column;gap:3px;background:#dce2d8ed;border:1px solid #aebdac;border-radius:11px;padding:8px 11px;pointer-events:none;box-shadow:0 4px 12px #20371f22;color:#394e47}
.camp-map-badge b{font-size:12px}.camp-map-badge span{font-size:10px;color:#5c6f64}
.camp-map-controls{position:absolute;right:12px;bottom:47px;display:grid;grid-template-columns:44px 44px;gap:6px;z-index:3}
.camp-map-controls button{padding:8px;font-size:21px;min-width:44px}
.camp-map-controls [data-camp-center]{font-size:21px}.camp-map-controls [data-camp-fit]{grid-column:1 / 3;font-size:11px;font-weight:800}
.camp-scene-instruction{position:absolute;left:0;right:0;bottom:0;z-index:2;text-align:center;font-size:11px;font-weight:600;padding:11px 5px;background:#dce2d8db;color:#3a5145;pointer-events:none}
.camp-map-selection{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:14px 16px 9px;background:linear-gradient(115deg,#293f38,#1b302c);border-top:1px solid #71877a}
.camp-map-selection>div{min-width:0;display:flex;flex-direction:column;gap:4px}
.camp-map-selection small{font-size:9px;letter-spacing:1px;color:#a9c7a0}
.camp-map-selection b{font-size:18px;line-height:1.2;color:#f3f0dd}
.camp-map-selection span{font-size:12px;line-height:1.4;color:#c2d2b9}
.camp-map-selection button{font-size:13px;font-weight:800;flex-shrink:0;background:#c9d5b7;color:#3d4c2e;border-color:#a5b996}
.camp-map-hint{padding:0 16px 11px;margin:0;font-size:11px;line-height:1.5;color:#b7cfaa;background:#17392f}
.camp-map-building-list{display:flex;gap:7px;overflow:auto;padding:4px 16px 14px;background:#17392f;scrollbar-width:thin}
.camp-map-building-list button{flex-shrink:0;font-size:12px;min-height:44px;display:flex;align-items:center;gap:7px;background:#2b4c39;color:#e5edda;border-color:#77976555;box-shadow:none}
.camp-map-building-list small{font-size:10px;color:#b4c8a8}
.camp-v3 .base-scene-header{padding:10px 16px!important}.camp-v3 .base-scene-header h1{font-size:22px!important}.camp-v3 #baseSocial{min-height:44px!important;padding:7px!important}
.camp-facilities.camp-system-drawer{padding:0}.camp-system-drawer>summary{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;padding:16px;min-height:52px;font-size:17px;font-weight:700;color:#dde8d8}
.camp-system-drawer>summary::-webkit-details-marker{display:none}.camp-system-drawer>summary:after{content:"＋";font-size:22px;color:#b5cbaa}.camp-system-drawer[open]>summary:after{content:"−"}.camp-system-drawer>.camp-facility-grid{padding:0 12px 12px}
.camp-map-viewport .prologue-beacon{z-index:2;pointer-events:none;top:90px;font-size:10px;padding:6px 9px;background:#285640eb;color:#e2f4d8;left:12px}
.camp-resident{animation:camp-work 3.6s ease-in-out infinite;transform-box:fill-box;transform-origin:bottom center}
@keyframes camp-work{0%,100%{transform:translate(0,0)}40%,60%{transform:translate(4px,2px)}}
@media(min-width:700px){.camp-map-viewport{height:600px}.camp-map-viewport>header{top:18px;left:18px;right:18px}.camp-mini-map h2{font-size:24px}}
@media(max-width:340px){.camp-map-selection{padding:12px}.camp-map-selection b{font-size:16px}.camp-map-selection button{padding:9px}.camp-mini-map h2{font-size:19px}}
@media(prefers-reduced-motion:reduce){.camp-resident{animation:none}.camp-building-art{transition:none}.camp-map-board{will-change:auto}}

.camp-map-modal>header{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 0 14px}.camp-map-modal>header button{height:44px;min-width:44px;font-size:24px;border-radius:12px;border:1px solid #8ba27a;background:#234a3b;color:#eaf3dc}.camp-map-modal .camp-map-viewport{height:540px}.camp-map-modal .camp-map-building-list{padding-left:12px}


.camp-map-viewport>header>div{padding:7px 10px}.camp-map-viewport>header span{font-size:8px}.camp-mini-map h2{font-size:18px;margin-top:2px}.camp-map-controls{left:12px;right:12px;bottom:48px;display:flex;gap:7px}.camp-map-controls button{min-width:44px}.camp-map-controls [data-camp-fit]{margin-left:auto;padding:8px 12px;font-size:11px}.camp-map-badge{bottom:104px}.camp-map-viewport:after{z-index:1;background:radial-gradient(ellipse at 50% 58%,transparent 39%,#273b3122 74%,#273b3144 110%)}


.camp-terrain{filter:saturate(.64) brightness(.88)}
.camp-impact-landmark{pointer-events:none}

.camp-map-toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;padding:10px 12px;background:#1c302b;border-top:1px solid #71877a55}
.camp-map-toolbar .camp-map-badge{position:static;display:flex;flex-direction:row;flex-wrap:wrap;gap:8px;align-items:center;padding:0;border:0;border-radius:0;background:none;box-shadow:none;color:#e2eade}
.camp-map-toolbar .camp-map-badge b{font-size:12px}.camp-map-toolbar .camp-map-badge span{font-size:11px;color:#aebfac}
.camp-map-toolbar .camp-map-controls{position:static;display:flex;flex:1 0 100%;gap:8px}
.camp-scene-instruction{position:static;display:block;background:#243b32;color:#c3d0bc;font-size:11px;padding:8px 12px}
.camp-map-label-layer{position:absolute;inset:0;z-index:2;pointer-events:none}
.camp-mini-map .camp-building-label{position:absolute;transform:translate(-50%,0);pointer-events:auto;min-height:44px;height:44px;padding:4px 7px;display:flex;flex-direction:column;justify-content:center;gap:2px;border-radius:7px;border:1px solid #b0c5ae66;background:#152b2df0;color:#eef2e6;box-shadow:0 3px 9px #09151377;white-space:nowrap;line-height:1.15}
.camp-mini-map .camp-building-label[hidden]{display:none}
.camp-building-label b{font-size:13px;font-weight:700}.camp-building-label small{font-size:11px;color:#bacebc}
.camp-mini-map .camp-building-label.selected{border-color:#b3d4ca;background:#24483eef}
@media(min-width:700px){.camp-map-toolbar .camp-map-controls{flex:0 1 auto;min-width:260px}}

.camp-goal-target .camp-tile-outline{stroke:#ffe2a1;stroke-width:5;fill:#f6d38a;fill-opacity:.22;stroke-dasharray:12 6}
/* Target only: slow beacon with no canvas transforms or flashing whole map. */
.camp-map-hit-board [data-camp-sector].camp-goal-target .camp-tile-outline{opacity:1!important;stroke:#fff0a8;fill:#f6d38a;animation:pulse-target-sector 2s ease-in-out infinite}
@keyframes pulse-target-sector{0%,100%{stroke-opacity:.65;stroke-width:3;fill-opacity:.12;stroke-dashoffset:0}50%{stroke-opacity:1;stroke-width:8;fill-opacity:.35;stroke-dashoffset:12}}
.camp-mini-map.camp-map-panning [data-camp-sector].camp-goal-target .camp-tile-outline{animation-play-state:paused!important}
/* Only the actual free-build tile gets the PLUS beacon and sign. */
.camp-map-hit-board .camp-goal-plus-ring,.camp-map-hit-board .camp-goal-hint{display:none;pointer-events:none}
.camp-mini-map.camp-goal-build .camp-map-hit-board .camp-goal-target .camp-goal-plus-ring{display:block;fill:none;stroke:#fff0ab;stroke-width:5;stroke-opacity:.95;animation:pulse-camp-plus 2s ease-in-out infinite}
.camp-mini-map.camp-goal-build .camp-map-hit-board .camp-goal-target .camp-goal-hint{display:block;fill:#fff4ba;stroke:#213e33;stroke-width:3.5;stroke-linejoin:round;paint-order:stroke fill;font-family:system-ui,sans-serif;font-size:22px;font-weight:850;letter-spacing:.5px}
@keyframes pulse-camp-plus{0%,100%{stroke-width:3;stroke-opacity:.38}50%{stroke-width:11;stroke-opacity:1}}
.camp-mini-map.camp-map-panning .camp-goal-plus-ring{animation-play-state:paused!important}
@media(prefers-reduced-motion:reduce){.camp-mini-map .camp-goal-plus-ring{animation:none!important;stroke-width:6!important;stroke-opacity:1!important}}

@media(prefers-reduced-motion:reduce){.camp-map-hit-board [data-camp-sector].camp-goal-target .camp-tile-outline{animation:none!important;opacity:1!important;stroke-width:5;fill-opacity:.22}}

.camp-building-label.camp-goal-target{border:2px solid #f6d38a;box-shadow:0 0 0 3px #f6d38a33}
.camp-goal-detail{margin:8px 12px 16px;padding:14px;background:#182c25;border:1px solid #ae9966;border-radius:14px;color:#eee7d3;font-size:14px;line-height:1.5}
.camp-goal-detail[hidden]{display:none}.camp-goal-detail small{font-size:13px;color:#ead19c}
.camp-goal-detail p{margin:7px 0}.camp-goal-cost{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:8px 0}
.camp-goal-cost>b{font-size:13px}.camp-goal-detail button{min-height:44px;width:100%;margin-top:8px}
.building-art-progress{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0;padding:10px;border-radius:12px;background:#24362d}
.building-art-progress>div{flex:1;min-width:100px;text-align:center}.building-art-progress img{display:block;width:100%;height:132px;object-fit:contain}
.building-art-progress b{display:block;font-size:12px;color:#efe2ba}.building-art-progress p{flex-basis:100%;margin:5px 0;font-size:12px;line-height:1.5;color:#bcc8bd}

.camp-mini-map .camp-impact-lookout{display:block;min-height:44px;margin:0 12px 8px;font-size:13px;background:#314a39;color:#e5ead9}

/* 1.83.5 — stable composited camp navigation; no flashing building labels. */
.camp-map-board{transform-origin:0 0;will-change:transform;backface-visibility:hidden}
.camp-mini-map .camp-building-label{left:0;top:0;transform-origin:0 0;will-change:transform;transition:none!important}
.camp-mini-map.camp-map-panning .camp-building-label{transition:none!important}
.camp-mini-map.camp-map-panning .camp-life *{animation-play-state:paused!important}
.camp-mini-map.camp-map-panning .camp-building-art{filter:none!important}
.camp-map-board .selected .camp-building-art{filter:none!important}
.camp-building-art{transition:none!important}
.camp-terrain{filter:none!important;opacity:.89}
@media(prefers-reduced-motion:reduce){.camp-map-board,.camp-mini-map .camp-building-label{will-change:transform}}

/* 1.83.6 — Android-safe canvas painter: no gigantic SVG GPU texture. */
.camp-map-viewport>.camp-map-canvas{position:absolute;inset:0;width:100%;height:100%;display:block;z-index:0;pointer-events:none;contain:strict}
.camp-map-viewport>.camp-map-hit-board{position:absolute;inset:0;width:100%;height:100%;display:block;z-index:1;transform:none!important;will-change:auto!important;overflow:hidden!important;backface-visibility:visible}
.camp-map-hit{pointer-events:fill}
.camp-mini-map.camp-map-panning .camp-map-hit-board .camp-tile-outline{opacity:0!important}
.camp-mini-map .camp-map-hit-board [data-camp-sector]{cursor:pointer}
.camp-mini-map .camp-map-hit-board .camp-tile-outline{pointer-events:none}

/* 1.83.7: prevent compositing effects applied to the moving canvas surface. */
.camp-map-viewport>.camp-map-canvas{will-change:auto!important;transform:none!important;filter:none!important;opacity:1!important;backface-visibility:visible!important}
.camp-map-viewport{transform:none!important;backface-visibility:visible!important;contain:layout paint}
