/* --- extracted from lab-command.html block #1 --- */
:root{--bg:#060a10;--surface:rgba(15,23,42,.92);--surface2:rgba(30,41,59,.85);--surface3:rgba(51,65,85,.6);--border:rgba(148,163,184,.1);--text:#F1F5F9;--dim:#94A3B8;--accent:#0D9488;--accent2:#14B8A6;--glow:rgba(13,148,136,.25);--danger:#EF4444;--warn:#F59E0B;--success:#10B981;--purple:#8B5CF6;--font:'Inter',-apple-system,sans-serif;--heading:'DM Sans','Inter',sans-serif;--radius:10px}
*{box-sizing:border-box;margin:0;padding:0}
body{background:var(--bg);color:var(--text);font-family:var(--font);min-height:100vh;font-size:13px;line-height:1.5}
a{color:var(--accent);text-decoration:none}
button{font-family:var(--font);cursor:pointer}

.app{display:flex;min-height:calc(100vh - 52px)}

/* Sidebar — pinned; scrolls independently so the icon rail is always reachable
   while the main column free-scrolls. */
.sidebar{width:56px;background:var(--surface);border-right:1px solid var(--border);display:flex;flex-direction:column;align-items:center;padding:8px 0;gap:4px;flex-shrink:0;overflow-y:auto;position:sticky;top:52px;align-self:flex-start;max-height:calc(100vh - 52px)}
.sb-btn{width:42px;height:42px;border:none;border-radius:var(--radius);background:transparent;color:var(--dim);font-size:18px;display:flex;align-items:center;justify-content:center;transition:all .15s;position:relative}
.sb-btn:hover{background:var(--glow);color:var(--accent2)}
.sb-btn.active{background:var(--glow);color:var(--accent2);box-shadow:0 0 12px var(--glow)}
.sb-btn .sb-label{display:none;position:absolute;left:52px;background:var(--surface2);border:1px solid var(--border);padding:4px 8px;border-radius:6px;font-size:9px;white-space:nowrap;z-index:100}
.sb-btn:hover .sb-label{display:block}
.sb-badge{position:absolute;top:2px;right:2px;width:14px;height:14px;border-radius:50%;background:var(--danger);color:var(--text);font-size:7px;font-weight:800;display:flex;align-items:center;justify-content:center}

/* Main content — whole column scrolls as a single page. The banner + overview
   strip + stats row scroll off naturally with the panel content below, so
   nothing stays frozen at the top. The Lab Team chat panel overrides this
   back to a locked viewport (see rule below) because its input bar must stay
   docked at the bottom. */
.main{flex:1;display:flex;flex-direction:column;overflow:visible;min-width:0}

/* Stats banner */
.stats-banner{display:flex;gap:0;border-bottom:1px solid var(--border);background:linear-gradient(135deg,rgba(13,148,136,.05),rgba(139,92,246,.03))}
.stat-card{flex:1;padding:14px 16px;text-align:center;border-right:1px solid var(--border);transition:background .15s}
.stat-card:hover{background:var(--glow)}
.stat-card:last-child{border-right:none}
.stat-num{font-family:var(--heading);font-size:24px;font-weight:800;color:var(--accent2);letter-spacing:-.02em}
.stat-label{font-size:8px;color:var(--dim);text-transform:uppercase;letter-spacing:.1em;margin-top:2px}

/* Panels — render in-flow; the document itself scrolls. Only Lab Team
   (#p-team) gets a locked viewport so its chat input stays pinned. */
.panel{display:none;padding:16px}
.panel.active{display:block}
.panel#p-team.active{display:flex;height:calc(100vh - 52px);overflow:hidden}
.panel-title{font-family:var(--heading);font-size:18px;font-weight:800;color:var(--accent2);margin-bottom:14px;display:flex;align-items:center;gap:8px}

/* Card grid */
.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:10px}
.action-card{background:var(--surface2);border:1px solid var(--border);border-radius:var(--radius);padding:16px;transition:all .2s;position:relative;overflow:hidden}
.action-card:hover{border-color:rgba(13,148,136,.4);box-shadow:0 4px 20px var(--glow)}
.action-card::before{content:'';position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,var(--accent),var(--purple));opacity:0;transition:opacity .2s}
.action-card:hover::before{opacity:1}
.ac-icon{font-size:28px;margin-bottom:8px}
.ac-title{font-family:var(--heading);font-size:14px;font-weight:800;color:var(--text);margin-bottom:4px}
.ac-desc{font-size:10px;color:var(--dim);line-height:1.6;margin-bottom:10px}
.ac-btn{padding:7px 14px;border-radius:6px;border:none;font-size:10px;font-weight:700;transition:all .15s}
.ac-btn-primary{background:var(--accent);color:var(--text)}
.ac-btn-primary:hover{background:var(--accent2);box-shadow:0 0 16px var(--glow)}
.ac-btn-secondary{background:transparent;border:1px solid var(--border);color:var(--dim)}
.ac-btn-secondary:hover{border-color:var(--accent);color:var(--accent)}
.ac-status{font-size:8px;color:var(--dim);margin-top:6px}

/* Glow pulse animation */
@keyframes glow-pulse{0%,100%{box-shadow:0 0 5px var(--glow)}50%{box-shadow:0 0 20px var(--glow),0 0 40px rgba(13,148,136,.1)}}
.glow{animation:glow-pulse 3s ease-in-out infinite}

/* === DOPAMINE JUICE === */
@keyframes shimmer{0%{background-position:-200% 0}100%{background-position:200% 0}}
@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-4px)}}
@keyframes pop-in{0%{transform:scale(.8);opacity:0}60%{transform:scale(1.05)}100%{transform:scale(1);opacity:1}}
@keyframes border-dance{0%{border-color:rgba(13,148,136,.3)}33%{border-color:rgba(139,92,246,.3)}66%{border-color:rgba(16,185,129,.3)}100%{border-color:rgba(13,148,136,.3)}}
@keyframes count-glow{0%{text-shadow:0 0 0 transparent}50%{text-shadow:0 0 20px var(--accent2)}100%{text-shadow:0 0 0 transparent}}
@keyframes icon-bounce{0%,100%{transform:scale(1)}25%{transform:scale(1.15) rotate(-5deg)}75%{transform:scale(1.15) rotate(5deg)}}

/* Stats banner juice */
.stat-card{position:relative;overflow:hidden}
.stat-card::after{content:'';position:absolute;bottom:0;left:0;right:0;height:2px;background:linear-gradient(90deg,transparent,var(--accent2),transparent);opacity:0;transition:opacity .3s}
.stat-card:hover::after{opacity:1}
.stat-card:hover .stat-num{animation:count-glow 1s ease;transform:scale(1.08);transition:transform .2s}

/* Action card juice */
.action-card{animation:pop-in .4s ease-out backwards}
.action-card:nth-child(1){animation-delay:.05s}
.action-card:nth-child(2){animation-delay:.1s}
.action-card:nth-child(3){animation-delay:.15s}
.action-card:nth-child(4){animation-delay:.2s}
.action-card:nth-child(5){animation-delay:.25s}
.action-card:nth-child(6){animation-delay:.3s}
.action-card:hover{transform:translateY(-3px);border-color:rgba(13,148,136,.5)}
.action-card:hover .ac-icon{animation:icon-bounce .5s ease}

/* Button juice */
.ac-btn-primary{position:relative;overflow:hidden}
.ac-btn-primary::after{content:'';position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.15),transparent);background-size:200% 100%;opacity:0;transition:opacity .3s}
.ac-btn-primary:hover::after{opacity:1;animation:shimmer 1.5s linear infinite}
.ac-btn-primary:active{transform:scale(.95)}
.ac-btn-secondary:hover{transform:translateY(-1px);box-shadow:0 2px 8px rgba(13,148,136,.15)}
.ac-btn-secondary:active{transform:scale(.95)}

/* Sidebar juice */
.sb-btn{transition:all .2s cubic-bezier(.4,0,.2,1)}
.sb-btn:hover{transform:scale(1.15);background:var(--glow);color:var(--accent2)}
.sb-btn.active{transform:scale(1.1)}
.sb-btn:active{transform:scale(.9)}

/* Chat input glow */
#chat-input:focus{box-shadow:0 0 20px rgba(13,148,136,.2),0 0 40px rgba(13,148,136,.05);border-color:var(--accent2)}

