1. readsStack Overflow's unanswered questions
  2. becomesurgency (recency · votes · views) → mass inside ONE conserved budget
  3. writes--w--field-attention
  4. you seefresh asks read bold and sink as they age; brightening one literally dims the rest

No canvas is drawn here — the field is invisible; these variables are its only output. Without it you would build: priority tiers, a scoring scheme, and a re-sort on every change.

Data honesty

Data source
Real Stack Exchange data (stackoverflow.com API) — unanswered [javascript] questions, CC BY-SA 4.0.
Snapshot
Committed snapshot in src/data/examples/, stamped snapshotAt on refresh via scripts/snapshot-examples.mjs — the build never fetches, so it is deterministic.
Live refresh
Upgrades to live in the browser: a polite poll (wireLiveChip) that skips hidden tabs and retires after failures. The committed snapshot is the SSR baseline and the no-JS truth.
Not claimed
The field reads recency, votes, and views as urgency inside one conserved attention budget. It does not decide which question actually matters most — it makes a chosen urgency signal legible.

Fundamental · invisible fields · inbox

Attention is a budget.

An inbox is a queue of asks competing for one finite resource: yours. Most inboxes pretend otherwise — every row arrives at full volume, so the real triage happens in your head. These are 42 real unanswered [javascript] questions from Stack Overflow, and here the attention is conserved: the page holds a fixed total, split across every ask by urgency — a blend of recency, votes, and views.

Because the total is fixed, brightening one ask literally dims the rest. Attention also has a place: pin an ask and its card moves into the focus pane, holding a full unit; the remaining budget redistributes across the stream, and you watch the others fade by exactly that much. Unpin it and it returns to its place in the stream. Switch the lens and the same budget re-settles along a different signal. The field is invisible — its only output is type weight, ink, and a left anchor.

Field
Urgency lens
Attention 100% allocated · pinned 0 · free 17.6
Data snapshot · 2026-11-03

size = urgency, recency-leaning — fresh asks pull hardest before they go cold · color = age — cool has waited years, warm arrived this week

  1. 21 votes 15.3k views
  2. UnhandledPromiseRejectionWarning: TypeError: Caught error after test environment was torn down javascriptreactjsreact-testing-libraryjest-mock-axios 7y ago · MaiOsman
    15 votes 14.6k views
  3. 15 votes 13.1k views
  4. Jest module mock - doMock doesn't work as intended javascriptmockingjestjs 6y ago · gomes
    14 votes 8.6k views
  5. GraphQL String interpolation is not allowed in graphql tag javascriptreactjsecmascript-6graphql 7y ago · Link
    16 votes 3.6k views
  6. 16 votes 3.4k views
  7. pageshow event on iphone fires only once javascriptiosiphonemobile-safari 11y ago · Bodzio
    16 votes 2.4k views
  8. How to access modules bundled from webpack outside bundles/chunks javascriptmodulerequirejsdependencies 11y ago · pjdicke
    15 votes 3.0k views
  9. Use Eclipse as GNOME Extension IDE javascripteclipsegnomegjs 13y ago · Zic0
    17 votes 1.1k views
  10. How to disable protocol checking with gtag.js for new GA4 properties? javascriptgoogle-analyticsgoogle-analytics-apigtag.js 6y ago · mikep
    14 votes 2.4k views
  11. Android WebView run Javascript in all frames (including iframes) javascriptandroidiframe 9y ago · user2875404
    15 votes 1.5k views
  12. 4 votes 168 views
  13. Web Worker effect on max http connections on per browser per domain javascriptweb-workerhttpconnection 11y ago · asolvent
    16 votes 839 views
  14. 14 votes 998 views
  15. Inspect all resize observers javascriptgoogle-chromedomfirefox 5y ago · LosYear
    15 votes 641 views
  16. How to configure refresh token with express and react javascriptnode.jsexpress 48d ago · Alberto Benedetto
    2 votes 142 views
  17. 2 votes 166 views
  18. React use() cache gets overwritten by an older Promise after invalidation javascriptreactjscachingpromise 3mo ago · David Brierton
    0 votes 268 views
  19. 2 votes 121 views
  20. 0 votes 233 views
  21. 2 votes 101 views
  22. Flutter app shows default counter instead of my custom StatefulWidget (TodoApp) javascriptandroidflutterwindows 41d ago · Kyvin Magalona
    0 votes 148 views
  23. 1 votes 138 views
  24. Can an objectURL point to an on-disk cache file rather than loading the file into memory? javascriptbrowser-cachecreateobjecturl 3mo ago · user9852762
    1 votes 134 views
  25. 1 votes 135 views
  26. 1 votes 128 views
  27. How to force a link to open in the system browser from Telegram's in-app browser (WebView)? javascriptandroid-webviewtelegramtelegram-bot 2mo ago · AMINE DZ
    -1 votes 249 views
  28. reCAPTCHA callback function in App.razor is breaking my <EditForm/> javascriptc#blazorrecaptcha 4mo ago · Bill Kindig
    1 votes 111 views
  29. 1 votes 86 views
  30. 0 votes 133 views
  31. React Native Nested FlatList: Child FlatList viewability callbacks are triggered before the child is actually visible javascriptreact-nativeperformancereact-native-flatlist 3mo ago · Testing Tester
    1 votes 81 views
  32. 0 votes 108 views
  33. 0 votes 106 views
  34. How to encrypt and decrypt specific fields in a React Context before storing them in Firestore? javascriptreactjsfirebasegoogle-cloud-firestore 4mo ago · Green-Black-code
    -1 votes 151 views
  35. 0 votes 103 views
  36. 0 votes 94 views
  37. How to pause SpeechSynthesis based on ambient microphone noise using the Web Audio API? javascriptweb-audio-apiwebspeech-apibest-practices 4mo ago · CodeSprint
    0 votes 85 views
  38. 1 votes 52 views
  39. Build update from Server to Client advicejavascriptperformancehttp 45d ago · Md Irfan Rahman Mubin
    -2 votes 114 views
  40. Is it possible to render forbidden.tsx from proxy.ts in Next.js 16? javascriptauthenticationnext.jsproxy 4mo ago · Apollo B.
    0 votes 69 views
  41. How to handle Talend JXLS templates in Apache Hop? tooling-recommendationjavascript 2mo ago · Rohini Bhondekar
    0 votes 54 views
  42. IntersectionObserver with bxslider background-image slideshow behaves strangely javascripthtmlintersection-observer 46d ago · timholz
    -4 votes 128 views

