:root{--bg-a: #f3f5e8;--bg-b: #dbe8db;--ink: #163129;--ink-soft: #38594f;--panel: rgba(255, 255, 255, .78);--panel-edge: rgba(22, 49, 41, .2);--accent: #1d7f73;--accent-2: #d3612d;--warn: #b2442f;--ok: #1d7f73}*{box-sizing:border-box}html,body,#root{margin:0;width:100%;height:100%}body{font-family:Avenir Next,Trebuchet MS,sans-serif;color:var(--ink);background:radial-gradient(circle at 12% 18%,rgba(255,255,255,.75),transparent 44%),radial-gradient(circle at 80% 82%,rgba(242,198,156,.36),transparent 38%),linear-gradient(140deg,var(--bg-a),var(--bg-b))}button,input{font:inherit}.app-shell{display:grid;height:100%;width:100%;grid-template-columns:380px minmax(320px,1fr) 170px;grid-template-rows:72px minmax(0,1fr);gap:12px;padding:12px}.top-toolbar{grid-column:1 / -1;display:flex;align-items:center;justify-content:space-between;gap:14px;padding:10px 14px;border-radius:14px;border:1px solid var(--panel-edge);background:linear-gradient(140deg,#ffffffd9,#e8f2eedb);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.toolbar-brand{font-size:1.05rem;letter-spacing:.04em;font-weight:700;text-transform:uppercase}.toolbar-brand-group{display:flex;align-items:center;gap:8px;min-width:0}.toolbar-about-btn{padding:5px 10px;font-size:.82rem}.toolbar-controls{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px}.btn{border:1px solid var(--panel-edge);background:#ffffffb8;color:var(--ink);border-radius:10px;padding:7px 12px;cursor:pointer;transition:all .15s ease}.btn:hover:not(:disabled){border-color:#1d7f738c;transform:translateY(-1px)}.btn:disabled{cursor:default;opacity:.45}.btn.is-active{background:#1d7f7329;border-color:#1d7f73a6}.hidden-input{display:none}.camera-error-inline{color:var(--warn);font-size:.76rem;font-weight:600;max-width:220px;line-height:1.25}.about-modal-backdrop{position:fixed;inset:0;background:#14221d59;display:flex;align-items:center;justify-content:center;padding:18px;z-index:40}.about-modal{width:min(460px,100%);border-radius:14px;border:1px solid var(--panel-edge);background:#fffffff5;box-shadow:0 18px 40px #1631292e;overflow:hidden}.about-modal-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;border-bottom:1px solid rgba(22,49,41,.12);background:#e8f2eeb3}.about-modal-title{font-weight:700;color:var(--ink)}.about-close-btn{width:28px;min-width:28px;height:28px;border-radius:8px;border:1px solid rgba(22,49,41,.2);background:#ffffffd9;color:var(--ink);font-size:1.05rem;line-height:1;cursor:pointer}.about-close-btn:hover{border-color:#1d7f7399}.about-modal-body{padding:14px;color:var(--ink-soft);line-height:1.5}.about-modal-body p{margin:0 0 8px}.about-modal-body p:last-child{margin-bottom:0}.about-modal-body a{color:var(--accent);font-weight:600;text-decoration:none}.about-modal-body a:hover{text-decoration:underline}.left-sidebar,.right-sidebar{min-height:0;border-radius:14px;border:1px solid var(--panel-edge);background:var(--panel);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.left-sidebar{display:grid;grid-template-rows:minmax(0,1fr) minmax(140px,24vh);overflow:hidden}.tool-groups{padding:10px;min-height:0;overflow:auto}.tool-group{margin-bottom:8px;border:1px solid rgba(22,49,41,.15);border-radius:10px;background:#fff9;padding:6px}.category-title{display:block;width:100%;text-align:left;border:none;border-radius:8px;padding:6px 8px;font-size:.92rem;font-weight:700;background:transparent;color:var(--ink-soft);cursor:pointer}.category-title.is-active{background:#1d7f7329;color:var(--ink)}.tool-buttons{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:5px;margin-top:6px}.tool-btn{border:1px solid rgba(22,49,41,.2);border-radius:8px;background:#ffffffe0;color:var(--ink);font-size:.84rem;padding:6px 8px;text-align:left;cursor:pointer}.tool-btn:hover{border-color:#1d7f7399}.matrix-panel{border-top:1px solid rgba(22,49,41,.14);padding:10px;min-height:0;overflow:auto;background:#ffffffe0}.matrix-header{text-transform:uppercase;letter-spacing:.06em;font-size:.72rem;font-weight:700;color:var(--ink-soft)}.matrix-subheader{margin-top:8px;display:flex;justify-content:space-between;align-items:center;gap:8px;font-weight:600;font-size:.88rem}.status-pill,.pill{border-radius:999px;border:1px solid rgba(22,49,41,.2);padding:2px 8px;font-size:.72rem}.status-pill.ok,.pill.ok{background:#1d7f7324;border-color:#1d7f7366}.status-pill.warn,.pill.warn{background:#b2442f1f;border-color:#b2442f66}.matrix-placeholder{margin-top:14px;color:var(--ink-soft);font-size:.85rem;line-height:1.45}.matrix-grid{display:grid;gap:6px;margin-top:10px}.matrix-grid-2x2{grid-template-columns:repeat(2,minmax(0,1fr))}.matrix-grid-3x3{grid-template-columns:repeat(3,minmax(0,1fr))}.vector-grid{margin-top:8px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}.equation-editor{margin-top:10px;overflow-x:auto;overflow-y:hidden;padding-bottom:2px}.equation-row{display:flex;align-items:center;gap:6px;flex-wrap:nowrap;width:max-content;min-width:100%}.equation-bracketed{display:flex;align-items:stretch;flex:0 0 auto}.equation-bracket-content{display:flex;align-items:center}.equation-bracket{position:relative;width:10px;min-width:10px;align-self:stretch}.equation-bracket:before,.equation-bracket:after{content:"";position:absolute;width:8px;height:0;top:0;border-top:4px solid rgba(56,89,79,.95)}.equation-bracket:after{top:auto;bottom:0}.equation-bracket-left{border-left:4px solid rgba(56,89,79,.95);margin-right:4px}.equation-bracket-left:before,.equation-bracket-left:after{left:0}.equation-bracket-right{border-right:4px solid rgba(56,89,79,.95);margin-left:4px}.equation-bracket-right:before,.equation-bracket-right:after{right:0}.equation-grid-2x2{display:grid;grid-template-columns:repeat(2,68px);gap:5px}.equation-grid-2x1{display:grid;grid-template-columns:68px;gap:5px}.equation-grid-3x3{display:grid;grid-template-columns:repeat(3,62px);gap:5px}.equation-grid-3x1{display:grid;grid-template-columns:auto;gap:5px}.equation-grid-2x1-vars,.equation-grid-3x1-vars{grid-template-columns:auto}.equation-vars span{min-height:28px;min-width:14px;padding:0 2px;display:flex;align-items:center;justify-content:center;font-style:italic;font-weight:600;color:var(--ink-soft)}.equation-plus{font-size:1.3rem;font-weight:700;color:var(--ink-soft);padding:0 2px;flex:0 0 auto}.matrix-input{width:100%;border-radius:8px;border:1px solid rgba(22,49,41,.24);padding:5px 7px;background:#ffffffd9;color:var(--ink);font-size:.84rem}.matrix-input:focus{outline:2px solid rgba(29,127,115,.35);border-color:#1d7f73b3}.matrix-input.is-readonly{background:#ecf0ece6;color:#38594fe6}.equation-input{text-align:center}.mobius-editor{margin-top:10px;overflow-x:auto;overflow-y:hidden;padding-bottom:2px}.mobius-fraction{display:inline-flex;flex-direction:column;width:max-content;max-width:none;margin-bottom:8px}.mobius-fraction-row{display:flex;align-items:center;flex-wrap:nowrap;gap:3px;color:var(--ink-soft);width:max-content}.mobius-fraction-bar{width:100%;height:2px;background:#1631295c;border-radius:99px;margin:4px 0}.mobius-coeff{display:inline-flex;align-items:center;gap:2px}.mobius-coeff-paren{font-size:.95rem;font-weight:600}.mobius-coeff-sign,.mobius-op,.mobius-i,.mobius-z{font-size:.88rem;font-weight:600;color:var(--ink-soft)}.mobius-z{font-style:italic}.mobius-z-conj{text-decoration-line:overline;text-decoration-thickness:2px}.mobius-input{width:48px;min-width:48px;text-align:center}.complex-hint{font-size:.74rem;color:var(--ink-soft)}.canvas-viewport{position:relative;min-height:0;border-radius:14px;border:1px solid var(--panel-edge);overflow:hidden;background:linear-gradient(150deg,#ffffff8c,#e6ebe6a6)}.render-canvas{width:100%;height:100%;display:block}.canvas-placeholder{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--ink-soft);font-size:1rem;letter-spacing:.01em;text-align:center;padding:24px;pointer-events:none}.manipulator-overlay{position:absolute;inset:0;width:100%;height:100%;pointer-events:auto}.overlay-axis{stroke:#16312940;stroke-width:.005}.overlay-axis-ref{stroke:#1631296b;stroke-width:.008;vector-effect:non-scaling-stroke}.overlay-red-line{fill:none;stroke:#cd2121f5;stroke-width:.01;stroke-linecap:round;stroke-linejoin:round;pointer-events:stroke;cursor:grab}.overlay-red-line-strong{stroke-width:.014}.overlay-yellow-line{fill:none;stroke:#ecb726f2;stroke-width:.012;stroke-linecap:round;stroke-linejoin:round;pointer-events:stroke;cursor:grab}.overlay-red-fill{fill:#cd2121f0;stroke:#cd2121f5;stroke-width:.004;vector-effect:non-scaling-stroke}.overlay-yellow-fill{fill:#ecb726f2;stroke:#ecb726f2;stroke-width:.004;vector-effect:non-scaling-stroke}.overlay-handle{fill:#fff;stroke:#cd2121f5;stroke-width:.012;vector-effect:non-scaling-stroke;cursor:grab}.overlay-sector{fill:#7c7c7c3d;stroke:none;pointer-events:none}.overlay-arc-handle{stroke-width:.016;fill:none;cursor:grab}.right-sidebar{display:flex;flex-direction:column;min-height:0;padding:12px}.sidebar-title{text-transform:uppercase;letter-spacing:.06em;font-size:.72rem;font-weight:700;color:var(--ink-soft);margin-bottom:8px}.stack-visibility-controls{display:grid;grid-template-columns:minmax(0,1fr);gap:6px;margin-bottom:8px}.stack-toggle-btn{border:1px solid rgba(22,49,41,.22);border-radius:8px;padding:6px 8px;background:#ffffffdb;color:var(--ink);font-size:.78rem;font-weight:600;cursor:pointer}.stack-toggle-btn:hover{border-color:#1d7f7399}.transform-list{list-style:none;margin:0;padding:0;overflow:auto;display:grid;gap:8px}.transform-item{border:1px solid rgba(22,49,41,.2);border-radius:10px;padding:7px;background:#ffffffd1;cursor:grab;touch-action:none;transition:transform .15s ease,border-color .12s ease,box-shadow .12s ease,opacity .12s ease;will-change:transform}.transform-item.no-transition{transition:none}.transform-item.source-item{cursor:default;border-style:dashed}.transform-item.is-selected{border-color:#1d7f73b3;box-shadow:0 0 0 1px #1d7f7340}.transform-item.is-dragging{opacity:.86;z-index:2;box-shadow:0 6px 16px #16312933;cursor:grabbing}.transform-item.is-drop-target{border-color:#1d7f73bf;box-shadow:0 0 0 2px #1d7f7333}.transform-title{flex:1 1 auto;min-width:0;font-weight:600;font-size:.86rem;line-height:1.25;word-break:break-word}.transform-head{display:flex;align-items:flex-start;justify-content:space-between;gap:6px}.transform-card-actions{display:inline-flex;gap:4px}.transform-visibility-btn,.transform-delete-btn{width:20px;min-width:20px;height:20px;padding:0;border-radius:6px;border:1px solid rgba(178,68,47,.35);background:#ffffffe0;color:var(--warn);font-size:.95rem;font-weight:700;line-height:1;cursor:pointer}.transform-visibility-btn{border-color:#16312947;color:var(--ink-soft)}.transform-visibility-btn svg{width:13px;height:13px;display:block;margin:0 auto;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.transform-visibility-btn.is-visible{color:#163129f2}.transform-visibility-btn.is-hidden{color:#7c8b84c7}.transform-visibility-btn:hover{border-color:#1d7f73a6}.transform-delete-btn:hover{border-color:#b2442fb3;background:#b2442f14}.transform-visibility-btn:disabled,.transform-delete-btn:disabled{opacity:.45;cursor:default}.transform-meta{margin-top:6px;display:flex;gap:6px;flex-wrap:wrap}.stack-placeholder{font-size:.84rem;color:var(--ink-soft)}@media(max-width:1260px){.app-shell{grid-template-columns:350px minmax(260px,1fr) 170px}}@media(max-width:1024px){.app-shell{grid-template-columns:1fr;grid-template-rows:72px 280px minmax(320px,1fr) 260px}.left-sidebar{grid-row:2;grid-template-rows:1fr}.canvas-viewport{grid-row:3;min-height:380px}.right-sidebar{grid-row:4}}
