diff --git a/presentation/prototype/scatter-variants.html b/presentation/prototype/scatter-variants.html index cfaadaba..7ae5a2c0 100644 --- a/presentation/prototype/scatter-variants.html +++ b/presentation/prototype/scatter-variants.html @@ -97,6 +97,7 @@ .missing-title { position: absolute; font: 700 30px/1.2 var(--sans); color: var(--bordeaux-deep); } .todo-stack { position: absolute; z-index: 2; } + .todo-stack .todo { cursor: pointer; } .isle .ico { color: var(--bordeaux); } .isle.ghost .ico { color: #9a938f; } .isle .nm { font-size: 15px; } @@ -220,10 +221,10 @@ function ghostIsle(g, size, rot, x, y) { /* ---- A · Constellation: scattered islands (hand-placed, organic jitter) ---- */ const TODO_STACK = [ - ['Clinical Intelligence', 'dashboards on the clinical history of the Unit and its patients'], - ['Datawarehouse', 'the single source of truth'], - ['ML-ready data', 'cohort tables, ready for model training'], - ['Professional Portal', 'AritmoLab — the grown-up Omics Portal'], + { key: 'ci', name: 'Clinical Intelligence', cap: 'dashboards on the clinical history of the Unit and its patients' }, + { key: 'dwh', name: 'Datawarehouse', cap: 'the single source of truth' }, + { key: 'ml', name: 'ML-ready data', cap: 'cohort tables, ready for model training' }, + { key: 'portal', name: 'Professional Portal', cap: 'AritmoLab — the grown-up Omics Portal' }, ]; /* three placements of the central "to build" rectangles */ @@ -251,7 +252,7 @@ const ORBIT_CFG = { function orbitSlide02(v) { const cfg = ORBIT_CFG[v]; let h = `
` + - TODO_STACK.map(([n, c], i) => `
?${n}${c}
`).join('') + `
`; + TODO_STACK.map((td, i) => `
?${td.name}${td.cap}
`).join('') + ``; for (const s of cfg.isles) { const sys = SYS.find(vv => vv.key === s.key); h += `
`; document.body.appendChild(pop); +const MISSING_CONTRIBS = { + ci: { kicker: 'The missing piece · 20 years ago', title: 'Clinical Intelligence — the history, made visible', + body: `

Twenty years of clinical history, with no way to show it.

+ +
The gapNo fast answer to “how are we doing?” — every question meant a manual query.
` }, + dwh: { kicker: 'The missing piece · 20 years ago', title: 'Datawarehouse — one analysis-ready home', + body: `

One home for every record the Unit produces: text, structured fields, genetics, ECG.

+ +
The gapEvery research question started with manual exports — and ended in fragile spreadsheets.
` }, + ml: { kicker: 'The missing piece · 20 years ago', title: 'ML-ready data — cohorts for research', + body: `

Tables shaped for statistics and model training: clean, wide, reproducible.

+ +
The gapPredictive research on the Unit's data stayed out of reach.
` }, + portal: { kicker: 'The missing piece · 20 years ago', title: 'Professional Portal — the 360° view', + body: `

The 360° view of the patient: Cardioref and genetics finally in one place.

+ +
The gapA single door for patients and clinicians — promised, never delivered.
` }, +}; document.addEventListener('click', (e) => { const s = e.target.closest('[data-start]'); if (s) { @@ -342,6 +366,15 @@ document.addEventListener('click', (e) => { pop.classList.add('open'); return; } + const m = e.target.closest('[data-missing]'); + if (m) { + const c = MISSING_CONTRIBS[m.dataset.missing]; + document.getElementById('kick').textContent = c.kicker; + document.getElementById('ttl').textContent = c.title; + document.getElementById('bdy').innerHTML = c.body; + pop.classList.add('open'); + return; + } if (e.target.closest('.ai-pop-x') || e.target === pop) pop.classList.remove('open'); }); document.addEventListener('keydown', (e) => { if (e.key === 'Escape') pop.classList.remove('open'); });