How it's built

Every ask is ordinary semantic HTML — an <li> carrying its normalized signals as data attributes. The page blends them into an urgency score per the active lens, then renormalizes so the weights always sum to one fixed budget. CSS turns each weight into type heft, ink, and anchor. The field never invents attention; it only moves it. On top of that sit live channels the engine writes back every frame — --d (local density, gathered by data-hot on hover) and --field-attention (the pattern's eased attention) — which touch only ink, never the budget. Each ask also declares its askedAt as data-field-at, so the pipeline's recency lane is grounded in the data's own timestamp: --field-recency decays against the real clock, not your interaction.

1 — mark each ask as a field body

HTML
<!-- the stream list holds a stable id; each ask is a body.
     data-feedback: the engine writes --d (live local density) back every frame.
     data-hot: hover/focus an ask and the field gathers toward it. -->
<ol id="ix-stream">
  <li
    data-body="attract"
    data-strength="1.21"
    data-feedback
    data-hot
    data-rec="0.91" data-vot="0.25" data-vie="0.14"
    data-field-at="1765324800000"
    style="--w: 0.51; --cat: hsl(318 74% 64%);"
  >
    <!-- your ordinary HTML here -->
  </li>
</ol>

<!-- data-rec = freshness(askedAt, snapshot) — the
     @fundamental-engine/core temporal kernel (half-life 7d).
     data-field-at declares askedAt as WORLD TIME, so
     the platform grounds its recency lane in the data:
     --field-recency = freshness(at, now), live. -->

<!-- the attention meter declares its provenance: a
     measurement visual OF the stream list -->
<span class="ix-meter" aria-hidden="true"
  data-field-visual-for="#ix-stream"
  data-field-visual-role="measurement"
><i></i></span>
  • data-body="attract" — registers as a field participant
  • data-strength — mass, derived from the allocated weight
  • data-rec/vot/vie — the normalized signals the lenses re-blend (data-rec is the freshness() kernel over askedAt)
  • data-field-at — the declared world timestamp; the platform grounds its recency lane in it (--field-recency)
  • data-feedback — opt in to --field-* writebacks (--d)
  • data-hot — hover/focus gathers the field toward this ask
  • data-field-visual-for — the meter's declared provenance

2 — the conserved renormalization, live arrivals included

// recency is the world-time kernel —
// exponential newness, half-life 7 days:
import { freshness } from "@fundamental-engine/core";
rec[i] = freshness(askedAtMs, nowMs, 7 * 86400000);

// fresh lens — the blends differ per lens
u[i] = 0.60·rec + 0.25·votes + 0.15·views

// the fixed total: N items × 0.42
budget = N × 0.42

// scale so the weights SUM to the budget,
// cap each at 1, re-flow capped excess
k    = budget / Σ u
w[i] = min(1, u[i] × k)   // repeat on the rest

// pins: w = 1, then reallocate
// (budget − pins) over the unpinned
Σ w[i] = budget — always.

// the scoped field runs invisible (renderless)
// and asks for the attention metric lane:
applyPattern(split, base, {
  renderless: true,
  extraMetrics: ["attention"],
});
// the pipeline writes --field-attention per ask (eased 0..1)

That invariant is the mechanic: the meter reads 100% no matter what you do, because pinning, re-blending, arriving, or decaying can only move attention, not mint it. Arrivals are the same flow end to end: fetch → dedupe → enter the field → renormalize.

3 — CSS reads the weight + the live channels

CSS
.ix-item {
  /* --w  = the server-allocated share (conserved)
     --d  = live engine density — data-hot gathers it
     --field-attention = the pattern's eased attention */
  --live: var(--d, 0);
  opacity: calc(0.58 + var(--w) * 0.42);
  box-shadow: 0 0 calc(var(--live) * 16px) -6px
    color-mix(in srgb,
      var(--cat) calc(var(--live) * 55%), transparent);
  background: color-mix(in srgb, var(--text)
    calc(1.5% + var(--w) * 4% + var(--live) * 4%
      + var(--field-attention, 0) * 4%),
    transparent);
}
/* the kit touches only ink — never --w;
   Σ--w stays pinned to the budget */

This is the engine's attention-budget idea applied to a page: bodies compete for a finite influence pool, and the layout reports each body's share — the same conservation the field runtime applies to particle attention, here written into the type.