Replace the two flat markdown tables with a clean card grid grouped
into thematic clusters per volume. Each card shows lab number, title,
and core question only — no chips, ribbons, or accent rainbow. Single
accent color matches the labs site brand (#2563EB).
Lab 07 (Kernel Fusion Dividend) moves from Architecture to Performance
& Deployment — kernel fusion is a runtime optimization, not a
model-design choice. Capstones get their own dedicated cluster and
span the full grid row; distinction comes from layout and placement,
not color.
Verified responsive from 320px to 1440px with zero horizontal overflow.
Adds tools/capture_landing_shots.py — Playwright-based screenshot
helper used during the redesign, reusable for future inventory work.
This commit introduces the following fixes to the Marimo labs architecture:
1. Interactive Testing: Updates test_widget.py to dynamically extract, simulate clicks, and verify the interactive states hidden behind mo.stop() to ensure execution pipelines don't crash.
2. Ledger Continuity: Fixes an issue in 4 Volume 2 labs where the ledger.save() was mistakenly passed a string key (e.g. 'v2_05') instead of an integer.
3. WASM Relative Pathing: Modifies tools/build_site.sh to duplicate built Pyodide wheel assets into vol1/wheels and vol2/wheels to satisfy Pyodide's worker.js relative path resolution, which was causing the labs to hang at startup on GitHub Pages with BadZipFile errors.
Automated protocol compliance fixes applied to 31 labs:
- Added ZONE A/B/D section markers to 14 labs missing them
- Added ledger.save(chapter=N) to 15 labs missing it
- Added mo.stop() prediction gates to 31 labs missing them
Protocol test results improved from 102 xfails to 42 xfails.
Remaining xfails are content-level gaps (hardware tier diversity,
mlsysim registry usage, minimum part counts) that require authoring.
All 70 engine tests pass — no labs broken by structural changes.