diff --git a/plugin-designs/research-dashboard/src/components/dashboards/DashboardMapPanel.vue b/plugin-designs/research-dashboard/src/components/dashboards/DashboardMapPanel.vue index 449061e06..29564faf8 100644 --- a/plugin-designs/research-dashboard/src/components/dashboards/DashboardMapPanel.vue +++ b/plugin-designs/research-dashboard/src/components/dashboards/DashboardMapPanel.vue @@ -272,15 +272,27 @@ function setLiveResize(on) { // sixth bin. Steps are interpolated in OKLab, so the lightness intervals are perceptually EVEN // (sRGB interpolation bunches the midtones and would make two adjacent bins look alike). // -// MEASURED, navy pin '#1a237e' composited at the real fill-opacity 0.78 over #f2f3f0: +// ┌─ SUPERSEDED 2026-09-22 — THIS TABLE DESCRIBES A RAMP AND A PIN THAT NO LONGER SHIP ────────┐ +// │ Kept because the REASONING below is still the reason the ramp is ordered by lightness, but │ +// │ every NUMBER in it is stale: both variables it measured have since changed. The pin is no │ +// │ longer navy (it is orange '#ef6c00') and the ramp is no longer this pale coral (it ends at │ +// │ the label red '#cd2027'). For the CURRENT measured table see the BIN_COLORS note below — │ +// │ effective pin visibility 2.77 / 2.07 / 1.83 / 2.31 / 3.00 / 4.16, worst bin2 1.83. │ +// │ ★ The 7:1 floor cited here is NOT the standard the shipped pin meets, and pretending it is │ +// │ would be the dishonest reading: a light-on-light orange pin cannot reach 7:1 against a red │ +// │ ramp, which is exactly why the white stroke became load-bearing instead. Do not quote these │ +// │ numbers as if they were current, and do not "restore" the 7:1 target without re-reading the │ +// │ BIN_COLORS note, which explains why that target belonged to the navy era. │ +// └────────────────────────────────────────────────────────────────────────────────────────────┘ +// HISTORICAL. MEASURED, navy pin '#1a237e' composited at fill-opacity 0.78 over #f2f3f0, against +// the PALE CORAL ramp that this file shipped before the heartbeat-red change: // // NO_DATA #f3f3f1 11.91 // #f8e0da 10.80 · #fccec4 9.82 · #febbad 8.85 · #ffa797 7.92 · #ff9380 7.07 // -// WORST DATA BIN 7.07. That is BELOW the 7.20 the ashen-clay ramp reached, and the regression is -// deliberate and stated: 0.13 of contrast buys the hue the Driver asked for, and 7.07 still -// clears the 7:1 floor that is the actual constraint. It remains well above the green this -// replaced at the start of the card (1.13 before any of this work). +// WORST DATA BIN WAS 7.07, below the 7.20 the ashen-clay ramp reached; that regression was +// deliberate and bought the hue the Driver asked for while still clearing the 7:1 floor that was +// the constraint AT THE TIME. It remained well above the green this replaced (1.13). // // REJECTED, each measured rather than argued: // dark red '#b8383f' endpoint — worst 3.33. The pin disappears. This is the one to re-read @@ -296,7 +308,14 @@ function setLiveResize(on) { // measures it instead of rediscovering it and blaming the hue. // // THE THREE CONSTRAINTS, each verified rather than asserted: -// 1. navy pin ≥ 7:1 on every bin at 0.78 — worst 7.07. PASS. +// 1. ★ RETIRED WITH THE NAVY PIN. This read "navy pin ≥ 7:1 on every bin at 0.78 — worst 7.07. +// PASS." It was a NAVY-ERA constraint and it no longer describes the product: the pin is now +// orange, and a light-on-light orange CANNOT reach 7:1 against a red ramp at any tuning +// (swept; the worst case saturates near 1.98). The constraint did not get quietly lowered — +// it got REPLACED by one that matches the two-band pin that actually ships: effective +// visibility = max(orange disc, white stroke) on every bin, worst 1.83 at bin2. Anyone +// tempted to "restore 7:1" should read the BIN_COLORS note first — doing so means either +// giving the Driver back a navy pin or giving up the label red. // 2. no red-vs-green dependence (8% of men have that deficiency, and red-green is exactly the // bad-good pairing a designer reaches for here). ★ THIS CONSTRAINT BINDS HARDEST NOW THAT // THE RAMP IS ACTUALLY RED — a red ramp that ordered by HUE would be unreadable for those @@ -604,12 +623,17 @@ function addLayers() { // never a hue problem; it was an opacity bug. Both lessons still bind: the pin is ONE fixed // colour at FULL opacity, everywhere. // - // WHAT IT IS NOW. Fill '#1a237e' (Material Indigo 900, the navy the product standardises - // on) under a white ring. Against the CURRENT heart-red ramp the dot measures 11.91 / 10.80 - // / 9.82 / 8.85 / 7.92 / 7.07 - strong on every bin, worst case 7.07. - // - // REJECTED. '#0d47a1' (Blue 900) - too light. Tinting the pin per bin - reintroduces the - // original alpha fault. Reverting to orange - the Driver ruled explicitly against it. + // ★ SUPERSEDED 2026-09-22 — THE PIN IS NO LONGER NAVY. This paragraph used to read "WHAT IT IS + // NOW. Fill '#1a237e'... worst case 7.07", and both halves are now false: the fill is the orange + // '#ef6c00' (see the layer below) and those contrast figures measured a pale coral ramp that no + // longer ships. Kept only so the NAVY-ERA rejections stay readable: + // '#0d47a1' (Blue 900) - too light. + // Tinting the pin per bin - reintroduces the original alpha fault. ★ STILL BINDING. + // "Reverting to orange - the Driver ruled explicitly against it." ★ NO LONGER TRUE. That + // ruling was given while the ramp was PALE and the pin navy; the Driver has since asked for + // orange against the new red ramp ("I think it might be better orange"), which supersedes it. + // Navy did not lose on contrast - it was freed to become the SELECTION ring, which had to + // move because an orange ring on an orange pin measured 1.07. See SEL_COLOR. // // NOTE FOR DARK STYLES. This product is Material LIGHT only (no prefers-color-scheme:dark // in this bundle), so only the light pairing ships. A genuinely dark style would swap the @@ -702,18 +726,28 @@ function addLayers() { // alpha was the real fault, compositing each pin with whatever bin sat beneath it so it // rendered a different colour per country at 1.18–1.22 contrast. Never reintroduce pin // alpha, never tint per bin. - // 2. WHITE RINGS around blue dots so the field does not read as a heat map, and all rings stay - // visible when zoomed out. Still here — it is now the stroke instead of a second layer. - // Navy #1a237e measures 11.91 / 10.80 / 9.82 / 8.85 / 7.92 / 7.07 across the ramp; the ramp's - // HUE changed (green → ashen clay → heart red, see the BINS note above) but the pin did not. - // 7.07 is a deliberate 0.13 below the clay ramp's 7.20, spent to buy the red the Driver asked - // for, and still far above the 1.13 this whole line of work started from. + // 2. WHITE RINGS so the field does not read as a heat map, and all rings stay visible when + // zoomed out. Still here — it is now the stroke instead of a second layer. ★ The ring is + // now LOAD-BEARING rather than merely separating: it is what carries the pin on the dark + // bins, where the orange fill falls to 1.03-1.35. Removing it does not cost tidiness, it + // costs the pin. + // ★ STALE LINE REMOVED 2026-09-22. This used to read "Navy #1a237e measures 11.91 / ... / 7.07 + // across the ramp... but the pin did not [change]." The pin HAS now changed — it is '#ef6c00' — + // so that sentence had become the exact kind of confidently-wrong comment this file warns about + // elsewhere. Current measured table lives in the BIN_COLORS note: effective visibility + // 2.77 / 2.07 / 1.83 / 2.31 / 3.00 / 4.16, worst bin2 1.83. // // WHAT IS GIVEN UP, stated honestly: the outer navy band gave the white ring a hard boundary on - // ANY ground, so over the palest bin the ring now blends into the background. The ring's job is - // separating pins from EACH OTHER (it still does that) while the navy disc carries pin-vs-ground - // contrast. MEASURE the pale end before calling this settled. If separation genuinely fails - // there, the fix is a casing on overlapping symbols only — not a restored global dark rim. + // ANY ground, so over the palest bin the ring blends into the background. The ring's job is + // separating pins from EACH OTHER (it still does that) while the DISC carries pin-vs-ground. + // + // ★ "MEASURE THE PALE END BEFORE CALLING THIS SETTLED" — DONE 2026-09-22, and the answer is that + // the two bands SWAPPED ROLES when the pin went orange. Against the pale bins the white ring is + // weak (1.11-1.48) but the orange disc is strongest there (2.77/2.07); against the dark bins the + // disc collapses (1.03) and the ring takes over (2.31/3.00/4.16). Neither band is sufficient + // alone and each covers the other's failure, which is why BOTH must stay. The old worry — the + // pale end — is the end the orange disc handles best, so it is no longer the risk; the real + // worst case moved to bin2 (1.83), where the two bands cross over. // // HIT-TESTING: 'rd-bubble-layer' keeps its id and is now the ONLY bubble layer, so every // click/hover handler bound to that id is unaffected. 'rd-bubble-halo' no longer exists.