# 2. Inclusivity Features — Test Cases

User Type: **Super Administrator**
Source: *Mi Digital Academy - Education CRM Features Document*
Spec: inclusivity_features.md — every feature, sub-feature, and rule covered

## Test Execution Policy

- Zero tolerance: any deviation from the documented behavior is a defect.
- Every failed test is logged with a Bug ID, the feature, the sub-feature, the expected vs actual result, and the severity; 100% of bugs are fixed before the group passes.
- 100% pass rate is required for the group to be marked complete.

## Coverage Matrix

| Feature | Sub-feature / Rule | Test IDs |
|---------|--------------------|----------|
| 2.1 Text-to-Speech Configuration | TTS engine selection: the TTS provider and engine used | TC-SA-ACC-02-001 |
| 2.1 Text-to-Speech Configuration | Voice catalog: the available voices per language | TC-SA-ACC-02-002 |
| 2.1 Text-to-Speech Configuration | Default voice: the default voice per language | TC-SA-ACC-02-003 |
| 2.1 Text-to-Speech Configuration | TTS coverage: the content types eligible for TTS | TC-SA-ACC-02-004 |
| 2.1 Text-to-Speech Configuration | Playback controls: speed, pitch, and pause/resume | TC-SA-ACC-02-005 |
| 2.1 Text-to-Speech Configuration | TTS enablement: TTS toggled on or off per content type | TC-SA-ACC-02-006 |
| 2.1 Text-to-Speech Configuration | Rule: no engine means no TTS | TC-SA-ACC-02-007 |
| 2.1 Text-to-Speech Configuration | Rule: the default voice must exist in the selected engine | TC-SA-ACC-02-008 |
| 2.1 Text-to-Speech Configuration | Rule: a language with no voices is not offered for TTS | TC-SA-ACC-02-009 |
| 2.1 Text-to-Speech Configuration | Rule: TTS applies only to enabled content types | TC-SA-ACC-02-010 |
| 2.1 Text-to-Speech Configuration | Rule: playback speed is bounded | TC-SA-ACC-02-011 |
| 2.1 Text-to-Speech Configuration | Rule: TTS is generated on demand | TC-SA-ACC-02-012 |
| 2.1 Text-to-Speech Configuration | Rule: a learner's voice preference overrides the default | TC-SA-ACC-02-013 |
| 2.1 Text-to-Speech Configuration | Rule: configuration changes are audit-logged | TC-SA-ACC-02-014 |
| 2.2 Closed Captioning Management | CC track upload: captioning tracks uploaded per session/video and language | TC-SA-ACC-02-015 |
| 2.2 Closed Captioning Management | CC review: captioning tracks reviewed before publication | TC-SA-ACC-02-016 |
| 2.2 Closed Captioning Management | CC publication: captioning tracks published per session/video and language | TC-SA-ACC-02-017 |
| 2.2 Closed Captioning Management | CC default behavior: captions on/off by default and the default language | TC-SA-ACC-02-018 |
| 2.2 Closed Captioning Management | CC style: caption font size, color, and background options | TC-SA-ACC-02-019 |
| 2.2 Closed Captioning Management | CC list: the captioning tracks per session/video with language and status | TC-SA-ACC-02-020 |
| 2.2 Closed Captioning Management | Rule: an unreviewed track is not learner-visible | TC-SA-ACC-02-021 |
| 2.2 Closed Captioning Management | Rule: an invalid captioning file is rejected on upload | TC-SA-ACC-02-022 |
| 2.2 Closed Captioning Management | Rule: a language already covered is replaced on re-upload | TC-SA-ACC-02-023 |
| 2.2 Closed Captioning Management | Rule: a session/video with no track shows no caption option | TC-SA-ACC-02-024 |
| 2.2 Closed Captioning Management | Rule: invalid style values fall back to the platform default | TC-SA-ACC-02-025 |
| 2.2 Closed Captioning Management | Rule: CC is toggleable by the learner at any time | TC-SA-ACC-02-026 |
| 2.2 Closed Captioning Management | Rule: captioning changes are audit-logged | TC-SA-ACC-02-027 |
| 2.3 Dyslexia-Friendly Font Settings | Dyslexia font enablement: dyslexia-friendly fonts toggled on or off | TC-SA-ACC-02-028 |
| 2.3 Dyslexia-Friendly Font Settings | Font selection: the dyslexia-friendly font family used | TC-SA-ACC-02-029 |
| 2.3 Dyslexia-Friendly Font Settings | Typography defaults: letter spacing, line height, and word spacing | TC-SA-ACC-02-030 |
| 2.3 Dyslexia-Friendly Font Settings | Scope: the content areas where dyslexia-friendly fonts apply | TC-SA-ACC-02-031 |
| 2.3 Dyslexia-Friendly Font Settings | Font preview: a preview of the dyslexia-friendly rendering | TC-SA-ACC-02-032 |
| 2.3 Dyslexia-Friendly Font Settings | Rule: when disabled, the standard font is used | TC-SA-ACC-02-033 |
| 2.3 Dyslexia-Friendly Font Settings | Rule: unsupported fonts are rejected | TC-SA-ACC-02-034 |
| 2.3 Dyslexia-Friendly Font Settings | Rule: typography values are bounded | TC-SA-ACC-02-035 |
| 2.3 Dyslexia-Friendly Font Settings | Rule: a learner can enable or disable it personally | TC-SA-ACC-02-036 |
| 2.3 Dyslexia-Friendly Font Settings | Rule: a content area not in scope renders with the standard font | TC-SA-ACC-02-037 |
| 2.3 Dyslexia-Friendly Font Settings | Rule: settings changes are audit-logged | TC-SA-ACC-02-038 |
| 2.4 Color-Blind Friendly Design Options | Color-blind mode enablement: color-blind friendly palettes toggled on or off | TC-SA-ACC-02-039 |
| 2.4 Color-Blind Friendly Design Options | Palette selection: the color-blind safe palette per deficiency type | TC-SA-ACC-02-040 |
| 2.4 Color-Blind Friendly Design Options | Chart color scheme: the color scheme used for charts | TC-SA-ACC-02-041 |
| 2.4 Color-Blind Friendly Design Options | Indicator patterns: non-color indicators for status | TC-SA-ACC-02-042 |
| 2.4 Color-Blind Friendly Design Options | Palette preview: a preview of the color-blind friendly rendering | TC-SA-ACC-02-043 |
| 2.4 Color-Blind Friendly Design Options | Rule: when disabled, the standard palette is used | TC-SA-ACC-02-044 |
| 2.4 Color-Blind Friendly Design Options | Rule: a palette must be selected per enabled deficiency type | TC-SA-ACC-02-045 |
| 2.4 Color-Blind Friendly Design Options | Rule: non-color indicators are required when a mode is on | TC-SA-ACC-02-046 |
| 2.4 Color-Blind Friendly Design Options | Rule: chart colors are drawn from the selected palette | TC-SA-ACC-02-047 |
| 2.4 Color-Blind Friendly Design Options | Rule: a learner can select their deficiency type personally | TC-SA-ACC-02-048 |
| 2.4 Color-Blind Friendly Design Options | Rule: settings changes are audit-logged | TC-SA-ACC-02-049 |
| 2.5 Keyboard Navigation Support | Keyboard navigation enablement: full keyboard operability toggled on or off | TC-SA-ACC-02-050 |
| 2.5 Keyboard Navigation Support | Focus indicator: the visible focus indicator style | TC-SA-ACC-02-051 |
| 2.5 Keyboard Navigation Support | Skip links: skip-to-content links for keyboard users | TC-SA-ACC-02-052 |
| 2.5 Keyboard Navigation Support | Shortcut catalog: the keyboard shortcuts available per screen | TC-SA-ACC-02-053 |
| 2.5 Keyboard Navigation Support | Focus order: the logical tab order across interactive elements | TC-SA-ACC-02-054 |
| 2.5 Keyboard Navigation Support | Rule: unreachable elements are flagged | TC-SA-ACC-02-055 |
| 2.5 Keyboard Navigation Support | Rule: a hidden focus indicator is rejected | TC-SA-ACC-02-056 |
| 2.5 Keyboard Navigation Support | Rule: a broken skip link target is flagged | TC-SA-ACC-02-057 |
| 2.5 Keyboard Navigation Support | Rule: shortcuts must not conflict with reserved shortcuts | TC-SA-ACC-02-058 |
| 2.5 Keyboard Navigation Support | Rule: a core task must be completable by keyboard alone | TC-SA-ACC-02-059 |
| 2.5 Keyboard Navigation Support | Rule: settings changes are audit-logged | TC-SA-ACC-02-060 |

