website: four more notes - first person, the globe's well, the touching tables, the submenu label
gates / gates (push) Failing after 5m21s

1. THE HOME PAGE SPOKE ABOUT THE OPERATOR IN THE THIRD PERSON ("Ha irsz, o valaszol")
   while the page it links to is in the first ("Ha irsz, en valaszolok"). Both home
   pages now read "Nagyfenyvesi Viktor vagyok, a Felhom mogott en allok" / "I am Viktor
   Nagyfenyvesi, and I am the one behind Felhom", and the link after it is "Rolam
   bovebben" / "More about me" rather than repeating the question the sentence has just
   answered. The legal pages keep the formal third-person name, which is their job.

2. 36px OF DEAD SPACE UNDER THE LANGUAGE GLOBE, and most of it was A LEAK GATE 22
   COULD NOT SEE. The old chrome's

       nav { position: fixed; top/left/right: 0; padding: 20px 0;
             backdrop-filter: blur(12px); border-bottom: 1px solid var(--line);
             z-index: 200 }

   is a BARE ELEMENT selector, so it matched <nav class="sidebar"> too - and .sidebar
   declares none of those, so all of them were in force on the sidebar. Scoped
   body:not(.shell); the footer row's own padding went 16px -> ~8px.

   Gate 22's first half compares selectors present in BOTH stylesheets, and `nav` is not
   a selector shell.css ever writes, so this shape was outside its field of view. It now
   has a SECOND HALF: an unscoped bare nav/header/main/aside rule in site.css is a
   failure, because those elements ARE the shell (<nav class="sidebar">,
   <header class="mobile-topbar">, <main class="content">). It convicted a second live
   one on its first run: R-903's `@media (max-width:900px) and (scripting: none)
   nav { position: static }` had been overriding the sidebar's own position on a phone
   with scripting off. `footer` is deliberately NOT on the list, with the reason beside
   it: the shell carries the website's own footer.
   Decoy site/bare-element-rule-reaches-shell, seen to convict.

3. THE COMPARISON TABLE AND THE TWO CARDS under "Miert a sajatod?" were touching: .vs
   ends on its own border and .band opens with a 2px blue rule, so they read as one
   block. 2rem between them.

4. "MINDEN ALKALMAZAS" -> "AZ ALKALMAZASOKROL" / "About the apps" on all 22 pages. Every
   app is on that one page, so the first submenu item is not a filter - it is the top of
   the page, where the intro and the "Fontos tudnivalok" box are. The en-nav-drift decoy
   was re-anchored on the new label.

Checked at 390px and 1440px on all 21 pages: no sideways scrolling, footer inside the
content column, the renamed item on every page. site.css?v=25.
This commit is contained in:
2026-10-12 09:32:16 +02:00
parent 0ef0b106f6
commit bb69a73330
28 changed files with 190 additions and 75 deletions
+21
View File
@@ -31,6 +31,8 @@ Gates (all must pass; non-zero exit on any failure):
19. dash-lang — a page shows dashboard pictures only in its own language (`dashboard-*-hu.webp` / `-en.webp`)
20. viewer — data-gallery openers are <a href> to existing assets; gallery.js (with ?v=) exactly where openers are;
no inline viewer copy
Also: a bare `nav`/`header`/`main`/`aside` rule reaches the shell's own elements
whatever shell.css calls them, so those must be scoped too
23. anchors — every in-site link carrying a #fragment finds that id on the page it names.
The sidebar's five category links pointed at #fajlkezeles-irodai and friends while
the page's ids are #fajlkezeles and friends: 100 dead links across 20 pages, live,
@@ -729,6 +731,25 @@ else:
for _prop, _val in _decls:
if (_sel, _prop) not in _overridden:
_leaks.append((_media, _sel, _prop, _val))
# ...and the other shape, which comparing SELECTOR NAMES cannot see: a bare element rule.
# `nav { position: fixed; padding: 20px 0; backdrop-filter: blur(12px); z-index: 200 }` is the
# OLD chrome's top bar, but it matches <nav class="sidebar"> just as well, and `.sidebar`
# declares none of those four properties - so all four leaked in, and the padding showed as dead
# space under the language globe for a day (operator, 2026-10-12). `nav` is not a selector
# shell.css ever writes, so the shared-selector diff above was always going to miss it.
# footer is NOT on this list: the shell carries the website's own <footer> on purpose, so those
# rules are meant to apply. <nav class="sidebar">, <header class="mobile-topbar"> and
# <main class="content"> are the shell's own, and nothing of the old chrome may reach them.
_SHELL_ELEMENTS = ("nav", "header", "main", "aside")
for _media, _sel, _decls in _site_r:
if ".shell" in _sel or "body:not(.shell)" in _sel or not _decls:
continue
_first = re.split(r"[\s>+~]", _sel, 1)[0]
if _first in _SHELL_ELEMENTS:
fail("shell leak: site.css %s`%s { … }` is a bare element rule that also matches the "
"shell's own <%s> — scope it body:not(.shell)"
% ((_media + " ") if _media else "", _sel, _first))
if _leaks:
for _media, _sel, _prop, _val in _leaks[:12]:
fail("shell leak: site.css %s`%s { %s: %s }` reaches a shell page — shell.css styles %s but "