diff --git a/src/components/ReadingNow.astro b/src/components/ReadingNow.astro index 58ad106..a38787c 100644 --- a/src/components/ReadingNow.astro +++ b/src/components/ReadingNow.astro @@ -78,6 +78,15 @@ } .reading-now[hidden] { display: none; } + /* The rule above is a separator from the table of contents. On a page with fewer than two + headings there is no table of contents, this is the rail's only child, and the border then + hangs over nothing — reads as a stray line rather than a division. */ + .reading-now:first-child { + margin-top: 0; + padding-top: 0; + border-top: none; + } + .reading-now__label { margin: 0 0 0.5rem; font-size: 0.72rem; diff --git a/src/lib/reading-map.js b/src/lib/reading-map.js index 8778707..3a9701e 100644 --- a/src/lib/reading-map.js +++ b/src/lib/reading-map.js @@ -10,7 +10,9 @@ * • `trace` is pre-sorted chronologically and MUST NOT be re-sorted. `t` is date-only and * many highlights share a day, so array order is the only thing carrying the sequence. * • There is no `has_highlight` flag. The signal set is the distinct `trace[].node` values — - * 262 highlights over 206 chunks, because one passage can be highlighted more than once. + * 273 highlights over 215 chunks, because one passage can be highlighted more than once. + * • Each entry carries `h`, the highlight's text_hash. It is the join key + * api.c0smere.net/highlights/random returns beside the header quote; see markQuoted(). */ import * as THREE from 'three'; diff --git a/src/styles/reading-map.css b/src/styles/reading-map.css index 4f5ae14..e98c102 100644 --- a/src/styles/reading-map.css +++ b/src/styles/reading-map.css @@ -37,11 +37,18 @@ --map-trace: var(--link-bright, #46c421); /* --- the two standing markers ------------------------------------------------------------ - Drawn as rings, so colour is not what tells them from the point cloud — outline-versus-dot - already does, the same form-carries-the-distinction argument the schemes below rest on. - These hues only have to separate the two markers from EACH OTHER, and amber↔fuchsia holds - up under protanopia (ΔE 18.7) where amber↔green would not. - --map-newest: the most recent highlight. --map-quoted: the passage in the page header. */ + --map-newest: the most recent highlight. --map-quoted: the passage quoted in the header. + Drawn as rings, so colour is not what separates them from the cloud — outline-versus-dot + does, the same form-carries-the-distinction argument the schemes below rest on. + + What colour DOES have to carry is telling the two markers apart, and it does that well: + amber↔fuchsia is ΔE 52.9 normal, 59.6 protan, 56.5 deutan (colorspacious, severity 100). + + ⚠️ Measured honestly: amber↔trace-green is only **ΔE 4.8 under protanopia**. A protanope + cannot tell the newest ring from the trace line by hue. Accepted on the same grounds the + `ember` scheme below is accepted — nothing here is *encoded* by colour, a closed ring and a + polyline are different shapes, and no reader ever has to answer a question by telling those + two hues apart. Fuchsia has no such problem (ΔE 61.2 protan against the trace). */ --map-newest: #f59e0b; --map-quoted: #e879f9; @@ -69,10 +76,14 @@ .reading-map--ember { --map-signal: #f59e0b; --map-trace: var(--link-bright, #46c421); - /* The default newest-marker amber IS this scheme's signal colour, which would make the ring - look like a highlight that had merely grown a hole. Sky blue is the furthest thing from - both marks here. */ - --map-newest: #38bdf8; + /* The default newest-marker amber IS this scheme's signal colour here, which would make the + ring look like a highlight that had merely grown a hole. + ⚠️ Sky blue (#38bdf8) was the obvious substitute and is **wrong**: against the fuchsia + quoted-marker it measures ΔE 0.5 under deuteranopia — the two rings would be the same + colour to a deuteranope, which is the one distinction these hues actually have to carry. + White is the only candidate that clears all three of this scheme's marks (worst case + ΔE 30.4 across normal/protan/deutan); cyan managed 7.8 and lime 8.5. */ + --map-newest: #e8eef6; } /* --- scheme: frost --------------------------------------------------------------------------