← product evidence + the ladder to state of the art
Nishi browser — box-model shorthands land: first 100% coarse-parity screen vs Chrome
workstream: S21 experiential / S18 graphics — browser chrome-parity ratchetrun: browser-height-2026-07-162026-07-16
Verdict: THE HEIGHT AXIS IS CLOSED: /experiential now lays out at EXACTLY Chrome's height — 2227px vs 2227px, to the pixel (it started the day at 206%, was 61% this morning, 87% after shorthands, 100.0% with line-height). Two rungs landed in this run. (1) BOX-MODEL SHORTHANDS: real pages set spacing through `padding: 8px 12px` / `margin: 1.6em 0 .5em`, which the longhand-only lookups ignored; each side now resolves in ONE reverse scan across longhand AND shorthand — last declaration wins — after the first attempt (longhand-always-wins) failed its own gate on the same cascade-order disease as the dark-theme bug. (2) LINE-HEIGHT: unitless multiplier (inherits as the number, recomputes per descendant font-size), px form, and the `font: 15px/1.55` shorthand's /N — resolved identically in layout and paint (glyphs half-leading-centered in their line boxes). The gate hunt also flushed a latent stale-index hazard (the paint bucket index now self-validates against its source array). Coarse parity 96.8% — the remaining 6 cells are ONE band where integer-px line rounding (23 vs Chrome's 23.25) accumulates ~4px of block drift; fractional-px layout is the queued rung. Tight parity 57.2% stays font-raster-dominated.



Measured
| what | result | meaning |
|---|---|---|
| /experiential layout height | 2227px vs Chrome 2227px = 100.0% EXACT (day arc: 206% -> 64% -> 61% -> 87% -> 100.0%) | The height axis is closed; every remaining delta is paint-side |
| line-height gate | nx_lineheight_gate GREEN 6/6 | unitless (32=2x16), font-shorthand /1.55 (23=15x1.55), fixed px (30), inherit-with-recompute (30=1.5x20 not 24), layout==paint resolver parity, can-fail control (17 legacy) |
| Latent hazard flushed | paint bucket-index now SELF-VALIDATES against its source array | The gate caught the index answering for the WRONG page (multi-page consumers); guard = stamp + compare, fallback to full scan |
| /experiential coarse parity | 100.0% (192/192 cells, was 95.8%) | FIRST perfect coarse screen: every structural region matches Chrome at tol 32 |
| /experiential tight parity | 59.8% (was 57.3%) | Font-raster dominated; the font-fidelity rung's ratchet |
| Wikipedia height | 8731px vs Chrome 7582px = 115% (was 106%) | Wikipedia's own shorthand margins now honored — slightly OVER; % margins and margin-collapsing are the correcting rungs |
| Gate | nx_css_boxmodel_gate GREEN 6/6 | padding shorthand geometry, margin rhythm 57px exact, em-against-inherited-fs (2em@20px=40), font:15px both resolvers, longhand-after-shorthand priority, can-fail control |
| Cascade lesson (2nd occurrence) | longhand-always-wins FAILED the gate | UA margin-top (earlier) beat author margin shorthand (later); rewrote as one last-wins scan across both properties — same law as the background fix; the gate caught it before ship |
| Regression sweep | fontsize-frac, inline-vec-measure, bg-cascade, cidx-equiv, negmargin — all GREEN | No prior fix regressed |
Machine detail: api.json · related: /evidence/nishi-browser