:root{font-family:Inter,Segoe UI,Arial,sans-serif;color:#22332e;background:#f4f6f7;font-size:14px;--green:#125c46;--muted:#65776f;--border:#dee5e1}*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}button,a,summary,.upload{cursor:pointer}button{border:1px solid var(--border);background:white;color:inherit;border-radius:7px;padding:9px 12px}button:hover{background:#edf4f0}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible{outline:3px solid #86baf2;outline-offset:2px}button:disabled{opacity:.55;cursor:wait}header{height:84px;display:flex;align-items:center;gap:24px;padding:0 28px;background:white;border-bottom:1px solid var(--border)}.brand{display:flex;gap:13px;align-items:center}.brand-icon{background:#125c46;color:white;font-size:38px;width:45px;height:45px;text-align:center;border-radius:12px;line-height:39px}.brand strong{font-size:18px;font-weight:650}.brand strong span{color:#a1afa8;margin:0 7px}.brand small{display:block;color:var(--muted);font-size:13px;margin-top:4px}.local{margin-left:auto;font-size:12px;letter-spacing:1.4px;color:var(--muted)}.quiet{border:0}main{display:grid;grid-template-columns:290px minmax(360px,1fr) 270px;min-height:calc(100vh - 84px)}.controls{padding:25px 22px;background:white;border-right:1px solid var(--border)}.section-label{font-size:11px;letter-spacing:1.7px;font-weight:700;color:#677b71}h1{font-size:26px;letter-spacing:-.9px;margin:10px 0}h2{font-size:20px;letter-spacing:-.5px;margin:9px 0}h3{font-size:17px}.intro{color:var(--muted);line-height:1.5;font-size:14px;margin-bottom:25px}label{display:block;margin:15px 0 8px;font-size:14px}label>b{margin-left:6px}select,input[type=number]{width:100%;padding:11px 10px;border:1px solid #ccd7d1;border-radius:7px;background:#fff;color:#23362d}select{font-size:14px}.upload{border:1px dashed #a9bfb3;padding:12px;text-align:center;border-radius:7px;color:var(--green);margin-top:10px}.upload small{display:block;font-size:12px;color:var(--muted);margin-top:5px}.meta,.hint{font-size:12px;color:var(--muted);line-height:1.5}.meta{margin-top:10px}.text-link,.text-button{font-size:12px;color:var(--green);text-decoration:none}.text-link{display:inline-block;margin-top:9px}.text-button{padding:9px 0 0;border:0;background:none}.divider{border-top:1px solid #e8edea;margin:20px 0}.point-row{display:flex;gap:7px}.point{display:flex;gap:8px;align-items:center;padding:10px 7px;flex:1;text-align:left;font-size:12px}.point em{font-style:normal;font-size:15px;background:#f6e2f1;color:#a3258b;border-radius:50%;width:23px;height:23px;line-height:23px;text-align:center;flex-shrink:0}.point small{display:block;color:var(--muted);font-size:11px;margin-top:4px}.point.active{border-color:#b4379e;background:#fdf0fa}.number-row{display:flex;align-items:center;gap:10px}.number-row input{font-size:20px;font-weight:650}.number-row span{color:var(--muted)}.hint{display:block;margin:7px 0}details{margin-top:17px;font-size:12px}summary{color:var(--green)}.scale{display:flex;gap:10px}.scale label{width:50%;font-size:12px}.scale input{margin-top:6px}.check{display:flex;align-items:center;gap:6px;font-size:12px}.primary{background:var(--green);border:0;color:#fff;width:100%;padding:15px;font-weight:600;margin-top:9px;display:flex;justify-content:space-between}.primary:hover{background:#0b4735}#status{font-size:13px;line-height:1.5;margin-top:12px}#status.error{color:#b22435}.workspace{padding:23px 24px;min-width:0}.map-toolbar{display:flex;justify-content:space-between;align-items:center;gap:15px;margin-bottom:18px}.view-buttons{display:flex;border:1px solid var(--border);border-radius:8px;padding:3px;background:white}.view-buttons button{border:0;font-size:12px;padding:7px 11px}.view-buttons .active{background:#183e30;color:white}.map-container{height:calc(100vh - 250px);min-height:550px;max-height:1000px;position:relative;background-color:#e8eeeb;background-image:radial-gradient(#cbd6d0 .8px,transparent .8px);background-size:12px 12px;border:1px solid #d5dfd9;border-radius:12px;overflow:hidden;touch-action:none}canvas{width:100%;height:100%;display:block;cursor:grab}.map-instruction{position:absolute;top:14px;left:50%;transform:translateX(-50%);white-space:nowrap;font-size:12px;background:#fffffff0;border:1px solid #dce5df;padding:9px 13px;border-radius:20px;pointer-events:none}.zoom{position:absolute;bottom:17px;right:16px;display:flex;gap:4px}.zoom button{box-shadow:0 2px 7px #17392710}.hover-coord{position:absolute;bottom:18px;left:15px;background:#ffffffe8;padding:8px;border-radius:5px;color:#60756a;font:12px monospace}.legend{display:flex;flex-wrap:wrap;gap:15px;margin:16px 0;font-size:12px;color:#4e675b}.legend span{display:flex;align-items:center;gap:5px}.legend i{display:inline-block;width:10px;height:10px;border-radius:3px}.nodata{background:#d8dfda;border:1px solid #acb8b0}.raster-note{font-size:12px;color:var(--muted);line-height:1.5}.results{padding:27px 20px;background:#fafcfb;border-left:1px solid var(--border)}.results h2{margin-bottom:25px}.empty{padding:44px 8px;text-align:center;color:var(--muted)}.empty>span{font-size:60px;color:#9db7a9}.empty h3{color:#385545}.empty p{line-height:1.7}.formula{border-top:1px solid var(--border);margin-top:30px;padding-top:20px;font-size:13px;line-height:1.6;color:#52665b}.formula b{color:#294a38}.formula small{font-size:12px}.route{border:1px solid var(--border);border-left:4px solid var(--route);border-radius:8px;padding:15px;margin-bottom:13px;background:white;cursor:pointer}.route.selected{box-shadow:0 0 0 2px var(--route)}.route h3{display:flex;justify-content:space-between;margin:0 0 9px;font-size:15px}.route .badge{font-size:10px;letter-spacing:.3px;background:#eaf2ed;color:#356b4c;padding:3px 5px;border-radius:4px}.route .big{font-size:27px;font-weight:650;letter-spacing:-1px}.route .cost-label{color:var(--muted);font-size:12px}.route dl{display:grid;grid-template-columns:1fr auto;gap:8px;font-size:12px;margin:15px 0}.route dt{color:var(--muted)}.route dd{margin:0}.route .timing{border-top:1px solid #edf1ee;padding-top:9px;font-size:11px;color:var(--muted)}.result-note{font-size:12px;line-height:1.6;color:var(--muted)}.secondary{width:100%;font-size:13px}dialog{width:min(750px,95vw);max-height:90vh;overflow:auto;border:1px solid var(--border);border-radius:16px;padding:35px;color:#233c2f;line-height:1.7}dialog::backdrop{background:#0b2618aa}dialog p{font-size:15px}dialog pre{white-space:pre-wrap;background:#edf3ef;padding:18px;border-radius:7px}dialog a{color:var(--green)}.close{float:right}body.busy .controls{pointer-events:none;opacity:.72}[hidden]{display:none!important}@media(min-width:1600px){main{grid-template-columns:320px minmax(400px,1fr) 300px}.controls{padding:30px}.results{padding:30px}.workspace{padding:28px 35px}}@media(max-width:1150px){main{grid-template-columns:270px minmax(320px,1fr)}.results{grid-column:2;border-top:1px solid var(--border)}#results{display:flex;gap:12px;flex-wrap:wrap}.route{flex:1;min-width:200px}.formula{margin-top:18px}.controls{grid-row:span 2}.local{display:none}.workspace{padding:22px 18px}}@media(max-width:700px){header{height:76px;padding:0 15px;gap:5px}.brand strong{font-size:15px}.brand small{font-size:11px}.brand-icon{display:none}.quiet{margin-left:auto;font-size:12px}main{display:flex;flex-direction:column}.controls{padding:20px;border:0}.workspace{order:-1;padding:18px 12px}.map-container{height:540px;min-height:400px}.map-toolbar h2{font-size:17px}.map-instruction{font-size:10px;padding:7px}.results{padding:22px}.intro{margin-bottom:15px}.divider{margin:15px 0}.map-toolbar{gap:8px}.legend{gap:9px}.point{font-size:14px}}

.waypoint-row{display:flex;gap:7px;margin-bottom:7px}.waypoint-row .point{width:100%;font-size:14px;padding:10px}.waypoint-row .point small{font-size:12px}.remove-point{color:#a73a4c;padding:8px 12px}.point-list{max-height:280px;overflow:auto;margin-bottom:8px}.route h3{flex-wrap:wrap;gap:7px}
@media(min-width:1151px){body{overflow:hidden}main{height:calc(100vh - 84px);min-height:0}.controls,.results,.workspace{overflow:auto}.map-container{min-height:350px}.controls .primary{position:sticky;bottom:0;box-shadow:0 0 0 7px white}}

.color-legend{margin:16px 0;font-size:12px;color:#4e675b}.palette-gradient{height:15px;border-radius:4px;border:1px solid #ccd8d0}.legend-ticks{display:flex;justify-content:space-between;margin-top:5px}.legend-detail{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-top:9px}.legend-detail span{display:flex;gap:6px;align-items:center}.legend-detail i{width:11px;height:11px;display:inline-block}
.point-popup{position:absolute;z-index:10;background:#ffffff;border:1px solid #c9d6cf;border-radius:10px;padding:12px 14px;box-shadow:0 12px 28px rgba(0,0,0,0.18),0 3px 8px rgba(0,0,0,0.08);min-width:220px;pointer-events:auto;transform:translate(-50%,-100%);margin-top:-14px;animation:popupFadeIn .15s ease-out}
.point-popup::after{content:'';position:absolute;bottom:-6px;left:50%;transform:translateX(-50%) rotate(45deg);width:10px;height:10px;background:#ffffff;border-right:1px solid #c9d6cf;border-bottom:1px solid #c9d6cf}
@keyframes popupFadeIn{from{opacity:0;transform:translate(-50%,-92%)}to{opacity:1;transform:translate(-50%,-100%)}}
.point-popup-header{display:flex;align-items:center;gap:9px;margin-bottom:10px}
.point-popup-badge{background:#a1268c;color:#ffffff;font-weight:700;font-size:13px;width:24px;height:24px;line-height:24px;border-radius:50%;text-align:center;flex-shrink:0}
.point-popup-title{flex:1;min-width:0}
.point-popup-title strong{display:block;font-size:13px;color:#183e30}
.point-popup-title small{display:block;font-size:11px;color:var(--muted);white-space:nowrap}
.point-popup-close{border:0;background:transparent;padding:2px 6px;color:#889990;font-size:16px;line-height:1;border-radius:4px}
.point-popup-close:hover{background:#edf3f0;color:#22332e}
.point-popup-actions{display:flex;gap:7px}
.popup-btn-danger{display:flex;align-items:center;justify-content:center;gap:5px;flex:1;background:#fff5f5;color:#b22435;border:1px solid #f8b4b4;padding:7px 9px;border-radius:6px;font-size:12px;font-weight:600}
.popup-btn-danger:hover{background:#b22435;color:#ffffff;border-color:#b22435}
.popup-btn-secondary{display:flex;align-items:center;justify-content:center;gap:5px;flex:1;background:#f6f8f7;color:#2c443b;border:1px solid #d0dcd5;padding:7px 9px;border-radius:6px;font-size:12px;font-weight:500}
.popup-btn-secondary:hover{background:#e7efe9;color:#183e30}

