:root{--cream:#fff0cc;--gold:#f5bb4c;--ink:#102c37;--red:#e85a42}*{box-sizing:border-box}body{margin:0;background:var(--ink);color:var(--cream);font-family:Trebuchet MS,Arial,sans-serif}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;cursor:pointer;color:inherit;background:none;border:1px solid #ffffff40;border-radius:7px;padding:12px 17px;font-weight:bold}button:hover{background:#ffffff15}button:focus-visible,a:focus-visible{outline:3px solid var(--gold);outline-offset:4px}header,footer{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:24px 4vw}header{border-bottom:1px solid #ffffff22}.brand{font-weight:1000;font-size:32px;color:var(--gold);text-decoration:none}.brand span{font-size:10px;letter-spacing:2px;color:var(--cream);vertical-align:middle;margin-left:12px}.edition,footer,.controls,.bottomline,.eyebrow,.gamefoot{font-size:10px;letter-spacing:2px}header button{font-size:12px}main{max-width:1500px;margin:auto}#lobby{position:relative;display:grid;grid-template-columns:43% 57%;padding:55px 4vw 25px;gap:0}.eyebrow{color:var(--gold);font-weight:bold;margin-bottom:22px}h1{font-family:Impact,'Arial Black',sans-serif;font-size:clamp(80px,9vw,145px);line-height:.84;letter-spacing:-3px;margin:30px 0;transform:rotate(-3deg);text-shadow:4px 5px 0 #071e28}h1 em{font-style:normal;color:var(--red)}h1>span{font-size:65px;position:absolute;color:var(--gold);margin:20px}.tagline{font-size:24px;line-height:1.35;font-weight:bold}.description{max-width:350px;color:#b5c7c5;line-height:1.7;font-size:14px}.primary{background:var(--gold);color:var(--ink);border:0;padding:18px 25px;letter-spacing:1px;box-shadow:0 5px 0 #b77b25;margin:20px 0}.primary:hover{background:#ffd47e;transform:translateY(-1px)}.primary span{margin-left:10px}.controls{font-size:9px;letter-spacing:1px;color:#9eb7b5}.postcard{position:relative;align-self:center;transform:rotate(3deg);padding:10px;background:var(--cream);box-shadow:0 20px 70px #00161d90;border-radius:3px}.postcard img{width:100%;aspect-ratio:1.25;object-fit:cover;display:block}.stamp{position:absolute;right:25px;top:25px;border:2px solid var(--cream);border-radius:50%;height:100px;width:100px;text-align:center;padding:17px;font-size:10px;letter-spacing:2px;transform:rotate(12deg);background:#102c3770}.stamp b{font-size:23px}.postcard-caption{color:var(--ink);display:flex;justify-content:space-between;font-size:9px;letter-spacing:2px;padding:14px 7px 6px}.bottomline{grid-column:1/-1;display:flex;justify-content:space-between;border-top:1px solid #ffffff22;margin-top:55px;padding-top:22px;color:#a8bfba}footer{color:#87a39e;font-size:8px}h2{font-family:Impact,'Arial Black',sans-serif;font-size:clamp(38px,5vw,68px);letter-spacing:1px;line-height:1.05;margin:16px 0}#selection,#invite{text-align:center;padding:35px 4vw;max-width:1050px;margin:auto}#selection>p,#invite>p{color:#bdccbf}#heroes{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:28px 0}#heroes button{padding:10px;background:#1c3c44;border:2px solid transparent}#heroes button[aria-pressed=true]{border-color:var(--gold);background:#34524b}.portrait{height:135px;overflow:hidden;position:relative}.portrait img{position:absolute;width:400%;height:200%;max-width:none;left:calc(var(--col)*-100%);top:calc(var(--row)*-100%);object-fit:fill}#heroes b{display:block;color:var(--gold);letter-spacing:2px;font-size:12px;margin-top:8px}.text{border:0;display:block;margin:10px auto;color:#b9c9c3}.hud{display:flex;justify-content:space-between;align-items:center;padding:22px 25px}.hud small{color:var(--gold);font-size:10px;letter-spacing:2px;display:block;margin-bottom:5px}.hud b{font-size:20px}.stats{display:flex;gap:12px;align-items:center}.stats button{font-size:11px}#stage{position:relative;overflow:hidden;background:#204557}canvas{display:block;width:100%;height:min(61vh,580px);min-height:340px;touch-action:none}#dialogue{position:absolute;left:24px;top:18px;width:min(460px,80%);background:#102c37ed;border:1px solid #f5bb4c80;border-radius:8px;padding:14px 18px;pointer-events:none}#speaker{font-size:9px;letter-spacing:2px;color:var(--gold)}#line{margin:7px 0 0;font-size:14px;line-height:1.4}.progress{position:absolute;bottom:0;height:5px;width:100%;background:#102c37}.progress i{display:block;height:100%;background:var(--gold);width:0}.gamefoot{display:flex;justify-content:space-between;padding:20px;font-size:9px;letter-spacing:1px}#pausePanel{position:absolute;inset:0;background:#102c37dd;display:grid;place-content:center;text-align:center}#pausePanel[hidden],[hidden]{display:none!important}.details{display:flex;justify-content:center;gap:65px;border-block:1px solid #ffffff22;margin:30px 0;padding:10px}.details small{display:block;font-size:9px;color:var(--gold);letter-spacing:2px;margin-bottom:10px}.rsvp{max-width:480px;margin:30px auto;padding:24px;background:#1d4145;border-radius:10px}.rsvp>b{color:var(--gold);letter-spacing:2px;font-size:11px}.rsvp p{font-size:13px;line-height:1.5}#invite h2{color:var(--gold)}@media(max-width:700px){header{padding:15px 5vw}.edition,.brand span{display:none}header button{font-size:11px}#lobby{display:flex;flex-direction:column;padding:25px 7vw}h1{font-size:100px;margin:26px 0}.intro{z-index:1}.tagline{font-size:21px}.description{max-width:100%}.postcard{margin:25px 0 10px;width:100%}.postcard img{aspect-ratio:1.5}.bottomline{gap:20px;font-size:8px;margin-top:25px}.bottomline span:last-child{display:none}#heroes{grid-template-columns:repeat(2,1fr);gap:8px}.portrait{height:110px}.hud{padding:15px 12px}.hud b{font-size:16px}.stats{gap:6px}.stats button{padding:10px 8px}#dialogue{left:12px;top:12px;padding:12px;width:85%}canvas{height:60vh;min-height:380px}.gamefoot{font-size:8px;gap:20px;line-height:1.6}.gamefoot span:last-child{display:none}.details{gap:25px;font-size:13px}footer{padding:20px;font-size:7px;letter-spacing:1px}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}}
/* Retro console edition: crisp cartridge framing, warm phosphor and scanlines. */
:root{--cream:#fff1c7;--gold:#ffd15c;--red:#ed644d}
button{border-radius:2px;box-shadow:3px 3px 0 #061c26;letter-spacing:.5px}
.primary{border:2px solid #102c37;box-shadow:5px 5px 0 #071a24;font-family:'Courier New',monospace;font-weight:900}
.primary:hover{transform:translate(-1px,-1px);box-shadow:6px 6px 0 #071a24}
.eyebrow,.edition,.controls,.bottomline,.hud small,.stats,.gamefoot,footer,.postcard-caption,#speaker,#heroes b{font-family:'Courier New',monospace;font-weight:700}
h1{text-shadow:3px 3px 0 #102c37,6px 6px 0 #f5bb4c,10px 10px 0 #061a24;letter-spacing:0}
h2{text-shadow:3px 3px 0 #061a24}
.postcard{border:3px solid #ffd15c;border-radius:0;box-shadow:9px 9px 0 #061a24}
.postcard:after,#stage:after{content:'';position:absolute;inset:0;pointer-events:none;background:repeating-linear-gradient(0deg,transparent 0px,transparent 3px,#06203219 3px,#06203219 4px);z-index:2}
#game{margin:22px 3vw;border:3px solid #ffd15c;box-shadow:7px 7px 0 #061a24}
.hud{background:#0a222e;border-bottom:3px solid #ffd15c}
.hud b{font-family:'Courier New',monospace;text-transform:uppercase;font-size:18px}
#dialogue{border-radius:0;border:2px solid #ffe4a0;box-shadow:4px 4px 0 #10202a}
.progress{height:8px;border-top:2px solid #102c37}
.progress i{background:repeating-linear-gradient(90deg,#ffd15c 0,#ffd15c 15px,#f49a40 15px,#f49a40 18px)}
#heroes button{border-radius:0;box-shadow:4px 4px 0 #061a24}
#heroes button[aria-pressed=true]{box-shadow:4px 4px 0 #ffd15c}
#pausePanel{z-index:3}.rsvp{border-radius:0;border:2px solid #ffd15c;box-shadow:6px 6px 0 #061a24}
@media(max-width:700px){#game{margin:12px 8px}.hud{padding:13px 8px}.hud b{font-size:13px}.stats{font-size:13px}.stats button{font-size:10px;padding:9px 6px}.postcard{box-shadow:6px 6px 0 #061a24}}
.portrait canvas{width:100%;height:100%;min-height:0;display:block;object-fit:contain}
.giftgoal{font:700 12px 'Courier New',monospace;color:var(--gold);padding:15px 20px 0;margin:0}.results,.leaderboard{text-align:left;border:2px solid #f5bb4c80;padding:24px;margin:25px auto;max-width:780px;background:#17383f}.results h3,.leaderboard h3{font-family:'Courier New',monospace;color:var(--gold);text-transform:uppercase}#tally{display:grid;grid-template-columns:1fr 1fr;gap:10px;font-size:13px;line-height:1.5}#scorebreakdown{font-weight:bold;line-height:1.8}.rules,.leaderboard>p{font-size:12px;line-height:1.7;color:#bdccbf}.save-row{display:flex;gap:10px;margin-top:10px}input{background:#0b2631;color:var(--cream);border:2px solid #b1bbaa;padding:12px;font:inherit;min-width:0;flex:1}label{font-size:12px}button:disabled{opacity:.5;cursor:default}.board-scroll{overflow-x:auto}table{width:100%;border-collapse:collapse;font-size:13px}th,td{padding:12px 7px;text-align:left;border-bottom:1px solid #ffffff25}th{color:var(--gold);font-family:monospace}#saveStatus{font-size:12px;line-height:1.5}.hud{flex-wrap:wrap}.stats{flex-wrap:wrap}#giftcount{color:var(--gold);font-size:11px}@media(max-width:700px){.hud>div:first-child{width:100%;margin-bottom:10px}.stats{width:100%;justify-content:space-between}#tally{grid-template-columns:1fr}.results,.leaderboard{padding:16px}.save-row{flex-wrap:wrap}.save-row button{width:100%}}

.route-map{display:flex;justify-content:space-between;gap:8px;padding:12px 18px;background:#0a222e;border-bottom:2px solid #ffd15c55;font:700 10px 'Courier New',monospace;color:#789b9b}.route-stop{padding:6px 8px;border:1px solid transparent}.route-stop.active{background:var(--gold);color:var(--ink);box-shadow:3px 3px 0 #0006}.route-stop.visited{color:var(--cream);border-color:#ffd15c55}#chapterBanner{position:absolute;inset:0;z-index:4;background:#102c37ed;display:grid;align-content:center;justify-items:center;text-align:center;padding:25px;pointer-events:none}#chapterBanner small{font:700 11px 'Courier New',monospace;letter-spacing:3px;color:var(--gold)}#chapterBanner h2{color:var(--cream);font-size:clamp(35px,5vw,65px)}#chapterBanner p{color:#c1d0c5;max-width:340px;line-height:1.6;font-size:15px}@media(max-width:700px){.route-map{padding:9px 5px;gap:3px;font-size:8px}.route-stop{padding:6px 3px}.gamefoot #locationlabel{display:block;max-width:105px;text-align:right}.gamefoot #hint{max-width:210px}}
#pausePanel{z-index:6}

.host-frame{position:relative;overflow:hidden;width:76px;height:90px;flex:0 0 76px;background:#f6df9c10;border:1px solid #ffd15c55}.host-frame img{position:absolute;max-width:none;width:300%;height:200%;left:0;top:0;object-fit:fill}#dialogue{display:flex;gap:12px;align-items:center;width:min(520px,88%)}.dialogue-copy{min-width:0}.host-cards{display:flex;gap:14px;margin:20px 0 3px;flex-wrap:wrap}.host-card{display:flex;gap:9px;align-items:center}.host-card .host-frame{width:58px;height:68px;flex-basis:58px}.host-card b{display:block;font:900 12px 'Courier New',monospace;color:var(--gold);letter-spacing:1px}.host-card small{display:block;font:700 8px 'Courier New',monospace;color:#b1c6c0;max-width:95px;line-height:1.5;margin-top:4px}@media(max-width:700px){#dialogue{gap:9px;padding:10px;width:90%}#dialogue .host-frame{width:64px;height:78px;flex-basis:64px}#line{font-size:12px}#speaker{font-size:8px;letter-spacing:1px}.host-cards{gap:12px}}

/* Location notices never interrupt the run. */
#chapterBanner{inset:auto 14px 16px auto;max-width:300px;display:block;text-align:left;padding:12px 16px;background:#102c37dc;border:1px solid #ffd15c80;box-shadow:3px 3px 0 #061a24;z-index:3;pointer-events:none}#chapterBanner small{font-size:8px;letter-spacing:1px}#chapterBanner h2{font-family:'Courier New',monospace;font-size:16px;margin:5px 0}#chapterBanner p{font-size:11px;margin:3px 0;line-height:1.35}
#arrivalGreeting{position:absolute;top:14px;right:18px;width:min(470px,78%);padding:16px 22px;background:#102c37ef;border:2px solid #ffd15c;box-shadow:5px 5px 0 #061a24;z-index:4}#arrivalGreeting small{color:var(--gold);font:900 13px 'Courier New',monospace;letter-spacing:2px}#arrivalGreeting p{font-size:13px;line-height:1.5;margin:8px 0}#arrivalGreeting b{color:var(--gold)}#arrivalGreeting .primary{font-size:11px;margin:8px 0;padding:12px}#arrivalCount{color:#b6cbc2;font-size:11px!important}
#stage:has(#arrivalGreeting:not([hidden])) #dialogue{display:none}
@media(max-width:700px){#chapterBanner{max-width:225px;padding:9px 12px}#arrivalGreeting{left:12px;right:12px;width:auto;top:12px;padding:13px 16px}#arrivalGreeting p{font-size:12px}#arrivalGreeting .primary{font-size:10px}}

.preview-home{margin:12px 0 4px;padding-left:0;text-align:left;font-size:12px;box-shadow:none}

/* Phone play: equal horizontal/vertical canvas scale, uncluttered playfield. */
#dialogue,#chapterBanner{display:none!important}
body[data-screen="game"] header,body[data-screen="game"] footer{display:none}
#game{margin:0;border:0;box-shadow:none}
#game #stage{height:clamp(360px,65dvh,580px)}
#game #canvas{width:100%;height:100%;min-height:0}
#game .hud{padding:10px 12px;gap:8px}
#game .hud b{font-size:12px}
#game .route-map{padding:6px 10px}
#game .gamefoot{padding:10px 12px}
@media(max-width:700px) and (orientation:portrait){
 #game #stage{height: min(108vw,62dvh)}
 #game .hud>div:first-child{width:auto;margin:0}
 #game .stats{width:auto;gap:8px}
 #game .hud{justify-content:space-between}
 #game .hud b{display:none}
 #game .stats #score{font-size:11px}
 #game .giftgoal{font-size:11px;padding:10px 12px 0}
 #game .gamefoot #locationlabel{display:none}
 #arrivalGreeting{padding:10px;top:8px;left:8px;right:8px}
 #arrivalGreeting p{font-size:11px;margin:5px 0}
 #arrivalGreeting .primary{padding:8px;margin:4px 0}
}
@media(orientation:landscape) and (max-height:600px){
 body[data-screen="game"]{overflow:hidden;overscroll-behavior:none}
 body[data-screen="game"] main{max-width:none}
 #game{position:fixed;inset:0;height:100dvh;display:flex;flex-direction:column;padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);background:#102c37}
 #game .hud{flex:0 0 auto;padding:4px 12px;border-bottom-width:1px;min-height:42px;flex-wrap:nowrap}
 #game .hud>div:first-child{width:auto;margin:0}
 #game .hud small{margin:0;font-size:10px;letter-spacing:0}
 #game .hud b{display:none}
 #game .stats{width:auto;flex-wrap:nowrap;gap:12px;font-size:11px}
 #game .stats button{padding:7px 10px;font-size:10px}
 #game #stage{height:auto;min-height:0;flex:1}
 #game .route-map,#game .giftgoal,#game .gamefoot{display:none}
 #arrivalGreeting{top:8px;right:12px;left:auto;width:min(410px,52%);padding:10px 14px}
 #arrivalGreeting p{font-size:11px;margin:4px 0}
 #arrivalGreeting small{font-size:11px}
 #arrivalGreeting .primary{padding:9px;margin:4px 0}
 #arrivalCount{display:none}
}

/* Winter pixel-art edition: unify the entire shell with the illustrated world. */
:root{--ink:#211f38;--cream:#fff0ce;--gold:#f4ce86;--red:#dd8090}
body{background:#211f38}header,.hud,.route-map{background:#292640}.postcard:after,#stage:after{display:none}canvas,.postcard img,.host-frame img{image-rendering:pixelated}h1{transform:none;text-shadow:4px 4px #493754,7px 7px #13152a}button,.primary,#dialogue,.rsvp{border-radius:0}.postcard{transform:none}#dialogue{background:#242239eb;border-color:#bcabc9}.hud,.route-map,#game{border-color:#b7a8ca}.route-stop.active,.progress i{background:#e9c889}#heroes button,.rsvp,.results,.leaderboard{background:#302c49}#heroes button[aria-pressed=true]{background:#4b3e60}.host-frame{background:#302c49}.primary{color:#211f38;background:#f4ce86}#stage{background:#413c66}

#score{font-size:11px;letter-spacing:0}#giftcount{font-size:10px;letter-spacing:0}@media(max-width:450px){#game .stats{gap:5px;flex-wrap:wrap}#game .stats button{padding:8px 6px}}

#runFeedback{position:absolute;top:14px;left:50%;transform:translateX(-50%);max-width:92%;width:max-content;padding:12px 18px;background:#29273ff2;border:2px solid #f4ce86;color:#fff1cf;box-shadow:3px 3px #171528;z-index:5;font:bold 13px monospace;text-align:center;pointer-events:none}#runFeedback[data-kind=hit]{background:#662e45f2;border-color:#ff9ca8;color:#fff0e4}@media(max-width:500px){#runFeedback{font-size:11px;padding:10px}}
