From 4d3258113a307de790ee919d5adb0ca9441fbd41 Mon Sep 17 00:00:00 2001 From: "n.siegfried" Date: Fri, 14 Aug 2026 18:40:28 -0500 Subject: [PATCH] T1.4 - F4: the comments drawer opens below the header, not under it Containing block first, as the task asks. The drawer is a body child with no transformed ancestor, so its containing block was already the viewport - the positioning context was never wrong. What was wrong was `top: 0` with `height: 100vh`: the drawer started at the very top of the viewport, and the creator's .header is sticky with z-index:100 against the drawer's 61. The header won, so the drawer's own head - its title and its close button - was roofed over and unreachable. It read as "off-screen" because the part you needed was covered, not because the box had escaped the viewport. That is why raising z-index would have been the wrong move: it does not remove the collision, it just swaps which element is on top, and then the drawer covers the header instead. The fix is to stop them occupying the same band. The drawer now starts at var(--rail-top) and is that much shorter. --rail-top is the header's measured height, set by wp-creation-app.js:1328 and already used by .wp-nav for exactly this purpose, so "below the header" has one definition on this page rather than two. The iframe boundary is NOT implicated. position:fixed inside the embedded creator resolves against the iframe's own viewport, which is self-consistent, and the drawer behaves identically framed and unframed. T7.1 can dissolve the boundary without revisiting this. The probe was checking one width, one mode, and placement only. It now checks 390 and 1440, standalone and embedded, that the close button is genuinely hit-testable via elementFromPoint rather than merely present, that the drawer reopens after closing, and that opening it does not move the page's scroll position. All pass. One honest caveat, attributed rather than hidden. At 390px the drawer sits at the right edge of a 485px layout viewport while the screen is 390px, so 95px of it is off-screen. That is not the drawer: the creator forces its containing block to 485px, and while chasing it I found BL-001's root cause - wp-creation-app.js:1389 injects `body{--nav-w:288px}` with no media query, which lands after wp-creation-styles.css:815's `@media (max-width:860px){body{--nav-w:56px}}` and overrides it, so the page reserves 288px of rail that is not there at any width. Every `right: 0` fixed element on the page is displaced by it, not only this one. Left unfixed on purpose - it is the creator's layout, T7.1 rebuilds it, and CLAUDE.md is explicit about not fixing things noticed in passing. BL-001 now carries the exact cause and the five rules that consume the token, so T7.1 does not have to find it again. The probe reports it as an attributed note naming BL-001, so nobody is sent to the wrong file. browser_check 71/71. f_items: F1, F2, F3, F4 FIXED. Co-Authored-By: Claude Opus 5 (1M context) --- docs/waves/backlog.md | 17 ++++++ html/wp-creation-styles.css | 12 +++- tests/f_items.py | 112 ++++++++++++++++++++++++++---------- 3 files changed, 109 insertions(+), 32 deletions(-) diff --git a/docs/waves/backlog.md b/docs/waves/backlog.md index bcccf7f..b1df240 100644 --- a/docs/waves/backlog.md +++ b/docs/waves/backlog.md @@ -67,6 +67,23 @@ deliberately deferred. rebuilds its layout regardless — fixing it in wave 1 would be thrown away. - **Suggested wave or follow-up:** verify it is gone at `T7.1`; if it survives the rebuild, it needs its own item in the next revision. +- **Root cause, found at T1.4 — not fixed, T7.1 owns it.** `wp-creation-styles.css:815` has + `@media (max-width: 860px) { body { --nav-w: 56px; } }`, which is correct. But + `wp-creation-app.js:1389` injects `body{--nav-w:288px;}` into a runtime `