# Prompt — encode site-survival on the scatter + plain-language "Survives" help
Two presentation fixes around the confound-survival flags. Frontend-only; the data (`survives_site`, `survives_purity`, the subgroup AUROCs) is already on the module row. No engine/API/airgap change. `tsc` after.
## Part 1 — encode site-survival on the scatter (don't hard-remove)
The fitness × synergy scatter currently plots all highlighted groups (winner / cell_cycle / p16) the same, regardless of whether they passed the site confound check. Distinguish them, and let the user declutter:
- **Encode site-survival by fill**, keeping colour = category (winner teal / cell_cycle amber / p16 gold):
- `survives_site === true` → **solid** dot (as now).
- `survives_site === false` → **hollow / outline-only** (or clearly faded) dot — so failed-site groups read as "less trustworthy" at a glance.
- `survives_site == null` (n too small) → solid but with a thin dashed outline, or just treat as solid; keep it simple.
- (Encode **site** only — purity is mostly "—" here, so it carries no signal; don't encode it.)
- Add a small **toggle** above/beside the scatter: **"Hide groups that fail the site check"** (default OFF). When on, drop the `survives_site === false` highlighted dots from the plot (background grey dots are unaffected).
- Update the scatter legend/caption to note: "solid = survives the site check; hollow = fails it (its signal is partly location)."
## Part 2 — add a plain-language "?" on the "Survives" column
In the merged table, the "Survives" column header (`
Survives | `, ~Lab.tsx 3741) needs a clear "?" (rewrite `TIPS.moduleSurvival`, or attach a help trigger right on that header). Use this plain-English copy (anyone should understand it):
> **What "Survives" checks:** whether a group still separates HPV when you take away a possible *confounder* — something that travels with HPV but isn't HPV biology.
>
> **Site.** HPV+ tumours are mostly in the oropharynx (back of the throat), so a gene could look like an "HPV gene" just by marking that location. The site check re-scores the group using **only oropharynx patients** (everyone the same location). The two numbers are full-cohort → oropharynx-only.
>
> **Purity.** A tumour sample is a mix of cancer cells and immune cells; HPV+ tumours carry more immune cells, so a gene could look like an "HPV gene" just by marking immune content. The purity check re-scores using only the **"purest" (least-immune) tumours**. It's usually "—" here because those tumours include almost no HPV+ patients, so there's nothing to test.
>
> **✓** = held up when the confounder was held constant (likely real signal). **✗** = dropped past the tolerance (part of it was the confounder). **—** = couldn't test (too few patients).
- Keep the existing per-chip tooltips (the `full → subgroup` detail) unchanged; this is the column-level explainer.
## CONSTRAINTS
- Frontend-only; uses `survives_site` already on the row. No engine/API/airgap change.
## Checkpoint
- Scatter: failed-site highlighted dots render hollow/faded; a "Hide groups that fail the site check" toggle removes them; legend explains solid vs hollow.
- The "Survives" column has a plain-language "?" explaining site, purity, ✓, ✗, and —.
- `tsc` clean.