:root{--ink:#26382a;--green:#3e6847;--moss:#709052;--paper:#f7f1e4;--card:#fffdf7;--line:#d8d0bd;--accent:#e27848;--muted:#69756a;--shadow:0 12px 28px #33442218}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font:15px/1.45 ui-rounded,"Avenir Next",Avenir,system-ui,sans-serif}button,input,select,textarea{font:inherit}button{border:0;border-radius:10px;background:var(--green);color:#fff;padding:.67rem .9rem;cursor:pointer;font-weight:650}button:hover{filter:brightness(1.07)}button.secondary,.tool,.topbar nav button{background:transparent;color:var(--ink)}button.secondary{border:1px solid var(--line)}.auth{max-width:520px;margin:8vh auto;padding:2rem}.auth h1{font-size:clamp(2.2rem,7vw,4.4rem);line-height:.98;margin:.3rem 0 1rem;letter-spacing:-.06em}.eyebrow{font-size:.75rem;text-transform:uppercase;letter-spacing:.13em;color:var(--moss);font-weight:800}.card{background:var(--card);padding:1.25rem;border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);margin-top:1.5rem}.form{display:grid;gap:1rem}.form label,.property label{display:grid;gap:.35rem;font-weight:650}.form input,.filters input,.filters select,.property input,.property textarea,.property select{width:100%;padding:.65rem .75rem;border:1px solid var(--line);border-radius:9px;background:#fffdf7;color:var(--ink)}.error{color:#a43a26;background:#ffe6df;padding:.6rem;border-radius:8px}.topbar{height:64px;display:flex;align-items:center;gap:1rem;padding:0 .9rem;background:#fffdf9;border-bottom:1px solid var(--line)}.brand{background:transparent;color:var(--green);font-size:1.1rem;padding:.4rem;font-weight:800;white-space:nowrap}.brand span{color:var(--accent)}.topbar nav{display:flex;gap:.25rem;flex:1}.topbar nav button.active{background:#e9f0dc;color:var(--green)}.icon-button{padding:.55rem .7rem;background:transparent;color:var(--ink);font-size:1.3rem}.workspace{height:calc(100vh - 64px);display:grid;grid-template-columns:180px 1fr 285px}.tool-panel,.inspector{background:#fffdf9;border-right:1px solid var(--line);padding:.8rem;overflow:auto}.inspector{border-right:0;border-left:1px solid var(--line)}.panel-title{font-size:.78rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:800;padding:.4rem .55rem}.tool{width:100%;text-align:left;padding:.6rem .55rem;margin:.1rem 0}.tool.active,.tool:hover{background:#e9f0dc;color:var(--green)}.tool-panel hr{border:0;border-top:1px solid var(--line);margin:.7rem 0}.map-stage{position:relative;min-width:0;overflow:hidden;background:#e9ebd5}.map-stage:before{content:"";position:absolute;inset:0;opacity:.3;pointer-events:none;background-image:radial-gradient(#536c4340 1px,transparent 1px);background-size:13px 13px}#garden-map{width:100%;height:100%;display:block;touch-action:none;position:relative}#garden-ground{fill:#f7f0df;stroke:#537047;stroke-width:5}#garden-grid{pointer-events:none}.garden-outline{fill:#f7f0df;stroke:#537047;stroke-width:5;stroke-linejoin:round}.map-object{cursor:pointer}.map-object.selected .selection{display:block}.selection{display:none;fill:none;stroke:#e27848;stroke-width:5;stroke-dasharray:10 6;pointer-events:none}.map-object.planned{opacity:.58;stroke-dasharray:8 5}.object-label{font-size:24px;fill:#334534;paint-order:stroke;stroke:#f7f0df;stroke-width:5;stroke-linejoin:round}.tree-crown{fill:#7aa75d;stroke:#476b45;stroke-width:5}.tree-crown.alt{fill:#8bb85f}.plant-dot{fill:#d47e74;stroke:#7f4742;stroke-width:4}.raised-bed{fill:#b98960;stroke:#6b4831;stroke-width:5}.bed{fill:#be8c68;stroke:#7e5a42;stroke-width:4}.grill{fill:#4c544d;stroke:#202820;stroke-width:4}.slab{fill:#b7b3a2;stroke:#777564;stroke-width:3}.path-shape{fill:#d1bd91;stroke:#a88b61;stroke-width:4}.fence-shape{stroke:#87694b;stroke-width:12;stroke-linecap:round}.measure-line{stroke:#d9533d;stroke-width:5;stroke-dasharray:12 7}.measure-text{fill:#a83d2e;font-size:24px;font-weight:800;paint-order:stroke;stroke:#fff;stroke-width:5}.map-empty{position:absolute;z-index:2;inset:0;display:grid;place-content:center;text-align:center;background:#f7f1e4e6}.map-empty h2{margin:0}.map-empty p{max-width:300px}.map-empty[hidden]{display:none}#map-toolbar{position:absolute;z-index:3;right:1rem;top:1rem;display:flex;gap:.35rem;align-items:center;background:#fffdf9e8;padding:.4rem;border-radius:10px;box-shadow:var(--shadow)}#map-toolbar button{padding:.3rem .65rem;font-size:1.25rem}#map-toolbar label{font-size:.85rem;color:var(--muted)}#save-state{position:absolute;z-index:3;bottom:1rem;left:1rem;background:#fffdf9dc;padding:.4rem .65rem;border-radius:8px;color:var(--muted);font-size:.8rem}.property{display:grid;gap:.75rem}.property h2{font-size:1.25rem;margin:0}.property .row{display:grid;grid-template-columns:1fr 1fr;gap:.6rem}.content-view{padding:clamp(1rem,4vw,3rem);max-width:1200px;margin:auto}.view-heading{display:flex;justify-content:space-between;gap:1rem;align-items:end;margin-bottom:1.5rem}.view-heading h1{font-size:2.3rem;letter-spacing:-.05em;margin:.1rem 0}.filters{display:flex;gap:.5rem}.plant-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:1rem}.plant-card{background:var(--card);border:1px solid var(--line);border-radius:14px;overflow:hidden;box-shadow:0 4px 14px #3344220a;text-align:left;color:var(--ink);padding:0}.plant-card .plant-art{height:110px;background:#dae5bd;display:grid;place-content:center;font-size:3.6rem}.plant-card .plant-copy{padding:1rem}.plant-card h2{font-size:1.1rem;margin:0}.plant-card p{margin:.3rem 0;color:var(--muted);font-size:.9rem}.journal{display:grid;gap:.75rem}.journal-item{background:var(--card);border-left:4px solid var(--moss);padding:1rem;border-radius:0 12px 12px 0}.journal-item h3{margin:0;font-size:1rem}.journal-item p{margin:.35rem 0 0;color:var(--muted)}dialog{border:0;border-radius:18px;padding:0;max-width:min(680px,94vw);width:100%;background:var(--card);color:var(--ink);box-shadow:0 24px 80px #1d2b1d55}dialog::backdrop{background:#23352377}.modal-body{padding:1.25rem;max-height:85vh;overflow:auto}.modal-header{display:flex;justify-content:space-between;align-items:start;gap:1rem}.modal-header h2{margin:0}.close{background:transparent;color:var(--ink);padding:0;font-size:1.6rem}.modal-actions{display:flex;gap:.5rem;justify-content:end;margin-top:1rem}.photo-strip{display:flex;gap:.5rem;overflow:auto}.photo-strip img{width:115px;height:90px;object-fit:cover;border-radius:8px}.hidden{display:none!important}#toast{position:fixed;left:50%;bottom:1.5rem;transform:translate(-50%,120px);background:#26382a;color:#fff;padding:.6rem .85rem;border-radius:9px;transition:.25s;z-index:10}#toast.visible{transform:translate(-50%,0)}
@media(max-width:760px){.topbar{height:58px;padding:0 .45rem}.brand{font-size:.9rem}.topbar nav{gap:0}.topbar nav button{font-size:.75rem;padding:.55rem .45rem}.topbar #edit-toggle{font-size:.75rem;padding:.45rem}.workspace{height:calc(100vh - 58px);display:block}.tool-panel{position:absolute;z-index:4;left:.5rem;top:66px;border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);width:auto;padding:.25rem}.tool-panel .panel-title,.tool-panel hr,.tool-panel .tool:nth-of-type(n+5){display:none}.tool-panel .tool{width:auto;padding:.5rem;font-size:0}.tool-panel .tool:before{font-size:1.1rem}.tool-panel .tool[data-tool="select"]:before{content:'⌁'}.tool-panel .tool[data-tool="add"]:before{content:'＋'}.tool-panel .tool[data-tool="measure"]:before{content:'⌖'}.tool-panel .tool[data-tool="boundary"]:before{content:'◇'}.inspector{position:absolute;z-index:5;left:0;right:0;bottom:0;max-height:48vh;border-radius:18px 18px 0 0;box-shadow:0 -8px 26px #33442222;display:none}.inspector.open{display:block}.view-heading{align-items:stretch;flex-direction:column}.filters{flex-direction:column}.content-view{padding:1rem}.plant-grid{grid-template-columns:1fr}.auth{margin:4vh auto;padding:1.25rem}}

/* Map workspace polish and screen-space rulers */
.map-stage{background:linear-gradient(135deg,#e4eacb,#d1dfbd)}
.map-object:hover .selection{display:block;stroke:#d08a4a}
.rotation-control{display:none}.map-object.selected.editing .rotation-control{display:block}.rotation-stem{stroke:#e27848;stroke-width:4;pointer-events:none}.rotation-handle{fill:#e27848;stroke:#fffdf7;stroke-width:4;cursor:grab}.rotation-handle:active{cursor:grabbing}
.resize-control{display:none}.map-object.selected.editing .resize-control{display:block}.resize-handle{fill:#fffdf7;stroke:#e27848;stroke-width:4}.resize-nw,.resize-se{cursor:nwse-resize}.resize-ne,.resize-sw{cursor:nesw-resize}
.path-slab,.path-preview-slab{stroke:#85867e;stroke-width:2;shape-rendering:geometricPrecision}.path-preview-slab{stroke:#776d60;stroke-dasharray:5 3}.map-object .path-slab{filter:drop-shadow(1px 2px 1px #4d4b4224)}
.placement-ghost{pointer-events:none;opacity:.7}.placement-box{fill:#e2784870;stroke:#a74d2d;stroke-width:4;stroke-dasharray:10 6}.placement-plant{fill:#78a85d99;stroke:#3f6c48;stroke-width:5;stroke-dasharray:10 6}.placement-label{fill:#7f3e29;font-size:24px;font-weight:800;paint-order:stroke;stroke:#fffdf7;stroke-width:5}
.distance-guide{stroke:#4f7f9c;stroke-width:3;stroke-dasharray:8 6;pointer-events:none}.distance-nearest{stroke:#e27848;stroke-width:4}.distance-label{fill:#2c5b78;font-size:20px;font-weight:800;paint-order:stroke;stroke:#fffdf7;stroke-width:5;stroke-linejoin:round;pointer-events:none}
.snap-guide{stroke:#8d4cb5;stroke-width:3;stroke-dasharray:12 6;pointer-events:none}
.form .row{display:grid;grid-template-columns:1fr 1fr;gap:.65rem}
#ruler-overlay{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:3}
.ruler-band{fill:#fffdf9e8;stroke:#d8d0bd;stroke-width:1}.ruler-tick{stroke:#617257;stroke-width:1}.ruler-label{fill:#53604e;font:600 11px ui-rounded,system-ui,sans-serif}.ruler-origin{fill:#3e6847;font:800 10px ui-rounded,system-ui,sans-serif}
#map-toolbar{z-index:4}#save-state,#map-hint{position:absolute;z-index:4;bottom:1rem;background:#fffdf9dc;padding:.4rem .65rem;border-radius:8px;color:var(--muted);font-size:.8rem;box-shadow:0 3px 10px #33442212}#save-state{left:1rem}#map-hint{right:1rem}
@media(max-width:760px){#map-hint{display:none}#save-state{bottom:.7rem;left:.7rem}.ruler-label{font-size:10px}.form .row{grid-template-columns:1fr}}