### TC-SA-ACC-02-001 — TTS engine selection: the TTS provider and engine used
**Type:** Positive
**Covers:** 2.1 → TTS engine selection: the TTS provider and engine used for speech synthesis
**Preconditions:** A Super Admin account is active; at least one TTS engine is available.
**Steps:**
1. As a Super Admin, open the TTS configuration and select a TTS engine.
2. Save the configuration.
3. Observe the result and verify the full behavior: the selected engine is used for speech synthesis.
**Expected Result:** The TTS engine selection works — the selected engine is used, delivered exactly as documented.
**Priority:** Critical

### TC-SA-ACC-02-002 — Voice catalog: the available voices per language
**Type:** Positive
**Covers:** 2.1 → Voice catalog: the available voices per language with gender and style
**Preconditions:** A Super Admin account is active; a TTS engine is selected.
**Steps:**
1. As a Super Admin, open the voice catalog.
2. Observe the result and verify the full behavior: the available voices are shown per language with gender and style.
**Expected Result:** The voice catalog is shown — the voices per language are visible, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-003 — Default voice: the default voice per language
**Type:** Positive
**Covers:** 2.1 → Default voice: the default voice per language
**Preconditions:** A Super Admin account is active; a TTS engine is selected with voices.
**Steps:**
1. As a Super Admin, set the default voice for a language and save.
2. Play text content as a learner in that language.
3. Observe the result and verify the full behavior: the default voice is used.
**Expected Result:** The default voice is applied — the default voice is used, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-004 — TTS coverage: the content types eligible for TTS
**Type:** Positive
**Covers:** 2.1 → TTS coverage: the content types eligible for text-to-speech
**Preconditions:** A Super Admin account is active.
**Steps:**
1. As a Super Admin, set the TTS-eligible content types and save.
2. Open an eligible content type as a learner.
3. Observe the result and verify the full behavior: a play button is available for the eligible type.
**Expected Result:** The TTS coverage is applied — the eligible type shows a play button, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-005 — Playback controls: speed, pitch, and pause/resume
**Type:** Positive
**Covers:** 2.1 → Playback controls: speed, pitch, and pause/resume behavior
**Preconditions:** A Super Admin account is active; TTS is enabled for a content type.
**Steps:**
1. As a learner, play text content as speech.
2. Change the speed and pitch, then pause and resume.
3. Observe the result and verify the full behavior: the speed and pitch change and pause/resume works.
**Expected Result:** The playback controls work — speed, pitch, and pause/resume behave correctly, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-006 — TTS enablement: TTS toggled on or off per content type
**Type:** Positive
**Covers:** 2.1 → TTS enablement: text-to-speech toggled on or off per content type
**Preconditions:** A Super Admin account is active.
**Steps:**
1. As a Super Admin, toggle TTS off for a content type and save.
2. Open that content type as a learner.
3. Observe the result and verify the full behavior: no play button is shown for the disabled type.
**Expected Result:** The TTS enablement works — the disabled type shows no play button, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-007 — Rule: no engine means no TTS
**Type:** Negative
**Covers:** 2.1 → Rule: a TTS engine must be selected before voices are available; no engine means no TTS
**Preconditions:** A Super Admin account is active; no TTS engine is selected.
**Steps:**
1. As a Super Admin, confirm no engine is selected.
2. Open the voice catalog.
3. Observe the result and verify the full behavior: no voices are available and TTS is not offered.
**Expected Result:** No TTS is available — no engine means no TTS, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-008 — Rule: the default voice must exist in the selected engine
**Type:** Negative
**Covers:** 2.1 → Rule: the default voice per language must be a voice that exists in the selected engine
**Preconditions:** A Super Admin account is active; a voice from another engine is referenced.
**Steps:**
1. As a Super Admin, attempt to set the default voice to a voice not in the selected engine.
2. Observe the result and verify the full behavior: the change is rejected with a validation message.
**Expected Result:** The change is rejected — the default voice must exist in the engine, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-009 — Rule: a language with no voices is not offered for TTS
**Type:** Positive
**Covers:** 2.1 → Rule: a language with no available voices is not offered for TTS
**Preconditions:** A Super Admin account is active; a language has no voices in the engine.
**Steps:**
1. As a learner, open the TTS voice selector.
2. Observe the result and verify the full behavior: the language with no voices is not offered.
**Expected Result:** The language is not offered — no voices means no TTS for that language, delivered exactly as documented.
**Priority:** Medium

