<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="/assets/xslt/atom.xslt" ?>
<?xml-stylesheet type="text/css" href="/assets/css/atom.css" ?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>https://crisly.nl/</id>
	<title>Crisly.nl</title>
	<updated>2026-07-08T15:47:12+02:00</updated>

	<subtitle>Personal site of Cris Lanting — clinician–scientist working on hearing, genetics, and audiology. Posts on research, clinical practice, travel, and things that catch my attention.</subtitle>

	
		
		<author>
			
				<name>Cris Lanting</name>
			
			
			
		</author>
	

	<link href="https://crisly.nl/atom.xml" rel="self" type="application/rss+xml" />
	<link href="https://crisly.nl/" rel="alternate" type="text/html" />

	<generator uri="http://jekyllrb.com" version="4.4.1">Jekyll</generator>

	
		<entry>
			<id>https://crisly.nl/meta/colour-audit/</id>
			<title>Auditing the Lights</title>
			<link href="https://crisly.nl/meta/colour-audit/" rel="alternate" type="text/html" title="Auditing the Lights" />
			<updated>2026-07-03T00:00:00+02:00</updated>

			
				
				<author>
					
						<name>Cris Lanting</name>
					
					
						<email>c.lanting@gmail.com</email>
					
					
						<uri>https://crisly.nl/</uri>
					
				</author>
			
			<summary>Last month I wrote about the five-palette colour system behind this site. This week I finally did what I should have done then: computed the WCAG contrast ratio for every semantic colour, in every palette, in both light and dark mode. Fifty checks. Ten failed.</summary>
			<content type="html" xml:base="https://crisly.nl/meta/colour-audit/">&lt;p&gt;When I built the &lt;a href=&quot;/meta/colour-system/&quot;&gt;colour system&lt;/a&gt; for this site, I annotated the palette definitions with contrast ratios — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;7.2:1 on white ✓✓&lt;/code&gt;, that sort of thing. The annotations were spot checks, done by hand for the colours I was worried about. The colours I &lt;em&gt;wasn’t&lt;/em&gt; worried about never got checked. You can guess where this is going.&lt;/p&gt;

&lt;h2 id=&quot;the-audit&quot;&gt;The audit&lt;/h2&gt;

&lt;p&gt;The setup makes an exhaustive audit cheap. Every palette defines five semantic colours — primary, secondary (links), accent, danger, success — and every derived value (dark-mode variants, surface tints, muted text) is computed from those five with the same &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scale-color()&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mix()&lt;/code&gt; formulas. So a short Python script that replicates the Sass colour math can compute the real rendered colour of every token in every palette and check it against WCAG 2.1: &lt;strong&gt;4.5:1&lt;/strong&gt; for normal text, &lt;strong&gt;3:1&lt;/strong&gt; for large text and graphics.&lt;/p&gt;

&lt;p&gt;Five palettes × two modes × five semantic roles = fifty checks. The good news: links, muted text, primary and success passed everywhere, usually with a comfortable margin — links range from 5.4:1 to 8.1:1. The system’s core was sound.&lt;/p&gt;

&lt;p&gt;The bad news came in two systematic clusters:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Danger failed in dark mode in four of five palettes&lt;/strong&gt; (3.6–3.9:1). The dark-mode formula lightened the alert red by only 18–20%, which isn’t enough to lift a deep red like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#B02424&lt;/code&gt; off a near-black background. One formula, four failures.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Accent failed as text on light backgrounds in four of five palettes&lt;/strong&gt; (2.1–2.9:1). The accent colours — ochre, coral, gold, teal — are mid-lightness by design, which is exactly what makes them work as decorative accents on dark footers and as underline rules. It’s also exactly what makes them fail as text on white.&lt;/p&gt;

&lt;h2 id=&quot;the-fixes&quot;&gt;The fixes&lt;/h2&gt;

&lt;p&gt;The danger fix was the easy one: lighten by 50% instead of 20% in dark mode. One line, and the alert red now sits between 6.3:1 and 7.8:1 in every palette.&lt;/p&gt;

&lt;p&gt;The accent problem was more interesting because the &lt;em&gt;same colour&lt;/em&gt; needs to do two jobs. As a border, an underline, a footer link on a dark surface — the mid-lightness accent is correct and shouldn’t change. As body-level text on white — the resume’s print link, hover states on pagination buttons — it needs to be much darker. Changing the accent itself would fix the text and break the footer.&lt;/p&gt;

&lt;p&gt;So the accent is now two tokens. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--accent&lt;/code&gt; stays what it was and keeps doing the decorative work. A new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--accent-text&lt;/code&gt; is derived from it — darkened 45% in light mode, aliased straight to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--accent&lt;/code&gt; in dark mode where the lightened accents already pass. Everything that sets accent-coloured &lt;em&gt;text&lt;/em&gt; now uses &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--accent-text&lt;/code&gt;. In light mode that lands between 5.6:1 and 8.2:1; in dark mode nothing changed because nothing needed to.&lt;/p&gt;

&lt;p&gt;Two individual colours also got nudged: Moonlight’s danger red (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#DF4949&lt;/code&gt; → &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#C43B3B&lt;/code&gt;, 4.0 → 5.1:1) and Verdant’s success green (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#52875E&lt;/code&gt; → &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#457A51&lt;/code&gt;, 4.1 → 5.0:1). Both are barely perceptible shifts — a little deeper, a little less bright — and both were the kind of colour that annotated spot checks skip, because nobody worries about the success green.&lt;/p&gt;

&lt;p&gt;After the changes: fifty checks, zero failures, and the lowest ratio anywhere in the system is 5.0:1 — above the threshold with margin, not squeaking past it.&lt;/p&gt;

&lt;h2 id=&quot;what-id-tell-past-me&quot;&gt;What I’d tell past me&lt;/h2&gt;

&lt;p&gt;Two things. First, &lt;strong&gt;derived colours fail differently than defined colours&lt;/strong&gt;. I checked the hex values I typed and trusted the formulas that transformed them. But a formula that works for one palette’s danger red fails for another’s, because “lighten by 20%” means something different at every starting lightness. If colours are computed, the &lt;em&gt;computed results&lt;/em&gt; are what need checking.&lt;/p&gt;

&lt;p&gt;Second, &lt;strong&gt;a colour that passes as decoration will tempt you to use it as text&lt;/strong&gt;. The accent was never meant for body text, but it looked good, so it crept into a print link here and a hover state there. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--accent-text&lt;/code&gt; split makes the distinction structural: there is now a token whose name says what it’s for, and the pretty-but-illegible one no longer gets the chance.&lt;/p&gt;

&lt;p&gt;The palette strips on the &lt;a href=&quot;/meta/colour-system/&quot;&gt;colour system page&lt;/a&gt; have been updated with the corrected values. If you’re reading this in Moonlight and the alert red looks fractionally deeper than you remember — that’s not your memory.&lt;/p&gt;
</content>

			
				<category term="meta" />
			
			
				<category term="design" />
			
				<category term="CSS" />
			
				<category term="colour" />
			
				<category term="accessibility" />
			
				<category term="dark mode" />
			
				<category term="website" />
			

			<published>2026-07-03T00:00:00+02:00</published>
		</entry>
	
		<entry>
			<id>https://crisly.nl/tutorial/reaction-time-suprathreshold-processing/</id>
			<title>Listening Beyond the Audiogram</title>
			<link href="https://crisly.nl/tutorial/reaction-time-suprathreshold-processing/" rel="alternate" type="text/html" title="Listening Beyond the Audiogram" />
			<updated>2026-06-21T00:00:00+02:00</updated>

			
				
				<author>
					
						<name>Cris Lanting</name>
					
					
						<email>c.lanting@gmail.com</email>
					
					
						<uri>https://crisly.nl/</uri>
					
				</author>
			
			<summary>An audiogram measures what becomes audible. Reaction times to spectral and temporal changes can show what happens after that: how efficiently a listener uses audible sound.</summary>
			<content type="html" xml:base="https://crisly.nl/tutorial/reaction-time-suprathreshold-processing/">&lt;p&gt;An audiogram answers an important but narrow question: how faint can a tone
be before it disappears? It does not tell us how well a listener represents
the spectral and temporal detail of a sound that is already audible. That
distinction matters in daily life. Listeners with similar pure-tone
thresholds do not necessarily find speech in noise equally easy.&lt;/p&gt;

&lt;p&gt;Here I use reaction time (RT) to examine that second part of hearing. The
task requires only a button press when an audible spectrotemporal ripple
changes. The analysis is less simple: reciprocal RT provides a measure of
promptness, separate transfer functions describe spectral and temporal
performance, and a Bayesian ANOVA checks the result without imposing those
curve shapes. The data compare listeners with normal hearing with three
groups with genetic hearing loss: &lt;em&gt;COL11A2&lt;/em&gt;, &lt;em&gt;STRC&lt;/em&gt;, and &lt;em&gt;TECTA&lt;/em&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1-a-button-press-as-a-measure-of-hearing&quot;&gt;1. A button press as a measure of hearing&lt;/h2&gt;

&lt;p&gt;Each trial begins with a static noise. At an unpredictable moment it changes
into a dynamic spectrotemporal “ripple.” The listener’s task is to press a
button as quickly as possible after detecting that change. Reaction time is
measured from the onset of the ripple to the button press.&lt;/p&gt;

&lt;p&gt;The ripple varies along two dimensions: &lt;strong&gt;temporal velocity&lt;/strong&gt; (in Hz), which
describes how quickly its pattern moves across frequency, and &lt;strong&gt;spectral
density&lt;/strong&gt; (in cycles/octave), which describes how closely its peaks are
spaced. Most conditions combine a non-zero velocity with a non-zero density,
so both dimensions vary. Only conditions on the axes isolate one dimension:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dens == 0, vel ≠ 0&lt;/code&gt; → only temporal velocity changes&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vel == 0, dens ≠ 0&lt;/code&gt; → only spectral density changes&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vel == 0, dens == 0&lt;/code&gt; → catch condition: the sound remains static&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each condition is presented 5–10 times, providing repeated reaction-time
measurements across the velocity × density grid.&lt;/p&gt;

&lt;p&gt;Before analysis, I apply two rules:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Rule&lt;/th&gt;
      &lt;th&gt;Value&lt;/th&gt;
      &lt;th&gt;Reason&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Drop RT ≤&lt;/td&gt;
      &lt;td&gt;0.150 s&lt;/td&gt;
      &lt;td&gt;Too fast to reflect actual stimulus-driven detection — anticipatory guesses&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Cap RT &amp;gt;&lt;/td&gt;
      &lt;td&gt;3.0 s → 3.0 s&lt;/td&gt;
      &lt;td&gt;Treated as a non-detection; sets a floor on promptness rather than discarding the trial&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Slow trials are not discarded. They are &lt;strong&gt;left-censored&lt;/strong&gt; on the promptness
scale: the model records only that promptness was at or below 1/3 Hz. This
preserves the non-detection without pretending to know its exact RT and is
used explicitly in the Bayesian ANOVA below.&lt;/p&gt;

&lt;p&gt;Every remaining RT is then transformed:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;promptness = 1 / RT      (units: Hz)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The LATER model provides the rationale for using reciprocal rather than raw RT.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;2-why-reciprocal-rt-the-later-model&quot;&gt;2. Why reciprocal RT: the LATER model&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;LATER&lt;/strong&gt; — &lt;em&gt;Linear Approach to Threshold with Ergodic Rate&lt;/em&gt; — is a simple
race-to-threshold account of decision time originally proposed by Carpenter
and Williams for saccadic eye movements (Carpenter &amp;amp; Williams, 1995, &lt;em&gt;Nature&lt;/em&gt;
377:59–62), and since generalised to manual and vocal RT tasks across
psychophysics.&lt;/p&gt;

&lt;p&gt;The model says: on every trial, an internal decision signal rises linearly
from a starting level &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;S0&lt;/code&gt; to a fixed threshold &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ST&lt;/code&gt;. The &lt;em&gt;rate&lt;/em&gt; of rise, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;r&lt;/code&gt;,
is not constant — it varies from trial to trial, drawn from a Gaussian
distribution. Reaction time is simply the time it takes the signal to cover
the distance from start to threshold at that trial’s rate:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;RT = (ST − S0) / r
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Because RT is inversely related to the rate, &lt;strong&gt;1/RT (promptness) is
approximately Gaussian&lt;/strong&gt; under this model; raw RT usually has a long right
tail. On a reciprobit plot (probit probability against 1/RT), LATER predicts
a straight line. A change in the rate variance rotates that line (a
&lt;em&gt;swivel&lt;/em&gt;), whereas a change in its mean translates it (a &lt;em&gt;shift&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;This choice has three practical consequences:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;It justifies using promptness instead of RT&lt;/strong&gt; as the dependent variable
used in the models below. Promptness is generally closer to a symmetric
distribution than raw RT, without requiring an unrelated transformation.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;It gives the RT-capping rule a mechanistic interpretation.&lt;/strong&gt; A trial
where the listener never reaches threshold within 3 s isn’t an arbitrary
cutoff. Censoring rather than deleting preserves the information that a
response did not occur within the analysis window.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;It frames “faster median RT” as “more efficient evidence accumulation”,&lt;/strong&gt;
while avoiding a direct interpretation of the skewed RT scale. It is still
a behavioural measure, however: attention, motor speed, and decision
strategy can also affect it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;LATER therefore motivates promptness as the response variable. It does not,
by itself, make reaction time a pure measure of auditory processing; that
interpretation depends on the task design and comparisons between conditions.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;3-from-individual-responses-to-a-transfer-function&quot;&gt;3. From individual responses to a transfer function&lt;/h2&gt;

&lt;p&gt;A single response says little. The useful object is promptness as a function
of stimulus strength, estimated separately for temporal velocity and spectral
density. Together these curves form the &lt;strong&gt;modulation transfer function
(MTF)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The model is a hierarchical Bayesian model fit per group in Stan
(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;stm_model.stan&lt;/code&gt;), with two transfer functions sharing a common likelihood:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;y_i ~ Student-t(ν, μ_i, σ)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;A Student-t likelihood limits the influence of occasional outlying responses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Temporal MTF&lt;/strong&gt; — a Gompertz CDF in log-velocity space, rising from
near-zero promptness at low velocities to an asymptote α at high velocities:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;μ_i = α_s · exp( −exp( k_t · (log|vel_i| − θ_s^t) + c ) )
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Spectral MTF&lt;/strong&gt; — a logistic function in log-density space, falling from a
high plateau at low densities toward zero as the ripple becomes too dense to
resolve:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;μ_i = α_s · ( 1 − 1 / (1 + exp(−(2 log 9 / ω_s^s) · (log(dens_i) − θ_s^s))) )
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Both curves use three subject-level parameters, partially pooled within each
group. That pooling is especially useful here because the groups contain only
4–8 listeners:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Symbol&lt;/th&gt;
      &lt;th&gt;Name&lt;/th&gt;
      &lt;th&gt;Units&lt;/th&gt;
      &lt;th&gt;Meaning&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;α&lt;/td&gt;
      &lt;td&gt;alpha&lt;/td&gt;
      &lt;td&gt;Hz&lt;/td&gt;
      &lt;td&gt;Asymptotic maximum promptness — the plateau&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;θ&lt;/td&gt;
      &lt;td&gt;theta&lt;/td&gt;
      &lt;td&gt;log(Hz) or log(cyc/oct)&lt;/td&gt;
      &lt;td&gt;Threshold: stimulus level at half-maximum promptness&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;ω&lt;/td&gt;
      &lt;td&gt;omega&lt;/td&gt;
      &lt;td&gt;log-units&lt;/td&gt;
      &lt;td&gt;Transition width — how gradual the slope is&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Because θ lives in log-space (matching the log-encoded stimulus axes), it’s
exponentiated back into physical units for reporting:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;exp(ttheta) = temporal fidelity   (Hz)       — velocity at half-maximum promptness
exp(stheta) = spectral edge       (cyc/oct)  — density at half-maximum promptness
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;A subject-level snippet of the Stan likelihood block makes the two-branch
structure explicit:&lt;/p&gt;

&lt;div class=&quot;language-stan highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;is_temporal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kt&quot;&gt;real&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;exponent&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;log_neg_log_09&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;log_neg_log_01&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;tomega&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]]&lt;/span&gt;
                    &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;ttheta&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]])&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;log_neg_log_05&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nv&quot;&gt;mu&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;alpha&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;exp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;exp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;exponent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kt&quot;&gt;real&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;logit_arg&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;two_log_9&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;somega&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;stheta&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]]);&lt;/span&gt;
    &lt;span class=&quot;nv&quot;&gt;mu&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;alpha&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;1.0&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;exp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;logit_arg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)));&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;~&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;student_t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;nu&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;mu&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;sigma&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Four chains, 1000 warmup + 1000 sampling iterations, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;adapt_delta = 0.99&lt;/code&gt;
