diff --git a/.github/labels.yml b/.github/labels.yml
index 07acb8f..bbbc305 100644
--- a/.github/labels.yml
+++ b/.github/labels.yml
@@ -109,4 +109,4 @@
- name: 'size: XL'
color: 'FAEAEA'
- description: 'Diff 500+ lines — consider splitting'
\ No newline at end of file
+ description: 'Diff 500+ lines — consider splitting'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b807e08..d10c511 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,52 +5,69 @@ All notable changes to Attyre will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-## Current Version [v2026.04.26] - 2026-04-26 *(automated fixes by Claude Code)*
+## Current Version [v2026.05.11]
-### Fixed (v2026.04.26)
+### Fixed
-- **Category validation error now visible**: `add-item` and `item-detail` forms were missing the `category-error` element, so the "Category is required" message was silently swallowed — error paragraph now rendered correctly under the category select.
-- **Crop button re-usable after first crop**: After applying a crop in the add-item form, the replacement preview button had no event listener attached, making subsequent crops impossible — listener is now re-wired via a recursive helper after each crop.
-- **localStorage quota errors surfaced**: `saveItems` was catching `QuotaExceededError` silently; it now re-throws so callers can alert the user when storage is full.
+- **Mobile app shell invisible on older phones**: `.app-shell` used `height: 100dvh` with no fallback — `dvh` is unsupported on iOS < 16 and Chrome < 108, causing the shell to collapse to zero height and render nothing. Added `height: 100vh` fallback immediately before the `dvh` line.
+- **Initial page never renders on slow mobile connections**: `app.js` registered a `DOMContentLoaded` listener unconditionally, but ES modules are fetched asynchronously — on real phones the event can fire before the module loads, leaving `#app` permanently empty. 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. Changed to `"/index.html#/"`.
-### Changed (v2026.04.26)
+### Added
-- **PWA manifest colours corrected**: `theme_color` was a leftover placeholder purple (`#6C63FF`) — updated to the app's actual gold (`#C9A96E`); `background_color` updated to match light-mode page background (`#F5F0E8`); placeholder screenshot SVGs updated to match; `start_url` corrected from `/index.html` to `/`.
+- **Skip-to-content link**: Keyboard/switch-access users can now press Tab on any page to reveal a "Skip to main content" link that jumps focus directly to the `#app` region.
+- **Global `:focus-visible` ring**: All interactive elements (buttons, links, item cards, calendar days) now show a visible gold focus outline when navigated by keyboard. Accessibility mode uses a thicker blue outline.
+- **`prefers-reduced-motion` support**: All CSS transitions and animations are suppressed when the OS "Reduce Motion" setting is enabled.
+- **Screen reader page announcements**: A hidden `aria-live` region announces the page title on every navigation and announces when accessibility mode is toggled on/off.
+- **Wardrobe filter result announcements**: Screen readers are told how many items match the current filters (or "No items match your filters") whenever filters change.
+- **Calendar date announcements**: Selecting a calendar day announces the date and whether an outfit is planned for that day.
+- **Calendar keyboard navigation**: Calendar day cells now have `tabindex="0"` and respond to Enter/Space for selection, plus full ARIA grid semantics (`role="grid"`, `role="gridcell"`, `aria-selected`).
+- **Item cards are focusable buttons**: Item cards changed from `
` to `
diff --git a/README.md b/README.md
index 424a803..cc8055e 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,12 @@
# Attyre
-[](CHANGELOG.md)
-[](LICENSE)
+[](CHANGELOG.md)
+[](LICENSE)
[](Privacy-Policy.html)
Smart wardrobe manager with weather-based suggestions, planning tools, and local-first privacy.
-Current app version: 2026.04.26
+Current app version: 2026.05.11
## What Attyre Does
@@ -73,8 +73,13 @@ Current app version: 2026.04.26
### Accessibility and Theming
- Dark mode toggle.
-- Accessibility mode toggle with safe high-contrast palette and icon support.
-- Accessibility mode also switches favicon variant.
+- Accessibility mode toggle with safe high-contrast blue palette, larger font, stronger borders, thicker nav icon strokes, and colorblind-friendly favicon variant.
+- Skip-to-content link visible on keyboard focus.
+- Global focus ring on all interactive elements; thicker in accessibility mode.
+- `prefers-reduced-motion` support: all transitions and animations are suppressed when the OS setting is enabled.
+- Screen reader announcements via hidden `aria-live` region for page navigation, filter results, and calendar date selection.
+- Item cards are `