### TC-SA-ACC-02-010 — Rule: TTS applies only to enabled content types
**Type:** Negative
**Covers:** 2.1 → Rule: TTS applies only to enabled content types; other content shows no play button
**Preconditions:** A Super Admin account is active; TTS is enabled for lessons only.
**Steps:**
1. As a learner, open a worksheet (a non-enabled type).
2. Observe the result and verify the full behavior: no play button is shown.
**Expected Result:** No play button is shown — the enablement scope is enforced, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-011 — Rule: playback speed is bounded
**Type:** Negative
**Covers:** 2.1 → Rule: playback speed is bounded (e.g., 0.5x to 2.0x); out-of-range values are rejected
**Preconditions:** A Super Admin account is active; TTS is enabled.
**Steps:**
1. As a learner, attempt to set the playback speed to 3.0x.
2. Observe the result and verify the full behavior: the out-of-range value is rejected.
**Expected Result:** The out-of-range speed is rejected — the bound is enforced, delivered exactly as documented.
**Priority:** Medium

### TC-SA-ACC-02-012 — Rule: TTS is generated on demand
**Type:** Positive
**Covers:** 2.1 → Rule: TTS is generated on demand; it is not pre-rendered for all content
**Preconditions:** A Super Admin account is active; TTS is enabled.
**Steps:**
1. As a learner, play text content as speech for the first time.
2. Observe the result and verify the full behavior: the speech is generated on demand at playback.
**Expected Result:** The TTS is generated on demand — it is not pre-rendered, delivered exactly as documented.
**Priority:** Medium

### TC-SA-ACC-02-013 — Rule: a learner's voice preference overrides the default
**Type:** Positive
**Covers:** 2.1 → Rule: a learner's personal voice preference overrides the platform default for that learner
**Preconditions:** A Super Admin account is active; a learner has set a personal voice preference.
**Steps:**
1. As a learner, play text content as speech.
2. Observe the result and verify the full behavior: the learner's personal voice is used, not the platform default.
**Expected Result:** The personal preference is applied — the learner's voice is used, delivered exactly as documented.
**Priority:** Medium

