:root{--bg: #0a0a0a;--surface: #0e0e0e;--surface-raised: #141414;--surface-input: #161616;--hairline: rgba(255, 255, 255, .06);--hairline-strong: rgba(255, 255, 255, .12);--hairline-focus: rgba(94, 234, 212, .45);--text: #ededed;--text-soft: #8a8a8a;--text-faint: #555;--text-disabled: #333;--accent: #5eead4;--accent-dim: #4cc4b1;--accent-soft: rgba(94, 234, 212, .1);--accent-glow: rgba(94, 234, 212, .2);--up: #f87171;--up-soft: rgba(248, 113, 113, .12);--down: #60a5fa;--down-soft: rgba(96, 165, 250, .12);--ns: #444;--warn: #fbbf24;--warn-soft: rgba(251, 191, 36, .1);--error: #ef4444;--error-soft: rgba(239, 68, 68, .12);--font-sans: "IBM Plex Sans", -apple-system, "Segoe UI", system-ui, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, "SF Mono", "Menlo", monospace}*{box-sizing:border-box;margin:0;padding:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html,body,#root{height:100%;font-family:var(--font-sans);font-size:13px;font-weight:400;line-height:1.5;color:var(--text);background:var(--bg);letter-spacing:0}::selection{background:var(--accent-glow);color:var(--text)}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#ffffff0f;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#ffffff1f}button{font-family:var(--font-sans);font-size:12px;font-weight:500;cursor:pointer;background:transparent;border:1px solid var(--hairline-strong);color:var(--text);padding:7px 14px;border-radius:2px;letter-spacing:.01em;transition:border-color .12s ease,background .12s ease,color .12s ease}button:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}button:active:not(:disabled){background:var(--accent-soft)}button:disabled{opacity:.35;cursor:not-allowed}button.primary{background:var(--accent);color:#0a0a0a;border-color:var(--accent);font-weight:600}button.primary:hover:not(:disabled){background:var(--accent-dim);border-color:var(--accent-dim);color:#0a0a0a}input,select,textarea{font-family:var(--font-sans);font-size:13px;background:var(--surface-input);border:1px solid var(--hairline-strong);border-radius:2px;padding:7px 10px;color:var(--text);width:100%;transition:border-color .12s ease,box-shadow .12s ease}input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 1px var(--accent),0 0 12px var(--accent-glow)}input::placeholder,textarea::placeholder{color:var(--text-faint)}select{-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--text-soft) 50%),linear-gradient(135deg,var(--text-soft) 50%,transparent 50%);background-position:calc(100% - 14px) 13px,calc(100% - 9px) 13px;background-size:5px 5px,5px 5px;background-repeat:no-repeat;padding-right:24px}input[type=checkbox]{-moz-appearance:none;appearance:none;-webkit-appearance:none;width:14px;height:14px;background:var(--surface-input);border:1px solid var(--hairline-strong);border-radius:2px;cursor:pointer;position:relative;flex-shrink:0}input[type=checkbox]:checked{background:var(--accent);border-color:var(--accent)}input[type=checkbox]:checked:after{content:"";position:absolute;left:3px;top:0;width:4px;height:8px;border:solid #0a0a0a;border-width:0 2px 2px 0;transform:rotate(45deg)}input[type=file]::file-selector-button{background:transparent;border:1px solid var(--hairline-strong);color:var(--text-soft);padding:4px 10px;margin-right:10px;border-radius:2px;font-family:var(--font-mono);font-size:11px;cursor:pointer}.app{display:grid;grid-template-rows:52px 1fr;height:100vh;background:var(--bg)}.topbar{display:flex;align-items:center;justify-content:space-between;padding:0 24px;background:var(--bg);border-bottom:1px solid var(--hairline);position:relative}.topbar:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:linear-gradient(90deg,transparent 0%,var(--accent) 12%,var(--accent) 14%,transparent 18%,transparent 100%);opacity:.4}.topbar .title{font-family:var(--font-sans);font-size:14px;font-weight:200;letter-spacing:.06em;text-transform:uppercase;color:var(--text)}.topbar .title strong{font-weight:500;color:var(--accent)}.topbar .version{font-family:var(--font-mono);font-size:10px;font-weight:400;color:var(--text-faint);margin-left:12px;letter-spacing:0}.topbar .status{display:flex;gap:24px;font-family:var(--font-mono);font-size:11px;font-feature-settings:"tnum";color:var(--text-soft);letter-spacing:0}.topbar .status .label{color:var(--text-faint);margin-right:6px;text-transform:uppercase;font-size:10px;letter-spacing:.08em}.three-panel,.two-panel{display:grid;height:100%;overflow:hidden;min-height:0}.three-panel{grid-template-columns:320px 1fr 380px}.two-panel{grid-template-columns:360px 1fr}.left-stack{display:flex;flex-direction:column;background:var(--bg);border-right:1px solid var(--hairline);overflow:hidden;min-height:0}.left-stack>.panel:first-child{flex:0 0 auto;max-height:65vh;border-right:none;border-bottom:1px solid var(--hairline-strong);background:var(--surface)}.left-stack>.panel:last-child{flex:1 1 0;min-height:220px;border-right:none;border-left:none}.left-stack>.panel:first-child .panel-header{color:var(--accent);border-bottom-color:var(--hairline-strong);background:var(--surface);position:relative}.left-stack>.panel:first-child .panel-header:before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--accent)}.panel{background:var(--bg);border-right:1px solid var(--hairline);overflow-y:auto;display:flex;flex-direction:column}.panel:last-child{border-right:none;border-left:1px solid var(--hairline)}.panel-header{padding:14px 20px;border-bottom:1px solid var(--hairline);font-family:var(--font-mono);font-size:10px;font-weight:500;text-transform:uppercase;letter-spacing:.14em;color:var(--text-soft);background:var(--bg);position:sticky;top:0;z-index:10}.panel-body{padding:20px;flex:1;overflow-y:auto}.field{margin-bottom:18px}.field label{display:block;font-family:var(--font-mono);font-size:10px;font-weight:500;color:var(--text-soft);text-transform:uppercase;letter-spacing:.12em;margin-bottom:7px}.field-hint{font-family:var(--font-sans);font-size:11px;color:var(--text-faint);margin-top:6px;line-height:1.5}.checkboxes{display:flex;flex-direction:column;gap:6px;padding-top:2px}.checkboxes label{display:flex;align-items:center;gap:9px;font-family:var(--font-mono);font-weight:400;text-transform:none;letter-spacing:0;font-size:12px;color:var(--text);cursor:pointer;padding:2px 0;margin-bottom:0}.checkboxes label:hover{color:var(--accent)}.tabs{display:flex;border-bottom:1px solid var(--hairline);background:var(--bg);padding:0 20px}.tab{font-family:var(--font-mono);font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.12em;padding:14px 18px;border:none;background:transparent;border-radius:0;border-bottom:1px solid transparent;color:var(--text-faint);margin-bottom:-1px;transition:color .12s ease,border-color .12s ease}.tab.active{color:var(--accent);border-bottom-color:var(--accent);background:transparent}.tab:hover:not(.active){color:var(--text);background:transparent;border-bottom-color:var(--hairline-strong)}.de-table{width:100%;border-collapse:collapse;font-family:var(--font-mono);font-size:12px;font-feature-settings:"tnum","zero"}.de-table th{text-align:left;padding:10px 14px;background:var(--bg);border-bottom:1px solid var(--hairline-strong);font-family:var(--font-mono);font-weight:500;text-transform:uppercase;font-size:10px;letter-spacing:.14em;color:var(--text-faint);position:sticky;top:0;z-index:5}.de-table td{padding:8px 14px;border-bottom:1px solid var(--hairline);color:var(--text);font-variant-numeric:tabular-nums}.de-table tbody tr{transition:background 80ms ease}.de-table tbody tr:hover{background:#ffffff06}.gene-up{color:var(--up);font-weight:500}.gene-down{color:var(--down);font-weight:500}.gene-ns{color:var(--text-soft)}.section-mark{font-family:var(--font-mono);font-size:9px;font-weight:500;text-transform:uppercase;letter-spacing:.16em;color:var(--text-faint);margin:8px 0 6px;padding-bottom:4px;border-bottom:1px solid var(--hairline)}.section-mark:first-child{margin-top:0}.pills{display:flex;flex-direction:column;gap:3px;margin-bottom:12px}.pill{display:flex;align-items:center;gap:11px;padding:8px 12px;background:var(--surface);border:1px solid var(--hairline);border-radius:2px;font-family:var(--font-sans);font-size:12px;font-weight:400;text-align:left;width:100%;color:var(--text);letter-spacing:0;text-transform:none;transition:all .12s ease;position:relative}.pill:before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:transparent;transition:background .12s ease}.pill.action{background:var(--surface-raised);border-color:var(--hairline-strong);font-weight:500}.pill.action:before{background:var(--accent)}.pill.action:hover:not(:disabled){background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.pill.action .pill-icon{color:var(--accent)}.pill.query:hover:not(:disabled){background:var(--surface-raised);border-color:var(--hairline-strong);color:var(--text)}.pill.query:hover:not(:disabled):before{background:var(--accent)}.pill .pill-icon{font-family:var(--font-mono);font-size:12px;font-weight:500;width:14px;text-align:center;color:var(--text-soft);letter-spacing:0}.pill.query:hover:not(:disabled) .pill-icon{color:var(--accent)}.pill-label{flex:1}.chat{flex:1 1 auto;display:flex;flex-direction:column;overflow:hidden;margin:0 -20px -20px;border-top:1px solid var(--hairline);min-height:0}.chat-messages{flex:1 1 auto;overflow-y:auto;padding:12px 20px;display:flex;flex-direction:column;gap:12px;min-height:0;max-height:280px}.chat-toolbar{display:flex;align-items:center;gap:4px;padding:6px 10px;border-bottom:1px solid var(--hairline);background:var(--bg)}.chat-toolbar-label{font-family:var(--font-mono);font-size:9px;color:var(--text-faint);text-transform:uppercase;letter-spacing:.12em}.chat-tool-btn{font-family:var(--font-mono);font-size:10px;padding:3px 8px;background:transparent;border:1px solid var(--hairline);border-radius:2px;color:var(--text-soft);letter-spacing:.04em;text-transform:lowercase;cursor:pointer}.chat-tool-btn:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}.chat-tool-btn:disabled{opacity:.35;cursor:not-allowed}.msg{max-width:100%;font-family:var(--font-sans);font-size:12.5px;line-height:1.6;white-space:pre-wrap;word-break:break-word;position:relative;border-left:2px solid transparent;padding:10px 0 10px 14px}.msg.user{border-left-color:var(--accent);color:var(--text);font-family:var(--font-mono);font-size:11.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--text-soft)}.msg.assistant{border-left-color:var(--hairline-strong);color:var(--text)}.msg .pill-tag{display:inline-block;font-family:var(--font-mono);font-size:9px;background:transparent;border:1px solid var(--hairline-strong);color:var(--text-faint);padding:2px 6px;margin-right:8px;border-radius:2px;text-transform:uppercase;letter-spacing:.1em;vertical-align:middle}.chat-input{border-top:1px solid var(--hairline);padding:12px 20px;background:var(--bg)}.chat-input form{display:flex;gap:8px}.chat-input input{flex:1}.summary-card{background:var(--surface);border:1px solid var(--hairline);border-radius:2px;padding:14px 16px;margin-bottom:14px;font-family:var(--font-mono);font-size:11px}.summary-card .row{display:flex;justify-content:space-between;align-items:baseline;padding:4px 0;border-bottom:1px solid var(--hairline)}.summary-card .row:last-child{border-bottom:none}.summary-card .row .key{color:var(--text-faint);text-transform:uppercase;font-size:10px;letter-spacing:.1em;font-weight:400}.summary-card .row .value{font-family:var(--font-mono);font-size:12px;font-weight:500;color:var(--text);font-variant-numeric:tabular-nums}.alert{font-family:var(--font-sans);padding:10px 14px;border-radius:2px;font-size:12px;line-height:1.5;margin-bottom:14px;border:1px solid}.alert-info{background:var(--accent-soft);color:var(--accent);border-color:#5eead42e}.alert-warn{background:var(--warn-soft);color:var(--warn);border-color:#fbbf242e}.alert-error{background:var(--error-soft);color:var(--error);border-color:#ef44442e}.empty-state{padding:48px 20px;text-align:left;color:var(--text-faint);font-family:var(--font-mono);font-size:11px;line-height:1.7;text-transform:none;letter-spacing:0}.empty-state b{color:var(--accent);font-weight:500}.upload-zone{border:1px dashed var(--hairline-strong);border-radius:2px;padding:14px;background:var(--surface);margin-bottom:4px;transition:border-color .12s ease,background .12s ease}.upload-zone:hover{border-color:var(--accent);background:var(--accent-soft)}.status-line{font-family:var(--font-mono);font-size:10px;font-weight:400;color:var(--text-soft);padding:6px 0;text-transform:uppercase;letter-spacing:.08em;font-variant-numeric:tabular-nums}.spinner{display:inline-block;width:10px;height:10px;border:1.5px solid var(--hairline-strong);border-top-color:var(--accent);border-radius:50%;animation:spin .7s linear infinite;vertical-align:-1px}@keyframes spin{to{transform:rotate(360deg)}}.js-plotly-plot .plotly .modebar-btn path{fill:var(--text-faint)!important}.js-plotly-plot .plotly .modebar-btn:hover path{fill:var(--accent)!important}.js-plotly-plot .plotly .modebar{background:transparent!important}
