:root{--ribbon-h: 72px;--ribbon-btn-w: 46px;--ribbon-btn-h: 30px;--ribbon-btn-gap: 2px;--ribbon-icon-size: 14px;--panel-w: 220px;--cmd-h: 70px;--bg-deep: #1a1a2e;--bg-dark: #1e1e30;--bg-panel: #252538;--bg-btn: #2e2e44;--bg-hover: #3a3a55;--bg-active: #5a3ec8;--text: #e0e0f0;--text-dim: #8888aa;--text-bright: #ffffff;--accent: #7c5cfc;--accent-dim: #5a3ec8;--constr-color: #aa66ff;--dim-color: #ff8844;--select-color: #ffcc44;--danger: #e55555;--success: #55cc88;--border: #3a3a55;--font: "Segoe UI", system-ui, sans-serif;--mono: "Consolas", "Courier New", monospace}*{margin:0;padding:0;box-sizing:border-box}html,body{width:100%;height:100%;overflow:hidden;background:var(--bg-deep);color:var(--text);font-family:var(--font);font-size:13px}#app{display:flex;flex-direction:column;width:100%;height:100%}.ribbon{display:flex;align-items:stretch;gap:0;height:var(--ribbon-h);background:var(--bg-panel);border-bottom:1px solid var(--border);flex-shrink:0;overflow-x:auto;padding:0 4px}.ribbon-section{display:flex;flex-direction:column;align-items:center;padding:2px 6px;border-right:1px solid var(--border);min-width:fit-content}.ribbon-section:last-child{border-right:none}.logo-section{border-right:1px solid var(--border);padding:2px 8px;justify-content:center}.section-label{font-size:10px;color:var(--text-dim);text-align:center;line-height:1;white-space:nowrap;margin-bottom:2px;height:12px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.constr-label{color:var(--constr-color)}.section-btns{display:flex;gap:1px}.ribbon-btn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;width:var(--ribbon-btn-w);height:var(--ribbon-btn-h);border:1px solid transparent;border-radius:3px;background:transparent;color:var(--text-dim);cursor:pointer;transition:all .1s;flex-shrink:0;padding:1px;box-sizing:border-box}.ribbon-btn span{font-size:var(--ribbon-icon-size);line-height:1;height:var(--ribbon-icon-size);width:var(--ribbon-icon-size);display:flex;align-items:center;justify-content:center;overflow:hidden;flex-shrink:0}.ribbon-btn svg{height:var(--ribbon-icon-size);width:var(--ribbon-icon-size);flex-shrink:0}.ribbon-btn small{font-size:9px;line-height:1;opacity:.85;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(var(--ribbon-btn-w) - 4px)}.ribbon-btn:hover{background:var(--bg-hover);color:var(--text)}.ribbon-btn.active{background:var(--bg-active);color:#fff;border-color:var(--accent)}.ribbon-btn.disabled{opacity:.35;cursor:not-allowed}.ribbon-tabs-container{display:flex;flex-direction:column;height:var(--ribbon-h);background:var(--bg-panel);border-bottom:1px solid var(--border);flex-shrink:0}.ribbon-tabs-header{display:flex;align-items:center;gap:0;height:24px;background:var(--bg-dark);border-bottom:1px solid var(--border);padding:0 4px 0 64px;flex-shrink:0}.ribbon-tab{display:flex;align-items:center;justify-content:center;height:100%;padding:0 10px;border:none;background:transparent;color:var(--text-dim);font-size:11px;cursor:pointer;white-space:nowrap;transition:all .08s}.ribbon-tab:hover{background:var(--bg-hover);color:var(--text)}.ribbon-tab.active{background:var(--bg-panel);color:var(--text-bright);border-top:2px solid var(--accent);font-weight:600}.logo-tab{width:36px;padding:0;font-size:16px;color:var(--text-bright);border-right:1px solid var(--border)}.ribbon-tab-content{display:flex;align-items:stretch;flex:1;overflow-x:auto;padding:1px 4px 1px 64px;gap:0;position:relative}.ribbon-tab-content.can-scroll-right:after{content:"›";position:absolute;right:2px;top:50%;transform:translateY(-50%);width:16px;height:28px;display:flex;align-items:center;justify-content:center;font-size:18px;color:var(--text-dim);background:linear-gradient(to right,transparent,var(--bg-card) 40%);border-radius:3px 0 0 3px;pointer-events:none;text-shadow:0 0 4px var(--bg-card)}.ribbon-tab-content::-webkit-scrollbar{height:4px}.ribbon-tab-content::-webkit-scrollbar-track{background:transparent}.ribbon-tab-content::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.ribbon-tab-content::-webkit-scrollbar-thumb:hover{background:var(--text-dim)}.ribbon-tab-content .ribbon-section{display:flex;flex-direction:column;align-items:center;padding:1px 8px;border-right:1px solid var(--border);justify-content:flex-end;flex-shrink:0}.ribbon-tab-content .ribbon-section:last-child{border-right:none}.ribbon-tab-content .section-btns{display:grid;grid-template-rows:repeat(1,var(--ribbon-btn-h));grid-template-columns:repeat(var(--grid-cols, 1),var(--ribbon-btn-w));gap:var(--ribbon-btn-gap);align-items:start;justify-items:center}.ribbon-tab-content .unit-selector{background:var(--bg-btn);color:var(--text);border:1px solid var(--border);border-radius:3px;padding:3px 6px;font-size:11px;min-width:80px;cursor:pointer}.main-area{flex:1;display:flex;overflow:hidden}.canvas-container{flex:1;position:relative;overflow:hidden;background:var(--bg-dark)}.main-canvas{display:block;width:100%;height:100%;cursor:default}.floating-hint{position:absolute;bottom:10px;left:50%;transform:translate(-50%);background:#000000bf;color:var(--text-dim);padding:3px 14px;border-radius:10px;font-size:11px;font-family:var(--mono);pointer-events:none;white-space:nowrap}.wasm-status{position:absolute;top:10px;right:10px;background:#000000b3;color:var(--text-dim);padding:3px 10px;border-radius:8px;font-size:10px;font-family:var(--mono);pointer-events:none}.wasm-status.ready{color:var(--success);border:1px solid var(--success)}.wasm-status.fallback{color:var(--dim-color);border:1px solid var(--dim-color)}.dyn-input-box{position:absolute;background:#1e1e32f5;border:1px solid #5566ff;border-radius:4px;padding:4px;z-index:100;pointer-events:auto;box-shadow:0 4px 12px #00000080;min-width:130px}.dyn-input-box.hidden{display:none}.dyn-input-box.menu-open{display:none!important}.dyn-field-row{display:none;align-items:center;height:24px;margin:2px 0}.dyn-field-row.active{display:flex}.dyn-field-label{color:#88a;font-size:11px;font-family:var(--mono);width:38px;flex-shrink:0;padding-left:4px}.dyn-field-row.active .dyn-field-label{color:#fc4}.dyn-field-input{background:transparent;border:none;border-bottom:1px solid transparent;color:#fff;font-size:12px;font-family:var(--mono);width:70px;outline:none;padding:2px 4px;text-align:right}.dyn-field-row.active .dyn-field-input{border-bottom-color:#fc4;color:#fff}.dyn-field-input::placeholder{color:#557}.dyn-field-suffix{color:#88a;font-size:11px;font-family:var(--mono);width:12px;text-align:left;padding-left:2px}.dyn-hint{color:#557;font-size:9px;font-family:var(--mono);text-align:center;margin-top:2px;padding-top:2px;border-top:1px solid #333355}.context-menu{position:fixed;background:#141423fa;border:1px solid #5566ff;border-radius:4px;padding:4px 0;z-index:99999;min-width:160px;max-height:calc(100vh - 16px);overflow-y:auto;box-shadow:0 6px 24px #000000b3,0 0 1px #5566ff4d;pointer-events:auto;-webkit-user-select:none;user-select:none}.context-menu.hidden{display:none}.context-menu-item{display:flex;align-items:center;height:28px;padding:0 10px 0 8px;cursor:pointer;transition:background .12s ease}.context-menu-item:hover{background:#7c5cfc40}.context-menu-item.disabled{opacity:.4;cursor:default}.context-menu-icon{width:22px;text-align:center;color:#fc4;font-size:12px;flex-shrink:0}.context-menu-label{flex:1;color:#e0e0f0;font-size:12px}.context-menu-shortcut{color:#668;font-size:10px;font-family:var(--mono);margin-left:12px}.context-menu-separator{height:1px;background:#335;margin:4px 0}.right-panel{width:var(--panel-w);display:flex;flex-direction:column;background:var(--bg-panel);border-left:1px solid var(--border);flex-shrink:0;overflow:hidden}.panel-section{padding:6px 8px}.panel-grow{flex:1;overflow-y:auto}.panel-title{font-size:11px;font-weight:600;color:var(--text-dim);padding:4px 0;display:flex;align-items:center;gap:6px;text-transform:uppercase;letter-spacing:.5px}.badge{font-size:10px;background:var(--bg-btn);padding:1px 6px;border-radius:8px;color:var(--text-dim)}.panel-divider{height:1px;background:var(--border);margin:2px 8px}.prop-list{font-size:12px}.prop-empty{color:var(--text-dim);padding:8px 4px;font-style:italic;font-size:11px}.fill-palette{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;padding:6px 4px}.fill-swatch{width:22px;height:22px;border-radius:3px;border:2px solid transparent;cursor:pointer;padding:0;transition:transform .1s,border-color .1s}.fill-swatch:hover{transform:scale(1.15)}.fill-swatch.active{border-color:#fff;box-shadow:0 0 0 1px var(--accent)}.fill-picker{width:22px;height:22px;border:2px solid var(--border);border-radius:3px;cursor:pointer;padding:0;background:none}.fill-pattern-row,.fill-color-row{margin-bottom:8px}.fill-pattern-label{font-size:11px;color:var(--text-dim);margin-bottom:4px;padding:0 4px}.fill-pattern-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:4px;padding:4px}.fill-pattern-btn{display:flex;align-items:center;justify-content:center;height:32px;border:1px solid var(--border);border-radius:3px;background:var(--bg-btn);color:var(--text);cursor:pointer;padding:0;transition:background .1s,border-color .1s}.fill-pattern-btn:hover{background:var(--bg-hover, #3a3a5c);border-color:var(--accent)}.fill-pattern-btn.active{background:var(--accent);border-color:var(--accent);color:#fff}.fill-pattern-btn .pattern-icon{font-size:16px;font-weight:700;line-height:1}.fill-param-row{align-items:center;gap:6px;padding:4px}.fill-param-row .key{min-width:32px;font-size:11px}.fill-input{flex:1;min-width:0;height:22px;padding:2px 6px;border:1px solid var(--border);border-radius:3px;background:var(--bg, #1e1e30);color:var(--text);font-size:12px;font-family:monospace}.fill-input:focus{outline:none;border-color:var(--accent)}.fill-param-row .unit{font-size:11px;color:var(--text-dim);min-width:12px}.prop-row{display:flex;justify-content:space-between;padding:3px 4px;border-radius:3px;transition:background .1s}.prop-row:hover{background:var(--bg-btn)}.prop-row .key{color:var(--text-dim)}.prop-row .val{color:var(--text);font-family:var(--mono);font-size:11px}.constr-item{display:flex;align-items:center;gap:6px;padding:3px 4px;border-radius:3px;cursor:pointer;transition:all .1s;font-size:12px}.constr-item:hover{background:var(--bg-btn)}.constr-item .ci-icon{width:18px;text-align:center;color:var(--constr-color);font-size:13px}.constr-item .ci-label{flex:1;color:var(--text);font-size:11px}.constr-item .ci-val{font-family:var(--mono);font-size:10px;color:var(--dim-color);cursor:pointer;padding:1px 4px;border-radius:2px}.constr-item .ci-val:hover{background:var(--bg-hover);color:var(--select-color)}.constr-item .ci-del{color:var(--text-dim);cursor:pointer;font-size:10px;opacity:0;transition:opacity .1s}.constr-item:hover .ci-del{opacity:1}.constr-item .ci-del:hover{color:var(--danger)}.cmd-window{height:var(--cmd-h);display:flex;flex-direction:column;background:var(--bg-panel);border-top:1px solid var(--border);font-family:var(--mono);font-size:12px;flex-shrink:0}.cmd-log{flex:1;min-height:0;overflow-y:auto;padding:3px 8px;display:flex;flex-direction:column;gap:1px}.cmd-entry{color:var(--text-dim);line-height:1.3;white-space:pre-wrap;word-break:break-all;font-size:11px}.cmd-entry.cmd{color:var(--accent)}.cmd-entry.ok{color:var(--success)}.cmd-entry.err{color:var(--danger)}.cmd-entry.info{color:var(--text-dim)}.cmd-input-row{display:flex;align-items:center;gap:6px;height:28px;padding:0 8px;border-top:1px solid var(--border);flex-shrink:0}.cmd-prompt{color:var(--accent);font-size:11px;white-space:nowrap}.cmd-input{flex:1;height:22px;padding:0 6px;background:transparent;border:none;color:var(--text);font-family:var(--mono);font-size:12px;outline:none}.cmd-input::placeholder{color:var(--text-dim)}.coord-display{color:var(--text-dim);font-size:11px;min-width:150px;text-align:right;padding:0 4px;border-left:1px solid var(--border);font-family:var(--mono)}.cmd-log::-webkit-scrollbar,.prop-list::-webkit-scrollbar{width:5px}.cmd-log::-webkit-scrollbar-track,.prop-list::-webkit-scrollbar-track{background:transparent}.cmd-log::-webkit-scrollbar-thumb,.prop-list::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.snap-toolbar{display:flex;align-items:center;gap:6px;height:32px;background:var(--bg-panel);border-top:1px solid var(--border);padding:0 8px;flex-shrink:0;overflow-x:auto}.snap-title{font-size:10px;color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px;white-space:nowrap;padding-right:4px;border-right:1px solid var(--border);margin-right:4px}.snap-btns{display:flex;gap:2px}.snap-btn{display:flex;align-items:center;gap:3px;height:24px;padding:0 8px;border:1px solid transparent;border-radius:3px;background:transparent;color:var(--text-dim);cursor:pointer;transition:all .08s;font-family:var(--font);font-size:11px;white-space:nowrap}.snap-btn .snap-icon{font-size:13px;line-height:1}.snap-btn .snap-label{font-size:10px;line-height:1}.snap-btn:hover{background:var(--bg-hover);color:var(--text)}.snap-btn.active{background:var(--bg-active);color:#fff;border-color:var(--accent)}.unit-selector{height:24px;padding:0 6px;border:1px solid var(--border);border-radius:3px;background:var(--bg-btn);color:var(--text);font-family:var(--font);font-size:11px;cursor:pointer;outline:none;min-width:78px}.unit-selector:hover{background:var(--bg-hover);border-color:var(--accent-dim)}.unit-selector:focus{border-color:var(--accent)}.unit-selector option{background:var(--bg-panel);color:var(--text)}.snap-btn-all.active{background:#2d5a2d;border-color:#4caf50;color:#a5d6a7}.snap-btn-none.active{background:#5a2d2d;border-color:#f44336;color:#ef9a9a}.snap-config-group{display:flex;align-items:center;gap:1px}.snap-config-input{width:42px;height:24px;padding:0 4px;border:1px solid var(--border);border-radius:3px;background:var(--bg-input);color:var(--text);font-family:var(--font);font-size:11px;text-align:center;outline:none;transition:border-color .1s}.snap-config-input:focus{border-color:var(--accent)}.snap-config-input::-webkit-inner-spin-button,.snap-config-input::-webkit-outer-spin-button{opacity:.6;height:18px}canvas{cursor:crosshair}canvas[style*="cursor: snap"]{cursor:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 20 20'><circle cx='10' cy='10' r='7' fill='none' stroke='%2300d4ff' stroke-width='1.5'/><circle cx='10' cy='10' r='2' fill='%2300d4ff'/><line x1='10' y1='2' x2='10' y2='6' stroke='%2300d4ff' stroke-width='1'/><line x1='10' y1='14' x2='10' y2='18' stroke='%2300d4ff' stroke-width='1'/><line x1='2' y1='10' x2='6' y2='10' stroke='%2300d4ff' stroke-width='1'/><line x1='14' y1='10' x2='18' y2='10' stroke='%2300d4ff' stroke-width='1'/></svg>") 10 10,crosshair}.dyninput-overlay{position:fixed;display:flex;gap:2px;z-index:1000;pointer-events:auto;background:#282837eb;border:1px solid #555;border-radius:4px;padding:3px 4px;box-shadow:0 2px 8px #0006;font-family:var(--font);white-space:nowrap}.dyninput-field{display:flex;align-items:center;gap:2px;padding:1px 3px;border-radius:2px;transition:background .1s}.dyninput-field.focused{background:#00b4ff26}.dyninput-label{font-size:10px;color:#999;min-width:24px;text-align:right}.dyninput-value{width:56px;height:18px;padding:0 4px;border:1px solid transparent;border-radius:2px;background:#ffffff0f;color:#e0e0f0;font-family:var(--font);font-size:11px;text-align:left;outline:none}.dyninput-field.focused .dyninput-value{border-color:#00b4ff;background:#00b4ff1a}.dyninput-value:focus{border-color:#00b4ff}.whiteboard-panel{position:absolute;top:12px;right:12px;width:200px;max-height:calc(100% - 24px);background:#1e1e2ef5;border:1px solid var(--border);border-radius:8px;padding:10px;z-index:120;box-shadow:0 6px 24px #00000080;display:flex;flex-direction:column;gap:10px;-webkit-user-select:none;user-select:none;pointer-events:auto;overflow-y:auto}.whiteboard-panel-header{display:flex;align-items:center;justify-content:space-between;padding-bottom:6px;border-bottom:1px solid var(--border)}.whiteboard-panel-title{font-size:13px;font-weight:600;color:var(--text-bright)}.whiteboard-panel-close{width:22px;height:22px;border:none;border-radius:4px;background:transparent;color:var(--text-dim);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:12px}.whiteboard-panel-close:hover{background:var(--bg-hover);color:var(--text-bright)}.whiteboard-panel-section{display:flex;flex-direction:column;gap:6px}.whiteboard-panel-label{font-size:10px;color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px}.whiteboard-pen-types{display:flex;flex-wrap:wrap;gap:4px}.ql-font-microsoft-yahei{font-family:Microsoft YaHei,sans-serif}.ql-font-simsun{font-family:SimSun,Songti SC,serif}.ql-font-simhei{font-family:SimHei,Heiti SC,sans-serif}.ql-font-simkai{font-family:KaiTi,Kaiti SC,serif}.ql-font-arial{font-family:Arial,sans-serif}.ql-font-times-new-roman{font-family:Times New Roman,Times,serif}.ql-font-courier-new{font-family:Courier New,Courier,monospace}.ql-size-12px{font-size:12px}.ql-size-14px{font-size:14px}.ql-size-16px{font-size:16px}.ql-size-18px{font-size:18px}.ql-size-20px{font-size:20px}.ql-size-24px{font-size:24px}.ql-size-28px{font-size:28px}.ql-size-32px{font-size:32px}.ql-size-36px{font-size:36px}.ql-toolbar .ql-undo:after{content:"撤销";font-size:12px}.ql-toolbar .ql-redo:after{content:"重做";font-size:12px}.ql-toolbar .ql-table:after{content:"表格";font-size:12px}.ql-toolbar .ql-formula:after{content:"公式";font-size:12px}.ql-toolbar .ql-script[value=sub]:after{content:"下标";font-size:12px}.ql-toolbar .ql-script[value=super]:after{content:"上标";font-size:12px}.ql-toolbar .ql-code:after{content:"代码";font-size:12px}.ql-toolbar button.ql-undo,.ql-toolbar button.ql-redo,.ql-toolbar button.ql-table,.ql-toolbar button.ql-formula,.ql-toolbar button.ql-script,.ql-toolbar button.ql-code{width:auto;min-width:40px;height:auto;min-height:24px;padding:2px 4px;line-height:1.2}.ql-toolbar{display:flex;white-space:normal!important;flex-wrap:wrap;row-gap:4px;column-gap:4px;padding:6px 8px;align-items:center;background:#f5f5f5;border-bottom:1px solid #ddd}.ql-toolbar .ql-formats{display:inline-flex;flex-wrap:wrap;align-items:center;gap:1px;margin-right:4px}.ql-toolbar .ql-formats:last-child{margin-right:0}.whiteboard-pen-btn{flex:1 0 40px;height:32px;min-width:36px;border:1px solid var(--border);border-radius:6px;background:var(--bg-btn);color:var(--text);cursor:pointer;font-size:14px;display:flex;align-items:center;justify-content:center;transition:all .1s}.whiteboard-pen-btn:hover{background:var(--bg-hover);border-color:var(--accent)}.whiteboard-pen-btn.active{background:var(--bg-active);border-color:var(--accent);color:#fff}.whiteboard-palette{display:grid;grid-template-columns:repeat(8,1fr);gap:4px}.whiteboard-color-btn{width:20px;height:20px;border-radius:50%;border:2px solid transparent;cursor:pointer;padding:0;transition:transform .1s,border-color .1s}.whiteboard-color-btn:hover{transform:scale(1.12)}.whiteboard-color-btn.active{border-color:#fff;box-shadow:0 0 0 1px var(--accent)}.whiteboard-color-picker-label{display:flex;align-items:center;gap:6px;margin-top:6px;font-size:11px;color:var(--text-dim);cursor:pointer}.whiteboard-color-picker{width:24px;height:24px;padding:0;border:1px solid var(--border);border-radius:4px;background:transparent;cursor:pointer}.whiteboard-color-picker::-webkit-color-swatch-wrapper{padding:0}.whiteboard-color-picker::-webkit-color-swatch{border:none;border-radius:3px}.whiteboard-pen-preview{height:32px;background:#ffffff0d;border:1px dashed var(--border);border-radius:6px;display:flex;align-items:center;justify-content:center;padding:0 10px}.whiteboard-pen-preview-stroke{width:100%;transition:all .1s}.whiteboard-pen-preview-stroke.laser{border-radius:999px;box-shadow:0 0 8px 2px currentColor}.whiteboard-pen-preview-stroke.fountain,.whiteboard-pen-preview-stroke.ballpoint{border-radius:999px}.whiteboard-pen-preview-stroke.pencil{background-image:repeating-linear-gradient(90deg,transparent,transparent 1px,rgba(255,255,255,.15) 1px,rgba(255,255,255,.15) 3px);border-radius:999px}.whiteboard-pen-preview-stroke.chalk{background-image:repeating-linear-gradient(90deg,transparent,transparent 1px,rgba(255,255,255,.35) 1px,rgba(255,255,255,.35) 4px);border-radius:999px;box-shadow:0 0 3px #fff6}.whiteboard-pen-preview-stroke.marker{border-radius:4px;box-shadow:0 0 4px 1px currentColor}.whiteboard-pen-preview-stroke.highlighter{border-radius:2px}.whiteboard-width-slider{width:100%;accent-color:var(--accent)}.whiteboard-panel-actions{display:flex;gap:6px;padding-top:6px;border-top:1px solid var(--border)}.whiteboard-action-btn{flex:1;height:30px;border:1px solid var(--border);border-radius:6px;background:var(--bg-btn);color:var(--text);cursor:pointer;font-size:11px;display:flex;align-items:center;justify-content:center;gap:4px;transition:all .1s}.whiteboard-action-btn:hover{background:var(--bg-hover);border-color:var(--accent)}.whiteboard-action-btn.active{background:var(--bg-active);border-color:var(--accent);color:#fff}.whiteboard-action-btn.danger:hover{background:#e5555533;border-color:var(--danger);color:var(--danger)}.side-bar{display:flex;flex-direction:column;background:var(--bg-panel);border-left:1px solid var(--border);position:relative;overflow:hidden;-webkit-user-select:none;user-select:none}.side-bar-divider{position:absolute;top:0;left:0;width:4px;height:100%;cursor:col-resize;background:transparent;z-index:10;transition:background .1s}.side-bar-divider:hover,.side-bar-divider:active{background:var(--accent)}.side-bar-header{display:flex;align-items:stretch;border-bottom:1px solid var(--border);background:var(--bg-panel);flex-shrink:0}.side-bar-tabs{display:flex;flex:1;overflow:hidden}.side-bar-tab{flex:1;padding:8px 4px;font-size:11px;color:var(--text-dim);background:transparent;border:none;border-bottom:2px solid transparent;cursor:pointer;transition:color .1s,border-color .1s,background .1s;white-space:nowrap}.side-bar-tab:hover{color:var(--text);background:var(--bg-btn)}.side-bar-tab.active{color:var(--accent);border-bottom-color:var(--accent);background:var(--bg-btn)}.side-bar-collapse{padding:0 10px;font-size:14px;color:var(--text-dim);background:transparent;border:none;border-left:1px solid var(--border);cursor:pointer;transition:color .1s,background .1s}.side-bar-collapse:hover{color:var(--danger);background:var(--bg-btn)}.side-bar-content{flex:1;overflow-y:auto;overflow-x:hidden}.side-bar-content::-webkit-scrollbar{width:6px}.side-bar-content::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.side-bar-content::-webkit-scrollbar-thumb:hover{background:var(--text-dim)}.side-bar-tab-body{display:flex;flex-direction:column;min-height:100%}.side-bar-tab-pane{display:none}.side-bar-tab-pane.active{display:flex;flex-direction:column;min-height:100%}.side-bar-empty{padding:24px 12px;font-size:12px;color:var(--text-dim);text-align:center;font-style:italic;line-height:1.6}.side-bar-collapsed-btn{position:fixed;top:50%;right:0;transform:translateY(-50%);width:28px;height:60px;background:var(--bg-panel);border:1px solid var(--border);border-right:none;border-radius:6px 0 0 6px;color:var(--text-dim);font-size:16px;cursor:pointer;z-index:110;box-shadow:-2px 0 8px #0000004d;transition:color .1s,background .1s}.side-bar-collapsed-btn:hover{color:var(--accent);background:var(--bg-btn)}.whiteboard-panel{position:static;width:auto;max-height:none;background:transparent;border:none;border-radius:0;padding:0;z-index:auto;box-shadow:none}.fplot-panel{display:flex;flex-direction:column;background:var(--bg-panel);border-right:1px solid var(--border);position:relative;overflow:hidden;-webkit-user-select:none;user-select:none}.fplot-panel-divider{position:absolute;top:0;right:0;width:4px;height:100%;cursor:col-resize;background:transparent;z-index:10;transition:background .1s}.fplot-panel-divider:hover,.fplot-panel-divider:active{background:var(--accent)}.fplot-panel-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--border);background:var(--bg-panel);flex-shrink:0}.fplot-panel-title{font-size:13px;font-weight:600;color:var(--text-bright)}.fplot-panel-collapse{padding:4px 8px;font-size:14px;color:var(--text-dim);background:transparent;border:none;cursor:pointer;transition:color .1s,background .1s;border-radius:4px}.fplot-panel-collapse:hover{color:var(--danger);background:var(--bg-btn)}.fplot-panel-content{flex:1;overflow-y:auto;overflow-x:hidden;padding:12px;display:flex;flex-direction:column;gap:12px}.fplot-panel-content::-webkit-scrollbar{width:6px}.fplot-panel-content::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.fplot-panel-content::-webkit-scrollbar-thumb:hover{background:var(--text-dim)}.fplot-section{display:flex;flex-direction:column;gap:6px}.fplot-label{font-size:11px;color:var(--text-dim);font-weight:500;letter-spacing:.3px}.side-bar-tab-pane math-field,.fplot-panel math-field{display:block;border:1px solid var(--border)!important;border-radius:6px!important;padding:8px 10px!important;font-size:16px!important;background:var(--bg-dark)!important;color:var(--text)!important;--primary: var(--accent);--selection-background-color: rgba(124, 92, 252, .3);--caret-color: var(--accent);--placeholder-color: var(--text-dim);--placeholder-opacity: .6;--smart-fence-color: var(--text-dim);outline:none!important;transition:border-color .1s}.side-bar-tab-pane math-field:focus,.side-bar-tab-pane math-field:focus-within,.fplot-panel math-field:focus,.fplot-panel math-field:focus-within{border-color:var(--accent)!important}.fplot-classification-badge{display:flex;align-items:center;gap:6px;padding:6px 10px;background:#55cc881f;border:1px solid rgba(85,204,136,.4);border-radius:6px;font-size:12px;color:var(--success)}.fplot-badge-icon{font-size:13px}.fplot-badge-text{flex:1;font-weight:500}.fplot-badge-check{font-weight:700}.fplot-error{padding:6px 10px;background:#e555551f;border:1px solid rgba(229,85,85,.4);border-radius:6px;font-size:12px;color:var(--danger);line-height:1.5}.fplot-loading{padding:6px 10px;font-size:12px;color:var(--text-dim);font-style:italic}.fplot-ocr-preview{display:flex;flex-direction:column;gap:4px;padding:8px 10px;background:var(--bg-dark);border:1px solid rgba(85,204,136,.4);border-radius:6px}.fplot-ocr-preview-label{font-size:11px;color:var(--success);font-weight:500}.fplot-ocr-preview-latex{font-family:var(--mono);font-size:12px;color:var(--text);word-break:break-all;line-height:1.5}.fplot-ocr-actions{display:flex;gap:6px}.fplot-paste-hint{font-size:11px;color:var(--text-dim);font-style:italic;margin-top:2px}.fplot-btn{flex:1;padding:7px 12px;font-size:12px;border:1px solid var(--border);border-radius:6px;background:var(--bg-btn);color:var(--text);cursor:pointer;transition:all .1s;white-space:nowrap}.fplot-btn:hover:not(:disabled){background:var(--bg-hover);border-color:var(--text-dim)}.fplot-btn:disabled{opacity:.4;cursor:not-allowed}.fplot-btn-primary{background:#7c5cfc33;border-color:var(--accent);color:var(--accent)}.fplot-btn-primary:hover:not(:disabled){background:#7c5cfc59}.fplot-btn-secondary{background:var(--bg-btn)}.fplot-btn-submit{padding:10px 16px;font-size:14px;font-weight:600;background:var(--accent);border-color:var(--accent);color:var(--text-bright);flex:none;width:100%}.fplot-btn-submit:hover:not(:disabled){background:var(--accent-dim);border-color:var(--accent-dim)}.fplot-handwrite-section{display:flex;flex-direction:column;gap:8px;padding:10px;background:var(--bg-dark);border:1px solid var(--border);border-radius:8px}.fplot-handwrite-area{display:flex;flex-direction:column;align-items:center;gap:8px;position:relative}.fplot-handwrite-canvas{border:1px dashed var(--border);border-radius:6px;background:#fff;cursor:crosshair;touch-action:none;max-width:100%;height:auto}.fplot-handwrite-actions{display:flex;gap:6px;width:100%}.fplot-handwrite-hint{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:12px;color:#88a;pointer-events:none;font-style:italic}.fplot-submit-section{margin-top:4px}.fplot-help-text{font-size:11px;color:var(--text-dim);line-height:1.6;padding:8px 10px;background:var(--bg-dark);border-radius:6px;border:1px solid var(--border)}.fplot-panel-collapsed-btn{position:fixed;top:50%;left:0;transform:translateY(-50%);width:28px;height:60px;background:var(--bg-panel);border:1px solid var(--border);border-left:none;border-radius:0 6px 6px 0;color:var(--accent);font-size:18px;font-weight:700;font-style:italic;cursor:pointer;z-index:110;box-shadow:2px 0 8px #0000004d;transition:color .1s,background .1s}.fplot-panel-collapsed-btn:hover{color:var(--text-bright);background:var(--bg-btn)}
