This metadata as outlined in EPUB Accessibility 1.1 [[epub-a11y-11]], can be found in the EPUB package document [[EPUB-33]].
Here is an example of accessibility metadata embedded within the package document, which will be used as a reference point for the following examples on EPUB accessibility metadata: the results of the XPath shown are based on this example.
TBD
Here is an example of an accessibility OPF Metadata for describing an audiobook, which will be used as a reference point for the following examples on EPUB accessibility metadata: the results of the XPath shown are based on this example.
TBD
The code conventions used in the provided code snippet follow a structure commonly found in programming languages like Python, Java, or C++. Here's an explanation of the conventions:
In this section we define the functions common to all techniques, which are called by them during execution.
Before working directly with the metadata we must read the metadata in the Package document (package document) inside the EPUB. This is a common starting point for all techniques that allows us to query the metadata directly.
This algorithm does not describe how the Package document is discovered and extracted within an EPUB.
This algorithm takes the package_document_as_text argument: a UTF-8 string representing the Package document.
To generate the internal representation, run the following steps:
Many of the techniques rely on checking for the presence or absence of metadata in the metadata section of the Package document.
All XPATHs are made for EPUB 3, while for EPUB 2 they would need to be adjusted.
This algorithm takes:
To check for node, run the following steps:
True
.
False
.This function serves to concatenate an array of strings, separating each element with a comma, with the last element separated by an ", and"
(this string is localizable).
For example if the input array has elements ["one", "two", "three"]
, then the output is going to be "one, two, and three"
.
This algorithm takes the string_array argument: the list of string to join.
To join the array, run the following steps:
", "
", "
with ", and "
.This technique relates to Visual adjustments key information.
This algorithm takes the package_document_as_text argument: a UTF-8 string representing the Package document.
If true it indicates that the accessibilityFeature="displayTransformability" (All textual content can be modified) is present in the package document, otherwise if false it means that the metadata is not present.
All textual content can be modified means that the digital publication does not restrict the ability of users to modify and reflow the display of any textual content to the full extent allowed by the reading system (i.e. to change the text size or typeface, line height and word spacing, colors).
If true it indicates that the layout="pre-paginated" (Fixed format) is present in the package document, otherwise if false it means that the metadata is not present.
Fixed format means that digital publication is in fixed format (e.g. EPUB Fixed Layout).
/package/metadata/meta[@property="schema:accessibilityFeature" and text()="displayTransformability"]
./package/metadata/meta[@property="rendition:layout" and text()="pre-paginated"]
."Visual adjustments"
as heading."Appearance can be modified"
.
"Appearance cannot be modified"
.
"Appearance modifiability not known"
.This technique relates to Supports nonvisual reading key information.
This algorithm takes the package_document_as_text argument: a UTF-8 string representing the Package document.
If true it indicates that the accessModeSufficient="textual" (all main content is provided in textual form) is present in the package document, otherwise if false it means that the metadata is not present.
All non-decorative content supports reading without sight means that all contents of the digital publication necessary to use and understanding, including text, images (via their alternative descriptions), audio and video material (via their transcripts, descriptions, captions or subtitles) are fully accessible via suitable reading devices, for example text-to-speech screen readers or tactile reading devices (‘Braille displays’), and nothing in the digital publication prevents or blocks the use of alternative reading modes. The entire publication can be navigated and ‘read’ using only text rendered via sound or touch, and does not require visual perception.
If true it indicates that at least one of the following is present in the package document:
This means that the content contains images of any type.
If true it indicates that at least one of the following is present in the package document:
This means that there are textual alternatives for images.
/package/metadata/meta[@property="schema:accessModeSufficient" and text()="textual"]
./package/metadata/meta[@property="schema:accessibilityFeature" and
(text()="chartOnVisual" or text()="chemOnVisual" or
text()="diagramOnVisual" or text()="mathOnVisual" or
text()="musicOnVisual" or text()="textOnVisual")]
.
/package/metadata/meta[@property="schema:accessibilityFeature" and
(text()="longDescription" or text()="alternativeText" or text()="describedMath")]
.
"Supports nonvisual reading"
as heading."Readable in read aloud or dynamic braille"
.
"Not fully readable in read aloud or dynamic braille"
.
"May not be fully readable in read aloud or dynamic braille"
.This technique relates to Conformance key information.
This algorithm takes the package_document_as_text argument: a UTF-8 string representing the Package document.
If set, provides the full conformance claim statement.
If set, provides the WCAG 2 conformance level claimed.
Returns the description of a11y:certifiedBy (Compliance certification by (name)) if present in the package document, otherwise if false it means that the metadata is not present.
This means that the name of the organization responsible for compliance testing and certification of the product is present.
Returns the description of a11y:certifierCredential (Compliance certification by (URL) or text) if present in the package document, otherwise if false it means that the metadata is not present.
This means that the the URL of a web page belonging to an organization responsible for compliance testing and certification of the product is present – typically a ‘home page’ or a page describing the certification scheme itself.
Returns the description of dcterms:date if that date property is associated with the a11y:certifiedBy (Latest accessibility assessment date) if present in the package document, otherwise if false it means that the metadata is not present.
This means that the date of the latest assessment or re-assessment of the accessibility of the product is present.
Returns the description of a11y:certifierReport (Compliance web page for detailed accessibility information) if present in the OPF, otherwise if false it means that the metadata is not present.
This means that is present the URL of a compliance web page for detailed accessibility information. The web page should be maintained by an independent compliance scheme or testing organization. Note the web page may include information about specific national requirements or voluntary conformance reports.
If true it indicates that the conformsTo is present in the package document, otherwise if false it means that the metadata is not present.
This means that the publication conforms to some specification.
/package/metadata/link[@rel="dcterms:conformsTo" and @href="http://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-a"] | /package/metadata/meta[@property="dcterms:conformsTo" and text() = "http://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-a"]
:
THEN LET conformance_string = 'EPUB Accessibility 1.0 WCAG 2.0 Level A',
and LET wcag_level = 'A'.
/package/metadata/link[@rel="dcterms:conformsTo" and @href="http://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-aa"] | /package/metadata/meta[@property="dcterms:conformsTo" and text() = "http://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-aa"]
:
THEN LET conformance_string = 'EPUB Accessibility 1.0 WCAG 2.0 Level AA',
and LET wcag_level = 'AA'.
/package/metadata/link[@rel="dcterms:conformsTo" and @href="http://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-aaa"] | /package/metadata/meta[@property="dcterms:conformsTo" and text() = "http://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-aaa"]
:
THEN LET conformance_string = 'EPUB Accessibility 1.0 WCAG 2.0 Level AAA',
and LET wcag_level = 'AAA'.
/package/metadata/meta[@property="dcterms:conformsTo" and matches(normalize-space(.), 'EPUB Accessibility 1\.1 - WCAG 2\.[0-2] Level [A]+')
./package/metadata/meta[@property="a11y:certifiedBy"]/text()
./package/metadata/meta[@property="a11y:certifierCredential"]/text()
./package/metadata/meta[@property="dcterms:date" and @refines=//meta[@property="a11y:certifiedBy"]/@id]/text()]
./package/metadata/meta[@property="a11y:certifierReport"]/text()
."Conformance"
as heading."The publication does not include a conformance statement"
.
"This publication exceeds accepted accessibility standards"
.
"This publication meets accepted accessibility standards"
.
"This publication meets minimum accessibility standards"
.
"This publication was certified by "
"The certifier's credential is "
"Detailed Conformance Information"
as heading.
"This publication claims to meet "
.display conformance_string.
The value of conformance_string will be one of the following strings:
EPUB Accessibility 1.0 WCAG 2.0 Level A
EPUB Accessibility 1.0 WCAG 2.0 Level AA
EPUB Accessibility 1.0 WCAG 2.0 Level AAA
EPUB Accessibility 1.1 WCAG 2.0 Level A
EPUB Accessibility 1.1 WCAG 2.0 Level AA
EPUB Accessibility 1.1 WCAG 2.0 Level AAA
EPUB Accessibility 1.1 WCAG 2.1 Level A
EPUB Accessibility 1.1 WCAG 2.1 Level AA
EPUB Accessibility 1.1 WCAG 2.1 Level AAA
EPUB Accessibility 1.1 WCAG 2.2 Level A
EPUB Accessibility 1.1 WCAG 2.2 Level AA
EPUB Accessibility 1.1 WCAG 2.2 Level AAA
To localize the string, the value of conformance_string will need to be matched against these values to determine the corresponding ID to use for translation.
"The publication was certified "
.
" on "
"For more information refer to the certifier's report"
as a named link with certifier_report as the URL used.This technique relates to Prerecorded audio key information.
This algorithm takes the package_document_as_text argument: a UTF-8 string representing the Package document.
If true it indicates that the accessModeSufficient="auditory" (all main content is provided in audio form) is present in the package document, otherwise if false it means that the metadata is not present.
If true it indicates that the accessibilityFeature="sychronizedAudioText" is present in the package document, otherwise, if false, it means that the metadata is not present.
This indicates that text-synchronised prerecorded audio narration (natural or synthesised voice) is included for substantially all textual matter, including all alternative descriptions, e.g. via a SMIL media overlay.
If true it indicates that the accessMode="auditory" is present in the package document, otherwise, if false, it means that the metadata is not present.
This indicates that prerecorded audio content is included as part of the work.
/package/metadata/meta[@property="schema:accessModeSufficient" and text()="auditory"]
./package/metadata/meta[@property="schema:accessibilityFeature" and text()="sychronizedAudioText"]
./package/metadata/meta[@property="schema:accessMode" and text()="auditory"]
."Prerecorded audio"
as heading.
This heading can be hidden if metadata is missing.
"Audio only"
.
"Synchronized audio and text"
.
"Complementary audio and text"
.
"No information about prerecorded audio is available"
.
This technique relates to Charts, diagrams, math, and formulas key information.
This algorithm takes the package_document_as_text argument: a UTF-8 string representing the Package document.
If true it indicates that the accessibilityFeature="chartOnVisual" (charts encoded in visual form) is present in the package document, otherwise if false it means that the metadata is not present.
This means that there is a positive indication that the product has some information conveyed via some form of illustration, such as a graph, a chart, a diagram, a figure, etc).
If true it indicates that the accessibilityFeature="longDescriptions" (Full alternative textual description) is present in the package document, otherwise if false it means that the metadata is not present.
This means that there is a positive indication that a full alternative textual description has been supplied for all of the graphs, charts, diagrams, or figures necessary to understand the content.
If true it indicates that the accessibilityFeature="chemOnVisual" (Chemical content) is present in the package document, otherwise if false it means that the metadata is not present.
This means that there is a positive indication that the publication contains chemical notations, formulae.
If true it indicates that the accessibilityFeature="ChemML" (Accessible chemistry content as ChemML) is present in the package document, otherwise if false it means that the metadata is not present.
This means that there is a positive indication that the chemical formulae are presented using ChemML and works with compatible assistive technology.
If true it indicates that the accessibilityFeature="describedMath" (Mathematical content) is present in the package document, otherwise if false it means that the metadata is not present.
This means that there is a positive indication that the publication contains mathematical notation, equations, formulae.
If true it indicates that the accessibilityFeature="latex" (Accessible math content as LaTeX) is present in the package document, otherwise if false it means that the metadata is not present.
This means that there is a positive indication that the math is presented using LaTeX and works with compatible assistive technology.
If true it indicates that the accessibilityFeature="MathML" (Accessible math content as MathML) is present in the package document, otherwise if false it means that the metadata is not present.
This means that there is a positive indication that all mathematical content is presented using MathML and works with compatible assistive technology.
/package/metadata/meta[@property="schema:accessibilityFeature" and text()="chartOnVisual"]
./package/metadata/meta[@property="schema:accessibilityFeature" and text()="longDescriptions"]
./package/metadata/meta[@property="schema:accessibilityFeature" and text()="chemOnVisual"]
./package/metadata/meta[@property="schema:accessibilityFeature" and text()="ChemML"]
./package/metadata/meta[@property="schema:accessibilityFeature" and text()="describedMath"]
./package/metadata/meta[@property="schema:accessibilityFeature" and text()="latex"]
./package/metadata/meta[@property="schema:accessibilityFeature" and text()="MathML"]
."Charts, diagrams, math, and formulas"
as heading.
This heading can be hidden if metadata is missing.
"Charts and diagrams have extended descriptions"
.
"Accessible chemistry content"
.
"Accessible math content"
.
"accessibility of formulas, charts, math, and diagrams not identified as being accessible"
.
This technique relates to Hazards key information.
This algorithm takes the package_document_as_text argument: a UTF-8 string representing the Package document.
If true it indicates that the accessibilityHazard="none" (no accessibility hazards) is present in the package document, otherwise if false it means that the metadata is not present.
This means there is a positive indication in the accessiblity metadata within the EPUB confirming there are no associated hazard warnings with this product.
If true it indicates that the accessibilityHazard="flashing" (WARNING - Flashing hazards) is present in the package document, otherwise if false it means that the metadata is not present.
This means that there is a positive indication in the accessiblity metadata within the EPUB confirming that the product has a flashing hazard which must be displayed.
If true it indicates that the accessibilityHazard="noFlashingHazard" (No flashing hazard warning necessary) is present in the package document, otherwise if false it means that the metadata is not present.
This means there is a positive indication in the accessiblity metadata within the EPUB confirming there are no flashing hazards associated with this product.
If true it indicates that the accessibilityHazard="motionSimulation" (WARNING - Motion simulation hazard) is present in the package document, otherwise if false it means that the metadata is not present.
This means that there is a positive indication in the accessiblity metadata within the EPUB confirming that the product has a motion simulation hazard which must be displayed.
If true it indicates that the accessibilityHazard="noMotionSimulationHazard" (No motion simulation hazard warning necessary) is present in the package document, otherwise if false it means that the metadata is not present.
This means there is a positive indication in the accessiblity metadata within the EPUB confirming there are no motion simulation hazards associated with this product.
If true it indicates that the accessibilityHazard="Sound" (WARNING - Sound hazard) is present in the package document, otherwise if false it means that the metadata is not present.
This means that there is a positive indication in the accessiblity metadata within the EPUB confirming that the product has a sound hazard which must be displayed.
If true it indicates that the accessibilityHazard="noSoundHazard" (No sound hazard warning necessary) is present in the package document, otherwise if false it means that the metadata is not present.
This means there is a positive indication in the accessiblity metadata within the EPUB confirming there are no sound hazards associated with this product.
If true it indicates that the accessibilityHazard="unknown" (unknown hazards) is present in the package document, otherwise if false it means that the metadata is not present.
This means that the product has not been assessed for hazards and there is no information about potential hazards.
/package/metadata/meta[@property="schema:accessibilityHazard" and text()="none"]
./package/metadata/meta[@property="schema:accessibilityHazard" and text()="flashing"]
./package/metadata/meta[@property="schema:accessibilityHazard" and text()="noFlashingHazard"]
./package/metadata/meta[@property="schema:accessibilityHazard" and text()="motionSimulation"]
./package/metadata/meta[@property="schema:accessibilityHazard" and text()="noMotionSimulation"]
./package/metadata/meta[@property="schema:accessibilityHazard" and text()="sound"]
./package/metadata/meta[@property="schema:accessibilityHazard" and text()="noSoundHazard"]
./package/metadata/meta[@property="schema:accessibilityHazard" and text()="unknown"]
."Hazards"
as heading.
This heading can be hidden if metadata is missing.
"No hazards"
.
"flashing"
to hazards.
"motion simulation"
to hazards.
"sound"
to hazards.
" hazards"
to the end of the string IF (length of hazards) > 1 ELSE concatenating " hazard"
to the end of the string."The presence of hazards is unknown"
.
"No information about possible hazards is available"
.
This technique relates to Accessibility summary key information.
This algorithm takes the package_document_as_text argument: a UTF-8 string representing the Package document.
Being human-written, the accessibility summary will appear in the original language of the publication. Therefore it is necessary to take care of setting up the correct language tag information.
Accessibility summaries were necessary when no systems exposed computed accessibility metadata. With more systems now displaying this information, much of the accessibility summary may be redundant. Publishers should focus on adding information not provided within the computed metadata, such as specifying where in a video file a flashing hazard exists, or noting the reason why they failed to meet WCAG-AA due to color contrast issues in the Appendix.
Contains the accessibilitySummary from the package document if it exists, otherwise it will be blank.
This means there is a human-written text containing a short explanatory summary of the accessibility of the product or the URL of a web page comprising such a summary. Summarizes the already existent information and may add information that the publisher could not express with the other codes.
Returns the lang attribute of the node containing the accessibility_summary, or the lang attribute of the nearest anchestor.
This is the language code in which the text of the Accessibility summary was written.
Returns the value of nearest "language" (Language of content) if present in the package document, otherwise if false it means that the metadata is not present.
This indicates the main language of the content and therefore the most probable language of accessibility summary.
/package/metadata/meta[@property="schema:accessibilitySummary"]
./package/metadata/meta[@property="schema:accessibilitySummary"]/(@lang|ancestor::*/@lang)[last()]
./package/metadata/dc:language[1]/text()
."Accessibility summary"
as heading.
This heading can be hidden if metadata is missing.
"No accessibility summary is available."
.
This technique relates to Legal considerations key information.
This algorithm takes the package_document_as_text argument: a UTF-8 string representing the Package document.
If true it indicates that the a11y:exemption="eaa-microenterprise" (EEA exception 1 – Micro-enterprises) is present in the package document, otherwise if false it means that the metadata is not present.
This means that the digital product falls under European Accessibility Act exemption for Micro-enterprises (as defined by current regulations). The product may not have to comply with requirements of the EAA if the publisher is a micro-enterprise.
If true it indicates that the a11y:exemption="eaa_disproportionate_burden" (EAA exception 2 – Disproportionate burden) is present in the package document, otherwise if false it means that the metadata is not present.
This means that the digital product falls under European Accessibility Act exception for Disproportionate burden (as defined by current regulations). The product may not have to comply with requirements of the EAA if doing so would financially overburden the publisher.
If true it indicates that the a11y:exemption="eaa_fundamental_modification" (EAA exception 3 – Fundamental modification) is present in the package document, otherwise if false it means that the metadata is not present.
This means that the digital product falls under European Accessibility Act exception for Fundamental modification (as defined by current regulations). The product may not have to comply with requirements of the EAA if doing so requires a fundamental modification of the nature of the product or service.
/package/metadata/meta[@property="a11y:exemption" and text()="eaa-microenterprise"]
./package/metadata/meta[@property="a11y:exemption" and text()="eaa-disproportionate-burden"]
./package/metadata/meta[@property="a11y:exemption" and text()="eaa-fundamental-alteration"]
."Legal considerations"
as heading.
This heading can be hidden if metadata is missing.
"TBD"
.
"No legal considerations"
.
This technique relates to Additional accessibility information key information.
This algorithm takes the package_document_as_text argument: a UTF-8 string representing the Package document.
If true it indicates that the accessibilityFeature="audioDescriptions" (Audio Descriptions) is present in the package document, otherwise if false it means that the metadata is not present.
This means that there is an audio descriptions track available for video content.
If true it indicates that the accessibilityFeature="braille" (Braille) is present in the package document, otherwise if false it means that the metadata is not present.
This means that there is braille available within the publication.
If true it indicates that the accessibilityFeature="closedCaptions" (Closed captions) is present in the package document, otherwise if false it means that the metadata is not present.
This means that the audio content of a video can be seen via closed captions that can be turned on or off by the viewer and which will be a separate file from the video itself.
If true it indicates that the accessibilityFeature="openCaptions" (Open captions) is present in the package document, otherwise if false it means that the metadata is not present.
This means that the audio content of a video can be seen via open captions, which means they cannot be turned off and are always visible when the video plays.
If true it indicates that the accessibilityFeature="tactileGraphic" (tactile 2D graphic) is present in the package document, otherwise if false it means that the metadata is not present.
This means that there is tactile graphic(s) contained within this publication.
If true it indicates that the accessibilityFeature="tactileObject" (tactile 3D object) is present in the package document, otherwise if false it means that the metadata is not present.
This means that there is tactile 3D object(s) contained within this publication.
If true it indicates that the accessibilityFeature="transcript" (transcript) is present in the package document, otherwise if false it means that the metadata is not present.
This means that a transcript of the audio content of the product is supplied with it.
If true it indicates that the accessibilityFeature="signLanguage" (Sign language interpretation) is present in the package document, otherwise if false it means that the metadata is not present.
This means that a full signing of audio content of the product is supplied with the video file.
/package/metadata/meta[@property="schema:accessibilityFeature" and text()="audioDescription"]
./package/metadata/meta[@property="schema:accessibilityFeature" and text()="braille"]
./package/metadata/meta[@property="schema:accessibilityFeature" and text()="closedCaptions"]
./package/metadata/meta[@property="schema:accessibilityFeature" and text()="openCaptions"]
./package/metadata/meta[@property="schema:accessibilityFeature" and text()="tactileGraphic"]
./package/metadata/meta[@property="schema:accessibilityFeature" and text()="tactileObject"]
./package/metadata/meta[@property="schema:accessibilityFeature" and text()="transcript"]
./package/metadata/meta[@property="schema:accessibilityFeature" and text()="signLanguage"]
."audio descriptions"
to adaptation.
"braille"
to adaptation.
"closed captions"
to adaptation.
"open captions"
to adaptation.
"tactile graphic"
to adaptation.
"tactile 3D object"
to adaptation.
"transcript"
to adaptation.
"sign language"
to adaptation.
If true it indicates that the accessibilityFeature="aria" (ARIA roles - semantic markup) is present in the package document, otherwise if false it means that the metadata is not present.
This means that the use of AIRA, including DPUB ARIA is used to improve the semantic markup of the publication.
If true it indicates that the accessibilityFeature="fullRubyAnnotations" (Full Ruby Annotations) is present in the package document, otherwise if false it means that the metadata is not present.
This means that ruby annotations are attached to every CJK ideographic character in the content. Ruby annotations are used as pronunciation guides for the logographic characters for languages like Chinese or Japanese. They make difficult CJK ideographic characters more accessible.
If true it indicates that the accessibilityFeature="ttsMarkup" (Text-to-speech markup provided) is present in the package document, otherwise if false it means that the metadata is not present.
This means that text-to-speech has been optimised through provision of PLS lexicons, SSML or CSS Speech synthesis hints or other speech synthesis markup languages or hinting.
If true it indicates that the accessibilityFeature="highContrastAudio" (Use of high contrast between foreground and background audio) is present in the package document, otherwise if false it means that the metadata is not present.
This means that foreground audio content (eg voice) is presented with no or low background noise (eg ambient sounds, music), at least 20dB below the level of the foreground, or background noise can be switched off (eg via an alternative audio track). Brief and occasional sound effects may be as loud as foreground voice so long as they are isolated from the foreground.
If true it indicates that the accessibilityFeature="highContrastDisplay" (Use of high contrast between text and background color) is present in the package document, otherwise if false it means that the metadata is not present.
This means that body text is presented with a contrast ratio of at least 4.5:1 (or 3:1 for large/heading text).
If true it indicates that the accessibilityFeature="largePrint" (Large Print) is present in the package document, otherwise if false it means that the metadata is not present.
This means that the e-publication has been formatted to meet large print guidelines.
If true it indicates that the accessibilityFeature="pageBreakMarkers" (Print-equivalent page numbering) is present in the package document, otherwise if false it means that the metadata is not present.
This means that the publication contains references to the page numbering.
If true it indicates that the accessibilityFeature="rubyAnnotations" (Ruby Annotations) is present in the package document, otherwise if false it means that the metadata is not present.
This means that ruby annotations are attached to some but not all CJK ideographic characters in the content.
/package/metadata/meta[@property="schema:accessibilityFeature" and text()="aria"]
./package/metadata/meta[@property="schema:accessibilityFeature" and text()="fullRubyAnnotations"]
./package/metadata/meta[@property="schema:accessibilityFeature" and text()="ttsMarkup"]
./package/metadata/meta[@property="schema:accessibilityFeature" and text()="highContrastAudio"]
./package/metadata/meta[@property="schema:accessibilityFeature" and text()="highContrastDisplay"]
./package/metadata/meta[@property="schema:accessibilityFeature" and text()="largePrint"]
./package/metadata/meta[@property="schema:accessibilityFeature" and text()="pageBreakMarkers"]
./package/metadata/meta[@property="schema:accessibilityFeature" and text()="rubyAnnotations"]
."aria"
to clarity.
"full ruby annotations"
to clarity.
"text-to-speech hinting provided"
to clarity.
"high contrast between foreground and background audio"
to clarity.
"high contrast between text and background"
to clarity.
"large print"
to clarity.
"page breaks"
to clarity.
"ruby annotations"
to clarity.