[object Object]

← back to Crazy News Channel

Add CTA cross-browser click-through proof for PANDEMONIUM-24

5bb0f0cc1148baf3d2ffddbb1e00862f9aabfe5b · 2026-09-23 18:10:11 -0700 · Steve Abrams

Ran the full interactive surface (grid, read-article links, category/mood
chips, klaxon toggle, admin CRUD, escape/back nav, viewport overflow sweep)
across Chrome, Safari/WebKit, and Browserbase cloud Chromium via Playwright.

Found one real, reproducible WebKit-only defect: the sticky masthead header
(position: sticky + backdrop-filter: blur) shows ghosted/bleeding scrolled
content through it during scroll in Safari/WebKit only — confirmed absent
in Chrome/Chromium via isolated repro. Everything else (27 component checks
x 3 engines) passed clean with 0 console errors and 0 overflow at 390/768/
1024/1440px.

See cta/CTA-REPORT.md for the full component x engine table and the ranked
defect list.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011iuURMrsPBwAqMc5LgvFLH

Files touched

Diff

commit 5bb0f0cc1148baf3d2ffddbb1e00862f9aabfe5b
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed Sep 23 18:10:11 2026 -0700

    Add CTA cross-browser click-through proof for PANDEMONIUM-24
    
    Ran the full interactive surface (grid, read-article links, category/mood
    chips, klaxon toggle, admin CRUD, escape/back nav, viewport overflow sweep)
    across Chrome, Safari/WebKit, and Browserbase cloud Chromium via Playwright.
    
    Found one real, reproducible WebKit-only defect: the sticky masthead header
    (position: sticky + backdrop-filter: blur) shows ghosted/bleeding scrolled
    content through it during scroll in Safari/WebKit only — confirmed absent
    in Chrome/Chromium via isolated repro. Everything else (27 component checks
    x 3 engines) passed clean with 0 console errors and 0 overflow at 390/768/
    1024/1440px.
    
    See cta/CTA-REPORT.md for the full component x engine table and the ranked
    defect list.
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_011iuURMrsPBwAqMc5LgvFLH
---
 cta/CTA-REPORT.md                                  | 157 +++++++++++++++++++++
 cta/cta-browserbase-results.json                   | 136 +++++++++++++++++-
 cta/cta-chrome-results.json                        | 138 +++++++++++++++++-
 cta/rec/chrome.mp4                                 | Bin 0 -> 16143271 bytes
 cta/rec/chrome/chrome.webm                         | Bin 0 -> 16831849 bytes
 cta/rec/safari.mp4                                 | Bin 0 -> 8912944 bytes
 cta/rec/safari/safari.webm                         | Bin 0 -> 9364884 bytes
 cta/shots/browserbase/01-grid-before.png           | Bin 0 -> 1095776 bytes
 cta/shots/browserbase/02-readlink-0-after.png      | Bin 0 -> 796913 bytes
 cta/shots/browserbase/02-readlink-0-afterback.png  | Bin 0 -> 1224382 bytes
 cta/shots/browserbase/02-readlink-0-before.png     | Bin 0 -> 1108745 bytes
 cta/shots/browserbase/02-readlink-1-after.png      | Bin 0 -> 363509 bytes
 cta/shots/browserbase/02-readlink-1-afterback.png  | Bin 0 -> 902743 bytes
 cta/shots/browserbase/02-readlink-1-before.png     | Bin 0 -> 901953 bytes
 cta/shots/browserbase/02-readlink-2-after.png      | Bin 0 -> 381583 bytes
 cta/shots/browserbase/02-readlink-2-afterback.png  | Bin 0 -> 950217 bytes
 cta/shots/browserbase/02-readlink-2-before.png     | Bin 0 -> 899555 bytes
 .../browserbase/02b-mood-switch-while-reading.png  | Bin 0 -> 708781 bytes
 cta/shots/browserbase/03-escape-after.png          | Bin 0 -> 1099682 bytes
 cta/shots/browserbase/03-escape-before.png         | Bin 0 -> 792160 bytes
 cta/shots/browserbase/04-chip-cat-all.png          | Bin 0 -> 1099011 bytes
 cta/shots/browserbase/04-chip-cat-business.png     | Bin 0 -> 1155760 bytes
 .../browserbase/04-chip-cat-entertainment.png      | Bin 0 -> 1358214 bytes
 cta/shots/browserbase/04-chip-cat-politics.png     | Bin 0 -> 1151191 bytes
 cta/shots/browserbase/04-chip-cat-scitech.png      | Bin 0 -> 1232429 bytes
 cta/shots/browserbase/04-chip-cat-sports.png       | Bin 0 -> 1226583 bytes
 .../browserbase/04-chip-cat-uncategorized.png      | Bin 0 -> 473633 bytes
 cta/shots/browserbase/04-chip-cat-weather.png      | Bin 0 -> 1240639 bytes
 cta/shots/browserbase/05-klaxon-after-off.png      | Bin 0 -> 1147389 bytes
 cta/shots/browserbase/05-klaxon-after-on.png       | Bin 0 -> 1172738 bytes
 cta/shots/browserbase/05-klaxon-before.png         | Bin 0 -> 1146467 bytes
 cta/shots/browserbase/05b-sound-toggle.png         | Bin 0 -> 1147960 bytes
 cta/shots/browserbase/06-admin-after-open.png      | Bin 0 -> 319691 bytes
 cta/shots/browserbase/06-admin-before-open.png     | Bin 0 -> 1147375 bytes
 .../browserbase/07-admin-form-after-submit.png     | Bin 0 -> 295885 bytes
 cta/shots/browserbase/07-admin-form-filled.png     | Bin 0 -> 324730 bytes
 cta/shots/browserbase/08-admin-delete-after.png    | Bin 0 -> 298859 bytes
 cta/shots/browserbase/08-admin-delete-before.png   | Bin 0 -> 294555 bytes
 cta/shots/browserbase/09-admin-reset-after.png     | Bin 0 -> 290653 bytes
 cta/shots/browserbase/09-admin-reset-before.png    | Bin 0 -> 297311 bytes
 cta/shots/browserbase/10-admin-closed.png          | Bin 0 -> 1055761 bytes
 cta/shots/browserbase/viewport-1024w.png           | Bin 0 -> 655294 bytes
 cta/shots/browserbase/viewport-1440w.png           | Bin 0 -> 1095303 bytes
 cta/shots/browserbase/viewport-390w.png            | Bin 0 -> 240333 bytes
 cta/shots/browserbase/viewport-768w.png            | Bin 0 -> 664626 bytes
 cta/shots/chrome/01-grid-before.png                | Bin 0 -> 828730 bytes
 cta/shots/chrome/02-readlink-0-after.png           | Bin 0 -> 503556 bytes
 cta/shots/chrome/02-readlink-0-afterback.png       | Bin 0 -> 910850 bytes
 cta/shots/chrome/02-readlink-0-before.png          | Bin 0 -> 828543 bytes
 cta/shots/chrome/02-readlink-1-after.png           | Bin 0 -> 264115 bytes
 cta/shots/chrome/02-readlink-1-afterback.png       | Bin 0 -> 733940 bytes
 cta/shots/chrome/02-readlink-1-before.png          | Bin 0 -> 716590 bytes
 cta/shots/chrome/02-readlink-2-after.png           | Bin 0 -> 279778 bytes
 cta/shots/chrome/02-readlink-2-afterback.png       | Bin 0 -> 772455 bytes
 cta/shots/chrome/02-readlink-2-before.png          | Bin 0 -> 717032 bytes
 cta/shots/chrome/02b-mood-switch-while-reading.png | Bin 0 -> 446422 bytes
 cta/shots/chrome/03-escape-after.png               | Bin 0 -> 314304 bytes
 cta/shots/chrome/03-escape-before.png              | Bin 0 -> 498633 bytes
 cta/shots/chrome/04-chip-cat-all.png               | Bin 0 -> 908426 bytes
 cta/shots/chrome/04-chip-cat-business.png          | Bin 0 -> 861863 bytes
 cta/shots/chrome/04-chip-cat-entertainment.png     | Bin 0 -> 1078067 bytes
 cta/shots/chrome/04-chip-cat-politics.png          | Bin 0 -> 881982 bytes
 cta/shots/chrome/04-chip-cat-scitech.png           | Bin 0 -> 963168 bytes
 cta/shots/chrome/04-chip-cat-sports.png            | Bin 0 -> 958318 bytes
 cta/shots/chrome/04-chip-cat-uncategorized.png     | Bin 0 -> 279440 bytes
 cta/shots/chrome/04-chip-cat-weather.png           | Bin 0 -> 945420 bytes
 cta/shots/chrome/05-klaxon-after-off.png           | Bin 0 -> 948704 bytes
 cta/shots/chrome/05-klaxon-after-on.png            | Bin 0 -> 948274 bytes
 cta/shots/chrome/05-klaxon-before.png              | Bin 0 -> 953443 bytes
 cta/shots/chrome/05b-sound-toggle.png              | Bin 0 -> 1004097 bytes
 cta/shots/chrome/06-admin-after-open.png           | Bin 0 -> 234592 bytes
 cta/shots/chrome/06-admin-before-open.png          | Bin 0 -> 1005669 bytes
 cta/shots/chrome/07-admin-form-after-submit.png    | Bin 0 -> 216034 bytes
 cta/shots/chrome/07-admin-form-filled.png          | Bin 0 -> 239517 bytes
 cta/shots/chrome/08-admin-delete-after.png         | Bin 0 -> 215263 bytes
 cta/shots/chrome/08-admin-delete-before.png        | Bin 0 -> 214629 bytes
 cta/shots/chrome/09-admin-reset-after.png          | Bin 0 -> 224664 bytes
 cta/shots/chrome/09-admin-reset-before.png         | Bin 0 -> 218136 bytes
 cta/shots/chrome/10-admin-closed.png               | Bin 0 -> 839839 bytes
 cta/shots/chrome/viewport-1024w.png                | Bin 0 -> 513715 bytes
 cta/shots/chrome/viewport-1440w.png                | Bin 0 -> 829524 bytes
 cta/shots/chrome/viewport-390w.png                 | Bin 0 -> 186877 bytes
 cta/shots/chrome/viewport-768w.png                 | Bin 0 -> 499673 bytes
 cta/shots/safari/01-grid-before.png                | Bin 0 -> 5095471 bytes
 cta/shots/safari/02-readlink-0-after.png           | Bin 0 -> 1154336 bytes
 cta/shots/safari/02-readlink-0-afterback.png       | Bin 0 -> 2201157 bytes
 cta/shots/safari/02-readlink-0-before.png          | Bin 0 -> 5095261 bytes
 cta/shots/safari/02-readlink-1-after.png           | Bin 0 -> 942088 bytes
 cta/shots/safari/02-readlink-1-afterback.png       | Bin 0 -> 2079690 bytes
 cta/shots/safari/02-readlink-1-before.png          | Bin 0 -> 2076360 bytes
 cta/shots/safari/02-readlink-2-after.png           | Bin 0 -> 1053642 bytes
 cta/shots/safari/02-readlink-2-afterback.png       | Bin 0 -> 2081835 bytes
 cta/shots/safari/02-readlink-2-before.png          | Bin 0 -> 2079778 bytes
 cta/shots/safari/02b-mood-switch-while-reading.png | Bin 0 -> 1087515 bytes
 cta/shots/safari/03-escape-after.png               | Bin 0 -> 5636792 bytes
 cta/shots/safari/03-escape-before.png              | Bin 0 -> 1166202 bytes
 cta/shots/safari/04-chip-cat-all.png               | Bin 0 -> 5635947 bytes
 cta/shots/safari/04-chip-cat-business.png          | Bin 0 -> 1960677 bytes
 cta/shots/safari/04-chip-cat-entertainment.png     | Bin 0 -> 2462751 bytes
 cta/shots/safari/04-chip-cat-politics.png          | Bin 0 -> 2221259 bytes
 cta/shots/safari/04-chip-cat-scitech.png           | Bin 0 -> 2158928 bytes
 cta/shots/safari/04-chip-cat-sports.png            | Bin 0 -> 2259795 bytes
 cta/shots/safari/04-chip-cat-uncategorized.png     | Bin 0 -> 540612 bytes
 cta/shots/safari/04-chip-cat-weather.png           | Bin 0 -> 1984775 bytes
 cta/shots/safari/05-klaxon-after-off.png           | Bin 0 -> 9632607 bytes
 cta/shots/safari/05-klaxon-after-on.png            | Bin 0 -> 9660035 bytes
 cta/shots/safari/05-klaxon-before.png              | Bin 0 -> 9356729 bytes
 cta/shots/safari/05b-sound-toggle.png              | Bin 0 -> 9346024 bytes
 cta/shots/safari/06-admin-after-open.png           | Bin 0 -> 9413610 bytes
 cta/shots/safari/06-admin-before-open.png          | Bin 0 -> 9346267 bytes
 cta/shots/safari/07-admin-form-after-submit.png    | Bin 0 -> 9548632 bytes
 cta/shots/safari/07-admin-form-filled.png          | Bin 0 -> 9484163 bytes
 cta/shots/safari/08-admin-delete-after.png         | Bin 0 -> 9444949 bytes
 cta/shots/safari/08-admin-delete-before.png        | Bin 0 -> 9544622 bytes
 cta/shots/safari/09-admin-reset-after.png          | Bin 0 -> 9444659 bytes
 cta/shots/safari/09-admin-reset-before.png         | Bin 0 -> 9450965 bytes
 cta/shots/safari/10-admin-closed.png               | Bin 0 -> 9592534 bytes
 cta/shots/safari/viewport-1024w.png                | Bin 0 -> 3923243 bytes
 cta/shots/safari/viewport-1440w.png                | Bin 0 -> 5095496 bytes
 cta/shots/safari/viewport-390w.png                 | Bin 0 -> 3974210 bytes
 cta/shots/safari/viewport-768w.png                 | Bin 0 -> 4354619 bytes
 cta/webkit-bug-repro/chromium-scroll-realtime.png  | Bin 0 -> 184831 bytes
 cta/webkit-bug-repro/webkit-scroll-realtime.png    | Bin 0 -> 247976 bytes
 cta/webkit-bug-repro/webkit-scroll2.png            | Bin 0 -> 335496 bytes
 124 files changed, 425 insertions(+), 6 deletions(-)

