:root{--bg-primary: #0f0f14;--bg-secondary: #16161e;--bg-tertiary: #1e1e2a;--bg-elevated: #252536;--bg-hover: #2a2a3e;--bg-active: #333350;--surface: #1a1a28;--surface-hover: #22223a;--surface-border: rgba(255, 255, 255, .06);--text-primary: #e8e8f0;--text-secondary: #8888a8;--text-muted: #555570;--text-accent: #a5b4fc;--accent: #6366f1;--accent-hover: #7c7ff7;--accent-muted: rgba(99, 102, 241, .15);--accent-glow: rgba(99, 102, 241, .3);--red: #f87171;--green: #34d399;--blue: #60a5fa;--yellow: #fbbf24;--purple: #a78bfa;--cyan: #22d3ee;--orange: #fb923c;--pink: #f472b6;--expr-1: #6366f1;--expr-2: #f87171;--expr-3: #34d399;--expr-4: #fbbf24;--expr-5: #a78bfa;--expr-6: #22d3ee;--expr-7: #fb923c;--expr-8: #f472b6;--grid-major: rgba(255, 255, 255, .06);--grid-minor: rgba(255, 255, 255, .025);--axis-color: rgba(255, 255, 255, .2);--topbar-height: 48px;--toolbar-width: 52px;--panel-width: 320px;--radius-sm: 6px;--radius-md: 8px;--radius-lg: 12px;--shadow-sm: 0 1px 3px rgba(0,0,0,.3);--shadow-md: 0 4px 16px rgba(0,0,0,.4);--shadow-lg: 0 8px 32px rgba(0,0,0,.5);--shadow-glow: 0 0 20px var(--accent-glow);--transition-fast: .12s ease;--transition-normal: .2s ease;--transition-smooth: .3s cubic-bezier(.4, 0, .2, 1)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}body{font-family:Inter,-apple-system,sans-serif;background:var(--bg-primary);color:var(--text-primary);overflow:hidden;height:100vh;width:100vw;-webkit-font-smoothing:antialiased}#app{display:flex;flex-direction:column;height:100vh;width:100vw}#topbar{height:var(--topbar-height);background:var(--bg-secondary);border-bottom:1px solid var(--surface-border);display:flex;align-items:center;justify-content:space-between;padding:0 12px;z-index:100;flex-shrink:0}.topbar-left,.topbar-right{display:flex;align-items:center;gap:4px}.logo{display:flex;align-items:center;gap:10px;padding:0 8px}.logo-text{font-weight:700;font-size:15px;letter-spacing:-.3px;background:linear-gradient(135deg,#a5b4fc,#818cf8);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}.logo-badge{font-size:9px;font-weight:700;padding:2px 6px;border-radius:4px;background:var(--accent-muted);color:var(--accent);letter-spacing:.5px}.cmd-trigger{display:flex;align-items:center;gap:8px;padding:6px 14px;background:var(--bg-tertiary);border:1px solid var(--surface-border);border-radius:var(--radius-md);color:var(--text-muted);font-size:13px;cursor:pointer;min-width:280px;transition:all var(--transition-normal)}.cmd-trigger:hover{border-color:var(--accent);background:var(--bg-elevated);color:var(--text-secondary);box-shadow:var(--shadow-glow)}.cmd-trigger kbd{font-family:Inter,sans-serif;font-size:11px;padding:2px 6px;background:var(--bg-primary);border-radius:4px;border:1px solid var(--surface-border);color:var(--text-muted);margin-left:auto}.icon-btn{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:var(--radius-sm);color:var(--text-secondary);cursor:pointer;transition:all var(--transition-fast)}.icon-btn:hover{background:var(--bg-hover);color:var(--text-primary)}.icon-btn.active{background:var(--accent-muted);color:var(--accent)}.separator{width:1px;height:20px;background:var(--surface-border);margin:0 4px}#main-content{display:flex;flex:1;overflow:hidden}#toolbar{width:var(--toolbar-width);background:var(--bg-secondary);border-right:1px solid var(--surface-border);display:flex;flex-direction:column;padding:8px 6px;gap:4px;flex-shrink:0;z-index:50}.tool-group{display:flex;flex-direction:column;gap:2px;padding-bottom:8px;border-bottom:1px solid var(--surface-border);margin-bottom:4px}.tool-group:last-child{border-bottom:none;margin-bottom:0}.tool-btn{width:40px;height:40px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:var(--radius-sm);color:var(--text-secondary);cursor:pointer;transition:all var(--transition-fast);position:relative}.tool-btn:hover{background:var(--bg-hover);color:var(--text-primary)}.tool-btn.active{background:var(--accent-muted);color:var(--accent);box-shadow:inset 0 0 0 1px #6366f14d}.tool-btn.active:before{content:"";position:absolute;left:-6px;top:50%;transform:translateY(-50%);width:3px;height:18px;background:var(--accent);border-radius:0 2px 2px 0}#canvas-container{flex:1;position:relative;overflow:hidden;background:var(--bg-primary)}#gl-canvas,#overlay-canvas{position:absolute;top:0;left:0;width:100%;height:100%}#overlay-canvas{pointer-events:none;z-index:2}#gl-canvas{z-index:1}#fps-counter{position:absolute;top:12px;left:12px;font-family:JetBrains Mono,monospace;font-size:11px;color:var(--text-muted);background:#0f0f14cc;padding:4px 8px;border-radius:4px;z-index:10;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--surface-border)}#coords-display{position:absolute;bottom:12px;left:12px;font-family:JetBrains Mono,monospace;font-size:11px;color:var(--text-muted);background:#0f0f14cc;padding:4px 8px;border-radius:4px;z-index:10;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--surface-border)}#panel-resize-handle{width:6px;cursor:col-resize;background:transparent;position:relative;flex-shrink:0;z-index:60;transition:background .15s}#panel-resize-handle:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:2px;height:32px;background:var(--text-tertiary);border-radius:2px;opacity:0;transition:opacity .15s}#panel-resize-handle:hover:after,#panel-resize-handle:active:after{opacity:1}#panel-resize-handle:hover{background:#6366f126}#panel-resize-handle:active{background:#6366f140}#algebra-panel{width:var(--panel-width);min-width:200px;max-width:600px;background:var(--bg-secondary);border-left:1px solid var(--surface-border);display:flex;flex-direction:column;flex-shrink:0;z-index:50}.panel-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--surface-border);min-height:42px}.panel-tabs{display:flex;gap:0;background:var(--bg-tertiary);border-radius:var(--radius-sm);padding:2px}.panel-tab{font-size:12px;font-weight:500;padding:5px 12px;border:none;background:transparent;color:var(--text-secondary);cursor:pointer;border-radius:4px;transition:all var(--transition-fast)}.panel-tab.active{background:var(--accent);color:#fff}.panel-tab:not(.active):hover{color:var(--text-primary)}.panel-action{width:28px;height:28px;display:flex;align-items:center;justify-content:center;background:var(--accent);border:none;border-radius:var(--radius-sm);color:#fff;cursor:pointer;transition:all var(--transition-fast)}.panel-action:hover{background:var(--accent-hover);box-shadow:var(--shadow-glow)}.panel-body{flex:1;overflow-y:auto;padding:8px}.panel-body::-webkit-scrollbar{width:4px}.panel-body::-webkit-scrollbar-thumb{background:var(--bg-elevated);border-radius:4px}#properties-content{overflow-y:auto;min-height:0}#properties-content .empty-state{color:var(--text-muted);font-size:13px;text-align:center;padding:40px 20px}.expr-item{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:var(--radius-sm);margin-bottom:4px;cursor:pointer;transition:all var(--transition-fast);background:var(--bg-tertiary);border:1px solid transparent;position:relative}.expr-item:hover{background:var(--bg-elevated);border-color:var(--surface-border)}.expr-item.selected{border-color:var(--accent);background:var(--accent-muted)}.expr-color{width:14px;height:14px;border-radius:50%;flex-shrink:0;box-shadow:0 0 6px currentColor}.expr-text{font-family:JetBrains Mono,monospace;font-size:13px;color:var(--text-primary);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.expr-label{font-size:11px;color:var(--text-muted);font-weight:500}.expr-toggle{width:24px;height:24px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:4px;color:var(--text-muted);cursor:pointer;opacity:0;transition:all var(--transition-fast)}.expr-item:hover .expr-toggle{opacity:1}.expr-toggle:hover{background:var(--bg-hover);color:var(--text-primary)}.expr-delete{width:20px;height:20px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:4px;color:var(--text-muted);cursor:pointer;opacity:0;transition:all var(--transition-fast);flex-shrink:0}.expr-item:hover .expr-delete{opacity:1}.expr-delete:hover{background:#f8717126;color:var(--red)}#input-area{padding:4px 0}.input-row{display:flex;align-items:center;gap:8px;padding:4px 10px}.input-color{width:14px;height:14px;border-radius:50%;flex-shrink:0}.expr-input{flex:1;background:transparent;border:none;outline:none;font-family:JetBrains Mono,monospace;font-size:13px;color:var(--text-primary);padding:6px 0}.expr-input::placeholder{color:var(--text-muted);font-size:12px}.math-kb-toggle{width:30px;height:30px;display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid transparent;border-radius:var(--radius-sm);color:var(--text-muted);cursor:pointer;flex-shrink:0;transition:all var(--transition-fast)}.math-kb-toggle:hover{background:var(--bg-hover);color:var(--text-primary);border-color:var(--surface-border)}.math-kb-toggle.active{background:var(--accent-muted);color:var(--accent);border-color:#6366f14d}.math-keyboard{max-height:0;overflow:hidden;transition:max-height .3s cubic-bezier(.4,0,.2,1),opacity .2s ease,padding .3s ease;opacity:0;padding:0 8px;border-top:1px solid transparent}.math-keyboard.open{max-height:400px;opacity:1;padding:8px;border-top-color:var(--surface-border)}.math-kb-group{margin-bottom:6px}.math-kb-group:last-child{margin-bottom:0}.math-kb-label{display:block;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted);margin-bottom:4px;padding-left:2px;opacity:.7}.math-kb-keys{display:flex;flex-wrap:wrap;gap:4px}.math-kb-btn{min-width:36px;height:32px;padding:0 8px;display:flex;align-items:center;justify-content:center;background:var(--bg-tertiary);border:1px solid var(--surface-border);border-radius:var(--radius-sm);color:var(--text-primary);font-family:JetBrains Mono,monospace;font-size:13px;font-weight:500;cursor:pointer;transition:all var(--transition-fast);-webkit-user-select:none;user-select:none}.math-kb-btn:hover{background:var(--accent-muted);border-color:#6366f166;color:var(--accent);box-shadow:0 0 8px #6366f126;transform:translateY(-1px)}.math-kb-btn:active{transform:translateY(0);box-shadow:none;background:var(--accent);color:#fff}.panel-section{border-top:1px solid var(--surface-border);padding:8px}.section-header{display:flex;align-items:center;justify-content:space-between;padding:4px 4px 8px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted)}.slider-item{display:flex;align-items:center;gap:8px;padding:6px 8px;background:var(--bg-tertiary);border-radius:var(--radius-sm);margin-bottom:4px}.slider-name{font-family:JetBrains Mono,monospace;font-size:13px;font-weight:600;color:var(--accent);min-width:20px}.slider-range{flex:1;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:4px;background:var(--bg-elevated);border-radius:2px;outline:none}.slider-range::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;background:var(--accent);border-radius:50%;cursor:pointer;box-shadow:0 0 6px var(--accent-glow);transition:transform .1s}.slider-range::-webkit-slider-thumb:hover{transform:scale(1.2)}.slider-value{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--text-secondary);min-width:40px;text-align:right}.slider-animate{width:22px;height:22px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:4px;color:var(--text-muted);cursor:pointer;transition:all var(--transition-fast)}.slider-animate:hover{background:var(--accent-muted);color:var(--accent)}.slider-animate.playing{color:var(--accent)}.modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#0009;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:1000;display:flex;align-items:flex-start;justify-content:center;padding-top:15vh}.cmd-modal{width:560px;background:var(--bg-secondary);border:1px solid var(--surface-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg),0 0 60px #6366f11a;overflow:hidden;animation:modalIn .15s ease}@keyframes modalIn{0%{transform:scale(.95) translateY(-10px);opacity:0}to{transform:scale(1) translateY(0);opacity:1}}.cmd-search{display:flex;align-items:center;gap:12px;padding:14px 16px;border-bottom:1px solid var(--surface-border)}.cmd-search input{flex:1;background:transparent;border:none;outline:none;font-size:15px;color:var(--text-primary);font-family:Inter,sans-serif}.cmd-search input::placeholder{color:var(--text-muted)}.cmd-results{max-height:360px;overflow-y:auto;padding:6px}.cmd-item{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:var(--radius-sm);cursor:pointer;transition:background var(--transition-fast)}.cmd-item:hover,.cmd-item.selected{background:var(--bg-hover)}.cmd-item-icon{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:var(--bg-tertiary);border-radius:var(--radius-sm);color:var(--text-secondary);flex-shrink:0}.cmd-item-text{flex:1}.cmd-item-title{font-size:13px;font-weight:500;color:var(--text-primary)}.cmd-item-desc{font-size:11px;color:var(--text-muted);margin-top:1px}.cmd-item-shortcut{font-family:Inter,sans-serif;font-size:11px;padding:2px 6px;background:var(--bg-tertiary);border:1px solid var(--surface-border);border-radius:4px;color:var(--text-muted)}.dialog-modal{width:380px;background:var(--bg-secondary);border:1px solid var(--surface-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);padding:24px;animation:modalIn .15s ease}.dialog-modal h3{font-size:16px;font-weight:600;margin-bottom:20px}.dialog-field{margin-bottom:12px}.dialog-field label{display:block;font-size:12px;font-weight:500;color:var(--text-secondary);margin-bottom:6px}.dialog-field input{width:100%;padding:8px 12px;background:var(--bg-tertiary);border:1px solid var(--surface-border);border-radius:var(--radius-sm);color:var(--text-primary);font-family:JetBrains Mono,monospace;font-size:14px;outline:none;transition:border-color var(--transition-fast)}.dialog-field input:focus{border-color:var(--accent)}.dialog-row{display:flex;gap:12px}.dialog-row .dialog-field{flex:1}.dialog-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:20px}.btn-primary{padding:8px 20px;background:var(--accent);border:none;border-radius:var(--radius-sm);color:#fff;font-size:13px;font-weight:600;cursor:pointer;transition:all var(--transition-fast)}.btn-primary:hover{background:var(--accent-hover);box-shadow:var(--shadow-glow)}.btn-secondary{padding:8px 20px;background:var(--bg-tertiary);border:1px solid var(--surface-border);border-radius:var(--radius-sm);color:var(--text-secondary);font-size:13px;font-weight:500;cursor:pointer;transition:all var(--transition-fast)}.btn-secondary:hover{background:var(--bg-hover);color:var(--text-primary)}.empty-state{display:flex;align-items:center;justify-content:center;height:100px;color:var(--text-muted);font-size:13px}@keyframes fadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.expr-item{animation:fadeIn .2s ease}.selection-rect{position:absolute;border:1px solid var(--accent);background:#6366f11a;pointer-events:none;z-index:5}#canvas-container[data-tool=pointer]{cursor:default}#canvas-container[data-tool=point],#canvas-container[data-tool=line],#canvas-container[data-tool=segment],#canvas-container[data-tool=circle],#canvas-container[data-tool=polygon]{cursor:crosshair}#canvas-container[data-tool=function]{cursor:text}#canvas-container[data-tool=slider],#canvas-container[data-tool=measure]{cursor:crosshair}#canvas-container[data-tool=text]{cursor:text}#canvas-container[data-tool=midpoint],#canvas-container[data-tool=perpendicular],#canvas-container[data-tool=parallel],#canvas-container[data-tool=intersection],#canvas-container[data-tool=vector],#canvas-container[data-tool=arc]{cursor:crosshair}#canvas-container.dragging{cursor:grabbing}#canvas-container.panning{cursor:grab}.context-menu{position:fixed;z-index:10000;min-width:180px;background:var(--bg-elevated);border:1px solid var(--surface-border);border-radius:8px;padding:4px 0;box-shadow:0 8px 32px #00000080;font-family:Inter,sans-serif;font-size:13px;animation:ctx-fade-in .12s ease}@keyframes ctx-fade-in{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}.context-menu-item{padding:7px 14px;color:var(--text-primary);cursor:pointer;transition:background .1s;white-space:nowrap}.context-menu-item:first-child{color:var(--text-secondary);font-size:11px;font-weight:600;cursor:default;padding:5px 14px}.context-menu-item:hover{background:var(--accent-muted)}.context-menu-item:first-child:hover{background:transparent}.context-menu-separator{height:1px;background:var(--surface-border);margin:4px 8px}.autocomplete-dropdown{position:absolute;bottom:100%;left:0;right:0;max-height:200px;overflow-y:auto;background:var(--bg-elevated);border:1px solid var(--surface-border);border-radius:8px 8px 0 0;box-shadow:0 -4px 16px #0000004d;z-index:100;font-family:JetBrains Mono,monospace;font-size:12px}.autocomplete-item{padding:6px 12px;color:var(--text-primary);cursor:pointer;display:flex;align-items:center;gap:8px;transition:background .1s}.autocomplete-item:hover,.autocomplete-item.active{background:var(--accent-muted)}.autocomplete-item .ac-name{font-weight:600;color:var(--text-accent)}.autocomplete-item .ac-category{margin-left:auto;font-size:10px;color:var(--text-muted);text-transform:uppercase}