/* Mission button special */
.ac-btn-secondary[onclick*="launchMission"]{background:linear-gradient(135deg,rgba(139,92,246,.08),rgba(13,148,136,.08));animation:border-dance 4s linear infinite}
.ac-btn-secondary[onclick*="launchMission"]:hover{background:linear-gradient(135deg,rgba(139,92,246,.2),rgba(13,148,136,.15));box-shadow:0 0 20px rgba(139,92,246,.2)}

/* Panel title animated underline */
.panel-title{position:relative;padding-bottom:8px}
.panel-title::after{content:'';position:absolute;bottom:0;left:0;width:60px;height:2px;background:linear-gradient(90deg,var(--accent2),var(--purple));border-radius:1px}

/* Card table row hover glow */
.card-table tr:hover{background:linear-gradient(90deg,var(--glow),transparent);transition:background .2s}

/* Suggestion hover lift */
.suggestion{transition:all .2s}
.suggestion:hover{transform:translateX(4px);border-color:rgba(13,148,136,.4);box-shadow:0 2px 12px rgba(13,148,136,.1)}

/* Scrollbar styling */
::-webkit-scrollbar{width:4px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:rgba(13,148,136,.2);border-radius:2px}
::-webkit-scrollbar-thumb:hover{background:rgba(13,148,136,.4)}

/* Card table */
.card-table{width:100%;border-collapse:collapse;font-size:10px}
.card-table th{position:sticky;top:0;z-index:2;background:var(--surface);padding:8px 6px;text-align:left;font-size:9px;text-transform:uppercase;letter-spacing:.08em;color:var(--dim);border-bottom:2px solid var(--border);cursor:pointer}
.card-table td{padding:6px;border-bottom:1px solid var(--border);max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.card-table tr:hover{background:var(--glow)}
.card-table tr{cursor:pointer}

/* Tier/confidence badges */
.badge{font-size:8px;padding:2px 6px;border-radius:4px;font-weight:700}
.badge-t1{background:rgba(16,185,129,.12);color:var(--success);border:1px solid rgba(16,185,129,.3)}
.badge-t2{background:rgba(59,130,246,.1);color:#3B82F6;border:1px solid rgba(59,130,246,.3)}
.badge-t3{background:rgba(245,158,11,.08);color:var(--warn);border:1px solid rgba(245,158,11,.3)}
.badge-t4{background:rgba(107,114,128,.08);color:var(--muted);border:1px solid rgba(107,114,128,.3)}

/* Suggestion items */
.suggestion{display:flex;align-items:center;gap:10px;padding:10px 12px;background:var(--surface2);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:6px;transition:all .15s}
.suggestion:hover{border-color:rgba(13,148,136,.3)}
.sug-icon{font-size:20px;flex-shrink:0}
.sug-body{flex:1;min-width:0}
.sug-msg{font-size:11px;color:var(--text)}
.sug-meta{font-size:9px;color:var(--dim);margin-top:2px}
.sug-btn{padding:5px 10px;border-radius:5px;border:none;font-size:9px;font-weight:700;flex-shrink:0}
.sug-high{border-left:3px solid var(--danger)}
.sug-medium{border-left:3px solid var(--warn)}
.sug-low{border-left:3px solid var(--dim)}

/* Quick research bar */
.qr-bar{display:flex;gap:8px;margin-bottom:12px}
.qr-input{flex:1;padding:10px 14px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);font-size:12px;outline:none}
.qr-input:focus{border-color:var(--accent);box-shadow:0 0 12px var(--glow)}
.qr-input::placeholder{color:var(--dim)}

/* Agent output */
.agent-output{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);padding:14px;font-family:'Roboto Mono',monospace;font-size:10px;color:var(--dim);max-height:400px;overflow-y:auto;white-space:pre-wrap;line-height:1.6}

/* Mini graph container */
#mini-graph{width:100%;height:500px;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}

/* Detail slide-in */
#card-editor{position:fixed;top:52px;right:0;width:420px;bottom:0;z-index:20;background:var(--surface);border-left:1px solid var(--border);backdrop-filter:blur(20px);transform:translateX(420px);transition:transform .3s;overflow-y:auto}
#card-editor.open{transform:translateX(0)}
.ce-close{position:absolute;top:10px;right:10px;background:var(--bg-card);border:1px solid var(--border);color:var(--dim);padding:4px 10px;border-radius:6px;cursor:pointer;font-size:11px;z-index:1}
.ce-field{margin-bottom:10px}
.ce-label{font-size:9px;color:var(--dim);text-transform:uppercase;letter-spacing:.08em;margin-bottom:3px;font-weight:700}
.ce-input{width:100%;padding:6px 10px;background:var(--bg);border:1px solid var(--border);border-radius:6px;color:var(--text);font-size:11px;outline:none}
.ce-input:focus{border-color:var(--accent)}
.ce-textarea{width:100%;padding:6px 10px;background:var(--bg);border:1px solid var(--border);border-radius:6px;color:var(--text);font-size:10px;outline:none;resize:vertical;min-height:50px}

/* Inline gene cards */
.chat-gene-card{margin:8px 0;padding:10px;border-radius:10px;border:1px solid rgba(139,92,246,.3);background:linear-gradient(135deg,rgba(139,92,246,.06),rgba(0,0,0,.3));position:relative}
.chat-gene-card .cgc-name{font-size:13px;font-weight:900;color:var(--purple);display:flex;align-items:center;gap:6px}
.chat-gene-card .cgc-rsid{font-size:9px;color:var(--dim);font-family:monospace}
.chat-gene-card .cgc-badges{display:flex;gap:4px;margin:4px 0}
.chat-gene-card .cgc-badge{font-size:7px;padding:1px 6px;border-radius:4px;font-weight:700}
.chat-gene-card .cgc-chips{display:flex;flex-wrap:wrap;gap:3px;margin:6px 0}
.chat-gene-card .cgc-chip{font-size:8px;padding:2px 6px;border-radius:4px;background:rgba(13,148,136,.08);border:1px solid rgba(13,148,136,.2);color:var(--accent)}
.chat-gene-card .cgc-actions{display:flex;gap:4px;margin-top:6px}
/* Inline peptide cards */
.chat-pep-card{margin:8px 0;padding:10px;border-radius:10px;border:1px solid rgba(16,185,129,.3);background:linear-gradient(135deg,rgba(16,185,129,.06),rgba(0,0,0,.3))}
.chat-pep-card .cpc-name{font-size:13px;font-weight:900;color:#10B981;display:flex;align-items:center;gap:6px}
.chat-pep-card .cpc-desc{font-size:9px;color:var(--dim);margin:4px 0;line-height:1.5}
.chat-pep-card .cpc-actions{display:flex;gap:4px;margin-top:6px}
/* Mission mode */
@keyframes mission-pulse{0%,100%{opacity:.6}50%{opacity:1}}
@keyframes spin{to{transform:rotate(360deg)}}
.mission-banner{margin:10px 0;padding:12px 16px;border-radius:var(--radius);border:1px solid rgba(139,92,246,.3);background:linear-gradient(135deg,rgba(139,92,246,.08),rgba(13,148,136,.04));position:relative;overflow:hidden}
.mission-banner::before{content:'';position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,var(--accent),var(--purple),var(--accent));background-size:200% 100%;animation:gradient-slide 2s linear infinite}
@keyframes gradient-slide{0%{background-position:0% 0}100%{background-position:200% 0}}
.mission-title{font-family:var(--heading);font-size:14px;font-weight:800;color:var(--purple);display:flex;align-items:center;gap:6px}
.mission-tracker{display:flex;gap:4px;margin:10px 0;flex-wrap:wrap}
.mission-agent{display:flex;align-items:center;gap:4px;padding:4px 10px;border-radius:6px;font-size:9px;font-weight:700;border:1px solid var(--border);background:var(--surface);color:var(--dim);transition:all .3s}
.mission-agent.active{border-color:rgba(139,92,246,.5);background:rgba(139,92,246,.1);color:var(--purple);animation:mission-pulse 1.5s ease-in-out infinite}
.mission-agent.done{border-color:rgba(16,185,129,.4);background:rgba(16,185,129,.08);color:var(--success)}
.mission-agent .ma-spinner{width:10px;height:10px;border:2px solid rgba(139,92,246,.3);border-top-color:var(--purple);border-radius:50%;animation:spin .8s linear infinite;display:none}
.mission-agent.active .ma-spinner{display:inline-block}
.mission-summary{margin:12px 0;padding:12px;border-radius:var(--radius);border:1px solid rgba(13,148,136,.3);background:linear-gradient(135deg,rgba(13,148,136,.06),rgba(0,0,0,.3))}
.mission-summary .ms-title{font-family:var(--heading);font-size:13px;font-weight:800;color:var(--accent2);margin-bottom:6px}
.mission-summary .ms-stats{font-size:9px;color:var(--dim);display:flex;gap:10px;margin-bottom:8px}
@media(max-width:768px){.sidebar{width:44px}.stat-card{padding:8px 4px}.stat-num{font-size:16px}}

