:root{color-scheme:light;--void: #0f0f0f;--surface: #111;--surface-2: #181818;--text: #c8c8c8;--dim: #777;--ghost: #333;--accent: #fff;--hot: #e03030;--wire: rgba(255,255,255,.06);--mono: "SF Mono", "Cascadia Code", "Fira Code", Menlo, monospace;font-family:var(--mono);--lp1: 15vh;--rp1: 23vh;--rp3: 80vh;--split-pos: 50%}:root[data-theme=light]{color-scheme:light;--void: #f0ede8;--surface: #e8e4dd;--surface-2: #ddd8d0;--text: #222;--dim: #666;--ghost: #aaa;--accent: #111;--hot: #a01010;--wire: rgba(0,0,0,.06)}*{box-sizing:border-box;margin:0}body{margin:0;background:var(--void);color:var(--text);overflow:hidden;height:100vh;width:100vw;font-size:11px;line-height:1.5;-webkit-font-smoothing:antialiased}::selection{background:var(--accent);color:var(--void)}.app{position:relative;width:100vw;height:100vh}.stage{position:absolute;top:0;right:0;bottom:0;left:0}#viewport{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.flat-view{position:absolute;top:0;right:0;bottom:0;left:0;z-index:5;display:none}.flat-view.visible{display:block}.flat-view-print-svg{display:none}body.split-mode #viewport{right:auto;width:var(--split-pos);padding-left:calc(clamp(120px,13vw,150px) + 1rem)}body.split-mode .flat-view{padding-right:calc(clamp(120px,13vw,150px) + .75rem)}body.split-mode .flat-view{display:block;position:absolute;inset:unset;left:var(--split-pos);right:0;top:0;bottom:0;width:auto;height:100%;z-index:5;visibility:hidden;pointer-events:none}body.split-mode .flat-view.visible{visibility:visible;pointer-events:auto}.split-divider{display:none;position:absolute;top:10vh;bottom:10vh;width:8px;left:calc(var(--split-pos) - 4px);cursor:col-resize;z-index:50}.split-divider:after{content:"";position:absolute;top:0;bottom:0;left:50%;width:.5px;background:var(--dim);transition:background .2s}.split-divider:hover:after{background:var(--dim)}.split-divider.dragging:after{background:var(--dim)}body.split-mode .flat-view.visible~.split-divider{display:block}.topbar{position:fixed;top:0;left:0;right:0;z-index:100;display:flex;align-items:center;gap:12px;padding:1rem 1.4rem;background:transparent;pointer-events:none}.topbar>*{pointer-events:auto}.brand{display:flex;align-items:baseline;gap:0;white-space:nowrap}.title{font-size:11px;letter-spacing:.2em;text-transform:uppercase;font-weight:400;color:var(--dim);cursor:pointer}.title:hover{color:var(--text)}.topbar .controls{display:flex;align-items:center;gap:8px;margin-left:auto}.topbar-sep{width:1px;height:12px;background:var(--wire);flex-shrink:0}.controls button,.controls .file{background:transparent;border:none;color:var(--dim);padding:4px 8px;border-radius:0;cursor:pointer;font-size:10px;font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;display:inline-flex;align-items:center;justify-content:center;transition:color .1s;white-space:nowrap}.controls button:hover,.controls .file:hover{color:var(--accent)}.controls input[type=file]{display:none}#load-btn.landing-focus{color:var(--text)}.params-panel{position:fixed;top:50%;left:1rem;z-index:90;width:calc(clamp(120px,13vw,150px) / var(--panel-scale, 1));background:transparent;transform-origin:left center;transform:translateY(-50%) scale(var(--panel-scale, 1))}#params-form{display:block}.param-panel{padding:calc(6px * var(--panel-scale, 1)) calc(6px * var(--panel-scale, 1)) calc(10px * var(--panel-scale, 1));display:flex;flex-direction:column;gap:calc(4px * var(--panel-scale, 1))}.param-panel+.param-panel{margin-top:calc(1rem * var(--panel-scale, 1));padding-top:calc(.75rem * var(--panel-scale, 1));border-top:1px solid var(--wire)}.param-panel-title{font-size:calc(9px * var(--panel-font-inv, 1));text-transform:uppercase;letter-spacing:.25em;color:var(--dim);font-weight:400;margin-bottom:calc(6px * var(--panel-scale, 1))}.sidebar::-webkit-scrollbar{width:0}.panel-section{display:flex;flex-direction:column;gap:6px;margin-top:1.5rem;padding-top:.5rem}.panel-section:first-child{padding-top:0;margin-top:0}.panel-section+.panel-section{border-top:1px solid var(--wire)}.panel-title{font-size:calc(9px * var(--panel-font-inv, 1));text-transform:uppercase;letter-spacing:.25em;color:var(--dim);font-weight:400;margin-bottom:6px}.panel-body{font-size:calc(10px * var(--panel-font-inv, 1));color:var(--dim);line-height:1.6;white-space:pre-line}.log-collapsible{margin-top:.5rem;border:1px solid var(--wire)}.log-summary{list-style:none;cursor:pointer;padding:6px 8px;font-size:8px;text-transform:uppercase;letter-spacing:.15em;color:var(--dim);-webkit-user-select:none;user-select:none}.log-summary::-webkit-details-marker{display:none}.log-summary:before{content:"▸";display:inline-block;margin-right:6px;transition:transform .15s ease}.log-collapsible[open] .log-summary:before{transform:rotate(90deg)}.panel-body.log{background:transparent;border:none;border-top:1px solid var(--wire);border-radius:0;padding:8px;max-height:120px;overflow-y:auto;font-size:9px;font-family:var(--mono);line-height:1.8;color:var(--dim);margin-top:0}.panel-body.log::-webkit-scrollbar{width:0}.log-collapsible:not([open]) .panel-body.log{display:none}.panel-body.log:empty:after{content:"_";color:var(--ghost);animation:blink 1s step-end infinite}@keyframes blink{50%{opacity:0}}.param-group{display:grid;gap:8px}.param-group+.param-group{margin-top:10px;padding-top:10px;border-top:1px solid var(--wire)}.param-panel .param-group+.param-group{margin-top:0;padding-top:0;border-top:none}.param-group-title{font-size:8px;text-transform:uppercase;letter-spacing:.2em;color:var(--dim);font-weight:400}.params{display:grid;gap:8px}.params label{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:calc(10px * var(--panel-font-inv, 1));color:var(--dim)}.params label.slider{flex-direction:column;align-items:stretch;gap:3px}.params .param-name{font-size:calc(9px * var(--panel-font-inv, 1));color:var(--dim);letter-spacing:.06em}.slider-row{display:grid;grid-template-columns:1fr auto;align-items:center;gap:8px}.params input[type=number]{width:60px;background:transparent;border:none;border-bottom:1px solid var(--ghost);color:var(--text);padding:2px 0;border-radius:0;font-size:calc(10px * var(--panel-font-inv, 1));font-family:var(--mono);font-variant-numeric:tabular-nums;text-align:right}.params input[type=number]:focus{outline:none;border-bottom-color:var(--accent)}.params input[type=range]{width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:1px;background:var(--ghost);border-radius:0;outline:none}.params input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:max(6px,calc(4px * var(--panel-font-inv, 1)));height:max(6px,calc(4px * var(--panel-font-inv, 1)));background:var(--text);border:none;border-radius:0;cursor:grab;transition:background .1s}.params input[type=range]::-webkit-slider-thumb:hover{background:var(--accent)}.params input[type=range]::-webkit-slider-thumb:active{cursor:grabbing}.params input[type=range]::-moz-range-thumb{width:max(6px,calc(4px * var(--panel-font-inv, 1)));height:max(6px,calc(4px * var(--panel-font-inv, 1)));background:var(--text);border:none;border-radius:0}.slider-value{min-width:36px;text-align:right;font-variant-numeric:tabular-nums;color:var(--dim);font-family:var(--mono);font-size:calc(9px * var(--panel-font-inv, 1))}.params label.checkbox{justify-content:flex-start;gap:8px;cursor:pointer}.params .checkbox-stack{display:grid;gap:4px}.params .checkbox-stack-title{font-size:calc(10px * var(--panel-font-inv, 1));color:var(--dim);text-transform:lowercase;letter-spacing:.02em}.params .checkbox-row{display:flex;align-items:center;gap:14px;flex-wrap:nowrap}.params .checkbox-row label.checkbox{flex:0 0 auto}.params .checkbox-row label.checkbox.compact{gap:6px}.params .checkbox-row label.checkbox span{white-space:nowrap}.params label.checkbox input[type=checkbox]{-moz-appearance:none;appearance:none;-webkit-appearance:none;width:24px;height:12px;background:var(--ghost);border-radius:6px;position:relative;cursor:pointer;flex-shrink:0;transition:background .15s}.params label.checkbox input[type=checkbox]:after{content:"";position:absolute;top:2px;left:2px;width:8px;height:8px;background:var(--void);border-radius:50%;transition:transform .15s}.params label.checkbox input[type=checkbox]:checked{background:var(--text)}.params label.checkbox input[type=checkbox]:checked:after{transform:translate(12px)}#fix-boundary,#fix-naked-endpoints{width:max(6px,calc(4px * var(--panel-font-inv, 1)));height:max(6px,calc(4px * var(--panel-font-inv, 1)));background:transparent;border:1px solid var(--ghost);border-radius:0;transition:background .1s,border-color .1s}#fix-boundary:after,#fix-naked-endpoints:after{display:none}#fix-boundary:checked,#fix-naked-endpoints:checked{background:var(--text);border-color:var(--text)}.slider[data-hint]{position:relative}.slider[data-hint]:hover:after{content:attr(data-hint);position:absolute;left:calc(100% + 10px);bottom:0;white-space:nowrap;font-size:calc(10px * var(--panel-font-inv, 1));color:var(--dim);letter-spacing:.04em;pointer-events:none;z-index:200}.layer-row[data-hint]{position:relative}.layer-row[data-hint]:hover:after{content:attr(data-hint);position:absolute;right:calc(100% + 10px);top:0;white-space:nowrap;font-size:calc(10px * var(--panel-font-inv, 1));color:var(--dim);letter-spacing:.04em;pointer-events:none;z-index:200}.actions{display:flex;flex-direction:row;gap:4px;margin-top:6px}.actions button{flex:5;padding:8px 0;font-size:calc(10px * var(--panel-font-inv, 1));font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;background:transparent;border:1px solid var(--dim);border-radius:5px;color:var(--text);cursor:pointer;transition:color .1s,border-color .1s,background .1s}.actions button:hover{background:color-mix(in srgb,var(--accent) 8%,transparent)}#run-optimizer{background:#fff;color:#111;border-color:#111}#run-optimizer:hover{background:#ddd;border-color:#111;color:#111}#reset-geometry{flex:1;font-size:18px;letter-spacing:0;border-color:var(--ghost)}.actions button:disabled{opacity:.25;cursor:not-allowed;pointer-events:none}.theme-btn{margin-left:auto;background:transparent;border:none;color:var(--dim);font-size:18px;font-family:var(--mono);cursor:pointer;padding:.5rem .33rem;line-height:1;transition:color .1s}.theme-btn:hover{color:var(--accent)}.status{position:fixed;bottom:0;left:0;right:0;z-index:100;display:flex;align-items:center;gap:8px;padding:6px 16px;background:transparent;font-size:9px;font-family:var(--mono);letter-spacing:.08em;color:var(--dim);white-space:nowrap}.status-indicator{width:5px;height:5px;border-radius:0;background:var(--ghost);flex-shrink:0;transition:background .3s}.status[data-state=running] .status-indicator{background:var(--accent);animation:pulse 1s step-end infinite}.status[data-state=running]{color:var(--text);font-size:10px}.status[data-state=error] .status-indicator{background:var(--hot)}.status[data-state=error]{color:var(--hot)}.status-progress{position:absolute;bottom:0;left:0;height:4px;background:var(--text);transition:opacity .3s;will-change:width,opacity}@keyframes pulse{50%{opacity:0}}.viz-toggle{display:flex;align-items:center;gap:2px;background:transparent;border:.5px solid color-mix(in srgb,var(--ghost) 35%,transparent);border-radius:10px;padding:3px}.viz-group{display:flex;align-items:center;border-radius:7px}.disabled-no-graph{opacity:.25;pointer-events:none}.viz-btn{background:transparent;border:none;color:var(--dim);padding:4px 10px;font-size:9px;font-family:var(--mono);letter-spacing:.04em;cursor:pointer;transition:color .1s,background .15s;white-space:nowrap;text-transform:uppercase;border-radius:999px}.viz-btn:hover{color:var(--text)}.viz-btn.active{color:var(--accent);background:color-mix(in srgb,var(--ghost) 18%,transparent);border-radius:7px}.viz-sep{font-size:10px;font-family:var(--mono);color:var(--ghost);opacity:.5;pointer-events:none;display:flex;align-items:center;padding:0 1px}@keyframes unrolled-pulse{0%,to{opacity:.25}50%{opacity:1}}.unrolled-indicator{font-size:10px;font-family:var(--mono);color:var(--ghost);opacity:.5;pointer-events:none;display:flex;align-items:center;padding:0 1px;transition:color .3s,opacity .3s}.viz-toggle.unrolled-ready .unrolled-indicator{color:#c00;animation:unrolled-pulse 2s ease-in-out infinite}.viz-legend{display:none;position:fixed;bottom:3rem;left:1rem;width:160px;flex-direction:column;gap:3px;padding:8px 0 0;z-index:90}.viz-legend.visible{display:flex}.viz-legend-bar{height:4px;border-radius:0;background:linear-gradient(to right,silver,#cc1010)}.viz-legend-labels{display:flex;justify-content:space-between;font-size:9px;color:var(--text);font-family:var(--mono);font-variant-numeric:tabular-nums;letter-spacing:.04em}.logs-panel{position:fixed;top:var(--rp3);right:1rem;z-index:90;padding:10px 12px 12px;width:30vw;background:transparent}.logs-panel .panel-body.log{border-top:1px solid var(--wire);margin-top:4px;max-height:100px}.layers-panel{position:fixed;top:50%;right:.75rem;z-index:90;padding:6px 6px 10px;width:calc(clamp(120px,13vw,150px) / var(--panel-scale, 1));background:transparent;display:flex;flex-direction:column;gap:2px;transform-origin:right center;transform:translateY(-50%) scale(var(--panel-scale, 1))}.right-panel-section+.right-panel-section{margin-top:calc(1rem * var(--panel-scale, 1));padding-top:calc(.75rem * var(--panel-scale, 1));border-top:1px solid var(--wire)}.right-panel-section .panel-body{margin-top:2px}.param-panel-title.param-panel-toggle{cursor:pointer;-webkit-user-select:none;user-select:none;display:flex;align-items:center;gap:5px}.param-panel-title.param-panel-toggle:before{content:"▸";font-size:9px;display:inline-block;transition:transform .15s ease;color:var(--dim);flex-shrink:0}.param-panel:not(.collapsed) .param-panel-title.param-panel-toggle:before{transform:rotate(90deg)}.param-panel.collapsed .param-panel-body{display:none}.section-toggle{cursor:pointer;-webkit-user-select:none;user-select:none;display:flex;align-items:center;gap:5px}.section-toggle:before{content:"▸";font-size:9px;display:inline-block;transition:transform .15s ease;color:var(--dim);flex-shrink:0}.right-panel-section:not(.collapsed) .section-toggle:before{transform:rotate(90deg)}.right-panel-section.collapsed .section-body,.layer-children{display:none}.layer-group.expanded .layer-children{display:flex;flex-direction:column}.group-arrow{background:transparent;border:none;padding:0;margin-left:auto;color:var(--ghost);font-size:9px;cursor:pointer;line-height:1;flex-shrink:0;transition:transform .15s ease,color .1s}#layer-group-data-split,body.split-mode #layer-group-data-3d,body.split-mode #layer-group-data-2d{display:none}body.split-mode #layer-group-data-split{display:block}.layer-row--dual{justify-content:space-between}.layer-dual-checks{display:flex;gap:8px;margin-left:auto}.layer-dual-check{display:inline-flex;align-items:center;gap:3px;cursor:pointer}.layer-dual-label{font-size:calc(8px * var(--panel-font-inv, 1));color:var(--ghost);letter-spacing:.06em}.group-arrow:before{content:"▸"}.group-arrow:hover{color:var(--dim)}.layer-group.expanded>.layer-row .group-arrow{transform:rotate(90deg)}.layers-panel-title{font-size:calc(9px * var(--panel-font-inv, 1));text-transform:uppercase;letter-spacing:.25em;color:var(--dim);margin-bottom:6px}.layer-group{display:flex;flex-direction:column;margin-bottom:calc(6px * var(--panel-scale, 1))}.layer-row{display:flex;align-items:center;gap:8px;padding:2px 0;cursor:pointer;-webkit-user-select:none;user-select:none}.layer-row--sub{padding-left:18px}.layer-row--sub2{padding-left:32px}.layer-name{font-size:calc(9px * var(--panel-font-inv, 1));color:var(--dim);letter-spacing:.06em;text-transform:lowercase}.layer-name--main{color:var(--text);font-size:calc(10px * var(--panel-font-inv, 1))}.layer-name--section{color:var(--dim);font-size:calc(9px * var(--panel-font-inv, 1));letter-spacing:.12em;text-transform:uppercase}.layer-group--nested{margin-top:4px}.layer-group:has(>.layer-row>.layer-check:not(:checked)) .layer-children{opacity:.35;pointer-events:none}.layer-check{-moz-appearance:none;appearance:none;-webkit-appearance:none;width:max(6px,calc(4px * var(--panel-font-inv, 1)));height:max(6px,calc(4px * var(--panel-font-inv, 1)));border:1px solid var(--ghost);background:transparent;cursor:pointer;position:relative;flex-shrink:0;border-radius:0;transition:background .1s,border-color .1s}.layer-check:checked{background:var(--text);border-color:var(--text)}:focus-visible{outline:1px solid var(--accent);outline-offset:1px}.empty-hint{--thumb-gap: 0px;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:none;opacity:1;display:flex;align-items:center;justify-content:center}.empty-hint.hidden{opacity:0;pointer-events:none}.empty-hint.hidden *{pointer-events:none}.example-stack{display:flex;gap:var(--thumb-gap);flex-shrink:0}.example-link{display:block;cursor:pointer;pointer-events:auto;text-decoration:none;transition:filter .2s}.example-thumb{width:160px;height:160px;display:block;background:color-mix(in srgb,var(--ghost) var(--card-ghost-pct, 10%),var(--void))}.example-link:hover .example-thumb{background:#fff}.empty-hint-info{padding-left:1.2rem;pointer-events:auto;font-family:var(--mono);font-size:9px;letter-spacing:.08em;line-height:1.9;max-width:200px}.empty-hint-desc{color:var(--dim);margin-bottom:18px;text-transform:uppercase}.empty-hint-cta{color:var(--dim);opacity:.75}.empty-hint-note{color:var(--dim);opacity:.75;margin-top:10px;font-size:8px}.about-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--void) 80%,transparent);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);transition:opacity .2s}.about-overlay.hidden{opacity:0;pointer-events:none}.about-modal{position:relative;max-width:40%;max-height:85vh;overflow-y:auto;padding:2rem 2.5rem 1.5rem;background:color-mix(in srgb,var(--surface) 90%,transparent);border:1px solid var(--wire)}.about-modal::-webkit-scrollbar{width:0}.about-close{position:absolute;top:8px;right:12px;font-size:16px;color:var(--dim);cursor:pointer;line-height:1;transition:color .1s}.about-close:hover{color:var(--accent)}.about-title{font-size:11px;letter-spacing:.25em;text-transform:uppercase;color:var(--accent);margin-bottom:1rem}.about-modal p{font-size:10px;color:var(--dim);line-height:1.7;margin-bottom:.75rem}.about-modal strong{color:var(--text);font-weight:500}.about-modal em{font-style:italic}.about-divider{width:24px;height:1px;background:var(--ghost);margin:.75rem 0}.about-param{margin-bottom:.75rem}.about-param-name{font-size:9px;text-transform:uppercase;letter-spacing:.15em;color:var(--text);margin-bottom:.25rem}.about-math{font-size:9px;line-height:1.8;color:var(--text);background:color-mix(in srgb,var(--void) 60%,transparent);padding:6px 10px;margin:.4rem 0 0;border-left:2px solid var(--ghost);white-space:pre;overflow-x:auto}.about-credit{font-size:8px;text-transform:uppercase;letter-spacing:.25em;color:var(--dim);margin-bottom:.5rem}@media print{@page{margin:8mm}body.print-flat,body.print-flat .app{width:100vw!important;height:100vh!important;overflow:hidden!important}body.print-flat *{print-color-adjust:exact;-webkit-print-color-adjust:exact}body.print-flat .topbar,body.print-flat .sidebar,body.print-flat .params-panel,body.print-flat .layers-panel,body.print-flat .logs-panel,body.print-flat .status,body.print-flat .empty-hint,body.print-flat #viewport,body.print-flat .about-overlay,body.print-flat .split-divider,body.print-flat .viz-legend{display:none!important}body.print-flat .flat-view{position:fixed!important;top:0!important;right:0!important;bottom:0!important;left:0!important;z-index:auto!important;display:flex!important;align-items:center!important;justify-content:center!important;width:100vw!important;height:100vh!important;padding:0!important;page-break-inside:avoid!important;break-inside:avoid-page!important}body.print-flat .flat-view .flat-view-print-svg{display:block!important;width:auto!important;height:auto!important;max-width:100%!important;max-height:100%!important}body.print-flat .flat-view canvas{display:block!important;width:auto!important;height:auto!important;max-width:100%!important;max-height:100%!important}body.print-flat.print-flat-svg .flat-view canvas{display:none!important}}
