/* WebNovel Hub v1.20.2 — Interactive Maps */
.map-view{padding:0!important;min-height:calc(100dvh - var(--topbar-h,72px));}
.map-shell{position:relative;min-height:calc(100dvh - var(--topbar-h,72px));background:#0b0a0e;overflow:hidden;isolation:isolate;}
.map-stage{position:absolute;inset:0;overflow:hidden;touch-action:none;background:radial-gradient(circle at 50% 45%,rgba(78,62,44,.18),transparent 55%),#0b0a0e;}
.map-stage canvas{display:block;width:100%;height:100%;touch-action:none;user-select:none;-webkit-user-select:none;}
.map-topbar{position:absolute;z-index:8;top:max(12px,env(safe-area-inset-top));left:max(12px,env(safe-area-inset-left));right:max(12px,env(safe-area-inset-right));display:flex;align-items:center;gap:10px;pointer-events:none;}
.map-topbar>*{pointer-events:auto;}
.map-back,.map-reading-return,.map-world-return,.map-info-btn{min-height:44px;border-radius:14px;border:1px solid rgba(255,255,255,.15);background:rgba(10,8,15,.84);backdrop-filter:blur(14px);color:var(--text,#f5efff);padding:10px 14px;}
.map-reading-return{font-weight:800;}
.map-breadcrumb{min-width:0;display:flex;align-items:center;gap:7px;padding:10px 13px;border-radius:14px;background:rgba(10,8,15,.78);border:1px solid rgba(255,255,255,.11);backdrop-filter:blur(14px);color:var(--muted,#c8bad8);font-size:.85rem;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}
.map-breadcrumb b{color:var(--text,#fff);font-weight:800;}
.map-actions{margin-left:auto;display:flex;gap:8px;}
.map-place-card{position:absolute;z-index:9;left:50%;bottom:calc(max(18px,env(safe-area-inset-bottom)) + var(--bottom-nav-height,0px));transform:translateX(-50%);width:min(92vw,440px);padding:13px;border-radius:18px;background:rgba(10,8,15,.92);border:1px solid rgba(255,255,255,.13);backdrop-filter:blur(18px);box-shadow:0 18px 54px rgba(0,0,0,.35);display:grid;grid-template-columns:1fr auto;gap:10px;align-items:center;}
.map-place-card[hidden]{display:none!important;}
.map-place-card small{display:block;color:var(--muted,#b8abc6);font-size:.74rem;text-transform:uppercase;letter-spacing:.08em;}
.map-place-card strong{display:block;margin-top:2px;color:var(--text,#fff);font-size:1rem;line-height:1.2;}
.map-place-card-actions{display:flex;gap:8px;align-items:center;}
.map-place-card button{min-height:42px;}
.map-legend{position:absolute;z-index:10;right:max(12px,env(safe-area-inset-right));bottom:calc(max(18px,env(safe-area-inset-bottom)) + var(--bottom-nav-height,0px));width:min(86vw,360px);padding:14px;border-radius:18px;background:rgba(10,8,15,.94);border:1px solid rgba(255,255,255,.13);backdrop-filter:blur(18px);}
.map-legend[hidden]{display:none!important;}
.map-legend-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px;}
.map-legend-list{display:grid;gap:8px;max-height:42vh;overflow:auto;}
.map-legend-row{display:flex;align-items:center;gap:10px;color:var(--text,#fff);font-size:.9rem;}
.map-legend-symbol{width:28px;height:28px;display:grid;place-items:center;border-radius:9px;border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.06);font-size:.9rem;}
.map-empty,.map-error{position:absolute;z-index:7;inset:0;display:grid;place-items:center;padding:24px;text-align:center;background:#0b0a0e;color:var(--text,#fff);}
.map-empty[hidden],.map-error[hidden]{display:none!important;}
.map-empty>div,.map-error>div{max-width:560px;padding:22px;border:1px solid rgba(255,255,255,.11);border-radius:20px;background:rgba(255,255,255,.04);}
.map-empty h2,.map-error h2{margin:0 0 8px;}
.map-status-chip{position:absolute;z-index:6;left:50%;top:calc(max(68px,env(safe-area-inset-top)) + 10px);transform:translateX(-50%);padding:7px 10px;border-radius:999px;background:rgba(8,7,12,.7);border:1px solid rgba(255,255,255,.09);color:var(--muted,#bdb0ca);font-size:.72rem;backdrop-filter:blur(10px);pointer-events:none;}
.map-reader-button{display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap;}
.reader-controls.v120-map-enabled{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);}
.reader-controls.v120-map-enabled .scene-counter{position:absolute;left:50%;bottom:calc(100% + 5px);transform:translateX(-50%);pointer-events:none;}
#readerMapBtn[hidden]{display:none!important;}
.detail-map-btn{white-space:nowrap;}
.codex-map-jump{margin-top:12px;width:100%;}
.map-debug-badge{font-variant-numeric:tabular-nums;}
@media (max-width:599px){
  .map-topbar{gap:7px;}
  .map-back,.map-reading-return,.map-world-return,.map-info-btn{padding:9px 11px;font-size:.84rem;}
  .map-breadcrumb{max-width:42vw;padding:9px 10px;}
  .map-reading-return span.long{display:none;}
  .map-place-card{grid-template-columns:1fr;}
  .map-place-card-actions{justify-content:stretch;}
  .map-place-card-actions button{flex:1;}
}
@media (min-width:900px){
  .map-shell{min-height:calc(100dvh - 76px);}
  .map-topbar{top:18px;left:20px;right:20px;}
  .map-place-card{bottom:28px;}
  .map-legend{bottom:28px;right:20px;}
}
@media (prefers-reduced-motion:reduce){.map-place-card,.map-legend{transition:none!important;}}
body.map-active{overflow:hidden;}
body.map-active .topbar,body.map-active .bottom-nav,body.map-active .install-banner,body.map-active #creatorReaderPreviewBar{display:none!important;}
body.map-active .app-shell,body.map-active main{padding:0!important;margin:0!important;max-width:none!important;}
body.map-active .map-view{min-height:100dvh;}
body.map-active .map-shell{min-height:100dvh;height:100dvh;}
.map-reading-return .short{display:none;}
body.map-active .map-view.active{display:block;position:fixed;inset:0;z-index:150;}
@media (max-width:599px){.map-reading-return .long{display:none}.map-reading-return .short{display:inline}}
.map-validation-lines{display:grid;gap:4px;margin-top:8px;font-size:.82rem;line-height:1.35}.map-validation-lines span{display:block}

/* v1.20.2 — Map Performance & Layout */
body.map-active{overscroll-behavior:none;touch-action:none;}
body.map-active .map-shell{height:100dvh;min-height:100dvh;max-height:100dvh;}
.map-stage{contain:strict;overscroll-behavior:none;}
.map-stage canvas{contain:layout paint size;overscroll-behavior:none;-webkit-tap-highlight-color:transparent;}
.map-place-card{max-height:min(32dvh,220px);overflow:auto;}
@media (orientation:portrait){
  .map-place-card{bottom:max(14px,env(safe-area-inset-bottom));}
  .map-legend{bottom:max(14px,env(safe-area-inset-bottom));}
}
@media (orientation:landscape) and (max-height:600px){
  .map-topbar{top:max(6px,env(safe-area-inset-top));}
  .map-status-chip{top:58px;}
  .map-place-card{left:auto;right:max(12px,env(safe-area-inset-right));bottom:max(12px,env(safe-area-inset-bottom));transform:none;width:min(38vw,420px);}
}
