/* Exploration owns the viewport; menus can be pulled out of its edges. */
body.immersive{overflow:hidden;background:#b9c5ae}
.immersive main,.immersive .game-layout,.immersive .exploration,.immersive .map-card{display:contents}
.immersive .topbar,.immersive .chapter-heading,.immersive .panel-heading,.immersive .bottom-note,.immersive main>footer,.immersive .paper-grain{display:none}
.immersive .map-frame{position:fixed;inset:0;border:0;border-radius:0;margin:0;width:100vw;height:100dvh;box-shadow:none}
.immersive #palace-map{width:100%;height:100%;min-height:0;aspect-ratio:auto;image-rendering:auto}
.world-flash{position:absolute;inset:0;z-index:9;background:#fffef2;pointer-events:none;opacity:0}
.world-hud{position:fixed;top:20px;left:26px;right:26px;display:flex;justify-content:space-between;align-items:flex-start;gap:15px;z-index:6;pointer-events:none;color:#f6efd7;text-shadow:0 2px 5px #233d36}
.world-clock{display:flex;flex-direction:column;gap:5px;padding:11px 18px;border-left:3px solid #bca56e;background:linear-gradient(90deg,#293e38bd,#293e3800);min-width:270px;font:12px var(--serif)}
.world-clock strong{font-size:24px;letter-spacing:3px}.world-clock #world-weather{color:#e4d9b6;font-size:11px}
.world-shortcuts{display:flex;gap:8px;pointer-events:auto}.world-shortcuts button{background:#304a40d6;color:#f5eace;border:1px solid #b8b79788;padding:9px 13px;font:12px var(--serif);border-radius:3px;box-shadow:0 3px 0 #283d36}
.world-shortcuts button:hover{background:#597463}.world-shortcuts button.on{background:#6d8a76;color:#fff8e2;border-color:#e8dcb0}.world-shortcuts button[hidden]{display:none}
.immersive .map-caption{position:fixed;bottom:17px;left:50%;transform:translateX(-50%);padding:7px 13px;margin:0;max-width:70vw;border:1px solid #b7c0a177;background:#2b433bd9;color:#f5edce;font:11px var(--serif);z-index:5;border-radius:3px;white-space:normal;text-align:center}
.map-label{border:2px solid #445e4e;box-shadow:2px 3px 0 #243e3744;background:#eee4c9;color:#364d40;border-radius:2px;font-size:12px}.map-label.npc-label{border-width:2px}.map-labels{z-index:3}
.edge-drawer{position:fixed;z-index:12;transition:transform .28s ease;background:#f0ead6f5;color:#3b5144;box-shadow:0 0 25px #263e3630;border:1px solid #9caa8d;max-height:calc(100dvh - 140px)}
.edge-left{left:0;top:145px;width:255px;transform:translateX(-100%);border-left:0}.edge-right{right:0;top:145px;width:310px;transform:translateX(100%);border-right:0}.edge-bottom{left:50%;bottom:0;width:min(840px,calc(100vw - 96px));transform:translate(-50%,100%);border-bottom:0;max-height:58dvh}
.edge-left.is-open,.edge-right.is-open{transform:translateX(0)}.edge-bottom.is-open{transform:translate(-50%,0)}
.edge-content{padding:18px;overflow:auto;max-height:calc(100dvh - 180px);overscroll-behavior:contain}.edge-bottom .edge-content{max-height:52dvh}
.edge-handle{position:absolute;background:#314b40ee;color:#efe5c7;border:1px solid #a2ac88;font:12px var(--serif);padding:18px 9px;cursor:ew-resize;touch-action:none;box-shadow:0 4px 10px #243c3533}
.edge-left .edge-handle{left:100%;top:20px;border-radius:0 4px 4px 0;writing-mode:vertical-rl}.edge-right .edge-handle{right:100%;top:20px;border-radius:4px 0 0 4px;writing-mode:vertical-rl}
.edge-bottom .edge-handle{bottom:100%;left:50%;transform:translateX(-50%);padding:9px 25px;white-space:nowrap;border-radius:5px 5px 0 0;cursor:ns-resize}
.edge-content .top-tools{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:0;padding:0}.edge-content .top-tools .tool{background:#e0ddc8;border:1px solid #b6b9a0;padding:12px 6px;color:#405a49}
.drawer-heading{font-size:13px;margin:20px 0 10px}.edge-content .map-camera{position:static;display:flex;background:#e7e3d1;margin:0;box-shadow:none;justify-content:space-between}.key-guide{font:11px/1.9 var(--serif);color:#5e6c59}.key-guide p{margin:9px 0}kbd{font:10px monospace;background:#d9decc;border:1px solid #bbc3ab;padding:2px 4px;border-radius:3px}
.edge-content .character-sidebar{display:block;width:auto}.edge-content .portrait-card{height:240px;min-height:0;margin:0 0 12px;border:1px solid #b8bda4}.edge-content .portrait-top{padding:12px}.edge-content .portrait-copy{bottom:12px}.edge-content .portrait-copy h2{font-size:23px}.edge-content .portrait-poem{display:none}.edge-content .main-portrait{max-height:220px;object-fit:contain;object-position:top}.edge-content #main-portrait-placeholder{display:none}.edge-content .stats-card{padding:14px;border:1px solid #b8bda4}.edge-content .stats-heading h2{font-size:15px}.edge-content .stat-row{margin:10px 0}.edge-content .bond-heading{margin-top:14px}
#pixel-preview{position:absolute;left:50%;top:36px;transform:translateX(-50%);width:102px;height:141px;image-rendering:pixelated}
.edge-content .destinations{margin:0 0 14px;padding:0;display:flex;flex-wrap:wrap;gap:6px}.edge-content .destination{flex:1;padding:9px 8px;white-space:nowrap}.edge-content .location-card{padding:0;background:none;border:0;box-shadow:none}.edge-content .location-title h2{font-size:21px}.edge-content .location-title p{font-size:12px}.edge-content .activities{margin-top:10px;gap:8px}.edge-content .activity{padding:12px;min-height:0}.edge-content .activity-desc{font-size:11px}.edge-content .activity-name{font-size:14px}
.immersive .mobile-controls{display:none;position:fixed;bottom:70px;left:20px;z-index:6;background:#eff0d8ba;padding:6px;border-radius:8px}.immersive .toast{z-index:50;bottom:65px}
@media(max-width:650px){.world-hud{top:12px;left:14px;right:14px;gap:5px}.world-clock{min-width:0;padding:8px 10px;max-width:65vw}.world-clock strong{font-size:19px}.world-clock #world-date{font-size:10px}.world-shortcuts{flex-direction:column;gap:4px}.world-shortcuts button{font-size:10px;padding:7px}.edge-left,.edge-right{top:125px;max-height:calc(100dvh - 145px)}.edge-right{width:min(290px,calc(100vw - 42px))}.edge-left{width:min(250px,calc(100vw - 42px))}.edge-content{max-height:calc(100dvh - 165px);padding:12px}.edge-bottom{width:calc(100vw - 28px)}.edge-bottom .edge-content{max-height:55dvh}.edge-content .activities{grid-template-columns:1fr 1fr}.edge-content .activity-desc,.edge-content .activity-gain{display:none}.immersive .map-caption{font-size:10px;bottom:37px;max-width:82vw;width:max-content}.map-label{font-size:10px;padding:4px 6px}.edge-handle{padding:15px 8px}.world-shortcuts #world-travel{max-width:80px}}
@media(pointer:coarse){.immersive .mobile-controls{display:flex}}
/* Logic/UI ownership: avoid overlap with the bottom drawer handle and touch controls. */
.immersive .map-caption{bottom:58px}
/* 触屏上左下方向键／右下「交谈」圆钮占了底部一条，提示行要抬到它们上方。 */
@media(pointer:coarse){.immersive .map-caption{bottom:126px;max-width:52vw}}
.immersive.drawer-places-open .map-caption,.immersive.drawer-places-open .mobile-controls{visibility:hidden;pointer-events:none}
.immersive .edge-bottom{padding-bottom:env(safe-area-inset-bottom,0px)}
.immersive #pixel-preview{image-rendering:auto}
@media(prefers-reduced-motion:reduce){.edge-drawer{transition:none}}
/* 2026-10-14 手机端重做：交谈独立成右下角圆钮；横屏时底部「地点与安排」只露出把手、点开再展开；
   方向键留在左下；滚轮／单指滑动负责走动（见 world-map.js 的 stick）。 */
.immersive .mobile-controls{gap:6px}
.immersive .mobile-controls #interact-button{position:fixed;right:18px;bottom:68px;width:76px;height:76px;min-width:0;padding:0;border-radius:50%;border:2px solid #bdbb95;background:#314b40f2;color:#f4ead0;font:600 15px/1 var(--serif);letter-spacing:2px;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 0 #24413a,0 10px 22px #16261f66;z-index:7}
.immersive .mobile-controls #interact-button:active{transform:translateY(2px);box-shadow:0 2px 0 #24413a}
@media(orientation:landscape) and (max-height:600px){
  .world-hud{top:8px;left:12px;right:12px;gap:8px}
  .world-clock{min-width:0;max-width:44vw;padding:6px 12px;gap:2px}
  .world-clock strong{font-size:17px;letter-spacing:2px}
  .world-clock #world-date,.world-clock #world-weather{font-size:10px}
  .world-shortcuts{gap:6px}
  .world-shortcuts button{padding:6px 10px;font-size:11px}
  .edge-left,.edge-right{top:auto;bottom:118px;max-height:min(56dvh,232px)}
  .edge-left .edge-handle,.edge-right .edge-handle{top:12px;padding:14px 8px}
  .edge-bottom{transform:translate(-50%,calc(100% - 40px));max-height:min(72dvh,262px)}
  .edge-bottom.is-open{transform:translate(-50%,0)}
  .edge-bottom .edge-handle{position:relative;left:auto;bottom:auto;transform:none;width:100%;padding:10px 20px;border-radius:6px 6px 0 0}
  .edge-bottom .edge-content{max-height:min(64dvh,222px);padding:12px}
  .edge-content .activities{grid-template-columns:1fr 1fr}
  .edge-content .activity-desc,.edge-content .activity-gain{display:none}
  .immersive .map-caption{bottom:50px;font-size:10px;max-width:44vw}
  .immersive .mobile-controls{bottom:52px;left:12px;background:rgba(239,240,216,.94)}
  .immersive .mobile-controls #interact-button{right:14px;bottom:52px;width:66px;height:66px}
  .immersive .toast{bottom:76px}
  #pixel-preview{display:none}
}

/* 2026-10-15 右手转镜头（用户 m35375）：相机按钮原本只搬进左侧「菜单」抽屉，右手够不到；
   触屏在右手边再给一对 ↶ ↷（点一下转 30°、按住连转），位置避开右下角的交谈圆钮与右侧「状态」把手。 */
.tap-camera{position:fixed;right:20px;bottom:152px;z-index:7;display:none;flex-direction:column;gap:8px}
.tap-camera button{width:48px;height:48px;min-width:0;padding:0;border-radius:50%;border:2px solid #bdbb95;background:#314b40f2;color:#f4ead0;font:600 20px/1 var(--serif);display:flex;align-items:center;justify-content:center;box-shadow:0 4px 0 #24413a,0 10px 22px #16261f66;touch-action:manipulation;-webkit-user-select:none;user-select:none}
.tap-camera button:active{transform:translateY(2px);box-shadow:0 2px 0 #24413a}
.tap-camera button:disabled{opacity:.42}
@media(pointer:coarse){.immersive .tap-camera{display:flex}}
@media(orientation:landscape) and (max-height:600px){.tap-camera{right:92px;bottom:56px;flex-direction:row;gap:9px}.tap-camera button{width:50px;height:50px;font-size:21px}}
.immersive.drawer-places-open .tap-camera{visibility:hidden;pointer-events:none}