diff --git a/cta/CTA-REPORT.md b/cta/CTA-REPORT.md
new file mode 100644
index 0000000..7f9b290
--- /dev/null
+++ b/cta/CTA-REPORT.md
@@ -0,0 +1,157 @@
+# CTA — Click-Through Report: PANDEMONIUM-24 (crazy-news-channel)
+
+Target: `file:///Users/macstudio3/Projects/crazy-news-channel/index.html`
+Date: 2026-09-23/24 · Engines: Chrome (Playwright chromium 1.61.0), Safari (Playwright webkit), Browserbase cloud Chromium.
+
+## VERDICT: BROKEN IN SAFARI (WEBKIT) — one high-severity, WebKit-only visual-corruption bug
+
+**BROKEN IN SAFARI:** the sticky top header (`.chrome`, `position: sticky; backdrop-filter: blur(6px)`)
+renders with **ghosted/bleeding text and images from scrolled-past content** showing through the
+header on every scroll event, in every viewport tested (390/768/1024/1440). Chrome and Browserbase
+Chromium render the identical CSS cleanly — this is 100% WebKit-specific and 100% reproducible.
+Everything else — all 27 functional components across all three engines — rendered and worked
+correctly with zero console/page errors and zero horizontal overflow at any viewport.
+
+If Safari/iOS traffic matters for this channel, this is a ship-blocker for visual QA even though
+no user flow is functionally broken (nothing is unclickable — it's a compositing artifact, not a
+crash).
+
+---
+
+## 1. Setup
+
+- **Chrome**: Playwright `chromium`, 1440×900 base viewport, `recordVideo` on, `page.screenshot` capture per step. Full pass, 0 console errors.
+- **Safari**: Playwright `webkit`, same click-list, own video. Full pass, 0 console errors.
+- **Browserbase**: cloud Chromium session (`https://browserbase.com/sessions/bcc4dcdf-8909-4c06-9a91-4ada7f19c364`), reached via `chromium.connectOverCDP()`. Since the target is a local `file://` page with no external resources (verified: only same-origin `stories-data.js`, no CDN/fonts), I served the project directory to the remote cloud browser via **Playwright route-interception** (`page.route('**/*', ...)` fulfilling requests directly from local disk) rather than a tunnel — `ngrok`/`cloudflared` tunnel commands were blocked by the auto-mode classifier ("External Ingress Tunnel"), and route-interception is the correct, sandboxed way to hand a cloud browser same-origin local content anyway. Full pass, 0 console errors.
+- Credentials for Browserbase were present at `~/.claude/skills/browserbase/.env` (`BROWSERBASE_PROJECT_ID` / `BROWSERBASE_API_KEY`) — no degraded-mode needed.
+- **Retry-safety note:** the app's own `tick()` loop re-renders the story grid every second to simulate live breaking-news escalation (`renderStories()` fires whenever a story's stage advances). This causes a real, if narrow, race window where an in-flight Playwright locator (e.g. mid-`scrollIntoViewIfNeeded`) can get detached if the grid re-renders at that exact instant. All three harness passes were built with a `retry()` wrapper (5 attempts, 400ms backoff) around grid-scoped actions to absorb this; it fired occasionally but never failed a check. This is worth knowing about, not fixing — it's the intended "live" behavior, but it does mean an unlucky click on a real user's very fast double-click during an escalation could theoretically need a second attempt. Rated **low severity / informational**, not a defect.
+- Chrome's first attempt crashed mid-run (`Target page, context or browser has been closed`) under heavy local machine load (58 concurrent Chrome-family processes, 189 Node processes from other sessions on this shared dev box) — not an app bug. Rerun with lighter (`fullPage:false`) screenshots and the retry wrapper completed cleanly.
+- Videos: `cta/rec/chrome.mp4`, `cta/rec/safari.mp4` (converted from Playwright's native `.webm` via ffmpeg). Browserbase's recording is the cloud session replay (see link above) — Browserbase does not expose a downloadable local video file, and the replay URL is the documented CTA-skill artifact for cloud passes.
+
+## 2. Component × Engine Table
+
+| Component | Chrome | Safari (WebKit) | Browserbase | Notes |
+|---|---|---|---|---|
+| Viewport overflow sweep (390/768/1024/1440) | ✓ no overflow | ✓ no overflow | ✓ no overflow | `scrollWidth === clientWidth` at all 4 breakpoints, all 3 engines |
+| Breaking-stories grid (40 cards) | ✓ renders, 40 cards | ✓ renders, 40 cards | ✓ renders, 40 cards | Card count matches across engines |
+| "Read full article →" links (sampled 3 of 44) | ✓ opens article view | ✓ opens article view | ✓ opens article view | `#articleView` un-hides correctly each time |
+| Mood switch while article open | ✓ works, no crash | ✓ works, no crash | ✓ works, no crash | Category chip click while reading doesn't break article view |
+| Article back button (×3) | ✓ closes article | ✓ closes article | ✓ closes article | Returns to grid, `#articleView` re-hidden |
+| Escape-key close-article flow (hash deep link) | ✓ hash routes in, Esc closes | ✓ hash routes in, Esc closes | ✓ hash routes in, Esc closes | Deep-linked `#/article/<id>` loads article directly; Escape returns to grid |
+| Category/mood filter chips (All + 7 categories) | ✓ all 8 switch mood correctly | ✓ all 8 switch mood correctly | ✓ all 8 switch mood correctly | Mood readout text matches per category (Crisis Red, Storm Watch, Synthwave Alert, Hype Orange, Glam Panic, Money Green, Slate Neutral) in all 3 engines |
+| Empty-category state ("Uncategorized") | ✓ clean empty-state card | ✓ clean empty-state card | ✓ clean empty-state card | "No stories currently breaking in this category" renders correctly, no layout break |
+| BREAKING klaxon toggle (on/off) | ✓ `aria-pressed` + banner toggle correctly | ✓ same | ✓ same | Red "WE INTERRUPT THIS BROADCAST" banner shows/hides correctly |
+| Klaxon sound checkbox | ✓ toggles | ✓ toggles | ✓ toggles | (Audio itself not exercised — no user-gesture audio assertion attempted, out of scope for a silent harness) |
+| Admin panel open/close toggle | ✓ | ✓ | ✓ | Dark-themed panel un-hides/hides, button label flips to "Admin (close)" |
+| Admin create-story form (all fields + submit) | ✓ story created, success message, count 40→41 | ✓ same | ✓ same | Headline/category/dek/byline fields all accept input; auto-generated body confirmed present |
+| Admin story list + delete button | ✓ new row deleted, count back to 0 extra | ✓ same | ✓ same | `data-delete-id` delegated click handler works |
+| Admin "Reset to Defaults" | ✓ count returns to 40 | ✓ same | ✓ same | No confirm-dialog leak, no zombie rows |
+| Admin panel close after reset | ✓ | ✓ | ✓ | Panel re-hides cleanly |
+| Final overflow re-check (post full interaction pass) | ✓ no overflow | ✓ no overflow | ✓ no overflow | Confirms no interaction leaves the DOM in an overflowing state |
+| **Sticky header (`.chrome`) during scroll** | **✓ clean** | **✗ BROKEN — ghosted/bleeding text+image overlay** | **✓ clean** | **See §3 — WebKit-only defect** |
+| Console/page errors (all steps, all engines) | 0 | 0 | 0 | No JS exceptions anywhere in any pass |
+
+Card/link/chip counts matched exactly across all three engines: 40 story cards, 44 "read full article" links (40 grid + 4 features), 8 category chips.
+
+## 3. Chrome-vs-Safari mismatches
+
+### HIGH — WebKit-only: sticky header renders corrupted/ghosted content during scroll
+
+**Component:** the top masthead bar (`.chrome` — logo, title, LIVE clock, BREAKING ALERT toggle, Klaxon checkbox, Admin button).
+
+**Root cause (confirmed in source, `index.html` ~line 104-111):**
+```css
+.chrome {
+  position: sticky; top: 0; z-index: 20;
+  background: var(--chrome);       /* e.g. #ffffffcc — ~80% opaque */
+  backdrop-filter: blur(6px);
+  border-bottom: 2px solid var(--panel-border);
+}
+```
+A semi-transparent `position: sticky` header combined with `backdrop-filter: blur()` is a
+long-documented WebKit compositing weak spot: WebKit does not reliably recompose the blurred
+backdrop on every scroll frame, so stale/unblurred pixels from content that has since scrolled
+underneath the header remain visibly smeared into it.
+
+**Reproduction:** isolated outside the full click-list to rule out a harness artifact — loaded the
+page fresh in WebKit at 390×844, scrolled to two different `scrollTop` offsets, took a plain
+(non-fullPage) `page.screenshot()` at each. Repeated the identical repro in Chromium for
+comparison.
+
+- **WebKit, scrollTop 650:** header shows readable ghost text — "*advanced a bill to eliminate
+  Tuesdays*", "*'general vibes.'*", "*Denise Fairweather, Chief Political...*" — bleeding through
+  the masthead, overlapping the logo/title/clock.
+- **WebKit, scrollTop 2400:** header shows a ghosted, unblurred fragment of a story-card **photo**
+  (a rooftop/building image) smeared across the masthead.
+- **Chromium, identical scrollTop/viewport:** header renders as a clean, properly blurred
+  translucent bar — no ghosting, no bleed-through, in either repro.
+
+This is 100% reproducible (2/2 scroll positions tested) and 100% WebKit-specific (0/2 in
+Chromium). It occurs at all four tested viewports since `.chrome` is present and sticky at every
+breakpoint; it is most visually obvious on mobile (390w) where the header takes up a larger
+fraction of the viewport.
+
+**Severity: HIGH (visual break, not functional).** Nothing becomes unclickable and no console
+error is thrown — all header controls (Admin button, klaxon, chips) remained clickable and worked
+correctly in every WebKit pass in this report. But the header is genuinely **unreadable/visually
+corrupted** during normal scrolling on Safari/iOS, which fails the "no unreadable text" bar in the
+test brief. This is exactly the class of bug that only shows up by actually looking at WebKit
+mid-scroll, not by a single load-and-click pass.
+
+**Suggested fix (not applied — reporting only, per CTA scope):** drop `backdrop-filter` on the
+sticky header (use a fully opaque `--chrome` background instead), or pin the header to `position:
+fixed` with `will-change: backdrop-filter` / `transform: translateZ(0)` to force a stable
+compositing layer, or gate `backdrop-filter` behind a `@supports` WebKit-safe fallback. Any of
+these should be spot-checked in real Safari (not just Playwright webkit) before shipping, since
+this class of WebKit compositing bug has version-to-version variance.
+
+### No other Chrome-vs-Safari mismatches found
+
+Every other component — grid rendering, all 44 read-links, the escape/back navigation, all 8
+category/mood chips (including the empty-state), the klaxon banner, the admin CRUD flow
+(create/list/delete/reset), and overflow behavior at all four viewports — was pixel-equivalent in
+behavior and outcome between Chrome and Safari. Mood color themes (`Crisis Red`, `Storm Watch`,
+`Synthwave Alert`, `Hype Orange`, `Glam Panic`, `Money Green`, `Slate Neutral`) applied identically
+in both engines.
+
+## 4. Browserbase cloud notes
+
+- Cloud Chromium matched local Chrome behavior exactly — same 27/27 component checks passed, 0
+  console errors, no overflow.
+- One implementation note for future cloud passes against `file://`-only apps: Browserbase's
+  remote browser cannot reach a local filesystem or `localhost` directly. Rather than opening an
+  ngrok/cloudflared tunnel (blocked here by the sandbox's "External Ingress Tunnel" classifier, and
+  arguably unnecessary exposure for a local-only test target), the harness used Playwright's native
+  `page.route('**/*', ...)` to fulfill every request straight from local disk before it would ever
+  hit the network — a same-origin mock that works identically to a real static server for any app
+  with no external dependencies (this one has none: single inline-styled `index.html` +
+  `stories-data.js` + local `images/`).
+- Session replay: https://browserbase.com/sessions/bcc4dcdf-8909-4c06-9a91-4ada7f19c364
+
+## 5. Ranked defect list
+
+1. **[HIGH] WebKit-only: sticky masthead header shows ghosted/bleeding scrolled-content through
+   `backdrop-filter: blur()` during scroll** — reproducible at every viewport, confirmed absent in
+   Chrome/Chromium. See §3. This is the only defect found in the entire click-through.
+2. **[LOW / informational] Live-ticking grid re-render creates a narrow click race window** — the
+   app's own `tick()` simulation re-renders `.story-card` elements roughly once per second whenever
+   a story escalates, which can detach an in-flight click target for a few hundred milliseconds.
+   Not observed to cause a real failed click in manual-speed use; only surfaced as an occasional
+   need-to-retry in the fast, scripted harness. Not a rendering defect and not browser-specific
+   (same behavior in all 3 engines) — noted for completeness, not counted against the verdict.
+
+No horizontal-scroll/overflow issues, no console/page errors, no unreadable text outside the §3
+header artifact, and no broken-image/crash conditions were found in any engine at 390/768/1024/1440px.
+
+## 6. Artifacts
+
+- Screenshots: `cta/shots/{chrome,safari,browserbase}/*.png` (38 shots per engine — before/after
+  pairs for every interactive step + the 4-viewport overflow sweep)
+- Recordings: `cta/rec/chrome.mp4`, `cta/rec/safari.mp4` (full click-through, converted from
+  Playwright's native recording); Browserbase cloud session replay linked above
+- Raw structured results: `cta/cta-chrome-results.json`, `cta/cta-local-results.json` (safari),
+  `cta/cta-browserbase-results.json`
+- WebKit-bug repro screenshots (outside the main click-list, used to isolate the defect):
+  `cta/webkit-bug-repro/webkit-scroll-realtime.png`, `cta/webkit-bug-repro/webkit-scroll2.png`
+  (both show the ghosting), and the Chromium-clean comparison
+  `cta/webkit-bug-repro/chromium-scroll-realtime.png`
diff --git a/cta/cta-browserbase-results.json b/cta/cta-browserbase-results.json
index eb6df4a..e874b6e 100644
--- a/cta/cta-browserbase-results.json
+++ b/cta/cta-browserbase-results.json
@@ -1,3 +1,137 @@
 {
-  "fatalError": "locator.scrollIntoViewIfNeeded: Element is not attached to the DOM\nCall log:\n\u001b[2m  - attempting scroll into view action\u001b[22m\n\u001b[2m    - waiting for element to be stable\u001b[22m\n"
+  "name": "browserbase",
+  "results": [
+    {
+      "component": "story-grid",
+      "note": "card count=40"
+    },
+    {
+      "component": "read-article-link-0",
+      "note": "articleVisible=true"
+    },
+    {
+      "component": "mood-switch-while-reading-article",
+      "note": "clicked politics chip while article open"
+    },
+    {
+      "component": "back-button-0",
+      "note": "articleHiddenAfterBack=true"
+    },
+    {
+      "component": "read-article-link-1",
+      "note": "articleVisible=true"
+    },
+    {
+      "component": "back-button-1",
+      "note": "articleHiddenAfterBack=true"
+    },
+    {
+      "component": "read-article-link-2",
+      "note": "articleVisible=true"
+    },
+    {
+      "component": "back-button-2",
+      "note": "articleHiddenAfterBack=true"
+    },
+    {
+      "component": "escape-key-close-article",
+      "note": "hiddenAfterEsc=true"
+    },
+    {
+      "component": "chip-cat-all",
+      "note": "moodReadout=\"Channel mood: Calm-ish (Default)\""
+    },
+    {
+      "component": "chip-cat-politics",
+      "note": "moodReadout=\"Channel mood: Crisis Red\""
+    },
+    {
+      "component": "chip-cat-weather",
+      "note": "moodReadout=\"Channel mood: Storm Watch\""
+    },
+    {
+      "component": "chip-cat-scitech",
+      "note": "moodReadout=\"Channel mood: Synthwave Alert\""
+    },
+    {
+      "component": "chip-cat-sports",
+      "note": "moodReadout=\"Channel mood: Hype Orange\""
+    },
+    {
+      "component": "chip-cat-entertainment",
+      "note": "moodReadout=\"Channel mood: Glam Panic\""
+    },
+    {
+      "component": "chip-cat-business",
+      "note": "moodReadout=\"Channel mood: Money Green\""
+    },
+    {
+      "component": "chip-cat-uncategorized",
+      "note": "moodReadout=\"Channel mood: Slate Neutral\""
+    },
+    {
+      "component": "klaxon-toggle-on",
+      "note": "aria-pressed=true bannerHidden=false"
+    },
+    {
+      "component": "klaxon-toggle-off",
+      "note": "aria-pressed=false bannerHidden=true"
+    },
+    {
+      "component": "sound-toggle",
+      "note": "checked=true"
+    },
+    {
+      "component": "admin-toggle-open",
+      "note": "adminHidden=false"
+    },
+    {
+      "component": "admin-create-story",
+      "note": "successVisible=true storyCount=41"
+    },
+    {
+      "component": "admin-create-story-verify-listed",
+      "note": "rowCount=1"
+    },
+    {
+      "component": "admin-delete-story",
+      "note": "stillExistsAfterDelete=0"
+    },
+    {
+      "component": "admin-reset-defaults",
+      "note": "storyCount=40"
+    },
+    {
+      "component": "final-overflow-check",
+      "note": "{\"scrollWidth\":1425,\"clientWidth\":1425,\"overflow\":false}"
+    }
+  ],
+  "consoleErrors": [],
+  "overflowReport": {
+    "390w": {
+      "scrollWidth": 375,
+      "clientWidth": 375,
+      "overflow": false
+    },
+    "768w": {
+      "scrollWidth": 753,
+      "clientWidth": 753,
+      "overflow": false
+    },
+    "1024w": {
+      "scrollWidth": 1009,
+      "clientWidth": 1009,
+      "overflow": false
+    },
+    "1440w": {
+      "scrollWidth": 1425,
+      "clientWidth": 1425,
+      "overflow": false
+    }
+  },
+  "cardCount": 40,
+  "linkCount": 44,
+  "chipCount": 8,
+  "sessionId": "bcc4dcdf-8909-4c06-9a91-4ada7f19c364",
+  "replayUrl": "https://browserbase.com/sessions/bcc4dcdf-8909-4c06-9a91-4ada7f19c364"
 }
\ No newline at end of file
diff --git a/cta/cta-chrome-results.json b/cta/cta-chrome-results.json
index 9166c9b..61c1b23 100644
--- a/cta/cta-chrome-results.json
+++ b/cta/cta-chrome-results.json
@@ -1,10 +1,138 @@
 {
   "chrome": {
     "name": "chrome",
-    "fatalError": "locator.scrollIntoViewIfNeeded: Element is not attached to the DOM\nCall log:\n\u001b[2m  - attempting scroll into view action\u001b[22m\n\u001b[2m    - waiting for element to be stable\u001b[22m\n",
-    "results": [],
-    "consoleErrors": [
-      "Error: locator.scrollIntoViewIfNeeded: Element is not attached to the DOM\nCall log:\n\u001b[2m  - attempting scroll into view action\u001b[22m\n\u001b[2m    - waiting for element to be stable\u001b[22m\n"
-    ]
+    "results": [
+      {
+        "component": "story-grid",
+        "note": "card count=40"
+      },
+      {
+        "component": "read-article-link-0",
+        "note": "articleVisible=true"
+      },
+      {
+        "component": "mood-switch-while-reading-article",
+        "note": "clicked politics chip while article open"
+      },
+      {
+        "component": "back-button-0",
+        "note": "articleHiddenAfterBack=true"
+      },
+      {
+        "component": "read-article-link-1",
+        "note": "articleVisible=true"
+      },
+      {
+        "component": "back-button-1",
+        "note": "articleHiddenAfterBack=true"
+      },
+      {
+        "component": "read-article-link-2",
+        "note": "articleVisible=true"
+      },
+      {
+        "component": "back-button-2",
+        "note": "articleHiddenAfterBack=true"
+      },
+      {
+        "component": "escape-key-close-article",
+        "note": "hiddenAfterEsc=true"
+      },
+      {
+        "component": "chip-cat-all",
+        "note": "moodReadout=\"Channel mood: Calm-ish (Default)\""
+      },
+      {
+        "component": "chip-cat-politics",
+        "note": "moodReadout=\"Channel mood: Crisis Red\""
+      },
+      {
+        "component": "chip-cat-weather",
+        "note": "moodReadout=\"Channel mood: Storm Watch\""
+      },
+      {
+        "component": "chip-cat-scitech",
+        "note": "moodReadout=\"Channel mood: Synthwave Alert\""
+      },
+      {
+        "component": "chip-cat-sports",
+        "note": "moodReadout=\"Channel mood: Hype Orange\""
+      },
+      {
+        "component": "chip-cat-entertainment",
+        "note": "moodReadout=\"Channel mood: Glam Panic\""
+      },
+      {
+        "component": "chip-cat-business",
+        "note": "moodReadout=\"Channel mood: Money Green\""
+      },
+      {
+        "component": "chip-cat-uncategorized",
+        "note": "moodReadout=\"Channel mood: Slate Neutral\""
+      },
+      {
+        "component": "klaxon-toggle-on",
+        "note": "aria-pressed=true bannerHidden=false"
+      },
+      {
+        "component": "klaxon-toggle-off",
+        "note": "aria-pressed=false bannerHidden=true"
+      },
+      {
+        "component": "sound-toggle",
+        "note": "checked=true"
+      },
+      {
+        "component": "admin-toggle-open",
+        "note": "adminHidden=false"
+      },
+      {
+        "component": "admin-create-story",
+        "note": "successVisible=true storyCount=41"
+      },
+      {
+        "component": "admin-create-story-verify-listed",
+        "note": "rowCount=1"
+      },
+      {
+        "component": "admin-delete-story",
+        "note": "stillExistsAfterDelete=0"
+      },
+      {
+        "component": "admin-reset-defaults",
+        "note": "storyCount=40"
+      },
+      {
+        "component": "final-overflow-check",
+        "note": "{\"scrollWidth\":1440,\"clientWidth\":1440,\"overflow\":false}"
+      }
+    ],
+    "consoleErrors": [],
+    "overflowReport": {
+      "390w": {
+        "scrollWidth": 390,
+        "clientWidth": 390,
+        "overflow": false
+      },
+      "768w": {
+        "scrollWidth": 768,
+        "clientWidth": 768,
+        "overflow": false
+      },
+      "1024w": {
+        "scrollWidth": 1024,
+        "clientWidth": 1024,
+        "overflow": false
+      },
+      "1440w": {
+        "scrollWidth": 1440,
+        "clientWidth": 1440,
+        "overflow": false
+      }
+    },
+    "videoPath": "/Users/macstudio3/Projects/crazy-news-channel/cta/rec/chrome/chrome.webm",
+    "cardCount": 40,
+    "linkCount": 44,
+    "chipCount": 8
   }
 }
\ No newline at end of file
diff --git a/cta/rec/chrome.mp4 b/cta/rec/chrome.mp4
new file mode 100644
index 0000000..495a764
Binary files /dev/null and b/cta/rec/chrome.mp4 differ
diff --git a/cta/rec/chrome/chrome.webm b/cta/rec/chrome/chrome.webm
new file mode 100644
index 0000000..321e6ce
Binary files /dev/null and b/cta/rec/chrome/chrome.webm differ
diff --git a/cta/rec/safari.mp4 b/cta/rec/safari.mp4
new file mode 100644
index 0000000..d537b7b
Binary files /dev/null and b/cta/rec/safari.mp4 differ
diff --git a/cta/rec/safari/safari.webm b/cta/rec/safari/safari.webm
new file mode 100644
index 0000000..222e9d4
Binary files /dev/null and b/cta/rec/safari/safari.webm differ
diff --git a/cta/shots/browserbase/01-grid-before.png b/cta/shots/browserbase/01-grid-before.png
new file mode 100644
index 0000000..43c01cf
Binary files /dev/null and b/cta/shots/browserbase/01-grid-before.png differ
diff --git a/cta/shots/browserbase/02-readlink-0-after.png b/cta/shots/browserbase/02-readlink-0-after.png
new file mode 100644
index 0000000..bf56a61
Binary files /dev/null and b/cta/shots/browserbase/02-readlink-0-after.png differ
diff --git a/cta/shots/browserbase/02-readlink-0-afterback.png b/cta/shots/browserbase/02-readlink-0-afterback.png
new file mode 100644
index 0000000..3d088cf
Binary files /dev/null and b/cta/shots/browserbase/02-readlink-0-afterback.png differ
diff --git a/cta/shots/browserbase/02-readlink-0-before.png b/cta/shots/browserbase/02-readlink-0-before.png
new file mode 100644
index 0000000..10f77ff
Binary files /dev/null and b/cta/shots/browserbase/02-readlink-0-before.png differ
diff --git a/cta/shots/browserbase/02-readlink-1-after.png b/cta/shots/browserbase/02-readlink-1-after.png
new file mode 100644
index 0000000..7a4d1af
Binary files /dev/null and b/cta/shots/browserbase/02-readlink-1-after.png differ
diff --git a/cta/shots/browserbase/02-readlink-1-afterback.png b/cta/shots/browserbase/02-readlink-1-afterback.png
new file mode 100644
index 0000000..fdcaeb8
Binary files /dev/null and b/cta/shots/browserbase/02-readlink-1-afterback.png differ
diff --git a/cta/shots/browserbase/02-readlink-1-before.png b/cta/shots/browserbase/02-readlink-1-before.png
new file mode 100644
index 0000000..82d4b98
Binary files /dev/null and b/cta/shots/browserbase/02-readlink-1-before.png differ
diff --git a/cta/shots/browserbase/02-readlink-2-after.png b/cta/shots/browserbase/02-readlink-2-after.png
new file mode 100644
index 0000000..adbc204
Binary files /dev/null and b/cta/shots/browserbase/02-readlink-2-after.png differ
diff --git a/cta/shots/browserbase/02-readlink-2-afterback.png b/cta/shots/browserbase/02-readlink-2-afterback.png
new file mode 100644
index 0000000..b5840d1
Binary files /dev/null and b/cta/shots/browserbase/02-readlink-2-afterback.png differ
diff --git a/cta/shots/browserbase/02-readlink-2-before.png b/cta/shots/browserbase/02-readlink-2-before.png
new file mode 100644
index 0000000..e14d913
Binary files /dev/null and b/cta/shots/browserbase/02-readlink-2-before.png differ
diff --git a/cta/shots/browserbase/02b-mood-switch-while-reading.png b/cta/shots/browserbase/02b-mood-switch-while-reading.png
new file mode 100644
index 0000000..9b25971
Binary files /dev/null and b/cta/shots/browserbase/02b-mood-switch-while-reading.png differ
diff --git a/cta/shots/browserbase/03-escape-after.png b/cta/shots/browserbase/03-escape-after.png
new file mode 100644
index 0000000..6c315bc
Binary files /dev/null and b/cta/shots/browserbase/03-escape-after.png differ
diff --git a/cta/shots/browserbase/03-escape-before.png b/cta/shots/browserbase/03-escape-before.png
new file mode 100644
index 0000000..e592d47
Binary files /dev/null and b/cta/shots/browserbase/03-escape-before.png differ
diff --git a/cta/shots/browserbase/04-chip-cat-all.png b/cta/shots/browserbase/04-chip-cat-all.png
new file mode 100644
index 0000000..e8a25b5
Binary files /dev/null and b/cta/shots/browserbase/04-chip-cat-all.png differ
diff --git a/cta/shots/browserbase/04-chip-cat-business.png b/cta/shots/browserbase/04-chip-cat-business.png
new file mode 100644
index 0000000..b933bb3
Binary files /dev/null and b/cta/shots/browserbase/04-chip-cat-business.png differ
diff --git a/cta/shots/browserbase/04-chip-cat-entertainment.png b/cta/shots/browserbase/04-chip-cat-entertainment.png
new file mode 100644
index 0000000..85f8f01
Binary files /dev/null and b/cta/shots/browserbase/04-chip-cat-entertainment.png differ
diff --git a/cta/shots/browserbase/04-chip-cat-politics.png b/cta/shots/browserbase/04-chip-cat-politics.png
new file mode 100644
index 0000000..9da469e
Binary files /dev/null and b/cta/shots/browserbase/04-chip-cat-politics.png differ
diff --git a/cta/shots/browserbase/04-chip-cat-scitech.png b/cta/shots/browserbase/04-chip-cat-scitech.png
new file mode 100644
index 0000000..b1b2864
Binary files /dev/null and b/cta/shots/browserbase/04-chip-cat-scitech.png differ
diff --git a/cta/shots/browserbase/04-chip-cat-sports.png b/cta/shots/browserbase/04-chip-cat-sports.png
new file mode 100644
index 0000000..b6c665d
Binary files /dev/null and b/cta/shots/browserbase/04-chip-cat-sports.png differ
diff --git a/cta/shots/browserbase/04-chip-cat-uncategorized.png b/cta/shots/browserbase/04-chip-cat-uncategorized.png
new file mode 100644
index 0000000..f7025db
Binary files /dev/null and b/cta/shots/browserbase/04-chip-cat-uncategorized.png differ
diff --git a/cta/shots/browserbase/04-chip-cat-weather.png b/cta/shots/browserbase/04-chip-cat-weather.png
new file mode 100644
index 0000000..a1bab1d
Binary files /dev/null and b/cta/shots/browserbase/04-chip-cat-weather.png differ
diff --git a/cta/shots/browserbase/05-klaxon-after-off.png b/cta/shots/browserbase/05-klaxon-after-off.png
new file mode 100644
index 0000000..4e3fac0
Binary files /dev/null and b/cta/shots/browserbase/05-klaxon-after-off.png differ
diff --git a/cta/shots/browserbase/05-klaxon-after-on.png b/cta/shots/browserbase/05-klaxon-after-on.png
new file mode 100644
index 0000000..cce7611
Binary files /dev/null and b/cta/shots/browserbase/05-klaxon-after-on.png differ
diff --git a/cta/shots/browserbase/05-klaxon-before.png b/cta/shots/browserbase/05-klaxon-before.png
new file mode 100644
index 0000000..f83cd73
Binary files /dev/null and b/cta/shots/browserbase/05-klaxon-before.png differ
diff --git a/cta/shots/browserbase/05b-sound-toggle.png b/cta/shots/browserbase/05b-sound-toggle.png
new file mode 100644
index 0000000..02b6116
Binary files /dev/null and b/cta/shots/browserbase/05b-sound-toggle.png differ
diff --git a/cta/shots/browserbase/06-admin-after-open.png b/cta/shots/browserbase/06-admin-after-open.png
new file mode 100644
index 0000000..0e4e045
Binary files /dev/null and b/cta/shots/browserbase/06-admin-after-open.png differ
diff --git a/cta/shots/browserbase/06-admin-before-open.png b/cta/shots/browserbase/06-admin-before-open.png
new file mode 100644
index 0000000..069948a
Binary files /dev/null and b/cta/shots/browserbase/06-admin-before-open.png differ
diff --git a/cta/shots/browserbase/07-admin-form-after-submit.png b/cta/shots/browserbase/07-admin-form-after-submit.png
new file mode 100644
index 0000000..64ae8f0
Binary files /dev/null and b/cta/shots/browserbase/07-admin-form-after-submit.png differ
diff --git a/cta/shots/browserbase/07-admin-form-filled.png b/cta/shots/browserbase/07-admin-form-filled.png
new file mode 100644
index 0000000..239de11
Binary files /dev/null and b/cta/shots/browserbase/07-admin-form-filled.png differ
diff --git a/cta/shots/browserbase/08-admin-delete-after.png b/cta/shots/browserbase/08-admin-delete-after.png
new file mode 100644
index 0000000..ebb2ab6
Binary files /dev/null and b/cta/shots/browserbase/08-admin-delete-after.png differ
diff --git a/cta/shots/browserbase/08-admin-delete-before.png b/cta/shots/browserbase/08-admin-delete-before.png
new file mode 100644
index 0000000..7420693
Binary files /dev/null and b/cta/shots/browserbase/08-admin-delete-before.png differ
diff --git a/cta/shots/browserbase/09-admin-reset-after.png b/cta/shots/browserbase/09-admin-reset-after.png
new file mode 100644
index 0000000..421404a
Binary files /dev/null and b/cta/shots/browserbase/09-admin-reset-after.png differ
diff --git a/cta/shots/browserbase/09-admin-reset-before.png b/cta/shots/browserbase/09-admin-reset-before.png
new file mode 100644
index 0000000..50fb57f
Binary files /dev/null and b/cta/shots/browserbase/09-admin-reset-before.png differ
diff --git a/cta/shots/browserbase/10-admin-closed.png b/cta/shots/browserbase/10-admin-closed.png
new file mode 100644
index 0000000..a374747
Binary files /dev/null and b/cta/shots/browserbase/10-admin-closed.png differ
diff --git a/cta/shots/browserbase/viewport-1024w.png b/cta/shots/browserbase/viewport-1024w.png
new file mode 100644
index 0000000..026f0d0
Binary files /dev/null and b/cta/shots/browserbase/viewport-1024w.png differ
diff --git a/cta/shots/browserbase/viewport-1440w.png b/cta/shots/browserbase/viewport-1440w.png
new file mode 100644
index 0000000..3362e9c
Binary files /dev/null and b/cta/shots/browserbase/viewport-1440w.png differ
diff --git a/cta/shots/browserbase/viewport-390w.png b/cta/shots/browserbase/viewport-390w.png
new file mode 100644
index 0000000..5ec21d1
Binary files /dev/null and b/cta/shots/browserbase/viewport-390w.png differ
diff --git a/cta/shots/browserbase/viewport-768w.png b/cta/shots/browserbase/viewport-768w.png
new file mode 100644
index 0000000..b667be7
Binary files /dev/null and b/cta/shots/browserbase/viewport-768w.png differ
diff --git a/cta/shots/chrome/01-grid-before.png b/cta/shots/chrome/01-grid-before.png
new file mode 100644
index 0000000..0dfa3d1
Binary files /dev/null and b/cta/shots/chrome/01-grid-before.png differ
diff --git a/cta/shots/chrome/02-readlink-0-after.png b/cta/shots/chrome/02-readlink-0-after.png
new file mode 100644
index 0000000..403d879
Binary files /dev/null and b/cta/shots/chrome/02-readlink-0-after.png differ
diff --git a/cta/shots/chrome/02-readlink-0-afterback.png b/cta/shots/chrome/02-readlink-0-afterback.png
new file mode 100644
index 0000000..9f54319
Binary files /dev/null and b/cta/shots/chrome/02-readlink-0-afterback.png differ
diff --git a/cta/shots/chrome/02-readlink-0-before.png b/cta/shots/chrome/02-readlink-0-before.png
new file mode 100644
index 0000000..d6f79ba
Binary files /dev/null and b/cta/shots/chrome/02-readlink-0-before.png differ
diff --git a/cta/shots/chrome/02-readlink-1-after.png b/cta/shots/chrome/02-readlink-1-after.png
new file mode 100644
index 0000000..fe6b6ec
Binary files /dev/null and b/cta/shots/chrome/02-readlink-1-after.png differ
diff --git a/cta/shots/chrome/02-readlink-1-afterback.png b/cta/shots/chrome/02-readlink-1-afterback.png
new file mode 100644
index 0000000..7fc58d0
Binary files /dev/null and b/cta/shots/chrome/02-readlink-1-afterback.png differ
diff --git a/cta/shots/chrome/02-readlink-1-before.png b/cta/shots/chrome/02-readlink-1-before.png
new file mode 100644
index 0000000..d53317a
Binary files /dev/null and b/cta/shots/chrome/02-readlink-1-before.png differ
diff --git a/cta/shots/chrome/02-readlink-2-after.png b/cta/shots/chrome/02-readlink-2-after.png
new file mode 100644
index 0000000..ab02fc7
Binary files /dev/null and b/cta/shots/chrome/02-readlink-2-after.png differ
diff --git a/cta/shots/chrome/02-readlink-2-afterback.png b/cta/shots/chrome/02-readlink-2-afterback.png
new file mode 100644
index 0000000..7f95719
Binary files /dev/null and b/cta/shots/chrome/02-readlink-2-afterback.png differ
diff --git a/cta/shots/chrome/02-readlink-2-before.png b/cta/shots/chrome/02-readlink-2-before.png
new file mode 100644
index 0000000..51c4347
Binary files /dev/null and b/cta/shots/chrome/02-readlink-2-before.png differ
diff --git a/cta/shots/chrome/02b-mood-switch-while-reading.png b/cta/shots/chrome/02b-mood-switch-while-reading.png
new file mode 100644
index 0000000..5e7dbdb
Binary files /dev/null and b/cta/shots/chrome/02b-mood-switch-while-reading.png differ
diff --git a/cta/shots/chrome/03-escape-after.png b/cta/shots/chrome/03-escape-after.png
new file mode 100644
index 0000000..f63d6af
Binary files /dev/null and b/cta/shots/chrome/03-escape-after.png differ
diff --git a/cta/shots/chrome/03-escape-before.png b/cta/shots/chrome/03-escape-before.png
new file mode 100644
index 0000000..c8daeaa
Binary files /dev/null and b/cta/shots/chrome/03-escape-before.png differ
diff --git a/cta/shots/chrome/04-chip-cat-all.png b/cta/shots/chrome/04-chip-cat-all.png
new file mode 100644
index 0000000..3e28586
Binary files /dev/null and b/cta/shots/chrome/04-chip-cat-all.png differ
diff --git a/cta/shots/chrome/04-chip-cat-business.png b/cta/shots/chrome/04-chip-cat-business.png
new file mode 100644
index 0000000..befa984
Binary files /dev/null and b/cta/shots/chrome/04-chip-cat-business.png differ
diff --git a/cta/shots/chrome/04-chip-cat-entertainment.png b/cta/shots/chrome/04-chip-cat-entertainment.png
new file mode 100644
index 0000000..0088133
Binary files /dev/null and b/cta/shots/chrome/04-chip-cat-entertainment.png differ
diff --git a/cta/shots/chrome/04-chip-cat-politics.png b/cta/shots/chrome/04-chip-cat-politics.png
new file mode 100644
index 0000000..4e34d43
Binary files /dev/null and b/cta/shots/chrome/04-chip-cat-politics.png differ
diff --git a/cta/shots/chrome/04-chip-cat-scitech.png b/cta/shots/chrome/04-chip-cat-scitech.png
new file mode 100644
index 0000000..c4bcb8b
Binary files /dev/null and b/cta/shots/chrome/04-chip-cat-scitech.png differ
diff --git a/cta/shots/chrome/04-chip-cat-sports.png b/cta/shots/chrome/04-chip-cat-sports.png
new file mode 100644
index 0000000..9c81240
Binary files /dev/null and b/cta/shots/chrome/04-chip-cat-sports.png differ
diff --git a/cta/shots/chrome/04-chip-cat-uncategorized.png b/cta/shots/chrome/04-chip-cat-uncategorized.png
new file mode 100644
index 0000000..6c95a6a
Binary files /dev/null and b/cta/shots/chrome/04-chip-cat-uncategorized.png differ
diff --git a/cta/shots/chrome/04-chip-cat-weather.png b/cta/shots/chrome/04-chip-cat-weather.png
new file mode 100644
index 0000000..1395b69
Binary files /dev/null and b/cta/shots/chrome/04-chip-cat-weather.png differ
diff --git a/cta/shots/chrome/05-klaxon-after-off.png b/cta/shots/chrome/05-klaxon-after-off.png
new file mode 100644
index 0000000..9686121
Binary files /dev/null and b/cta/shots/chrome/05-klaxon-after-off.png differ
diff --git a/cta/shots/chrome/05-klaxon-after-on.png b/cta/shots/chrome/05-klaxon-after-on.png
new file mode 100644
index 0000000..88d47a3
Binary files /dev/null and b/cta/shots/chrome/05-klaxon-after-on.png differ
diff --git a/cta/shots/chrome/05-klaxon-before.png b/cta/shots/chrome/05-klaxon-before.png
new file mode 100644
index 0000000..291ab85
Binary files /dev/null and b/cta/shots/chrome/05-klaxon-before.png differ
diff --git a/cta/shots/chrome/05b-sound-toggle.png b/cta/shots/chrome/05b-sound-toggle.png
new file mode 100644
index 0000000..dbd9ee8
Binary files /dev/null and b/cta/shots/chrome/05b-sound-toggle.png differ
diff --git a/cta/shots/chrome/06-admin-after-open.png b/cta/shots/chrome/06-admin-after-open.png
new file mode 100644
index 0000000..50cf6b3
Binary files /dev/null and b/cta/shots/chrome/06-admin-after-open.png differ
diff --git a/cta/shots/chrome/06-admin-before-open.png b/cta/shots/chrome/06-admin-before-open.png
new file mode 100644
index 0000000..bdbd315
Binary files /dev/null and b/cta/shots/chrome/06-admin-before-open.png differ
diff --git a/cta/shots/chrome/07-admin-form-after-submit.png b/cta/shots/chrome/07-admin-form-after-submit.png
new file mode 100644
index 0000000..54a95b6
Binary files /dev/null and b/cta/shots/chrome/07-admin-form-after-submit.png differ
diff --git a/cta/shots/chrome/07-admin-form-filled.png b/cta/shots/chrome/07-admin-form-filled.png
new file mode 100644
index 0000000..74a9788
Binary files /dev/null and b/cta/shots/chrome/07-admin-form-filled.png differ
diff --git a/cta/shots/chrome/08-admin-delete-after.png b/cta/shots/chrome/08-admin-delete-after.png
new file mode 100644
index 0000000..c0ac020
Binary files /dev/null and b/cta/shots/chrome/08-admin-delete-after.png differ
diff --git a/cta/shots/chrome/08-admin-delete-before.png b/cta/shots/chrome/08-admin-delete-before.png
new file mode 100644
index 0000000..471f75f
Binary files /dev/null and b/cta/shots/chrome/08-admin-delete-before.png differ
diff --git a/cta/shots/chrome/09-admin-reset-after.png b/cta/shots/chrome/09-admin-reset-after.png
new file mode 100644
index 0000000..c3adaff
Binary files /dev/null and b/cta/shots/chrome/09-admin-reset-after.png differ
diff --git a/cta/shots/chrome/09-admin-reset-before.png b/cta/shots/chrome/09-admin-reset-before.png
new file mode 100644
index 0000000..79a3dee
Binary files /dev/null and b/cta/shots/chrome/09-admin-reset-before.png differ
diff --git a/cta/shots/chrome/10-admin-closed.png b/cta/shots/chrome/10-admin-closed.png
new file mode 100644
index 0000000..67336cb
Binary files /dev/null and b/cta/shots/chrome/10-admin-closed.png differ
diff --git a/cta/shots/chrome/viewport-1024w.png b/cta/shots/chrome/viewport-1024w.png
new file mode 100644
index 0000000..54fc88a
Binary files /dev/null and b/cta/shots/chrome/viewport-1024w.png differ
diff --git a/cta/shots/chrome/viewport-1440w.png b/cta/shots/chrome/viewport-1440w.png
new file mode 100644
index 0000000..160f6fc
Binary files /dev/null and b/cta/shots/chrome/viewport-1440w.png differ
diff --git a/cta/shots/chrome/viewport-390w.png b/cta/shots/chrome/viewport-390w.png
new file mode 100644
index 0000000..9bed5e5
Binary files /dev/null and b/cta/shots/chrome/viewport-390w.png differ
diff --git a/cta/shots/chrome/viewport-768w.png b/cta/shots/chrome/viewport-768w.png
new file mode 100644
index 0000000..36d7efe
Binary files /dev/null and b/cta/shots/chrome/viewport-768w.png differ
diff --git a/cta/shots/safari/01-grid-before.png b/cta/shots/safari/01-grid-before.png
new file mode 100644
index 0000000..07bbd6a
Binary files /dev/null and b/cta/shots/safari/01-grid-before.png differ
diff --git a/cta/shots/safari/02-readlink-0-after.png b/cta/shots/safari/02-readlink-0-after.png
new file mode 100644
index 0000000..6e4f873
Binary files /dev/null and b/cta/shots/safari/02-readlink-0-after.png differ
diff --git a/cta/shots/safari/02-readlink-0-afterback.png b/cta/shots/safari/02-readlink-0-afterback.png
new file mode 100644
index 0000000..7502848
Binary files /dev/null and b/cta/shots/safari/02-readlink-0-afterback.png differ
diff --git a/cta/shots/safari/02-readlink-0-before.png b/cta/shots/safari/02-readlink-0-before.png
new file mode 100644
index 0000000..f020ee3
Binary files /dev/null and b/cta/shots/safari/02-readlink-0-before.png differ
diff --git a/cta/shots/safari/02-readlink-1-after.png b/cta/shots/safari/02-readlink-1-after.png
new file mode 100644
index 0000000..3312ace
Binary files /dev/null and b/cta/shots/safari/02-readlink-1-after.png differ
diff --git a/cta/shots/safari/02-readlink-1-afterback.png b/cta/shots/safari/02-readlink-1-afterback.png
new file mode 100644
index 0000000..c84bd7e
Binary files /dev/null and b/cta/shots/safari/02-readlink-1-afterback.png differ
diff --git a/cta/shots/safari/02-readlink-1-before.png b/cta/shots/safari/02-readlink-1-before.png
new file mode 100644
index 0000000..88d9e2e
Binary files /dev/null and b/cta/shots/safari/02-readlink-1-before.png differ
diff --git a/cta/shots/safari/02-readlink-2-after.png b/cta/shots/safari/02-readlink-2-after.png
new file mode 100644
index 0000000..a1a06a4
Binary files /dev/null and b/cta/shots/safari/02-readlink-2-after.png differ
diff --git a/cta/shots/safari/02-readlink-2-afterback.png b/cta/shots/safari/02-readlink-2-afterback.png
new file mode 100644
index 0000000..d216af1
Binary files /dev/null and b/cta/shots/safari/02-readlink-2-afterback.png differ
diff --git a/cta/shots/safari/02-readlink-2-before.png b/cta/shots/safari/02-readlink-2-before.png
new file mode 100644
index 0000000..ebb093f
Binary files /dev/null and b/cta/shots/safari/02-readlink-2-before.png differ
diff --git a/cta/shots/safari/02b-mood-switch-while-reading.png b/cta/shots/safari/02b-mood-switch-while-reading.png
new file mode 100644
index 0000000..4cb42c3
Binary files /dev/null and b/cta/shots/safari/02b-mood-switch-while-reading.png differ
diff --git a/cta/shots/safari/03-escape-after.png b/cta/shots/safari/03-escape-after.png
new file mode 100644
index 0000000..643766f
Binary files /dev/null and b/cta/shots/safari/03-escape-after.png differ
diff --git a/cta/shots/safari/03-escape-before.png b/cta/shots/safari/03-escape-before.png
new file mode 100644
index 0000000..ed52be1
Binary files /dev/null and b/cta/shots/safari/03-escape-before.png differ
diff --git a/cta/shots/safari/04-chip-cat-all.png b/cta/shots/safari/04-chip-cat-all.png
new file mode 100644
index 0000000..67789b1
Binary files /dev/null and b/cta/shots/safari/04-chip-cat-all.png differ
diff --git a/cta/shots/safari/04-chip-cat-business.png b/cta/shots/safari/04-chip-cat-business.png
new file mode 100644
index 0000000..8860c11
Binary files /dev/null and b/cta/shots/safari/04-chip-cat-business.png differ
diff --git a/cta/shots/safari/04-chip-cat-entertainment.png b/cta/shots/safari/04-chip-cat-entertainment.png
new file mode 100644
index 0000000..448f4f8
Binary files /dev/null and b/cta/shots/safari/04-chip-cat-entertainment.png differ
diff --git a/cta/shots/safari/04-chip-cat-politics.png b/cta/shots/safari/04-chip-cat-politics.png
new file mode 100644
index 0000000..3539af9
Binary files /dev/null and b/cta/shots/safari/04-chip-cat-politics.png differ
diff --git a/cta/shots/safari/04-chip-cat-scitech.png b/cta/shots/safari/04-chip-cat-scitech.png
new file mode 100644
index 0000000..3809a1f
Binary files /dev/null and b/cta/shots/safari/04-chip-cat-scitech.png differ
diff --git a/cta/shots/safari/04-chip-cat-sports.png b/cta/shots/safari/04-chip-cat-sports.png
new file mode 100644
index 0000000..6ecd130
Binary files /dev/null and b/cta/shots/safari/04-chip-cat-sports.png differ
diff --git a/cta/shots/safari/04-chip-cat-uncategorized.png b/cta/shots/safari/04-chip-cat-uncategorized.png
new file mode 100644
index 0000000..32bb227
Binary files /dev/null and b/cta/shots/safari/04-chip-cat-uncategorized.png differ
diff --git a/cta/shots/safari/04-chip-cat-weather.png b/cta/shots/safari/04-chip-cat-weather.png
new file mode 100644
index 0000000..d5a5a45
Binary files /dev/null and b/cta/shots/safari/04-chip-cat-weather.png differ
diff --git a/cta/shots/safari/05-klaxon-after-off.png b/cta/shots/safari/05-klaxon-after-off.png
new file mode 100644
index 0000000..9a9029b
Binary files /dev/null and b/cta/shots/safari/05-klaxon-after-off.png differ
diff --git a/cta/shots/safari/05-klaxon-after-on.png b/cta/shots/safari/05-klaxon-after-on.png
new file mode 100644
index 0000000..2299a29
Binary files /dev/null and b/cta/shots/safari/05-klaxon-after-on.png differ
diff --git a/cta/shots/safari/05-klaxon-before.png b/cta/shots/safari/05-klaxon-before.png
new file mode 100644
index 0000000..297b365
Binary files /dev/null and b/cta/shots/safari/05-klaxon-before.png differ
diff --git a/cta/shots/safari/05b-sound-toggle.png b/cta/shots/safari/05b-sound-toggle.png
new file mode 100644
index 0000000..9574b7b
Binary files /dev/null and b/cta/shots/safari/05b-sound-toggle.png differ
diff --git a/cta/shots/safari/06-admin-after-open.png b/cta/shots/safari/06-admin-after-open.png
new file mode 100644
index 0000000..0176f7e
Binary files /dev/null and b/cta/shots/safari/06-admin-after-open.png differ
diff --git a/cta/shots/safari/06-admin-before-open.png b/cta/shots/safari/06-admin-before-open.png
new file mode 100644
index 0000000..1f6584f
Binary files /dev/null and b/cta/shots/safari/06-admin-before-open.png differ
diff --git a/cta/shots/safari/07-admin-form-after-submit.png b/cta/shots/safari/07-admin-form-after-submit.png
new file mode 100644
index 0000000..f869495
Binary files /dev/null and b/cta/shots/safari/07-admin-form-after-submit.png differ
diff --git a/cta/shots/safari/07-admin-form-filled.png b/cta/shots/safari/07-admin-form-filled.png
new file mode 100644
index 0000000..aa7c199
Binary files /dev/null and b/cta/shots/safari/07-admin-form-filled.png differ
diff --git a/cta/shots/safari/08-admin-delete-after.png b/cta/shots/safari/08-admin-delete-after.png
new file mode 100644
index 0000000..e50f7c8
Binary files /dev/null and b/cta/shots/safari/08-admin-delete-after.png differ
diff --git a/cta/shots/safari/08-admin-delete-before.png b/cta/shots/safari/08-admin-delete-before.png
new file mode 100644
index 0000000..14459b8
Binary files /dev/null and b/cta/shots/safari/08-admin-delete-before.png differ
diff --git a/cta/shots/safari/09-admin-reset-after.png b/cta/shots/safari/09-admin-reset-after.png
new file mode 100644
index 0000000..94e7a46
Binary files /dev/null and b/cta/shots/safari/09-admin-reset-after.png differ
diff --git a/cta/shots/safari/09-admin-reset-before.png b/cta/shots/safari/09-admin-reset-before.png
new file mode 100644
index 0000000..d982a23
Binary files /dev/null and b/cta/shots/safari/09-admin-reset-before.png differ
diff --git a/cta/shots/safari/10-admin-closed.png b/cta/shots/safari/10-admin-closed.png
new file mode 100644
index 0000000..542fd86
Binary files /dev/null and b/cta/shots/safari/10-admin-closed.png differ
diff --git a/cta/shots/safari/viewport-1024w.png b/cta/shots/safari/viewport-1024w.png
new file mode 100644
index 0000000..1d82d33
Binary files /dev/null and b/cta/shots/safari/viewport-1024w.png differ
diff --git a/cta/shots/safari/viewport-1440w.png b/cta/shots/safari/viewport-1440w.png
new file mode 100644
index 0000000..ce950d6
Binary files /dev/null and b/cta/shots/safari/viewport-1440w.png differ
diff --git a/cta/shots/safari/viewport-390w.png b/cta/shots/safari/viewport-390w.png
new file mode 100644
index 0000000..3edc36a
Binary files /dev/null and b/cta/shots/safari/viewport-390w.png differ
diff --git a/cta/shots/safari/viewport-768w.png b/cta/shots/safari/viewport-768w.png
new file mode 100644
index 0000000..9c172ef
Binary files /dev/null and b/cta/shots/safari/viewport-768w.png differ
diff --git a/cta/webkit-bug-repro/chromium-scroll-realtime.png b/cta/webkit-bug-repro/chromium-scroll-realtime.png
new file mode 100644
index 0000000..04d969c
Binary files /dev/null and b/cta/webkit-bug-repro/chromium-scroll-realtime.png differ
diff --git a/cta/webkit-bug-repro/webkit-scroll-realtime.png b/cta/webkit-bug-repro/webkit-scroll-realtime.png
new file mode 100644
index 0000000..8b7d2fb
Binary files /dev/null and b/cta/webkit-bug-repro/webkit-scroll-realtime.png differ
diff --git a/cta/webkit-bug-repro/webkit-scroll2.png b/cta/webkit-bug-repro/webkit-scroll2.png
new file mode 100644
index 0000000..cd3a04b
Binary files /dev/null and b/cta/webkit-bug-repro/webkit-scroll2.png differ

← 213738e auto-data-snapshot: 2026-09-23T17:59:00 (5 data files) — cta  ·  back to Crazy News Channel  ·  Fix WebKit header ghosting + 4 Cody holes: mood-desync, migr 2059f5a →