### TC-SA-ACC-02-014 — Rule: configuration changes are audit-logged
**Type:** Positive
**Covers:** 2.1 → Audit logging of text-to-speech configuration
**Preconditions:** A Super Admin account is active; the audit log is accessible.
**Steps:**
1. As a Super Admin, change the TTS configuration and save.
2. Open the audit log.
3. Observe the result and verify the full behavior: the change is recorded with the actor and timestamp.
**Expected Result:** The configuration change is audit-logged — the actor and timestamp are recorded, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-015 — CC track upload: captioning tracks uploaded per session/video and language
**Type:** Positive
**Covers:** 2.2 → CC track upload: closed captioning tracks uploaded per session or video and language
**Preconditions:** A Super Admin account is active; a valid captioning file is ready.
**Steps:**
1. As a Super Admin, open a session and upload the captioning track for a language.
2. Complete the upload.
3. Observe the result and verify the full behavior: the track is uploaded and appears in the CC list.
**Expected Result:** The CC track is uploaded — it appears in the CC list, delivered exactly as documented.
**Priority:** Critical

### TC-SA-ACC-02-016 — CC review: captioning tracks reviewed before publication
**Type:** Positive
**Covers:** 2.2 → CC review: captioning tracks reviewed for accuracy before publication
**Preconditions:** A Super Admin account is active; a captioning track is uploaded.
**Steps:**
1. As a Super Admin, open the uploaded track and review the accuracy.
2. Mark the review complete.
3. Observe the result and verify the full behavior: the track's status shows reviewed.
**Expected Result:** The review works — the track is marked reviewed, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-017 — CC publication: captioning tracks published per session/video and language
**Type:** Positive
**Covers:** 2.2 → CC publication: captioning tracks published per session or video and language
**Preconditions:** A Super Admin account is active; a captioning track is reviewed.
**Steps:**
1. As a Super Admin, publish the reviewed track.
2. Join the session as a learner.
3. Observe the result and verify the full behavior: the captioning track is available to learners.
**Expected Result:** The publication works — the track is learner-visible, delivered exactly as documented.
**Priority:** Critical

### TC-SA-ACC-02-018 — CC default behavior: captions on/off by default and the default language
**Type:** Positive
**Covers:** 2.2 → CC default behavior: captions on/off by default and the default language
**Preconditions:** A Super Admin account is active; captioning tracks are published.
**Steps:**
1. As a Super Admin, set the default CC behavior (on, default language) and save.
2. Join the session as a learner without changing settings.
3. Observe the result and verify the full behavior: captions are on by default in the default language.
**Expected Result:** The default behavior is applied — captions are on in the default language, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-019 — CC style: caption font size, color, and background options
**Type:** Positive
**Covers:** 2.2 → CC style: caption font size, color, and background options
**Preconditions:** A Super Admin account is active; captioning tracks are published.
**Steps:**
1. As a Super Admin, set the caption style (font size, color, background) and save.
2. View the session as a learner.
3. Observe the result and verify the full behavior: the captions render with the configured style.
**Expected Result:** The CC style is applied — the captions render with the configured style, delivered exactly as documented.
**Priority:** Medium

### TC-SA-ACC-02-020 — CC list: the captioning tracks per session/video with language and status
**Type:** Positive
**Covers:** 2.2 → CC list: the captioning tracks per session or video with language and status
**Preconditions:** A Super Admin account is active; multiple captioning tracks exist.
**Steps:**
1. As a Super Admin, open the CC list for a session.
2. Observe the result and verify the full behavior: the tracks are shown with language and status.
**Expected Result:** The CC list is shown — the tracks with language and status are visible, delivered exactly as documented.
**Priority:** Medium

### TC-SA-ACC-02-021 — Rule: an unreviewed track is not learner-visible
**Type:** Negative
**Covers:** 2.2 → Rule: a captioning track is published only after review; an unreviewed track is not learner-visible
**Preconditions:** A Super Admin account is active; a captioning track is uploaded but not reviewed.
**Steps:**
1. As a Super Admin, confirm the track is unreviewed.
2. Join the session as a learner.
3. Observe the result and verify the full behavior: the unreviewed track is not available.
**Expected Result:** The unreviewed track is hidden — it is not learner-visible, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-022 — Rule: an invalid captioning file is rejected on upload
**Type:** Negative
**Covers:** 2.2 → Rule: a captioning file with invalid timing or format is rejected on upload with the reason
**Preconditions:** A Super Admin account is active; a captioning file with invalid timing is ready.
**Steps:**
1. As a Super Admin, attempt to upload the invalid file.
2. Observe the result and verify the full behavior: the upload is rejected with the specific reason.
**Expected Result:** The invalid file is rejected — the reason is shown, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-023 — Rule: a language already covered is replaced on re-upload
**Type:** Positive
**Covers:** 2.2 → Rule: a language already covered is replaced on re-upload
**Preconditions:** A Super Admin account is active; a captioning track for a language exists.
**Steps:**
1. As a Super Admin, re-upload a new track for the same language.
2. Open the CC list.
3. Observe the result and verify the full behavior: the new track replaces the old one for that language.
**Expected Result:** The replacement works — one track per language, delivered exactly as documented.
**Priority:** Medium

