#town{background:#172f35;color:#fff2d2;height:100dvh;overflow:hidden}#town.active{display:flex;flex-direction:column}.town-header{display:flex;align-items:center;justify-content:space-between;padding:12px 24px;gap:12px;background:#203e43;border-bottom:1px solid #bfa56d}.town-header h1{margin:2px 0;font:600 27px serif}.town-header small{letter-spacing:.25em;color:#d9c48c}.town-header span{font-size:13px;color:#b7d7cd}.town-stage{position:relative;flex:1;min-height:220px;background:url('assets/scene-town-extended.webp') center/cover no-repeat;isolation:isolate}.town-stage canvas{position:absolute;inset:0;width:100%;height:100%;z-index:3;pointer-events:none}.town-portals{position:absolute;inset:0}.town-portal{position:absolute;transform:translate(-50%,-50%);padding:6px 12px;background:#193b40de;border:1px solid #d7bd77;border-radius:12px;color:#fff2cc;display:flex;align-items:center;flex-direction:column;min-width:120px;cursor:pointer;box-shadow:0 4px 16px #12292f55}.town-portal i{font:30px serif;color:#baf9ff;text-shadow:0 0 14px #44e1ff}.town-portal small{font-size:10px;color:#d0ded2}.town-portal.selected{outline:3px solid #fff1ab}.town-portal.locked{background:#35474ada;color:#c3c5bf;border-style:dashed}.town-portal.locked i{color:#aaa;text-shadow:none}.town-footer{padding:8px 20px max(12px,env(safe-area-inset-bottom));display:flex;align-items:center;gap:12px;flex-wrap:wrap;min-height:64px;padding-right:140px}.town-footer span{flex:1;font-size:13px}.town-shortcuts{width:100%;display:flex;gap:6px;overflow:auto}.town-shortcuts button{white-space:nowrap;border:1px solid #928467;border-radius:7px;background:#28494c;color:#f7edc9;padding:7px;font:12px system-ui}.return-town{position:absolute;top:10px;left:16px;z-index:8;font-size:12px;padding:8px}.ro-heading{top:58px!important}#questionSource{display:block;color:#abc4be;font-size:11px;margin-top:8px}body[data-dungeon=pneumonia] #clinicEntry{display:none}#townEnter[hidden]{display:none}#roWeaponDialog{position:fixed}#town.active~.musicbtn{z-index:50}@media(max-width:650px){.town-header{padding:8px 12px}.town-header h1{font-size:21px}.town-header small{font-size:9px}.town-stage{background-position:center}.town-portal{min-width:98px;padding:5px;font-size:11px}.town-portal small{display:none}.town-portal i{font-size:24px}.town-footer{padding:6px 10px 76px;gap:6px}.town-shortcuts button{font-size:11px}.return-town{top:8px}.ro-heading{top:50px!important}} 

