:root{--ink:#19343e;--muted:#60747c;--line:#d5e0df;--paper:#f8f7f2;--accent:#e7774b;--deep:#17353f}
*{box-sizing:border-box}
html,body{height:100%;margin:0;font-family:"Microsoft YaHei","PingFang SC",system-ui,sans-serif;color:var(--ink)}
button,input{font:inherit}
.launch-screen{position:fixed;inset:0;z-index:20;display:flex;align-items:center;justify-content:center;padding:20px;background:linear-gradient(135deg,#17353feb,#2c5d60e8)}.launch-screen[hidden]{display:none}.launch-card{width:min(480px,100%);padding:30px;border-radius:18px;background:#fbfbf5;box-shadow:0 24px 70px #071f2a80}.launch-card h2{font-size:25px;margin:0 0 12px}.launch-card p{color:#526c70;font-size:13px;line-height:1.7;margin:0 0 16px}.launch-card label{display:block;font-size:11px;font-weight:700;color:#577174;margin-bottom:6px}.launch-card select,.region-section select{width:100%;border:1px solid #cbdad7;background:#fff;border-radius:8px;padding:9px;color:#19343e;font:inherit}.launch-actions{display:flex;gap:9px;margin:18px 0 14px}.launch-actions button{flex:1;border:0;border-radius:9px;padding:12px 9px;font-size:12px;font-weight:700;cursor:pointer}.launch-actions button:first-child{background:#e4ece6;color:#23464d}.launch-actions button:last-child{background:#247f76;color:#fff}.launch-card #launch-status{font-size:11px;margin-bottom:6px}.launch-card code{display:inline-block;background:#e8efeb;padding:7px 9px;border-radius:6px;font-size:11px;color:#33595e}.region-section{padding-bottom:12px}.region-section .section-kicker{margin-bottom:6px}.region-section select{font-size:12px;padding:7px}
#map{position:fixed;inset:0;background:#edf1eb}
.topbar{position:absolute;top:18px;left:20px;right:20px;z-index:3;display:flex;align-items:center;gap:13px;pointer-events:none}
.brand-mark{width:42px;height:42px;border-radius:12px;background:var(--deep);display:flex;align-items:end;justify-content:center;gap:3px;padding:10px;box-shadow:0 5px 20px #17353f35}
.brand-mark span{width:5px;border-radius:2px 2px 0 0;background:#f4ae83;height:13px}.brand-mark span:nth-child(2){height:21px;background:#e7f2de}.brand-mark span:nth-child(3){height:17px;background:#88c4bb}
.eyebrow{font-size:10px;color:#637a79;letter-spacing:2px;font-weight:700}
h1{font-size:21px;line-height:1.15;margin:3px 0 0;letter-spacing:.5px}h1 em{font-style:normal;font-weight:500;color:#526b70}
.topbar-note{margin-left:auto;color:#35525a;background:#ffffffd8;padding:8px 12px;border:1px solid #ffffff;border-radius:99px;font-size:11px;box-shadow:0 4px 15px #17353f12}
.sidebar{position:absolute;z-index:3;left:20px;top:86px;bottom:55px;width:294px;overflow:auto;background:#fbfbf8f2;border:1px solid #fff;border-radius:16px;box-shadow:0 16px 44px #24434b30;backdrop-filter:blur(18px)}
.section{padding:17px 18px;border-bottom:1px solid var(--line)}.section:last-child{border-bottom:0}.section-kicker{display:block;color:#7a8d90;font-size:10px;font-weight:800;letter-spacing:1.5px;text-transform:uppercase;margin-bottom:10px}
.intro p,.source-section p{font-size:12px;line-height:1.7;color:#526a70;margin:0 0 10px}.intro p strong{color:var(--ink)}
.intro #stats-note{font-size:10px;margin:8px 0 0;color:#57747b}
.stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:5px;margin-top:15px}.stat-grid div{border-radius:9px;background:#edf2ed;padding:9px 5px;text-align:center}.stat-grid strong{display:block;font-size:19px;line-height:1.15;color:var(--deep)}.stat-grid small{font-size:10px;color:#687f80;white-space:nowrap}.name-summary{margin-top:10px;color:#58747a;font-size:10px;line-height:1.5}
.search-wrap{position:relative}.search-wrap input{width:100%;border:1px solid #ccd9d7;border-radius:9px;background:#fff;padding:10px 34px 10px 11px;font-size:12px;color:var(--ink);outline:none}.search-wrap input:focus{border-color:#59a99e;box-shadow:0 0 0 3px #59a99e25}.search-wrap span{position:absolute;right:11px;top:5px;font-size:24px;color:#8ba4a1}
.search-results{max-height:145px;overflow:auto}.search-result{display:block;width:100%;text-align:left;background:none;border:0;border-bottom:1px solid #e5ebea;padding:8px 2px;cursor:pointer;font-size:12px;color:#25454a}.search-result:hover{color:#cc6339}.search-result small{display:block;color:#83999a;font-size:10px;margin-top:2px}.search-empty{font-size:11px;color:#829695;padding-top:10px}
.layer-row{display:flex;justify-content:space-between;align-items:center;padding:7px 0;cursor:pointer;font-size:12px}.layer-row span{display:flex;align-items:center;gap:9px}.layer-row input{accent-color:#268d82;width:15px;height:15px;cursor:pointer}.swatch{display:inline-block;width:12px;height:12px;border-radius:3px}.swatch.building{background:#d7bda3;border:1px solid #ab876d}.swatch.road{background:#fff;border:2px solid #d09d75}.swatch.green{background:#a1c9a7}.swatch.poi{background:#e7794e;border-radius:50%}.swatch.area{background:#eef8f5;border:1px dashed #278a80}.swatch.candidate{background:#fff;border:2px dashed #e7774b;border-radius:50%}
.source-section p{font-size:11px}.source-section b{color:#35575d}.text-button{color:#227f75;background:none;border:0;padding:4px 0;font-size:11px;font-weight:700;cursor:pointer}
.sync-section p{margin:0 0 9px;color:#506b71;font-size:11px;line-height:1.5}.sync-button{border:0;border-radius:8px;background:#247f76;color:#fff;padding:7px 12px;font-size:11px;font-weight:700;cursor:pointer}.sync-button:disabled{background:#a9b9b8;cursor:default}.sync-option{display:flex;align-items:center;gap:6px;margin:9px 0 4px;font-size:11px;color:#526c70;cursor:pointer}.sync-option input{accent-color:#268d82}.sync-option input:disabled{cursor:default}.sync-section small{display:block;font-size:10px;line-height:1.5;color:#849697}
.archive-label{display:block;margin:12px 0 5px;color:#355e61;font-size:11px;font-weight:700}.sync-section input[type=file],.launch-card input[type=file]{display:block;width:100%;font-size:10px;color:#5a7274}.sync-section input[type=file]::file-selector-button,.launch-card input[type=file]::file-selector-button{margin-right:7px;border:1px solid #b9cfcb;border-radius:7px;padding:5px 8px;background:#edf5f0;color:#285d5a;cursor:pointer}.sync-section #preview-online{margin:0 0 0 5px;background:#dcebe6;color:#21584f}.sync-section #preview-online[hidden]{display:none}
.swatch.boundary{background:#edf8fb;border:2px dashed #4887a2}
.map-actions{position:absolute;z-index:3;top:91px;right:21px;display:flex;gap:4px;padding:5px;background:#fffffff0;border:1px solid #fff;border-radius:12px;box-shadow:0 9px 25px #24434b24}.map-actions button{border:0;background:transparent;padding:8px 11px;border-radius:8px;color:#506d70;cursor:pointer;font-size:12px}.map-actions button.active{background:var(--deep);color:#fff}.map-actions button:hover:not(.active){background:#ebf1ed}
.map-actions button:disabled{opacity:.45;cursor:not-allowed}.attribution{max-width:min(680px,calc(100vw - 20px));line-height:1.35}.attribution span[hidden]{display:none}
.satellite-active .topbar>div:nth-child(2),.mode3d-active .topbar>div:nth-child(2){background:#fbfbf3e8;padding:7px 10px;border-radius:10px;box-shadow:0 4px 15px #17353f20}
.mode-notice,.selection,.error{position:absolute;z-index:4;background:#fffefaef;box-shadow:0 8px 25px #24434b2b;border:1px solid #fff;border-radius:11px;font-size:11px;line-height:1.6;color:#435b61}.mode-notice{top:145px;right:72px;max-width:275px;padding:10px 12px;border-left:3px solid var(--accent)}.selection{right:20px;bottom:65px;width:286px;max-height:calc(100vh - 175px);overflow:auto;padding:15px}.selection h2{font-size:14px;margin:0 20px 7px 0}.selection dl{margin:0;display:grid;grid-template-columns:68px 1fr;gap:5px 7px}.selection dt{color:#829496}.selection dd{margin:0;word-break:break-word}.selection button{position:absolute;right:8px;top:6px;background:none;border:0;font-size:18px;color:#8ba0a3;cursor:pointer}
.attribution{position:absolute;z-index:3;right:20px;bottom:19px;padding:5px 8px;background:#fffdf3d9;border-radius:5px;color:#51676a;font-size:10px}.attribution a{color:#326b70}.error{left:50%;top:50%;transform:translate(-50%,-50%);padding:18px;max-width:420px;color:#a3422e}
.poi-marker{width:11px;height:11px;border:2px solid #fff;border-radius:50%;background:#e7774b;box-shadow:0 1px 8px #ad503c8a;cursor:pointer}.candidate-marker{width:13px;height:13px;border:2px dashed #dc794d;border-radius:50%;background:#fff;box-shadow:0 1px 8px #ad503c7a;cursor:pointer}.road-label{color:#596c72;background:#fffde5c9;border-radius:4px;padding:1px 4px;font-size:10px;font-weight:700;white-space:nowrap;text-shadow:0 1px #fff;pointer-events:none}.area-label,.land-label,.building-label{border-radius:6px;padding:2px 5px;font-size:10px;font-weight:700;line-height:1.3;white-space:nowrap;cursor:pointer;box-shadow:0 2px 8px #24434b25}.area-label{color:#186f69;border:1px dashed #67b1aa;background:#f5fffcdf}.land-label{color:#4f7453;border:1px solid #b5d5ba;background:#f3f8ebdf}.residential-label{color:#805e4a;border-color:#d6c1a9;background:#fff7eadf}.building-label{color:#763e2d;border:1px solid #e4b99e;background:#fff5eadf}
.maplibregl-ctrl-top-right{top:170px;right:10px}.maplibregl-ctrl-bottom-left{left:318px;bottom:12px}.maplibregl-ctrl-scale{background:#fffdf6e6;border-color:#45646b;color:#45646b}
@media(max-width:720px){.topbar{top:10px;left:11px;right:11px}.topbar-note{display:block;position:fixed;top:104px;left:10px;margin-left:0;max-width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;z-index:15}.brand-mark{width:34px;height:34px;padding:8px}.eyebrow{font-size:8px}h1{font-size:16px}.sidebar{left:10px;right:10px;top:auto;bottom:48px;width:auto;height:210px;overflow:auto;border-radius:13px}.sidebar .section{padding:12px 14px}.sidebar .intro p{display:none}.stat-grid{margin-top:4px}.map-actions{right:10px;top:58px}.mode-notice{left:10px;right:auto;top:143px;max-width:245px}.selection{bottom:270px;right:10px;width:245px;max-height:calc(100vh - 380px)}.attribution{bottom:8px;right:8px;font-size:8px}.maplibregl-ctrl-top-right{top:113px}.maplibregl-ctrl-bottom-left{left:10px;bottom:265px}}
@media(max-width:480px){.launch-card{padding:22px}.launch-actions{flex-direction:column}.launch-card h2{font-size:21px}.map-actions button{padding:8px 7px;font-size:11px}.attribution{left:8px;right:8px;text-align:right}}
.sidebar .intro #stats-note:not([hidden]){display:block}
