# Phase 58 — 2× Reading Column on Wide Desktops **Source:** `TODO.md` L5 — "The chat response needs to be 2x wider on wide desktops. there's a lot of unused space." **Story:** n/a (TODO-derived — owner roadmap confirmation 2026-08-31, D2 + owner expansion: the document view widens too) **Context:** The 46rem reading column is hard-coded in four places in `frontend/assets/styles.css`: `.chat-shell` (~L399), `.shared-shell` (~L2153), `.doc-md` (~L2319) and `.doc-summary:has(+ .doc-md)` (~L2369). A fifth 46rem column, `.tuning-shell` (~L903), is **out of scope** (it is a form, not a reading surface). Surrounding block comments reference the PLAN §7 "46rem column" contract — comments get updated to note the wide override; `.agent/PLAN.md` does not exist in this repo (removed by owner, commit 281f355) and `AGENTS.md` is not touched per protocol — the owner's new instruction supersedes the old "46rem" wording. ## Objective On wide desktops the chat reading column (incl. the shared chat view) **and** the document reading column are 2× — 92rem — while everything below the wide breakpoint renders exactly as today. ## Dependencies - `57_edit_document_summaries` (todo, preceding) ## Tasks 1. `01_wide_column_css.md` — `--chat-column` custom property (46rem base) + `@media (min-width: 1500px)` override to 92rem; the four selectors switch to the property; comments updated; unit CSS pins. 2. `02_e2e_wide_column.md` — measured-width Playwright proof at 1920px vs 1280px (chat, document, shared) + regressions + the atomic commit. ## Testing & Quality - Unit CSS pins (house style, `tests/unit/test_save_chat_ui.py` pattern): `--chat-column: 46rem` in `:root`; a `min-width: 1500px` media block setting it to `92rem`; the four selectors use `var(--chat-column)`; `.tuning-shell` still hard-coded `46rem` (negative pin). - E2E (mandatory, A16): `tests/e2e/test_wide_desktop_column.py`, run in isolation (bounding-box width assertions). - Coverage: **>90%** on `app/` (validate.sh gate — pure-CSS phase, gate still runs). ## Completion Criteria - [ ] At 1920×1080: `.chat-shell` (chat page), `.shared-shell` (`/shared/`), and `.doc-md` (document viewer) are ~1472px (92rem ±4); the `.doc-summary` panel matches the column when present. - [ ] At 1280×800: all of the above are ~736px (46rem ±4) — and at 360px/900px the existing mobile/tablet rules are byte-for-byte untouched (no horizontal overflow at 360px). - [ ] `.tuning-shell` stays 46rem at every width. - [ ] `uv run pytest` green; coverage TOTAL >90%. - [ ] `uv run pytest tests/e2e/test_wide_desktop_column.py -v --no-cov` green in isolation (DB up). - [ ] Regression E2E suites green in isolation: `test_responsive_polish.py`, `test_smoke.py`, `test_document_viewer.py`, `test_markdown_tables.py`, `test_shared_header.py`. - [ ] `uv run ruff check . && uv run pyright` clean. - [ ] One `--no-gpg-sign` commit; phase dir moved to `.agent/phases/complete/` (`.agent/` stays untracked — owner instruction, commit 281f355). ## Locked decisions - **Owner-locked (2026-08-31, roadmap confirmation, D2 + expansion):** 1. Wide desktop = viewport `min-width: 1500px`; the reading column becomes **92rem (2× 46rem)**. 2. Scope: `.chat-shell`, `.shared-shell`, `.doc-md`, `.doc-summary:has(+ .doc-md)` — the owner explicitly extended the TODO's "chat response" to the document view as well. 3. `.tuning-shell` (and every other 46rem surface) is **unchanged**; mobile/tablet breakpoints are untouched. - Block comments in `styles.css` that cite the "46rem contract" are updated to name the base value + the wide override (owner instruction 2026-08-31, TODO L5) — no other file outside `frontend/` + `tests/` changes. ## Commit ```bash git add frontend/ tests/ && git commit --no-gpg-sign -m "feat(web): 2x reading column on wide desktops — 92rem at >=1500px (chat, shared, document view)" ```