:root{--bg: #fafaf9;--card: #ffffff;--text: #111827;--muted: #6b7280;--border: rgba(17, 24, 39, .12);--border-strong: rgba(17, 24, 39, .18);--shadow: 0 1px 2px rgba(17, 24, 39, .06), 0 14px 28px rgba(17, 24, 39, .06);--shadow-soft: 0 0 0 1px rgba(15, 23, 42, .06), 0 1px 1px rgba(17, 24, 39, .03), 0 10px 22px rgba(17, 24, 39, .04);--primary: #2563eb;--primary-strong: #1d4ed8;--danger: #dc2626;--ring: rgba(37, 99, 235, .2);--radius: 8px;--radius-lg: 8px;--page-gutter: clamp(14px, 2.2vw, 26px);font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,"Apple Color Emoji","Segoe UI Emoji";color:var(--text);background:var(--bg);line-height:1.35;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::-moz-selection{background:#2563eb2e}::selection{background:#2563eb2e}*{box-sizing:border-box}html{background:var(--bg)}body{margin:0;min-height:100vh;background:var(--bg);color:var(--text)}.app{min-height:100dvh;display:flex;flex-direction:column}a{color:inherit}button,input,select{font:inherit}.container{width:100%;max-width:none;margin:0;padding:18px var(--page-gutter) 30px;flex:1;min-height:0;display:flex;flex-direction:column}.header{position:sticky;top:0;z-index:20;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#fafaf9d6;border-bottom:1px solid var(--border)}.header-inner{width:100%;max-width:none;margin:0;padding:14px var(--page-gutter);display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px}.brand{display:flex;flex-direction:column;gap:2px}.brand-title{font-weight:700;letter-spacing:-.02em}.brand-sub{font-size:12px;color:var(--muted)}.tabs{display:inline-flex;gap:6px;padding:4px;border:1px solid var(--border);border-radius:999px;background:#11182708}.tab{border:0;background:transparent;padding:8px 10px;border-radius:999px;font-size:13px;font-weight:600;color:#1118279e;cursor:pointer;transition:background .15s ease,color .15s ease}.tab:hover{background:#1118270d;color:#111827d1}.tab:focus-visible{outline:none;box-shadow:0 0 0 4px var(--ring)}.tab.active{background:#ffffffeb;color:#111827eb;border:1px solid var(--border);box-shadow:0 1px 2px #11182714}.layout{display:grid;grid-template-columns:minmax(320px,400px) minmax(0,1fr);grid-template-rows:1fr;gap:16px;align-items:stretch;flex:1;min-height:0}@media(max-width:980px){.layout{grid-template-columns:1fr}}.left,.right{min-width:0;min-height:0;display:flex;flex-direction:column;gap:14px}.left .card:last-child{flex:1;min-height:0}.card{background:var(--card);border:0;border-radius:var(--radius-lg);box-shadow:var(--shadow-soft)}.card.pad{padding:14px}.card-title{font-size:13px;font-weight:700;letter-spacing:-.01em}.card-sub{margin-top:4px;font-size:12px;color:var(--muted)}.row{display:flex;gap:10px;align-items:center}.row.split{justify-content:space-between}.btn{border:1px solid var(--border);background:#ffffffeb;color:#111827eb;border-radius:12px;padding:8px 10px;font-size:13px;font-weight:600;cursor:pointer;transition:transform .05s ease,background .15s ease,border-color .15s ease}.btn:hover{background:#11182708;border-color:#11182738}.btn:active{transform:translateY(1px)}.btn:focus-visible{outline:none;box-shadow:0 0 0 4px var(--ring)}.btn:disabled{opacity:.6;cursor:not-allowed}.btn.primary{background:#111827f0;color:#fffffff5;border-color:#1118274d}.btn.primary:hover{background:#111827e0}.btn.danger{background:#dc262614;border-color:#dc262647;color:#991b1bf5}.btn.small{padding:6px 8px;border-radius:10px;font-size:12px}.field{display:grid;grid-template-columns:120px 1fr;gap:10px;align-items:center}.label{font-size:12px;font-weight:600;color:var(--muted)}.input,.select{width:100%;border:1px solid var(--border);border-radius:12px;padding:8px 10px;font-size:13px;outline:none;background:#fffffff5;transition:border-color .15s ease,box-shadow .15s ease}.input:hover,.select:hover{border-color:var(--border-strong)}.input:focus,.select:focus{border-color:#2563eb80;box-shadow:0 0 0 4px var(--ring)}.muted{color:var(--muted)}.divider{height:1px;background:var(--border);margin:14px 0}.pill{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:999px;border:1px solid var(--border);background:#ffffffc7;font-size:12px;color:var(--muted)}.notice{border-radius:var(--radius);padding:10px 12px;border:1px solid rgba(37,99,235,.16);background:#2563eb0d;color:#1e40aff5;font-size:12px}.warning{border-radius:var(--radius);padding:10px 12px;border:1px solid rgba(220,38,38,.16);background:#dc26260d;color:#991b1bf5;font-size:12px}.think-block{border-radius:var(--radius);border:1px solid rgba(15,23,42,.14);background:#0f172a0a;padding:10px 12px;margin-bottom:10px}.think-summary{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;font-weight:700;color:#0f172ab8;font-size:12px;display:flex;align-items:center;justify-content:space-between;gap:10px}.think-title{display:inline-flex;align-items:center;gap:10px}.think-meta{display:inline-flex;align-items:center;gap:8px}.think-pill{background:#0f172a0a;border-color:#0f172a29;color:#0f172aa8}.think-block>summary::-webkit-details-marker{display:none}.think-block>summary{list-style:none}.think-block>summary:before{content:"▸";display:inline-block;margin-right:8px;color:#0f172a85}.think-block[open]>summary:before{content:"▾"}.think-pre{margin:10px 0 0;white-space:pre-wrap;font-size:12px;color:#0f172ab8;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.details-block{border-radius:var(--radius);border:0;background:#ffffffc2;box-shadow:0 0 0 1px #0f172a0f;padding:10px 12px}.details-block+.details-block{margin-top:10px}.details-summary{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;font-weight:700;color:#0f172ab8;font-size:12px}.details-block>summary::-webkit-details-marker{display:none}.details-block>summary{list-style:none}.details-block>summary:before{content:"▸";display:inline-block;margin-right:8px;color:#0f172a85}.details-block[open]>summary:before{content:"▾"}.details-pre{margin:10px 0 0;white-space:pre-wrap;font-size:12px;color:#0f172ab8;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.anim-in{animation:slideFadeIn .28s ease-out both}@keyframes slideFadeIn{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}.pulse{animation:pulseGlow 1.4s ease-in-out infinite}@keyframes pulseGlow{0%,to{box-shadow:0 0 #2563eb00;border-color:#2563eb1f;background:#2563eb08}50%{box-shadow:0 0 0 8px #2563eb0f;border-color:#2563eb38;background:#2563eb0d}}.skeleton-line{height:10px;border-radius:999px;background:linear-gradient(90deg,#0f172a0f,#0f172a1c,#0f172a0f);background-size:200% 100%;animation:shimmer 1.1s linear infinite}@keyframes shimmer{0%{background-position:0% 0}to{background-position:200% 0}}.spinner{width:12px;height:12px;border-radius:999px;border:2px solid rgba(15,23,42,.18);border-top-color:#2563ebeb;animation:spin .9s linear infinite;display:inline-block}.smart-loader{display:inline-flex;align-items:center;gap:8px;padding:6px 10px;border-radius:999px;background:#0f172a0a;box-shadow:0 0 0 1px #0f172a0f;color:#0f172ab8;font-size:12px;white-space:nowrap}.smart-loader-text{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.reasoning-pre{margin:10px 0 0;border-radius:8px;padding:10px 12px;background:#0f172a0a;box-shadow:inset 0 0 0 1px #0f172a14;font-size:12px;color:#0f172acc;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;white-space:pre-wrap;max-height:260px;overflow:auto}@keyframes spin{to{transform:rotate(360deg)}}.type-caret{display:inline-block;width:1px;height:1.1em;vertical-align:-.12em;margin-left:1px;background:#0f172a85;animation:caretBlink .9s step-end infinite}@keyframes caretBlink{50%{opacity:0}}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.subtle{color:#0f172aa8}.card.soft{background:linear-gradient(180deg,#f8fafceb,#ffffffeb);border-color:#0f172a1f}.md{color:#0f172adb;font-size:13px;line-height:1.55}.md-h{margin:10px 0 6px;letter-spacing:-.01em}.md-h1{font-size:15px;font-weight:850}.md-h2{font-size:14px;font-weight:820}.md-h3{font-size:13px;font-weight:820}.md-p{margin:8px 0}.md-list{margin:8px 0;padding-left:18px}.md-li{margin:4px 0}.md-code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:12px;padding:1px 6px;border-radius:8px;border:1px solid rgba(15,23,42,.14);background:#0f172a0a;color:#0f172ad1}.md-entity{border:0;background:#2563eb0f;color:#1e40aff5;padding:0 6px;border-radius:8px;cursor:pointer;font:inherit;font-weight:750;margin:0 1px;transition:background .15s ease,transform .05s ease}.md-entity:hover{background:#2563eb1a}.md-entity:active{transform:translateY(1px)}.md-entity-metabolite{background:#10b9811a;color:#065f46f5}.md-entity-metabolite:hover{background:#10b98124}.md-entity-cell{background:#f59e0b1a;color:#92400ef5}.md-entity-cell:hover{background:#f59e0b24}.md-pre{margin:10px 0;padding:10px 12px;border-radius:var(--radius);border:1px solid rgba(15,23,42,.14);background:#0f172a08;overflow:auto;font-size:12px;color:#0f172ac2}.chips{display:flex;flex-wrap:wrap;gap:8px}.chip{border:1px solid rgba(15,23,42,.14);background:#ffffffc7;border-radius:999px;padding:6px 10px;font-size:12px;color:#0f172ac7;cursor:pointer;transition:background .15s ease,border-color .15s ease,transform .05s ease}.chip:hover{background:#2563eb0d;border-color:#2563eb33}.chip:active{transform:translateY(1px)}.chip.muted{cursor:default;opacity:.7}.row-pair-hl{background:#10b9811a!important}.row-pair-hl td:first-child{box-shadow:inset 4px 0 #10b981a6}.viz-shell{padding:14px;flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.viz-body{flex:1;min-height:0;display:flex;flex-direction:column;padding-top:12px}.viz-scroll{flex:1;min-height:0;overflow:auto;padding-right:4px}.viz-stack,.viz-view{flex:1;min-height:0;display:flex;flex-direction:column}.viz-view .scroll{flex:1;min-height:0}.viz-titlebar{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.viz-note{font-size:12px;color:var(--muted);margin-top:4px}.scroll{overflow:auto;border-radius:var(--radius);border:0;box-shadow:inset 0 0 0 1px #0f172a0f;background:#fffffff5}.chart-scroll{padding:8px}.grid-matrix{display:grid;grid-auto-rows:28px}.sticky-top{position:sticky;top:0;z-index:5;background:#fafaf9eb}.sticky-left{position:sticky;left:0;z-index:4;background:#fffffff5}.cell{border-bottom:1px solid rgba(15,23,42,.07);border-right:1px solid rgba(15,23,42,.06);padding:0 8px;display:flex;align-items:center;font-size:12px;color:var(--text);min-width:0}.cell.head{background:#fafaf9eb;font-weight:700;color:#111827b8}.cell.label{cursor:pointer}.cell.selected{outline:2px solid rgba(37,99,235,.45);outline-offset:-2px}.cell.selected-pair{outline:2px solid rgba(16,185,129,.55);outline-offset:-2px;box-shadow:inset 0 0 0 1px #10b9811f}.heat{justify-content:center;font-variant-numeric:tabular-nums;padding:0 4px}.dot{width:6px;height:6px;border-radius:999px;background:#0ea5e9;box-shadow:0 0 0 3px #0ea5e91a}.drawer{position:fixed;right:16px;top:78px;bottom:16px;width:360px;max-width:calc(100vw - 32px);z-index:50;border-radius:18px;overflow:hidden;border:1px solid var(--border);background:#ffffffe6;box-shadow:var(--shadow);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.drawer-inner{height:100%;display:flex;flex-direction:column}.drawer-head{padding:14px;border-bottom:1px solid var(--border);display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.drawer-body{padding:14px;overflow:auto}.metric{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:10px}.metric .k{font-size:11px;color:var(--muted)}.metric .v{font-size:13px;font-weight:700;font-variant-numeric:tabular-nums;margin-top:2px}.list{margin-top:12px}.list h4{margin:0;font-size:12px;color:#0f172ac7;letter-spacing:-.01em}.item{margin-top:8px;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 10px;border:1px solid rgba(17,24,39,.08);border-radius:12px;background:#fafaf9bf;font-size:12px}.item .name{font-weight:650;color:#0f172ae6;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.item .meta{font-variant-numeric:tabular-nums;color:var(--muted)}@media(max-width:520px){.header-inner{flex-direction:column;align-items:flex-start}.field{grid-template-columns:1fr;gap:6px}}
