@import "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=IBM+Plex+Mono:wght@400;500&display=swap";
:root{--blue:#2f7bf6;--blue-d:#1d5fd0;--navy:#1e3a6e;--ink:#111827;--grey:#6b7280;--line:#e5e7eb;--bg:#f7f8fa;--ai:#6d4aff;--ai-bg:#f1edff;--ok:#16a34a;--ok-bg:#ecfdf3;--warn:#d97706;--warn-bg:#fff7e6;--err:#c62828;--mono:"IBM Plex Mono", ui-monospace, monospace}*{box-sizing:border-box}html{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}body{color:var(--ink);background:var(--bg);margin:0;font:15px/1.5 Inter,system-ui,-apple-system,Segoe UI,sans-serif}a{color:var(--blue)}h1,h2,h3{text-wrap:balance;line-height:1.2}h2{margin:0 0 16px;font-size:1.5rem}code,.mono{font-family:var(--mono);font-size:.92em}code{background:#eef2ff;border-radius:4px;padding:1px 5px}button{font:inherit;touch-action:manipulation}a,button,input,select,summary{-webkit-tap-highlight-color:transparent}:is(a,button,input,select,summary,[tabindex]):focus-visible{outline-offset:2px;outline:3px solid #bfd3ff}.link:hover,.tab:hover{text-decoration:underline}.chip:hover,.cat:hover{border-color:var(--grey)}.wrap{max-width:1100px;margin:0 auto;padding:0 16px}.block{margin:48px auto}.muted{color:var(--grey)}.small{font-size:.88rem}.err{color:var(--err)}.row{align-items:center;gap:10px;display:flex}.sw{border-radius:3px;flex:none;width:12px;height:12px}.kv{grid-template-columns:110px 1fr;gap:6px 12px;margin:0;font-size:.92rem;display:grid}.kv dt{color:var(--grey)}.kv dd{margin:0}.btn{cursor:pointer;background:var(--blue);color:#fff;border:1px solid #0000;border-radius:8px;justify-content:center;align-items:center;gap:8px;padding:10px 16px;font-weight:600;text-decoration:none;transition:background-color .15s,border-color .15s;display:inline-flex}.btn:hover{background:var(--blue-d)}.btn:focus-visible{outline-offset:2px;outline:3px solid #bfd3ff}.btn-secondary{color:var(--ink);background:#fff;border-color:#cfd6e2}.btn-secondary:hover{border-color:var(--grey);background:#fff}.btn-ghost{color:var(--blue);background:0 0;padding:6px 8px}.btn-ghost:hover{background:#eef4ff}.btn-ai{background:var(--ai)}.btn-ai:hover{background:#5a3be0}.btn-lg{padding:13px 22px;font-size:1.05rem}.btn-sm{padding:5px 10px;font-size:.88rem;font-weight:500}.btn[disabled]{opacity:.5;cursor:not-allowed}.link{color:var(--blue);cursor:pointer;font:inherit;background:0 0;border:0;padding:0;font-weight:500}.badge{white-space:nowrap;vertical-align:middle;border-radius:999px;padding:2px 8px;font-size:.74rem;font-weight:600;display:inline-block}.badge-ai{background:var(--ai-bg);color:var(--ai)}.badge-ok{background:var(--ok-bg);color:var(--ok)}.badge-warn{background:var(--warn-bg);color:var(--warn)}.badge-grey{color:var(--grey);background:#eef0f4}.badge-free{color:var(--blue-d);background:#e8f1ff}.alert{border-radius:10px;align-items:flex-start;gap:10px;padding:12px 14px;display:flex}.alert-warn{background:var(--warn-bg);border:1px solid #fde4b9}.alert-ai{background:var(--ai-bg);border:1px solid #ddd4ff}.alert-info{background:#eef4ff;border:1px solid #cfe0ff}.alert-err{background:#fdecec;border:1px solid #f5c2c2}input.text,select.text{font:inherit;width:100%;color:var(--ink);background:#fff;border:1px solid #cfd6e2;border-radius:8px;padding:9px 12px}input.text:focus-visible,select.text:focus-visible{border-color:var(--blue);outline:3px solid #bfd3ff}label.opt{border:1px solid var(--line);cursor:pointer;border-radius:10px;align-items:flex-start;gap:10px;padding:10px 12px;display:flex}label.opt.on{border-color:var(--blue);background:#f4f8ff}label.opt input{margin-top:3px}details.adv>summary{cursor:pointer;color:var(--blue);margin:14px 0 8px;font-weight:500;list-style:none}details.adv>summary:before{content:"▸ "}details[open].adv>summary:before{content:"▾ "}.adv-body{border-left:2px solid var(--line);gap:10px;padding-left:12px;display:grid}.progress{background:#eef0f4;border-radius:3px;height:6px;overflow:hidden}.progress i{background:var(--blue);border-radius:3px;height:100%;transition:width .3s;display:block}.progress.ai i{background:var(--ai)}.progress.busy i{width:40%;animation:1.4s ease-in-out infinite slide}@keyframes slide{0%{transform:translate(-100%)}to{transform:translate(250%)}}@media (prefers-reduced-motion:reduce){.progress.busy i{width:100%;animation:none}}.top{border-bottom:1px solid var(--line);z-index:5;background:#fff;align-items:center;gap:24px;height:60px;padding:0 20px;display:flex;position:sticky;top:0}.top .wrap{justify-content:space-between;align-items:center;width:100%;display:flex}.logo{color:var(--ink);letter-spacing:-.01em;font-size:1.3rem;font-weight:800;text-decoration:none}.logo span{color:var(--blue)}.top nav a{color:var(--ink);margin-left:20px;font-weight:500;text-decoration:none}.steps{align-items:center;margin:0 auto;display:flex}.step{color:var(--grey);align-items:center;gap:8px;font-size:.92rem;font-weight:500;display:flex}.step+.step:before{content:"";background:var(--line);width:36px;height:1px;margin:0 12px}.step i{width:22px;height:22px;color:var(--grey);background:#eef0f4;border-radius:50%;place-items:center;font-size:.78rem;font-style:normal;font-weight:700;display:grid}.step.done i{background:var(--ok-bg);color:var(--ok)}.step.done,.step.now{color:var(--ink)}.step.now i{background:var(--blue);color:#fff}.file{color:var(--grey);text-align:right;max-width:320px;margin-left:auto;font-size:.88rem;line-height:1.3}.file b{color:var(--ink);text-overflow:ellipsis;white-space:nowrap;font-weight:600;display:block;overflow:hidden}.job{grid-template-columns:1fr 400px;height:calc(100vh - 60px);display:grid}.map{background:#1b1f24;position:relative;overflow:hidden}.map .canvas{position:absolute;inset:0}.map .legend{z-index:2;background:#fffffff2;border-radius:8px;padding:8px 12px;font-size:.85rem;position:absolute;bottom:24px;left:12px;box-shadow:0 2px 8px #0000001f}.map .toast{color:#fff;z-index:2;text-align:center;background:#111827;border-radius:8px;max-width:80%;padding:8px 14px;font-size:.9rem;position:absolute;top:14px;left:50%;transform:translate(-50%);box-shadow:0 4px 14px #00000040}.map .toast.ai{background:var(--ai)}.map .toast.ok{background:var(--ok)}.maplibregl-popup-content{border-radius:10px;padding:10px 12px;font:13px/1.4 Inter,system-ui,sans-serif}.maplibregl-popup-content table{border-collapse:collapse}.maplibregl-popup-content th{text-align:left;color:var(--grey);padding:1px 8px 1px 0;font-weight:500}.maplibregl-popup-content td{padding:1px 0}.panel{border-left:1px solid var(--line);background:#fff;flex-direction:column;min-height:0;display:flex}.panel-h{padding:16px 20px 0}.panel-h h2{margin:0 0 4px;font-size:1.2rem}.panel-b{flex:1;padding:16px 20px;overflow:auto}.panel-f{border-top:1px solid var(--line);align-items:center;gap:10px;padding:14px 20px;display:flex}.panel-f .btn:not(.btn-secondary):not(.btn-ghost){flex:1}.tabs{border-bottom:1px solid var(--line);gap:2px;margin:12px -20px 0;padding:0 20px;display:flex}.tab{color:var(--grey);cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;align-items:center;gap:6px;margin-bottom:-1px;padding:10px 12px;font-weight:500;display:flex}.tab.on{color:var(--ink);border-color:var(--blue)}.tab .dot{background:var(--ai);border-radius:50%;width:8px;height:8px}.layers{margin:0;padding:0;list-style:none}.layers li{border-bottom:1px solid #f0f2f5;grid-template-columns:14px 1fr auto auto;align-items:center;gap:8px;padding:6px 0;font-size:.9rem;display:grid}.layers li.off{opacity:.45}.layers .name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.layers .n{color:var(--grey);font-variant-numeric:tabular-nums;font-size:.85rem}.cat{color:var(--ai);cursor:pointer;background:#fff;border:1px solid #ddd4ff;border-radius:999px;max-width:120px;padding:2px 8px;font-size:.78rem}.cat.user{border-color:var(--line);color:var(--ink)}.eye{cursor:pointer;background:0 0;border:0;padding:0 4px;font-size:1rem}.plan{gap:6px;margin:10px 0 14px;display:grid}.plan .p{align-items:center;gap:10px;font-size:.92rem;display:flex}.plan .p i{border:2px solid var(--line);border-radius:50%;flex:none;place-items:center;width:20px;height:20px;font-size:.7rem;font-style:normal;display:grid}.plan .p.done i{border-color:var(--ok);background:var(--ok);color:#fff}.plan .p.now i{border-color:var(--blue);color:var(--blue);animation:1.2s infinite pulse}.plan .p.todo{color:var(--grey)}@keyframes pulse{50%{box-shadow:0 0 0 4px #e8f1ff}}@media (prefers-reduced-motion:reduce){.plan .p.now i{animation:none}}.feed{gap:10px;display:grid}.act{border:1px solid var(--line);border-radius:10px;gap:6px;padding:10px 12px;font-size:.9rem;display:grid}.act .t{color:var(--grey);font-size:.78rem}.act .thumb{border:1px solid var(--line);object-fit:cover;background:#fff;border-radius:6px;width:100%;height:120px}.act.q{background:var(--warn-bg);border-color:#fde4b9}.chips{flex-wrap:wrap;gap:6px;display:flex}.chip{cursor:pointer;background:#fff;border:1px solid #cfd6e2;border-radius:999px;padding:5px 12px;font-size:.88rem}.chip.on{border-color:var(--ai);background:var(--ai-bg);color:var(--ai);font-weight:600}.prop{border:1px solid var(--line);border-radius:10px;gap:8px;margin-bottom:10px;padding:12px;display:grid}.prop h4{align-items:center;gap:8px;margin:0;font-size:.95rem;display:flex}.tier h5{text-transform:uppercase;letter-spacing:.04em;color:var(--grey);margin:8px 0 4px;font-size:.78rem}.cl{border:1px solid var(--line);border-radius:8px;grid-template-columns:20px 1fr;align-items:start;gap:8px;margin-bottom:6px;padding:8px 10px;font-size:.9rem;display:grid}.cl .why{color:var(--grey);font-size:.82rem}.files{margin:0;padding:0;list-style:none}.files li{border-bottom:1px solid #f0f2f5;grid-template-columns:30px 1fr;align-items:center;gap:10px;padding:7px 0;font-size:.9rem;display:grid}.files .ic{width:30px;height:24px;font-size:.62rem;font-weight:700;font-family:var(--mono);color:var(--grey);background:#eef0f4;border-radius:6px;place-items:center;display:grid}.files .ic.shp{color:var(--blue-d);background:#e8f1ff}.files .ic.kmz{background:var(--ok-bg);color:var(--ok)}.files .ic.ai{background:var(--ai-bg);color:var(--ai)}.wait{max-width:560px;margin:64px auto;padding:0 16px}.wait .card{padding:28px}.overlay{z-index:50;background:#1118278c;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.overlay .card{width:min(520px,100%);color:var(--ink);text-align:left;padding:28px}dialog{border:1px solid #ccd;border-radius:12px;max-width:520px;padding:24px}dialog::backdrop{background:#11182766}.hero{color:#fff;background-color:var(--navy);background-image:repeating-radial-gradient(circle at 15% 40%,#0000 0 26px,#ffffff0f 26px 27px),repeating-radial-gradient(circle at 85% 10%,#0000 0 34px,#ffffff0d 34px 35px);padding:48px 0 96px}.hero h1{letter-spacing:-.02em;margin:0 0 12px;font-size:clamp(1.8rem,4vw,2.6rem);font-weight:800}.hero p{opacity:.85;max-width:760px;margin:0;font-size:1.15rem}.card{background:#fff;border-radius:12px;box-shadow:0 4px 18px #11182714}.tool{grid-template-columns:1fr 1fr;gap:20px;margin-top:-64px;padding:20px;display:grid;position:relative}.drop{text-align:center;cursor:pointer;color:var(--grey);background:#fafbff;border:2px dashed #b9c8f2;border-radius:12px;place-items:center;gap:6px;padding:36px 16px;display:grid}.drop.over,.drop:hover{border-color:var(--blue);background:#f2f6ff}.drop strong{color:var(--ink);font-size:1.2rem}.drop .fmt{font-size:.9rem}.drop .ico{width:44px;height:44px;color:var(--blue);background:#e8f1ff;border-radius:12px;place-items:center;font-size:22px;display:grid}.proof{border:1px solid var(--line);border-radius:12px;grid-template-columns:1fr 1fr;min-height:220px;display:grid;position:relative;overflow:hidden}.proof .lab{z-index:2;color:#fff;background:#111827cc;border-radius:999px;padding:2px 8px;font-size:.75rem;font-weight:600;position:absolute;top:10px}.proof .lab.l{left:10px}.proof .lab.r{right:10px}.proof .arrow{z-index:2;background:var(--blue);color:#fff;border-radius:50%;place-items:center;width:36px;height:36px;font-weight:700;display:grid;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 2px 8px #0000004d}.proof .cad{object-fit:cover;background:#fff;width:100%;height:100%}.proof .osm{background:#e9e5dc;position:relative;overflow:hidden}.proof .osm .tiles{filter:saturate(.8);grid-template-columns:repeat(3,256px);grid-auto-rows:256px;display:grid;position:absolute;inset:-30px -40px}.proof .osm .over{mix-blend-mode:multiply;opacity:.9;width:84%;position:absolute;top:14%;left:8%;transform:rotate(-6deg)}.why{padding-left:20px}.why li{margin:6px 0}.how{counter-reset:s;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;padding:0;list-style:none;display:grid}.how li{counter-increment:s;background:#fff;border-radius:12px;padding:20px;box-shadow:0 2px 8px #1118270d}.how li:before{content:counter(s);background:var(--blue);color:#fff;border-radius:50%;place-items:center;width:30px;height:30px;margin-bottom:8px;font-weight:700;display:inline-grid}.how strong{display:block}.how span{color:var(--grey)}.prices{border-collapse:collapse;background:#fff;border-radius:12px;width:100%;overflow:hidden;box-shadow:0 2px 8px #1118270d}.prices th,.prices td{text-align:left;border-bottom:1px solid var(--line);vertical-align:top;padding:12px 16px}.prices .price{color:var(--blue);white-space:nowrap;font-weight:700}.grid{grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:16px;display:grid}.pair{color:var(--ink);padding:20px;text-decoration:none;display:block}.pair:hover{box-shadow:0 8px 28px #1118271f}.pair strong{color:var(--blue);margin-bottom:4px;font-size:1.1rem;display:block}.pair span{color:var(--grey)}details:not(.adv){background:#fff;border-radius:10px;margin-bottom:10px;padding:14px 18px;box-shadow:0 2px 8px #1118270d}details:not(.adv) summary{cursor:pointer;font-weight:600}details:not(.adv) p{color:var(--grey);margin:10px 0 0}.foot{border-top:1px solid var(--line);color:var(--grey);background:#fff;padding:28px 0;font-size:.92rem}.foot nav{flex-wrap:wrap;gap:8px 18px;margin:10px 0;display:flex}.foot a{color:var(--grey)}.legal{max-width:760px}.legal h2{margin-top:32px;font-size:1.2rem}@media (max-width:900px){.dl,.tool{grid-template-columns:1fr}.proof{display:none}.job{grid-template-rows:45vh 1fr;grid-template-columns:1fr;height:auto}.panel{border-left:0;border-top:1px solid var(--line)}.steps .step span{display:none}.step+.step:before{width:16px;margin:0 6px}.file{display:none}}.dl{grid-template-columns:1fr 300px;gap:24px;max-width:960px;margin:40px auto;padding:0 16px;display:grid}.next{gap:10px;display:grid}.next a,.next button{border:1px solid var(--line);width:100%;color:var(--ink);background:#fff;border-radius:10px;padding:12px 14px;text-decoration:none;display:block}.next a:hover,.next button:hover{border-color:var(--blue)}.next a span{color:var(--grey);font-size:.85rem;display:block}@media (max-width:900px){.dl{grid-template-columns:1fr}}.map .base{z-index:2;cursor:pointer;background:#fffffff2;border:1px solid #cfd6e2;border-radius:8px;padding:5px 10px;font-size:.85rem;font-weight:500;position:absolute;top:12px;right:52px;box-shadow:0 2px 8px #0000001f}.map .base:hover{border-color:var(--grey)}.pin{background:var(--blue);color:#fff;cursor:grab;-webkit-user-select:none;user-select:none;border:2px solid #fff;border-radius:50%;place-items:center;width:26px;height:26px;font-size:.8rem;font-weight:700;display:grid;box-shadow:0 2px 6px #00000059}.pin.cross,.pin.turn{background:#111827;width:44px;height:44px;font-size:1.3rem;box-shadow:0 0 0 7px #ffffff8c,0 2px 8px #0006}.pin.turn{background:var(--warn)}.pin:active{cursor:grabbing}.pin.cross:after,.pin.turn:after{content:"move";color:#fff;white-space:nowrap;pointer-events:none;background:#111827d9;border-radius:999px;padding:1px 7px;font:600 .7rem Inter,system-ui,sans-serif;position:absolute;top:100%;left:50%;transform:translate(-50%,9px)}.pin.turn:after{content:"turn"}.map.split .canvas{left:50%}.map.split .canvas.left{border-right:2px solid #fff;left:0;right:50%}.map.split .canvas:before{content:"The map — click where the spot really is";z-index:2;color:#fff;pointer-events:none;background:#111827cc;border-radius:999px;padding:2px 8px;font-size:.75rem;font-weight:600;position:absolute;top:12px;left:12px}.map.split .canvas.left:before{content:"The plan — click a spot you recognise"}.map.split canvas{cursor:crosshair}.map.split .toast{top:auto;bottom:24px}.map .toast{pointer-events:none}.map.adjusting .legend{display:none}@media (max-width:900px){.map .toast{text-align:left;max-width:calc(100% - 150px);padding:6px 10px;font-size:.8rem;left:8px;transform:none}.map.split .toast{max-width:calc(100% - 16px);top:auto;bottom:34px}.map.adjusting:not(.split) .toast,.map.split .canvas:before{display:none}.panel .link,.panel summary{padding-block:7px;display:inline-block}.panel input[type=checkbox]{width:20px;height:20px}}
