:root{--ink:#1b1f1e;--muted:#6b7472;--line:#dfe3e1;--surface:#fff;--page:#f6f7f6;--brand:#0f5c4e;--bad:#d1453b;--bad-ink:#8f2018;--warn:#b5730c;--ok:#1f7a4d;--sidebar:380px;--topbar:60px}*{box-sizing:border-box}button{font:inherit;color:var(--ink);border:1px solid var(--line);border-radius:6px;background:var(--surface);padding:7px 12px;cursor:pointer}button:hover:not(:disabled){border-color:#c4cac8;background:#fbfcfb}button:disabled{opacity:.55;cursor:not-allowed}button.primary{background:var(--brand);border-color:var(--brand);color:#fff}button.primary:hover:not(:disabled){background:#0c4c41;border-color:#0c4c41}input,select,textarea{font:inherit;color:var(--ink);border:1px solid var(--line);border-radius:6px;background:var(--surface);padding:7px 9px}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--brand);outline-offset:1px}body,html{margin:0;height:100%;background:var(--page);color:var(--ink);font:15px/1.5 Inter,system-ui,-apple-system,Segoe UI,sans-serif}.shell{display:flex;flex-direction:column;height:100vh}.topbar{height:var(--topbar);display:flex;align-items:center;padding:0 20px;background:var(--surface);border-bottom:1px solid var(--line)}.topbar h1{margin:0;font-size:17px;font-weight:600}.editor{flex:1 1;display:grid;grid-template-columns:1fr var(--sidebar);min-height:0}.editor,.map{position:relative}.map{height:100%;width:100%}.sidebar{overflow-y:auto;border-left:1px solid var(--line);padding:16px;flex-direction:column;gap:16px}.sidebar,.toolbar{background:var(--surface);display:flex}.toolbar{position:absolute;top:12px;left:12px;z-index:2;align-items:center;gap:12px;padding:8px;border:1px solid var(--line);border-radius:8px;box-shadow:0 2px 10px rgb(0 0 0/8%)}.modes{display:flex;gap:4px}.modes button{border:1px solid var(--line);background:var(--surface);padding:7px 12px;border-radius:6px;cursor:pointer;font-size:14px}.modes button.active{background:var(--brand);border-color:var(--brand);color:#fff}.toolbar .count{color:var(--muted);font-size:13px}.toolbar .busy{color:var(--brand);font-size:13px}.opacity{position:absolute;bottom:34px;left:12px;z-index:2;display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--surface);border:1px solid var(--line);border-radius:8px;font-size:13px}.panel{border:1px solid var(--line);border-radius:10px;padding:14px}.panel h2{margin:0 0 10px;font-size:15px;font-weight:600}.panel h3{margin:0 0 8px;font-size:14px;font-weight:600}.muted{color:var(--muted);margin:4px 0}.small{font-size:13px}.alert{border-radius:8px;padding:10px 12px;margin-bottom:10px;border:1px solid transparent}.alert p{margin:4px 0 0;font-size:13px}.alert-ok{background:#eef7f1;border-color:#bfe0cd;color:var(--ok)}.alert-bad{background:#fdeeed;border-color:#f2c2be;color:var(--bad-ink)}.alert-warn{background:#fdf4e6;border-color:#f0dcb4;color:var(--warn)}.alert-info{background:#eef2f7;border-color:#c9d6e5;color:#3a5578}.alert-info ul{margin:6px 0 0;padding-left:18px;font-size:13px}.orphans{list-style:none;margin:10px 0 0;padding:0;display:flex;flex-direction:column;gap:10px}.orphans button{display:flex;align-items:baseline;gap:8px;width:100%;text-align:left;border:1px solid #f2c2be;background:#fff8f7;border-radius:6px;padding:8px 10px;cursor:pointer}.orphans .code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px;color:var(--bad-ink)}.orphans .name{font-weight:600;flex:1 1}.orphans .gap{font-size:12px;color:var(--bad-ink);white-space:nowrap}.orphans p{font-size:13px;margin:4px 0 0}.field{display:flex;flex-direction:column;gap:4px;margin-bottom:12px;font-size:14px}.field input,.field select,.tolerance input{border:1px solid var(--line);border-radius:6px;padding:7px 9px;font:inherit}.flags{list-style:none;margin:0 0 12px;padding:0;flex-direction:column}.flags,.flags label{display:flex;gap:8px}.flags label{align-items:center;font-size:14px;cursor:pointer}.flags p{margin:2px 0 0 24px}.tolerance{display:flex;align-items:center;gap:8px}.tolerance input{width:80px}.danger,.tolerance button{border:1px solid var(--line);background:var(--surface);border-radius:6px;padding:7px 12px;cursor:pointer;font:inherit}.danger{color:var(--bad-ink);border-color:#f2c2be}button:disabled{opacity:.5;cursor:default}.error{background:#fdeeed;border:1px solid #f2c2be;color:var(--bad-ink);border-radius:8px;padding:10px 12px;font-size:13px;margin:0}hr{border:none;border-top:1px solid var(--line);margin:14px 0}.landing{max-width:560px;margin:12vh auto;padding:0 24px}.landing .cta{display:inline-block;margin-top:12px;padding:10px 16px;background:var(--brand);color:#fff;border-radius:8px;text-decoration:none}.maplibregl-popup-content{font:inherit;font-size:13px;border-radius:8px}.orphan-marker{gap:2px;padding:0;border:none;background:none;cursor:pointer;font:inherit}.orphan-marker,.orphan-marker .label{display:flex;flex-direction:column;align-items:center}.orphan-marker .label{background:var(--bad);color:#fff;border-radius:6px;padding:3px 8px;font-size:12px;font-weight:600;line-height:1.25;white-space:nowrap;box-shadow:0 2px 8px rgba(0,0,0,.3)}.orphan-marker .label em{font-style:normal;font-weight:400;font-size:11px;opacity:.9}.orphan-marker .dot{order:1;width:12px;height:12px;border-radius:50%;background:var(--bad);border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.4)}.row{display:flex;gap:8px;flex-wrap:wrap;margin-top:4px}.row button{border:1px solid var(--line);background:var(--surface);border-radius:6px;padding:7px 12px;cursor:pointer;font:inherit}.row button:first-child{background:var(--brand);border-color:var(--brand);color:#fff}.row button.danger{background:var(--surface);color:var(--bad-ink);border-color:#f2c2be}.field textarea{border:1px solid var(--line);border-radius:6px;padding:7px 9px;font:inherit;resize:vertical}.warn-inline{color:var(--warn);font-weight:600}.flags li.flag-danger{border-left:3px solid var(--bad);padding-left:9px;margin-left:-12px}.flags li.flag-danger label span{color:var(--bad-ink);font-weight:600}.layers{list-style:none;margin:8px 0;padding:0;display:flex;flex-direction:column;gap:6px}.layers button{display:flex;align-items:center;gap:8px;width:100%;text-align:left;border:1px solid var(--line);background:var(--surface);border-radius:6px;padding:6px 9px;cursor:pointer;font:inherit}.layers li.selected button{border-color:var(--brand);box-shadow:inset 0 0 0 1px var(--brand)}.layers .kind{flex:1 1;font-weight:600;font-size:14px}.layers .tag{font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--bad-ink);background:#fdeeed;border:1px solid #f2c2be;border-radius:4px;padding:1px 5px}.swatch{width:14px;height:14px;border-radius:3px;border:1px solid rgba(0,0,0,.15)}.swatch-water{background:#7fb2d9}.swatch-lawn{background:#a8cf95}.swatch-garden{background:#7fbf7f}.swatch-parking{background:#c9c4bb}.swatch-restricted{background:#d8a7a2}.swatch-building{background:#b9b2a6}.layer-detail{margin-top:10px;padding-top:10px;border-top:1px solid var(--line)}.dropzone{border:2px dashed var(--line);border-radius:10px;padding:18px 14px;text-align:center}.dropzone.over{border-color:var(--brand);background:#f2f8f6}.dropzone p{margin:0 0 10px;font-size:14px}.dropzone button{border:1px solid var(--brand);background:var(--brand);color:#fff;border-radius:6px;padding:8px 14px;cursor:pointer;font:inherit}.base-thumb{display:block;width:100%;max-height:150px;object-fit:cover;border-radius:8px;border:1px solid var(--line);background:#eee}.aligning{margin-top:12px;padding-top:12px;border-top:1px solid var(--line)}.steps{margin:0 0 12px;padding-left:20px;font-size:13px;color:var(--muted)}.steps li{margin-bottom:4px}.checkline{display:flex;align-items:center;gap:8px;font-size:14px;cursor:pointer;margin-bottom:6px}.aligning-banner{position:absolute;top:12px;left:50%;transform:translateX(-50%);z-index:3;border-radius:8px;padding:8px 14px;box-shadow:0 2px 10px rgba(0,0,0,.25)}.aligning-banner,.corner-handle{background:var(--brand);color:#fff;font-size:13px}.corner-handle{width:26px;height:26px;border-radius:50%;border:3px solid #fff;box-shadow:0 2px 8px rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;font-weight:700;cursor:-webkit-grab;cursor:grab}.corner-handle:active{cursor:-webkit-grabbing;cursor:grabbing;background:#0b463b}.event-form{display:flex;flex-direction:column;gap:8px;margin-bottom:14px}.event-form-row{display:flex;gap:8px;align-items:flex-end;flex-wrap:wrap}.event-form label,.event-form-row label{display:flex;flex-direction:column;gap:3px;font-size:12px;flex:1 1 90px}.event-form .hint,.event-form-row .hint{font-size:11px;color:#6b6a65;font-weight:400}.event-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}.event-row{display:flex;gap:8px;align-items:flex-start}.event-row>button:first-child{flex:1 1;display:flex;flex-direction:column;gap:2px;text-align:left;padding:8px;border:1px solid #d8d5cd;border-radius:6px;background:#fff;cursor:pointer;font-size:12px}.event-link{margin:4px 0 0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;color:#6b6a65}.schedule ul{list-style:none;margin:8px 0;padding:0;display:flex;flex-direction:column;gap:6px}.schedule li{display:flex;gap:6px;align-items:center;font-size:12px}.schedule-name{flex:1 1}.panel-empty{font-size:12px;color:#6b6a65}.event-summary{flex:1 1;display:flex;flex-direction:column;gap:2px;font-size:12px}.schedule-toggle{width:100%;margin-top:6px;padding:6px 8px;border:1px solid #d8d5cd;border-radius:6px;background:#f3f1ec;font-size:12px;text-align:left;cursor:pointer}.block-editor{margin-top:6px;padding:8px;border:1px solid #e5e3dc;border-radius:6px;background:#fbfaf7}.block-list{list-style:none;margin:0 0 8px;padding:0;display:flex;flex-direction:column;gap:4px}.block-list li{display:flex;gap:8px;align-items:center;justify-content:space-between;font-size:12px;padding:4px 6px;border:1px solid #e5e3dc;border-radius:4px;background:#fff}.schedule-form{display:flex;flex-direction:column;gap:6px;margin-top:8px;padding-top:8px;border-top:1px solid #e5e3dc}.schedule-time{font-size:11px;color:#6b6a65;white-space:nowrap}.qr-kinds,.qr-sizes{display:flex;flex-direction:column;gap:6px;margin-bottom:10px;font-size:12px}.qr-kinds{flex-direction:row;gap:12px}.qr-sizes label{display:grid;grid-template-columns:auto auto 1fr;grid-gap:6px;gap:6px;align-items:baseline}.qr-sizes span{color:#6b6a65;font-size:11px}.qr-event{display:flex;flex-direction:column;gap:4px;font-size:12px;margin-bottom:10px}.qr-metrics{display:grid;grid-template-columns:1fr 1fr;grid-gap:6px 12px;gap:6px 12px;margin:0 0 10px;padding:8px;border:1px solid #e5e3dc;border-radius:6px;background:#fbfaf7;font-size:12px}.qr-metrics dt{color:#6b6a65;font-size:11px}.qr-metrics dd{margin:0;font-weight:500}.qr-download{display:block;padding:8px;border:1px solid #d8d5cd;border-radius:6px;background:#f3f1ec;text-align:center;font-size:13px;text-decoration:none;color:#1a1a17}.qr-list{list-style:none;margin:10px 0 0;padding:0;max-height:220px;overflow-y:auto;display:flex;flex-direction:column;gap:4px;font-size:12px}.qr-list li{display:flex;justify-content:space-between;gap:8px;padding:4px 6px;border:1px solid #e5e3dc;border-radius:4px}.tile-slots{list-style:none;margin:0 0 10px;padding:0;display:flex;flex-direction:column;gap:8px}.tile-slots li{display:grid;grid-template-columns:18px 1fr;grid-gap:4px 8px;gap:4px 8px;padding:8px;border:1px solid #e5e3dc;border-radius:6px;font-size:12px}.tile-slots li label{display:flex;flex-direction:column;gap:3px;grid-column:2}.slot-number{grid-row:1/-1;color:#9c9a92;font-size:11px}.tile-fixed{background:#f3f1ec;color:#6b6a65;align-items:center}.tile-fixed span:last-child{grid-column:2}.adminbar{display:flex;align-items:center;gap:14px;height:44px;padding:0 20px;background:var(--surface);border-bottom:1px solid var(--line);font-size:13px}.adminbar a{color:var(--brand);font-weight:600;text-decoration:none}.adminbar a:hover{text-decoration:underline}.adminbar-who{margin-left:auto;color:var(--muted)}.adminbar button{padding:5px 10px;font-size:13px}.gate{min-height:60vh;display:flex;flex-direction:column;gap:12px;align-items:center;justify-content:center;color:var(--muted);font-size:14px}.login{max-width:360px;margin:12vh auto;padding:22px;border:1px solid var(--line);border-radius:10px;background:var(--surface)}.login h1{margin:0 0 4px;font-size:19px;font-weight:600}.login form{gap:12px;margin:18px 0 14px}.login form,.login label{display:flex;flex-direction:column}.login label{gap:5px;font-size:13px;color:var(--muted)}.login input{font-size:15px;color:var(--ink)}.login button[type=submit]{margin-top:2px;padding:9px 12px}.linkish{padding:0;color:var(--brand);font-size:13px;cursor:pointer;text-decoration:underline}.linkish,.linkish:hover{border:none;background:none}.login .hint{margin:12px 0 0;color:var(--muted);font-size:12px;line-height:1.5}.login .panel-error{margin:0}.properties{display:block;height:auto;min-height:100vh;max-width:780px;margin:0 auto;padding:28px 20px 60px}.properties h1{margin:0 0 4px;font-size:22px;font-weight:600}.properties-lead{margin:0 0 20px;color:var(--muted);font-size:13px}.property-grid{list-style:none;margin:0 0 20px;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));grid-gap:12px;gap:12px}.property-grid a{position:relative;display:flex;flex-direction:column;gap:4px;padding:14px 34px 14px 14px;border:1px solid var(--line);border-radius:10px;background:var(--surface);text-decoration:none;color:var(--ink);transition:border-color .12s ease,box-shadow .12s ease,transform .12s ease}.property-grid a:after{content:"›";position:absolute;right:14px;top:50%;transform:translateY(-50%);color:var(--muted);font-size:20px;line-height:1;transition:transform .12s ease,color .12s ease}.property-grid a:hover{border-color:var(--brand);box-shadow:0 1px 6px rgba(15,92,78,.12)}.property-grid a:hover:after{color:var(--brand);transform:translateY(-50%) translateX(3px)}.property-name{font-size:15px;font-weight:600}.property-slug{color:var(--muted);font-size:12px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.properties-empty{margin:0 0 20px;padding:20px;border:1px dashed var(--line);border-radius:10px;color:var(--muted);font-size:14px;text-align:center}.new-property{margin-top:4px;padding:16px;border:1px solid var(--line);border-radius:10px;background:var(--surface)}.new-property h2{margin:0 0 12px;font-size:15px;font-weight:600}.new-property form{display:flex;flex-direction:column;gap:12px}.new-property label{display:flex;flex-direction:column;gap:5px;font-size:13px;color:var(--muted)}.new-property .row label{flex:1 1 160px}.new-property .row{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap;border:none;padding:0;margin:0}.new-property .hint{margin:0;color:var(--muted);font-size:12px;line-height:1.5}.slug-preview{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--muted)}.new-property .panel-error{margin:0}.brand-colours{gap:10px;margin-bottom:10px}.brand-colours,.brand-swatch{display:flex;flex-direction:column}.brand-swatch{gap:4px;font-size:13px}.brand-swatch-label{color:var(--muted)}.brand-swatch-row{display:flex;gap:8px;align-items:center}.brand-swatch-row input[type=color]{width:40px;height:32px;padding:2px;cursor:pointer}.brand-swatch-row input[type=text]{flex:1 1;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px}.brand-swatch-hint{color:var(--muted);font-size:11px}.brand-contrast{margin:0 0 12px;padding:8px 10px;border-radius:6px;font-size:12px;line-height:1.5}.brand-contrast.ok{background:#eef7f1;border:1px solid #bfe0cd;color:var(--ok)}.brand-contrast.warn{background:#fdf4e6;border:1px solid #f0dcb4;color:var(--warn)}.brand-preview{border:1px solid var(--line);border-radius:10px;padding:12px;margin-bottom:12px;font-size:12px;color:#1a1a17}.brand-preview-header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding-bottom:8px;border-bottom:1px solid rgb(0 0 0/8%)}.brand-preview-header img{max-height:20px;max-width:55%;object-fit:contain}.brand-preview-pill{border:1px solid;border-radius:20px;padding:3px 8px;font-size:10px;white-space:nowrap}.brand-preview-origin{margin:8px 0 0;font-size:10px;opacity:.65}.brand-preview-heading{margin:2px 0 8px;font-size:16px;font-weight:500}.brand-preview-card{display:flex;flex-direction:column;gap:2px;padding:10px;border-radius:10px;background:#faeeda;color:#412402;margin-bottom:8px}.brand-preview-meta,.brand-preview-when{font-size:10px;color:#854f0b}.brand-preview-navigate{margin-top:6px;padding:7px;border-radius:6px;text-align:center;font-size:12px}.brand-preview-tiles{display:grid;grid-template-columns:1fr 1fr;grid-gap:6px;gap:6px}.brand-preview-tile{display:flex;flex-direction:column;gap:4px;padding:8px;border:1px solid rgba(0,0,0,.1);border-radius:6px;background:#fff;font-size:11px}.brand-preview-icon{font-size:13px}.brand-actions{margin-bottom:14px}.brand-actions,.brand-logo{display:flex;align-items:center;gap:10px}.brand-logo{margin:8px 0;padding:8px;border:1px solid var(--line);border-radius:6px;background:#fbfaf7}.brand-logo img{max-height:26px;max-width:60%;object-fit:contain}