### TC-SA-ACC-02-024 — Rule: a session/video with no track shows no caption option
**Type:** Positive
**Covers:** 2.2 → Rule: a session or video with no captioning track shows no caption option
**Preconditions:** A Super Admin account is active; a session has no captioning tracks.
**Steps:**
1. As a learner, join the session.
2. Observe the player controls.
3. Observe the result and verify the full behavior: no caption option is shown.
**Expected Result:** No caption option is shown — no empty track is forced, delivered exactly as documented.
**Priority:** Medium

### TC-SA-ACC-02-025 — Rule: invalid style values fall back to the platform default
**Type:** Positive
**Covers:** 2.2 → Rule: caption style options are bounded; invalid style values fall back to the platform default
**Preconditions:** A Super Admin account is active; an invalid style value is present.
**Steps:**
1. As a Super Admin, set an invalid caption style value.
2. View the session as a learner.
3. Observe the result and verify the full behavior: the captions render with the platform default style.
**Expected Result:** The fallback works — the platform default style is used, delivered exactly as documented.
**Priority:** Medium

### TC-SA-ACC-02-026 — Rule: CC is toggleable by the learner at any time
**Type:** Positive
**Covers:** 2.2 → Rule: CC is distinct from subtitles: CC is toggleable by the learner at any time
**Preconditions:** A Super Admin account is active; a captioning track is published.
**Steps:**
1. As a learner, join the session with captions on.
2. Toggle captions off, then on again.
3. Observe the result and verify the full behavior: the learner can toggle captions at any time.
**Expected Result:** The toggle works — captions can be turned on and off at any time, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-027 — Rule: captioning changes are audit-logged
**Type:** Positive
**Covers:** 2.2 → Audit logging of closed captioning management
**Preconditions:** A Super Admin account is active; the audit log is accessible.
**Steps:**
1. As a Super Admin, publish a captioning track.
2. Open the audit log.
3. Observe the result and verify the full behavior: the change is recorded with the actor and timestamp.
**Expected Result:** The captioning change is audit-logged — the actor and timestamp are recorded, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-028 — Dyslexia font enablement: dyslexia-friendly fonts toggled on or off
**Type:** Positive
**Covers:** 2.3 → Dyslexia font enablement: dyslexia-friendly fonts toggled on or off
**Preconditions:** A Super Admin account is active.
**Steps:**
1. As a Super Admin, enable dyslexia-friendly fonts and save.
2. View content as a learner with the setting enabled.
3. Observe the result and verify the full behavior: the content renders with the dyslexia-friendly font.
**Expected Result:** The enablement works — the dyslexia-friendly font is applied, delivered exactly as documented.
**Priority:** Critical

### TC-SA-ACC-02-029 — Font selection: the dyslexia-friendly font family used
**Type:** Positive
**Covers:** 2.3 → Font selection: the dyslexia-friendly font family used
**Preconditions:** A Super Admin account is active; dyslexia-friendly fonts are enabled.
**Steps:**
1. As a Super Admin, select a dyslexia-friendly font family and save.
2. View content as a learner.
3. Observe the result and verify the full behavior: the selected font family is used.
**Expected Result:** The font selection works — the selected family is used, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-030 — Typography defaults: letter spacing, line height, and word spacing
**Type:** Positive
**Covers:** 2.3 → Typography defaults: letter spacing, line height, and word spacing defaults
**Preconditions:** A Super Admin account is active; dyslexia-friendly fonts are enabled.
**Steps:**
1. As a Super Admin, set the typography defaults and save.
2. View content as a learner.
3. Observe the result and verify the full behavior: the content renders with the configured typography.
**Expected Result:** The typography defaults are applied — the configured values are used, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-031 — Scope: the content areas where dyslexia-friendly fonts apply
**Type:** Positive
**Covers:** 2.3 → Scope: the content areas where dyslexia-friendly fonts apply
**Preconditions:** A Super Admin account is active; dyslexia-friendly fonts are enabled.
**Steps:**
1. As a Super Admin, set the scope to lessons only and save.
2. View a lesson and a worksheet as a learner.
3. Observe the result and verify the full behavior: the lesson uses the dyslexia font; the worksheet uses the standard font.
**Expected Result:** The scope is applied — only in-scope areas use the dyslexia font, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-032 — Font preview: a preview of the dyslexia-friendly rendering
**Type:** Positive
**Covers:** 2.3 → Font preview: a preview of the dyslexia-friendly rendering
**Preconditions:** A Super Admin account is active; dyslexia-friendly fonts are enabled.
**Steps:**
1. As a Super Admin, open the font preview.
2. Observe the result and verify the full behavior: the preview shows the dyslexia-friendly rendering.
**Expected Result:** The preview works — the dyslexia-friendly rendering is shown, delivered exactly as documented.
**Priority:** Medium

