From 20db2fde02ba9723d7aeea73540a999c35adccdf Mon Sep 17 00:00:00 2001 From: Henry Lach Date: Mon, 18 May 2026 16:56:40 -0400 Subject: [PATCH 1/2] fix(overview): mobile-responsive baseline for the slide-deck microsite MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The deck was originally authored as 16:9 video frames at 1820px max-width with a global --scale: 1.5 knob. After the GitHub Pages migration, the absence of meant mobile browsers fell back to shrink-fitting a 980px virtual viewport, masking the fact that none of the layouts collapsed below desktop widths. This change makes the site genuinely responsive for portrait phones (~375px) and tablets. What landed (one PR per Sage's recommendation, not two): 1. Viewport meta tag injected into every page so mobile browsers stop the shrink-fit fallback and honor the actual device width. 2. shared.css responsive block: - Global media safety: img, svg { max-width: 100%; height: auto; } - @media (max-width: 900px): --scale drops to 1.1, page padding tightens to 20px / 24px. - @media (max-width: 700px): --scale drops to 0.95 (floored — anything smaller makes dense card text microscopic on phones), padding shrinks to 14px / 18px, h1 caps at 26px * --scale, and the eyebrow grid restructures so the wordmark logo sits on its own row above the title + nav row (otherwise the three-cell 1fr/auto/1fr layout overflows below ~340px). 3. Three pages with fixed-pixel grid tracks were collapsed in this PR instead of being deferred — otherwise the viewport change would regress them from 'tiny but laid-out' to 'horizontally scrolling': - Page 07 (mailbox protocol): .topology grid 200px/1fr/200px stacks vertically; .props 4-col collapses to 2-col at 900px and 1-col at 700px; .lane label column tightens on phone. - Page 09 (branching lifecycle): .branch-labels 380px/1fr stacks; .steps 5-col collapses to 2-col at 900px and 1-col at 700px; SVG.git-graph removes preserveAspectRatio='none' (which was distorting the diagram non-uniformly at any width != 1500x360) and now scales proportionally via aspect-ratio: 1500/360. On phone the graph-card scrolls horizontally with a 760px min-width SVG so swim lanes stay readable instead of being crushed to a ~90px-tall strip. - Page 12 (dashboard visibility): .layout grid 1fr/320px stacks vertically at 900px, dashboard screenshot above side panels. Phase 2 (a follow-up PR) will sweep the remaining repeat(N, 1fr) grids (pages 01, 03, 04, 06, 10, 11, 13-17, index) for either auto-fit collapse or explicit media queries. Those pages render acceptably at narrow widths thanks to the --scale + padding response in this PR, but will benefit from cleaner stacking. --- .../01-origin-timeline.html | 1 + .../02-light-factory-vs-dark.html | 1 + docs/taskplane-overview/03-agent-quartet.html | 1 + .../04-task-packet-anatomy.html | 1 + .../05-determinism-spectrum.html | 1 + .../06-cross-model-review.html | 1 + .../07-mailbox-protocol.html | 13 ++++ .../08-waves-lanes-worktrees.html | 1 + .../09-branching-lifecycle.html | 18 ++++- .../taskplane-overview/10-semantic-merge.html | 1 + .../11-polyrepo-segments.html | 1 + .../12-dashboard-visibility.html | 8 +++ docs/taskplane-overview/13-why-pi.html | 1 + .../14-pi-capabilities.html | 1 + .../15-how-to-get-started.html | 1 + .../16-real-work-playbook.html | 1 + .../taskplane-overview/17-sage-companion.html | 1 + docs/taskplane-overview/index.html | 1 + docs/taskplane-overview/shared.css | 65 +++++++++++++++++++ 19 files changed, 118 insertions(+), 1 deletion(-) diff --git a/docs/taskplane-overview/01-origin-timeline.html b/docs/taskplane-overview/01-origin-timeline.html index ead0025b..7d1060f1 100644 --- a/docs/taskplane-overview/01-origin-timeline.html +++ b/docs/taskplane-overview/01-origin-timeline.html @@ -2,6 +2,7 @@ + V1 — Origin timeline diff --git a/docs/taskplane-overview/08-waves-lanes-worktrees.html b/docs/taskplane-overview/08-waves-lanes-worktrees.html index 4d80f112..dcd40043 100644 --- a/docs/taskplane-overview/08-waves-lanes-worktrees.html +++ b/docs/taskplane-overview/08-waves-lanes-worktrees.html @@ -2,6 +2,7 @@ + V8 — Waves, lanes, worktrees @@ -136,7 +152,7 @@

How Taskplane uses branches

- + diff --git a/docs/taskplane-overview/10-semantic-merge.html b/docs/taskplane-overview/10-semantic-merge.html index a86addcd..f2d806b0 100644 --- a/docs/taskplane-overview/10-semantic-merge.html +++ b/docs/taskplane-overview/10-semantic-merge.html @@ -2,6 +2,7 @@ + V10 — Semantic merge vs git merge diff --git a/docs/taskplane-overview/13-why-pi.html b/docs/taskplane-overview/13-why-pi.html index f415fdb1..5ba1803a 100644 --- a/docs/taskplane-overview/13-why-pi.html +++ b/docs/taskplane-overview/13-why-pi.html @@ -2,6 +2,7 @@ + V13 — Why pi diff --git a/docs/taskplane-overview/02-light-factory-vs-dark.html b/docs/taskplane-overview/02-light-factory-vs-dark.html index 3fc7b0a9..0ac64a19 100644 --- a/docs/taskplane-overview/02-light-factory-vs-dark.html +++ b/docs/taskplane-overview/02-light-factory-vs-dark.html @@ -91,6 +91,11 @@ color: var(--text-faint); } .footer-note .hl { color: var(--green); } + + /* Mobile: stack the dark / light factory comparison panels. */ + @media (max-width: 700px) { + .split { grid-template-columns: 1fr; } + } diff --git a/docs/taskplane-overview/03-agent-quartet.html b/docs/taskplane-overview/03-agent-quartet.html index 846887d8..e28e262d 100644 --- a/docs/taskplane-overview/03-agent-quartet.html +++ b/docs/taskplane-overview/03-agent-quartet.html @@ -107,6 +107,14 @@ .flow-band .hl-a { color: var(--amber); } .flow-band .hl-b { color: var(--blue); } .flow-band .arrow { color: var(--text-faint); padding: 0 6px; } + + /* Mobile: collapse the 4-agent quartet. */ + @media (max-width: 900px) { + .grid { grid-template-columns: repeat(2, 1fr); } + } + @media (max-width: 700px) { + .grid { grid-template-columns: 1fr; } + } diff --git a/docs/taskplane-overview/04-task-packet-anatomy.html b/docs/taskplane-overview/04-task-packet-anatomy.html index 919d71a5..245b3cec 100644 --- a/docs/taskplane-overview/04-task-packet-anatomy.html +++ b/docs/taskplane-overview/04-task-packet-anatomy.html @@ -93,6 +93,15 @@ line-height: 1.55; } .callout-text code { color: var(--text); background: var(--surface-2); padding: 1px 4px; border-radius: 3px; font-family: var(--mono); font-size: var(--fs-sm); } + + /* Mobile: stack the PROMPT.md / STATUS.md split, and collapse callouts. */ + @media (max-width: 900px) { + .callouts { grid-template-columns: repeat(2, 1fr); } + } + @media (max-width: 700px) { + .split { grid-template-columns: 1fr; } + .callouts { grid-template-columns: 1fr; } + } diff --git a/docs/taskplane-overview/05-determinism-spectrum.html b/docs/taskplane-overview/05-determinism-spectrum.html index f61b3686..6fb1e596 100644 --- a/docs/taskplane-overview/05-determinism-spectrum.html +++ b/docs/taskplane-overview/05-determinism-spectrum.html @@ -120,6 +120,13 @@ text-align: center; } .principle .hl { color: var(--green); } + + /* Mobile: stack the forced-deterministic / left-to-the-model split, and + drop the inner 2-col item list to a single column for readability. */ + @media (max-width: 700px) { + .split { grid-template-columns: 1fr; } + .items { grid-template-columns: 1fr; } + } diff --git a/docs/taskplane-overview/06-cross-model-review.html b/docs/taskplane-overview/06-cross-model-review.html index 8c515966..a275854f 100644 --- a/docs/taskplane-overview/06-cross-model-review.html +++ b/docs/taskplane-overview/06-cross-model-review.html @@ -184,6 +184,18 @@ } .footer-line .hl-g { color: var(--green); } .footer-line .hl-a { color: var(--amber); } + + /* Mobile: stack the worker-arrow-reviewer flow (hide the arrow column + since the vertical reading order makes the worker->reviewer direction + implicit), and collapse the 4 verdict cards. */ + @media (max-width: 900px) { + .verdicts { grid-template-columns: repeat(2, 1fr); } + } + @media (max-width: 700px) { + .flow { grid-template-columns: 1fr; } + .arrow-col { display: none; } + .verdicts { grid-template-columns: 1fr; } + } diff --git a/docs/taskplane-overview/08-waves-lanes-worktrees.html b/docs/taskplane-overview/08-waves-lanes-worktrees.html index dcd40043..a59067f8 100644 --- a/docs/taskplane-overview/08-waves-lanes-worktrees.html +++ b/docs/taskplane-overview/08-waves-lanes-worktrees.html @@ -167,6 +167,18 @@ border-radius: 3px; font-size: var(--fs-sm); } + + /* Mobile: the 3-lane row inside each wave stays horizontal but scrolls + inside its wave card (lane affinity is easiest to read laterally), + while the summary rule cards at the bottom stack vertically. */ + @media (max-width: 900px) { + .rules { grid-template-columns: repeat(2, 1fr); } + } + @media (max-width: 700px) { + .wave { overflow-x: auto; } + .lanes { min-width: 540px; } + .rules { grid-template-columns: 1fr; } + } diff --git a/docs/taskplane-overview/10-semantic-merge.html b/docs/taskplane-overview/10-semantic-merge.html index f2d806b0..e376e404 100644 --- a/docs/taskplane-overview/10-semantic-merge.html +++ b/docs/taskplane-overview/10-semantic-merge.html @@ -125,6 +125,16 @@ } .monitor .hl-a { color: var(--amber); } .monitor .hl-r { color: var(--red); } + + /* Mobile: stack the git-merge / merge-agent split, and collapse the + 5-step merger pipeline to 2 then 1 column. */ + @media (max-width: 900px) { + .merger-grid { grid-template-columns: repeat(2, 1fr); } + } + @media (max-width: 700px) { + .split { grid-template-columns: 1fr; } + .merger-grid { grid-template-columns: 1fr; } + } diff --git a/docs/taskplane-overview/11-polyrepo-segments.html b/docs/taskplane-overview/11-polyrepo-segments.html index bb0ffd46..d82b82f5 100644 --- a/docs/taskplane-overview/11-polyrepo-segments.html +++ b/docs/taskplane-overview/11-polyrepo-segments.html @@ -189,6 +189,19 @@ border-radius: 3px; font-size: var(--fs-sm); } + + /* Mobile: stack the 3 repo cards, stack the 3 rule cards, and reorient + the segment-DAG flow vertically (arrows rotate from -> to v). */ + @media (max-width: 900px) { + .repos { grid-template-columns: repeat(2, 1fr); } + .rules { grid-template-columns: repeat(2, 1fr); } + } + @media (max-width: 700px) { + .repos { grid-template-columns: 1fr; } + .rules { grid-template-columns: 1fr; } + .dag { flex-direction: column; align-items: center; } + .seg-arrow { transform: rotate(90deg); } + } diff --git a/docs/taskplane-overview/13-why-pi.html b/docs/taskplane-overview/13-why-pi.html index 5ba1803a..bab6bba5 100644 --- a/docs/taskplane-overview/13-why-pi.html +++ b/docs/taskplane-overview/13-why-pi.html @@ -85,6 +85,11 @@ .closing .hl-g { color: var(--green); } .closing .hl-b { color: var(--blue); } .closing .hl-a { color: var(--amber); } + + /* Mobile: stack the three reasons. */ + @media (max-width: 700px) { + .reasons { grid-template-columns: 1fr; } + } diff --git a/docs/taskplane-overview/14-pi-capabilities.html b/docs/taskplane-overview/14-pi-capabilities.html index 7c206aee..51ef0576 100644 --- a/docs/taskplane-overview/14-pi-capabilities.html +++ b/docs/taskplane-overview/14-pi-capabilities.html @@ -85,6 +85,14 @@ vertical-align: middle; } .for-tp-band .hl { color: var(--text); } + + /* Mobile: collapse the 6 capability cards. */ + @media (max-width: 900px) { + .capabilities { grid-template-columns: repeat(2, 1fr); } + } + @media (max-width: 700px) { + .capabilities { grid-template-columns: 1fr; } + } diff --git a/docs/taskplane-overview/15-how-to-get-started.html b/docs/taskplane-overview/15-how-to-get-started.html index 3983bcdf..10764cdc 100644 --- a/docs/taskplane-overview/15-how-to-get-started.html +++ b/docs/taskplane-overview/15-how-to-get-started.html @@ -100,6 +100,14 @@ .footer-band .hl-g { color: var(--green); } .footer-band .hl-b { color: var(--blue); } .footer-band .hl-a { color: var(--amber); } + + /* Mobile: stack the 9 setup-step cards. */ + @media (max-width: 900px) { + .steps { grid-template-columns: repeat(2, 1fr); } + } + @media (max-width: 700px) { + .steps { grid-template-columns: 1fr; } + } diff --git a/docs/taskplane-overview/16-real-work-playbook.html b/docs/taskplane-overview/16-real-work-playbook.html index 33fcdf46..7922c833 100644 --- a/docs/taskplane-overview/16-real-work-playbook.html +++ b/docs/taskplane-overview/16-real-work-playbook.html @@ -181,6 +181,14 @@ .footer-band .hl-b { color: var(--blue); } .footer-band .hl-a { color: var(--amber); } .footer-band .hl-p { color: var(--purple); } + + /* Mobile: stack the 6 step cards. */ + @media (max-width: 900px) { + .steps { grid-template-columns: repeat(2, 1fr); } + } + @media (max-width: 700px) { + .steps { grid-template-columns: 1fr; } + } diff --git a/docs/taskplane-overview/17-sage-companion.html b/docs/taskplane-overview/17-sage-companion.html index 21b461be..a1d760d9 100644 --- a/docs/taskplane-overview/17-sage-companion.html +++ b/docs/taskplane-overview/17-sage-companion.html @@ -195,6 +195,19 @@ .footer-band .hl-g { color: var(--green); } .footer-band .hl-b { color: var(--blue); } .footer-band .dim { color: var(--text-dim); } + + /* Mobile: stack the 3 basic cards. The flagship card already spans the + full row; its internal 2-column inner layout (body + pull-quote + callout) stacks the callout below the body on phone. */ + @media (max-width: 900px) { + .cards { grid-template-columns: repeat(2, 1fr); } + /* The flagship card still spans the full row at tablet sizes. */ + .card.flagship { grid-column: 1 / -1; } + } + @media (max-width: 700px) { + .cards { grid-template-columns: 1fr; } + .flagship-inner { grid-template-columns: 1fr; gap: 16px; } + } diff --git a/docs/taskplane-overview/index.html b/docs/taskplane-overview/index.html index e9a12b63..1534992b 100644 --- a/docs/taskplane-overview/index.html +++ b/docs/taskplane-overview/index.html @@ -108,6 +108,14 @@ border-radius: 3px; } + /* Mobile: collapse the 3-column page index. */ + @media (max-width: 900px) { + .grid { grid-template-columns: repeat(2, 1fr); } + } + @media (max-width: 700px) { + .grid { grid-template-columns: 1fr; } + } +