:root{--accent:#1f6fb2;--text:#1d2a33;--muted:#5b6b76;--surface:#fff;--shadow:0 12px 40px #14283c2e;--panel-width:clamp(420px, 30vw, 560px);color:var(--text);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif}*{box-sizing:border-box}html,body{background:#fff;height:100%;margin:0;overflow:hidden}#scene{touch-action:none;outline:none;width:100%;height:100%;display:block}.poi-badge{color:#fff;font-variant-numeric:tabular-nums;border-radius:9px;flex:none;place-items:center;min-width:18px;height:18px;padding:0 4px;font-size:11px;font-weight:700;line-height:1;display:inline-grid}.poi-badge__text{text-box:trim-both cap alphabetic;display:block}.poi-labels{pointer-events:none;z-index:4;position:fixed;inset:0;overflow:hidden}.poi-labels__lines{width:100%;height:100%;position:absolute;inset:0}.poi-labels__lines line{stroke:#1d2a3373;stroke-width:1px}.poi-label{color:var(--text);white-space:nowrap;pointer-events:auto;cursor:pointer;will-change:transform;background:#fffffff2;border:0;border-radius:999px;align-items:center;gap:6px;padding:4px 10px 4px 4px;font-family:inherit;font-size:13px;font-weight:600;line-height:1.2;transition:box-shadow .15s,color .15s;display:flex;position:absolute;top:0;left:0;box-shadow:0 2px 8px #14283c2e}.poi-label.is-hidden{visibility:hidden}.poi-label:hover,.poi-label.is-hovered{color:var(--accent);box-shadow:0 3px 12px #14283c47}.poi-label.is-selected{outline:2px solid var(--accent);z-index:2}.poi-label.is-compact{gap:0;padding:4px}.poi-label.is-compact .poi-label__title{display:none}.poi-label.is-compact:hover,.poi-label.is-compact.is-hovered{z-index:1;gap:6px;padding-right:10px}.poi-label.is-compact:hover .poi-label__title,.poi-label.is-compact.is-hovered .poi-label__title{display:inline}.poi-cluster{color:var(--text);pointer-events:auto;cursor:pointer;will-change:transform;background:0 0;border:0;padding:8px 8px 0 0;font-family:inherit;position:absolute;top:0;left:0}.poi-cluster:before,.poi-cluster:after{content:"";border-radius:999px;position:absolute;box-shadow:0 1px 4px #14283c2e}.poi-cluster:before{background:#ffffffbf;inset:0 0 8px 8px}.poi-cluster:after{background:#ffffffe0;inset:4px}.poi-cluster.is-hidden{visibility:hidden}.poi-cluster:hover .poi-cluster__card,.poi-cluster.is-hovered .poi-cluster__card{color:var(--accent);box-shadow:0 3px 12px #14283c47}.poi-cluster__card{z-index:1;white-space:nowrap;background:#fffffff2;border-radius:999px;align-items:center;gap:5px;padding:5px 12px;font-size:13px;font-weight:600;line-height:1.2;transition:box-shadow .15s,color .15s;display:flex;position:relative;box-shadow:0 2px 8px #14283c2e}.poi-cluster__count{font-variant-numeric:tabular-nums;font-weight:800}.legend{background:var(--surface);width:240px;max-height:calc(100vh - 32px);box-shadow:var(--shadow);z-index:6;border-radius:12px;flex-direction:column;font-size:14px;display:flex;position:fixed;bottom:16px;left:16px}.legend ul{margin:0;padding:0;list-style:none}@media (max-width:767px){.legend{z-index:11;width:min(240px,100vw - 24px);max-height:60vh;top:12px;bottom:auto;left:12px}}.legend__toggle{color:var(--text);font:inherit;cursor:pointer;background:0 0;border:0;justify-content:space-between;align-items:center;padding:12px 16px;font-weight:700;display:flex}.legend__toggle svg{transition:transform .2s}.legend.is-open .legend__toggle svg{transform:rotate(180deg)}@media (max-width:767px){.legend__toggle svg{transform:rotate(180deg)}.legend.is-open .legend__toggle svg{transform:none}}.legend__body{padding:0 16px 14px;display:none;overflow-y:auto}.legend.is-open .legend__body{display:block}.legend__section[hidden]{display:none}.legend__section+.legend__section{margin-top:12px}.legend__heading{color:var(--muted);letter-spacing:.06em;text-transform:uppercase;margin:0 0 6px;font-size:11px;font-weight:600}.legend__item{align-items:center;gap:10px;padding:4px 0;display:flex}.legend__swatch{border-radius:3px;flex:none;width:18px;height:12px;box-shadow:inset 0 0 0 1px #0000001f}.legend__item--poi{width:calc(100% + 12px);color:var(--text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;margin:0 -6px;padding:4px 6px}.legend__item--poi:hover,.legend__item--poi.is-hovered{background:#eef2f5}.legend__item--poi.is-selected{color:var(--accent);font-weight:600}.panel{width:var(--panel-width);background:var(--surface);max-width:calc(100vw - 32px);box-shadow:var(--shadow);z-index:10;border-radius:14px;transition:transform .35s cubic-bezier(.2,.8,.2,1);position:fixed;top:16px;bottom:16px;right:16px;overflow-y:auto;transform:translate(calc(100% + 32px))}.panel.is-open{transform:none}@media (min-width:767px) and (max-width:1049px){.panel{width:calc(50vw - 16px)}}@media (max-width:767px){.panel{width:100%;max-width:none;max-height:55vh;max-height:55dvh;padding-bottom:env(safe-area-inset-bottom);border-radius:16px 16px 0 0;inset:auto 0 0;transform:translateY(100%)}}.panel__close{float:right;width:36px;height:36px;color:var(--text);cursor:pointer;z-index:1;background:#ffffffeb;border:0;border-radius:50%;place-items:center;margin:10px 10px -46px 0;display:grid;position:sticky;top:10px;box-shadow:0 2px 8px #00000026}.panel__close:hover{color:var(--accent)}.panel__image{aspect-ratio:4/3;object-fit:cover;background:#eef2f5;width:100%;display:block}.panel__image[hidden]{display:none}@media (max-width:767px){.panel__image{aspect-ratio:16/9}}.panel__body{padding:20px 24px 28px}.panel__title{margin:0 48px 12px 0;font-size:1.35rem;line-height:1.25}.panel__text{color:var(--muted);line-height:1.6}.panel__text p{margin:0 0 .9em}.panel__text a{color:var(--accent)}.loader{z-index:20;background:#fff;flex-direction:column;justify-content:center;align-items:center;gap:14px;transition:opacity .5s;display:flex;position:fixed;inset:0}.loader.is-done{opacity:0;pointer-events:none}.loader__bar{background:#1f6fb226;border-radius:2px;width:min(240px,60vw);height:4px;overflow:hidden}.loader__bar span{background:var(--accent);width:0;height:100%;transition:width .2s;display:block}.loader.is-error .loader__bar{display:none}.loader__text{color:var(--muted);text-align:center;margin:0;padding:0 16px;font-size:14px}
