:root{color-scheme:light;--paper:#f5f4ee;--ink:#283d36;--muted:#7b857c;--line:#e3e5db;--green:#35695a;--white:#fffefa;font-family:system-ui,-apple-system,'Apple SD Gothic Neo','Malgun Gothic',sans-serif;color:var(--ink);background:var(--paper);font-synthesis:none}
*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}button,a,select,input{-webkit-tap-highlight-color:transparent}a{color:inherit}button:disabled,select:disabled{opacity:.45;cursor:default}button:focus-visible,a:focus-visible,select:focus-visible,summary:focus-visible{outline:3px solid #a9c9b5;outline-offset:4px}button{cursor:pointer}svg{display:block}
.app-shell{max-width:1440px;margin:auto;padding:0 48px}.topbar{height:104px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line)}.brand{display:flex;gap:11px;align-items:center;text-decoration:none;font-size:23px;font-weight:760;letter-spacing:-.9px}.brand-mark{width:38px;height:42px}.brand-caption{display:block;margin-top:1px;font-size:9px;letter-spacing:1.15px;font-weight:500;color:var(--muted)}.local-badge{display:flex;align-items:center;gap:8px;color:#677569;font-size:12px}.local-badge>span{width:7px;height:7px;border-radius:50%;background:#83ab87;box-shadow:0 0 0 4px #e9eee1}
.intro{padding:42px 0 32px}.eyebrow{font-size:10px;font-weight:700;letter-spacing:2.2px;color:#899181;margin:0 0 12px}.intro h1{font-size:clamp(30px,3.2vw,46px);font-weight:600;letter-spacing:-2.1px;line-height:1.25;margin:0 0 13px}.intro h1 em{font-style:normal;color:#658b73}.intro>p:last-child{font-size:14px;color:#7a857a;margin:0;line-height:1.8;word-break:keep-all}
.workspace{display:grid;grid-template-columns:266px minmax(0,1fr);gap:24px;align-items:start}.control-panel{background:var(--white);border:1px solid var(--line);border-radius:19px;padding:24px}.panel-heading{display:flex;align-items:center;gap:9px;margin-bottom:17px}.panel-heading h2{font-size:13px;font-weight:700;letter-spacing:-.3px;margin:0}.step-number{font-size:10px;color:#8d9b87;font-weight:650;letter-spacing:.6px}.upload-zone{position:relative;display:flex;flex-direction:column;align-items:center;padding:21px 12px 18px;border:1px dashed #bbcbb6;background:#f5f7ef;border-radius:12px;text-align:center;cursor:pointer;transition:background .15s,border-color .15s}.upload-zone:hover,.upload-zone:focus-within{background:#edf3e5;border-color:#648f6f}.upload-zone:focus-within{outline:3px solid #d1e0c8;outline-offset:3px}.upload-zone>svg{width:30px;height:30px;color:#7a9b70;margin-bottom:12px}.upload-zone strong{font-size:13px;font-weight:650}.upload-zone>span{font-size:11px;color:#87907f;margin-top:5px}.upload-zone small{font-size:10px;letter-spacing:.2px;color:#a0a894;margin-top:13px}.upload-zone input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer}
.source-label{font-size:10px;color:#929a8e;line-height:1.6;margin:13px 0}.source-label>span{display:block;font-size:12px;color:#566b59;font-weight:600;overflow-wrap:anywhere;margin-top:2px}.sample-actions{display:grid;gap:12px}.button{display:inline-flex;justify-content:center;align-items:center;gap:12px;border:0;border-radius:9px;min-height:40px;padding:11px 15px;font-size:12px;font-weight:600;white-space:nowrap;transition:background .15s,transform .15s}.button:not(:disabled):active{transform:translateY(1px)}.button-soft{background:#eef1e7;color:#677d5f;justify-content:space-between}.button-soft:hover{background:#e4ebda}.button-primary{background:var(--green);color:#fffefa;box-shadow:0 3px 0 #244f430d}.button-primary:not(:disabled):hover{background:#285745}.button>span{font-size:16px;font-weight:400}.text-link{font-size:11px;color:#71836b;text-underline-offset:4px;display:flex;align-items:center;justify-content:center;gap:5px}.muted-link{color:#929b89;font-size:10px}.section-divider{border-top:1px solid var(--line);padding-top:22px;margin-top:23px}.field-label{display:grid;gap:8px;font-size:11px;color:#7c8878;margin-top:16px}.field-label select{width:100%;min-width:0;border:1px solid #dce2d5;background:#fffefa;color:#49604e;border-radius:8px;padding:10px 9px;font-size:12px}.field-hint{font-size:10px;line-height:1.85;color:#9aa28f;margin:13px 0 0}.detail-card{font-size:12px;line-height:1.8;overflow-wrap:anywhere;color:#677b61;background:#f4f6ee;border-radius:10px;padding:13px;min-height:70px}.privacy-note{font-size:10px;line-height:1.85;color:#9ca391;margin:19px 0 0;text-align:center}
.city-panel{min-width:0;background:var(--white);border:1px solid var(--line);border-radius:19px;overflow:hidden}.scene-heading{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:25px 28px 0}.scene-heading .eyebrow{font-size:9px;letter-spacing:1.9px;margin-bottom:8px}.scene-heading h2{display:flex;align-items:center;flex-wrap:wrap;gap:10px;font-size:18px;letter-spacing:-.6px;font-weight:650;margin:0}.count-badge{font-size:9px;font-weight:500;letter-spacing:0;background:#eef2e6;color:#849575;padding:4px 7px;border-radius:5px}.status{margin:12px 28px 18px;color:#96a08e;font-size:10px;line-height:1.6;overflow-wrap:anywhere}.view{position:relative;margin:0 16px;background:#eef2e8;border:1px solid #e5ebdc;border-radius:13px;overflow:hidden;isolation:isolate}.view:before{content:'';position:absolute;inset:0;z-index:-1;background:radial-gradient(ellipse at 50% 56%,#dbe6d46b,transparent 67%)}#city{width:100%;height:clamp(360px,49vw,560px);min-width:0}.scene-label{position:absolute;top:21px;left:23px;font-size:8px;letter-spacing:2px;color:#a6b09a}.scene-caption{position:absolute;bottom:18px;right:22px;font-size:10px;color:#a0ad94;pointer-events:none}.empty-city{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;text-align:center;padding:26px;background:#eef2e8;color:#7c9370}.empty-city[hidden]{display:none}.empty-city>span{font-size:52px;line-height:1;margin-bottom:15px;color:#becbb1}.empty-city strong{font-size:14px;font-weight:600}.empty-city p{font-size:11px;line-height:1.8;color:#9ba88e}.city-building{cursor:pointer}#city g:focus{outline:none}#city g[aria-pressed="true"]>.building-face,#city g:focus-visible>.building-face{stroke:#315c4b;stroke-width:1.6;stroke-linejoin:round}
.legend{padding:22px 28px 24px}.legend-heading{display:flex;justify-content:space-between;gap:12px;align-items:center}.legend-heading h2{font-size:11px;margin:0;font-weight:650}.legend-heading p{font-size:10px;color:#a0a88f;margin:0;overflow-wrap:anywhere}.legend-heading strong{color:#7d8c70;font-weight:600;margin-left:5px}.legend-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;margin:20px 0}.legend-stats>div+div{border-left:1px solid var(--line);padding-left:24px}.legend-stats dt{font-size:10px;color:#9aa38d}.legend-stats dd{font-size:24px;line-height:1.3;font-weight:600;letter-spacing:-.6px;margin:7px 0 0;overflow-wrap:anywhere;font-variant-numeric:tabular-nums}.legend-explanation{border-top:1px solid var(--line);padding-top:15px}.legend-explanation summary{display:flex;flex-wrap:wrap;align-items:center;gap:10px;cursor:pointer;font-size:10px;color:#8b9881;list-style:none}.legend-explanation summary::-webkit-details-marker{display:none}.legend-explanation summary:after{content:'+';margin-left:auto;font-size:14px}.legend-explanation[open] summary:after{content:'−'}.legend-explanation p{font-size:11px;line-height:1.85;color:#8e9c82;margin:13px 0 0;word-break:keep-all}.legend-colors{display:inline-flex;gap:3px}.legend-colors span{display:block;width:13px;height:9px;border-radius:2px}footer{display:flex;justify-content:space-between;gap:15px;padding:25px 2px 32px;font-size:10px;color:#a2a996}footer>span:last-child{font-size:8px;letter-spacing:1.15px}
@media(min-width:1450px){.app-shell{padding:0 60px}.intro{padding-top:48px}}
@media(max-width:1000px){.app-shell{padding:0 28px}.workspace{grid-template-columns:236px minmax(0,1fr);gap:18px}.control-panel{padding:20px}.scene-heading{padding:22px 22px 0}.scene-heading h2{font-size:16px}.scene-heading .button{font-size:11px;padding:10px 12px}.status{margin-left:22px;margin-right:22px}.legend{padding:22px}.legend-stats>div+div{padding-left:15px}#city{height:440px}}
@media(max-width:740px){.app-shell{padding:0 20px}.topbar{height:84px}.brand{font-size:21px}.brand-mark{width:33px}.brand-caption{font-size:7px}.local-badge{font-size:10px;gap:6px}.intro{padding:31px 0 25px}.intro h1{font-size:32px;letter-spacing:-1.7px}.intro>p:last-child{font-size:12px;max-width:290px}.workspace{grid-template-columns:minmax(0,1fr);gap:18px}.control-panel{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);column-gap:18px;padding:20px}.control-panel>.panel-heading:first-child{grid-column:1/-1}.upload-zone{grid-column:1;grid-row:2/5;min-height:154px;justify-content:center;padding:16px 10px}.source-label{grid-column:2;margin:0 0 10px;align-self:end}.sample-actions{grid-column:2;grid-row:3/5;gap:11px}.sample-actions .button{font-size:10px;padding:9px 11px;gap:5px;min-height:34px}.text-link{font-size:10px}.muted-link{font-size:9px}.section-divider{grid-column:1/-1;margin-top:20px;padding-top:18px;margin-bottom:0}.field-label{font-size:10px}.field-label select{font-size:11px;padding:10px 7px}.field-hint{grid-column:1/-1;font-size:10px;line-height:1.7}.field-hint br{display:none}.detail-card{grid-column:1/-1;min-height:0;margin-top:13px;padding:11px;font-size:11px}.privacy-note{grid-column:1/-1;margin-top:13px;font-size:9px}.privacy-note br{display:none}.scene-heading{padding:20px 18px 0;align-items:center;gap:7px}.scene-heading h2{font-size:15px;gap:6px}.scene-heading .eyebrow{font-size:7px;letter-spacing:1.5px}.scene-heading .button{font-size:10px;gap:5px;padding:9px 11px;min-height:36px}.scene-heading .button>span{font-size:13px}.count-badge{font-size:8px;padding:3px 5px}.status{margin:12px 18px 15px;font-size:9px}.view{margin:0 10px}.scene-label{font-size:6px;top:17px;left:16px;letter-spacing:1.4px}.scene-caption{font-size:8px;right:16px;bottom:14px}#city{height:355px}.legend{padding:19px 19px 20px}.legend-heading h2{font-size:10px}.legend-heading p{font-size:9px}.legend-stats{gap:12px;margin:17px 0}.legend-stats>div+div{padding-left:12px}.legend-stats dt{font-size:9px}.legend-stats dd{font-size:22px}.legend-explanation summary{font-size:9px;gap:7px}.legend-colors span{width:10px;height:7px}.legend-explanation p{font-size:10px}footer{padding:22px 1px 26px;font-size:9px}footer>span:last-child{font-size:6px;letter-spacing:.8px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{transition:none!important;scroll-behavior:auto!important}}
.example-buttons{display:flex;gap:6px}.example-buttons button{flex:1;border:1px solid var(--line);border-radius:6px;padding:7px 4px;background:#fafaf4;color:#637d67;font-size:10px}.import-settings{margin-top:17px;font-size:10px;color:#697e69}.import-settings summary{cursor:pointer}.import-settings label{display:grid;gap:5px;margin-top:12px}.import-settings select{min-width:0;width:100%;padding:7px;border:1px solid var(--line);border-radius:5px;background:#fffefa;font-size:10px}.import-settings .check-label{display:flex;align-items:center;gap:5px}.import-settings p{font-size:9px;line-height:1.8;color:#889480}.city-toolbar{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:7px;padding:13px 16px 5px}.city-toolbar button{background:#f4f6ed;color:#4f6f59;border:1px solid #dce3d6;border-radius:6px;padding:6px 11px;font-size:11px;min-height:32px}.city-toolbar output{font-size:10px;color:#7b8c73;width:42px;text-align:center}.city-toolbar label{font-size:11px;color:#71816a;display:flex;align-items:center;margin-left:8px}.city-tooltip{position:absolute;z-index:4;max-width:260px;width:max-content;padding:12px 15px;border-radius:9px;background:#294a40f2;color:#fffdf3;box-shadow:0 7px 22px #233b3524;pointer-events:none;overflow-wrap:anywhere}.city-tooltip[hidden]{display:none}.city-tooltip strong{display:block;font-size:12px;margin-bottom:5px}.city-tooltip span{display:block;font-size:11px;white-space:pre-wrap;line-height:1.7;color:#e3ecdb}#city{touch-action:none}.city-building:hover>.building-face{stroke:#456b5c;stroke-width:1.1}.data-note{font-size:10px;color:#839079;line-height:1.7;margin:9px 28px}.data-quality{font-size:11px;line-height:1.7;color:#587453;background:#f2f5eb;border-radius:7px;padding:9px 12px;margin:12px 28px}.data-review{margin:14px 28px 0;border-top:1px solid var(--line);padding-top:13px;font-size:11px;color:#74816e}.data-review summary{cursor:pointer}.data-review p{font-size:10px;line-height:1.8;overflow-wrap:anywhere}.table-scroll{overflow:auto;max-height:340px;border:1px solid var(--line);border-radius:7px;margin-top:10px}.data-review table{border-collapse:collapse;min-width:100%;font-size:10px;white-space:pre-wrap}.data-review th,.data-review td{padding:7px 10px;border-bottom:1px solid var(--line);text-align:left;min-width:80px;max-width:270px;overflow-wrap:anywhere}.data-review th{position:sticky;top:0;background:#eef2e7;color:#48634d}.data-review td{background:#fffefa;color:#6a7866}
@media(max-width:740px){.import-settings{grid-column:1/-1;margin-top:17px}.import-settings[open]{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:0 14px}.import-settings summary,.import-settings p{grid-column:1/-1}.number-format-field{grid-column:1/-1}.sample-actions{gap:8px}.city-tooltip{max-width:240px;padding:9px 11px}.city-tooltip strong{font-size:11px}.city-tooltip span{font-size:10px}.data-note,.data-quality,.data-review{margin-left:18px;margin-right:18px}.data-quality{font-size:10px}.data-review{font-size:10px}.city-toolbar{gap:5px}.city-toolbar button{font-size:10px;padding:6px 9px}.city-toolbar label{font-size:10px}}
.city-search{display:grid;grid-template-columns:minmax(0,1fr) 135px auto;gap:10px;align-items:end;margin:0 28px 18px;padding:14px;background:#f2f5eb;border:1px solid #e3e8dc;border-radius:10px}.city-search label{display:grid;gap:6px;font-size:10px;color:#62765d;min-width:0}.city-search input,.city-search select{width:100%;min-width:0;border:1px solid #dce3d6;background:#fffefa;border-radius:6px;padding:9px;font-size:11px;color:#355345}.city-search input:focus-visible{outline:3px solid #a9c9b5;outline-offset:2px}.city-search>button{padding:9px 11px;min-height:34px;border:1px solid #dce3d6;border-radius:6px;background:#fffefa;color:#62765d;font-size:10px}.city-search p{grid-column:1/-1;font-size:10px;line-height:1.7;margin:0;color:#7a8970}.city-search ol{grid-column:1/-1;list-style:none;margin:0;padding:0;max-height:160px;overflow:auto;display:grid;gap:5px}.city-search ol[hidden]{display:none}.city-search li{min-width:0}.city-search li button{width:100%;text-align:left;border:1px solid #dce3d6;border-radius:6px;padding:9px 11px;background:#fffefa;color:#41644e;font-size:11px;overflow-wrap:anywhere}.city-search li button:hover{background:#e7eddf}.city-building[data-search-match=false]{opacity:.14;pointer-events:none}.city-building[data-search-match=true]:focus-visible{outline:none}.city-building[data-search-match=true]:focus-visible>.building-face{stroke:#35695a;stroke-width:1.8}
@media(max-width:740px){.city-search{margin:0 18px 15px;grid-template-columns:minmax(0,1fr) auto;padding:11px;gap:9px}.city-search label:first-child{grid-column:1/-1}.city-search input,.city-search select{font-size:11px}.city-search li button{font-size:10px}}
