Dress Up reports · ^du_report(16) · 2026-10-21 · about Messed Up Dress Up, a game made with M and N · after ^du_report(15)

The Space Between the Boxes

About 12 minutes to read (2,910 words, not counting tables and figures).

Every panel is boxed now. How much of each panel is empty, between its boxes and inside them, at the screens and zoom levels the game is played on? Where does that space come from, and how much can the layout give back without hiding what a player uses? The follow-up to ^du_report(5), “Always Be Knolling”, from ^ticket(521). Matthew, 2026-10-21 14:00: “The prior effort created panels that leave a lot of "whitespace" between them in common zoom levels and screen sizes. Do an audit of that for the new report, and try to reduce that (before vs after) with a PR that we plan to merge with improvements.”

Short answers. Measured in Chrome on GitHub's computers by knoll521, three jobs each measuring the builds side by side ([3]); “empty between boxes” is the share of a panel covered by no box and no loose control or text, the mean over every tab and place measured.

  1. Full screen is where the space is. At 1920×1080, main (0.0.405) leaves 62.3% of the boxes' side of the full screen empty between boxes; after c10, 53.3%. At 0.0.204 only 🎵 Music and 🗺️ World design had a full screen (37.8%); on those two alone, main reads 44.0% and after 44.0%.
  2. The side panel is less empty than at 0.0.204, and less again after. Side panel 1920×1080: 43.7% at 0.0.204, 37.7% on main, 27.1% after. At 1366×768: 37.8%, 27.9%, 21.9%. iPad portrait full screen: 26.6%, 30.4%, 21.2%.
  3. Where it comes from (read in the code, and seen in the box maps of Figure 3): empty columns (a grid of 4 columns holding 1 or 2 boxes), the hole under a short box beside a tall one, and the game's card in full screen, which left its column mostly empty. The side panel sits on the 568 px line between one and two columns at the common laptop zooms (the zoom).
  4. Four bugs found on the way, fixed in the branch's second commit (found); one of the fixes, Background's side panel as a grid, made that panel longer and emptier at every place measured; packing the boxes (c5) then made it shorter than on main (at 1920×1080, 2.92 → 2.65 windows tall), though with gaps between its boxes its empty share stays higher (5.7% → 19.6%) (each commit).
  5. The panels grew by half since ^du_report(5): 1,548 → 2,293 rows declared, 107 → 132 groups, 61 boxes planned in TAB_BOXES (none at 0.0.204).
  6. The measure repeats. In this run (out3) 3,960 cases were measured in two jobs or more; all but 4 agree to the pixel. Those 4 are the bubble room's full screen, where the jobs differ by up to 0.02 points (672 px²): most likely because its bubbles move. Outside the bubble room the noise floor is 0.
