# Component state matrix

This is a behaviour contract, not a claim that every state applies to every HTML element. Static content marks non-applicable states explicitly. See GUIDELINES.md and VALIDATION.md for scope and tested interactions.

| Component | default | hover | focus | active | disabled | loading | error |
| --- | --- | --- | --- | --- | --- | --- | --- |
| [overview](index.html#overview) | Visible specimen at #overview | Links only; static content has no hover state | Links only; static content is not focusable | Current anchor where applicable | N/A: reference content is always readable | N/A: static local content | N/A: no operation to fail |
| [getting-started](index.html#getting-started) | Readable setup and maintenance guide | Navigation links show hover feedback | Guide links and code remain keyboard accessible | Current catalogue section | N/A: guide content is always readable | N/A: static local guide | N/A: no business operation |
| [foundations](index.html#foundations) | Visible specimen at #foundations | Links only; static content has no hover state | Links only; static content is not focusable | Current anchor where applicable | N/A: reference content is always readable | N/A: static local content | N/A: no operation to fail |
| [typography](index.html#typography) | Visible specimen at #typography | Links only; static content has no hover state | Links only; static content is not focusable | Current anchor where applicable | N/A: reference content is always readable | N/A: static local content | N/A: no operation to fail |
| [buttons](index.html#buttons) | Visible specimen at #buttons | Pointer feedback on applicable controls | Visible keyboard focus on interactive descendants | Pressed/selected/open state on applicable controls | Native disabled controls where unavailable; non-interactive content has no disabled state | Only asynchronous content: use skeleton/progress with aria-busy; no fabricated load for static content | Actionable text and retry for fallible operations; static content has no error state |
| [forms](index.html#forms) | Visible specimen at #forms | Pointer feedback on applicable controls | Visible keyboard focus on interactive descendants | Pressed/selected/open state on applicable controls | Native disabled controls where unavailable; non-interactive content has no disabled state | Only asynchronous content: use skeleton/progress with aria-busy; no fabricated load for static content | Actionable text and retry for fallible operations; static content has no error state |
| [selection](index.html#selection) | Visible specimen at #selection | Pointer feedback on applicable controls | Visible keyboard focus on interactive descendants | Pressed/selected/open state on applicable controls | Native disabled controls where unavailable; non-interactive content has no disabled state | Only asynchronous content: use skeleton/progress with aria-busy; no fabricated load for static content | Actionable text and retry for fallible operations; static content has no error state |
| [navigation](index.html#navigation) | Collapsed icon rail plus existing sidebar, breadcrumb and tab specimens | Pointer feedback on applicable controls | Named navigation links and visible focus; native Tab order, Enter/Space toggle and Escape to collapse | Toggle exposes aria-expanded; icon rail retains active-page styling and hover/focus labels in both widths | Native disabled controls where unavailable; non-interactive content has no disabled state | Only asynchronous content: use skeleton/progress with aria-busy; no fabricated load for static content | Actionable text and retry for fallible operations; static content has no error state |
| [data](index.html#data) | Visible specimen at #data | Pointer feedback on applicable controls | Visible keyboard focus on interactive descendants | Pressed/selected/open state on applicable controls | Native disabled controls where unavailable; non-interactive content has no disabled state | Only asynchronous content: use skeleton/progress with aria-busy; no fabricated load for static content | Actionable text and retry for fallible operations; static content has no error state |
| [feedback](index.html#feedback) | Visible specimen at #feedback | Pointer feedback on applicable controls | Visible keyboard focus on interactive descendants | Pressed/selected/open state on applicable controls | Native disabled controls where unavailable; non-interactive content has no disabled state | Only asynchronous content: use skeleton/progress with aria-busy; no fabricated load for static content | Actionable text and retry for fallible operations; static content has no error state |
| [overlays](index.html#overlays) | Closed dialog triggers, including the local-only logout confirmation | Pointer feedback on applicable controls | Native modal containment; logout initially focuses Cancel and restores its opener after every dismissal | Logout confirms only on Log out; Cancel, Escape, close and backdrop dismiss without confirmation | Native disabled controls where unavailable; non-interactive content has no disabled state | Only asynchronous content: use skeleton/progress with aria-busy; no fabricated load for static content | Actionable text and retry for fallible operations; static content has no error state |
| [composer](index.html#composer) | Visible specimen at #composer | Pointer feedback on applicable controls | Visible keyboard focus on interactive descendants | Pressed/selected/open state on applicable controls | Native disabled controls where unavailable; non-interactive content has no disabled state | Only asynchronous content: use skeleton/progress with aria-busy; no fabricated load for static content | Actionable text and retry for fallible operations; static content has no error state |
| [media](index.html#media) | Visible specimen at #media | Pointer feedback on applicable controls | Visible keyboard focus on interactive descendants | Pressed/selected/open state on applicable controls | Native disabled controls where unavailable; non-interactive content has no disabled state | Only asynchronous content: use skeleton/progress with aria-busy; no fabricated load for static content | Actionable text and retry for fallible operations; static content has no error state |
| [html-reference](index.html#html-reference) | Visible specimen at #html-reference | Links only; static content has no hover state | Links only; static content is not focusable | Current anchor where applicable | N/A: reference content is always readable | N/A: static local content | N/A: no operation to fail |
| [app-navbar](index.html#app-navbar) | Visible specimen at #app-navbar | Pointer feedback on applicable controls | Visible keyboard focus on interactive descendants | Pressed/selected/open state on applicable controls | Native disabled controls where unavailable; non-interactive content has no disabled state | Only asynchronous content: use skeleton/progress with aria-busy; no fabricated load for static content | Actionable text and retry for fallible operations; static content has no error state |
| [comboboxes](index.html#comboboxes) | Visible specimen at #comboboxes | Pointer feedback on applicable controls | Arrow keys and Enter select; Escape/Tab dismiss; remove-chip returns focus | aria-activedescendant for current option; aria-selected for chosen values | Preview state disables member input | Preview state announces Loading members and marks list aria-busy | Preview error marks input aria-invalid; Ready retries |
| [drawers](index.html#drawers) | Visible specimen at #drawers | Pointer feedback on applicable controls | Native dialog trap and opener restoration; Keep editing is safe default | Modal open; dirty edits trigger discard confirmation | N/A for local save; production save must disable while pending | N/A local fixture; integrate detail skeleton for async data | Required/email native validation before save |
| [interactive-table](index.html#interactive-table) | Visible specimen at #interactive-table | Pointer feedback on applicable controls | Visible keyboard focus on interactive descendants | Row selection + indeterminate page select-all; aria-sort follows direction | Prev/Next boundary and archive-without-selection disabled | Preview Loading replaces rows; table aria-busy | Preview Error removes rows and offers Ready retry |
| [uploads](index.html#uploads) | Visible specimen at #uploads | Pointer feedback on applicable controls | Visible keyboard focus on interactive descendants | Drag highlight, running progress, file previews | File limit/type/size reject with message rather than silently disabling picker | Local determinate upload progress | Unsupported type/size/limit; simulated failure with Retry/Remove |
| [date-filters](index.html#date-filters) | Visible specimen at #date-filters | Pointer feedback on applicable controls | Visible keyboard focus on interactive descendants | Pressed/selected/open state on applicable controls | Native disabled controls where unavailable; non-interactive content has no disabled state | Only asynchronous content: use skeleton/progress with aria-busy; no fabricated load for static content | Actionable text and retry for fallible operations; static content has no error state |
| [context-help](index.html#context-help) | Visible specimen at #context-help | Pointer feedback on applicable controls | Escape dismisses; interactive content belongs in popover | Tooltip hover/focus; popover expanded | N/A: help remains available | N/A: local help text | N/A: no operation |
| [stepper](index.html#stepper) | Visible specimen at #stepper | Pointer feedback on applicable controls | Invalid field receives focus; dirty close confirms discard | aria-current step, retained input, review details | Back hidden on first step; async submit disabling required in production | N/A local submit; never imply a real request | Required fields validated per step; error announced |
| [connection-states](index.html#connection-states) | Visible specimen at #connection-states | Pointer feedback on applicable controls | Visible keyboard focus on interactive descendants | Online/offline/reconnecting/expired/unknown previews | Send disabled until online; dismiss unknown does not unlock send | Reconnect timer with preserved state | Retry/read reconciliation or demo sign-in recovery; never auto-resend mutation |
| [member-lists](index.html#member-lists) | Visible specimen at #member-lists | Pointer feedback on applicable controls | Full row focus ring; name and ID remain contained at 320px | aria-pressed + tick for chosen member | N/A: all fixture members selectable | See member-list skeleton specimen | Search no-match is empty state, not error; directory API errors require retry notice |
| [skeletons](index.html#skeletons) | Visible specimen at #skeletons | Pointer feedback on applicable controls | Visible keyboard focus on interactive descendants | Loading aria-busy; finish/restart demo | Reduced-motion preference suppresses shimmer | List/table/card/detail/chat shapes; one live status | N/A: replace loading skeleton with error notice when request fails |
| [page-examples](index.html#page-examples) | Visible specimen at #page-examples | Links only; static content has no hover state | Links only; static content is not focusable | Current anchor where applicable | N/A: reference content is always readable | N/A: static local content | N/A: no operation to fail |
| [advanced-inputs](index.html#advanced-inputs) | Visible specimen at #advanced-inputs | Pointer feedback on applicable controls | Visible keyboard focus on interactive descendants | Password visibility and strength; numeric PIN normalization | Native disabled rule available; no disabled credential controls in specimen | N/A local format check; actual verification must show request progress | Native six-digit validity; never claims real OTP verification |
| [calendar-time](index.html#calendar-time) | Visible specimen at #calendar-time | Pointer feedback on applicable controls | Visible keyboard focus on interactive descendants | Pressed/selected/open state on applicable controls | Native disabled controls where unavailable; non-interactive content has no disabled state | Only asynchronous content: use skeleton/progress with aria-busy; no fabricated load for static content | Actionable text and retry for fallible operations; static content has no error state |
| [extra-navigation](index.html#extra-navigation) | Visible specimen at #extra-navigation | Pointer feedback on applicable controls | Visible keyboard focus on interactive descendants | Pressed/selected/open state on applicable controls | Native disabled controls where unavailable; non-interactive content has no disabled state | Only asynchronous content: use skeleton/progress with aria-busy; no fabricated load for static content | Actionable text and retry for fallible operations; static content has no error state |
| [carousel-charts](index.html#carousel-charts) | Visible specimen at #carousel-charts | Pointer feedback on applicable controls | Visible keyboard focus on interactive descendants | Pressed/selected/open state on applicable controls | Native disabled controls where unavailable; non-interactive content has no disabled state | Only asynchronous content: use skeleton/progress with aria-busy; no fabricated load for static content | Actionable text and retry for fallible operations; static content has no error state |
| [camera-cropper](index.html#camera-cropper) | Visible specimen at #camera-cropper | Pointer feedback on applicable controls | Visible keyboard focus on interactive descendants | Permission requested only on Enable; square crop zoom/x/y | Capture/Stop unavailable until appropriate state; Download disabled until decoded image | Waiting for camera permission or image decode | Camera denied/unavailable; wrong type/size and decode failure |
| [signature-qr](index.html#signature-qr) | Visible specimen at #signature-qr | Pointer feedback on applicable controls | Visible keyboard focus on interactive descendants | Pressed/selected/open state on applicable controls | Native disabled controls where unavailable; non-interactive content has no disabled state | Only asynchronous content: use skeleton/progress with aria-busy; no fabricated load for static content | Actionable text and retry for fallible operations; static content has no error state |
| [pdf-patterns](index.html#pdf-patterns) | Visible specimen at #pdf-patterns | Pointer feedback on applicable controls | Visible keyboard focus on interactive descendants | Selected field outline; drag/arrow move; width resize | Remove disabled without selected object | Native viewer loading; sample placement surface synchronous | Embedded PDF fallback link; not a PDF parsing engine |
| [richtext](index.html#richtext) | Visible specimen at #richtext | Pointer feedback on applicable controls | Visible keyboard focus on interactive descendants | Pressed/selected/open state on applicable controls | Native disabled controls where unavailable; non-interactive content has no disabled state | Only asynchronous content: use skeleton/progress with aria-busy; no fabricated load for static content | Actionable text and retry for fallible operations; static content has no error state |
| [guidance](index.html#guidance) | Visible specimen at #guidance | Links only; static content has no hover state | Links only; static content is not focusable | Current anchor where applicable | N/A: reference content is always readable | N/A: static local content | N/A: no operation to fail |
| [applied-filters](index.html#applied-filters) | Editable criteria and ticket results | Chip/control hover | Removing a chip restores focus to its filter; Reset returns to search | Only applied criteria affect results | N/A: all fixture criteria are available | N/A: local filtering | No matches shows a reset hint, not a service error |
| [tree-navigation](index.html#tree-navigation) | Nested article categories | Full row hover | Roving tabstop; arrows/Home/End/type-ahead | Selected leaf and expanded branch use separate states | Archived branch is focusable and announced unavailable; cannot activate | N/A: local tree; async children require loading announcement | N/A: local articles |
| [activity-timeline](index.html#activity-timeline) | Chronological synthetic audit entries | Load-earlier action | Native filter and button focus | Filter applies to the loaded entries | Load earlier disabled after all entries load | N/A: local history | No matching loaded entries is an empty state |
| [notification-center](index.html#notification-center) | Read/unread notifications | Action controls | Native filter and row action focus; focus recovery after filtering a row away | Unread indicator includes a text label | Read-all disabled without unread records or outside Ready | Preview loading with aria-busy | Error has a working local Retry action |
| [sortable-list](index.html#sortable-list) | Ordered macro steps | Handle and move actions | Move buttons and Alt+arrows; focus follows moved item | Drop target has a visible indicator | Boundary move buttons disabled | N/A: local reorder | Invalid external drop ignored; no order lost |
| [customer-rating](index.html#customer-rating) | No initial rating | Star hover | Native radio arrow keys and visible focus | Selected rating has star and text labels | Submit disabled after local submission; Reset enables editing | N/A: local submission | Required-rating error focuses first radio |
| [split-pane](index.html#split-pane) | 35 percent queue width | Divider hover | Separator Arrow keys/Home/End; native reset action | Pointer drag and current value | Resize unavailable while panels stack on mobile | N/A: layout control | N/A: no remote operation |
| [page-states](index.html#page-states) | 404 error-page preview plus first-use library state | Available recovery button | Action focus retained or returned to state selector | Pressed preview selector; distinct HTTP/offline copy and icons; no guidance disclosure or guidance actions | No action while loading; forbidden does not simulate authorization | Local retry simulation marks its action busy and prevents duplicate activation; changing the preview cancels pending work | Retry preserves the error and announces the simulation; non-retry states offer Back to workspace without changing sessions or permissions |
| [dashboard-cards](index.html#dashboard-cards) | Synthetic dashboard with four KPIs and supporting cards | Action links and period controls | Native controls, data disclosure, and action links | Selected period drives KPIs, chart, targets, queues, and team values | Period disabled while loading | Matching KPI skeletons with aria-busy and one announcement | Distinct unavailable/empty states; Retry restores local data |
| [reporting](index.html#reporting) | Eight synthetic charts and three summaries derived from one dataset | Download buttons and data disclosures | Named native controls, chart data tables, download and removal actions | Selected period/channel drives all charts, summaries, and export payloads | Downloads unavailable outside ready; filters locked during chart export/loading | Skeleton chart region with aria-busy | Report retry; export failure announces retry or CSV alternative |
| [top-menu-bar](index.html#top-menu-bar) | Overview active; all grouped links closed | Separate muted hover surface with 8px between items | Visible native focus; Tab, Arrow Up/Down, Home/End, Escape with focus restoration | aria-current identifies the page; open disclosure highlighted | Scheduled reports unavailable, named and not clickable | Navigation stays usable; loading belongs to the destination content | Destination errors use page recovery; menu does not fabricate a successful action |
| [advanced-grid](index.html#advanced-grid) | Choose and pin columns, expand records, and edit names with validation. | Named buttons and links show pointer feedback; noninteractive content is not a target. | Native controls and semantic tables; status messages announce outcomes and actions preserve useful focus. | Expanded row and inline edit; name column can remain pinned. | Unavailable actions are disabled until valid input or an eligible state exists. | N/A: synchronous local state changes; production pending states require integration. | Blank names fail validation; Cancel preserves the original record. |
| [saved-views](index.html#saved-views) | Apply AND/OR criteria, save a named view, and restore its filters. | Named buttons and links show pointer feedback; noninteractive content is not a target. | Native controls and semantic tables; status messages announce outcomes and actions preserve useful focus. | Applied AND/OR criteria and a named memory-only view snapshot. | Unavailable actions are disabled until valid input or an eligible state exists. | N/A: synchronous local state changes; production pending states require integration. | Blank or duplicate view names are rejected; empty results remain visible. |
| [csv-import](index.html#csv-import) | Map columns, review invalid or duplicate rows, and import only valid records. | Named buttons and links show pointer feedback; noninteractive content is not a target. | Native controls and semantic tables; status messages announce outcomes and actions preserve useful focus. | File → mapping → review → result; edits invalidate previous validation. | Unavailable actions are disabled until valid input or an eligible state exists. | File reading is local; newer selections invalidate stale read results. | Malformed quoting, invalid headers/columns, size/row limits and duplicate/invalid emails are reported. |
| [background-jobs](index.html#background-jobs) | Track queued and running jobs, cancel or retry failures, and download completed exports. | Named buttons and links show pointer feedback; noninteractive content is not a target. | Native controls and semantic tables; status messages announce outcomes and actions preserve useful focus. | Queued → processing → completed/failed/cancelled; completed files can expire. | Unavailable actions are disabled until valid input or an eligible state exists. | Queued and determinate progress are driven by local timers. | Only failed/cancelled jobs can retry; expired downloads stay disabled. |
| [permission-matrix](index.html#permission-matrix) | Preview changes to feature permissions and data scope before applying them. | Named buttons and links show pointer feedback; noninteractive content is not a target. | Native controls and semantic tables; status messages announce outcomes and actions preserve useful focus. | Staged values → reviewed diff → applied baseline; edits invalidate review. | Unavailable actions are disabled until valid input or an eligible state exists. | N/A: synchronous local state changes; production pending states require integration. | Workspace admin permissions are protected; unchanged previews do not apply. |
| [approval-workflow](index.html#approval-workflow) | Review a request, approve or reject with a reason, and retain the decision history. | Named buttons and links show pointer feedback; noninteractive content is not a target. | Native controls and semantic tables; status messages announce outcomes and actions preserve useful focus. | Pending review → approved or rejected with a retained history. | Unavailable actions are disabled until valid input or an eligible state exists. | N/A: synchronous local state changes; production pending states require integration. | Rejection needs a note; a decided request cannot receive another decision until demo reset. |
| [recurring-scheduler](index.html#recurring-scheduler) | Preview explicit timezones and upcoming runs, then pause or resume a schedule. | Named buttons and links show pointer feedback; noninteractive content is not a target. | Native controls and semantic tables; status messages announce outcomes and actions preserve useful focus. | Saved once/daily/weekly schedule; pause/resume updates next-run previews. | Unavailable actions are disabled until valid input or an eligible state exists. | N/A: synchronous local state changes; production pending states require integration. | Past/invalid starts are rejected; expired one-time schedules require a new future run. |
| [report-drilldown](index.html#report-drilldown) | Select a metric and channel to inspect matching rows; save and restore the report definition. | Named buttons and links show pointer feedback; noninteractive content is not a target. | Native controls and semantic tables; status messages announce outcomes and actions preserve useful focus. | Metric/channel/dimension changes drive aggregates and detail rows; named definition can be restored. | Unavailable actions are disabled until valid input or an eligible state exists. | N/A: synchronous local state changes; production pending states require integration. | Report names are required; drill-down is cleared when grouping or channel changes. |
| [content-lifecycle](index.html#content-lifecycle) | Autosave a local draft, publish snapshots, compare versions, and restore a version into a draft. | Named buttons and links show pointer feedback; noninteractive content is not a target. | Native controls and semantic tables; status messages announce outcomes and actions preserve useful focus. | Dirty draft → debounced in-memory save → published snapshot; restore produces another draft. | Unavailable actions are disabled until valid input or an eligible state exists. | Saving draft status lasts for the 500ms debounce. | Blank title/content cannot publish; duplicate content does not create another version. |
| [work-queue](index.html#work-queue) | Assign work and move cards between columns with capacity limits and keyboard alternatives. | Named buttons and links show pointer feedback; noninteractive content is not a target. | Native controls and semantic tables; status messages announce outcomes and actions preserve useful focus. | Assignment, column move, native select alternative and two-card in-progress limit. | Unavailable actions are disabled until valid input or an eligible state exists. | N/A: synchronous local state changes; production pending states require integration. | Over-capacity moves are rejected for both drag/drop and keyboard controls. |
| [integration-operations](index.html#integration-operations) | Inspect webhook delivery attempts, explicitly retry failures, and rotate a demo API key. | Named buttons and links show pointer feedback; noninteractive content is not a target. | Native controls and semantic tables; status messages announce outcomes and actions preserve useful focus. | Delivery details, eligible retry, reviewed demo-key rotation and one-time reveal. | Unavailable actions are disabled until valid input or an eligible state exists. | Retrying state disables repeat delivery until the local result arrives. | Only 503 demo failures can retry; clipboard failure keeps the sample selectable. |
| [workspace-settings](index.html#workspace-settings) | Save profile and notification preferences, choose a timezone, and revoke other demo sessions. | Named buttons and links show pointer feedback; noninteractive content is not a target. | Native controls and semantic tables; status messages announce outcomes and actions preserve useful focus. | Explicitly saved profile/preferences baseline and other-session revocation. | Unavailable actions are disabled until valid input or an eligible state exists. | N/A: synchronous local state changes; production pending states require integration. | Invalid email/blank name or identical quiet-hour times are rejected; current session cannot be revoked. |
| [recovery-patterns](index.html#recovery-patterns) | Preserve user work and distinguish confirmed failures from unconfirmed outcomes. | Named buttons and links show pointer feedback; noninteractive content is not a target. | Native controls and semantic tables; status messages announce outcomes and actions preserve useful focus. | Preserved draft conflict, partial/unknown batch states, timed undo and dated stale snapshot. | Unavailable actions are disabled until valid input or an eligible state exists. | Refresh marks the value aria-busy while retaining the last snapshot. | Unknown outcomes require read-checking; stale refresh failure preserves the previous value. |
| [dashboard-inputs](index.html#dashboard-inputs) | Six labeled local input patterns with examples and helper text | Muted feedback on tag removal, clear search and action buttons | Visible branded focus; invalid fields and removal/clear actions restore input focus | Format amount/phone/URL, apply ranges, add/remove tags and filter synthetic accounts | Shared native disabled styling available; examples remain editable | Not applicable: synchronous local checks without network calls | Inline connected errors for malformed amounts/phones/URLs, reversed ranges, duplicate/long/excess tags; empty search distinct from failure |
| [form-patterns](index.html#form-patterns) | Grouped local rule form with comfortable/compact density and a clean baseline. | Semantic hover on cards, stepper and action controls. | Native radio/checkbox keyboard semantics, named repeatable controls, linked error summary and modal focus return. | Add/remove contacts, change channel and assignment, check ID, review a before/after diff and save locally. | Inactive channel fields, unavailable dependent selects, stepper limits and duplicate saves are disabled. | Cancellable local lookup/availability simulations; saving locks the draft. | Blur then correction validation, linked summary, unavailable ID, empty/error lookup and failed save with explicit retry; draft retained. |
| [code-editors](index.html#code-editors) | HTML source with Variables and Sample Payload JSON editors using semantic dark code surfaces. | Tab and format buttons use shared semantic feedback. | Named textareas, roving keyboard tabs, connected errors and branded focus. Tab leaves the editor normally. | Format JSON, validate typed variables, reset fixtures and render a static sandboxed preview. | Not applicable: local synchronous editor actions remain available. | Not applicable: no remote assets, syntax service or network preview. | Malformed JSON, schema/type mismatch and missing variables preserve edits and suppress stale preview. |
| [filtered-search](index.html#filtered-search) | One shared control with a left custom dropdown and query input; status and field-scope examples use local account fixtures. | Filter, clear and reset use semantic hover feedback. | Each control has a label; keyboard focus outlines its segment and the shared group. Dropdown supports search, arrows, Enter and Escape. | Combine filter and query without clearing either; Clear/Escape resets only the query, Reset all restores both. | Reset all is disabled at default state. | Not applicable: synchronous local filtering without network requests. | No matching accounts has an explicit empty state; query text is rendered safely and results are announced. |
| [recruitment-workspace](index.html#recruitment-workspace) | Synthetic team-scoped records with ready/updated state and explicit demo labels. | Shared semantic button, row and card feedback. | Named controls, native select keyboard alternatives, scrollable regions, modal focus containment and return. | Guarded local stage, review, job or talent changes; no production writes or outreach. | Interviewer restrictions, terminal outcomes, pending consent and stale revisions prevent disallowed writes. | The shared state selector hides records and reports loading until refreshed; no fixtures masquerade as loaded data. | Empty, failure and permission-limited views hide records; stale snapshots are labeled and read-only until refresh. |
| [recruitment-jobs](index.html#recruitment-jobs) | Synthetic team-scoped records with ready/updated state and explicit demo labels. | Shared semantic button, row and card feedback. | Named controls, native select keyboard alternatives, scrollable regions, modal focus containment and return. | Guarded local stage, review, job or talent changes; no production writes or outreach. | Interviewer restrictions, terminal outcomes, pending consent and stale revisions prevent disallowed writes. | The shared state selector hides records and reports loading until refreshed; no fixtures masquerade as loaded data. | Empty, failure and permission-limited views hide records; stale snapshots are labeled and read-only until refresh. |
| [recruitment-talent](index.html#recruitment-talent) | Synthetic team-scoped records with ready/updated state and explicit demo labels. | Shared semantic button, row and card feedback. | Named controls, native select keyboard alternatives, scrollable regions, modal focus containment and return. | Guarded local stage, review, job or talent changes; no production writes or outreach. | Interviewer restrictions, terminal outcomes, pending consent and stale revisions prevent disallowed writes. | The shared state selector hides records and reports loading until refreshed; no fixtures masquerade as loaded data. | Empty, failure and permission-limited views hide records; stale snapshots are labeled and read-only until refresh. |
| [heading-summaries](index.html#heading-summaries) | Four compact role counts in a semantic definition list beside a page title; counts represent all synthetic workspace users. | Counts are read-only and do not imply clickable filters. | Preview selector and retry use shared custom-select/button focus rules. | Preview switches count states without changing the table or its query. | Not applicable to read-only metric values. | Count-shaped skeletons and one status announcement; no false zeros. | Unavailable em dashes and Retry; successful empty state explicitly displays zeros. |
| [table-pagination](index.html#table-pagination) | 10 rows per page, matching total/range and numbered pagination in one footer. | Table actions, sort headings and page buttons use semantic feedback. | Named row actions, current-page semantics, focus preservation during page-button updates and a custom page-size combobox. | Search/filter/sort/size reset page 1; paging uses a coherent query snapshot and newest-response guard. | Navigation is disabled while totals are unknown/loading, after error, at boundaries and for empty results. | Skeleton rows replace old data, aria-busy marks the table and total/range is unknown until the current request completes. | Error is distinct from successful empty results; Retry retains query; obsolete success/error responses cannot replace the latest result. |
| [clm-workspace](index.html#clm-workspace) | Synthetic contracts under a fixed snapshot date, permitted scope and selected contract context. | Shared semantic controls and explicit text states. | Named forms, keyboard alternatives, dialog focus return and responsive scroll containers. | Scoped repository, saved views, lifecycle detail, reporting and local CSV/document-bundle exports. | Read-only access, stale data, signed originals and workflow prerequisites prevent mutations. | Global loading state hides fixture surfaces and announces loading. | Empty/error/permission states remain distinct; document revision conflicts preserve edits and unknown signature outcomes require checking rather than resending. |
| [clm-authoring](index.html#clm-authoring) | Synthetic contracts under a fixed snapshot date, permitted scope and selected contract context. | Shared semantic controls and explicit text states. | Named forms, keyboard alternatives, dialog focus return and responsive scroll containers. | Conditional request forms, approved templates/clauses and evidence-linked metadata confirmation. | Read-only access, stale data, signed originals and workflow prerequisites prevent mutations. | Global loading state hides fixture surfaces and announces loading. | Empty/error/permission states remain distinct; document revision conflicts preserve edits and unknown signature outcomes require checking rather than resending. |
| [clm-review](index.html#clm-review) | Synthetic contracts under a fixed snapshot date, permitted scope and selected contract context. | Shared semantic controls and explicit text states. | Named forms, keyboard alternatives, dialog focus return and responsive scroll containers. | Version comparison, clause comments, sequential/parallel approvals and version invalidation. | Read-only access, stale data, signed originals and workflow prerequisites prevent mutations. | Global loading state hides fixture surfaces and announces loading. | Empty/error/permission states remain distinct; document revision conflicts preserve edits and unknown signature outcomes require checking rather than resending. |
| [clm-signing](index.html#clm-signing) | Synthetic contracts under a fixed snapshot date, permitted scope and selected contract context. | Shared semantic controls and explicit text states. | Named forms, keyboard alternatives, dialog focus return and responsive scroll containers. | Signer order, keyboard field placement, readiness checks and explicit provider-event simulations. | Read-only access, stale data, signed originals and workflow prerequisites prevent mutations. | Global loading state hides fixture surfaces and announces loading. | Empty/error/permission states remain distinct; document revision conflicts preserve edits and unknown signature outcomes require checking rather than resending. |
| [clm-operations](index.html#clm-operations) | Synthetic contracts under a fixed snapshot date, permitted scope and selected contract context. | Shared semantic controls and explicit text states. | Named forms, keyboard alternatives, dialog focus return and responsive scroll containers. | Evidence-backed obligations, notice dates, owner decisions and immutable related agreements. | Read-only access, stale data, signed originals and workflow prerequisites prevent mutations. | Global loading state hides fixture surfaces and announces loading. | Empty/error/permission states remain distinct; document revision conflicts preserve edits and unknown signature outcomes require checking rather than resending. |
| [bot-patterns](index.html#bot-patterns) | Synthetic active bot, conversation history and unsubmitted request. | Shared button and link feedback. | Named fields, native dialog focus containment and visible trigger restoration. | A disabled bot keeps history readable; recovery keeps the original identifier; secret values are removed on close. | Send controls follow bot availability; duplicate submit is disabled while an outcome is unconfirmed; cooldown blocks another attempt. | An unconfirmed response remains distinct from success. Production pollers only refresh while visible and stop at terminal states. | Rejected requests explain recipient verification; unknown requests offer same-ID checking; rate limits use the supplied wait. |
