.app{display:grid;grid-template-columns:270px 1fr;height:100%}.sidebar{background:var(--bg-elev);border-right:1px solid var(--border);padding:1rem .75rem;display:flex;flex-direction:column;gap:1rem;overflow-y:auto}.brand{display:flex;align-items:center;gap:.6rem;padding:.4rem .5rem}.brand__mark{font-size:1.5rem}.brand strong,.brand .muted{display:block}.navgroup{display:flex;flex-direction:column;gap:.25rem}.navgroup__label{text-transform:uppercase;letter-spacing:.08em;font-size:.68rem;color:var(--muted);padding:0 .5rem;margin-bottom:.2rem}.navitem{display:flex;gap:.6rem;align-items:flex-start;padding:.55rem .5rem;border-radius:var(--radius);text-decoration:none;color:var(--text);border:1px solid transparent}.navitem:hover{background:var(--bg-elev-2)}.navitem--active{background:var(--bg-elev-2);border-color:var(--accent)}.navitem__icon{color:var(--accent);margin-top:2px}.navitem__text strong{display:block;font-size:.9rem}.navitem__text .muted{display:block;line-height:1.25}.sidebar__foot{margin-top:auto;padding:.5rem;border-top:1px solid var(--border);line-height:1.4}.content{overflow-y:auto;padding:1.5rem}.tool__header{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;margin-bottom:1.25rem;flex-wrap:wrap}.tool__header h1{margin:0 0 .2rem;font-size:1.4rem}.tool__header p{margin:0;color:var(--muted);max-width:60ch}.tool__actions{display:flex;gap:.5rem}.tool__body{display:grid;grid-template-columns:1fr 320px;gap:1.25rem;align-items:start}@media(max-width:960px){.tool__body{grid-template-columns:1fr}}.stage{display:flex;flex-direction:column;gap:.75rem}.stage__bar{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap}.canvas-wrap{border:1px solid var(--border);border-radius:var(--radius);overflow:auto;max-height:70vh;display:flex;align-items:center;justify-content:center;padding:1rem}.canvas-wrap canvas{max-width:100%;max-height:65vh;height:auto;image-rendering:auto}.checkerboard{background-image:linear-gradient(45deg,#2a2f38 25%,transparent 25%),linear-gradient(-45deg,#2a2f38 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#2a2f38 75%),linear-gradient(-45deg,transparent 75%,#2a2f38 75%);background-size:20px 20px;background-position:0 0,0 10px,10px -10px,-10px 0;background-color:#20252e}.zoomstage{position:relative;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;height:70vh;touch-action:none;-webkit-user-select:none;user-select:none}.zoomstage__surface{position:absolute;top:0;left:0;transform-origin:0 0;will-change:transform;line-height:0}.zoomstage__surface canvas{display:block;image-rendering:auto}.zoomstage__toolbar{position:absolute;right:.6rem;bottom:.6rem;display:flex;align-items:center;gap:.3rem;background:#0f1216d9;border:1px solid var(--border);border-radius:999px;padding:.25rem .5rem;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.zoomstage__toolbar button{padding:.1rem .55rem;border-radius:999px;line-height:1.4}.zoomstage__pct{font-variant-numeric:tabular-nums;color:var(--muted);min-width:3.2em;text-align:center;font-size:.8rem}.stage__hint{margin-left:auto}.trace-overlay{position:absolute;top:0;left:0}.trace-overlay svg{display:block;width:100%;height:100%}.viewtoggle{display:inline-flex;border:1px solid var(--border);border-radius:999px;overflow:hidden}.viewtoggle button{border:none;border-radius:0;padding:.3rem .8rem;background:var(--bg-elev);font-size:.82rem}.viewtoggle button.on{background:var(--accent);color:#06101f;font-weight:600}.chip{padding:.35rem .7rem;border-radius:999px;font-size:.85rem}.chip--on{border-color:var(--accent);color:var(--accent)}.swatch{width:22px;height:22px;border-radius:6px;border:1px solid var(--border);display:inline-block}.controls{display:flex;flex-direction:column;gap:1rem;position:sticky;top:0}.fieldset{border:1px solid var(--border);border-radius:var(--radius);padding:.85rem;margin:0;display:flex;flex-direction:column;gap:.85rem;background:var(--bg-elev)}.fieldset legend{padding:0 .4rem;font-weight:600;font-size:.85rem;color:var(--accent)}.control{display:flex;flex-direction:column;gap:.3rem}.control__head{display:flex;justify-content:space-between;align-items:center;font-size:.85rem}.control__value{color:var(--muted);font-variant-numeric:tabular-nums}.control__hint{font-size:.74rem;color:var(--muted);line-height:1.3}.control input[type=range]{width:100%;accent-color:var(--accent)}.control input[type=color]{width:100%;height:36px;padding:2px;background:var(--bg-elev-2);border:1px solid var(--border);border-radius:8px}.control select{width:100%;padding:.45rem;background:var(--bg-elev-2);color:var(--text);border:1px solid var(--border);border-radius:8px;font:inherit}.control--toggle .control__head{cursor:pointer}.control--toggle input{width:18px;height:18px;accent-color:var(--accent)}.row{display:flex;gap:.4rem;flex-wrap:wrap}.dropzone{border:2px dashed var(--border);border-radius:var(--radius);padding:3rem 1.5rem;display:flex;flex-direction:column;align-items:center;gap:.5rem;text-align:center;cursor:pointer;transition:border-color .12s,background .12s}.dropzone:hover,.dropzone--active{border-color:var(--accent);background:var(--bg-elev)}.dropzone__icon{font-size:2rem;color:var(--accent)}.dropzone--compact{padding:.6rem;font-size:.8rem;color:var(--muted)}:root{--bg: #0f1216;--bg-elev: #171b22;--bg-elev-2: #1e242d;--border: #2a313c;--text: #e7ecf3;--muted: #8a94a3;--accent: #4f9cf9;--accent-press: #3b82e0;--danger: #ff6b6b;--radius: 10px;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.45}.muted{color:var(--muted);font-size:.85em}button{font:inherit;cursor:pointer;border:1px solid var(--border);background:var(--bg-elev-2);color:var(--text);padding:.5rem .9rem;border-radius:var(--radius);transition:background .12s,border-color .12s}button:hover:not(:disabled){border-color:var(--accent)}button:disabled{opacity:.4;cursor:not-allowed}button.primary{background:var(--accent);border-color:var(--accent);color:#06101f;font-weight:600}button.primary:hover:not(:disabled){background:var(--accent-press)}button.ghost{background:transparent;padding:.35rem .6rem}code{font-family:ui-monospace,SF Mono,Menlo,monospace;background:var(--bg-elev);padding:.1rem .4rem;border-radius:6px}.error{color:var(--danger)}
