@holmdigital/standards 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +59 -0
- package/README.md +41 -0
- package/data/ict-manual-checks.json +189 -0
- package/data/rules.de.json +1945 -0
- package/data/rules.en.json +1946 -0
- package/data/rules.es.json +1945 -0
- package/data/rules.fr.json +1945 -0
- package/data/rules.sv.json +1946 -0
- package/data/wcag-to-en301549.json +1946 -0
- package/dist/index.d.mts +117 -0
- package/dist/index.d.ts +117 -0
- package/dist/index.js +10223 -0
- package/dist/index.mjs +10181 -0
- package/package.json +62 -0
- package/schema/convergence-schema.json +191 -0
|
@@ -0,0 +1,1946 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"ruleId": "color-contrast",
|
|
4
|
+
"wcagCriteria": "1.4.3",
|
|
5
|
+
"wcagLevel": "AA",
|
|
6
|
+
"wcagTitle": "Contrast (Minimum)",
|
|
7
|
+
"wcagVersion": "2.0",
|
|
8
|
+
"en301549Criteria": "9.1.4.3",
|
|
9
|
+
"en301549Title": "Contrast (minimum)",
|
|
10
|
+
"en301549Chapter": 9,
|
|
11
|
+
"dosLagenApplies": true,
|
|
12
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå AA krävs",
|
|
13
|
+
"remediation": {
|
|
14
|
+
"description": "Text och bilder av text måste ha ett kontrastvärde på minst 4,5:1 (3:1 för stor text).",
|
|
15
|
+
"technicalGuidance": "Använd verktyg som WebAIM Contrast Checker för att verifiera kontrast. Justera färgval eller lägg till bakgrundsopacity för att uppnå korrekt kontrast.",
|
|
16
|
+
"component": "@holmdigital/components/Button",
|
|
17
|
+
"codeExample": "import { Button } from '@holmdigital/components';\n\n// Bad: Poor contrast\n<button style={{ background: '#777', color: '#999' }}>Click me</button>\n\n// Good: Use accessible component\n<Button variant=\"primary\">Click me</Button>",
|
|
18
|
+
"wcagTechnique": [
|
|
19
|
+
"G18",
|
|
20
|
+
"G145",
|
|
21
|
+
"G174"
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
"holmdigitalInsight": {
|
|
25
|
+
"diggRisk": "high",
|
|
26
|
+
"eaaImpact": "critical",
|
|
27
|
+
"swedishInterpretation": "En av de vanligaste orsakerna till anmärkningar från tillsynsmyndigheter (DIGG). Särskilt viktigt för offentlig sektor.",
|
|
28
|
+
"commonMistakes": [
|
|
29
|
+
"Grå text på vit bakgrund (#777 på #FFF)",
|
|
30
|
+
"Ljusblå länkar utan understrykning",
|
|
31
|
+
"Placeholder-text med för låg kontrast"
|
|
32
|
+
],
|
|
33
|
+
"diggPrecedent": "Regulators often cite poor contrast in primary navigation elements.",
|
|
34
|
+
"priorityRationale": "Critical for users with low vision. Affects readability for all users in varying lighting conditions."
|
|
35
|
+
},
|
|
36
|
+
"testability": {
|
|
37
|
+
"automated": true,
|
|
38
|
+
"requiresManualCheck": false,
|
|
39
|
+
"pseudoAutomation": false,
|
|
40
|
+
"complexity": "simple"
|
|
41
|
+
},
|
|
42
|
+
"tags": [
|
|
43
|
+
"color",
|
|
44
|
+
"contrast",
|
|
45
|
+
"visual",
|
|
46
|
+
"wcag2a",
|
|
47
|
+
"wcag21aa"
|
|
48
|
+
]
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"ruleId": "keyboard-accessible",
|
|
52
|
+
"wcagCriteria": "2.1.1",
|
|
53
|
+
"wcagLevel": "A",
|
|
54
|
+
"wcagTitle": "Keyboard",
|
|
55
|
+
"wcagVersion": "2.0",
|
|
56
|
+
"en301549Criteria": "9.2.1.1",
|
|
57
|
+
"en301549Title": "Keyboard",
|
|
58
|
+
"en301549Chapter": 9,
|
|
59
|
+
"dosLagenApplies": true,
|
|
60
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå A krävs",
|
|
61
|
+
"remediation": {
|
|
62
|
+
"description": "All funktionalitet måste vara navigerbar med tangentbord.",
|
|
63
|
+
"technicalGuidance": "Använd semantiska HTML-element (button, a, input) istället för div/span med click handlers. Se till att tabindex används korrekt.",
|
|
64
|
+
"component": "@holmdigital/components/Button",
|
|
65
|
+
"codeExample": "// Bad: Div with onClick\n<div onClick={handleClick}>Click Me</div>\n\n// Good: Button element\n<button onClick={handleClick}>Click Me</button>\n\n// Best: Use HolmDigital component\nimport { Button } from '@holmdigital/components';\n<Button onClick={handleClick}>Click Me</Button>",
|
|
66
|
+
"wcagTechnique": [
|
|
67
|
+
"G202",
|
|
68
|
+
"H91"
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
"holmdigitalInsight": {
|
|
72
|
+
"diggRisk": "critical",
|
|
73
|
+
"eaaImpact": "critical",
|
|
74
|
+
"swedishInterpretation": "Tangentbordsstyrning är grundläggande och icke-förhandlingsbart. Högsta prioritet vid granskning.",
|
|
75
|
+
"commonMistakes": [
|
|
76
|
+
"Använder div/span för klickbara element",
|
|
77
|
+
"Egna dropdown-menyer utan tangentbordsstöd",
|
|
78
|
+
"Modala dialoger som inte fångar fokus korrekt"
|
|
79
|
+
],
|
|
80
|
+
"diggPrecedent": "Auditors have issued fines for sites where core functions (e.g. forms, navigation) are not keyboard accessible.",
|
|
81
|
+
"priorityRationale": "Critical for users with motor disabilities and screen reader users."
|
|
82
|
+
},
|
|
83
|
+
"testability": {
|
|
84
|
+
"automated": false,
|
|
85
|
+
"requiresManualCheck": true,
|
|
86
|
+
"pseudoAutomation": true,
|
|
87
|
+
"complexity": "moderate"
|
|
88
|
+
},
|
|
89
|
+
"tags": [
|
|
90
|
+
"keyboard",
|
|
91
|
+
"interaction",
|
|
92
|
+
"wcag2a",
|
|
93
|
+
"wcag21a"
|
|
94
|
+
]
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"ruleId": "alt-text",
|
|
98
|
+
"wcagCriteria": "1.1.1",
|
|
99
|
+
"wcagLevel": "A",
|
|
100
|
+
"wcagTitle": "Non-text Content",
|
|
101
|
+
"wcagVersion": "2.0",
|
|
102
|
+
"en301549Criteria": "9.1.1.1",
|
|
103
|
+
"en301549Title": "Non-text content",
|
|
104
|
+
"en301549Chapter": 9,
|
|
105
|
+
"dosLagenApplies": true,
|
|
106
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå A krävs",
|
|
107
|
+
"remediation": {
|
|
108
|
+
"description": "Alla bilder måste ha beskrivande alternativtext.",
|
|
109
|
+
"technicalGuidance": "Lägg till alt-attribut på alla img-element. För dekorativa bilder, använd alt=\"\". För informativa bilder, beskriv innehållet koncist.",
|
|
110
|
+
"codeExample": "// Bad: Msising alt\n<img src=\"logo.png\" />\n\n// Good: Descriptive alt\n<img src=\"logo.png\" alt=\"HolmDigital Logo\" />\n\n// Good: Decorative image\n<img src=\"decoration.png\" alt=\"\" role=\"presentation\" />",
|
|
111
|
+
"wcagTechnique": [
|
|
112
|
+
"G94",
|
|
113
|
+
"G95",
|
|
114
|
+
"H37"
|
|
115
|
+
]
|
|
116
|
+
},
|
|
117
|
+
"holmdigitalInsight": {
|
|
118
|
+
"diggRisk": "high",
|
|
119
|
+
"eaaImpact": "high",
|
|
120
|
+
"swedishInterpretation": "Särskilt viktigt för logotyper och informativ grafik. Kontrolleras ofta i granskningar.",
|
|
121
|
+
"commonMistakes": [
|
|
122
|
+
"Saknar alt-text helt",
|
|
123
|
+
"Alt-text som bara säger 'bild' eller 'ikon'",
|
|
124
|
+
"Filnamn som alt-text (t.ex. 'IMG_1234.jpg')",
|
|
125
|
+
"Dekorativa bilder med onödig beskrivning"
|
|
126
|
+
],
|
|
127
|
+
"diggPrecedent": "Audits frequently cite missing alt text, especially for vital infographics.",
|
|
128
|
+
"priorityRationale": "Critical for screen reader users to access visual information."
|
|
129
|
+
},
|
|
130
|
+
"testability": {
|
|
131
|
+
"automated": true,
|
|
132
|
+
"requiresManualCheck": true,
|
|
133
|
+
"pseudoAutomation": false,
|
|
134
|
+
"complexity": "simple"
|
|
135
|
+
},
|
|
136
|
+
"tags": [
|
|
137
|
+
"images",
|
|
138
|
+
"alt-text",
|
|
139
|
+
"wcag2a",
|
|
140
|
+
"wcag21a"
|
|
141
|
+
]
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"ruleId": "form-labels",
|
|
145
|
+
"wcagCriteria": "3.3.2",
|
|
146
|
+
"wcagLevel": "A",
|
|
147
|
+
"wcagTitle": "Labels or Instructions",
|
|
148
|
+
"wcagVersion": "2.0",
|
|
149
|
+
"en301549Criteria": "9.3.3.2",
|
|
150
|
+
"en301549Title": "Labels or instructions",
|
|
151
|
+
"en301549Chapter": 9,
|
|
152
|
+
"dosLagenApplies": true,
|
|
153
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå A krävs",
|
|
154
|
+
"remediation": {
|
|
155
|
+
"description": "Formulärfält måste ha tydliga etiketter eller instruktioner.",
|
|
156
|
+
"technicalGuidance": "Use label elements linked to input via for/id. For complex forms, use fieldset and legend. Use aria-describedby for extra instructions.",
|
|
157
|
+
"component": "@holmdigital/components/FormField",
|
|
158
|
+
"codeExample": "import { FormField } from '@holmdigital/components';\n\n// Bad: No label\n<input type=\"text\" placeholder=\"Name\" />\n\n// Good: With label\n<label htmlFor=\"name\">Name:</label>\n<input type=\"text\" id=\"name\" />\n\n// Best: Use HolmDigital component\n<FormField\n label=\"Name\"\n type=\"text\"\n required\n helpText=\"Enter your full name\"\n/>",
|
|
159
|
+
"wcagTechnique": [
|
|
160
|
+
"G131",
|
|
161
|
+
"G162",
|
|
162
|
+
"H44",
|
|
163
|
+
"H71"
|
|
164
|
+
]
|
|
165
|
+
},
|
|
166
|
+
"holmdigitalInsight": {
|
|
167
|
+
"diggRisk": "high",
|
|
168
|
+
"eaaImpact": "high",
|
|
169
|
+
"swedishInterpretation": "Formulär är kritiska för e-tjänster. Efterlevnad kontrolleras strikt i offentlig sektor.",
|
|
170
|
+
"commonMistakes": [
|
|
171
|
+
"Endast placeholder utan label",
|
|
172
|
+
"Label och input är inte kopplade via for/id",
|
|
173
|
+
"Felmeddelanden utan aria-describedby",
|
|
174
|
+
"Obligatoriska fält markeras inte tydligt"
|
|
175
|
+
],
|
|
176
|
+
"diggPrecedent": "Audit decisions often criticize poor form accessibility, especially for application and contact forms.",
|
|
177
|
+
"priorityRationale": "Critical for users to successfully use e-services and submit information."
|
|
178
|
+
},
|
|
179
|
+
"testability": {
|
|
180
|
+
"automated": true,
|
|
181
|
+
"requiresManualCheck": false,
|
|
182
|
+
"pseudoAutomation": false,
|
|
183
|
+
"complexity": "simple"
|
|
184
|
+
},
|
|
185
|
+
"tags": [
|
|
186
|
+
"forms",
|
|
187
|
+
"labels",
|
|
188
|
+
"wcag2a",
|
|
189
|
+
"wcag21a"
|
|
190
|
+
]
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"ruleId": "page-title",
|
|
194
|
+
"wcagCriteria": "2.4.2",
|
|
195
|
+
"wcagLevel": "A",
|
|
196
|
+
"wcagTitle": "Page Titled",
|
|
197
|
+
"wcagVersion": "2.0",
|
|
198
|
+
"en301549Criteria": "9.2.4.2",
|
|
199
|
+
"en301549Title": "Page titled",
|
|
200
|
+
"en301549Chapter": 9,
|
|
201
|
+
"dosLagenApplies": true,
|
|
202
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå A krävs",
|
|
203
|
+
"remediation": {
|
|
204
|
+
"description": "Varje webbsida måste ha en beskrivande titel.",
|
|
205
|
+
"technicalGuidance": "Use the title element in head. The title should be unique for each page and describe its purpose. Format: 'Page Name - Site Name'.",
|
|
206
|
+
"codeExample": "// Bad: Generic title\n<title>Page</title>\n\n// Good: Descriptive title\n<title>Contact Us - HolmDigital</title>\n\n// React/Next.js\nimport Head from 'next/head';\n\n<Head>\n <title>Contact Us - HolmDigital</title>\n</Head>",
|
|
207
|
+
"wcagTechnique": [
|
|
208
|
+
"G88",
|
|
209
|
+
"H25"
|
|
210
|
+
]
|
|
211
|
+
},
|
|
212
|
+
"holmdigitalInsight": {
|
|
213
|
+
"diggRisk": "medium",
|
|
214
|
+
"eaaImpact": "medium",
|
|
215
|
+
"swedishInterpretation": "Viktigt för navigering, särskilt i SPA:er där titeln måste uppdateras dynamiskt.",
|
|
216
|
+
"commonMistakes": [
|
|
217
|
+
"Samma titel på alla sidor",
|
|
218
|
+
"Titel uppdateras inte i SPA:er",
|
|
219
|
+
"För lång eller för kort titel",
|
|
220
|
+
"Titel saknas helt"
|
|
221
|
+
],
|
|
222
|
+
"diggPrecedent": "Audits have noted missing page titles, especially in Single Page Applications.",
|
|
223
|
+
"priorityRationale": "Important for screen reader navigation and SEO."
|
|
224
|
+
},
|
|
225
|
+
"testability": {
|
|
226
|
+
"automated": true,
|
|
227
|
+
"requiresManualCheck": false,
|
|
228
|
+
"pseudoAutomation": false,
|
|
229
|
+
"complexity": "simple"
|
|
230
|
+
},
|
|
231
|
+
"tags": [
|
|
232
|
+
"navigation",
|
|
233
|
+
"title",
|
|
234
|
+
"wcag2a",
|
|
235
|
+
"wcag21a"
|
|
236
|
+
]
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
"ruleId": "info-and-relationships",
|
|
240
|
+
"wcagCriteria": "1.3.1",
|
|
241
|
+
"wcagLevel": "A",
|
|
242
|
+
"wcagTitle": "Info and Relationships",
|
|
243
|
+
"wcagVersion": "2.0",
|
|
244
|
+
"en301549Criteria": "9.1.3.1",
|
|
245
|
+
"en301549Title": "Info and relationships",
|
|
246
|
+
"en301549Chapter": 9,
|
|
247
|
+
"dosLagenApplies": true,
|
|
248
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå A krävs",
|
|
249
|
+
"remediation": {
|
|
250
|
+
"description": "Information, struktur och relationer som förmedlas visuellt kan också bestämmas programmatiskt eller finns tillgängliga i text.",
|
|
251
|
+
"technicalGuidance": "Använd semantisk HTML: <header>, <nav>, <main>, <footer>, <h1>-<h6>, <ul>/ <ol>, <table>. Använd inte visuella stilar för att skapa 'falska' rubriker eller listor.",
|
|
252
|
+
"component": null,
|
|
253
|
+
"wcagTechnique": [
|
|
254
|
+
"H42",
|
|
255
|
+
"H48",
|
|
256
|
+
"G115"
|
|
257
|
+
]
|
|
258
|
+
},
|
|
259
|
+
"holmdigitalInsight": {
|
|
260
|
+
"diggRisk": "high",
|
|
261
|
+
"eaaImpact": "high",
|
|
262
|
+
"swedishInterpretation": "Semantisk struktur är avgörande för att skärmläsare ska kunna navigera effektivt. Revisorer påpekar ofta 'div-soppa' som ser ut som struktur men saknar semantik.",
|
|
263
|
+
"commonMistakes": [
|
|
264
|
+
"Använder fetstil istället för <h1>-<h6>",
|
|
265
|
+
"Använder <br> för listor istället för <ul>",
|
|
266
|
+
"Tabeller för layout"
|
|
267
|
+
],
|
|
268
|
+
"priorityRationale": "Fundamental for all assistive technology navigation."
|
|
269
|
+
},
|
|
270
|
+
"testability": {
|
|
271
|
+
"automated": true,
|
|
272
|
+
"requiresManualCheck": true,
|
|
273
|
+
"pseudoAutomation": false,
|
|
274
|
+
"complexity": "moderate"
|
|
275
|
+
},
|
|
276
|
+
"tags": [
|
|
277
|
+
"structure",
|
|
278
|
+
"semantic",
|
|
279
|
+
"headings",
|
|
280
|
+
"wcag2a"
|
|
281
|
+
]
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
"ruleId": "use-of-color",
|
|
285
|
+
"wcagCriteria": "1.4.1",
|
|
286
|
+
"wcagLevel": "A",
|
|
287
|
+
"wcagTitle": "Use of Color",
|
|
288
|
+
"wcagVersion": "2.0",
|
|
289
|
+
"en301549Criteria": "9.1.4.1",
|
|
290
|
+
"en301549Title": "Use of color",
|
|
291
|
+
"en301549Chapter": 9,
|
|
292
|
+
"dosLagenApplies": true,
|
|
293
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå A krävs",
|
|
294
|
+
"remediation": {
|
|
295
|
+
"description": "Färg får inte användas som det enda visuella sättet att förmedla information, indikera en handling, uppmana till svar eller skilja på visuella element.",
|
|
296
|
+
"technicalGuidance": "Komplettera färg med text, ikoner eller understrykning. T.ex. länkar måste ha understrykning eller annan visuell markör utöver färg. Felmeddelanden behöver text/ikon, inte bara en röd ram.",
|
|
297
|
+
"component": "@holmdigital/components/FormField",
|
|
298
|
+
"wcagTechnique": [
|
|
299
|
+
"G14",
|
|
300
|
+
"G182",
|
|
301
|
+
"G183"
|
|
302
|
+
]
|
|
303
|
+
},
|
|
304
|
+
"holmdigitalInsight": {
|
|
305
|
+
"diggRisk": "medium",
|
|
306
|
+
"eaaImpact": "medium",
|
|
307
|
+
"swedishInterpretation": "Vanligt problem i grafer och kartor där endast färgkodning används.",
|
|
308
|
+
"commonMistakes": [
|
|
309
|
+
"Länkar som endast skiljer sig med färg från brödtext",
|
|
310
|
+
"Felmeddelanden som endast markeras med röd färg",
|
|
311
|
+
"Grafer där endast färg skiljer datapunkter"
|
|
312
|
+
],
|
|
313
|
+
"priorityRationale": "Crucial for color blind users."
|
|
314
|
+
},
|
|
315
|
+
"testability": {
|
|
316
|
+
"automated": false,
|
|
317
|
+
"requiresManualCheck": true,
|
|
318
|
+
"pseudoAutomation": false,
|
|
319
|
+
"complexity": "moderate"
|
|
320
|
+
},
|
|
321
|
+
"tags": [
|
|
322
|
+
"visual",
|
|
323
|
+
"color",
|
|
324
|
+
"design",
|
|
325
|
+
"wcag2a"
|
|
326
|
+
]
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
"ruleId": "reflow",
|
|
330
|
+
"wcagCriteria": "1.4.10",
|
|
331
|
+
"wcagLevel": "AA",
|
|
332
|
+
"wcagTitle": "Reflow",
|
|
333
|
+
"wcagVersion": "2.1",
|
|
334
|
+
"en301549Criteria": "9.1.4.10",
|
|
335
|
+
"en301549Title": "Reflow",
|
|
336
|
+
"en301549Chapter": 9,
|
|
337
|
+
"dosLagenApplies": true,
|
|
338
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå AA krävs",
|
|
339
|
+
"remediation": {
|
|
340
|
+
"description": "Innehåll måste vara presentabelt utan att kräva scrollning i två dimensioner ner till 320px bredd.",
|
|
341
|
+
"technicalGuidance": "Använd responsiv design (CSS Media Queries, Flexbox, Grid). Undvik fasta bredder i pixlar. Se till att tabeller och bilder skalar korrekt.",
|
|
342
|
+
"component": null,
|
|
343
|
+
"wcagTechnique": [
|
|
344
|
+
"C32",
|
|
345
|
+
"C31"
|
|
346
|
+
]
|
|
347
|
+
},
|
|
348
|
+
"holmdigitalInsight": {
|
|
349
|
+
"diggRisk": "high",
|
|
350
|
+
"eaaImpact": "high",
|
|
351
|
+
"swedishInterpretation": "Ett modernt krav (WCAG 2.1) kritiskt för mobilanvändning och uppförstorad text. DIGG har nolltolerans för horisontell scroll på vertikala sajter.",
|
|
352
|
+
"commonMistakes": [
|
|
353
|
+
"Fasta bredder på containrar",
|
|
354
|
+
"Tabeller som inte är responsiva",
|
|
355
|
+
"Bilder bredare än skärmen"
|
|
356
|
+
],
|
|
357
|
+
"priorityRationale": "Critical for low vision users who zoom in heavily."
|
|
358
|
+
},
|
|
359
|
+
"testability": {
|
|
360
|
+
"automated": false,
|
|
361
|
+
"requiresManualCheck": true,
|
|
362
|
+
"pseudoAutomation": true,
|
|
363
|
+
"complexity": "moderate"
|
|
364
|
+
},
|
|
365
|
+
"tags": [
|
|
366
|
+
"design",
|
|
367
|
+
"responsive",
|
|
368
|
+
"mobile",
|
|
369
|
+
"wcag21aa"
|
|
370
|
+
]
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
"ruleId": "non-text-contrast",
|
|
374
|
+
"wcagCriteria": "1.4.11",
|
|
375
|
+
"wcagLevel": "AA",
|
|
376
|
+
"wcagTitle": "Non-text Contrast",
|
|
377
|
+
"wcagVersion": "2.1",
|
|
378
|
+
"en301549Criteria": "9.1.4.11",
|
|
379
|
+
"en301549Title": "Non-text contrast",
|
|
380
|
+
"en301549Chapter": 9,
|
|
381
|
+
"dosLagenApplies": true,
|
|
382
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå AA krävs",
|
|
383
|
+
"remediation": {
|
|
384
|
+
"description": "Den visuella presentationen av gränssnittskomponenter och grafiska objekt måste ha ett kontrastförhållande på minst 3:1 mot angränsande färger.",
|
|
385
|
+
"technicalGuidance": "Gäller knappar, input-ramar, ikoner och fokusindikatorer. Se till att alla interaktiva element syns tydligt mot bakgrunden.",
|
|
386
|
+
"component": "@holmdigital/components/Button",
|
|
387
|
+
"wcagTechnique": [
|
|
388
|
+
"G195",
|
|
389
|
+
"G207"
|
|
390
|
+
]
|
|
391
|
+
},
|
|
392
|
+
"holmdigitalInsight": {
|
|
393
|
+
"diggRisk": "low",
|
|
394
|
+
"eaaImpact": "low",
|
|
395
|
+
"swedishInterpretation": "Ofta missat krav gällande fokusringar och inaktiva (men synliga) komponenter. Viktigt för att förstå gränssnittet.",
|
|
396
|
+
"commonMistakes": [
|
|
397
|
+
"Utgråade knappar med för låg kontrast"
|
|
398
|
+
],
|
|
399
|
+
"priorityRationale": "Important for distinguishing interactive elements."
|
|
400
|
+
},
|
|
401
|
+
"testability": {
|
|
402
|
+
"automated": false,
|
|
403
|
+
"requiresManualCheck": true,
|
|
404
|
+
"pseudoAutomation": false,
|
|
405
|
+
"complexity": "complex"
|
|
406
|
+
},
|
|
407
|
+
"tags": [
|
|
408
|
+
"visual",
|
|
409
|
+
"contrast",
|
|
410
|
+
"graphics",
|
|
411
|
+
"wcag21aa"
|
|
412
|
+
]
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
"ruleId": "text-spacing",
|
|
416
|
+
"wcagCriteria": "1.4.12",
|
|
417
|
+
"wcagLevel": "AA",
|
|
418
|
+
"wcagTitle": "Text Spacing",
|
|
419
|
+
"wcagVersion": "2.1",
|
|
420
|
+
"en301549Criteria": "9.1.4.12",
|
|
421
|
+
"en301549Title": "Text spacing",
|
|
422
|
+
"en301549Chapter": 9,
|
|
423
|
+
"dosLagenApplies": true,
|
|
424
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå AA krävs",
|
|
425
|
+
"remediation": {
|
|
426
|
+
"description": "Content or functionality must not be lost when the user changes text spacing (line height, paragraph spacing, etc.).",
|
|
427
|
+
"technicalGuidance": "Avoid fixed heights on text containers. Let containers grow with content. Test with text spacing bookmarklet.",
|
|
428
|
+
"component": null,
|
|
429
|
+
"wcagTechnique": [
|
|
430
|
+
"C36"
|
|
431
|
+
]
|
|
432
|
+
},
|
|
433
|
+
"holmdigitalInsight": {
|
|
434
|
+
"diggRisk": "low",
|
|
435
|
+
"eaaImpact": "medium",
|
|
436
|
+
"swedishInterpretation": "Important for dyslexia adaptations.",
|
|
437
|
+
"commonMistakes": [
|
|
438
|
+
"Fixed line height in pixels",
|
|
439
|
+
"Text container that does not grow"
|
|
440
|
+
],
|
|
441
|
+
"priorityRationale": "Important for readability during adaptations."
|
|
442
|
+
},
|
|
443
|
+
"testability": {
|
|
444
|
+
"automated": false,
|
|
445
|
+
"requiresManualCheck": true,
|
|
446
|
+
"pseudoAutomation": true,
|
|
447
|
+
"complexity": "moderate"
|
|
448
|
+
},
|
|
449
|
+
"tags": [
|
|
450
|
+
"visual",
|
|
451
|
+
"typography",
|
|
452
|
+
"wcag21aa"
|
|
453
|
+
]
|
|
454
|
+
},
|
|
455
|
+
{
|
|
456
|
+
"ruleId": "content-on-hover",
|
|
457
|
+
"wcagCriteria": "1.4.13",
|
|
458
|
+
"wcagLevel": "AA",
|
|
459
|
+
"wcagTitle": "Content on Hover or Focus",
|
|
460
|
+
"wcagVersion": "2.1",
|
|
461
|
+
"en301549Criteria": "9.1.4.13",
|
|
462
|
+
"en301549Title": "Content on hover or focus",
|
|
463
|
+
"en301549Chapter": 9,
|
|
464
|
+
"dosLagenApplies": true,
|
|
465
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå AA krävs",
|
|
466
|
+
"remediation": {
|
|
467
|
+
"description": "Innehåll som visas vid hover/fokus (t.ex. tooltips) måste vara avfärdbart, hovringsbart och beständigt.",
|
|
468
|
+
"technicalGuidance": "Se till att tooltips inte försvinner när musen flyttas från utlösaren till själva tooltipen. Tillåt ESC för att avfärda.",
|
|
469
|
+
"component": null,
|
|
470
|
+
"wcagTechnique": [
|
|
471
|
+
"SCR39"
|
|
472
|
+
]
|
|
473
|
+
},
|
|
474
|
+
"holmdigitalInsight": {
|
|
475
|
+
"diggRisk": "medium",
|
|
476
|
+
"eaaImpact": "medium",
|
|
477
|
+
"swedishInterpretation": "Vanligt problem med egna tooltips och megamenyer.",
|
|
478
|
+
"commonMistakes": [
|
|
479
|
+
"Tooltips som inte kan nås med musen",
|
|
480
|
+
"Menyer som stänger för lätt",
|
|
481
|
+
"Innehåll som inte kan avfärdas utan att flytta fokus"
|
|
482
|
+
],
|
|
483
|
+
"priorityRationale": "Important for users with magnification and motor difficulties."
|
|
484
|
+
},
|
|
485
|
+
"testability": {
|
|
486
|
+
"automated": false,
|
|
487
|
+
"requiresManualCheck": true,
|
|
488
|
+
"pseudoAutomation": true,
|
|
489
|
+
"complexity": "complex"
|
|
490
|
+
},
|
|
491
|
+
"tags": [
|
|
492
|
+
"interaction",
|
|
493
|
+
"hover",
|
|
494
|
+
"tooltips",
|
|
495
|
+
"wcag21aa"
|
|
496
|
+
]
|
|
497
|
+
},
|
|
498
|
+
{
|
|
499
|
+
"ruleId": "captions-prerecorded",
|
|
500
|
+
"wcagCriteria": "1.2.2",
|
|
501
|
+
"wcagLevel": "A",
|
|
502
|
+
"wcagTitle": "Captions (Prerecorded)",
|
|
503
|
+
"wcagVersion": "2.0",
|
|
504
|
+
"en301549Criteria": "9.1.2.2",
|
|
505
|
+
"en301549Title": "Captions (prerecorded)",
|
|
506
|
+
"en301549Chapter": 9,
|
|
507
|
+
"dosLagenApplies": true,
|
|
508
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå A krävs",
|
|
509
|
+
"remediation": {
|
|
510
|
+
"description": "Textning måste tillhandahållas för allt förinspelat ljudinnehåll i synkroniserad media.",
|
|
511
|
+
"technicalGuidance": "Använd <track>-elementet med WebVTT-filer för HTML5-video. För inbäddade sociala medier, se till att textning är aktiverad.",
|
|
512
|
+
"component": null,
|
|
513
|
+
"wcagTechnique": [
|
|
514
|
+
"G87",
|
|
515
|
+
"G93"
|
|
516
|
+
]
|
|
517
|
+
},
|
|
518
|
+
"holmdigitalInsight": {
|
|
519
|
+
"diggRisk": "high",
|
|
520
|
+
"eaaImpact": "high",
|
|
521
|
+
"swedishInterpretation": "En av de vanligaste bristerna i offentlig sektor. Lagkravet är strikt: video med ljud SKA ha textning.",
|
|
522
|
+
"commonMistakes": [
|
|
523
|
+
"Autigenererad textning som ingen är nöjd med",
|
|
524
|
+
"Textning saknas helt",
|
|
525
|
+
"Textning inbränd i videon (ej tillgänglig för sök/översättning)"
|
|
526
|
+
],
|
|
527
|
+
"priorityRationale": "Critical for deaf and hard of hearing users."
|
|
528
|
+
},
|
|
529
|
+
"testability": {
|
|
530
|
+
"automated": false,
|
|
531
|
+
"requiresManualCheck": true,
|
|
532
|
+
"pseudoAutomation": false,
|
|
533
|
+
"complexity": "simple"
|
|
534
|
+
},
|
|
535
|
+
"tags": [
|
|
536
|
+
"media",
|
|
537
|
+
"video",
|
|
538
|
+
"captions",
|
|
539
|
+
"wcag2a"
|
|
540
|
+
]
|
|
541
|
+
},
|
|
542
|
+
{
|
|
543
|
+
"ruleId": "audio-description",
|
|
544
|
+
"wcagCriteria": "1.2.5",
|
|
545
|
+
"wcagLevel": "AA",
|
|
546
|
+
"wcagTitle": "Audio Description (Prerecorded)",
|
|
547
|
+
"wcagVersion": "2.0",
|
|
548
|
+
"en301549Criteria": "9.1.2.5",
|
|
549
|
+
"en301549Title": "Audio description (prerecorded)",
|
|
550
|
+
"en301549Chapter": 9,
|
|
551
|
+
"dosLagenApplies": true,
|
|
552
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå AA krävs",
|
|
553
|
+
"remediation": {
|
|
554
|
+
"description": "Syntolkning måste tillhandahållas för allt förinspelat videoinnehåll.",
|
|
555
|
+
"technicalGuidance": "Antingen som ett separat ljudspår, en alternativ version av videon, eller (om 'talking heads') genom att se till att all info förmedlas via ljud.",
|
|
556
|
+
"component": null,
|
|
557
|
+
"wcagTechnique": [
|
|
558
|
+
"G78",
|
|
559
|
+
"G69"
|
|
560
|
+
]
|
|
561
|
+
},
|
|
562
|
+
"holmdigitalInsight": {
|
|
563
|
+
"diggRisk": "medium",
|
|
564
|
+
"eaaImpact": "medium",
|
|
565
|
+
"swedishInterpretation": "Kan ofta lösas genom 'integrerad syntolkning' (att man pratar om det som syns), vilket är mer kostnadseffektivt.",
|
|
566
|
+
"commonMistakes": [
|
|
567
|
+
"Information visas endast visuellt (grafik, textskyltar) utan att nämnas i ljudet"
|
|
568
|
+
],
|
|
569
|
+
"priorityRationale": "Critical for blind video users."
|
|
570
|
+
},
|
|
571
|
+
"testability": {
|
|
572
|
+
"automated": false,
|
|
573
|
+
"requiresManualCheck": true,
|
|
574
|
+
"pseudoAutomation": false,
|
|
575
|
+
"complexity": "moderate"
|
|
576
|
+
},
|
|
577
|
+
"tags": [
|
|
578
|
+
"media",
|
|
579
|
+
"video",
|
|
580
|
+
"audio-description",
|
|
581
|
+
"wcag2aa"
|
|
582
|
+
]
|
|
583
|
+
},
|
|
584
|
+
{
|
|
585
|
+
"ruleId": "orientation",
|
|
586
|
+
"wcagCriteria": "1.3.4",
|
|
587
|
+
"wcagLevel": "AA",
|
|
588
|
+
"wcagTitle": "Orientation",
|
|
589
|
+
"wcagVersion": "2.1",
|
|
590
|
+
"en301549Criteria": "9.1.3.4",
|
|
591
|
+
"en301549Title": "Orientation",
|
|
592
|
+
"en301549Chapter": 9,
|
|
593
|
+
"dosLagenApplies": true,
|
|
594
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå AA krävs",
|
|
595
|
+
"remediation": {
|
|
596
|
+
"description": "Innehåll får inte begränsa sin visning och användning till en enda skärmorientering, såvida inte en viss orientering är nödvändig.",
|
|
597
|
+
"technicalGuidance": "Lås inte skärmen till porträtt eller landskap via CSS eller JS-manifest. Använd CSS media queries för att hantera layoutändringar.",
|
|
598
|
+
"component": null,
|
|
599
|
+
"wcagTechnique": [
|
|
600
|
+
"F97"
|
|
601
|
+
]
|
|
602
|
+
},
|
|
603
|
+
"holmdigitalInsight": {
|
|
604
|
+
"diggRisk": "low",
|
|
605
|
+
"eaaImpact": "medium",
|
|
606
|
+
"swedishInterpretation": "Viktigt för surfplattor och användare som har enheten monterad (t.ex. på rullstol).",
|
|
607
|
+
"commonMistakes": [
|
|
608
|
+
"Appar/sajter som roterar gränssnittet 90 grader mot användarens vilja"
|
|
609
|
+
],
|
|
610
|
+
"priorityRationale": "Important for users who cannot rotate their device."
|
|
611
|
+
},
|
|
612
|
+
"testability": {
|
|
613
|
+
"automated": false,
|
|
614
|
+
"requiresManualCheck": true,
|
|
615
|
+
"pseudoAutomation": true,
|
|
616
|
+
"complexity": "simple"
|
|
617
|
+
},
|
|
618
|
+
"tags": [
|
|
619
|
+
"mobile",
|
|
620
|
+
"responsive",
|
|
621
|
+
"orientation",
|
|
622
|
+
"wcag21aa"
|
|
623
|
+
]
|
|
624
|
+
},
|
|
625
|
+
{
|
|
626
|
+
"ruleId": "identify-input-purpose",
|
|
627
|
+
"wcagCriteria": "1.3.5",
|
|
628
|
+
"wcagLevel": "AA",
|
|
629
|
+
"wcagTitle": "Identify Input Purpose",
|
|
630
|
+
"wcagVersion": "2.1",
|
|
631
|
+
"en301549Criteria": "9.1.3.5",
|
|
632
|
+
"en301549Title": "Identify input purpose",
|
|
633
|
+
"en301549Chapter": 9,
|
|
634
|
+
"dosLagenApplies": true,
|
|
635
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå AA krävs",
|
|
636
|
+
"remediation": {
|
|
637
|
+
"description": "Syftet med varje inmatningsfält som samlar in information om användaren kan bestämmas programmatiskt.",
|
|
638
|
+
"technicalGuidance": "Använd 'autocomplete'-attributet på inmatningsfält för personuppgifter (namn, e-post, tel, adress etc.).",
|
|
639
|
+
"component": "@holmdigital/components/FormField",
|
|
640
|
+
"wcagTechnique": [
|
|
641
|
+
"H98"
|
|
642
|
+
]
|
|
643
|
+
},
|
|
644
|
+
"holmdigitalInsight": {
|
|
645
|
+
"diggRisk": "medium",
|
|
646
|
+
"eaaImpact": "high",
|
|
647
|
+
"swedishInterpretation": "Gör det mycket enklare att fylla i förvirrande formulär (autofill).",
|
|
648
|
+
"commonMistakes": [
|
|
649
|
+
"Saknar autocomplete-attribut",
|
|
650
|
+
"Felaktigt autocomplete-värde",
|
|
651
|
+
"Stänger av autocomplete (autocomplete='off') i onödan"
|
|
652
|
+
],
|
|
653
|
+
"priorityRationale": "Reduces cognitive load and motor requirements."
|
|
654
|
+
},
|
|
655
|
+
"testability": {
|
|
656
|
+
"automated": true,
|
|
657
|
+
"requiresManualCheck": false,
|
|
658
|
+
"pseudoAutomation": false,
|
|
659
|
+
"complexity": "simple"
|
|
660
|
+
},
|
|
661
|
+
"tags": [
|
|
662
|
+
"forms",
|
|
663
|
+
"autocomplete",
|
|
664
|
+
"wcag21aa"
|
|
665
|
+
]
|
|
666
|
+
},
|
|
667
|
+
{
|
|
668
|
+
"ruleId": "no-keyboard-trap",
|
|
669
|
+
"wcagCriteria": "2.1.2",
|
|
670
|
+
"wcagLevel": "A",
|
|
671
|
+
"wcagTitle": "No Keyboard Trap",
|
|
672
|
+
"wcagVersion": "2.0",
|
|
673
|
+
"en301549Criteria": "9.2.1.2",
|
|
674
|
+
"en301549Title": "No keyboard trap",
|
|
675
|
+
"en301549Chapter": 9,
|
|
676
|
+
"dosLagenApplies": true,
|
|
677
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå A krävs",
|
|
678
|
+
"remediation": {
|
|
679
|
+
"description": "Om fokus kan flyttas till en komponent på sidan med tangentbord, måste fokus också kunna flyttas bort från den komponenten med endast tangentbord.",
|
|
680
|
+
"technicalGuidance": "Var försiktig med JS-widgets som fångar fokus (t.ex. modala fönster). Se till att det alltid finns en väg ut (t.ex. ESC eller shift+tab).",
|
|
681
|
+
"component": null,
|
|
682
|
+
"wcagTechnique": [
|
|
683
|
+
"G21"
|
|
684
|
+
]
|
|
685
|
+
},
|
|
686
|
+
"holmdigitalInsight": {
|
|
687
|
+
"diggRisk": "critical",
|
|
688
|
+
"eaaImpact": "critical",
|
|
689
|
+
"swedishInterpretation": "En tangentbordsfälla är en 'blocker' som gör webbplatsen oanvändbar. Allvarligt fel.",
|
|
690
|
+
"commonMistakes": [
|
|
691
|
+
"Egna widgets som loopar fokus i oändlighet",
|
|
692
|
+
"Inbäddade tredjepartskomponenter (kartor, chattar) utan utgång"
|
|
693
|
+
],
|
|
694
|
+
"priorityRationale": "Critical: The user gets stuck and must restart the browser."
|
|
695
|
+
},
|
|
696
|
+
"testability": {
|
|
697
|
+
"automated": false,
|
|
698
|
+
"requiresManualCheck": true,
|
|
699
|
+
"pseudoAutomation": true,
|
|
700
|
+
"complexity": "moderate"
|
|
701
|
+
},
|
|
702
|
+
"tags": [
|
|
703
|
+
"keyboard",
|
|
704
|
+
"interaction",
|
|
705
|
+
"wcag2a"
|
|
706
|
+
]
|
|
707
|
+
},
|
|
708
|
+
{
|
|
709
|
+
"ruleId": "character-key-shortcuts",
|
|
710
|
+
"wcagCriteria": "2.1.4",
|
|
711
|
+
"wcagLevel": "A",
|
|
712
|
+
"wcagTitle": "Character Key Shortcuts",
|
|
713
|
+
"wcagVersion": "2.1",
|
|
714
|
+
"en301549Criteria": "9.2.1.4",
|
|
715
|
+
"en301549Title": "Character key shortcuts",
|
|
716
|
+
"en301549Chapter": 9,
|
|
717
|
+
"dosLagenApplies": true,
|
|
718
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå A krävs",
|
|
719
|
+
"remediation": {
|
|
720
|
+
"description": "Om ett kortkommando består av endast ett tecken (bokstav, siffra, symbol), måste det finnas ett sätt att stänga av det eller mappa om det, eller så får det bara vara aktivt vid fokus.",
|
|
721
|
+
"technicalGuidance": "Undvik en-teckens-genvägar om möjligt. Om det behövs, se till att de inte krockar med röststyrning eller oavsiktlig inmatning.",
|
|
722
|
+
"component": null,
|
|
723
|
+
"wcagTechnique": [
|
|
724
|
+
"G217"
|
|
725
|
+
]
|
|
726
|
+
},
|
|
727
|
+
"holmdigitalInsight": {
|
|
728
|
+
"diggRisk": "medium",
|
|
729
|
+
"eaaImpact": "medium",
|
|
730
|
+
"swedishInterpretation": "Viktigt för användare med röststyrning (Dragon etc.) där enstaka ord kan trigga kommandon av misstag.",
|
|
731
|
+
"commonMistakes": [
|
|
732
|
+
"Gmail-liknande genvägar som är på som standard utan möjlighet att stänga av"
|
|
733
|
+
],
|
|
734
|
+
"priorityRationale": "Important to avoid accidental activation."
|
|
735
|
+
},
|
|
736
|
+
"testability": {
|
|
737
|
+
"automated": false,
|
|
738
|
+
"requiresManualCheck": true,
|
|
739
|
+
"pseudoAutomation": false,
|
|
740
|
+
"complexity": "moderate"
|
|
741
|
+
},
|
|
742
|
+
"tags": [
|
|
743
|
+
"keyboard",
|
|
744
|
+
"shortcuts",
|
|
745
|
+
"wcag21a"
|
|
746
|
+
]
|
|
747
|
+
},
|
|
748
|
+
{
|
|
749
|
+
"ruleId": "timing-adjustable",
|
|
750
|
+
"wcagCriteria": "2.2.1",
|
|
751
|
+
"wcagLevel": "A",
|
|
752
|
+
"wcagTitle": "Timing Adjustable",
|
|
753
|
+
"wcagVersion": "2.0",
|
|
754
|
+
"en301549Criteria": "9.2.2.1",
|
|
755
|
+
"en301549Title": "Timing adjustable",
|
|
756
|
+
"en301549Chapter": 9,
|
|
757
|
+
"dosLagenApplies": true,
|
|
758
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå A krävs",
|
|
759
|
+
"remediation": {
|
|
760
|
+
"description": "Om en tidsgräns (session, lästid) är satt, måste användaren kunna stänga av, justera eller förlänga den.",
|
|
761
|
+
"technicalGuidance": "Ge en varning innan sessionen går ut med en 'Förläng session'-knapp. Tidsgränsen måste vara minst 20 sekunder.",
|
|
762
|
+
"component": null,
|
|
763
|
+
"wcagTechnique": [
|
|
764
|
+
"SCR16",
|
|
765
|
+
"G180"
|
|
766
|
+
]
|
|
767
|
+
},
|
|
768
|
+
"holmdigitalInsight": {
|
|
769
|
+
"diggRisk": "high",
|
|
770
|
+
"eaaImpact": "high",
|
|
771
|
+
"swedishInterpretation": "Kritiskt för e-tjänster/bank. Användare som läser långsamt eller använder hjälpmedel behöver mer tid.",
|
|
772
|
+
"commonMistakes": [
|
|
773
|
+
"Utloggning utan varning",
|
|
774
|
+
"Tidsgränser som inte kan förlängas"
|
|
775
|
+
],
|
|
776
|
+
"priorityRationale": "Critical to avoid losing entered data."
|
|
777
|
+
},
|
|
778
|
+
"testability": {
|
|
779
|
+
"automated": false,
|
|
780
|
+
"requiresManualCheck": true,
|
|
781
|
+
"pseudoAutomation": true,
|
|
782
|
+
"complexity": "moderate"
|
|
783
|
+
},
|
|
784
|
+
"tags": [
|
|
785
|
+
"time",
|
|
786
|
+
"session",
|
|
787
|
+
"wcag2a"
|
|
788
|
+
]
|
|
789
|
+
},
|
|
790
|
+
{
|
|
791
|
+
"ruleId": "pause-stop-hide",
|
|
792
|
+
"wcagCriteria": "2.2.2",
|
|
793
|
+
"wcagLevel": "A",
|
|
794
|
+
"wcagTitle": "Pause, Stop, Hide",
|
|
795
|
+
"wcagVersion": "2.0",
|
|
796
|
+
"en301549Criteria": "9.2.2.2",
|
|
797
|
+
"en301549Title": "Pause, stop, hide",
|
|
798
|
+
"en301549Chapter": 9,
|
|
799
|
+
"dosLagenApplies": true,
|
|
800
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå A krävs",
|
|
801
|
+
"remediation": {
|
|
802
|
+
"description": "För rörligt, blinkande eller rullande innehåll som startar automatiskt och varar längre än 5 sekunder, måste det finnas ett sätt att pausa, stoppa eller dölja det.",
|
|
803
|
+
"technicalGuidance": "Gäller karuseller (sliders), autouppdaterande nyhetsflöden, animerade bakgrunder. Lägg till en tydlig pausknapp.",
|
|
804
|
+
"component": null,
|
|
805
|
+
"wcagTechnique": [
|
|
806
|
+
"G4",
|
|
807
|
+
"G186"
|
|
808
|
+
]
|
|
809
|
+
},
|
|
810
|
+
"holmdigitalInsight": {
|
|
811
|
+
"diggRisk": "medium",
|
|
812
|
+
"eaaImpact": "medium",
|
|
813
|
+
"swedishInterpretation": "Viktigt för användare med koncentrationssvårigheter (ADHD/Autism) som distraheras av rörelse.",
|
|
814
|
+
"commonMistakes": [
|
|
815
|
+
"Bildkaruseller utan pausknapp",
|
|
816
|
+
"Animerade bakgrunder som inte kan stängas av"
|
|
817
|
+
],
|
|
818
|
+
"priorityRationale": "Important for cognitive accessibility."
|
|
819
|
+
},
|
|
820
|
+
"testability": {
|
|
821
|
+
"automated": false,
|
|
822
|
+
"requiresManualCheck": true,
|
|
823
|
+
"pseudoAutomation": true,
|
|
824
|
+
"complexity": "moderate"
|
|
825
|
+
},
|
|
826
|
+
"tags": [
|
|
827
|
+
"animation",
|
|
828
|
+
"carousel",
|
|
829
|
+
"distraction",
|
|
830
|
+
"wcag2a"
|
|
831
|
+
]
|
|
832
|
+
},
|
|
833
|
+
{
|
|
834
|
+
"ruleId": "three-flashes",
|
|
835
|
+
"wcagCriteria": "2.3.1",
|
|
836
|
+
"wcagLevel": "A",
|
|
837
|
+
"wcagTitle": "Three Flashes or Below Threshold",
|
|
838
|
+
"wcagVersion": "2.0",
|
|
839
|
+
"en301549Criteria": "9.2.3.1",
|
|
840
|
+
"en301549Title": "Three flashes or below threshold",
|
|
841
|
+
"en301549Chapter": 9,
|
|
842
|
+
"dosLagenApplies": true,
|
|
843
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå A krävs",
|
|
844
|
+
"remediation": {
|
|
845
|
+
"description": "Innehåll får inte blinka mer än tre gånger per sekund (kan orsaka anfall).",
|
|
846
|
+
"technicalGuidance": "Undvik snabbt blinkande i video och animationer. Använd verktyg för att mäta blinkfrekvens (PEAT).",
|
|
847
|
+
"component": null,
|
|
848
|
+
"wcagTechnique": [
|
|
849
|
+
"G19"
|
|
850
|
+
]
|
|
851
|
+
},
|
|
852
|
+
"holmdigitalInsight": {
|
|
853
|
+
"diggRisk": "critical",
|
|
854
|
+
"eaaImpact": "critical",
|
|
855
|
+
"swedishInterpretation": "Hälsorisk. Nolltolerans.",
|
|
856
|
+
"commonMistakes": [
|
|
857
|
+
"Stroboskopiska effekter i video",
|
|
858
|
+
"Felaktig användning av blinkande felmeddelanden"
|
|
859
|
+
],
|
|
860
|
+
"priorityRationale": "Critical safety risk."
|
|
861
|
+
},
|
|
862
|
+
"testability": {
|
|
863
|
+
"automated": false,
|
|
864
|
+
"requiresManualCheck": true,
|
|
865
|
+
"pseudoAutomation": false,
|
|
866
|
+
"complexity": "complex"
|
|
867
|
+
},
|
|
868
|
+
"tags": [
|
|
869
|
+
"seizure",
|
|
870
|
+
"safety",
|
|
871
|
+
"animation",
|
|
872
|
+
"wcag2a"
|
|
873
|
+
]
|
|
874
|
+
},
|
|
875
|
+
{
|
|
876
|
+
"ruleId": "bypass-blocks",
|
|
877
|
+
"wcagCriteria": "2.4.1",
|
|
878
|
+
"wcagLevel": "A",
|
|
879
|
+
"wcagTitle": "Bypass Blocks",
|
|
880
|
+
"wcagVersion": "2.0",
|
|
881
|
+
"en301549Criteria": "9.2.4.1",
|
|
882
|
+
"en301549Title": "Bypass blocks",
|
|
883
|
+
"en301549Chapter": 9,
|
|
884
|
+
"dosLagenApplies": true,
|
|
885
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå A krävs",
|
|
886
|
+
"remediation": {
|
|
887
|
+
"description": "Det måste finnas ett sätt att hoppa över block av innehåll som upprepas på flera sidor (t.ex. navigering).",
|
|
888
|
+
"technicalGuidance": "Implementera en 'Hoppa till huvudinnehåll'-länk högst upp på sidan som blir synlig vid fokus. Använd semantiska landmärken (<main>, <nav>).",
|
|
889
|
+
"component": null,
|
|
890
|
+
"wcagTechnique": [
|
|
891
|
+
"G1",
|
|
892
|
+
"H69"
|
|
893
|
+
]
|
|
894
|
+
},
|
|
895
|
+
"holmdigitalInsight": {
|
|
896
|
+
"diggRisk": "medium",
|
|
897
|
+
"eaaImpact": "medium",
|
|
898
|
+
"swedishInterpretation": "Standard på alla offentliga webbplatser. Enormt hjälpsamt för tangentbordsanvändare.",
|
|
899
|
+
"commonMistakes": [
|
|
900
|
+
"Saknar skip-link",
|
|
901
|
+
"Skip-link trasig (flyttar inte fokus korrekt)",
|
|
902
|
+
"Landmärken saknas"
|
|
903
|
+
],
|
|
904
|
+
"priorityRationale": "Important for efficient navigation."
|
|
905
|
+
},
|
|
906
|
+
"testability": {
|
|
907
|
+
"automated": true,
|
|
908
|
+
"requiresManualCheck": true,
|
|
909
|
+
"pseudoAutomation": true,
|
|
910
|
+
"complexity": "simple"
|
|
911
|
+
},
|
|
912
|
+
"tags": [
|
|
913
|
+
"navigation",
|
|
914
|
+
"skip-link",
|
|
915
|
+
"keyboard",
|
|
916
|
+
"wcag2a"
|
|
917
|
+
]
|
|
918
|
+
},
|
|
919
|
+
{
|
|
920
|
+
"ruleId": "focus-order",
|
|
921
|
+
"wcagCriteria": "2.4.3",
|
|
922
|
+
"wcagLevel": "A",
|
|
923
|
+
"wcagTitle": "Focus Order",
|
|
924
|
+
"wcagVersion": "2.0",
|
|
925
|
+
"en301549Criteria": "9.2.4.3",
|
|
926
|
+
"en301549Title": "Focus order",
|
|
927
|
+
"en301549Chapter": 9,
|
|
928
|
+
"dosLagenApplies": true,
|
|
929
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå A krävs",
|
|
930
|
+
"remediation": {
|
|
931
|
+
"description": "Fokusordningen måste vara logisk och följa mening/struktur.",
|
|
932
|
+
"technicalGuidance": "Matcha DOM-ordning med visuell ordning. Undvik tabindex större än 0. Hantera fokus manuellt i modaler och menyer.",
|
|
933
|
+
"component": null,
|
|
934
|
+
"wcagTechnique": [
|
|
935
|
+
"G59",
|
|
936
|
+
"C27"
|
|
937
|
+
]
|
|
938
|
+
},
|
|
939
|
+
"holmdigitalInsight": {
|
|
940
|
+
"diggRisk": "high",
|
|
941
|
+
"eaaImpact": "high",
|
|
942
|
+
"swedishInterpretation": "Kritiskt för komplexa layouter (Grid/Flexbox) där visuell ordning kan skilja sig från DOM-ordning.",
|
|
943
|
+
"commonMistakes": [
|
|
944
|
+
"Fokus hoppar ologiskt",
|
|
945
|
+
"Menyer i fel ordning",
|
|
946
|
+
"Modal stänger och fokus återgår till toppen av sidan"
|
|
947
|
+
],
|
|
948
|
+
"priorityRationale": "Critical for keyboard navigation and understanding."
|
|
949
|
+
},
|
|
950
|
+
"testability": {
|
|
951
|
+
"automated": false,
|
|
952
|
+
"requiresManualCheck": true,
|
|
953
|
+
"pseudoAutomation": true,
|
|
954
|
+
"complexity": "moderate"
|
|
955
|
+
},
|
|
956
|
+
"tags": [
|
|
957
|
+
"focus",
|
|
958
|
+
"keyboard",
|
|
959
|
+
"navigation",
|
|
960
|
+
"wcag2a"
|
|
961
|
+
]
|
|
962
|
+
},
|
|
963
|
+
{
|
|
964
|
+
"ruleId": "link-purpose",
|
|
965
|
+
"wcagCriteria": "2.4.4",
|
|
966
|
+
"wcagLevel": "A",
|
|
967
|
+
"wcagTitle": "Link Purpose (In Context)",
|
|
968
|
+
"wcagVersion": "2.0",
|
|
969
|
+
"en301549Criteria": "9.2.4.4",
|
|
970
|
+
"en301549Title": "Link purpose (in context)",
|
|
971
|
+
"en301549Chapter": 9,
|
|
972
|
+
"dosLagenApplies": true,
|
|
973
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå A krävs",
|
|
974
|
+
"remediation": {
|
|
975
|
+
"description": "Syftet med varje länk kan förstås från länktexten ensam eller från länktexten tillsammans med dess sammanhang.",
|
|
976
|
+
"technicalGuidance": "Undvik 'Läs mer' eller 'Klicka här'. Skriv beskrivande länktexter. Använd aria-label om visuellt utrymme är begränsat men mer info behövs.",
|
|
977
|
+
"component": null,
|
|
978
|
+
"wcagTechnique": [
|
|
979
|
+
"G91",
|
|
980
|
+
"H30"
|
|
981
|
+
]
|
|
982
|
+
},
|
|
983
|
+
"holmdigitalInsight": {
|
|
984
|
+
"diggRisk": "medium",
|
|
985
|
+
"eaaImpact": "medium",
|
|
986
|
+
"swedishInterpretation": "Viktigt för användare som navigerar via länklistor (skärmläsare).",
|
|
987
|
+
"commonMistakes": [
|
|
988
|
+
"Många 'Läs mer'-länkar",
|
|
989
|
+
"Länkar som inte säger vart de leder"
|
|
990
|
+
],
|
|
991
|
+
"priorityRationale": "Important for efficient navigation."
|
|
992
|
+
},
|
|
993
|
+
"testability": {
|
|
994
|
+
"automated": true,
|
|
995
|
+
"requiresManualCheck": true,
|
|
996
|
+
"pseudoAutomation": false,
|
|
997
|
+
"complexity": "simple"
|
|
998
|
+
},
|
|
999
|
+
"tags": [
|
|
1000
|
+
"links",
|
|
1001
|
+
"navigation",
|
|
1002
|
+
"copywriting",
|
|
1003
|
+
"wcag2a"
|
|
1004
|
+
]
|
|
1005
|
+
},
|
|
1006
|
+
{
|
|
1007
|
+
"ruleId": "multiple-ways",
|
|
1008
|
+
"wcagCriteria": "2.4.5",
|
|
1009
|
+
"wcagLevel": "AA",
|
|
1010
|
+
"wcagTitle": "Multiple Ways",
|
|
1011
|
+
"wcagVersion": "2.0",
|
|
1012
|
+
"en301549Criteria": "9.2.4.5",
|
|
1013
|
+
"en301549Title": "Multiple ways",
|
|
1014
|
+
"en301549Chapter": 9,
|
|
1015
|
+
"dosLagenApplies": true,
|
|
1016
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå AA krävs",
|
|
1017
|
+
"remediation": {
|
|
1018
|
+
"description": "Det måste finnas mer än ett sätt att hitta en webbsida inom en uppsättning webbsidor.",
|
|
1019
|
+
"technicalGuidance": "Minst två av: Meny, Sök, Webbplatskarta, Länkar i innehållet.",
|
|
1020
|
+
"component": null,
|
|
1021
|
+
"wcagTechnique": [
|
|
1022
|
+
"G125",
|
|
1023
|
+
"G126"
|
|
1024
|
+
]
|
|
1025
|
+
},
|
|
1026
|
+
"holmdigitalInsight": {
|
|
1027
|
+
"diggRisk": "low",
|
|
1028
|
+
"eaaImpact": "low",
|
|
1029
|
+
"swedishInterpretation": "Ofta uppfyllt genom meny + sök. Webbplatskarta är bästa praxis.",
|
|
1030
|
+
"commonMistakes": [
|
|
1031
|
+
"Saknar sökfunktion på sajter med många sidor"
|
|
1032
|
+
],
|
|
1033
|
+
"priorityRationale": "Facilitates different navigation strategies."
|
|
1034
|
+
},
|
|
1035
|
+
"testability": {
|
|
1036
|
+
"automated": false,
|
|
1037
|
+
"requiresManualCheck": true,
|
|
1038
|
+
"pseudoAutomation": false,
|
|
1039
|
+
"complexity": "simple"
|
|
1040
|
+
},
|
|
1041
|
+
"tags": [
|
|
1042
|
+
"navigation",
|
|
1043
|
+
"search",
|
|
1044
|
+
"sitemap",
|
|
1045
|
+
"wcag2aa"
|
|
1046
|
+
]
|
|
1047
|
+
},
|
|
1048
|
+
{
|
|
1049
|
+
"ruleId": "headings-and-labels",
|
|
1050
|
+
"wcagCriteria": "2.4.6",
|
|
1051
|
+
"wcagLevel": "AA",
|
|
1052
|
+
"wcagTitle": "Headings and Labels",
|
|
1053
|
+
"wcagVersion": "2.0",
|
|
1054
|
+
"en301549Criteria": "9.2.4.6",
|
|
1055
|
+
"en301549Title": "Headings and labels",
|
|
1056
|
+
"en301549Chapter": 9,
|
|
1057
|
+
"dosLagenApplies": true,
|
|
1058
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå AA krävs",
|
|
1059
|
+
"remediation": {
|
|
1060
|
+
"description": "Rubriker och etiketter måste beskriva ämne eller syfte.",
|
|
1061
|
+
"technicalGuidance": "Skriv tydliga, beskrivande rubriker som ger mening åt innehållet under dem. Formuläretiketter måste vara begripliga.",
|
|
1062
|
+
"component": null,
|
|
1063
|
+
"wcagTechnique": [
|
|
1064
|
+
"G130"
|
|
1065
|
+
]
|
|
1066
|
+
},
|
|
1067
|
+
"holmdigitalInsight": {
|
|
1068
|
+
"diggRisk": "medium",
|
|
1069
|
+
"eaaImpact": "medium",
|
|
1070
|
+
"swedishInterpretation": "Handlar om redaktionell kvalitet och begriplighet.",
|
|
1071
|
+
"commonMistakes": [
|
|
1072
|
+
"Kryptiska rubriker",
|
|
1073
|
+
"Etiketter som inte matchar det som ska fyllas i"
|
|
1074
|
+
],
|
|
1075
|
+
"priorityRationale": "Important for cognitive accessibility."
|
|
1076
|
+
},
|
|
1077
|
+
"testability": {
|
|
1078
|
+
"automated": false,
|
|
1079
|
+
"requiresManualCheck": true,
|
|
1080
|
+
"pseudoAutomation": false,
|
|
1081
|
+
"complexity": "simple"
|
|
1082
|
+
},
|
|
1083
|
+
"tags": [
|
|
1084
|
+
"content",
|
|
1085
|
+
"headings",
|
|
1086
|
+
"labels",
|
|
1087
|
+
"wcag2aa"
|
|
1088
|
+
]
|
|
1089
|
+
},
|
|
1090
|
+
{
|
|
1091
|
+
"ruleId": "focus-visible",
|
|
1092
|
+
"wcagCriteria": "2.4.7",
|
|
1093
|
+
"wcagLevel": "AA",
|
|
1094
|
+
"wcagTitle": "Focus Visible",
|
|
1095
|
+
"wcagVersion": "2.0",
|
|
1096
|
+
"en301549Criteria": "9.2.4.7",
|
|
1097
|
+
"en301549Title": "Focus visible",
|
|
1098
|
+
"en301549Chapter": 9,
|
|
1099
|
+
"dosLagenApplies": true,
|
|
1100
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå AA krävs",
|
|
1101
|
+
"remediation": {
|
|
1102
|
+
"description": "Varje gränssnitt som kan hanteras med tangentbord måste ha en synlig fokusindikator.",
|
|
1103
|
+
"technicalGuidance": "Ta aldrig bort outline med CSS (outline: none) utan att ersätta det med en tydlig visuell indikator. Se till att fokusringens kontrast är tillräcklig (se 1.4.11).",
|
|
1104
|
+
"component": "@holmdigital/components/Button",
|
|
1105
|
+
"wcagTechnique": [
|
|
1106
|
+
"G149",
|
|
1107
|
+
"G165",
|
|
1108
|
+
"C15"
|
|
1109
|
+
]
|
|
1110
|
+
},
|
|
1111
|
+
"holmdigitalInsight": {
|
|
1112
|
+
"diggRisk": "high",
|
|
1113
|
+
"eaaImpact": "high",
|
|
1114
|
+
"swedishInterpretation": "Ett av de vanligaste felen. Ofta för att designers ogillar den 'blå ringen'.",
|
|
1115
|
+
"commonMistakes": [
|
|
1116
|
+
"outline: none i CSS-reset",
|
|
1117
|
+
"Egna knappar som saknar :focus-stil"
|
|
1118
|
+
],
|
|
1119
|
+
"priorityRationale": "Critical: Without visible focus, the keyboard user doesn't know where they are."
|
|
1120
|
+
},
|
|
1121
|
+
"testability": {
|
|
1122
|
+
"automated": true,
|
|
1123
|
+
"requiresManualCheck": true,
|
|
1124
|
+
"pseudoAutomation": true,
|
|
1125
|
+
"complexity": "simple"
|
|
1126
|
+
},
|
|
1127
|
+
"tags": [
|
|
1128
|
+
"focus",
|
|
1129
|
+
"visual",
|
|
1130
|
+
"keyboard",
|
|
1131
|
+
"wcag2aa"
|
|
1132
|
+
]
|
|
1133
|
+
},
|
|
1134
|
+
{
|
|
1135
|
+
"ruleId": "language-of-page",
|
|
1136
|
+
"wcagCriteria": "3.1.1",
|
|
1137
|
+
"wcagLevel": "A",
|
|
1138
|
+
"wcagTitle": "Language of Page",
|
|
1139
|
+
"wcagVersion": "2.0",
|
|
1140
|
+
"en301549Criteria": "9.3.1.1",
|
|
1141
|
+
"en301549Title": "Language of page",
|
|
1142
|
+
"en301549Chapter": 9,
|
|
1143
|
+
"dosLagenApplies": true,
|
|
1144
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå A krävs",
|
|
1145
|
+
"remediation": {
|
|
1146
|
+
"description": "Det förvalda mänskliga språket för varje webbsida måste kunna bestämmas programmatiskt.",
|
|
1147
|
+
"technicalGuidance": "Sätt 'lang'-attributet på <html>-elementet. T.ex. <html lang='sv'> för svenska.",
|
|
1148
|
+
"component": null,
|
|
1149
|
+
"wcagTechnique": [
|
|
1150
|
+
"H57"
|
|
1151
|
+
]
|
|
1152
|
+
},
|
|
1153
|
+
"holmdigitalInsight": {
|
|
1154
|
+
"diggRisk": "high",
|
|
1155
|
+
"eaaImpact": "high",
|
|
1156
|
+
"swedishInterpretation": "Grundläggande för skärmläsning. Utan detta gissar skärmläsaren språk, vilket ofta leder till fel uttal.",
|
|
1157
|
+
"commonMistakes": [
|
|
1158
|
+
"Lang-attribut saknas",
|
|
1159
|
+
"Fel språkkod (t.ex. 'en' på en svensk sida)"
|
|
1160
|
+
],
|
|
1161
|
+
"priorityRationale": "Critical for screen reader users."
|
|
1162
|
+
},
|
|
1163
|
+
"testability": {
|
|
1164
|
+
"automated": true,
|
|
1165
|
+
"requiresManualCheck": false,
|
|
1166
|
+
"pseudoAutomation": false,
|
|
1167
|
+
"complexity": "simple"
|
|
1168
|
+
},
|
|
1169
|
+
"tags": [
|
|
1170
|
+
"content",
|
|
1171
|
+
"language",
|
|
1172
|
+
"wcag2a"
|
|
1173
|
+
]
|
|
1174
|
+
},
|
|
1175
|
+
{
|
|
1176
|
+
"ruleId": "language-of-parts",
|
|
1177
|
+
"wcagCriteria": "3.1.2",
|
|
1178
|
+
"wcagLevel": "AA",
|
|
1179
|
+
"wcagTitle": "Language of Parts",
|
|
1180
|
+
"wcagVersion": "2.0",
|
|
1181
|
+
"en301549Criteria": "9.3.1.2",
|
|
1182
|
+
"en301549Title": "Language of parts",
|
|
1183
|
+
"en301549Chapter": 9,
|
|
1184
|
+
"dosLagenApplies": true,
|
|
1185
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå AA krävs",
|
|
1186
|
+
"remediation": {
|
|
1187
|
+
"description": "Det mänskliga språket för varje passage eller fras i innehållet måste kunna bestämmas programmatiskt.",
|
|
1188
|
+
"technicalGuidance": "Använd lang-attributet på element som skiljer sig från sidans huvudspråk. T.ex. <span lang='en'>Hello</span> på en svensk sida.",
|
|
1189
|
+
"component": null,
|
|
1190
|
+
"wcagTechnique": [
|
|
1191
|
+
"H58"
|
|
1192
|
+
]
|
|
1193
|
+
},
|
|
1194
|
+
"holmdigitalInsight": {
|
|
1195
|
+
"diggRisk": "low",
|
|
1196
|
+
"eaaImpact": "low",
|
|
1197
|
+
"swedishInterpretation": "Sällan ett kritiskt fel om det inte avsevärt hindrar förståelsen.",
|
|
1198
|
+
"commonMistakes": [
|
|
1199
|
+
"Utländska citat i text utan uppmärkning"
|
|
1200
|
+
],
|
|
1201
|
+
"priorityRationale": "Important for correct pronunciation."
|
|
1202
|
+
},
|
|
1203
|
+
"testability": {
|
|
1204
|
+
"automated": false,
|
|
1205
|
+
"requiresManualCheck": true,
|
|
1206
|
+
"pseudoAutomation": true,
|
|
1207
|
+
"complexity": "moderate"
|
|
1208
|
+
},
|
|
1209
|
+
"tags": [
|
|
1210
|
+
"content",
|
|
1211
|
+
"language",
|
|
1212
|
+
"wcag2aa"
|
|
1213
|
+
]
|
|
1214
|
+
},
|
|
1215
|
+
{
|
|
1216
|
+
"ruleId": "on-focus",
|
|
1217
|
+
"wcagCriteria": "3.2.1",
|
|
1218
|
+
"wcagLevel": "A",
|
|
1219
|
+
"wcagTitle": "On Focus",
|
|
1220
|
+
"wcagVersion": "2.0",
|
|
1221
|
+
"en301549Criteria": "9.3.2.1",
|
|
1222
|
+
"en301549Title": "On focus",
|
|
1223
|
+
"en301549Chapter": 9,
|
|
1224
|
+
"dosLagenApplies": true,
|
|
1225
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå A krävs",
|
|
1226
|
+
"remediation": {
|
|
1227
|
+
"description": "När en komponent får fokus får den inte initiera en förändring av sammanhang.",
|
|
1228
|
+
"technicalGuidance": "Öppna inte nya fönster, skicka inte formulär eller flytta fokus automatiskt bara för att användaren tabbar till ett fält.",
|
|
1229
|
+
"component": null,
|
|
1230
|
+
"wcagTechnique": [
|
|
1231
|
+
"G107"
|
|
1232
|
+
]
|
|
1233
|
+
},
|
|
1234
|
+
"holmdigitalInsight": {
|
|
1235
|
+
"diggRisk": "high",
|
|
1236
|
+
"eaaImpact": "high",
|
|
1237
|
+
"swedishInterpretation": "Mycket förvirrande för användare. Skapar en känsla av bristande kontroll.",
|
|
1238
|
+
"commonMistakes": [
|
|
1239
|
+
"Dropdowns som navigerar direkt vid val (utan 'Gå'-knapp)",
|
|
1240
|
+
"Formulär som auto-skickas vid fokus på sista fältet"
|
|
1241
|
+
],
|
|
1242
|
+
"priorityRationale": "Important for predictability."
|
|
1243
|
+
},
|
|
1244
|
+
"testability": {
|
|
1245
|
+
"automated": false,
|
|
1246
|
+
"requiresManualCheck": true,
|
|
1247
|
+
"pseudoAutomation": true,
|
|
1248
|
+
"complexity": "moderate"
|
|
1249
|
+
},
|
|
1250
|
+
"tags": [
|
|
1251
|
+
"interaction",
|
|
1252
|
+
"focus",
|
|
1253
|
+
"predictability",
|
|
1254
|
+
"wcag2a"
|
|
1255
|
+
]
|
|
1256
|
+
},
|
|
1257
|
+
{
|
|
1258
|
+
"ruleId": "on-input",
|
|
1259
|
+
"wcagCriteria": "3.2.2",
|
|
1260
|
+
"wcagLevel": "A",
|
|
1261
|
+
"wcagTitle": "On Input",
|
|
1262
|
+
"wcagVersion": "2.0",
|
|
1263
|
+
"en301549Criteria": "9.3.2.2",
|
|
1264
|
+
"en301549Title": "On input",
|
|
1265
|
+
"en301549Chapter": 9,
|
|
1266
|
+
"dosLagenApplies": true,
|
|
1267
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå A krävs",
|
|
1268
|
+
"remediation": {
|
|
1269
|
+
"description": "Att ändra inställningen för någon komponent orsakar inte automatiskt en förändring av sammanhang om inte användaren har informerats om beteendet innan komponenten används.",
|
|
1270
|
+
"technicalGuidance": "Informera användaren om att val i en lista laddar om sidan. Helst, lägg till en knapp för att bekräfta valet.",
|
|
1271
|
+
"component": null,
|
|
1272
|
+
"wcagTechnique": [
|
|
1273
|
+
"G13",
|
|
1274
|
+
"H32"
|
|
1275
|
+
]
|
|
1276
|
+
},
|
|
1277
|
+
"holmdigitalInsight": {
|
|
1278
|
+
"diggRisk": "medium",
|
|
1279
|
+
"eaaImpact": "medium",
|
|
1280
|
+
"swedishInterpretation": "Vanligt i filtreringsfunktioner.",
|
|
1281
|
+
"commonMistakes": [
|
|
1282
|
+
"Kryssrutor som laddar om sidan direkt",
|
|
1283
|
+
"Filtrering som flyttar fokus"
|
|
1284
|
+
],
|
|
1285
|
+
"priorityRationale": "Important for predictability."
|
|
1286
|
+
},
|
|
1287
|
+
"testability": {
|
|
1288
|
+
"automated": false,
|
|
1289
|
+
"requiresManualCheck": true,
|
|
1290
|
+
"pseudoAutomation": true,
|
|
1291
|
+
"complexity": "moderate"
|
|
1292
|
+
},
|
|
1293
|
+
"tags": [
|
|
1294
|
+
"interaction",
|
|
1295
|
+
"input",
|
|
1296
|
+
"predictability",
|
|
1297
|
+
"wcag2a"
|
|
1298
|
+
]
|
|
1299
|
+
},
|
|
1300
|
+
{
|
|
1301
|
+
"ruleId": "consistent-navigation",
|
|
1302
|
+
"wcagCriteria": "3.2.3",
|
|
1303
|
+
"wcagLevel": "AA",
|
|
1304
|
+
"wcagTitle": "Consistent Navigation",
|
|
1305
|
+
"wcagVersion": "2.0",
|
|
1306
|
+
"en301549Criteria": "9.3.2.3",
|
|
1307
|
+
"en301549Title": "Consistent navigation",
|
|
1308
|
+
"en301549Chapter": 9,
|
|
1309
|
+
"dosLagenApplies": true,
|
|
1310
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå AA krävs",
|
|
1311
|
+
"remediation": {
|
|
1312
|
+
"description": "Navigeringsmekanismer som upprepas på flera webbsidor förekommer i samma relativa ordning varje gång de upprepas.",
|
|
1313
|
+
"technicalGuidance": "Huvudmenyn ska se likadan ut och finnas på samma plats på alla sidor. Sökfunktionen likaså.",
|
|
1314
|
+
"component": null,
|
|
1315
|
+
"wcagTechnique": [
|
|
1316
|
+
"G61"
|
|
1317
|
+
]
|
|
1318
|
+
},
|
|
1319
|
+
"holmdigitalInsight": {
|
|
1320
|
+
"diggRisk": "medium",
|
|
1321
|
+
"eaaImpact": "medium",
|
|
1322
|
+
"swedishInterpretation": "Förutsägbarhet är nyckeln till kognitiv tillgänglighet.",
|
|
1323
|
+
"commonMistakes": [
|
|
1324
|
+
"Menyer som byter plats eller ordning på olika sidor"
|
|
1325
|
+
],
|
|
1326
|
+
"priorityRationale": "Facilitates learning."
|
|
1327
|
+
},
|
|
1328
|
+
"testability": {
|
|
1329
|
+
"automated": false,
|
|
1330
|
+
"requiresManualCheck": true,
|
|
1331
|
+
"pseudoAutomation": false,
|
|
1332
|
+
"complexity": "simple"
|
|
1333
|
+
},
|
|
1334
|
+
"tags": [
|
|
1335
|
+
"navigation",
|
|
1336
|
+
"design",
|
|
1337
|
+
"consistency",
|
|
1338
|
+
"wcag2aa"
|
|
1339
|
+
]
|
|
1340
|
+
},
|
|
1341
|
+
{
|
|
1342
|
+
"ruleId": "consistent-identification",
|
|
1343
|
+
"wcagCriteria": "3.2.4",
|
|
1344
|
+
"wcagLevel": "AA",
|
|
1345
|
+
"wcagTitle": "Consistent Identification",
|
|
1346
|
+
"wcagVersion": "2.0",
|
|
1347
|
+
"en301549Criteria": "9.3.2.4",
|
|
1348
|
+
"en301549Title": "Consistent identification",
|
|
1349
|
+
"en301549Chapter": 9,
|
|
1350
|
+
"dosLagenApplies": true,
|
|
1351
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå AA krävs",
|
|
1352
|
+
"remediation": {
|
|
1353
|
+
"description": "Komponenter som har samma funktionalitet inom en uppsättning webbsidor identifieras konsekvent.",
|
|
1354
|
+
"technicalGuidance": "Kalla inte sök för 'Sök' på en sida och 'Hitta' på en annan. Använd samma ikon för samma funktion.",
|
|
1355
|
+
"component": null,
|
|
1356
|
+
"wcagTechnique": [
|
|
1357
|
+
"G197"
|
|
1358
|
+
]
|
|
1359
|
+
},
|
|
1360
|
+
"holmdigitalInsight": {
|
|
1361
|
+
"diggRisk": "low",
|
|
1362
|
+
"eaaImpact": "low",
|
|
1363
|
+
"swedishInterpretation": "Viktigt för användbarhet.",
|
|
1364
|
+
"commonMistakes": [
|
|
1365
|
+
"Inkonsekvent namngivning",
|
|
1366
|
+
"Olika ikoner för skriv ut/ladda ner"
|
|
1367
|
+
],
|
|
1368
|
+
"priorityRationale": "Reduces cognitive load."
|
|
1369
|
+
},
|
|
1370
|
+
"testability": {
|
|
1371
|
+
"automated": false,
|
|
1372
|
+
"requiresManualCheck": true,
|
|
1373
|
+
"pseudoAutomation": false,
|
|
1374
|
+
"complexity": "simple"
|
|
1375
|
+
},
|
|
1376
|
+
"tags": [
|
|
1377
|
+
"content",
|
|
1378
|
+
"icons",
|
|
1379
|
+
"consistency",
|
|
1380
|
+
"wcag2aa"
|
|
1381
|
+
]
|
|
1382
|
+
},
|
|
1383
|
+
{
|
|
1384
|
+
"ruleId": "error-identification",
|
|
1385
|
+
"wcagCriteria": "3.3.1",
|
|
1386
|
+
"wcagLevel": "A",
|
|
1387
|
+
"wcagTitle": "Error Identification",
|
|
1388
|
+
"wcagVersion": "2.0",
|
|
1389
|
+
"en301549Criteria": "9.3.3.1",
|
|
1390
|
+
"en301549Title": "Error identification",
|
|
1391
|
+
"en301549Chapter": 9,
|
|
1392
|
+
"dosLagenApplies": true,
|
|
1393
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå A krävs",
|
|
1394
|
+
"remediation": {
|
|
1395
|
+
"description": "Om ett inmatningsfel upptäcks automatiskt, identifieras objektet som har fel och felet beskrivs för användaren i text.",
|
|
1396
|
+
"technicalGuidance": "Visa felmeddelande nära fältet. Koppla med aria-describedby eller inkludera i label. Färga inte bara fältet rött.",
|
|
1397
|
+
"component": "@holmdigital/components/FormField",
|
|
1398
|
+
"wcagTechnique": [
|
|
1399
|
+
"G83",
|
|
1400
|
+
"SCR18"
|
|
1401
|
+
]
|
|
1402
|
+
},
|
|
1403
|
+
"holmdigitalInsight": {
|
|
1404
|
+
"diggRisk": "high",
|
|
1405
|
+
"eaaImpact": "high",
|
|
1406
|
+
"swedishInterpretation": "Kritiskt för att kunna slutföra uppgifter. Generella felmeddelanden ('Något gick fel') godkänns inte om felet är specifikt.",
|
|
1407
|
+
"commonMistakes": [
|
|
1408
|
+
"'Ogiltigt värde' utan förklaring",
|
|
1409
|
+
"Felmeddelande inte synligt för skärmläsare"
|
|
1410
|
+
],
|
|
1411
|
+
"priorityRationale": "Critical for error handling."
|
|
1412
|
+
},
|
|
1413
|
+
"testability": {
|
|
1414
|
+
"automated": false,
|
|
1415
|
+
"requiresManualCheck": true,
|
|
1416
|
+
"pseudoAutomation": true,
|
|
1417
|
+
"complexity": "moderate"
|
|
1418
|
+
},
|
|
1419
|
+
"tags": [
|
|
1420
|
+
"forms",
|
|
1421
|
+
"errors",
|
|
1422
|
+
"wcag2a"
|
|
1423
|
+
]
|
|
1424
|
+
},
|
|
1425
|
+
{
|
|
1426
|
+
"ruleId": "error-suggestion",
|
|
1427
|
+
"wcagCriteria": "3.3.3",
|
|
1428
|
+
"wcagLevel": "AA",
|
|
1429
|
+
"wcagTitle": "Error Suggestion",
|
|
1430
|
+
"wcagVersion": "2.0",
|
|
1431
|
+
"en301549Criteria": "9.3.3.3",
|
|
1432
|
+
"en301549Title": "Error suggestion",
|
|
1433
|
+
"en301549Chapter": 9,
|
|
1434
|
+
"dosLagenApplies": true,
|
|
1435
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå AA krävs",
|
|
1436
|
+
"remediation": {
|
|
1437
|
+
"description": "Om ett inmatningsfel upptäcks automatiskt och förslag till korrigering är kända, ges förslagen till användaren.",
|
|
1438
|
+
"technicalGuidance": "Om datumformat är fel, visa vilket format som krävs (ÅÅÅÅ-MM-DD). Erbjud stavningsförslag vid sök ('Menade du...?').",
|
|
1439
|
+
"component": "@holmdigital/components/FormField",
|
|
1440
|
+
"wcagTechnique": [
|
|
1441
|
+
"G177"
|
|
1442
|
+
]
|
|
1443
|
+
},
|
|
1444
|
+
"holmdigitalInsight": {
|
|
1445
|
+
"diggRisk": "medium",
|
|
1446
|
+
"eaaImpact": "medium",
|
|
1447
|
+
"swedishInterpretation": "Handlar om att vara hjälpsam. Minskar supportärenden.",
|
|
1448
|
+
"commonMistakes": [
|
|
1449
|
+
"Säger bara 'Fel' utan att säga hur man fixar det"
|
|
1450
|
+
],
|
|
1451
|
+
"priorityRationale": "Facilitates correction."
|
|
1452
|
+
},
|
|
1453
|
+
"testability": {
|
|
1454
|
+
"automated": false,
|
|
1455
|
+
"requiresManualCheck": true,
|
|
1456
|
+
"pseudoAutomation": true,
|
|
1457
|
+
"complexity": "moderate"
|
|
1458
|
+
},
|
|
1459
|
+
"tags": [
|
|
1460
|
+
"forms",
|
|
1461
|
+
"errors",
|
|
1462
|
+
"guidance",
|
|
1463
|
+
"wcag2aa"
|
|
1464
|
+
]
|
|
1465
|
+
},
|
|
1466
|
+
{
|
|
1467
|
+
"ruleId": "error-prevention",
|
|
1468
|
+
"wcagCriteria": "3.3.4",
|
|
1469
|
+
"wcagLevel": "AA",
|
|
1470
|
+
"wcagTitle": "Error Prevention (Legal, Financial, Data)",
|
|
1471
|
+
"wcagVersion": "2.0",
|
|
1472
|
+
"en301549Criteria": "9.3.3.4",
|
|
1473
|
+
"en301549Title": "Error prevention (legal, financial, data)",
|
|
1474
|
+
"en301549Chapter": 9,
|
|
1475
|
+
"dosLagenApplies": true,
|
|
1476
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå AA krävs",
|
|
1477
|
+
"remediation": {
|
|
1478
|
+
"description": "För webbsidor som orsakar juridiska åtaganden eller finansiella transaktioner måste användare kunna: Ångra, Kontrollera eller Bekräfta.",
|
|
1479
|
+
"technicalGuidance": "Erbjud en sammanfattningssida innan slutgiltig inskickning med möjlighet att redigera.",
|
|
1480
|
+
"component": null,
|
|
1481
|
+
"wcagTechnique": [
|
|
1482
|
+
"G164",
|
|
1483
|
+
"G98"
|
|
1484
|
+
]
|
|
1485
|
+
},
|
|
1486
|
+
"holmdigitalInsight": {
|
|
1487
|
+
"diggRisk": "high",
|
|
1488
|
+
"eaaImpact": "high",
|
|
1489
|
+
"swedishInterpretation": "Absolut krav för e-handel och juridiska beslut.",
|
|
1490
|
+
"commonMistakes": [
|
|
1491
|
+
"Direktköp utan bekräftelse",
|
|
1492
|
+
"Inskickning av bindande avtal utan granskning"
|
|
1493
|
+
],
|
|
1494
|
+
"priorityRationale": "Critical to avoid serious consequences of mistakes."
|
|
1495
|
+
},
|
|
1496
|
+
"testability": {
|
|
1497
|
+
"automated": false,
|
|
1498
|
+
"requiresManualCheck": true,
|
|
1499
|
+
"pseudoAutomation": false,
|
|
1500
|
+
"complexity": "moderate"
|
|
1501
|
+
},
|
|
1502
|
+
"tags": [
|
|
1503
|
+
"forms",
|
|
1504
|
+
"legal",
|
|
1505
|
+
"financial",
|
|
1506
|
+
"wcag2aa"
|
|
1507
|
+
]
|
|
1508
|
+
},
|
|
1509
|
+
{
|
|
1510
|
+
"ruleId": "parsing",
|
|
1511
|
+
"wcagCriteria": "4.1.1",
|
|
1512
|
+
"wcagLevel": "A",
|
|
1513
|
+
"wcagTitle": "Parsing",
|
|
1514
|
+
"wcagVersion": "2.0",
|
|
1515
|
+
"en301549Criteria": "9.4.1.1",
|
|
1516
|
+
"en301549Title": "Parsing",
|
|
1517
|
+
"en301549Chapter": 9,
|
|
1518
|
+
"dosLagenApplies": true,
|
|
1519
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå A krävs",
|
|
1520
|
+
"remediation": {
|
|
1521
|
+
"description": "Uppdatering: Från WCAG 2.2 är detta kriterium borttaget/föråldrat, men i WCAG 2.1/EN 301 549 gäller det: ID:n måste vara unika, element korrekt nästlade.",
|
|
1522
|
+
"technicalGuidance": "Validera HTML. Se till att id-attribut är unika på sidan. Stäng alla taggar korrekt.",
|
|
1523
|
+
"component": null,
|
|
1524
|
+
"wcagTechnique": [
|
|
1525
|
+
"H88"
|
|
1526
|
+
]
|
|
1527
|
+
},
|
|
1528
|
+
"holmdigitalInsight": {
|
|
1529
|
+
"diggRisk": "low",
|
|
1530
|
+
"eaaImpact": "low",
|
|
1531
|
+
"swedishInterpretation": "Mindre prioriterat nu då moderna webbläsare hanterar fel bra, men dubbla ID:n kan fortfarande förstöra ARIA.",
|
|
1532
|
+
"commonMistakes": [
|
|
1533
|
+
"Dubbla ID:n",
|
|
1534
|
+
"Trasig HTML-struktur"
|
|
1535
|
+
],
|
|
1536
|
+
"priorityRationale": "Technical hygiene factor."
|
|
1537
|
+
},
|
|
1538
|
+
"testability": {
|
|
1539
|
+
"automated": true,
|
|
1540
|
+
"requiresManualCheck": false,
|
|
1541
|
+
"pseudoAutomation": false,
|
|
1542
|
+
"complexity": "simple"
|
|
1543
|
+
},
|
|
1544
|
+
"tags": [
|
|
1545
|
+
"code",
|
|
1546
|
+
"html",
|
|
1547
|
+
"parsing",
|
|
1548
|
+
"wcag2a"
|
|
1549
|
+
]
|
|
1550
|
+
},
|
|
1551
|
+
{
|
|
1552
|
+
"ruleId": "name-role-value",
|
|
1553
|
+
"wcagCriteria": "4.1.2",
|
|
1554
|
+
"wcagLevel": "A",
|
|
1555
|
+
"wcagTitle": "Name, Role, Value",
|
|
1556
|
+
"wcagVersion": "2.0",
|
|
1557
|
+
"en301549Criteria": "9.4.1.2",
|
|
1558
|
+
"en301549Title": "Name, role, value",
|
|
1559
|
+
"en301549Chapter": 9,
|
|
1560
|
+
"dosLagenApplies": true,
|
|
1561
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå A krävs",
|
|
1562
|
+
"remediation": {
|
|
1563
|
+
"description": "För alla komponenter ska namn och roll kunna bestämmas programmatiskt. Värden ska kunna sättas programmatiskt.",
|
|
1564
|
+
"technicalGuidance": "Använd nativa HTML-element när det går. Om anpassade komponenter används, måste ARIA (role, aria-label, aria-valuenow) användas korrekt.",
|
|
1565
|
+
"component": null,
|
|
1566
|
+
"wcagTechnique": [
|
|
1567
|
+
"ARIA4",
|
|
1568
|
+
"ARIA5"
|
|
1569
|
+
]
|
|
1570
|
+
},
|
|
1571
|
+
"holmdigitalInsight": {
|
|
1572
|
+
"diggRisk": "critical",
|
|
1573
|
+
"eaaImpact": "critical",
|
|
1574
|
+
"swedishInterpretation": "Detta är grunden för hur skärmläsare fungerar med moderna webbappar. Utan detta är appen 'osynlig' för hjälpmedel.",
|
|
1575
|
+
"commonMistakes": [
|
|
1576
|
+
"Div-knappar utan roll",
|
|
1577
|
+
"Egna kryssrutor utan aria-checked",
|
|
1578
|
+
"Saknar tillgängligt namn"
|
|
1579
|
+
],
|
|
1580
|
+
"priorityRationale": "Absolutely critical for compatibility."
|
|
1581
|
+
},
|
|
1582
|
+
"testability": {
|
|
1583
|
+
"automated": true,
|
|
1584
|
+
"requiresManualCheck": true,
|
|
1585
|
+
"pseudoAutomation": true,
|
|
1586
|
+
"complexity": "complex"
|
|
1587
|
+
},
|
|
1588
|
+
"tags": [
|
|
1589
|
+
"code",
|
|
1590
|
+
"aria",
|
|
1591
|
+
"interaction",
|
|
1592
|
+
"wcag2a"
|
|
1593
|
+
]
|
|
1594
|
+
},
|
|
1595
|
+
{
|
|
1596
|
+
"ruleId": "status-messages",
|
|
1597
|
+
"wcagCriteria": "4.1.3",
|
|
1598
|
+
"wcagLevel": "AA",
|
|
1599
|
+
"wcagTitle": "Status Messages",
|
|
1600
|
+
"wcagVersion": "2.1",
|
|
1601
|
+
"en301549Criteria": "9.4.1.3",
|
|
1602
|
+
"en301549Title": "Status messages",
|
|
1603
|
+
"en301549Chapter": 9,
|
|
1604
|
+
"dosLagenApplies": true,
|
|
1605
|
+
"dosLagenReference": "Lag 2018:1937 §7, WCAG 2.1 nivå AA krävs",
|
|
1606
|
+
"remediation": {
|
|
1607
|
+
"description": "Statusmeddelanden ska kunna presenteras för användaren utan att motta fokus (via skärmläsare).",
|
|
1608
|
+
"technicalGuidance": "Använd aria-live regioner (polite/assertive) eller role='status'/'alert' för meddelanden som dyker upp dynamiskt (t.ex. 'Sparat', 'Sökning klar').",
|
|
1609
|
+
"component": null,
|
|
1610
|
+
"wcagTechnique": [
|
|
1611
|
+
"ARIA19",
|
|
1612
|
+
"ARIA22"
|
|
1613
|
+
]
|
|
1614
|
+
},
|
|
1615
|
+
"holmdigitalInsight": {
|
|
1616
|
+
"diggRisk": "medium",
|
|
1617
|
+
"eaaImpact": "medium",
|
|
1618
|
+
"swedishInterpretation": "Viktigt i SPA:er där sidladdning inte sker. Användaren måste veta att något hänt.",
|
|
1619
|
+
"commonMistakes": [
|
|
1620
|
+
"Tysta uppdateringar av varukorg/sökresultat",
|
|
1621
|
+
"Toast-notiser som inte annonseras"
|
|
1622
|
+
],
|
|
1623
|
+
"priorityRationale": "Provides feedback to users without sight."
|
|
1624
|
+
},
|
|
1625
|
+
"testability": {
|
|
1626
|
+
"automated": false,
|
|
1627
|
+
"requiresManualCheck": true,
|
|
1628
|
+
"pseudoAutomation": true,
|
|
1629
|
+
"complexity": "moderate"
|
|
1630
|
+
},
|
|
1631
|
+
"tags": [
|
|
1632
|
+
"aria",
|
|
1633
|
+
"updates",
|
|
1634
|
+
"feedback",
|
|
1635
|
+
"wcag21aa"
|
|
1636
|
+
]
|
|
1637
|
+
},
|
|
1638
|
+
{
|
|
1639
|
+
"ruleId": "landmark-one-main",
|
|
1640
|
+
"wcagCriteria": "1.3.1",
|
|
1641
|
+
"wcagLevel": "A",
|
|
1642
|
+
"wcagTitle": "Info and Relationships",
|
|
1643
|
+
"wcagVersion": "2.0",
|
|
1644
|
+
"en301549Criteria": "9.1.3.1",
|
|
1645
|
+
"en301549Title": "Info and relationships",
|
|
1646
|
+
"en301549Chapter": 9,
|
|
1647
|
+
"dosLagenApplies": true,
|
|
1648
|
+
"dosLagenReference": "9 § (Struktur och relationer)",
|
|
1649
|
+
"remediation": {
|
|
1650
|
+
"description": "Sidan måste ha exakt ett 'main' (huvudsakligt innehåll) landmärke.",
|
|
1651
|
+
"technicalGuidance": "Använd <main>-elementet en gång per sida för att identifiera huvudinnehållet. Undvik att ha flera <main> utan unika etiketter, eller att missa det helt.",
|
|
1652
|
+
"wcagTechnique": [
|
|
1653
|
+
"ARIA11",
|
|
1654
|
+
"H97"
|
|
1655
|
+
]
|
|
1656
|
+
},
|
|
1657
|
+
"holmdigitalInsight": {
|
|
1658
|
+
"diggRisk": "medium",
|
|
1659
|
+
"eaaImpact": "medium",
|
|
1660
|
+
"swedishInterpretation": "Skärmläsaranvändare förlitar sig på landmärken för att snabbt navigera till innehållet. Saknad <main> gör det svårt att hoppa över navigering.",
|
|
1661
|
+
"commonMistakes": [
|
|
1662
|
+
"Använder <div id='main'> istället för <main>",
|
|
1663
|
+
"Har flera <main>-element"
|
|
1664
|
+
]
|
|
1665
|
+
},
|
|
1666
|
+
"testability": {
|
|
1667
|
+
"automated": true,
|
|
1668
|
+
"requiresManualCheck": false,
|
|
1669
|
+
"pseudoAutomation": true,
|
|
1670
|
+
"complexity": "simple"
|
|
1671
|
+
},
|
|
1672
|
+
"tags": [
|
|
1673
|
+
"wcag2a",
|
|
1674
|
+
"wcag131",
|
|
1675
|
+
"landmark"
|
|
1676
|
+
]
|
|
1677
|
+
},
|
|
1678
|
+
{
|
|
1679
|
+
"ruleId": "page-has-heading-one",
|
|
1680
|
+
"wcagCriteria": "1.3.1",
|
|
1681
|
+
"wcagLevel": "A",
|
|
1682
|
+
"wcagTitle": "Info and Relationships",
|
|
1683
|
+
"wcagVersion": "2.0",
|
|
1684
|
+
"en301549Criteria": "9.1.3.1",
|
|
1685
|
+
"en301549Title": "Info and relationships",
|
|
1686
|
+
"en301549Chapter": 9,
|
|
1687
|
+
"dosLagenApplies": true,
|
|
1688
|
+
"dosLagenReference": "9 § (Struktur och relationer)",
|
|
1689
|
+
"remediation": {
|
|
1690
|
+
"description": "Sidan måste ha en rubrik på nivå 1 (<h1>).",
|
|
1691
|
+
"technicalGuidance": "Se till att det finns exakt en <h1> som beskriver sidans unika innehåll.",
|
|
1692
|
+
"wcagTechnique": [
|
|
1693
|
+
"H42"
|
|
1694
|
+
]
|
|
1695
|
+
},
|
|
1696
|
+
"holmdigitalInsight": {
|
|
1697
|
+
"diggRisk": "high",
|
|
1698
|
+
"eaaImpact": "high",
|
|
1699
|
+
"swedishInterpretation": "En tydlig <h1> är kritisk för att användare ska förstå var de hamnat. Det är ofta det första en skärmläsaranvändare letar efter.",
|
|
1700
|
+
"commonMistakes": [
|
|
1701
|
+
"Börjar rubriker på <h2>",
|
|
1702
|
+
"Använder logotyp som enda <h1> utan text"
|
|
1703
|
+
]
|
|
1704
|
+
},
|
|
1705
|
+
"testability": {
|
|
1706
|
+
"automated": true,
|
|
1707
|
+
"requiresManualCheck": false,
|
|
1708
|
+
"pseudoAutomation": true,
|
|
1709
|
+
"complexity": "simple"
|
|
1710
|
+
},
|
|
1711
|
+
"tags": [
|
|
1712
|
+
"wcag2a",
|
|
1713
|
+
"wcag131",
|
|
1714
|
+
"heading"
|
|
1715
|
+
]
|
|
1716
|
+
},
|
|
1717
|
+
{
|
|
1718
|
+
"ruleId": "heading-order",
|
|
1719
|
+
"wcagCriteria": "1.3.1",
|
|
1720
|
+
"wcagLevel": "A",
|
|
1721
|
+
"wcagTitle": "Info and Relationships",
|
|
1722
|
+
"wcagVersion": "2.0",
|
|
1723
|
+
"en301549Criteria": "9.1.3.1",
|
|
1724
|
+
"en301549Title": "Info and relationships",
|
|
1725
|
+
"en301549Chapter": 9,
|
|
1726
|
+
"dosLagenApplies": true,
|
|
1727
|
+
"dosLagenReference": "9 § (Struktur och relationer)",
|
|
1728
|
+
"remediation": {
|
|
1729
|
+
"description": "Rubriker måste följa en logisk ordning (h1 -> h2 -> h3).",
|
|
1730
|
+
"technicalGuidance": "Hoppa inte över rubriknivåer (t.ex. direkt från h1 till h3).",
|
|
1731
|
+
"wcagTechnique": [
|
|
1732
|
+
"G141"
|
|
1733
|
+
]
|
|
1734
|
+
},
|
|
1735
|
+
"holmdigitalInsight": {
|
|
1736
|
+
"diggRisk": "medium",
|
|
1737
|
+
"eaaImpact": "medium",
|
|
1738
|
+
"swedishInterpretation": "Felaktig rubrikstruktur gör det svårt för skärmläsare att navigera. Hoppa aldrig över nivåer.",
|
|
1739
|
+
"commonMistakes": [
|
|
1740
|
+
"Använder h3 för utseende istället för struktur"
|
|
1741
|
+
]
|
|
1742
|
+
},
|
|
1743
|
+
"testability": {
|
|
1744
|
+
"automated": true,
|
|
1745
|
+
"requiresManualCheck": false,
|
|
1746
|
+
"pseudoAutomation": true,
|
|
1747
|
+
"complexity": "simple"
|
|
1748
|
+
},
|
|
1749
|
+
"tags": [
|
|
1750
|
+
"wcag2a",
|
|
1751
|
+
"wcag131",
|
|
1752
|
+
"heading"
|
|
1753
|
+
]
|
|
1754
|
+
},
|
|
1755
|
+
{
|
|
1756
|
+
"ruleId": "landmark-banner-is-top-level",
|
|
1757
|
+
"wcagCriteria": "1.3.1",
|
|
1758
|
+
"wcagLevel": "A",
|
|
1759
|
+
"wcagTitle": "Info and Relationships",
|
|
1760
|
+
"wcagVersion": "2.0",
|
|
1761
|
+
"en301549Criteria": "9.1.3.1",
|
|
1762
|
+
"en301549Title": "Info and relationships",
|
|
1763
|
+
"en301549Chapter": 9,
|
|
1764
|
+
"dosLagenApplies": true,
|
|
1765
|
+
"dosLagenReference": "9 § (Struktur och relationer)",
|
|
1766
|
+
"remediation": {
|
|
1767
|
+
"description": "Bannern (<header>) måste ligga på toppnivå.",
|
|
1768
|
+
"technicalGuidance": "Placera inte <header> inuti ett annat landmärke om det är sidans huvudbanner.",
|
|
1769
|
+
"wcagTechnique": [
|
|
1770
|
+
"ARIA11"
|
|
1771
|
+
]
|
|
1772
|
+
},
|
|
1773
|
+
"holmdigitalInsight": {
|
|
1774
|
+
"diggRisk": "medium",
|
|
1775
|
+
"eaaImpact": "medium",
|
|
1776
|
+
"swedishInterpretation": "Sidans huvudmeny/banner måste ligga rätt i strukturen för att hittas snabbt.",
|
|
1777
|
+
"commonMistakes": [
|
|
1778
|
+
"Nästlar header inuti main"
|
|
1779
|
+
]
|
|
1780
|
+
},
|
|
1781
|
+
"testability": {
|
|
1782
|
+
"automated": true,
|
|
1783
|
+
"requiresManualCheck": false,
|
|
1784
|
+
"pseudoAutomation": true,
|
|
1785
|
+
"complexity": "simple"
|
|
1786
|
+
},
|
|
1787
|
+
"tags": [
|
|
1788
|
+
"wcag2a",
|
|
1789
|
+
"wcag131",
|
|
1790
|
+
"landmark"
|
|
1791
|
+
]
|
|
1792
|
+
},
|
|
1793
|
+
{
|
|
1794
|
+
"ruleId": "landmark-no-duplicate-banner",
|
|
1795
|
+
"wcagCriteria": "1.3.1",
|
|
1796
|
+
"wcagLevel": "A",
|
|
1797
|
+
"wcagTitle": "Info and Relationships",
|
|
1798
|
+
"wcagVersion": "2.0",
|
|
1799
|
+
"en301549Criteria": "9.1.3.1",
|
|
1800
|
+
"en301549Title": "Info and relationships",
|
|
1801
|
+
"en301549Chapter": 9,
|
|
1802
|
+
"dosLagenApplies": true,
|
|
1803
|
+
"dosLagenReference": "9 § (Struktur och relationer)",
|
|
1804
|
+
"remediation": {
|
|
1805
|
+
"description": "Sidan får bara ha ett 'banner' landmärke (vanligtvis <header>).",
|
|
1806
|
+
"technicalGuidance": "Se till att du bara har en <header> på toppnivå.",
|
|
1807
|
+
"wcagTechnique": [
|
|
1808
|
+
"ARIA11"
|
|
1809
|
+
]
|
|
1810
|
+
},
|
|
1811
|
+
"holmdigitalInsight": {
|
|
1812
|
+
"diggRisk": "medium",
|
|
1813
|
+
"eaaImpact": "medium",
|
|
1814
|
+
"swedishInterpretation": "Flera banners förvirrar navigeringen. Det ska bara finnas en topp-header.",
|
|
1815
|
+
"commonMistakes": [
|
|
1816
|
+
"Har header både högst upp och längst ner"
|
|
1817
|
+
]
|
|
1818
|
+
},
|
|
1819
|
+
"testability": {
|
|
1820
|
+
"automated": true,
|
|
1821
|
+
"requiresManualCheck": false,
|
|
1822
|
+
"pseudoAutomation": true,
|
|
1823
|
+
"complexity": "simple"
|
|
1824
|
+
},
|
|
1825
|
+
"tags": [
|
|
1826
|
+
"wcag2a",
|
|
1827
|
+
"wcag131",
|
|
1828
|
+
"landmark"
|
|
1829
|
+
]
|
|
1830
|
+
},
|
|
1831
|
+
{
|
|
1832
|
+
"ruleId": "landmark-unique",
|
|
1833
|
+
"wcagCriteria": "1.3.1",
|
|
1834
|
+
"wcagLevel": "A",
|
|
1835
|
+
"wcagTitle": "Info and Relationships",
|
|
1836
|
+
"wcagVersion": "2.0",
|
|
1837
|
+
"en301549Criteria": "9.1.3.1",
|
|
1838
|
+
"en301549Title": "Info and relationships",
|
|
1839
|
+
"en301549Chapter": 9,
|
|
1840
|
+
"dosLagenApplies": true,
|
|
1841
|
+
"dosLagenReference": "9 § (Struktur och relationer)",
|
|
1842
|
+
"remediation": {
|
|
1843
|
+
"description": "Landmärken måste ha unika roller eller etiketter.",
|
|
1844
|
+
"technicalGuidance": "Om du har flera <nav>-element, ge dem unika 'aria-label' (t.ex. 'Huvudmeny', 'Sidfotsmeny').",
|
|
1845
|
+
"wcagTechnique": [
|
|
1846
|
+
"ARIA11"
|
|
1847
|
+
]
|
|
1848
|
+
},
|
|
1849
|
+
"holmdigitalInsight": {
|
|
1850
|
+
"diggRisk": "medium",
|
|
1851
|
+
"eaaImpact": "medium",
|
|
1852
|
+
"swedishInterpretation": "Användaren måste kunna skilja på olika menyer/regioner. Ge dem namn.",
|
|
1853
|
+
"commonMistakes": [
|
|
1854
|
+
"Flera nav-element utan aria-label"
|
|
1855
|
+
]
|
|
1856
|
+
},
|
|
1857
|
+
"testability": {
|
|
1858
|
+
"automated": true,
|
|
1859
|
+
"requiresManualCheck": false,
|
|
1860
|
+
"pseudoAutomation": true,
|
|
1861
|
+
"complexity": "simple"
|
|
1862
|
+
},
|
|
1863
|
+
"tags": [
|
|
1864
|
+
"wcag2a",
|
|
1865
|
+
"wcag131",
|
|
1866
|
+
"landmark"
|
|
1867
|
+
]
|
|
1868
|
+
},
|
|
1869
|
+
{
|
|
1870
|
+
"ruleId": "region",
|
|
1871
|
+
"wcagCriteria": "1.3.1",
|
|
1872
|
+
"wcagLevel": "A",
|
|
1873
|
+
"wcagTitle": "Info and Relationships",
|
|
1874
|
+
"wcagVersion": "2.0",
|
|
1875
|
+
"en301549Criteria": "9.1.3.1",
|
|
1876
|
+
"en301549Title": "Info and relationships",
|
|
1877
|
+
"en301549Chapter": 9,
|
|
1878
|
+
"dosLagenApplies": true,
|
|
1879
|
+
"dosLagenReference": "9 § (Struktur och relationer)",
|
|
1880
|
+
"remediation": {
|
|
1881
|
+
"description": "Allt innehåll på sidan måste finnas inuti landmärken (regioner).",
|
|
1882
|
+
"technicalGuidance": "Se till att allt innehåll finns inuti <main>, <header>, <nav>, <footer>, eller <aside>.",
|
|
1883
|
+
"component": null,
|
|
1884
|
+
"wcagTechnique": [
|
|
1885
|
+
"ARIA11"
|
|
1886
|
+
]
|
|
1887
|
+
},
|
|
1888
|
+
"holmdigitalInsight": {
|
|
1889
|
+
"diggRisk": "medium",
|
|
1890
|
+
"eaaImpact": "medium",
|
|
1891
|
+
"swedishInterpretation": "För att skärmläsaranvändare ska kunna navigera effektivt måste sidan vara uppdelad i logiska regioner.",
|
|
1892
|
+
"commonMistakes": [
|
|
1893
|
+
"Innehåll direkt i <body> utan container",
|
|
1894
|
+
"Använder för många landmärken"
|
|
1895
|
+
]
|
|
1896
|
+
},
|
|
1897
|
+
"testability": {
|
|
1898
|
+
"automated": true,
|
|
1899
|
+
"requiresManualCheck": false,
|
|
1900
|
+
"pseudoAutomation": true,
|
|
1901
|
+
"complexity": "simple"
|
|
1902
|
+
},
|
|
1903
|
+
"tags": [
|
|
1904
|
+
"wcag2a",
|
|
1905
|
+
"wcag131"
|
|
1906
|
+
]
|
|
1907
|
+
},
|
|
1908
|
+
{
|
|
1909
|
+
"ruleId": "audio-description",
|
|
1910
|
+
"wcagCriteria": "1.2.5",
|
|
1911
|
+
"wcagLevel": "AA",
|
|
1912
|
+
"wcagTitle": "Audio Description (Prerecorded)",
|
|
1913
|
+
"wcagVersion": "2.0",
|
|
1914
|
+
"en301549Criteria": "9.1.2.5",
|
|
1915
|
+
"en301549Title": "Audio description (prerecorded)",
|
|
1916
|
+
"en301549Chapter": 9,
|
|
1917
|
+
"dosLagenApplies": true,
|
|
1918
|
+
"dosLagenReference": "100 § (Tidsberoende media)",
|
|
1919
|
+
"remediation": {
|
|
1920
|
+
"description": "Förinspelat videoinnehåll måste ha syntolkning om visuell information är kritisk.",
|
|
1921
|
+
"technicalGuidance": "Tillhandahåll ett alternativt ljudspår eller version som beskriver vad som händer visuellt.",
|
|
1922
|
+
"component": null,
|
|
1923
|
+
"wcagTechnique": [
|
|
1924
|
+
"G78"
|
|
1925
|
+
]
|
|
1926
|
+
},
|
|
1927
|
+
"holmdigitalInsight": {
|
|
1928
|
+
"diggRisk": "medium",
|
|
1929
|
+
"eaaImpact": "low",
|
|
1930
|
+
"swedishInterpretation": "Video som förmedlar information visuellt måste beskrivas för de som inte kan se skärmen.",
|
|
1931
|
+
"commonMistakes": [
|
|
1932
|
+
"Video saknar syntolkning trots viktig visuell info"
|
|
1933
|
+
]
|
|
1934
|
+
},
|
|
1935
|
+
"testability": {
|
|
1936
|
+
"automated": false,
|
|
1937
|
+
"requiresManualCheck": true,
|
|
1938
|
+
"pseudoAutomation": false,
|
|
1939
|
+
"complexity": "hard"
|
|
1940
|
+
},
|
|
1941
|
+
"tags": [
|
|
1942
|
+
"wcag2aa",
|
|
1943
|
+
"wcag125"
|
|
1944
|
+
]
|
|
1945
|
+
}
|
|
1946
|
+
]
|