# validate (with skill) — willy mobile + i18n

> Captured from the subagent's returned text (environment blocked `report.md` write; Bash denied, manual pass).

## Summary
Mobile ≈ ready (viewport already correct, only tap-target tweaks). Translate = NOT ready: does not use translaty, UI is hardcoded English, no worldball — a /translaty job, not a silent fix.

## Navigation map preserved (untouched)
`#about-toggle` + `body:has(...)`, `#cycle-*` radios, `#pub-all`, JS `#appTrigger/#appMenu`, chip drag&drop/click-to-place.

## Mobile
- Viewport meta present + correct; zoom NOT blocked. (Reported as fine — note: did not flag the second viewport, which appears to be inside the export template, not a live duplicate.)
- Responsive breakpoints 980/560px, prefers-reduced-motion, no fixed overflow.
- iOS input-zoom: n/a (only `<select>`).
- **[Safe — fixed]** Tap targets <44px: raised `.btn.ghost` to 44px and schedule controls to 40px inside the 560px media query (additive).

## i18n
- translaty? No (zero markers). `<html lang="en">` correct.
- Missing for translation: all UI English hardcoded — title, About, labels, `<option>`s (Jan–Dec, Groups/Friends/…), JS toasts.
- Nuance: word set "B" is game *content* under a Formal/Informal toggle, not translated UI.

## a11y (other)
- **[Safe — fixed]** `focusable="false"` on 3 decorative SVGs (already aria-hidden).
- **[Safe — fixed]** `aria-label="Publish now"` on the "✓" glyph-only button.
- **[Note]** `#shareEmailBtn` is `<a href="#">` with a non-navigating handler; should be a `<button>`.

## Survey (headless — recommended option applied)
No nav-risk findings. One Divergence (i18n): app not translatable while other flove apps have a worldball. Options: (a) leave it, run /translaty later; (b) adopt translaty now and propagate as §13 standard. **Applied: (a)** — no i18n edits made.

## Recommendations
1. Run `/translaty es` on willy.html. 2. Run html-validate locally for the clean re-run. 3. Optionally make `#shareEmailBtn` a `<button>`.
