:root{--brand:#e47b29;--brand-strong:#c9651a;--bg:#f7f4f0;--panel:#fff;--fg:#141414;--muted:#6a645d;--line:#e4ddd4;--ok:#2f7d4a;--bad:#b3372b;--warn-bg:#fbe7d5;--accent:var(--brand);--accent-fg:#111;--link:#a8520f;--support:#2f6fbf;--load:var(--brand);--view-bg:#ece7e1;--view-plate:#d9d3cb;--view-grid-major:#a39b91;--view-grid-minor:#c6bfb6;--view-box:#b05a16;--view-part:#8f8a84;--preserve:#2f7d4a;--obstacle:#b3372b;--view-preview:#d9884a;--view-final:#e47b29;color:var(--fg);background:var(--bg);font-family:system-ui,sans-serif;font-size:14px}@media (prefers-color-scheme:dark){:root{--bg:#0e0e0e;--panel:#151515;--fg:#f3f0eb;--muted:#a29c94;--line:#2a2826;--ok:#6fc28c;--bad:#ef7e71;--warn-bg:#3a2614;--accent-fg:#111;--link:#f09a55;--support:#5b9be6;--view-bg:#111;--view-plate:#1c1b1a;--view-grid-major:#3d3935;--view-grid-minor:#262422;--view-box:#6e4a2e;--view-part:#5d5954;--preserve:#6fc28c;--obstacle:#ef7e71;--view-preview:#c9722f;--view-final:#ee8a3c}}*{box-sizing:border-box}body{background:var(--bg);margin:0}.app{grid-template-columns:minmax(300px,360px) 1fr;height:100vh;display:grid}.panel{background:var(--panel);border-right:1px solid var(--line);padding:1.1rem 1.1rem 2rem;overflow-y:auto}.view{min-width:0;position:relative}.viewport{position:absolute;inset:0}.viewport canvas{touch-action:none;display:block}.view-hint{background:var(--panel);border:1px solid var(--line);pointer-events:none;border-radius:999px;padding:.35rem .9rem;position:absolute;bottom:1rem;left:50%;transform:translate(-50%)}h1{margin:0;font-size:1.25rem}h2{align-items:center;gap:.5rem;margin:0 0 .5rem;font-size:.98rem;display:flex}section{border-top:1px solid var(--line);padding:1rem 0}.panel-header{padding-bottom:.8rem}.step{background:var(--brand);width:1.35rem;height:1.35rem;color:var(--accent-fg);border-radius:50%;place-items:center;font-size:.75rem;font-weight:700;display:inline-grid}.brand{align-items:center;gap:.7rem;display:flex}.brand img{flex:none;width:44px;height:44px}.brand h1{letter-spacing:.02em}.brand .by{letter-spacing:.12em;color:var(--link);text-transform:uppercase;font-size:.72rem;font-weight:700;display:block}.sub,.hint,.meta{color:var(--muted);margin:.3rem 0 .6rem}.hint{font-size:.86rem}.meta{font-variant-numeric:tabular-nums}.ok{color:var(--ok);font-weight:600}.bad{color:var(--bad);font-weight:600}.muted{color:var(--muted)}.warn{background:var(--warn-bg);border-radius:6px;margin:.4rem 0;padding:.45rem .65rem}.field{flex-direction:column;gap:.2rem;min-width:0;margin:.35rem 0;display:flex}.field-label{color:var(--muted);font-size:.8rem}.field-input{align-items:center;gap:.3rem;display:flex}.field input[type=number],.field select{width:100%;min-width:0;font:inherit;border:1px solid var(--line);background:var(--bg);color:var(--fg);border-radius:5px;padding:.3rem .4rem}.field input[type=range]{width:100%;accent-color:var(--brand)}.unit{color:var(--muted);font-size:.8rem}.grid2{grid-template-columns:1fr 1fr;gap:0 .6rem;display:grid}.grid3{grid-template-columns:1fr 1fr 1fr;gap:0 .5rem;display:grid}.check{align-items:center;gap:.4rem;margin:.3rem 0;display:flex}.check input{accent-color:var(--brand)}button{font:inherit;border:1px solid var(--line);background:var(--bg);color:var(--fg);cursor:pointer;border-radius:6px;padding:.42rem .9rem}button:disabled{opacity:.5;cursor:default}button.primary{background:var(--accent);color:var(--accent-fg);border-color:var(--accent);font-weight:600}button.primary:hover:not(:disabled){background:var(--brand-strong);border-color:var(--brand-strong)}button:focus-visible,select:focus-visible,input:focus-visible{outline:2px solid var(--brand);outline-offset:1px}button.secondary{margin:.3rem 0}button.icon{margin-left:auto;padding:0 .45rem;line-height:1.4}.toolbar{flex-wrap:wrap;align-items:center;gap:.45rem;margin:.4rem 0;display:flex}.tool.active{background:var(--line);border-color:var(--muted);font-weight:600}.tool.support.active{background:var(--support);border-color:var(--support);color:#fff}.tool.load.active{background:var(--load);border-color:var(--load);color:#fff}.tool-options{border-left:3px solid var(--line);margin:.5rem 0;padding-left:.7rem}.items{margin:.6rem 0 0;padding:0;list-style:none}.items li{border-bottom:1px solid var(--line);align-items:center;gap:.5rem;padding:.3rem 0;display:flex}.swatch{border-radius:2px;flex:none;width:.7rem;height:.7rem}.swatch.support{background:var(--support)}.swatch.load{background:var(--load)}.swatch.preserve{background:var(--preserve)}.swatch.obstacle{background:var(--obstacle)}.stats{grid-template-columns:1fr 1fr;gap:.35rem .8rem;margin:.6rem 0;display:grid}.stats div{flex-direction:column;display:flex}.stats dt{color:var(--muted);font-size:.78rem}.stats dd{font-variant-numeric:tabular-nums;margin:0}.sparkline{width:100%;height:56px;display:block}.sparkline polyline{stroke:var(--fg);stroke-width:1.5px}.subsection{margin:.6rem 0 0}.subsection summary{cursor:pointer;color:var(--muted)}.system{border-top:1px solid var(--line);padding:.8rem 0}.system summary{cursor:pointer;font-weight:600}table{border-collapse:collapse;width:100%;margin:.5rem 0}th,td{text-align:left;border-bottom:1px solid var(--line);padding:.28rem .4rem;font-weight:400}footer{margin-top:1rem}.progress{margin:.5rem 0}.progress-track{background:var(--line);border-radius:3px;height:6px;overflow:hidden}.progress-bar{background:var(--brand);height:100%;transition:width .3s}.progress-track.busy{position:relative}.progress-track.busy:after{content:"";background:var(--brand);border-radius:3px;width:35%;animation:1.1s ease-in-out infinite slide;position:absolute;inset:0}@keyframes slide{0%{transform:translate(-40%)}to{transform:translate(300%)}}@media (prefers-reduced-motion:reduce){.progress-track.busy:after{opacity:.4;width:100%;animation:none}}.progress-label{color:var(--muted);font-variant-numeric:tabular-nums;margin-top:.3rem;display:block}.credit{border-top:1px solid var(--line);margin-top:1.5rem;padding-top:.8rem}.credit p{margin:.15rem 0}.credit a{color:var(--link)}@media (max-width:800px){.app{grid-template-rows:55vh auto;grid-template-columns:1fr;height:auto}.view{order:-1;height:55vh}.panel{border-right:none;overflow:visible}}
