# Accessibility — Masterpiece .. Or not !

What has been done, and — just as important — what has *not*. The game asks the
player to judge a painting by eye. That part stays visual. Everything around it
should not be a barrier: not the mouse, not the colour, not the motion, not the
sound. The list below is what is actually in the build, so the store page can be
filled in without overselling it. See `D:\dev\offside\a11y.md` for the checklist
this was worked against.

## Nothing is told by colour alone

- The call you make on a piece is struck on its cartel as a **shape and a word**:
  a red **FAKE** stamped across the card, or a green **tick** hung off its
  corner. Colour-blind or not, the two read apart by their form.
- The two verdict buttons carry the **same marks** as the cartel, plus the word,
  plus the key — `√ Original [O]` / `× Fake [F]`.
- The tally on the clipboard is two **named lists**, "Fakes" and "Originals".
- The way out is a **rope across a doorway** and an **EXIT sign with a picto** —
  a thing present or absent, not a colour to read.
- The marks are drawn with glyphs the engine's own font carries (`√`, `×`), not
  with `✓`/`✕`, which the shipped font does not have and which drew as empty
  boxes. A test checks this so it cannot come back.

## Contrast

Measured with the WCAG relative-luminance formula, on the colour actually
painted against the surface it is painted on, by `tests/a11y_test.gd`. Everything
listed there clears **4.5:1**. Two of them had to be corrected to get there: the
FAKE stamp measured 4.14:1 and the tick 2.7:1 on the cream cartel.

The HUD is white text over a live 3D museum, where no fixed ratio can be
promised — so every line of it is cut out with a dark outline, and **Higher
contrast** in Options puts an opaque plate under each one as well.

## Everything is on the keyboard, and every key can be changed

No action needs the mouse. Walk, look closer, call the piece, look it up on the
phone, open the clipboard, pull back to see the whole museum, first-person view,
mute — all of it is on a key, and every one of those keys is **listed and
rebindable** in Options → Controls.

- Rebinding is by the **key you can see**: press the key printed on your board
  and that is what it takes, whatever the layout.
- Defaults are bound by **position** (WASD is ZQSD on an AZERTY with nothing to
  set), and the **arrow keys keep working** whatever you bind on top.
- Taking a key another action already holds **swaps the two**, so no action can
  end up with nothing to press.
- `Escape`, `Tab` and the function keys are refused: they belong to the browser
  and the window.
- Choices are kept in `user://settings.cfg` and survive a restart.

The mouse keeps everything it had. Nothing was taken away to add the keys.

## Focus

- One **visible focus ring** for every control, drawn *outside* it so it survives
  the lit museum behind the panels (`assets/ui/theme.tres`).
- Opening a screen **puts the focus inside it**; `Escape` closes it and hands the
  focus back to the button that opened it. Each panel keeps its own return
  target, so Options → Controls → back lands where it should.
- The phone's page buttons are real focusable buttons: Tab and the arrows move
  between them, Enter presses them, Enter on the photograph zooms it.

## Motion

**Reduce motion** in Options — defaulted from the browser's own
`prefers-reduced-motion` on the web build, at first launch only, so the checkbox
always has the last word. With it on:

- the camera **cuts** instead of travelling: no trip to the canvas and back, no
  slide onto the next room, no glide to the pulled-back view;
- the phone is simply there and simply gone, with no arm coming up;
- the busy ring stops turning and stands still;
- the passing HUD line is held its two seconds and then goes, with no fade.

Nothing is lost by turning it on: every one of those was staging, never
information.

## Sound

- **Nothing is told by sound alone.** Everything the audio says is on screen.
- **Mute** is one key (M by default, rebindable), remembered between launches,
  and a checkbox in Options. It is a lid over the master bus, so the levels you
  set are still there when you turn it back on.
- Music, sound effects and room tone have separate sliders.

## Language

Five languages, fetched from the art server, picked from the system language on
first launch and changeable in Options. Every line the game shows is in
`i18n/strings.en.txt` and goes through `tr()`; values are interpolated (`{0}`)
rather than written into sentences, so the key names printed in the UI follow the
rebinding and the translation both.

## What is *not* covered — read this before filling in a store page

- **Not screen-reader accessible.** Godot 4.4 has no accessibility tree to hand
  to a screen reader, and none was faked. Nothing here helps a blind player.
- **Not blind-friendly, and it cannot be.** The game is the judging of an image
  by eye. There is no non-visual route to the answer, and there will not be one.
- **Colour vision matters for part of the play.** Some fakes are altered by
  **recolouring**. The phone's side-by-side with the original is what a player
  has to work with there, and comparing two hues is exactly what a colour
  deficiency makes hard. The rest — cloned regions, mirrored areas — is shape,
  and unaffected. So: the **interface** is colour-blind safe; the **puzzle** is
  not always.
- **No text scaling** and no font choice yet.
- No subtitles, because there is no speech.

Honest store tags on that basis: *Configurable controls*, *High-contrast*,
*Reduced motion*. **Not** *Colorblind friendly*, **not** *Blind friendly*, **not**
*Subtitles*, **not** *One button*.

## Checking it

```
godot --headless res://tests/a11y_test.tscn      # prints A11Y OK, or the failures
```

It checks what reading the source cannot: that every command has a key, that
rebinding works and survives a reload, that a contested key is swapped rather
than stolen, that reserved keys are refused, that every screen puts the focus
inside itself when it opens, that every button is named by its face or its row,
that the painted colours clear 4.5:1, that the mark glyphs exist in the shipped
font, and that reducing motion really does take the camera's travel to zero.
