:root{--bg:#f4f5f2;--panel:#fff;--line:#dcded6;--ink:#2b2f2a;--muted:#6c7268;--accent:#1f7a4d;--accent-soft:#dff0e6;--danger:#b3261e;--guide:#0b8fb3;color:var(--ink);font-family:system-ui,-apple-system,Segoe UI,sans-serif;font-size:13px}*{box-sizing:border-box}html,body,#root{background:var(--bg);height:100%;margin:0}.app{flex-direction:column;height:100%;display:flex}.topbar{background:var(--panel);border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:6px;padding:6px 10px;display:flex}.brand{margin-right:4px;font-weight:700}.planname{width:160px;font-weight:600}.sep{background:var(--line);width:1px;height:22px;margin:0 4px}.grow{flex:1}.body{flex:1;grid-template-columns:250px 1fr 370px;min-height:0;display:grid}.palette,.side{background:var(--panel);min-height:0;overflow-y:auto}.palette{border-right:1px solid var(--line);padding:4px 10px 20px}.side{border-left:1px solid var(--line);flex-direction:column;display:flex}.side-body{flex:1;overflow-y:auto}.center{min-width:0;min-height:0;position:relative}h3{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:14px 0 6px;font-size:11px}h4{margin:12px 0 4px;font-size:12px}.muted{color:var(--muted);font-size:12px}p.muted{margin:4px 0;line-height:1.4}code{background:#eef0ea;border-radius:3px;padding:0 4px}kbd{font:inherit;color:var(--muted);border:1px solid var(--line);border-radius:3px;margin-left:2px;padding:0 3px;font-size:10px}button{font:inherit}.btn,.kind,.tab,.icon{border:1px solid var(--line);cursor:pointer;color:var(--ink);background:#fff;border-radius:6px;padding:4px 8px}.btn:hover:not(:disabled),.kind:hover,.icon:hover{background:#f0f2ec}.btn:disabled{opacity:.4;cursor:default}.btn.active,.kind.active{background:var(--accent-soft);border-color:var(--accent);color:#0f4d2f;font-weight:600}.btn.danger{color:var(--danger);border-color:#e3b9b6}.icon{padding:1px 6px}.btn-grid{grid-template-columns:1fr 1fr;gap:6px;margin:6px 0;display:grid}.seg{gap:4px;margin:6px 0;display:flex}.seg .btn{flex:1}.cat-title{color:var(--muted);margin:8px 0 3px;font-size:11px}.kinds{grid-template-columns:1fr 1fr;gap:4px;display:grid}.kind{text-align:left;align-items:center;gap:6px;padding:4px 6px;font-size:12px;display:flex}.swatch{border:1px solid #0000004d;border-radius:3px;flex:none;width:12px;height:12px;display:inline-block}input,select{font:inherit;border:1px solid var(--line);color:var(--ink);background:#fff;border-radius:5px;min-width:0;padding:3px 6px}input:focus,select:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.row{align-items:center;gap:6px;margin:4px 0;display:flex}.row>span:first-child{color:var(--muted);flex:0 0 120px}.row>input:not(.numfield input),.row>select{flex:1}.group-row>span:first-child{flex:none}.group-row input{flex:1}.numfield{flex:1;align-items:center;gap:4px;display:inline-flex}.numfield input{text-align:right;width:100%}.unit{color:var(--muted);min-width:22px;font-size:11px}.objlist{margin:0;padding:0;list-style:none}.objlist li{cursor:pointer;border-radius:5px;justify-content:space-between;gap:8px;padding:3px 6px;display:flex}.objlist li:hover{background:#f0f2ec}.objlist li.active{background:var(--accent-soft)}.objlist em{color:var(--muted);font-style:normal}.tabs{border-bottom:1px solid var(--line);display:flex}.tab{background:#f7f8f5;border:none;border-radius:0;flex:1;padding:9px}.tab.active{box-shadow:inset 0 -2px var(--accent);background:#fff;font-weight:600}.props,.bom{padding:4px 12px 24px}.measures{background:#f6f8f3;border-radius:6px;margin:6px 0;padding:2px 8px}details{margin:8px 0}summary{cursor:pointer;font-size:12px;font-weight:600}table{border-collapse:collapse;width:100%}.edges td{padding:2px 4px}.edges td:first-child{width:20px;color:var(--muted)}.mini td{border-bottom:1px dotted var(--line);padding:2px 0}.num{text-align:right;white-space:nowrap}.help{padding-left:16px;line-height:1.5}.bom-head{gap:8px;margin:10px 0;display:flex}.bom-section{margin-bottom:18px}.bomtable th{text-align:left;color:var(--muted);border-bottom:1px solid var(--line);padding:3px 4px;font-size:11px}.bomtable th.num{text-align:right}.bomtable td{vertical-align:top;border-bottom:1px solid #eceee8;padding:4px}.bomtable .numfield input{width:62px}.note{color:var(--muted);font-size:11px}.subtotal,.grand{text-align:right;margin-top:6px}.grand{border-top:2px solid var(--line);padding-top:8px;font-size:15px}.canvas-wrap{position:absolute;inset:0;overflow:hidden}svg{touch-action:none;-webkit-user-select:none;user-select:none;display:block}.canvas-bg{fill:#fbfbf8}.grid-minor{stroke:#e3e5de;stroke-width:1px;fill:none}.grid-major{stroke:#c9ccc2;stroke-width:1px;fill:none}.origin line{stroke:#999}.el-text{fill:#1b1e1a;paint-order:stroke;stroke:#ffffffbf;stroke-width:3px;pointer-events:none;font-size:12px}.el-text.strong{font-weight:700}.dim-text{fill:#7a2e00;paint-order:stroke;stroke:#ffffffd9;stroke-width:3px;pointer-events:none;font-variant-numeric:tabular-nums;font-size:11px}.dim-text.strong{font-size:12px;font-weight:700}.dim line,.dim path{stroke:#9a3b00;stroke-width:1px;fill:none}.dim.sel line,.dim.sel path{stroke:var(--accent);stroke-width:2px}.guide{stroke:var(--guide);stroke-width:1px;stroke-dasharray:7 5;opacity:.85}.guide.sel{stroke-width:2.5px}.preview-g{opacity:.6;pointer-events:none}.preview{stroke:var(--accent);stroke-width:1.6px;stroke-dasharray:6 4;pointer-events:none}.edge-hl{stroke:var(--guide);stroke-width:4px;opacity:.5;pointer-events:none}.handle{fill:#fff;stroke:var(--accent);stroke-width:2px}.drawpt{fill:var(--accent)}.close-ring{fill:none;stroke:var(--accent);stroke-width:2px}.rightangle{fill:none;stroke:var(--accent);stroke-width:1.5px}.snapmark path,.snapmark rect,.snapmark circle{fill:none;stroke:#e0392d;stroke-width:1.8px}.snapmark.guide path{stroke:var(--guide)}.measure line{stroke:#7b1fa2;stroke-width:1.5px;stroke-dasharray:5 3}.measure circle{fill:#7b1fa2}.tip-bg{fill:#1d2b22;opacity:.92}.tip-text{fill:#fff;font-variant-numeric:tabular-nums;font-size:12px}.canvas-hint{color:#fff;pointer-events:none;text-align:center;background:#1d2b22e0;border-radius:14px;max-width:90%;padding:5px 12px;position:absolute;top:10px;left:50%;transform:translate(-50%)}.statusbar{border-top:1px solid var(--line);font-variant-numeric:tabular-nums;color:var(--muted);background:#ffffffeb;gap:18px;padding:4px 12px;display:flex;position:absolute;bottom:0;left:0;right:0}.body{grid-template-columns:270px 1fr 410px}.kind{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.bomtable{table-layout:auto;font-size:12px}.bomtable .numfield input{width:56px;padding:2px 4px}.bomtable td,.bomtable th{padding-left:3px;padding-right:3px}.plantlist{border:1px solid var(--line);border-radius:6px;max-height:230px;margin:6px 0 0;padding:0;list-style:none;overflow-y:auto}.plantlist .kind{border:none;border-radius:0;justify-content:space-between;width:100%}.tag{color:var(--muted);font-size:10px}.plantlist li.muted{padding:8px}.plants{padding:4px 12px 24px}.plant-group h3{color:var(--accent);margin-top:16px}.plant-row{border:1px solid var(--line);border-radius:6px;margin:6px 0;padding:4px 8px}.plant-row summary{justify-content:space-between;gap:8px;display:flex}.pcount{color:var(--muted);font-weight:400}.plant-times td{vertical-align:top;padding:2px 4px 2px 0}.plant-times td:first-child{color:var(--muted);white-space:nowrap;width:100px}.tips{margin:6px 0;line-height:1.45}.plantinfo{background:#f4f8f0;border:1px solid #d8e6d0;border-radius:6px;margin:8px 0;padding:6px 10px}.pi-head{margin-bottom:4px}.cal{grid-template-columns:repeat(12,1fr);gap:2px;margin:6px 0;display:grid}.cal-cell{flex-direction:column;align-items:stretch;gap:2px;display:flex}.cal-m{color:var(--muted);text-align:center;font-size:9px}.bar{background:#ebede7;border-radius:2px;height:5px;display:inline-block}.cal-cell .bar{display:block}.legend .bar,.plant-times .bar{vertical-align:middle;width:14px}.legend{align-items:center;gap:6px;margin:6px 0;font-size:12px;display:flex}.bar.p{background:#43a047}.bar.h{background:#fb8c00}.bar.b{background:#d81b60}.bymonth{margin-top:14px}.tab{padding:9px 4px;font-size:12px}.bom-section h3{margin:0 0 4px}.group-toggle{all:unset;cursor:pointer;text-transform:uppercase;letter-spacing:.06em;width:100%;color:var(--muted);align-items:baseline;gap:6px;padding:4px 0;font-size:11px;font-weight:700;display:flex}.group-toggle:hover{color:var(--ink)}.group-toggle:focus-visible{outline:2px solid var(--accent)}.chev{width:10px}.group-meta{text-transform:none;letter-spacing:0;margin-left:auto;font-weight:400}.chips{flex-wrap:wrap;gap:4px;margin:4px 0 8px;display:flex}.chip{border:1px solid var(--line);cursor:pointer;color:var(--muted);background:#fff;border-radius:12px;padding:1px 8px;font-size:11px}.chip:hover{color:var(--ink);background:#f0f2ec}.chip.active{background:var(--accent-soft);border-color:var(--accent);color:#0f4d2f;font-weight:600}.bomtable tr.clickable{cursor:pointer}.bomtable tr.clickable:hover td{background:#f6f8f3}.bomtable tr.sel td{background:var(--accent-soft)}.center-page{max-width:560px;margin:0 auto;padding:56px 16px}.center-page h1{margin:0 0 8px;font-size:26px}.new-plan{gap:8px;margin:18px 0 6px;display:flex}.new-plan input{flex:1;padding:8px 10px;font-size:14px}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}.btn.primary:hover:not(:disabled){background:#19663f}.error{color:var(--danger)}.recent{gap:6px;margin:6px 0;padding:0;list-style:none;display:grid}.recent li{background:var(--panel);border:1px solid var(--line);border-radius:8px;align-items:center;gap:6px;display:flex}.recent a{color:inherit;flex:1;justify-content:space-between;gap:12px;padding:10px 12px;text-decoration:none;display:flex}.recent a:hover{background:#f0f2ec;border-radius:8px}.recent .icon{margin-right:8px}.save-status{color:var(--muted);white-space:nowrap;font-size:12px}.save-status.saved{color:var(--accent)}.save-status.offline{color:var(--danger)}.modal-back{z-index:50;background:#00000059;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.modal{background:var(--panel);border-radius:10px;width:min(460px,100%);max-height:90vh;padding:14px 18px 18px;overflow-y:auto;box-shadow:0 10px 40px #00000040}.modal-head{justify-content:space-between;align-items:center;display:flex}.modal-head h2{margin:0;font-size:16px}.share-qr{justify-content:center;margin:10px 0;display:flex}.share-qr svg{width:220px;height:220px}.share-url{width:100%;padding:6px 8px;font-size:12px}.history{gap:6px;margin:8px 0 0;padding:0;list-style:none;display:grid}.history li{border:1px solid var(--line);border-radius:8px;justify-content:space-between;align-items:center;gap:10px;padding:8px 10px;display:flex}
