:root{color-scheme:dark;--bg:#09101d;--panel:#101b2b;--panel2:#122135;--line:#27374c;--text:#eff6fe;--muted:#9bacbf;--mint:#49d6be;--orange:#eaaa61;--violet:#9793fc;--radius:18px;font-family:Inter,"Segoe UI",system-ui,-apple-system,sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-size:14px}button,input,select{font:inherit}button{cursor:pointer}button:focus-visible,select:focus-visible,input:focus-visible,[tabindex]:focus-visible{outline:3px solid #85e7d7;outline-offset:3px}.eyebrow{letter-spacing:2.1px;font-weight:750;color:var(--mint);font-size:10px;text-transform:uppercase}.muted{color:var(--muted)}.caption{color:var(--muted);font-size:12px}.app-shell{min-height:100vh}.app-layout{display:grid;grid-template-columns:322px minmax(0,1fr);min-height:calc(100vh - 74px)}.sidebar{padding:32px 27px;background:#0c1727;border-right:1px solid var(--line)}.sidebar h1{font-size:29px;line-height:1.13;letter-spacing:-1.3px;margin:18px 0 12px}.sidebar p{line-height:1.55}.sidebar label,.control-label{display:block;margin:24px 0 9px;font-weight:750;font-size:12px}.sidebar select,.login input{width:100%;padding:12px 13px;border-radius:10px;border:1px solid #34485d;background:#14253a;color:white;outline:none}.sidebar select:hover{border-color:#507184}.segmented{display:flex;gap:5px;background:#152539;padding:5px;border-radius:11px}.segmented button{flex:1;padding:10px 0;border:0;border-radius:8px;color:#c0ccd7;background:transparent}.segmented button.selected{background:#2b4760;color:#fff;font-weight:750;box-shadow:0 2px 8px #08132280}.divider{height:1px;background:var(--line);margin:27px 0 21px}.section-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.section-head h3{font-size:16px;margin:0}.text-button{background:transparent;border:0;color:var(--mint);font-size:12px;font-weight:700}.chips{display:flex;flex-wrap:wrap;gap:7px;min-height:37px;align-items:center;margin-top:14px}.chip{border:1px solid #317879;background:#164b50;border-radius:8px;color:#cafffa;padding:8px 10px}.chip-excluded{background:#503341;border-color:#92536b;color:#ffd5e0}.hint{font-size:12px;color:#8598ab}.primary,.login button[type="submit"]{width:100%;border:0;border-radius:11px;padding:13px 17px;background:var(--mint);font-weight:850;color:#082a32;box-shadow:0 10px 24px #0dba9630}.primary:hover,.login button:hover{background:#85efd7}.limitations{margin-top:26px;border:1px solid #384a5b;border-radius:11px;padding:13px 15px;color:#b4c1cb;font-size:12px;background:#172337}.workspace{min-width:0;padding:23px 30px 40px}.notice{padding:11px 15px;background:#143144;border:1px solid #2a5664;color:#c2edf0;border-radius:10px;margin-bottom:14px;font-size:12px}.notice.warning{background:#503438;border-color:#875356;color:#ffdbd5}.map-canvas{border:1px solid #26394b;border-radius:16px;background:radial-gradient(ellipse at 52% 45%,#16334a 0%,#102238 40%,#0b182a 77%);position:relative;overflow:hidden}.map-canvas:before{content:"";position:absolute;inset:0;pointer-events:none;background-image:linear-gradient(#ffffff05 1px,transparent 1px),linear-gradient(90deg,#ffffff05 1px,transparent 1px);background-size:36px 36px}#map{display:block;width:100%;height:100%;min-height:0;max-height:none;position:relative;touch-action:none;cursor:grab}
#map.is-panning,#map.is-panning .ward-node{cursor:grabbing}
.map-canvas{height:clamp(440px,73vh,840px)}
.map-view-actions{display:flex;align-items:center;gap:5px}
.map-view-actions button{background:#182a42;color:#def2fb;border:1px solid #3e5872;border-radius:8px;padding:7px 12px;min-width:36px;font-weight:750}
.map-view-actions button:disabled{opacity:.45;cursor:default}
#map-zoom-level{font-size:12px;color:var(--muted);min-width:44px;text-align:center}.graph-edge{stroke:#496079;stroke-width:1.5;opacity:.58}.protector-edge{stroke:#eaaa61;stroke-width:1.4;stroke-dasharray:4 7;opacity:.42}.route-segment{stroke-width:5;stroke-linecap:round;opacity:.88}.ward-node{cursor:pointer}.ward-node circle{fill:#1d3045;stroke:#718ba4;stroke-width:1.5;transition:fill .16s,stroke-width .16s}#map.dense-map .ward-node text{font-size:12px}
.ward-node:hover circle{fill:#254d66;stroke:#d1efff;stroke-width:2.7}.ward-node text{fill:#e5f0f8;font-size:13px;font-weight:750;pointer-events:none}.ward-node.start-node circle{fill:#263d59;stroke:#d1def8;stroke-width:3}.ward-node.on-route circle{stroke:#a2b4cf;fill:#1b354b;stroke-width:2.3}.ward-node.scored-node circle{fill:#203f54}.ward-node.required-node circle{fill:#0f5657;stroke:#4fedd2;stroke-width:4}.ward-node.excluded-node circle{fill:#572738;stroke:#ff7695;stroke-width:4}.map-footer{display:flex;align-items:center;gap:23px;padding:17px 3px;color:var(--muted);font-size:12px;flex-wrap:wrap}.dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:6px}.dot.a{background:#39baff}.dot.b{background:#ffb347}.dot.c{background:#f57ade}.dot.ward{background:transparent}.dot.ward{border:1px dashed white;background:transparent}#map-source{margin-left:auto}.route-panel{margin-top:18px;border-top:1px solid var(--line);padding-top:22px}.route-panel .section-head>span{color:var(--muted);font-size:12px}.route-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:16px 0}.route-card{padding:15px;background:#122238;border:1px solid #293b51;border-radius:12px;min-width:0}.route-card-header{display:flex;justify-content:space-between;align-items:center;gap:10px}.route-name{font-weight:800}.route-turns{color:#e7f0f8;font-size:12px}.route-list{font-size:12px;line-height:1.8;overflow-wrap:anywhere;color:#d1dce7;margin:13px 0 10px}.route-spare{color:#9bb0c3;font-size:11px}.plan-detail{border-left:3px solid #37556d;padding:3px 14px;font-size:12px;color:#b9c7d6}.plan-detail p{line-height:1.55}.login-shell{display:grid;min-height:100vh;place-items:center;padding:24px;background:radial-gradient(circle at 55% 30%,#1d4256 0%,#0b182a 45%,#080f1b 100%)}.login{width:min(100%,415px);padding:36px;background:#101e31;border:1px solid #31455c;border-radius:20px;box-shadow:0 25px 80px #0006}.login h1{font-size:37px;letter-spacing:-1.4px;margin:15px 0}.login p{line-height:1.65;color:#c0cddd}.login label{display:block;margin:22px 0 8px;font-weight:700}.login input{margin-bottom:17px}.login small{display:block;font-size:11px;color:#8598ab;margin-top:20px}.error{border-radius:8px;color:#ffc0c0!important;background:#4e2f38;padding:12px}@media(max-width:1080px){.app-layout{grid-template-columns:275px minmax(0,1fr)}.sidebar{padding:25px 19px}.workspace{padding:18px}.route-cards{grid-template-columns:1fr}.map-meta{flex-wrap:wrap;justify-content:flex-end}}@media(max-width:700px){.app-layout{display:block}.sidebar{border-right:0;border-bottom:1px solid var(--line);padding:22px 17px}.sidebar h1{font-size:23px}.sidebar label,.control-label{margin-top:16px}.workspace{padding:18px 12px}.map-toolbar h2{font-size:18px}.map-meta span{font-size:10px;padding:6px}.map-footer{gap:12px}.map-canvas{margin:0 -4px}#map{min-height:0}#map-source{width:100%;margin-left:0}}
/* Historical route index is separate from the audited route-plan display. */
.terrain-sketch{pointer-events:none}
.community-references{padding:12px 15px;margin:0 0 22px;background:#102238;border:1px solid #33465b;border-radius:12px;font-size:12px}
.community-references:empty{display:none}
.community-references>strong{display:block;margin-bottom:10px;color:#d7e7fa}
.community-row{display:flex;align-items:center;flex-wrap:wrap;gap:4px;margin:8px 0;line-height:1.6}
.community-row a{color:#8de4d6;text-decoration:underline;text-underline-offset:2px}
.community-select{border:1px solid #376e73;border-radius:8px;background:#163a47;color:#d5f7f4;padding:5px 9px}
.community-select:hover{background:#245866}

@media(max-width:700px){.map-canvas{height:clamp(310px,62vh,660px)}.map-view-help{font-size:11px}.map-view-actions button{padding:7px 10px}}

/* One responsive map/workspace layout; route evidence moves beside the canvas
   only when a meaningful map width remains after the left planning sidebar. */
.atlas-main{min-width:0}
.atlas-map-stage{min-width:0}
.route-panel .map-footer{margin:0 0 10px;display:flex;gap:9px 13px;flex-wrap:wrap}
.route-panel .map-footer span{font-size:11px}
@media(min-width:1600px){
  .workspace{padding:20px 25px 32px}
  .atlas-main{display:grid;grid-template-columns:minmax(0,1fr) minmax(310px,355px);align-items:start;column-gap:18px}
  .atlas-map-stage{min-width:0}
  .route-panel{margin:0;padding:8px 0 0 16px;border-top:0;border-left:1px solid var(--line);
    max-height:calc(100vh - 105px);overflow:auto;scrollbar-width:thin}
  .route-cards{display:grid;grid-template-columns:minmax(0,1fr);gap:8px;margin:12px 0}
  .route-card{padding:10px 12px}
  .route-list{margin:8px 0 6px;line-height:1.6}
  .map-canvas{height:clamp(500px,80vh,940px)}
  .route-panel .section-head{flex-wrap:wrap;gap:4px}
}
@media(min-width:1900px){
  .atlas-main{grid-template-columns:minmax(0,1fr) minmax(330px,390px);column-gap:24px}
}
@media(max-width:700px){
  .route-panel .map-footer{font-size:11px}
}


/* Unified recorded map semantics: NOT a claim of current live buff state.
   Dashed source rings are turquoise, solid non-boss target rings coral,
   player-buff emblems black/white, and bosses gold. Route colors stay separate. */
.protector-links{pointer-events:none}
/* Thin, warning-red historical Protector influence: readable on bright
   scene art without competing with the much stronger player route arrows. */
.protector-edge{
  stroke:#e77b71;stroke-width:1.9;stroke-dasharray:5 5;
  stroke-linecap:round;opacity:.75;
  filter:drop-shadow(0 0 1.2px #62212a);
  transition:opacity .13s,stroke-width .13s
}
/* Keep unrelated Protector arrows at their normal contrast on hover. */
#map.inspecting-buffs .protector-edge.is-related{
  stroke:#ffb09a;stroke-width:3.2;opacity:1;stroke-dasharray:6 4
}
.ward-node .boss-emblem{
  fill:#5e421f;fill-opacity:.46;stroke:#ffd274;stroke-width:2.7;
  stroke-linejoin:round;filter:drop-shadow(0 0 4px #c89143aa)
}
/* Start portal: emerald hexagon and a small north-pointing beacon.
   All shapes live inside the usual Ward transform and are not click targets. */
.ward-node .start-emblem{
  fill:#163e33;fill-opacity:.68;stroke:#a4f8bc;stroke-width:2.7;
  stroke-linejoin:round;filter:drop-shadow(0 0 4px #42df96aa);
  pointer-events:none
}
.ward-node .start-beacon{
  fill:#e7ffe7;stroke:#287f57;stroke-width:.85;stroke-linejoin:round;
  pointer-events:none
}
.ward-node .player-buff-emblem{
  fill:#fff;fill-opacity:1;stroke:#111;
  stroke-width:2;stroke-linejoin:round
}
.ward-node .buff-source-halo{
  fill:none;stroke:#3fe0d6;stroke-width:2.2;
  stroke-dasharray:5 4;stroke-linecap:round
}
.ward-node .buff-target-halo{
  fill:none;stroke:#ff918a;stroke-width:2.0;
  stroke-dasharray:2 4;stroke-linecap:round
}
/* Non-boss buff receivers get a second SOLID ring. Boss styling stays as-is. */
.ward-node:not(.boss-node) .buff-target-halo{stroke-dasharray:none}
/* Keep each semantic ring's role color even on a hovered/selectable Ward.
   The legacy generic hover selector also matches auxiliary halo circles. */
.ward-node:hover circle.buff-source-halo,
.ward-node:focus-visible circle.buff-source-halo{
  fill:none;stroke:#3fe0d6;stroke-width:3.5
}
.ward-node:hover circle.buff-target-halo,
.ward-node:focus-visible circle.buff-target-halo{
  fill:none;stroke:#ff918a;stroke-width:3.5
}
.ward-node.boss-node > circle:not(.buff-source-halo):not(.buff-target-halo){
  fill:#443726;stroke:#ffd275;stroke-width:2.5
}
.ward-node.start-node > circle:not(.buff-source-halo):not(.buff-target-halo){
  fill:#164739;stroke:#bcffd4;stroke-width:2.6
}
.ward-node.start-node text{fill:#edfff1;font-weight:850}
.ward-node.player-buff-node > circle:not(.buff-source-halo):not(.buff-target-halo){
  fill:#111;stroke:#fff;stroke-width:2
}
.ward-node.player-buff-node text{fill:#fff}
.ward-node.boss-node text{fill:#fff2c9}
.ward-node.is-buff-related .buff-source-halo,
.ward-node.is-buff-related .buff-target-halo{stroke-width:4}
#map .ward-node.is-buff-related > circle:not(.buff-source-halo):not(.buff-target-halo){
  stroke:#f0fbff;stroke-width:4
}
.ward-node.is-buff-related .boss-emblem{stroke-width:3.8}
/* Unrelated Wards remain fully visible during inspection. */
#map.inspecting-buffs .ward-node.is-buff-related{
  filter:drop-shadow(0 0 6px #f8e1a699)
}
.ward-node:focus-visible > circle:not(.buff-source-halo):not(.buff-target-halo){
  stroke:#fff;stroke-width:3.5
}
.ward-node.required-node > circle:not(.buff-source-halo):not(.buff-target-halo){
  fill:#0f5657;stroke:#4fedd2;stroke-width:4
}
.ward-node.excluded-node > circle:not(.buff-source-halo):not(.buff-target-halo){
  fill:#572738;stroke:#ff7695;stroke-width:4
}
.legend-start,.legend-boss,.legend-player-buff,.legend-protector{
  display:inline-block;margin-right:4px;font-size:14px;font-weight:900
}
.legend-start{color:#a4f8bc}
.legend-boss{color:#ffd274}
.legend-player-buff{color:#fff}
.legend-protector{color:#f2a17d}
.legend-buff-source,.legend-buff-target{
  display:inline-block;width:12px;height:12px;
  margin-right:5px;vertical-align:-2px;border-radius:50%
}
.legend-buff-source{border:2px dashed #3fe0d6}
/* Same double SOLID ring as a non-boss protected Ward in the map.
   The outer coral target halo encloses the inner regular Ward circle. */
.legend-buff-target{
  position:relative;box-sizing:border-box;width:16px;height:16px;
  border:2px solid #ff918a
}
.legend-buff-target::after{
  content:"";position:absolute;inset:2px;
  border:1.5px solid #d1efff;border-radius:50%
}
/* Mouse/focus anchored buff tooltip: a viewport-fixed HTML sibling of
   the zoomed SVG. It never intercepts Ward clicks or drag events. */
.ward-tooltip{
  position:absolute;z-index:28;pointer-events:none;
  width:max-content;max-width:min(320px,calc(100% - 16px));
  max-height:calc(100% - 16px);overflow:hidden;
  padding:11px 13px;border:1px solid #638299;border-radius:11px;
  background:#0c2135f2;box-shadow:0 7px 26px #06111fe3;
  backdrop-filter:blur(6px);color:#dbeaf5;
  font-size:12px;line-height:1.5;overflow-wrap:anywhere
}
.ward-tooltip[hidden]{display:none}
.ward-tooltip-heading{display:block;color:#fff;font-size:13px}
.ward-tooltip p{margin:5px 0 0;line-height:1.45}
.ward-tooltip .buff-effect{padding:4px 0 4px 9px}
.buff-effect-outgoing{border-left:3px solid #3fe0d6}
.buff-effect-incoming{border-left:3px solid #ff918a}
.buff-inspector-caveat{color:#98aaba;font-size:11px}
@media(max-width:600px){
  .ward-tooltip{max-width:min(280px,calc(100% - 16px));
    padding:9px 10px;font-size:11px}
}
.route-panel .map-footer{row-gap:9px}
#map-source{flex-basis:100%;margin-left:0}

/* Source-verified drawing only; no procedural terrain or curved detour. */
#map .graph-edge{stroke-width:1.15;opacity:.32}
#map .route-segment{stroke-width:4.6;opacity:1;filter:drop-shadow(0 0 2px #06111f)}
/* Hover never dims graph topology or existing player routes. */
#map .ward-node .buff-source-halo,
#map .ward-node .buff-target-halo{pointer-events:none}

/* Private RSX scene background is co-registered inside the SAME SVG viewBox
   as original source indices/verified Ward overlays and route geometry. */
.original-scene-backdrop{pointer-events:none}


/* Three source-aware Boss-budget chips sit near each approach (or in a
   free Boss-side slot for nonadjacent lanes). No large overlay covers buffs. */
#map .boss-attempt-cluster{pointer-events:none}
#map .boss-attempt{pointer-events:all;cursor:help}
#map .boss-attempt:focus-visible .boss-attempt-disc{
  stroke:#effff9;stroke-width:2.8
}
#map .boss-attempt-disc{
  stroke:#071827;stroke-width:2;
  filter:drop-shadow(0 1px 2px #000c)
}
#map .boss-attempt-player{
  fill:#102032;font-size:9px;font-weight:900
}
#map .boss-attempt-count{
  fill:#102032;font-size:14px;font-weight:900
}
#map .boss-attempt.zero{opacity:.46}
#map .boss-attempt.unknown{opacity:.64}
.route-card .route-boss-note{
  margin:0 0 8px;color:#ffce87;font-size:11px;line-height:1.4
}
.route-card .route-boss-budget{
  display:block;color:#b9edff;font-size:12px;font-weight:750;margin:9px 0 4px
}
.boss-budget-disclaimer{
  color:#b9c7d6;font-size:11px;line-height:1.5
}

/* Compact one-page planning workflow: choices stay visible, advanced details
   open on demand at the Ward. No side-rail click-mode switch. */
.app-layout{grid-template-columns:250px minmax(0,1fr)}
.sidebar{padding:20px 16px;min-width:0}
.sidebar h1{font-size:22px;letter-spacing:-.6px;margin:12px 0 7px}
.sidebar .planner-subtitle{font-size:12px;margin:0 0 12px}
.sidebar label,.sidebar .control-label{margin:14px 0 6px}
.sidebar select{padding:9px 11px}
.sidebar .divider{margin:16px 0 12px}
.sidebar .primary{padding:10px 12px}
.sidebar .hint{font-size:11px;line-height:1.45}
/* Player colors remain visible while selected (the generic segmented
   selector would otherwise turn a pressed A/B/C button white). */
.player-role button:nth-child(1){--role-color:#39baff}
.player-role button:nth-child(2){--role-color:#ffb347}
.player-role button:nth-child(3){--role-color:#f57ade}
.player-role button{color:var(--role-color)}
.segmented.player-role button.selected,
.segmented.player-role button[aria-pressed="true"]{
  background:#365574;color:var(--role-color);font-weight:800
}
.planner-help{margin-top:13px;font-size:12px}
.planner-help summary{cursor:pointer;color:#a9d5d9}
.planner-help .limitations{margin:9px 0 0;font-size:11px}
.chip-player-0{border-color:#39baff;color:#bef1ff}
.chip-player-1{border-color:#ffb347;color:#ffe1b2}
.chip-player-2{border-color:#f57ade;color:#ffc4f2}
.workspace{padding:16px}
.map-canvas{height:clamp(420px,76vh,900px)}
.route-picker{display:flex;align-items:center;gap:12px;justify-content:space-between;margin:10px 0}
.route-picker button{min-width:44px;border:1px solid #355776;color:#d4f6ff;background:#142b40;padding:7px 12px;border-radius:10px}
.route-picker button:disabled{opacity:.3;cursor:default}

#route-position{color:var(--muted);font-size:12px}
.ward-menu{z-index:40;position:absolute;width:233px;max-width:calc(100% - 16px);
  padding:11px;border:1px solid #4b788e;background:#101f32;
  color:var(--text);border-radius:13px;box-shadow:0 14px 45px #000d}
.ward-menu[hidden]{display:none}
.ward-menu-title{display:block;font-size:15px}
.ward-menu-description{margin:3px 0 8px;font-size:11px;color:var(--muted)}
.ward-menu-choice{display:block;width:100%;text-align:left;background:#162b40;
  border:1px solid transparent;border-radius:7px;padding:7px 9px;color:var(--text);
  margin:3px 0;font-size:12px}
.ward-menu-choice:hover,.ward-menu-choice:focus-visible{background:#244761;border-color:#72c7dd}
.ward-menu-choice.selected{border-color:#4ce1c7;color:#bffdef}
.ward-node.assigned-0>circle:not(.buff-source-halo):not(.buff-target-halo){stroke:#39baff}
.ward-node.assigned-1>circle:not(.buff-source-halo):not(.buff-target-halo){stroke:#ffb347}
.ward-node.assigned-2>circle:not(.buff-source-halo):not(.buff-target-halo){stroke:#f57ade}
@media(min-width:1180px){
 .atlas-main{display:grid;grid-template-columns:minmax(0,1fr) minmax(260px,315px);
   align-items:start;column-gap:14px}
 .route-panel{margin:0;padding:5px 0 0 12px;border-top:0;
   border-left:1px solid var(--line);max-height:calc(100vh - 105px);overflow:auto}
 .route-cards{grid-template-columns:1fr;gap:8px;margin:10px 0}
 .route-card{padding:9px}
 .route-list{line-height:1.6;margin:5px 0}
}
@media(min-width:1800px){
 .atlas-main{grid-template-columns:minmax(0,1fr) minmax(285px,355px)}
}
@media(max-width:1179px){.atlas-main{display:block}.route-panel{margin-top:12px}}
@media(max-width:760px){
 .app-layout{display:block}.sidebar{padding:13px 16px;border-right:0;border-bottom:1px solid var(--line)}
 .sidebar h1,.sidebar .planner-subtitle{display:none}
 .sidebar label,.sidebar .control-label{margin:10px 0 5px}
 .sidebar .divider{margin:10px 0}
 .workspace{padding:10px}.map-canvas{height:clamp(330px,62vh,680px)}
 .route-cards{grid-template-columns:1fr}
}

/* Atlas 1-page map-first layout: all primary controls on the left, no
   global header, no toolbar above artwork. Details scroll independently. */
.app-layout{min-height:100dvh;grid-template-columns:250px minmax(0,1fr)}
.sidebar{height:100dvh;overflow-y:auto;overscroll-behavior:contain;padding:19px 16px}
.sidebar h1{margin:0 0 8px;font-size:22px}
.sidebar .planner-subtitle{margin:0 0 12px}
.workspace{min-width:0;padding:10px 12px}
.atlas-main{min-width:0}
.atlas-map-stage{min-width:0}
.map-canvas{height:calc(100vh - 72px);height:calc(100dvh - 72px);min-height:340px;max-height:none}
.route-metrics{display:flex;gap:7px;align-items:center;flex-wrap:wrap;margin:9px 0}
.route-metrics span{display:inline-flex;padding:6px 10px;background:#172b3f;
  border:1px solid #344c62;border-radius:8px;font-size:12px;color:#d9ecf5}
/* Familiar, map-integrated navigation controls: floating over artwork. */
.map-zoom-overlay{position:absolute;z-index:16;top:14px;left:14px;
  display:flex;align-items:center;gap:5px;padding:5px;border:1px solid #4a6c82;
  border-radius:11px;background:#0a1c30e8;box-shadow:0 5px 20px #06101dc2;
  backdrop-filter:blur(8px);max-width:calc(100% - 28px)}
.map-zoom-overlay button{min-width:37px;min-height:37px;padding:6px 9px}
.map-zoom-overlay #map-zoom-level{min-width:47px;color:#edf7ff;font-variant-numeric:tabular-nums}
.map-zoom-overlay button:disabled{opacity:.44}
.route-info{margin-top:13px;border-top:1px solid var(--line);padding-top:12px}
.route-info summary{font-size:12px;cursor:pointer;color:var(--muted)}
.route-info .notice{margin:9px 0 0;line-height:1.55}
.background-menu{width:219px;max-width:calc(100% - 16px);z-index:42}
.background-menu button[aria-checked="true"]{border-color:var(--mint);color:#cefff5}
.map-canvas:focus-visible{outline:3px solid #85e7d7;outline-offset:2px}
@media(min-width:1180px){
  .atlas-main{display:grid;grid-template-columns:minmax(0,1fr) minmax(260px,315px);
    align-items:start;gap:14px}
  .route-panel{margin:0;padding:4px 0 0 12px;border-top:0;
    border-left:1px solid var(--line);max-height:calc(100dvh - 20px);overflow:auto}
  .route-cards{grid-template-columns:1fr;gap:8px;margin:9px 0}
}
@media(min-width:1800px){
  .atlas-main{grid-template-columns:minmax(0,1fr) minmax(285px,355px)}
}
@media(min-width:1180px){
  .map-canvas{height:calc(100vh - 72px);height:calc(100dvh - 72px);min-height:390px;max-height:none}
}
@media(max-width:1179px){
  .atlas-main{display:block}
  .route-panel{margin:14px 0 0;border-top:1px solid var(--line);
    border-left:0;padding-top:14px;max-height:none;overflow:visible}
  .map-canvas{height:clamp(320px,65dvh,740px)}
}
@media(max-width:760px){
  .app-layout{display:block}
  .sidebar{height:auto;overflow:visible;padding:15px 16px}
  .sidebar h1,.sidebar .planner-subtitle{display:block}
  .workspace{padding:10px}
  .map-canvas{height:clamp(300px,58dvh,620px)}
  .map-zoom-overlay{top:9px;left:9px;padding:4px}
  .map-zoom-overlay button{min-width:35px;min-height:35px;padding:6px}
}

/* Compact selectable alternatives: no form-dropdown chrome. */
.adventure-selector{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:3px}
.adventure-selector button{min-width:0;min-height:34px;padding:7px 1px;
  font-size:11px;letter-spacing:-.3px;font-variant-numeric:tabular-nums}
.compact-selector{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px}
.compact-selector button{min-width:0;min-height:40px;padding:7px 3px;
  font-size:11px;line-height:1.2;white-space:normal}
/* Override .segmented's flex display: the four optimizer buttons form 2×2. */
#objective.segmented{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
  grid-auto-rows:minmax(40px,auto);gap:4px}
#objective.segmented button{width:100%;min-width:0;white-space:normal;
  line-height:1.2;text-align:center}
.segmented button[aria-pressed="true"]{background:#2b4760;color:#fff;
  font-weight:750;box-shadow:0 2px 8px #08132280}
.ward-filters[hidden]{display:none}
.ward-filters .divider{margin:13px 0 12px}
.ward-filters .chips{min-height:0;margin-top:9px}
.ward-menu-choice[aria-pressed="true"]{border-color:#4ce1c7;color:#bffdef}
.ward-node.assigned-multi>circle:not(.buff-source-halo):not(.buff-target-halo){
  stroke:#8cf2d2;stroke-width:3
}
@media(max-width:760px){
  .adventure-selector{grid-template-columns:repeat(6,minmax(0,1fr))}
  .adventure-selector button{min-height:38px;font-size:12px}
  .compact-selector button{font-size:12px}
}

/* Keep the Adventure number and the full map name on separate rows.
   Long titles wrap naturally without a dot separator or mid-word breaks. */
.sidebar .adventure-name{line-height:1.35;overflow-wrap:break-word;
  font-size:13px;color:#e5f5ff;margin-bottom:8px}
.sidebar .adventure-name .adventure-number,
.sidebar .adventure-name .adventure-title{display:block}
.control-help{font-size:12px;color:#8fbbcb;cursor:help;font-weight:400}

/* This legend sits OUTSIDE the zoomed/panned SVG. Width follows the visible
   map viewport; on narrow screens items wrap onto multiple lines. */
.map-canvas .map-legend-overlay{
  position:absolute;left:10px;bottom:10px;z-index:12;
  display:flex;flex-wrap:wrap;align-items:center;align-content:center;
  gap:5px 12px;width:max-content;max-width:calc(100% - 20px);
  max-height:45%;overflow:hidden;padding:9px 11px;
  border:1px solid #537087aa;border-radius:10px;
  background:#091a2add;box-shadow:0 3px 14px #06101b77;
  color:#e7f4ff;pointer-events:none;user-select:none;
  backdrop-filter:blur(5px);
}
.map-canvas .map-legend-overlay span{
  display:inline-flex;white-space:nowrap;align-items:center;
  gap:3px;font-size:11px;line-height:1.3;min-height:17px;
}
/* The navigator belongs to the route panel surface, not a nested dark
   sticky strip. Keep arrows/count on a simple, compact three-column row. */
.route-panel>.route-picker{
  display:grid;grid-template-columns:40px minmax(0,1fr) 40px;
  align-items:center;gap:8px;
  position:static;margin:0 0 12px;padding:0;
  border:0;border-radius:0;
  background:transparent;box-shadow:none;backdrop-filter:none
}
.route-info[hidden]{display:none}
@media(max-width:760px){
  .map-canvas .map-legend-overlay{left:7px;bottom:7px;
    padding:6px 8px;gap:3px 9px;max-width:calc(100% - 14px)}
  .map-canvas .map-legend-overlay span{font-size:10px}
}

.sidebar .objective-help{font-size:11px;line-height:1.45;margin:8px 0 0;
  color:#a9bdce}
.sidebar #objective-help + .planner-subtitle{margin:9px 0 12px;line-height:1.5}

/* Ward-to-player choices use the exact A/B/C colors of the route legend.
   A persistent color stripe + dot identifies the player; selected choices
   additionally show a checkmark, so color is not the sole status indicator. */
.ward-menu-choice.ward-menu-player{
  display:flex;align-items:center;gap:9px;
  border-left:3px solid rgb(var(--player-rgb));
  color:rgb(var(--player-rgb));
  background:rgba(var(--player-rgb),.09);
  padding-left:10px;
}
.ward-menu-player-a{--player-rgb:57,186,255}
.ward-menu-player-b{--player-rgb:255,179,71}
.ward-menu-player-c{--player-rgb:245,122,222}
.ward-menu-choice.ward-menu-player::before{
  content:"";display:inline-block;flex:0 0 10px;width:10px;height:10px;
  background:rgb(var(--player-rgb));border-radius:50%;
}
.ward-menu-choice.ward-menu-player:hover,
.ward-menu-choice.ward-menu-player:focus-visible{
  background:rgba(var(--player-rgb),.19);
  border-color:rgb(var(--player-rgb));
}
.ward-menu-choice.ward-menu-player.selected,
.ward-menu-choice.ward-menu-player[aria-pressed="true"]{
  background:rgba(var(--player-rgb),.25);
  border-color:rgb(var(--player-rgb));
  color:#fff;font-weight:750;
}
.ward-menu-choice.ward-menu-player[aria-pressed="true"]::after{
  content:"✓";margin-left:auto;color:rgb(var(--player-rgb));
  font-weight:900;
}

/* Tavern is the sole Atlas appearance. Base rules above remain the one
   structural/responsive SVG renderer; this block supplies only atmosphere.
   No theme switcher, duplicate style module, stored state or new artwork. */
.app-shell{
  --bg:#1a130f;--panel:#31231c;--panel2:#402e23;
  --line:#957149;--text:#f8ead0;--muted:#d8bd98;
  --mint:#f3c388;--orange:#f1b56b;
  --tavern-border:#b88a53;--tavern-gold:#f6d49c;
  --tavern-wood:#281a14;--tavern-wood-light:#453025;
  --tavern-paper:#f4ddb4;--tavern-paper-dark:#d7b17c;
  --tavern-ink:#392719;
  min-height:100dvh;color:var(--text);
  background:radial-gradient(ellipse at 78% 3%,#a6602b35,transparent 55%),
    radial-gradient(ellipse at 15% 90%,#7b432222,transparent 60%),
    linear-gradient(120deg,#251914,#140f0d)
}
.app-shell .sidebar{
  border-right:2px solid var(--tavern-border);
  background:repeating-linear-gradient(1deg,#ffcf7a09 0 1px,transparent 2px 23px),
    repeating-linear-gradient(92deg,transparent 0 76px,#140c0944 77px 79px,transparent 80px 118px),
    radial-gradient(ellipse at 20% 0%,#ad6d333b,transparent 73%),
    linear-gradient(120deg,#432a20,#211611);
  box-shadow:inset -6px 0 14px #09050477,inset -1px 0 #ecc38775
}
/* All 12 map names share one card footprint. Keep the complete label
   accessible via in-card scrolling if extreme browser text zoom overflows. */
.app-shell .sidebar .adventure-name{
  height:96px;min-height:96px;max-height:96px;
  overflow-x:hidden;overflow-y:auto;scrollbar-width:thin;
  margin-bottom:13px;padding:10px 11px 12px;border:1px solid #ad7e48a0;
  border-radius:10px;background:linear-gradient(140deg,#2b1d16dd,#4b3121b8);
  box-shadow:inset 0 1px #fff3cf20,0 3px 9px #0e090666
}
.app-shell .sidebar .adventure-name .adventure-number{
  color:var(--tavern-gold);font-size:12px;letter-spacing:.55px;font-weight:800
}
.app-shell .sidebar .adventure-name .adventure-title{
  color:var(--text);font:700 17px/1.24 Georgia,Palatino,serif;
  margin-top:4px
}
.app-shell .sidebar .control-label{
  color:var(--tavern-gold);letter-spacing:.13px
}
.app-shell .sidebar .planner-subtitle,
.app-shell .sidebar .objective-help{color:var(--muted)}
.app-shell .sidebar .divider{
  background:linear-gradient(90deg,transparent,#c29a65,transparent);
  height:1px
}
.app-shell .segmented{
  background:#261910d6;border:1px solid #936c43;
  box-shadow:inset 0 2px 5px #080503a8
}
.app-shell .segmented button{
  color:var(--text);border:1px solid transparent;text-shadow:0 1px 1px #0008;
  transition:background .16s ease,border-color .16s ease
}
.app-shell .segmented:not(.player-role) button.selected,
.app-shell .segmented:not(.player-role) button[aria-pressed="true"]{
  background:linear-gradient(160deg,#8e623b,#573b28);
  border-color:#d8ab6c;color:#fff3d9;
  box-shadow:inset 0 1px #fff5d04a,0 2px 8px #0008
}
.app-shell .segmented.player-role button{
  color:var(--role-color);font-weight:800
}
.app-shell .segmented.player-role button.selected,
.app-shell .segmented.player-role button[aria-pressed="true"]{
  background:#43302a;border-color:var(--role-color);
  color:var(--role-color)
}
.app-shell .text-button{color:var(--tavern-gold)}
.app-shell .chip{
  background:#3b2d24;border:1px solid #b98c54;
  color:#f6e2c3
}
.app-shell .chip-player-0{border-color:#39baff;color:#b5eaff}
.app-shell .chip-player-1{border-color:#ffb347;color:#ffe2b5}
.app-shell .chip-player-2{border-color:#f57ade;color:#ffd1f4}
.app-shell .route-panel{
  min-width:0;padding:12px;border:1px solid #9d774d;
  border-radius:15px;
  background:repeating-linear-gradient(0deg,#b581440d 0 2px,transparent 3px 34px),
    linear-gradient(165deg,#37261d,#211713);
  box-shadow:inset 0 1px #ffe2a027,0 6px 24px #09050370
}
.app-shell .route-panel>.route-picker{
  margin:0 0 12px;padding:0;
  border:0;background:transparent;box-shadow:none
}
/* Standalone arrow buttons on the same Tavern wood as the parent panel. */
.app-shell .route-panel>.route-picker button{
  display:grid;place-items:center;
  width:40px;height:38px;min-width:40px;min-height:38px;
  padding:0;border:1px solid #b48a58;border-radius:9px;
  background:linear-gradient(160deg,#61432f,#412c21);
  color:#ffe4b8;box-shadow:inset 0 1px #fff0d02e;
  font-size:17px;line-height:1
}
.app-shell .route-panel>.route-picker button:disabled{
  opacity:.42;box-shadow:none
}
.app-shell .map-view-actions button{
  background:linear-gradient(155deg,#523828,#2e2119);
  color:#ffe3b5;border:1px solid #bb8d52;
  box-shadow:inset 0 1px #fff1cf21
}
.app-shell .route-picker button:hover:not(:disabled),
.app-shell .map-view-actions button:hover:not(:disabled){
  border-color:#ffdc9e;background:#68432b
}
.app-shell .route-panel .section-head h3{
  color:#f5d4a1;font:700 18px/1.3 Georgia,Palatino,serif;
  letter-spacing:.12px
}
.app-shell .route-panel .section-head>span{color:#edd0a5}
.app-shell #route-position{
  color:#f4d8ad;font-size:12px;font-weight:750;
  letter-spacing:.3px;font-variant-numeric:tabular-nums;
  text-align:center;white-space:nowrap
}
.app-shell .route-metrics span{
  border:1px solid #bd9160;border-radius:8px;
  background:linear-gradient(150deg,#452e20,#2c211b);
  color:#fce1b5;box-shadow:inset 0 1px #fff4d11d
}
/* Parchment provenance is still before the three player paths. */
.app-shell .plan-detail{
  position:relative;margin:12px 0 14px;padding:16px 15px;
  overflow-wrap:anywhere;border:1px solid #b1864e;
  border-left:4px solid #9d6235;border-radius:11px;
  background:radial-gradient(ellipse at 93% 5%,#fff9d877,transparent 55%),
    repeating-linear-gradient(145deg,transparent 0 30px,#ffffff17 31px,transparent 32px),
    linear-gradient(160deg,var(--tavern-paper),var(--tavern-paper-dark));
  color:var(--tavern-ink);
  box-shadow:inset 0 1px #fffbedb0,0 4px 12px #0008
}
.app-shell .plan-detail:before{
  content:"✦";position:absolute;top:8px;right:11px;
  font-size:14px;color:#8c612e99;pointer-events:none
}
.app-shell .plan-detail>strong{
  display:block;margin:0 17px 10px 0;
  color:#59351f;font:700 16px/1.35 Georgia,Palatino,serif
}
.app-shell .plan-detail .muted{color:#59412d}
.app-shell .plan-detail a{color:#67401b;text-underline-offset:2px}
.app-shell .plan-detail p{color:var(--tavern-ink);line-height:1.6}
/* Light parchment, dark ink, and three distinct dark player banners. */
.app-shell .route-cards{gap:11px}
.app-shell .route-card{
  position:relative;overflow:hidden;min-width:0;
  padding:10px 12px;border:1px solid #a97b44;
  border-left:4px solid var(--player-edge);
  border-radius:11px;
  background:radial-gradient(ellipse at 97% 12%,#fff8e78c,transparent 54%),
    repeating-linear-gradient(137deg,transparent 0 47px,#fff2d220 48px,transparent 49px),
    linear-gradient(160deg,#f3deb6,#d8b47e);
  color:#382618;box-shadow:inset 0 1px #fffbefce,0 4px 11px #0008
}
.app-shell .route-card:nth-child(1){--player-edge:#39baff;--player-banner:#17425a;--player-banner-dark:#102c40}
.app-shell .route-card:nth-child(2){--player-edge:#ffb347;--player-banner:#653a25;--player-banner-dark:#3c231b}
.app-shell .route-card:nth-child(3){--player-edge:#f57ade;--player-banner:#4c3055;--player-banner-dark:#2d203a}
.app-shell .route-card:after{
  content:"✦";position:absolute;right:10px;bottom:8px;
  color:#a7814b55;pointer-events:none;font-size:14px
}
.app-shell .route-card-header{
  margin:-10px -12px 10px;padding:10px 12px;
  gap:6px;background:linear-gradient(130deg,var(--player-banner),var(--player-banner-dark));
  border-bottom:1px solid #d9ac6a;border-radius:7px 7px 0 0;
  box-shadow:inset 0 1px #fff1cc2e,0 2px 7px #0003
}
.app-shell .route-card-header .route-name{
  font:800 15px/1.25 Georgia,Palatino,serif;
  text-shadow:0 1px 1px #0008
}
.app-shell .route-card-header .route-turns{
  color:#ffebcb;font-weight:800;white-space:nowrap
}
.app-shell .route-card .route-list{
  color:#322215;font-size:12px;line-height:1.7;
  margin:8px 0;overflow-wrap:anywhere
}
.app-shell .route-card .route-boss-budget{
  color:#6c3a17;font-size:12px;font-weight:850
}
.app-shell .route-card .route-boss-note{color:#69321e}
.app-shell .route-card .route-spare{color:#56371b}
.app-shell .route-card .boss-budget-disclaimer{color:#54361d}
.app-shell .route-info{border-color:#ab8055}
.app-shell .notice{
  background:#433025;border-color:#a5774a;
  color:#ffdfac
}
.app-shell .notice.warning{
  background:#583128;border-color:#ca7958;color:#ffe1cb
}
.app-shell .map-canvas{
  border:2px solid #b68a52;
  box-shadow:0 0 0 1px #0008,0 5px 21px #0b060580
}
.app-shell .map-zoom-overlay,
.app-shell .map-canvas .map-legend-overlay{
  border-color:#b68c55;background:#281b15ec;
  color:#f9e4c2;box-shadow:inset 0 1px #fff2cc24,0 5px 16px #0009
}
.app-shell .ward-menu,
.app-shell .ward-tooltip{
  background:#34251ded;border-color:#c4975e;
  color:#ffedcb;box-shadow:0 8px 23px #060402d9
}
.app-shell .ward-tooltip-heading{color:#fff0cb}
.app-shell .ward-menu-choice{background:#493026;color:#ffebcb}
.app-shell .ward-menu-choice:hover{border-color:#f9cb82;background:#63412d}
.app-shell .ward-menu-choice.selected{border-color:#f3c388;color:#ffedcb}
.app-shell .background-menu button[aria-checked="true"]{
  border-color:#f3c388;color:#ffeacb
}
.app-shell .map-canvas:focus-visible,
.app-shell button:focus-visible,
.app-shell select:focus-visible,
.app-shell [tabindex]:focus-visible{
  outline:3px solid #ffe0a0;outline-offset:2px
}
.app-shell .route-panel{scrollbar-color:#9c7347 #261912;scrollbar-width:thin}
@media(max-width:760px){
  .app-shell .sidebar{border-right:0;border-bottom:2px solid #b88a53}
  .app-shell .route-panel{padding:11px}
  .app-shell .route-card{padding:10px 12px}
}
@media(prefers-reduced-motion:reduce){
  .app-shell .segmented button{transition:none}
}


/* Explicit Community (source-backed) vs Optimizer (generated) navigation. */
.strategy-section[hidden]{display:none!important}
.sidebar #strategy-label{margin:16px 0 7px}
.sidebar #strategy.strategy-tabs{
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
  gap:5px;padding:5px;border:1px solid #ae8250;
  background:#211710;border-radius:12px
}
.sidebar #strategy.strategy-tabs button{
  padding:11px 6px;min-height:41px;font-size:12px;font-weight:800;
  border-radius:8px;color:#f4d8ad;text-align:center
}
.sidebar #strategy.strategy-tabs button.selected,
.sidebar #strategy.strategy-tabs button[aria-pressed="true"]{
  background:linear-gradient(145deg,#ddac65,#976431);
  border-color:#ffe0a1;color:#2c1a0f;text-shadow:0 1px #ffe8bb7a
}
.sidebar .strategy-intro{
  margin:14px 2px 10px;color:#e9d0ad;
  font-size:12px;line-height:1.5
}
.sidebar .community-route-buttons{display:grid;gap:8px;min-width:0}
.sidebar .community-route-button{
  display:block;width:100%;min-width:0;padding:11px 12px;
  text-align:left;overflow-wrap:anywhere;
  border:1px solid #a27a49;border-left:3px solid #d8b075;
  border-radius:10px;color:#ffead0;
  background:linear-gradient(125deg,#503523,#2c1e18);
  box-shadow:inset 0 1px #fff0c324,0 3px 8px #0006;
  line-height:1.35;font-size:12px;font-weight:700;
  transition:background .15s ease,border-color .15s ease
}
.sidebar .community-route-button:hover{
  background:linear-gradient(125deg,#705035,#3b2920);border-color:#ffdc9c
}
.sidebar .community-route-button.selected,
.sidebar .community-route-button[aria-pressed="true"]{
  border-color:#ffe1a0;border-left:4px solid #ffe1a0;
  padding-left:11px;background:linear-gradient(145deg,#aa7940,#5b3a25);
  color:#fff7e7;box-shadow:inset 0 1px #fff5d144,0 3px 11px #0009
}
.sidebar .community-route-button.selected::before{content:"✦ ";color:#ffe9ae}
.sidebar #community-route-help{line-height:1.45;margin:10px 2px}
.sidebar #community-route-help:empty{display:none}
.sidebar #optimizer-strategy .control-label:first-child{margin-top:16px}
.sidebar .community-route-button:focus-visible{
  outline:3px solid #ffe0a0;outline-offset:2px
}
@media(max-width:760px){
  .sidebar .community-route-buttons{
    grid-template-columns:repeat(auto-fit,minmax(min(100%,180px),1fr))
  }
}
@media(prefers-reduced-motion:reduce){
  .sidebar .community-route-button{transition:none}
}
/* One map-fixed share control, a modest Tavern counterpart to left zoom. */
.app-shell .map-canvas{container-type:inline-size}
.app-shell .map-share-overlay{
  position:absolute;z-index:17;top:14px;right:14px;
  max-width:calc(100% - 28px);min-width:0
}
.app-shell .map-share-button{
  display:flex;align-items:center;justify-content:center;gap:8px;
  min-height:47px;max-width:100%;padding:9px 15px;
  border:1px solid #e5bb80;border-radius:11px;
  background:linear-gradient(155deg,#65452eec,#36251bed);
  color:#ffe5bc;font-size:12px;font-weight:850;
  box-shadow:inset 0 1px #ffefc342,0 4px 17px #0805039c;
  backdrop-filter:blur(8px);text-align:center;white-space:nowrap;
  transition:background .15s ease,border-color .15s ease
}
.app-shell .map-share-icon{
  display:grid;place-items:center;flex:none;
  width:23px;height:23px;border-radius:7px;
  background:#c89453;color:#281910;font-size:17px;font-weight:900
}
.app-shell .map-share-button:hover{
  background:linear-gradient(155deg,#795438,#433022);
  border-color:#ffdfa4
}
.app-shell .map-share-button:focus-visible{
  outline:3px solid #ffe2a4;outline-offset:3px
}
.app-shell .map-share-message{
  position:absolute;top:calc(100% + 7px);right:0;
  margin:0;max-width:min(255px,75vw);min-width:160px;
  padding:9px 11px;border-radius:9px;
  border:1px solid #b68c55;background:#281b15ee;
  color:#fce8c7;box-shadow:0 4px 14px #0008;
  font-size:11px;line-height:1.4;pointer-events:none
}
.app-shell .map-share-message:empty{display:none}
@container(max-width:515px){
  .app-shell .map-share-overlay{top:65px;right:9px}
  .app-shell .map-share-button{min-height:40px;padding:7px 11px}
}
@media(max-width:560px){
  .app-shell .map-share-overlay{top:62px;right:9px}
  .app-shell .map-share-button{min-height:39px;padding:7px 10px}
}
@media(prefers-reduced-motion:reduce){
  .app-shell .map-share-button{transition:none}
}


/* Public German legal identity, one small footer link and Tavern modal.
   Uses the same canonical private content on /impressum.php and in the UI. */
.impressum-footer,
.map-canvas .impressum-footer{
  position:fixed;left:18px;right:auto;top:auto;
  bottom:max(19px,env(safe-area-inset-bottom,0px) + 15px);
  z-index:34;font-size:11px;line-height:1.4
}
/* Plain lower-left legal link, including when the map itself is fullscreen.
   No badge, pill, border, or contrasting button background. */
.impressum-footer a{
  display:inline;color:#dfc49e;background:none;
  border:0;padding:0;border-radius:0;
  text-decoration:none;box-shadow:none
}
.impressum-footer a:hover,.impressum-footer a:focus-visible{
  color:#fff1d7;text-decoration:underline;text-underline-offset:3px
}
.impressum-dialog{
  box-sizing:border-box;position:fixed;
  inset:0;margin:auto;width:min(440px,calc(100% - 32px));
  max-height:calc(100dvh - 48px);padding:23px 24px 25px;
  overflow:auto;border:1px solid #d8ad70;border-radius:17px;
  color:#f8ead0;background:radial-gradient(circle at 88% 0%,#84532b55,transparent 60%),
    linear-gradient(155deg,#423025,#251a15);
  box-shadow:inset 0 1px #fff2d13a,0 22px 85px #000c
}
.impressum-dialog::backdrop{background:#07090bc2;backdrop-filter:blur(3px)}
.impressum-close-form{position:absolute;top:11px;right:11px;margin:0}
.impressum-close{
  display:grid;place-items:center;appearance:none;
  width:34px;height:34px;padding:0;border:1px solid #a17a50;
  border-radius:8px;background:#2f211a;color:#f5d7ac;cursor:pointer
}
.impressum-close svg{display:block;width:18px;height:18px;flex:none}
.impressum-close:hover{background:#65462f;border-color:#e4b779}
.impressum-close:focus-visible,.impressum-back:focus-visible{
  outline:3px solid #ffe0a0;outline-offset:3px
}
.impressum-content h1{
  margin:0 40px 7px 0;font:700 26px/1.2 Georgia,Palatino,serif;
  color:#f5d7a1
}
.impressum-content .impressum-subtitle{
  margin:0 0 19px;color:#dcc09b;font-size:12px
}
.impressum-content address{
  display:grid;gap:4px;margin:0 0 17px;font-style:normal;
  font-size:14px;line-height:1.5
}
.impressum-content address strong{color:#ffebcb;font-size:15px}
.impressum-content .impressum-contact{margin:8px 0;overflow-wrap:anywhere}
.impressum-email{
  display:inline-flex;gap:0;user-select:text;max-width:100%;
  white-space:nowrap;color:#ffe0a0;text-decoration:underline;
  text-decoration-color:#c29c6b;text-underline-offset:3px
}
.impressum-email:hover{color:#fff4d7;text-decoration-color:currentColor}
.impressum-email:focus-visible{outline:3px solid #ffe0a0;outline-offset:3px}
.impressum-page{
  min-height:100dvh;margin:0;padding:45px 16px 75px;
  color:#f8ead0;background:radial-gradient(circle at 58% 5%,#73452255,transparent 60%),
    linear-gradient(150deg,#36231b,#1a110d)
}
.impressum-standalone{
  margin:0 auto;padding:25px 26px;width:min(480px,100%);
  border:1px solid #b58b55;border-radius:16px;
  background:linear-gradient(150deg,#443024,#281b16);
  box-shadow:0 15px 50px #0008
}
.impressum-back{display:inline-block;margin-top:12px;color:#ffe0a0}
@media(max-width:600px){
  .impressum-footer,.map-canvas .impressum-footer{
    left:12px;bottom:max(17px,env(safe-area-inset-bottom,0px) + 14px)
  }
  .impressum-dialog{padding:20px 18px 22px}
}
/* Source PNG icons from commit 2657cec7: floating in the map viewport. */
.app-shell .map-background-switch{
  position:absolute;z-index:19;top:14px;left:50%;transform:translateX(-50%);
  display:flex;align-items:center;gap:5px;padding:5px;
  border:1px solid #b88a53;border-radius:11px;
  background:linear-gradient(145deg,#4c3426ed,#241a15ed);
  box-shadow:inset 0 1px #ffe7bc22,0 5px 18px #070403a0;
  backdrop-filter:blur(8px)
}
.app-shell .map-background-switch button{
  display:grid;place-items:center;width:42px;height:42px;min-width:42px;
  padding:5px;border:1px solid transparent;border-radius:9px;
  background:#2c211b;color:#f4dcaf;cursor:pointer;
  transition:background .14s ease,border-color .14s ease
}
.app-shell .map-background-switch button img{
  display:block;width:32px;height:32px;max-width:100%;max-height:100%;
  object-fit:contain;pointer-events:none
}
.app-shell .map-background-switch button:hover{background:#5d402d;border-color:#b98b52}
.app-shell .map-background-switch button.selected,
.app-shell .map-background-switch button[aria-pressed="true"]{
  background:linear-gradient(155deg,#805833,#4c3021);
  border-color:#ffdc9e;box-shadow:inset 0 1px #fff1cc4d
}
.app-shell .map-background-switch button:focus-visible{
  outline:3px solid #ffe0a0;outline-offset:2px
}
/* Keep the PNG icons centered on the FIRST row until the controls truly
   approach one another. At the middle width, Share is also on row two and
   still has room; only very narrow canvases require a third row. */
@container(max-width:535px){.app-shell .map-background-switch{top:64px}}
@container(max-width:465px){.app-shell .map-background-switch{top:111px}}
@media(prefers-reduced-motion:reduce){
  .app-shell .map-background-switch button{transition:none}
}
/* Chat-friendly export of the three visible player walks plus permalink. */
.app-shell .route-text-copy{display:grid;gap:5px;margin:8px 0 16px;min-width:0}
.app-shell #copy-paths-text{
  display:block;width:100%;min-height:40px;padding:9px 12px;
  background:linear-gradient(150deg,#67472f,#34241d);
  border:1px solid #c39a61;border-radius:9px;color:#ffe5be;
  font-weight:800;font-size:12px;text-align:center;cursor:pointer;
  box-shadow:inset 0 1px #fff0cb29,0 3px 10px #08050372
}
.app-shell #copy-paths-text:hover:not(:disabled){
  background:linear-gradient(150deg,#835b39,#423025);border-color:#ffdaa0
}
.app-shell #copy-paths-text:disabled{opacity:.48;cursor:not-allowed}
.app-shell #copy-paths-text:focus-visible{
  outline:3px solid #ffe0a0;outline-offset:2px
}
.app-shell #copy-paths-msg{margin:0;color:#eed0a3}
.app-shell #copy-paths-msg:empty{display:none}

/* Anonymous gateway: no public Atlas descriptions; one Tavern skin. */
.login-shell{
  position:relative;isolation:isolate;
  display:grid;place-items:center;min-height:100vh;min-height:100dvh;
  padding:28px 18px 72px;overflow:hidden;
  background:
    radial-gradient(ellipse at 50% 25%,#a0733d2e,transparent 54%),
    repeating-linear-gradient(92deg,transparent 0 116px,#0a06051c 117px 119px,transparent 120px 182px),
    linear-gradient(145deg,#322219,#1b120f 62%,#100c0a)
}
.login-shell .login{
  position:relative;isolation:isolate;width:min(100%,360px);
  margin:0;padding:clamp(20px,5vw,28px);
  border:1px solid #967149;border-radius:15px;
  background:linear-gradient(155deg,#433026,#291d18 74%,#241913);
  color:#fae7c9;box-shadow:inset 0 1px #ffe8ba30,0 22px 64px #080402a6
}
.login-shell .login form{margin:0}
.login-shell .login label{
  display:block;margin:0 0 9px;
  color:#ead0aa;font-size:12px;font-weight:750
}
.login-shell .login input[type="password"]{
  display:block;width:100%;min-height:46px;margin:0 0 12px;
  padding:12px 14px;border:1px solid #a47a4e;border-radius:9px;
  background:#211712e8;color:#fff0d7;font-size:15px;
  box-shadow:inset 0 2px 7px #060302a3
}
.login-shell .login input[type="password"]::placeholder{color:#ae967b}
.login-shell .login input[type="password"]:focus-visible{
  outline:3px solid #f5cc87;outline-offset:2px;border-color:#ffe1a4
}
.login-shell .login button[type="submit"]{
  display:flex;align-items:center;justify-content:center;gap:10px;
  width:100%;min-height:44px;padding:10px 14px;
  border:1px solid #edc990;border-radius:9px;
  background:linear-gradient(160deg,#ebca96,#c49257);
  color:#342015;font-weight:800;font-size:14px;
  box-shadow:inset 0 1px #fff8da8a,0 4px 12px #0b06046b
}
.login-shell .login button[type="submit"]:hover{
  background:linear-gradient(160deg,#ffe0af,#dea767);border-color:#fff0c7
}
.login-shell .login button[type="submit"]:focus-visible{
  outline:3px solid #fff0c7;outline-offset:3px
}
.login-shell .login button[type="submit"] span{font-size:18px;line-height:1}
.login-shell .login .error{
  margin:0 0 16px;padding:11px 13px;
  border:1px solid #d17a71;border-radius:9px;
  background:#592b29;color:#ffe0d8!important
}
@media(max-width:520px){
  .login-shell{padding:26px 14px 76px}
  .login-shell .login{padding:22px 20px}
}
