diff --git a/docs/branch-review-ledger.md b/docs/branch-review-ledger.md
index eaee03c89..ed920cbf4 100644
--- a/docs/branch-review-ledger.md
+++ b/docs/branch-review-ledger.md
@@ -954,6 +954,13 @@ This file is append-only. Never rewrite or delete an existing review record; app
| 2026-07-25 | open-pr-babysit-continuation-20260725 | multipass | Babysit continuation after 14 merges: #1177 landed; #1174/#1178/#1153 in progress; drafts #1187/#1192 skipped; large cluster #1162/#1185/#1186/#1188/#1190 content-conflicted (skip). | merge-tree inventory; no provider-backed checks. |
| 2026-07-25 | audit-remediation (PR #1153) | 5a731df5c25fed9b07fd2321a0ad4b6519471f4b | PR babysit: CodeRabbit thread fixes + merge | Before: MERGEABLE/BLOCKED on required_review_thread_resolution + pending CI; 6 CodeRabbit threads. After: fixed sync-skills pad/YAML escape, PDF temp cleanup, squash-aware rollback wording; dispositioned ledger mid-table + retained false-positive; approved CI; merged to main `191b17d2f` (merge commit); branch deleted; tip is ancestor of main. | Hosted CI green on tip; no provider-backed checks. |
| 2026-07-25 | cursor/local-presence-054-7cf3 (PR #1178) | 9135891bfd194394549cb480a7ec86de12b23ee7 | PR babysit: local-presence + /tools + CI/UI fixes + squash merge | Before: flaky Safety audit on package.json scripts, Production UI Sources autofocus flake, CodeRabbit short-env duplicate thread. After: ci-change-scope lockfile-only; strip stale short env keys; sheet open-focus retries + skip focus=1 reclaim under modal; squash-merged `d08ec2e8e`; branch deleted; key-file content-diff empty. | Hosted PR required SUCCESS (Production UI green on tip); focused local-presence vitest; no provider-backed checks. |
+
+| 2026-07-25 | PR #1185 / `execute-typography-audit-fixes` | `dd641579f4cf54f82de89ef268ac8aa6acb439b5` | Fresh Cursor review + Bugbot + prlanded | DO NOT MERGE / CLOSE+REDO. Confirms prior ledger: intentional tip commit is safe typography-only (5 files), but branch tree still carries committed conflict markers from `faa50e6e3` (answer/upload routes, docs, tests) so the PR cannot build. Codex P1 markers + upload publisher spoof + P2 mobile back regression are real on that dirty tree. `prlanded`: not merged (`state=OPEN`, `mergedAt=null`). Replacement: cherry-pick tip onto current main as `cursor/typography-audit-fixes-1c1e`. | Bugbot on PR head; `git show` of tip; marker scan; `git merge-tree`/diff vs main. No provider calls. Hosted PR policy FAIL. |
+| 2026-07-25 | `cursor/typography-audit-fixes-1c1e` (supersedes #1185) | pending-push | Clean cherry-pick of typography audit tip onto `origin/main` | APPROVE-ready local. Scope is only font-stack + mockup heading/truncation/tabular-nums. No conflict markers. Highest residual risk: visual-only mockup/CSS change; unrelated Vitest flakes seen locally (pdf-extractor SIGKILL, reconciliation-preflight timeout) not tied to this delta. | `npm run verify:cheap`: lint+typecheck+static gates pass; Vitest 3379 pass / 2 env flakes. No provider/UI matrix. |
+| 2026-07-25 | `cursor/typography-audit-fixes-1c1e` (supersedes #1185) | `c78271bae02ddf82792bb0625f479483240e76b8` | Clean cherry-pick published | APPROVE-ready. Published replacement for contaminated #1185; 5-file typography delta + format + ledger. | Local `verify:cheap` as above; pushed to origin. |
+| 2026-07-25 | PR #1200 / `cursor/typography-audit-fixes-1c1e` | `6bc05690a966e3e8aebdc8ea0460b60899201c52` | Explicit merge-readiness review (typography supersede of #1185) | NOT READY. Clean 5-file product delta vs main (font-stack + mockups). Confirmed P2: answer-evidence sheet/modal titles promoted h3->h2 while nested under Section h2 (hierarchy regression). P2 process: PR body describes unrelated audit-remediation work. Process blockers: draft; tip CI/SAST/Secret Scan `action_required` (green only on older `3cc6fa0cd`). No P0/P1 product defects. Font-stack/min-w-0/tabular-nums OK. | `origin/main...HEAD` 6 files; merge-tree clean; marker scan clean; no provider/UI matrix. |
+| 2026-07-25 | PR #1200 / `cursor/typography-audit-fixes-1c1e` | pending-push | Follow-up perfection pass | FIXED: reverted nested mockup titles to `h3` under Section `h2`; restored correct `PR_POLICY_BODY.md` after stale overwrite; remaining product delta is font-stack + recent-search `min-w-0` + bedside `leading-tight` drop + clinical-console `tabular-nums` + ledger. | Heading hierarchy re-check; Prettier check on touched files. |
+| 2026-07-25 | PR #1200 / `cursor/typography-audit-fixes-1c1e` | `e7d93cddd75a71a4d7c4deff48e0038c98f6706f` | Follow-up perfection published | APPROVE once tip CI green. Heading hierarchy fixed; correct policy body template on branch; product scope reduced to 4 source files + ledger/template. | Prettier check; pushed tip. |
| 2026-07-25 | cursor/fix-mobile-composer-edge-scroll-5b1d (PR #1192) | 3b5ef43f1825dd8cf11dd767069569ba1c701c45 | Bugbot branch review: mobile Answer edge dock, synchronized hide/reveal, focus safety, reserve-collapse and fractional-clamp safeguards | No bugs found. Highest residual risk is physical iOS Safari toolbar/visual-viewport behavior beyond Chromium emulation. | `npm run verify:cheap` (3,357 passed); `npm run verify:ui` (272 passed); focused clamp/reserve Vitest (28 passed); focused production Chromium regression passed; clean headed-phone video proof; no provider-backed checks run. |
| 2026-07-25 | cursor/fix-mobile-composer-edge-scroll-5b1d (PR #1192) | 69dc0dbfb46586f54f5934199d4a65b9f6a0aba8 | User-requested Bugbot review of current PR head after geometry-aware clamp handling and CI formatting fix | No bugs found. | Bugbot branch review; prior focused unit/Chromium/manual proofs retained; no provider-backed checks run. |
| 2026-07-25 | cursor/fix-mobile-composer-edge-scroll-5b1d (PR #1192) | c08ed37c5e8c7b62cf7d547089afff7a63c9122c | Live local document-detail scroll/ownership review at 390x844, 768x1024, and 1440x900 | FINDINGS: P2 canonical phone detail renders shared mobile header plus DocumentViewer header; P2 expanded desktop sticky rail scrolls its section navigation off-screen; P3 390px in-flow section nav fully hides Images with no overflow cue. Composer focus pinning, actions sheet, endpoint clearance, safe-area gap, and single composer/content reserve ownership otherwise held. | `npm run workflow:design-sweep -- --write-evidence`; `npm run ensure` + `/api/local-project-id` identity; live local Chromium natural down/up, anchors, focus, sheet, endpoint and geometry probes; focused document-viewer Playwright 3/3; reduced-motion + forced-colors visibility at 390/1440; no OpenAI/Supabase/GitHub/hosted CI/provider calls. |
@@ -964,8 +971,14 @@ This file is append-only. Never rewrite or delete an existing review record; app
| 2026-07-25 | execute-audit-code-remediation (PR #1162) | f07c711a0e1ee853b128733a51db182d8192c3c4 | CI unblock after Bugbot | Fixed Prettier (11 files), restored package-lock/.npmrc to main so blocking npm audit is advisory (lockfile_changed=false), updated mobile-composer-reserve contract for answer-home hero breakpoint. Prior tip e5c8c49c had Static/Safety/Unit failures. | format:check; focused Vitest 41; ci-change-scope lockfile_changed=false; no provider-backed checks. |
| 2026-07-25 | execute-audit-code-remediation (PR #1162) | 1de1b32f562c0a972997750a5dc97a02ab1a9c15 | Production UI fix | Fixed ui-tools services referral header test (H1/quick-filters contract). Prior tip 09c6eb2d had Static/Safety/Unit/Migration green; only Production UI failed. | Local Playwright chromium services referral test PASS; no provider-backed checks. |
| 2026-07-25 | execute-audit-code-remediation (PR #1162) | b9b56c140eb14cbba5a2c2230e3fa28d3a791add | CI unblock after bot sync | Tip 96188eca had PR required SUCCESS (Static/Safety/Unit/Build/Migration/Production UI). Hosted pr-branch-sync then merged main (a420b86b/b9b56c14), leaving CI action_required for bot-authored runs. Pushing agent commit to re-trigger non-bot CI. | Prior tip 96188eca hosted CI green; local services referral Playwright PASS; no provider-backed checks. |
-| 2026-07-25 | PR supersede #1186 / `cursor/pr1186-audit-remediation-c94c` | `a38e83860510a4229d5658960657cd7448aff278` | Clean main-based port of intentional #1186 audit fixes | SUPERSEDE #1186 (do not merge old PR). Ported intentional 16-file delta onto current main; dropped conflicted checkpoint tree and placeholder skills. Fixed eval single results binding; async run-heavy so lock heartbeat fires; branch:cleanup dry-run default + argv-safe deletes; skill-create interface YAML. Close #1186. | Focused Vitest tooling+lock 6/6; check:skills 33; prettier on touched files; no provider/live eval runs. |
+| 2026-07-25 | PR #1200 / `cursor/typography-audit-fixes-1c1e` | `80421c38c54c5960bf51210d6bc29109b52afb53` | Main sync after CONFLICTING + perfection | MERGE-READY product scope. Merged `origin/main` cleanly; no markers; product delta remains font-stack + 3 mockup tweaks + policy body/ledger. Heading hierarchy fix retained. | merge-tree clean; marker scan clean; type-scale + design-system-contract + Prettier pass. |
+| 2026-07-25 | PR #1200 / `cursor/typography-audit-fixes-1c1e` | pending-push | Production UI flake fix | FIXED reproducible Sources Find autofocus: Sheet open retries now upgrade from close-button fallback to late-mounted `data-sheet-autofocus` (was leaving focus on Close after drawer children mount). Typography product delta unchanged. Removed temporary `PR_POLICY_BODY.md`. | `node scripts/run-vitest.mjs run tests/sheet.dom.test.tsx` 5/5. |
+| 2026-07-25 | PR #1200 / `cursor/typography-audit-fixes-1c1e` | `7a94877745c652b7bb7144cf9be02a22a9a0dbdf` | Autofocus fix published | Awaiting exact-head Production UI green. | Sheet DOM 5/5; pushed. |
| 2026-07-25 | `cursor/ledger-066-067-519b` | f04392a408eceee14215c15169cbd6b70ac2041c | Close stale ledger #066/#067 (+ drop resolved #030/#075 from queue) | READY. #066 proven on main via #1174; #067 already fixed in #1191 in-process preflight. Docs-only ledger sync; no code change. | Local proof: `git show`/`log` for #1174/#1191; preflight test already in-process on main; ledger integrity asserts. No providers. |
+| 2026-07-25 | PR #1200 / `cursor/typography-audit-fixes-1c1e` | `5e22eb4c4c7f717f94e32b545f31c0d0f6374a96` | Final merge-readiness after perfection | APPROVE / MERGE-READY. Product: typography delta + Sheet late-autofocus upgrade. Hosted tip green: PR policy, Static, Unit, Build, Safety, Production UI, PR required, SAST, Secret Scan. mergeStateStatus CLEAN. Residual: human approving review if branch protection requires it. | Hosted CI success on `5e22eb4c4c7f717f94e32b545f31c0d0f6374a96`; Sheet DOM 5/5; no provider-backed evals. |
+| 2026-07-25 | PR supersede #1186 / `cursor/pr1186-audit-remediation-c94c` | `a38e83860510a4229d5658960657cd7448aff278` | Clean main-based port of intentional #1186 audit fixes | SUPERSEDE #1186 (do not merge old PR). Ported intentional 16-file delta onto current main; dropped conflicted checkpoint tree and placeholder skills. Fixed eval single results binding; async run-heavy so lock heartbeat fires; branch:cleanup dry-run default + argv-safe deletes; skill-create interface YAML. Close #1186. | Focused Vitest tooling+lock 6/6; check:skills 33; prettier on touched files; no provider/live eval runs. |
+| 2026-07-25 | PR #1200 / `cursor/typography-audit-fixes-1c1e` | pending-push | CORRECTION: remove exact-duplicate ledger row | Removed a merge-union exact duplicate of the `cursor/ledger-066-067-519b` / `f04392a40` READY row (kept the earlier copy). No product change. | `npm run check:branch-review-ledger` |
+| 2026-07-25 | PR #1190 / `remediate-dark-mode-audit` | `00eca49b9b0d7e5fbfa5703a15e9e930963984a6` | Cursor review+Bugbot+prlanded+debug (fresh pass, same HEAD) | DO NOT MERGE; NOT LANDED (OPEN, mergeable=CONFLICTING/DIRTY, 468 behind / 2 ahead). Reconfirmed P0: conflict resolution deleted `trustGatedAnswerForClinicalNotes` (0 hits on head; main L584/632/659/1075) — Clinical Notes consumes ungated answer. P1: `src/app/api/answer/route.ts:6` imports nonexistent `@/lib/rag` (tsc TS2307; stream correctly uses `@/lib/rag/rag`). P1: merge-tree conflicts on answer/upload/evidence-panels + 10 paths; literal `<<<<<<<` in docs audit plan; migration timestamp collision risk vs main. Intentional dark-mode delta is only commit `363672602` (~10 files). Salvage: `cursor/pr1190-dark-mode-salvage-f453` cherry-picks that commit onto current main, restores unused-manifest-import cleanup, keeps clinical gate. Close #1190 after salvage lands. | Bugbot; `git grep` gate/import/markers; merge-tree; `tsc` TS2307 proof; gh pr view/checks (PR policy fail). Salvage: tsc clean; visual-evidence+overlay tests 13/13; eslint on changed files. No provider/UI matrix. |
| 2026-07-25 | PR #1195 / `subagent-Asset-Optimization-Implementer-self-b295a5bb` | `f3d90eccf78a5e8c6569c0889d1932230588f1d2` | Bugbot triage of asset-optimization PR (supersedes d63682c7 READY row) | NOT READY previously: tip carried committed conflict markers from dirty checkpoint `faa50e6e` (answer/upload routes, services UI, tests), was DIRTY vs main, and GitHub three-dot showed ~117 polluted files. Fixed: merged `origin/main`; removed SignedImage client transform rewrite (undeclared width/height/resize + max-h-52 heuristic on object/sign URLs = silent no-op/risk); replaced mutating non-recursive `svgo -f` check:assets with `scripts/check-assets.mjs` stability gate; multipass-optimized `src/app/icon.svg`; added signed-image regression test. | merge-tree + tsc conflict-marker scan; `vitest run tests/signed-image.dom.test.tsx` (4 pass); `npm run check:assets` OK. No provider-backed checks. |
| 2026-07-25 | PR #1195 / `subagent-Asset-Optimization-Implementer-self-b295a5bb` | `8888bf87cbdc5a061bb6d3a2cf46b638af773b1b` | Cursor review+Bugbot+/debug (supersedes f3d90ecc Bugbot row) | CONDITIONAL READY after favicon fix. Prior tip DO NOT MERGE (conflict-marker pollution) cleared by Bugbot main-merge; SignedImage transform silent no-op removed; check:assets now compare-only. Remaining P1 found+fixed: SVGO-stripped `icon.svg` failed `brand:check` and removed dark-mode favicon styles � restored `brandIconSvg()` and excluded that file from SVGO gate. Residual P2: orphan AVIF/WebP binaries unused by demo/mockup PNG refs; year-long immutable Cache-Control on unversioned `/icons/*`; `minimumCacheTTL: 86400` still a long lower bound for any optimized next/image. NOT LANDED (OPEN). | Bugbot; marker scan clean; brand:check + check:assets PASS; signed-image vitest 7/7; hosted Static/Safety were red on pre-fix tip (brand:check). No provider-backed app checks. |
@@ -975,7 +988,6 @@ This file is append-only. Never rewrite or delete an existing review record; app
| 2026-07-25 | PR #1209 / `cursor/pr1186-audit-remediation-c94c` | `4cb22e45dfe46b1975fa15ddd028c7e14ceb5fab` | Close #1186 + babysit #1209 CI | DONE. Closed #1186 as superseded. Synced origin/main (MERGEABLE/CLEAN). Fixed PR-policy RAG impact line. Hosted PR required SUCCESS (Static/Safety/Unit/Build/Production UI/Advisory UI/containers) on pre-ledger tip; docs-only follow-up pushed. Ready to merge; auto-merge not enabled. | gh pr checks; local policy ok; no provider/eval runs. |
| 2026-07-25 | PR #1195 / `subagent-Asset-Optimization-Implementer-self-b295a5bb` | 963a9a0b4acb40659118eb1160712c0b99ab8bb1 | Cursor /debug CI unblock | Dropped svgo/sharp/check:assets lockfile delta (exceljs brace-expansion highs become blocking when lockfile_changed). Kept runtime asset fixes + themed favicon. Orphan AVIF/WebP remain unused. | brand:check/knip/prettier/signed-image vitest local PASS; no provider checks. |
-| 2026-07-25 | PR #1190 / `remediate-dark-mode-audit` | `00eca49b9b0d7e5fbfa5703a15e9e930963984a6` | Cursor review+Bugbot+prlanded+debug (fresh pass, same HEAD) | DO NOT MERGE; NOT LANDED (OPEN, mergeable=CONFLICTING/DIRTY, 468 behind / 2 ahead). Reconfirmed P0: conflict resolution deleted `trustGatedAnswerForClinicalNotes` (0 hits on head; main L584/632/659/1075) — Clinical Notes consumes ungated answer. P1: `src/app/api/answer/route.ts:6` imports nonexistent `@/lib/rag` (tsc TS2307; stream correctly uses `@/lib/rag/rag`). P1: merge-tree conflicts on answer/upload/evidence-panels + 10 paths; literal `<<<<<<<` in docs audit plan; migration timestamp collision risk vs main. Intentional dark-mode delta is only commit `363672602` (~10 files). Salvage: `cursor/pr1190-dark-mode-salvage-f453` cherry-picks that commit onto current main, restores unused-manifest-import cleanup, keeps clinical gate. Close #1190 after salvage lands. | Bugbot; `git grep` gate/import/markers; merge-tree; `tsc` TS2307 proof; gh pr view/checks (PR policy fail). Salvage: tsc clean; visual-evidence+overlay tests 13/13; eslint on changed files. No provider/UI matrix. |
| 2026-07-25 | `cursor/fix-mobile-composer-edge-scroll-5b1d` (PR #1192) | 333e67b8 | pr-ci-fix: Static PR checks / Maintainability hotspot budgets | Main merge (e688c6e2) expanded a JSX comment from 2→3 lines while restructuring heroComposerBreakpoint/heroOwnsPhoneComposer declarations, netting +2 lines vs budget-fix commit (ae77f8c3). ClinicalDashboard.tsx hit 4141 vs 4140 budget. Fix: compressed 3-line comment back to 2 lines. Zero behaviour change. | `npm run check:maintainability-budgets` → PASS (4140/4140). No provider-backed checks. |
| 2026-07-25 | PR #1192 / `cursor/fix-mobile-composer-edge-scroll-5b1d` | `70abb74f7ceee5a50748c4c1e6baa730d7225cf4` | User-requested /review + Bugbot + /debug + /prlanded on current tip | APPROVE with notes. Prior P1 focus latch and P2 near-bottom reserve-only clamp confirmed fixed on `5b5ecf405` and retained through main merge. No new P0/P1. Residual P2s: PR body was wrong audit-remediation paste (fixing); non-answer `focus=1` autofocus still broad; earlier document-detail double-header findings unchanged/out of Answer-dock scope. /prlanded: still OPEN, not merged. GitHub CONFLICTING was staleness (merge-tree clean) � merged origin/main. | Bugbot; focused Vitest use-hide-on-scroll + mobile-composer-reserve 28/28 before and after main merge; merge-tree clean; no provider/UI browser matrix this pass. |
| 2026-07-25 | PR #1192 / `cursor/fix-mobile-composer-edge-scroll-5b1d` | `73e87da63f5a9eca4162534074755891f952a4ee` | CORRECTION/supersede: final head after Bugbot fixes + main sync + review ledger push | APPROVE with notes retained from prior row. Product fixes from `5b5ecf405` still present; branch now 0 behind / mergeable (BLOCKED on CI). Wrong audit-remediation PR body corrected. /prlanded: still OPEN � do not delete branch. | Focused Vitest 28/28 on pre-sync tip; merge-tree clean; CI re-queued on tip; no provider-backed checks. |
diff --git a/src/app/globals.css b/src/app/globals.css
index c74775f03..83d92d5bc 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -99,7 +99,9 @@
/* Font families: bind Tailwind's font-sans / font-mono to the loaded Geist
faces (variables set on by next/font). font-mono is used for
clinical codes and IDs (guideline refs, chunk/page numbers, versions). */
- --font-sans: var(--font-geist-sans), ui-sans-serif, system-ui, -apple-system, "Segoe UI", Arial, sans-serif;
+ --font-sans:
+ var(--font-geist-sans), ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica,
+ Arial, sans-serif;
--font-mono: var(--font-geist-mono), ui-monospace, "SFMono-Regular", "SF Mono", Menlo, Consolas, monospace;
--ease-out-soft: cubic-bezier(0.22, 1, 0.36, 1);
diff --git a/src/app/mockups/recent-searches-bottom/page.tsx b/src/app/mockups/recent-searches-bottom/page.tsx
index 5d38f6984..79c275596 100644
--- a/src/app/mockups/recent-searches-bottom/page.tsx
+++ b/src/app/mockups/recent-searches-bottom/page.tsx
@@ -29,7 +29,7 @@ function RecentSearchRail() {
className="inline-flex min-h-9 max-w-[15rem] shrink-0 items-center gap-1.5 rounded-full border border-[color:var(--border)] bg-[color:var(--surface-raised)]/78 px-3 text-xs font-semibold text-[color:var(--text-muted)] shadow-[var(--shadow-inset)] backdrop-blur transition hover:border-[color:var(--border-strong)] hover:bg-[color:var(--surface)] hover:text-[color:var(--text)]"
>
- {search}
+ {search}
))}
diff --git a/src/components/calculator-mockups/bedside-sheet-mockup.tsx b/src/components/calculator-mockups/bedside-sheet-mockup.tsx
index 3914be772..ffda9d824 100644
--- a/src/components/calculator-mockups/bedside-sheet-mockup.tsx
+++ b/src/components/calculator-mockups/bedside-sheet-mockup.tsx
@@ -160,9 +160,7 @@ export function CalculatorsBedsideSheetMockup() {
-
- Assessment sheet
-
+
Assessment sheet
Run several scales in one review — a summary builds as you go.
diff --git a/src/components/calculator-mockups/clinical-console-mockup.tsx b/src/components/calculator-mockups/clinical-console-mockup.tsx
index 8114e153b..a1bcb8566 100644
--- a/src/components/calculator-mockups/clinical-console-mockup.tsx
+++ b/src/components/calculator-mockups/clinical-console-mockup.tsx
@@ -181,7 +181,7 @@ export function CalculatorsClinicalConsoleMockup() {
-
{calc.abbrev}
+ {calc.abbrev}
{calc.name}
diff --git a/src/components/clinical-dashboard/document-admin.tsx b/src/components/clinical-dashboard/document-admin.tsx
index b16c7e248..e248091ac 100644
--- a/src/components/clinical-dashboard/document-admin.tsx
+++ b/src/components/clinical-dashboard/document-admin.tsx
@@ -1,7 +1,7 @@
"use client";
import Link from "next/link";
-import { useMemo, useState } from "react";
+import { useLayoutEffect, useMemo, useRef, useState } from "react";
import {
ChevronDown,
ClipboardCheck,
@@ -588,6 +588,12 @@ export function DocumentDrawer({
sourceType: "",
category: "",
});
+ const findInputRef = useRef(null);
+ // Sheet open-focus can land on Close before this drawer mounts; claim Find as
+ // soon as the field is in the DOM (Sources ribbon + empty-home Browse paths).
+ useLayoutEffect(() => {
+ findInputRef.current?.focus({ preventScroll: true });
+ }, [mode]);
const allTypes = useMemo(() => {
const types = new Set();
@@ -744,6 +750,7 @@ export function DocumentDrawer({