@jrpool/kilotest 24.0.4 → 24.0.6

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jrpool/kilotest",
3
- "version": "24.0.4",
3
+ "version": "24.0.6",
4
4
  "description": "An ensemble testing service with a focus on accessibility",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/style.css CHANGED
@@ -47,6 +47,15 @@ code {
47
47
  code.thin {
48
48
  font-weight: 400;
49
49
  }
50
+ .contents-table {
51
+ margin-bottom: 2rem;
52
+ padding: 1rem;
53
+ border: solid 0.2rem #006666;
54
+ border-radius: 0.5rem;
55
+ }
56
+ .contents-table h2 {
57
+ margin-top: 0;
58
+ }
50
59
  details {
51
60
  padding: rem;
52
61
  border: solid #000 1px;
@@ -118,8 +127,10 @@ pre {
118
127
  .secondCellRight td:nth-child(2) {
119
128
  text-align: right;
120
129
  }
121
- section:not(.wide) {
122
- max-width: 36rem;
130
+ section.main {
131
+ border-top: solid 0.3rem #006666;
132
+ padding-top: 1rem;
133
+ margin-top: 2rem;
123
134
  }
124
135
  summary {
125
136
  box-sizing: border-box;
@@ -153,6 +164,9 @@ tbody th {
153
164
  td, th {
154
165
  padding: 0 0.5rem;
155
166
  }
167
+ textarea {
168
+ width: 100%;
169
+ }
156
170
  thead th {
157
171
  padding-bottom: 1rem;
158
172
  }
@@ -169,10 +183,10 @@ ul.pseudoTopLevel {
169
183
  ul.nav {
170
184
  padding-inline-start: 0.25rem;
171
185
  }
172
- ul.nav > li, ul.headed > li {
186
+ ul.nav li, ul.headed li {
173
187
  list-style: none;
174
188
  }
175
- ul.nav > li > a {
189
+ ul.nav li > a {
176
190
  display: block;
177
191
  box-sizing: border-box;
178
192
  min-height: 44px;
@@ -6,37 +6,10 @@
6
6
  <meta name="publisher" content="Jonathan Robert Pool">
7
7
  <meta name="creator" content="Jonathan Robert Pool">
8
8
  <meta name="keywords" content="accessibility,a11y,testing,tutorial,WCAG,autocomplete">
9
- <title>Accessibility Testing Strategies | Kilotest</title>
9
+ <title>Tutorial: Accessibility Testing Strategies | Kilotest</title>
10
10
  <link rel="icon" href="/favicon.ico">
11
11
  <link rel="stylesheet" href="/style.css">
12
12
  <style>
13
- .skip-link {
14
- position: absolute;
15
- top: -3rem;
16
- left: 0;
17
- padding: 0.5rem 1rem;
18
- background: #fff;
19
- border: solid 2px #000;
20
- z-index: 100;
21
- transition: top 0.1s;
22
- }
23
- .skip-link:focus {
24
- top: 0;
25
- }
26
- .tutorial-nav {
27
- margin-bottom: 2rem;
28
- padding: 1rem;
29
- border: solid 1px #006666;
30
- border-radius: 0.5rem;
31
- }
32
- .tutorial-nav h2 {
33
- margin-top: 0;
34
- }
35
- section.tutorial-section {
36
- border-top: solid 2px #006666;
37
- padding-top: 1rem;
38
- margin-top: 2rem;
39
- }
40
13
  .note {
41
14
  padding: 0.75rem 1rem;
42
15
  border-left: solid 4px #006666;
@@ -141,7 +114,6 @@
141
114
  }
142
115
  .comment-section textarea {
143
116
  width: 100%;
144
- max-width: 40rem;
145
117
  padding: 0.5rem;
146
118
  font-size: 1rem;
147
119
  font-family: inherit;
@@ -213,14 +185,10 @@
213
185
  </style>
214
186
  </head>
215
187
  <body>
216
- <a class="skip-link" href="#main-content">Skip to main content</a>
217
- <main id="main-content">
218
-
219
- <h1><a href="/">Kilotest</a>: Accessibility Testing Strategies</h1>
220
- <p class="time-estimate">Estimated reading time: about 60 minutes.</p>
221
-
222
- <nav class="tutorial-nav" aria-label="Tutorial sections">
223
- <h2>Sections</h2>
188
+ <main>
189
+ <h1><a href="/">Kilotest</a> tutorial: Accessibility Testing Strategies</h1>
190
+ <nav class="contents-table">
191
+ <h2>Table of contents</h2>
224
192
  <ul class="nav">
225
193
  <li><a href="#about">About this tutorial</a></li>
226
194
  <li><a href="#orientation">Part 1: Orientation</a>
@@ -241,71 +209,52 @@
241
209
  </ul>
242
210
  </li>
243
211
  <li><a href="#conclusion">Conclusion</a></li>
212
+ <li><a href="#further-reading">Further reading</a></li>
213
+ <li><a href="#suggest-improvement">Suggest improvements</a></li>
244
214
  </ul>
245
215
  </nav>
246
-
247
- <!-- ═══════════════════════════════════════════════════════ -->
248
- <section id="about" class="tutorial-section">
216
+ <h2>Notice</h2>
217
+ <p>This is a rough draft created in partnership with an artificial intelligence agent using Claude Sonnet 4.6 Thinking. Revisions are in progress.</p>
218
+ <section id="about" class="main">
249
219
  <h2>About this tutorial</h2>
250
- <p><strong>Notice</strong>: This is a rough draft created in partnership with Claude Sonnet 4.6 Thinking. Revisions are in progress.</p>
251
- <p>This tutorial is for web developers with limited experience in web accessibility testing. It takes about 60 minutes to complete.</p>
252
- <p>You will learn about three strategies for testing web accessibility:</p>
220
+ <p>If you are familiar with web technology (HTML, CSS, JavaScript), but you have limited knowledge of digital accessibility testing, this tutorial is designed for you.</p>
221
+ <p>Estimated completion time: 1 hour.</p>
222
+ <p>The tutorial has two parts:</p>
253
223
  <ul>
254
- <li><strong>Human testing</strong> a person directly examines and uses the page</li>
255
- <li><strong>Rule-engine testing</strong> software applies codified rules to the page</li>
256
- <li><strong>AI-agent testing</strong> — an AI agent analyzes the page</li>
224
+ <li><strong>Orientation</strong>. What digital accessibility is, why it is valuable, and how websites can be tested for it.</li>
225
+ <li><strong>Practicum</strong>. Examining a specific example.</li>
257
226
  </ul>
258
- <p>A practicum applies all three strategies to a real example, revealing what each strategy finds, what each misses, and why.</p>
259
- <p>Links to additional information are included throughout. Completing the tutorial does not require following any of those links.</p>
260
- <div class="note">
261
- <p><strong>Offline use:</strong> This tutorial is self-contained. You may complete it without an Internet connection, though external links will not be reachable.</p>
262
- </div>
263
- <div class="note">
264
- <p><strong>Note on AI results:</strong> The AI testing results in Part 2 were captured in May 2026 from a specific model. As AI models and the resources available to them improve, results may change — potentially for better or worse. The captured results are preserved here as a fixed point of comparison.</p>
265
- </div>
227
+ <p>If the tutorial makes you want to learn more, there are links to additional information at the end.</p>
228
+ <p>Improvements in this tutorial are certainly possible. You can help by submitting your suggestions at the end.</p>
266
229
  </section>
267
-
268
- <!-- ═══════════════════════════════════════════════════════ -->
269
- <section id="orientation" class="tutorial-section">
230
+ <section id="orientation" class="main">
270
231
  <h2>Part 1: Orientation</h2>
271
- <p class="time-estimate">About 30 minutes.</p>
272
-
273
232
  <section id="why-matters">
274
- <h3>Why accessibility testing matters</h3>
275
- <p class="time-estimate">About 5 minutes.</p>
276
-
277
- <p>Accessibility is not a separate concern added to a finished product. It is an aspect of code quality, legal compliance, and basic usability — present or absent in every page you ship.</p>
278
-
279
- <h4>Code quality</h4>
280
- <p>Inaccessible code is often incorrect code. HTML specifications define semantic elements and attributes for good reasons, and violations frequently indicate structural errors that affect all users, not only users with disabilities. A missing <code>autocomplete</code> attribute, for example, is not a cosmetic gap — it tells the browser that the developer has not declared the purpose of a form field that users rely on.</p>
281
- <p>Accessible code also tends to be more maintainable: clear structure, meaningful labels, and correct role assignments make code easier to understand and modify.</p>
282
-
283
- <h4>Legal compliance</h4>
284
- <p>In many jurisdictions, web accessibility is a legal requirement. The most widely referenced technical standard is the <a href="https://www.w3.org/TR/WCAG22/">Web Content Accessibility Guidelines (WCAG)</a>, published by the W3C. WCAG 2.1 and 2.2 are referenced by law in the United States (Section 508, ADA), the European Union (European Accessibility Act), the United Kingdom (Equality Act), and many other countries.</p>
285
- <p>Non-compliance exposes organisations to legal action, regulatory penalties, and reputational harm. Lawsuits and settlements involving web accessibility are documented each year in all of these jurisdictions.</p>
286
-
287
- <h4>Usability</h4>
288
- <p>Approximately 15–20% of people worldwide have a disability that can affect their use of the web. These include permanent conditions (blindness, deafness, motor impairments, cognitive disabilities) as well as temporary situations (a broken arm, recovering from eye surgery) and situational constraints (a noisy environment, a phone in bright sunlight, holding an infant).</p>
289
- <p>Inaccessible code excludes or burdens these users. Features that are technically accessible also tend to benefit users without disabilities: clear labels reduce errors for everyone, logical keyboard flow speeds navigation, and high contrast aids readability in suboptimal lighting.</p>
290
- </section>
291
-
292
- <!-- ─── ─── ─── ─── -->
293
- <section id="three-strategies">
294
- <h3>The three testing strategies</h3>
295
- <p class="time-estimate">About 8 minutes.</p>
296
-
297
- <h4>Human testing</h4>
298
- <p>A person directly examines the page, using the browser and auxiliary tools to find accessibility issues. This is sometimes called <q>manual testing</q>, though the term can be misleading — modern human testing uses several tools; it is the human judgment that distinguishes this strategy.</p>
299
- <p>Human testing typically involves three techniques:</p>
233
+ <h3>Accessibility in a nutshell</h3>
234
+ <p><q>Accessibility</q> has several meanings. Here it refers to universal usability: usability for the widest practical range of people. It began with a focus on people with specific physical, sensory, and cognitive disabilities (an estimated 20% of the world population), but now it often refers to design and construction <em>standards</em> that elevate usability for everybody.</p>
235
+ <p>Accessibility standards exist for buildings, vehicles, devices, and software. Standards are defined by professional associations, governments, and individual experts. The latter are often called <q>best practices</q>.</p>
236
+ <p>Kilotest deals with <strong>web</strong> accessibility, so that is the focus of this tutorial.</p>
237
+ <p>Not everybody agrees with every standard, but some standards are widely accepted and have even been made legally mandatory. The web accessibility standards gaining the greatest legitimacy are those defined by the the World Wide Web Consortium (W3C). They include:</p>
300
238
  <ul>
301
- <li><strong>DOM inspection.</strong> The tester uses browser developer tools to examine the HTML structure, attributes, and the accessibility tree. The accessibility tree is the browser's representation of the page as assistive technologies see it — role, name, state, and value for each element.</li>
302
- <li><strong>Keyboard navigation.</strong> The tester uses only the keyboard (Tab, Shift+Tab, Enter, Space, arrow keys) to navigate and operate the page. This reveals whether all interactive elements are reachable and operable without a mouse.</li>
303
- <li><strong>Screen reader testing.</strong> The tester activates a screen reader — software that vocalises page content — and navigates the page by ear. Common screen readers include NVDA and JAWS on Windows, VoiceOver on macOS and iOS, and TalkBack on Android.</li>
239
+ <li>Web Content Accessibility Guidelines (WCAG): for websites</li>
240
+ <li>Authoring Tool Accessibility Guidelines (ATAG): for web authoring tools</li>
241
+ <li>Accessible Rich Internet Applications (ARIA): for scripted web applications</li>
304
242
  </ul>
305
- <p>Effective human testing requires substantial knowledge: WCAG success criteria, ARIA authoring practices, HTML semantics, and proficiency with at least one screen reader. It also takes time — a thorough examination of a single page may take 30 minutes to several hours.</p>
306
-
307
- <h4>Rule-engine testing</h4>
308
- <p>Software applies a set of codified rules to a page and reports which rules are violated. This is sometimes called <q>automated testing</q>, though that label is also imprecise what is automated is the rule application, not the judgment about what rules should exist.</p>
243
+ <h3>The stakes</h3>
244
+ <p>It is obvious that making a website that is insecure or leaks private or confidential data is risky. Similarly, making a website that is inaccessible is risky. It exposes the site owner to prosecution, civil litigation, and negative publicity. It also makes websites harder to use, deterring what you want users to do, such as understanding your mission or making purchases.</p>
245
+ <p>Many users interact with the web using <em>assistive technologies</em> (ATs): hardware and software tools that mediate between websites and users. Some are designed to serve users with disabilities, such as <em>screen readers</em> that explain structure and content orally, voice input software, eye trackers, breath-based navigators. ATs typically presume that a site conforms to accessibility standards.</p>
246
+ <p>Increasingly, almost all web use is being mediated by artificial-intelligence agents. They all make mistakes, but the error rate is likely to jump when a website violates accessibility standards.</p>
247
+ <p>The accessibility standards go beyond HTML, CSS, and JavaScript standards, so accessibility gets conformity to those standards as a side effect. This makes your code more maintainable and debugging easier as team members change.</p>
248
+ </section>
249
+ <section id="three-strategies">
250
+ <h3>Testing</h3>
251
+ <p>Accessibility <em>testing</em> is the process of verifying conformity to accessibility standards. There are three main strategies of web accessibility testing.</p>
252
+ <h4>Strategy 1. Human testing</h4>
253
+ <p>A person directly examines a website, using browsers, developer tools, I/O devices, and assistive technologies to find accessibility problems. This is sometimes called <q>manual testing</q>, but it really is <em>human</em> testing: testing by a person who investigates the site by inspecting and using it.</p>
254
+ <p>One subtype of human testing is testing by experts in the use of assistive technologies and atypical I/O methods. These are usually people who have gained their expertise through long-term use arising from disabilities.</p>
255
+ <p>Human testing gives you insight into accessibility problems that the other strategies are likely to miss. But it is also the slowest and most expensive strategy. So an efficient approach is usually to start with the other strategies, solve any problems they discover, and then do human testing on the improved site.</p>
256
+ <h4>Strategy 2. Rule-engine testing</h4>
257
+ <p>Software applies a set of codified rules to a page and reports on any violations of the rules. This is sometimes called <q>automated testing</q>, but it is humans who have defined the rules and designed the tests (sometimes with AI assistance).</p>
309
258
  <p>Rule engines come in several forms:</p>
310
259
  <ul>
311
260
  <li><strong>Browser extensions</strong> such as the <a href="https://www.deque.com/axe/devtools/">axe DevTools extension</a> and the <a href="https://wave.webaim.org/extension/">WAVE Evaluation Tool</a> run directly in the browser and report violations interactively.</li>
@@ -436,14 +385,9 @@
436
385
  <p>Both violations prevent browsers and assistive technologies from identifying the purpose of the affected fields.</p>
437
386
  </section>
438
387
  </section>
439
-
440
- <!-- ═══════════════════════════════════════════════════════ -->
441
- <section id="practicum" class="tutorial-section">
388
+ <section id="practicum" class="main">
442
389
  <h2>Part 2: Practicum</h2>
443
- <p class="time-estimate">About 30 minutes.</p>
444
390
  <p>This practicum examines a single real-world web page for <code>autocomplete</code> attribute issues. The page is a public website homepage captured in May 2026. <strong>The name and URL of the site are withheld</strong> to avoid public-relations concerns unrelated to this tutorial. The page facts below are a snapshot; the live page may differ.</p>
445
-
446
- <!-- ─── ─── ─── ─── -->
447
391
  <section id="example-page">
448
392
  <h3>The example page</h3>
449
393
  <p class="time-estimate">About 3 minutes.</p>
@@ -466,7 +410,6 @@
466
410
  <pre class="code-sample"><code>&lt;form action="#" method="post" novalidate="novalidate"
467
411
  autocomplete="new-password"&gt;</code></pre>
468
412
  <p>Both elements were captured from the rendered DOM on 2026-05-30 using a headless browser. They are the only non-hidden, non-search, non-consent form inputs on the page.</p>
469
-
470
413
  <h4>The two defects</h4>
471
414
  <p>Two <code>autocomplete</code> attribute issues are present:</p>
472
415
  <ul>
@@ -474,8 +417,6 @@
474
417
  <li><strong>Issue B</strong> — The <code>&lt;form&gt;</code> element has <code>autocomplete="new-password"</code>. On a <code>&lt;form&gt;</code> element, the only valid values are <code>on</code> and <code>off</code>. <code>new-password</code> is a valid token for <code>&lt;input&gt;</code> elements, not for <code>&lt;form&gt;</code> elements. This value appears to be a misapplication of a technique sometimes used to suppress browser autofill on individual input fields.</li>
475
418
  </ul>
476
419
  </section>
477
-
478
- <!-- ─── ─── ─── ─── -->
479
420
  <section id="human-testing">
480
421
  <h3>Human testing</h3>
481
422
  <p class="time-estimate">About 7 minutes.</p>
@@ -510,8 +451,6 @@
510
451
  <li><strong>Issue B (invalid value on form):</strong> Possibly missed, unless the tester knows the valid values for <code>autocomplete</code> on <code>&lt;form&gt;</code> elements.</li>
511
452
  </ul>
512
453
  </section>
513
-
514
- <!-- ─── ─── ─── ─── -->
515
454
  <section id="rule-engine-testing">
516
455
  <h3>Rule-engine testing</h3>
517
456
  <p class="time-estimate">About 7 minutes.</p>
@@ -547,21 +486,15 @@
547
486
  <li><strong>Issue B (invalid value on form):</strong> Missed by axe-core; found by HTML CodeSniffer in the Kilotest ensemble.</li>
548
487
  </ul>
549
488
  </section>
550
-
551
- <!-- ─── ─── ─── ─── -->
552
489
  <section id="ai-testing">
553
490
  <h3>AI-agent testing</h3>
554
- <p class="time-estimate">About 7 minutes.</p>
555
-
556
491
  <p>An AI agent was asked to find <code>autocomplete</code> attribute issues on the example page. Two scenarios were tested, illustrating how the content given to the agent affects what it can find.</p>
557
-
558
492
  <h4>What the AI agent was given and asked</h4>
559
493
  <p>In both scenarios, the instructions were the same:</p>
560
494
  <div class="ai-output">
561
495
  <p><strong>Instruction to the AI agent:</strong></p>
562
496
  <p>The following content is from a web page. Identify all violations of WCAG 2.2 Success Criterion 1.3.5 (Identify Input Purpose) related to the <code>autocomplete</code> attribute. For each violation, state the element, the problem, and the correction required. Be precise about which values are valid for each element type.</p>
563
497
  </div>
564
-
565
498
  <h4>Scenario 1: AI agent given the raw HTML source</h4>
566
499
  <p>The raw HTML delivered by the server was provided to the AI agent. This HTML does not contain the newsletter form, which is injected by JavaScript after page load.</p>
567
500
  <div class="ai-output">
@@ -573,7 +506,6 @@
573
506
  <p><strong>Result: Both issues missed — 100% false negative rate.</strong></p>
574
507
  <p>The AI agent correctly analysed what it was given, and correctly found no violations in the raw HTML. But the raw HTML does not contain the newsletter form. The AI agent could not report what it was not given. This is not a failure of the agent's reasoning — it is a failure of the data provided to it.</p>
575
508
  </div>
576
-
577
509
  <h4>Scenario 2: AI agent given the rendered DOM</h4>
578
510
  <p>The HTML of the fully rendered DOM — captured after JavaScript execution — was provided to the AI agent. This HTML includes the newsletter form with its email input and the form element.</p>
579
511
  <div class="ai-output">
@@ -593,20 +525,17 @@
593
525
  <p><strong>Result: Both issues correctly found — when given the right input.</strong></p>
594
526
  <p>With the rendered DOM, the AI agent identified both violations accurately and provided correct remediation advice. It also flagged that suppressing autocomplete on a personal data form is itself a usability concern for users who rely on autofill — a nuance that rule engines do not typically report.</p>
595
527
  </div>
596
-
597
528
  <h4>What this demonstrates</h4>
598
529
  <p>The two scenarios show that the effectiveness of AI-agent testing depends critically on what the AI agent receives, not only on the capability of the underlying model. Providing the rendered DOM rather than the raw HTML source is the difference between finding both issues and finding neither.</p>
599
530
  <p>This has a direct practical implication: when using AI agents for accessibility testing, you must understand whether the page's content is server-rendered or JavaScript-rendered. If it is JavaScript-rendered, the agent must receive the rendered DOM, not the raw source.</p>
600
531
  <p>It also illustrates a limitation that affects all three strategies: all depend on the tester (human, rule engine, or AI agent) receiving the full relevant content. Differences in what each strategy can access — raw source, rendered DOM, accessibility tree, visual rendering — partly determine what each strategy can find.</p>
601
-
602
532
  <h4>Verdict on autocomplete issues</h4>
603
533
  <ul>
604
534
  <li><strong>Issue A (missing attribute on input):</strong> Missed when given raw HTML; found when given rendered DOM.</li>
605
535
  <li><strong>Issue B (invalid value on form):</strong> Missed when given raw HTML; found when given rendered DOM.</li>
606
536
  </ul>
537
+ <p><strong>Note on AI results:</strong> The AI testing results were captured in May 2026 from a specific model. As AI models and the resources available to them improve, results may change — potentially for better or worse. The captured results are preserved here as a fixed point of comparison.</p>
607
538
  </section>
608
-
609
- <!-- ─── ─── ─── ─── -->
610
539
  <section id="comparison">
611
540
  <h3>Comparing the strategies</h3>
612
541
  <p class="time-estimate">About 6 minutes.</p>
@@ -669,14 +598,10 @@
669
598
  </details>
670
599
  </section>
671
600
  </section>
672
-
673
- <!-- ═══════════════════════════════════════════════════════ -->
674
- <section id="conclusion" class="tutorial-section">
601
+ <section id="conclusion" class="main">
675
602
  <h2>Conclusion</h2>
676
603
  <p class="time-estimate">About 5 minutes.</p>
677
-
678
604
  <p>You have seen all three accessibility testing strategies applied to the same page and the same issue type. Each strategy has genuine strengths and genuine limitations. The key points to take away:</p>
679
-
680
605
  <ul>
681
606
  <li><strong>Use all three.</strong> The strategies are complements, not alternatives. Rule engines provide fast, consistent first-pass coverage. AI agents can reason about nuance and explain issues. Human testing catches what the others miss and is the ultimate measure of real-world usability.</li>
682
607
  <li><strong>Understand what each strategy sees.</strong> A strategy can only report on what it receives. For JavaScript-rendered content, ensure your tools — rule engines, AI agents, or human testers — are working with the rendered DOM, not the raw HTML source.</li>
@@ -684,8 +609,9 @@
684
609
  <li><strong>Verify AI output.</strong> AI agents can produce both false positives and false negatives. Their output is a useful starting point, not a final verdict. Critical review against the relevant standards is essential.</li>
685
610
  <li><strong>Test early and often.</strong> The cheapest time to fix an accessibility issue is before the page is shipped. Rule-engine testing integrated into a development workflow catches issues while the code is fresh and the fix is small.</li>
686
611
  </ul>
687
-
688
- <h3>Further reading</h3>
612
+ </section>
613
+ <section id="further-reading" class="main">
614
+ <h2>Further reading</h2>
689
615
  <ul>
690
616
  <li><a href="https://www.w3.org/WAI/WCAG22/Understanding/">Understanding WCAG 2.2</a> — W3C explanations of each success criterion</li>
691
617
  <li><a href="https://www.w3.org/WAI/test-evaluate/tools/list/">Web Accessibility Evaluation Tools List</a> — W3C registry of rule-engine tools</li>
@@ -694,29 +620,28 @@
694
620
  <li><a href="https://arxiv.org/abs/2304.07591">Accessibility Metatesting: Comparing Nine Testing Tools</a> — research on rule-engine coverage variation</li>
695
621
  <li><a href="https://arxiv.org/abs/2309.10167">Testaro: Efficient Ensemble Testing for Web Accessibility</a> — the rationale for ensemble testing</li>
696
622
  </ul>
697
-
698
- <p>Return to the <a href="/">Kilotest home page</a>.</p>
699
-
700
- <div class="comment-section" id="feedback-section">
701
- <h3>Suggest an improvement</h3>
702
- <p>Have a suggestion for improving this tutorial? Submit it below. Your suggestion will be saved for the tutorial authors to review.</p>
703
- <form id="comment-form" novalidate>
704
- <label for="comment-text">Your suggestion (up to 500 characters):</label>
705
- <textarea
706
- id="comment-text"
707
- name="content"
708
- maxlength="500"
709
- rows="5"
710
- autocomplete="off"
711
- aria-describedby="char-count-msg"
712
- ></textarea>
713
- <p class="char-count" id="char-count-msg"><span id="char-remaining">500</span> characters remaining</p>
714
- <button type="submit" id="comment-submit">Submit suggestion</button>
715
- </form>
716
- <div role="status" id="comment-feedback" aria-live="polite" aria-atomic="true" class="comment-feedback"></div>
717
- </div>
718
623
  </section>
719
-
624
+ <section id="suggest-improvement" class="main">
625
+ <!--<div class="comment-section" id="feedback-section">-->
626
+ <h2>Suggest improvements</h2>
627
+ <p>Please submit suggestions for improving this tutorial below. The Kilotest managers will review them.</p>
628
+ <form id="comment-form" novalidate>
629
+ <p id="comment-label">Your suggestions (up to 500 characters):</p>
630
+ <textarea
631
+ id="comment-text"
632
+ name="content"
633
+ maxlength="500"
634
+ rows="5"
635
+ autocomplete="off"
636
+ aria-labelledby="comment-label"
637
+ aria-describedby="char-count-msg"
638
+ ></textarea>
639
+ <p class="char-count" id="char-count-msg"><span id="char-remaining">500</span> characters remaining</p>
640
+ <button type="submit" id="comment-submit">Submit suggestions</button>
641
+ </form>
642
+ <div role="status" id="comment-feedback" aria-live="polite" aria-atomic="true" class="comment-feedback"></div>
643
+ <!--</div>-->
644
+ </section>
720
645
  </main>
721
646
  <script>
722
647
  // ── Knowledge check (Lesson 1) ──────────────────────────────