Skip to content

[UX Redesign] Final responsive, accessibility, and consistency pass #22

Description

@luandro

Summary

Apply the cross-cutting polish pass after the nine implementation issues land. Cleanup scope is intentionally limited to elements proven orphaned by the redesign. Page-level horizontal scroll is disallowed; intentionally scrollable inner containers (Logs / data tables, drawers / sheets) are allowed. Touch hit areas are evaluated as effective hit targets, not inner-control element size. Verify (not introduce) the skip-link target behavior owned by #13.

Scope

This issue covers only cross-page polish that cannot reasonably live in a single child issue:

  • Keyboard focus consistency across all four primary tabs and their sub-views (Monitoramento / Eventos / Áreas › Áreas protegidas + Clusters / Configurações › Operação + Detecção + Notificações + FR24 + Sistema + Registros).
  • 1280px + 768px layout for every primary surface. Spot-check 1024px. Use 480px only for drawers, modals, sticky controls, and the topbar — i.e. surfaces that change layout materially below 768px.
  • No unintended PAGE-LEVEL horizontal scrolling. Intentionally scrollable inner containers (Logs table, data tables, drawers / sheets that scroll independently) are allowed.
  • Loading / empty / error state copy and visual treatment is consistent across all four tabs.
  • Typography: ensure the same font sizes / line heights for headings, body, and metadata across the four tabs.
  • Touch hit areas: every interactive action must have an effective touch / hit target of at least 44×44 CSS px. A small native checkbox / select is fine when its wrapping <label> (or surrounding control group) provides the required hit area; the requirement applies to the effective target, not to the inner control element.
  • Consistent Portuguese terminology: review (verbo), review_status (substantivo), Fase (operacional), Área protegida, Unidade de conservação, Cluster, Monitoramento, Eventos, Áreas, Configurações.
  • Status is not communicated by color alone. Every colored badge also has a textual label or aria-label.
  • Final removal of elements proven orphaned by the redesign (see Cleanup scope below).
  • Verify (NOT introduce) the skip-link target behavior owned by [UX Redesign] Simplify global shell and primary navigation #13: the skip-link href updates to match the active primary view on every tab activation. Initial state is #view-dashboard.
  • Verification of the parent issue's self-review checklist.

Cleanup scope (narrowly defined)

The redesign preserves the existing internal view IDs for #view-dashboard (Monitoramento, #14) and #view-settings (Configurações, #19). These remain in index.html after this issue lands. Do not remove them.

The redesign removes:

If any cleanup decision is in doubt, the element stays. Cleanup is about proven orphans, not "things that look stale".

Screenshot budget

Per primary surface (Monitoramento, Eventos, Áreas › Áreas protegidas, Áreas › Clusters, Configurações › Operação, Configurações › Detecção, Configurações › Notificações, Configurações › FR24, Configurações › Sistema, Configurações › Registros):

  • 1280px (one screenshot)
  • 768px (one screenshot)

Per overlay or sticky-control surface (Eventos drawer, phase-confirmation modal, FR24 enable toggle, bulk-action toolbar):

  • 480px (one screenshot)

Total budget: ~10 surfaces × 2 = 20 + ~4 overlays × 1 = ~24 screenshots, plus a 1024px spot-check on the two most layout-sensitive surfaces (Monitoramento and Eventos).

Saved under docs/ux_redesign/screenshots/. One example each of: empty state, error state, loading state, with-data state per primary surface where those states are easily reproducible.

Out of scope

  • New product functionality.
  • New product copy or tone changes (only consistency polish; no rewrites).
  • Translation of new strings — all new i18n keys were added in their owning child issue.
  • Refactors unrelated to UX consistency.
  • Removing #view-dashboard or #view-settings (they are the canonical homes for Monitoramento and Configurações; the redesign does not migrate them).
  • Removing intentionally scrollable inner containers (Logs table, etc.).
  • Introducing the skip-link target behavior — it is owned by [UX Redesign] Simplify global shell and primary navigation #13; this issue only verifies it.
  • Assuming axe, lighthouse, or any other optional dev tool is installed. Use npx --no-install axe (per AGENTS.md); if axe is not installed, the QA pass records the missing-tool note and uses keyboard-only manual checks + the existing VM JS accessibility assertions instead.

Detailed behavior

Keyboard focus

Tablet layout

  • Every primary surface is usable at ~768px without page-level horizontal scroll on a 1024px viewport device-pixel-ratio-aware.
  • Map panels cap their height appropriately.

Loading / empty / error states

  • Same component used for loading spinners / progress across all tabs.
  • Same wording voice for empty states ("Nenhum …").
  • Same error rendering (.form-result and #view-*-error elements).

Typography

  • Headings (h1, h2, eyebrow) consistent.
  • Metadata (.muted) consistent.

Touch hit areas

  • Every interactive action has an effective touch / hit target of at least 44×44 CSS px.
  • A small native <input type="checkbox"> or <select> is acceptable when its wrapping <label> (or surrounding control group) provides the required 44×44 hit area. The requirement applies to the effective target, not to the inner control element.

Portuguese terminology

  • Single glossary used everywhere: review (verbo), review_status (substantivo), Fase (operacional), Área protegida, Unidade de conservação, Cluster, Monitoramento, Eventos, Áreas, Configurações.

Color-not-alone status

  • Every colored badge (review status, phase badge, FR24 budget state) carries a textual label too. Verified in DOM via tests.

Skip-link behavior (verification only)

Acceptance criteria

Test plan

  • Accessibility audit: npx --no-install axe per the AGENTS.md rule. If axe is not installed, the command fails (does NOT auto-install) and the QA pass records a "tool not installed, manual keyboard checks used" note. Manual keyboard-only smoke test always runs.
  • Visual regression: review the screenshots in docs/ux_redesign/screenshots/ against the wireframes; no automated visual-diff tool is required.
  • Keyboard smoke: tab through every primary surface manually, verify focus order and skip link. Verify the skip-link target updates as expected; if it does not, file a regression against [UX Redesign] Simplify global shell and primary navigation #13 (do not implement the fix here).
  • i18n parity: run both pt and en, verify no missing keys (no MissingTranslationError in the console).

Dependencies

Rollout / compatibility

  • Pure polish; no functional changes.

Open questions

None.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions