:root{color-scheme:light;--bg:#EFF2EA;--surface:#FFFFFF;--surface-2:#E7EBE0;--canvas-bg:#FBFCF9;--ink:#17201B;--ink-2:#4B584F;--ink-3:#7C8980;--rule:#D6DDD1;--rule-strong:#B7C1AE;--accent:#1DA13A;--accent-ink:#0F6E27;--accent-soft:#E1F1E3;--btn-fg:#FFFFFF;--lock:#3D3F94;--lock-soft:#E6E7F4;--danger:#B3432B;--danger-soft:#F5E5DF;--grid:#DFE5D8;--grid-major:#C8D2BF;--zone-rasen:#4E9E4A;--zone-beet:#C67A34;--zone-hecke:#2B6B3D;--zone-kuebel:#2E8E86;--zone-none:#8A9188;--shadow:0 1px 2px rgba(23,32,27,.06), 0 10px 28px -16px rgba(23,32,27,.3);--glass:rgba(255,255,255,.82);--glass-tile:rgba(231,235,224,.72);--water:#2E6FBF;--water-soft:#E2ECF8;--tip-bg:#2A3327;--tip-fg:#F2F5EE}:root[data-theme=dark]{color-scheme:dark;--bg:#12160F;--surface:#1A2117;--surface-2:#212B1D;--canvas-bg:#0F1410;--ink:#E7ECE3;--ink-2:#AAB6A4;--ink-3:#7C8980;--rule:#2B3525;--rule-strong:#3C4A34;--accent:#49C468;--accent-ink:#6BDD87;--accent-soft:#173321;--btn-fg:#0E1A10;--lock:#9498E8;--lock-soft:#1E2040;--danger:#E08A6C;--danger-soft:#3A2119;--grid:#1E2619;--grid-major:#2C3826;--zone-rasen:#5FB65B;--zone-beet:#D68F49;--zone-hecke:#4B9660;--zone-kuebel:#45A79E;--zone-none:#7C8980;--shadow:0 1px 2px rgba(0,0,0,.4), 0 10px 28px -16px rgba(0,0,0,.7);--glass:rgba(26,33,23,.78);--glass-tile:rgba(33,43,29,.72);--water:#6BA6E8;--water-soft:#16283C;--tip-bg:#E7ECE3;--tip-fg:#17201B}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--ink);font-family:Archivo,Helvetica Neue,Arial,sans-serif;-webkit-font-smoothing:antialiased;overflow:hidden;overscroll-behavior:none}button{font-family:inherit}button:focus-visible,input:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.mono{font-family:IBM Plex Mono,ui-monospace,Menlo,monospace;font-variant-numeric:tabular-nums}.app{display:flex;flex-direction:column;height:100vh}.topbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:9px 14px;border-bottom:1px solid var(--rule);background:var(--surface);flex:0 0 auto}.brand{font-weight:700;font-size:15px;letter-spacing:-.01em;margin-right:2px}.brand-by{font-weight:500;color:var(--ink-3)}.badge{font-family:IBM Plex Mono,monospace;font-size:10px;font-weight:500;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-3);background:var(--surface-2);border:1px solid var(--rule);border-radius:20px;padding:2px 9px}.tb-sep{width:1px;align-self:stretch;background:var(--rule);margin:0 3px}.tb-spacer{flex:1 1 auto}.tb{display:flex;align-items:center;gap:6px;padding:6px 11px;border:1px solid var(--rule-strong);border-radius:6px;background:var(--surface);color:var(--ink-2);font-size:12.5px;font-weight:600;cursor:pointer;white-space:nowrap}.tb:hover:not(:disabled){background:var(--surface-2);color:var(--ink)}.tb:disabled{opacity:.35;cursor:not-allowed}.tb.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-ink)}.tb.icon{padding:6px 9px;font-family:IBM Plex Mono,monospace;font-size:13px}.zoomlabel{font-family:IBM Plex Mono,monospace;font-size:11.5px;color:var(--ink-3);min-width:66px;text-align:center;font-variant-numeric:tabular-nums}.workspace{flex:1 1 auto;display:flex;min-height:0}.canvas-wrap{flex:1 1 auto;position:relative;min-width:0;background:var(--canvas-bg);overflow:hidden}#canvas{display:block;width:100%;height:100%;touch-action:none;cursor:crosshair}#canvas.panning{cursor:grabbing}#canvas.editing{cursor:default}#canvas.editing .shape-fill,#canvas.editing .shape-stroke,#canvas.editing .outline-fill,#canvas.editing .outline-stroke{cursor:move}.side-toggle{position:absolute;top:16px;right:16px;z-index:8;display:flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:10px;border:1px solid var(--rule-strong);background:var(--glass);backdrop-filter:blur(14px) saturate(160%);-webkit-backdrop-filter:blur(14px) saturate(160%);color:var(--ink-2);cursor:pointer;box-shadow:var(--shadow)}.side-toggle:hover{color:var(--ink);border-color:var(--accent)}.side-toggle .ic{font-size:16px;line-height:1}.tip{position:relative}.tip:after,.tip:before{position:absolute;opacity:0;pointer-events:none;z-index:30;transition:opacity .14s ease,transform .14s ease}.tip:after{content:attr(data-tip);left:calc(100% + 12px);top:50%;transform:translateY(-50%) translate(-5px);background:var(--tip-bg);color:var(--tip-fg);font-size:12px;font-weight:500;line-height:1.35;letter-spacing:.005em;padding:7px 11px;border-radius:8px;max-width:250px;width:max-content;box-shadow:0 6px 22px -8px #00000073}.tip:before{content:"";left:calc(100% + 5px);top:50%;transform:translateY(-50%) translate(-5px);border:6px solid transparent;border-right-color:var(--tip-bg)}.tip:hover:after,.tip:hover:before,.tip:focus-visible:after,.tip:focus-visible:before{opacity:1;transform:translateY(-50%) translate(0)}.tip.below:after{left:50%;top:calc(100% + 12px);transform:translate(-50%) translateY(-5px);white-space:normal}.tip.below:before{left:50%;top:calc(100% + 6px);transform:translate(-50%) translateY(-5px);border-right-color:transparent;border-bottom-color:var(--tip-bg)}.tip.below:hover:after,.tip.below:focus-visible:after{transform:translate(-50%) translateY(0)}.tip.below:hover:before,.tip.below:focus-visible:before{transform:translate(-50%) translateY(0)}@media (prefers-reduced-motion: reduce){.tip:after,.tip:before{transition:opacity .14s ease}}.rail{position:absolute;top:50%;left:16px;transform:translateY(-50%);z-index:7;width:56px;display:flex;flex-direction:column;gap:5px;background:var(--glass);backdrop-filter:blur(14px) saturate(160%);-webkit-backdrop-filter:blur(14px) saturate(160%);border:1px solid var(--rule-strong);border-radius:16px;padding:6px;box-shadow:var(--shadow)}.tool{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:11px;border:1px solid transparent;background:var(--glass-tile);color:var(--ink-2);cursor:pointer;transition:transform .13s ease,background .13s ease,color .13s ease,border-color .13s ease}.tool:hover{background:var(--surface-2);color:var(--ink);transform:scale(1.1)}.tool:active{transform:scale(1.03)}.tool.active{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-ink)}.tool.active:hover{transform:scale(1.1)}@media (prefers-reduced-motion: reduce){.tool:hover,.tool:active,.tool.active:hover{transform:none}}.stepper{position:absolute;top:14px;left:50%;transform:translate(-50%);z-index:8;display:flex;flex-direction:column;align-items:center;gap:7px;background:var(--glass);backdrop-filter:blur(14px) saturate(160%);-webkit-backdrop-filter:blur(14px) saturate(160%);border:1px solid var(--rule-strong);border-radius:16px;padding:10px 12px;box-shadow:var(--shadow);max-width:calc(100% - 140px)}.step-caption{font-size:11.5px;color:var(--ink-3);letter-spacing:.01em}.step-caption b{color:var(--ink);font-weight:700}.step-row{display:flex;align-items:center;gap:10px}.step-track,.step-cell{display:flex;align-items:center}.step-sep{width:14px;height:1px;background:var(--rule-strong);flex:0 0 auto}.step{display:flex;flex-direction:column;align-items:center;gap:3px;padding:5px 8px;border-radius:10px;border:1px solid transparent;background:transparent;color:var(--ink-3);cursor:pointer;transition:background .13s ease,color .13s ease,border-color .13s ease}.step-ic{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:50%;border:1.5px solid currentColor}.step-lb{font-size:10px;font-weight:600;letter-spacing:.01em}.step:hover{color:var(--ink-2);background:var(--surface-2)}.step.done{color:var(--accent)}.step.current{color:var(--accent-ink);background:var(--accent-soft);border-color:var(--accent)}.step-nav{padding:7px 14px;border-radius:9px;border:1px solid var(--rule-strong);background:var(--surface);color:var(--ink-2);font-size:12.5px;font-weight:600;cursor:pointer;white-space:nowrap}.step-nav:hover:not(:disabled){background:var(--surface-2);color:var(--ink)}.step-nav:disabled{opacity:.35;cursor:not-allowed}.step-nav.primary{background:var(--accent);border-color:var(--accent);color:var(--btn-fg)}.step-nav.primary:hover:not(:disabled){filter:brightness(1.07);background:var(--accent);color:var(--btn-fg)}@media (max-width: 900px){.step-lb{display:none}.stepper{max-width:calc(100% - 24px)}}.hud{position:absolute;left:12px;bottom:12px;display:flex;gap:8px;align-items:stretch;flex-wrap:wrap;max-width:calc(100% - 24px);pointer-events:none}.hud-card{background:var(--surface);border:1px solid var(--rule);border-radius:7px;padding:7px 12px;box-shadow:var(--shadow);font-size:12.5px;color:var(--ink-2);display:flex;align-items:center;gap:9px}.hud-card .k{font-family:IBM Plex Mono,monospace;font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3)}.hud-card .v{font-family:IBM Plex Mono,monospace;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums}.hud-hint{max-width:420px;line-height:1.4;display:block}.float{position:absolute;background:var(--surface);border:1px solid var(--rule-strong);border-radius:9px;box-shadow:var(--shadow);padding:11px 13px;display:flex;align-items:center;gap:9px;flex-wrap:wrap;z-index:5}.float.center{left:50%;bottom:64px;transform:translate(-50%);max-width:calc(100% - 28px);position:absolute}.float .fl{font-size:12.5px;color:var(--ink-2);white-space:nowrap}.float input{width:86px;padding:6px 8px;border:1px solid var(--rule-strong);border-radius:5px;background:var(--bg);color:var(--ink);font-family:IBM Plex Mono,monospace;font-size:14px;font-variant-numeric:tabular-nums}.float .unit{font-size:12.5px;color:var(--ink-3)}.btn{padding:6px 13px;border-radius:5px;border:1px solid var(--accent);background:var(--accent);color:var(--btn-fg);font-weight:600;font-size:12.5px;cursor:pointer}.btn:hover{filter:brightness(1.07)}.btn.ghost{background:var(--surface);color:var(--ink-2);border-color:var(--rule-strong)}.btn.ghost:hover{color:var(--ink);background:var(--surface-2)}.btn.warn{background:var(--surface);color:var(--danger);border-color:var(--danger)}.btn.warn:hover{background:var(--danger-soft)}.chip{padding:6px 12px;border-radius:20px;border:1px solid var(--rule-strong);background:var(--surface);color:var(--ink);font-size:12.5px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:6px}.chip:hover{border-color:var(--accent)}.chip .sw{width:10px;height:10px;border-radius:3px}.panel{position:absolute;top:108px;right:16px;bottom:16px;z-index:7;width:252px;max-width:calc(100% - 32px);max-height:calc(100% - 124px);background:var(--glass);backdrop-filter:blur(14px) saturate(160%);-webkit-backdrop-filter:blur(14px) saturate(160%);border:1px solid var(--rule-strong);border-radius:14px;box-shadow:var(--shadow);padding:16px 14px;overflow-y:auto;transition:transform .2s ease,opacity .2s ease}.panel.collapsed{transform:translate(calc(100% + 24px));opacity:0;pointer-events:none}.panel h2{font-size:10.5px;font-weight:700;letter-spacing:.11em;text-transform:uppercase;color:var(--ink-3);margin:20px 0 9px}.panel h2:first-child{margin-top:0}.zlist{display:flex;flex-direction:column;gap:5px}.zlist .empty{font-size:12.5px;color:var(--ink-3);margin:0;line-height:1.5}.zrow{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:6px;background:var(--surface-2);font-size:12.5px;cursor:pointer;border:1px solid transparent}.zrow:hover{border-color:var(--rule-strong)}.zrow.sel{border-color:var(--accent);background:var(--accent-soft)}.zrow .sw{width:10px;height:10px;border-radius:3px;flex:0 0 auto}.zrow .zt{flex:1 1 auto;font-weight:600}.zrow .za{font-family:IBM Plex Mono,monospace;color:var(--ink-2);font-variant-numeric:tabular-nums}.zrow .zx{border:none;background:none;color:var(--ink-3);cursor:pointer;font-size:15px;line-height:1;padding:1px 3px;border-radius:4px}.zrow .zx:hover{color:var(--danger);background:var(--danger-soft)}.totals{border-top:1px solid var(--rule);margin-top:10px;padding-top:9px}.trow{display:flex;justify-content:space-between;font-size:12.5px;padding:3px 0}.trow span:last-child{font-family:IBM Plex Mono,monospace;font-weight:600;font-variant-numeric:tabular-nums}.trow.muted{color:var(--ink-3)}.trow.muted span:last-child{font-weight:500}.legend{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}.legend li{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--ink-2)}.legend .sw{width:11px;height:11px;border-radius:3px;flex:0 0 auto}.step-brief{background:var(--accent-soft);border:1px solid var(--accent);border-radius:10px;padding:10px 11px;margin-bottom:4px}.step-brief-no{display:block;font-family:IBM Plex Mono,monospace;font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--accent-ink);opacity:.8;margin-bottom:2px}.step-brief b{font-size:13.5px;color:var(--ink);display:block;margin-bottom:4px}.step-brief p{margin:0;font-size:11.5px;line-height:1.5;color:var(--ink-2)}.soon{background:var(--surface-2);border:1px dashed var(--rule-strong);border-radius:10px;padding:11px;margin-top:14px}.soon b{font-size:12.5px;color:var(--ink-2);display:block;margin-bottom:4px}.soon p{margin:0;font-size:11.5px;line-height:1.5;color:var(--ink-3)}.wrow{background:var(--surface-2);border:1px solid transparent;border-radius:8px;padding:8px;display:flex;flex-direction:column;gap:7px}.wrow:hover{border-color:var(--rule-strong)}.wrow-top{display:flex;align-items:center;gap:7px}.wrow-top .sw{width:10px;height:10px;border-radius:3px;flex:0 0 auto}.wsel{flex:1 1 auto;min-width:0;font-family:inherit;font-size:12px;font-weight:600;color:var(--ink);background:var(--surface);border:1px solid var(--rule-strong);border-radius:5px;padding:4px 5px;cursor:pointer}.wrow-fields{display:flex;gap:6px}.wfield{flex:1 1 0;display:flex;flex-direction:column;gap:2px;min-width:0}.wfield span{font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3)}.wfield input{width:100%;padding:4px 6px;border:1px solid var(--rule-strong);border-radius:5px;background:var(--surface);color:var(--ink);font-family:IBM Plex Mono,monospace;font-size:13px;font-variant-numeric:tabular-nums}.wfield em{font-style:normal;font-size:9.5px;color:var(--ink-3);text-align:right}.tips{font-size:12px;color:var(--ink-3);line-height:1.55;margin:0}.tips b{color:var(--ink-2);font-weight:600}.tips kbd{font-family:IBM Plex Mono,monospace;font-size:10.5px;background:var(--surface-2);border:1px solid var(--rule);border-radius:3px;padding:1px 4px;color:var(--ink-2)}.gridline{fill:none;stroke:var(--grid);stroke-width:1}.gridline.major{stroke:var(--grid-major)}.shape-fill{fill-opacity:.38}.shape-stroke{fill:none;stroke-width:2.2;stroke-linejoin:round}.outline-fill{fill:var(--ink);fill-opacity:.04}.outline-stroke{fill:none;stroke:var(--ink);stroke-width:2.6;stroke-linejoin:round}.draft-stroke{fill:none;stroke:var(--accent);stroke-width:2.4;stroke-dasharray:6 5;stroke-linejoin:round}.rubber{stroke:var(--accent);stroke-width:1.6;stroke-dasharray:4 4}.vtx{fill:var(--surface);stroke:var(--ink);stroke-width:2}.vtx.snap{fill:var(--accent-soft);stroke:var(--accent);stroke-width:2.6}.vtx.sel{fill:var(--accent);stroke:var(--surface);stroke-width:2.5}.mid{fill:var(--accent);fill-opacity:.35;stroke:var(--accent);stroke-width:1.4;stroke-opacity:.6}.dimtext{font-family:IBM Plex Mono,monospace;font-size:11px;font-weight:500;fill:var(--ink-2)}.dimtext.active{fill:var(--accent-ink);font-weight:600}.dimtext.locked,.dimtext.measure{fill:var(--lock);font-weight:600}.dimbg{fill:var(--surface);fill-opacity:.88;rx:3}.dimhit{fill:transparent;cursor:pointer}.areatext{font-family:IBM Plex Mono,monospace;font-size:12px;font-weight:600;fill:var(--ink)}.areasub{font-family:IBM Plex Mono,monospace;font-size:10px;fill:var(--ink-3)}.lockglyph{fill:none;stroke:var(--lock);stroke-width:1.3}.guide{stroke:var(--accent);stroke-width:1;stroke-dasharray:3 4;stroke-opacity:.6}.measure-line{stroke:var(--lock);stroke-width:2;stroke-dasharray:2 6;stroke-linecap:round}.measure-line.final{stroke-dasharray:7 4}.obst circle{stroke:var(--surface);stroke-width:2}.obst text{fill:#fff;font-family:IBM Plex Mono,monospace;font-size:10px;font-weight:700}.obst{cursor:pointer}.water{pointer-events:none}.water-dot{fill:var(--water);stroke:var(--surface);stroke-width:2}.water-glyph{fill:none;stroke:#fff;stroke-width:2.2;stroke-linejoin:round}.watertext{font-family:IBM Plex Mono,monospace;font-size:10.5px;font-weight:600;fill:var(--water)}.water.pending .water-dot{opacity:.55}#canvas.editing .water{pointer-events:auto;cursor:move}.obst.pending{cursor:default;pointer-events:none}.obst.pending circle{fill:var(--ink-3);opacity:.6}.pending-fill{fill:var(--accent);fill-opacity:.16}.pending-stroke{fill:none;stroke:var(--accent);stroke-width:2.2;stroke-dasharray:6 4;stroke-linejoin:round}@media (prefers-reduced-motion: reduce){*{transition:none!important}}
