Feature: The visual checker covers the Localization board web/visual discovers the Localization board, its groups, its 1024 px captures and its fixtures, so that this slice and every later localization slice is gated against docs/design. Background: Given the board is docs/design/source/RenewCMS Screens Localization.dc.html with frame LocaleFrame And the state tables are docs/design/screens/localization-*.md and docs/design/states.md And task visual:check is a hard gate: every capture within 10 %, no unmocked /v1 call, no size mismatch, no exception without the user's approval And no threshold is changed And nothing in docs/design is edited Scenario: Groups are discovered from the screen file When task visual:check runs for "localization-site-languages" Then the checker reads the visual reference line and the three groups L1, L1b and L2 And it lists their 25, 9 and 7 states by their loc.* ids And a state with no setup in web/visual fails the run Scenario Outline: Capture sizes Given a state lists in its Sizes column Then the checker captures the board frame and the SPA at , in light and dark And a state with 1440 and 390 only gets no 1024 capture Examples: | sizes | widths | | 1440, 390 | 1440x900 and 390x844 | | 1440, 1024, 390 | 1440x900, 1024x? and 390x844 | Scenario: Selecting frames Given LocaleFrame is selected by LocaleFrame{s:{v:"sl",x:"multi"}} Then the checker renders that state in the board and captures its frame And a state is addressed by its loc.* id, not by the legacy name Scenario: Fixtures and mocks Then every state's setup uses the matching fixture of locale-fixtures.js (Journal, Atelier, Archive, Notes, Gallery) And the mocked /v1 responses are derived from those fixtures And the board's it, ja and zh-Hans tags are used by mocks only And states that depend on the current date or time are skipped as clock-sensitive and nothing else is Scenario: Existing screens are unaffected When task visual:check runs for any screen that existed before Then its states, sizes and verdicts are the same as before