diff --git a/CODE-AUDIT.md b/CODE-AUDIT.md
index 153244e..4011a01 100644
--- a/CODE-AUDIT.md
+++ b/CODE-AUDIT.md
@@ -1007,10 +1007,11 @@ token system + shared primitives (UI/SIMP — high value, larger effort) · i18n
check-for-new, update-yt-dlp) vs `ArrowSyncRegular` (re-index, check-for-updates) for the same "redo/refresh" idea.
- [x] **L107 — Spinner sizes mixed** — `"tiny"` almost everywhere, `"extra-tiny"` for the QueueItem queued row.
- [x] **L108 — Main window sets no explicit `title`** (relies on the document `
`).
-- [ ] **L109 — Versions auto-load with no indicator.** yt-dlp/ffmpeg versions in About just appear;
- only the manual "Check" button shows a spinner. *Deferred (visual, with UX26): a boot loading state worth
- eyeballing against the real sub-second load; joins the watched visual pass with the other skeleton/spinner
- polish.*
+- [x] **L109 — Versions auto-load with no indicator.** yt-dlp/ffmpeg versions in About just appear;
+ only the manual "Check" button shows a spinner. *Fixed (Batch 18, with UX26): the About card shows Fluent
+ `Skeleton` lines for the yt-dlp and ffmpeg versions while the mount loads them (`checking` now starts true
+ and settles in a `finally`; an ffmpeg bridge failure settles to "not found" rather than a permanent
+ skeleton). Verified in the preview probe that the card settles to the loaded state cleanly.*
- [x] **L110 — One muted-text token, many class aliases.** `colorNeutralForeground3` is re-declared as
`hint`/`sub`/`meta`/`srcSub`/`stats`/`count`/`emptyHint`/`previewMeta` across components. *Fixed: one
`useTextStyles().muted` in [ui/text.ts](src/renderer/src/components/ui/text.ts). Adopted for the pure-color
@@ -1389,13 +1390,14 @@ are an undefined spacing/radius/type scale and a drift between Fluent components
(Downloads), 18 (Library), 12 (History). **Standard:** a single section-gap (16px) via a shared screen wrapper.
*Fixed: all five view roots now use `SPACE.section` (16) — Downloads 20→16, Library 18→16, History 12→16;
Settings/Terminal were already 16 and are now tokenized.*
-- [ ] **UI3 — Card padding has no scale.** 14 (QueueItem) / 16 (DownloadBar) / 20 (Settings card) /
+- [x] **UI3 — Card padding has no scale.** 14 (QueueItem) / 16 (DownloadBar) / 20 (Settings card) /
32 (Onboarding) / `10px 12px` (History row) / `12px 14px` (Library head) / `8px 10px` (template row).
**Standard:** a padding scale (e.g. control 8–10, list-row 12, card 16, hero 24) keyed to surface tier.
- *Implemented (SPACE scale defined; the card tier unified to 16 — QueueItem 14→16, Settings cards 20→16;
- DownloadBar already 16; Onboarding → `hero`) but **left unchecked for a watched visual pass**: 20→16 tightens
- the 11 settings cards and 14→16 loosens queue rows. The smaller list-row/control paddings (History/Library
- head/template) are not yet migrated. Eyeball, then check off or retune the card value.*
+ *Done (Batch 18): the remaining list-row/control paddings migrated to the `SPACE` scale — History row and
+ Downloads summary → `snug/cozy`, Library head/detail and Terminal gate/log and the template form → `cozy`
+ (12, the list-row tier; the odd 14px horizontals snapped down), template row → `tight/snug`. The earlier
+ card-tier deltas (20→16 settings cards, 14→16 queue rows) plus these were eyeballed via the Electron-probe
+ screenshot pass (light + dark, Downloads/History/Library/Settings): nothing reads cramped or loose; kept.*
- [x] **UI4 — Asymmetric app content padding.** `padding: '24px 28px'` ([App.tsx](src/renderer/src/App.tsx)) —
28px horizontal appears nowhere else. **Standard:** symmetric or scale-based padding. *Fixed: the ``
content padding is now the symmetric `SPACE.page` (24px).*
@@ -1436,13 +1438,13 @@ are an undefined spacing/radius/type scale and a drift between Fluent components
### Icons
-- [ ] **UI12 — No icon-size scale.** Inline `fontSize` of 11/14/16/18/20/22/26/28/40 is scattered
+- [x] **UI12 — No icon-size scale.** Inline `fontSize` of 11/14/16/18/20/22/26/28/40 is scattered
across components. **Standard:** a small set (16 inline / 20 control / 24 section / 40 empty-state).
- *Implemented (`ICON` = 16/20/24/40, all four tiers in use; standalone chrome glyphs migrated) but **left
- unchecked for a watched visual pass** because a few glyphs shift: the former-18px chrome icons (sidebar nav +
- theme toggles, IconButton md) → 20 (control), the settings card-header icons 20→24 (section), and the private
- badge 14→16. Box-proportional glyphs (brand/source tiles, `watchBadge` 11px, thumbnail placeholders 22/28)
- are documented exclusions and unchanged. Eyeball the 18→20 / 20→24 / 14→16 deltas.*
+ *Done (Batch 18): the `ICON` = 16/20/24/40 tiers were already in place; the deferred eyeball of the shifted
+ glyphs (18→20 sidebar nav/theme toggles, 20→24 settings card headers, 14→16 private badge) happened in the
+ Electron-probe screenshot pass — the nav icons sit balanced in their 20px tier, the card-header glyphs read
+ as proper section markers at 24, nothing looks oversized. Box-proportional glyphs (brand/source tiles,
+ `watchBadge`, thumbnail placeholders) remain documented exclusions.*
- [x] **UI13 — Regular vs Filled weight mixed for one concept.** `ArrowDownloadRegular` (nav, buttons)
vs `ArrowDownloadFilled` (brand mark). **Standard:** one weight per concept (Filled only for brand/emphasis).
*Verified: `ArrowDownloadFilled` appears only on the two brand marks (Sidebar, Onboarding); every other
@@ -1457,11 +1459,13 @@ are an undefined spacing/radius/type scale and a drift between Fluent components
- [x] **UI15 — Raw `