:root{--bg:#f1f5f9;--panel:#ffffff;--border:#e2e8f0;--text:#0f172a;--muted:#64748b;--brand:#0ea5e9;--brand-dark:#0369a1;--danger:#e11d48}*{box-sizing:border-box}body,html{margin:0;padding:0;height:100%;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:var(--text);background:var(--bg)}.layout{display:flex;height:100vh;height:100dvh;overflow:hidden}.sidebar{width:340px;flex-shrink:0;padding:18px 18px 24px;overflow-y:auto;background:var(--panel);border-right:1px solid var(--border);display:flex;flex-direction:column;gap:16px}.brand h1{font-size:20px;margin:0 0 6px;line-height:1.2}.muted{color:var(--muted);font-size:13px;margin:0;line-height:1.45}.field,.field>span{display:block}.field>span{font-size:13px;font-weight:600;margin-bottom:6px;color:#334155}.field select{width:100%;padding:9px 10px;border:1px solid #cbd5e1;border-radius:8px;background:#fff;font-size:14px;cursor:pointer}.field select:focus{outline:2px solid var(--brand);outline-offset:1px}.field input[type=range]{width:100%;accent-color:var(--brand);cursor:pointer}.result{border:1px solid var(--border);border-radius:10px;background:#f8fafc;padding:14px}.result-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.result-head h2{font-size:14px;margin:0;text-transform:uppercase;letter-spacing:.03em;color:var(--brand-dark)}.btn-clear{border:none;background:#e2e8f0;color:#475569;width:24px;height:24px;border-radius:6px;cursor:pointer;font-size:13px;line-height:1}.btn-clear:hover{background:#cbd5e1}.hint{color:var(--muted)}.error,.hint{font-size:13px;margin:4px 0 0}.error{color:var(--danger)}.kv{margin:0;display:grid;grid-template-columns:90px 1fr;grid-gap:6px 10px;gap:6px 10px;font-size:13px}.kv dt{color:var(--muted);font-weight:600}.kv dd{margin:0}.badge{display:inline-block;background:var(--brand);color:#fff;font-weight:700;font-size:11px;padding:1px 6px;border-radius:5px;margin-right:4px}.info{display:flex;gap:10px}.info>div{flex:1 1;background:#f1f5f9;border:1px solid var(--border);border-radius:8px;padding:8px 10px;display:flex;flex-direction:column;gap:2px}.info span{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.03em}.info b{font-size:15px}.project{border:1px solid var(--border);border-radius:10px;background:#f0f9ff;padding:14px}.project h2{font-size:13px;margin:0 0 8px;text-transform:uppercase;letter-spacing:.03em;color:var(--brand-dark)}.project-loc{font-size:12.5px;color:#334155;margin:0 0 10px;line-height:1.45}.legal-nav{display:flex;flex-wrap:wrap;gap:6px 12px;margin-top:auto;padding-top:10px;border-top:1px solid var(--border)}.legal-nav a{font-size:12px;color:var(--brand-dark);text-decoration:none}.legal-nav a:hover{text-decoration:underline}.credit{font-size:11px;color:#94a3b8;line-height:1.5;margin:8px 0 0}.layer-legend{margin-top:10px;display:flex;flex-direction:column;gap:4px}.legend-title{font-size:11px;text-transform:uppercase;letter-spacing:.03em;color:var(--muted);margin-bottom:2px}.legend-item{display:flex;align-items:center;gap:7px;font-size:13px}.legend-item i{width:14px;height:14px;border-radius:4px;flex-shrink:0;border:1px solid rgba(0,0,0,.15)}.plan-actions{display:flex;gap:8px;margin-top:14px}.btn{flex:1 1;text-align:center;padding:9px 10px;border-radius:8px;border:1px solid #cbd5e1;background:#fff;color:#334155;font-size:13px;font-weight:600;cursor:pointer;text-decoration:none}.btn:hover{background:#f1f5f9}.btn-primary{background:var(--brand);border-color:var(--brand);color:#fff}.btn-primary:hover{background:var(--brand-dark)}.stat-grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:8px;gap:8px;margin-top:4px}.stat{background:#fff;border:1px solid var(--border);border-radius:8px;padding:8px 10px;display:flex;flex-direction:column;gap:2px}.stat span{font-size:11px;color:var(--muted)}.stat b{font-size:13.5px}.more-link{display:inline-block;margin-top:10px;font-size:13px;font-weight:600;color:var(--brand-dark);text-decoration:none}.more-link:hover{text-decoration:underline}.brand--sheet,.sheet{display:none}.page{max-width:820px;margin:0 auto;padding:40px 24px 80px}.page-back{display:inline-block;font-size:13px;color:var(--brand-dark);text-decoration:none;margin-bottom:24px}.page-back:hover{text-decoration:underline}.page h1{font-size:28px;margin:0 0 6px;line-height:1.2}.page .updated{color:var(--muted);font-size:13px;margin:0 0 28px}.page h2{font-size:18px;margin:28px 0 10px}.page h3{font-size:15px;margin:20px 0 8px}.page li,.page p{font-size:15px;line-height:1.7;color:#1e293b}.page ul{padding-left:22px}.page a{color:var(--brand-dark)}.page .footer-nav{margin-top:48px;padding-top:20px;border-top:1px solid var(--border);display:flex;flex-wrap:wrap;gap:8px 16px;font-size:13px}.page .footer-nav a{color:var(--brand-dark);text-decoration:none}.page .footer-nav a:hover{text-decoration:underline}.callout{background:#fef9c3;border:1px solid #fde047;border-radius:8px;padding:12px 14px;font-size:14px;line-height:1.6;margin:16px 0}.map-wrap{flex:1 1;position:relative}.map-loading{display:flex;align-items:center;justify-content:center;height:100%;color:var(--muted)}.map-hint{position:absolute;top:12px;left:50%;transform:translateX(-50%);z-index:500;background:rgba(15,23,42,.82);color:#fff;font-size:13px;padding:6px 14px;border-radius:999px;pointer-events:none;box-shadow:0 2px 8px rgba(0,0,0,.25)}@media (max-width:760px){.layout{flex-direction:column;height:100dvh;overflow:hidden}.sidebar{display:none}.map-wrap{flex:1 1;width:100%;height:100dvh}.map-wrap .leaflet-container{height:100%;width:100%}.map-hint{top:10px;font-size:12px;padding:5px 12px}.sheet{display:flex;flex-direction:column;position:fixed;left:0;right:0;bottom:0;z-index:1000;background:var(--panel);border-top-left-radius:18px;border-top-right-radius:18px;box-shadow:0 -4px 20px rgba(0,0,0,.18);transition:height .28s cubic-bezier(.4,0,.2,1);max-height:92dvh}.sheet--peek{height:132px}.sheet--half{height:56dvh}.sheet--full{height:92dvh}.sheet-handle{flex-shrink:0;padding:10px 0 6px;display:flex;justify-content:center;cursor:-webkit-grab;cursor:grab;touch-action:none}.sheet-handle span{width:42px;height:5px;border-radius:999px;background:#cbd5e1}.sheet-body{overflow-y:auto;-webkit-overflow-scrolling:touch;padding:0 16px 24px;display:flex;flex-direction:column;gap:14px}.brand--sheet{display:block}.brand--sheet h1{font-size:16px;margin:0}.result{margin:0}.legal-nav{margin-top:4px}}@media (max-width:400px){.stat-grid{grid-template-columns:1fr}.kv{grid-template-columns:84px 1fr}.page{padding:28px 16px 60px}.page h1{font-size:23px}}