/* B 版采用后的主项目界面。布局沿用业务入口，统一纸色、墨线与可读字号。 */
.game-modal.poetry-modal::backdrop{background:transparent}
.game-modal.poetry-modal .poetry-topline{background:linear-gradient(#faf7edb8,transparent)}
:root{--ink:#242321;--deep-ink:#242321;--paper:#faf7ed;--paper-deep:#e9ddc4;--verm:#aa4938;--celadon:#a6ad91;--celadon-dark:#798363;--gold:#bc9552;--muted:#66685a;--shadow:4px 4px 0 #242321;font-family:"Microsoft YaHei","PingFang SC",sans-serif}
body{background:#e9e5d5}h1,h2,h3{font-family:"KaiTi","STKaiti","Noto Serif SC",serif}button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible{outline:3px solid #607987;outline-offset:4px}
.landing-screen{background:#ede9d9}.landing-copy h1{color:#242321;text-shadow:3px 3px 0 #faf7ed}.landing-copy .subtitle{color:#4e5748}.paper-grain{opacity:.07}.role-card{background:#faf7ed;border:2px solid #242321;box-shadow:4px 4px 0 #242321;border-radius:2px}.role-card:hover{background:#e9ddc4;box-shadow:4px 4px 0 #242321}.role-card small{font-size:14px}
.topbar{background:#faf7ede8;border-bottom:2px solid #242321;backdrop-filter:none}.brand-lockup{color:#242321}.brand-lockup strong{font-family:"KaiTi",serif}.brand-seal{background:#aa4938}.scene-version{color:#535849}
.scene-tools button,.topbar-actions button,.character-open,.nearby-action,.button-primary,.button-secondary,.game-close,.portrait-turns button,.portrait-people button{border:2px solid #242321;border-radius:2px;box-shadow:3px 3px 0 #242321;min-height:48px;min-width:48px;font-size:14px;background:#faf7ed;color:#242321}
.button-primary,.nearby-action{background:#aa4938;color:#faf7ed}.button-primary:hover,.nearby-action:hover{background:#923f30}.button-secondary:hover{background:#e9ddc4}.journey-hud{background:#faf7ed;border:2px solid #242321;border-radius:2px;box-shadow:3px 3px 0 #242321}.journey-hud strong{font-size:16px}.journey-hud small{font-size:14px}
.panel-open .detail-panel{background:#faf7ed;border:2px solid #242321;border-radius:2px;box-shadow:5px 5px 0 #242321;backdrop-filter:none;padding:25px;font-size:16px}.panel-open .detail-panel h2{font-size:28px}.panel-copy{font-size:16px;line-height:1.8}.panel-kicker{font-size:14px}.form-field label,.form-field small,.form-note,.form-help{font-size:14px}input,textarea,select{border:1px solid #6b6a5c;border-radius:2px;background:#fffdf7;font-size:16px}input,select{min-height:48px}textarea{line-height:1.8}.task-paper,.letter-card,.result-card{border:1px solid #242321;border-radius:2px;box-shadow:3px 3px 0 #b9ad95;background:#fffdf7}.letter-content{font-size:18px;line-height:1.9}
.game-modal.poetry-modal .poetry-topline{color:#242321}.game-modal.poetry-modal .npc-speech{border:2px solid #242321;border-radius:2px;background:#faf7ed;box-shadow:4px 4px 0 #242321;padding:17px 20px}.npc-speech:after{border-top-color:#242321}.npc-speech .poetry-speaker strong{background:#aa4938;color:#faf7ed;padding:5px 10px;font-size:20px;white-space:nowrap}.npc-speech .poetry-speaker small,.npc-speech>p{font-size:14px}.npc-speech .poetry-prompt{font-family:"KaiTi","STKaiti",serif;font-size:27px;color:#242321}.npc-speech .poetry-seal{display:none}
.game-modal.poetry-modal .poetry-dock{background:#faf7ed;border:2px solid #242321;border-radius:2px;box-shadow:4px 4px 0 #242321;max-height:48dvh;padding:20px 24px 16px}.poetry-dock h2{font-size:24px}.poetry-dock .panel-kicker,.poetry-key-hint{font-size:14px}.game-modal.poetry-modal .poetry-dock .poetry-option{font-size:20px;line-height:1.55;border:2px solid #242321;border-radius:2px;background:#fffdf7;box-shadow:3px 3px 0 #242321;min-height:108px}.game-modal.poetry-modal .poetry-dock .poetry-option:hover:not(:disabled){transform:translateY(-2px);background:#ece5d1}.poetry-dock .option-letter{font-size:14px;border-color:#242321}.poetry-dock .poetry-option small{font-size:14px;top:14px}.poetry-dock .poetry-feedback,.poetry-source,.poetry-full summary,.poetry-dock .poetry-full-lines p{font-size:16px;line-height:1.7}.game-modal.poetry-modal .poetry-dock .poetry-option.correct{background:#798363;color:#faf7ed}.poetry-dock .poetry-actions button{font-size:16px;min-height:48px}.poetry-pocket{background:#faf7ed;border:2px solid #242321;border-radius:2px}.poetry-result h3{color:#aa4938}
.character-dialog{background:#faf7ed;border:2px solid #242321;border-radius:2px;box-shadow:5px 5px 0 #242321}.portrait-turns button[aria-pressed=true],.portrait-people button[aria-pressed=true]{background:#798363;color:#faf7ed}.portrait-caption,.portrait-note,.portrait-heading p{font-size:14px}.touch-walk button{border:2px solid #242321;background:#faf7ed;color:#242321;box-shadow:2px 2px 0 #242321;min-width:48px;min-height:48px}.touch-run{background:#aa4938!important;color:#faf7ed!important;border:2px solid #242321!important}
@media(max-width:680px){.topbar{padding:0 12px}.topbar-actions{gap:8px}.topbar-actions button{padding:7px 9px;font-size:14px}.scene-tools{left:12px;right:12px;gap:8px}.scene-tools button{font-size:14px;padding:8px 10px}.journey-hud{top:141px;max-width:204px}.journey-hud strong{font-size:14px}.journey-hud small{font-size:14px}.character-open{font-size:14px}.nearby-action{font-size:14px;bottom:132px;right:12px}.panel-open .detail-panel{top:78px;padding:25px 19px}.game-modal.poetry-modal .poetry-dock{padding:14px 15px;max-height:55dvh}.poetry-dock h2{font-size:21px}.poetry-dock .poetry-key-hint{display:none}.game-modal.poetry-modal .poetry-dock .poetry-options{grid-template-columns:1fr;gap:9px}.game-modal.poetry-modal .poetry-dock .poetry-option{min-height:50px;font-size:18px;flex-direction:row;align-items:center;gap:12px;padding:9px 12px}.poetry-dock .poetry-option small{display:none}.poetry-dock .poetry-feedback,.poetry-source{font-size:14px}.game-modal.poetry-modal .npc-speech{padding:12px 15px}.npc-speech .poetry-prompt{font-size:24px;line-height:1.5}.npc-speech .poetry-speaker strong{font-size:18px}.poetry-dock .poetry-actions{flex-direction:column;gap:9px}.poetry-dock .poetry-actions button{font-size:16px}.portrait-people{gap:5px;flex-wrap:wrap}.portrait-people button{min-width:36px;padding:7px}.portrait-turns button{min-height:48px}}
@media(max-height:620px){.game-modal.poetry-modal .poetry-dock{max-height:52dvh;padding:12px 16px}.poetry-dock h2{font-size:19px}.poetry-dock .panel-kicker{display:none}.game-modal.poetry-modal .poetry-dock .poetry-option{min-height:48px;font-size:17px;padding:8px}.poetry-dock .poetry-feedback{margin:8px 0 0}.npc-speech>p{display:none}.npc-speech .poetry-prompt{font-size:21px}.journey-hud{display:none}}
.topbar .brand-lockup,.topbar .brand-lockup small,.topbar .role-badge,.topbar .text-button{color:#242321;text-shadow:none}.topbar .text-button{background:#faf7ed;border:2px solid #242321;border-radius:2px}.topbar .role-badge{font-size:14px}.topbar .brand-seal{color:#faf7ed;border-color:#242321}.poetry-topline .game-close{background:#faf7ed;color:#242321;border:2px solid #242321;border-radius:2px;font-size:14px;min-height:48px}
.form-card label,.form-card small,.field-hint,.char-count{font-size:14px!important;line-height:1.6}.form-card{border:1px solid #242321;background:#fffdf7;box-shadow:3px 3px 0 #c1b49a}.form-card .code-length-options label,.code-lengths label,.code-length-choice{min-height:48px}.walk-help{background:#faf7ed;color:#242321;border:1px solid #242321;border-radius:2px;font-size:14px}.stage-caption{color:#454938;text-shadow:none}
.code-options label span{display:flex;align-items:center;justify-content:center;min-height:48px}.portrait-people button{min-width:48px;min-height:48px}.portrait-people{flex-wrap:wrap}.character-open span,.character-open small{font-size:14px}
@media(max-width:680px){.walk-help{display:none}.scene-tools .scene-version{font-size:14px}.scene-tool-buttons{max-width:100%;gap:8px}.journey-hud{top:146px}.character-open{bottom:205px}.character-dialog{max-height:94dvh;overflow:auto}.portrait-people{gap:6px;padding-top:12px}.topbar .text-button{padding:8px}.brand-lockup{letter-spacing:0}}
.walk-help{text-shadow:none}.scene-version{background:#faf7ed;color:#535849;padding:5px 8px;text-shadow:none}.world-screen[data-view="post"] .stage-caption{color:#454938;text-shadow:none}
@media(max-width:680px){.game-modal.poetry-modal .poetry-pocket{top:62px;left:12px;right:auto;width:60px;padding:6px;text-align:center}.game-modal.poetry-modal .poetry-pocket span,.game-modal.poetry-modal .poetry-pocket b{display:none}.game-modal.poetry-modal .poetry-pocket i{position:static;display:block;font-size:18px;padding:5px}.poetry-topline>span{font-size:14px;letter-spacing:0}}
@media(pointer:coarse) and (min-width:681px){.touch-walk,.touch-run{display:block}.touch-walk{left:18px;bottom:40px}.touch-run{right:28px;bottom:85px}.walk-help{display:none}.panel-open .touch-walk,.panel-open .touch-run,[data-camera="planet"] .touch-walk,[data-camera="planet"] .touch-run{display:none}}
@media(min-width:681px) and (max-height:520px){.character-dialog[open]{width:760px;max-width:94vw;padding:16px;display:grid;grid-template-columns:1fr 1fr;gap:6px 18px}.portrait-canvas{grid-column:1;grid-row:1/6;height:calc(100dvh - 72px);min-height:0}.portrait-heading,.portrait-caption,.portrait-turns,.portrait-people,.portrait-note{grid-column:2;margin:0}.portrait-heading{padding-top:12px}.portrait-heading h2{font-size:20px;margin:6px 0}.portrait-heading p{margin:4px 0;font-size:14px}.portrait-people{padding-top:7px;gap:5px}.portrait-people button{min-width:48px;width:48px}.portrait-turns{gap:6px}.portrait-turns button{padding:7px 12px}.portrait-note{font-size:14px}.character-close{top:10px;right:10px}}
@media(prefers-reduced-motion:reduce){button{transition:none!important}}
.poetry-dock .poetry-actions button:hover{transform:none}


/* B01 atlas and twelve reachable street destinations. */
.town-map-panel{width:330px;background:#f8f3e4;border:1px solid #859578;padding:13px;box-shadow:4px 5px 0 #475c3829;max-height:calc(100dvh - 210px);overflow:auto}.map-heading{font-size:13px;margin-bottom:10px}.map-heading span{font-size:11px}.map-destinations{grid-template-columns:repeat(3,1fr);gap:5px}.map-destinations button{min-height:34px;font-size:11px;background:#fdf9ed;border:1px solid #c5ccb4;color:#52654a}.map-destinations button:hover{background:#e1e7d2}.town-map-panel p{font-size:11px;line-height:1.8}.atlas-link{display:block;padding:10px 0 3px;color:#975740;text-align:center;font-size:12px;border-top:1px solid #d4d6be;margin-top:9px}.atlas-link:hover{color:#603f2c}@media(max-width:680px){.town-map-panel{width:min(330px,calc(100vw - 26px));right:13px;top:135px;max-height:calc(100dvh - 205px)}.map-destinations button{min-height:38px}.map-heading{font-size:13px}}
/* Cast loading is visible before entry, and failed assets can be retried. */
.cast-loading{position:fixed;right:24px;bottom:24px;z-index:200;max-width:calc(100vw - 48px);padding:14px 20px;background:#f5ecd8;color:#384b3d;border:1px solid #948971;box-shadow:0 4px 18px #293b3520;font-size:14px}
.cast-loading[hidden]{display:none}
.cast-loading button{margin-left:14px;padding:6px 12px;border:1px solid #948971;background:#e9dfc4;color:#384b3d;cursor:pointer}
.role-card:disabled{opacity:.65;cursor:wait}
.portrait-people{flex-wrap:wrap}
#portrait-canvas[aria-busy="true"]::after{content:'正在展开小像…';position:absolute;inset:45% 0 auto;text-align:center;color:#596349}
/* Compact local weather remains legible at narrow widths. */
.weather-widget{position:relative;pointer-events:auto;color:#384e48;font-size:13px;align-self:center}
.weather-widget summary{list-style:none;display:flex;gap:8px;align-items:center;cursor:pointer;min-height:48px;padding:8px 13px;background:#faf7ed;border:1px solid #818d77;box-shadow:2px 3px 0 #32483522}
.weather-widget summary::-webkit-details-marker{display:none}.weather-widget summary:focus-visible{outline:3px solid #607987;outline-offset:3px}
#weather-icon{font-size:21px}#weather-status{white-space:nowrap}.weather-popover{position:absolute;top:58px;right:0;width:260px;padding:16px;background:#faf7ed;border:1px solid #7a8b78;box-shadow:4px 5px 0 #32483533;font-size:13px;line-height:1.8;z-index:15}
.weather-popover p{margin:0 0 9px}.weather-source{font-size:11px;color:#778273}.weather-source a{color:#5b776e}.weather-popover #weather-refresh{color:#384e48;background:#e9ebdc;border:1px solid #9ca993;box-shadow:none;min-height:36px;font-size:12px}
.weather-widget[data-kind="rain"] summary{background:#e0e9e5}.weather-widget[data-day="night"] summary{background:#d8e2de}.weather-widget[data-kind="snow"] summary{background:#edf3eb}
.world-stage:has(#weather-widget[open]) .scene-tools{z-index:14}.weather-widget[open]{z-index:14}.world-stage:has(#weather-widget[open]) .journey-hud{visibility:hidden}
@media(max-width:1050px) and (min-width:681px){.scene-version{max-width:185px;font-size:12px}.weather-widget summary{padding:7px}.scene-tool-buttons{gap:5px}}
@media(max-width:680px){.scene-tools{flex-wrap:wrap;gap:8px}.scene-tools .scene-version{font-size:11px;max-width:125px}.scene-tool-buttons{width:100%;max-width:100%;justify-content:flex-start;gap:7px;flex-wrap:nowrap}.scene-tools button{min-height:40px;min-width:40px;font-size:11px;padding:6px 8px}.weather-widget{font-size:11px;margin-right:auto}.weather-widget summary{min-height:40px;padding:5px 8px;gap:4px}#weather-icon{font-size:17px}.weather-popover{right:auto;left:0;top:48px;width:min(270px,calc(100vw - 40px))}.journey-hud{top:193px}.town-map-panel{top:174px;max-height:calc(100dvh - 250px)}}
