:root{color-scheme:dark;font-family:system-ui,sans-serif;background:#10101b;color:#f7f0df}*{box-sizing:border-box}body{margin:0;background:radial-gradient(ellipse at top,#302343,transparent 65%),#10101b;min-height:100vh}header{display:flex;align-items:center;gap:24px;padding:22px 5%;border-bottom:1px solid #72603d}header span{flex:1;font-size:12px;letter-spacing:.15em;color:#c4b89e}a{color:#ebc987}.brand{font-weight:900;letter-spacing:.15em;text-decoration:none;font-size:21px}main{max-width:1150px;margin:auto;padding:36px 24px 64px}h1{font-family:Georgia,serif;font-size:clamp(30px,5vw,52px);font-weight:normal;margin:10px 0}h2{font-family:Georgia,serif;font-size:30px}h3{font-size:24px;margin:12px 0}p{color:#d3cbdc;line-height:1.6}.eyebrow{font-size:11px;letter-spacing:.2em;color:#e4bd75}.cinema{margin-top:26px;aspect-ratio:16/9;border:1px solid #8a6b39;border-radius:14px;overflow:hidden;background:#000;box-shadow:0 20px 70px #0006}video{width:100%;height:100%;display:block;object-fit:contain}.actions{display:flex;gap:12px;flex-wrap:wrap;align-items:center;margin-top:22px}button,.button{font:inherit;font-weight:650;display:inline-block;padding:13px 23px;border:1px solid #8b7798;border-radius:8px;background:#292135;color:#f9f1e4;text-decoration:none;cursor:pointer}.primary{background:#e5bf79;color:#20182a;border-color:#e5bf79}button:disabled{opacity:.5;cursor:wait}button:hover,.button:hover{filter:brightness(1.13)}button:focus-visible,a:focus-visible{outline:3px solid #83dfed;outline-offset:4px}.choices{display:grid;grid-template-columns:1fr 1fr;gap:24px}.choices article{overflow:hidden;background:#20192cf5;border:1px solid #967540;border-radius:12px;box-shadow:0 18px 50px #0007}.fine{font-size:12px;color:#a79bb3}.dialogue{font-family:Georgia,serif;font-size:clamp(20px,3vw,28px);text-align:center;color:#ffe3ab}#status{min-height:1.6em;color:#ffcf92}[hidden]{display:none!important}@media(max-width:640px){header{gap:12px}header span{font-size:9px}.choices{grid-template-columns:1fr}main{padding:25px 15px 40px}.cinema{border-radius:7px}.actions>*{flex:1;text-align:center}.brand{font-size:16px}}
.choosing{background:linear-gradient(180deg,#10101b99,#10101bd9 55%,#10101b),url('/campaign/media/pavilion.jpg') center top/cover fixed}.choosing header{background:#10101bbd}.choosing main{max-width:1100px}.choosing h1{text-shadow:0 3px 18px #000}.choice-art{display:block;width:100%;aspect-ratio:16/8;object-fit:cover;border-bottom:1px solid #967540}.choice-copy{padding:26px}.choice-copy p{min-height:3.2em}.choice-copy button{width:100%;position:relative;overflow:hidden;transition:transform .16s,box-shadow .2s}.choice-copy button:hover{transform:translateY(-2px);box-shadow:0 0 28px #e5bf7945}.choice-copy button:active{transform:scale(.97)}button.clicked{animation:choice-pulse .32s ease-out}@keyframes choice-pulse{0%{transform:scale(.96);box-shadow:0 0 0 0 #f4d99099}100%{transform:scale(1);box-shadow:0 0 0 12px #f4d99000}}@media(prefers-reduced-motion:reduce){button.clicked{animation:none}.choice-copy button{transition:none}}
/* Illustrated chapter menu: artwork carries atmosphere; all controls remain live. */
.brand-sigil{color:#ebc77b;font-size:34px;vertical-align:middle}.brand .brand-sigil{letter-spacing:0}.header-control{padding:7px 10px;font-size:11px;letter-spacing:.1em;text-transform:uppercase;background:transparent;border-color:#6c593855}header>a:last-child{text-decoration:none;font-size:12px;text-transform:uppercase;letter-spacing:.08em}
.choosing{background:linear-gradient(90deg,#080a10aa,transparent 60%),linear-gradient(0deg,#080a10ed,transparent 65%),url('/campaign/media/menu-backdrop-v2.png') center center/cover fixed}.choosing header{background:#080a107d;border-color:#b99a5544}.choosing main{max-width:1440px;padding:35px 40px 20px}.choosing h1{text-transform:uppercase;max-width:580px;font-size:clamp(34px,4.1vw,59px);line-height:1.04;letter-spacing:-.025em;margin:9px 0;color:#ffe8b6;text-shadow:0 2px 20px #000}.choosing #description{margin:10px 0 0;font-family:Georgia,serif;font-size:17px;color:#f1e6d1}.menu-intro{position:absolute;max-width:210px;margin-top:24px;font-family:Georgia,serif;font-size:13px}.menu-intro p{color:#d8ccb7}.gold-rule{display:flex;align-items:center;gap:8px;color:#dfbb6f}.gold-rule:before,.gold-rule:after{content:'';width:70px;height:1px;background:linear-gradient(90deg,transparent,#bf984e)}.gold-rule:after{transform:rotate(180deg)}
.encounter-panel{position:relative;isolation:isolate;min-height:340px;margin:28px 7% 25px 22%;border:1px solid #c8a459;background:#0b1019;box-shadow:0 0 0 4px #b48e4124,inset 0 0 0 5px #07090e,0 14px 50px #0009;overflow:hidden;clip-path:polygon(14px 0,calc(100% - 14px) 0,100% 14px,100% calc(100% - 14px),calc(100% - 14px) 100%,14px 100%,0 calc(100% - 14px),0 14px)}.encounter-panel:after{content:'';position:absolute;inset:5px;pointer-events:none;border:1px solid #d3ac5855;clip-path:inherit}.encounter-panel .choice-art{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center;border:0;z-index:-2}.encounter-panel:before{content:'';position:absolute;inset:0;z-index:-1;background:linear-gradient(90deg,#080b12fa 0%,#080b12e8 25%,#080b127a 45%,transparent 65%)}.encounter-copy{padding:28px 32px;width:45%;min-width:310px}.encounter-copy h2{font-size:clamp(29px,3vw,44px);line-height:1.04;color:#ffe4a8;margin:10px 0;font-variant:small-caps}.encounter-meta{color:#e8c783;font-size:10px;letter-spacing:.16em;line-height:1.6}.encounter-copy p{font-size:12px;color:#e6dfd0;line-height:1.7;max-width:250px}.encounter-copy .ornate{width:100%;padding:12px 18px;border:1px solid #ffdf89;border-radius:0;background:linear-gradient(#ffe09a,#d9ad52);color:#1c1407;box-shadow:inset 0 0 0 3px #e0b55e,inset 0 0 0 4px #fff0b6;clip-path:polygon(10px 0,calc(100% - 10px) 0,100% 50%,calc(100% - 10px) 100%,10px 100%,0 50%);text-transform:uppercase;font-family:Georgia,serif;font-size:14px;letter-spacing:.06em;transition:filter .2s,transform .2s}.ornate span{float:right;font-size:23px;line-height:16px}.ornate:hover{filter:brightness(1.17);transform:translateY(-2px)}.quiet{display:block;width:100%;border:0;background:transparent;padding:11px 5px;color:#e9d7ac;font-size:12px;text-decoration:underline;text-underline-offset:4px}.encounter-copy .panel-quote{border-top:1px solid #a98a454d;padding-top:10px;margin:0;font-family:Georgia,serif;font-size:11px;font-style:italic;color:#c8aa73}
.chapter-path{display:flex;list-style:none;align-items:flex-start;gap:0;padding:14px 14px 0;margin:0;border-top:1px solid #b5904340;background:linear-gradient(90deg,transparent,#080a1099,transparent)}.chapter-path li{flex:1;min-width:0;text-align:center;position:relative;font-size:11px}.chapter-path li:not(:last-child):after{content:'';position:absolute;top:29px;left:76%;width:48%;height:1px;background:#77643e;z-index:-1}.step-art{height:56px;width:92px;max-width:80%;margin:0 auto 9px;border:1px solid #897546;display:grid;place-items:center;background:linear-gradient(135deg,#1c2530,#080b11);clip-path:polygon(9px 0,calc(100% - 9px) 0,100% 9px,100% calc(100% - 9px),calc(100% - 9px) 100%,9px 100%,0 calc(100% - 9px),0 9px)}.tutorial-step{background:url('/campaign/media/tutorial.jpg') center/cover}.game-step{background:url('/campaign/media/opponent.jpg') center/cover}.step-art span{background:#080a10c9;border-radius:50%;width:23px;height:23px;display:grid;place-items:center;color:#e9c77a}.chapter-path strong{display:block;font-family:Georgia,serif;text-transform:uppercase;font-weight:normal;font-size:11px;letter-spacing:.08em}.chapter-path small{display:block;margin-top:4px;color:#b5a992;font-size:10px}.chapter-path .current .step-art{border:2px solid #ffe5a0;box-shadow:inset 0 0 12px #ffcd6399}.chapter-path .current strong{color:#ffe2a0}.chapter-path .locked{opacity:.45}.assigned-note{text-align:center;margin:16px 0 0;font-size:10px}.choosing #status{margin:3px 0;min-height:0}.choosing #preview-note{text-align:right;font-size:10px;color:#b9a176}
@media(max-width:900px){.choosing main{padding:28px 24px 20px}.menu-intro{display:none}.encounter-panel{margin:28px 0 20px}.choosing h1{max-width:560px}.encounter-copy{width:48%;min-width:280px}.chapter-path{padding-left:0;padding-right:0}}
@media(max-width:560px){header{padding:12px 16px;gap:10px}.brand-sigil{display:none}.header-control{font-size:9px;padding:6px}.choosing main{padding:24px 16px 18px}.choosing h1{font-size:36px}.choosing #description{font-size:14px}.encounter-panel{padding-top:175px;min-height:0}.encounter-panel .choice-art{height:260px;object-position:70% center}.encounter-panel:before{background:linear-gradient(0deg,#080b12 38%,#080b1200 90%)}.encounter-copy{width:100%;min-width:0;padding:20px 23px}.encounter-copy p{max-width:none}.encounter-copy h2{font-size:35px}.chapter-path{overflow-x:auto;justify-content:flex-start;padding-bottom:12px;gap:12px}.chapter-path li{flex:0 0 86px}.step-art{max-width:100%}.chapter-path li:not(:last-child):after{display:none}.assigned-note{line-height:1.5}.choosing header>span{max-width:100px;font-size:8px}.choosing{background-position:60% top;background-attachment:scroll}}
@media(prefers-reduced-motion:reduce){.ornate{transition:none!important}}
.locked .step-art span{position:relative;font-size:0;width:12px;height:11px;border:1px solid #b7b3a5;border-radius:2px;background:#b7b3a522}.locked .step-art span:before{content:"";position:absolute;left:2px;top:-8px;width:6px;height:7px;border:1px solid #b7b3a5;border-bottom:0;border-radius:5px 5px 0 0}

/* Result film fills the page; live controls and captions sit above the image. */
body.result-cinema{overflow:hidden;background:#000}
.result-cinema header,.result-cinema main>h1,.result-cinema main>.eyebrow,.result-cinema #description,.result-cinema #preview-note{display:none}
.result-cinema main{padding:0;max-width:none}
.result-cinema .cinema{position:fixed;inset:0;width:100vw;height:100dvh;margin:0;border:0;border-radius:0;aspect-ratio:auto;box-shadow:none}
.result-cinema video{width:100%;height:100%;object-fit:cover}
.result-cinema .cinema:after{content:"";position:absolute;inset:45% 0 0;background:linear-gradient(transparent,#05050be6);pointer-events:none}
.result-cinema #dialogue{position:absolute;z-index:2;bottom:112px;left:5%;width:90%;margin:0;text-align:center;font-size:clamp(18px,2.3vw,30px);color:#fff4db;text-shadow:0 2px 5px #000,0 0 15px #000;line-height:1.45}
.result-cinema #outcome-actions{position:absolute;z-index:3;bottom:max(28px,env(safe-area-inset-bottom));left:0;width:100%;justify-content:center;margin:0;padding:0 20px}
.result-cinema #outcome-actions>*{min-width:170px;text-align:center;border:1px solid #cda45c;border-radius:3px;background:linear-gradient(#3b2945,#15101f);box-shadow:inset 0 0 0 3px #cfaa5922,0 5px 22px #0009;color:#ffe6b0;letter-spacing:.04em;transition:transform .15s,filter .15s}
.result-cinema #outcome-actions>.primary{background:linear-gradient(#f3d58e,#ba8b3d);color:#251b12}
.result-cinema #outcome-actions>*:hover{transform:translateY(-3px);filter:brightness(1.2)}
.result-cinema #actions{position:absolute;inset:35% 0 auto;z-index:4;justify-content:center}
.result-cinema #status{position:fixed;z-index:5;top:12px;left:5%;margin:0}
@media(max-width:560px){.result-cinema #dialogue{bottom:140px}.result-cinema #outcome-actions{gap:8px}.result-cinema #outcome-actions>*{min-width:130px;flex:0 1 auto;padding:12px 16px}.result-cinema video{object-fit:contain}}

.result-cinema #ui-sound{position:absolute;z-index:5;right:22px;top:20px;background:#16101ed9;border-color:#9d7d46}

#reward-panel{padding:35px;border:1px solid #cba456;background:#1b1427;border-radius:12px;text-align:center}#campaign-deck-label{display:block;margin:15px 0}#campaign-deck{display:block;width:100%;padding:12px;background:#191321;color:#ffe4a4;border:1px solid #b99552;margin-top:8px}

.chapter-path{overflow-x:auto;justify-content:flex-start}.chapter-path li{flex:0 0 105px}.chapter-select{display:block;width:100%;padding:6px 2px;background:transparent;border:0;font:inherit;color:inherit}.chapter-select:disabled{cursor:not-allowed}.chapter-select .step-art{object-fit:cover}.chapter-select:hover .step-art{box-shadow:0 0 14px #eac46c88}.chapter-path .locked .step-art{filter:grayscale(1)}
.world-open main{max-width:1700px;padding:20px 30px}.world-open{background:#071d26}.world-open #title{font-size:32px}.world-open #description{margin:6px 0 20px}.world-heading{display:flex;justify-content:space-between;align-items:center;gap:12px}.world-heading h2{margin:10px 0 20px}.world-layout{display:grid;grid-template-columns:minmax(0,1fr) 290px;border:1px solid #9d7d46;background:#071822;border-radius:12px;overflow:hidden}.map-viewport{overflow:auto;height:min(70vh,850px);touch-action:none;cursor:grab}.map-canvas{position:relative;width:100%;min-width:700px}.map-canvas>img{display:block;width:100%;pointer-events:none}.region-panel{padding:24px;background:linear-gradient(140deg,#172630,#0b131e);border-left:1px solid #9d7d46}.region-panel h2{color:#f0ce86;margin:12px 0}.region-panel p{font-size:14px}.region-panel details{margin:25px 0;color:#edcf8e}.region-panel li{font-size:13px;margin:10px 0}.region-panel>button{padding:10px}.region-marker{position:absolute;transform:translate(-50%,-50%);padding:9px 12px;background:#092531e8;border:1px solid #d6b46c;border-radius:4px;color:#ffe6a6;font:600 13px Georgia,serif;white-space:nowrap;box-shadow:0 4px 15px #0009;z-index:2}.region-marker:before{content:'◇';display:block;font-size:22px}.region-marker[aria-pressed=true]{background:#684c1c;box-shadow:0 0 22px #f5c76d66}.region-locked{filter:saturate(.25);opacity:.7}.region-complete:before{content:'✓'}.regional-encounter{display:block;width:100%;margin:9px 0;padding:13px;text-align:left;font-size:13px}.regional-encounter[aria-pressed=true]{border-color:#ffd583;background:#4c3c25}.region-panel #travel{margin-top:15px;width:100%}.travel-route{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.travel-route line{stroke:#ffdc88;stroke-width:.3;stroke-dasharray:1 1;opacity:.8}#travel-token{position:absolute;width:64px;transform:translate(-50%,12px);z-index:3;pointer-events:none;transition:left 1s ease-in-out,top 1s ease-in-out;background:#121b25;border:2px solid #f6ce78;box-shadow:0 0 18px #000;border-radius:5px;overflow:hidden}#travel-token img{width:60px;height:52px;object-fit:cover;object-position:65% center}#travel-token span{display:block;font-size:9px;text-align:center;color:#ffe4a5;padding:3px}#open-map{margin:18px 0}.world-open #preview-note{display:none}@media(max-width:900px){.world-layout{grid-template-columns:1fr}.map-viewport{height:55vh}.region-panel{border-left:0;border-top:1px solid #9d7d46}.world-open main{padding:16px}.world-heading h2{font-size:24px}}@media(prefers-reduced-motion:reduce){#travel-token{transition:none}}
/* The world fills the browser viewport; controls float over the map. */
body.world-open{height:100dvh;overflow:hidden;background:#073241}body.world-open>header{position:fixed;inset:0 0 auto;z-index:20;background:linear-gradient(#07151ef0,#07151e80,transparent);border:0;padding:18px 28px}body.world-open main{padding:0;max-width:none}body.world-open main>.eyebrow,body.world-open #title,body.world-open #description,body.world-open #status{display:none}body.world-open #world{position:fixed;inset:0}.world-layout{display:block;border:0;border-radius:0;background:transparent}.world-heading{position:absolute;left:28px;top:85px;z-index:5;align-items:flex-start;pointer-events:none;text-shadow:0 2px 8px #000}.world-heading button{pointer-events:auto;margin-left:24px;background:#071b29dd}.world-heading h2{margin:8px 0;font-size:28px}.world-heading p{margin:0;font-size:13px}.map-viewport{position:absolute;inset:0;width:100%;height:100%;background:#073241}.map-canvas{min-width:max(100vw,151dvh);min-height:100dvh}.region-panel{position:absolute;right:24px;bottom:24px;width:290px;max-height:calc(100dvh - 100px);overflow:auto;border:1px solid #a88849;border-radius:10px;background:#091a25ed;box-shadow:0 12px 45px #0008;backdrop-filter:blur(12px);z-index:6;padding:20px}.region-panel h2{font-size:29px}.region-panel details{margin:15px 0}.map-region-label{position:absolute;transform:translate(-50%,-50%);font:14px Georgia,serif;color:#f9e1aa99;text-shadow:0 2px 5px #000;pointer-events:none;white-space:nowrap}.region-marker{border:2px solid #ffe4a2;background:#12373bf2;box-shadow:0 0 0 6px #eac67618,0 0 25px #f1c65a66}.region-marker:before{content:'◇';font-size:28px}.region-panel #world-replays button{display:block;padding:8px;margin:6px 0;width:100%;font-size:12px;text-align:left}@media(max-width:700px){body.world-open>header{padding:12px 14px}.world-heading{left:16px;top:65px;right:16px;justify-content:space-between}.world-heading h2{font-size:22px}.world-heading button{font-size:11px;padding:9px;margin-left:8px}.region-panel{right:12px;bottom:12px;left:12px;width:auto;max-height:42dvh;padding:14px}.region-panel h2{font-size:23px}.region-panel #region-description{display:none}.region-panel .fine{display:none}.region-panel>button{padding:8px}.region-panel #travel{margin-top:6px}.regional-encounter{padding:9px;margin:6px 0}.map-region-label{font-size:12px}}
#next-paths{display:flex;gap:8px;margin-top:14px;pointer-events:auto}#next-paths button{margin:0;padding:8px 16px;background:#092b36e8;border-color:#c9a75a;font-size:13px}#next-paths button:hover{background:#745821}

.region-marker:before{display:none}.region-marker>img{display:block;width:105px;height:65px;object-fit:cover;object-position:center 35%;border:1px solid #d9b574;border-radius:4px;margin-bottom:6px}.map-region-label>img{display:block;width:55px;height:32px;object-fit:cover;filter:grayscale(.6) brightness(.6);border:1px solid #9c875d88;border-radius:3px;margin:0 auto 4px}#battlefield-rewards{display:flex;justify-content:center;gap:22px;margin:25px 0;flex-wrap:wrap}.battlefield-reward{width:240px;padding:12px;background:#121c29;text-align:left;border:2px solid #647183}.battlefield-reward img{width:100%;border-radius:8px}.battlefield-reward strong{display:block;margin-top:10px;color:#ffe3a1}.battlefield-reward p{font-size:12px;max-height:100px;overflow:auto}.battlefield-reward[aria-pressed=true]{border-color:#ffde8e;box-shadow:0 0 25px #eabe5d55;transform:translateY(-5px)}@media(max-width:700px){.region-marker>img{width:78px;height:48px}.battlefield-reward{width:min(280px,100%)}}
#campaign-battlefield-label{display:block;margin:12px 0}#campaign-battlefield{display:block;width:100%;padding:10px;background:#191321;color:#ffe4a4;border:1px solid #b99552;margin-top:8px}

/* Artwork itself defines the entire scrollable surface. */
.map-viewport{overscroll-behavior:none;scrollbar-width:none}.map-viewport::-webkit-scrollbar{display:none}
.map-canvas{margin:0;min-width:0;min-height:0;overflow:hidden}
@media(min-width:701px){.region-panel.panel-west{left:24px;right:auto;max-height:calc(100dvh - 240px)}}
body.world-open #world{overflow:hidden}
/* Illustrated destination folio and readable world cards. */
.region-marker{padding:10px 12px 12px;font-size:18px;transition:transform .18s,box-shadow .18s;transform:translate(-50%,-50%);border-radius:9px}.region-marker>img{width:150px;height:90px;margin-bottom:8px}.region-marker[aria-pressed=true]{transform:translate(-50%,-50%) scale(1.22);z-index:4;box-shadow:0 0 0 4px #ffdc8766,0 12px 32px #000b;background:#584322}.map-region-label{font-size:16px}.map-region-label>img{width:72px;height:43px}#travel-token{transform:translate(95px,45px);width:82px}#travel-token img{width:78px;height:64px}#travel-token span{font-size:11px}.region-panel{width:360px;padding:155px 28px 24px;border:0;border-radius:5px;background:#081e25 url('/campaign/media/chapter-folio.png') center top/100% auto no-repeat;box-shadow:0 18px 65px #000b,inset 0 0 0 1px #bf9c53;scrollbar-width:thin;scrollbar-color:#957341 #0a2027}.region-panel h2{font-size:38px;margin:8px 0 12px}.region-panel #region-kicker{letter-spacing:.24em;font-size:12px;color:#ffe3a4}.region-panel #region-description{font-size:15px;color:#e6e3d4;line-height:1.6}.regional-encounter{font-size:15px;padding:15px 16px;border-radius:2px;border:1px solid #b4995d70;background:linear-gradient(100deg,#1b3b41,#10232d)}.regional-encounter[aria-pressed=true]{background:linear-gradient(100deg,#685020,#2f2b1e);border-color:#ebc472;box-shadow:inset 3px 0 #ffe2a1}.regional-encounter:disabled{opacity:.6;cursor:not-allowed}.region-panel #travel{font-family:Georgia,serif;font-size:20px;letter-spacing:.04em;padding:17px 14px;border:1px solid #ffe8aa;border-radius:2px;background:linear-gradient(#ffe4a3,#be8e39);box-shadow:0 3px 0 #71501e,inset 0 0 0 3px #aa7e3366}.region-panel details{font-size:14px;padding-top:12px;border-top:1px solid #ac8a4933}.region-panel #region-status{font-size:13px;color:#ccbb98}.world-heading h2{font-size:34px}#next-paths button{font-size:16px;padding:11px 19px}@media(min-width:701px){.region-panel.panel-west{max-height:calc(100dvh - 225px)}}@media(max-width:700px){.region-panel{width:auto;padding:80px 20px 18px;background-size:100% auto;max-height:45dvh}.region-panel h2{font-size:28px}.region-marker>img{width:110px;height:66px}.region-marker{font-size:15px}.region-marker[aria-pressed=true]{transform:translate(-50%,-50%) scale(1.15)}.world-heading h2{font-size:24px}#next-paths button{font-size:14px}.region-panel #travel{font-size:17px;padding:12px}#travel-token{transform:translate(72px,40px)}}@media(prefers-reduced-motion:reduce){.region-marker{transition:none}}
.region-panel{background-position:center -65px;padding-top:145px}.region-panel #region-description{font-size:14px}.region-panel #region-status{margin-bottom:8px}@media(max-width:700px){.region-panel{background-position:center -110px;padding-top:100px}}
.region-panel{padding:24px 28px;background:#09232b;border:1px solid #be9b52;background-image:none}.region-illustration{height:140px;margin:-24px -28px 22px;background:url('/campaign/media/chapter-folio.png') center top/100% auto no-repeat;border-bottom:2px solid #b5965b}.region-panel.panel-west{max-height:calc(100dvh - 250px)}.map-tools{position:absolute;right:24px;bottom:24px;z-index:9;display:flex;gap:6px}.map-tools button{padding:12px 18px;background:#0b242de8;border-color:#b5965b;font-size:17px}.region-panel:not(.panel-west){bottom:88px;max-height:calc(100dvh - 170px)}@media(max-width:700px){.region-panel,.region-panel.panel-west,.region-panel:not(.panel-west){padding:16px 20px;bottom:65px;max-height:40dvh}.region-illustration{height:90px;margin:-16px -20px 16px}.map-tools{bottom:10px;right:12px}.map-tools button{padding:8px 15px}}
/* Regional arrivals fill the viewport without requesting native fullscreen. */
.regional-cinema{position:fixed;inset:0;margin:0;padding:0;width:100vw;max-width:none;height:100dvh;max-height:none;border:0;background:#000;color:#fff;overflow:hidden}
.regional-cinema::backdrop{background:#000}
.regional-stage{position:absolute;inset:0;display:grid;place-items:center}
.regional-stage video,.regional-stage img{width:100%;height:100%;min-width:0;min-height:0;object-fit:contain}
.regional-cinema h2{position:absolute;top:16px;left:24px;right:24px;margin:0;font-size:clamp(18px,3vw,28px);text-shadow:0 2px 6px #000}
.regional-label{position:absolute;top:60px;left:24px;right:24px;background:#000a;padding:8px;font-size:14px}
.regional-label:empty,.regional-subtitles:empty{display:none}
.regional-subtitles{position:absolute;bottom:calc(90px + env(safe-area-inset-bottom));left:5%;width:90%;margin:0;text-align:center;white-space:pre-line;background:#000b;padding:12px;font-size:clamp(16px,2.4vw,28px);line-height:1.4;box-sizing:border-box}
.regional-cinema nav{position:absolute;bottom:max(16px,env(safe-area-inset-bottom));left:12px;right:12px;display:flex;flex-wrap:wrap;justify-content:center;gap:10px}
.regional-cinema button{min-height:44px;background:#16222b;color:#ffe3a0;border:1px solid #d3ac58;padding:10px 16px}
body.regional-fade:after{content:'';position:fixed;inset:0;background:#000;z-index:100;animation:regional-fade .25s both;pointer-events:all}
@keyframes regional-fade{from{opacity:0}to{opacity:1}}
@media(max-width:500px){.regional-cinema h2{left:16px}.regional-cinema button{font-size:12px;padding:10px}.regional-subtitles{bottom:120px}}
@media(prefers-reduced-motion:reduce){body.regional-fade:after{animation:none}}

/* Regional encounter artwork and selected challenge. */
.region-panel{width:370px;padding:0 22px 20px;overflow-y:auto;background:linear-gradient(145deg,#14262b,#071116);border:1px solid #b99a56;border-radius:12px;box-shadow:0 16px 50px #000b}
.region-illustration{height:205px;margin:0 -22px;background-size:cover;background-position:center;border-bottom:1px solid #b99a56;mask-image:linear-gradient(#000 65%,transparent)}
.region-panel #region-kicker{margin-top:-45px;position:relative;font-size:10px}.region-panel h2{position:relative;margin:8px 0;font-size:40px}.region-panel #region-description{font-size:13px;line-height:1.45;margin:0 0 16px;color:#b9c9c8}
#region-encounters{display:flex;flex-wrap:wrap;gap:7px}.regional-encounter{width:auto;flex:1;margin:0;padding:10px;font-size:12px;border-radius:6px}.regional-encounter[aria-pressed=true]{flex-basis:100%;font:24px Georgia,serif;padding:18px;background:linear-gradient(100deg,#544025,#142529);border-color:#e2bb6b}.regional-encounter:disabled{font-size:11px;opacity:.5}.region-panel .region-reward{font-size:11px;line-height:1.5;color:#e7c781;margin:14px 0}.region-panel #travel{margin-top:0;border-radius:5px}.region-panel #region-status{font-size:11px}.region-panel details{margin:12px 0}.region-panel .fine{display:none}#travel-token img{object-position:center}
@media(max-width:700px){.region-illustration{height:130px;margin:0 -20px}.region-panel,.region-panel.panel-west,.region-panel:not(.panel-west){padding-top:0;max-height:48dvh}.region-panel h2{font-size:30px}.result-cinema video{object-fit:cover}}
/* Map interaction: illustrations never participate in selection or native dragging. */
.map-viewport,.map-viewport *{-webkit-user-select:none;user-select:none;-webkit-user-drag:none}
.map-canvas{--map-zoom:1}
.map-canvas .region-marker,.map-canvas .map-region-label{transform:translate(-50%,-50%) scale(var(--map-zoom));transform-origin:center;transition:none}
.map-canvas .region-marker[aria-pressed=true]{transform:translate(-50%,-50%) scale(calc(var(--map-zoom)*1.15))}
.region-concealed{opacity:1;color:#d7c498}
.locked-card{display:block;position:relative;width:78px;height:55px;margin:0 auto 5px;border:1px solid #b99a56;border-radius:5px;background:#061521;overflow:hidden;box-shadow:0 3px 12px #0009}
.locked-card>img{width:100%;height:100%;object-fit:cover;filter:brightness(.38);pointer-events:none}
.card-lock{position:absolute;inset:0;display:grid;place-items:center;font:30px/1 system-ui;text-shadow:0 2px 6px #000}
.map-card-preview{position:fixed;z-index:40;width:min(560px,calc(100vw - 32px));height:min(410px,calc(100dvh - 32px));display:grid;place-items:center;padding:10px;background:#06131bf5;border:2px solid #e0bd75;border-radius:12px;box-shadow:0 15px 65px #000d;pointer-events:none}
.map-card-preview[hidden]{display:none}
.map-card-preview img{display:block;width:100%;height:100%;min-height:0;object-fit:contain;border-radius:6px}
.campaign-home{display:inline-flex;align-items:center;gap:7px;color:#ffe5aa;text-decoration:none;border-radius:7px}
.campaign-home img{width:42px;height:42px;object-fit:contain;transition:filter .15s}
.campaign-home:hover img{filter:brightness(1.25)}
.campaign-home:focus-visible{outline:2px solid #ffe2a1;outline-offset:4px}
@media(max-width:700px){.campaign-home img{width:34px;height:34px}.campaign-home span{display:none}}
/* Viewport-sized campaign screens: content reflows instead of growing the page. */
html,body{height:100%;min-height:0}
body{height:100dvh;display:flex;flex-direction:column}
body>header{flex:0 0 auto;padding:8px 24px;min-height:54px;gap:16px}
body>main,.choosing main{flex:1;min-height:0;width:100%;max-width:1440px;margin:0 auto;padding:12px 24px;display:flex;flex-direction:column;gap:8px}
main>h1,.choosing h1{font-size:clamp(24px,3vw,40px);max-width:none;margin:0;line-height:1.08}
main>#description,.choosing #description{margin:0;font-size:14px;line-height:1.3}
main>#status{min-height:0;margin:0;font-size:12px}
main>#status:empty,main>#preview-note,.assigned-note,.menu-intro{display:none}
#choices{flex:1;min-height:0;display:grid;grid-template-columns:auto 1fr;grid-template-rows:minmax(0,1fr) auto;gap:10px;align-items:center}
#choices .encounter-panel{grid-column:1/-1;align-self:stretch;margin:0;min-height:0;padding:0;display:flex;align-items:center}
#choices .encounter-copy{width:40%;min-width:270px;padding:18px 24px}
#choices .encounter-copy h2{font-size:clamp(25px,3vw,38px);margin:6px 0}
#choices .encounter-copy p{margin:8px 0;max-width:none;line-height:1.4}
#choices .encounter-copy .panel-quote{font-size:11px;margin:6px 0}
#choices #game-panel:has(.game-one-matchup){display:grid;grid-template-columns:minmax(0,1.65fr) minmax(270px,1fr)}
#choices #game-panel .game-one-matchup{grid-column:auto;width:100%;max-width:none;min-width:0;margin:0}
#choices #game-panel:has(.game-one-matchup) .encounter-copy{width:100%;min-width:0}
#choices #open-map{margin:0;padding:10px 16px;font-size:14px}
#choices .chapter-path{padding:0;margin:0;border:0;justify-self:end;gap:8px;overflow:visible}
#choices .chapter-path li{flex:0 1 auto}
#choices .chapter-select{padding:6px 12px}
#choices .step-art,#choices .chapter-path small{display:none}
#choices .chapter-path strong{font-size:12px}
#choices #campaign-deck-label,#choices #campaign-battlefield-label{margin:7px 0;font-size:12px}
#choices select{padding:7px;margin-top:4px}
#regional-replays{display:flex;flex-wrap:wrap;gap:4px}
#regional-replays button{padding:6px;font-size:11px}
body:not(.result-cinema) #cinema{flex:1;min-height:0;aspect-ratio:auto;margin:0;width:100%}
body:not(.result-cinema) #actions{margin:0;flex-shrink:0}
#reward-panel{flex:1;min-height:0;padding:14px;display:flex;flex-direction:column;align-items:center;gap:8px}
#reward-panel h2,#reward-panel p{margin:0}
#battlefield-rewards{flex:1;min-height:0;width:100%;margin:0;flex-wrap:nowrap;gap:12px;align-items:stretch}
.battlefield-reward{flex:1;max-width:320px;min-width:0;min-height:0;display:flex;flex-direction:column;padding:8px}
.battlefield-reward img{min-height:0;flex:1;object-fit:contain;width:100%}
.battlefield-reward p{max-height:none;overflow:visible;font-size:11px;line-height:1.25;margin:5px 0}
.battlefield-reward strong{font-size:13px}
.region-panel,.region-panel.panel-west,.region-panel:not(.panel-west){max-height:calc(100dvh - 210px);padding:12px 16px;overflow:visible;width:330px;bottom:72px}
.region-illustration{height:clamp(40px,12dvh,130px);margin:-12px -16px 8px}
.region-panel #region-kicker{margin:0}.region-panel h2{font-size:28px;margin:4px 0}
.region-panel #region-description{font-size:12px;margin:4px 0 8px}
.regional-encounter[aria-pressed=true]{flex-basis:auto;font-size:16px;padding:10px}
.region-panel #travel{font-size:17px;padding:10px}
.region-panel .region-reward,.region-panel #region-status,.region-panel details{margin:6px 0;font-size:11px;padding-top:4px}
.region-panel details[open]{position:absolute;inset:auto 0 0;background:#081b24;border:1px solid #bc9b57;padding:12px;z-index:12}
#region-encounters{gap:4px}.region-panel #world-replays{display:grid;grid-template-columns:1fr 1fr;gap:3px}.region-panel #world-replays button{margin:0;padding:6px}
#world-decks{display:grid;grid-template-columns:1fr 1fr;gap:5px;list-style:none;padding:0;font-size:12px}
#next-paths{flex-wrap:wrap;gap:4px;max-width:65vw}#next-paths button{font-size:12px;padding:7px 10px}
@media(max-width:700px){
 body>header{padding:6px 12px;gap:8px;min-height:46px}header>span{display:none}
 body>main,.choosing main{padding:10px 12px;gap:6px}.choosing h1{font-size:25px}.choosing #description{font-size:12px}
 #choices{gap:6px}#choices .encounter-copy{padding:12px 16px;width:100%;min-width:0}
 #choices .encounter-panel{padding-top:0}#choices #game-panel:has(.game-one-matchup){display:flex;flex-direction:column;justify-content:center}
 #choices #game-panel .game-one-matchup{width:min(100%,calc((100dvh - 400px)*16/9));flex:0 1 auto}
 #choices .encounter-copy h2{font-size:26px}#choices .encounter-copy .ornate{padding:10px}
 #choices .encounter-copy p{font-size:12px}#choices .encounter-copy .panel-quote{display:none}
 #choices #open-map{font-size:12px;padding:9px}#choices .chapter-select{padding:7px}#choices .chapter-path strong{font-size:10px}
 .region-panel,.region-panel.panel-west,.region-panel:not(.panel-west){left:12px;right:12px;width:auto;max-height:none;bottom:58px;padding:10px 14px}
 .region-illustration{display:none}.region-panel #region-kicker{display:none}.region-panel h2{font-size:23px}
 #battlefield-rewards{gap:4px}.battlefield-reward{padding:4px}.battlefield-reward p{font-size:10px}.battlefield-reward strong{font-size:11px}
 #reward-panel{padding:8px}#reward-panel h2{font-size:24px}#reward-panel>p{font-size:12px}
}
@media(max-height:600px){
 body>header{min-height:38px;padding:4px 14px}.campaign-home img{height:28px;width:28px}
 main>.eyebrow,main>#description{display:none}.choosing h1,main>h1{font-size:24px}
 body>main,.choosing main{padding:6px 14px;gap:4px}
 #choices .encounter-copy{padding:8px 16px}#choices .encounter-copy h2{font-size:24px}
 #choices .encounter-copy p,#choices .encounter-copy .eyebrow,#choices .encounter-copy .panel-quote{display:none}
 #choices .encounter-copy .ornate,#choices .quiet{padding:8px}#choices{gap:4px}
 #choices #game-panel:has(.game-one-matchup){display:grid;grid-template-columns:minmax(0,1fr) minmax(230px,1fr)}
 #choices #game-panel .game-one-matchup{width:100%;max-height:100%}
 .world-heading{top:48px}.world-heading h2{font-size:22px}.world-heading .eyebrow{display:none}
 .region-panel,.region-panel.panel-west,.region-panel:not(.panel-west){left:auto;right:12px;bottom:48px;width:300px;max-height:none;padding:8px 12px}
 .region-illustration,.region-panel #region-description,.region-panel #region-kicker,.region-panel #region-status{display:none}
 .region-panel h2{font-size:22px}.region-panel details{display:inline-block;margin:4px 8px 0 0}
 .region-panel #travel{padding:7px}.regional-encounter{padding:6px}
 .world-heading{right:330px}#next-paths{max-width:100%}
 #reward-panel>p{font-size:11px}#reward-panel h2{font-size:22px}
}
@media(max-height:600px){.map-tools{bottom:8px;right:12px}.map-tools button{padding:6px 12px;font-size:14px;min-height:32px}}

/* Quiet map masthead; destinations are selected directly on the map. */
body.world-open .world-heading{left:30px;right:auto;top:88px;pointer-events:none}
body.world-open .world-heading h2{margin:0;font-family:Georgia,'Times New Roman',serif;font-size:clamp(36px,4.8vw,70px);font-weight:normal;line-height:1.1;letter-spacing:.1em;text-transform:uppercase;color:#ffe7af;text-shadow:0 2px 3px #041c24,0 5px 24px #041c24cc}
body:not(.world-open) #world-back{display:none}
#world-back{display:inline-flex;align-items:center;gap:7px;padding:7px 10px;border:1px solid #b99a5566;border-radius:5px;background:linear-gradient(145deg,#18373de6,#081923ed);color:#f2d799;white-space:nowrap}
#world-back svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linejoin:round}
#world-back span{flex:none;font-size:10px;letter-spacing:.06em;color:inherit}
@media(max-width:700px){body.world-open .world-heading{left:16px;top:72px}body.world-open .world-heading h2{font-size:36px}#world-back{margin-left:auto;padding:6px}#world-back span{display:none}}
@media(max-height:600px){body.world-open .world-heading{top:58px}body.world-open .world-heading h2{font-size:32px}}

/* Game 1: once the VS art has loaded, take the whole page like the regional
   matchup screens: art on top, controls in a bar beneath it. */
#choices #game-panel:has(.game-one-matchup){position:fixed;inset:0;z-index:60;margin:0;border:0;box-shadow:none;clip-path:none;min-height:0;padding:0;display:flex;flex-direction:column;justify-content:normal;align-items:stretch;background:#050c12;overflow:hidden}
#choices #game-panel:has(.game-one-matchup):before,#choices #game-panel:has(.game-one-matchup):after{display:none}
#choices #game-panel .game-one-matchup{flex:0 1 auto;min-height:0;align-self:center;margin:auto 0;width:min(100vw,calc((100dvh - 78px)*16/9));max-height:100%;max-width:none}
#choices #game-panel:has(.game-one-matchup) .encounter-copy{flex:0 0 auto;margin-top:0;width:100%;min-width:0;padding:10px 20px;display:flex;align-items:center;justify-content:center;gap:6px 18px;flex-wrap:wrap;border-top:1px solid #ac8747;background:linear-gradient(#132633,#071219)}
#choices #game-panel:has(.game-one-matchup) .encounter-copy>p,#choices #game-panel:has(.game-one-matchup) .encounter-copy .eyebrow{display:none}
#choices #game-panel:has(.game-one-matchup) .encounter-copy h2{margin:0;font-size:clamp(22px,2.2vw,30px);line-height:1}
#choices #game-panel:has(.game-one-matchup) .encounter-copy .encounter-meta{margin-right:auto;line-height:1.2}
#choices #game-panel:has(.game-one-matchup) .encounter-copy .ornate{width:auto;min-width:220px;padding:12px 30px}
.encounter-copy .explore-map{margin-top:8px;background:linear-gradient(#2a2417,#171208);color:#f1d9a3;box-shadow:inset 0 0 0 3px #7a6236,inset 0 0 0 4px #2a2417;border-color:#a98a43}
.encounter-copy .explore-map:disabled{opacity:.55;cursor:not-allowed;filter:none;transform:none}
#choices #game-panel:has(.game-one-matchup) .encounter-copy .explore-map{margin-top:0}
#choices #game-panel:has(.game-one-matchup) .encounter-copy .quiet{display:inline-block;width:auto;padding:11px 10px}
@media(max-width:700px){
 #choices #game-panel:has(.game-one-matchup){display:flex;justify-content:normal}
 #choices #game-panel .game-one-matchup{width:min(100vw,calc((100dvh - 110px)*16/9))}
 #choices #game-panel:has(.game-one-matchup) .encounter-copy{padding:8px 12px;gap:6px 10px;justify-content:center}
 #choices #game-panel:has(.game-one-matchup) .encounter-copy .encounter-meta{margin-right:0;flex-basis:100%;text-align:center}
 #choices #game-panel:has(.game-one-matchup) .encounter-copy h2{flex-basis:100%;text-align:center}
 #choices #game-panel:has(.game-one-matchup) .encounter-copy .ornate{min-width:0;flex:1}
}

/* Illustrated encounter plaques, with short champion labels in every state. */
#region-encounters { display:grid; grid-template-columns:repeat(auto-fit,minmax(115px,1fr)); gap:8px; }
#region-encounters .regional-encounter {
 position:relative; width:100%; min-height:58px; margin:0; padding:12px 15px;
 border:0; border-radius:7px; background:#081e25 url('/campaign/media/encounter-button-v1.png') center/100% 100% no-repeat;
 color:#f5dfac; font:600 15px/1.2 Georgia,serif; text-align:center;
 box-shadow:none; transition:filter .15s,box-shadow .15s; flex-basis:auto;
}
#region-encounters .regional-encounter[aria-pressed=true] { color:#fff2cb; box-shadow:0 0 0 1px #efcd83,0 0 15px #d4ad4438; filter:brightness(1.25); }
#region-encounters .regional-encounter:not(:disabled):hover { filter:brightness(1.4); }
#region-encounters .regional-encounter:focus-visible { outline:2px solid #fff0bb; outline-offset:3px; }
#region-encounters .regional-encounter:disabled { opacity:.65; filter:saturate(.25); padding-bottom:23px; cursor:not-allowed; }
#region-encounters .regional-encounter:disabled::after { content:'🔒'; position:absolute; bottom:6px; left:0; right:0; font:10px/1 sans-serif; }
@media(prefers-reduced-motion:reduce){#region-encounters .regional-encounter{transition:none}}

/* Victory returns directly to the map, where rewards belong. */
.victory-cinema .cinema:after{display:none}
.victory-cinema #dialogue{bottom:5%;pointer-events:none}
.world-open #reward-panel{position:absolute;z-index:30;left:50%;top:50%;transform:translate(-50%,-50%);width:min(880px,92vw);max-height:82dvh;overflow:auto;box-sizing:border-box;flex:none;padding:24px;background:linear-gradient(145deg,#102e36f5,#071823f5);border:1px solid #d4af63;box-shadow:0 15px 70px #000b}
.world-open #battlefield-rewards{flex:none;align-items:start;margin:16px 0}
.world-open .battlefield-reward{flex:1;height:auto;min-height:0}
.world-open .battlefield-reward img{flex:none;height:auto;aspect-ratio:1.4;object-fit:contain}
.world-open #status:not(:empty){display:block;position:fixed;bottom:8px;left:5%;z-index:40;background:#071823;padding:10px}
@media(max-width:600px){.world-open #reward-panel{padding:14px}.world-open #battlefield-rewards{flex-wrap:wrap}.world-open .battlefield-reward{flex-basis:45%}}

/* Painted button assets; labels remain accessible live text. */
#region-encounters .regional-encounter{
 background:transparent url('/campaign/media/map-ui/encounter-button-v2.png') center/100% 100% no-repeat;
 min-height:64px;padding:16px 18px;border-radius:0;text-shadow:0 2px 3px #000;
}
#region-encounters .regional-encounter[aria-pressed=true]{box-shadow:none;filter:brightness(1.3) drop-shadow(0 0 5px #ebc36980)}
#region-encounters .regional-encounter:disabled{opacity:.7;filter:grayscale(.8) brightness(.75);padding-bottom:23px}
.region-panel #travel{
 background:transparent url('/campaign/media/map-ui/travel-button-v2.png') center/100% 100% no-repeat;
 border:0;border-radius:0;box-shadow:none;min-height:68px;padding:15px 38px 22px;
 color:#25180a;text-shadow:0 1px #ffe7a7;font:700 18px/1.15 Georgia,serif;
}
.region-panel #travel:not(:disabled):hover{filter:brightness(1.15) drop-shadow(0 0 5px #d8b96e66)}
.region-panel #travel:disabled{filter:grayscale(.75);opacity:.65}
.campaign-options-button{padding:8px 10px;font-size:11px;white-space:nowrap;background:#10232dec;border-color:#b99a5570;color:#f2d799}
body>header .campaign-options-button{order:1}
#campaign-story-options{width:min(460px,calc(100vw - 32px));max-height:calc(100dvh - 32px);padding:24px;border:1px solid #b99a55;border-radius:12px;background:#10232d;color:#f7f0df;overflow:auto}
#campaign-story-options::backdrop,#campaign-intro-replay::backdrop{background:#020914d9;backdrop-filter:blur(5px)}
#campaign-story-options h2{margin:0 0 22px;font-size:28px;color:#ffe4a8}
#campaign-story-options>button{display:block;width:100%;text-align:left;border-color:#b99a5570;background:#203744}
#campaign-story-options p{font-size:14px;margin:8px 0 22px;line-height:1.5}
#campaign-story-options form{text-align:right}
#campaign-intro-replay{width:min(1280px,calc(100vw - 24px));height:min(820px,calc(100dvh - 24px));max-width:none;max-height:none;padding:0;border:1px solid #b99a55;border-radius:10px;background:#05080d;color:#fff;overflow:hidden}
.intro-replay-layout{height:100%;display:flex;flex-direction:column;min-height:0}
#campaign-intro-replay video{flex:1;min-height:0;width:100%;object-fit:contain}
.intro-replay-actions{display:flex;justify-content:flex-end;gap:8px;padding:12px;flex-shrink:0;background:#10232d}
.intro-replay-actions button{padding:10px 16px;font-size:14px}
.intro-replay-status{margin:0;padding:0 12px 8px;font-size:13px;background:#10232d}
.intro-replay-status:empty{display:none}
@media(max-width:700px){body>header .campaign-options-button{font-size:10px;padding:7px}body>header{flex-wrap:wrap}#campaign-story-options{padding:20px}.intro-replay-actions{gap:6px;padding:8px}.intro-replay-actions button{font-size:12px;padding:9px 10px}}
