Skip to content

Attyre v2026.05.11

Choose a tag to compare

@Aster1630 Aster1630 released this 17 May 05:41
· 66 commits to main since this release
a3d382d

Attyre v2026.05.11

Release date: May 11, 2026


What's new

Accessibility overhaul

This release is a big one for keyboard and screen reader users. Item cards are now proper <button> elements, which means screen readers announce them correctly and keyboard users get Enter/Space activation for free. The calendar grid has been rebuilt with full ARIA semantics (role="grid", role="gridcell", aria-selected), and day cells respond to keyboard navigation.

A hidden aria-live region now announces page titles on every navigation, filter result counts in the wardrobe, and calendar date selections, so screen reader users always know what changed without hunting around.

Other additions:

  • Skip-to-content link visible on Tab from any page
  • Global :focus-visible ring on all interactive elements, with a thicker blue variant in accessibility mode
  • aria-pressed state on outfit selector cards so selection state is readable without relying on color
  • aria-describedby wiring on name and category form inputs to their inline error messages
  • prefers-reduced-motion support: all CSS transitions and animations are suppressed when the OS setting is on

Accessibility mode itself also got expanded. Beyond the color swap, it now bumps the base font size to 16px, strengthens border contrast, and thickens nav icon strokes.


Bug fixes

Mobile app shell invisible on older phones

.app-shell used height: 100dvh with no fallback. The dvh unit is unsupported on iOS older than 16 and Chrome older than 108, which caused the shell to collapse to zero height and render nothing. A height: 100vh fallback has been added immediately before the dvh line.

Initial page never renders on slow mobile connections

app.js registered a DOMContentLoaded listener unconditionally. Because ES modules are fetched asynchronously, the event can fire before the module finishes loading on real phones, leaving #app permanently empty. The router now guards with a document.readyState check so renderPage() always runs.

PWA start_url mismatch on iOS

manifest.json had "start_url": "/" while the app uses hash routing. Launching from the iOS home screen landed on a bare static file instead of the app. Changed to "/index.html#/".


Known bugs

  • Mobile version appears static, working on fix

Upgrading

No migration needed. Data stored in localStorage is fully compatible with this release. If you have the app installed as a PWA, it will update automatically on next launch.


Full changelog

See CHANGELOG.md for the complete history of changes across all releases.