Skip to content

fix: mobile footer flow, 6-post pages, flipped post-nav, Node 24 CI - #4

Merged
jjsnack merged 6 commits into
mainfrom
fix/mobile-footer-pagination
Jul 28, 2026
Merged

fix: mobile footer flow, 6-post pages, flipped post-nav, Node 24 CI#4
jjsnack merged 6 commits into
mainfrom
fix/mobile-footer-pagination

Conversation

@jjsnack

@jjsnack jjsnack commented Jul 28, 2026

Copy link
Copy Markdown
Owner

What

Mobile/UX polish plus two build-pipeline deprecation fixes.

  • Footer covers content on narrow viewports — the fixed bottom-left footer sat on top of the 68ch content column once the left gutter shrank. Below 82rem it now flows to the page bottom; wider viewports keep it fixed.
  • PaginationpagerSize 12 → 6.
  • Post-nav arrows flipped — left ← now goes to the more recent post, right → to the older one (accounts for Hugo's .NextInSection = newer gotcha).
  • languageCodelocale in exampleSite/hugo.toml (deprecated in Hugo 0.158).
  • CIactions/checkout@v4@v5, off the deprecated Node 20 runtime.

Test

hugo --source=exampleSite --minify builds clean, no warnings or deprecations.

🤖 Generated with Claude Code

jjsnack and others added 5 commits July 28, 2026 13:12
- footer flows to page bottom below 82rem so it stops covering the
  content column; stays fixed bottom-left on wider viewports
- pagerSize 12 -> 6
- post-nav arrows flipped: left = newer post, right = older
- exampleSite: languageCode -> locale (Hugo 0.158 deprecation)
- CI: actions/checkout@v4 -> v5 (off the deprecated Node 20 runtime)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RbMGFzZfHUfbhid95FjBKb
Font 0.82rem -> 0.738rem and height cap 36rem -> 32.4rem. Width is
ch-based so it tracks the font down, preserving the 80x24 grid.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RbMGFzZfHUfbhid95FjBKb
Below 82rem the footer is position:static, so on short pages (about,
now) it floated just under the content mid-viewport. Make body a
min-height:100vh flex column and give the footer margin-top:auto so it
sits at the viewport bottom on short pages and the content end on long
ones. The fixed footer (>82rem) is out of flow and unaffected.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RbMGFzZfHUfbhid95FjBKb
Font back to 0.82rem; shrink width to 75.6ch (was 84ch) so the window
stays 10% smaller by box, not by shrinking the text. Height 32.4rem
unchanged, so the aspect ratio holds.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RbMGFzZfHUfbhid95FjBKb
The sticky-footer change made body a flex column. Its flex items
(.site-header, main) have margin-inline:auto and no explicit width, so
on short pages they shrank to fit-content instead of the 68ch measure,
squishing content and the navbar. Add width:100% so max-width caps them
at 68ch as before.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RbMGFzZfHUfbhid95FjBKb
@jjsnack

jjsnack commented Jul 28, 2026

Copy link
Copy Markdown
Owner Author

Code review — /frontend-design + /frontend-ui-engineering + JS best practices.

Real issues

1. Light-mode --muted fails WCAG AA contrast (assets/css/main.css:28)
--muted: #8a8a8a on #ffffff = 3.45:1, below the 4.5:1 floor for normal text. Used everywhere for small secondary text (0.72–0.85rem): post dates, meta, footer, eyebrows, page intro, pager count, topic counts. Dark mode #7d7d7d on #111 = 4.59:1 and passes — only the light base is broken. Fix: --muted: #767676; (~4.54:1).

2. .pager__link--off near-invisible (main.css:396)
color: var(--border) ≈ 1.2:1 on white. Disabled nav is contrast-exempt so not a violation, but the off "← newer / older →" is unreadable. Optional: bump to --muted.

Minor

3. No prefers-reduced-motion — low impact (only color transitions, no transforms) but worth a cheap global opt-out.

4. Duplicate dark @media blocks (main.css:57 and 66) — same query + selector split only by a comment; mergeable.

5. Drag clamp uses stale rect (assets/js/console.js:274) — getBoundingClientRect() captured once at pointerdown; resize mid-drag skews the clamp. Desktop-only edge case.

Good — leave alone

  • run() pure + node console.js self-check with asserts per branch.
  • Progressive enhancement: launcher/window ship hidden, JS unhides; page works JS-off.
  • Focus management on open/close/Escape, role="log" + aria-live="polite", decorative banner aria-hidden.
  • Console gated to desktop by (hover:none) and (pointer:coarse), not width.
  • ES5 style is deliberate (node self-check, no build step) — not a defect.

Applying fixes 1, 3, 4.

- --muted #8a8a8a (3.45:1) -> #767676 (4.54:1) so small secondary
  text (dates, meta, footer, eyebrows, pager count) clears AA
- add prefers-reduced-motion opt-out (kills transitions/animations)
- merge the two duplicate dark prefers-color-scheme @media blocks

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RbMGFzZfHUfbhid95FjBKb
@jjsnack
jjsnack merged commit e558e99 into main Jul 28, 2026
1 check passed
@jjsnack
jjsnack deleted the fix/mobile-footer-pagination branch July 28, 2026 03:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant