The site landing page announcement banner was rendering Bootstrap's
default blue instead of Harvard crimson. Root cause: theme-harvard.scss
set $accent but not $primary, so .alert-primary (which Quarto
announcements use) fell back to Bootstrap's built-in blue.
Every other Quarto site (instructors, slides, labs, kits, mlsysim,
tinytorch) sets $primary in its own stylesheet; site/ relies purely on
style-site.scss + theme-harvard, so the omission bit it alone.
Verified with a Playwright pass that checks each site's announcement
background hue against its $accent — all 7 sites now MATCH.
shared/styles/_brand.scss is the single source of truth for raw brand
hex values (Harvard Crimson, ETH Blue, callout palette). Theme files
consume these tokens to derive semantic variables ($accent, $accent-dark,
$callout-*) used by the rest of the SCSS layer.
Why: previously the same hex codes were duplicated across both theme
files (and would have been duplicated again if a third volume were
added). A rebrand currently requires touching the listed non-SCSS uses
in shared/styles/BRAND.md (HTML meta theme-color, plain CSS, inline
QMD styles, SVG fills, JS/Python/TSX constants). Centralizing the SCSS
side at least removes duplication within the SCSS layer.
book/quarto/assets/styles/_brand.scss is a tracked mirror of the
canonical (kept in sync via shared/scripts/sync-mirrors.sh). Required
because Sass resolves @import relative to the importing file's physical
location, so the book's theme files need _brand.scss reachable as ../brand.
shared/styles/README.md adds a file map, a Mermaid diagram of the
import graph (consumer entrypoint -> theme -> brand -> base partials),
per-subsite entrypoint table, and conventions for adding a new theme.
Add tinytorch/site-quarto/ as a parallel Quarto build of the TinyTorch
website, replacing the MyST/Sphinx-based Jupyter Book setup. The original
site/ is preserved for comparison.
Migration includes:
- _quarto.yml with shared navbar, sidebar (emoji sections, logo, subtitle),
footer, and announcement bar
- New _theme-tinytorch.scss (Amber #D4740C) in shared styles system
- style.scss/dark-mode.scss importing shared ecosystem partials
- All 39 pages converted: 9 content, 4 tier, 6 TITO CLI, 20 module ABOUT
- MyST syntax converted to Quarto (callouts, tabs, mermaid, raw HTML)
- Subscribe modal and ML timeline JS ported as include-after-body
- HTML blocks wrapped in raw HTML fences for proper Pandoc passthrough
- Sidebar subtitle injected via JS (matches original JB sidebar)
Also fix pre-existing unreferenced table in ops_scale.qmd.
- Create shared/ directory with centralized SCSS partials and site-head.html
so site subsites (about, community, newsletter) no longer duplicate
inline header config or reference book-only styles
- Fix subscribe modal: change script src from broken relative path
(../../book/quarto/assets/scripts/subscribe-modal.js) to absolute URL
(https://mlsysbook.ai/vol1/assets/scripts/subscribe-modal.js) which
the rewrite-dev-urls.sh script converts for dev preview automatically