(CmdStanPy compiles and fits this in roughly 10–40 minutes for four groups).
A good fit shows zero divergent transitions, R-hat ≈ 1.00, and effective
sample size &amp;gt; 400 per parameter — the same checklist you’d use for any HMC
model, nothing exotic here.&lt;/p&gt;

&lt;p&gt;The resulting group curves look like this:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/figure_mtf_clean.png&quot; alt=&quot;Temporal and spectral MTF curves across groups&quot; style=&quot;width:100%; display:block; margin:auto;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;In the temporal panel, a higher θ shifts the rising curve to the right: a
higher velocity is needed to reach half-maximum promptness. In the spectral
panel, a higher θ shifts the falling edge to the right and indicates that
denser ripples remain resolvable. In either panel, α sets the response
plateau and ω determines how gradual the transition is.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;4-spectral-and-temporal-performance-can-diverge&quot;&gt;4. Spectral and temporal performance can diverge&lt;/h2&gt;

&lt;p&gt;A single score would be simpler, but it would hide differences between
spectral and temporal performance. Those differences may help distinguish
the effects of different cochlear pathologies.&lt;/p&gt;

&lt;p&gt;In this dataset, despite all three hearing-loss groups carrying a genetic
diagnosis and broadly comparable audiograms, the MTF profiles tell different
stories:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;STRC&lt;/strong&gt; (DFNB16) shows a predominantly &lt;em&gt;spectral&lt;/em&gt; deficit — consistent
with dysfunction of the cochlear amplifier (outer hair cell / stereocilin
pathology), which primarily degrades frequency selectivity rather than
timing.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;TECTA&lt;/strong&gt; (DFNA8/12) and &lt;strong&gt;COL11A2&lt;/strong&gt; (DFNA13) show similar combined
spectral &lt;em&gt;and&lt;/em&gt; temporal impairments, with COL11A2 showing the largest
deficits overall.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keeping temporal and spectral trials in separate transfer functions
(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ttheta&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tomega&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;stheta&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;somega&lt;/code&gt;) makes that distinction visible.&lt;/p&gt;

&lt;p&gt;The audiograms for the same three groups, for comparison — note how similar
they look despite the MTF differences above:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/audiograms_three_groups_symbols_pta.png&quot; alt=&quot;Audiograms for the three hearing-loss groups plus normal hearing&quot; style=&quot;width:100%; display:block; margin:auto;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I then use a series of OLS regressions (with HC3 robust SEs) to test whether
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;spectral_edge&lt;/code&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exp(stheta)&lt;/code&gt;) and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;temporal_fidelity&lt;/code&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exp(ttheta)&lt;/code&gt;) predict &lt;strong&gt;speech-reception threshold
(SRT)&lt;/strong&gt; in noise — measured independently with the Dutch Matrix
speech-in-noise test — over and above audiometric hearing level (PTA) and
age:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;SRT ~ PTA3_z + Spec_z + Temp_z + Age_c + C(group)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In these data, spectral resolution is more strongly related to SRT than
temporal resolution. Much of that association is shared with audibility
(PTA), as the residualised model shows after removing the effects of PTA and
age from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Spec_z&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Temp_z&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/figure_3_edge_fidelity_pta_vs_srt.png&quot; alt=&quot;Spectral edge vs. SRT, controlling for audibility&quot; style=&quot;width:100%; display:block; margin:auto;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;These measures add information that is absent from a pure-tone audiogram and
do not require speech material. Whether they can guide individual
rehabilitation is a separate question that will require prospective evidence.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;5-checking-the-curve-model-with-a-3-way-bayesian-anova&quot;&gt;5. Checking the curve model with a 3-way Bayesian ANOVA&lt;/h2&gt;

&lt;p&gt;The Gompertz and logistic functions impose particular curve shapes. As a
check, I also ask whether promptness differs across velocity × density
conditions when every condition has its own cell mean. This &lt;strong&gt;3-way Bayesian
ANOVA&lt;/strong&gt; (velocity × density × subject) follows the
approach in Veugen et al. (2022, DOI: 10.1177/23312165221127589), itself
built on the censored-ANOVA framework in Kruschke’s &lt;em&gt;Doing Bayesian Data
Analysis&lt;/em&gt; (2nd ed., Ch. 20).&lt;/p&gt;

&lt;h3 id=&quot;the-original-jags&quot;&gt;The original: JAGS&lt;/h3&gt;

&lt;p&gt;The reference implementation is a MATLAB + JAGS model
(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jags_anova3xway_censor.m&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RunModel.m&lt;/code&gt;) — Gibbs sampling, sum-to-zero
deviation-coded effects (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;b0, b1, b2, b3, b1b2, b1b3, b2b3, b1b2b3&lt;/code&gt;), and
explicit left-censoring of non-responses via an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;isCensored&lt;/code&gt; indicator vector
fed straight into the JAGS data block. The original run used the
&lt;strong&gt;fixed-σ, Student-t&lt;/strong&gt; branch of the model (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;varSigma = false&lt;/code&gt;) — a single
shared noise SD per group, with the t-distribution’s ν parameter providing
robustness to outliers.&lt;/p&gt;

&lt;h3 id=&quot;the-port-stan&quot;&gt;The port: Stan&lt;/h3&gt;