### TC-SA-ACC-02-033 — Rule: when disabled, the standard font is used
**Type:** Positive
**Covers:** 2.3 → Rule: dyslexia-friendly fonts apply only when enabled; when disabled, the standard font is used
**Preconditions:** A Super Admin account is active; dyslexia-friendly fonts are disabled.
**Steps:**
1. As a learner, view content.
2. Observe the result and verify the full behavior: the standard font is used.
**Expected Result:** The standard font is used — the disabled setting is respected, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-034 — Rule: unsupported fonts are rejected
**Type:** Negative
**Covers:** 2.3 → Rule: the selected font must be a supported dyslexia-friendly family; unsupported fonts are rejected
**Preconditions:** A Super Admin account is active; an unsupported font is referenced.
**Steps:**
1. As a Super Admin, attempt to select an unsupported font family.
2. Observe the result and verify the full behavior: the selection is rejected with a validation message.
**Expected Result:** The unsupported font is rejected — only supported families are allowed, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-035 — Rule: typography values are bounded
**Type:** Negative
**Covers:** 2.3 → Rule: typography values are bounded; out-of-range values are rejected with a validation message
**Preconditions:** A Super Admin account is active; dyslexia-friendly fonts are enabled.
**Steps:**
1. As a Super Admin, attempt to set an out-of-range letter spacing value.
2. Observe the result and verify the full behavior: the value is rejected with a validation message.
**Expected Result:** The out-of-range value is rejected — the bound is enforced, delivered exactly as documented.
**Priority:** Medium

### TC-SA-ACC-02-036 — Rule: a learner can enable or disable it personally
**Type:** Positive
**Covers:** 2.3 → Rule: the setting is a platform default; a learner can enable or disable it personally
**Preconditions:** A Super Admin account is active; the platform default is on.
**Steps:**
1. As a learner, disable the dyslexia-friendly font personally.
2. View content.
3. Observe the result and verify the full behavior: the standard font is used for that learner.
**Expected Result:** The personal override works — the learner's choice is respected, delivered exactly as documented.
**Priority:** Medium

### TC-SA-ACC-02-037 — Rule: a content area not in scope renders with the standard font
**Type:** Positive
**Covers:** 2.3 → Rule: a content area not in scope renders with the standard font even when the setting is on
**Preconditions:** A Super Admin account is active; the scope excludes worksheets.
**Steps:**
1. As a learner with the setting on, open a worksheet.
2. Observe the result and verify the full behavior: the worksheet renders with the standard font.
**Expected Result:** The out-of-scope area uses the standard font — the scope is enforced, delivered exactly as documented.
**Priority:** Medium

### TC-SA-ACC-02-038 — Rule: settings changes are audit-logged
**Type:** Positive
**Covers:** 2.3 → Audit logging of dyslexia-friendly font settings
**Preconditions:** A Super Admin account is active; the audit log is accessible.
**Steps:**
1. As a Super Admin, change the dyslexia-friendly font settings and save.
2. Open the audit log.
3. Observe the result and verify the full behavior: the change is recorded with the actor and timestamp.
**Expected Result:** The settings change is audit-logged — the actor and timestamp are recorded, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-039 — Color-blind mode enablement: color-blind friendly palettes toggled on or off
**Type:** Positive
**Covers:** 2.4 → Color-blind mode enablement: color-blind friendly palettes toggled on or off
**Preconditions:** A Super Admin account is active.
**Steps:**
1. As a Super Admin, enable a color-blind mode and save.
2. View the UI as a learner with the setting enabled.
3. Observe the result and verify the full behavior: the UI renders with the color-blind friendly palette.
**Expected Result:** The enablement works — the color-blind palette is applied, delivered exactly as documented.
**Priority:** Critical

### TC-SA-ACC-02-040 — Palette selection: the color-blind safe palette per deficiency type
**Type:** Positive
**Covers:** 2.4 → Palette selection: the color-blind safe palette (deuteranopia, protanopia, tritanopia, achromatopsia)
**Preconditions:** A Super Admin account is active; color-blind modes are enabled.
**Steps:**
1. As a Super Admin, select a palette for deuteranopia and save.
2. View the UI as a learner with deuteranopia selected.
3. Observe the result and verify the full behavior: the deuteranopia palette is used.
**Expected Result:** The palette selection works — the selected palette is used, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-041 — Chart color scheme: the color scheme used for charts
**Type:** Positive
**Covers:** 2.4 → Chart color scheme: the color scheme used for charts and data visualizations
**Preconditions:** A Super Admin account is active; a color-blind mode is enabled.
**Steps:**
1. As a Super Admin, set the chart color scheme and save.
2. View a chart as a learner.
3. Observe the result and verify the full behavior: the chart uses the configured color scheme.
**Expected Result:** The chart color scheme is applied — the configured scheme is used, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-042 — Indicator patterns: non-color indicators for status
**Type:** Positive
**Covers:** 2.4 → Indicator patterns: non-color indicators (icons, patterns, labels) for status
**Preconditions:** A Super Admin account is active; a color-blind mode is enabled.
**Steps:**
1. As a Super Admin, enable non-color indicators and save.
2. View a status indicator as a learner.
3. Observe the result and verify the full behavior: the status is shown with an icon, pattern, or label, not color alone.
**Expected Result:** The non-color indicators work — status is distinguishable without color, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-043 — Palette preview: a preview of the color-blind friendly rendering
**Type:** Positive
**Covers:** 2.4 → Palette preview: a preview of the color-blind friendly rendering
**Preconditions:** A Super Admin account is active; a color-blind mode is enabled.
**Steps:**
1. As a Super Admin, open the palette preview.
2. Observe the result and verify the full behavior: the preview shows the color-blind friendly rendering.
**Expected Result:** The preview works — the color-blind rendering is shown, delivered exactly as documented.
**Priority:** Medium

