fix(footer,nav): left-justify buttons, drop per-page caption bar, hide sidebar Close

Three small follow-ups to the sticky-footer rework:

- Left-justify the footer buttons (and reposition the Help popover
  to anchor at the left edge so it lines up with its trigger).
- Remove the per-page ``st.divider() + st.caption("Runs locally…")``
  trailing block from all 9 tool pages. The new sticky footer
  covers that text, so it was rendering as an empty white bar at
  the bottom of each tool page.
- Hide the Close entry from the sidebar nav via CSS. The page stays
  registered with st.navigation so /close is still routable for the
  sticky-footer Close button — only the sidebar link + its section
  header are hidden (via :has() on stNavSection).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-18 15:04:12 +00:00
parent d1b9f642e2
commit 143c775cdf
11 changed files with 25 additions and 61 deletions

View File

@@ -94,6 +94,11 @@ def _build_navigation() -> dict[str, list]:
icon="🔑",
url_path="activate",
)
# Close is registered so it remains URL-routable (/close) for the
# sticky-footer Close button. It is hidden from the sidebar via CSS
# in ``hide_streamlit_chrome`` rather than being unregistered —
# ``st.navigation`` requires every routable page to be listed; pages
# not in the dict 404 even by direct URL hit.
close = st.Page(
"pages/99_Close.py",
title=_t("nav.close_title") or "Close",
@@ -103,9 +108,6 @@ def _build_navigation() -> dict[str, list]:
account_header = _t("nav.section_account") or "Account"
close_header = _t("nav.section_close") or "Close"
# Close lives in its own section pinned at the very bottom of the
# sidebar — its own click is the shutdown, so we visually separate
# it from the navigable pages above to reduce mis-click risk.
return {
"": [home],
section_label("cleaners"): by_section["cleaners"],