*{box-sizing:border-box}body{margin:0;min-height:100vh;overflow-x:hidden}button{touch-action:manipulation}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid #ffe08a;outline-offset:3px}button:disabled{opacity:.55;cursor:not-allowed}.modal-backdrop{position:fixed;inset:0;display:grid;place-items:center;padding:16px;background:#0e0a20dc;z-index:30}.modal{position:relative}.hidden{display:none!important}.modal h2{font-size:20px;color:#fff0c4;line-height:1.6}.inline-msg{color:#a5e1ac;font-size:12px;line-height:1.6;min-height:22px;margin-top:10px}.toast{position:fixed;z-index:60;left:50%;top:85px;transform:translateX(-50%) translateY(-15px);opacity:0;background:#fff0c4;color:#2b1b47;border:3px solid #56365e;box-shadow:4px 4px #120d25;padding:10px 15px;font-size:12px;transition:.2s;pointer-events:none;max-width:90vw}.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}.modal p{line-height:1.6}.modal-close{min-width:44px;min-height:44px}.wood-btn,.start-btn,.text-btn{min-height:44px}.shop-item,.gift-btn,.inventory-item,.nav-btn{min-height:44px}.modal-open{overflow:hidden}
/* Final raster interface */
:root{--panel:#21193f;--panel2:#2c2050;--line:#765da8;--cream:#fff0c4;--muted:#b6a9d0;--orange:#ff9b46}
body{background:radial-gradient(circle at 70% 0,#44327a 0,#191431 48%,#0e0b20 100%);color:var(--cream);font-family:"Noto Sans SC",system-ui,sans-serif}
button,input,select{font:inherit}
.topbar{height:76px;background:#13102bdd;display:flex;align-items:center;justify-content:space-between;padding:0 clamp(14px,3vw,42px);border-bottom:3px solid #57468b;position:relative;z-index:10}
.brand{display:flex;gap:10px;align-items:center}.brand .sprite{width:42px;height:42px;flex:none}.brand strong{font-family:"Press Start 2P",monospace;font-size:13px;color:#fff2cf;display:block}.brand small{display:block;color:#a69aca;font-size:9px;letter-spacing:2px;margin-top:5px}
.top-actions{display:flex;align-items:center;gap:10px}.top-actions button{border:2px solid #60498b;background:#21193f;color:#ddcfee;padding:8px 10px;cursor:pointer}.top-actions button:hover,.top-actions button[aria-pressed=true]{border-color:var(--orange);color:#fff0c4}.candy-count{display:flex;align-items:center;gap:5px;border:2px solid #8059a5;background:#302158;padding:6px 10px}.candy-count .sprite{width:27px;height:27px}.candy-count b{color:var(--orange);font-family:"Press Start 2P";font-size:13px}
main{width:min(1450px,95vw);margin:0 auto;display:grid;grid-template-columns:minmax(0,1fr) 275px;gap:18px;align-items:start}.game-shell{width:auto;margin:18px 0 0}.scene-head{display:flex;justify-content:space-between;align-items:center;margin:0 2px 9px;color:#fff0c4}.scene-head b{font-family:"Press Start 2P";font-size:11px}.scene-head small{font-size:11px;color:#aaa0c7}.map-viewport{position:relative}.town-map{position:relative;width:100%;height:min(64vw,650px);min-height:470px;overflow:hidden;border:4px solid #66539b;background:#1b1745;box-shadow:0 0 0 4px #17122f,0 12px 0 #0b0916;outline:none}.town-map:focus{border-color:var(--orange)}.map-art{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;image-rendering:pixelated;user-select:none;pointer-events:none}
.sprite{display:inline-block;width:64px;height:64px;background-image:url("assets/pixel-atlas.png");background-repeat:no-repeat;background-size:256px 256px;image-rendering:pixelated;vertical-align:middle}.s-ghost{background-position:0 0}.s-pumpkin{background-position:-64px 0}.s-cat{background-position:-128px 0}.s-vampire{background-position:-192px 0}.s-lantern{background-position:0 -64px}.s-tomb{background-position:-64px -64px}.s-web{background-position:-128px -64px}.s-window{background-position:-192px -64px}.s-candy{background-position:0 -128px}.s-skeleton{background-position:-64px -128px}.s-bat{background-position:-128px -128px}.s-frog{background-position:-192px -128px}.s-bag{background-position:0 -192px}.s-card{background-position:-64px -192px}.s-map{background-position:-128px -192px}.s-house{background-position:-192px -192px}
.building{position:absolute;z-index:6;border:0;background:transparent;padding:0;cursor:pointer;display:block}.building>span{display:inline-block;background:#241a45eF;border:2px solid #8d6db1;color:#fff1c6;padding:6px 8px;font-size:11px;white-space:nowrap;box-shadow:3px 3px 0 #110d24;transition:transform .15s,border-color .15s}.building:hover>span,.building:focus-visible>span{border-color:#ffd36a;transform:translateY(-3px)}.building:focus-visible{outline:3px solid #fff0a3;outline-offset:3px}.haunted{left:5%;top:8%;width:28%;height:33%}.my-house{left:37%;top:9%;width:26%;height:28%}.candyshop{right:3%;top:9%;width:28%;height:34%}.graveyard{left:3%;bottom:6%;width:32%;height:34%}.plaza{right:4%;bottom:7%;width:31%;height:35%}.haunted>span,.my-house>span,.candyshop>span,.graveyard>span,.plaza>span{position:absolute;left:50%;transform:translateX(-50%)}.haunted>span{bottom:0}.my-house>span{bottom:3px}.candyshop>span{bottom:0}.graveyard>span{bottom:0}.plaza>span{bottom:0}.building:hover>span,.building:focus-visible>span{transform:translateX(-50%) translateY(-3px)}
.street-skeleton{position:absolute;z-index:8;left:34%;top:54%;width:82px;height:112px;margin:0;padding:0;border:0;background:transparent;cursor:pointer;text-align:center}.street-skeleton .dancer{display:block;width:78px;height:82px}.street-skeleton img{display:block;width:78px;height:78px;object-fit:contain;image-rendering:pixelated}.street-skeleton .still-dancer{display:none}.npc-tag{display:inline-block;background:#241a45eF;border:2px solid #8d6db1;color:#fff1c6;padding:3px 4px;font-size:8px;white-space:nowrap}.street-skeleton:hover .npc-tag{border-color:#ffd36a}.street-skeleton:focus-visible{outline:3px solid #fff0a3;outline-offset:3px}
.player{position:absolute;z-index:9;width:80px;text-align:center;transform:translate(-50%,-50%);pointer-events:none;transition:left .52s ease-out,top .52s ease-out}.player-sprite{display:block;width:64px;height:64px;margin:0 auto;filter:drop-shadow(0 4px 0 #24173f)}.player-name{display:inline-block;background:#201742eF;border:2px solid #896bad;color:#fff0c4;padding:3px 5px;font-size:10px;white-space:nowrap}.player.walking .player-sprite{animation:walk-bob .28s steps(2,end) infinite}
.destination{position:absolute;z-index:10;width:25px;height:25px;border:3px solid #ffe37b;color:#ffe37b;text-align:center;line-height:17px;font-size:20px;transform:translate(-50%,-50%);animation:destination .65s ease-out forwards;pointer-events:none}.destination.hidden{display:none}
.scene-effects{position:absolute;inset:0;pointer-events:none;z-index:11}.scene-effects.candy-rain{background-image:radial-gradient(circle,#ffd36a 0 3px,transparent 4px);background-size:41px 53px;animation:rain .7s linear infinite;opacity:.8}.scene-footer{display:flex;justify-content:space-between;align-items:center;padding:8px 2px;color:#bcaed4}.scene-footer p{margin:0;font-size:11px}.text-btn{border:0;background:none;color:#e5d2f2;padding:4px;cursor:pointer;text-decoration:underline;text-decoration-color:#725a99}.text-btn:hover{color:#ffd36a}
.guide{position:absolute;z-index:12;left:16px;bottom:16px;display:flex;align-items:flex-start;gap:8px;max-width:350px;padding:10px 12px;background:#fff0c8;color:#2a1b45;border:4px solid #3a285f;box-shadow:5px 5px 0 #120d25}.guide-face{width:48px;height:48px;flex:none}.guide-copy b{font-size:12px}.guide-copy p{margin:4px 0 0;font-size:11px;line-height:1.55}.guide>button{border:0;background:none;color:#56365e;font-size:20px;cursor:pointer;margin-left:auto}.guide.hidden{display:none}
.mobile-pad{display:none}.side-panel{width:auto;position:static;margin-top:18px;display:grid;gap:14px}.pixel-panel{background:linear-gradient(145deg,#302152,#21183e);border:3px solid #7055a0;box-shadow:5px 5px 0 #100c20}.quest-board,.resident-board{padding:13px}.panel-title{display:flex;justify-content:space-between;align-items:center;color:#ffe1a0;font-family:"Press Start 2P";font-size:10px;border-bottom:2px solid #504080;padding-bottom:10px;margin-bottom:7px}.panel-title small{color:#a397be;font-size:8px}.panel-title button{border:0;background:none;color:#ffd36a;font-size:20px;cursor:pointer}.quest{display:flex;align-items:center;gap:9px;padding:9px 0;border-bottom:1px dashed #514272}.quest:last-child{border:0}.quest .check{font-size:20px;color:#81789c}.quest.done .check{color:#9de3a0}.quest b{font-size:11px}.quest small{display:block;margin-top:3px;color:#a99bbb;font-size:10px}.feed{display:grid;gap:8px;min-height:115px}.feed-item{display:flex;align-items:flex-start;gap:7px;font-size:10px;line-height:1.35}.feed-item>.sprite{width:29px;height:29px;flex:none}.feed-item b{display:block;color:#fff0c4}.feed-item span:not(.sprite){display:block;color:#ddd1e9}.feed-item small{display:block;color:#9084aa;margin-top:2px}.wood-btn,.start-btn{width:100%;margin-top:11px;padding:11px 13px;border:3px solid #462744;background:linear-gradient(#c57650,#85453d);color:#fff0c4;box-shadow:4px 4px 0 #130e25;cursor:pointer;font-weight:700}.wood-btn:hover,.start-btn:hover{filter:brightness(1.15);transform:translate(-1px,-1px)}
.bottom-nav{width:min(1080px,95vw);margin:20px auto 8px;display:flex;justify-content:center;gap:10px}.nav-btn{flex:1;max-width:230px;min-height:66px;border:3px solid #59458c;background:#21183e;color:#cfbfdf;display:grid;grid-template-columns:38px 1fr;text-align:left;align-items:center;box-shadow:4px 4px 0 #100c20;cursor:pointer;padding:9px}.nav-btn>.sprite{grid-row:span 2;width:34px;height:34px}.nav-btn b{font-size:11px;color:#fff0c4}.nav-btn small{font-size:9px;color:#a196ba}.nav-btn:hover{border-color:#d18a68;background:#3b2a63}.page-footer{text-align:center;color:#8f83ad;font-size:10px;padding:4px 15px 22px}.page-footer .text-btn{font-size:10px}
.modal-backdrop{z-index:30}.modal{width:min(560px,94vw);max-height:92vh;overflow:auto;padding:22px}.modal h2{margin:12px 0 7px}.modal-close{position:absolute;right:11px;top:8px;border:0;background:none;color:#d5c2e5;font-size:25px;cursor:pointer}.modal-kicker,.eyebrow{font-family:"Press Start 2P";color:#e99a6d;font-size:9px;letter-spacing:1px}.modal-desc{font-size:12px;color:#b9accf;line-height:1.65}.welcome-modal{text-align:center;padding:0 27px 23px;background:#271c4b}.welcome-scene{height:105px;margin:0 -27px 18px;background:linear-gradient(#2c2160,#46317b);display:grid;place-items:center}.welcome-scene>.sprite{width:82px;height:82px}.welcome-modal h1{font-family:"Press Start 2P";font-size:20px;line-height:1.65;color:#fff2cf}.welcome-modal label,.welcome-edit label{display:block;text-align:left;color:#eadcbe;font-size:11px;margin:13px 0 5px}.welcome-modal input,.welcome-edit input,.welcome-edit select{width:100%;padding:10px;border:2px solid #6b54a0;background:#17122f;color:#fff0c8;outline:none}.welcome-modal input:focus,.welcome-edit input:focus,.welcome-edit select:focus{border-color:var(--orange)}.monster-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:7px;margin-top:13px}.monster-option{border:2px solid #57447f;background:#1d1639;color:#dacde5;padding:8px 4px;cursor:pointer;display:grid;justify-items:center;gap:4px}.monster-option>.sprite{width:50px;height:50px}.monster-option b{font-size:10px}.monster-option.selected,.monster-option:hover{border-color:var(--orange);background:#432d63;transform:translateY(-2px)}.helper-text{font-size:10px;color:#9e93b7;line-height:1.55}.mini-game{margin:15px 0}.game-options{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.game-option,.riddle button{border:2px solid #67519a;background:#191330;color:#ffefc2;cursor:pointer;padding:14px;font-size:24px}.game-option:hover,.riddle button:hover{border-color:var(--orange)}.riddle button{display:block;width:100%;margin:7px 0;text-align:left;font-size:12px}.light-seq{display:flex;justify-content:center;gap:12px}.seq-light{width:44px;height:44px;border:3px solid #7764a4;background:#31264e;cursor:pointer}.seq-light:nth-child(1).on{background:#a6edaa}.seq-light:nth-child(2).on{background:#bf9af3}.seq-light:nth-child(3).on{background:#ff9c55}.result-box{padding:12px;border:2px solid #aa6e70;background:#352453;color:#ffe6b0;line-height:1.7}.result-box.good{border-color:#90cf99}.shop-items{display:grid;grid-template-columns:repeat(2,1fr);gap:9px;margin-top:14px}.shop-item{border:2px solid #594682;background:#1a1434;color:#eee0bf;text-align:left;padding:10px;cursor:pointer}.shop-item:hover,.shop-item.owned{border-color:#8dcc94}.shop-item .item-icon{display:block;width:54px;height:54px}.shop-item b{display:block;font-size:11px}.shop-item small{display:block;color:#9f94b6;font-size:9px;margin-top:4px}.shop-item strong{display:block;color:var(--orange);font-size:10px;margin-top:7px}
.house-preview{height:285px;position:relative;margin:14px 0 8px;overflow:hidden;border:3px solid #17112e;background:#1b1745}.house-preview:after{display:none}.house-art{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;image-rendering:pixelated}.house-preview:focus{outline:3px solid var(--orange);outline-offset:2px}.house-decor{position:absolute;z-index:5;width:58px;height:58px;border:0;background-color:transparent;cursor:pointer;transform:translate(-50%,-50%)}.house-decor.selected{outline:3px solid #ffe17e;outline-offset:3px}.decor-inventory{display:flex;gap:7px;flex-wrap:wrap;min-height:60px}.inventory-item{display:flex;align-items:center;gap:4px;border:2px solid #5c4788;background:#1b1437;color:#e9dbbe;padding:4px 6px;cursor:pointer;font-size:9px}.inventory-item>.sprite{width:35px;height:35px}.inventory-item.selected{border-color:var(--orange)}.house-actions{display:flex;justify-content:space-between;margin:5px 0}.house-surprise{position:absolute;z-index:8;left:50%;top:45%;transform:translate(-50%,-50%);display:flex;align-items:center;gap:7px;background:#221741ed;border:3px solid #ffd36a;color:#fff0c4;padding:8px 10px;box-shadow:4px 4px #120d25}.house-surprise img{width:60px;height:60px;object-fit:contain;image-rendering:pixelated}.house-surprise>.sprite{width:48px;height:48px}.house-surprise.hidden{display:none}
.neighbor-list{display:grid;gap:7px;margin:12px 0}.neighbor{display:flex;align-items:center;gap:8px;border:2px solid #51417d;background:#1d1638;padding:8px}.neighbor>.sprite{width:36px;height:36px}.neighbor div{flex:1}.neighbor b{font-size:11px}.neighbor small{display:block;color:#9e93b7;font-size:9px;margin-top:3px}.neighbor em{font-style:normal;color:#9de3a0;font-size:9px}.gift-row{display:flex;gap:7px}.gift-btn{flex:1;display:grid;justify-items:center;gap:3px;border:2px solid #6a55a0;background:#2d2350;color:#f6e8c3;padding:8px 4px;cursor:pointer;font-size:10px}.gift-btn>.sprite{width:38px;height:38px}.gift-btn:hover{border-color:var(--orange)}.skeleton-stage{display:flex;align-items:center;gap:10px;margin-top:12px;padding:7px;border:2px solid #8064a5;background:#17122f}.skeleton-stage .dancer{width:74px;height:74px}.skeleton-stage img{width:74px;height:74px;object-fit:contain;image-rendering:pixelated}.skeleton-stage p{flex:1;margin:0;color:#fff0c4;font-size:11px}.skeleton-stage p small{display:block;color:#a99bbb;margin-top:4px;font-size:9px}.skeleton-stage .text-btn{font-size:10px}h3{font-size:11px;color:#ffe1a0;border-top:2px solid #504080;padding-top:10px}h3 small{font-size:9px;color:#a99bbb;font-weight:400}.visit-log{display:grid;gap:5px}.visit-log div{display:flex;justify-content:space-between;gap:8px;font-size:10px;color:#ddd1e8}.visit-log small{color:#9488ad}.plaza-modal{text-align:center}.plaza-pumpkin{display:block;margin:12px auto 2px;width:78px;height:78px}.plaza-modal>b{color:#ffd36a;font-family:"Press Start 2P";font-size:12px}.progress{height:16px;border:3px solid #6d5898;background:#17122f;margin:13px 0}.progress span{display:block;height:100%;background:linear-gradient(90deg,#ed723e,#ffd05d);transition:width .5s}.card-modal canvas{display:block;width:100%;height:auto;image-rendering:pixelated;border:4px solid #ee9b5b;margin:12px 0 5px;background:#21163d}.bag-hero{display:flex;align-items:center;justify-content:center;gap:8px;padding:18px;border:2px solid #624c92;background:#1b1438}.bag-hero .sprite{width:64px;height:64px}.bag-hero b{font-family:"Press Start 2P";font-size:25px;color:var(--orange)}.bag-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:12px}.bag-item{display:grid;justify-items:center;gap:3px;padding:7px;background:#1a1434;border:2px solid #51407d;font-size:10px}.bag-item>.sprite{width:45px;height:45px}.bag-item small{font-size:8px;color:#aaa0bd}.place-list{display:grid;gap:8px;margin-top:14px}.place-list button{display:flex;align-items:center;gap:9px;border:2px solid #594681;background:#1c1539;color:#fff0c4;padding:8px;text-align:left;cursor:pointer}.place-list button:hover{border-color:var(--orange)}.place-list .sprite{width:43px;height:43px}.modal a{color:#ffd36a}
.toast{top:85px}.hidden{display:none!important}
@keyframes walk-bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-5px)}}@keyframes destination{0%{opacity:0;transform:translate(-50%,-50%) scale(.4)}40%{opacity:1;transform:translate(-50%,-50%) scale(1.15)}100%{opacity:0;transform:translate(-50%,-50%) scale(1.6)}}@keyframes rain{to{background-position:0 53px}}body.reduce-motion *{animation:none!important;transition:none!important}
@media(max-width:1060px){main{display:block;width:min(95vw,850px)}.side-panel{grid-template-columns:1fr 1fr;margin:14px 0}.game-shell{margin-top:14px}}
@media(max-width:700px){.topbar{height:67px;padding:0 10px}.brand .sprite{width:34px;height:34px}.brand strong{font-size:9px}.brand small{font-size:7px}.top-actions{gap:3px}.top-actions button{padding:6px 5px;font-size:9px}.candy-count{padding:4px 5px;font-size:9px}.candy-count .sprite{width:22px;height:22px}.town-map{height:470px;min-height:0}.scene-head small{font-size:9px}.building>span{font-size:8px;padding:4px 5px}.street-skeleton{left:33%;top:54%;transform:scale(.8);transform-origin:top left}.player{transform:translate(-50%,-50%) scale(.85)}.guide{left:8px;right:8px;bottom:8px;max-width:none}.guide-copy p{font-size:10px}.scene-footer p{font-size:9px}.mobile-pad{display:grid;grid-template-columns:repeat(3,44px);gap:3px;justify-content:center;margin:5px 0}.mobile-pad button{height:36px;border:2px solid #6a55a0;background:#30245c;color:#ffeab0;font-size:17px}.mobile-pad button:nth-child(1){grid-column:2}.mobile-pad button:nth-child(2){grid-column:1;grid-row:2}.mobile-pad button:nth-child(3){grid-column:2;grid-row:2}.mobile-pad button:nth-child(4){grid-column:3;grid-row:2}.side-panel{display:block}.resident-board{margin-top:12px}.bottom-nav{gap:4px}.nav-btn{grid-template-columns:1fr;min-height:62px;text-align:center;padding:6px 2px}.nav-btn>.sprite{grid-row:auto;margin:auto;width:31px;height:31px}.nav-btn b{font-size:9px}.nav-btn small{font-size:7px}.house-preview{height:220px}.shop-items{grid-template-columns:1fr 1fr}.gift-row{flex-wrap:wrap}.gift-btn{min-width:30%}.modal{padding:16px}.welcome-modal{padding:0 16px 18px}.welcome-scene{margin:0 -16px 15px;height:80px}.welcome-modal h1{font-size:16px}.monster-option>.sprite{width:43px;height:43px}.monster-option b{font-size:9px}.bag-grid{grid-template-columns:repeat(2,1fr)}}
.player>.player-sprite{display:block;width:64px;height:64px;margin:0 auto;padding:0;border:0;background-color:transparent;font-size:0;white-space:normal}.player>.player-name{display:inline-block;width:auto;height:auto;padding:3px 5px;border:2px solid #896bad;background:#201742eF;font-size:10px;white-space:nowrap}


/* Raster sprites use proportional atlas positions at every display size. */
.sprite{background-image:url("assets/pixel-atlas.png");background-size:400% 400%;background-repeat:no-repeat;background-color:transparent;image-rendering:pixelated;flex-shrink:0}
.s-ghost{background-position:0% 0%}.s-pumpkin{background-position:33.333333% 0%}.s-cat{background-position:66.666667% 0%}.s-vampire{background-position:100% 0%}
.s-lantern{background-position:0% 33.333333%}.s-tomb{background-position:33.333333% 33.333333%}.s-web{background-position:66.666667% 33.333333%}.s-window{background-position:100% 33.333333%}
.s-candy{background-position:0% 66.666667%}.s-skeleton{background-position:33.333333% 66.666667%}.s-bat{background-position:66.666667% 66.666667%}.s-frog{background-position:100% 66.666667%}
.s-bag{background-position:0% 100%}.s-card{background-position:33.333333% 100%}.s-map{background-position:66.666667% 100%}.s-house{background-position:100% 100%}
.player>.player-sprite{background-image:url("assets/pixel-atlas.png");background-size:400% 400%;background-repeat:no-repeat;background-color:transparent}
.player>.player-sprite.s-ghost{background-position:0% 0%}.player>.player-sprite.s-pumpkin{background-position:33.333333% 0%}.player>.player-sprite.s-cat{background-position:66.666667% 0%}.player>.player-sprite.s-vampire{background-position:100% 0%}
.dancer{display:block;position:relative;background:none;border:0}.dancer img{display:block;mix-blend-mode:normal;filter:none;background:none}.dancer .still-dancer{display:none}
.street-skeleton{pointer-events:auto;animation:none}.street-skeleton .dancer{border:0;background:none}.street-skeleton img{filter:none;mix-blend-mode:normal}
.guide{position:relative;left:auto;right:auto;bottom:auto;max-width:none;margin:4px 0 10px}.guide-face{width:52px;height:52px;flex:0 0 52px;min-width:52px}.guide-copy{min-width:0;flex:1}.guide-copy p{overflow-wrap:anywhere}
body.reduce-motion .dancer img{display:none}body.reduce-motion .dancer .still-dancer{display:block;width:100%;height:100%}
#memoryCard{display:block;width:100%;height:auto;max-width:100%;image-rendering:pixelated;border:3px solid #ee9b5b;margin:12px 0 5px;background:#21163d}
.feed-item span:not(.sprite){font-size:10px}.graveyard:before{display:none}



/* Keep scene coordinates identical to the raster; small screens can pan the map. */
.map-viewport{overflow-x:auto;overflow-y:hidden;scrollbar-width:thin;scrollbar-color:#8a6aad #17122e;border:4px solid #66539b}
.town-map{min-width:660px;width:100%;height:auto;min-height:0;aspect-ratio:3/2;border:0;box-shadow:none;cursor:crosshair}
.map-art{object-fit:fill}
.player{transition:none}
.building{cursor:pointer}.building.nearby>span{border-color:#ffd36a;color:#fff4c6;box-shadow:0 0 12px #e8af6655}
.haunted{left:9%;top:7%;width:20%;height:28%}.my-house{left:42%;top:11%;width:17%;height:22%}.candyshop{left:77%;right:auto;top:16%;width:18%;height:26%}.graveyard{left:10%;top:45%;bottom:auto;width:26%;height:25%}.plaza{left:70%;right:auto;top:47%;bottom:auto;width:20%;height:23%}
.street-skeleton{left:36%;top:54%;transform:none;pointer-events:auto}
.building>span{font-size:10px}.player-name{font-size:11px}
.guide{position:relative;inset:auto}.guide-face{width:52px;height:52px;flex:none}.guide>button{flex:none;min-width:32px;min-height:32px}
.house-preview{height:auto;aspect-ratio:3/2}.house-art{object-fit:fill}.house-decor{width:12%;height:auto;aspect-ratio:1}
.game-option{font-size:12px;display:grid;justify-items:center}.game-option small{display:block}.blinking-pumpkin .sprite,.blinking-pumpkin.sprite{animation:pixel-blink 2s steps(2) infinite}
.seq-light{height:100px;width:90px;color:#fff0c4;display:grid;justify-items:center}.seq-light .sprite{width:54px;height:54px}.seq-light small{font-size:12px;color:#fff0c4;background:#20143f;padding:2px 6px}
.house-surprise .dancer{width:76px;height:76px;flex:none}.house-surprise img{width:100%;height:100%}
.falling-candy{position:absolute;width:40px;height:40px;top:-60px;animation:raster-candy-rain 3s linear 2}
@keyframes pixel-blink{0%,40%,60%,100%{opacity:1}50%{opacity:.3}}@keyframes raster-candy-rain{to{top:110%;transform:rotate(180deg)}}
@media(max-width:700px){.map-viewport{max-height:none}.town-map{min-width:660px;height:auto}.scene-head small{max-width:165px;text-align:right}.mobile-pad button{height:44px}.topbar{height:auto;min-height:76px;flex-wrap:wrap;gap:8px;padding:12px}.top-actions{margin-left:auto}.top-actions button{font-size:11px;min-height:40px}.brand strong{font-size:12px}.scene-footer{gap:8px}.scene-footer p{font-size:10px}.scene-footer .text-btn{white-space:nowrap}.house-preview{height:auto}.modal-backdrop{padding:12px}.modal{max-height:calc(100dvh - 24px)}.nav-btn small{display:none}.nav-btn b{font-size:11px}.guide-copy p{font-size:12px}}
@media(prefers-reduced-motion:reduce){body:not(.motion-allowed) .dancer img{display:none}body:not(.motion-allowed) .dancer .still-dancer{display:block;width:100%;height:100%}}

/* Walk through a doorway into a full raster scene, with game controls outside the art. */
.inside-place main{display:block;width:min(1120px,95vw)}
.inside-place .side-panel,.inside-place .guide{display:none}
.place-scene{border:3px solid #7055a0;background:#17122d;box-shadow:6px 6px 0 #0d091c}
.place-toolbar{display:flex;align-items:center;gap:16px;padding:10px 14px;border-bottom:2px solid #675085;background:#241b3f}
.back-street{border:2px solid #9970a3;background:#352249;color:#ffe4b9;padding:10px 14px;min-height:44px;cursor:pointer;white-space:nowrap;font-weight:700}
.back-street:hover{background:#523354;border-color:#ffc879}
.place-toolbar>span{flex:1;font-size:12px;color:#c6b3d8;line-height:1.6}
.place-toolbar .text-btn{font-size:12px;white-space:nowrap}
.place-stage{position:relative;aspect-ratio:3/2;width:100%;overflow:hidden;isolation:isolate;cursor:crosshair;background:#17132e}
.place-stage:focus-visible{outline:3px solid #ffe08a;outline-offset:3px}
.place-art{position:absolute;inset:0;width:100%;height:100%;object-fit:fill;image-rendering:pixelated;user-select:none;pointer-events:none}
.art-pending .place-art{visibility:hidden}
.place-heading{position:absolute;top:22px;left:24px;max-width:58%;z-index:2;pointer-events:none;background:#181126e6;padding:12px 16px;border-left:3px solid #ffbb67;box-shadow:4px 4px 0 #100c2299}
.place-heading small{font-size:10px;letter-spacing:3px;color:#dcb08c}
.place-heading h1{font-family:monospace;font-size:clamp(22px,3vw,34px);line-height:1.4;letter-spacing:3px;margin:5px 0 7px;color:#fff0ca;text-shadow:2px 2px #5c355a}
.place-badge{font-size:11px;display:block;color:#ffda93;line-height:1.6}
.place-hotspot{position:absolute;z-index:8;transform:translate(-50%,-50%);display:grid;grid-template-columns:24px 1fr;column-gap:7px;align-items:center;padding:8px 12px;min-height:48px;background:#25172ceb;border:2px solid #eaba79;color:#ffe9bb;box-shadow:4px 4px 0 #1a1027;cursor:pointer;white-space:nowrap}
.place-hotspot .hotspot-key{grid-row:span 2;background:#49334a;border:1px solid #a6807e;padding:4px;color:#ffdf9b;font:bold 13px monospace}
.place-hotspot>span:not(.hotspot-key){font-size:13px;font-weight:700}
.place-hotspot>small{font-size:10px;color:#c9b3d9}
.place-hotspot:hover,.place-hotspot:focus-visible{border-color:#fff0a5;background:#533149}
.place-player{width:90px;transform:translate(-50%,-76%)}
.place-player>.player-sprite{width:72px;height:72px}
.place-player .player-name{max-width:160px;overflow:hidden;text-overflow:ellipsis}
.place-decor{position:absolute;inset:0;pointer-events:none;z-index:3}
.place-decor>.sprite{position:absolute;width:12%;height:auto;aspect-ratio:1;transform:translate(-50%,-50%)}
.place-dancer{position:absolute;left:29%;top:67%;z-index:4;transform:translate(-50%,-55%);text-align:center}
.place-dancer .dancer{width:82px;height:82px;margin:auto}.place-dancer img{width:100%;height:100%;object-fit:contain;image-rendering:pixelated}
.place-actions{display:grid;grid-template-columns:1fr auto;gap:8px 24px;padding:15px 20px;border-top:2px solid #6c5188;background:#241a3b;align-items:center}
.place-actions>div{grid-row:span 2}.place-actions p{margin:0 0 6px;font-size:13px;color:#e7d8ee;line-height:1.8;max-width:650px}
.place-actions small{font-size:11px;color:#ab9abe}
.place-actions .wood-btn{width:220px;margin:0}
.scene-secondary{border:1px solid #745a8c;background:#302046;color:#e9d5ec;padding:8px 12px;min-height:44px;cursor:pointer;font-size:12px}
.scene-secondary:hover{border-color:#ffce8b;color:#ffe3b8}
.place-loading,.place-load-error{position:absolute;inset:0;z-index:15;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;background:#18112beF;color:#ffe7bc;font-size:14px;cursor:default;padding:20px}
.place-load-error .wood-btn{width:auto;min-width:160px}
.inside-place .bottom-nav{margin-top:18px}
@media(max-width:700px){
 .place-toolbar{padding:8px;gap:8px;flex-wrap:wrap}.place-toolbar>span{order:3;width:100%;flex-basis:100%;font-size:11px;text-align:center}.place-toolbar .text-btn{margin-left:auto}.back-street{padding:8px 10px;font-size:12px}
 .place-heading{top:9px;left:9px;padding:6px 9px;max-width:90%}.place-heading small{display:none}.place-heading h1{font-size:20px;letter-spacing:1px;margin:0 0 2px}.place-badge{font-size:9px}
 .place-hotspot{padding:5px 8px;column-gap:5px;min-height:44px;grid-template-columns:18px 1fr}.place-hotspot>span:not(.hotspot-key){font-size:11px}.place-hotspot>small{font-size:9px}.place-hotspot .hotspot-key{font-size:10px;padding:3px}
 .place-player{width:72px;transform:translate(-50%,-70%)}.place-player>.player-sprite{width:44px;height:44px}.place-player>.player-name{font-size:9px;padding:2px 4px;max-width:100px}
 .place-dancer .dancer{width:50px;height:50px}.place-dancer .npc-tag{font-size:7px}
 .place-actions{padding:12px;gap:9px;grid-template-columns:1fr 1fr}.place-actions>div{grid-column:1/-1;grid-row:auto}.place-actions p{font-size:12px}.place-actions small{font-size:10px}.place-actions .wood-btn{width:100%;height:100%;font-size:12px;margin:0;padding:9px 6px}.scene-secondary{font-size:11px;padding:9px 6px}
}


/* Publication-only link back to the personal site; game styles and scripts stay intact. */
.mossnyx-site-nav{padding:0 clamp(14px,3vw,42px);border-bottom:1px solid #57468b;background:#13102b}
.mossnyx-home{display:inline-flex;align-items:center;min-height:44px;padding:10px 0;color:var(--cream);font-size:12px;line-height:1.5;text-decoration:none;transition:none}
.mossnyx-home:hover{text-decoration:underline;text-underline-offset:4px}
.mossnyx-home:focus-visible{outline:3px solid #ffe08a;outline-offset:3px}
