@import"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap";:root{--bg: oklch(98.2% .004 95);--panel: oklch(99.5% .003 95);--ink: oklch(20% .01 250);--ink-2: oklch(40% .01 250);--ink-3: oklch(58% .012 250);--ink-4: oklch(76% .012 250);--rule: oklch(88% .008 250);--rule-strong: oklch(72% .012 250);--hairline: oklch(92% .006 250);--accent: oklch(58% .12 195);--accent-soft: oklch(94% .03 195);--accent-ink: oklch(35% .12 195);--danger: oklch(52% .16 28);--danger-soft: oklch(95% .03 28);--good: oklch(58% .13 145);--warn: oklch(62% .13 70);--mono: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--cell: 56px;--row-h: 32px}*{box-sizing:border-box}html,body{margin:0;padding:0;background:var(--bg);color:var(--ink);font-family:var(--mono);font-size:13px;line-height:1.5;-webkit-font-smoothing:antialiased;font-feature-settings:"ss01","cv11","tnum"}button{font-family:var(--mono);font-size:12px;cursor:pointer}input,textarea{font-family:var(--mono)}.app{display:grid;grid-template-rows:auto 1fr auto;height:100dvh;width:100vw;overflow:hidden}.topbar{display:flex;align-items:center;justify-content:space-between;padding:10px 18px;border-bottom:1px solid var(--rule);background:var(--panel);flex-wrap:wrap;gap:6px}.topbar .brand{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap}.topbar .mark{font-weight:700;letter-spacing:.04em;font-size:13px}.topbar .mark:before{content:"◧ ";color:var(--accent)}.topbar .tag{color:var(--ink-3);font-size:11px;letter-spacing:.06em;text-transform:uppercase}.topbar .meta{display:flex;gap:18px;color:var(--ink-3);font-size:11px;letter-spacing:.04em;flex-wrap:wrap}.topbar .meta b{color:var(--ink);font-weight:600}.main{display:grid;grid-template-columns:minmax(420px,5fr) minmax(440px,6fr);overflow:hidden}.statusbar{display:flex;align-items:center;justify-content:space-between;padding:6px 18px;border-top:1px solid var(--rule);background:var(--panel);color:var(--ink-3);font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;flex-wrap:wrap;gap:4px}.statusbar .kbd{display:inline-flex;gap:6px;align-items:center;flex-wrap:wrap}.kbd-key{font-family:var(--mono);font-size:10px;padding:1px 6px;border:1px solid var(--rule);border-bottom-width:2px;border-radius:3px;background:var(--bg);color:var(--ink-2);text-transform:none;letter-spacing:0}.left{border-right:1px solid var(--rule);overflow-y:auto;padding:0;background:var(--bg)}.section-head{display:flex;align-items:center;justify-content:space-between;padding:10px 18px 8px;border-bottom:1px solid var(--hairline);position:sticky;top:0;background:var(--bg);z-index:5}.section-head .title{font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3)}.section-head .count{color:var(--ink-3);font-size:10.5px;letter-spacing:.04em}.matrix-list{padding:12px 14px 80px;display:flex;flex-direction:column;gap:14px}.matrix-card{border:1px solid var(--rule);background:var(--panel);border-radius:2px}.matrix-card.active{border-color:var(--rule-strong);box-shadow:0 0 0 2px var(--accent-soft)}.matrix-head{display:flex;align-items:center;gap:10px;padding:8px 10px;border-bottom:1px solid var(--hairline);flex-wrap:wrap}.matrix-name{width:28px;height:24px;text-align:center;border:1px solid var(--rule);background:var(--bg);font-weight:700;font-size:14px;outline:none;border-radius:2px;color:var(--ink);text-transform:uppercase}.matrix-name:focus{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}.matrix-dim{display:flex;align-items:center;gap:4px;color:var(--ink-3);font-size:11px}.dim-stepper{display:inline-flex;align-items:center;border:1px solid var(--rule);border-radius:2px;background:var(--bg);height:22px;overflow:hidden}.dim-stepper button{border:0;background:transparent;width:18px;height:100%;color:var(--ink-2);padding:0}.dim-stepper button:hover:not(:disabled){background:var(--accent-soft);color:var(--accent-ink)}.dim-stepper button:disabled{opacity:.3;cursor:not-allowed}.dim-stepper .val{min-width:18px;text-align:center;font-size:11px;font-weight:600;color:var(--ink);padding:0 4px;border-left:1px solid var(--hairline);border-right:1px solid var(--hairline);height:100%;display:inline-flex;align-items:center}.matrix-actions{margin-left:auto;display:flex;gap:4px}.icon-btn{border:1px solid transparent;background:transparent;color:var(--ink-3);padding:3px 6px;font-size:10.5px;letter-spacing:.04em;border-radius:2px;text-transform:uppercase}.icon-btn:hover{color:var(--ink);border-color:var(--rule);background:var(--bg)}.icon-btn.danger:hover{color:var(--danger);border-color:var(--danger);background:var(--danger-soft)}.matrix-grid-wrap{padding:10px;overflow-x:auto}.matrix-grid{display:inline-grid;border:1px solid var(--rule-strong);background:var(--rule);gap:1px;position:relative}.matrix-grid:before,.matrix-grid:after{content:"";position:absolute;top:-3px;bottom:-3px;width:8px;border:1px solid var(--ink);border-right:0;pointer-events:none}.matrix-grid:before{left:-3px}.matrix-grid:after{right:-3px;border-left:0;border-right:1px solid var(--ink)}.matrix-cell{width:var(--cell);height:var(--row-h);background:var(--panel);border:0;text-align:right;padding:0 8px;font-size:12px;font-family:var(--mono);color:var(--ink);outline:none;font-variant-numeric:tabular-nums}.matrix-cell::placeholder{color:var(--ink-4)}.matrix-cell:focus{background:var(--accent-soft);color:var(--accent-ink);font-weight:600}.add-matrix{width:100%;padding:10px;border:1px dashed var(--rule-strong);background:transparent;color:var(--ink-3);font-size:11px;letter-spacing:.06em;text-transform:uppercase;border-radius:2px;transition:border .1s,color .1s}.add-matrix:hover:not(:disabled){border-color:var(--accent);color:var(--accent-ink);background:var(--accent-soft)}.add-matrix:disabled{opacity:.5;cursor:not-allowed}.right{display:grid;grid-template-rows:auto auto auto 1fr;overflow:hidden}.shortcut-bar{padding:10px 18px;border-bottom:1px solid var(--hairline);background:var(--panel);display:flex;flex-wrap:wrap;gap:6px;align-items:center}.shortcut-bar .group-label{font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-4);margin-right:4px;margin-left:8px}.shortcut-bar .group-label:first-child{margin-left:0}.chip{border:1px solid var(--rule);background:var(--bg);color:var(--ink);padding:3px 8px;font-size:12px;border-radius:2px;font-family:var(--mono);transition:background .08s,color .08s,border .08s}.chip:hover{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-ink)}.chip.matrix-chip{font-weight:700;min-width:26px}.chip.func-chip{color:var(--accent-ink)}.expr-block{padding:14px 18px;border-bottom:1px solid var(--hairline);background:var(--bg)}.expr-label{font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);margin-bottom:8px;display:flex;align-items:center;justify-content:space-between}.expr-input-wrap{position:relative;border:1px solid var(--rule-strong);background:var(--panel);border-radius:2px;display:flex;align-items:stretch}.expr-input-wrap:focus-within{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}.expr-prompt{display:inline-flex;align-items:center;padding:0 10px;color:var(--accent);font-weight:700;border-right:1px solid var(--hairline);user-select:none}.expr-input-stack{position:relative;flex:1;min-width:0}.expr-highlight,.expr-input{font-family:var(--mono);font-size:15px;letter-spacing:0;padding:12px;line-height:1.4;white-space:pre;overflow-x:auto}.expr-highlight{position:absolute;inset:0;pointer-events:none;color:var(--ink);overflow:hidden}.expr-input{width:100%;border:0;background:transparent;color:transparent;caret-color:var(--ink);outline:none}.tok-name{color:var(--accent-ink);font-weight:700}.tok-op{color:var(--warn)}.tok-number{color:var(--ink)}.tok-paren{color:var(--ink-3)}.tok-func{color:#504eaf;font-weight:600}.tok-unknown{color:var(--danger);text-decoration:underline wavy var(--danger)}.tok-ws{white-space:pre}.expr-actions{display:flex;gap:8px;margin-top:10px;align-items:center}.btn-primary{padding:8px 16px;background:var(--ink);color:var(--bg);border:1px solid var(--ink);font-family:var(--mono);font-size:12px;letter-spacing:.06em;text-transform:uppercase;font-weight:600;border-radius:2px;cursor:pointer}.btn-primary:hover{background:var(--accent-ink);border-color:var(--accent-ink)}.btn-ghost{padding:8px 12px;background:transparent;color:var(--ink-2);border:1px solid var(--rule);font-family:var(--mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;border-radius:2px}.btn-ghost:hover{color:var(--ink);border-color:var(--rule-strong)}.presets{padding:10px 18px;border-bottom:1px solid var(--hairline);background:var(--panel);display:flex;flex-wrap:wrap;gap:6px;align-items:center}.presets .group-label{font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-4);margin-right:4px}.preset-chip{border:1px solid var(--rule);background:var(--bg);padding:4px 10px;font-size:12px;font-family:var(--mono);border-radius:2px;color:var(--ink-2)}.preset-chip:hover{color:var(--accent-ink);border-color:var(--accent);background:var(--accent-soft)}.result-block{padding:18px 22px 28px;overflow-y:auto;background:var(--bg)}.result-meta{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:14px;gap:14px}.result-meta .label{font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3)}.result-meta .dim{font-size:11px;color:var(--ink-3);letter-spacing:.04em}.result-expr{font-size:14px;color:var(--ink-2);margin-bottom:16px;padding:8px 0;border-top:1px solid var(--hairline);border-bottom:1px solid var(--hairline);white-space:pre-wrap;word-break:break-word}.result-matrix-wrap{display:flex;align-items:center;gap:10px;overflow-x:auto;padding:4px 0}.bracket{width:14px;align-self:stretch;border:2px solid var(--ink);flex-shrink:0}.bracket.left{border-right:0}.bracket.right{border-left:0}.result-matrix{display:inline-grid;gap:6px 22px;padding:12px 4px}.result-cell{font-size:16px;font-family:var(--mono);font-variant-numeric:tabular-nums;text-align:right;color:var(--ink);white-space:nowrap;min-width:60px}.result-cell.zero{color:var(--ink-4)}.result-cell.neg{color:var(--ink)}.result-scalar{font-size:28px;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:-.01em}.result-scalar .scalar-tag{font-size:10.5px;font-weight:400;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);margin-left:12px;vertical-align:middle}.error-block{border:1px solid var(--danger);background:var(--danger-soft);padding:12px 14px;border-radius:2px;color:var(--danger);font-size:13px;display:flex;flex-direction:column;gap:6px}.error-block .err-tag{font-size:10px;letter-spacing:.12em;text-transform:uppercase;font-weight:700}.error-block .err-msg{color:#6c1612;line-height:1.55}.placeholder-result{color:var(--ink-4);font-size:13px;padding:32px 0;border:1px dashed var(--rule);text-align:center;letter-spacing:.04em}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:var(--bg)}::-webkit-scrollbar-thumb{background:var(--rule);border-radius:4px;border:2px solid var(--bg)}::-webkit-scrollbar-thumb:hover{background:var(--rule-strong)}.panel-tabs{display:none}@media(max-width:860px){:root{--cell: 44px;--row-h: 28px}.app{grid-template-rows:auto auto 1fr auto}.panel-tabs{display:flex;background:var(--panel);border-bottom:1px solid var(--rule)}.panel-tab{flex:1;padding:9px 0;border:0;background:transparent;color:var(--ink-3);font-size:11px;letter-spacing:.1em;text-transform:uppercase;border-bottom:2px solid transparent;transition:color .1s,border-color .1s}.panel-tab.active{color:var(--accent-ink);border-bottom-color:var(--accent);background:var(--accent-soft)}.main{grid-template-columns:1fr;overflow:hidden}.left,.right{display:none;overflow-y:auto;overflow-x:hidden}.left.visible,.right.visible{display:block}.right.visible{display:grid}.left{border-right:0}.topbar .tag{display:none}.topbar .meta{gap:10px;font-size:10px}.statusbar .kbd{display:none}.expr-highlight,.expr-input{font-size:13px;padding:10px}.result-cell{font-size:14px;min-width:48px}.result-scalar{font-size:22px}.matrix-actions{gap:2px}.icon-btn{padding:3px 4px;font-size:10px}}@media(max-width:480px){:root{--cell: 38px;--row-h: 26px}.topbar{padding:8px 12px}.topbar .meta{display:none}.shortcut-bar{padding:8px 12px}.expr-block{padding:10px 12px}.presets{padding:8px 12px}.result-block{padding:12px 14px 20px}.matrix-list{padding:10px 10px 60px}.matrix-grid-wrap{padding:8px}}
