Accessibility Scan Results
We want quarto.org to work for everyone. As one part of that commitment, this page shows the results of the latest automated accessibility scan of the site.
How the scan works
Every week, we run quarto call axe, which checks every page with axe-core. Each page is checked at a desktop and a phone viewport, and in light and dark mode.
Reporting a problem
If you find an accessibility problem on quarto.org, please open an issue.
Latest scan
Results for quarto.org at commit 0fe993ae0, scanned October 2, 2026.
axe site audit
372 pages · 1410/1410 cells ok · axe-core 4.10.3 · Quarto 1.11.5 · generated 2026-10-02T19:58:56.244Z
Partial scan (
--exclude docs/get-started/*/index.html,docs/manuscripts/authoring/index.html) — counts describe this subset, not the whole site. A one-page rescan proves an instance is gone, not that the finding is fixed on other pages.
1 new finding · 134 baselined (known, listed at the end). A finding on many pages usually repeats from a shared source — fixing it once fixes them all.
New findings
| id | standard | impact | pages | instances | detail |
|---|---|---|---|---|---|
empty-table-header-4123ba |
Best Practice | minor | 1 | 1 | Element does not have text that is visible to screen readers |
Occurrences
empty-table-header-4123ba
Table header text should not be empty (1 instance on 1 page)
Standard: Best Practice · Impact: minor · Signature: empty-table-header :: #oi-3a86ea > table > thead > tr > th
Problem: Element does not have text that is visible to screen readers
Reference: https://dequeuniversity.com/rules/axe/4.10/empty-table-header?application=axeAPI
| page | cells (width·mode) | selector | element |
|---|---|---|---|
| docs/interactive/ojs/data-sources.html | 1440x900·dark, 320x568·dark, 320x568·light | #oi-3a86ea-1 > table > thead > tr > th:nth-child(1) |
<th><input type="checkbox"></th> |
Baselined (known, accepted)
| id | standard | impact | pages | instances | why accepted |
|---|---|---|---|---|---|
label-e931f5 |
WCAG 2.0 A | critical | 3 | 69 | third-party: Observable Inputs, no upstream issue. The Inputs.table selection checkboxes have no label, and no option adds one. select: false (Inputs 0.11.0 and later) removes them, but then the scroll container has no focusable content. Same in Inputs 0.12.0. Scoped to these pages because the signature also matches other unlabeled inputs. |
aria-allowed-attr-8b2e6a |
WCAG 2.0 A | critical | 7 | 8 | upstream: quarto-dev/quarto-cli#4934. Collapsed callouts use a <div> with aria-expanded instead of the ARIA disclosure pattern. |
label-ab5f69 |
WCAG 2.0 A | critical | 6 | 6 | third-party: Observable Inputs, no upstream issue. Observable Inputs connects the <label for> of Inputs.range to the number box only, so the slider has no accessible name, even when label is set. Same in Inputs 0.12.0. Scoped to these pages because the signature also matches other unlabeled range inputs. |
aria-allowed-attr-de1fc3 |
WCAG 2.0 A | critical | 4 | 4 | upstream: quarto-dev/quarto-cli#4934. Collapsed callouts use a <div> with aria-expanded instead of the ARIA disclosure pattern. Scoped to these pages because .collapsed is the generic Bootstrap collapse class. |
label-abe29f |
WCAG 2.0 A | critical | 1 | 3 | third-party: Observable Inputs, no upstream issue. Observable Inputs connects the <label for> of Inputs.range to the number box only, so the slider has no accessible name, even when label is set. Same in Inputs 0.12.0. When Quarto updates Inputs (quarto-dev/quarto-cli#14934), the class becomes .inputs-3a86ea-input, so replace this entry. |
label-3c2086 |
WCAG 2.0 A | critical | 1 | 3 | third-party: Observable Inputs, no upstream issue. Observable Inputs connects the <label for> of Inputs.range to the number box only, so the slider has no accessible name, even when label is set. Same in Inputs 0.12.0. When Quarto updates Inputs (quarto-dev/quarto-cli#14934), the class becomes .inputs-3a86ea-input, so replace this entry. |
label-97e48d |
WCAG 2.0 A | critical | 2 | 2 | third-party: Observable Inputs, no upstream issue. The Inputs.table selection checkboxes have no label, and no option adds one. select: false (Inputs 0.11.0 and later) removes them, but then the scroll container has no focusable content. Same in Inputs 0.12.0. Scoped to these pages because the signature also matches other unlabeled inputs. |
aria-required-parent-2a955c |
WCAG 2.0 A | critical | 1 | 1 | upstream: quarto-dev/quarto-cli#14755. Margin citations keep role=“listitem”, but Quarto removes their role=“list” parent when it moves them to the margin. |
image-alt-648574 |
WCAG 2.0 A | critical | 1 | 1 | intentional: no upstream issue. The plain-image row of the Links & Images table shows the output of an image with no fig-alt, light-mode variant. Remove the entry if the example changes to include alt text. |
image-alt-bfe36b |
WCAG 2.0 A | critical | 1 | 1 | intentional: no upstream issue. The linked-image row of the Links & Images table shows the output of a linked image with no fig-alt, light-mode variant. Remove the entry if the example changes to include alt text. |
image-alt-21cdbb |
WCAG 2.0 A | critical | 1 | 1 | intentional: no upstream issue. The plain-image row of the Links & Images table shows the output of an image with no fig-alt, dark-mode variant. Remove the entry if the example changes to include alt text. |
image-alt-caabbf |
WCAG 2.0 A | critical | 1 | 1 | intentional: no upstream issue. The linked-image row of the Links & Images table shows the output of a linked image with no fig-alt, dark-mode variant. Remove the entry if the example changes to include alt text. |
image-alt-109037 |
WCAG 2.0 A | critical | 1 | 1 | upstream: quarto-dev/quarto-cli#14769. The {{< placeholder >}} shortcode makes an <img> with no alt attribute. Scoped to this page because the signature also matches content images with no alt text on other pages. |
image-alt-4d0f7b |
WCAG 2.0 A | critical | 1 | 1 | upstream: quarto-dev/quarto-cli#14769. The {{< placeholder >}} shortcode makes an <img> with no alt attribute. Scoped to this page because the signature also matches content images with no alt text on other pages. |
label-056181 |
WCAG 2.0 A | critical | 1 | 1 | third-party: Observable Inputs, no upstream issue. The Inputs.table selection checkboxes have no label, and no option adds one. select: false (Inputs 0.11.0 and later) removes them, but then the scroll container has no focusable content. Same in Inputs 0.12.0. Scoped to these pages because the signature also matches other unlabeled inputs. |
aria-allowed-attr-3b0a3f |
WCAG 2.0 A | critical | 1 | 1 | upstream: quarto-dev/quarto-cli#4934. Collapsed callouts use a <div> with aria-expanded instead of the ARIA disclosure pattern. |
scrollable-region-focusable-7f835c |
WCAG 2.0 A | serious | 96 | 263 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
aria-prohibited-attr-08001a |
WCAG 2.0 A | serious | 4 | 57 | upstream: quarto-dev/quarto-cli#14961. revealjs removes the href from code line-number links, so the aria-label from quarto-dev/quarto-cli#14662 is on an <a> that is not a link. Scoped to these revealjs decks because the signature also matches line numbers on format: html pages and other labeled links. |
aria-prohibited-attr-b3114f |
WCAG 2.0 A | serious | 3 | 30 | upstream: quarto-dev/quarto-cli#14961. revealjs removes the href from code line-number links, so the aria-label from quarto-dev/quarto-cli#14662 is on an <a> that is not a link. Scoped to these revealjs decks because the signature also matches line numbers on format: html pages and other labeled links. |
scrollable-region-focusable-4fb120 |
WCAG 2.0 A | serious | 25 | 25 | upstream: quarto-dev/quarto-cli#14817. The revealjs template gives slides overflow-y: auto, and the arrow keys move between slides instead of scrolling, so keyboard users cannot reach overflowing content. Flagged at 320px, where reveal.js switches to scroll view; a short viewport also brings back the slide scrollbar. Scoped to these revealjs decks. |
scrollable-region-focusable-37ee42 |
WCAG 2.0 A | serious | 7 | 13 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
frame-title-7be574 |
WCAG 2.0 A | serious | 2 | 13 | upstream: quarto-dev/quarto-cli#14770. code-preview iframes have no title. Clears when quarto-dev/quarto-cli#14933 ships, because quarto-dev/quarto-web#2220 sets code-preview-title on every preview. |
aria-prohibited-attr-5e781d |
WCAG 2.0 A | serious | 7 | 7 | third-party: Observable Plot, observablehq/plot#2018. Observable Plot puts an aria-label with no role on axis tick and grid <g> elements. Plot 0.6.14 fixed this, but Quarto bundles Plot 0.6.11. Remove when Quarto updates Plot (quarto-dev/quarto-cli#14934). |
aria-prohibited-attr-5c1e46 |
WCAG 2.0 A | serious | 7 | 7 | third-party: Observable Plot, observablehq/plot#2018. Observable Plot puts an aria-label with no role on axis tick and grid <g> elements. Plot 0.6.14 fixed this, but Quarto bundles Plot 0.6.11. Remove when Quarto updates Plot (quarto-dev/quarto-cli#14934). |
scrollable-region-focusable-7bcfa1 |
WCAG 2.0 A | serious | 5 | 7 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
aria-prohibited-attr-cac6c7 |
WCAG 2.0 A | serious | 6 | 6 | third-party: Observable Plot, observablehq/plot#1760. Observable Plot puts an aria-label with no role on the <g> of every mark, on purpose (observablehq/plot#944). Still occurs in Plot 0.6.17. |
aria-prohibited-attr-c1244d |
WCAG 2.0 A | serious | 5 | 5 | third-party: Observable Plot, observablehq/plot#1760. Observable Plot puts an aria-label with no role on the <g> of every mark, on purpose (observablehq/plot#944). Still occurs in Plot 0.6.17. |
summary-name-881a03 |
WCAG 2.0 A | serious | 4 | 4 | third-party: vega-embed, no upstream issue. The vega-embed actions menu is a <details> whose <summary> holds only an icon SVG. The label is a title on the <details>, and VoiceOver reads it. Scoped to these Altair pages because the signature also matches other <summary> elements with no text. |
scrollable-region-focusable-3b5f0f |
WCAG 2.0 A | serious | 4 | 4 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-2f9bbd |
WCAG 2.0 A | serious | 4 | 4 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-c6d335 |
WCAG 2.0 A | serious | 4 | 4 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
aria-prohibited-attr-321313 |
WCAG 2.0 A | serious | 2 | 4 | third-party: Observable Plot, observablehq/plot#2018. Observable Plot puts an aria-label with no role on axis tick and grid <g> elements. Plot 0.6.14 fixed this, but Quarto bundles Plot 0.6.11. Remove when Quarto updates Plot (quarto-dev/quarto-cli#14934). |
aria-prohibited-attr-066f44 |
WCAG 2.0 A | serious | 2 | 4 | third-party: Observable Plot, observablehq/plot#2018. Observable Plot puts an aria-label with no role on axis tick and grid <g> elements. Plot 0.6.14 fixed this, but Quarto bundles Plot 0.6.11. Remove when Quarto updates Plot (quarto-dev/quarto-cli#14934). |
aria-prohibited-attr-cdaa10 |
WCAG 2.0 A | serious | 2 | 4 | third-party: Observable Plot, observablehq/plot#1760. Observable Plot puts an aria-label with no role on the <g> of every mark, on purpose (observablehq/plot#944). Still occurs in Plot 0.6.17. |
frame-title-cb63be |
WCAG 2.0 A | serious | 1 | 4 | upstream: quarto-dev/quarto-cli#14770. code-preview iframes have no title. Clears when quarto-dev/quarto-cli#14933 ships, because quarto-dev/quarto-web#2220 sets code-preview-title on every preview. |
frame-title-7513ef |
WCAG 2.0 A | serious | 1 | 3 | upstream: quarto-dev/quarto-cli#14770. code-preview iframes have no title. Clears when quarto-dev/quarto-cli#14933 ships, because quarto-dev/quarto-web#2220 sets code-preview-title on every preview. |
link-name-a6cfcf |
WCAG 2.0 A | serious | 2 | 2 | upstream: quarto-dev/quarto-cli#14249. The bundled reveal.js-menu plugin makes the menu button an <a href=“#”> with only an icon, so it has no accessible name. The upstream plugin is archived, so the fix goes into the copy in Quarto. Clears when quarto-dev/quarto-cli#14251 ships. |
link-in-text-block-7b0c90 |
WCAG 2.0 A | serious | 2 | 2 | third-party: leaflet, no upstream issue. The ESDIS link in the leaflet tile attribution is #0078a8 on the #343a40 page text, 2.32:1. Scoped to these leaflet pages because the signature also matches other low-contrast links. |
scrollable-region-focusable-37e708 |
WCAG 2.0 A | serious | 1 | 2 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-2add8a |
WCAG 2.0 A | serious | 1 | 2 | third-party: the @uwdata/arquero Observable notebook, no upstream issue. The .view() method of the @uwdata/arquero Observable notebook puts the table in a <div style=“max-height: 270px; overflow: auto”> with no tabindex, so keyboard users cannot scroll it. The notebook is not in a repo. Scoped to the Arquero example page. |
aria-prohibited-attr-f1d7f8 |
WCAG 2.0 A | serious | 1 | 2 | third-party: Observable Plot, observablehq/plot#2018. Observable Plot puts an aria-label with no role on axis tick and grid <g> elements. Plot 0.6.14 fixed this, but Quarto bundles Plot 0.6.11. Remove when Quarto updates Plot (quarto-dev/quarto-cli#14934). |
aria-prohibited-attr-3d5831 |
WCAG 2.0 A | serious | 1 | 2 | third-party: Observable Plot, observablehq/plot#2018. Observable Plot puts an aria-label with no role on axis tick and grid <g> elements. Plot 0.6.14 fixed this, but Quarto bundles Plot 0.6.11. Remove when Quarto updates Plot (quarto-dev/quarto-cli#14934). |
aria-prohibited-attr-23aa6d |
WCAG 2.0 A | serious | 1 | 2 | third-party: Observable Plot, observablehq/plot#1760. Observable Plot puts an aria-label with no role on the <g> of every mark, on purpose (observablehq/plot#944). Still occurs in Plot 0.6.17. |
aria-prohibited-attr-0a7a48 |
WCAG 2.0 A | serious | 1 | 2 | third-party: Observable Plot, observablehq/plot#1760. Observable Plot puts an aria-label with no role on the <g> of every mark, on purpose (observablehq/plot#944). Still occurs in Plot 0.6.17. |
scrollable-region-focusable-291419 |
WCAG 2.0 A | serious | 1 | 2 | upstream: quarto-dev/quarto-cli#14817. The revealjs template gives slides overflow-y: auto, and the arrow keys move between slides instead of scrolling, so keyboard users cannot reach overflowing content. Every slide scrolls here because the deck sets scrollable: true. Scoped to this deck. |
scrollable-region-focusable-c7adfa |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-39de8a |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-d747e7 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-04c370 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
frame-title-2cefe5 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14770. code-preview iframes have no title. Clears when quarto-dev/quarto-cli#14933 ships, because quarto-dev/quarto-web#2220 sets code-preview-title on every preview. |
scrollable-region-focusable-02d2a3 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
link-name-21e381 |
WCAG 2.0 A | serious | 1 | 1 | intentional: no upstream issue. Same light-mode example as the image-alt entry above: the only content of the link is the image with no alt text, so the link has no name. Remove the entry with that image-alt entry. |
link-name-d78e38 |
WCAG 2.0 A | serious | 1 | 1 | intentional: no upstream issue. Same dark-mode example as the image-alt entry above: the only content of the link is the image with no alt text, so the link has no name. Remove the entry with that image-alt entry. |
scrollable-region-focusable-9feb03 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-10bdb5 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-44bee2 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-56a26c |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-aa283e |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-677ae2 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-0af957 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-d61978 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-b53c42 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-59a47b |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-d28152 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-9a0b40 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-bb382b |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
aria-prohibited-attr-d00141 |
WCAG 2.0 A | serious | 1 | 1 | third-party: Observable Plot, observablehq/plot#1760. Observable Plot puts an aria-label with no role on the <g> of every mark, on purpose (observablehq/plot#944). Still occurs in Plot 0.6.17. |
aria-prohibited-attr-568759 |
WCAG 2.0 A | serious | 1 | 1 | third-party: Observable Plot, observablehq/plot#2018. Observable Plot puts an aria-label with no role on axis tick and grid <g> elements. Plot 0.6.14 fixed this, but Quarto bundles Plot 0.6.11. Remove when Quarto updates Plot (quarto-dev/quarto-cli#14934). |
aria-prohibited-attr-d37eaa |
WCAG 2.0 A | serious | 1 | 1 | third-party: Observable Plot, observablehq/plot#2018. Observable Plot puts an aria-label with no role on axis tick and grid <g> elements. Plot 0.6.14 fixed this, but Quarto bundles Plot 0.6.11. Remove when Quarto updates Plot (quarto-dev/quarto-cli#14934). |
aria-prohibited-attr-515297 |
WCAG 2.0 A | serious | 1 | 1 | third-party: Observable Plot, observablehq/plot#1760. Observable Plot puts an aria-label with no role on the <g> of every mark, on purpose (observablehq/plot#944). Still occurs in Plot 0.6.17. |
scrollable-region-focusable-8202fb |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
aria-prohibited-attr-e4daa5 |
WCAG 2.0 A | serious | 1 | 1 | third-party: Observable Plot, observablehq/plot#2018. Observable Plot puts an aria-label with no role on axis tick and grid <g> elements. Plot 0.6.14 fixed this, but Quarto bundles Plot 0.6.11. Remove when Quarto updates Plot (quarto-dev/quarto-cli#14934). |
aria-prohibited-attr-b4c9fd |
WCAG 2.0 A | serious | 1 | 1 | third-party: Observable Plot, observablehq/plot#2018. Observable Plot puts an aria-label with no role on axis tick and grid <g> elements. Plot 0.6.14 fixed this, but Quarto bundles Plot 0.6.11. Remove when Quarto updates Plot (quarto-dev/quarto-cli#14934). |
aria-prohibited-attr-b5f629 |
WCAG 2.0 A | serious | 1 | 1 | third-party: Observable Plot, observablehq/plot#1760. Observable Plot puts an aria-label with no role on the <g> of every mark, on purpose (observablehq/plot#944). Still occurs in Plot 0.6.17. |
aria-prohibited-attr-3d36c9 |
WCAG 2.0 A | serious | 1 | 1 | third-party: Observable Plot, observablehq/plot#1760. Observable Plot puts an aria-label with no role on the <g> of every mark, on purpose (observablehq/plot#944). Still occurs in Plot 0.6.17. |
aria-prohibited-attr-6960fe |
WCAG 2.0 A | serious | 1 | 1 | third-party: Observable Plot, observablehq/plot#1760. Observable Plot puts an aria-label with no role on the <g> of every mark, on purpose (observablehq/plot#944). Still occurs in Plot 0.6.17. |
scrollable-region-focusable-6e4c77 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-f571d3 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-c5d074 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-1d2df2 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-7ebabb |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-070cea |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
frame-title-02a9a3 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14770. code-preview iframes have no title. Clears when quarto-dev/quarto-cli#14933 ships, because quarto-dev/quarto-web#2220 sets code-preview-title on every preview. |
frame-title-d0d12c |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14770. code-preview iframes have no title. Clears when quarto-dev/quarto-cli#14933 ships, because quarto-dev/quarto-web#2220 sets code-preview-title on every preview. |
frame-title-d8f635 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14770. code-preview iframes have no title. Clears when quarto-dev/quarto-cli#14933 ships, because quarto-dev/quarto-web#2220 sets code-preview-title on every preview. |
frame-title-f78bd6 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14770. code-preview iframes have no title. Clears when quarto-dev/quarto-cli#14933 ships, because quarto-dev/quarto-web#2220 sets code-preview-title on every preview. |
scrollable-region-focusable-b05698 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14817. The revealjs template gives slides overflow-y: auto, and the arrow keys move between slides instead of scrolling, so keyboard users cannot reach overflowing content. Here the scroller is the Slides panel of the slide menu. Scoped to this deck. |
scrollable-region-focusable-689d30 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14817. The revealjs template gives slides overflow-y: auto, and the arrow keys move between slides instead of scrolling, so keyboard users cannot reach overflowing content. Here it is a code block (.reveal pre code has overflow: auto). Did not reproduce in a local render, so it can disappear from a scan. Scoped to this deck. |
scrollable-region-focusable-3bdd66 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14817. The revealjs template gives slides overflow-y: auto, and the arrow keys move between slides instead of scrolling, so keyboard users cannot reach overflowing content. Scoped to this deck. |
frame-title-3c8c8f |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14770. code-preview iframes have no title. Clears when quarto-dev/quarto-cli#14933 ships, because quarto-dev/quarto-web#2220 sets code-preview-title on every preview. |
frame-title-7335de |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14770. code-preview iframes have no title. Clears when quarto-dev/quarto-cli#14933 ships, because quarto-dev/quarto-web#2220 sets code-preview-title on every preview. |
frame-title-660be3 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14770. code-preview iframes have no title. Clears when quarto-dev/quarto-cli#14933 ships, because quarto-dev/quarto-web#2220 sets code-preview-title on every preview. |
frame-title-76e50d |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14770. code-preview iframes have no title. Clears when quarto-dev/quarto-cli#14933 ships, because quarto-dev/quarto-web#2220 sets code-preview-title on every preview. |
frame-title-73f91f |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14770. code-preview iframes have no title. Clears when quarto-dev/quarto-cli#14933 ships, because quarto-dev/quarto-web#2220 sets code-preview-title on every preview. |
frame-title-15909c |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14770. code-preview iframes have no title. Clears when quarto-dev/quarto-cli#14933 ships, because quarto-dev/quarto-web#2220 sets code-preview-title on every preview. |
frame-title-4a0b3d |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14770. code-preview iframes have no title. Clears when quarto-dev/quarto-cli#14933 ships, because quarto-dev/quarto-web#2220 sets code-preview-title on every preview. |
frame-title-bf3007 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14770. code-preview iframes have no title. Clears when quarto-dev/quarto-cli#14933 ships, because quarto-dev/quarto-web#2220 sets code-preview-title on every preview. |
frame-title-542f85 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14770. code-preview iframes have no title. Clears when quarto-dev/quarto-cli#14933 ships, because quarto-dev/quarto-web#2220 sets code-preview-title on every preview. |
frame-title-9d882c |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14770. code-preview iframes have no title. Clears when quarto-dev/quarto-cli#14933 ships, because quarto-dev/quarto-web#2220 sets code-preview-title on every preview. |
scrollable-region-focusable-b99d66 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-ebcf08 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-04b933 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-7b7154 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
scrollable-region-focusable-5bf272 |
WCAG 2.0 A | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14378. Scrollable code blocks and cell outputs have no tabindex, so keyboard users cannot scroll them. Clears when quarto-dev/quarto-cli#14816 ships. |
meta-viewport-cb66a4 |
WCAG 2.0 AA | critical | 39 | 39 | upstream: quarto-dev/quarto-cli#14952. The revealjs template sets maximum-scale=1.0, user-scalable=no on every deck, so text cannot be resized. |
color-contrast-aef353 |
WCAG 2.0 AA | serious | 2 | 22 | third-party: Arquero, no upstream issue. The Arquero table viewer sets background: #fff on its sticky header in an inline style, so in dark mode the header text gets the light theme text color. Scoped to the two pages with the viewer. |
color-contrast-78b899 |
WCAG 2.0 AA | serious | 2 | 21 | upstream: quarto-dev/quarto-cli#14959. revealjs line highlighting fades the other lines to opacity 0.4. No opacity value meets 4.5:1 and still shows the highlight. |
color-contrast-0e3605 |
WCAG 2.0 AA | serious | 1 | 15 | third-party: dygraphs, rstudio/dygraphs#241. dygraph.js 1.1.1 sets the axis-label color in an inline style, so CSS cannot change it. Clears when the R dygraphs package bundles dygraph.js 2.0 or later. Scoped to this page because the same signature on penguins-preview.html is a Quarto defect. |
color-contrast-342bf5 |
WCAG 2.0 AA | serious | 2 | 5 | upstream: quarto-dev/quarto-cli#14959. revealjs line highlighting fades the other lines to opacity 0.4. No opacity value meets 4.5:1 and still shows the highlight. |
color-contrast-a80056 |
WCAG 2.0 AA | serious | 2 | 2 | third-party: leaflet, no upstream issue. The text color of the leaflet attribution control does not change in the Quarto dark theme, because leaflet.css has no dark theme. |
color-contrast-9cb880 |
WCAG 2.0 AA | serious | 2 | 2 | third-party: leaflet, no upstream issue. The link color of the leaflet attribution control does not change in the Quarto dark theme, because leaflet.css has no dark theme. |
color-contrast-eb795e |
WCAG 2.0 AA | serious | 1 | 2 | upstream: quarto-dev/quarto-cli#14959. revealjs line highlighting fades the other lines to opacity 0.4. No opacity value meets 4.5:1 and still shows the highlight. |
color-contrast-625978 |
WCAG 2.0 AA | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14962. The default revealjs $link-color #2a76dd is 4.44:1 on #fff, which fails for small text such as the footer link. Flagged only at 320x568; at wider viewports reveal.js scales the slide and axe marks the contrast incomplete. Scoped to the demo deck. |
color-contrast-f8f4b2 |
WCAG 2.0 AA | serious | 1 | 1 | false-positive: no upstream issue. When the revealjs slide menu is closed, about 12px of a long slide title shows at the slide edge, and axe measures it against the white slide. When the menu is open, the text is #aaaaaa on #333333, 5.44:1. Scoped to this deck. |
color-contrast-650337 |
WCAG 2.0 AA | serious | 1 | 1 | upstream: quarto-dev/quarto-cli#14963. Below 30em, the selected revealjs tab has a #bbbbbb fill, so its #2a76dd text is 2.31:1. Scoped to the tabset example. |
tabindex-aabcdd |
Best Practice | serious | 2 | 4 | upstream: quarto-dev/quarto-cli#14970. tabby.js gives revealjs tabset tabs tabindex 1, 2, and so on, so Tab on an earlier slide moves focus to a tab on a hidden slide. Related to quarto-dev/quarto-cli#14795. |
landmark-complementary-is-top-level-be40a0 |
Best Practice | moderate | 36 | 36 | upstream: hakimel/reveal.js#3369. reveal.js renders the slide controls as <aside class=“controls”> inside div.reveal[role=application], so the controls are a complementary landmark inside another landmark. Scoped to these decks because the signature also matches other nested <aside> elements. |
region-f0f230 |
Best Practice | moderate | 2 | 2 | upstream: quarto-dev/quarto-cli#14968. The notebook preview header (#quarto-embed-header) is a plain <div> outside every landmark. penguins-qmd.embed-preview.html is rendered only when .quarto/ does not exist (quarto-dev/quarto-cli#10756). |
region-4d3a2b |
Best Practice | moderate | 2 | 2 | upstream: quarto-dev/quarto-cli#14969. The collapsed TOC toggle is a plain <div> outside every landmark, and a keyboard cannot reach or open it. Flagged only at 320px, where a .column-page-right image on these pages covers the margin TOC. |
landmark-no-duplicate-banner-fc5ea1 |
Best Practice | moderate | 1 | 1 | upstream: quarto-dev/quarto-cli#14375. title-block-banner moves #title-block-header out of <main>, so the page has two top-level banners. Scoped to this post, the only rendered post with a title banner. |
landmark-unique-28ed54 |
Best Practice | moderate | 1 | 1 | upstream: quarto-dev/quarto-cli#14375. title-block-banner moves #title-block-header out of <main>, so the page has two top-level banners. Scoped to this post, the only rendered post with a title banner. |
landmark-complementary-is-top-level-ba6484 |
Best Practice | moderate | 1 | 1 | upstream: hakimel/reveal.js#3369. reveal.js renders the slide controls as <aside class=“controls”> inside div.reveal[role=application], so the controls are a complementary landmark inside another landmark. |
presentation-role-conflict-d28437 |
Best Practice | minor | 4 | 4 | third-party: leaflet, no upstream issue. leaflet.js gives each marker icon <img> alt=“” and also tabindex=“0”, so it is presentational and focusable at the same time. |
empty-table-header-4a7d27 |
Best Practice | minor | 3 | 3 | third-party: knitr, yihui/knitr#1747. kable() leaves the corner cell above the row names as an empty <th> on purpose. yihui/knitr#2500 added scope to the other header cells but kept this cell empty. |
aria-allowed-role-41c7c4 |
Best Practice | minor | 2 | 2 | third-party: leaflet, no upstream issue. leaflet.js gives each marker icon <img> role=“button”, which is not a valid role for <img>. |
empty-table-header-43b939 |
Best Practice | minor | 2 | 2 | third-party: Observable Inputs, no upstream issue. The Inputs.table select-all header cell holds only an unlabeled checkbox, so axe reports an empty header. Scoped to these pages because th matches any empty header cell. |
empty-heading-5c4dd5 |
Best Practice | minor | 1 | 2 | intentional: quarto-dev/quarto-cli#14971. The Slide Backgrounds Without a Title example shows slides with only background attributes, so each slide renders an empty <h2>. Scoped to this deck because the signature also matches empty headings on other decks. |
empty-table-header-fd713f |
Best Practice | minor | 1 | 1 | third-party: knitr, yihui/knitr#1747. kable() leaves the corner cell above the row names as an empty <th> on purpose. yihui/knitr#2500 added scope to the other header cells but kept this cell empty. |
empty-table-header-49301b |
Best Practice | minor | 1 | 1 | third-party: knitr, yihui/knitr#1747. kable() leaves the corner cell above the row names as an empty <th> on purpose. yihui/knitr#2500 added scope to the other header cells but kept this cell empty. |
empty-table-header-5a226a |
Best Practice | minor | 1 | 1 | third-party: knitr, yihui/knitr#1747. kable() leaves the corner cell above the row names as an empty <th> on purpose. yihui/knitr#2500 added scope to the other header cells but kept this cell empty. |
presentation-role-conflict-fb9721 |
Best Practice | minor | 1 | 1 | third-party: leaflet, no upstream issue. leaflet.js gives each marker icon <img> alt=“” and also tabindex=“0”, so it is presentational and focusable at the same time. axe adds the random htmlwidget ID because this page has three maps; update the ID when the page is refrozen. |
presentation-role-conflict-2ffcd8 |
Best Practice | minor | 1 | 1 | third-party: leaflet, no upstream issue. leaflet.js gives each marker icon <img> alt=“” and also tabindex=“0”, so it is presentational and focusable at the same time. axe adds the random htmlwidget ID because this page has three maps; update the ID when the page is refrozen. |
presentation-role-conflict-236e24 |
Best Practice | minor | 1 | 1 | third-party: leaflet, no upstream issue. leaflet.js gives each marker icon <img> alt=“” and also tabindex=“0”, so it is presentational and focusable at the same time. axe adds the random htmlwidget ID because this page has three maps; update the ID when the page is refrozen. |
empty-table-header-4d7182 |
Best Practice | minor | 1 | 1 | third-party: knitr, yihui/knitr#1747. kable() leaves the corner cell above the row names as an empty <th> on purpose. yihui/knitr#2500 added scope to the other header cells but kept this cell empty. |
Redirect stubs (skipped, not content)
docs/authoring/cross-references-callouts.html→cross-references.htmldocs/authoring/cross-references-listings.html→cross-references.htmldocs/authoring/figure-layout.html→figures.htmldocs/authoring/figures-and-layout.html→figures.htmldocs/authoring/filters.html→../extensions/filters.htmldocs/authoring/footnotes-and-citations.html→citations.htmldocs/authoring/index.html→markdown-basics.htmldocs/authoring/page-layout.html→article-layout.htmldocs/authoring/shortcodes-and-filters.html→../extensions/filters.htmldocs/dashboards/components.html→layout.htmldocs/dashboards/data-presentation.html→data-display.htmldocs/dashboards/examples/index.html→../../gallery/index.htmldocs/dashboards/interactivity/shiny-python.html→shiny-python/index.htmldocs/dashboards/layouts.html→layout.htmldocs/download/changelog/1.10/index.html→../../release.htmldocs/download/changelog/1.11/index.html→../../prerelease.htmldocs/getting-started/installation.html→../get-started/index.htmldocs/prerelease/1.3/code-annotation.html→../../authoring/code-annotation.htmldocs/prerelease/1.3/confluence.html→../../publishing/confluence.htmldocs/prerelease/1.3/embed.html→../../authoring/notebook-embed.htmldocs/prerelease/1.3/grid.html→../../output-formats/page-layout.htmldocs/prerelease/1.3/mermaid.html→../../authoring/diagrams.htmldocs/prerelease/1.3/multi-format.html→../../output-formats/html-multi-format.htmldocs/prerelease/1.4/binder.html→../../projects/binder.htmldocs/prerelease/1.4/inline.html→../../computations/inline-code.htmldocs/prerelease/1.4/lightbox.html→../../output-formats/html-lightbox-figures.htmldocs/prerelease/1.4/script-r.html→../../computations/render-scripts.htmldocs/prerelease/1.4/script.html→../../computations/render-scripts.htmldocs/prerelease/1.4/typst.html→../../output-formats/typst.htmldocs/prerelease/1.5/lipsum.html→../../authoring/lipsum.htmldocs/prerelease/1.5/lua-table-processing.html→../../authoring/tables.htmldocs/prerelease/1.5/pre-render.html→../../projects/scripts.htmldocs/prerelease/1.5/website-drafts.html→../../websites/website-drafts.htmldocs/reference/formats/dashboards.html→dashboard.htmldocs/tools/vscode-notebook.html→vscode/notebook.htmldocs/tools/vscode.html→vscode/index.htmldocs/visual-editor/vscode/index.html→../../tools/vscode/visual-editor.htmlreference/date-format.html→../docs/reference/dates.html