/* ── Lab Notebook panel ─────────────────────────────────────── */
.nb-wrap{display:flex;gap:12px;height:calc(100vh - 170px);min-height:420px}
.nb-list-col{flex:0 0 280px;display:flex;flex-direction:column;gap:8px;overflow-y:auto;padding-right:4px}
.nb-detail-col{flex:1;min-width:0;overflow-y:auto;padding-left:4px}
.nb-entry-card{background:var(--surface2);border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px;cursor:pointer;transition:all .15s;position:relative}
.nb-entry-card:hover{border-color:rgba(13,148,136,.5);transform:translateY(-1px);box-shadow:0 2px 12px rgba(13,148,136,.12)}
.nb-entry-card.selected{border-color:var(--accent2);background:linear-gradient(135deg,rgba(13,148,136,.08),rgba(139,92,246,.04));box-shadow:0 0 16px var(--glow)}
.nb-entry-title{font-family:var(--heading);font-size:12px;font-weight:800;color:var(--text);margin-bottom:3px;display:flex;align-items:center;gap:6px}
.nb-entry-meta{font-size:8px;color:var(--dim);text-transform:uppercase;letter-spacing:.06em;margin-bottom:5px}
.nb-entry-chips{display:flex;flex-wrap:wrap;gap:3px}
.nb-entry-chip{font-size:8px;padding:1px 6px;border-radius:999px;background:rgba(13,148,136,.12);border:1px solid rgba(13,148,136,.28);color:var(--accent2);font-weight:700}
.nb-persona-badge{font-size:7px;padding:1px 6px;border-radius:3px;background:rgba(139,92,246,.12);border:1px solid rgba(139,92,246,.3);color:var(--purple);text-transform:uppercase;letter-spacing:.08em;font-weight:800;margin-left:auto}
.nb-new-badge{font-size:7px;padding:1px 5px;border-radius:3px;background:rgba(16,185,129,.16);color:var(--success);font-weight:800;margin-left:auto}
.nb-star{position:absolute;top:6px;right:8px;font-size:11px;color:var(--warn)}
.nb-empty{padding:20px;text-align:center;color:var(--dim);font-size:11px}

