*,:before,:after{box-sizing:border-box}:root{--background:#f7f8fa;--surface:#fff;--surface-hover:#eff6fd;--surface-active:#1482c81f;--surface-soft:#f7f8fa;--surface-code:#e1e4ea66;--overlay:#1e243373;--text:#1e2433;--text-strong:#0d5f94;--muted:#697386;--text-dim:#c0c6d2;--accent:#1482c8;--accent-2:#0f9d57;--accent-soft:#edf7fd;--accent-border:#add9f3;--warning:#aa7500;--border:#e1e4ea;--border-subtle:#eef0f4;--border-input:#c0c6d2;--border-strong:#c0c6d2;--canvas:#fbfcfd;--grid:#edf0f4;--axis:#c4cad4;--axis-strong:#737d90;--vector:#087bbd;--object-stroke:#1e24332e;--point-ring-hover:#1e24334d;--error:#a03232;--error-soft:#fff7f7;--error-border:#da9b9b;--shadow-modal:0 8px 40px #1e243338;--font-sans:Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono:"JetBrains Mono", "Fira Mono", "Cascadia Code", "SFMono-Regular", Consolas, "Liberation Mono", monospace;color:var(--text);background:var(--background);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-family:var(--font-sans);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{min-width:320px;min-height:100svh;margin:0}:root[data-theme=dark]{--background:#1e2433;--surface:#262e40;--surface-hover:#2c3548;--surface-active:#1482c833;--surface-soft:#232a3c;--surface-code:#2c344a;--overlay:#000000a6;--text:#e1e4ea;--text-strong:#a0d0f4;--muted:#a5adbc;--text-dim:#4e5668;--accent:#55abdf;--accent-2:#41bf82;--accent-soft:#243c50;--accent-border:#3b7599;--warning:#f0b833;--border:#2e3548;--border-subtle:#262e40;--border-input:#3a4258;--border-strong:#4e5668;--canvas:#20283a;--grid:#2a3347;--axis:#475167;--axis-strong:#9aa4b7;--vector:#65b9ea;--object-stroke:#e1e4ea33;--point-ring-hover:#e1e4ea66;--error:#ffb4b4;--error-soft:#402b32;--error-border:#8f5961;--shadow-modal:0 8px 40px #0000008c;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@media (prefers-color-scheme:dark){:root:not([data-theme]),:root[data-theme=system]{--background:#1e2433;--surface:#262e40;--surface-hover:#2c3548;--surface-active:#1482c833;--surface-soft:#232a3c;--surface-code:#2c344a;--overlay:#000000a6;--text:#e1e4ea;--text-strong:#a0d0f4;--muted:#a5adbc;--text-dim:#4e5668;--accent:#55abdf;--accent-2:#41bf82;--accent-soft:#243c50;--accent-border:#3b7599;--warning:#f0b833;--border:#2e3548;--border-subtle:#262e40;--border-input:#3a4258;--border-strong:#4e5668;--canvas:#20283a;--grid:#2a3347;--axis:#475167;--axis-strong:#9aa4b7;--vector:#65b9ea;--object-stroke:#e1e4ea33;--point-ring-hover:#e1e4ea66;--error:#ffb4b4;--error-soft:#402b32;--error-border:#8f5961;--shadow-modal:0 8px 40px #0000008c;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}.app-shell{flex-direction:column;height:100svh;display:flex;overflow:hidden}.app-header{background:color-mix(in srgb, var(--surface) 92%, transparent);border-bottom:1px solid var(--border);align-items:center;gap:14px;min-height:56px;padding:0 22px;display:flex}.app-title{color:var(--text);font-family:var(--font-mono);letter-spacing:.04em;font-size:.95rem;font-weight:750;text-decoration:none}.app-title:hover{color:var(--accent)}.app-title:focus-visible,.add-expression:focus-visible,.history-command:focus-visible,.delete-expression:focus-visible,.algebra-badge:focus-visible,.expression-reference-button:focus-visible,.clear-expressions:focus-visible,.info-dialog-close:focus-visible,.visibility-toggle:focus-visible,.appearance-swatch:focus-visible,.normalize-toggle:focus-visible,.scalar-play-button:focus-visible,.scalar-control-mode-grid button:focus-visible,.scalar-animation-mode-grid button:focus-visible,.viewport-command:focus-visible,.display-settings-button:focus-visible,.settings-select:focus-visible,.settings-number:focus-visible,.appearance-header button:focus-visible,.appearance-colors button:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.algebra-badge{border:1px solid var(--border-strong);font-family:var(--font-mono);letter-spacing:.04em;text-transform:uppercase;color:var(--accent);background:var(--accent-soft);border-color:var(--accent-border);cursor:pointer;border-radius:999px;padding:4px 9px;font-size:.68rem}.algebra-badge:hover{background:color-mix(in srgb, var(--accent-soft) 65%, var(--surface))}.document-import-command{margin-left:auto}.document-file-input{clip-path:inset(50%);width:1px;height:1px;position:fixed;overflow:hidden}.document-command{color:var(--text);background:var(--surface);border:1px solid var(--border-strong);font:.7rem var(--font-mono);cursor:pointer;border-radius:4px;padding:5px 9px}.document-command:hover{color:var(--accent);border-color:var(--accent-border)}.document-command:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.document-diagnostic{color:var(--error);background:var(--error-soft);border-bottom:1px solid var(--error);font:.75rem/1.4 var(--font-mono);padding:8px 16px}.workspace{flex:1;min-height:0;display:flex;overflow:hidden}.expression-panel{background:var(--surface);flex-direction:column;flex-shrink:0;min-height:0;display:flex;overflow:hidden}.expression-toolbar{border-bottom:1px solid var(--border-subtle);flex-shrink:0;align-items:center;gap:4px;min-height:40px;padding:6px 8px;display:flex}.expression-history-controls{align-items:center;gap:4px;display:flex}.history-command{width:30px;height:30px;color:var(--muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:4px;place-items:center;padding:0;font-size:1rem;line-height:1;transition:color .12s,background .12s,border-color .12s;display:grid}.history-command:hover:not(:disabled){color:var(--accent);background:var(--accent-soft);border-color:var(--accent-border)}.history-command:disabled{opacity:.35;cursor:default}.eyebrow{color:var(--accent);font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;margin:0 0 6px;font-size:.68rem;font-weight:700}h1,h2{color:var(--text-strong);letter-spacing:-.025em;margin:0}h1{font-size:1.45rem}h2{font-size:1.15rem}.expression-item{border:0;border-bottom:1px solid var(--border-subtle);background:var(--surface);border-radius:0;flex-shrink:0;align-items:stretch;transition:background .12s,border-color .12s;display:flex;position:relative}.expression-item.is-hidden .expression-body{opacity:.58}.expression-list{flex-direction:column;flex:1;gap:0;min-height:0;padding:0;display:flex;overflow-y:auto}.expression-panel-footer{background:var(--surface);border-top:1px solid var(--border);flex-shrink:0;align-items:stretch;display:flex}.expression-reference-button{min-width:0;color:var(--muted);font:.75rem var(--font-mono);text-align:left;cursor:pointer;background:0 0;border:0;flex:1;align-items:center;gap:8px;padding:9px 16px;transition:color .12s,background .12s;display:flex}.expression-reference-button:hover{color:var(--text-strong);background:var(--surface-hover)}@property --hold-progress{syntax:"<number>";inherits:false;initial-value:0}.clear-expressions{width:24px;height:24px;color:color-mix(in srgb, var(--error) 60%, var(--muted));cursor:pointer;touch-action:none;background:0 0;border:0;border-radius:50%;flex-shrink:0;place-items:center;margin:6px 10px 6px 0;padding:0;font-size:.75rem;line-height:1;transition:color .12s,background .12s;display:grid;position:relative}.clear-expressions:hover:not(:disabled){color:var(--error);background:color-mix(in srgb, var(--error) 10%, transparent)}.clear-expressions:disabled{opacity:.4;cursor:default}.clear-expressions:before{content:"";background:conic-gradient(var(--error) calc(var(--hold-progress) * 360deg), transparent 0);opacity:0;border-radius:50%;position:absolute;inset:0;-webkit-mask:radial-gradient(farthest-side,#0000 calc(100% - 2px),#000 calc(100% - 2px));mask:radial-gradient(farthest-side,#0000 calc(100% - 2px),#000 calc(100% - 2px))}.clear-expressions.is-holding{color:var(--error)}.clear-expressions.is-holding:before{opacity:1;animation:clear-hold var(--hold-duration) linear forwards}@keyframes clear-hold{0%{--hold-progress:0}to{--hold-progress:1}}@media (prefers-reduced-motion:reduce){.clear-expressions.is-holding:before{--hold-progress:1;animation:none}.scalar-play-button,.scalar-animation-mode-grid button{transition:none}}.visually-hidden{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.expression-item:focus-within{background:var(--surface-active)}.expression-item:hover{background:var(--surface-hover)}.expression-item.has-error{box-shadow:inset 3px 0 0 var(--error-border)}.expression-input-row{flex:1;align-items:flex-start;min-width:0;min-height:68px;padding:9px 0 10px 8px;display:flex}.expression-item.is-empty-expression .expression-input-row{min-height:0;padding-top:4px;padding-bottom:4px}.expression-item.is-empty-expression .expression-actions{justify-content:center;height:25px}.expression-actions{flex-direction:column;flex:0 0 34px;align-items:center;gap:10px;width:34px;display:flex}.visibility-toggle,.appearance-swatch{cursor:pointer;background:0 0;border:0;border-radius:4px;flex-shrink:0;place-items:center;width:24px;height:24px;padding:0;transition:color .12s,background .12s;display:grid}.reorder-handle{width:18px;color:var(--muted);cursor:grab;touch-action:none;opacity:0;background:0 0;border:0;flex-shrink:0;justify-content:center;align-self:stretch;align-items:center;padding:0;font-size:.9rem;line-height:1;transition:opacity .1s,color .12s,background .12s;display:flex}.expression-item:hover .reorder-handle,.expression-item:focus-within .reorder-handle,.reorder-handle:focus-visible{opacity:1}.reorder-handle:hover{color:var(--accent);background:var(--surface-active)}body.reordering-items{cursor:grabbing;-webkit-user-select:none;user-select:none}body.reordering-items .reorder-handle{cursor:grabbing;opacity:1}.expression-item.drop-before{box-shadow:inset 0 2px 0 0 var(--accent)}.expression-item.drop-after{box-shadow:inset 0 -2px 0 0 var(--accent)}.expression-action-spacer{flex-shrink:0;width:24px;height:24px}.visibility-toggle{color:var(--muted);font-size:1.05rem;line-height:1}.visibility-toggle:hover{color:var(--accent);background:var(--surface-active)}.appearance-swatch-fill{border:2px solid var(--object-stroke);border-radius:50%;width:18px;height:18px;transition:transform .1s;position:relative}.appearance-swatch:hover .appearance-swatch-fill{transform:scale(1.12)}.expression-status-pastille{border:2px solid var(--object-stroke);border-radius:50%;flex-shrink:0;width:18px;height:18px}.expression-status-pastille.is-empty{background:var(--text-dim)}.expression-status-pastille.is-error{background:var(--error)}.is-hidden .appearance-swatch-fill:after{content:"";background:linear-gradient(to bottom right, transparent 42%, var(--axis-strong) 42%, var(--axis-strong) 58%, transparent 58%), linear-gradient(to bottom left, transparent 42%, var(--axis-strong) 42%, var(--axis-strong) 58%, transparent 58%);border-radius:50%;position:absolute;inset:-3px}.expression-body{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex;position:relative}.delete-expression{width:24px;height:24px;color:var(--muted);cursor:pointer;opacity:0;background:0 0;border:0;flex:0 0 24px;align-self:center;place-items:center;margin:0 5px;padding:0;font-size:1.1rem;transition:opacity .12s,color .12s,background .12s;display:grid}.expression-item:hover .delete-expression,.expression-item:focus-within .delete-expression{opacity:1}.delete-expression:hover{color:var(--text);background:0 0}.expression-source{min-width:0;color:var(--text);font:.875rem/1.5 var(--font-mono);background:0 0;border:0;flex:1;padding:2px 0;display:block}.expression-source::placeholder{color:var(--text-dim)}.has-error .expression-source{color:var(--error)}.expression-editor-row{align-items:center;gap:8px;min-width:0;padding-right:4px;display:flex}.expression-editor-row .expression-source{flex:1;min-width:0}.normalize-control{flex-shrink:0;align-items:center;gap:5px;display:inline-flex}.normalize-toggle{min-height:18px;color:var(--muted);border:1px solid var(--border-input);font:700 .625rem var(--font-mono);cursor:pointer;background:0 0;border-radius:3px;padding:2px 7px;transition:color .12s,background .12s,border-color .12s}.normalize-toggle:hover{color:var(--accent);border-color:var(--accent)}.normalize-toggle.active{color:var(--surface);background:var(--accent);border-color:var(--accent)}.unit-norm-indicator{background:0 0;border-radius:50%;flex:0 0 5px;width:5px;height:5px}.unit-norm-indicator.is-unit{background:var(--accent);box-shadow:0 0 0 1px color-mix(in srgb, var(--accent) 35%, transparent)}.expression-source:focus-visible{outline:none}.position-input-row{align-items:center;gap:10px;margin:6px 8px 0 0;display:flex}.position-prefix{color:var(--muted);font:.625rem var(--font-mono);letter-spacing:.05em;text-transform:uppercase;flex-shrink:0}.position-source{width:auto;min-width:1ch;max-width:calc(100% - 70px);color:var(--muted);border:0;border-bottom:1px solid var(--border-input);font:.75rem/1.4 var(--font-mono);background:0 0;flex:0 auto;padding:2px 0;transition:border-color .12s,color .12s}.position-source::placeholder{color:var(--text-dim)}.position-source:focus-visible{color:var(--text);outline:none}.scalar-play-button{border:1px solid var(--border-input);cursor:pointer;width:24px;height:24px;color:var(--accent-2);background:0 0;border-width:2px;border-radius:50%;justify-content:center;align-items:center;padding:0 0 0 1px;line-height:1;transition:background .12s,border-color .12s,color .12s;display:flex}.scalar-play-button svg{fill:currentColor}.scalar-play-button:hover:not(:disabled,.is-playing){background:var(--surface-soft);border-color:var(--accent-2)}.scalar-play-button.is-playing{background:color-mix(in srgb, var(--accent-2) 13%, transparent);border-color:var(--accent-2);padding:0}.scalar-play-button:disabled{opacity:.35;cursor:default}.scalar-slider-row{align-items:center;gap:6px;padding:2px 8px 4px 0;display:flex}.scalar-slider-row input[type=range]{cursor:pointer;flex:1;min-width:0;min-height:24px;margin:0}.scalar-slider-row input[type=range]:disabled{opacity:.35;cursor:default}.scalar-slider-row>span{min-width:14px;color:var(--muted);font:10px var(--font-mono);text-align:center;flex-shrink:0}.scalar-slider-row small{color:var(--muted);flex-basis:100%;font-size:10px}.scalar-slider-row:has(small){flex-wrap:wrap}.scalar-interval-row{align-items:center;gap:6px;padding:0 8px 6px 0;display:flex}.scalar-interval-label{color:var(--muted);font:10px var(--font-mono);letter-spacing:.05em;text-transform:uppercase;flex-shrink:0}.scalar-interval-row input{width:0;min-width:42px;color:var(--muted);border:0;border-bottom:1px solid var(--border-input);font:11px var(--font-mono);text-align:center;background:0 0;flex:1;padding:2px 4px}.scalar-interval-row input:focus-visible{color:var(--text);border-color:var(--accent);outline:none}.scalar-interval-row input[aria-invalid=true]{color:var(--error);border-color:var(--error-border)}.scalar-control-mode-grid{grid-template-columns:repeat(2,1fr);gap:4px;margin-bottom:4px;display:grid}.scalar-control-mode-grid button{min-height:26px;color:var(--muted);background:var(--surface);border:1px solid var(--border-input);cursor:pointer;border-radius:4px;padding:4px 8px;transition:background .1s,border-color .1s,color .1s}.scalar-control-mode-grid button:hover{color:var(--text);background:var(--surface-hover);border-color:var(--border-strong)}.scalar-control-mode-grid button.active{color:var(--accent);background:var(--surface-active);border-color:var(--accent)}.scalar-animation-mode-grid{grid-template-columns:repeat(3,1fr);gap:4px;margin-bottom:8px;display:grid}.scalar-animation-mode-grid button{min-height:26px;color:var(--muted);background:var(--surface);border:1px solid var(--border-input);cursor:pointer;border-radius:4px;padding:3px 7px;font-size:13px;transition:background .1s,border-color .1s,color .1s}.scalar-animation-mode-icon{color:var(--muted)}.scalar-animation-mode-grid button.active .scalar-animation-mode-icon{color:var(--accent)}.scalar-animation-mode-grid button:hover{color:var(--text);background:var(--surface-hover);border-color:var(--border-strong)}.scalar-animation-mode-grid button.active{color:var(--accent);background:var(--surface-active);border-color:var(--accent)}.scalar-reduced-motion-note{color:var(--muted);margin:0 0 8px;font-size:10px;line-height:1.4}.expression-feedback{min-width:0;color:var(--muted);font-family:var(--font-mono);flex-direction:column;gap:3px;padding:2px 0 0;font-size:.75rem;line-height:1.4;display:flex}.has-error .expression-feedback{color:var(--error)}.feedback-label{color:var(--muted);letter-spacing:.09em;text-transform:uppercase;font-size:.62rem;font-weight:750}.expression-feedback output{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:.625rem;overflow:hidden}.list-inspection-toggle{cursor:pointer;min-height:24px;font:inherit;text-align:left;background:0 0;border:0;align-self:flex-start;align-items:center;gap:4px;padding:0;display:inline-flex}.list-inspection-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.list-inspection{border-top:1px solid var(--border-subtle);flex-direction:column;gap:4px;margin:4px 8px 2px 0;padding:6px 0 0;list-style:none;display:flex}.list-inspection-item{color:var(--muted);font:.625rem/1.45 var(--font-mono);grid-template-columns:2ch minmax(54px,auto) minmax(0,1fr);align-items:baseline;column-gap:8px;display:grid}.list-element-index{color:var(--text-dim);text-align:right}.list-element-kind{color:var(--text);font-weight:700}.list-inspection-item code{min-width:0;color:var(--muted);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.list-element-position{color:var(--muted);grid-column:2/-1}.list-element-position.is-error{color:var(--error)}.object-kind{opacity:.85;font-size:.75rem;font-weight:700}.approximated-indicator{opacity:.75;margin-left:2px;font-weight:400}.display-settings{display:inline-block;position:relative}.display-settings-button{width:26px;height:26px;color:var(--muted);background:var(--surface);border:1px solid var(--border-strong);cursor:pointer;border-radius:4px;place-items:center;padding:0;transition:color .12s,background .12s,border-color .12s;display:grid}.display-settings-button svg circle,.display-settings-button svg path{stroke:currentColor;stroke-width:1.5px}.display-settings-button:hover,.display-settings-button.is-open{color:var(--accent);background:var(--surface-hover);border-color:var(--accent-border)}.display-settings-popover{z-index:15;min-width:252px;max-width:calc(100vw - 16px);color:var(--text);background:var(--surface);border:1px solid var(--border-strong);box-shadow:var(--shadow-modal);border-radius:10px;position:absolute;top:calc(100% + 6px);right:0;overflow:hidden}.settings-row{cursor:pointer;-webkit-user-select:none;user-select:none}.settings-row-label{color:var(--text);flex:1}.settings-select{color:var(--text);background:var(--background);border:1px solid var(--border-strong);font:inherit;cursor:pointer;border-radius:4px;padding:4px 7px}.settings-select:hover{border-color:var(--accent-border)}.settings-number{width:5.5ch;color:var(--text);background:var(--background);border:1px solid var(--border-strong);font:inherit;border-radius:4px;padding:4px 5px}.settings-number:hover{border-color:var(--accent-border)}.settings-switch{flex-shrink:0;place-items:center;width:34px;height:24px;display:grid;position:relative}.settings-switch input{opacity:0;cursor:pointer;width:100%;height:100%;margin:0;position:absolute;inset:0}.settings-switch-track{background:var(--border-strong);border-radius:9px;width:32px;height:18px;transition:background .12s;position:relative}.settings-switch input:checked+.settings-switch-track{background:var(--accent)}.settings-switch input:focus-visible+.settings-switch-track{outline:2px solid var(--accent);outline-offset:3px}.settings-switch-thumb{background:var(--surface);border-radius:50%;width:14px;height:14px;transition:left .12s;position:absolute;top:2px;left:2px;box-shadow:0 1px 3px #1e243359}.settings-switch input:checked+.settings-switch-track .settings-switch-thumb{left:16px}.settings-row-slider .settings-row-label{flex:none}.settings-row-slider input[type=range]{min-width:72px;min-height:24px;accent-color:var(--accent);cursor:pointer;flex:1;margin:0}.settings-slider-value{min-width:5ch;color:var(--muted);font:600 .72rem var(--font-mono);text-align:right}@media (prefers-reduced-motion:reduce){.settings-switch-track,.settings-switch-thumb,.viewport-toolbar,.viewport-command{transition:none}}.appearance-popover{z-index:15;color:var(--text);background:var(--surface);border:1px solid var(--border-strong);box-shadow:var(--shadow-modal);border-radius:10px;position:fixed;overflow:hidden}.appearance-header{background:var(--surface-soft);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:10px;padding:9px 13px;font-size:.78rem;display:flex}.appearance-header button{width:24px;height:24px;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:4px;flex-shrink:0;place-items:center;padding:0;font-size:1.1rem;line-height:1;display:grid}.appearance-header button:hover{color:var(--error)}.appearance-section,.settings-section{border-bottom:1px solid var(--border);padding:10px 13px 12px}.appearance-section:last-child,.settings-section:last-child{border-bottom:0}.appearance-section h3,.settings-section h3{color:var(--muted);font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;margin:0 0 8px;font-size:.625rem;font-weight:600}.appearance-colors{flex-direction:column;gap:6px;padding:2px;display:flex}.appearance-ramp{grid-template-columns:repeat(6,1fr);gap:6px;display:grid}.appearance-colors button{border:1px solid var(--object-stroke);cursor:pointer;border-radius:3px;height:24px;padding:0}.appearance-colors button.selected{box-shadow:0 0 0 2px var(--surface), 0 0 0 4px var(--accent)}.appearance-toggle-row,.appearance-label-row,.settings-row{justify-content:space-between;align-items:center;gap:12px;min-height:32px;font-size:.76rem;display:flex}.appearance-toggle-row input{width:24px;height:24px;accent-color:var(--accent);margin:0}.bivector-shape-grid{grid-template-columns:repeat(3,1fr);gap:6px;display:grid}.bivector-shape-grid button{min-height:42px;color:var(--muted);border:1px solid var(--border-strong);cursor:pointer;background:0 0;border-radius:6px;place-items:center;display:grid}.bivector-shape-grid button[aria-pressed=true]{color:var(--accent);background:var(--surface-active);border-color:var(--accent)}.bivector-shape-grid button:disabled{cursor:not-allowed;opacity:.4}.bivector-shape-grid svg{width:28px;height:22px;fill:color-mix(in srgb, currentColor 18%, transparent);stroke:currentColor;stroke-width:1.5px}.appearance-shape-note{color:var(--muted);margin:7px 0 0;font-size:.72rem}.appearance-label-row input{width:150px;min-width:0;color:var(--text);background:var(--background);border:1px solid var(--border-strong);font-family:var(--font-mono);border-radius:4px;padding:5px 7px}.expression-empty-state{color:var(--muted);padding:0;font-size:.72rem;line-height:1.4}.add-expression{min-height:30px;color:var(--accent);font:700 .76rem var(--font-mono);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:4px;align-items:center;gap:7px;padding:4px 9px;display:inline-flex}.add-expression:hover:not(:disabled){background:var(--accent-soft);border-color:var(--accent-border)}.add-expression:disabled{opacity:.45;cursor:default}.source-location{opacity:.75;font-size:.68rem}code{color:var(--text);font-family:var(--font-mono)}.visualizer{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.viewport-toolbar{z-index:9;opacity:.55;align-items:flex-start;gap:4px;transition:opacity .12s;display:flex;position:absolute;top:8px;right:8px}.viewport-navigation{flex-direction:column;align-items:flex-end;gap:4px;display:flex}.canvas-frame:hover .viewport-toolbar,.viewport-toolbar:focus-within{opacity:1}.viewport-command{width:26px;height:26px;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:4px;place-items:center;padding:0;transition:color .12s,background .12s;display:grid}.viewport-command:hover{color:var(--accent);background:var(--surface-active)}.viewport-command:disabled{color:var(--muted);cursor:not-allowed;opacity:.42;background:0 0}.viewport-command:disabled:hover{color:var(--muted);background:0 0}.viewport-command svg line,.viewport-command svg circle,.viewport-command svg rect,.viewport-command svg path{stroke:currentColor;stroke-width:1.5px}.viewport-zoom{min-width:4ch;font:600 .72rem var(--font-mono);color:var(--muted);text-align:right;padding-right:3px}.canvas-frame{background:var(--canvas);border:0;border-radius:0;flex:1;place-items:center;width:100%;height:100%;min-height:0;display:grid;position:relative;overflow:hidden}.canvas{touch-action:none;-webkit-user-select:none;user-select:none;cursor:grab;outline:none;width:100%;height:100%}.canvas:active{cursor:grabbing}.canvas.is-viewport-locked,.canvas.is-viewport-locked:active{cursor:default}.grid-line{stroke:var(--grid);stroke-width:.6px;vector-effect:non-scaling-stroke}.grid-line,.axis,.origin,.graduation,.graduation-label,.axis-name,.object-label{pointer-events:none}.grid-line.is-major{stroke-width:1px}.graduation{stroke:var(--axis-strong);stroke-width:1px;vector-effect:non-scaling-stroke}.graduation-label,.axis-name{fill:var(--axis-strong);font:600 10px var(--font-mono);text-anchor:middle;paint-order:stroke;stroke:var(--canvas);stroke-width:3px}.graduation-label.is-y{text-anchor:end}.axis-name{font-size:12px;font-style:italic}.axis{stroke:var(--axis);stroke-width:1px;vector-effect:non-scaling-stroke}.origin{fill:var(--axis-strong)}.vector{stroke:currentColor;stroke-width:4px;stroke-linecap:round;vector-effect:non-scaling-stroke}.vector.is-head-hovered{stroke-width:5px}.vector-arrowhead,.vector-head-point{fill:currentColor;pointer-events:none}.manipulation-hit-target{fill:#0000;cursor:crosshair}.manipulation-hit-target:focus,.manipulation-base-contour:focus,.manipulation-hit-target:focus-visible,.manipulation-base-contour:focus-visible{outline:none}.manipulation-focus-ring{fill:none;stroke:var(--accent);stroke-width:2px;pointer-events:none}.vector-head-indicator{fill:none;stroke:var(--point-ring-hover);stroke-width:1.5px;pointer-events:none;vector-effect:non-scaling-stroke}.manipulation-base-contour{fill:#0000;stroke:#0000;pointer-events:none}.manipulation-base-contour.is-movable{fill:currentColor;fill-opacity:.2;pointer-events:all;cursor:crosshair}.manipulation-base-point{fill:currentColor;pointer-events:none;transform-box:fill-box;transform-origin:50%;transition:transform .35s}.manipulation-base-point.is-hovered{transform:scale(2.2222)}.anchor-preview{color:var(--accent);pointer-events:none}.anchor-preview circle:first-child{fill:none;stroke:currentColor;stroke-width:2px;stroke-dasharray:3 2;vector-effect:non-scaling-stroke}.anchor-preview circle:last-child{fill:currentColor}.bivector{fill:color-mix(in srgb, currentColor 18%, transparent);stroke:none;stroke-width:3px;stroke-linejoin:round;vector-effect:non-scaling-stroke;pointer-events:none}.bivector.has-border{stroke:currentColor}@media (prefers-reduced-motion:reduce){.manipulation-base-point{transition:none}}.object-label{fill:currentColor;font:700 13px var(--font-sans);paint-order:stroke;stroke:var(--canvas);stroke-width:3px;stroke-linejoin:round}.zero-vector{fill:var(--surface);stroke:var(--vector);stroke-width:3px;vector-effect:non-scaling-stroke}.panel-resize{cursor:col-resize;background:var(--background);border-left:1px solid var(--border);border-right:1px solid var(--border);touch-action:none;flex-shrink:0;width:6px;position:relative}.panel-resize:after{content:"";position:absolute;inset:0 -4px}.panel-resize:hover,.panel-resize:focus-visible{background:var(--accent-soft);border-color:var(--accent-border);outline:none}body.resizing-panel{cursor:col-resize;-webkit-user-select:none;user-select:none}body.canvas-gesture{-webkit-user-select:none;user-select:none}body.canvas-gesture-manipulate,body.canvas-gesture-manipulate .canvas{cursor:crosshair}body.canvas-gesture-pan,body.canvas-gesture-pan .canvas{cursor:grabbing}body.canvas-gesture .app-header,body.canvas-gesture .expression-panel{pointer-events:none}.info-overlay{z-index:20;background:var(--overlay);place-items:center;padding:24px;display:grid;position:fixed;inset:0}.info-dialog{width:min(680px,92vw);max-height:82vh;color:var(--text);background:var(--surface);border:1px solid var(--border-strong);box-shadow:var(--shadow-modal);border-radius:10px;flex-direction:column;display:flex;overflow:hidden}.info-dialog-header{border-bottom:1px solid var(--border);flex-shrink:0;align-items:center;gap:16px;padding:14px 20px 12px;display:flex}.info-dialog-header h2{color:var(--text);font-family:var(--font-mono);letter-spacing:0;flex:1;font-size:.94rem;font-weight:700}.info-dialog-close{width:24px;height:24px;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:4px;flex:0 0 24px;place-items:center;padding:0;font-size:1.25rem;line-height:1;transition:color .12s;display:grid}.info-dialog-close:hover{color:var(--error)}.info-dialog-body{flex-direction:column;gap:18px;padding:16px 20px 20px;display:flex;overflow-y:auto}.info-description{color:var(--muted);margin:0;font-size:.82rem;line-height:1.55}.info-section h3{color:var(--text-strong);font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;margin:0 0 8px;font-size:.75rem;font-weight:700}.info-section ul{color:var(--muted);flex-direction:column;gap:6px;margin:0;padding-left:18px;font-size:.8rem;line-height:1.5;display:flex}.info-footnote{color:var(--muted);margin:8px 0 0;font-size:.72rem;line-height:1.5}.info-dialog-body code{color:var(--text-strong);background:var(--surface-code);font-family:var(--font-mono);border-radius:3px;padding:1px 5px;font-size:.75rem}.info-table-scroll{overflow-x:auto}.info-table{border-collapse:collapse;width:100%;font-size:.8rem;line-height:1.45}.info-table th,.info-table td{border-bottom:1px solid var(--border-subtle);text-align:left;vertical-align:top;padding:5px 10px 5px 0}.info-table tr:last-child th,.info-table tr:last-child td{border-bottom:0}.info-table th{width:1%;color:var(--text);white-space:nowrap;padding-right:18px;font-weight:400}.info-table td{color:var(--muted)}.object-color-swatch{vertical-align:-1px;border:1px solid var(--object-stroke);border-radius:50%;width:12px;height:12px;margin-right:8px;display:inline-block}.algebra-grid{border-collapse:collapse;font-family:var(--font-mono);font-size:.75rem;line-height:1.45}.algebra-grid th,.algebra-grid td{border:1px solid var(--border-subtle);text-align:center;vertical-align:middle;min-width:36px;padding:4px 8px}.algebra-grid th{color:var(--text-strong);background:var(--surface-code);font-weight:700}.algebra-grid td{color:var(--text)}@media (width<=760px){.app-header{padding:0 16px}.workspace{flex-direction:column;overflow:auto}.expression-panel{border-bottom:1px solid var(--border);max-height:52svh;width:100%!important}.panel-resize{display:none}.visualizer{min-height:520px}.canvas-frame{min-height:360px}.info-overlay{align-items:stretch;padding:10px}.info-dialog{max-height:calc(100svh - 20px)}.info-dialog-body{padding:14px}}.object-detail{color:var(--muted);margin-left:6px;font-weight:400}.point-marker{fill:currentColor;pointer-events:none}.unbounded-line,.direction-marker{stroke:currentColor;stroke-linecap:round}.direction-marker-head{fill:currentColor}.algebra-capsule{align-items:stretch;display:inline-flex;position:relative}.algebra-capsule .algebra-badge{align-items:center;gap:5px;display:inline-flex}.algebra-badge-select{border-right:0;border-radius:999px 0 0 999px}.algebra-badge-info{border-left:1px solid var(--accent-border);text-transform:none;border-radius:0 999px 999px 0;padding-inline:8px 10px;font-style:italic;font-weight:700}.algebra-badge-select.is-open{background:color-mix(in srgb, var(--accent-soft) 65%, var(--surface))}.algebra-badge-chevron path{stroke:currentColor;stroke-width:1.5px}.algebra-menu{z-index:15;white-space:nowrap;min-width:300px;color:var(--text);background:var(--surface);border:1px solid var(--border-strong);box-shadow:var(--shadow-modal);border-radius:10px;flex-direction:column;padding:4px;display:flex;position:absolute;top:calc(100% + 6px);left:0}.algebra-menu-item{color:var(--text);font:.8rem var(--font-sans);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;align-items:baseline;gap:10px;padding:7px 10px;display:flex}.algebra-menu-item:hover,.algebra-menu-item:focus-visible{background:var(--surface-hover);outline:none}.algebra-menu-item[aria-checked=true]{color:var(--accent)}.algebra-menu-item[aria-checked=true]:before{content:"✓";margin-right:2px}.algebra-menu-item:not([aria-checked=true]):before{content:"";width:.7em;margin-right:2px;display:inline-block}.algebra-menu-badge{font-family:var(--font-mono);letter-spacing:.04em;text-transform:uppercase;flex-shrink:0;font-size:.68rem}.algebra-menu-name{color:var(--muted)}.line-at-infinity{fill:none;stroke:currentColor;pointer-events:none}.unbounded-line-halo{stroke:currentColor;stroke-opacity:.18;stroke-linecap:round;pointer-events:none}.unbounded-line-hit{stroke:#0000;fill:none;cursor:grab}.line-orientation{stroke:currentColor;stroke-opacity:.55;stroke-linecap:round;pointer-events:none}.line-anchor{fill:var(--canvas);stroke:currentColor;opacity:.7;pointer-events:none}.line-normal-shaft{stroke:currentColor;stroke-linecap:butt;opacity:.55;pointer-events:none}.line-normal-head{fill:currentColor;opacity:.55;pointer-events:none}line.manipulation-focus-ring{fill:none;stroke:var(--accent);stroke-opacity:.35;stroke-linecap:round;pointer-events:none}
