style(web): keep header visible and normalize section dividers (#203) - #205
Conversation
Implementation evidence — Issue #203Exact HEAD: Shared sticky header
Security & Recovery divider normalization
Firmware divider normalization
Regression evidence
Exact-head CI
Collision / staleness
Implementation has not approved or merged this PR. |
miso-develop
left a comment
There was a problem hiding this comment.
Review disposition: READY_FOR_INTEGRATION
Reviewed exact PR head 91babb2c8e7f6e6da7091a35c0b9902fa07978c5 against Issue #203 and parent usability spec #137.
No blocking finding identified.
Independent verification:
Shared sticky header
- Existing shared
#site-headerremains the single navigation/header root used by Provisioner, Firmware Flash, and Help. - CSS now uses
position: sticky; top: 0with an opaque#f5f5f5background and positivez-index: 100. - Existing
.site-nav-shellwidth/alignment remains unchanged atwidth: min(100%, 760px). - Product mark, top-level tabs, and language switcher remain rendered inside the shared header by
ui-localization.ts; active-tab and localization logic are unchanged. - Existing <=720px two-row navigation and <=560px compact padding rules remain unchanged.
- Sticky positioning remains in normal flow, so no fixed-header offset is required and ordinary content remains reachable.
- Security-critical presence overlay remains above the sticky header: overlay
z-index: 1000vs header100. - No navigation destination, keyboard-order, localization, or focus-control mutation was introduced.
Security & Recovery subsection dividers
Recovery PackageandChange Recovery Passphraseare each wrapped in the same reusable.security-subsectionpresentation boundary.- Each subsection receives exactly one neutral top border plus shared spacing.
- Both retain semantic
h3headings. - No decorative
hror nested card was introduced. - Existing control IDs, label associations, event handlers, enable/disable logic, field clearing, Recovery Package behavior, Passphrase-change behavior, browser-state locking, and security-mutation guards remain unchanged.
- Existing major peer-section divider styling and Factory Reset danger styling remain intact.
Firmware divider normalization
#flash-statusis now a structuraldiv.flash-stackrather than an outer.panel, removing the redundant parent boundary.- First install and Update remain separate semantic
section.panelpeers. - The first child panel contributes the single boundary before First install; its redundant nested top margin is suppressed.
- Update retains its own single panel boundary and normal visual separation.
- Build information remains a separate
.panel.build-info-sectionappended after the firmware choices. - Firmware target resolution, First install erase behavior, state-preserving Update behavior, write ranges, release identity handling, and firmware package validation logic are unchanged.
Responsive/accessibility/layout checks
- Production Chrome smoke asserts sticky behavior on all three production routes under real vertical scrolling.
- It verifies no header/nav/content-shell horizontal shift and no new horizontal overflow.
- Responsive 360px-width coverage verifies the existing two-row tabs remain visible and sticky.
- Header opacity and overlay-over-header stacking are asserted from computed styles.
- Recovery/Passphrase dividers are asserted as CSS boundaries with semantic headings and no
hr. - Firmware smoke asserts structural status container has no top border, while First install and Update each retain exactly one panel boundary.
- Existing async firmware metadata loading/build-information geometry checks remain in the same production smoke path.
Exact-head evidence independently checked:
- Foundation #929: SUCCESS.
- Web unit suite: 38 files / 300 tests passed.
- Linux production Chrome smoke: SUCCESS.
- normal Web build and lockfile verification: SUCCESS.
- Windows Chrome QR production smoke: SUCCESS.
- firmware regression/security contracts and isolated ESP-IDF build/package validation: SUCCESS.
- Security #932: SUCCESS, including release/security contracts and repository security scan.
Staleness/collision:
- Handoff HEAD matches current PR HEAD.
- PR is open, non-draft, mergeable.
- Current
mainremains exact PR baseb3aa8fc0cc06143990dcf32a971853264f73eba8. - Compare is 8 commits ahead / 0 behind.
- PR #205 is the only open PR at final Review check.
No Device, Protocol, Vault, Recovery, firmware-write, release, credential, or security semantics change is present. No additional Security review or physical Human Gate is required for this presentation/layout-only change.
READY_TO_MERGEHEAD: Integration reconstruction:
STATE: READY_TO_MERGE |
INTEGRATEDPR: #205 Integration evidence:
STATE: INTEGRATED |
Closes #203
Parent spec: #137
Shared sticky header
#site-headersticky withtop: 0.site-nav-shellmarkup and 760px max-width/alignment unchangedz-index: 100vs overlay1000)Security & Recovery subsection dividers
Recovery PackageandChange Recovery Passphrasecontent in the same reusable.security-subsectionboundaryh3as the semantic subsection headinghrFirmware divider normalization
#flash-statusa structuraldiv.flash-stackinstead of an outer.panelsection.panelpeersRegression coverage
Production Chrome layout smoke now verifies:
position: sticky; top: 0h3, spacing, and no duplicatehrScope
Presentation/layout only:
Base / collision
b3aa8fc0cc06143990dcf32a971853264f73eba8Exact-head CI evidence pending.