:root{--color-bg:#eceef1;--color-surface:#fff;--color-fg:#1a1a1a;--color-border:#e0e1e6;--color-hover:#00000010;--color-shadow:#1a1a1a26;--color-accent:#3b6fe0;--color-danger:#d1453b;--radius-sm:7px;--radius-md:12px;font-family:system-ui,-apple-system,Segoe UI,sans-serif}:root[data-theme=dark]{--color-bg:#131417;--color-surface:#1f2023;--color-fg:#e8e8ea;--color-border:#303136;--color-hover:#ffffff14;--color-shadow:#0006;--color-accent:#6c9bff;--color-danger:#ff6b6b}:root[data-theme=contrast]{--color-bg:#000;--color-surface:#000;--color-fg:#fff;--color-border:#ff0;--color-hover:#ff03;--color-shadow:#fff6;--color-accent:#ff0;--color-danger:#f55}*{box-sizing:border-box}html,body,#app{height:100%;margin:0}body{background:var(--color-bg);color:var(--color-fg)}.app-shell{flex-direction:column;height:100vh;display:flex}.app-header{background:var(--color-surface);box-shadow:0 1px 0 var(--color-border), 0 2px 10px var(--color-shadow);z-index:100;align-items:center;gap:1rem;padding:.6rem 1rem;display:flex;position:relative}.app-header h1{white-space:nowrap;flex:none;margin:0;font-size:1.05rem;font-weight:600}.header-spacer{flex:1}.header-actions{align-items:center;gap:.5rem;display:flex}.project-name-input{border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);color:inherit;font:inherit;width:12rem;max-width:30vw;padding:.35rem .6rem;font-size:.9rem}.project-name-input:focus-visible{outline:2px solid var(--color-accent);outline-offset:1px}.counter{align-items:center;gap:.4rem;display:flex}.counter-value{text-align:center;font-variant-numeric:tabular-nums;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);width:2.4rem;color:inherit;padding:.2rem .1rem;font-family:inherit;font-size:.9rem}.counter-value:focus-visible{outline:2px solid var(--color-accent);outline-offset:1px}.counter-arrows{flex-direction:column;line-height:1;display:flex}.counter-arrow-btn{border:1px solid var(--color-border);background:var(--color-surface);width:1.1rem;height:.75rem;color:inherit;cursor:pointer;border-radius:2px;justify-content:center;align-items:center;padding:0;font-size:.55rem;line-height:1;display:flex}.counter-arrow-btn+.counter-arrow-btn{margin-top:1px}.counter-arrow-btn:hover{background:var(--color-hover)}.menu-wrapper{position:relative}.menu-dropdown{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);min-width:13rem;box-shadow:0 12px 28px var(--color-shadow), 0 2px 6px var(--color-shadow);z-index:10;flex-direction:column;gap:.6rem;padding:.6rem;display:flex;position:absolute;top:calc(100% + 8px);left:0}.menu-dropdown[hidden]{display:none}.menu-section{flex-direction:column;display:flex}.menu-section+.menu-section{border-top:1px solid var(--color-border);padding-top:.6rem}.menu-label{text-transform:uppercase;letter-spacing:.05em;opacity:.6;font-size:.75rem}.menu-item{text-align:left;border-radius:var(--radius-sm);color:inherit;font:inherit;cursor:pointer;background:0 0;border:none;padding:.4rem .55rem;transition:background-color .12s}.menu-item:disabled{cursor:not-allowed;opacity:.5}.menu-item:not(:disabled):hover{background:var(--color-hover)}.menu-select{border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);color:inherit;font:inherit;padding:.35rem .5rem}.btn,.menu-select{transition:background-color .12s,box-shadow .12s,transform 80ms}.btn:focus-visible,.menu-select:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.btn{border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);box-shadow:0 1px 2px var(--color-shadow);color:inherit;font:inherit;cursor:pointer;padding:.4rem .9rem}.btn:hover{background:var(--color-hover);box-shadow:0 3px 8px var(--color-shadow)}.btn:active{box-shadow:0 1px 1px var(--color-shadow);transform:translateY(1px)}.btn:disabled{opacity:.4;cursor:not-allowed;box-shadow:none}.btn:disabled:hover{background:var(--color-surface)}.btn-icon{padding:.4rem .6rem;font-size:1rem;line-height:1}.app-layout{background:var(--color-bg);flex:1;min-height:0;padding:.65rem;display:flex;overflow:hidden}.panel-editor{flex:auto;min-width:320px}.panel-code{flex:0 360px;min-width:200px}.panel-viewer{flex:0 420px;min-width:240px}.resizer{cursor:col-resize;flex:none;width:14px;position:relative}.resizer:after{content:"";background:var(--color-border);border-radius:999px;margin:0 6px;transition:background-color .12s;position:absolute;inset:0}.resizer:hover:after{background:var(--color-accent)}.panel{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:0 1px 3px var(--color-shadow);flex-direction:column;min-width:0;min-height:0;display:flex;overflow:hidden}.panel[hidden]{display:none}.panel-title{text-transform:uppercase;letter-spacing:.05em;opacity:.6;border-bottom:1px solid var(--color-border);margin:0;padding:.5rem .85rem;font-size:.78rem;font-weight:600}.panel-body{flex:1;min-height:0;overflow:auto}.panel-editor .panel-body{overflow:hidden}.blocklyToolbox{border-right:1px solid var(--color-border);box-sizing:border-box;transition:width .22s;background:var(--color-bg)!important;width:208px!important;padding:44px 8px 12px!important;font-family:inherit!important;overflow:hidden!important}.blocklyToolbox.bsn-toolbox-collapsed{width:56px!important}.blocklyToolboxCategoryContainer{margin-bottom:3px}.blocklyToolboxCategory{border-radius:var(--radius-sm);background-color:var(--cat-tint,transparent);transform-origin:0;align-items:center;transition:background-color .12s,border-left-width .12s,filter .12s,transform .12s;position:relative;border-left-width:4px!important;height:36px!important;margin-bottom:10px!important;padding-left:14px!important;padding-right:10px!important;line-height:36px!important;display:flex!important}.blocklyToolboxCategory:not(.blocklyToolboxSelected):hover{filter:brightness(.94);z-index:1;transform:scale(1.04)}.blocklyToolboxSelected{filter:brightness(.88);background-color:var(--cat-tint,var(--color-hover))!important;border-left-width:6px!important}.bsn-toolbox-collapsed .blocklyToolboxCategory{padding-left:0!important;padding-right:6px!important}.bsn-toolbox-collapsed .blocklyTreeRowContentContainer{justify-content:center}.bsn-toolbox-collapsed .blocklyToolboxCategoryLabel{display:none!important}.bsn-toolbox-collapsed .bsn-cat-icon{margin-right:0}.blocklyTreeRowContentContainer{align-items:center;width:100%;display:flex!important}.bsn-cat-icon{justify-content:center;align-items:center;min-width:20px;margin-right:12px;font-size:14px;font-weight:600;line-height:1;position:relative;top:1px;visibility:visible!important;width:20px!important;height:20px!important;color:var(--color-fg)!important;background-image:none!important;display:inline-flex!important}.bsn-cat-icon-primitives3d:before{content:"◆"}.bsn-cat-icon-transforms:before{content:"⇄"}.bsn-cat-icon-booleans:before{content:"⊕"}.bsn-cat-icon-math:before{content:"∑"}.bsn-cat-icon-logic:before{content:"✓"}.bsn-cat-icon-loops:before{content:"↻"}.bsn-cat-icon-text:before{content:"T"}.bsn-cat-icon-variables:before{content:"x"}.bsn-cat-icon-modules:before{content:"▦"}.bsn-cat-icon-code:before{content:"{}"}.blocklyToolboxCategoryLabel{letter-spacing:.1px;text-overflow:ellipsis;overflow:hidden;color:var(--color-fg)!important;padding:0!important;font:600 14px/1 system-ui,-apple-system,Segoe UI,sans-serif!important}.bsn-toolbox-toggle{z-index:71;position:absolute}.bsn-zoom-btn.bsn-toolbox-toggle{transition:background-color .12s,box-shadow .12s,left .22s}#viewer-root{flex-direction:column;display:flex;overflow:hidden}.bsn-zoom-cluster{z-index:3;flex-direction:column;align-items:flex-end;gap:4px;display:flex;position:absolute}.bsn-zoom-row{gap:4px;display:flex}.bsn-zoom-btn{border-radius:var(--radius-sm);background:var(--color-surface);border:1px solid var(--color-border);width:28px;height:28px;box-shadow:0 1px 2px var(--color-shadow);cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;font-size:15px;line-height:1;transition:background-color .12s,box-shadow .12s;display:flex}.bsn-zoom-btn:hover{background:var(--color-hover)}.bsn-zoom-btn[aria-pressed=true]{border-color:var(--color-accent);box-shadow:0 0 0 1px var(--color-accent)}.blockly-ws-search-next-btn,.blockly-ws-search-previous-btn{background-position:50%;background-size:20px 20px;width:24px;height:24px}.code-panel-inner{height:100%;position:relative}.code-panel-actions{z-index:1;gap:.35rem;display:flex;position:absolute;top:.5rem;right:.5rem}.code-preview{white-space:pre;height:100%;margin:0;padding:.75rem .85rem;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.85rem;line-height:1.5;overflow:auto}.viewer-controls{border-bottom:1px solid var(--color-border);flex-wrap:wrap;align-items:center;gap:.35rem;padding:.4rem .6rem;display:flex}.viewer-popout-btn{margin-left:auto}.color-swatch{border:1px solid var(--color-border);border-radius:var(--radius-sm);cursor:pointer;background:0 0;width:28px;height:28px;padding:0}.menu-mesh-color-row{cursor:pointer;justify-content:space-between;align-items:center;gap:.6rem;padding:.15rem .3rem;font-size:.85rem;display:flex}.viewer-controls .menu-select{padding:.3rem .4rem;font-size:.8rem}.export-color-options{flex-direction:column;gap:.1rem;display:flex}.export-color-option{border-radius:var(--radius-sm);cursor:pointer;align-items:center;gap:.4rem;padding:.25rem .3rem;font-size:.85rem;display:flex}.export-color-option:hover{background:var(--color-hover)}.color-swatch-mini{border:1px solid var(--color-border);border-radius:3px;flex-shrink:0;width:.9rem;height:.9rem}.clipping-slider-row{align-items:center;gap:.5rem;display:flex}.clipping-slider-row input[type=range]{flex:1;min-width:0}.clipping-position-number{border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);width:4.5rem;color:inherit;font:inherit;padding:.2rem .3rem;font-size:.85rem}.btn-small{padding:.3rem .6rem;font-size:.8rem}.auto-render-toggle{white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:.3rem;font-size:.8rem;display:flex}.viewer-canvas{flex:1;min-height:0;position:relative}.viewer-canvas canvas{display:block}.viewer-bottom{border-top:1px solid var(--color-border);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem;padding:.5rem .6rem;font-size:.8rem;display:flex}.menu-dropdown label{cursor:pointer;white-space:nowrap;align-items:center;gap:.25rem;display:flex}.render-status{z-index:2;border-radius:var(--radius-sm);background:var(--color-surface);box-shadow:0 1px 3px var(--color-shadow);text-overflow:ellipsis;white-space:nowrap;pointer-events:none;padding:.3rem .6rem;font-size:.82rem;position:absolute;top:.5rem;left:.5rem;right:.5rem;overflow:hidden}.render-status:empty{display:none}.render-status[data-state=loading]{opacity:.7}.render-status[data-state=error]{color:var(--color-danger);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.render-status[data-state=success]{opacity:.7}.render-status[data-state=stale]{opacity:.6;font-style:italic}.info-dialog{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);max-width:24rem;color:var(--color-fg);box-shadow:0 12px 28px var(--color-shadow), 0 2px 6px var(--color-shadow);padding:1.25rem 1.5rem}.info-dialog::backdrop{background:#0006}.info-dialog h2{margin:0 0 .5rem;font-size:1.15rem}.info-dialog p{opacity:.85;margin:0 0 .75rem;font-size:.9rem;line-height:1.5}.info-subheading{text-transform:uppercase;letter-spacing:.05em;opacity:.7;margin:0 0 .4rem;font-size:.75rem;font-weight:600}.info-tech-list{opacity:.85;margin:0 0 1.1rem;padding-left:1.2rem;font-size:.85rem}.info-copyright{border-top:1px solid var(--color-border);opacity:.7;margin:0 0 1.1rem;padding-top:.6rem;font-size:.78rem;line-height:1.5}.info-copyright a{color:inherit}.info-dialog form{justify-content:flex-end;display:flex}.confirm-dialog-actions{gap:.6rem}.btn-danger{border-color:var(--color-danger,#c0392b);background:var(--color-danger,#c0392b);color:#fff}.btn-danger:hover{background:var(--color-danger-hover,#a93226)}
