/* Explore map — full-screen national town map. Committed warm/stylized look (single theme),
   built on the shared design.css tokens. Map canvas colours live in explore.js. */
/* Full-screen shell: the shared app header (.site-header) sits on top, the map fills the rest. */
.explore-body{
  margin:0;height:100vh;display:flex;flex-direction:column;overflow:hidden;
  background:var(--bg);color:var(--text);
  font-family:"Public Sans",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
}
.explore-body>.site-header{flex:none;z-index:40}

/* --- map stage --- */
.xp-stage{position:relative;flex:1;min-height:0;overflow:hidden;background:var(--bg)}
#xpMap{display:block;width:100%;height:100%;cursor:grab;touch-action:none}
#xpMap.grabbing{cursor:grabbing}

/* --- overlays --- */
.xp-hint{
  position:absolute;top:14px;left:50%;transform:translateX(-50%);margin:0;
  background:rgba(255,253,249,.82);backdrop-filter:blur(6px);
  border:1px solid var(--line-2);color:var(--muted);font-size:12.5px;font-weight:600;
  padding:6px 14px;border-radius:999px;pointer-events:none;transition:opacity .5s;white-space:nowrap;z-index:4;
}
.xp-loading{
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:12px;
  background:var(--bg);color:var(--muted);font-size:14px;font-weight:600;z-index:6;transition:opacity .35s;
}
.xp-loading.done{opacity:0;pointer-events:none}
.xp-spinner{width:20px;height:20px;border-radius:50%;border:2.5px solid var(--line-2);border-top-color:var(--green);animation:xpspin .8s linear infinite}
@keyframes xpspin{to{transform:rotate(360deg)}}

.xp-zc{position:absolute;top:14px;right:14px;display:flex;flex-direction:column;gap:6px;z-index:4}
.xp-zc button{
  width:36px;height:36px;border-radius:10px;border:1px solid var(--line-2);
  background:rgba(255,253,249,.9);backdrop-filter:blur(6px);color:var(--text);
  font-size:19px;font-weight:700;cursor:pointer;display:grid;place-items:center;line-height:1;
}
.xp-zc button:hover{border-color:var(--green);color:var(--green)}
.xp-zc button:focus-visible{outline:2px solid var(--green);outline-offset:2px}
.xp-zc .xp-reset{font-size:11px;font-weight:800;letter-spacing:.04em}

.xp-caption{
  position:absolute;left:16px;bottom:16px;max-width:300px;z-index:4;
  background:rgba(255,253,249,.9);backdrop-filter:blur(8px);
  border:1px solid var(--line-2);border-radius:14px;padding:14px 16px;
  box-shadow:0 6px 24px rgba(42,44,34,.12);
}
.xp-caption h2{font-family:"Bricolage Grotesque",system-ui,sans-serif;font-size:17px;font-weight:700;margin:0 0 4px;letter-spacing:-.01em;color:var(--text)}
.xp-caption p{margin:0;font-size:12.5px;line-height:1.5;color:var(--muted)}
.xp-stat{display:flex;align-items:baseline;gap:6px;margin-top:10px;padding-top:10px;border-top:1px solid var(--line-2)}
.xp-stat b{font-size:20px;font-variant-numeric:tabular-nums;font-family:"Bricolage Grotesque",system-ui,sans-serif;color:var(--text)}
.xp-stat span{font-size:11.5px;color:var(--muted)}

.xp-tip{
  position:fixed;pointer-events:none;z-index:20;background:#12140f;color:#fff;
  border-radius:10px;padding:8px 11px;font-size:13px;line-height:1.35;
  box-shadow:0 8px 26px rgba(0,0,0,.34);max-width:230px;
}
.xp-tip b{display:block;font-size:13.5px;font-weight:700;letter-spacing:-.01em}
.xp-tip .rg{color:#cdd2c6;font-size:11.5px}
.xp-tip .go{margin-top:5px;color:#7fe0aa;font-size:11px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}

.xp-toast{
  position:absolute;left:50%;bottom:16px;transform:translate(-50%,14px);opacity:0;z-index:8;
  background:var(--green);color:#fff;font-weight:600;font-size:13.5px;padding:11px 18px;border-radius:12px;
  box-shadow:0 10px 30px rgba(14,159,87,.36);transition:opacity .2s,transform .2s;pointer-events:none;white-space:nowrap;
}
.xp-toast.on{opacity:1;transform:translate(-50%,0)}

@media (max-width:640px){
  .xp-head{gap:10px;padding:0 12px;height:54px}
  .xp-head-title{display:none}
  .xp-search{flex-basis:auto;margin-left:auto}
  .xp-caption{left:10px;right:10px;bottom:10px;max-width:none}
}
@media (prefers-reduced-motion:reduce){.xp-spinner{animation:none}.xp-toast,.xp-loading{transition:none}}