&lt;p&gt;The Stan port (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;model_rt_3way_cellsd_s2z.stan&lt;/code&gt;) changes one important model
choice. The JAGS analysis used a shared σ, which avoids updating a separate
scale parameter for every velocity × density × subject cell. With HMC, the
cell-specific version is practical, so the Stan model uses &lt;strong&gt;cell-specific
σ with a Normal likelihood&lt;/strong&gt; (the equivalent of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;varSigma = true&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;There are three reasons for not retaining the Student-t likelihood:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;The outlier-prone trials it was designed to absorb (anticipatory guesses,
non-responses) are already handled upstream by the 150 ms floor and the
3 s left-censoring — so there’s little heavy-tailed residual left for ν
to model.&lt;/li&gt;
  &lt;li&gt;With only 5–15 trials per (velocity, density, subject) cell, ν is barely
identifiable from the data anyway — the model collapses toward Normal in
practice regardless.&lt;/li&gt;
  &lt;li&gt;The heteroscedasticity across cells (tight, fast responses near ceiling;
noisy, slow responses near threshold) is a genuine feature of the data,
not noise to be averaged away — and a single shared σ would force the
model to under-fit both regimes simultaneously.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The other deliberate departure is the intercept prior. JAGS’s effectively
flat &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;τ ~ Gamma(0.001, 0.001)&lt;/code&gt; is harmless for Gibbs sampling but creates
pathological geometry for HMC (Stan can wander into physically impossible
regions — negative promptness — and report divergences). The Stan version
uses &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a0 ~ Normal(y_mean, 5 · y_sd)&lt;/code&gt;: still weakly informative — five SDs
either side of the observed grand mean covers essentially any plausible
value — but it keeps the sampler out of the tails where the geometry breaks
down. The two priors produce indistinguishable posteriors; only the sampler’s
behaviour differs.&lt;/p&gt;

&lt;p&gt;The sum-to-zero centering itself is implemented as a Stan &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;functions&lt;/code&gt; block
(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;center_sum_to_zero&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;center_sum_to_zero_2d&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;center_sum_to_zero_3d&lt;/code&gt;) that
takes raw, unconstrained effect parameters and re-centers them so that every
main effect and interaction sums to zero across its levels — the same
identifiability trick as deviation coding in classical ANOVA, just written
out explicitly because Stan has no built-in factor syntax:&lt;/p&gt;

&lt;div class=&quot;language-stan highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kt&quot;&gt;vector&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;center_sum_to_zero&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;vector&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;mean&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The linear predictor itself reads exactly like the ANOVA decomposition it
represents:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;μ_i = a0 + a1[v] + a2[d] + a3[s] + a1a2[v,d] + a1a3[v,s] + a2a3[d,s] + a1a2a3[v,d,s]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;promptness_i ~ Normal(μ_i, σ_{v,d,s})&lt;/code&gt; for observed trials and
left-censoring at 1/3 Hz for the capped ones — fit with 3 chains, 10,000
warmup, 6,667 sampling iterations per group.&lt;/p&gt;

&lt;p&gt;The result is a less constrained check on the MTF result: group-level
heatmaps of promptness across the full velocity × density grid (using only
the fixed effects &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a0 + a1[v] + a2[d] + a1a2[v,d]&lt;/code&gt;, deliberately excluding
subject terms to show the population-level pattern), plus marginal
spectrotemporal profiles with 95% highest-density intervals:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/promptness_heatmaps_groups_smoothed_2x2.png&quot; alt=&quot;Promptness heatmaps across velocity and density, by group&quot; style=&quot;width:100%; display:block; margin:auto;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Here the smooth MTF and the cell-based ANOVA agree. That makes it less likely
that the main group pattern is an artefact of the Gompertz or logistic curve
shape.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;6-putting-it-together&quot;&gt;6. Putting it together&lt;/h2&gt;

&lt;p&gt;The full pipeline has three branches that share one RT dataset and converge
on one regression:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;RT data (19,561 trials)
   │
   ├── Branch A — hierarchical MTF (Stan)         → α, θ, ω per subject
   ├── Branch B — 3-way Bayesian ANOVA (JAGS→Stan) → model-free confirmation
   │
   └── Branch C — Matrix speech-in-noise test      → SRT per subject
                                                          │
        spectral_edge, temporal_fidelity  ───────────────┘
                              │
                              ▼
                  SRT ~ PTA + Spec_z + Temp_z + Age + group
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;For a comparable analysis: collect RTs to clearly audible stimuli that vary
along one dimension at a time; define the anticipatory and censoring limits
before fitting the model; transform RT to promptness; fit separate transfer
functions for each stimulus dimension; compare their predictions with a
cell-based model; and only then relate the curve parameters to an independent
outcome.&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;references&quot;&gt;References&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Carpenter, R.H.S., &amp;amp; Williams, M.L.L. (1995). Neural computation of log
likelihood in control of saccadic eye movements. &lt;em&gt;Nature&lt;/em&gt;, 377, 59–62.&lt;/li&gt;
  &lt;li&gt;Kruschke, J.K. (2015). &lt;em&gt;Doing Bayesian Data Analysis&lt;/em&gt; (2nd ed.), Ch. 20:
Metric Predicted Variable with Multiple Nominal Predictors. Academic Press.&lt;/li&gt;
  &lt;li&gt;Veugen, L.C.E., et al. (2022). DOI: &lt;a href=&quot;https://doi.org/10.1177/23312165221127589&quot;&gt;10.1177/23312165221127589&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Stan Development Team. &lt;a href=&quot;https://mc-stan.org/cmdstanpy/&quot;&gt;&lt;em&gt;CmdStanPy documentation&lt;/em&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
</content>

			
				<category term="tutorial" />
			
			
				<category term="reaction time" />
			
				<category term="psychoacoustics" />
			
				<category term="LATER model" />
			
				<category term="Bayesian statistics" />
			
				<category term="Stan" />
			
				<category term="hearing research" />
			

			<published>2026-06-21T00:00:00+02:00</published>
		</entry>
	
		<entry>
			<id>https://crisly.nl/work/kf2035/</id>
			<title>Clinical Physics in 2035</title>
			<link href="https://crisly.nl/work/kf2035/" rel="alternate" type="text/html" title="Clinical Physics in 2035" />
			<updated>2026-06-14T00:00:00+02:00</updated>

			
				
				<author>
					
						<name>Cris Lanting</name>
					
					
						<email>c.lanting@gmail.com</email>
					
					
						<uri>https://crisly.nl/</uri>
					
				</author>
			
			<summary>The Dutch Society of Clinical Physics has published its vision for the profession towards 2035. Four themes, one clear direction — and some uncomfortable choices ahead.</summary>
			<content type="html" xml:base="https://crisly.nl/work/kf2035/">&lt;style&gt;
.kf-accent-header {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  margin: 2.5rem 0 0.75rem;
  padding-bottom: 0.5rem;
  border-bottom: 2px solid var(--primary, #323159);
}
.kf-accent-num {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2rem;
  height: 2rem;
  border-radius: 50%;
  background: var(--primary, #323159);
  color: #fff;
  font-weight: 700;
  font-size: 0.9rem;
  line-height: 1;
}
.kf-accent-header h2 {
  margin: 0;
  padding: 0;
  border: none;
  font-size: 1.4rem;
}
&lt;/style&gt;

&lt;h2 id=&quot;why-now&quot;&gt;Why now?&lt;/h2&gt;

&lt;p&gt;Healthcare is under pressure from several directions at once: a growing and ageing population, a tightening workforce, rising costs, accelerating digitalisation, and — less commonly discussed — a geopolitical climate that makes supply chains and digital infrastructure less reliable than they used to be. Medical technology sits at the centre of all of these. It can help absorb demand, reduce the burden on staff, and improve outcomes. But it can also add complexity, cost, and risk when introduced without a clear sense of what value it actually delivers.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://nvkf.nl&quot;&gt;Nederlandse Vereniging voor Klinische Fysica&lt;/a&gt; (NVKF) has responded to this landscape by setting out a deliberate course. &lt;em&gt;Klinisch Fysicus 2035&lt;/em&gt; defines where the clinical physics profession wants to be in a decade, and what it needs to do to get there. It builds on the &lt;a href=&quot;https://demedischspecialist.nl/toolbox2035&quot;&gt;&lt;em&gt;Medisch Specialist 2035&lt;/em&gt; vision&lt;/a&gt; published by the Federatie Medisch Specialisten in June 2025, and it translates those broader ambitions into something discipline-specific.&lt;/p&gt;

&lt;h2 id=&quot;what-is-the-document&quot;&gt;What is the document?&lt;/h2&gt;

&lt;p&gt;At its core, the vision commits to one mission: &lt;strong&gt;appropriate medical technology for every patient, now and in the future.&lt;/strong&gt; “Appropriate” is doing a lot of work in that phrase. It does not mean most advanced. It does not mean maximally comprehensive. It means fit-for-purpose, proportionate, safe, and sustainable — which in practice calls for choices that the profession has not always been comfortable making. The document structures this course around four interlocking accents: valuable innovations, future knowledge and skills, technological resilience, and sustainable medical technology.&lt;/p&gt;

&lt;h2 id=&quot;how-was-it-made&quot;&gt;How was it made?&lt;/h2&gt;

&lt;p&gt;The vision emerged from a process of genuine breadth. Six roadshows across the country engaged more than half of the NVKF membership in conversation about the future of the field. Alongside those, the NVKF held consultations with the ministry of Health, Zorginstituut Nederland, patient organisations, hospital networks, insurers, and adjacent scientific societies. Writing groups worked up the input from these conversations into draft accents; a sounding board tested and challenged them; a core editorial team brought the pieces into a coherent whole. The result was adopted at the board meeting of May 2026.&lt;/p&gt;

&lt;figure style=&quot;margin: 2rem 0;&quot;&gt;
  &lt;picture&gt;
    &lt;source srcset=&quot;https://crisly.nl/images/kfa_cris-1600.webp&quot; media=&quot;(min-width: 961px)&quot; type=&quot;image/webp&quot;&gt;
    &lt;source srcset=&quot;https://crisly.nl/images/kfa_cris-960.webp&quot; media=&quot;(min-width: 481px)&quot; type=&quot;image/webp&quot;&gt;
    &lt;source srcset=&quot;https://crisly.nl/images/kfa_cris-480.webp&quot; type=&quot;image/webp&quot;&gt;
    &lt;img src=&quot;https://crisly.nl/images/kfa_cris.png&quot; alt=&quot;Launch of the Klinisch Fysicus 2035 vision document&quot; style=&quot;width:100%; height:auto; display:block;&quot;&gt;
  &lt;/picture&gt;
  &lt;figcaption style=&quot;font-size:0.85em; color:var(--text-muted, #666); margin-top:0.5rem;&quot;&gt;Launch of the &lt;em&gt;Klinisch Fysicus 2035&lt;/em&gt; vision document, June 2026. Photo: &lt;a href=&quot;https://magic-lantern.nl&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Merlijn Janssen Steenberg / Magic Lantern&lt;/a&gt;.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;div class=&quot;kf-accent-header&quot;&gt;
  &lt;span class=&quot;kf-accent-num&quot;&gt;1&lt;/span&gt;
  &lt;h2&gt;Valuable innovations for the patient&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;The first accent addresses a tension that runs through all technology-intensive healthcare: more innovation does not automatically mean better care. The document is direct about this. Too many technologies are implemented that add little value, and too few are phased out when they stop contributing. The shift proposed here is from quality-for-its-own-sake toward &lt;strong&gt;value-driven and risk-stratified evaluation&lt;/strong&gt; — across the full lifecycle, from procurement and introduction through to de-implementation.&lt;/p&gt;

&lt;p&gt;This means clinical physicists taking a more active role in asking &lt;em&gt;whether&lt;/em&gt; a technology adds value for patients, clinicians, and society, not only &lt;em&gt;how&lt;/em&gt; to use it safely. New competencies are needed: health technology assessment, outcomes evaluation, health economics. The document calls for a NVKF knowledge agenda that reflects this, and for regional and national collaboration to prevent fragmentation — the same evaluation work done thirty times in thirty hospitals instead of once, well.&lt;/p&gt;

&lt;p&gt;There is a useful provocation embedded here: the era of pursuing “the best possible technology for everyone” is giving way to “appropriate technology, responsibly deployed.” In a system under pressure from ageing populations, workforce shortages, and cost constraints, that shift is not a retreat. It is a precondition for keeping medical technology available at all.&lt;/p&gt;

&lt;div class=&quot;kf-accent-header&quot;&gt;
  &lt;span class=&quot;kf-accent-num&quot;&gt;2&lt;/span&gt;
  &lt;h2&gt;Knowledge and skills of the future&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;The second accent addresses the profession’s competence infrastructure. Clinical physics sits at the intersection of physics, technology, and clinical care — which makes it well positioned for the transition ahead, but only if the knowledge base evolves in step with it.&lt;/p&gt;

&lt;p&gt;The document does not try to predict exactly which technologies will dominate in 2035. (Wisely, perhaps — anyone who was certain about the specific trajectory of AI in clinical imaging three years ago has already been surprised twice.) Instead it calls for a &lt;strong&gt;flexible, modular approach to knowledge development&lt;/strong&gt;: a shared professional base that all clinical physicists carry, with room for specialisation and life-long reorientation as the field moves.&lt;/p&gt;

&lt;p&gt;On AI specifically, the vision is clear: by 2035, every clinical physicist should be able to assess AI applications for reliability, clinical value, and safety. Not to replace the data scientist or the algorithm developer, but to act as the bridge between technical capability and clinical context — the person who can ask the right questions and interpret the answers. That role already exists informally in many places; the vision formalises it. The &lt;a href=&quot;https://nvkf.nl/kennisplatform-ai&quot;&gt;NVKF Kennisplatform AI&lt;/a&gt; is already active in this space.&lt;/p&gt;

&lt;p&gt;The structural vehicle is a strengthened network of &lt;a href=&quot;https://nvkf.nl/kennisplatform-ai&quot;&gt;NVKF knowledge platforms&lt;/a&gt; — functioning not as passive information hubs but as active catalysts for research translation, curriculum development, and professional signalling. What knowledge gaps exist right now? What should the training curriculum include that it currently does not? These are questions the platforms are meant to surface and answer continuously.&lt;/p&gt;

&lt;div class=&quot;kf-accent-header&quot;&gt;
  &lt;span class=&quot;kf-accent-num&quot;&gt;3&lt;/span&gt;
  &lt;h2&gt;Technological resilience&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;The third accent is the one that gets least attention in ordinary times, and perhaps the most important one to have thought through before those times arrive.&lt;/p&gt;

&lt;p&gt;Healthcare is deeply technology-dependent. The document acknowledges that this dependency is growing, and that the risks it carries are also growing: cyberattacks, energy grid failures, supply chain disruptions, geopolitical instability affecting critical components. The 72-hour autonomous functioning standard cited in the document — based on national crisis preparedness guidelines — is a concrete marker of what resilience actually means operationally.&lt;/p&gt;

&lt;p&gt;For clinical physics, this means contributing to something beyond normal quality assurance: identifying critical technology dependencies, designing fallback procedures and back-up systems, and participating in realistic crisis exercises. It also means being prepared to make ethically difficult decisions in degraded conditions — accepting risks that would be unacceptable in normal circumstances, because “the best achievable” is not on the table.&lt;/p&gt;

&lt;p&gt;The document calls for inter-hospital and regional collaboration on this, as well as alignment with national bodies including the ministries of Health and Defence and the national counterterrorism coordinator. That level of coordination reflects how serious the threat landscape has become. A hospital’s clinical physics department planning only for its own continuity is planning for the easy scenarios.&lt;/p&gt;

&lt;div class=&quot;kf-accent-header&quot;&gt;
  &lt;span class=&quot;kf-accent-num&quot;&gt;4&lt;/span&gt;
  &lt;h2&gt;Sustainable medical technology for sustainable care&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;The fourth accent is sustainability — not as a compliance checkbox but as a genuine design parameter. The Dutch healthcare sector accounts for approximately 7% of national CO₂ emissions. Medical technology is a significant part of that footprint, through energy use, material consumption, and international supply chains.&lt;/p&gt;

&lt;p&gt;The vision proposes integrating environmental impact into the full decision cycle for medical technology: selection, use, maintenance, and end-of-life. This does not mean refusing technologies because they consume energy; it means weighing their environmental costs alongside their clinical value and financial costs. It means designing for longevity rather than planned obsolescence, pursuing modular upgrades over wholesale replacement, and developing chain awareness — understanding where the materials come from and where they go. The &lt;a href=&quot;https://nvkf.nl/kennisplatform-duurzaamheid&quot;&gt;NVKF Kennisplatform Duurzaamheid&lt;/a&gt; is already building this expertise within the profession.&lt;/p&gt;

&lt;p&gt;The document is refreshingly honest about what “sustainable choice” does and does not mean in practice. It calls for distinguishing facts from myths, and for focusing on measures with significant effect rather than gestures. Not all apparent sustainability gains are real. The clinical physicist, with expertise in technology evaluation and quantitative reasoning, is well placed to make those distinctions.&lt;/p&gt;

&lt;h2 id=&quot;reading-the-whole&quot;&gt;Reading the whole&lt;/h2&gt;

&lt;p&gt;What makes this vision document interesting beyond the four accents is the underlying shift in professional identity it describes. Clinical physics has traditionally defined itself around physics expertise applied to specific technology domains — radiation oncology, diagnostic imaging, nuclear medicine. The &lt;em&gt;Klinisch Fysicus 2035&lt;/em&gt; vision describes something broader: a profession that holds &lt;strong&gt;hospital-wide responsibility for the quality and governance of medical technology&lt;/strong&gt;, that reaches beyond the institution into community and home-based care, and that contributes actively to policy and societal debate.&lt;/p&gt;

&lt;p&gt;That is a significant expansion of scope. The document is careful to note that this cannot happen through unlimited task expansion — it must happen through explicit prioritisation, sometimes stopping existing work to take on new work that adds more value. That is a discipline that requires both individual and organisational willingness to choose.&lt;/p&gt;

&lt;p&gt;The result is a document worth reading — not only by clinical physicists, but by anyone thinking about how specialist professions in technical healthcare disciplines should position themselves in a decade that will test their adaptability in ways that are difficult to fully anticipate.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://nvkf.nl/sites/default/files/2026-06/Visiedocument%20KF2035.pdf&quot;&gt;Download the Klinisch Fysicus 2035 vision document (PDF)&lt;/a&gt;&lt;/p&gt;
</content>

			
				<category term="work" />
			
			
				<category term="medical physics" />
			
				<category term="healthcare" />
			
				<category term="policy" />
			
				<category term="NVKF" />
			
				<category term="AI" />
			

			<published>2026-06-14T00:00:00+02:00</published>
		</entry>
	
		<entry>
			<id>https://crisly.nl/meta/colour-system/</id>
			<title>Switching the Lights</title>
			<link href="https://crisly.nl/meta/colour-system/" rel="alternate" type="text/html" title="Switching the Lights" />
			<updated>2026-06-13T00:00:00+02:00</updated>

			
				
				<author>
					
						<name>Cris Lanting</name>
					
					
						<email>c.lanting@gmail.com</email>
					
					
						<uri>https://crisly.nl/</uri>
					
				</author>
			
			<summary>This site has five named colour palettes, a built-in dark mode, and four reading fonts. Press p to cycle palettes, d to toggle dark mode, f to change the font — your choices are remembered between visits.</summary>
			<content type="html" xml:base="https://crisly.nl/meta/colour-system/">&lt;p&gt;Most personal websites pick a colour scheme and stick with it. I couldn’t decide — so I built a system instead. This site has &lt;strong&gt;five named palettes&lt;/strong&gt;, a &lt;strong&gt;light/dark mode toggle&lt;/strong&gt;, &lt;strong&gt;four reading fonts&lt;/strong&gt;, and &lt;strong&gt;keyboard shortcuts&lt;/strong&gt; to switch them all without reloading. Everything changes at runtime via CSS custom properties.&lt;/p&gt;

&lt;h2 id=&quot;how-to-use-it&quot;&gt;How to use it&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Press &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;p&lt;/code&gt;&lt;/strong&gt; on any page (when not typing in a form field) to cycle through the five palettes. &lt;strong&gt;Press &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;d&lt;/code&gt;&lt;/strong&gt; to toggle dark mode. &lt;strong&gt;Press &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;f&lt;/code&gt;&lt;/strong&gt; to cycle through the reading fonts. A small toast notification appears bottom-right with the name. Your choices are remembered in the browser between visits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dark mode&lt;/strong&gt; — press &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;d&lt;/code&gt;, use the dark-mode button (☾) in the navigation bar, or click below. The site also respects your OS preference automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fonts&lt;/strong&gt; — press &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;f&lt;/code&gt;, or use the &lt;strong&gt;Aa&lt;/strong&gt; button in the navigation bar, to move through four typographic settings: the default (Lato + Volkhov), Lora, Inter with Playfair Display headings, and Source Serif 4 with Outfit headings. This whole page re-sets in the chosen font instantly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Click to switch palette:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;palette-dot-group&quot; aria-label=&quot;Choose colour palette&quot;&gt;

&lt;div class=&quot;palette-dot-item&quot;&gt;&lt;button class=&quot;palette-dot&quot; data-palette-pick=&quot;H&quot; style=&quot;--dc-l:#2F3A2F;--dc-d:#9AAD9A;&quot; title=&quot;Fieldnote&quot; aria-label=&quot;Fieldnote palette&quot; aria-pressed=&quot;false&quot;&gt;&lt;/button&gt;&lt;/div&gt;

&lt;div class=&quot;palette-dot-item&quot;&gt;&lt;button class=&quot;palette-dot&quot; data-palette-pick=&quot;D&quot; style=&quot;--dc-l:#323159;--dc-d:#9493C4;&quot; title=&quot;Moonlight&quot; aria-label=&quot;Moonlight palette&quot; aria-pressed=&quot;false&quot;&gt;&lt;/button&gt;&lt;/div&gt;

&lt;div class=&quot;palette-dot-item&quot;&gt;&lt;button class=&quot;palette-dot&quot; data-palette-pick=&quot;E&quot; style=&quot;--dc-l:#1B4332;--dc-d:#7AC9A7;&quot; title=&quot;Verdant&quot; aria-label=&quot;Verdant palette&quot; aria-pressed=&quot;false&quot;&gt;&lt;/button&gt;&lt;/div&gt;

&lt;div class=&quot;palette-dot-item&quot;&gt;&lt;button class=&quot;palette-dot&quot; data-palette-pick=&quot;F&quot; style=&quot;--dc-l:#6B1F2E;--dc-d:#D97D8F;&quot; title=&quot;Claret&quot; aria-label=&quot;Claret palette&quot; aria-pressed=&quot;false&quot;&gt;&lt;/button&gt;&lt;/div&gt;

&lt;div class=&quot;palette-dot-item&quot;&gt;&lt;button class=&quot;palette-dot&quot; data-palette-pick=&quot;G&quot; style=&quot;--dc-l:#4A1A3A;--dc-d:#CF76B2;&quot; title=&quot;Meridian&quot; aria-label=&quot;Meridian palette&quot; aria-pressed=&quot;false&quot;&gt;&lt;/button&gt;&lt;/div&gt;


&lt;div class=&quot;palette-dot-item palette-dot-item--hint&quot;&gt;&lt;span class=&quot;shortcut-hint&quot;&gt;or press &lt;kbd&gt;p&lt;/kbd&gt; / &lt;kbd&gt;d&lt;/kbd&gt; / &lt;kbd&gt;f&lt;/kbd&gt;&lt;/span&gt;&lt;/div&gt;

&lt;/div&gt;

&lt;h2 id=&quot;colour-maps&quot;&gt;Colour maps&lt;/h2&gt;

&lt;p&gt;Each palette is shown as two ten-colour strips — &lt;strong&gt;light&lt;/strong&gt; and &lt;strong&gt;dark&lt;/strong&gt; mode. They are meant to be read as overall colour moods rather than as labelled implementation tokens.&lt;/p&gt;


&lt;div class=&quot;cm-block&quot;&gt;
&lt;div class=&quot;cm-head&quot;&gt;&lt;span class=&quot;cm-name&quot;&gt;H · Fieldnote&lt;/span&gt;&lt;span class=&quot;cm-desc&quot;&gt;Carbon olive · brass links · ochre accent · default&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;cm-row&quot;&gt;&lt;div class=&quot;cm-rl&quot;&gt;light&lt;/div&gt;&lt;div class=&quot;cm-strip&quot;&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#FDFDFD&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#F7F5EF&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#F0EDE4&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#EAE6D9&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#6B5F3A&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#2F3A2F&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#151A14&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#B9822D&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#A33A2D&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#357A5B&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;cm-row&quot;&gt;&lt;div class=&quot;cm-rl&quot;&gt;dark&lt;/div&gt;&lt;div class=&quot;cm-strip&quot;&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#181E18&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#1D241D&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#403923&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#4B4329&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#9AAD9A&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#BCAF84&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#DAD7CE&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#D29B46&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#DE9289&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#47A47A&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;cm-block&quot;&gt;
&lt;div class=&quot;cm-head&quot;&gt;&lt;span class=&quot;cm-name&quot;&gt;D · Moonlight&lt;/span&gt;&lt;span class=&quot;cm-desc&quot;&gt;Purple-blue · orange accent&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;cm-row&quot;&gt;&lt;div class=&quot;cm-rl&quot;&gt;light&lt;/div&gt;&lt;div class=&quot;cm-strip&quot;&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#FDFDFD&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#F1F5F8&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#E8EEF3&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#DEE6EE&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#4A6D8C&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#323159&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#023859&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#F29979&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#C43B3B&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#3D7A63&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;cm-row&quot;&gt;&lt;div class=&quot;cm-rl&quot;&gt;dark&lt;/div&gt;&lt;div class=&quot;cm-strip&quot;&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#1A192E&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#1F1E37&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#2C4154&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#344C62&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#9493C4&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#94AFC7&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#D2DBE2&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#F4AB91&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#E29D9D&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#51A183&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;cm-block&quot;&gt;
&lt;div class=&quot;cm-head&quot;&gt;&lt;span class=&quot;cm-name&quot;&gt;E · Verdant&lt;/span&gt;&lt;span class=&quot;cm-desc&quot;&gt;Forest green · amber accent&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;cm-row&quot;&gt;&lt;div class=&quot;cm-rl&quot;&gt;light&lt;/div&gt;&lt;div class=&quot;cm-strip&quot;&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#FDFDFD&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#EDF8F3&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#E0F3EA&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#D3EEE2&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#2A6B4E&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#1B4332&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#092115&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#D08624&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#B02E2E&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#457A51&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;cm-row&quot;&gt;&lt;div class=&quot;cm-rl&quot;&gt;dark&lt;/div&gt;&lt;div class=&quot;cm-strip&quot;&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#0E231A&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#112A1F&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#19402F&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#1D4B37&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#7AC9A7&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#70C7A0&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#CADAD3&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#DF9D45&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#E18D8D&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#5A9F69&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;cm-block&quot;&gt;
&lt;div class=&quot;cm-head&quot;&gt;&lt;span class=&quot;cm-name&quot;&gt;F · Claret&lt;/span&gt;&lt;span class=&quot;cm-desc&quot;&gt;Deep wine · gold accent · highest contrast&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;cm-row&quot;&gt;&lt;div class=&quot;cm-rl&quot;&gt;light&lt;/div&gt;&lt;div class=&quot;cm-strip&quot;&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#FDFDFD&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#FCECEF&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#FADFE3&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#F7D1D8&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#A61C34&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#6B1F2E&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#2A000A&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#C9A227&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#B02424&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#2A7A3B&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;cm-row&quot;&gt;&lt;div class=&quot;cm-rl&quot;&gt;dark&lt;/div&gt;&lt;div class=&quot;cm-strip&quot;&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#381018&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#42131D&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#64111F&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#741424&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#D97D8F&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#E66A80&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#E9C6CC&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#DBB746&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#E68383&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#3AA851&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;cm-block&quot;&gt;
&lt;div class=&quot;cm-head&quot;&gt;&lt;span class=&quot;cm-name&quot;&gt;G · Meridian&lt;/span&gt;&lt;span class=&quot;cm-desc&quot;&gt;Deep plum · vivid teal accent · split-complementary&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;cm-row&quot;&gt;&lt;div class=&quot;cm-rl&quot;&gt;light&lt;/div&gt;&lt;div class=&quot;cm-strip&quot;&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#FDFDFD&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#F9F0F5&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#F4E4EE&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#EFD9E6&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#8B3A6A&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#4A1A3A&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#1F0A18&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#3DBDB8&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#B02424&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#2A7A3B&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;cm-row&quot;&gt;&lt;div class=&quot;cm-rl&quot;&gt;dark&lt;/div&gt;&lt;div class=&quot;cm-strip&quot;&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#260E1E&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#2E1024&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#532340&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#61294A&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#CF76B2&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#CC86AF&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#E2CEDA&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#5ECBC7&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#E68383&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#3AA851&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2 id=&quot;colour-palettes&quot;&gt;Colour palettes&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;H · Fieldnote&lt;/strong&gt; is the default: carbon olive primary, olive-brass secondary, ochre accent. It reads more like an archival field notebook or museum label than a digital product skin. It is warmer than Moonlight, less green than Verdant, and deliberately restrained for long academic pages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;D · Moonlight&lt;/strong&gt; is the cool editorial option. Blue-family link colours sit naturally inside dense academic citations. The orange accent adds warmth without clashing with the scientific domain. In dark mode the purple-navy backgrounds read as midnight sky — visible colour without eye-strain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;E · Verdant&lt;/strong&gt; — deep forest green primary, amber accent. Works particularly well in dark mode where the greens deepen toward something close to a terminal aesthetic. The light surfaces pick up a faint green tint that reads biophilic rather than clinical.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;F · Claret&lt;/strong&gt; — deep wine primary, crimson secondary (7.2:1 contrast against white — the highest contrast in the set), gold accent. Most dramatic in dark mode: the surface stack from near-black to deep red-dark gives the impression of coals. The gold accent against these surfaces is the most striking colour combination in the set.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;G · Meridian&lt;/strong&gt; — deep plum primary, mauve secondary, vivid teal accent. A split-complementary pairing (plum ↔ teal, around 180 degrees apart via the split). Unusual and striking, but mauve link colours inside dense research text felt a step too far from academic convention. Demoted from default to Easter egg.&lt;/p&gt;

&lt;h2 id=&quot;reading-fonts&quot;&gt;Reading fonts&lt;/h2&gt;

&lt;p&gt;Beyond colour, the same runtime approach drives four &lt;strong&gt;reading fonts&lt;/strong&gt;, cycled with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;f&lt;/code&gt; or the &lt;strong&gt;Aa&lt;/strong&gt; button. Each one re-points two CSS variables — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--font-body&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--font-heading&lt;/code&gt; — and the page re-flows in the new type immediately:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Default&lt;/strong&gt; — Lato for text, Volkhov for headings: the site’s clean, neutral baseline.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Lora&lt;/strong&gt; — one warm editorial serif for both text and headings; the most book-like option.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Inter + Playfair Display&lt;/strong&gt; — a crisp modern sans for reading under a high-contrast display serif for headings.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Source Serif 4 + Outfit&lt;/strong&gt; — a comfortable text serif beneath a geometric sans heading; an academic-journal feel.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All the alternatives are self-hosted (no third-party font requests), the choice is remembered between visits, and — as with the palette — an anti-FOUC snippet applies it before the first paint so there’s no flash of the wrong font. Try pressing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;f&lt;/code&gt; a few times as you read this.&lt;/p&gt;

&lt;h2 id=&quot;how-it-works&quot;&gt;How it works&lt;/h2&gt;

&lt;p&gt;The site is built on &lt;a href=&quot;https://jekyllrb.com/&quot;&gt;Jekyll&lt;/a&gt; with a custom colour architecture on top of the &lt;a href=&quot;https://phlow.github.io/feeling-responsive/&quot;&gt;Feeling Responsive&lt;/a&gt; theme. At &lt;strong&gt;build time&lt;/strong&gt;, a Sass variable (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$color-scheme: H&lt;/code&gt;) selects the active Fieldnote palette. All derived values — surface tints, muted text, border shades — are computed with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scale-color()&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mix()&lt;/code&gt; and exported as static CSS custom properties on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;:root&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;html[data-theme=&quot;dark&quot;]&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;At &lt;strong&gt;runtime&lt;/strong&gt;, pressing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;p&lt;/code&gt; writes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;data-palette=&quot;X&quot;&lt;/code&gt; on the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;html&amp;gt;&lt;/code&gt; element. The stylesheet carries pre-compiled variable overrides for each palette under &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;html[data-palette=&quot;X&quot;]&lt;/code&gt; — specificity (0,1,1) beats &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;:root&lt;/code&gt; (0,1,0), so the switch is instant with no fetch, no rebuild, and no flash. An anti-FOUC snippet in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;head&amp;gt;&lt;/code&gt; reads &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;localStorage&lt;/code&gt; before the first paint so your saved palette applies before any content renders.&lt;/p&gt;

&lt;p&gt;The colormaps above are deliberately minimal: ten swatches for light mode and ten for dark mode, enough to show the character of each palette without turning the page into a table of hex values. Fieldnote is what first-time visitors see and what I consider the canonical look of the site. Everything else is optional. If you are reading this in Claret dark mode, those deep red surfaces are doing exactly what I intended.&lt;/p&gt;
</content>

			
				<category term="meta" />
			
			
				<category term="design" />
			
				<category term="CSS" />
			
				<category term="colour" />
			
				<category term="dark mode" />
			
				<category term="typography" />
			
				<category term="fonts" />
			
				<category term="website" />
			

			<published>2026-06-13T00:00:00+02:00</published>
		</entry>
	
		<entry>
			<id>https://crisly.nl/travel/madeira/</id>
			<title>Five Walks Across Madeira</title>
			<link href="https://crisly.nl/travel/madeira/" rel="alternate" type="text/html" title="Five Walks Across Madeira" />
			<updated>2026-04-29T00:00:00+02:00</updated>

			
				
				<author>
					
						<name>Cris Lanting</name>
					
					
						<email>c.lanting@gmail.com</email>
					
					
						<uri>https://crisly.nl/</uri>
					
				</author>
			
			<summary>A levada walk above Boaventura, a scramble up Pico Grande, a coastal drive to Madeira&apos;s edges, the cliffs of Ponta de São Lourenço by foot and by boat, and the short, crowded, unmissable walk to Pico Ruivo.</summary>
			<content type="html" xml:base="https://crisly.nl/travel/madeira/">&lt;p&gt;Five days, five walks, and an island that does not believe in flat ground. Madeira packs an extraordinary amount of vertical relief into a small footprint, and the best way to feel that is on foot — on a levada, up a peak, or along a cliff edge with the Atlantic working away at the rock below. We also took to the water once, which turned out to be the right call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Levada da Achada Grande – Levada de Cima, Boaventura&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First full day, and the gentlest introduction the island offers — on paper. The route links two levadas above Boaventura on the north coast, following a water channel through laurel forest before a stiff connecting climb between the two systems. Around 8 km in total, with enough up and down to remind you that “levada walk” doesn’t always mean “flat.” The reward is the forest itself: damp, mossy, dripping, and almost silent except for the water running beside the path. We broke out of the trees in the early afternoon to a clean view of the north coast — black cliffs, a waterfall going straight into the sea, no buildings in sight.&lt;/p&gt;

&lt;div&gt;
  &lt;iframe src=&quot;/assets/visualizations/2026-04-26-10-11-sun-3d.html&quot; style=&quot;width:100%; height:520px; border:0; border-radius:10px; display:block;&quot; loading=&quot;lazy&quot; title=&quot;3D track of the Levada da Achada Grande hike&quot;&gt;&lt;/iframe&gt;
  &lt;p style=&quot;font-size:0.8em; color:var(--text-muted, #666); margin-top:0.4rem;&quot;&gt;The recorded GPX track set against the surrounding terrain (SRTM elevation data) — drag to rotate, scroll to zoom, or press play to follow the route. Elevation is exaggerated &amp;times;2.4 for clarity.&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Pico Grande, PR12&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Second outing, and the one that actually felt like a mountain. PR12 climbs out of the central massif toward Pico Grande, roughly 10.5 km round trip with a long, steady ascent into the 1,600–1,700 m range. We started before eight, in cold air and low cloud, and spent the first hour climbing through mist with almost no view at all. Then the cloud broke — properly broke, all at once — and the rest of the walk was ridge after volcanic ridge, ropes and chains on the exposed sections, and a drop on either side that keeps you honest. Madeira’s central peaks don’t get the same press as Pico Ruivo, but PR12 was the hardest and most rewarding day of the trip.&lt;/p&gt;

&lt;div&gt;
  &lt;iframe src=&quot;/assets/visualizations/pico-grande-3d.html&quot; style=&quot;width:100%; height:520px; border:0; border-radius:10px; display:block;&quot; loading=&quot;lazy&quot; title=&quot;3D track of the Pico Grande PR12 hike&quot;&gt;&lt;/iframe&gt;
  &lt;p style=&quot;font-size:0.8em; color:var(--text-muted, #666); margin-top:0.4rem;&quot;&gt;The recorded GPX track set against the surrounding terrain (SRTM elevation data) — drag to rotate, scroll to zoom, or press play to follow the route. Elevation is exaggerated &amp;times;2.4 for clarity.&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The west: Fanal Forest, Seixal, Porto Moniz, Ponta do Pargo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A driving day, deliberately — after two big walks, the west rewards a slower pace. We started inland at Fanal Forest, where the old laurel trees sit high on the plateau and the weather can make the place feel half-real even without much walking. Then down to Piscinas Naturais do Seixal, volcanic rock pools on the north coast with the swell breaking just beyond the natural wall that protects them. Further west came Porto Moniz, whose lava-pool swimming area is the more famous version of the same idea, scaled up and with a footbridge over the rocks. We caught Miradouro do Pico Vermelho along the way, one of several viewpoints on this stretch where the cliffs simply fall away. The day ended at Miradouro do Farol da Ponta do Pargo, where Madeira’s highest sea cliffs catch the last light — worth timing for golden hour if the schedule allows it, which ours, for once, did.&lt;/p&gt;

&lt;div&gt;
  &lt;iframe src=&quot;/assets/visualizations/2026-04-29-10-22-wed-3d.html&quot; style=&quot;width:100%; height:520px; border:0; border-radius:10px; display:block;&quot; loading=&quot;lazy&quot; title=&quot;3D track of the short Fanal Forest walk&quot;&gt;&lt;/iframe&gt;
  &lt;p style=&quot;font-size:0.8em; color:var(--text-muted, #666); margin-top:0.4rem;&quot;&gt;A shorter recorded GPX track from Fanal Forest, set against the surrounding terrain (SRTM elevation data) — drag to rotate, scroll to zoom, or press play to follow the route. Elevation is exaggerated &amp;times;2.4 for clarity.&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Ponta de São Lourenço — on foot and by boat&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The island’s easternmost tip is its driest corner: dry-savanna scrub and bare volcanic rock standing in obvious contrast to the laurel forest a few days earlier. The path out to the point undulates over a series of small hills with the sea on both sides, close to 12 km if you go all the way to the end and back. We followed it out that morning, then did something we hadn’t planned — a short boat trip along the base of the cliffs in the afternoon, looking up at the same headland from sea level. The sea stacks and arches that you only half-notice from the trail above turn out to be the main event from the water. Two completely different versions of the same piece of coastline, on the same day.&lt;/p&gt;

&lt;div&gt;
  &lt;iframe src=&quot;/assets/visualizations/2026-04-30-08-05-thu-3d.html&quot; style=&quot;width:100%; height:520px; border:0; border-radius:10px; display:block;&quot; loading=&quot;lazy&quot; title=&quot;3D track of the Ponta de São Lourenço hike&quot;&gt;&lt;/iframe&gt;
  &lt;p style=&quot;font-size:0.8em; color:var(--text-muted, #666); margin-top:0.4rem;&quot;&gt;The recorded GPX track set against the surrounding terrain (SRTM elevation data) — drag to rotate, scroll to zoom, or press play to follow the route. Elevation is exaggerated &amp;times;2.4 for clarity.&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Pico Ruivo, via Achada do Teixeira — PR1.2&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Shortest walk of the trip and the busiest by far — for good reason. PR1.2 starts at Achada do Teixeira and reaches Pico Ruivo, Madeira’s highest point at 1,862 m, in only a few kilometres each way along a paved, stepped path. It is popular precisely because it delivers a disproportionate amount of view for a modest amount of effort: the final stretch is a stone stairway along an exposed ridge with the central peaks falling away on both sides, and a summit that’s standing room only on a clear day. We shared the last few hundred metres with a small crowd and didn’t mind one bit — some views are worth queuing for.&lt;/p&gt;

&lt;div&gt;
  &lt;iframe src=&quot;/assets/visualizations/2026-05-01-11-01-fri-3d.html&quot; style=&quot;width:100%; height:520px; border:0; border-radius:10px; display:block;&quot; loading=&quot;lazy&quot; title=&quot;3D track of the Pico Ruivo PR1.2 hike&quot;&gt;&lt;/iframe&gt;
  &lt;p style=&quot;font-size:0.8em; color:var(--text-muted, #666); margin-top:0.4rem;&quot;&gt;The recorded GPX track to Pico Ruivo from Achada do Teixeira, set against the surrounding terrain (SRTM elevation data) — drag to rotate, scroll to zoom, or press play to follow the route. Elevation is exaggerated &amp;times;2.4 for clarity.&lt;/p&gt;
&lt;/div&gt;

&lt;div&gt;
  



&lt;div&gt;
	&lt;ul class=&quot;clearing-thumbs small-block-grid-4&quot;&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-LNHAE0430.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Setting off on the levada above Boaventura&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-LNHAE0430-thumb.webp&quot; alt=&quot;Setting off on the levada above Boaventura&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260426121152.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Levada da Achada Grande, water channel and laurel forest&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260426121152-thumb.webp&quot; alt=&quot;Levada da Achada Grande, water channel and laurel forest&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260426140621.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: North coast cliffs, waterfall dropping straight into the Atlantic&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260426140621-thumb.webp&quot; alt=&quot;North coast cliffs, waterfall dropping straight into the Atlantic&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260427120117.webp&quot; data-gallery=&quot;page-gallery&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260427120117-thumb.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260427124140.webp&quot; data-gallery=&quot;page-gallery&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260427124140-thumb.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260428080411.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Early start on Pico Grande PR12&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260428080411-thumb.webp&quot; alt=&quot;Early start on Pico Grande PR12&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260428080540_01.webp&quot; data-gallery=&quot;page-gallery&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260428080540_01-thumb.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260428080752.webp&quot; data-gallery=&quot;page-gallery&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260428080752-thumb.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260428081042.webp&quot; data-gallery=&quot;page-gallery&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260428081042-thumb.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260428084921.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Climbing through cloud&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260428084921-thumb.webp&quot; alt=&quot;Climbing through cloud&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260428092127.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Above the cloud line, ridge after ridge&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260428092127-thumb.webp&quot; alt=&quot;Above the cloud line, ridge after ridge&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260428092312.webp&quot; data-gallery=&quot;page-gallery&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260428092312-thumb.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260428093743.webp&quot; data-gallery=&quot;page-gallery&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260428093743-thumb.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260428100004.webp&quot; data-gallery=&quot;page-gallery&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260428100004-thumb.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260428101658.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Pico Grande&apos;s rocky upper slopes&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260428101658-thumb.webp&quot; alt=&quot;Pico Grande&apos;s rocky upper slopes&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260428102741.webp&quot; data-gallery=&quot;page-gallery&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260428102741-thumb.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260428102758.webp&quot; data-gallery=&quot;page-gallery&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260428102758-thumb.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260428102908.webp&quot; data-gallery=&quot;page-gallery&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260428102908-thumb.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260428103610.webp&quot; data-gallery=&quot;page-gallery&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260428103610-thumb.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260428114030.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Coming back down, the climb behind us&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260428114030-thumb.webp&quot; alt=&quot;Coming back down, the climb behind us&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260429103909.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Piscinas Naturais do Seixal, volcanic rock pools&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260429103909-thumb.webp&quot; alt=&quot;Piscinas Naturais do Seixal, volcanic rock pools&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260429104433.webp&quot; data-gallery=&quot;page-gallery&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260429104433-thumb.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260429110114.webp&quot; data-gallery=&quot;page-gallery&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260429110114-thumb.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260429111243.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Seixal&apos;s coastline, lava meeting surf&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260429111243-thumb.webp&quot; alt=&quot;Seixal&apos;s coastline, lava meeting surf&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260429112659.webp&quot; data-gallery=&quot;page-gallery&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260429112659-thumb.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260429113012.webp&quot; data-gallery=&quot;page-gallery&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260429113012-thumb.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260429150706.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Porto Moniz natural swimming pools&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260429150706-thumb.webp&quot; alt=&quot;Porto Moniz natural swimming pools&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260429151834.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Porto Moniz&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260429151834-thumb.webp&quot; alt=&quot;Porto Moniz&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260429165508.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Miradouro do Farol da Ponta do Pargo, Madeira&apos;s highest sea cliffs&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260429165508-thumb.webp&quot; alt=&quot;Miradouro do Farol da Ponta do Pargo, Madeira&apos;s highest sea cliffs&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260429165517.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Ponta do Pargo at golden hour&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260429165517-thumb.webp&quot; alt=&quot;Ponta do Pargo at golden hour&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260430082033.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Starting out across Ponta de São Lourenço&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260430082033-thumb.webp&quot; alt=&quot;Starting out across Ponta de São Lourenço&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260430083023.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Ponta de São Lourenço&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260430083023-thumb.webp&quot; alt=&quot;Ponta de São Lourenço&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260430083354.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Ponta de São Lourenço&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260430083354-thumb.webp&quot; alt=&quot;Ponta de São Lourenço&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260430084729.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Ponta de São Lourenço&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260430084729-thumb.webp&quot; alt=&quot;Ponta de São Lourenço&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260430090053.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: The dry, savanna-like spine of the peninsula&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260430090053-thumb.webp&quot; alt=&quot;The dry, savanna-like spine of the peninsula&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260430090059.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Ponta de São Lourenço&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260430090059-thumb.webp&quot; alt=&quot;Ponta de São Lourenço&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260430094357.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Ponta de São Lourenço&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260430094357-thumb.webp&quot; alt=&quot;Ponta de São Lourenço&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260430110534.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Ponta de São Lourenço&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260430110534-thumb.webp&quot; alt=&quot;Ponta de São Lourenço&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260430111435.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Nearing the easternmost tip&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260430111435-thumb.webp&quot; alt=&quot;Nearing the easternmost tip&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260430112035.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Sea stacks off the point, seen from the boat&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260430112035-thumb.webp&quot; alt=&quot;Sea stacks off the point, seen from the boat&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260430114645.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Ponta de São Lourenço&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260430114645-thumb.webp&quot; alt=&quot;Ponta de São Lourenço&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260430-WA0009.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Out on the water below the cliffs&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260430-WA0009-thumb.webp&quot; alt=&quot;Out on the water below the cliffs&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260430201546.webp&quot; data-gallery=&quot;page-gallery&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260430201546-thumb.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260501113933.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Achada do Teixeira, the start of the Pico Ruivo path&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260501113933-thumb.webp&quot; alt=&quot;Achada do Teixeira, the start of the Pico Ruivo path&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260501122702.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: The stairway to Pico Ruivo, Madeira&apos;s highest point&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260501122702-thumb.webp&quot; alt=&quot;The stairway to Pico Ruivo, Madeira&apos;s highest point&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260501122727.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Pico Ruivo&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260501122727-thumb.webp&quot; alt=&quot;Pico Ruivo&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260501124655.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Clouds breaking against the central peaks&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260501124655-thumb.webp&quot; alt=&quot;Clouds breaking against the central peaks&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260501125126.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: 1862 metres up, looking back across the island&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260501125126-thumb.webp&quot; alt=&quot;1862 metres up, looking back across the island&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260501145330.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Near Santana, north coast&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260501145330-thumb.webp&quot; alt=&quot;Near Santana, north coast&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260502105020.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Funchal&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260502105020-thumb.webp&quot; alt=&quot;Funchal&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260502110959.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Funchal&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260502110959-thumb.webp&quot; alt=&quot;Funchal&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260502115022.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Funchal&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260502115022-thumb.webp&quot; alt=&quot;Funchal&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260502122715.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Funchal&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260502122715-thumb.webp&quot; alt=&quot;Funchal&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/madeira-IMG20260502122835.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Funchal&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/madeira-IMG20260502122835-thumb.webp&quot; alt=&quot;Funchal&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
	&lt;/ul&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Behind the scenes: building the 3D track viewer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The visualisations above come out of a small, general-purpose Python script, &lt;a href=&quot;/scripts/gpx_3d_viz.py&quot;&gt;gpx_3d_viz.py&lt;/a&gt;, that turns &lt;em&gt;any&lt;/em&gt; GPX track into the same kind of self-contained, interactive HTML: a real terrain surface from public elevation data (Open Topo Data, SRTM 30m by default), the track draped onto it so the two never disagree, an animated marker that follows the route, and an optional satellite or street-map texture draped over the terrain with an on-screen toggle to switch between them.&lt;/p&gt;

&lt;p&gt;It needs Python 3; the satellite/map texture feature additionally needs Pillow (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pip install pillow&lt;/code&gt;) — everything else is standard library, and there’s no separate viewing step, since the output is one plain HTML file.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# Basic: terrain + draped track, satellite/map basemap with a toggle (the default)&lt;/span&gt;
python3 gpx_3d_viz.py track.gpx &lt;span class=&quot;nt&quot;&gt;-o&lt;/span&gt; track-3d.html

&lt;span class=&quot;c&quot;&gt;# Roughly what generated the views above: a denser terrain grid, the area&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# padded out by 20%, and a fixed (faster-to-build) basemap zoom level&lt;/span&gt;
python3 gpx_3d_viz.py track.gpx &lt;span class=&quot;nt&quot;&gt;-o&lt;/span&gt; pico-grande-3d.html &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--title&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Pico Grande · PR12&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--terrain-grid&lt;/span&gt; 14x32 &lt;span class=&quot;nt&quot;&gt;--terrain-upsample&lt;/span&gt; 3 &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--terrain-expand&lt;/span&gt; 0.10 &lt;span class=&quot;nt&quot;&gt;--texture-zoom&lt;/span&gt; 14

&lt;span class=&quot;c&quot;&gt;# Batch build every GPX in a folder straight into the Jekyll assets directory&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# and print iframe snippets ready to paste into the post&lt;/span&gt;
python3 gpx_3d_viz.py &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.gpx &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--output-dir&lt;/span&gt; ../assets/visualizations &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--terrain-grid&lt;/span&gt; 14x32 &lt;span class=&quot;nt&quot;&gt;--terrain-upsample&lt;/span&gt; 3 &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--terrain-expand&lt;/span&gt; 0.10 &lt;span class=&quot;nt&quot;&gt;--texture-zoom&lt;/span&gt; 14 &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--print-embed&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# Satellite imagery only, no toggle button&lt;/span&gt;
python3 gpx_3d_viz.py track.gpx &lt;span class=&quot;nt&quot;&gt;--basemap&lt;/span&gt; satellite

&lt;span class=&quot;c&quot;&gt;# Just the track and terrain, no imagery — fastest to build, no Pillow needed&lt;/span&gt;
python3 gpx_3d_viz.py track.gpx &lt;span class=&quot;nt&quot;&gt;--basemap&lt;/span&gt; none

&lt;span class=&quot;c&quot;&gt;# Skip the terrain entirely (a flat reference grid instead)&lt;/span&gt;
python3 gpx_3d_viz.py track.gpx &lt;span class=&quot;nt&quot;&gt;--no-terrain&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Some of the more useful options:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Option&lt;/th&gt;
      &lt;th&gt;What it does&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--basemap both\|satellite\|map\|none&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Drapes Esri satellite imagery and/or OpenStreetMap over the terrain, with a toggle button (default: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;both&lt;/code&gt;)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--terrain-grid NXxNY&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Density of the real elevation grid fetched from the API (default: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;14x32&lt;/code&gt;)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--terrain-expand 0.10&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Pads the terrain area by 10% per side, i.e. +20% total extent (default: off)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--output-dir&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--print-embed&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Batch-build multiple GPX files and print matching Jekyll iframe snippets&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--exaggeration 2.4&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Vertical exaggeration applied to elevation, for readability (default: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.4&lt;/code&gt;)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--hiker-radius 10&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Size of the “you are here” marker animated along the route&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--texture-zoom&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Basemap detail level — auto-picked by default, or fix it for a faster build&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--export-track-json&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--export-terrain-json&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Dump the processed track/terrain data as JSON, for reuse elsewhere&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;python3 gpx_3d_viz.py --help&lt;/code&gt; for the complete list, including terrain dataset choice, smoothing, track styling, and API rate limiting.&lt;/p&gt;
</content>

			
				<category term="travel" />
			
			
				<category term="Madeira" />
			
				<category term="hiking" />
			
				<category term="levada" />
			
				<category term="nature" />
			
				<category term="travel" />
			
				<category term="Atlantic" />
			

			<published>2026-04-29T00:00:00+02:00</published>
		</entry>
	
		<entry>
			<id>https://crisly.nl/research/world-hearing-day/</id>
			<title>World Hearing Day 2026</title>
			<link href="https://crisly.nl/research/world-hearing-day/" rel="alternate" type="text/html" title="World Hearing Day 2026" />
			<updated>2026-03-03T00:00:00+01:00</updated>

			
				
				<author>
					
						<name>Cris Lanting</name>
					
					
						<email>c.lanting@gmail.com</email>
					
					
						<uri>https://crisly.nl/</uri>
					
				</author>
			
			<summary>Today is World Hearing Day. Ninety million children globally experience hearing loss, and more than 60% of those cases are preventable. This year&apos;s WHO theme puts children at the centre. So, coincidentally, does a children&apos;s cartoon — and the latter might end up doing more good in a single episode than a decade of public health campaigns.</summary>
			<content type="html" xml:base="https://crisly.nl/research/world-hearing-day/">&lt;p&gt;Today is &lt;a href=&quot;https://www.who.int/campaigns/world-hearing-day/2026&quot;&gt;World Hearing Day&lt;/a&gt;, observed every 3 March. The WHO’s theme for 2026 is &lt;em&gt;“From communities to classrooms: hearing care for all children”&lt;/em&gt; — a call to act before hearing loss shapes a child’s educational trajectory in ways that become increasingly hard to reverse.&lt;/p&gt;

&lt;p&gt;The numbers that frame this are striking. Approximately &lt;strong&gt;90 million children&lt;/strong&gt; aged 5–19 live with hearing loss globally. More than &lt;strong&gt;60% of childhood hearing loss is preventable&lt;/strong&gt; through cost-effective public health measures — screening, treatment of chronic ear infections, noise protection. And yet in most health systems, hearing loss in children is identified late, addressed inconsistently, and rarely discussed at all in the spaces where children actually spend their time: classrooms, playgrounds, living rooms.&lt;/p&gt;

&lt;p&gt;That last one is where something interesting happened in the weeks leading up to today.&lt;/p&gt;

&lt;h2 id=&quot;george-pig-gets-a-hearing-aid&quot;&gt;George Pig gets a hearing aid&lt;/h2&gt;

&lt;p&gt;In February 2026, the National Deaf Children’s Society &lt;a href=&quot;https://www.ndcs.org.uk/about-us/news-and-media/national-deaf-childrens-society-partners-peppa-pig-groundbreaking-new-deaf-storyline&quot;&gt;announced a partnership with Peppa Pig&lt;/a&gt; to introduce a deaf storyline — and the character carrying it is not a new face but a familiar one: &lt;strong&gt;George Pig&lt;/strong&gt;, Peppa’s younger brother, revealed to have moderate single-sided deafness.&lt;/p&gt;

&lt;p&gt;The storyline follows George through a hearing test, his first hearing aid fitting, and the experience of beginning to understand the world differently. The NDCS worked with the production team to ensure the portrayal is clinically accurate in ways that matter: it shows explicitly that a hearing aid provides &lt;em&gt;greater access&lt;/em&gt; to sound rather than restoring normal hearing, and that listening in noise — a crowded room, multiple voices at once — remains genuinely difficult even with amplification.&lt;/p&gt;

&lt;figure style=&quot;max-width:480px; margin: 1.5rem auto; text-align:center;&quot;&gt;
  &lt;img src=&quot;https://crisly.nl/images/George%20Pig.png&quot;
       alt=&quot;George Pig wearing a hearing aid — from the NDCS/Peppa Pig partnership&quot;
       style=&quot;width:100%; border-radius:6px;&quot;&gt;
  &lt;figcaption style=&quot;margin-top:0.6rem; font-size:0.85rem; color:var(--text-muted);&quot;&gt;
    George Pig with his hearing aid, from the NDCS-partnered Peppa Pig storyline airing March 2026.
  &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Why does this matter clinically? Because over &lt;strong&gt;54,000 children&lt;/strong&gt; in the UK live with deafness or hearing loss, and nearly &lt;strong&gt;25% have single-sided deafness&lt;/strong&gt; — exactly George’s profile. Research consistently shows that children who see their own experience reflected in characters they love feel less isolated and more willing to wear their devices in front of peers. Stigma around hearing aids in children is real and measurable; it delays consistent use and therefore delays the language and cognitive development that depends on consistent auditory input. A single episode of Peppa Pig, watched by millions of children across dozens of countries, can shift the social framing of “wearing a hearing aid” faster than any clinical leaflet. The NDCS found that &lt;strong&gt;98% of parents&lt;/strong&gt; believe deaf representation in children’s media positively impacts deaf children’s wellbeing — and probably that of hearing children’s understanding too.&lt;/p&gt;

&lt;h2 id=&quot;a-photograph-worth-more-than-most-awareness-campaigns&quot;&gt;A photograph worth more than most awareness campaigns&lt;/h2&gt;

&lt;p&gt;There is an older image that has done similar work for adults.&lt;/p&gt;

&lt;figure style=&quot;max-width:480px; margin: 1.5rem auto; text-align:center;&quot;&gt;
  &lt;img src=&quot;https://crisly.nl/images/Harold-whittles-750-x-947.webp&quot;
       alt=&quot;Harold Whittles hears for the first time, photographed by Jack Bradley&quot;
       style=&quot;width:100%; border-radius:6px;&quot;&gt;
  &lt;figcaption style=&quot;margin-top:0.6rem; font-size:0.85rem; color:var(--text-muted);&quot;&gt;
    Harold Whittles, hearing sound for the first time as a hearing aid is placed in his ear.
    Photograph: Jack Bradley, 1974. One of the most reproduced images in the history of audiology.
  &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Jack Bradley’s 1974 photograph of Harold Whittles — a small boy with a look of pure astonishment as a hearing aid is placed in his ear for the first time — has circulated for fifty years and still stops people. It captures something that is very difficult to convey in words: that sound, for someone who has not reliably had it, is not just information. It is texture, presence, connection.&lt;/p&gt;

&lt;p&gt;That photograph was taken in an era when hearing screening for newborns was far from routine, when the median age of diagnosis for moderate hearing loss in many countries was three to four years — an entire window of language acquisition already narrowed. The situation has improved substantially: universal newborn hearing screening programmes now exist across most high-income countries. But access is uneven, follow-through is imperfect, and in middle- and low-income settings the gap between a child’s first suspicion of hearing difficulty and a confirmed diagnosis and fitting remains measured in years rather than weeks.&lt;/p&gt;

&lt;h2 id=&quot;what-early-identification-actually-means&quot;&gt;What “early identification” actually means&lt;/h2&gt;

&lt;p&gt;The WHO message is “act now so no child is left behind due to ear or hearing problems.” This is easy to say and genuinely complex to implement. Early identification of childhood hearing loss requires several things to work in sequence: a screening moment (newborn, school entry, or opportunistic), a referral pathway that is followed, diagnostic capacity that is accessible, and then — crucially — a fitted, appropriate device that a child will actually wear.&lt;/p&gt;

&lt;p&gt;Each of those steps has its own failure mode. A child can pass a newborn screen and develop hearing loss later, as happens in conditions like &lt;em&gt;TMPRSS3&lt;/em&gt;-related hearing loss where onset is post-lingual and progression can be rapid. A child can be diagnosed correctly but then fall through gaps in the follow-up system. Or a child can be fitted with a hearing aid that is technically adequate but socially intolerable — because their classmates have never seen one on a character they know and like.&lt;/p&gt;

&lt;p&gt;That last failure mode is the one Peppa Pig just addressed.&lt;/p&gt;

&lt;h2 id=&quot;the-bigger-picture-for-hereditary-hearing-loss&quot;&gt;The bigger picture for hereditary hearing loss&lt;/h2&gt;

&lt;p&gt;For families where hearing loss has a genetic basis — which accounts for roughly &lt;strong&gt;half of all childhood hearing loss cases&lt;/strong&gt; — the conversation is more complicated still. Genetic hearing loss is not one condition; it is hundreds of conditions, each with its own natural history, its own rate of progression, its own likelihood of affecting vestibular function or other systems. The audiological phenotype of a child with &lt;em&gt;USH2A&lt;/em&gt;-related Usher syndrome looks nothing like that of a child with a &lt;em&gt;RIPOR2&lt;/em&gt; deletion; their trajectories, their implant candidacy timelines, and their communication needs differ in ways that a one-size-fits-all “hearing loss” framing obscures.&lt;/p&gt;

&lt;p&gt;This is where the genotype–phenotype work described elsewhere on this site connects to the World Hearing Day theme. The natural history studies — the CRUSH cohort in Usher syndrome type 2A, the multi-centre &lt;em&gt;TMPRSS3&lt;/em&gt; cohort, the DFNA9 audiometric meta-analysis — exist partly as clinical science and partly as the evidence base that should inform when a child is counselled about cochlear implantation, what progression they and their parents should be prepared for, and what therapeutic options might become relevant in the coming decade.&lt;/p&gt;

&lt;p&gt;That evidence base is still being built. But days like today — when a cartoon pig goes to a hearing clinic, and millions of children watch with the particular attention they give to something that is new and safe at the same time — are part of how the ground gets prepared for it to matter.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;World Hearing Day 2026 resources: &lt;a href=&quot;https://www.who.int/campaigns/world-hearing-day/2026&quot;&gt;WHO campaign page&lt;/a&gt; · &lt;a href=&quot;https://www.ndcs.org.uk/about-us/news-and-media/national-deaf-childrens-society-partners-peppa-pig-groundbreaking-new-deaf-storyline&quot;&gt;NDCS Peppa Pig partnership&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Sources:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.who.int/campaigns/world-hearing-day/2026&quot;&gt;World Hearing Day 2026 — WHO&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.ndcs.org.uk/about-us/news-and-media/national-deaf-childrens-society-partners-peppa-pig-groundbreaking-new-deaf-storyline&quot;&gt;NDCS partners with Peppa Pig on deaf storyline&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>

			
				<category term="research" />
			
			
				<category term="hearing loss" />
			
				<category term="public health" />
			
				<category term="advocacy" />
			
				<category term="children" />
			
				<category term="WHO" />
			

			<published>2026-03-03T00:00:00+01:00</published>
		</entry>
	
		<entry>
			<id>https://crisly.nl/meta/digital-ecology/</id>
			<title>A New Digital Ecology</title>
			<link href="https://crisly.nl/meta/digital-ecology/" rel="alternate" type="text/html" title="A New Digital Ecology" />
			<updated>2026-03-03T00:00:00+01:00</updated>

			
				
				<author>
					
						<name>Cris Lanting</name>
					
					
						<email>c.lanting@gmail.com</email>
					
					
						<uri>https://crisly.nl/</uri>
					
				</author>
			
			<summary>A personal website should hold the whole person. Some notes on why I rebuilt this site from scratch — adding structured research project pages, a runtime theme switcher, and a handful of small design decisions that make the whole thing feel more like a place I want to return to.</summary>
			<content type="html" xml:base="https://crisly.nl/meta/digital-ecology/">&lt;p&gt;There is a particular kind of cognitive dissonance that comes with having a website that only shows one face of you. For a few years, crisly.nl was essentially a publications list with a blog attached — useful, but flat. My clinical and research identity was there in outline, but the connections between projects were invisible, the design felt inherited rather than chosen, and the private side of the site (photography, animation, the occasional detour through astrophotography or cycling) sat in a separate aesthetic universe from the work pages, as if the two halves were embarrassed to be seen together.&lt;/p&gt;

&lt;p&gt;What I wanted was something closer to an ecosystem: a site where a visitor could arrive at a research write-up about Usher syndrome genetics and, without feeling they had wandered off-map, end up looking at storm photographs from Gelderland. Not because those things are the same, but because they come from the same person, made with the same disposition towards attention and detail. A &lt;strong&gt;digital ecology&lt;/strong&gt;, to use a term I’ve been turning over — a space where different kinds of output coexist in a shared environment, shaped by consistent design rather than rigid category walls.&lt;/p&gt;

&lt;p&gt;This post documents what changed in the latest round of work.&lt;/p&gt;

&lt;h2 id=&quot;research-as-narrative-not-inventory&quot;&gt;Research as narrative, not inventory&lt;/h2&gt;

&lt;p&gt;The biggest structural addition is a &lt;strong&gt;Projects section&lt;/strong&gt; — five pages, one per research theme, each building a coherent story out of what would otherwise be a scatter of publications:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Hereditary Hearing Loss &amp;amp; Rare Genetic Disorders&lt;/li&gt;
  &lt;li&gt;Genotype–Phenotype Correlations &amp;amp; Natural History&lt;/li&gt;
  &lt;li&gt;Cochlear Implantation &amp;amp; Auditory Outcomes&lt;/li&gt;
  &lt;li&gt;Remote Care &amp;amp; Digital Audiology&lt;/li&gt;
  &lt;li&gt;Clinical Trials &amp;amp; Inner-Ear Therapeutics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each project page has a findings table (gene, phenotype, key result, reference), a narrative summary, a linked list of related blog write-ups, and a per-page bibliography rendered by jekyll-scholar from the same &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.bib&lt;/code&gt; file that feeds the publications page. The result is something that reads more like a research dossier than a filtered publication list.&lt;/p&gt;

&lt;p&gt;What I find interesting about this structure is that it makes the &lt;em&gt;connections&lt;/em&gt; visible. The natural history work on DFNA9 and Usher syndrome type 2A isn’t just a set of papers — it’s the explicit scientific prerequisite for the AON therapies that colleagues Erwin van Wijk and Erik de Vrieze are now moving into clinical application. A publications list can’t show that. A project page can.&lt;/p&gt;

&lt;p&gt;The projects are also wired into the navigation as a dropdown, and linked bidirectionally from the resume’s focus areas — so the same information is reachable from multiple entry points depending on what the visitor is looking for.&lt;/p&gt;

&lt;h2 id=&quot;the-design-layer-runtime-flexibility&quot;&gt;The design layer: runtime flexibility&lt;/h2&gt;

&lt;p&gt;The visual redesign was driven by one core idea: &lt;strong&gt;separate what the compiler knows from what the browser decides&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Jekyll compiles Sass to CSS at build time. The traditional Feeling Responsive approach bakes a palette (a set of hex colours) into the compiled stylesheet, and that’s what users see. Changing the palette means rebuilding the site. That’s fine for production, but it makes experimentation slow and it means every visitor gets the same colour experience regardless of context or preference.&lt;/p&gt;

&lt;p&gt;The new approach adds a second layer on top of the compiled styles: &lt;strong&gt;CSS custom properties&lt;/strong&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;var(--primary)&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;var(--secondary)&lt;/code&gt;, etc.) that the browser evaluates at paint time. Dark mode works by switching &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;html[data-theme=&quot;dark&quot;]&lt;/code&gt; — the browser re-evaluates all the custom properties instantly, no recompilation. The same mechanism drives a palette switcher in the navigation bar: five small coloured dots (Fieldnote, Moonlight, Verdant, Claret, Meridian) that swap the full colour scheme at runtime, with the choice persisted to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;localStorage&lt;/code&gt; so it survives page reloads.&lt;/p&gt;

&lt;p&gt;The practical consequence is that the site can have five complete colour identities without five builds. The compiled stylesheet contains all of them as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;html[data-palette=&quot;X&quot;]&lt;/code&gt; override blocks; only the active one wins on any given page load.&lt;/p&gt;

&lt;h2 id=&quot;colour-palettes&quot;&gt;Colour palettes&lt;/h2&gt;

&lt;p&gt;Five palettes are available via the dot switcher in the navigation bar, with Fieldnote as the default. Each is shown here as a simple ten-colour map for light mode and dark mode: enough to show the overall mood without turning the page into a table of hex values.&lt;/p&gt;


&lt;div class=&quot;cm-block&quot;&gt;
&lt;div class=&quot;cm-head&quot;&gt;&lt;span class=&quot;cm-name&quot;&gt;H · Fieldnote&lt;/span&gt;&lt;span class=&quot;cm-desc&quot;&gt;Carbon olive · brass links · ochre accent · default&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;cm-row&quot;&gt;&lt;div class=&quot;cm-rl&quot;&gt;light&lt;/div&gt;&lt;div class=&quot;cm-strip&quot;&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#FDFDFD&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#F7F5EF&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#F0EDE4&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#EAE6D9&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#6B5F3A&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#2F3A2F&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#151A14&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#B9822D&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#A33A2D&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#357A5B&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;cm-row&quot;&gt;&lt;div class=&quot;cm-rl&quot;&gt;dark&lt;/div&gt;&lt;div class=&quot;cm-strip&quot;&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#181E18&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#1D241D&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#403923&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#4B4329&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#9AAD9A&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#BCAF84&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#DAD7CE&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#D29B46&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#DE9289&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#47A47A&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;cm-block&quot;&gt;
&lt;div class=&quot;cm-head&quot;&gt;&lt;span class=&quot;cm-name&quot;&gt;D · Moonlight&lt;/span&gt;&lt;span class=&quot;cm-desc&quot;&gt;Purple-blue · orange accent&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;cm-row&quot;&gt;&lt;div class=&quot;cm-rl&quot;&gt;light&lt;/div&gt;&lt;div class=&quot;cm-strip&quot;&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#FDFDFD&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#F1F5F8&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#E8EEF3&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#DEE6EE&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#4A6D8C&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#323159&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#023859&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#F29979&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#C43B3B&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#3D7A63&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;cm-row&quot;&gt;&lt;div class=&quot;cm-rl&quot;&gt;dark&lt;/div&gt;&lt;div class=&quot;cm-strip&quot;&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#1A192E&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#1F1E37&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#2C4154&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#344C62&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#9493C4&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#94AFC7&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#D2DBE2&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#F4AB91&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#E29D9D&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#51A183&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;cm-block&quot;&gt;
&lt;div class=&quot;cm-head&quot;&gt;&lt;span class=&quot;cm-name&quot;&gt;E · Verdant&lt;/span&gt;&lt;span class=&quot;cm-desc&quot;&gt;Forest green · amber accent&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;cm-row&quot;&gt;&lt;div class=&quot;cm-rl&quot;&gt;light&lt;/div&gt;&lt;div class=&quot;cm-strip&quot;&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#FDFDFD&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#EDF8F3&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#E0F3EA&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#D3EEE2&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#2A6B4E&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#1B4332&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#092115&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#D08624&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#B02E2E&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#457A51&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;cm-row&quot;&gt;&lt;div class=&quot;cm-rl&quot;&gt;dark&lt;/div&gt;&lt;div class=&quot;cm-strip&quot;&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#0E231A&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#112A1F&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#19402F&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#1D4B37&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#7AC9A7&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#70C7A0&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#CADAD3&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#DF9D45&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#E18D8D&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#5A9F69&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;cm-block&quot;&gt;
&lt;div class=&quot;cm-head&quot;&gt;&lt;span class=&quot;cm-name&quot;&gt;F · Claret&lt;/span&gt;&lt;span class=&quot;cm-desc&quot;&gt;Deep wine · gold accent · highest contrast&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;cm-row&quot;&gt;&lt;div class=&quot;cm-rl&quot;&gt;light&lt;/div&gt;&lt;div class=&quot;cm-strip&quot;&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#FDFDFD&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#FCECEF&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#FADFE3&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#F7D1D8&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#A61C34&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#6B1F2E&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#2A000A&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#C9A227&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#B02424&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#2A7A3B&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;cm-row&quot;&gt;&lt;div class=&quot;cm-rl&quot;&gt;dark&lt;/div&gt;&lt;div class=&quot;cm-strip&quot;&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#381018&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#42131D&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#64111F&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#741424&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#D97D8F&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#E66A80&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#E9C6CC&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#DBB746&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#E68383&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#3AA851&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;cm-block&quot;&gt;
&lt;div class=&quot;cm-head&quot;&gt;&lt;span class=&quot;cm-name&quot;&gt;G · Meridian&lt;/span&gt;&lt;span class=&quot;cm-desc&quot;&gt;Deep plum · vivid teal accent · split-complementary&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;cm-row&quot;&gt;&lt;div class=&quot;cm-rl&quot;&gt;light&lt;/div&gt;&lt;div class=&quot;cm-strip&quot;&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#FDFDFD&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#F9F0F5&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#F4E4EE&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#EFD9E6&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#8B3A6A&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#4A1A3A&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#1F0A18&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#3DBDB8&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#B02424&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#2A7A3B&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;cm-row&quot;&gt;&lt;div class=&quot;cm-rl&quot;&gt;dark&lt;/div&gt;&lt;div class=&quot;cm-strip&quot;&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#260E1E&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#2E1024&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#532340&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#61294A&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#CF76B2&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#CC86AF&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#E2CEDA&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#5ECBC7&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#E68383&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-sw&quot; style=&quot;background:#3AA851&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;A small but meaningful downstream effect: any component that uses &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;color-mix(in srgb, var(--secondary) 12%, white 88%)&lt;/code&gt; rather than a hardcoded hex automatically responds to both the palette switcher and dark mode. The project page TOC pills, the resume focus area pills, the navigation gradient stripe — all theme-aware, all zero-maintenance as new palettes are added.&lt;/p&gt;

&lt;h2 id=&quot;the-smaller-things&quot;&gt;The smaller things&lt;/h2&gt;

&lt;p&gt;A few changes that don’t warrant their own section but add up:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Navigation order&lt;/strong&gt; was adjusted to reflect how I actually think about the site: Start → Blog → Photos → Projects → Publications → Resume. The research-heavy end is to the right; the more personal and recent content is to the left.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The projects index&lt;/strong&gt; now displays entries in the same visual format as the blog listing — subheadline, title, thumbnail image, description blurb, read-more link — rather than a flat card list. The TOC jump-to pills above the listing use the same token-driven styling as the resume focus pills, so they track whatever palette and light/dark mode is active.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The hero name&lt;/strong&gt; on the front page was cleaned up — weight reduced, gradient removed, and the font size aligned to match the widget headers below it. The negative letter-spacing that was clipping the right edge of long descenders is gone.&lt;/p&gt;

&lt;h2 id=&quot;why-jekyll&quot;&gt;Why Jekyll&lt;/h2&gt;

&lt;p&gt;The question I get most often about the site is some version of: “why not just use WordPress?” Or Substack, or Ghost, or Webflow, or one of the many platforms designed to make publishing easy. The honest answer is that easy and &lt;em&gt;controllable&lt;/em&gt; are not the same thing, and for a site that needs to hold a bibliography engine, a custom runtime colour system, a structured research collection, and a photography archive all without feeling like it’s straining at its seams — control matters more than ease.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jekyll is fast&lt;/strong&gt; in two senses. The generated site is entirely static: no PHP, no database queries, no server-side rendering on request. Every page is pre-built HTML served directly from a CDN. On a standard connection, pages load in under a second; on mobile on a flaky network, the difference between a static site and a CMS-backed one is the difference between “readable” and “I’ll come back later”. The build step itself — Sass compilation, Liquid templating, bibliography rendering — takes about five seconds for this site. That’s an acceptable price for having a fully automated system that produces optimised output every time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jekyll is flexible&lt;/strong&gt; in the sense that matters for an academic personal site: it gets out of the way when you know what you want. The bibliography integration runs through &lt;a href=&quot;https://github.com/inukshuk/jekyll-scholar&quot;&gt;jekyll-scholar&lt;/a&gt;, which processes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.bib&lt;/code&gt; files and renders per-page reference lists with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a class=&quot;citation&quot; href=&quot;#&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/code&gt; tags that work exactly like LaTeX — familiar territory. Jekyll Collections handle the structured project pages with typed front matter and clean URLs. Liquid templating is limited by design (no arbitrary code execution), which sounds like a constraint but mostly means that the templates stay readable and the site stays auditable. YAML front matter means every page carries its own metadata: title, projects membership, image, category, tags — and Liquid can filter and sort on any of it without a database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The aesthetics are entirely mine.&lt;/strong&gt; This is probably the real reason. A platform like Webflow or Squarespace imposes visual opinions through its component system; fighting those opinions is where most of the effort goes. With Jekyll and SCSS, the design is built from the bottom up: every spacing value, every colour token, every responsive breakpoint is something I chose. The runtime palette switcher described above — CSS custom properties overridden by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;html[data-palette]&lt;/code&gt; attribute selectors — would be awkward or impossible to implement inside a managed CMS. Here it’s just SCSS and fifteen lines of JavaScript. The constraint is having to write it; the freedom is that it then does exactly what I wanted.&lt;/p&gt;

&lt;p&gt;The tradeoff is real: there is no admin panel, no drag-and-drop, no autosave. New content goes through a text editor and a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jekyll build&lt;/code&gt;. For someone who writes everything in Markdown anyway and uses a bibliography manager (Zotero) that exports &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.bib&lt;/code&gt;, this is not a hardship — it’s just the existing workflow, with one more step at the end.&lt;/p&gt;

&lt;h2 id=&quot;what-this-is-eventually&quot;&gt;What this is, eventually&lt;/h2&gt;

&lt;p&gt;None of this is finished. The remote care and clinical trials project pages are still placeholder content. Several blog posts about ongoing work (RIPOR2 follow-up, TMPRSS3 CI outcomes, the AC102 programme) exist only as drafts. The photography section deserves more curatorial attention than a reverse-chronological dump.&lt;/p&gt;

&lt;p&gt;But the structure is right, and the design feels genuinely mine. That’s enough to work from.&lt;/p&gt;
</content>

			
				<category term="meta" />
			
			
				<category term="website" />
			
				<category term="Jekyll" />
			
				<category term="design" />
			
				<category term="personal" />
			

			<published>2026-03-03T00:00:00+01:00</published>
		</entry>
	
		<entry>
			<id>https://crisly.nl/research/USH2a-CRUSH/</id>
			<title>Hearing Loss and Vestibular Function in Usher Syndrome Type 2A</title>
			<link href="https://crisly.nl/research/USH2a-CRUSH/" rel="alternate" type="text/html" title="Hearing Loss and Vestibular Function in Usher Syndrome Type 2A" />
			<updated>2026-03-01T00:00:00+01:00</updated>

			
				
				<author>
					
						<name>Cris Lanting</name>
					
					
						<email>c.lanting@gmail.com</email>
					
					
						<uri>https://crisly.nl/</uri>
					
				</author>
			
			<summary>Our longitudinal CRUSH study shows measurable hearing progression in USH2a beyond presbycusis, stable speech understanding, and an unexpected pattern of subclinical otolith dysfunction — with implications for follow-up, counseling, and cochlear implant timing.</summary>
			<content type="html" xml:base="https://crisly.nl/research/USH2a-CRUSH/">&lt;h2 id=&quot;background&quot;&gt;Background&lt;/h2&gt;

&lt;p&gt;Usher syndrome type 2A (USH2a) is caused by pathogenic variants in the &lt;em&gt;USH2A&lt;/em&gt; gene and is the most common form of Usher syndrome. Clinically, it presents with a moderate-to-severe &lt;strong&gt;congenital sensorineural hearing loss&lt;/strong&gt; combined with &lt;strong&gt;progressive retinitis pigmentosa&lt;/strong&gt; that typically becomes symptomatic in adolescence. Unlike Usher type 1, the vestibular system is generally considered intact in USH2a — but how intact, and over how long?&lt;/p&gt;

&lt;figure style=&quot;margin: 1.5em 0; text-align: center;&quot;&gt;
  &lt;img src=&quot;/images/ush_fig1.jpg&quot;
       alt=&quot;Diagram summarizing the Usher syndrome subtypes (types 1, 2, and 3) by hearing loss severity, vestibular function, and retinitis pigmentosa onset&quot;
       style=&quot;max-width: 100%; height: auto; border-radius: 4px;&quot;
       loading=&quot;lazy&quot;&gt;
  &lt;figcaption style=&quot;margin-top: 0.5em; font-size: 0.88em; color: #666; font-style: italic;&quot;&gt;
    &lt;strong&gt;Figure 1.&lt;/strong&gt; Diagram summarizing the Usher syndrome subtypes — differing by hearing severity at birth, vestibular involvement, and onset of retinitis pigmentosa.
    Taken from Wijn et al. (2025) &lt;em&gt;Ear and Hearing&lt;/em&gt; (figure 1).
  &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;These are not idle questions. As gene therapy approaches for retinal disease advance and cochlear implantation becomes more routine in this population, we increasingly need robust natural history data: how fast does the hearing loss actually progress, what happens to speech understanding, and should we be looking at the vestibular system more systematically?&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;CRUSH study&lt;/strong&gt; (a prospective, longitudinal natural history study at Radboudumc, see e.g.,
&lt;a href=&quot;https://www.radboudumc.nl/expertisecentra/expertisecentra-zeldzame-aandoeningen/erfelijke-slechthorendheid/usher-syndroom/wetenschappelijk-onderzoek/klinsich-onderzoek&quot;&gt;Radboudumc - Usher Syndrome Research&lt;/a&gt;; and
&lt;a href=&quot;https://www.ushersyndroom.nl/kennisportaal/netwerk/landelijk-expertise-centrum-ushersyndroom/crush-database/vragen-over-de-crush-database/&quot;&gt;CRUSH Database - Usher Syndrome Knowledge Portal&lt;/a&gt;)
was designed to answer exactly these questions. Our paper &lt;a class=&quot;citation&quot; href=&quot;#wijnSoundStabilityLessons2025&quot;&gt;(Wijn et al., 2025)&lt;/a&gt;, led by Dirk Wijn and with contributions from Mirthe Fehrmann, Sybren Robijn, Hedwig Velde, Jeroen Smits, and others, reports on 4 years of structured follow-up in 33 USH2a patients and 2 patients with &lt;em&gt;USH2A&lt;/em&gt;-associated non-syndromic retinitis pigmentosa (nsRP).&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;hearing-loss-progression&quot;&gt;Hearing Loss Progression&lt;/h2&gt;

&lt;p&gt;The headline finding for pure-tone audiometry is a &lt;strong&gt;statistically significant decline of 2.3 dB in PTA 0.5–4 kHz over 4 years&lt;/strong&gt; (P = 0.017). This is a modest but real signal and importantly, one that exceeds what we would expect from presbycusis alone. The progression was most pronounced at the &lt;strong&gt;mid-to-high frequencies&lt;/strong&gt; (see fig 2), consistent with the cochlear regions most vulnerable in &lt;em&gt;USH2A&lt;/em&gt;-related pathology.&lt;/p&gt;

&lt;figure style=&quot;margin: 1.5em 0; text-align: center;&quot;&gt;
  &lt;img src=&quot;/images/ush_fig3.jpg&quot;
       alt=&quot;Age-related typical audiograms (ARTA) for all USH2a patients in the CRUSH study, showing a moderate-to-severe sloping hearing loss pattern with mid-to-high frequency progression&quot;
       style=&quot;max-width: 100%; height: auto; border-radius: 4px;&quot;
       loading=&quot;lazy&quot;&gt;
  &lt;figcaption style=&quot;margin-top: 0.5em; font-size: 0.88em; color: #666; font-style: italic;&quot;&gt;
    &lt;strong&gt;Figure 2.&lt;/strong&gt; Age-related typical audiograms (ARTA) for all USH2a patients in the CRUSH cohort, illustrating the characteristic sloping configuration and the degree of inter-individual variability across the frequency range.
    Taken from Wijn et al. (2025) &lt;em&gt;Ear and Hearing&lt;/em&gt; (figure 3).
  &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;What makes this clinically useful is that these are &lt;strong&gt;prospectively collected measurements&lt;/strong&gt; from a single center, using standardized protocols across all time points. Cross-sectional comparisons in genetics clinics often underestimate progression because of population heterogeneity; a within-subject longitudinal design is far more sensitive and meaningful for counseling individual patients.&lt;/p&gt;

&lt;p&gt;One finding worth highlighting in conversations with patients: &lt;strong&gt;speech reception thresholds (SRT) remained relatively stable&lt;/strong&gt; despite the decline in pure-tone thresholds. This means patients will notice slightly deteriorating audiograms at routine visits, but their functional communication ability, as captured by speech testing, holds up better than the pure-tone picture might suggest. This distinction matters enormously for patient-facing counseling, and for timing decisions around cochlear implantation.&lt;/p&gt;

&lt;p&gt;The two nsRP patients (same &lt;em&gt;USH2A&lt;/em&gt; pathogenic variants, no clinical RP) had &lt;strong&gt;normal hearing&lt;/strong&gt;, which is a useful datapoint for genetic counseling in family members with isolated retinal disease.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;vestibular-phenotype-mostly-intact-semicircular-canals-but-subtle-otolith-dysfunction&quot;&gt;Vestibular Phenotype: Mostly Intact Semicircular Canals, but Subtle Otolith Dysfunction&lt;/h2&gt;

&lt;p&gt;The vestibular results are, in some ways, the most interesting part of the study, and the part most likely to change clinical practice.&lt;/p&gt;

&lt;p&gt;As expected for USH2a, &lt;strong&gt;semicircular canal function was largely preserved&lt;/strong&gt;: video head impulse testing (vHIT), velocity step tests, and caloric reflex tests were all within normal limits in more than 90% of patients. Patient-reported balance problems on the Dizziness Handicap Inventory (DHI) were also absent or minor.&lt;/p&gt;

&lt;p&gt;This is reassuring — but the &lt;strong&gt;otolith picture is different&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Cervical VEMPs (cVEMP)&lt;/strong&gt; — assessing saccular function — were abnormal in &lt;strong&gt;34%&lt;/strong&gt; of patients&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Ocular VEMPs (oVEMP)&lt;/strong&gt; — assessing utricular function — were abnormal in &lt;strong&gt;75%&lt;/strong&gt; of patients&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These findings indicate &lt;strong&gt;subclinical otolith organ dysfunction&lt;/strong&gt; in a substantial proportion of USH2a patients who report no balance complaints and have intact canal function. This dissociation between patient-reported symptoms and objective test findings is clinically important: if we rely only on symptoms or vHIT results, we will miss a significant proportion of patients with vestibular pathology.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;what-this-means-in-practice&quot;&gt;What This Means in Practice&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Annual audiological follow-up is warranted.&lt;/strong&gt;
A 2.3 dB decline over 4 years in the speech frequency range is small but real, and the mid-to-high frequency progression is consistent with cochlear base involvement. Stable SRT is reassuring but should not replace pure-tone tracking, both are essential when CI timing is under consideration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Cochlear implant timing deserves proactive discussion.&lt;/strong&gt;
In USH2a, progressive hearing loss and progressive vision loss are on parallel trajectories. Cochlear implantation is optimally performed while audiovisual learning and integration are still available. The longitudinal hearing data from CRUSH now provide a firmer empirical basis for those timing conversations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. VEMPs belong in the USH2a assessment protocol.&lt;/strong&gt;
The high prevalence of abnormal oVEMPs (75%) in the absence of subjective balance problems argues for routine VEMP testing in USH2a — not because patients complain, but because the underlying organ is silently compromised. This may have relevance for fall risk in the context of concurrent visual field loss, and is relevant if CI fitting approaches that rely on vestibular input are under consideration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Distinguish the nsRP phenotype.&lt;/strong&gt;
Patients with &lt;em&gt;USH2A&lt;/em&gt;-associated nsRP carry the same variants without clinical RP, and had normal hearing in this sample. For genetic counseling in such families, this reassurance about hearing, with the caveat that systematic follow-up is still indicated, is clinically useful.&lt;/p&gt;

&lt;hr /&gt;

&lt;ol class=&quot;bibliography&quot;&gt;&lt;li&gt;
&lt;div class=&quot;pub-entry&quot;&gt;
  &lt;div class=&quot;pub-ref&quot;&gt;&lt;span id=&quot;wijnSoundStabilityLessons2025&quot;&gt;Wijn, D. H., Fehrmann, M. L. A., Robijn, S. M. M., Velde, H. M., Smits, J. J., van Wijk, E., Beynon, A. J., Cals, F. L. J., Hoyng, C. B., Yzer, S., &lt;strong&gt;Lanting, C. P.&lt;/strong&gt;, &amp;amp; Pennings, R. J. E. (2025). &lt;em&gt;From Sound to Stability: Lessons Learned From the CRUSH Study on Hearing Loss Progression and Vestibular Phenotype in Usher Syndrome Type 2A&lt;/em&gt;. &lt;i&gt;Otology &amp;amp; Neurotology&lt;/i&gt;, 10.1097/MAO.0000000000004851. &lt;a href=&quot;https://doi.org/10.1097/MAO.0000000000004851&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://doi.org/10.1097/MAO.0000000000004851&lt;/a&gt;&lt;/span&gt;&lt;a href=&quot;/_bibliography/Wijn et al. - 2025 - From Sound to Stability Lessons Learned From the CRUSH Study on Hearing Loss Progression and Vestib.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; title=&quot;Download PDF&quot; aria-label=&quot;Download PDF&quot;&gt;&lt;svg class=&quot;svg-icon svg-icon--file-pdf bib-pdf-icon&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z&quot; /&gt;&lt;path d=&quot;M14 2v6h6&quot; /&gt;&lt;path d=&quot;M8 13h8M8 17h5&quot; /&gt;&lt;/svg&gt;
&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;pub-metrics&quot;&gt;
    &lt;span class=&quot;altmetric-embed&quot; data-badge-type=&quot;donut&quot; data-badge-popover=&quot;left&quot; data-doi=&quot;10.1097/MAO.0000000000004851&quot; data-hide-no-mentions=&quot;true&quot; data-link-target=&quot;blank&quot;&gt;&lt;/span&gt;
    &lt;span class=&quot;__dimensions_badge_embed__&quot; data-doi=&quot;10.1097/MAO.0000000000004851&quot; data-style=&quot;small_circle&quot; data-hide-zero-citations=&quot;true&quot; data-legend=&quot;never&quot;&gt;&lt;/span&gt;
  &lt;/div&gt;&lt;/div&gt;
&lt;/li&gt;&lt;/ol&gt;
</content>

			
				<category term="research" />
			
			
				<category term="Usher syndrome" />
			
				<category term="genetics" />
			
				<category term="hereditary hearing loss" />
			
				<category term="natural history" />
			
				<category term="vestibular" />
			

			<published>2026-03-01T00:00:00+01:00</published>
		</entry>
	
		<entry>
			<id>https://crisly.nl/travel/Berlin2/</id>
			<title>May Holiday Adventures Berlin (improved)</title>
			<link href="https://crisly.nl/travel/Berlin2/" rel="alternate" type="text/html" title="May Holiday Adventures Berlin (improved)" />
			<updated>2026-01-11T00:00:00+01:00</updated>

			
				
				<author>
					
						<name>Cris Lanting</name>
					
					
						<email>c.lanting@gmail.com</email>
					
					
						<uri>https://crisly.nl/</uri>
					
				</author>
			
			<summary>Exploring Berlin by bike during the sunny May holidays—from the iconic East Side Gallery to hidden art hubs and digital wonderlands</summary>
			<content type="html" xml:base="https://crisly.nl/travel/Berlin2/">&lt;p&gt;Spring sunshine, lush evenings, and a city in motion—Berlin in May was pure magic. Over the holidays, we set out to discover the city on two wheels and see it from fresh angles.&lt;/p&gt;

&lt;h2 id=&quot;cycling-highlights&quot;&gt;Cycling Highlights&lt;/h2&gt;

&lt;p&gt;We kicked off by biking across the wide-open expanse of the &lt;em&gt;Tempelhofer Feld&lt;/em&gt;, Berlin’s repurposed airport-turned-urban playground. There’s nothing quite like riding down a former runway with the wind in your face and city skyline ahead.&lt;/p&gt;

&lt;p&gt;From there, one of the most scenic rides started in &lt;em&gt;Ostkreuz&lt;/em&gt;, weaving along the Spree River. We crossed bridge after bridge—each offering a different slice of Berlin life—before arriving at the &lt;em&gt;Reichstag&lt;/em&gt;, where the glass dome shimmered under a blue sky. Of course, no riverside ride is complete without a stop at the &lt;strong&gt;East Side Gallery&lt;/strong&gt;. The massive murals never get old, with their bold colors and historical echoes.&lt;/p&gt;

&lt;div&gt;
  






&lt;picture&gt;
  &lt;source type=&quot;image/webp&quot; srcset=&quot;https://crisly.nl/images/map_berlin_cycle-480.webp 480w,
            https://crisly.nl/images/map_berlin_cycle-960.webp 960w,
            https://crisly.nl/images/map_berlin_cycle-1600.webp 1600w&quot; sizes=&quot;(min-width: 64em) 760px, 100vw&quot; /&gt;
  
  &lt;img src=&quot;https://crisly.nl/images/map_berlin_cycle-960.webp&quot; alt=&quot;GPX track Berlin&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
&lt;/picture&gt;

&lt;/div&gt;

&lt;h2 id=&quot;urban-culture&quot;&gt;Urban Culture&lt;/h2&gt;

&lt;p&gt;We also visited the &lt;em&gt;RAW-Gelände&lt;/em&gt;, a gritty, creative sprawl of clubs, galleries, and a fantastic skatepark. The energy here is unmistakable—raw and authentic, with a laid-back skater vibe and murals layered across every wall.&lt;/p&gt;

&lt;p&gt;For food and chill, alternative vibes, &lt;strong&gt;Friedrichshain&lt;/strong&gt; was a favorite. It’s packed with cafés, street food, indie bars, and green spaces (Boxhagener Platz) offering a more local vibe than central Berlin. If you’re visiting, it’s worth spending a day just wandering here—and steering clear of the tourist traps around places like Checkpoint Charlie and the overly commercial parts of Alexanderplatz.&lt;/p&gt;

&lt;h2 id=&quot;future-and-fiction&quot;&gt;Future and Fiction&lt;/h2&gt;

&lt;p&gt;For a change of pace, we stepped into the &lt;strong&gt;Spy Museum&lt;/strong&gt;, diving into Cold War tech, disguises, and tales of espionage. Then it was off to the &lt;strong&gt;&lt;a href=&quot;https://futurium.de/en&quot;&gt;Futurium&lt;/a&gt;&lt;/strong&gt;, where you can interact with possible futures and rethink everything from mobility to AI.&lt;/p&gt;

&lt;p&gt;One final visual treat was the &lt;strong&gt;&lt;a href=&quot;https://lighthouse.berlin/the-grand-tour-3/&quot;&gt;Lighthouse of Digital Art – The Grand Tour&lt;/a&gt;&lt;/strong&gt;: an immersive show of our solar system, our own Milky Way galaxy, but also way, &lt;em&gt;way&lt;/em&gt; beyond. A truly mesmerizing experience.&lt;/p&gt;

&lt;h2 id=&quot;berlin-and-naturebest-of-both-worlds&quot;&gt;Berlin and Nature—Best of Both Worlds&lt;/h2&gt;

&lt;p&gt;The best part? We combined city exploration with a quiet stay in nature. It’s perfectly doable to use public transport—&lt;strong&gt;train RE7&lt;/strong&gt; takes you straight into the city—while camping in &lt;em&gt;Naturpark Dahme-Heideseen&lt;/em&gt;, near the peaceful &lt;strong&gt;lake Schmöldesee&lt;/strong&gt;. Wake up to birdsong, spend the day in Berlin, and return to a peaceful campsite. Highly recommended.&lt;/p&gt;

&lt;div&gt;
  



&lt;div&gt;
	&lt;ul class=&quot;clearing-thumbs small-block-grid-4&quot;&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/IMG20250428101314.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Berlin HbF&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/IMG20250428101314-thumb.webp&quot; alt=&quot;Berlin HbF&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/IMG20250430114510.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Graffiti details at East Side Gallery&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/IMG20250430114510-thumb.webp&quot; alt=&quot;Graffiti details at East Side Gallery&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/IMG20250428110244.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Brandenburger Tor&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/IMG20250428110244-thumb.webp&quot; alt=&quot;Brandenburger Tor&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/IMG20250430114816.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Graffiti details at East Side Gallery (Japanese sector)&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/IMG20250430114816-thumb.webp&quot; alt=&quot;Graffiti details at East Side Gallery (Japanese sector)&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/IMG20250428111855.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Holocaust Memorial&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/IMG20250428111855-thumb.webp&quot; alt=&quot;Holocaust Memorial&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/IMG20250430114936.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Graffiti details at East Side Gallery (Feet)&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/IMG20250430114936-thumb.webp&quot; alt=&quot;Graffiti details at East Side Gallery (Feet)&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/IMG20250428142650.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Tempelhof park cycling&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/IMG20250428142650-thumb.webp&quot; alt=&quot;Tempelhof park cycling&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/IMG20250430144318.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Berliner Dom&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/IMG20250430144318-thumb.webp&quot; alt=&quot;Berliner Dom&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/IMG20250428160657.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Gedenkstätte Berliner Mauer Bernauer Str&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/IMG20250428160657-thumb.webp&quot; alt=&quot;Gedenkstätte Berliner Mauer Bernauer Str&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/IMG20250430144727.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Rotes Rathaus Berlin&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/IMG20250430144727-thumb.webp&quot; alt=&quot;Rotes Rathaus Berlin&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/IMG20250428160707.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Gedenkstätte Berliner Mauer Bernauer Str&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/IMG20250428160707-thumb.webp&quot; alt=&quot;Gedenkstätte Berliner Mauer Bernauer Str&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/IMG20250430150005.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Karl Marx str&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/IMG20250430150005-thumb.webp&quot; alt=&quot;Karl Marx str&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/IMG20250428161219.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Gedächtniskirche&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/IMG20250428161219-thumb.webp&quot; alt=&quot;Gedächtniskirche&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/IMG20250430162447.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Skatehall Berlin (RAW-Gelände)&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/IMG20250430162447-thumb.webp&quot; alt=&quot;Skatehall Berlin (RAW-Gelände)&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/IMG20250429112255.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Potsdamer Platz&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/IMG20250429112255-thumb.webp&quot; alt=&quot;Potsdamer Platz&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/IMG20250430175942.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: The Lighthouse Digital Art show&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/IMG20250430175942-thumb.webp&quot; alt=&quot;The Lighthouse Digital Art show&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/IMG20250429154545.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: New Media Art Center (RAW-Gelände)&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/IMG20250429154545-thumb.webp&quot; alt=&quot;New Media Art Center (RAW-Gelände)&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/IMG20250501125802.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Lift detail in Futurium&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/IMG20250501125802-thumb.webp&quot; alt=&quot;Lift detail in Futurium&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/IMG20250429154604.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: RAW-Gelände graffiti&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/IMG20250429154604-thumb.webp&quot; alt=&quot;RAW-Gelände graffiti&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/IMG20250501132010.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Transportation ideas at Futurium&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/IMG20250501132010-thumb.webp&quot; alt=&quot;Transportation ideas at Futurium&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/IMG20250429154701.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: RAW-Gelände graffiti&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/IMG20250429154701-thumb.webp&quot; alt=&quot;RAW-Gelände graffiti&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/IMG20250501145608.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Museum Island&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/IMG20250501145608-thumb.webp&quot; alt=&quot;Museum Island&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/IMG20250429154922-1.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: RAW-Gelände graffiti&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/IMG20250429154922-1-thumb.webp&quot; alt=&quot;RAW-Gelände graffiti&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/IMG20250501192428-1.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Friedrichshain views&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/IMG20250501192428-1-thumb.webp&quot; alt=&quot;Friedrichshain views&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
		
		
		
		&lt;li&gt;&lt;a class=&quot;glb&quot; href=&quot;https://crisly.nl/images/IMG20250429191530.webp&quot; data-gallery=&quot;page-gallery&quot; data-glightbox=&quot;title: Friedrichshain views&quot;&gt;&lt;img src=&quot;https://crisly.nl/images/IMG20250429191530-thumb.webp&quot; alt=&quot;Friedrichshain views&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		
	&lt;/ul&gt;
&lt;/div&gt;

&lt;/div&gt;
</content>

			
				<category term="travel" />
			
			
				<category term="Berlin" />
			
				<category term="cycling" />
			
				<category term="street art" />
			
				<category term="museums" />
			
				<category term="travel" />
			

			<published>2026-01-11T00:00:00+01:00</published>
		</entry>
	
		<entry>
			<id>https://crisly.nl/research/AC102/</id>
			<title>Phase 1 Audiological Outcomes of Intratympanic AC102</title>
			<link href="https://crisly.nl/research/AC102/" rel="alternate" type="text/html" title="Phase 1 Audiological Outcomes of Intratympanic AC102" />
			<updated>2025-11-19T00:00:00+01:00</updated>

			
				
				<author>
					
						<name>Cris Lanting</name>
					
					
						<email>c.lanting@gmail.com</email>
					
					
						<uri>https://crisly.nl/</uri>
					
				</author>
			
			<summary>A first-in-human phase 1 trial of intratympanic AC102 shows only a transient, volume-dependent conductive loss at high frequencies, with preserved bone conduction and otoacoustic emissions.</summary>
			<content type="html" xml:base="https://crisly.nl/research/AC102/">&lt;h2 id=&quot;overview&quot;&gt;Overview&lt;/h2&gt;

&lt;p&gt;In this first-in-human phase 1 trial, we evaluated the audiological effects of intratympanic AC102, a novel inner-ear therapy delivered in a thermosensitive gel, in 42 normal-hearing volunteers. &lt;strong&gt;The main safety message is clear:&lt;/strong&gt; AC102 is safe and well-tolerated. Furthermore, cochlear function remained intact, with no permanent sensorineural threshold shifts or deterioration in BERA or otoacoustic emissions.&lt;/p&gt;

&lt;p&gt;From an audiological standpoint, the most notable finding was a &lt;strong&gt;short-lived, volume-dependent conductive hearing loss predominantly at high frequencies (4–8 kHz)&lt;/strong&gt;, reflecting a mechanical middle-ear effect of the injected gel rather than drug-related toxicity.&lt;/p&gt;

&lt;h2 id=&quot;key-audiological-findings&quot;&gt;Key Audiological Findings&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;No permanent sensorineural changes:&lt;/strong&gt;
Bone conduction thresholds, BERA, and TEOAE/DPOAE remained stable throughout follow-up.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Transient high-frequency conductive loss:&lt;/strong&gt;
Air conduction thresholds increased temporarily, most clearly between &lt;strong&gt;4 and 8 kHz&lt;/strong&gt;, and returned to baseline within days.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Volume-dependent effect, independent of AC102:&lt;/strong&gt;
The magnitude of the conductive shift scaled with injected volume (50–800 μl) and occurred for both placebo gel and AC102, indicating a &lt;strong&gt;mechanical middle-ear effect&lt;/strong&gt; rather than drug toxicity.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Mild, procedure-related symptoms only:&lt;/strong&gt;
Transient ear discomfort, brief vertigo, tinnitus, and minor bleeding at the injection site were observed, resolving within about a week.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;volumeeffect-relationship-fig-4&quot;&gt;Volume–Effect Relationship (FIG. 4)&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/images/ac102_fig4.png&quot; alt=&quot;Volume-dependent temporary conductive loss after intratympanic AC102&quot; style=&quot;width:100%; display:block; margin:auto;&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;figure-caption&quot; style=&quot;text-align: center; font-size: 0.9em;&quot;&gt;&lt;em&gt;Figure 4. The average air conduction threshold versus the injected volume of either placebo or AC102 on the day of injection. Each panel showcases the frequency tested, ranging from 0.25 to 8.0 kHz, and displays the threshold measured after injection for the injected ear (threshold at TP day 1 in dB HL). The color code in each panel represents the volume cohorts, with red representing 50 μl, blue/white triangle representing 100 μl, orange circle representing 200 μl, green triangle representing 400 μl, and purple diamond representing 800 μl. The x-axis displays the exact volume injected for each participant, and the y-axis shows the effect of the injected volume on the threshold, with the most significant impact seen between 4 and 8 kHz. For each frequency, a linear fit with the confidence interval around the mean is presented (fit in black, confidence interval in gray).&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;take-home-for-audiology&quot;&gt;Take-Home for Audiology&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Intratympanic AC102 in a thermosensitive gel can be delivered &lt;strong&gt;without permanent cochlear damage&lt;/strong&gt;, as evidenced by stable BC, BERA, and OAEs.&lt;/li&gt;
  &lt;li&gt;Clinically, you can expect a &lt;strong&gt;short-term, high-frequency air–bone gap&lt;/strong&gt; whose size depends on the injected volume and resolves within days.&lt;/li&gt;
  &lt;li&gt;Patients should be counseled about transient “muffled” high-frequency hearing and mild procedure-related discomfort, but reassured that &lt;strong&gt;long-term thresholds are not adversely affected&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;A phase 2 trial is currently ongoing, focusing on the &lt;strong&gt;efficacy of AC102 in sudden sensorineural hearing loss (SSNHL)&lt;/strong&gt;. Because of the tight time window after onset, our local recruitment is modest, but we are closely involved in the clinical and methodological design.&lt;/li&gt;
  &lt;li&gt;After many negative trials and a few promising successes (e.g. gene-specific approaches such as OTOF), the field urgently needs an effective treatment for SSNHL to mitigate the profound impact that patients report in daily life.&lt;/li&gt;
&lt;/ul&gt;
</content>

			
				<category term="research" />
			
			
				<category term="clinical trial" />
			
				<category term="inner ear" />
			
				<category term="hearing loss" />
			
				<category term="intratympanic" />
			
				<category term="gene therapy" />
			

			<published>2025-11-19T00:00:00+01:00</published>
		</entry>
	
</feed>