/* Subject chip grid */
.nb-subject{background:var(--surface2);border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px;margin-bottom:8px;transition:border-color .15s}
.nb-subject:hover{border-color:rgba(13,148,136,.35)}
.nb-sub-head{display:flex;align-items:center;gap:8px;margin-bottom:6px;flex-wrap:wrap}
.nb-sub-label{font-family:var(--heading);font-size:13px;font-weight:800;color:var(--text);display:flex;align-items:center;gap:6px}
.nb-sub-type{font-size:7px;padding:1px 6px;border-radius:3px;text-transform:uppercase;letter-spacing:.08em;font-weight:800}
.nb-sub-type.gene{background:var(--accent-dim);color:var(--accent);border:1px solid var(--border)}
.nb-sub-type.snp{background:var(--accent-dim);color:var(--purple);border:1px solid var(--border)}
.nb-sub-type.peptide{background:rgba(16,185,129,.12);color:var(--success);border:1px solid rgba(16,185,129,.3)}
.nb-sub-type.pathway{background:rgba(139,92,246,.12);color:var(--purple);border:1px solid rgba(139,92,246,.3)}
.nb-sub-type.condition{background:rgba(245,158,11,.12);color:var(--warn);border:1px solid rgba(245,158,11,.3)}
.nb-sub-type.pmid{background:var(--accent-dim);color:var(--info);border:1px solid var(--border)}
.nb-sub-type.dose{background:linear-gradient(135deg,rgba(245,158,11,.12),rgba(16,185,129,.12));color:#fbbf24;border:1px solid rgba(245,158,11,.35)}
.nb-card-tier{font-size:7px;padding:1px 5px;border-radius:3px;font-weight:800}
.nb-tier-1{background:rgba(16,185,129,.14);color:var(--success);border:1px solid rgba(16,185,129,.35)}
.nb-tier-2{background:rgba(59,130,246,.14);color:#3B82F6;border:1px solid rgba(59,130,246,.35)}
.nb-tier-3{background:rgba(245,158,11,.14);color:var(--warn);border:1px solid rgba(245,158,11,.35)}
.nb-tier-4{background:rgba(107,114,128,.14);color:var(--muted);border:1px solid rgba(107,114,128,.35)}
.nb-sub-links{display:flex;flex-wrap:wrap;gap:4px;margin:6px 0}
.nb-link-pill{font-size:8px;padding:3px 8px;border-radius:999px;text-decoration:none;border:1px solid var(--border);background:var(--bg-card);color:var(--text);font-weight:700;transition:all .15s}
.nb-link-pill.internal{background:rgba(13,148,136,.1);border-color:rgba(13,148,136,.35);color:var(--accent2)}
.nb-link-pill.external{background:var(--bg-card);border-color:rgba(255,255,255,.12);color:var(--dim)}
.nb-link-pill:hover{transform:translateY(-1px);border-color:var(--accent2);color:var(--accent2);box-shadow:0 2px 8px var(--glow)}
.nb-summary{font-size:11px;color:var(--text);line-height:1.6;margin:6px 0;padding:8px 10px;background:var(--bg);border-left:2px solid var(--accent);border-radius:4px}
.nb-dyk{font-size:10px;color:var(--warn);background:rgba(245,158,11,.06);border-left:2px solid var(--warn);padding:6px 8px;border-radius:4px;margin:4px 0;font-style:italic}
.nb-mechanism{font-size:10px;color:var(--dim);line-height:1.55;margin:4px 0}
.nb-sub-actions{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px}
.nb-expansion{margin-top:8px;padding:8px 10px;background:rgba(139,92,246,.05);border:1px solid rgba(139,92,246,.2);border-radius:6px}
.nb-expansion .nbe-head{font-size:9px;font-weight:800;color:var(--purple);text-transform:uppercase;letter-spacing:.08em;margin-bottom:4px;display:flex;align-items:center;gap:6px}
.nb-expansion .nbe-body{font-size:10px;color:var(--text);line-height:1.6}
.nb-expansion .nbe-refs{margin-top:6px;display:flex;flex-direction:column;gap:2px}
.nb-expansion .nbe-refs a{font-size:9px;color:var(--accent2);text-decoration:underline}

.nb-section-head{font-family:var(--heading);font-size:12px;font-weight:800;color:var(--dim);text-transform:uppercase;letter-spacing:.1em;margin:14px 0 6px;display:flex;align-items:center;gap:6px}
.nb-excerpt{font-size:10px;color:var(--dim);font-style:italic;padding:6px 10px;border-left:2px solid rgba(255,255,255,.12);margin:4px 0;line-height:1.55}
.nb-excerpt b{color:var(--text);font-style:normal;font-weight:700;margin-right:4px}
.nb-operator-note{font-size:10px;color:var(--text);padding:6px 10px;background:var(--surface2);border-left:2px solid var(--accent);border-radius:4px;margin:4px 0}
.nb-operator-note .nbn-meta{font-size:8px;color:var(--dim);margin-bottom:2px}
.nb-team-feed{padding:8px 10px;background:rgba(13,148,136,.04);border-left:2px solid var(--accent2);border-radius:4px;margin:4px 0}
.nb-team-feed .nbt-head{font-size:9px;font-weight:800;color:var(--accent2);margin-bottom:3px}
.nb-team-feed .nbt-body{font-size:10px;color:var(--text);line-height:1.55}
.nb-spinner{display:inline-block;width:10px;height:10px;border:2px solid rgba(139,92,246,.3);border-top-color:var(--purple);border-radius:50%;animation:spin .8s linear infinite;vertical-align:middle}
@media(max-width:900px){.nb-wrap{flex-direction:column;height:auto}.nb-list-col{flex:0 0 auto;max-height:280px}}

/* Notebook toolbar — tab switcher + search + NEW badge */
.nb-tabs{display:flex;gap:4px;margin-bottom:8px;padding:3px;background:var(--surface);border:1px solid var(--border);border-radius:10px}
.nb-tab{flex:1;padding:7px 12px;font-size:10px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;border:none;background:transparent;color:var(--dim);cursor:pointer;border-radius:7px;transition:.15s;font-family:inherit}
.nb-tab.active{background:var(--glow);color:var(--accent2);box-shadow:0 0 10px var(--glow)}
.nb-tab .nb-tab-count{font-size:8px;font-weight:900;padding:1px 5px;border-radius:999px;background:var(--bg-card);margin-left:4px;color:var(--text)}
.nb-search{width:100%;padding:8px 12px;background:var(--surface);border:1px solid var(--border);border-radius:8px;color:var(--text);font-size:11px;outline:none;margin-bottom:8px;font-family:inherit;transition:.15s}
.nb-search:focus{border-color:var(--accent2);box-shadow:0 0 12px var(--glow)}
.nb-search::placeholder{color:var(--dim)}

/* Dossier card (list column, Dossiers tab) */
.nb-dossier-card{background:var(--surface2);border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px;cursor:pointer;transition:all .15s;position:relative;display:flex;flex-direction:column;gap:4px}
.nb-dossier-card:hover{border-color:rgba(139,92,246,.5);transform:translateY(-1px);box-shadow:0 2px 12px rgba(139,92,246,.15)}
.nb-dossier-card.selected{border-color:var(--purple);background:linear-gradient(135deg,rgba(139,92,246,.08),rgba(13,148,136,.04));box-shadow:0 0 14px rgba(139,92,246,.2)}
.nb-dossier-head{display:flex;align-items:center;gap:6px;font-family:var(--heading);font-size:12px;font-weight:800;color:var(--text)}
.nb-dossier-type{font-size:7px;padding:1px 5px;border-radius:3px;text-transform:uppercase;letter-spacing:.08em;font-weight:800;flex-shrink:0}
.nb-dossier-meta{font-size:8px;color:var(--dim);letter-spacing:.06em;text-transform:uppercase;display:flex;gap:6px;flex-wrap:wrap}
.nb-dossier-meta .nbd-version{color:var(--purple);font-weight:800}
.nb-dossier-meta .nbd-mentions{color:var(--accent2);font-weight:800}
.nb-dossier-pin-star{position:absolute;top:6px;right:8px;font-size:11px;color:var(--warn);cursor:pointer}

/* Dossier detail view (right column when Dossiers tab active) */
.nb-dossier-view{background:var(--surface2);border:1px solid rgba(139,92,246,.3);border-radius:var(--radius);padding:16px 18px}
.nb-dossier-view h1{font-family:var(--heading);font-size:22px;font-weight:900;color:var(--accent2);margin-bottom:8px;display:flex;align-items:center;gap:8px}
.nb-dossier-view h3{font-family:var(--heading);font-size:12px;font-weight:800;color:var(--purple);text-transform:uppercase;letter-spacing:.1em;margin:14px 0 6px;padding-bottom:3px;border-bottom:1px solid rgba(139,92,246,.2)}
.nb-dossier-view p{font-size:12px;line-height:1.65;color:var(--text);margin:4px 0}
.nb-dossier-view ul{padding-left:16px;margin:4px 0}
.nb-dossier-view li{font-size:11px;color:var(--text);line-height:1.55;margin:3px 0}
.nb-dossier-view strong{color:var(--accent2);font-weight:800}
.nb-dossier-view em{color:var(--text);font-style:italic}
.nb-dossier-view code{background:var(--bg-card);padding:1px 5px;border-radius:3px;font-size:10px;font-family:'Roboto Mono',monospace;color:var(--warning)}
.nb-dossier-toolbar{display:flex;gap:6px;flex-wrap:wrap;margin-top:12px;padding-top:10px;border-top:1px solid var(--border)}
.nb-dossier-mention{padding:6px 10px;background:rgba(13,148,136,.04);border-left:2px solid var(--accent);border-radius:4px;margin:4px 0;font-size:10px;color:var(--text);cursor:pointer;transition:.15s}
.nb-dossier-mention:hover{background:rgba(13,148,136,.1);border-color:var(--accent2)}
.nb-dossier-mention .nbdm-meta{font-size:8px;color:var(--dim);margin-bottom:2px;display:flex;gap:8px}
.nb-dossier-history{font-size:9px;color:var(--dim);padding:6px 8px;background:var(--bg-card);border-radius:4px;margin:3px 0;cursor:pointer;transition:.15s}
.nb-dossier-history:hover{background:rgba(139,92,246,.06);color:var(--purple)}

/* NEW badge on 📓 sidebar button */
.sb-btn .nb-new-count{position:absolute;top:2px;right:2px;min-width:14px;height:14px;padding:0 3px;border-radius:7px;background:linear-gradient(135deg,#10B981,#0D9488);color:var(--text);font-size:7px;font-weight:900;display:flex;align-items:center;justify-content:center;box-shadow:0 0 8px rgba(16,185,129,.5);animation:glow-pulse 2.5s ease-in-out infinite}

/* Full transcript block (rendered inline as lab notes) */
.nb-transcript{background:var(--surface2);border:1px solid var(--border);border-radius:var(--radius);padding:12px 14px;margin:4px 0 12px;max-height:520px;overflow-y:auto}
.nb-tx-line{display:flex;gap:8px;margin-bottom:8px;font-size:11px;line-height:1.6}
.nb-tx-line.user{color:var(--text)}
.nb-tx-line.assistant{color:var(--text)}
.nb-tx-speaker{flex:0 0 58px;font-weight:800;font-size:9px;letter-spacing:.08em;text-transform:uppercase;padding-top:2px}
.nb-tx-speaker.user{color:var(--accent2)}
.nb-tx-speaker.assistant{color:var(--purple)}
.nb-tx-body{flex:1;min-width:0;color:var(--text);word-break:break-word}
.nb-tx-body a.tx-ilink{text-decoration:none;font-weight:700;padding:0 3px;border-radius:3px;transition:.15s}
.nb-tx-body a.tx-ilink.gene{color:var(--accent);background:var(--accent-dim);border:1px solid var(--border)}
.nb-tx-body a.tx-ilink.gene:hover{background:rgba(0,255,163,.18)}
.nb-tx-body a.tx-ilink.snp{color:var(--purple);background:var(--accent-dim);border:1px solid var(--border);font-family:'Roboto Mono',monospace;font-size:10px}
.nb-tx-body a.tx-ilink.snp:hover{background:var(--accent-dim)}
.nb-tx-body a.tx-ilink.peptide{color:#10B981;background:rgba(16,185,129,.08);border:1px solid rgba(16,185,129,.2)}
.nb-tx-body a.tx-ilink.peptide:hover{background:rgba(16,185,129,.18)}
.nb-tx-body a.tx-ilink.pmid{color:var(--info);background:var(--accent-dim);border:1px solid var(--border);font-size:10px}
.nb-tx-body a.tx-ilink.pmid:hover{background:var(--accent-dim)}
.nb-tx-body a.tx-ilink.pathway{color:var(--purple);background:rgba(139,92,246,.08);border:1px solid rgba(139,92,246,.2)}
.nb-tx-body a.tx-ilink.pathway:hover{background:rgba(139,92,246,.18)}
.nb-tx-body a.tx-ilink.condition{color:var(--warn);background:rgba(245,158,11,.08);border:1px solid rgba(245,158,11,.2)}
.nb-tx-body a.tx-ilink.condition:hover{background:rgba(245,158,11,.18)}
.nb-transcript-toolbar{display:flex;gap:6px;justify-content:flex-end;margin-top:6px;padding-top:6px;border-top:1px solid var(--border)}

/* ── Phase 20 animated LAB COMMAND banner (matches Video/Image Studio) ── */
#lab-banner{padding:10px 16px;border-bottom:1px solid rgba(180,122,255,.25);
  background:linear-gradient(90deg,rgba(0,255,163,.12),rgba(58,201,255,.08),rgba(180,122,255,.14),rgba(255,100,200,.08),rgba(0,255,163,.12));
  background-size:400% 100%;animation:lab-banner-flow 10s linear infinite;
  display:flex;align-items:center;justify-content:center;gap:12px;
  flex-shrink:0;position:relative;overflow:hidden}
@keyframes lab-banner-flow{0%{background-position:0% 50%}100%{background-position:400% 50%}}
#lab-banner::before,#lab-banner::after{content:"";position:absolute;top:50%;
  width:6px;height:6px;border-radius:50%;background:rgba(255,255,255,.95);filter:blur(2px);
  animation:lab-banner-orbit 7s linear infinite;box-shadow:0 0 10px currentColor;color:var(--accent)}
#lab-banner::before{left:-2%;transform:translateY(-50%)}
#lab-banner::after{right:-2%;transform:translateY(-50%);animation-delay:-3.5s;color:var(--purple)}
@keyframes lab-banner-orbit{0%{left:-4%}50%{left:104%}100%{left:-4%}}
#lab-banner h1{font-family:"Orbitron",monospace;font-size:15px;font-weight:900;
  letter-spacing:.36em;color:transparent;background:linear-gradient(90deg,#00ffa3,#3ac9ff,#b47aff,#ff64c8,#00ffa3);
  background-size:300% auto;-webkit-background-clip:text;background-clip:text;
  animation:lab-banner-text 5s linear infinite;text-transform:uppercase;margin:0;z-index:2;
  filter:drop-shadow(0 0 8px rgba(58,201,255,.3))}
@keyframes lab-banner-text{0%{background-position:0% 50%}100%{background-position:300% 50%}}
#lab-banner .lb-sub{font-size:9px;color:var(--text);letter-spacing:.22em;
  text-transform:uppercase;z-index:2;font-weight:700}

/* ── Breakpoint QA Fixes (auto-generated 2026-04-16) ── */
button, [role="button"], .btn { max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
[style*="display:flex"], [style*="display: flex"] { flex-wrap: wrap; }
[style*="gap"] { min-width: 0; }
@media (max-width: 480px) {
  [style*="display:flex"], [style*="display: flex"] { flex-wrap: wrap !important; gap: 6px !important; }
  [style*="grid-template-columns"] { grid-template-columns: 1fr !important; }
  [style*="width:"][style*="px"] { max-width: 100vw !important; }
  button, .btn, a[style*="padding"] { max-width: 100% !important; white-space: normal !important; }
}
@media (max-width: 768px) {
  [style*="display:flex"] { flex-wrap: wrap !important; }
  [style*="position:fixed"] { max-width: 100vw; }
}

/* ── LAB ROUNDTABLE CHAT — mobile-first rebuild ──
   Global `[style*="display:flex"]{flex-wrap:wrap}` up above was turning
   #chat-msgs (flex-direction:column) into a SIDEWAYS-wrapping list on
   Android. These rules override that so the chat flows top-to-bottom, and
   the input bar sticks to the bottom even when the soft keyboard opens. */
#p-team{position:relative;min-height:0}
#p-team.active{display:flex!important;flex-direction:column!important;flex-wrap:nowrap!important;height:calc(100dvh - 52px);max-height:calc(100dvh - 52px);padding:0!important}
#chat-msgs{display:flex!important;flex-direction:column!important;flex-wrap:nowrap!important;align-items:stretch!important;overflow-y:auto!important;overflow-x:hidden!important;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;padding-bottom:20px}
#chat-msgs > *{flex:0 0 auto;width:100%;min-width:0}
.lab-chat-input-bar{display:flex!important;flex-wrap:nowrap!important;gap:6px;padding:8px 10px calc(8px + env(safe-area-inset-bottom,0)) 10px;border-top:1px solid var(--border);background:var(--surface);flex-shrink:0;position:sticky;bottom:0;z-index:5}
.lab-chat-input-bar #chat-input{flex:1 1 auto;min-width:0;padding:12px 14px;font-size:16px;/* 16px prevents iOS zoom + Android scaling */}
.lab-chat-input-bar .lab-send,.lab-chat-input-bar .lab-mission{flex:0 0 auto;padding:12px 14px;font-size:13px;font-weight:800;border-radius:8px;border:none;cursor:pointer}
.lab-chat-input-bar .lab-send{background:var(--accent);color:var(--text)}
.lab-chat-input-bar .lab-mission{background:transparent;color:var(--purple);border:1px solid rgba(139,92,246,.35)}

/* Agent bubble — matches main-chat look, wider name chip, copy + play buttons */
.labchat-row{display:flex;gap:10px;align-items:flex-start;animation:labchat-in .28s ease-out both}
.labchat-row.user{justify-content:flex-end}
.labchat-row.user .labchat-bubble{background:var(--accent);color:var(--text);border-radius:14px 2px 14px 14px;max-width:82%}
.labchat-avatar{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0;border:1px solid var(--border);transition:box-shadow .2s}
.labchat-bubble{flex:1;min-width:0;max-width:82%;background:var(--surface2);border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:2px 14px 14px 14px;padding:10px 12px;word-break:break-word;overflow-wrap:anywhere;position:relative;overflow:hidden}

/* Phase 20.11 — per-specialist branded cards. The bubble's background is a
   vertical gradient stamped with the agent's color (set inline from JS),
   with a thin accent stripe on top so each scientist is unmistakable at a
   glance. `--agent-color` is set on the .labchat-row from JS. */
.labchat-branded{border-top-color:rgba(0,0,0,.25)}
.labchat-accent{position:absolute;top:0;left:0;right:0;height:2px;pointer-events:none}
.labchat-badge{display:inline-flex;align-items:center;justify-content:center;
  width:22px;height:22px;border-radius:50%;font-size:13px;flex-shrink:0;margin-right:2px}
.labchat-row:hover .labchat-avatar{box-shadow:0 0 18px var(--agent-color, var(--accent))}
/* Subtle color-tinted banner per known specialist so even without inline style
   the specialist is recognizable. Targets .labchat-row[data-lab-slug=...]. */
.labchat-row[data-lab-slug="genetic_researcher"]  .labchat-bubble{--agent-color:#0D9488}
.labchat-row[data-lab-slug="pathway_analyst"]     .labchat-bubble{--agent-color:var(--purple)}
.labchat-row[data-lab-slug="biomarker_specialist"].labchat-bubble,
.labchat-row[data-lab-slug="biomarker_specialist"] .labchat-bubble{--agent-color:#F59E0B}
.labchat-row[data-lab-slug="gene_historian"]      .labchat-bubble{--agent-color:#06B6D4}
.labchat-row[data-lab-slug="genetic_engineer"]    .labchat-bubble{--agent-color:#EC4899}
.labchat-row[data-lab-slug="peptide_researcher"]  .labchat-bubble{--agent-color:#10B981}
.labchat-head{display:flex;align-items:center;gap:6px;margin-bottom:4px;flex-wrap:wrap}
.labchat-name{font-family:var(--heading);font-size:12px;font-weight:800;letter-spacing:.02em}
.labchat-role{font-size:9px;color:var(--dim);font-weight:500}
.labchat-tools{margin-left:auto;display:flex;gap:4px}
.labchat-tools button{font-size:10px;padding:2px 7px;border-radius:5px;border:1px solid var(--border);background:var(--bg-card);color:var(--dim);cursor:pointer;line-height:1.2}
.labchat-tools button:hover{color:var(--accent2);border-color:var(--accent2)}
.labchat-tools button.is-playing{background:var(--accent);color:var(--text);border-color:var(--accent)}
.labchat-body{font-size:13.5px;color:var(--text);line-height:1.55;word-break:break-word;overflow-wrap:anywhere}
.labchat-body p{margin:0 0 6px}
.labchat-body ul{padding-left:14px;margin:4px 0 6px;list-style:none}
.labchat-body ul>li{position:relative;padding:0 0 0 12px;line-height:1.5;margin:2px 0}
.labchat-body ul>li::before{content:'▸';position:absolute;left:0;color:var(--accent2);font-size:10px;line-height:1.5}
.labchat-body ol{padding-left:18px;margin:4px 0 6px}
.labchat-body ol>li{line-height:1.5;margin:2px 0}
.labchat-body ol>li::marker{color:var(--accent2);font-weight:900;font-size:11px}
.labchat-body a{color:var(--accent2);text-decoration:none;border-bottom:1px solid rgba(20,184,166,.35);transition:.15s}
.labchat-body a:hover{border-bottom-color:var(--accent2);color:#22D3EE}
.labchat-body code:not(pre code){background:rgba(255,255,255,.07);padding:1px 5px;border-radius:5px;font-size:11.5px;
  color:var(--warning);font-family:'Roboto Mono',monospace;border:1px solid var(--border)}
.labchat-body strong{color:var(--accent2);font-weight:900;letter-spacing:.01em}
.labchat-body em{font-style:italic;color:var(--info)}
.labchat-body u{text-decoration:underline;text-underline-offset:3px;text-decoration-color:rgba(20,184,166,.55)}

/* Phase 20.14 — Lab chat rich-text headings, callouts, rules, code, pills. */
.labchat-body h1{margin:6px 0 3px;color:var(--accent2);font-size:17px;font-weight:900;letter-spacing:.01em;
  border-bottom:2px solid var(--accent2);padding-bottom:2px}
.labchat-body h2{margin:5px 0 2px;color:var(--accent2);font-size:15px;font-weight:900;letter-spacing:.01em;
  border-bottom:1.5px solid rgba(20,184,166,.45);padding-bottom:1px}
.labchat-body h3{margin:4px 0 1px;font-size:13.5px;color:var(--text);font-weight:800;
  border-bottom:1px solid var(--border);padding-bottom:1px}
.labchat-body h4{margin:3px 0 1px;font-size:12.5px;color:var(--text);font-weight:700}
.labchat-body blockquote{border-left:3px solid var(--accent2);padding:6px 12px;margin:4px 0;color:var(--text);
  font-size:12px;background:rgba(20,184,166,.05);border-radius:6px 14px 14px 6px}
.labchat-body hr{border:none;height:1px;margin:6px 0;
  background:linear-gradient(90deg,var(--accent2),var(--border),transparent)}
.labchat-body .msg-lead{font-size:13px;font-weight:700;line-height:1.5;color:var(--text);padding:6px 12px;
  border-left:3px solid #3ac9ff;background:var(--accent-dim);margin:4px 0;border-radius:0 12px 12px 0}
.labchat-body .msg-body{font-size:13px;line-height:1.5;padding:3px 0;margin:2px 0;
  border-bottom:1px solid var(--border)}
/* Callout blocks */
.labchat-body .msg-callout{padding:6px 12px;border-radius:10px;margin:4px 0;font-size:12.5px;line-height:1.5;
  display:flex;gap:8px;align-items:flex-start}
.labchat-body .msg-callout-icon{font-size:14px;flex-shrink:0;line-height:1.3}
.labchat-body .msg-callout-body{flex:1;min-width:0}
.labchat-body .msg-callout.tip    {background:rgba(20,184,166,.07);border:1px solid rgba(20,184,166,.3);color:var(--text)}
.labchat-body .msg-callout.warn   {background:rgba(245,158,11,.08);border:1px solid rgba(245,158,11,.3);color:var(--text)}
.labchat-body .msg-callout.error  {background:rgba(239,68,68,.08);border:1px solid rgba(239,68,68,.3);color:var(--text)}
.labchat-body .msg-callout.info   {background:var(--accent-dim);border:1px solid var(--border);color:var(--text)}
.labchat-body .msg-callout.success{background:rgba(16,185,129,.08);border:1px solid rgba(16,185,129,.3);color:var(--text)}
/* Status chips */
.labchat-body .kw-status-ok {color:var(--success);font-weight:800}
.labchat-body .kw-status-err{color:var(--danger);font-weight:800}
.labchat-body .kw-status-warn{color:var(--warn);font-weight:800}
.labchat-body .kw-status-wip{color:var(--info);font-weight:800}
/* Code blocks */
.labchat-body .code-block{margin:6px 0;border-radius:10px;overflow:hidden;
  border:1px solid rgba(139,92,246,.22);background:rgba(0,0,0,.35)}
.labchat-body .code-header{display:flex;align-items:center;justify-content:space-between;padding:4px 10px;
  background:rgba(0,0,0,.55);border-bottom:1px solid var(--border);font-size:8px}
.labchat-body .code-lang{color:var(--purple);font-weight:800;text-transform:uppercase;letter-spacing:.08em}
.labchat-body .code-block pre{margin:0!important;padding:9px 12px!important;background:transparent!important;
  font-size:11px!important;line-height:1.5!important;overflow-x:auto;max-height:300px;overflow-y:auto}
.labchat-body .code-block pre code{font-family:'Roboto Mono',monospace!important}
/* Scientific entity highlights (gene / rsID / peptide / pathway / condition / PMID) */
.labchat-body .chat-kw-gene{color:var(--accent);font-weight:800;font-family:'Roboto Mono',monospace;font-size:11.5px;
  background:var(--accent-dim);padding:0 5px;border-radius:4px;border:1px solid var(--border);
  text-decoration:none;transition:.15s}
.labchat-body .chat-kw-gene:hover{background:rgba(0,255,163,.22);box-shadow:0 0 8px rgba(0,255,163,.3)}
.labchat-body .chat-kw-snp{color:var(--purple);font-family:'Roboto Mono',monospace;font-size:10.5px;
  background:var(--accent-dim);padding:0 4px;border-radius:4px;border:1px solid var(--border);
  text-decoration:none;transition:.15s}
.labchat-body .chat-kw-snp:hover{background:var(--accent-dim);box-shadow:0 0 8px rgba(180,122,255,.3)}
.labchat-body .chat-kw-peptide{color:#10B981;font-weight:700;background:rgba(16,185,129,.1);padding:0 6px;
  border-radius:4px;border:1px solid rgba(16,185,129,.3);text-decoration:none;transition:.15s}
.labchat-body .chat-kw-peptide:hover{background:rgba(16,185,129,.25);box-shadow:0 0 8px rgba(16,185,129,.3)}
.labchat-body .chat-kw-pathway{color:var(--purple);font-weight:800;background:rgba(139,92,246,.1);padding:0 6px;
  border-radius:4px;border:1px solid rgba(139,92,246,.3);text-decoration:none;transition:.15s;letter-spacing:.02em}
.labchat-body .chat-kw-pathway::before{content:"\1F310 ";margin-right:2px;opacity:.8}
.labchat-body .chat-kw-pathway:hover{background:rgba(139,92,246,.25);box-shadow:0 0 10px rgba(139,92,246,.35)}
.labchat-body .chat-kw-condition{color:#F59E0B;font-weight:700;background:rgba(245,158,11,.08);padding:0 5px;
  border-radius:4px;border:1px solid rgba(245,158,11,.25);text-decoration:none;transition:.15s}
.labchat-body .chat-kw-condition:hover{background:rgba(245,158,11,.22);box-shadow:0 0 8px rgba(245,158,11,.3)}
.labchat-body .chat-kw-pmid{display:inline-block;padding:1px 7px;border-radius:10px;background:var(--accent-dim);
  border:1px solid var(--border);color:var(--info);font-size:10.5px;font-weight:700;
  text-decoration:none;margin:0 2px;transition:.15s}
.labchat-body .chat-kw-pmid:hover{background:rgba(58,201,255,.25);box-shadow:0 0 8px rgba(58,201,255,.3)}
/* Inline peptide / gene mini-cards in roundtable transcripts */
.labchat-body .lc-pep-card{margin:6px 0;padding:9px 11px;border-radius:10px;
  border:1px solid rgba(16,185,129,.3);border-left:3px solid #10B981;
  background:linear-gradient(135deg,rgba(16,185,129,.08),rgba(30,41,59,.45));
  display:flex;gap:9px;align-items:flex-start}
.labchat-body .lc-pep-card .lc-pep-icon{font-size:18px}
.labchat-body .lc-pep-card .lc-pep-body{flex:1;min-width:0}
.labchat-body .lc-pep-card .lc-pep-name{font-weight:900;color:#10B981;font-size:13px}
.labchat-body .lc-pep-card .lc-pep-desc{font-size:10.5px;color:var(--dim);margin-top:3px;line-height:1.45}
.labchat-body .lc-gene-card{margin:6px 0;padding:9px 11px;border-radius:10px;
  border:1px solid rgba(20,184,166,.3);border-left:3px solid var(--accent2);
  background:linear-gradient(135deg,rgba(20,184,166,.08),rgba(30,41,59,.45));
  display:flex;gap:9px;align-items:flex-start}
.labchat-body .lc-gene-card .lc-gene-icon{font-size:18px}
.labchat-body .lc-gene-card .lc-gene-body{flex:1;min-width:0}
.labchat-body .lc-gene-card .lc-gene-name{font-weight:900;color:var(--accent2);font-size:13px;
  font-family:'Roboto Mono',monospace}
.labchat-body .lc-gene-card .lc-gene-desc{font-size:10.5px;color:var(--dim);margin-top:3px;line-height:1.45}
.labchat-summon{margin-top:6px;display:flex;flex-wrap:wrap;gap:4px}
.labchat-summon .lc-call{font-size:10px;padding:2px 7px;border-radius:4px;background:rgba(139,92,246,.1);color:var(--purple);border:1px solid rgba(139,92,246,.3);cursor:pointer}
.labchat-divider{display:flex;align-items:center;gap:8px;margin:4px 0;color:var(--dim);font-size:9px;text-transform:uppercase;letter-spacing:.12em;font-weight:700}
.labchat-divider::before,.labchat-divider::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,transparent,var(--border),transparent)}
@keyframes labchat-in{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}

/* Nice "waiting for <name>" indicator */
.labchat-typing{display:flex;align-items:center;gap:6px;padding:6px 10px;font-size:11px;color:var(--dim);font-style:italic}
.labchat-typing .dots{display:inline-flex;gap:3px}
.labchat-typing .dots span{width:4px;height:4px;border-radius:50%;background:var(--accent2);animation:labchat-dot 1s infinite ease-in-out}
.labchat-typing .dots span:nth-child(2){animation-delay:.15s}
.labchat-typing .dots span:nth-child(3){animation-delay:.3s}
@keyframes labchat-dot{0%,60%,100%{opacity:.3;transform:scale(.8)}30%{opacity:1;transform:scale(1.2)}}
@keyframes tt-slide{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}
@keyframes lv-pulse{0%,100%{opacity:.4;transform:scale(.85)}50%{opacity:1;transform:scale(1.15)}}
/* Standardized TTS button — matches the shared _ttsBtnHTML() styling. */
button.hy-tts-btn{transition:.15s}
button.hy-tts-btn:hover{background:var(--accent-dim)!important;box-shadow:0 0 10px rgba(58,201,255,.35)}
button.hy-tts-btn.is-playing{background:#3ac9ff!important;color:#021420!important;border-color:var(--info)!important}
/* Voice-chat mic button — lives next to Send in the lab composer. */
button.lab-mic{transition:background .15s, box-shadow .2s}
button.lab-mic.is-listening{background:rgba(239,68,68,.14)!important;color:var(--danger)!important;border-color:var(--danger)!important;box-shadow:0 0 14px rgba(239,68,68,.35)}
button.lab-mic.is-listening::before{content:'';display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--danger);margin-right:6px;animation:lv-pulse 1.2s ease-in-out infinite}
#lab-voice-hud{display:flex!important}
#lab-voice-hud.hidden{display:none!important}

/* Phase 22 — citation chips beneath each roundtable bubble */
.labchat-cites{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px;padding-top:6px;
  border-top:1px dashed rgba(58,201,255,.2)}
.labchat-cites .lc-cite-chip{display:inline-flex;align-items:center;padding:2px 8px;
  border-radius:10px;background:var(--accent-dim);border:1px solid var(--border);
  color:var(--info);font-size:10px;font-weight:700;text-decoration:none;transition:.15s;
  font-family:'Roboto Mono',monospace;letter-spacing:.02em}
.labchat-cites .lc-cite-chip:hover{background:rgba(58,201,255,.22);
  box-shadow:0 0 8px rgba(58,201,255,.35);transform:translateY(-1px)}

/* Phase 22 — conflicting-takes banner rendered after a roundtable when two
   specialists make opposing claims about the same entity */
.labchat-conflict{margin:8px 0;padding:10px 12px;border-radius:10px;
  background:linear-gradient(135deg,rgba(239,68,68,.08),rgba(245,158,11,.06));
  border:1px solid rgba(245,158,11,.35);border-left:3px solid var(--warn);
  animation:labchat-in .28s ease-out both}
.labchat-conflict .lcc-head{font-family:var(--heading);font-size:11px;font-weight:900;
  color:var(--warn);text-transform:uppercase;letter-spacing:.08em;margin-bottom:6px}
.labchat-conflict .lcc-row{display:grid;grid-template-columns:minmax(80px,auto) 1fr auto 1fr;
  gap:8px;align-items:start;padding:6px 0;border-top:1px dashed rgba(148,163,184,.15)}
.labchat-conflict .lcc-row:first-of-type{border-top:none}
.labchat-conflict .lcc-entity{font-family:'Roboto Mono',monospace;font-size:11px;
  color:var(--warn);font-weight:800;padding:2px 6px;background:rgba(245,158,11,.12);
  border-radius:4px;height:fit-content}
.labchat-conflict .lcc-side{font-size:11px;color:var(--text);line-height:1.5;
  padding-left:8px;border-left:2px solid var(--accent)}
.labchat-conflict .lcc-vs{font-size:9px;font-weight:900;color:var(--dim);
  letter-spacing:.1em;align-self:center;padding:0 4px}

@media (max-width: 768px){
  /* The big sidewards-scroll fix: on narrow screens the chat column MUST
     stay single-column even though the global QA rule forces wrap on
     everything else. These !important rules specifically re-lock the
     roundtable chat. */
  #chat-msgs, #chat-msgs > *, .lab-chat-input-bar{flex-wrap:nowrap!important}
  #p-team.active{height:calc(100dvh - 52px)!important}
  .labchat-bubble{max-width:85%}
  .labchat-body{font-size:14px}
  .lab-chat-input-bar{padding-bottom:calc(8px + env(safe-area-inset-bottom,0px))}
}
@media (max-width: 480px){
  .labchat-avatar{width:30px;height:30px;font-size:15px}
  .labchat-bubble{padding:8px 10px;max-width:88%}
  .lab-chat-input-bar{gap:4px;padding-left:8px;padding-right:8px}
  .lab-chat-input-bar .lab-send,.lab-chat-input-bar .lab-mission{padding:10px 10px;font-size:12px}
  .lab-chat-input-bar .lab-mission span.mlabel{display:none}
}

/* --- extracted from lab-command.html block #2 --- */
.lo-feed .lo-row{display:flex;align-items:flex-start;gap:10px;padding:9px 12px;border-radius:10px;
        background:var(--bg-card);border:1px solid var(--border);color:var(--text);
        cursor:pointer;text-decoration:none;font-size:11px;line-height:1.45;transition:.2s;
        animation:lo-row-in .35s ease both}
      .lo-feed .lo-row:hover{background:rgba(0,14,8,.85);border-color:rgba(255,255,255,.14)}
      .lo-feed .lo-row .lo-ico{font-size:14px;flex-shrink:0;margin-top:1px}
      .lo-feed .lo-row .lo-txt{flex:1;min-width:0}
      .lo-feed .lo-row .lo-meta{font-size:8px;color:var(--dim);margin-top:2px;letter-spacing:.04em;text-transform:uppercase}
      .lo-feed .lo-row .lo-arrow{color:var(--muted);font-size:12px;flex-shrink:0;margin-top:1px}
      .lo-feed .lo-row.hot{border-left:3px solid var(--danger)}
      .lo-feed .lo-row.warn{border-left:3px solid var(--warn)}
      .lo-feed .lo-row.good{border-left:3px solid var(--success)}
      .lo-feed .lo-row.personal{border-left:3px solid var(--purple)}
      .lo-feed .lo-row.info{border-left:3px solid var(--info,#3ac9ff)}
      @keyframes lo-row-in{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

      /* Research Queue banner — sits above the alert feed, under the page
         banner. Prominent, clickable, mobile-friendly. */
      #lo-research-queue{display:flex;align-items:center;gap:10px;padding:10px 14px;margin:0 0 10px;
        border:1px solid var(--border);border-left:3px solid #3ac9ff;border-radius:var(--radius);
        background:linear-gradient(135deg,rgba(58,201,255,.08),rgba(13,148,136,.04),rgba(15,23,42,.5));
        cursor:pointer;text-decoration:none;color:var(--text);transition:.2s;min-height:54px}
      #lo-research-queue:hover{border-color:var(--info);box-shadow:0 0 14px rgba(58,201,255,.18)}
      #lo-research-queue .rq-ico{font-size:22px;flex-shrink:0}
      #lo-research-queue .rq-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
      #lo-research-queue .rq-label{font-family:var(--heading);font-size:10px;font-weight:800;
        color:var(--info);letter-spacing:.12em;text-transform:uppercase}
      #lo-research-queue .rq-count{font-family:var(--heading);font-size:22px;font-weight:900;
        color:var(--text);line-height:1;letter-spacing:-.02em}
      #lo-research-queue .rq-meta{font-size:10px;color:var(--dim);line-height:1.35}
      #lo-research-queue .rq-chips{display:flex;gap:4px;flex-wrap:wrap;margin-top:2px}
      #lo-research-queue .rq-chip{font-size:8px;padding:2px 7px;border-radius:999px;font-weight:700;
        border:1px solid var(--border);background:var(--surface2);color:var(--dim);letter-spacing:.04em;text-transform:uppercase}
      #lo-research-queue .rq-chip.queued {color:var(--info); border-color:var(--info)}
      #lo-research-queue .rq-chip.running{color:var(--warn);  border-color:rgba(245,158,11,.35)}
      #lo-research-queue .rq-chip.done   {color:var(--success);border-color:rgba(16,185,129,.35)}
      #lo-research-queue .rq-arrow{color:var(--muted);font-size:16px;flex-shrink:0}

      /* ── Mobile (Android Chrome + iOS Safari) optimization for the
         Lab Overview. Targets the Dashboard panel only so Cards / Queue /
         Team Chat etc. keep their own mobile rules. */
      @media (max-width: 640px){
        #p-dashboard{padding:10px}
        #lab-overview-strip{padding:10px 11px;margin-bottom:8px}
        #lab-overview-strip > div:first-child{gap:6px 8px}
        #lo-persona-name{font-size:13px}
        #lo-persona-line{font-size:11px;flex-basis:100%;order:10;min-width:100%}
        #lo-persona-streak{font-size:10px}
        #lo-alert-count-pill{font-size:10px;padding:3px 9px}
        #lo-health-tile{font-size:10px;padding:4px 10px;margin-left:auto}
        #lo-research-queue{padding:10px 12px;min-height:56px;gap:10px}
        #lo-research-queue .rq-ico{font-size:24px}
        #lo-research-queue .rq-count{font-size:22px}
        #lo-research-queue .rq-label{font-size:9px}
        #lo-research-queue .rq-meta{font-size:10px}
        /* Stats banner on phones: two rows, 2 columns, bigger tap targets,
           no squished 5-wide strip. */
        #p-dashboard .stats-banner{display:grid!important;grid-template-columns:repeat(2,1fr);
          border-radius:var(--radius);overflow:hidden}
        #p-dashboard .stats-banner .stat-card{border-right:1px solid var(--border);
          border-bottom:1px solid var(--border);padding:10px 8px!important;min-height:56px}
        #p-dashboard .stats-banner .stat-card:nth-child(2n){border-right:none}
        #p-dashboard .stats-banner .stat-card:nth-last-child(-n+2){border-bottom:none}
        #p-dashboard .stats-banner .stat-num{font-size:18px!important}
        /* Alert rows: bigger touch targets, slightly larger text. */
        #lo-alert-feed .lo-row{padding:11px 12px;font-size:12px;gap:10px}
        #lo-alert-feed .lo-row .lo-ico{font-size:16px}
        #lo-alert-feed .lo-row .lo-meta{font-size:9px}
        /* Dashboard cards stack one-up on phones. */
        #p-dashboard .card-grid{grid-template-columns:1fr;gap:8px}
        #p-dashboard .action-card{padding:12px}
        #p-dashboard .action-card[data-task-kind="mega-research"]{grid-column:span 1!important}
        /* Kill the iOS text inflation that makes the overview blow up. */
        #lab-overview-strip,#lo-research-queue{-webkit-text-size-adjust:100%;text-size-adjust:100%}
      }
      @media (max-width: 380px){
        /* Very narrow (iPhone SE, older Androids): stats stack single-column. */
        #p-dashboard .stats-banner{grid-template-columns:1fr}
        #p-dashboard .stats-banner .stat-card{border-right:none}
        #lo-persona-name{font-size:12px}
      }

/* --- extracted from lab-command.html block #3 --- */
@keyframes lb-pulse{0%,100%{opacity:.35;transform:scale(1)}50%{opacity:1;transform:scale(1.3)}}

/* --- extracted from lab-command.html block #4 --- */
${css}

/* --- Phase 24 + 25 — Lab Viz (pathway pills, bio_data sidebar, charts) --- */
.lab-viz-pathways{display:flex;flex-wrap:wrap;gap:4px;margin:4px 0 2px;}
.lab-viz-pill{font-size:9px;padding:2px 7px;border-radius:10px;text-decoration:none;border:1px solid transparent;display:inline-flex;align-items:center;gap:3px;transition:all .12s}
.lab-viz-pill:hover{transform:translateY(-1px);box-shadow:0 2px 6px rgba(0,0,0,.3)}
.lab-viz-pill.lv-kegg{background:rgba(13,148,136,.12);color:#14B8A6;border-color:rgba(13,148,136,.3)}
.lab-viz-pill.lv-reactome{background:rgba(139,92,246,.12);color:#A78BFA;border-color:rgba(139,92,246,.3)}
.lab-viz-pill.lv-wp{background:rgba(245,158,11,.12);color:#F59E0B;border-color:rgba(245,158,11,.3)}
.lab-viz-allele,.lab-viz-dose{margin:6px 0;padding:8px;background:var(--bg-card);border:1px solid var(--border);border-radius:6px}
.lab-viz-allele .lv-head,.lab-viz-dose .lv-head{font-size:10px;font-weight:700;color:var(--accent2);margin-bottom:4px}
.lab-viz-sidebar{display:flex;flex-direction:column;gap:6px;font-size:11px}
.lab-viz-sidebar .lvs-head{display:flex;align-items:center;justify-content:space-between;gap:6px;padding:6px 0 2px;font-family:var(--heading);font-size:12px;font-weight:800;color:var(--accent2);border-bottom:1px solid var(--border)}
.lab-viz-sidebar .lvs-refresh{background:rgba(13,148,136,.12);color:var(--accent);border:1px solid rgba(13,148,136,.35);font-size:9px;padding:3px 8px;border-radius:5px;cursor:pointer;transition:all .15s}
.lab-viz-sidebar .lvs-refresh:hover{background:rgba(13,148,136,.22)}
.lab-viz-sidebar .lvs-refresh:disabled{opacity:.6;cursor:wait}
.lab-viz-sidebar .lvs-stamp{font-size:9px;color:var(--dim);font-family:monospace}
.lab-viz-sidebar .lvs-empty{font-size:10px;color:var(--dim);padding:10px;text-align:center;border:1px dashed var(--border);border-radius:6px}
.lab-viz-sidebar details{border:1px solid var(--border);border-radius:5px;padding:4px 8px;background:rgba(30,41,59,.3)}
.lab-viz-sidebar details[open]{background:rgba(30,41,59,.5)}
.lab-viz-sidebar details summary{cursor:pointer;font-weight:700;font-size:10px;color:var(--text);padding:3px 0;user-select:none;list-style:none}
.lab-viz-sidebar details summary::-webkit-details-marker{display:none}
.lab-viz-sidebar details summary::before{content:"▶";font-size:8px;color:var(--dim);margin-right:5px;display:inline-block;transition:transform .15s}
.lab-viz-sidebar details[open] summary::before{transform:rotate(90deg)}
.lab-viz-sidebar .lvs-kv{font-size:10px;margin:2px 0;color:var(--text)}
.lab-viz-sidebar .lvs-kv b{color:var(--dim);font-weight:700;margin-right:4px}
.lab-viz-sidebar .lvs-prose{font-size:10px;line-height:1.5;color:var(--dim);margin-top:4px;padding:4px 6px;background:var(--bg-card);border-radius:4px;border-left:2px solid var(--accent)}
.lab-viz-sidebar .lvs-list{list-style:none;padding:0;margin:4px 0;font-size:10px;line-height:1.6}
.lab-viz-sidebar .lvs-list li{padding:2px 0;color:var(--text)}
.lab-viz-sidebar .lvs-list .lvs-dim{color:var(--dim);font-size:9px}
.lab-viz-sidebar a{color:var(--accent2);text-decoration:none}
.lab-viz-sidebar a:hover{text-decoration:underline}
