.campaign-sheet{--route-gold:#e7c78b;width:min(100%,620px);max-width:100%;height:min(100dvh,900px);max-height:100dvh;margin:auto;padding:0;border:1px solid #7897a3;border-radius:22px;background:radial-gradient(ellipse at 95% 0,#53627855,transparent 55%),#102b39;color:#f9edd4;font:16px/1.45 var(--body,Arial,sans-serif);display:flex;flex-direction:column;overflow:hidden;box-sizing:border-box}.campaign-sheet:not([open]){display:none}.campaign-sheet::backdrop{background:#041520cc}.campaign-header{display:flex;align-items:center;justify-content:space-between;gap:12px;flex:none;padding:19px 20px 15px;border-bottom:1px solid #8ba5ae44}.campaign-header h2{font-size:27px;margin:3px 0 0;line-height:1.12;font-weight:500}.campaign-sheet small{font-size:12px;letter-spacing:.06em;color:#d7c69f}.campaign-header button,.story-stage-art button{flex:none;display:grid;place-items:center;width:44px;height:44px;min-width:44px;padding:0;border-radius:14px;border:1px solid #91a8b566;background:#233f50;color:#f5e4c0;font-size:25px;line-height:1}.campaign-scroll{padding:18px 20px;min-height:0;overflow:auto;overscroll-behavior:contain}.campaign-sheet footer{padding:12px 20px max(14px,env(safe-area-inset-bottom));background:#122c3d;border-top:1px solid #7b99a755;flex:none}.campaign-sheet footer button{width:100%;min-height:48px;font-size:16px;padding:12px}.campaign-sheet button:focus-visible{outline:3px solid #ffe2a6;outline-offset:2px}.campaign-sheet button:disabled{opacity:.65;cursor:default}.campaign-route{list-style:none;padding:0;margin:0;display:grid;gap:10px}.campaign-route li{position:relative}.campaign-route li:not(:last-child):after{content:'';position:absolute;left:24px;top:calc(100% - 2px);height:14px;border-left:2px solid #bca97766}.campaign-stop{position:relative;display:flex;align-items:center;width:100%;gap:12px;min-height:80px;text-align:left;padding:8px 12px 8px 0;background:#243f50;border:1px solid #7495a866;border-radius:16px;overflow:hidden;color:#ede7d9}.campaign-stop>img{position:absolute;inset:0 0 0 auto;width:58%;height:100%;object-fit:cover;opacity:.2;pointer-events:none;mask-image:linear-gradient(90deg,transparent,#000)}.campaign-stop>span{position:relative}.campaign-stop>span:last-child{flex:1;min-width:0}.campaign-stop small,.campaign-stop strong,.campaign-stop>span>span{display:block}.campaign-stop strong{font-family:var(--display,Georgia,serif);font-weight:500;font-size:22px;line-height:1.2}.campaign-stop small{font-size:11px;margin-bottom:3px}.campaign-stop>span>span{font-size:12px;color:#bcd1d7;margin-top:3px}.campaign-node{display:grid;place-items:center;width:46px;min-width:46px;height:48px;border:1px solid #91b4b280;border-radius:13px;margin-left:3px;background:#254a55;color:#f0d499;font-size:19px}.campaign-node .camp-icon{width:28px;height:28px}.complete .campaign-node{background:#386657}.locked .campaign-stop{background:#203341}.locked .campaign-stop>img{filter:grayscale(1);opacity:.12}.locked .campaign-node{color:#92a5af;background:#2b3d47}.campaign-stop[aria-pressed=true]{border:2px solid #e9c689;padding-top:7px;padding-bottom:7px;background:#365259;box-shadow:inset 0 0 0 2px #fae2a014}.campaign-stage-detail{margin-top:20px;border-top:1px solid #7595a955;padding-top:18px}.campaign-stage-detail h3{font-size:27px;margin:5px 0 8px}.campaign-stage-detail p{font-size:15px;line-height:1.45;margin:0 0 14px;color:#d1e0df}.campaign-payoff{display:flex;gap:12px;align-items:center;padding:10px 12px;background:#31504f;border:1px solid #afaf7766;border-radius:13px}.campaign-payoff>img{width:42px;height:53px;object-fit:contain}.campaign-payoff>.camp-icon{width:35px;height:35px;flex:none}.campaign-payoff b,.campaign-payoff small{display:block}.campaign-payoff b{font-size:15px}.campaign-payoff small{font-size:12px;letter-spacing:0;margin-top:3px;color:#c3d6d6}.campaign-stage-detail .prototype-note{font-size:12px;margin:12px 0 0;color:#bbcbd0}.campaign-alternative{margin-top:8px;background:transparent;border:1px solid #859ca777}.recruit-hero{display:flex;align-items:center;gap:15px;background:radial-gradient(ellipse at 15% 50%,#61858155,transparent 75%);min-height:165px}.recruit-hero>img{width:39%;height:185px;object-fit:contain}.recruit-hero>div{min-width:0}.recruit-hero h3{font-size:27px;line-height:1.15;margin:4px 0 8px}.recruit-hero p{font-size:14px;margin:0;color:#cadddc}.recruit-passive{display:flex;align-items:center;gap:12px;padding:12px;background:#284550;border:1px solid #72979a55;border-radius:13px;margin:12px 0}.recruit-passive>.camp-icon{width:29px;height:29px;flex:none}.recruit-passive b,.recruit-passive small{display:block}.recruit-passive b{font-size:14px}.campaign-demo{display:flex;align-items:center;justify-content:center;gap:9px;min-height:48px;width:100%;background:#355967;border:1px solid #81afb18c;border-radius:12px;color:#fff0d0;font-size:16px}.recruit-kit h3{font-size:23px;margin:20px 0 5px}.recruit-kit p{font-size:14px;color:#bdcfd5;margin:0 0 13px}.recruit-kit>div{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.recruit-kit span{display:flex;align-items:center;gap:8px;font-size:13px;padding:8px;border:1px solid #8aafaf44;border-radius:10px;background:#28414d}.recruit-kit canvas{width:35px;height:35px;flex:none}.recruit-requirement{font-size:14px;color:#f1d79f;display:flex;gap:8px;align-items:center}.campaign-status{font-size:14px;color:#ffe0a6}.campaign-sheet .camp-icon{display:inline-block;vertical-align:middle;width:26px;height:26px}.recruit-price{font-size:27px;color:#ffe0a6}.recruit-confirm{height:auto;max-height:80dvh;width:min(calc(100% - 24px),440px)}.story-stage-art{height:210px;position:relative;flex:none}.story-stage-art>img{width:100%;height:100%;object-fit:cover;object-position:center 30%}.story-stage-art:after{content:'';position:absolute;inset:40% 0 0;background:linear-gradient(transparent,#102b39)}.story-stage-art button{position:absolute;right:15px;top:15px;z-index:1}.story-speaker{display:flex;gap:12px;align-items:center;margin:12px 0}.story-speaker img{width:64px;height:76px;object-fit:contain;border-radius:14px;background:#294955}.story-speaker span{font-size:14px;color:#f5d392;letter-spacing:.12em;text-transform:uppercase}.campaign-story h2{font-size:30px;line-height:1.1;margin:8px 0 16px}.story-line{line-height:1.55;margin-bottom:12px}.campaign-story{height:min(760px,100dvh)}
@media(max-width:450px){.campaign-sheet{border-radius:0}.campaign-header{padding:15px}.campaign-header h2{font-size:24px}.campaign-scroll{padding:15px}.campaign-sheet footer{padding-inline:15px}.recruit-confirm{border-radius:18px}.campaign-map .campaign-stop strong{font-size:21px}}
@media(max-height:600px){.campaign-header{padding-block:10px}.campaign-stop{min-height:68px}.campaign-stop strong{font-size:19px}.story-stage-art{height:105px}.recruit-hero{min-height:110px}.recruit-hero>img{height:130px}.campaign-story h2{font-size:25px}.campaign-map .campaign-scroll{padding-top:12px}}
@media(prefers-reduced-motion:no-preference){.campaign-story .story-speaker img{animation:guide-arrive .28s ease-out}.coach-portrait{animation:guide-arrive .3s ease-out}.coach-portrait:after{content:'';position:absolute;inset:auto 12% 5px;height:2px;background:#f0d39b;box-shadow:0 0 10px #f0d39b;animation:guide-speaking 1.6s ease-in-out infinite}.coach-card:has(.dialogue-line[data-revealing=false]) .coach-portrait:after{animation:none;opacity:.5}@keyframes guide-speaking{50%{opacity:.3;scale:.7 1}}@keyframes guide-arrive{from{opacity:.6;translate:0 4px}to{opacity:1;translate:0 0}}}
.coach-read-more{color:#f3d99e;font-size:12px;line-height:1.3;flex:none;margin:0 0 5px;text-align:right}.coach-read-more[hidden]{display:none}
.campaign-read-story{display:flex;gap:9px;align-items:center;justify-content:center;width:100%;min-height:44px;margin-top:12px;padding:9px;border:1px solid #91aba766;border-radius:12px;background:#244753;color:#f4e6ca;font-size:14px}.story-chapter-line{display:flex;justify-content:space-between;align-items:center;gap:12px}.story-page-count{flex:none;color:#eac98e;font-size:12px}.story-page-track{display:flex;gap:6px;margin:0 0 12px}.story-page-track i{height:3px;flex:1;background:#516c74;border-radius:4px}.story-page-track .read{background:#ebcb8d}.story-stage-art>img.story-scene-character{position:absolute;inset:auto 12% 0 auto;width:42%;height:96%;object-fit:contain;object-position:bottom;z-index:1;filter:drop-shadow(0 5px 10px #04182777)}.campaign-story .story-stage-art>button{z-index:2}.campaign-story:has(.story-scene-character) .story-stage-art>img:first-child{object-position:center 27%;filter:brightness(.8)}
@media(max-height:520px){#coach[data-scope="frontier-camp"] .coach-card,#coach[data-scope="campaign-camp"] .coach-card{padding:9px 12px 8px}#coach[data-scope="frontier-camp"] .coach-chapter,#coach[data-scope="campaign-camp"] .coach-chapter{display:none}#coach[data-scope="frontier-camp"] .coach-card header,#coach[data-scope="campaign-camp"] .coach-card header{gap:9px;margin:0 0 8px}#coach[data-scope="frontier-camp"] .coach-portrait,#coach[data-scope="campaign-camp"] .coach-portrait{width:35px;flex-basis:35px;height:43px;border-radius:9px}#coach[data-scope="frontier-camp"] .coach-portrait figcaption,#coach[data-scope="campaign-camp"] .coach-portrait figcaption{display:none}#coach[data-scope="frontier-camp"] .coach-heading h2,#coach[data-scope="campaign-camp"] .coach-heading h2{font-size:19px;line-height:1.13;margin:0}#coach[data-scope="frontier-camp"] .coach-copy p,#coach[data-scope="campaign-camp"] .coach-copy p{font-size:14px;line-height:1.4;margin:0 0 9px}#coach[data-scope="frontier-camp"] .coach-visual,#coach[data-scope="campaign-camp"] .coach-visual{display:none}#coach[data-scope="frontier-camp"] .coach-actions,#coach[data-scope="campaign-camp"] .coach-actions{margin:0;padding:0}}
.story-speaker img[data-hero="5"]{object-fit:cover;object-position:center top}
.campaign-story[data-story-art=bram] .story-stage-art{height:auto;aspect-ratio:3/2;max-height:min(38dvh,340px);background:#173746}
.campaign-story[data-story-art=bram] .story-stage-art>img{display:block;object-position:center 30%}
.campaign-story[data-story-art=bram] .story-stage-art:after{inset:80% 0 0;pointer-events:none}
.campaign-story>.campaign-scroll{flex:1}
@media(max-height:600px){.campaign-story[data-story-art=bram] .story-stage-art{height:150px;aspect-ratio:auto;max-height:32dvh}.campaign-story[data-story-art=bram] .story-speaker{margin:8px 0}.campaign-story[data-story-art=bram] .story-speaker img{width:48px;height:58px}.campaign-story[data-story-art=bram] h2{font-size:24px;margin:8px 0 10px}}

/* The live route owns geography, labels and unlock state. Background art is decorative. */
.campaign-route-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}
.campaign-stage-preview{width:min(540px,calc(100% - 24px));height:auto;max-height:calc(100dvh - 24px);border-radius:22px}
.campaign-stage-preview>.campaign-scroll{padding:16px;flex:1}
.campaign-stage-preview>.campaign-header{padding:14px 16px;align-items:center}
.campaign-stage-preview .campaign-header h2{font-size:26px}
.campaign-stage-preview .campaign-location{margin:0 0 14px}
.campaign-stage-preview .stage-story-summary{font-size:15px;line-height:1.45;margin:0 0 14px;color:#d1e0df}
.stage-run-facts{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.stage-run-facts>span{display:flex;align-items:center;gap:8px;padding:10px;background:#1c3b48;border:1px solid #8aabb833;border-radius:12px;min-width:0}
.stage-run-facts b{font-size:13px;font-weight:500}.stage-run-facts .camp-icon{flex:none}
.stage-section-heading{display:flex;justify-content:space-between;align-items:center;margin:20px 0 10px;font:600 16px/1.3 var(--body,Arial,sans-serif)}
.stage-section-heading>small{font:11px var(--body,Arial,sans-serif);color:#c4d5d8}
.stage-encounters{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.stage-encounters>span{display:flex;flex-direction:column;align-items:center;gap:8px;padding:12px 5px;border:1px solid #8aabb844;background:#1e3e4e;border-radius:12px;text-align:center}
.stage-encounters>span>.camp-icon{width:38px;height:38px}.stage-encounters b{font:500 12px/1.4 var(--body,Arial,sans-serif)}
.campaign-stage-preview .prototype-note{font-size:12px;color:#b8cbd3;margin-top:14px}
.campaign-stage-preview footer{padding:12px 16px max(12px,env(safe-area-inset-bottom));box-shadow:none}
.campaign-stage-preview #stagePlay{white-space:normal;line-height:1.3;border-radius:12px}
.route-instruction{text-align:center;font-size:13px;color:#bfd2d8;margin:16px 0 0}
.campaign-map[data-route-view=list] .campaign-stop{display:grid;grid-template-columns:48px minmax(0,1fr) 84px;gap:12px;padding:10px;min-height:92px;box-sizing:border-box}
.campaign-map[data-route-view=list] .campaign-stop .campaign-node{width:48px;min-width:48px;height:48px;margin:0;box-sizing:border-box;grid-column:1;grid-row:1}
.campaign-map[data-route-view=list] .campaign-stop-label{grid-column:2;grid-row:1;min-width:0}
.campaign-map[data-route-view=list] .campaign-stop>img{position:static;grid-column:3;grid-row:1;width:84px;height:66px;object-fit:cover;object-position:center;opacity:1;mask-image:none;border-radius:9px}
.campaign-map[data-route-view=list] .campaign-stop[aria-pressed=true]{padding:9px}
.campaign-map[data-route-view=list] .locked .campaign-stop>img{filter:grayscale(1);opacity:.45}
.campaign-map[data-route-view=list] .campaign-stop strong{font-size:20px}
@media(max-width:359px){.campaign-map[data-route-view=list] .campaign-stop{grid-template-columns:42px minmax(0,1fr) 64px;gap:8px}.campaign-map[data-route-view=list] .campaign-stop>img{width:64px;height:62px}.campaign-map[data-route-view=list] .campaign-stop .campaign-node{width:42px;min-width:42px}.campaign-map[data-route-view=list] .campaign-stop strong{font-size:18px}.campaign-stage-preview .campaign-header h2{font-size:23px}}
.campaign-route-toolbar h3{font-size:23px;font-weight:500;margin:2px 0 0;line-height:1.15}
.route-progress{display:block;margin-top:5px;font-size:12px;color:#bfced1;letter-spacing:.01em}
.route-view-switch{display:flex;padding:3px;gap:3px;background:#0d2330;border:1px solid #7896a355;border-radius:14px}
.route-view-switch button{font-size:14px;min-width:48px;min-height:44px;padding:8px;border-radius:10px;background:transparent;color:#d2e0e2;border:1px solid transparent}
.route-view-switch [aria-pressed=true]{background:#32515c;border-color:#d7bc83;color:#fff0cb}
.campaign-route-landscape,.campaign-route-path{display:none}
.campaign-map[data-route-view=map] .campaign-route-board{position:relative;aspect-ratio:3/4;max-width:440px;margin-inline:auto;border:1px solid #7896a366;border-radius:18px;background:#183a44;isolation:isolate;overflow:hidden}
.campaign-map[data-route-view=map] .campaign-route-landscape{display:block;position:absolute;inset:0;z-index:-1;background:linear-gradient(#102b3910,#0a28381c 75%,#071d3270),url('assets/world/beacon-reach.webp') center/100% 100%}
.campaign-map[data-route-view=map] .campaign-route-path{display:block;position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.campaign-route-path path{fill:none;stroke-width:1.2;stroke-linecap:round;stroke:#748e92;stroke-dasharray:1 2}
.campaign-route-path path.complete{stroke:#dbbc80;stroke-dasharray:none}
.campaign-route-path path.available{stroke:#b0d2cb;stroke-dasharray:1 1.6}
.campaign-route-path path.locked{opacity:.4}
.campaign-map[data-route-view=map] .campaign-route-board>.campaign-route{display:block;position:absolute;inset:0}
.campaign-map[data-route-view=map] .campaign-route-board .campaign-route li{position:absolute;left:var(--route-x);top:var(--route-y);width:48px;height:48px;transform:translate(-50%,-50%)}
.campaign-map[data-route-view=map] .campaign-route-board .campaign-route li:after{display:none}
.campaign-map[data-route-view=map] .campaign-stop{display:block;width:48px;height:48px;min-height:48px;padding:0;background:transparent;border:0;overflow:visible;border-radius:16px;box-shadow:none}
.campaign-map[data-route-view=map] .campaign-stop>img{display:none}
.campaign-map[data-route-view=map] .campaign-node{position:relative;box-sizing:border-box;width:48px;height:48px;min-width:48px;margin:0;border:2px solid #90bab9;box-shadow:0 4px 0 #071e28,0 0 0 4px #09232d88;border-radius:16px;background:linear-gradient(145deg,#476d75,#23454d);font-weight:700}
.campaign-map[data-route-view=map] .complete .campaign-node{background:linear-gradient(145deg,#598575,#2b5348);border-color:#adcaba}
.campaign-map[data-route-view=map] .locked .campaign-node{background:#293f48;border-color:#667f87;color:#b0bec3}
.campaign-map[data-route-view=map] .campaign-stop-label{position:absolute;top:50%;left:59px;width:160px;box-sizing:border-box;transform:translateY(-50%);padding:8px 10px;border:1px solid #78959c66;border-radius:12px;background:#122e3aee;box-shadow:0 3px 9px #04182133}
.campaign-map[data-route-view=map] .label-left .campaign-stop-label{left:auto;right:59px;text-align:right}
.campaign-map[data-route-view=map] .campaign-stop-label small{font-size:11px}
.campaign-map[data-route-view=map] .campaign-stop-label strong{font-size:19px;line-height:1.06}
.campaign-map[data-route-view=map] .campaign-stop-label>span{font-size:12px;color:#c0d3d5;line-height:1.2;margin-top:4px}
.campaign-map[data-route-view=map] .campaign-stop:not([aria-pressed=true]) .campaign-stop-label>span{display:none}
.campaign-map[data-route-view=map] .locked .campaign-stop-label{color:#b8c5cc;background:#18303beb}
.campaign-map[data-route-view=map] .campaign-stop[aria-pressed=true] .campaign-node{border-color:#ffe0a2;background:linear-gradient(145deg,#f0d49a,#b5884e);color:#173846;box-shadow:0 4px 0 #775c38,0 0 0 4px #f2cf8f33}
.campaign-map[data-route-view=map] .campaign-stop[aria-pressed=true] .campaign-stop-label{border-color:#e9c889;background:#2c4b51;color:#fff0d0}
.campaign-map[data-route-view=map] .campaign-stop:focus-visible .campaign-stop-label{outline:2px solid #ffe2a6;outline-offset:2px}
.campaign-location{margin:0 0 16px;border:1px solid #b9b89988;border-radius:16px;overflow:hidden;background:#193641}
.campaign-location>img{display:block;width:100%;height:auto;aspect-ratio:3/2;object-fit:contain}
.campaign-location>figcaption{display:flex;align-items:center;gap:8px;padding:9px 12px;background:#21404c;color:#e8d9b7;font-size:12px;letter-spacing:.04em}
.campaign-location>figcaption>.camp-icon{width:22px;height:22px;flex:none}
.campaign-map .campaign-stage-detail{scroll-margin-top:12px}
.campaign-map footer.campaign-map-actions{display:grid;grid-template-columns:72px minmax(0,1fr);gap:10px}
.campaign-map #stageDetails{border:1px solid #82a5b27a;background:#254752;color:#f4dfb4;border-radius:12px;font-size:14px;padding:10px 4px}
@media(prefers-reduced-motion:no-preference){.campaign-location{animation:campaign-location-in .22s ease-out}@keyframes campaign-location-in{from{opacity:.3}to{opacity:1}}}
@media(max-width:359px){.campaign-route-toolbar h3{font-size:20px}.campaign-map[data-route-view=map] .campaign-stop-label{width:137px;left:54px;padding:7px}.campaign-map[data-route-view=map] .label-left .campaign-stop-label{right:54px;left:auto}.campaign-map[data-route-view=map] .campaign-stop-label strong{font-size:17px}}
/* Lead (T014A follow-up): on phone-height screens keep the encounter row above the fixed Play footer. */
@media(max-height:900px){.campaign-location>img{aspect-ratio:16/7;object-fit:cover;object-position:center 42%}.stage-encounters>span{padding:8px 4px;gap:5px}.stage-encounters>span>.camp-icon{width:30px;height:30px}}
/* Stages beyond the illustrated map (T015): room for the three-line labels so they never cover the heading (Lead, 09-25). */
.campaign-route-continuation{margin-top:16px}
.campaign-route-continuation h3{margin:0 0 22px}
.campaign-map[data-route-view=map] .campaign-route-continuation .campaign-route{padding-left:6px}
.campaign-map[data-route-view=map] .campaign-route-continuation .campaign-route li{margin-bottom:30px}