62.3% → 53.3%
empty between boxes, full screen 1920×1080, main → after
37.7% → 27.1%
the same, side panel 1920×1080
1,548 → 2,293
rows declared, 0.0.204 → 0.0.398
3,636
cases in this page (builds × screens × tabs × modes; one job per build)
0.0.204main (0.0.405)after: c100%20%40%60%80%full screen, 1920×108037.8% (2 tabs)full screen, 1920×1080, 0.0.204: 37.8% of the panel empty between boxes, the mean over 2 cases62.3%full screen, 1920×1080, main (0.0.405): 62.3% of the panel empty between boxes, the mean over 28 cases53.3%full screen, 1920×1080, c10: 53.3% of the panel empty between boxes, the mean over 28 casesside panel, 1920×108043.7%side panel, 1920×1080, 0.0.204: 43.7% of the panel empty between boxes, the mean over 26 cases37.7%side panel, 1920×1080, main (0.0.405): 37.7% of the panel empty between boxes, the mean over 27 cases27.1%side panel, 1920×1080, c10: 27.1% of the panel empty between boxes, the mean over 27 casesside panel, 1366×76837.8%side panel, 1366×768, 0.0.204: 37.8% of the panel empty between boxes, the mean over 26 cases27.9%side panel, 1366×768, main (0.0.405): 27.9% of the panel empty between boxes, the mean over 27 cases21.9%side panel, 1366×768, c10: 21.9% of the panel empty between boxes, the mean over 27 casesiPad portrait, full screen26.6% (2 tabs)iPad portrait, full screen, 0.0.204: 26.6% of the panel empty between boxes, the mean over 2 cases30.4%iPad portrait, full screen, main (0.0.405): 30.4% of the panel empty between boxes, the mean over 28 cases21.2%iPad portrait, full screen, c10: 21.2% of the panel empty between boxes, the mean over 28 cases
Figure 1. Empty between boxes, the mean over every tab and place, at four screens: 0.0.204 (6e787a8bb2), main (0.0.405, d9bcb5fcd5) and the branch at c10 (51c061686f). One run on GitHub, three jobs that agree (the answers' last point). At 0.0.204 the full screens are Music's and World design's alone.

Since report 5

^du_report(5) read the game at 0.0.204 (commit 6e787a8), published 2026-10-18. It measured counts only: TABS walked and SHOWN_WHEN run in node at the defaults; no pixels, no whitespace, no zoom levels. It set out nine rules and eight steps; where each stands at main:

report 5's rulenow
1. A box per thing, named oncekeptevery boxed tab (ticket ^ticket(375)); each box says its name once since ticket ^ticket(392)
2. Nesting by boxes alone, no dashed linespartlykept in the boxed tabs; 🗺️ World design still draws dotted borders
3. Knolled: a grid, things of a kind the same size and lined upamendedthe grids line their boxes up row by row, so a short box leaves a hole as tall as its row's tallest: see #rules
4. A row on one lineamendedrows of 12 or more chips still wrap to 3 or more lines: extended to chip rows, see #rules
5. Show the thingkeptplaces as pictures, things as cards, castle themes as flags
6. One decision, one placekeptunchanged
7. Mirror the picture: every big tab a designerkeptall 20 tabs have a full screen (5 kinds)
8. The same at every scaleamendedthe side panel sits on the line between one and two columns at common laptop zooms: 'every scale' now means every width and zoom
9. Keep it fastkeptguarded by tabs167 and castlefs365; this report times nothing
report 5's stepby
1. The shared pieces: a box, the one-line row, the designer's shelldoneticket ^ticket(285), 0.0.211 to 0.0.214
2. 🏞️ Background as a designerdoneticket ^ticket(285)
3. The castle's themes in one place, as flagsdoneticket ^ticket(375)
4. The bubble themes as three cardsdoneticket ^ticket(375); its question, one on and off per theme, not settled either way
5. The house's 🧸 toys sliderdoneticket ^ticket(285)
6. The other tabs, biggest firstdoneticket ^ticket(375) (12 tabs into boxes), ticket ^ticket(488) (World design's side panel, Controls)
7. Tidy what the survey found stalepartlythe stale comments went with ticket ^ticket(285); not checked line by line here
8. Measure the full-screen designer's speed (ticket 289)not doneonly the castle designer's, castlefs365 (ticket ^ticket(365))

The panels, counted the way report 5 counted them (TABS walked in node at the defaults [6]), at 0.0.204 and at 0.0.398: the same walk reproduces report 5's table at 0.0.204, but for the forest, one row more. Background: 32 → 38 places; a player sees 9 to 69 of its rows in one place (it was 7 to 50).

tabrows declaredgroupsrows shown at the defaultsboxes now
🧍 Body8 → 281 → 17 → 106
😀 Face31 → 310 → 022 → 226
👁 Eyes15 → 150 → 013 → 134
💇 Hair4 → 90 → 04 → 52
🦒 Neck, arms & legs12 → 160 → 011 → 154
👕 Shirt8 → 80 → 06 → 62
🖐 Hands15 → 150 → 04 → 44
👖 Pants6 → 60 → 03 → 32
🩱 Swim & undies7 → 70 → 01 → 12
👟 Feet8 → 80 → 04 → 43
👻 Visibility9 → 90 → 09 → 92
🐯 Costume46 → 1120 → 01 → 420
👥 People– → 1– → 0– → 1–
🏞️ Background1337 → 1979100 → 1242 → 4–
🎮 Controls22 → 276 → 722 → 274
🎵 Music10 → 100 → 010 → 10–
🗺️ World design2 → 20 → 02 → 2–
🔬 Inspection4 → 60 → 04 → 6–
♿ Accessibility3 → 30 → 03 → 3–
⚙️ Advanced1 → 10 → 01 → 1–

How the space is measured

Where the space is now

Figure 2 shows every tab and place at every screen, main → c10: green where the branch empties less, red where more (a point or more). The three largest holes the check found under each panel are in the data, with the box above each.

Full screen

1280×8001366×7681366×768 at 125%1440×9001440×900 at 125%1920×10801920×1080 at 125%1920×1080 at 150%2560×1440 at 150%iPad landscape 1180×820iPad portrait 820×1180phone 390×844
🧍 Body31→1731→2031→1947→2630→1655→5449→2831→1747→3931→1729→192→2
😀 Face29→1231→929→844→4329→865→6441→4029→1249→4729→1028→112→3
👁 Eyes49→4847→4524→2563→6239→3977→7662→6242→4271→7041→4127→284→5
💇 Hair70→7071→7056→5678→7463→6387→7878→7366→6682→7667→6735→377→8
🦒 Neck, arms & legs50→5049→4835→3165→6543→4379→7866→6643→4473→7245→4635→135→6
👕 Shirt68→6867→6754→5480→7264→6488→7779→7164→6483→7465→6538→386→8
🖐 Hands78→5377→5170→3985→5975→4891→6685→5775→4888→6176→5054→169→10
👖 Pants77→7776→7469→6985→7874→7491→8284→7774→7488→8075→7532→349→10
🩱 Swim & undies92→8892→8790→8495→8992→8697→9195→8992→8696→9092→8761→3423→24
👟 Feet76→4874→4663→3184→5472→4290→6183→5272→4287→5773→4454→168→10
👻 Visibility61→6059→5743→4374→6452→5284→7073→6255→5577→6654→5436→375→6
🐯 Costume50→8553→8442→7762→8741→8075→8962→8644→8371→8845→8442→384→15
👥 People72→7571→7463→6776→8469→7280→8875→8469→7278→8670→7322→4015→13
🏞️ Background71→6676→6462→5579→7068→6283→7578→6868→6281→7269→6316→1810→11
🎮 Controls22→421→920→1038→2621→744→1542→1422→445→1521→522→41→1
🎵 Music40→4038→3835→3533→3337→3737→3736→3640→4034→3437→3724→248→8
🗺️ World design51→5152→5256→5649→4953→5351→5150→5053→5354→5452→5233→3330→31
🔬 Inspection90→9090→9085→8592→9288→8895→9592→9289→8994→9488→8879→6153→45
♿ Accessibility74→7478→7765→6581→8171→7185→8481→8071→7183→8272→7232→3121→18
⚙️ Advanced25→727→921→540→1723→534→2341→1824→643→1823→527→122→2
🏞️ Background · forest20→721→821→830→621→837→731→620→730→721→820→71→1
🏞️ Background · castle9→29→29→213→39→217→214→39→214→29→29→20→0
🏞️ Background · castleroom10→210→310→214→210→217→215→210→215→210→210→11→1
🏞️ Background · bubbleroom8→217→218→239→388→239→308→398→218→358→2311→211→1
🏞️ Background · livingroom35→634→537→754→2437→763→2454→2435→653→2436→535→61→1
🏞️ Background · treeroom32→631→734→750→2334→660→2251→2432→649→2033→532→61→1
🔬 Inspection · all on19→1716→148→732→318→752→5029→289→842→408→78→73→2
🏰 castle designer1→11→11→11→11→11→11→11→11→11→11→10→0

Side panel

1280×8001366×7681366×768 at 125%1440×9001440×900 at 125%1920×10801920×1080 at 125%1920×1080 at 150%2560×1440 at 150%iPad landscape 1180×820iPad portrait 820×1180phone 390×844
🧍 Body30→1830→1630→1828→1830→1847→2746→2030→1648→2430→182→22→2
😀 Face28→627→1128→730→928→727→1823→2028→824→1928→62→22→2
👁 Eyes19→2027→2824→2027→2819→2051→3151→2923→2452→3024→203→44→4
💇 Hair30→3236→3733→3335→3630→3157→3655→3736→3753→3732→335→56→6
🦒 Neck, arms & legs33→1034→1335→1134→1233→1338→2239→2234→1339→1934→143→44→4
👕 Shirt38→3937→3838→3837→3838→3858→4258→3837→3859→4338→385→66→7
🖐 Hands54→1554→1553→1455→1554→1570→1769→1554→1570→1653→147→88→9
👖 Pants30→3131→3232→3431→3232→3454→3955→3430→3253→4032→347→88→9
🩱 Swim & undies60→3060→3159→2961→3159→3074→3272→3160→3073→3259→2919→2220→23
👟 Feet53→1354→1553→1354→1553→1369→1669→1554→1369→1653→136→77→8
👻 Visibility30→3135→3630→3135→3630→3157→3553→3530→3153→3530→314→55→6
🐯 Costume41→3742→3542→3641→3541→3762→3261→3542→3460→3642→373→104→11
👥 People19→3820→3818→3520→3819→3521→3320→3319→3820→3319→3512→1112→11
🏞️ Background17→2018→2116→1922→2517→2024→2722→2618→2123→2616→195→66→8
🎮 Controls20→722→317→1120→819→1145→1537→2421→541→1318→111→11→1
🎵 Music29→2928→2826→2624→2429→2930→3027→2730→3023→2326→264→45→5
🗺️ World design33→3338→3836→3637→3737→3743→4342→4238→3743→4332→324→46→6
🔬 Inspection63→5668→6258→5059→5262→5470→6462→5566→5966→6060→5252→4450→40
♿ Accessibility36→3037→3135→2939→3535→2938→3741→3636→3030→3635→2922→1623→18
⚙️ Advanced22→522→418→424→719→443→1739→1521→441→1621→41→12→2
🏞️ Background · forest3→104→103→94→103→95→104→83→115→103→91→11→1
🏞️ Background · castle1→21→21→31→21→21→31→31→21→31→20→00→0
🏞️ Background · castleroom2→22→21→22→22→22→32→32→32→31→20→10→1
🏞️ Background · bubbleroom2→272→242→273→242→273→443→442→263→442→271→11→1
🏞️ Background · livingroom2→82→71→92→82→92→252→282→62→281→90→10→1
🏞️ Background · treeroom2→82→72→92→82→83→252→292→62→282→90→10→1
🔬 Inspection · all on16→522→714→515→715→526→819→719→623→814→54→25→3
🏰 castle designer············
Figure 2. Empty between boxes, in %, main (0.0.405) → c10, for each tab (rows) and screen (columns); “·” where a case has no full screen. In this run (out3) 3,960 cases were measured in two jobs or more; all but 4 agree to the pixel. Those 4 are the bubble room's full screen, where the jobs differ by up to 0.02 points (672 px²): most likely because its bubbles move. Outside the bubble room the noise floor is 0.

🧍 Body, full screen, 1920×1080

🤸 the pose: 284×283↔️ facing and moving: 284×636✋ the dominant hand: 284×153🫴 holding: 284×182📏 their size: 284×123🐴 the horse: 284×175🐸 the jumps: 284×341
before: main (0.0.405)
55.4% empty · 1161×1104 px · 7 boxes · 4 columns
🤸 the pose: 284×283↔️ facing and moving: 284×636✋ the dominant hand: 284×153🫴 holding: 284×182📏 their size: 284×123🐴 the horse: 284×175🐸 the jumps: 284×341
after: c10
54.0% empty · 1161×1064 px · 7 boxes · 4 columns

🧍 Body, side panel, 1920×1080

🤸 the pose: 357×262↔️ facing and moving: 357×505✋ the dominant hand: 357×131🫴 holding: 357×182📏 their size: 357×105🐴 the horse: 357×131🐸 the jumps: 357×341
before: main (0.0.405)
47.0% empty · 1087×1102 px · 7 boxes · 3 columns
🤸 the pose: 357×262↔️ facing and moving: 357×505✋ the dominant hand: 357×131🫴 holding: 357×182📏 their size: 357×105🐴 the horse: 357×131🐸 the jumps: 357×341
after: c10
27.1% empty · 1087×798 px · 7 boxes · 3 columns

😀 Face, full screen, 1920×1080

🙂 the head: 284×396🤨 the brows: 284×121👄 the mouth: 284×390👃 the nose: 284×175👂 the ears: 284×209💥 faces it makes: 284×172
before: main (0.0.405)
65.5% empty · 1161×1104 px · 6 boxes · 4 columns
🙂 the head: 284×396🤨 the brows: 284×121👄 the mouth: 284×390👃 the nose: 284×175👂 the ears: 284×209💥 faces it makes: 284×172
after: c10
64.2% empty · 1161×1064 px · 6 boxes · 4 columns

😀 Face, side panel, 1920×1080

🙂 the head: 362×387🤨 the brows: 362×121👄 the mouth: 362×350👃 the nose: 362×175👂 the ears: 362×209💥 faces it makes: 362×146
before: main (0.0.405)
26.6% empty · 1102×662 px · 6 boxes · 3 columns
🙂 the head: 362×387🤨 the brows: 362×121👄 the mouth: 362×350👃 the nose: 362×175👂 the ears: 362×209💥 faces it makes: 362×146
after: c10
17.8% empty · 1102×594 px · 6 boxes · 3 columns

🎮 Controls, full screen, 1920×1080

🎮 the game controller: 284×1353🫧 bubbles: 284×1822🔥 fire: 284×582🏃 moving: 284×402
before: main (0.0.405)
44.1% empty · 1161×1882 px · 4 boxes · 4 columns
🎮 the game controller: 284×1353🫧 bubbles: 577×1221🔥 fire: 284×582🏃 moving: 284×402
after: c10
15.4% empty · 1161×1424 px · 4 boxes · 4 columns

🎮 Controls, side panel, 1920×1080

🎮 the game controller: 357×895🫧 bubbles: 357×1691🔥 fire: 357×451🏃 moving: 357×362
before: main (0.0.405)
45.3% empty · 1087×2118 px · 4 boxes · 3 columns
🎮 the game controller: 357×895🫧 bubbles: 722×1221🔥 fire: 357×451🏃 moving: 357×362
after: c10
15.3% empty · 1087×1662 px · 4 boxes · 3 columns

🖐 Hands, full screen, 1920×1080

🖐 both hands: 284×383
before: main (0.0.405)
91.1% empty · 1161×1104 px · 1 boxes · 4 columns
🖐 both hands: 448×358
after: c10
65.5% empty · 448×1064 px · 1 boxes · 1 columns

🖐 Hands, side panel, 1920×1080

🖐 both hands: 362×340
before: main (0.0.405)
69.6% empty · 1102×397 px · 1 boxes · 3 columns
🖐 both hands: 1102×231
after: c10
16.8% empty · 1102×298 px · 1 boxes · 3 columns

🏞️ Background · castle, full screen, 1920×1080

🗺️ the place: 1161×434🧍 the friend here: 284×809👁️ default background objects: 1161×523🪨 things to put here: 1161×206🎵 the music moves it: 284×578🏰 the castles: 1161×3859
before: main (0.0.405)
16.8% empty · 1161×6506 px · 6 boxes · 4 columns
🗺️ the place: 1161×408🧍 the friend here: 577×565🎵 the music moves it: 577×436👁️ default background objects: 1161×523🪨 things to put here: 1161×206🏰 the castles: 1161×3832
after: c10
2.1% empty · 1161×5640 px · 6 boxes · 2 columns

🏞️ Background · castle, side panel, 1920×1080

🗺️ the place: 1087×329🧍 the friend here: 1087×479👁️ default background objects: 1087×176🪨 things to put here: 1087×206🎵 the music moves it: 1087×251🏰 the castles: 1087×3947
before: main (0.0.405)
1.2% empty · 1087×5480 px · 6 boxes
🗺️ the place: 1087×303🧍 the friend here: 540×584🎵 the music moves it: 540×436👁️ default background objects: 1087×176🪨 things to put here: 1087×206🏰 the castles: 1087×3919
after: c10
2.8% empty · 1087×5325 px · 6 boxes · 2 columns
Figure 3. The boxes as measured, drawn to scale from the rectangles the check recorded; red is the panel behind them. Before and after, at 1920×1080. Loose controls and text outside boxes are not drawn, so the red here is a little more than the measure counts.

😀 Face, full screen, 1920×1080

before: main (0.0.405)
before: main (0.0.405)
after: c10
after: c10

🎮 Controls, full screen, 1920×1080

before: main (0.0.405)
before: main (0.0.405)
after: c10
after: c10

🧍 Body, side panel, 1366×768

0.0.204
0.0.204
before: main (0.0.405)
before: main (0.0.405)
after: c10
after: c10

😀 Face, full screen, iPad portrait

before: main (0.0.405)
before: main (0.0.405)
after: c10
after: c10
Figure 4. The first window, as Chrome on GitHub drew it in job 1 (WebP at CSS pixels; the runner's fonts).

The side panel and the zoom

The side panel's boxes go to two columns at 568 px. At the screens measured the side panel is this wide, in CSS pixels (😀 Face, main), and Face's boxes stand in this many columns:

0 px400 px800 px1200 px568 px: two columns from here1280×800657 px · 2 col · 28.2% → 6.0%1280×800: the side panel is 657 CSS px wide, 😀 Face in 2 columns1366×768755 px · 2 col · 27.3% → 10.7%1366×768: the side panel is 755 CSS px wide, 😀 Face in 2 columns1366×768 at 125%591 px · 2 col · 27.7% → 7.3%1366×768 at 125%: the side panel is 591 CSS px wide, 😀 Face in 2 columns1440×900799 px · 2 col · 29.5% → 8.5%1440×900: the side panel is 799 CSS px wide, 😀 Face in 2 columns1440×900 at 125%627 px · 2 col · 28.2% → 6.5%1440×900 at 125%: the side panel is 627 CSS px wide, 😀 Face in 2 columns1920×10801102 px · 3 col · 26.6% → 17.8%1920×1080: the side panel is 1102 CSS px wide, 😀 Face in 3 columns1920×1080 at 125%857 px · 3 col · 23.2% → 19.7%1920×1080 at 125%: the side panel is 857 CSS px wide, 😀 Face in 3 columns1920×1080 at 150%703 px · 2 col · 27.9% → 8.1%1920×1080 at 150%: the side panel is 703 CSS px wide, 😀 Face in 2 columns2560×1440 at 150%960 px · 3 col · 23.7% → 18.8%2560×1440 at 150%: the side panel is 960 CSS px wide, 😀 Face in 3 columnsiPad landscape 1180×820594 px · 2 col · 28.1% → 6.5%iPad landscape 1180×820: the side panel is 594 CSS px wide, 😀 Face in 2 columnsiPad portrait 820×1180292 px · 1 col · 1.9% → 2.4%iPad portrait 820×1180: the side panel is 292 CSS px wide, 😀 Face in 1 columnsphone 390×844335 px · 1 col · 2.1% → 2.4%phone 390×844: the side panel is 335 CSS px wide, 😀 Face in 1 columns
The side panel's width per screen and Face's columns, main, with its empty share main → c10.

😀 Face, side panel, 1920×1080

🙂 the head: 362×387🤨 the brows: 362×121👄 the mouth: 362×350👃 the nose: 362×175👂 the ears: 362×209💥 faces it makes: 362×146
before
26.6% empty · 1102×662 px · 6 boxes · 3 columns
🙂 the head: 362×387🤨 the brows: 362×121👄 the mouth: 362×350👃 the nose: 362×175👂 the ears: 362×209💥 faces it makes: 362×146
after
17.8% empty · 1102×594 px · 6 boxes · 3 columns

😀 Face, side panel, 1920×1080 at 125%

🙂 the head: 280×396🤨 the brows: 280×121👄 the mouth: 280×390👃 the nose: 280×175👂 the ears: 280×209💥 faces it makes: 280×173
before
23.2% empty · 857×671 px · 6 boxes · 3 columns
🙂 the head: 280×396🤨 the brows: 280×121👄 the mouth: 280×390👃 the nose: 280×175👂 the ears: 280×209💥 faces it makes: 280×173
after
19.7% empty · 857×642 px · 6 boxes · 3 columns

😀 Face, side panel, 1920×1080 at 150%

🙂 the head: 348×387🤨 the brows: 348×121👄 the mouth: 348×350👃 the nose: 348×175👂 the ears: 348×209💥 faces it makes: 348×155
before
27.9% empty · 703×1020 px · 6 boxes · 2 columns
🙂 the head: 348×387🤨 the brows: 348×121👄 the mouth: 348×350👃 the nose: 348×175👂 the ears: 348×209💥 faces it makes: 348×155
after
8.1% empty · 703×802 px · 6 boxes · 2 columns
Figure 8. 😀 Face in the side panel at 1920×1080, at 100%, 125% and 150%: the same tab on one screen, three zooms.

Full screen: empty columns and the game's card

In the generic full screen the boxes' grid kept a column per 287 px whether it had boxes for them or not; the game's card on the right kept its picture's element at a fixed size, letterboxed. Figure 6 is the drawing's size in 😀 Face's full screen.

main (0.0.405)after: c101280×800437×588 drawn in 437×705 · letterbox 50,968 px² · under the card 1,163 px²1280×800, main (0.0.405): the drawing 437×588 in an element 437×705437×588 drawn in 437×590 · letterbox 765 px² · under the card 51,826 px²1280×800, c10: the drawing 437×588 in an element 437×5901366×768469×632 drawn in 469×673 · letterbox 19,101 px² · under the card 1,250 px²1366×768, main (0.0.405): the drawing 469×632 in an element 469×673469×632 drawn in 469×633 · letterbox 480 px² · under the card 20,179 px²1366×768, c10: the drawing 469×632 in an element 469×6331366×768 at 125%349×470 drawn in 349×473 · letterbox 950 px² · under the card 17,972 px²1366×768 at 125%, main (0.0.405): the drawing 349×470 in an element 349×473365×492 drawn in 365×493 · letterbox 424 px² · under the card 10,582 px²1366×768 at 125%, c10: the drawing 365×492 in an element 365×4931440×900497×670 drawn in 497×805 · letterbox 67,057 px² · under the card 1,324 px²1440×900, main (0.0.405): the drawing 497×670 in an element 497×805497×670 drawn in 497×671 · letterbox 642 px² · under the card 68,504 px²1440×900, c10: the drawing 497×670 in an element 497×6711440×900 at 125%388×523 drawn in 388×579 · letterbox 21,838 px² · under the card 19,063 px²1440×900 at 125%, main (0.0.405): the drawing 388×523 in an element 388×579388×523 drawn in 388×524 · letterbox 503 px² · under the card 40,617 px²1440×900 at 125%, c10: the drawing 388×523 in an element 388×5241920×1080680×916 drawn in 680×1012 · letterbox 65,281 px² · under the card 0 px²1920×1080, main (0.0.405): the drawing 680×916 in an element 680×1012680×916 drawn in 680×917 · letterbox 705 px² · under the card 48,301 px²1920×1080, c10: the drawing 680×916 in an element 680×9171920×1080 at 125%534×719 drawn in 534×769 · letterbox 26,513 px² · under the card 1,420 px²1920×1080 at 125%, main (0.0.405): the drawing 534×719 in an element 534×769534×719 drawn in 534×720 · letterbox 356 px² · under the card 27,774 px²1920×1080 at 125%, c10: the drawing 534×719 in an element 534×7201920×1080 at 150%428×577 drawn in 428×579 · letterbox 972 px² · under the card 21,428 px²1920×1080 at 150%, main (0.0.405): the drawing 428×577 in an element 428×579437×588 drawn in 437×590 · letterbox 765 px² · under the card 16,582 px²1920×1080 at 150%, c10: the drawing 437×588 in an element 437×5902560×1440 at 150%599×807 drawn in 599×892 · letterbox 50,959 px² · under the card 0 px²2560×1440 at 150%, main (0.0.405): the drawing 599×807 in an element 599×892599×807 drawn in 599×808 · letterbox 659 px² · under the card 35,952 px²2560×1440 at 150%, c10: the drawing 599×807 in an element 599×808iPad landscape 1180×820399×537 drawn in 399×609 · letterbox 28,679 px² · under the card 19,580 px²iPad landscape 1180×820, main (0.0.405): the drawing 399×537 in an element 399×609399×537 drawn in 399×539 · letterbox 780 px² · under the card 47,758 px²iPad landscape 1180×820, c10: the drawing 399×537 in an element 399×539
Figure 6. The game's drawing in 😀 Face's full screen: drawn size in its element, the letterbox around it, and the empty area under the card, main and c10. The default split itself waits for Matthew (What next, step 1).

Inside the boxes

summed over every tab and place, main (0.0.405) → c101920×1080 full1920×1080 side1366×768 sideiPad portrait 820×1180 full
empty inside boxes (mean)40.4% → 43.8%41.6% → 46.8%38.4% → 41.7%40.0% → 43.4%
labels on a line of their own155 → 134126 → 105126 → 120155 → 149
of them, chips that would fit beside32 → 3245 → 3935 → 3435 → 40
chip rows ending in a single chip76 → 8129 → 3648 → 6591 → 91
rows of 12+ chips on 3+ lines23 → 1417 → 830 → 2135 → 26
Figure 7. Counts inside the boxes, summed over every tab and place at four screens, main → c10.

Each commit, measured

The branch knoll-521, commit by commit; each bar is the change in the mean empty share between boxes from the commit before (main for the first). The tabs reached are those with a case that moved by half a point or more.

1920×1080 full1920×1080 side1366×768 sideiPad portrait 820×1180 fullc1+0.0c1: +0.0 points at iPad portrait 820×1180+0.0c1: +0.0 points at iPad portrait 820×1180+0.0c1: +0.0 points at iPad portrait 820×1180+0.0c1: +0.0 points at iPad portrait 820×1180c2+0.8c2: +0.8 points at iPad portrait 820×1180+6.8c2: +6.8 points at iPad portrait 820×1180+4.1c2: +4.1 points at iPad portrait 820×1180-0.2c2: -0.2 points at iPad portrait 820×1180c3-3.7c3: -3.7 points at iPad portrait 820×1180-9.1c3: -9.1 points at iPad portrait 820×1180-4.2c3: -4.2 points at iPad portrait 820×1180-3.9c3: -3.9 points at iPad portrait 820×1180c4-2.2c4: -2.2 points at iPad portrait 820×1180-0.8c4: -0.8 points at iPad portrait 820×1180+0.0c4: +0.0 points at iPad portrait 820×1180+0.0c4: +0.0 points at iPad portrait 820×1180c5-3.0c5: -3.0 points at iPad portrait 820×1180-5.7c5: -5.7 points at iPad portrait 820×1180-4.6c5: -4.6 points at iPad portrait 820×1180-3.9c5: -3.9 points at iPad portrait 820×1180c6+0.0c6: +0.0 points at iPad portrait 820×1180+0.0c6: +0.0 points at iPad portrait 820×1180+0.0c6: +0.0 points at iPad portrait 820×1180+0.0c6: +0.0 points at iPad portrait 820×1180c7-0.3c7: -0.3 points at iPad portrait 820×1180-0.0c7: -0.0 points at iPad portrait 820×1180+0.0c7: +0.0 points at iPad portrait 820×1180-0.1c7: -0.1 points at iPad portrait 820×1180c8-0.9c8: -0.9 points at iPad portrait 820×1180-2.3c8: -2.3 points at iPad portrait 820×1180-2.0c8: -2.0 points at iPad portrait 820×1180-1.8c8: -1.8 points at iPad portrait 820×1180c9+0.3c9: +0.3 points at iPad portrait 820×1180+0.5c9: +0.5 points at iPad portrait 820×1180+0.7c9: +0.7 points at iPad portrait 820×1180+0.7c9: +0.7 points at iPad portrait 820×1180c10-0.0c10: -0.0 points at iPad portrait 820×1180+0.0c10: +0.0 points at iPad portrait 820×1180+0.0c10: +0.0 points at iPad portrait 820×1180-0.0c10: -0.0 points at iPad portrait 820×1180
Figure 5. What each commit changed, in points of empty share; green is less empty.
committabsreached
c1e29380c1cbDress Up: measure the whitespace of every panel, at common screens and zooms (ticket 521)0none
c2c60a9f3195Dress Up: four panel bugs the whitespace audit found (ticket 521)18♿ Accessibility, 🏞️ Background · bubbleroom, 🏞️ Background · castle, 🏞️ Background · castleroom, 🏞️ Background · forest, 🏞️ Background · livingroom, 🏞️ Background · treeroom, 🐯 Costume, 👁 Eyes, 👕 Shirt, 👥 People, 👻 Visibility, 💇 Hair, 🔬 Inspection, 🔬 Inspection · all on, 😀 Face, 🦒 Neck, arms & legs, 🧍 Body
c3162d9bd340Dress Up: no empty columns beside the boxes (ticket 521)9🏞️ Background, 🐯 Costume, 👕 Shirt, 👖 Pants, 👟 Feet, 👻 Visibility, 💇 Hair, 🖐 Hands, 🩱 Swim & undies
c419ece40191Dress Up: no empty cell in the background designer, and the picture fills the card --n leaves (ticket 521)6🏞️ Background · bubbleroom, 🏞️ Background · castle, 🏞️ Background · castleroom, 🏞️ Background · forest, 🏞️ Background · livingroom, 🏞️ Background · treeroom
c58b35cb8d61Dress Up: the boxes packed, no hole under a short one (ticket 521)21⚙️ Advanced, 🎮 Controls, 🏞️ Background, 🏞️ Background · bubbleroom, 🏞️ Background · castle, 🏞️ Background · castleroom, 🏞️ Background · forest, 🏞️ Background · livingroom, 🏞️ Background · treeroom, 🐯 Costume, 👁 Eyes, 👕 Shirt, 👖 Pants, 👟 Feet, 👻 Visibility, 💇 Hair, 🖐 Hands, 😀 Face, 🦒 Neck, arms & legs, 🧍 Body, 🩱 Swim & undies
c620a2e5ee36Dress Up: a short chip row beside its label in a wide box (ticket 521)0none
c72d0e737afdDress Up: the chip-row rule without :has() inside :has(), and the check's exact box width (ticket 521)12🏞️ Background · castleroom, 🏞️ Background · forest, 🏞️ Background · treeroom, 👁 Eyes, 👕 Shirt, 👖 Pants, 👟 Feet, 👻 Visibility, 💇 Hair, 🖐 Hands, 😀 Face, 🧍 Body
c86f501c7bfbDress Up: a long choice is one chip, and no dropdowns: ticket 459's chip box (ticket 521)3🏞️ Background · livingroom, 🏞️ Background · treeroom, 🐯 Costume
c9c1047ac0bfDress Up: 👥 People in boxes, as every tab (ticket 521)1👥 People
c1051c061686fDress Up: reflect's follow chip names a part when the followed one is gone (ticket 521)0none

The largest moves, case by case (a tab or place, at one screen, in one mode), against the commit before:

Not every commit empties less everywhere. The commit that gave 🏞️ Background's side panel a grid with gaps (the fourth of the four bugs) made the side panel of every place measured both longer and much emptier, as the list above shows; most likely because, two to a row, a short box stands beside a long one, the hole that packing the boxes is meant to fill.

Report 5's rules, amended

Found on the way

What next

  1. 1. The default split (c4's card): Show Matthew before and after pictures of the full screen with the game's card filling its column, and ask for his word on the default split, before that commit is built (ticket ^ticket(521)).
  2. 2. The PR: Run all the checks on knoll-521, then open the PR with this report's before and after; merging and releasing wait for Matthew.
  3. 3. The tab strip: Measure and shorten the 20-tab strip, 3 to 5 lines tall in the side panel at the screens measured (the check's tabStrip numbers).
  4. 4. 🎵 Music onto the box tokens: Move Music's own 190 px and 330 px grid onto the shared box tokens, and the nine different minimum column widths onto one.
  5. 5. The 56 px bar: Name the 56 px bar once on :root, where it is written by hand in 6 places.
  6. 6. 📰 What's new and the HUD: Fit what's new (55vh tall in one column) and the heads-up display into boxes, the two panels not yet knolled.
  7. 7. World design's borders and the place picker: Take World design's dotted borders away (rule 2) and make the place picker a chip box.
  8. 8. A still bubble room: Hold the bubble room still while the check measures it (holdStill), so its full screen measures the same in every job.
  9. 9. Firefox, the iPad and the kids' fonts: Measure in Firefox and on the iPad itself, with the fonts the kids' computers have; GitHub's runner has DejaVu Sans and Noto Color Emoji.
  10. 10. Report 5's dated note: When this report is published, add a dated note to ^du_report(5) pointing here.

How this was put together

Written on 2026-10-21 by Claude, for Matthew, from ^ticket(521). The panels were read in the code at main and counted in node [6]; the space was measured by knoll521 [3] on GitHub, runs out (3 jobs, builds v204, main, c1), out2 (3 jobs, builds v204, main, c1, c2, c3, c4), out3 (3 jobs, builds v204, main, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10); this page is drawn from out3. Nothing was measured on the laptop, and no browser drew this page while it was made: it was built and checked with python (well-formed, every figure drawn, every link a file).

The data: data/report.json, data/whitespace.json (every case of the run: its share, holes, boxes, the picture's size; and each earlier run's means and noise), data/counts.json, all embedded in this page; on GitHub, data and drivers. drivers/gather.py reads the runs, drivers/build.py draws the page. The picture at the top of the series index is the castle with the friend, from the picture archive [7], the place with the longest Background panel (69 rows).

  1. ^ticket(521) on the dashboard
  2. ^du_report(5), Always Be Knolling
  3. tools/checks/knoll521.mjs (this report's copy, drivers/knoll521.mjs)
  4. the workflow on the branch diag-521 (drivers/knoll521.yml)
  5. the branch knoll-521
  6. drivers/count_tabs.mjs, the panels counted in node
  7. the picture archive: the castle with the friend, as its run of 0.0.347 drew it