### TC-SA-ACC-02-044 — Rule: when disabled, the standard palette is used
**Type:** Positive
**Covers:** 2.4 → Rule: color-blind modes apply only when enabled; when disabled, the standard palette is used
**Preconditions:** A Super Admin account is active; color-blind modes are disabled.
**Steps:**
1. As a learner, view the UI.
2. Observe the result and verify the full behavior: the standard palette is used.
**Expected Result:** The standard palette is used — the disabled setting is respected, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-045 — Rule: a palette must be selected per enabled deficiency type
**Type:** Negative
**Covers:** 2.4 → Rule: each deficiency type maps to a distinct palette; a palette must be selected per enabled type
**Preconditions:** A Super Admin account is active; a deficiency type is enabled with no palette.
**Steps:**
1. As a Super Admin, attempt to save with an enabled type and no palette.
2. Observe the result and verify the full behavior: the save is blocked with a validation message.
**Expected Result:** The save is blocked — a palette is required per enabled type, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-046 — Rule: non-color indicators are required when a mode is on
**Type:** Negative
**Covers:** 2.4 → Rule: non-color indicators (icons, patterns, labels) are required for status when a color-blind mode is on
**Preconditions:** A Super Admin account is active; a color-blind mode is on.
**Steps:**
1. As a Super Admin, attempt to disable non-color indicators while a mode is on.
2. Observe the result and verify the full behavior: the disable is blocked with a validation message.
**Expected Result:** The disable is blocked — non-color indicators are required, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-047 — Rule: chart colors are drawn from the selected palette
**Type:** Positive
**Covers:** 2.4 → Rule: chart colors are drawn from the selected palette; no out-of-palette colors are used
**Preconditions:** A Super Admin account is active; a color-blind mode is enabled.
**Steps:**
1. As a learner, view a chart.
2. Inspect the chart colors.
3. Observe the result and verify the full behavior: all chart colors are from the selected palette.
**Expected Result:** The palette is enforced — no out-of-palette colors are used, delivered exactly as documented.
**Priority:** Medium

### TC-SA-ACC-02-048 — Rule: a learner can select their deficiency type personally
**Type:** Positive
**Covers:** 2.4 → Rule: the setting is a platform default; a learner can select their deficiency type personally
**Preconditions:** A Super Admin account is active; the platform default is deuteranopia.
**Steps:**
1. As a learner, select protanopia personally.
2. View the UI.
3. Observe the result and verify the full behavior: the protanopia palette is used for that learner.
**Expected Result:** The personal selection works — the learner's choice is respected, delivered exactly as documented.
**Priority:** Medium

### TC-SA-ACC-02-049 — Rule: settings changes are audit-logged
**Type:** Positive
**Covers:** 2.4 → Audit logging of color-blind friendly design options
**Preconditions:** A Super Admin account is active; the audit log is accessible.
**Steps:**
1. As a Super Admin, change the color-blind design options and save.
2. Open the audit log.
3. Observe the result and verify the full behavior: the change is recorded with the actor and timestamp.
**Expected Result:** The settings change is audit-logged — the actor and timestamp are recorded, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-050 — Keyboard navigation enablement: full keyboard operability toggled on or off
**Type:** Positive
**Covers:** 2.5 → Keyboard navigation enablement: full keyboard operability toggled on or off
**Preconditions:** A Super Admin account is active.
**Steps:**
1. As a Super Admin, enable full keyboard operability and save.
2. Navigate the platform as a learner using only the keyboard.
3. Observe the result and verify the full behavior: the platform is fully operable by keyboard.
**Expected Result:** The enablement works — the platform is keyboard-operable, delivered exactly as documented.
**Priority:** Critical

