1. readsOpenAlex citation counts per paper
  2. becomeslog-normalized trust → each paper's mass
  3. writes--w--d--field-attention
  4. you seeheavier-cited work sits heavier in the type — weight, ink, and an anchor that deepens with consensus

No canvas is drawn here — the field is invisible; these variables are its only output. Without it you would build: a relevance score column and a sort you re-run.

field-ui · invisible fields · evidence

Trust you can feel, not read.

Research is typically served as a sorted column. Citation count compresses three things into one number — how much the field has engaged a work, whether it still holds, how many others build on it — then sorts descending. The top row wins. That's a ranking, not trust.

This is the same data from OpenAlex run as a field. Each paper is a body; its citation weight becomes gravitational mass — heavier works pull without asserting a verdict. Cross-citations thread each work to what it builds on. The field is invisible — no particle swarm, no overlay — only its effect shows in the type: weight, ink, and a left anchor that intensifies with consensus. Toggle it off and the data collapses to a plain list — the live glow goes dark with it. Change the weighting and watch the field re-settle.

Field
Weight by
Color by
Data snapshot · Jun 10, 2026

size = citations — how much the field leans on each work · color = research subfield — the discipline each work binds to · hold a finding — the field gathers

14 works address "does exercise improve mental health". With the field on, the heaviest are near-consensus and the faint ones are still finding their footing; hover one to light the work it builds on. Change the weighting and watch them re-settle.

  1. 01
    2013 ESH/ESC Guidelines for the management of arterial hypertension Blood Pressure and Hypertension Studies · Giuseppe Mancia et al. · 2013 open access
    13,672 citations
  2. 02
    World Health Organization 2020 guidelines on physical activity and sedentary behaviour Physical Activity and Health · Fiona Bull et al. · 2020 open access
    10,851 citations
  3. 03
    6,046 citations
  4. 04
    4,973 citations
  5. 05
    The Lancet Commission on global mental health and sustainable development Mental Health Treatment and Access · Vikram Patel et al. · 2018 open access
    3,407 citations
  6. 06
    3,093 citations
  7. 07
    Effects of COVID-19 on College Students’ Mental Health in the United States: Interview Survey Study COVID-19 and Mental Health · Changwon Son et al. · 2020 open access
    2,787 citations
  8. 08
    2,488 citations

How it's built

Every finding is ordinary semantic HTML — a <li> with a few data attributes. field-ui reads them, runs a spatial field over the list, and writes measured state back as CSS custom properties each frame. No canvas. No particle swarm. No JS event listeners on individual elements. Four channels do the work: --w is the server-computed weight, --cat the lens color, --d the engine's live local density (hold a finding and the field gathers), and --field-attention the recipe's eased attention metric.

1 — mark each finding as a field body

HTML
<li id="finding-W2042"
  data-body="attract"
  data-strength="0.87"
  data-field-color="#4da3ff"
  data-feedback
  data-hot
  style="--trust: 0.87; --cat: #4da3ff;"
>
  <!-- a citation edge as a REAL platform
       relationship: the registry discovers it,
       and --field-coherence reads how much of
       this finding's graph resolves on-page -->
  <span hidden
    data-field-relation="supports"
    data-field-target="#finding-W1480"></span>

  <!-- your ordinary HTML here -->
  <span class="ev-bar" aria-hidden="true"
    data-field-visual-for="#finding-W2042"
    data-field-visual-role="measurement"></span>
</li>
  • data-body="attract" — registers as a field participant
  • data-strength — gravitational mass (0 → faint, 2 → heavy anchor)
  • data-field-color — accent hue for the color lens
  • data-feedback — opt in to receive --field-* writebacks
  • data-hot — the engine's live density (--d) gathers toward 1 while held
  • data-field-visual-for — declares the bar as this record's measurement (inspectable, lintable)

2 — CSS reads the field's output

CSS
.ev-finding {
  /* --trust is server-set (0..1 log-normalized
     citation score). CSS reads it directly. */
  --w: var(--trust, 0.5);

  /* --d is LIVE — the engine's local particle
     density, written back every frame. data-hot
     makes it gather toward 1 while you hold. */
  --live: var(--d, 0);

  opacity: calc(0.58 + var(--w) * 0.42);
  border-left: 3px solid
    color-mix(in srgb,
      var(--cat) calc(18% + var(--w) * 82%),
      var(--line));
  box-shadow: 0 0 calc(var(--live) * 16px) -6px
    color-mix(in srgb,
      var(--cat) calc(var(--live) * 55%),
      transparent);
}
.ev-title {
  font-variation-settings:
    'wght' calc(380 + var(--w) * 360);
}

Weight, ink, font heft, and border intensity all read from one normalized trust score; the halo reads the engine's live --d — the field drives the measurement; CSS drives the presentation.

3 — the snapshot upgrades itself

TS
// trust itself updates: ONCE per visit
// (~4s in), one batched request per topic
// asks OpenAlex for current counts —
fetch('https://api.openalex.org/works'
  + '?filter=ids.openalex:W301…|W204…'
  + '&select=id,cited_by_count');

// each finding updates IN PLACE
// (data-cites + the figure + a quiet
// "+N since snapshot" when it moved),
// then the SAME reweight path re-runs:
// --trust, data-strength, the bar,
// the FLIP re-sort — trust re-settles
// in front of you. Once, not a poll:
// citations move slowly; polling
// would be theater.

The refresh covers every work on the page, deferred ones included — findings the accretion reveal surfaces later already carry refreshed counts, because each reveal folds in through the same reweight. Works the API doesn't return keep their snapshot values; the delta note only appears where a count actually moved.