diff --git a/CHANGELOG.md b/CHANGELOG.md index 0954d5f..afbbc78 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,15 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ## [Unreleased] +### Added +- Nav: hamburger menu on screens < 900px — clicking opens a full-width mobile panel with all nav links; overlay click and Escape key close it +- Nav: mobile panel groups links under "Plan", "Explore", and "Account" section headers + +### Changed +- Nav: widen container from 72rem (1152px) to 80rem (1280px) — matches Zillow's nav container width, more breathing room for nav items on large monitors +- Nav: collapse breakpoint raised from 768px to 899px — nav links no longer hide until the screen is actually too narrow +- Nav: remove redundant inline `style="display:grid;grid-template-columns:1fr auto 1fr"` on `.nav-inner` (already in CSS) + ### Fixed - i18n: improve German nav labels — "Verzeichnis" → "Anbieterverzeichnis", "Planer" → "Kostenrechner" - CI: add missing env vars to `.env` heredoc — `WAITLIST_MODE`, `LEADS_EMAIL`, `UMAMI_API_URL`; make Paddle vars optional (`:-`) so they don't break deploys when unset diff --git a/padelnomics/src/padelnomics/static/css/input.css b/padelnomics/src/padelnomics/static/css/input.css index dd7d4ec..e6ddc52 100644 --- a/padelnomics/src/padelnomics/static/css/input.css +++ b/padelnomics/src/padelnomics/static/css/input.css @@ -113,9 +113,9 @@ border-bottom: 1px solid #E2E8F0; } .nav-inner { - max-width: 72rem; + max-width: 80rem; margin: 0 auto; - padding: 0 1rem; + padding: 0 1.5rem; display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; @@ -172,9 +172,84 @@ padding: 0; display: inline; } - @media (max-width: 768px) { + /* Hamburger button — hidden on desktop */ + .nav-hamburger { + display: none; + align-items: center; + justify-content: center; + width: 36px; + height: 36px; + background: transparent; + border: none; + cursor: pointer; + padding: 6px; + border-radius: 8px; + transition: background 0.15s; + } + .nav-hamburger:hover { background: #F1F5F9; } + .nav-hamburger svg { display: block; } + /* Mobile menu panel — hidden by default */ + .nav-mobile { + display: none; + position: absolute; + top: 56px; + left: 0; + right: 0; + background: #fff; + border-bottom: 1px solid #E2E8F0; + box-shadow: 0 8px 24px rgba(0,0,0,0.08); + z-index: 49; + flex-direction: column; + padding: 0.75rem 1.5rem 1rem; + } + .nav-bar[data-navopen="true"] .nav-mobile { + display: flex; + } + .nav-mobile a, + .nav-mobile button.nav-auth-btn, + .nav-mobile a.nav-auth-btn { + display: block; + padding: 0.625rem 0; + border-bottom: 1px solid #F1F5F9; + font-size: 0.9375rem; + font-weight: 500; + color: #475569; + text-decoration: none; + transition: color 0.15s; + } + .nav-mobile a:last-child { border-bottom: none; } + .nav-mobile a:hover { color: #1D4ED8; } + .nav-mobile a.nav-auth-btn, + .nav-mobile button.nav-auth-btn { + display: inline-flex; + margin-top: 0.5rem; + border-bottom: none; + width: auto; + align-self: flex-start; + } + .nav-mobile .nav-mobile-section { + font-size: 0.6875rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.07em; + color: #94A3B8; + padding: 0.75rem 0 0.25rem; + } + /* Overlay behind mobile menu */ + .nav-overlay { + display: none; + position: fixed; + inset: 0; + z-index: 48; + } + .nav-bar[data-navopen="true"] ~ .nav-overlay { + display: block; + } + @media (max-width: 899px) { .nav-links { display: none; } - .nav-inner { justify-content: center; } + .nav-hamburger { display: flex; } + .nav-inner { grid-template-columns: auto 1fr auto; } + .nav-bar { position: sticky; } } /* Page container */ diff --git a/padelnomics/src/padelnomics/templates/base.html b/padelnomics/src/padelnomics/templates/base.html index dc8c6c4..1bbed1c 100644 --- a/padelnomics/src/padelnomics/templates/base.html +++ b/padelnomics/src/padelnomics/templates/base.html @@ -38,8 +38,8 @@ {% block head %}{% endblock %} -