@font-face{font-family:CityEx Sans;src:url(../fonts/cityex-sans.woff2)format("woff2");font-display:swap}:root{--bg:#f3efe6;--land:#fff;--ink:#222;--muted:#6b665c;--panel:#ffffffeb;--paper:#fbf9f4;--soft:#f7f4ee;--hover:#f4f1ea;--shadow:#0000001f;--focus:#3b82f6;--accent:#e0402a;--danger:#b4452f;--line-city:#d8d2c4;--line-city-active:#cfc8b8;--line-province:#222;--divider:var(--line-city);--dim:#f5f2eb;--dim-line:#e7e2d7;--font:"CityEx Sans", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", sans-serif;--panel-w:264px;--gap:16px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*{box-sizing:border-box}html,body{height:100%;margin:0;overflow:hidden}html{touch-action:pan-x pan-y;overscroll-behavior:none}body{overscroll-behavior:none;background:var(--bg);color:var(--ink);font:15px/1.4 var(--font);-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit;cursor:pointer}button:disabled{cursor:progress;opacity:.7}[hidden]{display:none!important}:focus-visible{outline:3px solid var(--focus);outline-offset:2px}.noscript{text-align:center;margin:40vh 16px 0}[data-busy]{cursor:wait}[data-busy] body{pointer-events:none}.btn{white-space:nowrap;border:2px solid var(--ink);box-shadow:2px 3px 0 var(--shadow);background:#fff;border-radius:6px;align-items:center;gap:6px;padding:6px 12px;display:inline-flex}.btn.primary{background:var(--ink);color:#fff}.btn:active{box-shadow:none;transform:translateY(1px)}.btn svg{fill:none;stroke:currentColor;stroke-width:2.2px;stroke-linecap:round;stroke-linejoin:round;width:18px;height:18px}.btn svg.solid{fill:currentColor;stroke:none}.btn{color:var(--ink);text-decoration:none}.icon-btn{justify-content:center;width:38px;padding:0}#brush button,#city-list button,.loc-grid button,.loc-head button,.loc-list button,.backup button{border:1.5px solid var(--ink);background:var(--c,#fff);border-radius:5px}dialog{border:2px solid var(--ink);width:min(420px,100vw - 32px);color:var(--ink);box-shadow:3px 5px 0 var(--shadow);background:#fff;border-radius:12px;padding:18px 18px 16px}dialog::backdrop{background:#22222259}dialog h2{margin:0 0 10px;font-size:20px}dialog p{margin:0 0 10px;font-size:14px}dialog .skipped{color:var(--danger);max-height:6em;font-size:13px;overflow-y:auto}dialog .modes{background:var(--soft);color:var(--muted);border-radius:8px;margin:0 0 14px;padding:10px 12px;font-size:13px;list-style:none}dialog .modes li+li{margin-top:4px}dialog .modes b{color:var(--ink);margin-right:8px}dialog textarea{resize:vertical;border:1.5px solid var(--divider);border-radius:6px;width:100%;margin-bottom:12px;padding:8px;font:12px/1.5 ui-monospace,Menlo,Consolas,monospace}dialog .actions{justify-content:flex-end;gap:8px;display:flex}#toast{z-index:30;left:50%;bottom:max(24px, env(safe-area-inset-bottom));background:var(--ink);color:#fff;max-width:calc(100vw - 32px);box-shadow:3px 5px 0 var(--shadow);border-radius:8px;padding:8px 14px;font-size:14px;position:fixed;transform:translate(-50%)}#stage{position:fixed;inset:0}#map{touch-action:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;width:100%;height:100%;display:block}.locator-body,#city-list,#brush .options,dialog{overscroll-behavior:contain}#topbar{z-index:3;padding:max(12px, env(safe-area-inset-top)) max(var(--gap), env(safe-area-inset-right)) 16px max(var(--gap), env(safe-area-inset-left));pointer-events:none;background:linear-gradient(var(--bg) 60%, color-mix(in srgb, var(--bg) 0%, transparent));align-items:center;gap:14px;display:flex;position:fixed;top:0;left:0;right:0}#topbar>*{pointer-events:auto}#crumb{white-space:nowrap;align-items:baseline;gap:6px;min-width:0;display:flex}.crumb-root{letter-spacing:1px;background:0 0;border:0;padding:0;font-size:26px;font-weight:700}#crumb-province{align-items:baseline;gap:6px;min-width:0;font-size:22px;display:inline-flex}#crumb-province .sep{color:var(--muted)}.crumb-leaf{font:inherit;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:0;padding:0;font-weight:700;overflow:hidden}[data-view=province] .crumb-root{color:var(--muted);font-size:20px}.search{border:2px solid var(--ink);min-width:0;height:38px;color:var(--muted);cursor:text;background:#fff;border-radius:8px;flex:0 300px;align-items:center;gap:8px;padding:0 12px;display:flex}.search svg{fill:none;stroke:currentColor;stroke-width:2.2px;stroke-linecap:round;flex:none;width:18px;height:18px}.search input{min-width:0;font:inherit;color:var(--ink);background:0 0;border:0;outline:none;flex:1}.search input::placeholder{color:var(--muted)}.search[aria-expanded=true]{box-shadow:0 0 0 3px var(--l3);color:var(--ink)}#topbar .btn{height:38px}#repo{margin-left:auto}#repo+#save{margin-left:-6px}#panel{z-index:2;top:72px;right:max(var(--gap), env(safe-area-inset-right));width:var(--panel-w);max-height:calc(100vh - 72px - var(--gap));max-height:calc(100dvh - 72px - var(--gap));border:2px solid var(--ink);background:var(--panel);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border-radius:10px;flex-direction:column;display:flex;position:fixed;overflow:hidden;box-shadow:3px 5px #00000014}#panel section{flex-direction:column;gap:12px;min-height:0;padding:14px;display:flex}.score-line{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.score b{font-size:40px;line-height:1}.score span{color:var(--muted);margin-left:4px}#visited{color:var(--muted);font-size:14px}#visited b{color:var(--ink)}#level-stats{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}#level-stats li{grid-template-columns:16px 1fr auto;align-items:center;gap:8px;display:grid}#level-stats i{background:var(--c);border:1.5px solid var(--ink);border-radius:4px;width:16px;height:16px}#level-stats small{color:var(--muted);margin-left:6px;font-size:12px}#level-stats b{font-size:16px}.tip{border-top:1.5px dashed var(--divider);color:var(--muted);margin:0;padding-top:10px;font-size:13px}.backup{color:var(--muted);align-items:center;gap:6px;font-size:12px;display:flex}.backup span{flex:1}.backup button{color:var(--ink);padding:2px 8px;font-size:12px}.province-head{flex-direction:column;gap:2px;display:flex}.province-head h2{margin:0;font-size:22px}#province-progress{color:var(--muted);font-size:14px}#brush{flex-direction:column;gap:6px;font-size:13px;display:flex}#brush .label{white-space:nowrap;color:var(--muted);flex:none}#brush .label small{opacity:.8;margin-left:6px;font-size:12px}#brush .options,#city-list{flex-wrap:wrap;gap:5px;display:flex}#brush button,#city-list button{padding:3px 7px;font-size:13px}#brush button.active{outline:3px solid var(--ink);outline-offset:1px}#city-list{border-top:1.5px dashed var(--divider);align-content:flex-start;padding-top:10px;overflow-y:auto}#locator{z-index:5;border:2px solid var(--ink);width:380px;max-height:min(72vh,640px);box-shadow:3px 6px 0 var(--shadow);background:#fff;border-radius:8px;flex-direction:column;display:flex;position:fixed;top:60px;left:16px;overflow:hidden}.locator-body{padding:10px 10px 12px;overflow-y:auto}.locator-body section+section{margin-top:8px}.locator-body h3{color:var(--muted);margin:4px 0;font-size:13px;font-weight:400}.loc-grid{flex-wrap:wrap;gap:6px;display:flex}.loc-grid button{align-items:baseline;gap:4px;padding:4px 8px;font-size:14px;display:inline-flex}.loc-grid small,.loc-list small{color:var(--muted);font-size:11px}.loc-head{background:#fff;align-items:center;gap:8px;padding:2px 0 8px;display:flex;position:sticky;top:0}.loc-head b{flex:1;font-size:17px}.loc-head button{padding:3px 8px;font-size:13px}.loc-list{flex-direction:column;gap:4px;display:flex}.loc-list button{text-align:left;justify-content:space-between;align-items:baseline;padding:6px 10px;display:flex}.loc-list b{font-weight:400}.loc-empty{color:var(--muted);font-size:14px}#picker{z-index:10;border:2px solid var(--ink);width:140px;box-shadow:3px 5px 0 var(--shadow);background:#fff;border-radius:10px;position:fixed;overflow:hidden}#picker h2{text-align:center;background:var(--c,#fff);border-bottom:2px solid var(--ink);margin:0;padding:6px 8px;font-size:18px;font-weight:400}#picker .options button{background:var(--c);border:0;width:100%;padding:6px 10px;display:block}#picker .options button.current{box-shadow:inset 4px 0 0 var(--ink);font-weight:700}#output{z-index:20;background:#fffffff5;flex-direction:column;justify-content:center;align-items:center;gap:12px;padding:16px;display:flex;position:fixed;inset:0}#output img{max-width:min(100%,720px);max-height:75vh;box-shadow:0 5px 20px var(--shadow)}#output p{color:var(--muted);margin:0}#map path{vector-effect:non-scaling-stroke;stroke-linejoin:round}.sea{fill:var(--bg)}.unit{fill:var(--land);stroke:var(--line-city);stroke-width:.6px;transition:fill .2s,opacity .4s}.unit[data-level="5"]{fill:var(--l5);--c:var(--l5)}.unit[data-level="4"]{fill:var(--l4);--c:var(--l4)}.unit[data-level="3"]{fill:var(--l3);--c:var(--l3)}.unit[data-level="2"]{fill:var(--l2);--c:var(--l2)}.unit[data-level="1"]{fill:var(--l1);--c:var(--l1)}[data-view=country] #map:not(.zoomed) .unit{stroke:var(--c,var(--land))}[data-view=country] .prov{cursor:pointer}[data-view=province] .prov:not(.active) .unit{fill:var(--dim);stroke:var(--dim-line)}[data-view=province] .prov:not(.active) .unit[data-level]{fill:color-mix(in srgb, var(--c) 35%, var(--dim))}[data-view=province] .prov.active .unit{cursor:pointer;stroke-width:1px;stroke:var(--line-city-active)}.unit.flash{animation:1.8s ease-out flash}@keyframes flash{0%,20%,45%{stroke:var(--accent);stroke-width:4px}10%,35%{stroke:var(--accent);stroke-width:1px}to{stroke-width:1px}}.line-province{fill:none;stroke:var(--line-province);stroke-width:1px;pointer-events:none}.line-country{fill:none;stroke:var(--ink);stroke-width:2px;pointer-events:none}.inset{pointer-events:none;transition:opacity .4s}.inset-bg{fill:var(--paper)}.inset-frame{fill:none;stroke:var(--ink);stroke-width:2px}.inset-title{text-anchor:end;fill:var(--muted);font-size:12px}.inset .unit{stroke-width:.3px}.inset .line-province{stroke-width:.6px}.inset .line-country{stroke-width:1px}.jd{fill:var(--ink);stroke:var(--ink);stroke-width:1.6px;stroke-linecap:round}[data-view=province] .inset{opacity:0}.labels g{visibility:hidden}[data-view=province] .labels g.active{visibility:visible}.labels text{font-size:var(--label-size,10px);text-anchor:middle;dominant-baseline:central;fill:var(--ink);paint-order:stroke;stroke:#fffc;stroke-width:.25em;stroke-linejoin:round;pointer-events:none;opacity:0;transition:opacity .3s}[data-view=province] .labels .active text{opacity:1;transition-delay:.35s}.prov-labels{visibility:hidden}[data-view=country] #map.zoomed .prov-labels{visibility:visible}.prov-labels text{font-size:var(--prov-label-size,14px);text-anchor:middle;dominant-baseline:central;fill:var(--ink);paint-order:stroke;stroke:#ffffffd9;stroke-width:.3em;stroke-linejoin:round;pointer-events:none;opacity:0;transition:opacity .3s}[data-view=country] #map.zoomed .prov-labels text{opacity:1}@media (hover:hover){[data-view=province] .crumb-root:hover{color:var(--ink);text-decoration:underline}.backup button:hover{background:var(--hover)}.loc-grid button:hover,.loc-list button:hover,.loc-head button:hover{filter:brightness(.94)}#picker .options button:hover{filter:brightness(.95)}[data-view=country] .prov:hover .unit,[data-view=province] .prov.active .unit:hover{filter:brightness(.93)}}@media (width>=701px){[data-view=country] #panel{top:auto;bottom:var(--gap);left:max(var(--gap), env(safe-area-inset-left));width:236px;right:auto}[data-view=country] #panel section{gap:10px;padding:12px 14px}[data-view=country] .score b{font-size:34px}}@media (width<=700px){:root{--gap:8px}#topbar{gap:8px;padding-left:12px;padding-right:12px}.crumb-root{font-size:20px}[data-view=province] .crumb-root{font-size:15px}#crumb-province{font-size:18px}.search{cursor:pointer;flex:none;width:38px;margin-left:auto;padding:0 8px}.search input{width:0}#topbar.searching #crumb,#topbar.searching #save{display:none}#topbar.searching .search{flex:1;width:auto}#save{flex:none;justify-content:center;width:38px;padding:0}#save span{display:none}#panel{top:auto;left:var(--gap);right:var(--gap);bottom:max(var(--gap), env(safe-area-inset-bottom));width:auto;max-height:38dvh}#panel section{gap:8px;padding:10px 12px}.score b{font-size:28px}#level-stats{flex-flow:wrap;gap:6px 10px}#level-stats li{grid-template-columns:12px auto auto;gap:4px;font-size:13px}#level-stats i{width:12px;height:12px}#level-stats small,.tip{display:none}.backup span{font-size:11px}.province-head{flex-direction:row;justify-content:space-between;align-items:baseline}.province-head h2{font-size:17px}#brush{flex-direction:row;align-items:center}#brush .label small{display:none}#brush .options,#city-list{flex-wrap:nowrap;overflow-x:auto}#brush button,#city-list button{flex:none}#city-list{padding-bottom:2px;overflow-y:hidden}#brush .options,#city-list{scrollbar-width:none;padding-right:20px;-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 24px),#0000);mask-image:linear-gradient(90deg,#000 calc(100% - 24px),#0000)}#brush .options::-webkit-scrollbar{display:none}#city-list::-webkit-scrollbar{display:none}#locator{width:auto;max-height:72vh;right:8px;left:8px!important}}@media (width>=701px) and (height<=520px){#topbar{padding-top:max(8px, env(safe-area-inset-top));padding-bottom:10px}.crumb-root{font-size:22px}#panel{width:230px;max-height:calc(100vh - 58px - var(--gap));max-height:calc(100dvh - 58px - var(--gap));top:58px}#panel section,[data-view=country] #panel section{gap:8px;padding:10px 12px}[data-view] .score b{font-size:26px}#level-stats{gap:3px}#level-stats small,.tip,#brush .label small{display:none}.province-head h2{font-size:18px}#picker{width:230px}#picker .options{grid-template-columns:1fr 1fr;display:grid}}@media (width<=700px),(hover:none) and (pointer:coarse){#repo{display:none}#repo+#save{margin-left:0}}@media (pointer:coarse){.search input,dialog textarea{font-size:16px}#picker{width:150px}#picker .options button{padding:10px}#brush button,#city-list button{padding:6px 11px}.backup button{padding:5px 12px;font-size:13px}.loc-grid button{padding:7px 10px}.loc-head button{padding:6px 10px}.loc-list button{padding:10px 12px}}@media (prefers-reduced-motion:reduce){.unit.flash{stroke:var(--accent);stroke-width:3px;animation:none}.unit,.labels text,.prov-labels text,.inset{transition:none}}svg{--k:1}.map-shadow,.inset-shadow{fill:#0000001f;stroke:none;pointer-events:none;transform:translate(calc(var(--k) * 3px), calc(var(--k) * 5px))}
