A new look. Every material now has a surface of its own, drawn through cards, headers, menus, dialogs and the side panel, and the themes were redrawn with it. New backdrops and patterns fit each theme. Aurora Glass is the default theme, and every existing install moves onto it once, with a dialog that offers the way back. Next to it: a Classic ThinkDashboard theme, a redesigned cheat sheet, a two-column bookmark form with a live preview, and a round of fixes in Config, the dashboard and Glances.
Look
- new — signature material style. Each of the twelve materials (glass, paper, enamel, brushed metal, neon, ink, terminal and the rest) draws its own surface, category header and widget header, and every header keeps the
//. Paper columns read as an index card, enamel as a glazed tile, neon with a glowing top edge, brushed metal and glass with a shine per column. Theme Studio → Surface → Material style keeps Classic as a choice for the flat, old look (material_style.go,theme-signature.css). - new — Aurora Glass is the default theme. A fresh install starts on Aurora Glass, on the dark or light half.
- new — every install moves onto Aurora Glass once. The themes were redrawn for the new look, so keeping the old drawing beside it would mean two of everything. The move keeps the dark or light half you were on, and
lookMigrationremembers the theme you had. Bookmarks, categories, settings and own themes stay as they were. Covered byaurora_glass_migration_test.go. - new — a dialog explains the move. It shows the theme you had next to the one you have now, offers Go back to {theme} and Open the Theme Studio, and appears once, before any corner card (
look-migration-notice.js). Opening the studio from it waits for the studio to load first. - new — backdrops chosen per theme. Each material has a pool of its own and each theme picks from it. Eighteen patterns replace the colour washes, with new recipes such as haze, veil, spotlight, silk, caustics, dawn, linen, dotgrid, ruled and grain, a blue sea for Ocean, bricks for Concrete, a small honeycomb for Bokeh, and rack and terminal backdrops for the four Unraid themes. Hexagons, chevron, prism, sunset, dunes, mountains and blueprint are drawn finer and the loud ones calmed. Every recipe carries the colour of its theme; a dark page carries more of it.
- new — a quiet centre. A Quiet centre slider fades the backdrop behind the bookmarks. It is kept per theme, with the install-wide value as the fallback.
- new — neutrals on one ladder. The eight neutral themes (Neutral, Stone, Gray, Zinc, Slate, Chalk, Concrete, Black) sit on one lightness ladder, each with a material and a backdrop of its own. Accent of the neutrals picks one of six colours for all of them, or the theme's own (
neutral_accent.go). Covered bytests/neutral-accent.spec.js. - new — ThinkDashboard Classic. The ThinkDashboard theme from v1.0.0 returns with its colours and grid of dots; the current one is now ThinkDashboard Modern. Covered by
tests/theme-thinkdashboard-classic.spec.js. - new — Unraid themes redrawn. Card panels and server colours, a calmer band, and old Unraid copies move to the new card drawing.
- new — Gloss Chrome and Gloss Amber on glass, like the other lacquer themes; Gloss Chrome keeps its plain grey band. 65 dark themes move to colour recipes and textures get their colour back.
- fix — the Theme Studio keeps your place. A picked backdrop keeps the focus and the scroll; theme card names keep their width beside the pills.
- removed — the Berry, theme browser and clock and weather corner cards. Berry is no longer the default, and the dialog above covers the new look.
Overlays
- new — overlays, views and Config take the look of the material, with four levels of elevation. Layers take the light of their material, ink layers carry a bar on the top edge, neon layers glow, and small layers are closed per material.
- new — the action bar is a handle on the screen edge, in the surface of the material, with the mark of the head and hairlines between the groups.
- new — the cheat sheet has a search field, topics in columns, and a dock that shows the keys of the row you pick and follows focus. Rows carry their keys for screen readers, and focus looks different from selected. Cards stay whole in Safari.
- new — add and edit bookmark in two columns with a live preview. Two columns only with a fine pointer, tab order runs down each column, and the label is not read twice. The icon picker opens in the page, so the form no longer clips it.
- new — the preview card shows the picture on the left; cards without a scrim get a closed fill.
- new — Save this link, What's New, views and Config lie on the surface of the material: address, preview, choices, blocks, chips, summaries, cards, controls and table heads.
- new — the popover arrow points at the control that was pressed, follows it when hidden and shown, and clears when the popover hides.
- fix — layers respect your settings. Reduced transparency closes them, effects off is flat, animations off stays off, and the toast and preview have no blur. Shadows follow the light of the page.
- fix — bookmark rows take one inset from one variable, so icons line up with and without a ping and each layout keeps its own padding.
- fix — selects, lists and tutorial dots stay readable on the layers; the active tutorial dot is lit, and quick add and the palette show their focus.
- fix — the Bookmarks view has no second blur layer under the plate, and its rail is lit like the other views. The Config bookmarks preview scrolls with the page.
Keyboard
- new —
Shift+Gopens Glances from every view. In lists, the last row is nowEndinstead ofG.
Config
-
fix — the Config band keeps filter and count in the same place on every tab.
-
fix — taking a tag off a bookmark no longer undoes a settings save.
refuseRemovedTags(tag_refusals.go) read the settings, added the refusal and wrote them all back withoutsettingsMu, so a Config save landing in between was lost or put back. It now holds the same lock asSaveSettings.TestRefusalWaitsForTheSettingsLockfails without it. -
fix —
POST /api/pagesrefuses a page id below 1. A 0 or a negative id was written asbookmarks-0.json, which no page list reads back, and stayed inpages.json. Now400 Invalid page ID. Covered byTestSavePagesRefusesAnIDBelowOne. -
fix — a page delete that fails no longer leaves a trash entry.
DeletePagetrashes the page before removing its file; when the removal failed, the entry stayed as a copy of a live page whose Restore answered 409. The entry is now taken back out. Covered byTestDeletePageThatFailsLeavesNoTrashEntry. -
fix — a duplicate whose categories fail leaves no empty page behind.
duplicatePagesaved the copy first and, when the categories write failed, showed "Could not duplicate this page" over a page that did exist; a retry made a second one.discardDuplicatedPagedeletes the copy and drops its trash entry. -
fix — a category deleted on another device stays deleted. The categories editor sends the whole list, and
addCategoriesMadeElsewhereonly added what was new on the server, so the next edit here put a category deleted elsewhere back._catOnServerremembers what the server last had; a category gone from it since leaves the list too. -
fix — category saves for one page go out one at a time. Two quick toggles sent two whole lists at once and the older could land last, so the server kept the first click while the button showed the second.
saveCategoriesnow queues per page. The last three are covered bytests/config-structure-review-fixes.spec.js, each failing without its fix. -
fix — a settings save that leaves keys out of the backdrop tuning keeps their defaults.
SaveSettingsdecoded a missingcalm,scaleorbrightnessas 0 and clamped it, so a tab still running the page from before the quiet centre stored no quiet centre at all. It now fills the absent keys as a settings file does (fillMissingBackdropTuning); an explicit 0 stays. Covered byTestSaveSettingsFillsMissingBackdropTuning. -
fix — restoring a backup with many local captures no longer runs the server out of memory.
stagedFilesFromZipReader(auto_backup.go) read every capture underarchives/into memory before the restore applied, and captures are left out of the 1 GB total, so a backup with a few hundred of them needed gigabytes of RAM. A capture is now copied out of the archive when the staging directory is written, one at a time, and still held to the 64 MB entry limit there (copyImportEntry,backup.go). Covered byTestRestoreReadsCapturesWhenWritingThemandTestRestoreHoldsCapturesToTheEntryLimit; the first fails without it. -
new — Overview → New in nextDash lists the features since v1.20.3. Eleven items, newest first: every theme redrawn, 75 backdrops and the quiet centre, Signature or Classic, the neutrals with one accent and ThinkDashboard Classic, the searchable cheat sheet, the two-column bookmark form, the Glances page, widget and insights, domain expiry and Add new bookmark in a category menu. Each has a button to where it lives. The texts are in
static/data/overview-features.jsonand the 55 keys underconfig.overviewNewFeature*in all six languages. v1.21.2 and v1.21.3 are fixes held back from What's new and have no item. -
new — Overview → Version links the manual to nextdash.cc/docs. "You can find the full changelog here and the manual here" sent the manual to
MANUAL.mdon GitHub; the changelog link stays there. -
fix — a repaint from another section waits for that section's file. Statistics, Help, About, Overview, Logs, Data & backups (trash, webhooks) and Appearance repainted when
this.sectionsaid they were open, even while the file that draws them was still loading, so a late answer could paint into a body that was not there yet. Each now asksinSection(id), which is true only when the section is open and its file has run (dashboard-config.js). -
new — the section planner reads those gates.
scripts/config-section-plan.mjstreatsinSection()like the olderthis.section ===checks when it works out which methods belong to which section, so the split ofdashboard-config.jsstill comes out right;tests/config-section-plan.test.mjscovers it. -
new — Data & backups and Appearance load from files of their own. About 2,900 and 2,400 lines of
dashboard-config.jsmove todashboard-config-data-backups.jsanddashboard-config-appearance.js, fetched the first time the section is opened, like Statistics, Glances and Inbox before them. Config opens with less script to read, and nothing about either section changes. The specs that reach into these sections wait for their file first (config-archive-keys-stay,config-local-archives,config-silent-data-loss,config-import-roundtrip,category-header-theme,dashboard-category-spacing,dashboard-column-spacing,theme-choices-hold). -
fix — a section opened from inside Config waits for its file. With Config already open, a jump to another section (from the command palette, or the Appearance tab a setting names) switched the heading before the section's file had landed, so
render()threw and the old body stayed under the new heading. The jump now waits for the file and then draws (dashboard-command-palette-config.spec.js). -
new — the section planner knows the lazy files.
scripts/config-section-plan.mjssees callers outside a section and the section files that already exist, and the extractor ends a static array at its semicolon (extract-config-section.mjs,lib/config-members.mjs), so the next sections can be split off the same way (tests/config-section-plan.test.mjs). -
fix — Export CSV and the imports work before Data & backups has been opened. Since that section moved to its own file, the CSV export of ticked rows (dashboard and Bookmarks view), the browser import and the CSV import called functions that file had not loaded yet and did nothing. Each now loads the file first (
dashboard-config.js). -
fix — Home and End on a tab or a chart.
Endbecame "the last row" and "the last section" in v1.22.0, and Config's key handler took it from a focused tab and from a chart's day read-out. Tabs go to the first and last tab again, and a chart to its first and last day. -
fix — a focused block title shows it. Under Signature the title's tint was cleared with the rest of its background, so moving through blocks with the keyboard showed no mark on the title that had the focus (
theme-signature.css). -
fix — Config tables. A name in a Structure, Pages or Finders table read as an input box at rest under Signature, and the collection whose editor is open lost its accent bar and line (
theme-overlays.css). -
fix — Collection health fits a 560 px window again. The modal's chrome is taller since the overlays took the material's surface, leaving a few pixels of scroll at 1000 × 560. A fifth step takes the air out of the cards (
dashboard-bookmarks-health-modal.js).
Dashboard
- fix — a category save keeps the default category's name in every language. A new page's default category is stored as the key
dashboard.others; the dashboard held it translated ("Others", "Overig"), and a category drag or resize sent that back, so the name stayed in the language it was saved in.clonePageCategorieskeeps the stored name next to the drawn one andDashboardData.storedCategory()puts it back on save, unless the category was renamed since (dashboard-render-core.js,dashboard-persistence.js,dashboard-block-page-move.js). Covered bytests/dashboard-review-fixes.spec.js, which fails without it. - fix — the first settings change made on another device now shows up. The revision poll only noticed a settings change against a settings revision it already held, and nothing set one at load, so the first change after opening the dashboard was taken as the starting point.
fetchAndStoreDataRevisionseeds it. - fix — revision checks no longer run side by side. Focus and
visibilitychangewere throttled to one call per 500 ms, and on a slow server a full settings refresh outlasted that.refreshIfDataRevisionChangednow hands a second caller the check already running, and the listener catches its rejection. These two are covered by the same spec, each failing without its fix. - removed — the one-time key hint along the bottom. After the quick start,
> search · : commands · ? finders · + bookmarkwiped in from left to right under the grid, once per browser. It no longer fits a dashboard whose actions stand in the header or on the edge. Gone:#search-flow-hint,initializeSearchFlowHintand itsinitializeButtonTipsRotationentry point, and the.sfh-segstyles. An empty.button-containernow drops its plate through:empty(search.css). - fix — the header falls back to four page tabs, like the server.
pageTabCapused 5 whenmaxPageTabswas missing, while the server default and the command palette use 4.tests/dashboard-page-strip.spec.jsnow holds the default to four. - fix — a client that refuses gzip gets no gzip.
clientAcceptsGzip(gzip.go) looked only at the name inAccept-Encoding, sogzip;q=0, which means "not gzip", was answered compressed. A weight of 0 is now read as a no.TestGzipRefusedWithZeroWeightfails without it.
Theme studio
- fix — Cancel while Apply is saving waits for the save. Escape, the ×, Cancel or a click beside the panel during Apply put the old look on screen while the save stored the new one, and the next unrelated save sent the old one back; a second Apply posted the colours twice.
theme-browser.jsnow ignores every way out while Apply runs. - fix — a second Shift+A while the studio loads opens the same one.
openLookStudiocheckedisOpenbefore its loads, so a second call took a new snapshot over the first: Cancel no longer went back to the look from before, and config did not come back on close. One opening runs at a time (_lookStudioOpening), and the check runs again after the loads. - fix — a settings change from another device no longer wipes the preview.
refreshIfDataRevisionChangedloaded the settings under the open studio, which replaced the previewed look with the stored one. It now leaves the settings revision as it was while the studio is open, so the first poll after it closes applies the change. - fix — Reset all also resets the rest of the Surface tab.
lookDefaults()(look_defaults.go) left outcategorySurface,widgetSurface,widgetOpacity,materialStyleandneutralAccent, and a forced value of those held for every theme after Reset all. Covered byTestLookDefaultsCoverTheSurfaceTab. - fix — a theme's own look clears the glass and backdrop of the look before. A theme's look is stored without the parts that follow the theme, and applying it left those as they were, so after Neon the theme's cards kept Neon's edge and see-through glass.
themeLookAnswersfills the left-out backdrop, depth and glass with "follow the theme". - fix — a studio with nothing to show hands back to config. When
ThemeBrowser.openhad nothing to draw, config had already stepped aside and never came back. Covered, with the four above, bytests/look-studio-edge-cases.spec.js. - fix — Material style no longer snaps back, and no longer picks Classic for every theme. With "Use these for every theme" off, the select offered "Follow the theme" and read a per-theme answer that nothing wrote; picking it stored Classic install-wide and the select showed it again on the next paint. It is install-wide in every scope now, as the setting is (
materialStyleValue,dashboard-config-look.js). Covered bytests/appearance-background-surface.spec.js. - fix — a look keeps the theme's own quiet centre. The quiet centre is a theme's own answer in theme scope, so Save as theme with its look left it out, and a look applied over it was outranked by it.
currentLookAnswersnow saves the one shown andapplyLookAnswerstakes the theme's own over. Covered bytests/look-studio-calm.spec.js.
Inbox
- fix — Undo after pasting the same link again keeps one row. With "no duplicate URLs" on,
RestoreInboxLinkEvicting(inbox.go) only compared ids, so deleting a link, pasting its URL again and then pressing Undo left two rows with the same address. It now answers with the item already there when the setting is on;PutInboxItempasses the setting in. Covered byTestUndoKeepsOneRowWhenTheURLCameBack. - fix — cancelling Promote on a found app leaves no empty category.
discoveryCategoryFormakes the category the app's kind names so the form can preselect it, and closing the form without saving left it on the dashboard. The category is remembered (_pendingDiscoveryCategory) andreleaseDiscoveryCategorytakes it away again once the form closes with nothing in it, without a trash entry (removeEmptyCategoryindashboard-structure-create.js). Covered intests/app-discovery.spec.js. - fix — adding a found app no longer undoes a category edit made at the same time.
addDiscoveredBookmarks(discovery.go) read the page's categories and saved them back later, so a rename or delete in Config in between was written back as it was. The read and the save now happen under one store lock, through the newMutateCategoriesByPage(models.go).TestMutateCategoriesByPageHoldsTheLockFromReadToSavefails without it.
Containers
- fix — Remove stopped needs the names it was asked about.
pruneStoppedContainers(docker_disk.go) treated a request withoutnamesas "every stopped container", so a call with no body removed them all. It now answers400 names-required; the Disk tab always sends the list its question showed.TestDockerPruneStoppedContainerscovers both. - fix — a usage alert that ends without "back to normal" stops its reminders.
checkDockerUsage(docker_usage_alerts.go) forgot a high-CPU or memory spell when the container stopped, was muted or usage alerts were switched off, but sent no "up", so the reminder register kept it open: up to three "still has a problem" reminders for a load that was gone, and a later spell found it open and got none of its own. Those spells now leave the register throughcloseOpenAlerts(notify_quiet.go).TestDockerUsageSpellEndedSilentlyLeavesTheRegisterfails without it.
Glances
- fix — a host removed and added again under the same name is started once. Every host loop reported its end on
exited, also a loop that was stopped, and the sampler then stopped whatever ran under that id: the new loop, which reported its own end, and so on without stopping, each round a beat that recorded the host as down. A stopped loop now reports nothing (StartGlancesSampler,glances_history.go).TestGlancesReaddedHostStartsOncefails without it. - fix — a new disk or sensor gets a graph on a machine that has filled its series. The machine's own series (disks, interfaces, temperatures, mounts) had a limit of 96 and never gave a place back, so a disk renamed at a reboot or a sensor that left held its slot for good and anything new was silently not recorded.
roomFornow drops the one that has been silent longest once it has been silent a day, as processes and containers already did.TestGlancesSilentMachineSeriesMakeRoomfails without it. - fix — Insights weighs the load against every processor. The core count was the number of
core:*series, which stops at 32, so on a bigger machine a load of 40 counted as over the cores. The sampler keeps the count the host reports (glancesHost.cores) andglancesComputeLoaduses it.TestGlancesLoadCountsEveryCorefails without it. - fix — the last beat of a removed host does not bring it back.
glancesNotifyandglancesSlowReadslooked the host up again by id, which made a new one for a host removed in between, and a host added again under that name inherited its notice cooldown. Both now take the beat's own host.TestGlancesNoticeOfARemovedHostMakesNoNewOnefails without it. - fix — Insights gives the real length of an outage still going on. The availability note counted an ongoing outage but added nothing for it, so a host down for two hours read "1 min in all", and a past outage that began before the range counted in full. Each outage now counts from the start of the range to its end, and one still going on to now (
dashboard-glances-insights.js). Covered intests/dashboard-glances-view.spec.js.
Domains
- fix — with IANA unreachable, domain lookups no longer ask for the server list each time. A failed refresh of the RDAP bootstrap list kept the old one but not its age, so every lookup asked again and waited out the ten-second timeout under the client's lock. The old list now serves another hour first (
serverFor,health_domain.go).TestRDAPBootstrapFailureIsNotRetriedPerLookupfails without it.
Docs
- docs —
MANUAL.mdfollows the new look. A new chapter, 16A The new look, says what changed against the old design and why, that every existing install moved onto Aurora Glass once, how the new and changed backdrops work, and three ways back to the old look (Go back to ‹theme› in the dialog, the theme studio, or Material style → Classic). §16 has the 190+ families, the 75 backdrops, Material style, the accent of the neutrals and Quiet centre. The cheat sheet, the preview card, the action bar, the Unraid themes, the Glances load, the Config band, the icon picker, the two-column bookmark form and the keys (Shift+G,End,gchords) are described as they work now. - docs — all 131 screenshots in
MANUAL.mdare taken again in Aurora Glass dark, five new ones for 16A, three for Collection health and one for the container timeline. They run over the demo data the server seeds itself (NEXTDASH_DEMO=1, now 101 links with favicons and previews), never overdata-demo. The dashboard shows the health, Jellyfin and Glances tiles; the Jellyfin titles and posters come fromtests/helpers/media-mock.jsand are made up.SHOT_THEMEisaurora-glass-dark, andtests/manual-screenshots-v1-22.spec.jstakes the 16A shots. - new — the demo looks like months of use (
demo_seed.go,demo_health_seed.go,demo_inbox.go). The inbox holds 24 links over six weeks, read, snoozed, with notes and tags. Opens run over 90 days with a working rhythm and fewer on weekends, so Usage and its heatmap have a shape. Health has 11 monitors with outages and a slow site, and a 90-day trend whose score climbs while the unchecked links go from 40 to none.TestDemoSeedsThreePagesOfPublicSitesexpects 90 trend points, and about 100 links. - docs — the manual's shots follow the demo's own clock.
NOWintests/helpers/manual-shot-kit.jsis the moment the seed was made (itshealth-history.jsonsays when), and the dates in the fixtures follow, so charts end on the day shown in the header.tests/helpers/docker-history.jsgives Containers and Statistics → Server thirty days of crashes, failed health checks and nine updates. New shots: Collection health on its Monitors and Trend tabs (11-collection-health-monitors.jpg,-trend.jpg) and a container's Timeline (14-container-timeline.jpg). - new — the demo seeds 50 more sites for nerds and hackers (
demo_seed.go,demo_previews.go): Security, Linux and Play on Dev, Makers on Homelab and Privacy on Self-hosted.TestDemoSeedsThreePagesOfPublicSitesnow expects about 100 links. - docs — Config → Help follows the new look, in all six languages. The Themes panel names Aurora Glass as the default, more than 190 families and 75 backdrops, and the theme studio instead of the theme browser. New in it: the Signature and Classic material styles, the eight neutrals and their accent, ThinkDashboard Classic, Quiet centre, and a paragraph on the move to Aurora Glass. Appearance lists the new Surfaces settings and the eighth backdrop slider. Keyboard adds
Shift+Gand the new cheat sheet, and uses a lowercasegfor the chords. Bookmarks, Inbox and Config listg/Endfor first and last. The bookmark form is described in two columns. Five tips follow (tipTuneThemeBrowser,tipTuneThemeBrowserWidth,tipTuneGloss,tipTuneLooks,tipTuneBackdrop). - docs —
README.mdfollows the new look. It names Aurora Glass as the default, 192 theme families (384 themes), the twelve materials and the three collections, the signature and Classic material styles, 75 backdrops with a quiet centre, and calls the panel the theme studio. All 22 pictures are taken again over the demo data the server seeds itself; the dashboard is in Aurora Glass, the bookmarks view in its light half and the command palette in ThinkDashboard Classic, the rest in a theme each. - docs — the theme studio is called the theme studio. The Overview news item about it said "look studio"; its title now says theme studio in all six languages.
- docs — the Quiet centre, Material style and the accent of the neutrals are translated in Dutch, German, French, Spanish and Chinese: 20 keys under
config(backdropCalm,materialStyle*,neutralAccent*), sovalidate:locale-paritypasses again. - new — What's new leads with the redrawn themes.
static/data/whats-new/v1.22.0.jsonhas three highlights, each with its own picture or recording: every theme redrawn (a screenshot, with a button to the theme studio), 75 backdrops with a quiet centre (a recording) and the searchable cheat sheet (a recording). The plan is intests/fixtures/whats-new-media/v1.22.0.js, the files instatic/data/whats-new/media/, andwhats-new-stub.jsnames v1.22.0 as the release the window opens for. - docs — nextdash.cc follows the new look. Every feature page has new pictures in Aurora Glass dark, with six on Statistics (all tabs) and two more on Tags (the tag picker and the tags offered on a new bookmark). The theme gallery shows all 192 families in dark and light with the backdrop each comes with, and has a Classic group for ThinkDashboard Classic. The hero and the slider open on Aurora Glass.
- new — scripts refill the demo data and retake the manual's shots (
scripts/make-manual-seed.sh,run-manual-shots.sh,validate-manual-shot-refs.cjs). The first lets the server seed itself and fetches the favicons, the second takes the four shot specs with eight workers and reads the real exit code, the third checks that every pictureMANUAL.mdnames exists and that every file is used. They refusedata-demoand port 8080. - fix — every fixed wait in the tests says why.
validate-test-waits(thevalidate-jsonjob in CI) failed on 31waitForTimeoutcalls without a//reason directly above them: the overlay, material-header, neutral-accent, view-entrance and look-migration specs, the manual-shot spec for 16A and the What's new media plan. Each now says what it waits for, or that it is pacing for a capture or the check is that nothing happens. - fix — the e2e specs follow the new look. 31 specs pinned the old drawing: the widget title strip, the depth ladder, the glow ring, the title offsets and handle, the glass, card and open panes of Config and the list views, the sheets that hang from the header, the cheat sheet's folded topics, the Help text, and the number of backdrops. Each now tests what it protects under Signature, or puts the page in Classic without saving it where the old drawing is the point. The ℹ popover spec waits for the page to hold still and presses the button again if a late scroll closed the popover, the About diagnostics spec waits for the platform, the Glances entrance spec only counts blocks that were drawn while the entrance window was open (a slow runner gets them without a rise), and the two Look studio specs that timed out on the CI runner get more room.