:root{--ink: #13241c;--mist: #e7f0e8;--canopy: #1f4d38;--sun: #f0c27a;--glass: rgba(19, 36, 28, .55);--font-display: "Fraunces", Georgia, serif;--font-body: "Source Sans 3", system-ui, sans-serif}*{box-sizing:border-box}html,body{margin:0;height:100%;overflow:hidden;background:radial-gradient(120% 80% at 70% 10%,#f3d7a0 0%,transparent 45%),linear-gradient(160deg,#87b7c9,#dfead9 42%,#9bb892);color:var(--mist);font-family:var(--font-body)}#world{display:block;width:100%;height:100%;touch-action:none}#ui{pointer-events:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:2}.brand{position:absolute;top:1.25rem;left:1.25rem;text-shadow:0 2px 18px rgba(0,0,0,.35)}.brand-name{margin:0;font-family:var(--font-display);font-size:clamp(1.8rem,4vw,2.6rem);font-weight:700;letter-spacing:-.02em}.brand-place{margin:.2rem 0 0;font-size:.95rem;opacity:.9}.toolbar{pointer-events:auto;position:absolute;top:1.25rem;right:1.25rem;display:flex;flex-wrap:wrap;gap:.4rem;justify-content:flex-end;max-width:min(28rem,calc(100vw - 2rem))}.mode-toggle{display:inline-flex;padding:.15rem;border-radius:999px;background:var(--glass);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.toolbar button{border:0;cursor:pointer;font:inherit;color:var(--mist);background:transparent;padding:.4rem .75rem;border-radius:999px}.toolbar button.active{background:#f0c27a47;color:#fff8e8}.toolbar .action{background:var(--glass);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.toolbar .action:hover{background:#13241cb8}.progress{position:absolute;top:5.5rem;right:1.25rem;min-width:9.5rem;padding:.4rem .75rem;border-radius:999px;background:var(--glass);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);font-size:.85rem;text-align:center;box-shadow:inset 0 0 0 1px #f0c27a2e}.progress:before{content:"";display:block;height:3px;margin:0 0 .35rem;border-radius:999px;background:linear-gradient(90deg,var(--sun) var(--pct),rgba(231,240,232,.2) var(--pct))}.trail-status{position:absolute;top:8rem;right:1.25rem;margin:0;font-size:.8rem;opacity:.85;text-shadow:0 1px 10px rgba(0,0,0,.35);text-align:right}.map-legend{position:absolute;left:1.25rem;bottom:4rem;display:flex;gap:.75rem;padding:.45rem .7rem;border-radius:.7rem;background:var(--glass);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);font-size:.75rem}.map-legend span{display:inline-flex;align-items:center;gap:.3rem}.swatch{width:.75rem;height:.3rem;border-radius:999px}.swatch.water{background:#0787b5}.swatch.road{background:#f0e2bd}.swatch.trail{background:#d18a42}.swatch.building{background:#e3b47f}.hint{position:absolute;left:50%;bottom:1.1rem;transform:translate(-50%);padding:.45rem .9rem;border-radius:999px;background:var(--glass);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);font-size:.85rem;white-space:nowrap;max-width:calc(100vw - 2rem);overflow:hidden;text-overflow:ellipsis;display:flex;gap:.75rem;align-items:baseline}.map-credit{opacity:.65;font-size:.72rem}.panel{pointer-events:auto;position:absolute;right:1.25rem;top:50%;transform:translateY(-50%);width:min(22rem,calc(100vw - 2rem));padding:1.25rem 1.35rem 1.4rem;border-radius:1rem;background:#13241cd1;border:1px solid rgba(240,194,122,.28);box-shadow:0 18px 50px #00000047;animation:rise .42s ease both}.panel.hidden{display:none}.panel h2{margin:0 1.5rem .55rem 0;font-family:var(--font-display);font-size:1.45rem;color:var(--sun)}.panel p{margin:0;line-height:1.45;color:var(--mist)}#panel-close{position:absolute;top:.55rem;right:.7rem;border:0;background:transparent;color:var(--mist);font-size:1.4rem;cursor:pointer}.toast{position:absolute;left:50%;bottom:4rem;transform:translate(-50%) translateY(8px);padding:.55rem 1rem;border-radius:999px;background:#13241ce0;border:1px solid rgba(240,194,122,.35);opacity:0;pointer-events:none;transition:opacity .2s ease,transform .2s ease;font-size:.9rem}.toast.show{opacity:1;transform:translate(-50%) translateY(0)}@keyframes rise{0%{opacity:0;transform:translateY(calc(-50% + 12px))}to{opacity:1;transform:translateY(-50%)}}@media(max-width:720px){.brand{top:.85rem;left:.85rem}.toolbar{top:auto;bottom:3.4rem;right:.75rem;left:.75rem;max-width:none;justify-content:center}.progress{top:4.6rem;right:.85rem}.trail-status{top:7.1rem;right:.85rem}.map-legend{display:none}.panel{top:auto;bottom:7.2rem;transform:none;right:1rem;left:1rem;width:auto}.panel.hidden{display:none}@keyframes rise{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}}