### TC-SA-ACC-02-051 — Focus indicator: the visible focus indicator style
**Type:** Positive
**Covers:** 2.5 → Focus indicator: the visible focus indicator style for keyboard navigation
**Preconditions:** A Super Admin account is active; keyboard navigation is enabled.
**Steps:**
1. As a Super Admin, set the focus indicator style and save.
2. Tab through elements as a learner.
3. Observe the result and verify the full behavior: the focus indicator is visible with the configured style.
**Expected Result:** The focus indicator works — it is visible with the configured style, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-052 — Skip links: skip-to-content links for keyboard users
**Type:** Positive
**Covers:** 2.5 → Skip links: skip-to-content links for keyboard users
**Preconditions:** A Super Admin account is active; keyboard navigation is enabled.
**Steps:**
1. As a learner, press Tab on a page to reach the skip link.
2. Activate the skip link.
3. Observe the result and verify the full behavior: focus moves to the main content.
**Expected Result:** The skip link works — focus moves to the main content, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-053 — Shortcut catalog: the keyboard shortcuts available per screen
**Type:** Positive
**Covers:** 2.5 → Shortcut catalog: the keyboard shortcuts available per screen
**Preconditions:** A Super Admin account is active; keyboard navigation is enabled.
**Steps:**
1. As a Super Admin, open the shortcut catalog.
2. Observe the result and verify the full behavior: the keyboard shortcuts are listed per screen.
**Expected Result:** The shortcut catalog is shown — the shortcuts per screen are visible, delivered exactly as documented.
**Priority:** Medium

### TC-SA-ACC-02-054 — Focus order: the logical tab order across interactive elements
**Type:** Positive
**Covers:** 2.5 → Focus order: the logical tab order across interactive elements
**Preconditions:** A Super Admin account is active; keyboard navigation is enabled.
**Steps:**
1. As a learner, tab through a representative screen.
2. Observe the result and verify the full behavior: the focus order follows the visual reading order.
**Expected Result:** The focus order is logical — it follows the reading order, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-055 — Rule: unreachable elements are flagged
**Type:** Negative
**Covers:** 2.5 → Rule: every interactive element must be reachable by keyboard; unreachable elements are flagged
**Preconditions:** A Super Admin account is active; an interactive element is not keyboard-reachable.
**Steps:**
1. As a Super Admin, run the keyboard reachability check.
2. Observe the result and verify the full behavior: the unreachable element is flagged.
**Expected Result:** The unreachable element is flagged — the check reports it, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-056 — Rule: a hidden focus indicator is rejected
**Type:** Negative
**Covers:** 2.5 → Rule: the focus indicator must be visible; a hidden or invisible focus indicator is rejected
**Preconditions:** A Super Admin account is active; keyboard navigation is enabled.
**Steps:**
1. As a Super Admin, attempt to set a hidden focus indicator style.
2. Observe the result and verify the full behavior: the setting is rejected with a validation message.
**Expected Result:** The hidden indicator is rejected — a visible indicator is required, delivered exactly as documented.
**Priority:** High

### TC-SA-ACC-02-057 — Rule: a broken skip link target is flagged
**Type:** Negative
**Covers:** 2.5 → Rule: skip links must target valid landmarks; a broken skip link target is flagged
**Preconditions:** A Super Admin account is active; a skip link targets a missing landmark.
**Steps:**
1. As a Super Admin, run the skip link validation.
2. Observe the result and verify the full behavior: the broken skip link target is flagged.
**Expected Result:** The broken target is flagged — the validation reports it, delivered exactly as documented.
**Priority:** Medium

### TC-SA-ACC-02-058 — Rule: shortcuts must not conflict with reserved shortcuts
**Type:** Negative
**Covers:** 2.5 → Rule: keyboard shortcuts must not conflict with browser or OS reserved shortcuts
**Preconditions:** A Super Admin account is active; a shortcut conflicts with a reserved shortcut.
**Steps:**
1. As a Super Admin, attempt to assign a conflicting shortcut.
2. Observe the result and verify the full behavior: the assignment is rejected with a validation message.
**Expected Result:** The conflicting shortcut is rejected — reserved shortcuts are protected, delivered exactly as documented.
**Priority:** Medium

### TC-SA-ACC-02-059 — Rule: a core task must be completable by keyboard alone
**Type:** Positive
**Covers:** 2.5 → Rule: a core task (e.g., completing a lesson) must be completable by keyboard alone
**Preconditions:** A Super Admin account is active; keyboard navigation is enabled.
**Steps:**
1. As a learner, complete a lesson using only the keyboard.
2. Observe the result and verify the full behavior: the lesson is completed without a pointer.
**Expected Result:** The core task is completable — the lesson is completed by keyboard alone, delivered exactly as documented.
**Priority:** Critical

### TC-SA-ACC-02-060 — Rule: settings changes are audit-logged
**Type:** Positive
**Covers:** 2.5 → Audit logging of keyboard navigation support
**Preconditions:** A Super Admin account is active; the audit log is accessible.
**Steps:**
1. As a Super Admin, change the keyboard navigation settings and save.
2. Open the audit log.
3. Observe the result and verify the full behavior: the change is recorded with the actor and timestamp.
**Expected Result:** The settings change is audit-logged — the actor and timestamp are recorded, delivered exactly as documented.
**Priority:** High
