:root{--ink: #161513;--ink-soft: #4a463f;--paper: #f4f1ea;--paper-deep: #e7e1d6;--moss: #4e6227;--sand: #c4b496;--line: rgba(22, 21, 19, .16);--near: #8c3d22;font-family:Be Vietnam Pro,Segoe UI,sans-serif;color:var(--ink)}*{box-sizing:border-box}html,body,#app{margin:0;height:100%}body{background:#d5ddd4}#app{position:relative;overflow:hidden;background:radial-gradient(ellipse at 50% 42%,#f7f6f1,#e3ebe4 58%,#c9d4cc)}header{position:absolute;z-index:3;top:0;left:0;right:0;display:flex;justify-content:space-between;gap:16px;align-items:flex-start;padding:18px 22px 0;pointer-events:none}.brand-block h1,.brand{margin:0}.brand{font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-soft)}.brand-block h1{font-size:28px;font-weight:700;letter-spacing:-.03em;line-height:1.1}.tools{display:flex;gap:8px;pointer-events:auto}button{font:inherit;color:var(--ink);background:#f4f1eaeb;border:1px solid var(--line);border-radius:999px;padding:8px 14px;cursor:pointer}button:hover{background:#fff}#status{position:absolute;z-index:3;top:78px;left:22px;right:22px;margin:0;max-width:420px;font-size:13px;line-height:1.45;color:var(--ink-soft);pointer-events:none}#stage{position:absolute;top:0;right:0;bottom:0;left:0}#stage svg{display:block;width:100%;height:100%}.land{stroke:#1c241059;stroke-width:1;vector-effect:non-scaling-stroke}.land.nui{fill:#3e5224}.land.cao{fill:#54682e}.land.trung{fill:#667843}.land.bien{fill:#6f8650}.land.bang{fill:#8b9a62}#pins{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.pin,.callout button,.cluster-dot{pointer-events:auto;position:absolute;border-radius:0;background:transparent;border:0;padding:0;text-align:left}.pin{display:grid;grid-template-columns:12px 1fr;column-gap:6px;transform:translateY(-8px)}.pin .dot,.you{width:11px;height:11px;border-radius:50%;background:var(--ink);box-shadow:0 0 0 3px #f4f1eae6}.pin.is-near .dot{background:var(--near)}.pin .name{grid-column:2;font-size:13px;font-weight:700;line-height:1.15;text-shadow:0 1px 0 #f4f1ea,0 0 6px #f4f1ea}.pin .craft{grid-column:2;font-size:11px;color:var(--ink-soft);text-shadow:0 1px 0 #f4f1ea}.cluster-dot{width:28px;height:28px;margin:-14px 0 0 -14px;border-radius:50%;background:var(--ink);color:#f4f1ea;font-size:12px;font-weight:700;box-shadow:0 0 0 4px #f4f1eaeb}.callout{position:absolute;width:max-content;max-width:220px;background:#f4f1eaf0;border:1px solid var(--line);box-shadow:8px 12px #c4b4968c;pointer-events:auto}.callout button{position:static;display:block;width:100%;border:0;border-bottom:1px solid var(--line);border-radius:0;background:transparent;padding:7px 10px;font-size:13px}.callout button:last-child{border-bottom:0}.callout button:hover{background:#fff}.callout strong{font-weight:700}.you-wrap{position:absolute;transform:translate(-5px,-5px);pointer-events:none}.you-wrap span{display:block;margin-left:16px;font-size:11px;font-weight:600}#room{position:absolute;z-index:4;top:0;right:0;bottom:0;left:0;overflow:auto;background:var(--paper);color:var(--ink);clip-path:circle(0% at var(--ox, 50%) var(--oy, 45%));pointer-events:none;visibility:hidden}#room.is-open{visibility:visible;pointer-events:auto;clip-path:circle(150% at var(--ox, 50%) var(--oy, 45%));transition:clip-path .75s ease}.room-inner{max-width:680px;margin:0 auto;padding:28px 22px 72px}.back{border-radius:999px;margin-bottom:28px}.seal{display:inline-block;margin:0 0 18px;padding:8px 12px;border:1.5px solid rgba(140,61,34,.55);border-radius:50%;color:var(--near);font-size:11px;letter-spacing:.04em;transform:rotate(-8deg)}.room-kicker{margin:0;font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-soft)}#room h2.village-name{margin:4px 0 0;font-size:48px;line-height:1.05;letter-spacing:-.04em}.meta{margin:8px 0 0;font-size:16px}.distance{margin:6px 0 0;color:var(--ink-soft);font-size:14px}.room-section{margin-top:32px;padding-top:18px;border-top:1px solid var(--line)}.room-section h3{margin:0 0 10px;font-size:13px;letter-spacing:.12em;text-transform:uppercase}.room-section p{margin:0 0 8px;font-size:17px;line-height:1.5}.empty{color:var(--ink-soft)}.pair{margin-top:12px;border-radius:999px}@media(max-width:640px){.brand-block h1{font-size:22px}#room h2.village-name{font-size:36px}header{padding-right:12px}.tools{flex-direction:column;align-items:flex-end}}@media(prefers-reduced-motion:reduce){#room.is-open{transition:none}}