.town-stage{background:#1c373b url('assets/scene-town-extended.webp') center/contain no-repeat}.town-portal{min-width:0;flex-direction:row;gap:5px;padding:5px 9px;border-radius:16px;font-size:12px;white-space:nowrap;transform:translate(-50%,-10%);box-shadow:0 2px 8px #10282c}.town-portal i{font-size:18px}.town-portal small{display:none}.town-portal.locked{opacity:.92;border-style:solid;background:#193b40ed}.town-shortcuts{flex-wrap:wrap;overflow:visible}@media(max-width:650px){.town-portal{font-size:9px;padding:4px;gap:2px}.town-portal i{font-size:12px}.town-header .btn{font-size:12px;padding:8px}.town-footer{padding-bottom:65px}.town-stage{min-height:260px}}

.town-stage{background-image:url('assets/scene-town-extended.webp');background-size:cover;overflow:hidden}
/* Reserve the action row before arrival so the map never resizes. */
#town .town-footer{box-sizing:border-box;display:grid;grid-template-columns:minmax(0,1fr) 104px;grid-template-rows:20px 36px;gap:4px 12px;align-items:stretch;flex:0 0 calc(68px + env(safe-area-inset-bottom,0px));height:calc(68px + env(safe-area-inset-bottom,0px));min-height:0;padding:4px 14px calc(4px + env(safe-area-inset-bottom,0px));overflow:hidden}
#townNote{grid-column:1/-1;grid-row:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:20px}
#town .town-shortcuts{grid-column:1;grid-row:2;width:auto;min-width:0;display:flex;flex-wrap:nowrap;gap:6px;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;align-items:stretch}
#town .town-shortcuts::-webkit-scrollbar{display:none}
#town .town-shortcuts button,#town #townEnter{box-sizing:border-box;height:36px;min-height:36px;margin:0;border-radius:4px;padding:0 10px;font:12px system-ui;line-height:1;white-space:nowrap}
#town #townEnter{grid-column:2;grid-row:2;display:flex;align-items:center;justify-content:center;width:104px;box-shadow:none;transform:none}
#town #townEnter[hidden]{display:flex!important;visibility:hidden;pointer-events:none}
@media(max-width:650px){#town .town-footer{grid-template-columns:minmax(0,1fr) 88px;gap:4px 7px;padding-left:8px;padding-right:8px}#town #townEnter{width:88px}#town .town-shortcuts button{font-size:11px;padding:0 8px}}

.pneumonia-victory-poster{display:block;width:100%;height:auto;aspect-ratio:3/4;object-fit:contain;margin:0 auto 18px;border:1px solid #cfb26e;border-radius:14px;background:#142d39}#overlay:has(.pneumonia-victory-poster){position:fixed;overflow-y:auto;align-items:flex-start;padding:max(16px,env(safe-area-inset-top)) 12px max(16px,env(safe-area-inset-bottom))}#overlayCard:has(.pneumonia-victory-poster){max-height:none;overflow:visible;margin:auto;max-width:460px;width:min(100%,460px)}

.town-stage{cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none;overscroll-behavior:none}.town-stage.dragging,.town-stage.dragging *{cursor:grabbing!important}.town-stage .town-portal{cursor:pointer}

/* Town owns its visible toggle; mobile map music occupies its footer in normal flow. */
.town-header-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}
#townMusicToggle{min-width:44px;min-height:44px;white-space:nowrap;cursor:pointer}
body[data-screen="town"] #musicDock{display:none}
@media(max-width:650px){
 .town-header-actions{gap:5px;flex-direction:column}
 #town .town-header-actions .btn{min-height:44px;padding:7px 9px;font-size:12px}
 #map>.mapfoot{box-sizing:border-box;display:flex;flex-direction:column;align-items:stretch;flex:0 0 auto;min-height:0;height:auto;padding:6px 12px calc(8px + env(safe-area-inset-bottom,0px));gap:4px}
 #map>.mapfoot .hint{font-size:10px;line-height:1.4}
 #map>.mapfoot #musicDock{position:static;inset:auto;align-self:flex-end;max-width:100%;margin:0;gap:6px;flex-shrink:0}
 #map>.mapfoot #musicDock #mapMusicTitle{max-width:calc(100vw - 88px);font-size:11px;line-height:1.4}
 #map>.ro-quest{margin-bottom:4px}
}

.pneumonia-intro{position:absolute;inset:0;z-index:30;background:#07131b;overflow:hidden;display:flex;align-items:center;justify-content:center;cursor:default;touch-action:manipulation}
.pneumonia-intro video{display:block;width:100%;height:100%;object-fit:contain;background:#07131b}
.pneumonia-intro .intro-skip{position:absolute;top:12px;right:12px;z-index:3;min-height:44px;padding:9px 16px;background:#173640ee;border:1px solid #d7bd77;color:#fff2d2;font-size:14px}
.pneumonia-intro .intro-play{position:absolute;z-index:2;min-height:48px;background:#173640ee;color:#fff2d2}
.pneumonia-intro .intro-play[hidden]{display:none}
.pneumonia-intro .intro-message{position:absolute;bottom:12px;left:16px;right:16px;text-align:center;color:#fff2d2;font-size:13px;text-shadow:0 1px 4px #000;pointer-events:none}
.pneumonia-intro .intro-message:empty{display:none}

/* Reserve an actual footer so audio controls never overlay answer choices. */
#battleMusicFooter{box-sizing:border-box;flex:0 0 auto;display:flex;justify-content:flex-end;align-items:center;padding:6px max(12px,env(safe-area-inset-right)) calc(6px + env(safe-area-inset-bottom));min-height:56px;background:#203e43;border-top:1px solid #637f78}
#battleMusicFooter #musicDock{position:static;inset:auto;max-width:100%;margin:0;gap:8px;justify-content:flex-end}
#battleMusicFooter #mapMusicTitle{min-width:0;max-width:min(420px,calc(100vw - 92px));font-size:12px;line-height:1.4;overflow-wrap:anywhere}
#battle .qzone{min-height:0;overflow-y:auto;padding-bottom:16px;overscroll-behavior:contain}
@media(max-width:1024px),(pointer:coarse){
 #battleMusicFooter #mapMusicTitle{font-size:11px}
 #battleMusicFooter #musicBtn{min-width:44px;min-height:44px}
}
