:root{--bg-base:#0c0c10;--bg-surface:#14141c73;--bg-elevated:#1e1e2859;--bg-panel:#0e0e14a6;--text-primary:#e8e8ed;--text-secondary:#9ca3af;--text-muted:#6b7280;--border-default:#ffffff14;--border-subtle:#ffffff0d;--border-emphasis:#ffffff1f;--border-glass:#ffffff1a;--accent-primary:#34d399;--accent-primary-soft:#34d39926;--accent-primary-glow:#34d39940;--accent-secondary:#60a5fa;--accent-secondary-soft:#60a5fa1f;--accent-danger:#f87171;--accent-danger-soft:#f871711f;--accent-warning:#fbbf24;--state-hover:#ffffff0a;--state-active:#ffffff0f;--state-focus:#34d39926;--space-xs:4px;--space-sm:8px;--space-md:12px;--space-lg:16px;--space-xl:20px;--space-2xl:24px;--space-3xl:32px;--radius-sm:6px;--radius-md:8px;--radius-lg:10px;--radius-xl:14px;--shadow-sm:0 1px 3px #0003;--shadow-md:0 4px 16px #00000040;--shadow-lg:0 8px 32px #00000059;--shadow-soft:0 2px 12px #00000026;--shadow-glow-primary:0 0 20px #34d39926;--shadow-glow-secondary:0 0 20px #60a5fa1f;--shadow-glow-danger:0 0 20px #f8717126;--glass-bg:#62626229;--glass-border:#ffffff40;--glass-blur:12px;--transition-fast:.15s ease;--transition-normal:.2s ease;--transition-slow:.3s ease;--transition-spring:.25s cubic-bezier(.34, 1.56, .64, 1)}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg-base);color:var(--text-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;overflow:hidden}input,button,select{font-family:inherit}.app-container{width:100vw;height:100vh;position:relative;overflow:hidden}.main-canvas{background:radial-gradient(#34d39908 0%,#0000 70%),linear-gradient(#0c0c10 0%,#0e0e14 100%);width:100%;height:100%;position:absolute;inset:0}.canvas-stage{touch-action:none;width:100%;height:100%;position:relative;overflow:hidden}.canvas-rotation-overlay{pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.canvas-transition-overlay{pointer-events:none;z-index:1;width:100%;height:100%;position:absolute;inset:0}.canvas-rotation-link{stroke:#34d399a6;stroke-width:1.5px;stroke-dasharray:6 6;transition:stroke var(--transition-normal), stroke-width var(--transition-normal), opacity var(--transition-normal)}.canvas-rotation-link.active{stroke:#7fffd4f2;stroke-width:2px}.canvas-rotation-ring{fill:none;stroke:#34d3992e;stroke-width:1.5px;transition:stroke var(--transition-normal), stroke-width var(--transition-normal)}.canvas-rotation-ring.active{stroke:#7fffd466;stroke-width:2px}.canvas-rotation-badge{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);color:var(--text-primary);letter-spacing:.2px;pointer-events:none;white-space:nowrap;transition:border-color var(--transition-normal), transform var(--transition-normal), box-shadow var(--transition-normal), background var(--transition-normal);background:#0a1012e0;border:1px solid #34d39947;border-radius:999px;padding:8px 12px;font-size:12px;font-weight:500;position:absolute;transform:translate(-50%,-50%);box-shadow:0 10px 32px #00000047}.canvas-rotation-badge.active{background:#0c1416f0;border-color:#7fffd47a;transform:translate(-50%,-50%)scale(1.03);box-shadow:0 14px 38px #00000059,0 0 0 1px #7fffd414}.canvas-rotation-handle{cursor:crosshair;width:28px;height:28px;transition:transform var(--transition-normal), border-color var(--transition-normal), box-shadow var(--transition-normal);background:#0a1012eb;border:1px solid #34d39966;border-radius:50%;justify-content:center;align-items:center;display:inline-flex;position:absolute;transform:translate(-50%,-50%);box-shadow:0 10px 28px #00000059,0 0 0 6px #34d39914}.canvas-rotation-handle:before{content:"";border-radius:50%;width:44px;height:44px;position:absolute}.canvas-rotation-handle:hover{border-color:#34d399b3;transform:translate(-50%,-50%)scale(1.06);box-shadow:0 12px 32px #0006,0 0 0 8px #34d3991f}.canvas-rotation-handle.active{border-color:#7fffd4cc;transform:translate(-50%,-50%)scale(1.08);box-shadow:0 14px 34px #0000006b,0 0 0 10px #7fffd424}.canvas-rotation-handle:active{transform:translate(-50%,-50%)scale(.98)}.canvas-rotation-handle-dot{background:linear-gradient(#7fffd4 0%,#34d399 100%);border-radius:50%;width:10px;height:10px;box-shadow:0 0 16px #34d39973}.sidebar{background:var(--glass-bg);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid var(--glass-border);border-radius:var(--radius-xl);z-index:10;width:200px;transition:width var(--transition-slow);flex-direction:column;display:flex;position:absolute;top:16px;bottom:16px;left:16px;overflow:hidden;box-shadow:0 4px 24px #00000040,inset 0 1px #ffffff26}.sidebar.resizing{transition:none}.sidebar.collapsed{width:32px!important}.sidebar-resize-handle{cursor:col-resize;z-index:30;width:8px;position:absolute;top:0;bottom:0;right:0}.sidebar-grip{cursor:pointer;z-index:20;width:32px;height:100%;transition:background var(--transition-fast), opacity var(--transition-fast);background:#ffffff08;border:none;justify-content:center;align-items:center;display:flex;position:absolute;top:0;right:0}.sidebar-grip.hidden{opacity:0;pointer-events:none}.sidebar-grip:hover{background:#ffffff1a}.sidebar-grip-icon{width:20px;height:20px;color:var(--text-muted);transition:transform var(--transition-spring), color var(--transition-fast);justify-content:center;align-items:center;display:flex}.sidebar-grip:hover .sidebar-grip-icon{color:var(--text-primary)}.sidebar-grip-icon{transform:rotate(180deg)}.sidebar-content{gap:var(--space-xl);padding:var(--space-xl);opacity:1;visibility:visible;transition:opacity var(--transition-fast), visibility var(--transition-fast);flex-direction:column;flex:1;display:flex;overflow:hidden}.sidebar.collapsed .sidebar-content{opacity:0;visibility:hidden}.sidebar-title-row{padding-bottom:var(--space-lg);border-bottom:1px solid #ffffff14;justify-content:space-between;align-items:center;display:flex}.sidebar-title{color:var(--text-primary);letter-spacing:.3px;font-size:15px;font-weight:600}.sidebar-collapse-btn{border-radius:var(--radius-sm);width:24px;height:24px;color:var(--text-muted);cursor:pointer;transition:background var(--transition-fast), color var(--transition-fast);background:0 0;border:none;justify-content:center;align-items:center;display:flex}.sidebar-collapse-btn:hover{color:var(--text-primary);background:#ffffff14}.sidebar-section{gap:var(--space-sm);flex-direction:column;display:flex}.sidebar-section-title{color:var(--text-muted);text-transform:uppercase;letter-spacing:1.5px;font-size:10px;font-weight:600}.sidebar-tools{gap:var(--space-xs);flex-direction:column;display:flex}.sidebar-actions{gap:var(--space-sm);display:flex}.expandable-panel{border-radius:var(--radius-md);transition:all var(--transition-normal);flex-direction:column;display:flex}.panel-header{justify-content:flex-start;width:100%}.panel-header.expanded{background:#ffffff0f;border-color:#ffffff1f}.panel-chevron{color:var(--text-muted);transition:transform var(--transition-normal);margin-left:auto}.panel-header.expanded .panel-chevron{color:var(--accent-primary)}.panel-submenu{gap:var(--space-xs);margin-top:var(--space-sm);padding:var(--space-sm);border-radius:var(--radius-md);opacity:0;visibility:hidden;max-height:0;transition:max-height var(--transition-slow), opacity var(--transition-slow), visibility var(--transition-slow), padding var(--transition-slow), margin-top var(--transition-slow);background:#14141c66;border:1px solid #ffffff0f;flex-direction:column;display:flex;overflow:hidden}.panel-submenu.expanded{opacity:1;visibility:visible;max-height:300px}.submenu-item{padding:var(--space-sm) var(--space-md);justify-content:flex-start}.submenu-item.active{background:var(--accent-primary-soft);border-color:var(--accent-primary);color:var(--accent-primary);box-shadow:var(--shadow-glow-primary)}.settings-toggle-item{justify-content:space-between;align-items:center;gap:var(--space-md);padding:var(--space-sm) var(--space-xs);color:var(--text-secondary);cursor:pointer;display:flex}.settings-toggle-copy{flex-direction:column;flex:1;gap:4px;display:flex}.settings-toggle-label{color:var(--text-primary);font-size:13px}.settings-toggle-description{color:var(--text-muted);font-size:12px;line-height:1.5}.settings-toggle-item input[type=checkbox]{width:16px;height:16px;accent-color:var(--accent-primary);cursor:pointer;flex-shrink:0}.settings-slider-item{padding:var(--space-sm) var(--space-xs)}.settings-slider-item input[type=range]{width:100%;height:4px;accent-color:var(--accent-primary);cursor:pointer}.settings-slider-header{margin-bottom:var(--space-xs);justify-content:space-between;align-items:center;display:flex}.settings-slider-label{color:var(--text-primary);font-size:13px}.settings-slider-value{color:var(--accent-primary);text-align:right;min-width:24px;font-size:12px;font-weight:500}.sidebar-hint{padding:var(--space-md);border-radius:var(--radius-md);color:var(--accent-primary);justify-content:space-between;align-items:center;gap:var(--space-md);background:#34d3991a;border:1px solid #34d39933;font-size:12px;display:flex}.btn{justify-content:center;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);cursor:pointer;transition:all var(--transition-normal);color:var(--text-secondary);background:0 0;border:1px solid #0000;font-size:13px;font-weight:450;line-height:1.4;display:inline-flex;position:relative;overflow:hidden}.btn:disabled{opacity:.4;cursor:not-allowed}.btn:focus-visible{box-shadow:0 0 0 2px var(--bg-base), 0 0 0 4px var(--accent-primary);outline:none}.btn:active:not(:disabled){transform:scale(.97)}.btn-ghost{color:var(--text-secondary);background:0 0;border-color:#0000}.btn-ghost:hover:not(:disabled){background:var(--state-hover);border-color:var(--border-default);color:var(--text-primary)}.btn-ghost:active:not(:disabled){background:var(--state-active)}.btn-ghost.active,.btn-ghost[aria-pressed=true]{background:var(--accent-primary-soft);border-color:var(--accent-primary);color:var(--accent-primary);box-shadow:var(--shadow-glow-primary)}.btn-outline{color:var(--text-secondary);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#ffffff0d;border-color:#ffffff1a}.btn-outline:hover:not(:disabled){color:var(--text-primary);background:#ffffff1a;border-color:#ffffff26}.btn-outline:active:not(:disabled){background:#ffffff14}.btn-outline.active,.btn-outline[aria-pressed=true]{background:var(--accent-primary-soft);border-color:var(--accent-primary);color:var(--accent-primary);box-shadow:var(--shadow-glow-primary)}.btn-solid{background:var(--accent-primary);border-color:var(--accent-primary);color:#0c0c10;font-weight:600}.btn-solid:hover:not(:disabled){box-shadow:var(--shadow-glow-primary);background:#2dc48d;border-color:#2dc48d}.btn-solid:active:not(:disabled){background:#28b37f}.btn-danger{color:var(--accent-danger);background:0 0;border-color:#f871714d}.btn-danger:hover:not(:disabled){background:var(--accent-danger-soft);border-color:var(--accent-danger);color:var(--accent-danger);box-shadow:var(--shadow-glow-danger)}.btn-danger:active:not(:disabled){background:#f871712e}.btn-sm{padding:var(--space-xs) var(--space-sm);font-size:12px}.btn-lg{padding:var(--space-md) var(--space-lg);font-size:14px}.btn-icon{justify-content:center;align-items:center;width:20px;display:flex}.btn-icon svg{width:18px;height:18px}.btn-label{font-size:13px}.control-panel{background:var(--glass-bg);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid var(--glass-border);border-radius:var(--radius-xl);z-index:10;width:280px;transition:width var(--transition-slow);flex-direction:column;display:flex;position:absolute;top:16px;bottom:16px;right:16px;overflow:hidden;box-shadow:0 4px 24px #00000040,inset 0 1px #ffffff26}.control-panel.resizing{transition:none}.control-panel.collapsed{width:32px!important}.control-panel-resize-handle{cursor:col-resize;z-index:30;width:8px;position:absolute;top:0;bottom:0;left:0}.control-panel-grip{cursor:pointer;z-index:20;width:32px;height:100%;transition:background var(--transition-fast), opacity var(--transition-fast);background:#ffffff08;border:none;justify-content:center;align-items:center;display:flex;position:absolute;top:0;left:0}.control-panel-grip.hidden{opacity:0;pointer-events:none}.control-panel-grip:hover{background:#ffffff1a}.control-panel-grip-icon{width:20px;height:20px;color:var(--text-muted);transition:transform var(--transition-spring), color var(--transition-fast);justify-content:center;align-items:center;display:flex}.control-panel-grip:hover .control-panel-grip-icon{color:var(--text-primary)}.control-panel-grip-icon{transform:rotate(180deg)}.control-panel-content{gap:var(--space-lg);padding:var(--space-xl);opacity:1;visibility:visible;transition:opacity var(--transition-fast), visibility var(--transition-fast);flex-direction:column;flex:1;display:flex;overflow:hidden}.control-panel.collapsed .control-panel-content{opacity:0;visibility:hidden}.control-panel-title-row{align-items:center;gap:var(--space-sm);padding-bottom:var(--space-md);border-bottom:1px solid #ffffff14;display:flex}.control-panel-title-row h3{color:var(--text-primary);font-size:14px;font-weight:500}.control-panel-collapse-btn{border-radius:var(--radius-sm);width:24px;height:24px;color:var(--text-muted);cursor:pointer;transition:background var(--transition-fast), color var(--transition-fast);background:0 0;border:none;justify-content:center;align-items:center;display:flex}.control-panel-collapse-btn:hover{color:var(--text-primary);background:#ffffff14}.control-panel-empty{height:100%;color:var(--text-muted);justify-content:center;align-items:center;font-size:13px;line-height:1.5;display:flex}.control-panel-header{align-items:center;gap:var(--space-sm);padding-bottom:var(--space-md);border-bottom:1px solid #ffffff14;display:flex}.control-panel-header h3{color:var(--text-primary);flex:1;font-size:14px;font-weight:500}.control-group{gap:var(--space-sm);padding:var(--space-md);border-radius:var(--radius-lg);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#14141c66;border:1px solid #ffffff0f;flex-direction:column;display:flex}.control-group label{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.8px;font-size:11px;font-weight:500}.control-hint{color:var(--text-muted);font-size:12px;line-height:1.5}.control-group input[type=text],.control-group input[type=number]{width:100%;padding:var(--space-sm) var(--space-md);color:var(--text-primary);border-radius:var(--radius-md);transition:all var(--transition-normal);background:#0000004d;border:1px solid #ffffff1a;font-size:13px}.control-group input[type=text]:focus,.control-group input[type=number]:focus{border-color:var(--accent-primary);box-shadow:0 0 0 3px var(--accent-primary-soft);outline:none}.control-group input[type=text]:hover:not(:focus),.control-group input[type=number]:hover:not(:focus){border-color:var(--border-emphasis)}.control-group input[type=range]{border-radius:var(--radius-sm);appearance:none;cursor:pointer;background:#0000004d;width:100%;height:4px}.control-group input[type=range]::-webkit-slider-thumb{appearance:none;background:var(--accent-primary);cursor:pointer;width:16px;height:16px;transition:all var(--transition-spring);border-radius:50%;box-shadow:0 2px 8px #34d3994d}.control-group input[type=range]::-webkit-slider-thumb:hover{transform:scale(1.15);box-shadow:0 2px 12px #34d39966}.control-group input[type=range]::-webkit-slider-thumb:active{transform:scale(1.05)}.control-group input[type=range]::-moz-range-thumb{background:var(--accent-primary);cursor:pointer;width:16px;height:16px;transition:all var(--transition-spring);border:none;border-radius:50%;box-shadow:0 2px 8px #34d3994d}.custom-select{width:100%;position:relative}.custom-select-trigger{width:100%;padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);color:var(--text-primary);cursor:pointer;transition:all var(--transition-normal);background:#0000004d;border:1px solid #ffffff1a;justify-content:space-between;align-items:center;font-size:13px;display:flex}.custom-select-trigger:hover{border-color:var(--border-emphasis)}.custom-select-trigger.open{border-color:var(--accent-primary);box-shadow:0 0 0 3px var(--accent-primary-soft)}.custom-select-value{text-align:left;white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}.custom-select-arrow{color:var(--text-secondary);transition:transform var(--transition-normal);align-items:center;display:flex}.custom-select-arrow.rotated{transform:rotate(180deg)}.custom-select-dropdown{z-index:100;-webkit-backdrop-filter:blur(12px)saturate(1.2);backdrop-filter:blur(12px)saturate(1.2);border-radius:var(--radius-md);padding:var(--space-xs);scrollbar-width:none;background:#101018;border:1px solid #ffffff1a;flex-direction:column;gap:2px;max-height:240px;display:flex;position:absolute;top:calc(100% + 4px);left:0;right:0;overflow-y:auto;box-shadow:0 8px 32px #0006}.custom-select-dropdown::-webkit-scrollbar{display:none}.custom-select.drop-up .custom-select-dropdown{top:auto;bottom:calc(100% + 4px)}.custom-select-option{width:100%;padding:var(--space-sm) var(--space-md);border-radius:var(--radius-sm);color:var(--text-secondary);cursor:pointer;transition:all var(--transition-fast);text-align:left;background:0 0;border:none;align-items:center;font-size:13px;display:flex}.custom-select-option:hover{background:var(--state-hover);color:var(--text-primary)}.custom-select-option.selected{background:var(--accent-primary-soft);color:var(--accent-primary);font-weight:500}.position-inputs{gap:var(--space-sm);display:flex}.position-inputs input{flex:1}.value-display{color:var(--accent-secondary);text-align:right;padding-top:var(--space-xs);font-variant-numeric:tabular-nums;font-size:12px}.value-display.wavelength{font-weight:600}.radio-group{gap:var(--space-sm);display:flex}.radio-group .btn{flex:1}.control-group-info{padding:var(--space-md);border-radius:var(--radius-md);gap:var(--space-sm);background:#00000040;border:1px solid #ffffff0f;flex-direction:column;display:flex}.info-item{justify-content:space-between;font-size:12px;display:flex}.info-label{color:var(--text-secondary)}.info-value{color:var(--accent-secondary);font-variant-numeric:tabular-nums;font-weight:500}.sidebar-footer{padding-top:var(--space-lg);border-top:1px solid #ffffff14;margin-top:auto;position:relative}.footer-links{align-items:center;gap:var(--space-sm);display:flex}.about-btn{color:var(--text-muted);cursor:pointer;transition:color var(--transition-normal);background:0 0;border:none;padding:0;font-family:inherit;font-size:12px}.about-btn:hover,.about-btn[aria-expanded=true]{color:var(--accent-primary)}.footer-divider{color:var(--text-muted);opacity:.5;font-size:12px}.author-link{color:var(--text-muted);transition:color var(--transition-normal);align-items:center;gap:4px;font-size:12px;text-decoration:none;display:inline-flex}.author-link:hover{color:var(--accent-primary)}.author-link-arrow{transition:transform var(--transition-normal)}.author-link:hover .author-link-arrow{transform:translate(4px)}.about-modal-overlay{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);z-index:100;opacity:0;background:#000000b3;justify-content:center;align-items:center;animation:.3s forwards about-modal-fade-in;display:flex;position:fixed;inset:0}@keyframes about-modal-fade-in{to{opacity:1}}.about-modal{width:auto;max-width:400px;padding:var(--space-2xl);border-radius:var(--radius-lg);background:linear-gradient(165deg,#141420f2 0%,#0c0c14fa 100%);border:1px solid #ffffff0f;flex-direction:column;align-items:center;animation:.4s cubic-bezier(.34,1.56,.64,1) forwards about-modal-enter;display:flex;position:relative;overflow:hidden;transform:scale(.96)translateY(16px);box-shadow:0 32px 80px #0009,0 0 0 1px #ffffff05,inset 0 1px #ffffff0a}@keyframes about-modal-enter{to{transform:scale(1)translateY(0)}}.about-modal-glow{pointer-events:none;opacity:.8;background:radial-gradient(at 80% 20%,#34d3990f 0%,#0000 50%);width:150%;height:150%;position:absolute;top:-30%;right:-20%}.about-modal-decor{top:var(--space-lg);width:80px;height:2px;position:absolute;left:50%;transform:translate(-50%)}.decor-line{background:linear-gradient(90deg, transparent, var(--accent-primary), transparent);opacity:.4;border-radius:2px;height:100%;position:absolute;top:0}.decor-line-1{opacity:.6;width:40%;animation:4s ease-in-out infinite decor-pulse-h;left:0}.decor-line-2{opacity:.3;width:25%;animation:4s ease-in-out .5s infinite decor-pulse-h;left:30%}.decor-line-3{opacity:.45;width:35%;animation:4s ease-in-out 1s infinite decor-pulse-h;left:60%}@keyframes decor-pulse-h{0%,to{opacity:.2;transform:scaleY(1)}50%{opacity:.5;transform:scaleY(1.5)}}.about-modal-content{z-index:1;text-align:center;align-items:center;gap:var(--space-md);padding-top:var(--space-xl);flex-direction:column;width:100%;display:flex;position:relative}.about-modal-close{margin-top:var(--space-lg);padding:var(--space-sm) var(--space-xl);justify-content:center;align-items:center;gap:var(--space-sm);border-radius:var(--radius-md);color:var(--text-muted);cursor:pointer;transition:all var(--transition-normal);z-index:10;background:#ffffff08;border:1px solid #ffffff0f;font-size:12px;display:flex}.about-modal-close:hover{color:var(--text-primary);background:#ffffff14;border-color:#ffffff1f}.about-modal-title{color:var(--text-primary);letter-spacing:2px;opacity:.9;margin:0;font-size:18px;font-weight:500}.about-modal-quote{color:var(--accent-primary);opacity:.85;font-size:15px;font-style:italic;line-height:1.9;position:relative}.quote-mark{color:var(--accent-primary);opacity:.4;font-size:16px}.about-modal-desc{color:var(--text-secondary);letter-spacing:.3px;margin:0;font-size:13px;line-height:2.2}.about-modal-footer{margin-top:var(--space-sm);padding-top:var(--space-lg);border-top:1px solid #ffffff0d;width:auto}.about-modal-subtle{color:var(--text-muted);letter-spacing:.8px;opacity:.6;font-size:11px;font-style:italic}.error-container{height:100%;padding:var(--space-3xl);text-align:center;flex-direction:column;justify-content:center;align-items:center;display:flex}.error-container h2{color:var(--accent-danger);margin-bottom:var(--space-md);font-size:18px;font-weight:600}.error-container p{color:var(--text-secondary);margin-bottom:var(--space-xl);max-width:300px;font-size:13px}.error-container button{padding:var(--space-sm) var(--space-lg);background:var(--accent-danger);border-radius:var(--radius-md);color:#fff;cursor:pointer;transition:all var(--transition-normal);border:none;font-size:13px;font-weight:500}.error-container button:hover{box-shadow:var(--shadow-glow-danger);background:#ef4444}
