@webability/core 1.16.0 → 1.17.1

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/dist/engine.cjs CHANGED
@@ -179,6 +179,57 @@
179
179
  if (/rect\\(\\s*0(?:px)?\\s*,?\\s*0(?:px)?\\s*,?\\s*0(?:px)?\\s*,?\\s*0(?:px)?\\s*\\)/.test(s.clip || '')) return false;
180
180
  return true;
181
181
  }
182
+
183
+ // isVisible answers "is the BOX shown"; this answers "does the element's own
184
+ // text paint a glyph". An icon link (font-size:0, text-indent:-9999px or 100%
185
+ // with overflow:hidden) has a visible box and no visible text, so text-contrast
186
+ // (1.4.3) cannot apply to it. Measured from the rects the text really lays out
187
+ // in: a glyph needs a box over 1px, inside the element's own box when it clips
188
+ // its overflow, and on the page (or under a scroll / transform ancestor that
189
+ // can bring it into view). Glyphs clipped by an ANCESTOR are not handled.
190
+ function hasRenderedText(el) {
191
+ if (!el || !isVisible(el)) return false;
192
+ var tag = el.tagName;
193
+ // Form-control text (textarea value, option labels) is not laid out as inline text rects: nothing to measure.
194
+ if (tag === 'TEXTAREA' || tag === 'SELECT' || tag === 'OPTION' || tag === 'OPTGROUP') return parseFloat(getComputedStyle(el).fontSize) !== 0;
195
+ var sx = window.scrollX, sy = window.scrollY;
196
+ var docW = Math.max(document.documentElement.scrollWidth, window.innerWidth);
197
+ var docH = Math.max(document.documentElement.scrollHeight, window.innerHeight);
198
+ // An element that clips its own overflow (icon links: overflow:hidden) shows only the part of its text inside its own box.
199
+ var own = getComputedStyle(el);
200
+ var clipsSelf = own.overflowX !== 'visible' || own.overflowY !== 'visible';
201
+ var box = el.getBoundingClientRect();
202
+ // Off the page inside a scroll / clip container or a transformed ancestor (carousel slide, scrolled strip) is shown
203
+ // later, so it still counts as rendered; off the page with no such ancestor is hidden text (text-indent:-9999px).
204
+ var shownLater = function () {
205
+ for (var p = el.parentElement; p && p !== document.body && p !== document.documentElement; p = p.parentElement) {
206
+ var ps = getComputedStyle(p);
207
+ if (ps.overflowX !== 'visible' || ps.overflowY !== 'visible' || (ps.transform && ps.transform !== 'none')) return true;
208
+ }
209
+ return false;
210
+ };
211
+ for (var n = el.firstChild; n; n = n.nextSibling) {
212
+ if (n.nodeType !== 3 || !(n.textContent || '').trim()) continue;
213
+ var range = document.createRange();
214
+ range.selectNodeContents(n);
215
+ // No layout engine (jsdom has no Range.getClientRects): the computed font size is all there is to read.
216
+ if (typeof range.getClientRects !== 'function') return parseFloat(getComputedStyle(el).fontSize) !== 0;
217
+ var rects = range.getClientRects();
218
+ for (var i = 0; i < rects.length; i++) {
219
+ var r = rects[i];
220
+ if (r.width <= 1 || r.height <= 1) continue;
221
+ // Glyphs outside their own box are hidden (text-indent:-9999px); glyphs inside a box that is off the page are shown later.
222
+ var inBox = Math.min(r.right, box.right) - Math.max(r.left, box.left) > 1 && Math.min(r.bottom, box.bottom) - Math.max(r.top, box.top) > 1;
223
+ if (clipsSelf && !inBox) continue;
224
+ if (r.right + sx <= 0 || r.bottom + sy <= 0 || r.left + sx >= docW || r.top + sy >= docH) {
225
+ if (inBox && shownLater()) return true;
226
+ continue;
227
+ }
228
+ return true;
229
+ }
230
+ }
231
+ return false;
232
+ }
182
233
  `,rP=`
183
234
  // aria-labelledby/-describedby take SPACE-SEPARATED idref lists; resolving
184
235
  // the whole attribute with getElementById silently failed on multi-ID
@@ -380,9 +431,9 @@ See: https://github.com/dequelabs/axe-core/blob/master/doc/context.md`));}functi
380
431
  `);return pe}},none:{failureMessage:function(ue){var pe="Fix all of the following:",xe=ue;if(xe)for(var Xe,at=-1,dt=xe.length-1;at<dt;)Xe=xe[at+=1],pe+=`
381
432
  `+Xe.split(`
382
433
  `).join(`
383
- `);return pe}}},incompleteFallbackMessage:"axe couldn't tell the reason. Time to break out the element inspector!"},rules:[{id:"accesskeys",impact:"serious",selector:"[accesskey]",excludeHidden:false,tags:["cat.keyboard","best-practice"],all:[],any:[],none:["accesskeys"]},{id:"area-alt",impact:"critical",selector:"map area[href]",excludeHidden:false,tags:["cat.text-alternatives","wcag2a","wcag244","wcag412","section508","section508.22.a","TTv5","TT6.a","EN-301-549","EN-9.2.4.4","EN-9.4.1.2","ACT","RGAAv4","RGAA-1.1.2"],actIds:["c487ae"],all:[],any:[{options:{attribute:"alt"},id:"non-empty-alt"},"aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-allowed-attr",impact:"critical",matches:"aria-allowed-attr-matches",tags:["cat.aria","wcag2a","wcag412","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-7.1.1"],actIds:["5c01ea"],all:[{options:{validTreeRowAttrs:["aria-posinset","aria-setsize","aria-expanded","aria-level"]},id:"aria-allowed-attr"},"aria-allowed-attr-elm"],any:[],none:["aria-unsupported-attr"]},{id:"aria-allowed-role",impact:"minor",excludeHidden:false,selector:"[role]",matches:"aria-allowed-role-matches",tags:["cat.aria","best-practice"],all:[],any:[{options:{allowImplicit:true,ignoredTags:[]},id:"aria-allowed-role"}],none:[]},{id:"aria-braille-equivalent",reviewOnFail:true,impact:"serious",selector:"[aria-brailleroledescription], [aria-braillelabel]",tags:["cat.aria","wcag2a","wcag412","EN-301-549","EN-9.4.1.2"],all:["braille-roledescription-equivalent","braille-label-equivalent"],any:[],none:[]},{id:"aria-command-name",impact:"serious",selector:'[role="link"], [role="button"], [role="menuitem"]',matches:"no-naming-method-matches",tags:["cat.aria","wcag2a","wcag412","TTv5","TT6.a","EN-301-549","EN-9.4.1.2","ACT","RGAAv4","RGAA-11.9.1"],actIds:["97a4e1"],all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-conditional-attr",impact:"serious",matches:"aria-allowed-attr-matches",tags:["cat.aria","wcag2a","wcag412","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-7.1.1"],actIds:["5c01ea"],all:[{options:{invalidTableRowAttrs:["aria-posinset","aria-setsize","aria-expanded","aria-level"]},id:"aria-conditional-attr"}],any:[],none:[]},{id:"aria-deprecated-role",impact:"minor",selector:"[role]",matches:"no-empty-role-matches",tags:["cat.aria","wcag2a","wcag412","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-7.1.1"],actIds:["674b10"],all:[],any:[],none:["deprecatedrole"]},{id:"aria-dialog-name",impact:"serious",selector:'[role="dialog"], [role="alertdialog"]',matches:"no-naming-method-matches",tags:["cat.aria","best-practice"],all:[],any:["aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-hidden-body",impact:"critical",selector:"body",excludeHidden:false,matches:"is-initiator-matches",tags:["cat.aria","wcag2a","wcag131","wcag412","EN-301-549","EN-9.1.3.1","EN-9.4.1.2","RGAAv4","RGAA-10.8.1"],all:[],any:["aria-hidden-body"],none:[]},{id:"aria-hidden-focus",impact:"serious",selector:'[aria-hidden="true"]',matches:"aria-hidden-focus-matches",excludeHidden:false,tags:["cat.name-role-value","wcag2a","wcag412","TTv5","TT6.a","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-10.8.1"],actIds:["6cfa84"],all:["focusable-modal-open","focusable-disabled","focusable-not-tabbable"],any:[],none:[]},{id:"aria-input-field-name",impact:"serious",selector:'[role="combobox"], [role="listbox"], [role="searchbox"], [role="slider"], [role="spinbutton"], [role="textbox"]',matches:"no-naming-method-matches",tags:["cat.aria","wcag2a","wcag412","TTv5","TT5.c","EN-301-549","EN-9.4.1.2","ACT","RGAAv4","RGAA-11.1.1"],actIds:["e086e5"],all:[],any:["aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:["no-implicit-explicit-label"]},{id:"aria-meter-name",impact:"serious",selector:'[role="meter"]',matches:"no-naming-method-matches",tags:["cat.aria","wcag2a","wcag111","EN-301-549","EN-9.1.1.1","RGAAv4","RGAA-11.1.1"],all:[],any:["aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-progressbar-name",impact:"serious",selector:'[role="progressbar"]',matches:"no-naming-method-matches",tags:["cat.aria","wcag2a","wcag111","EN-301-549","EN-9.1.1.1","RGAAv4","RGAA-11.1.1"],all:[],any:["aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-prohibited-attr",impact:"serious",matches:"aria-allowed-attr-matches",tags:["cat.aria","wcag2a","wcag412","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-7.1.1"],actIds:["5c01ea"],all:[],any:[],none:[{options:{elementsAllowedAriaLabel:["applet","input"]},id:"aria-prohibited-attr"}]},{id:"aria-required-attr",impact:"critical",selector:"[role]",tags:["cat.aria","wcag2a","wcag412","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-7.1.1"],actIds:["4e8ab6"],all:[],any:["aria-required-attr"],none:[]},{id:"aria-required-children",impact:"critical",selector:"[role]",matches:"aria-required-children-matches",tags:["cat.aria","wcag2a","wcag131","EN-301-549","EN-9.1.3.1","RGAAv4","RGAA-9.3.1"],actIds:["bc4a75","ff89c9"],all:[],any:[{options:{reviewEmpty:["doc-bibliography","doc-endnotes","grid","list","listbox","menu","menubar","table","tablist","tree","treegrid","rowgroup"]},id:"aria-required-children"}],none:[]},{id:"aria-required-parent",impact:"critical",selector:"[role]",matches:"aria-required-parent-matches",tags:["cat.aria","wcag2a","wcag131","EN-301-549","EN-9.1.3.1","RGAAv4","RGAA-9.3.1"],actIds:["ff89c9"],all:[],any:[{options:{ownGroupRoles:["listitem","treeitem"]},id:"aria-required-parent"}],none:[]},{id:"aria-roledescription",impact:"serious",selector:"[aria-roledescription]",tags:["cat.aria","wcag2a","wcag412","EN-301-549","EN-9.4.1.2","deprecated"],enabled:false,all:[],any:[{options:{supportedRoles:["button","img","checkbox","radio","combobox","menuitemcheckbox","menuitemradio"]},id:"aria-roledescription"}],none:[]},{id:"aria-roles",impact:"critical",selector:"[role]",matches:"no-empty-role-matches",tags:["cat.aria","wcag2a","wcag412","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-7.1.1"],actIds:["674b10"],all:[],any:[],none:["invalidrole","abstractrole","unsupportedrole"]},{id:"aria-text",impact:"serious",selector:"[role=text]",tags:["cat.aria","best-practice"],all:[],any:["no-focusable-content"],none:[]},{id:"aria-toggle-field-name",impact:"serious",selector:'[role="checkbox"], [role="menuitemcheckbox"], [role="menuitemradio"], [role="radio"], [role="switch"], [role="option"]',matches:"no-naming-method-matches",tags:["cat.aria","wcag2a","wcag412","TTv5","TT5.c","EN-301-549","EN-9.4.1.2","ACT","RGAAv4","RGAA-7.1.1"],actIds:["e086e5"],all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:["no-implicit-explicit-label"]},{id:"aria-tooltip-name",impact:"serious",selector:'[role="tooltip"]',matches:"no-naming-method-matches",tags:["cat.aria","wcag2a","wcag412","EN-301-549","EN-9.4.1.2"],all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-treeitem-name",impact:"serious",selector:'[role="treeitem"]',matches:"no-naming-method-matches",tags:["cat.aria","best-practice"],all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-valid-attr-value",impact:"critical",matches:"aria-has-attr-matches",tags:["cat.aria","wcag2a","wcag412","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-7.1.1"],actIds:["6a7281"],all:[{options:[],id:"aria-valid-attr-value"},"aria-errormessage","aria-level"],any:[],none:[]},{id:"aria-valid-attr",impact:"critical",matches:"aria-has-attr-matches",tags:["cat.aria","wcag2a","wcag412","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-7.1.1"],actIds:["5f99a7"],all:[],any:[{options:[],id:"aria-valid-attr"}],none:[]},{id:"audio-caption",impact:"critical",selector:"audio",enabled:false,excludeHidden:false,tags:["cat.time-and-media","wcag2a","wcag121","EN-301-549","EN-9.1.2.1","section508","section508.22.a","deprecated"],actIds:["2eb176","afb423"],all:[],any:[],none:["caption"]},{id:"autocomplete-valid",impact:"serious",matches:"autocomplete-matches",tags:["cat.forms","wcag21aa","wcag135","EN-301-549","EN-9.1.3.5","ACT","RGAAv4","RGAA-11.13.1"],actIds:["73f2c2"],all:[{options:{stateTerms:["none","false","true","disabled","enabled","undefined","null","xoff","xon"],ignoredValues:["text","pronouns","gender","message","content"]},id:"autocomplete-valid"}],any:[],none:[]},{id:"avoid-inline-spacing",impact:"serious",selector:"[style]",matches:"is-visible-on-screen-matches",tags:["cat.structure","wcag21aa","wcag1412","EN-301-549","EN-9.1.4.12","ACT"],actIds:["24afc2","9e45ec","78fd32"],all:[{options:{cssProperty:"letter-spacing",minValue:.12},id:"important-letter-spacing"},{options:{cssProperty:"word-spacing",minValue:.16},id:"important-word-spacing"},{options:{multiLineOnly:true,cssProperty:"line-height",minValue:1.5,normalValue:1},id:"important-line-height"}],any:[],none:[]},{id:"blink",impact:"serious",selector:"blink",excludeHidden:false,tags:["cat.time-and-media","wcag2a","wcag222","section508","section508.22.j","TTv5","TT2.b","EN-301-549","EN-9.2.2.2","RGAAv4","RGAA-13.8.1"],all:[],any:[],none:["is-on-screen"]},{id:"button-name",impact:"critical",selector:"button",matches:"no-explicit-name-required-matches",tags:["cat.name-role-value","wcag2a","wcag412","section508","section508.22.a","TTv5","TT6.a","EN-301-549","EN-9.4.1.2","ACT","RGAAv4","RGAA-11.9.1"],actIds:["97a4e1","m6b1q3"],all:[],any:["button-has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},"implicit-label","explicit-label","presentational-role"],none:[]},{id:"bypass",impact:"serious",selector:"html:not(html *)",pageLevel:true,matches:"bypass-matches",reviewOnFail:true,tags:["cat.keyboard","wcag2a","wcag241","section508","section508.22.o","TTv5","TT9.a","EN-301-549","EN-9.2.4.1","RGAAv4","RGAA-12.7.1"],actIds:["cf77f2","047fe0","b40fd1","3e12e1","ye5d6e"],all:[],any:["internal-link-present",{options:{selector:":is(h1, h2, h3, h4, h5, h6):not([role]), [role=heading]"},id:"header-present"},{options:{selector:"main, [role=main]"},id:"landmark"}],none:[]},{id:"color-contrast-enhanced",impact:"serious",matches:"color-contrast-matches",excludeHidden:false,enabled:false,tags:["cat.color","wcag2aaa","wcag146","ACT"],actIds:["09o5cg"],all:[],any:[{options:{ignoreUnicode:true,ignoreLength:false,ignorePseudo:false,boldValue:700,boldTextPt:14,largeTextPt:18,contrastRatio:{normal:{expected:7,minThreshold:4.5},large:{expected:4.5,minThreshold:3}},pseudoSizeThreshold:.25,shadowOutlineEmMax:.1,textStrokeEmMin:.03},id:"color-contrast-enhanced"}],none:[]},{id:"color-contrast",impact:"serious",matches:"color-contrast-matches",excludeHidden:false,tags:["cat.color","wcag2aa","wcag143","TTv5","TT13.c","EN-301-549","EN-9.1.4.3","ACT","RGAAv4","RGAA-3.2.1"],actIds:["afw4f7","09o5cg"],all:[],any:[{options:{ignoreUnicode:true,ignoreLength:false,ignorePseudo:false,boldValue:700,boldTextPt:14,largeTextPt:18,contrastRatio:{normal:{expected:4.5},large:{expected:3}},pseudoSizeThreshold:.25,shadowOutlineEmMax:.2,textStrokeEmMin:.03},id:"color-contrast"}],none:[]},{id:"css-orientation-lock",impact:"serious",selector:"html:not(html *)",tags:["cat.structure","wcag134","wcag21aa","EN-301-549","EN-9.1.3.4","RGAAv4","RGAA-13.9.1","experimental"],actIds:["b33eff"],all:[{options:{degreeThreshold:2},id:"css-orientation-lock"}],any:[],none:[],preload:true},{id:"definition-list",impact:"serious",selector:"dl",matches:"no-role-matches",tags:["cat.structure","wcag2a","wcag131","EN-301-549","EN-9.1.3.1","RGAAv4","RGAA-9.3.3"],all:[],any:[],none:["structured-dlitems",{options:{validRoles:["definition","term","listitem"],validNodeNames:["dt","dd"],divGroups:true},id:"only-dlitems"}]},{id:"dlitem",impact:"serious",selector:"dd, dt",matches:"no-role-matches",tags:["cat.structure","wcag2a","wcag131","EN-301-549","EN-9.1.3.1","RGAAv4","RGAA-9.3.3"],all:[],any:["dlitem"],none:[]},{id:"document-title",impact:"serious",selector:"html:not(html *)",matches:"is-initiator-matches",tags:["cat.text-alternatives","wcag2a","wcag242","TTv5","TT12.a","EN-301-549","EN-9.2.4.2","ACT","RGAAv4","RGAA-8.5.1"],actIds:["2779a5"],all:[],any:["doc-has-title"],none:[]},{id:"duplicate-id-active",impact:"serious",selector:"[id]",matches:"duplicate-id-active-matches",excludeHidden:false,tags:["cat.parsing","wcag2a-obsolete","wcag411","deprecated"],enabled:false,actIds:["3ea0c8"],all:[],any:["duplicate-id-active"],none:[]},{id:"duplicate-id-aria",impact:"critical",selector:"[id]",matches:"duplicate-id-aria-matches",excludeHidden:false,tags:["cat.parsing","wcag2a","wcag412","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-8.2.1"],reviewOnFail:true,actIds:["3ea0c8"],all:[],any:["duplicate-id-aria"],none:[]},{id:"duplicate-id",impact:"minor",selector:"[id]",matches:"duplicate-id-misc-matches",excludeHidden:false,tags:["cat.parsing","wcag2a-obsolete","wcag411","deprecated"],enabled:false,actIds:["3ea0c8"],all:[],any:["duplicate-id"],none:[]},{id:"empty-heading",impact:"minor",selector:'h1, h2, h3, h4, h5, h6, [role="heading"]',matches:"heading-matches",tags:["cat.name-role-value","best-practice"],actIds:["ffd0e9"],all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"empty-table-header",impact:"minor",selector:'th:not([role]), [role="rowheader"], [role="columnheader"]',tags:["cat.name-role-value","best-practice"],all:[],any:["has-visible-text"],none:[]},{id:"focus-order-semantics",impact:"minor",selector:"div, h1, h2, h3, h4, h5, h6, [role=heading], p, span",matches:"inserted-into-focus-order-matches",tags:["cat.keyboard","best-practice","RGAAv4","RGAA-12.8.1","experimental"],all:[],any:[{options:[],id:"has-widget-role"},{options:{roles:["tooltip"]},id:"valid-scrollable-semantics"}],none:[]},{id:"form-field-multiple-labels",impact:"moderate",selector:"input, select, textarea",matches:"label-matches",tags:["cat.forms","wcag2a","wcag332","TTv5","TT5.c","EN-301-549","EN-9.3.3.2","RGAAv4","RGAA-11.2.1"],all:[],any:[],none:["multiple-label"]},{id:"frame-focusable-content",impact:"serious",selector:"html:not(html *)",matches:"frame-focusable-content-matches",tags:["cat.keyboard","wcag2a","wcag211","TTv5","TT4.a","EN-301-549","EN-9.2.1.1","RGAAv4","RGAA-7.3.2"],actIds:["akn7bn"],all:[],any:["frame-focusable-content"],none:[]},{id:"frame-tested",impact:"critical",selector:"html:not(html *), frame, iframe",tags:["cat.structure","best-practice","review-item"],all:[{options:{isViolation:false},id:"frame-tested"}],any:[],none:[]},{id:"frame-title-unique",impact:"serious",selector:"frame[title], iframe[title]",matches:"frame-title-has-text-matches",tags:["cat.text-alternatives","wcag2a","wcag412","TTv5","TT12.d","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-2.2.1"],actIds:["4b1c6c"],all:[],any:[],none:["unique-frame-title"],reviewOnFail:true},{id:"frame-title",impact:"serious",selector:"frame, iframe",matches:"no-negative-tabindex-matches",tags:["cat.text-alternatives","wcag2a","wcag412","section508","section508.22.i","TTv5","TT12.d","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-2.1.1"],actIds:["cae760"],all:[],any:[{options:{attribute:"title"},id:"non-empty-title"},"aria-label","aria-labelledby","presentational-role"],none:[]},{id:"heading-order",impact:"moderate",selector:"h1, h2, h3, h4, h5, h6, [role=heading]",matches:"heading-matches",tags:["cat.semantics","best-practice"],all:[],any:["heading-order"],none:[]},{id:"hidden-content",impact:"minor",selector:"*",excludeHidden:false,tags:["cat.structure","best-practice","experimental","review-item"],all:[],any:["hidden-content"],none:[]},{id:"html-has-lang",impact:"serious",selector:"html:not(html *)",matches:"is-initiator-matches",tags:["cat.language","wcag2a","wcag311","TTv5","TT11.a","EN-301-549","EN-9.3.1.1","ACT","RGAAv4","RGAA-8.3.1"],actIds:["b5c3f8"],all:[],any:[{options:{attributes:["lang","xml:lang"]},id:"has-lang"}],none:[]},{id:"html-lang-valid",impact:"serious",selector:'html[lang]:not([lang=""]):not(html *), html[xml\\:lang]:not([xml\\:lang=""]):not(html *)',tags:["cat.language","wcag2a","wcag311","TTv5","TT11.a","EN-301-549","EN-9.3.1.1","ACT","RGAAv4","RGAA-8.4.1"],actIds:["bf051a"],all:[],any:[],none:[{options:{attributes:["lang","xml:lang"]},id:"valid-lang"}]},{id:"html-xml-lang-mismatch",impact:"moderate",selector:"html[lang][xml\\:lang]:not(html *)",matches:"xml-lang-mismatch-matches",tags:["cat.language","wcag2a","wcag311","EN-301-549","EN-9.3.1.1","ACT","RGAAv4","RGAA-8.3.1"],actIds:["5b7ae0"],all:["xml-lang-mismatch"],any:[],none:[]},{id:"identical-links-same-purpose",impact:"minor",selector:'a[href], area[href], [role="link"]',excludeHidden:false,enabled:false,matches:"identical-links-same-purpose-matches",tags:["cat.semantics","wcag2aaa","wcag249"],actIds:["b20e66"],all:["identical-links-same-purpose"],any:[],none:[]},{id:"image-alt",impact:"critical",selector:"img",matches:"no-explicit-name-required-matches",tags:["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a","TTv5","TT7.a","TT7.b","EN-301-549","EN-9.1.1.1","ACT","RGAAv4","RGAA-1.1.1"],actIds:["23a2a8"],all:[],any:["has-alt","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},"presentational-role"],none:["alt-space-value"]},{id:"image-redundant-alt",impact:"minor",selector:"img",tags:["cat.text-alternatives","best-practice"],all:[],any:[],none:[{options:{parentSelector:"button, [role=button], a[href], p, li, td, th"},id:"duplicate-img-label"}]},{id:"input-button-name",impact:"critical",selector:'input[type="button"], input[type="submit"], input[type="reset"]',matches:"no-explicit-name-required-matches",tags:["cat.name-role-value","wcag2a","wcag412","section508","section508.22.a","TTv5","TT5.c","EN-301-549","EN-9.4.1.2","ACT","RGAAv4","RGAA-11.9.1"],actIds:["97a4e1"],all:[],any:["non-empty-if-present",{options:{attribute:"value"},id:"non-empty-value"},"aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},"implicit-label","explicit-label","presentational-role"],none:[]},{id:"input-image-alt",impact:"critical",selector:'input[type="image"]',matches:"no-explicit-name-required-matches",tags:["cat.text-alternatives","wcag2a","wcag111","wcag412","section508","section508.22.a","TTv5","TT7.a","EN-301-549","EN-9.1.1.1","EN-9.4.1.2","ACT","RGAAv4","RGAA-1.1.3"],actIds:["59796f"],all:[],any:[{options:{attribute:"alt"},id:"non-empty-alt"},"aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},"implicit-label","explicit-label"],none:[]},{id:"label-content-name-mismatch",impact:"serious",matches:"label-content-name-mismatch-matches",tags:["cat.semantics","wcag21a","wcag253","EN-301-549","EN-9.2.5.3","RGAAv4","RGAA-6.1.5","experimental"],actIds:["2ee8b8"],all:[],any:[{options:{pixelThreshold:.1,occurrenceThreshold:3},id:"label-content-name-mismatch"}],none:[]},{id:"label-title-only",impact:"serious",selector:"input, select, textarea",matches:"label-matches",tags:["cat.forms","best-practice"],all:[],any:[],none:["title-only"]},{id:"label",impact:"critical",selector:"input, textarea",matches:"label-matches",tags:["cat.forms","wcag2a","wcag412","section508","section508.22.n","TTv5","TT5.c","EN-301-549","EN-9.4.1.2","ACT","RGAAv4","RGAA-11.1.1"],actIds:["e086e5"],all:[],any:["implicit-label","explicit-label","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},{options:{attribute:"placeholder"},id:"non-empty-placeholder"},"presentational-role"],none:["hidden-explicit-label"]},{id:"landmark-banner-is-top-level",impact:"moderate",selector:"header:not([role]), [role=banner]",matches:"landmark-has-body-context-matches",tags:["cat.semantics","best-practice"],all:[],any:["landmark-is-top-level"],none:[]},{id:"landmark-complementary-is-top-level",impact:"moderate",selector:"aside:not([role]), [role=complementary]",tags:["cat.semantics","best-practice"],all:[],any:["landmark-is-top-level"],none:[]},{id:"landmark-contentinfo-is-top-level",impact:"moderate",selector:"footer:not([role]), [role=contentinfo]",matches:"landmark-has-body-context-matches",tags:["cat.semantics","best-practice"],all:[],any:["landmark-is-top-level"],none:[]},{id:"landmark-main-is-top-level",impact:"moderate",selector:"main:not([role]), [role=main]",tags:["cat.semantics","best-practice"],all:[],any:["landmark-is-top-level"],none:[]},{id:"landmark-no-duplicate-banner",impact:"moderate",selector:"header:not([role]), [role=banner]",tags:["cat.semantics","best-practice"],all:[],any:[{options:{selector:"header:not([role]), [role=banner]",role:"banner"},id:"page-no-duplicate-banner"}],none:[]},{id:"landmark-no-duplicate-contentinfo",impact:"moderate",selector:"footer:not([role]), [role=contentinfo]",tags:["cat.semantics","best-practice"],all:[],any:[{options:{selector:"footer:not([role]), [role=contentinfo]",role:"contentinfo"},id:"page-no-duplicate-contentinfo"}],none:[]},{id:"landmark-no-duplicate-main",impact:"moderate",selector:"main:not([role]), [role=main]",tags:["cat.semantics","best-practice"],all:[],any:[{options:{selector:"main:not([role]), [role='main']"},id:"page-no-duplicate-main"}],none:[]},{id:"landmark-one-main",impact:"moderate",selector:"html:not(html *)",tags:["cat.semantics","best-practice"],all:[{options:{selector:"main:not([role]), [role='main']",passForModal:true},id:"page-has-main"}],any:[],none:[]},{id:"landmark-unique",impact:"moderate",selector:"[role=banner], [role=complementary], [role=contentinfo], [role=main], [role=navigation], [role=region], [role=search], [role=form], form, footer, header, aside, main, nav, section",tags:["cat.semantics","best-practice"],matches:"landmark-unique-matches",all:[],any:["landmark-is-unique"],none:[]},{id:"link-in-text-block",impact:"serious",selector:"a[href], [role=link]",matches:"link-in-text-block-matches",excludeHidden:false,tags:["cat.color","wcag2a","wcag141","TTv5","TT13.a","EN-301-549","EN-9.1.4.1","RGAAv4","RGAA-10.6.1"],all:[],any:[{options:{requiredContrastRatio:3,allowSameColor:true},id:"link-in-text-block"},"link-in-text-block-style"],none:[]},{id:"link-name",impact:"serious",selector:"a[href]",tags:["cat.name-role-value","wcag2a","wcag244","wcag412","section508","section508.22.a","TTv5","TT6.a","EN-301-549","EN-9.2.4.4","EN-9.4.1.2","ACT","RGAAv4","RGAA-6.2.1"],actIds:["c487ae"],all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:["focusable-no-name"]},{id:"list",impact:"serious",selector:"ul, ol",matches:"no-role-matches",tags:["cat.structure","wcag2a","wcag131","EN-301-549","EN-9.1.3.1","RGAAv4","RGAA-9.3.1"],all:[],any:[],none:[{options:{validRoles:["listitem"],validNodeNames:["li"]},id:"only-listitems"}]},{id:"listitem",impact:"serious",selector:"li",matches:"no-role-matches",tags:["cat.structure","wcag2a","wcag131","EN-301-549","EN-9.1.3.1","RGAAv4","RGAA-9.3.1"],all:[],any:["listitem"],none:[]},{id:"marquee",impact:"serious",selector:"marquee",excludeHidden:false,tags:["cat.parsing","wcag2a","wcag222","TTv5","TT2.b","EN-301-549","EN-9.2.2.2","RGAAv4","RGAA-13.8.1"],all:[],any:[],none:["is-on-screen"]},{id:"meta-refresh-no-exceptions",impact:"minor",selector:'meta[http-equiv="refresh"][content]',excludeHidden:false,enabled:false,tags:["cat.time-and-media","wcag2aaa","wcag224","wcag325"],actIds:["bisz58"],all:[],any:[{options:{minDelay:72e3,maxDelay:false},id:"meta-refresh-no-exceptions"}],none:[]},{id:"meta-refresh",impact:"critical",selector:'meta[http-equiv="refresh"][content]',excludeHidden:false,tags:["cat.time-and-media","wcag2a","wcag221","TTv5","TT8.a","EN-301-549","EN-9.2.2.1","RGAAv4","RGAA-13.1.2"],actIds:["bc659a","bisz58"],all:[],any:[{options:{minDelay:0,maxDelay:72e3},id:"meta-refresh"}],none:[]},{id:"meta-viewport-large",impact:"minor",selector:'meta[name="viewport"]',matches:"is-initiator-matches",excludeHidden:false,tags:["cat.sensory-and-visual-cues","best-practice"],all:[],any:[{options:{scaleMinimum:5,lowerBound:2},id:"meta-viewport-large"}],none:[]},{id:"meta-viewport",impact:"moderate",selector:'meta[name="viewport"]',matches:"is-initiator-matches",excludeHidden:false,tags:["cat.sensory-and-visual-cues","wcag2aa","wcag144","EN-301-549","EN-9.1.4.4","ACT","RGAAv4","RGAA-10.4.2"],actIds:["b4f0c3"],all:[],any:[{options:{scaleMinimum:2},id:"meta-viewport"}],none:[]},{id:"nested-interactive",impact:"serious",matches:"nested-interactive-matches",tags:["cat.keyboard","wcag2a","wcag412","TTv5","TT6.a","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-7.1.1"],actIds:["307n5z"],all:[],any:["no-focusable-content"],none:[]},{id:"no-autoplay-audio",impact:"moderate",excludeHidden:false,selector:"audio[autoplay], video[autoplay]",matches:"no-autoplay-audio-matches",reviewOnFail:true,tags:["cat.time-and-media","wcag2a","wcag142","TTv5","TT2.a","EN-301-549","EN-9.1.4.2","ACT","RGAAv4","RGAA-4.10.1"],actIds:["80f0bf"],preload:true,all:[{options:{allowedDuration:3},id:"no-autoplay-audio"}],any:[],none:[]},{id:"object-alt",impact:"serious",selector:"object[data]",matches:"object-is-loaded-matches",tags:["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a","EN-301-549","EN-9.1.1.1","RGAAv4","RGAA-1.1.6"],actIds:["8fc3b6"],all:[],any:["aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},"presentational-role"],none:[]},{id:"p-as-heading",impact:"serious",selector:"p",matches:"p-as-heading-matches",tags:["cat.semantics","wcag2a","wcag131","EN-301-549","EN-9.1.3.1","RGAAv4","RGAA-9.1.3","experimental"],all:[{options:{margins:[{weight:150,italic:true},{weight:150,size:1.15},{italic:true,size:1.15},{size:1.4}],passLength:1,failLength:.5},id:"p-as-heading"}],any:[],none:[]},{id:"page-has-heading-one",impact:"moderate",selector:"html:not(html *)",tags:["cat.semantics","best-practice"],all:[{options:{selector:"h1:not([role], [aria-level]), :is(h1, h2, h3, h4, h5, h6):not([role])[aria-level=1], [role=heading][aria-level=1]",passForModal:true},id:"page-has-heading-one"}],any:[],none:[]},{id:"presentation-role-conflict",impact:"minor",selector:`img[alt=''], [role="none"], [role="presentation"]`,matches:"has-implicit-chromium-role-matches",tags:["cat.aria","best-practice","ACT"],actIds:["46ca7f"],all:[],any:[],none:["is-element-focusable","has-global-aria-attribute"]},{id:"region",impact:"moderate",selector:"body *",tags:["cat.keyboard","best-practice","RGAAv4","RGAA-9.2.1"],all:[],any:[{options:{regionMatcher:"dialog, [role=dialog], [role=alertdialog], svg"},id:"region"}],none:[]},{id:"role-img-alt",impact:"serious",selector:"[role='img']:not(img, area, input, object)",matches:"html-namespace-matches",tags:["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a","TTv5","TT7.a","EN-301-549","EN-9.1.1.1","ACT","RGAAv4","RGAA-1.1.1"],actIds:["23a2a8"],all:[],any:["aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"scope-attr-valid",impact:"moderate",selector:"td[scope], th[scope]",tags:["cat.tables","best-practice"],all:["html5-scope",{options:{values:["row","col","rowgroup","colgroup"]},id:"scope-value"}],any:[],none:[]},{id:"scrollable-region-focusable",impact:"serious",selector:"*:not(select,textarea)",matches:"scrollable-region-focusable-matches",tags:["cat.keyboard","wcag2a","wcag211","wcag213","TTv5","TT4.a","EN-301-549","EN-9.2.1.1","EN-9.2.1.3","RGAAv4","RGAA-7.3.2"],actIds:["0ssw9k"],all:[],any:["focusable-content","focusable-element"],none:[]},{id:"select-name",impact:"critical",selector:"select",tags:["cat.forms","wcag2a","wcag412","section508","section508.22.n","TTv5","TT5.c","EN-301-549","EN-9.4.1.2","ACT","RGAAv4","RGAA-11.1.1"],actIds:["e086e5"],all:[],any:["implicit-label","explicit-label","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},"presentational-role"],none:["hidden-explicit-label"]},{id:"server-side-image-map",impact:"minor",selector:"img[ismap]",tags:["cat.text-alternatives","wcag2a","wcag211","section508","section508.22.f","TTv5","TT4.a","EN-301-549","EN-9.2.1.1","RGAAv4","RGAA-1.1.4"],all:[],any:[],none:["exists"]},{id:"skip-link",impact:"moderate",selector:'a[href^="#"], a[href^="/#"]',matches:"skip-link-matches",tags:["cat.keyboard","best-practice","RGAAv4","RGAA-12.7.1"],all:[],any:["skip-link"],none:[]},{id:"summary-name",impact:"serious",selector:"summary",matches:"summary-interactive-matches",tags:["cat.name-role-value","wcag2a","wcag412","section508","section508.22.a","TTv5","TT6.a","EN-301-549","EN-9.4.1.2"],all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"svg-img-alt",impact:"serious",selector:'[role="img"], [role="graphics-symbol"], svg[role="graphics-document"]',matches:"svg-namespace-matches",tags:["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a","TTv5","TT7.a","EN-301-549","EN-9.1.1.1","ACT","RGAAv4","RGAA-1.1.5"],actIds:["7d6734"],all:[],any:["svg-non-empty-title","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"tabindex",impact:"serious",selector:"[tabindex]",tags:["cat.keyboard","best-practice"],all:[],any:["tabindex"],none:[]},{id:"table-duplicate-name",impact:"minor",selector:"table",tags:["cat.tables","best-practice","RGAAv4","RGAA-5.2.1"],all:[],any:[],none:["same-caption-summary"]},{id:"table-fake-caption",impact:"serious",selector:"table",matches:"data-table-matches",tags:["cat.tables","experimental","wcag2a","wcag131","section508","section508.22.g","EN-301-549","EN-9.1.3.1","RGAAv4","RGAA-5.4.1"],all:["caption-faked"],any:[],none:[]},{id:"target-size",impact:"serious",selector:"*",enabled:false,matches:"widget-not-inline-matches",tags:["cat.sensory-and-visual-cues","wcag22aa","wcag258"],all:[],any:[{options:{minSize:24},id:"target-size"},{options:{minOffset:24},id:"target-offset"}],none:[]},{id:"td-has-header",impact:"critical",selector:"table",matches:"data-table-large-matches",tags:["cat.tables","experimental","wcag2a","wcag131","section508","section508.22.g","TTv5","TT14.b","EN-301-549","EN-9.1.3.1","RGAAv4","RGAA-5.7.4"],all:["td-has-header"],any:[],none:[]},{id:"td-headers-attr",impact:"serious",selector:"table",matches:"table-or-grid-role-matches",tags:["cat.tables","wcag2a","wcag131","section508","section508.22.g","TTv5","TT14.b","EN-301-549","EN-9.1.3.1","RGAAv4","RGAA-5.7.4"],actIds:["a25f45"],all:["td-headers-attr"],any:[],none:[]},{id:"th-has-data-cells",impact:"serious",selector:"table",matches:"data-table-matches",tags:["cat.tables","wcag2a","wcag131","section508","section508.22.g","TTv5","TT14.b","EN-301-549","EN-9.1.3.1","RGAAv4","RGAA-5.7.1"],actIds:["d0f69e"],all:["th-has-data-cells"],any:[],none:[]},{id:"valid-lang",impact:"serious",selector:"[lang]:not(html), [xml\\:lang]:not(html)",tags:["cat.language","wcag2aa","wcag312","TTv5","TT11.b","EN-301-549","EN-9.3.1.2","ACT","RGAAv4","RGAA-8.8.1"],actIds:["de46e4"],all:[],any:[],none:[{options:{attributes:["lang","xml:lang"]},id:"valid-lang"}]},{id:"video-caption",impact:"critical",selector:"video",tags:["cat.text-alternatives","wcag2a","wcag122","section508","section508.22.a","TTv5","TT17.a","EN-301-549","EN-9.1.2.2","RGAAv4","RGAA-4.3.1"],actIds:["eac66b"],all:[],any:[],none:["caption"]}],checks:[{id:"abstractrole",evaluate:"abstractrole-evaluate"},{id:"aria-allowed-attr-elm",evaluate:"aria-allowed-attr-elm-evaluate"},{id:"aria-allowed-attr",evaluate:"aria-allowed-attr-evaluate",options:{validTreeRowAttrs:["aria-posinset","aria-setsize","aria-expanded","aria-level"]}},{id:"aria-allowed-role",evaluate:"aria-allowed-role-evaluate",options:{allowImplicit:true,ignoredTags:[]}},{id:"aria-busy",evaluate:"aria-busy-evaluate",deprecated:true},{id:"aria-conditional-attr",evaluate:"aria-conditional-attr-evaluate",options:{invalidTableRowAttrs:["aria-posinset","aria-setsize","aria-expanded","aria-level"]}},{id:"aria-errormessage",evaluate:"aria-errormessage-evaluate"},{id:"aria-hidden-body",evaluate:"aria-hidden-body-evaluate"},{id:"aria-level",evaluate:"aria-level-evaluate"},{id:"aria-prohibited-attr",evaluate:"aria-prohibited-attr-evaluate",options:{elementsAllowedAriaLabel:["applet","input"]}},{id:"aria-required-attr",evaluate:"aria-required-attr-evaluate"},{id:"aria-required-children",evaluate:"aria-required-children-evaluate",options:{reviewEmpty:["doc-bibliography","doc-endnotes","grid","list","listbox","menu","menubar","table","tablist","tree","treegrid","rowgroup"]}},{id:"aria-required-parent",evaluate:"aria-required-parent-evaluate",options:{ownGroupRoles:["listitem","treeitem"]}},{id:"aria-roledescription",evaluate:"aria-roledescription-evaluate",options:{supportedRoles:["button","img","checkbox","radio","combobox","menuitemcheckbox","menuitemradio"]}},{id:"aria-unsupported-attr",evaluate:"aria-unsupported-attr-evaluate"},{id:"aria-valid-attr-value",evaluate:"aria-valid-attr-value-evaluate",options:[]},{id:"aria-valid-attr",evaluate:"aria-valid-attr-evaluate",options:[]},{id:"braille-label-equivalent",evaluate:"braille-label-equivalent-evaluate"},{id:"braille-roledescription-equivalent",evaluate:"braille-roledescription-equivalent-evaluate"},{id:"deprecatedrole",evaluate:"deprecatedrole-evaluate"},{id:"fallbackrole",evaluate:"fallbackrole-evaluate"},{id:"has-global-aria-attribute",evaluate:"has-global-aria-attribute-evaluate"},{id:"has-widget-role",evaluate:"has-widget-role-evaluate",options:[]},{id:"invalidrole",evaluate:"invalidrole-evaluate"},{id:"is-element-focusable",evaluate:"is-element-focusable-evaluate"},{id:"no-implicit-explicit-label",evaluate:"no-implicit-explicit-label-evaluate"},{id:"unsupportedrole",evaluate:"unsupportedrole-evaluate"},{id:"valid-scrollable-semantics",evaluate:"valid-scrollable-semantics-evaluate",options:{roles:["tooltip"]}},{id:"color-contrast-enhanced",evaluate:"color-contrast-evaluate",options:{ignoreUnicode:true,ignoreLength:false,ignorePseudo:false,boldValue:700,boldTextPt:14,largeTextPt:18,contrastRatio:{normal:{expected:7,minThreshold:4.5},large:{expected:4.5,minThreshold:3}},pseudoSizeThreshold:.25,shadowOutlineEmMax:.1,textStrokeEmMin:.03}},{id:"color-contrast",evaluate:"color-contrast-evaluate",options:{ignoreUnicode:true,ignoreLength:false,ignorePseudo:false,boldValue:700,boldTextPt:14,largeTextPt:18,contrastRatio:{normal:{expected:4.5},large:{expected:3}},pseudoSizeThreshold:.25,shadowOutlineEmMax:.2,textStrokeEmMin:.03}},{id:"link-in-text-block-style",evaluate:"link-in-text-block-style-evaluate"},{id:"link-in-text-block",evaluate:"link-in-text-block-evaluate",options:{requiredContrastRatio:3,allowSameColor:true}},{id:"autocomplete-appropriate",evaluate:"autocomplete-appropriate-evaluate",deprecated:true},{id:"autocomplete-valid",evaluate:"autocomplete-valid-evaluate",options:{stateTerms:["none","false","true","disabled","enabled","undefined","null","xoff","xon"],ignoredValues:["text","pronouns","gender","message","content"]}},{id:"accesskeys",evaluate:"accesskeys-evaluate",after:"accesskeys-after"},{id:"focusable-content",evaluate:"focusable-content-evaluate"},{id:"focusable-disabled",evaluate:"focusable-disabled-evaluate"},{id:"focusable-element",evaluate:"focusable-element-evaluate"},{id:"focusable-modal-open",evaluate:"focusable-modal-open-evaluate"},{id:"focusable-no-name",evaluate:"focusable-no-name-evaluate"},{id:"focusable-not-tabbable",evaluate:"focusable-not-tabbable-evaluate"},{id:"frame-focusable-content",evaluate:"frame-focusable-content-evaluate"},{id:"landmark-is-top-level",evaluate:"landmark-is-top-level-evaluate"},{id:"no-focusable-content",evaluate:"no-focusable-content-evaluate"},{id:"page-has-heading-one",evaluate:"has-descendant-evaluate",after:"has-descendant-after",options:{selector:"h1:not([role], [aria-level]), :is(h1, h2, h3, h4, h5, h6):not([role])[aria-level=1], [role=heading][aria-level=1]",passForModal:true}},{id:"page-has-main",evaluate:"has-descendant-evaluate",after:"has-descendant-after",options:{selector:"main:not([role]), [role='main']",passForModal:true}},{id:"page-no-duplicate-banner",evaluate:"page-no-duplicate-evaluate",after:"page-no-duplicate-after",options:{selector:"header:not([role]), [role=banner]",role:"banner"}},{id:"page-no-duplicate-contentinfo",evaluate:"page-no-duplicate-evaluate",after:"page-no-duplicate-after",options:{selector:"footer:not([role]), [role=contentinfo]",role:"contentinfo"}},{id:"page-no-duplicate-main",evaluate:"page-no-duplicate-evaluate",after:"page-no-duplicate-after",options:{selector:"main:not([role]), [role='main']"}},{id:"tabindex",evaluate:"tabindex-evaluate"},{id:"alt-space-value",evaluate:"alt-space-value-evaluate"},{id:"duplicate-img-label",evaluate:"duplicate-img-label-evaluate",options:{parentSelector:"button, [role=button], a[href], p, li, td, th"}},{id:"explicit-label",evaluate:"explicit-evaluate"},{id:"help-same-as-label",evaluate:"help-same-as-label-evaluate"},{id:"hidden-explicit-label",evaluate:"hidden-explicit-label-evaluate"},{id:"implicit-label",evaluate:"implicit-evaluate"},{id:"label-content-name-mismatch",evaluate:"label-content-name-mismatch-evaluate",options:{pixelThreshold:.1,occurrenceThreshold:3}},{id:"multiple-label",evaluate:"multiple-label-evaluate"},{id:"title-only",evaluate:"title-only-evaluate"},{id:"landmark-is-unique",evaluate:"landmark-is-unique-evaluate",after:"landmark-is-unique-after"},{id:"has-lang",evaluate:"has-lang-evaluate",options:{attributes:["lang","xml:lang"]}},{id:"valid-lang",evaluate:"valid-lang-evaluate",options:{attributes:["lang","xml:lang"]}},{id:"xml-lang-mismatch",evaluate:"xml-lang-mismatch-evaluate"},{id:"dlitem",evaluate:"dlitem-evaluate"},{id:"listitem",evaluate:"listitem-evaluate"},{id:"only-dlitems",evaluate:"invalid-children-evaluate",options:{validRoles:["definition","term","listitem"],validNodeNames:["dt","dd"],divGroups:true}},{id:"only-listitems",evaluate:"invalid-children-evaluate",options:{validRoles:["listitem"],validNodeNames:["li"]}},{id:"structured-dlitems",evaluate:"structured-dlitems-evaluate"},{id:"caption",evaluate:"caption-evaluate"},{id:"frame-tested",evaluate:"frame-tested-evaluate",after:"frame-tested-after",options:{isViolation:false}},{id:"no-autoplay-audio",evaluate:"no-autoplay-audio-evaluate",options:{allowedDuration:3}},{id:"css-orientation-lock",evaluate:"css-orientation-lock-evaluate",options:{degreeThreshold:2}},{id:"meta-viewport-large",evaluate:"meta-viewport-scale-evaluate",options:{scaleMinimum:5,lowerBound:2}},{id:"meta-viewport",evaluate:"meta-viewport-scale-evaluate",options:{scaleMinimum:2}},{id:"target-offset",evaluate:"target-offset-evaluate",options:{minOffset:24}},{id:"target-size",evaluate:"target-size-evaluate",options:{minSize:24}},{id:"header-present",evaluate:"has-descendant-evaluate",after:"has-descendant-after",options:{selector:":is(h1, h2, h3, h4, h5, h6):not([role]), [role=heading]"}},{id:"heading-order",evaluate:"heading-order-evaluate",after:"heading-order-after"},{id:"identical-links-same-purpose",evaluate:"identical-links-same-purpose-evaluate",after:"identical-links-same-purpose-after"},{id:"internal-link-present",evaluate:"internal-link-present-evaluate"},{id:"landmark",evaluate:"has-descendant-evaluate",options:{selector:"main, [role=main]"}},{id:"meta-refresh-no-exceptions",evaluate:"meta-refresh-evaluate",options:{minDelay:72e3,maxDelay:false}},{id:"meta-refresh",evaluate:"meta-refresh-evaluate",options:{minDelay:0,maxDelay:72e3}},{id:"p-as-heading",evaluate:"p-as-heading-evaluate",options:{margins:[{weight:150,italic:true},{weight:150,size:1.15},{italic:true,size:1.15},{size:1.4}],passLength:1,failLength:.5}},{id:"region",evaluate:"region-evaluate",after:"region-after",options:{regionMatcher:"dialog, [role=dialog], [role=alertdialog], svg"}},{id:"skip-link",evaluate:"skip-link-evaluate"},{id:"unique-frame-title",evaluate:"unique-frame-title-evaluate",after:"unique-frame-title-after"},{id:"duplicate-id-active",evaluate:"duplicate-id-evaluate",after:"duplicate-id-after"},{id:"duplicate-id-aria",evaluate:"duplicate-id-evaluate",after:"duplicate-id-after"},{id:"duplicate-id",evaluate:"duplicate-id-evaluate",after:"duplicate-id-after"},{id:"aria-label",evaluate:"aria-label-evaluate"},{id:"aria-labelledby",evaluate:"aria-labelledby-evaluate"},{id:"avoid-inline-spacing",evaluate:"avoid-inline-spacing-evaluate",options:{cssProperties:["line-height","letter-spacing","word-spacing"]}},{id:"button-has-visible-text",evaluate:"has-text-content-evaluate"},{id:"doc-has-title",evaluate:"doc-has-title-evaluate"},{id:"error-occurred",evaluate:"exists-evaluate"},{id:"exists",evaluate:"exists-evaluate"},{id:"has-alt",evaluate:"has-alt-evaluate"},{id:"has-visible-text",evaluate:"has-text-content-evaluate"},{id:"important-letter-spacing",evaluate:"inline-style-property-evaluate",options:{cssProperty:"letter-spacing",minValue:.12}},{id:"important-line-height",evaluate:"inline-style-property-evaluate",options:{multiLineOnly:true,cssProperty:"line-height",minValue:1.5,normalValue:1}},{id:"important-word-spacing",evaluate:"inline-style-property-evaluate",options:{cssProperty:"word-spacing",minValue:.16}},{id:"is-on-screen",evaluate:"is-on-screen-evaluate"},{id:"non-empty-alt",evaluate:"attr-non-space-content-evaluate",options:{attribute:"alt"}},{id:"non-empty-if-present",evaluate:"non-empty-if-present-evaluate"},{id:"non-empty-placeholder",evaluate:"attr-non-space-content-evaluate",options:{attribute:"placeholder"}},{id:"non-empty-title",evaluate:"attr-non-space-content-evaluate",options:{attribute:"title"}},{id:"non-empty-value",evaluate:"attr-non-space-content-evaluate",options:{attribute:"value"}},{id:"presentational-role",evaluate:"presentational-role-evaluate"},{id:"role-none",evaluate:"matches-definition-evaluate",deprecated:true,options:{matcher:{attributes:{role:"none"}}}},{id:"role-presentation",evaluate:"matches-definition-evaluate",deprecated:true,options:{matcher:{attributes:{role:"presentation"}}}},{id:"svg-non-empty-title",evaluate:"svg-non-empty-title-evaluate"},{id:"caption-faked",evaluate:"caption-faked-evaluate"},{id:"html5-scope",evaluate:"html5-scope-evaluate"},{id:"same-caption-summary",evaluate:"same-caption-summary-evaluate"},{id:"scope-value",evaluate:"scope-value-evaluate",options:{values:["row","col","rowgroup","colgroup"]}},{id:"td-has-header",evaluate:"td-has-header-evaluate"},{id:"td-headers-attr",evaluate:"td-headers-attr-evaluate"},{id:"th-has-data-cells",evaluate:"th-has-data-cells-evaluate"},{id:"hidden-content",evaluate:"hidden-content-evaluate"}]});})(typeof window=="object"?window:Uh);});var bv={};Cr(bv,{dismissModals:()=>xM});async function xM(l){await l.evaluate(c=>{for(let g of c){let m=document.querySelectorAll(g);for(let p of m)if(p.offsetParent!==null){p.click();return}}},wM),await new Promise(c=>setTimeout(c,500));}var wM,yv=kr(()=>{wM=['[class*="cookie"] button[class*="accept"]','[class*="cookie"] button[class*="agree"]','[class*="consent"] button[class*="accept"]','[class*="consent"] button[class*="agree"]','[id*="cookie"] button','[id*="consent"] button',".cc-dismiss",".cc-allow",".cc-btn",'[class*="gdpr"] button[class*="accept"]','[aria-label*="cookie" i] button','[aria-label*="consent" i] button','button[class*="close-banner"]','[class*="popup"] [class*="close"]','[class*="overlay"] [class*="close"]','[class*="modal"] [class*="close"]','[class*="notification"] [class*="close"]','button[aria-label="Close"]','button[aria-label="Dismiss"]'];});var Uo={};Cr(Uo,{pruneHiddenIframeIssues:()=>EM,pruneInvisibleContrast:()=>DM,waitForRenderSettle:()=>AM});async function AM(l,c=4e3){let g=Date.now()+c;try{await l.waitForLoadState?.("load",{timeout:Math.min(c/2,2e3)});}catch{}let m="";for(;Date.now()<g;){let p;try{p=await l.evaluate(()=>{let b=typeof document.getAnimations=="function"?document.getAnimations():[],A=0;for(let _ of b){if(_.playState!=="running")continue;let w;try{w=_.effect?.getComputedTiming?.().iterations;}catch{w=void 0;}w!==1/0&&A++;}let x="",k=document.body?document.body.querySelectorAll('[style*="opacity"]'):[],R=Math.min(k.length,50);for(let _=0;_<R;_++)x+=getComputedStyle(k[_]).opacity+",";return A+"|"+x});}catch{return}if(p.indexOf("0|")===0&&p===m)return;m=p,await new Promise(b=>setTimeout(b,150));}}function wv(l){return _M.has(l.wcag)||/contrast/i.test(l.type||"")}async function DM(l,c){let g=Array.from(new Set(c.filter(A=>wv(A)&&A.selector).map(A=>A.selector))).slice(0,100);if(g.length===0)return c;let m;try{m=await l.evaluate(A=>{let x=[],k={},R=Math.max(document.documentElement.scrollWidth,window.innerWidth),_=Math.max(document.documentElement.scrollHeight,window.innerHeight),w=S=>{let y=S.match(/rgba?\(([^)]+)\)/);if(!y)return !1;let C=y[1].split(/[ ,/]+/).filter(Boolean);return C.length<4||parseFloat(C[3])>=.95};for(let S of A){let y=null;try{y=document.querySelector(S);}catch{continue}if(!y)continue;let C=getComputedStyle(y),F=y.getBoundingClientRect(),P=C.clipPath&&C.clipPath!=="none"&&/inset\(\s*(?:50|100)%/.test(C.clipPath)||/rect\(\s*0(?:px)?\s*,?\s*0(?:px)?\s*,?\s*0(?:px)?\s*,?\s*0(?:px)?\s*\)/.test(C.clip||""),M=F.width<=1||F.height<=1,q=window.scrollX,B=window.scrollY,j=F.right+q<=0||F.bottom+B<=0||F.left+q>=R||F.top+B>=_,X=!1;if(j)for(let G=y.parentElement;G&&G!==document.body&&G!==document.documentElement;G=G.parentElement){let N=getComputedStyle(G);if(N.overflowX!=="visible"||N.overflowY!=="visible"||N.transform&&N.transform!=="none"){X=!0;break}}if(P||M||F.right+q<=0||F.bottom+B<=0||j&&!X){x.push(S);continue}let T=y,v=!1;for(;T&&T!==document.documentElement;){if(parseFloat(getComputedStyle(T).opacity)===0){v=!0;break}T=T.parentElement;}if(v){k[S]="text is inside an opacity:0 element (hidden slide or pre-animation state) \u2014 check contrast in the state where it is shown";continue}let E=F.left+F.width/2,I=F.top+F.height/2,H=y,V=!1;for(let G=0;H&&H!==document.body&&G<8;G++){let N=getComputedStyle(H);if(w(N.backgroundColor)||N.backgroundImage&&N.backgroundImage!=="none")break;let U=H.querySelectorAll("video, canvas, img, picture");for(let Y=0;Y<U.length;Y++){let Z=U[Y];if(Z.contains(y)||y.contains(Z))continue;let z=Z.getBoundingClientRect();if(z.width>0&&z.height>0&&E>=z.left&&E<=z.right&&I>=z.top&&I<=z.bottom){V=!0;break}}if(V)break;H=H.parentElement;}V&&(k[S]="text sits over a video or image \u2014 the background behind the glyphs cannot be measured from CSS");}return {hidden:x,review:k}},g);}catch{return c}let p=new Set(m.hidden),b=[];for(let A of c){if(!wv(A)){b.push(A);continue}if(p.has(A.selector))continue;let x=m.review[A.selector];b.push(x&&A.confidence!=="needs_review"?{...A,confidence:"needs_review",reviewReason:x,...A.fix?{fix:{...A.fix,needsManualReview:true}}:{}}:A);}return b}async function EM(l,c){let g=Array.from(new Set(c.filter(b=>b.selector).map(b=>b.selector))).slice(0,200);if(g.length===0)return c;let m;try{m=await l.evaluate(b=>{let A=[];for(let x of b){let k=null;try{k=document.querySelector(x);}catch{continue}if(!k||k.tagName!=="IFRAME")continue;let R=getComputedStyle(k),_=k.getClientRects().length===0||R.visibility==="hidden"||R.visibility==="collapse",w=(k.getAttribute("src")||"").trim().toLowerCase().indexOf("javascript:")===0;(_||w)&&A.push(x);}return A},g);}catch{return c}if(m.length===0)return c;let p=new Set(m);return c.filter(b=>!p.has(b.selector))}var _M,Wo=kr(()=>{_M=new Set(["1.4.3","1.4.6","1.4.11"]);});var Xo={};Cr(Xo,{focusOnlyObscuredIndexes:()=>RM,resetInteractionState:()=>SM,restoreInteractionState:()=>CM,snapshotInteractionState:()=>kM});async function SM(l){try{await l.evaluate(()=>{try{document.activeElement?.blur?.();}catch{}try{window.scrollTo({left:0,top:0,behavior:"instant"});}catch{}});}catch{}}async function kM(l){try{await l.evaluate(()=>{let c=window;c.__waCallerState={el:document.activeElement,x:window.scrollX,y:window.scrollY};});}catch{}}async function CM(l){try{await l.evaluate(()=>{let c=window,g=c.__waCallerState;if(delete c.__waCallerState,!g)return;let m=g.el;if(m&&m!==document.body&&m!==document.documentElement&&m.isConnected)try{m.focus({preventScroll:!0});}catch{}try{window.scrollTo({left:g.x,top:g.y,behavior:"instant"});}catch{}});}catch{}}function TM(l){if(typeof l=="string")return l;if(!Array.isArray(l))return null;let c=l.flat(1/0).filter(g=>typeof g=="string");return c.length===1?c[0]:null}async function RM(l,c){let g=c.map(A=>{let k=[...A.any??[],...A.none??[]].flatMap(_=>_.relatedNodes??[]);if(!k.length)return null;let R=k.map(_=>TM(_.target));return R.every(_=>!!_)?R:null}),m=Array.from(new Set(g.flatMap(A=>A??[])));if(!m.length)return new Set;let p={};try{p=await l.evaluate(({sels:A,own:x})=>{let k=_=>{let w=_.getBoundingClientRect(),S=getComputedStyle(_);return !!((w.width<=1||w.height<=1)&&(S.overflow==="hidden"||S.position==="absolute"||S.position==="fixed")||/^rect\(\s*0(px)?[\s,]+0(px)?[\s,]+0(px)?[\s,]+0(px)?\s*\)$/.test(S.clip||"")||/inset\(\s*50%/.test(S.clipPath||""))},R={};for(let _ of A){let w=null;try{w=document.querySelector(_);}catch{w=null;}if(!w){R[_]=!1;continue}let S=w.closest(x);if(S&&S!==document.body&&S!==document.documentElement){R[_]=!0;continue}if(w===document.activeElement){try{w.blur();}catch{}R[_]=k(w);continue}R[_]=k(w);}return R},{sels:m,own:$o});}catch{return new Set}let b=new Set;return g.forEach((A,x)=>{A&&A.length&&A.every(k=>p[k]===true)&&b.add(x);}),b}var Ko=kr(()=>{Tr();});var ua={};Cr(ua,{dedupeByElementIdentity:()=>MM,deduplicateIssues:()=>FM});function FM(l){let c=new Map,g=[...l].sort((m,p)=>{let b={webability:0,"axe-core":1,"deep-analysis":2},A=b[m.source]??3,x=b[p.source]??3;return A-x});for(let m of g){let p=IM(m);c.has(p)?!c.get(p).fix?.suggestedValue&&m.fix?.suggestedValue&&c.set(p,m):c.set(p,m);}return Array.from(c.values())}function IM(l){let c=l.selector.replace(/:focus-visible$/,"").replace(/:focus$/,"").replace(/\[data-[^\]]+\]/g,"").trim(),g=l.wcag||"";return c&&g?`${c}::${g}`:`${l.type}::${c||l.id}`}async function MM(l,c){if(c.length<2)return c;let g=Array.from(new Set(c.map(_=>_.selector).filter(Boolean))),m;try{m=await l.evaluate(_=>{let w=Array.from(document.querySelectorAll("*")),S=new Map;w.forEach((C,F)=>S.set(C,F));let y={};for(let C of _){let F=null;try{F=document.querySelector(C);}catch{}if(!F){let P=C.replace(/:(?:focus-visible|focus-within|focus|hover|active)$/,"");if(P!==C)try{F=document.querySelector(P);}catch{}}if(F){let P=F.closest("table");y[C]={el:S.get(F),table:P?S.get(P):-1,doc:F===document.documentElement||F===document.body};}}return y},g);}catch{return c}let p={webability:0,"axe-core":1,"deep-analysis":2},b=_=>{let w=m[_.selector];if(!w)return null;let S=_.wcag||_.type;return w.doc?{key:PM.has(_.wcag||"")?`doc::${S}`:`doc::${S}::${_.type}`,owner:true}:w.table>=0&&LM.test(_.type)?{key:`${w.table}::${S}::table-headers`,owner:w.el===w.table}:{key:`${w.el}::${S}`,owner:true}},A=[...c].sort((_,w)=>{let S=b(_),y=b(w),C=S?.owner?0:1,F=y?.owner?0:1;return C-F||(p[_.source]??3)-(p[w.source]??3)}),x=new Map,k=[];for(let _ of A){let w=b(_);if(!w){k.push(_);continue}let S=x.get(w.key);S?!S.fix?.suggestedValue&&_.fix?.suggestedValue&&(b(S)?.owner??true)===w.owner&&x.set(w.key,_):x.set(w.key,_);}let R=new Set([...x.values(),...k]);return c.filter(_=>R.has(_))}var LM,PM,ca=kr(()=>{LM=/^missing_table_header$|^td-has-header$|^th-has-data-cells$|^h43|^h63/,PM=new Set(["2.4.1","3.1.1","2.4.2"]);});var _v={};Cr(_v,{parseGif:()=>xv,playsOverFiveSeconds:()=>Av,verifyAnimatedGifs:()=>OM});function xv(l){if(String.fromCharCode(l[0]??0,l[1]??0,l[2]??0)!=="GIF")return null;let g=13,m=l[10]??0;m&128&&(g+=3*(1<<(m&7)+1));let p=0,b=0,A=0,x=null,k=()=>{for(;g<l.length;){let R=l[g++];if(R===0)return;g+=R;}};for(;g<l.length;){let R=l[g++];if(R===59)break;if(R===33){let _=l[g++];if(_===249)A=(l[g+2]??0)|(l[g+3]??0)<<8,g+=1+(l[g]??4),k();else if(_===255){let w=l[g]??0,S=String.fromCharCode(...Array.from(l.subarray(g+1,g+1+w)));g+=1+w,(S==="NETSCAPE2.0"||S==="ANIMEXTS1.0")&&l[g]===3&&l[g+1]===1&&(x=(l[g+2]??0)|(l[g+3]??0)<<8),k();}else k();}else if(R===44){let _=l[g+8]??0;g+=9,_&128&&(g+=3*(1<<(_&7)+1)),g+=1,k(),p++,b+=A<2?10:A,A=0;}else break}return {frames:p,seconds:b/100,loops:x}}function Av(l){if(l.frames<2)return false;if(l.loops===0)return true;let c=l.loops===null?1:l.loops+1;return l.seconds*c>5}async function OM(l,c){let g=c.filter(b=>b.type==="animated_gif_no_pause");if(!g.length)return c;let m=Array.from(new Set(g.map(b=>b.selector))),p={};try{p=await l.evaluate(async({sels:b,parserSrc:A})=>{let x=new Function("var __name = function (f) { return f }; return ("+A+")")(),k={};return await Promise.all(b.map(async R=>{k[R]=null;try{let _=document.querySelector(R),w=_&&(_.currentSrc||_.src);if(!w)return;let S=new AbortController,y=setTimeout(()=>S.abort(),5e3);try{let C=await fetch(w,{signal:S.signal,credentials:"same-origin"});if(!C.ok||Number(C.headers.get("content-length")||"0")>2e7)return;k[R]=x(new Uint8Array(await C.arrayBuffer()));}finally{clearTimeout(y);}}catch{}})),k},{sels:m,parserSrc:xv.toString()});}catch{p={};}return c.flatMap(b=>{if(b.type!=="animated_gif_no_pause")return [b];let A=p[b.selector];if(!A)return [{...b,message:`${b.message} \u2014 the GIF file could not be read from the page (cross-origin or blocked), so its frame count and duration were not measured`}];if(!Av(A))return [];let x=A.loops===0?"loops forever":`plays for ${(A.seconds*(A.loops===null?1:A.loops+1)).toFixed(1)}s`;return [{...b,message:`animated GIF (${A.frames} frames, ${x}) starts automatically with no pause control \u2014 replace it with a video that has controls or a static image, or add a pause button (WCAG 2.2.2)`}]})}var Dv=kr(()=>{});var Ku={};Cr(Ku,{scopeIssuesToRoot:()=>NM});async function NM(l,c,g){let m=Array.from(new Set(c.map(b=>b.selector).filter(Boolean))),p;try{p=await l.evaluate(({rootSel:b,sels:A})=>{let x=_=>{try{let S=document.querySelector(_);if(S)return S}catch{}let w=_.replace(/:(?:focus-visible|focus-within|focus|hover|active)$/,"");if(w!==_)try{return document.querySelector(w)}catch{return null}return null},k=null;try{k=document.querySelector(b);}catch{return {invalid:!0,matched:!1,within:{}}}if(!k)return {invalid:!1,matched:!1,within:{}};let R={};for(let _ of A){let w=x(_);R[_]=w?w===k||k.contains(w):!0;}return {invalid:!1,matched:!0,within:R}},{rootSel:g,sels:m});}catch{return {issues:c,warning:`scope:evaluate-failed (${g}) \u2014 results unfiltered`}}return p.invalid?{issues:c,warning:`scope:invalid-selector (${g}) \u2014 results unfiltered`}:p.matched?{issues:c.filter(b=>b.selector?p.within[b.selector]===true:true)}:{issues:[],warning:`scope:root-miss (${g} matched nothing \u2014 empty result)`}}var Yu=kr(()=>{});var Ho={mobile:{width:375,height:667},tablet:{width:768,height:1024},desktop:{width:1280,height:720}};function Lg(l,c){let g=l??"";if(g.trimStart().startsWith("{"))try{let m=JSON.parse(g);if(m&&typeof m=="object"&&!Array.isArray(m))return JSON.stringify({...m,platform:c})}catch{}return (g?g+" | ":"")+"platform: "+c}var iL=()=>{let l="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye]",g=[],m=new Set;function p(x){let k=(x.textContent||"").trim().replace(/\s+/g,""),R=x.querySelector("img, svg, picture")!==null,_=x.querySelector("i[class], span[class]")!==null;if(k.length>0&&!R&&!_)return false;if(R){let w=x.querySelectorAll("img"),S="";w.forEach(F=>{S+=(F.getAttribute("alt")||"").trim();});let y=k.replace(/\s+/g,""),C=S.replace(/\s+/g,"");return y===""||y===C}return false}function b(x){let k=x.nextElementSibling;for(;k;){if(isVisible(k))return k;k=k.nextElementSibling;}return null}return document.querySelectorAll("a[href]").forEach(x=>{if(g.length>=50||x.closest(l)||!isVisible(x)||m.has(x))return;let k=x.getAttribute("href");if(!k||k==="#")return;let R=b(x);if(!R||R.tagName!=="A"||R.getAttribute("href")!==k||m.has(R)||x.getAttribute("aria-hidden")==="true"||R.getAttribute("aria-hidden")==="true")return;let w=p(x),S=p(R);if(!w&&!S)return;let y=w?x:R,C=w?R:x;m.add(y),m.add(C);let F=uniqueSel(y),P=y.outerHTML.slice(0,300),M=(C.textContent||"").trim().slice(0,80);g.push({selector:F,attribute:"aria-hidden",currentValue:"",issueType:"adjacent_redundant_link",wcag:"2.4.4",context:JSON.stringify({href:k,imageLink:true,adjacentLinkText:M,suggestion:'Add aria-hidden="true" and tabindex="-1" to the image-only link'}),needsAI:false,fixValue:"true",outerHtml:P}),g.push({selector:F,attribute:"tabindex",currentValue:"",issueType:"adjacent_redundant_link",wcag:"2.4.4",context:JSON.stringify({supplementary:"Remove from tab order alongside aria-hidden",href:k}),needsAI:false,fixValue:"-1",outerHtml:P});}),g},Pg={name:"adjacentLinks",cap:50,async detect(l){return l.evaluate(iL)}};var oL=()=>{let l="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye],[class*=ae-exclude],[id*=ae_app],[id*=ae_],[class*=EquallyAI]",c='.slick-cloned,.slick-clone,.swiper-slide-duplicate,.owl-item.cloned,[data-slick-index^="-"],[data-swiper-slide-index]:not([data-swiper-slide-index=""])',g=["[aria-expanded]",'[class*="dropdown" i]','[class*="submenu" i]','[class*="sub-menu" i]','[class*="collapse" i]','[class*="accordion" i]','[class*="megamenu" i]','[class*="mega-menu" i]','[class*="flyout" i]','[class*="fsNav" i]','[role="menu"]','[role="menubar"]','[role="tablist"]','[role="tab"]',"nav"].join(","),m=new Set(["A","BUTTON","INPUT","SELECT","TEXTAREA"]),p=50,b=[],A=new Set;function x(_){let w=_,S=0;for(;w&&w.nodeType===1&&w!==document.body&&S<20;){try{let y=getComputedStyle(w);if(y.display==="none"||y.visibility==="hidden"||y.visibility==="collapse")return !0}catch{}w=w.parentElement,S++;}return false}function k(_){let w=_.tagName,S=_.getAttribute("tabindex");if(S!==null){let y=parseInt(S,10);if(!isNaN(y)&&y>=0)return true;if(!isNaN(y)&&y<0)return false}return m.has(w)?!(w==="A"&&!_.hasAttribute("href")||_.hasAttribute("disabled")):false}return document.querySelectorAll('[aria-hidden="true"]').forEach(_=>{if(b.length>=p||_.closest(l)||_.closest(c)||_.closest(g)||_.matches(g))return;let w=[];if(k(_)&&w.push(_),_.querySelectorAll("a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]").forEach(y=>{k(y)&&w.push(y);}),w.length!==0)for(let y of w){if(b.length>=p)return;let C=uniqueSel(y),F=C+"\0tabindex";if(A.has(F))continue;A.add(F);let P=x(y),M=!P;b.push({selector:C,attribute:"tabindex",currentValue:y.getAttribute("tabindex")||"",issueType:"aria_hidden_focusable",wcag:"4.1.2",context:JSON.stringify({tag:y.tagName.toLowerCase(),parentHidden:_.tagName.toLowerCase(),collapsed:P,suggestion:P?"Focusable control inside an aria-hidden region that is currently display:none/visibility:hidden \u2014 likely a closed modal/dialog/dropdown. Confirm the control is permanently hidden before removing it from the tab order.":'This control is rendered and operable inside an aria-hidden region. Remove aria-hidden from the region if the control is meant to be used, or hide the region (display:none / hidden / inert) when it is not. Do not set tabindex="-1" on a visible control: keyboard users lose it.'}),needsAI:false,fixValue:"-1",...P?{needsReview:true,reviewReason:'this focusable control is inside an aria-hidden region that is currently hidden by layout (display:none/visibility:hidden) \u2014 the signature of a closed modal/dialog/dropdown/tab-panel whose controls are meant to become focusable when it opens. A static tabindex="-1" would permanently remove it from the tab order and create a keyboard trap once the widget is shown. Confirm the control is permanently hidden before applying.'}:{},...M?{manualFix:true,reviewReason:'the control is rendered inside an aria-hidden region: tabindex="-1" would leave a visible, clickable control unreachable by keyboard (2.1.1). The right fix is on the region (remove aria-hidden, or hide it for everyone), which needs a person.'}:{},outerHtml:(y.outerHTML||"").slice(0,300)});}}),b},Mg={name:"ariaHiddenFocusable",cap:50,async detect(l){return l.evaluate(oL)}};var sL=()=>{let l="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],m=new Set,p=[/\btoast\b/i,/\bsnackbar\b/i,/error[-_]message|error[-_]msg|form[-_]error|validation[-_]error/i,/success[-_]message|success[-_]msg/i,/alert[-_]message|alert[-_]banner/i,/flash[-_]message|flash[-_]notice/i,/cart[-_]count|cart[-_]badge|cart[-_]quantity/i,/loading[-_]spinner|loading[-_]indicator/i,/search[-_]results?[-_]count/i,/\blive[-_]region\b/i,/notification[-_](bar|area|container|popup|wrapper)/i,/status[-_]message/i];function b(A){if((A.textContent||"").trim())return false;if(typeof A.checkVisibility=="function")return A.checkVisibility({visibilityProperty:true});for(let x=A;x&&x.nodeType===1;x=x.parentElement)if(getComputedStyle(x).display==="none")return false;return getComputedStyle(A).visibility!=="hidden"}for(let A of p){if(g.length>=50)break;let x=document.querySelectorAll("*");for(let k of x){if(g.length>=50)break;if(m.has(k)||k.closest(l))continue;let R=k.className&&typeof k.className=="string"?k.className:"",_=k.getAttribute("id")||"";if(!A.test(R)&&!A.test(_)||k.getAttribute("aria-live"))continue;let w=k.getAttribute("role")||"";if(["alert","status","log","timer","marquee"].includes(w)||!b(k))continue;m.add(k);let S=uniqueSel(k),y=A.test(R)?"class":"id",C=y==="class"?R.slice(0,60):_;g.push({selector:S,attribute:"aria-live",currentValue:"",issueType:"aria_live",wcag:"4.1.3",context:y+": "+C+" | pattern: "+A.source,needsAI:false,fixValue:"polite"});}}return g},Og={name:"ariaLive",cap:50,async detect(l){return l.evaluate(sL)}};var lL=()=>{let l="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye],[class*=ae-exclude],[id*=ae_app],[id*=ae_],[class*=EquallyAI]",g=[],m=new Set,p=["aria-labelledby","aria-describedby"];return document.querySelectorAll("[aria-labelledby],[aria-describedby]").forEach(x=>{if(!(g.length>=50)&&!x.closest(l)&&isVisible(x)&&!isHiddenFromAT(x)&&!x.getAttribute("aria-live")&&!x.closest("[aria-live]")&&!x.closest("template"))for(let k of p){let R=x.getAttribute(k);if(!R||!R.trim())continue;let _=R.trim().split(/\s+/).filter(B=>B.length>0);if(_.length===0||!_.every(B=>!document.getElementById(B)))continue;let S=x.getAttribute("aria-label");if(S&&S.trim())continue;let y=getAccessibleName(x);if(y&&y.trim())continue;let C=uniqueSel(x),F=C+"\0"+k;if(m.has(F))continue;m.add(F);let{nearbyHeading:P,parentTag:M,parentRole:q}=getNearbyContext(x);g.push({selector:C,attribute:"aria-label",currentValue:"",issueType:"broken_aria_reference",wcag:"4.1.2",context:JSON.stringify({tag:x.tagName.toLowerCase(),brokenAttr:k,brokenIds:_,nearbyHeading:P,parentTag:M,parentRole:q,suggestion:`All IDs in ${k}="${R}" are missing from the DOM. Element has no accessible name. Generate an aria-label.`}),needsAI:true,outerHtml:(x.outerHTML||"").slice(0,300)});}}),g},Ng={name:"brokenAriaReferences",cap:50,async detect(l){return l.evaluate(lL)}};var uL=()=>{let c=[],g=["submit","send","login","log in","sign in","sign up","register","subscribe","save","order","purchase","checkout","pay","book","apply","enroll","confirm","join","create account","get started","schedule","place order","buy","donate","search","find","go"],m=document.querySelectorAll("button");for(let p of m){if(c.length>=50)break;let b=p;if(isWidget(b)||b.hasAttribute("type")||!b.closest("form"))continue;let A=(b.textContent||"").trim().slice(0,60),x=(b.getAttribute("aria-label")||"").trim().slice(0,60),k=A||x||"(no label)",R=k.toLowerCase();g.some(w=>R.includes(w))||c.push({selector:uniqueSel(b),attribute:"type",currentValue:"",issueType:"missing_button_type",wcag:"3.2.2",context:"button inside <form> missing type attribute \u2014 defaults to submit | label: "+k,needsAI:false,fixValue:"button",outerHtml:(b.outerHTML||"").slice(0,300)});}return c},qg={name:"buttonType",cap:50,async detect(l){return l.evaluate(uL)}};var cL=()=>{let c=[],g=document.querySelectorAll("video, audio");for(let m of Array.from(g)){if(c.length>=20)break;if(isWidget(m)||typeof isVisible=="function"&&!isVisible(m)||m.error)continue;let p=m.tagName==="VIDEO";if(p){let F=m.hasAttribute("muted")||m.muted,P=m.hasAttribute("controls"),M=m.hasAttribute("loop")||m.loop,q=/mute|unmute|sound|volume|audio|play|pause/i,B=!!m.parentElement?.querySelector('button, [role="button"]')||!!m.getAttribute("id")&&!!document.querySelector('[aria-controls~="'+(m.getAttribute("id")||"").replace(/"/g,"")+'"]');for(let j=m.parentElement?.parentElement||null,X=0;j&&!B&&X<3;j=j.parentElement,X++)B=Array.from(j.querySelectorAll('button, [role="button"]')).some(T=>q.test((T.getAttribute("aria-label")||"")+" "+(T.getAttribute("title")||"")+" "+(T.textContent||"")));if(F&&M&&!P&&!B)continue}let b=m.querySelectorAll("track"),A=false;for(let F of Array.from(b)){let P=(F.getAttribute("kind")||"").toLowerCase();if(P==="captions"||P==="subtitles"){A=true;break}}if(A)continue;let x=m.currentSrc||m.getAttribute("src")||"";if(x||(x=m.querySelector("source")?.getAttribute("src")||""),!x)continue;let k=x.toLowerCase();if(k.startsWith("blob:")||k.startsWith("data:")||k.startsWith("about:")||k.startsWith("javascript:")||k.endsWith(".m3u8")||k.includes(".m3u8?")||k.endsWith(".mpd")||k.includes(".mpd?"))continue;let R=x;try{R=new URL(x,location.href).toString();}catch{continue}let _=typeof uniqueSel=="function"?uniqueSel(m):"",w=m.getAttribute("title")||m.getAttribute("aria-label")||"",S=typeof getNearbyContext=="function"?getNearbyContext(m):{parentTag:m.tagName.toLowerCase(),nearbyHeading:""},y=[];y.push("media: "+m.tagName.toLowerCase()),y.push("src: "+R.slice(0,200)),w&&y.push("title: "+w.slice(0,80)),S.nearbyHeading&&y.push("heading: "+S.nearbyHeading),y.push("parent: "+S.parentTag);let C=p;c.push({selector:_,attribute:"data-needs-captions",currentValue:"",issueType:"missing_captions",wcag:"1.2.2",context:y.join(" | "),needsAI:true,...C?{needsReview:true,reviewReason:"cannot verify an audio track in-page \u2014 confirm the video has speech content before transcribing (silent videos need no captions)"}:{},imageSrc:R,outerHtml:(m.outerHTML||"").slice(0,300)});}return c},Bg={name:"captions",cap:20,async detect(l){return l.evaluate(cL)}};var dL=()=>{let l="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],m="p, li, blockquote, article, section, main, div",p=document.querySelectorAll("a[href]"),b=new Map;for(let A of Array.from(p)){if(g.length>=40)break;if(A.closest(l)||A.closest('nav, header, footer, aside, [role="navigation"], [role="banner"], [role="contentinfo"]')||typeof isVisible=="function"&&!isVisible(A))continue;let x=A.closest(m);if(!x)continue;let k=(A.textContent||"").trim();if(!k)continue;let R=b.get(x);if(R===void 0){R=0;let j=document.createTreeWalker(x,NodeFilter.SHOW_TEXT),X;for(;X=j.nextNode();){let T=X.parentElement;!T||T.closest("a")||T.closest(m)===x&&(typeof isVisible=="function"&&!isVisible(T)||(R+=(X.textContent||"").trim().length));}b.set(x,R);}if(R<20||A.querySelector("img, svg, [class*=icon], [class*=arrow]"))continue;let _=getComputedStyle(A),w=getComputedStyle(x);if((_.textDecorationLine||_.textDecoration||"").includes("underline")||(()=>{let j=document.createTreeWalker(A,NodeFilter.SHOW_TEXT),X,T=false;for(;X=j.nextNode();){if(!/[\p{L}\p{N}]/u.test(X.textContent||""))continue;T=true;let v=false;for(let E=X.parentElement;E&&E!==A;E=E.parentElement){let I=getComputedStyle(E),H=(I.textDecorationColor||"").replace(/\s/g,"");if((I.textDecorationLine||"").includes("underline")&&H!=="transparent"&&!/^rgba\([^)]*,0(?:\.0+)?\)$/.test(H)){v=true;break}let V=(I.borderBottomColor||"").replace(/\s/g,""),G=V==="transparent"||/^rgba\([^)]*,0(?:\.0+)?\)$/.test(V);if((I.borderBottomStyle||"none")!=="none"&&parseFloat(I.borderBottomWidth||"0")>0&&!G){v=true;break}}if(!v)return false}return T})())continue;let C=parseInt(_.fontWeight||"400",10),F=parseInt(w.fontWeight||"400",10);if(Number.isFinite(C)&&Number.isFinite(F)&&C-F>=300||(_.borderBottomStyle||"none")!=="none"&&(_.borderBottomWidth||"0px")!=="0px"||_.color===w.color)continue;let M=typeof uniqueSel=="function"?uniqueSel(A):"",q=typeof getNearbyContext=="function"?getNearbyContext(A):{parentTag:A.tagName.toLowerCase(),nearbyHeading:""},B=[];B.push("link: "+k.slice(0,40)),B.push("color: "+_.color),B.push("parent-color: "+w.color),q.nearbyHeading&&B.push("heading: "+q.nearbyHeading),B.push("parent: "+q.parentTag),g.push({selector:M,attribute:"style",currentValue:_.textDecoration||"",issueType:"color_only_link",wcag:"1.4.1",context:B.join(" | "),needsAI:false,fixValue:"text-decoration: underline !important;",outerHtml:(A.outerHTML||"").slice(0,300)});}return g},Hg={name:"colorOnly",cap:40,async detect(l){return l.evaluate(dL)}};var fL=()=>{let l=[],c=v=>typeof parseCssColor=="function"?parseCssColor(v):null,g=(v,E,I)=>typeof relLuminance=="function"?relLuminance(v,E,I):0,m=(v,E)=>typeof contrastRatio=="function"?contrastRatio(v,E):1;function p(v){let E=String(v.backgroundImage||"none");if(E==="none")return false;if(/gradient\(/i.test(E))return true;if(!/url\(/i.test(E))return false;let I=String(v.backgroundRepeat||"").toLowerCase(),H=String(v.backgroundSize||"").toLowerCase(),V=I.split(",").map(N=>N.trim()).some(N=>N!==""&&N!=="no-repeat"),G=/cover|contain|100%/.test(H);return V||G}let b=new Map;function A(v){let E=[],I=false;for(let H=v;H&&H.nodeType===1;H=H.parentElement){let V=b.get(H);if(V!==void 0){I=V;break}if(E.push(H),parseFloat(getComputedStyle(H).opacity||"1")<1){I=true;break}}for(let H of E)b.set(H,I);return I}let x=new Map;function k(v){let E=x.get(v);if(E)return E;E=[];let I=Array.from(v.children);for(let H=0;H<I.length;H++){let V=getComputedStyle(I[H]);V.position==="static"||V.display==="none"||V.visibility!=="visible"||parseFloat(V.opacity||"1")<=0||E.push({el:I[H],z:V.zIndex==="auto"?0:parseInt(V.zIndex,10)||0,i:H});}return x.set(v,E),E}function R(v){if(v===document.documentElement)return true;let E=getComputedStyle(v);return !!(E.position==="fixed"||E.position==="sticky"||E.zIndex!=="auto"&&E.position!=="static"||E.zIndex!=="auto"&&v.parentElement&&/flex|grid/.test(getComputedStyle(v.parentElement).display||"")||parseFloat(E.opacity||"1")<1||E.transform&&E.transform!=="none"||E.filter&&E.filter!=="none"||E.isolation==="isolate"||E.mixBlendMode&&E.mixBlendMode!=="normal"||/paint|strict|content/.test(E.contain||""))}function _(v,E,I,H){let V=k(v);if(!V.length||V.length===1&&V[0].el===E)return [];let G=-1/0;for(let Y=I;Y&&Y!==v;Y=Y.parentElement){let Z=getComputedStyle(Y);if(Z.position==="static")continue;let z=Z.zIndex==="auto"?0:parseInt(Z.zIndex,10)||0;z>G&&(G=z);}let N=Array.prototype.indexOf.call(v.children,E),U=[];for(let Y of V){if(Y.el===E||!(Y.z<0?R(v):G>Y.z||G===Y.z&&Y.i<N))continue;let z=Y.el.getBoundingClientRect();z.left>H.left+1||z.top>H.top+1||z.right<H.right-1||z.bottom<H.bottom-1||U.push(Y);}return U.sort((Y,Z)=>Z.z-Y.z||Z.i-Y.i),U.map(Y=>Y.el)}function w(v){try{let I=document.createRange(),H=null;for(let V of Array.from(v.childNodes)){if(V.nodeType!==3||!(V.textContent||"").trim())continue;I.selectNodeContents(V);let G=I.getBoundingClientRect();G.width<=0||G.height<=0||(H=H?{left:Math.min(H.left,G.left),top:Math.min(H.top,G.top),right:Math.max(H.right,G.right),bottom:Math.max(H.bottom,G.bottom)}:{left:G.left,top:G.top,right:G.right,bottom:G.bottom});}if(H)return H}catch{}let E=v.getBoundingClientRect();return {left:E.left,top:E.top,right:E.right,bottom:E.bottom}}function S(v,E){let I=document.documentElement,H=null,V=[{acc:[0,0,0],cover:0},{acc:[0,0,0],cover:0},{acc:[0,0,0],cover:0}],G=Math.max(0,Math.min(1,E[3]));V[0].acc=[E[0]*G,E[1]*G,E[2]*G],V[0].cover=G,V[2].cover=1;let N=1,U=()=>V.some(me=>me.cover<1-1e-9),Y=(me,Pe=1)=>{if(!U())return true;let ve=c(me.backgroundColor||""),Se=p(me);for(let ht of V){if(ht.cover>=1-1e-9)continue;if(Se)return false;if(!ve)continue;let Dt=Math.max(0,Math.min(1,ve[3]))*Pe;if(Dt<=0)continue;let He=Dt*(1-ht.cover);ht.acc[0]+=ve[0]*He,ht.acc[1]+=ve[1]*He,ht.acc[2]+=ve[2]*He,ht.cover+=He;}return true},Z=me=>{let Pe=Math.max(0,Math.min(1,parseFloat(me.opacity||"1")));if(!(Pe>=1)){for(let ve of V)ve.acc=ve.acc.map(Se=>Se*Pe),ve.cover*=Pe;N*=Pe;}},z=v,ie=null;for(;z&&z!==I&&!(!U()&&!A(z));){let me=getComputedStyle(z);if(ie&&k(z).length){H||(H=w(v));for(let Pe of _(z,ie,v,H)){let ve=getComputedStyle(Pe);if(!Y(ve,Math.max(0,Math.min(1,parseFloat(ve.opacity||"1")))))return null}}if(!Y(me))return null;Z(me),ie=z,z=z.parentElement;}if(z===I){let me=getComputedStyle(I);if(!Y(me))return null;Z(me);}for(let me of V){let Pe=1-me.cover;Pe>0&&(me.acc=me.acc.map(ve=>ve+255*Pe),me.cover=1);}let se=me=>[Math.round(Math.min(255,me.acc[0])),Math.round(Math.min(255,me.acc[1])),Math.round(Math.min(255,me.acc[2]))],fe=V[2].acc.map(me=>Math.min(255,me));return {fg:se(V[0]),bg:se(V[1]),k:N,rest:fe}}function y(v,E,I){return "#"+[v,E,I].map(H=>{let V=Math.max(0,Math.min(255,Math.round(H))).toString(16);return V.length===1?"0"+V:V}).join("")}let C=.1;function F(v,E,I,H=1,V=[0,0,0]){let G=g(E[0],E[1],E[2])>.5;for(let N of [I+C,I]){let U=P(v,E,N,G,H,V)||P(v,E,N,!G,H,V);if(U)return U}return null}function P(v,E,I,H,V,G){let N=0,U=1,Y=null;for(let Z=0;Z<20;Z++){let z=(N+U)/2,ie=H?[v[0]*(1-z),v[1]*(1-z),v[2]*(1-z)]:[v[0]+(255-v[0])*z,v[1]+(255-v[1])*z,v[2]+(255-v[2])*z],se=[Math.round(ie[0]),Math.round(ie[1]),Math.round(ie[2])],fe=[se[0]*V+G[0],se[1]*V+G[1],se[2]*V+G[2]];m(fe,E)>=I?(Y=se,U=z):N=z;}return Y}let M=new Set(["application","button","checkbox","columnheader","combobox","grid","gridcell","group","link","listbox","menu","menubar","menuitem","menuitemcheckbox","menuitemradio","option","radio","radiogroup","row","rowheader","scrollbar","searchbox","separator","slider","spinbutton","switch","tab","tablist","textbox","toolbar","tree","treegrid","treeitem"]);function q(v){if(v.closest("button:disabled, input:disabled, select:disabled, textarea:disabled, optgroup:disabled, option:disabled"))return true;for(let I=v;I&&I.nodeType===1;I=I.parentElement){if(I.getAttribute("aria-disabled")!=="true")continue;let H=(I.getAttribute("role")||"").trim().toLowerCase().split(/\s+/)[0];if(H&&M.has(H))return true}let E=v.closest("label");if(E){let I=E.control;if(I&&(I.disabled||I.getAttribute("aria-disabled")==="true"))return true}return false}let B=document.createTreeWalker(document.body,4),j=new Set,X=[],T=B.nextNode();for(;T;){let v=(T.textContent||"").trim();if(v.length>=2||/[\p{L}\p{N}]/u.test(v)){let E=T.parentElement;E&&!j.has(E)&&(j.add(E),X.push(E));}T=B.nextNode();}for(let v of X){if(isWidget(v)||isHiddenFromAT(v)||!isVisible(v)||q(v))continue;let E=getComputedStyle(v),I=c(E.webkitTextFillColor||E.color||"");if(!I)continue;if(I[3]<.5){let He=E.webkitBackgroundClip||E.backgroundClip||"",Lt=E.backgroundImage||"";if(String(He).includes("text")&&/gradient\(/i.test(Lt)){let br=Array.from(v.childNodes).filter(Bt=>Bt.nodeType===3).map(Bt=>(Bt.textContent||"").trim()).join("");br&&l.push({selector:uniqueSel(v),attribute:"style",currentValue:"gradient-clipped text",message:"contrast: gradient-clipped text \u2014 the glyph colour varies across the gradient, so the ratio cannot be computed; check the lightest stop meets 4.5:1",issueType:"contrast_insufficient",wcag:"1.4.3",context:"background-clip:text gradient text \u2014 glyph color varies across the gradient; contrast cannot be computed from CSS. text="+JSON.stringify(br.slice(0,40)),needsAI:true,needsReview:true,reviewReason:"gradient-clipped text \u2014 verify the lightest gradient stop still meets 4.5:1 against the surrounding background",outerHtml:v.outerHTML.slice(0,200)});}continue}let H=parseFloat(E.fontSize||"16"),V=parseInt(E.fontWeight||"400",10),N=H>=24||H>=18.66&&V>=700?3:4.5,U=Array.from(v.childNodes).filter(He=>He.nodeType===3).map(He=>(He.textContent||"").trim()).join("");if(!U)continue;let Y=y(I[0],I[1],I[2]),Z=uniqueSel(v),z=S(v,I),ie=z?z.bg:null;if(ie===null){l.push({selector:Z,attribute:"style",currentValue:Y,message:"contrast: text "+Y+" on a gradient or image background \u2014 the ratio cannot be computed from CSS; check it meets "+N+":1 where the background is lightest/darkest",issueType:"contrast_insufficient",wcag:"1.4.3",context:"fg="+Y+" bg=<gradient-or-image> needs="+N+" text="+JSON.stringify(U.slice(0,40)),needsAI:true,needsReview:true,reviewReason:"background uses gradient or image \u2014 contrast cannot be reliably computed",outerHtml:v.outerHTML.slice(0,200)});continue}let se=z,fe=m(se.fg,ie);if(fe>=N)continue;let me=F([I[0],I[1],I[2]],ie,N,se.k,se.rest);if(!me)continue;let Pe=y(me[0],me[1],me[2]),ve=y(ie[0],ie[1],ie[2]),Se=y(se.fg[0],se.fg[1],se.fg[2]),ht=Se===Y?"":" (shown as "+Se+" after opacity/alpha)",Dt="color:"+Pe+" !important;";l.push({selector:Z,attribute:"style",currentValue:Y,message:"contrast: "+Y+ht+" on "+ve+" is "+fe.toFixed(2)+":1, needs "+N+":1 \u2014 e.g. color "+Pe,issueType:"contrast_insufficient",wcag:"1.4.3",context:"fg="+Se+" bg="+ve+" ratio="+fe.toFixed(2)+" needs="+N+" text="+JSON.stringify(U.slice(0,40)),needsAI:false,fixValue:Dt,outerHtml:v.outerHTML.slice(0,200)});}return l},Vg={name:"contrast",async detect(l){return l.evaluate(fL)}};var pL=()=>{let l="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye]",g=[],m=document.querySelectorAll("marquee, blink");for(let k of Array.from(m)){if(g.length>=30)break;if(k.closest(l))continue;let R=typeof uniqueSel=="function"?uniqueSel(k):k.tagName.toLowerCase();g.push({selector:R,attribute:"aria-hidden",currentValue:k.getAttribute("aria-hidden")||"",issueType:"motion_uncontrollable",wcag:"2.2.2",context:`deprecated ${k.tagName.toLowerCase()} element \u2014 uncontrollable motion`,needsAI:false,manualFix:true,fixValue:"true",outerHtml:(k.outerHTML||"").slice(0,300)});}let p=document.querySelectorAll('img[src*=".gif" i], img[src$=".gif" i]');for(let k of Array.from(p)){if(g.length>=30)break;if(k.closest(l))continue;let R=k.getAttribute("src")||"";if(!/\.gif(\?|#|$)/i.test(R)||typeof isVisible=="function"&&!isVisible(k))continue;let _=k.getBoundingClientRect();if(_.width<=40&&_.height<=40)continue;let w=typeof uniqueSel=="function"?uniqueSel(k):"img";g.push({selector:w,attribute:"data-asw-motion-review",currentValue:"",issueType:"animated_gif_no_pause",wcag:"2.2.2",context:`animated GIF without pause control: ${R.split("/").pop()?.slice(0,60)||R.slice(-60)}`,needsAI:true,outerHtml:(k.outerHTML||"").slice(0,300)});}let b=document.querySelectorAll('meta[http-equiv="refresh"], meta[http-equiv="Refresh"], meta[http-equiv="REFRESH"]');for(let k of Array.from(b)){if(g.length>=30)break;let R=(k.getAttribute("content")||"").trim(),_=parseInt((R.split(/[;,]/)[0]||"").trim(),10);!Number.isFinite(_)||_<=0||g.push({selector:`meta[http-equiv="refresh"][content*="${R.slice(0,20)}"]`,attribute:"data-auto-refresh",currentValue:R,issueType:"auto_refresh",wcag:"2.2.1",context:`auto-refresh every ${_}s \u2014 interrupts screen reader users mid-sentence (WCAG 2.2.1)`,needsAI:false,manualFix:true,outerHtml:(k.outerHTML||"").slice(0,200)});}try{let k=!1,R=!1;for(let _ of Array.from(document.styleSheets)){let w=null;try{w=_.cssRules;}catch{continue}if(w)for(let S of Array.from(w)){let y=S.cssText||"";if(/animation[^;]*\binfinite\b/i.test(y)&&/(keyframes|animation-name)/i.test(y+" "+(S.name||""))&&(k=!0),/prefers-reduced-motion[^{]*\(\s*reduce\s*\)/i.test(y)&&(R=!0),S.cssRules)for(let C of Array.from(S.cssRules)){let F=C.cssText||"";/animation[^;]*\binfinite\b/i.test(F)&&(k=!0);}}}k&&!R&&g.push({selector:"html",attribute:"data-asw-motion-review",currentValue:"",issueType:"motion_without_reduced_motion",wcag:"2.3.3",context:"infinite CSS animation detected without @media (prefers-reduced-motion: reduce) override",needsAI:!0,outerHtml:""});}catch{}let A=/\b(flash(ing)?|blink(ing)?|strobe)\b/i,x=document.querySelectorAll('[class*="flash" i], [class*="blink" i], [class*="strobe" i]');for(let k of Array.from(x)){if(g.length>=30)break;if(k.closest(l)||k.tagName==="BODY"||k.tagName==="HTML")continue;let R=k.className&&typeof k.className=="string"?k.className:"";if(!A.test(R)||typeof isVisible=="function"&&!isVisible(k))continue;let w=getComputedStyle(k).animationDuration,S=9999;if(w){let C=parseFloat(w);Number.isFinite(C)&&(S=/ms/i.test(w)?C:C*1e3);}if(S>333)continue;let y=typeof uniqueSel=="function"?uniqueSel(k):"";g.push({selector:y,attribute:"data-flashing-review",currentValue:"",issueType:"flashing_content",wcag:"2.3.1",context:`class matches flash/blink/strobe with ${S}ms animation-duration \u2014 seizure risk`,needsAI:false,needsReview:true,reviewReason:"WCAG 2.3.1 is met by stopping or slowing the flashing below 3 per second (remove the animation, slow it past 333ms, or add a pause control). aria-hidden does not stop flashing and hides content from assistive tech \u2014 do not apply it.",outerHtml:(k.outerHTML||"").slice(0,300)});}return g},$g={name:"cssAnimations",cap:30,async detect(l){return l.evaluate(pL)}};var mL=()=>{let c=[];function g(A){let x=(A.getAttribute("role")||"").toLowerCase();return x==="presentation"||x==="none"||(A.getAttribute("class")||"").toLowerCase().indexOf("layout")!==-1}function m(A){if(!A)return 0;let x=A.querySelectorAll("th, td"),k=0;for(let R=0;R<x.length;R++){let _=parseInt(x[R].getAttribute("colspan")||"1",10);k+=isNaN(_)||_<1?1:_;}return k}function p(A){let x=A.querySelectorAll("tr"),k=[];for(let R=0;R<x.length;R++){let _=x[R];_.closest("table")===A&&k.push(_);}return k}let b=document.querySelectorAll("table");for(let A=0;A<b.length&&!(c.length>=30);A++){let x=b[A];if(isWidget(x)||!isVisible(x)||g(x))continue;let k=p(x);if(k.length<=1)continue;let R=k[0],_=m(R);if(_<=1)continue;let w=uniqueSel(x),S=getNearbyContext(x),y=x.querySelectorAll("img, svg, picture").length>=2;if(y&&!(x.textContent||"").trim()){if(x.querySelector("input, select, textarea, button")&&(y=false),y&&x.querySelector("th, thead, caption, [scope], [headers]")&&(y=false),y){let v=Array.from(x.querySelectorAll("img")).map(E=>(E.getAttribute("alt")||"").trim().toLowerCase()).filter(Boolean);new Set(v).size<v.length&&(y=false);}}else if(y){let v=x.querySelectorAll("td, th"),E=0;for(let I=0;I<v.length&&y;I++){let H=v[I];if(H.closest("table")!==x)continue;let V=(H.textContent||"").trim(),G=!!H.querySelector("img, svg, picture");if(!V&&!G)continue;E++;let N=H.querySelectorAll("a[href]");y=H.tagName==="TD"&&N.length===1&&G&&(N[0].textContent||"").trim()===V;}E<2&&(y=false);}if(y){c.push({selector:w,attribute:"role",currentValue:x.getAttribute("role")||"",issueType:"missing_table_header",wcag:"1.3.1",context:JSON.stringify({reason:"table lays out images / image links only \u2014 likely a layout table",rows:k.length,cols:_,nearbyHeading:S.nearbyHeading}),needsAI:false,fixValue:"presentation",needsReview:true,reviewReason:'table of images or single image-links is likely layout \u2014 confirm, then mark it role="presentation" (do not add headers)',outerHtml:(x.outerHTML||"").slice(0,300)});continue}let C=null,F=x.querySelectorAll("thead");for(let v=0;v<F.length;v++)if(F[v].closest("table")===x){C=F[v];break}let P=C&&C.querySelector("tr")!==null,M=false;for(let v=0;v<k.length&&!M;v++){let E=k[v].children;for(let I=0;I<E.length&&!M;I++){let H=E[I],V=(H.tagName||"").toLowerCase();if(V!=="td"&&V!=="th")continue;if(V==="th"){M=true;break}let G=(H.getAttribute("headers")||"").trim();if(!G)continue;let N=G.split(/\s+/);for(let U=0;U<N.length;U++){let Y=document.getElementById(N[U]);if(Y&&(Y.tagName||"").toLowerCase()==="th"&&Y.closest("table")===x){M=true;break}}}}if(!P&&!M&&c.length<30&&c.push({selector:w,attribute:"thead",currentValue:C?"empty":"",issueType:"missing_table_header",wcag:"1.3.1",context:JSON.stringify({reason:C?"<thead> has no <tr>":"no <thead> element",rows:k.length,cols:_,nearbyHeading:S.nearbyHeading}),needsAI:false,fixValue:"wrap-first-row",outerHtml:(x.outerHTML||"").slice(0,300)}),_>2){let v=R.querySelectorAll("th, td"),E=v.length>0;for(let I=0;I<v.length;I++)if((v[I].tagName||"").toLowerCase()!=="td"){E=false;break}if(E)for(let I=0;I<v.length&&!(c.length>=30);I++){let H=v[I],V=uniqueSel(H),G=(H.textContent||"").trim().slice(0,60);c.push({selector:V,attribute:"role",currentValue:H.getAttribute("role")||"",issueType:"missing_table_header",wcag:"1.3.1",context:JSON.stringify({reason:"first-row <td> in data table \u2014 should be <th>",cellText:G,colIndex:I,nearbyHeading:S.nearbyHeading}),needsAI:false,fixValue:"columnheader",outerHtml:(H.outerHTML||"").slice(0,300)});}}let q=[],B=[],j=new Map;for(let v=0;v<k.length;v++){let E=k[v],I=0;for(let H=0;H<E.children.length;H++){let V=E.children[H],G=(V.tagName||"").toLowerCase();if(G!=="td"&&G!=="th")continue;for(;q.some(Z=>Z.lane===I&&Z.untilRow>v);)I++;let N=parseInt(V.getAttribute("colspan")||"1",10);(isNaN(N)||N<1)&&(N=1);let U={rowIdx:v,lane:I,span:N,headers:(V.getAttribute("headers")||"").trim()};G==="td"?B.push(U):j.set(V,U);let Y=parseInt(V.getAttribute("rowspan")||"1",10)||1;if(Y>1)for(let Z=0;Z<N;Z++)q.push({lane:I+Z,untilRow:v+Y});I+=N;}}let X=(v,E)=>E.lane<v.lane+v.span&&E.lane+E.span>v.lane,T=x.querySelectorAll("th");for(let v=0;v<T.length&&!(c.length>=30);v++){let E=T[v];if(E.closest("table")!==x)continue;let I=(E.getAttribute("scope")||"").trim().toLowerCase();if(I==="col"||I==="row"||I==="colgroup"||I==="rowgroup")continue;let H=false;if((E.getAttribute("headers")||"").trim())H=true;else {let se=(E.getAttribute("id")||"").trim();if(se)for(let fe=0;fe<B.length;fe++){let me=B[fe].headers;if(me&&me.split(/\s+/).indexOf(se)!==-1){H=true;break}}}if(H)continue;let V=E.closest("tr"),G=E.closest("thead")!==null,N=false;V&&k.length>0&&k[0]===V&&(N=true);let U=false;if(V){let se=V.querySelectorAll("th, td");se.length>0&&se[0]===E&&(U=true);}let Y="col";G||N?Y="col":U&&(Y="row");let Z=j.get(E);if(!H&&Z){if(Y==="row")H=B.some(se=>se.rowIdx===Z.rowIdx&&!se.headers&&se.lane>=Z.lane+Z.span);else if(H=B.some(se=>se.rowIdx>Z.rowIdx&&!se.headers&&X(Z,se)),!H)for(let se=0;se<T.length;se++){let fe=j.get(T[se]);if(!fe||fe.rowIdx<=Z.rowIdx||!X(Z,fe))continue;let me=k[fe.rowIdx],Pe=me?me.children:[];if(Pe.length>0&&Pe[0]===T[se]&&T[se].closest("table")===x){H=true;break}}}if(H)continue;let z=uniqueSel(E),ie=(E.textContent||"").trim().slice(0,60);c.push({selector:z,attribute:"scope",currentValue:I,issueType:"missing_table_scope",wcag:"1.3.1",context:JSON.stringify({reason:"<th> missing scope attribute",inferred:Y,inThead:G,firstRow:N,firstCol:U,headerText:ie}),needsAI:false,fixValue:Y,outerHtml:(E.outerHTML||"").slice(0,300)});}}return c},jg={name:"dataTables",cap:30,async detect(l){return l.evaluate(mL)}};var gL=()=>{let c=[];for(let g of document.querySelectorAll("img[alt]")){if(c.length>=30)break;let m=g;if((m.getAttribute("alt")||"").trim()!=="")continue;let p=(m.getAttribute("title")||"").trim().replace(/\s+/g," ");if(!p||isWidget(m))continue;let b=(m.getAttribute("role")||"").toLowerCase();b==="presentation"||b==="none"||m.getAttribute("aria-hidden")==="true"||m.closest('[aria-hidden="true"]')||(m.getAttribute("aria-label")||"").trim()||(m.getAttribute("aria-labelledby")||"").trim()||isVisible(m)&&c.push({selector:uniqueSel(m),attribute:"data-asw-decorative-title",currentValue:"",issueType:"decorative_image_with_title",wcag:"1.1.1",context:'image with alt="" also has title="'+p.slice(0,80)+'"',needsAI:true,needsReview:true,reviewReason:'WCAG 1.1.1 Non-text Content: this image has an empty alt (declared decorative) but also a title of "'+p.slice(0,80)+'". Violation when the picture conveys information the title names (a logo, a chart, a labelled icon), so the empty alt hides it. Pass when the picture is purely decorative and the title only repeats nearby text or adds nothing.',outerHtml:(m.outerHTML||"").slice(0,300)});}return c},zg={name:"decorativeImageTitle",cap:30,async detect(l){return l.evaluate(gL)}};var hL=()=>{let l="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",c=/^[^\p{L}\p{N}\s]*$/u,g=/^[\s\u00A0\u2000-\u200F\u2028-\u202F]*$/,p=[],b=["link","button","menuitem","menuitemcheckbox","menuitemradio","tab","checkbox","radio","switch","option","treeitem","gridcell","combobox","textbox","searchbox","slider","spinbutton","img","heading","listitem","none","presentation","generic","navigation","region","group","dialog"],A=R=>{let _=R.computedRole;if(typeof _=="string")return _.toLowerCase();let w=(R.getAttribute("role")||"").trim().toLowerCase().split(/\s+/);for(let S of w)if(b.indexOf(S)>=0)return S;return R.hasAttribute("href")?"link":"generic"},x=R=>{let _=A(R);if(_==="link"||R.hasAttribute("href"))return true;if(_&&_!=="generic")return false;let w=R.getAttribute("tabindex");if(w===null)return false;let S=parseInt(w,10);return !isNaN(S)&&S>=0},k=document.querySelectorAll("a");for(let R of k){if(p.length>=50)break;if(!x(R)||R.closest(l)||R.getAttribute("aria-hidden")==="true"||R.getAttribute("role")==="presentation"||R.closest('[aria-hidden="true"]')||!isVisible(R))continue;let _=getAccessibleName(R);if(_&&_.length>0&&!g.test(_)&&!c.test(_))continue;let w=R.querySelectorAll("img[alt]"),S="";for(let T of w){let v=(T.getAttribute("alt")||"").trim();v&&(S+=v+" ");}if(S.trim())continue;let y=R.getAttribute("aria-labelledby");if(y&&typeof __resolveIdRefs=="function"&&__resolveIdRefs(y))continue;let C=uniqueSel(R),F=R.getAttribute("href")||"",P=(R.textContent||"").trim(),M=getNearbyContext(R),q="";P&&g.test(P)?q="[whitespace only]":P&&c.test(P)&&(q=P);let B=(document.documentElement.getAttribute("lang")||"").trim(),j=[];R.closest("nav")&&j.push("inside nav"),M.nearbyHeading&&j.push("heading: "+M.nearbyHeading),F&&j.push("href: "+F.slice(0,120)),j.push("parent: "+M.parentTag),B&&j.push("page language: "+B);let X={selector:C,attribute:"aria-label",currentValue:q,issueType:"empty_link",wcag:"2.4.4",context:j.join(" | "),needsAI:true,outerHtml:R.outerHTML.slice(0,300)};p.push(X);}return p},Gg={name:"emptyLinks",cap:50,async detect(l){return l.evaluate(hL)}};var vL=()=>{let c=[],g=new Set;function m(_){return (_||"").trim()}function p(_){let w=m(_.getAttribute("aria-label")||"");if(w)return w;let S=_.getAttribute("aria-labelledby");if(S){let C=S.split(/\s+/),F="";for(let P=0;P<C.length;P++){let M=document.getElementById(C[P]);M&&(F+=" "+(M.textContent||""));}if(m(F))return m(F)}let y=m(_.getAttribute("title")||"");return y||""}let b=document.querySelectorAll("fieldset");for(let _=0;_<b.length&&!(c.length>=30);_++){let w=b[_];if(isWidget(w)||!isVisible(w)||isHiddenFromAT(w))continue;if(p(w)){g.add(w);continue}let S=null,y=w.querySelectorAll("legend");for(let B=0;B<y.length;B++)if(y[B].closest("fieldset")===w){S=y[B];break}let C=S!==null,F=S?m(S.textContent||""):"";if(C&&F){g.add(w);continue}let P=getNearbyContext(w),M=w.querySelectorAll("input, select, textarea"),q=uniqueSel(w);c.push({selector:q,attribute:"aria-label",currentValue:"",issueType:"missing_fieldset_legend",wcag:"1.3.1",context:JSON.stringify({reason:C?"fieldset has empty <legend>":"fieldset missing <legend>",controlCount:M.length,nearbyHeading:P.nearbyHeading,parentTag:P.parentTag}),needsAI:true,outerHtml:(w.outerHTML||"").slice(0,300)}),g.add(w);}let A=document.querySelectorAll('[role="group"], [role="radiogroup"]');for(let _=0;_<A.length&&!(c.length>=30);_++){let w=A[_];if(isWidget(w)||!isVisible(w)||isHiddenFromAT(w)||g.has(w))continue;if(p(w)){g.add(w);continue}let S=w.getAttribute("role")||"",y=getNearbyContext(w),C=w.querySelectorAll("input, select, textarea");if(S==="group"&&w.querySelectorAll('input:not([type="hidden"]), select, textarea, [role="radio"], [role="checkbox"], [role="switch"], [role="textbox"], [role="combobox"], [role="spinbutton"], [role="slider"]').length===0)continue;let F=uniqueSel(w);c.push({selector:F,attribute:"aria-label",currentValue:"",issueType:"missing_fieldset_legend",wcag:"1.3.1",context:JSON.stringify({reason:'role="'+S+'" container without accessible name',role:S,controlCount:C.length,nearbyHeading:y.nearbyHeading,parentTag:y.parentTag}),needsAI:true,outerHtml:(w.outerHTML||"").slice(0,300)}),g.add(w);}let x={},k=document.querySelectorAll('input[type="radio"], input[type="checkbox"]');for(let _=0;_<k.length;_++){let w=k[_];if(isWidget(w)||!isVisible(w)||isHiddenFromAT(w))continue;let S=w.getAttribute("name")||"";if(!S)continue;let y=w.closest("form"),C=y?y.getAttribute("id")||y.getAttribute("action")||y.tagName:"no-form",F=(w.getAttribute("type")||"").toLowerCase(),P=C+"::"+F+"::"+S;x[P]||(x[P]=[]),x[P].push(w);}let R=Object.keys(x);for(let _=0;_<R.length&&!(c.length>=30);_++){let w=x[R[_]];if(w.length<3)continue;let S=w[0],y=S.closest('fieldset, [role="group"], [role="radiogroup"]'),C=false;if(y){C=true;for(let j=1;j<w.length;j++)if(!y.contains(w[j])){C=false;break}}if(C&&y)continue;let F=S.parentElement;for(;F&&F!==document.body;){let j=true;for(let X=1;X<w.length;X++)if(!F.contains(w[X])){j=false;break}if(j)break;F=F.parentElement;}if(!F||F===document.body||g.has(F))continue;let P=(S.getAttribute("type")||"").toLowerCase(),M=S.getAttribute("name")||"",q=getNearbyContext(S),B=uniqueSel(F);c.push({selector:B,attribute:"role",currentValue:F.getAttribute("role")||"",issueType:"missing_fieldset_legend",wcag:"1.3.1",context:JSON.stringify({reason:"unwrapped "+P+" group ("+w.length+' inputs share name="'+M+'")',inputType:P,inputCount:w.length,name:M,nearbyHeading:q.nearbyHeading,parentTag:q.parentTag}),needsAI:false,fixValue:P==="radio"?"radiogroup":"group",outerHtml:(F.outerHTML||"").slice(0,300)}),g.add(F);}return c},Ug={name:"fieldsetLegend",cap:30,async detect(l){return l.evaluate(vL)}};var bL=()=>{let l=[],c=document.querySelectorAll('header, nav, div, [class*="header"], [class*="navbar"], [class*="sticky"], [role="banner"]'),g=0;for(let m of Array.from(c)){let p=getComputedStyle(m);if(p.display==="none"||p.visibility==="hidden"||p.position!=="sticky"&&p.position!=="fixed")continue;let b=m.getBoundingClientRect();if(b.top>50||b.bottom<=0)continue;let A=Math.round(b.height);A<40||A>240||A>g&&(g=A);}if(g>0){let m=window.scrollX,p=window.scrollY,b=0,A=0;try{let k=[],R=new Set;document.querySelectorAll('a[href^="#"]').forEach(_=>{let w=_.getAttribute("href").slice(1);if(!w)return;let S=document.getElementById(w);S&&!R.has(S)&&(R.add(S),k.push(S));});for(let _ of k){if(A>=8)break;let w=getComputedStyle(_);if(w.display==="none"||w.visibility==="hidden")continue;A++,_.scrollIntoView({block:"start"});let S=_.getBoundingClientRect(),y=Math.max(S.height,1);Math.max(0,Math.min(S.bottom,g)-Math.max(S.top,0))/Math.min(y,g)>=.5&&b++;}}catch{}try{window.scrollTo(m,p);}catch{}let x=`scroll-margin-top: ${g+8}px; scroll-padding-top: ${g+8}px;`;A>0&&b>0?l.push({selector:"html",attribute:"style",currentValue:"",issueType:"focus_obscured_by_sticky",wcag:"2.4.11",context:`sticky header height: ${g}px \u2014 ${b}/${A} in-page anchor targets land under it on jump`,needsAI:false,fixValue:x}):A===0&&l.push({selector:"html",attribute:"style",currentValue:"",issueType:"focus_obscured_by_sticky",wcag:"2.4.11",context:`sticky header height: ${g}px \u2014 no in-page anchor targets available to verify obscuring behaviorally`,needsAI:false,needsReview:true,reviewReason:"sticky top bar present; could not verify focus/jump obscuring automatically \u2014 check skip-link and anchor landing positions, or set scroll-padding-top preventively",fixValue:x});}return l},Wg={name:"focusObscured",async detect(l){return l.evaluate(bL)}};var Xg={name:"focusVisible",cap:40,async detect(l){let c=typeof l.keyboard?.press=="function";try{await l.evaluate(()=>{let g=document.activeElement;window[Symbol.for("wa.prevFocus")]=g&&g!==document.body&&g!==document.documentElement?g:null,window[Symbol.for("wa.prevScroll")]=[window.scrollX,window.scrollY];let m=getSelection();window[Symbol.for("wa.prevSelection")]=m?Array.from({length:m.rangeCount},(p,b)=>m.getRangeAt(b).cloneRange()):[];});}catch{}if(c)try{await l.keyboard.press("Tab");}catch{}return l.evaluate(async g=>{let p=[],b=["a[href]","button",'input:not([type="hidden"])',"select","textarea",'[role="button"]','[role="link"]','[role="menuitem"]','[role="tab"]','[tabindex]:not([tabindex="-1"])'].join(",");try{document.activeElement?.blur?.();}catch{}let A=document.querySelectorAll(b),x=Symbol.for("wa.prevFocus"),k=window[x]??null;try{delete window[x];}catch{}for(let R of A){if(p.length>=40)break;if(typeof isWidget=="function"&&isWidget(R)||typeof isHiddenFromAT=="function"&&isHiddenFromAT(R)||typeof isVisible=="function"&&!isVisible(R)||!R.offsetParent&&R.tagName!=="BODY")continue;let _=R.hasAttribute("style"),w=R.getAttribute("style"),S=["transition-property","transition-duration","transition-timing-function","transition-delay","transition-behavior"],y=R.style?S.map(H=>[H,R.style.getPropertyValue(H),R.style.getPropertyPriority(H)]):[];R.style&&(R.style.transition="none");let C=()=>{if(R.style){R.style.removeProperty("transition");for(let[H,V,G]of y)V&&R.style.setProperty(H,V,G);!_&&!R.getAttribute("style")?R.removeAttribute("style"):_&&w!==null&&w.trim()===""&&R.getAttribute("style")===""&&R.setAttribute("style",w);}},F=getComputedStyle(R),P=F.outline,M=F.outlineWidth,q=F.outlineStyle,B=F.boxShadow,j=F.border,X=F.backgroundColor;try{R.focus({preventScroll:!0});}catch{C();continue}if(document.activeElement!==R){C();continue}let T=()=>{let H=getComputedStyle(R),V=(H.outlineStyle||"").toLowerCase(),G=parseFloat(H.outlineWidth||"0"),N=H.outline!==P,U=V!=="none"&&V!=="hidden"&&G>0,Y=H.boxShadow!==B&&H.boxShadow!=="none"&&H.boxShadow!=="",Z=H.border!==j,z=H.backgroundColor!==X;return N&&U||Y||Z||z},v=T(),E=typeof R.getAnimations=="function"&&R.getAnimations().some(H=>H.playState==="running"&&!("transitionProperty"in H));if(!v&&!E){let H=V=>typeof requestAnimationFrame=="function"?requestAnimationFrame(V):setTimeout(V,16);if(await new Promise(V=>setTimeout(()=>H(()=>V()),20)),document.activeElement!==R){C();continue}v=T();}if(C(),v||parseFloat(M)>0&&q!=="none")continue;let I=typeof uniqueSel=="function"?uniqueSel(R):R.tagName.toLowerCase();p.push({selector:I,pseudo:":focus-visible",attribute:"style",currentValue:q+" "+M,issueType:"focus_not_visible",wcag:"2.4.7",context:`${R.tagName.toLowerCase()} has no visible focus indicator \u2014 outline, box-shadow, border, and background all unchanged on focus (apply the style under :focus-visible)`,needsAI:false,fixValue:"outline: 2px solid #2563eb !important;outline-offset: 2px !important;",outerHtml:R.outerHTML.slice(0,200),...g?{}:{needsReview:true,reviewReason:"Focus indicator could not be verified with a real keyboard event; may use a keyboard-only (:focus-visible) pattern \u2014 verify by tabbing to it."}});}try{document.activeElement?.blur?.();}catch{}try{k&&k.isConnected&&k.focus({preventScroll:!0});}catch{}try{let R=Symbol.for("wa.prevScroll"),_=window[R];delete window[R],_&&window.scrollTo({left:_[0],top:_[1],behavior:"instant"});}catch{}try{let R=Symbol.for("wa.prevSelection"),_=window[R];delete window[R];let w=getSelection();if(w&&_){w.removeAllRanges();for(let S of _)w.addRange(S);}}catch{}return p},c)}};var yL=()=>{let c=[],g=["new","register","signup","sign-up","sign_up","create","change","reset"],m=["confirm","verify","retype","re-type","repeat","again"];function p(w){if(!w)return false;let S=" "+((w.getAttribute("id")||"")+" "+(w.getAttribute("class")||"")+" "+(w.getAttribute("name")||"")+" "+(w.getAttribute("action")||"")).toLowerCase()+" ";for(let y=0;y<g.length;y++)if(S.indexOf(g[y])!==-1)return true;return false}function b(w){let S=((w.getAttribute("name")||"")+" "+(w.getAttribute("id")||"")+" "+(w.getAttribute("placeholder")||"")+" "+(w.getAttribute("aria-label")||"")).toLowerCase();for(let y=0;y<m.length;y++)if(S.indexOf(m[y])!==-1)return true;return false}let A=document.querySelectorAll('input[type="password"], input[type="Password"]');for(let w of A){if(c.length>=30)break;let S=w;if(isWidget(S)||isHiddenFromAT(S)||!isVisible(S))continue;let y=(S.getAttribute("autocomplete")||"").trim().toLowerCase();if(b(S)){if(y==="new-password")continue;let q=uniqueSel(S);c.push({selector:q,attribute:"autocomplete",currentValue:y,issueType:"missing_autocomplete",wcag:"1.3.5",context:"confirm password field | name: "+(S.getAttribute("name")||"")+" | id: "+(S.getAttribute("id")||""),needsAI:false,fixValue:"new-password",outerHtml:(S.outerHTML||"").slice(0,300)});continue}if(y)continue;let F=S.form||S.closest("form"),P=p(F),M=uniqueSel(S);c.push({selector:M,attribute:"autocomplete",currentValue:"",issueType:"missing_autocomplete",wcag:"1.3.5",context:(P?"new/signup/change password form":"login form")+" | name: "+(S.getAttribute("name")||"")+" | id: "+(S.getAttribute("id")||""),needsAI:false,fixValue:P?"new-password":"current-password",outerHtml:(S.outerHTML||"").slice(0,300)});}let x=document.querySelectorAll("form"),k=/\*|\brequired\b|\bmandatory\b/i;for(let w of x){if(c.length>=30)break;let S=w;if(isWidget(S)||!isVisible(S))continue;let y=S.querySelectorAll("input[required], select[required], textarea[required]");if(!y.length)continue;let C=0;for(let B of y)isVisible(B)&&C++;if(C===0)continue;let F=S.querySelectorAll('input:not([type="hidden"]):not([type="submit"]):not([type="button"]), select, textarea'),P=0;for(let B of F)isVisible(B)&&P++;if(C>=P||(S.getAttribute("data-asw-required-hint")||"").trim())continue;let M=(S.textContent||"").trim();if(k.test(M))continue;let q=uniqueSel(S);c.push({selector:q,attribute:"data-asw-required-hint",currentValue:"",issueType:"missing_required_indicator",wcag:"3.3.2",context:`form has ${C} required input(s) but no visible "*" / "required" / "mandatory" marker`,needsAI:true,outerHtml:(S.outerHTML||"").slice(0,300)});}let R='input[type="submit" i], input[type="image" i], button:not([type]), button[type="submit" i], button[type=""]',_='input:not([type="hidden"]):not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="image"]), select, textarea';for(let w of x){if(c.length>=30)break;let S=w;if(isWidget(S)||!isVisible(S)||isHiddenFromAT(S))continue;let y=[];for(let B of S.querySelectorAll(_))isVisible(B)&&y.push(B);if(y.length===0||S.querySelector(R))continue;let C=S.getAttribute("id");if(C){let B=false;for(let j of document.querySelectorAll(R))if(j.getAttribute("form")===C){B=true;break}if(B)continue}if(((S.getAttribute("role")||"").toLowerCase()==="search"||!!S.closest('[role="search"]'))&&y.length===1)continue;let P=y.slice(0,4).map(B=>B.tagName.toLowerCase()+(B.tagName==="INPUT"?"["+(B.getAttribute("type")||"text")+"]":"")).join(", "),M=[];for(let B of S.querySelectorAll('button:not([type="reset" i]), input[type="button" i], [role="button"]')){if(M.length>=3)break;let j=B;if(!isVisible(j))continue;let X=((j.tagName==="INPUT"?j.getAttribute("value"):j.textContent)||j.getAttribute("aria-label")||"").trim().replace(/\s+/g," ").slice(0,30);M.push('"'+X+'"');}if(M.length&&!(S.getAttribute("action")||"").trim())continue;let q=M.length?" Buttons present that are not a submit control (type=button or role=button): "+M.join(", ")+".":"";c.push({selector:uniqueSel(S),attribute:"data-asw-submit-control",currentValue:"",issueType:"form_missing_submit",wcag:"3.2.2",context:`form with ${y.length} visible field(s) (${P}) and no submit control`,needsAI:true,needsReview:true,reviewReason:"WCAG 3.2.2 On Input: this form has "+y.length+" visible field(s) ("+P+") and no submit control (no submit button, input[type=submit|image], or outside button via form=). Violation only when changing a field or pressing Enter causes an unexpected change of context (navigation, submission, reload) with no button to ask for it. Pass when it is a script-driven or search-style form with no such surprise."+q,outerHtml:(S.outerHTML||"").slice(0,300)});}return c},Kg={name:"formAttributes",cap:30,async detect(l){return l.evaluate(yL)}};var Jg={en:"the and of to is in that for with on are this you it be as at by from or your our we not have has was will can an all more about which their they",de:"der die das und ist nicht mit sich des den dem ein eine einen einer auf f\xFCr von zu im in auch sie wir ihr bei oder wird sind werden \xFCber nach aus wie noch nur unsere ihre sowie k\xF6nnen zum zur",nl:"de het een en van is dat op te in zijn voor met niet aan er ook als bij door wordt om uit worden naar onze uw jouw maar dan nog deze kunt wij u ons of wat die kan was",fr:"le la les et des est une du que pour dans qui pas sur au avec ce plus sont vous nous par ou leur cette mais \xEAtre aux votre vos notre nos",es:"el la los las y es una del que por para con se en no su sus m\xE1s al como pero este esta son nuestro nuestra nuestros usted tambi\xE9n de",it:"il lo la gli le e \xE8 di che per in una un del della con non sono pi\xF9 dei delle nel alla come anche questo questa nostro nostra nostri ti",pt:"o a os as e \xE9 de do da dos das que para com n\xE3o uma um em no na por mais seu sua nosso nossa voc\xEA tamb\xE9m s\xE3o",da:"og er det en at til af p\xE5 med for ikke den som de har vi kan vil fra jeres vores ogs\xE5 eller jer hvis efter",sv:"och \xE4r det en att till av p\xE5 med f\xF6r inte den som har vi kan ska fr\xE5n ocks\xE5 eller v\xE5ra v\xE5r din dina",nb:"og er det en at til av p\xE5 med for ikke den som har vi kan skal fra ogs\xE5 eller v\xE5re v\xE5r deg dine",pl:"i w na z do \u017Ce si\u0119 jest nie to o od jak dla po przez s\u0105 lub oraz nasz nasze mo\u017Ce tak\u017Ce jego",cs:"a v na se je \u017Ee s z do o to jako pro by nen\xED jsou nebo tak\xE9 ale jeho na\u0161e",ca:"el la els les i \xE9s de del dels que per amb en un una no es al als com m\xE9s per\xF2 aquest aquesta aquests s\xF3n seu seva nostre nostra hi ho ja tamb\xE9 o",gl:"o a os as e \xE9 de do da dos das que para con non unha un en no na nos nas por m\xE1is seu s\xFAa cando tam\xE9n pero este esta moi",af:"die en van is in dat op te vir nie met om wat sy hy hulle ons jy u was het aan as by ook maar of kan sal hierdie n ek julle deur baie"},Vo=new Map(Object.entries(Jg).map(([l,c])=>[l,new Set(c.split(" "))])),Yg=(()=>{let l=new Map;for(let[g,m]of Object.entries(Jg))for(let p of new Set(m.split(" "))){let b=l.get(p)||[];b.push(g),l.set(p,b);}let c=new Map;for(let[g,m]of l)c.set(g,m.map(p=>[p,1/m.length]));return c})(),wL=[["ko",/\p{Script=Hangul}/gu],["el",/\p{Script=Greek}/gu],["he",/\p{Script=Hebrew}/gu],["th",/\p{Script=Thai}/gu],["ja",/[\p{Script=Hiragana}\p{Script=Katakana}]/gu],["zh",/\p{Script=Han}/gu]],ai;function xL(l){if(!/^[a-z]{2,3}$/.test(l))return false;if(ai===void 0)try{ai=new Intl.DisplayNames(["en"],{type:"language",fallback:"none"});}catch{ai=null;}if(!ai)return l.length===2;try{let c=ai.of(l);return !!c&&c.toLowerCase()!==l}catch{return false}}function ta(l){let c=String(l||"").trim().toLowerCase().match(/^([a-z]{2,3})(?:[-_][a-z0-9]{2,8})*$/);return !c||c[1]==="und"||c[1]==="mul"||c[1]==="zxx"?"":xL(c[1])?c[1]:""}function Zg(l){if(!l)return "";let c;try{c=new URL(/^[a-z][a-z0-9+.-]*:\/\//i.test(l)?l:`https://${l}`);}catch{return ""}let g=/^([a-z]{2})(?:[-_][a-z]{2,4})?$/i,m=c.hostname.toLowerCase().split(".");if(m.length>=3&&g.test(m[0])){let b=ta(m[0]);if(b)return b}let p=c.pathname.split("/").filter(Boolean)[0]||"";return g.test(p)?ta(p):""}function Qg(l){let c=String(l||"").slice(0,2e4),g={lean:null,confident:false,ruledOut:new Set};if(!c.trim())return g;let m=(c.match(/\p{L}/gu)||[]).length;if(m>=40){let j=wL.map(([I,H])=>[I,(c.match(H)||[]).length]),X=j.find(([I])=>I==="ja")[1],T=j.find(([I])=>I==="zh")[1],v=X>=Math.max(5,(X+T)*.05)?[["ja",X+T]]:[["zh",T]],E=[...j.filter(([I])=>I!=="ja"&&I!=="zh"),...v].sort((I,H)=>H[1]-I[1]);if(E[0][1]/m>=.6)return {lean:E[0][0],confident:true,ruledOut:new Set(Vo.keys())}}let p=c.toLowerCase().match(/\p{L}+/gu)||[];if(!p.length)return g;let b={};for(let j of p){let X=Yg.get(j);if(X)for(let[T,v]of X)b[T]=(b[T]||0)+v;}let A=new Map;for(let j of p)Yg.has(j)&&A.set(j,(A.get(j)||0)+1);let x=new Map,k=new Map;for(let[j,X]of Vo){let T=0,v=0;for(let[E,I]of A)X.has(E)&&(T+=I,v++);x.set(j,T/p.length),k.set(j,v);}let R=p.length>=30,_=new Set(R?[...x].filter(([,j])=>j<.12).map(([j])=>j):[]),w=(j,X)=>{let T=Vo.get(j),v=Vo.get(X),E=0;for(let[I,H]of A)T.has(I)&&!v.has(I)&&(E+=H);return E},S=Object.entries(b).sort((j,X)=>X[1]-j[1]);if(!S.length)return {...g,ruledOut:_};let[y,C]=S[0],F=S[1]?.[1]||0,M=(R?[...x].filter(([j,X])=>j!==y&&X>=.12).map(([j])=>j):[]).every(j=>{let X=w(y,j);return X>=5&&X>=w(j,y)*2}),q=R&&C>=5&&(x.get(y)||0)>=.12&&(k.get(y)||0)>=6&&M,B=C>=2&&(q||C>=F*1.5)?y:null;return {lean:B,confident:!!B&&q,ruledOut:_}}function Cu(l){let c=[...new Set((l.declared||[]).map(ta).filter(Boolean))],g=Zg(l.url),m=Qg(l.text);if(m.confident&&m.lean)return c.some(p=>p!==m.lean)||g&&g!==m.lean?null:{lang:m.lean,source:"text"};if(c.length===1){let p=c[0];return m.lean&&m.lean!==p||m.ruledOut.has(p)||g&&g!==p?null:{lang:p,source:"declared"}}return c.length>1?null:g&&m.lean===g&&!m.ruledOut.has(g)?{lang:g,source:"url"}:null}function AL(){let l=document.documentElement;if(!l||(l.getAttribute("lang")||"").trim())return null;let c=String(typeof location<"u"&&location.href||""),g=b=>b.replace(/[#?].*$/,"").replace(/\/+$/,""),m=null;try{let b=document.querySelectorAll('link[rel="alternate"][hreflang]');for(let A=0;A<b.length;A++){let x=b[A],k=x.getAttribute("hreflang")||"";if(k&&k.toLowerCase()!=="x-default"&&x.href&&g(x.href)===g(c)){m=k;break}}}catch{}return {url:c,text:(()=>{let b=document.body;if(!b)return "";if(typeof b.innerText=="string")return b.innerText.slice(0,2e4);let A=b.cloneNode(true);return A.querySelectorAll('script, style, noscript, template, [hidden], [aria-hidden="true"]').forEach(x=>x.remove()),String(A.textContent||"").replace(/\s+/g," ").slice(0,2e4)})(),declared:[l.getAttribute("xml:lang"),document.querySelector('meta[http-equiv="content-language" i]')?.getAttribute("content")??null,document.querySelector('meta[name="language" i]')?.getAttribute("content")??null,document.querySelector('meta[property="og:locale"]')?.getAttribute("content")??null,document.body?.getAttribute("lang")??null,m]}}function _L(l){if(!l)return [];let c=Cu(l),g={selector:"html",attribute:"lang",currentValue:"",issueType:"missing_document_language",wcag:"3.1.1",needsAI:false};return c?[{...g,context:`Document language not declared; detected "${c.lang}" from page ${c.source}`,fixValue:c.lang}]:[{...g,context:"Document language not declared, and the page text does not settle which language it is (short, mixed, conflicting, or a language without a detector list) \u2014 set <html lang> by hand",manualFix:true}]}var eh={name:"htmlLang",async detect(l){let c=await l.evaluate(AL);return _L(c)}};var DL=()=>{let l="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],m=document.querySelectorAll("iframe");for(let p of m){if(g.length>=50)break;if(p.closest(l))continue;let b=false;for(let q=p;q;q=q.parentElement)if((q.getAttribute("aria-hidden")||"").trim()==="true"){b=true;break}let A=(p.getAttribute("role")||"").trim().toLowerCase();if(b||A==="presentation"||A==="none"||p.closest("[inert]"))continue;let x=/^[\t\n\f\r ]*([-+]?\d+)/.exec(p.getAttribute("tabindex")||"");if(x&&parseInt(x[1],10)<0)continue;let k=getComputedStyle(p);if(p.getClientRects().length===0||k.visibility==="hidden"||k.visibility==="collapse"||(p.getAttribute("src")||"").trim().toLowerCase().indexOf("javascript:")===0)continue;let R="",_=(p.getAttribute("aria-labelledby")||"").trim();if(_){let q=_.split(/\s+/);for(let B=0;B<q.length;B++){let j=document.getElementById(q[B]);j&&(R+=" "+(j.textContent||""));}R=R.trim();}if(R||(R=(p.getAttribute("aria-label")||"").trim()),R)continue;let w=(p.getAttribute("title")||"").trim(),S=w.length===0;if(!S)continue;let y=(p.getAttribute("src")||"").toLowerCase(),C=uniqueSel(p),F=getNearbyContext(p),P=(document.documentElement.getAttribute("lang")||"").trim(),M="src: "+y.slice(0,120)+(F.nearbyHeading?" | heading: "+F.nearbyHeading:"")+(F.cardText?" | nearby text: "+F.cardText:"")+(P?" | page language: "+P:"");S&&g.push({selector:C,attribute:"title",currentValue:w,issueType:"missing_label",wcag:"4.1.2",context:M,needsAI:true,outerHtml:p.outerHTML.slice(0,300)});}return g},th={name:"iframeTitle",cap:50,async detect(l){return l.evaluate(DL)}};var EL=()=>{let l="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",c=["hidden","submit","button","reset","image","checkbox","radio","file","range","color"],m=[],p={email:"email",tel:"tel",password:"current-password"},b=[{pattern:"organization",autocomplete:"organization"},{pattern:"telephone",autocomplete:"tel"},{pattern:"first-name",autocomplete:"given-name"},{pattern:"first_name",autocomplete:"given-name"},{pattern:"last-name",autocomplete:"family-name"},{pattern:"last_name",autocomplete:"family-name"},{pattern:"firstname",autocomplete:"given-name"},{pattern:"postcode",autocomplete:"postal-code"},{pattern:"birthday",autocomplete:"bday"},{pattern:"lastname",autocomplete:"family-name"},{pattern:"province",autocomplete:"address-level1"},{pattern:"username",autocomplete:"username"},{pattern:"website",autocomplete:"url"},{pattern:"address",autocomplete:"street-address"},{pattern:"company",autocomplete:"organization"},{pattern:"country",autocomplete:"country"},{pattern:"mobile",autocomplete:"tel"},{pattern:"postal",autocomplete:"postal-code"},{pattern:"street",autocomplete:"street-address"},{pattern:"e-mail",autocomplete:"email"},{pattern:"email",autocomplete:"email"},{pattern:"phone",autocomplete:"tel"},{pattern:"state",autocomplete:"address-level1"},{pattern:"fname",autocomplete:"given-name"},{pattern:"lname",autocomplete:"family-name"},{pattern:"city",autocomplete:"address-level2"},{pattern:"bday",autocomplete:"bday"},{pattern:"name",autocomplete:"name"},{pattern:"zip",autocomplete:"postal-code"},{pattern:"url",autocomplete:"url"}],A=document.querySelectorAll("input, select, textarea");for(let x of A){if(m.length>=50)break;if(x.closest(l))continue;let k=x,R=(k.getAttribute("type")||"text").toLowerCase();if(c.includes(R)||k.getAttribute("autocomplete")||!isVisible(k))continue;let _="";if(p[R]&&(_=p[R]),!_){let S=(k.getAttribute("name")||"").toLowerCase(),y=(k.getAttribute("id")||"").toLowerCase(),C=(k.getAttribute("placeholder")||"").toLowerCase(),F=S+" "+y+" "+C;for(let P of b)if(F.includes(P.pattern)){_=P.autocomplete;break}}if(!_)continue;if(_==="country"){let S=false;if(k.tagName==="SELECT"){let y=Array.from(k.options).map(C=>(C.value||"").trim()).filter(Boolean);S=y.length>0&&y.every(C=>/^[A-Za-z]{2}$/.test(C));}S||(_="country-name");}let w=uniqueSel(k);m.push({selector:w,attribute:"autocomplete",currentValue:"",issueType:"identify_input_purpose",wcag:"1.3.5",context:"type: "+R+" | name: "+(k.getAttribute("name")||"")+" | id: "+(k.getAttribute("id")||""),needsAI:false,fixValue:_});}return m},rh={name:"inputPurpose",cap:50,async detect(l){return l.evaluate(EL)}};var SL=()=>{let l="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],m=['a[href]:not([href=""])',"button:not([disabled])",'input:not([type="hidden"]):not([disabled])',"select:not([disabled])","textarea:not([disabled])",'[role="button"]:not([aria-disabled="true"])','[role="link"]:not([aria-disabled="true"])','[role="menuitem"]:not([aria-disabled="true"])','[role="tab"]:not([aria-disabled="true"])','[role="checkbox"]:not([aria-disabled="true"])','[role="radio"]:not([aria-disabled="true"])'].join(",");function p(S){let y=S.getBoundingClientRect();if(y.width===0&&y.height===0)return false;let C=-window.scrollX,F=-window.scrollY,P=document.documentElement,M=getComputedStyle(S).position;if(M==="fixed")return false;let q=M==="absolute";for(let B=S.parentElement;B&&B!==document.body&&B!==P;B=B.parentElement){let j=getComputedStyle(B);if(q){if(j.position==="static")continue;q=false;}if(/auto|scroll/.test(j.overflowX+" "+j.overflowY))return false;let X=j.overflowX==="hidden"||j.overflowX==="clip",T=j.overflowY==="hidden"||j.overflowY==="clip";if(!X&&!T)continue;let v=B.getBoundingClientRect();if(X&&(y.right<=v.left||y.left>=v.right)||T&&(y.bottom<=v.top||y.top>=v.bottom))return true;if(M=j.position,M==="fixed")return false;M==="absolute"&&(q=true);}return y.right<=C||y.bottom<=F||y.left>=C+P.scrollWidth||y.top>=F+P.scrollHeight}let b='[role="tablist"],[aria-roledescription="carousel" i],[aria-roledescription="slide" i],[class*="slick"],[class*="swiper"],[class*="owl"],[class*="splide"],[class*="flickity"]',A='nav,section,article,aside,main,header,footer,form,ul,ol,dl,[role="navigation"],[role="region"],[role="main"],[role="complementary"],[role="banner"],[role="contentinfo"],[role="list"],[role="form"],[role="search"]',x='a[href],area[href],button,input:not([type="hidden"]),select,textarea,summary,iframe';function k(S){if(S.tagName==="A"){let C=S.href;if(C){for(let F of document.querySelectorAll("a[href]"))if(!(F===S||F.href!==C||F.tabIndex<0)&&!F.closest('[aria-hidden="true"],[hidden],[inert]')&&!(typeof isVisible=="function"&&!isVisible(F)))return "another focusable link to the same href exists"}}if(S.closest(b))return "inside a slider / carousel / tablist that manages its own tab order";if(S.hasAttribute("aria-controls")||S.hasAttribute("aria-selected"))return "carries aria-controls / aria-selected (a widget manages its state)";if(S.closest('[inert],[aria-hidden="true"]'))return "inside an inert or aria-hidden container";let y=S.parentElement?.closest(A);if(y){let C=0;for(let F of y.querySelectorAll(x))F!==S&&F.getAttribute("tabindex")?.trim()==="-1"&&C++;if(C>=2)return `${C} other controls in the same <${y.tagName.toLowerCase()}> also carry tabindex="-1" (inert by design)`}for(let C=S.parentElement;C&&C!==document.body&&!C.matches(x);C=C.parentElement){let F=parseInt(C.getAttribute("tabindex")||"",10);if(!Number.isFinite(F)||F<0)continue;let P=[...C.querySelectorAll(x)];if(P.length>=2&&P.every(M=>M.getAttribute("tabindex")?.trim()==="-1"))return 'a focusable ancestor owns focus and every control inside it carries tabindex="-1"';break}return ""}let R=document.querySelectorAll(m);for(let S of R){if(g.length>=30)break;if(S.closest(l)||!S.hasAttribute("tabindex"))continue;let y=S.getAttribute("tabindex")||"",C=parseInt(y,10);if(!Number.isFinite(C)||C===0||S.getAttribute("aria-disabled")==="true"||S.getAttribute("aria-hidden")==="true"||S.closest('[aria-hidden="true"]')||S.closest("[hidden]"))continue;let F=S.closest('[role="dialog"],[role="alertdialog"],dialog,[role="menu"],[role="listbox"]');if(F&&!(F.hasAttribute("open")||F.getAttribute("aria-modal")==="true"||F.getAttribute("aria-hidden")!=="true")||typeof isVisible=="function"&&!isVisible(S)||C<0&&p(S))continue;let P=(S.getAttribute("role")||"").toLowerCase();if(C<0&&S.closest('[role="tablist"],[role="menu"],[role="menubar"],[role="listbox"],[role="tree"],[role="treegrid"],[role="grid"],[role="radiogroup"],[role="toolbar"]'))continue;if(C<0&&S.tagName==="A"){if((S.getAttribute("aria-current")||"").trim().toLowerCase()==="page")continue;let E=(S.getAttribute("href")||"").trim();if(E&&!E.includes("#"))try{let I=new URL(E,document.baseURI),H=new URL(location.href);if(I.hash="",H.hash="",I.href===H.href)continue}catch{}}let q=typeof uniqueSel=="function"?uniqueSel(S):"",B=typeof getNearbyContext=="function"?getNearbyContext(S):{parentTag:S.tagName.toLowerCase(),nearbyHeading:""},j,X,T=C<0?k(S):"";C<0?(j="keyboard_trap",X="2.1.1"):(j="focus_order_disruption",X="2.4.3");let v=[];v.push("tabindex: "+C),v.push("tag: "+S.tagName.toLowerCase()),P&&v.push("role: "+P),B.nearbyHeading&&v.push("heading: "+B.nearbyHeading),v.push("parent: "+B.parentTag),T&&v.push('author tabindex="-1" looks intentional: '+T),g.push({selector:q,attribute:"tabindex",currentValue:String(C),issueType:j,wcag:X,context:v.join(" | "),needsAI:false,fixValue:"0",...T?{manualFix:true,reviewReason:`the author's tabindex="-1" looks intentional (${T}); tabindex="0" could add a duplicate or out-of-sync tab stop. Confirm the control must be reachable on its own before applying.`}:{},outerHtml:(S.outerHTML||"").slice(0,300)});}let _=/\b(?:this|(?:event|evt|e)\.(?:target|currentTarget))\.focus\s*\(\s*\)/,w=/\b(?:if|else|switch|while|for)\b|&&|\|\||\?/;for(let S of document.querySelectorAll("[onblur]")){if(g.length>=30)break;if(S.closest(l))continue;let y=S.getAttribute("onblur")||"";!_.test(y)||w.test(y)||S.matches('[disabled], [aria-disabled="true"]')||S.closest('[aria-hidden="true"], [hidden]')||typeof isVisible=="function"&&!isVisible(S)||g.push({selector:typeof uniqueSel=="function"?uniqueSel(S):S.tagName.toLowerCase(),attribute:"onblur",currentValue:y.slice(0,100),issueType:"keyboard_trap_self_focus",wcag:"2.1.2",context:"tag: "+S.tagName.toLowerCase()+" | onblur returns focus to the same element, so keyboard focus cannot leave it",needsAI:false,outerHtml:(S.outerHTML||"").slice(0,300)});}return g},nh={name:"keyboardTrap",cap:30,async detect(l){return l.evaluate(SL)}};var kL=()=>{let l="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",c=[],m=document.querySelectorAll('button, a[href], [role="button"], [role="link"], input[type="submit"], input[type="button"]');for(let p of Array.from(m)){if(p.closest(l)||typeof isVisible=="function"&&!isVisible(p))continue;let b="",A=[],x=[];try{let X=/(?:^|[\s_-])(?:icon|material-icons|material-symbols(?:-\w+)?|fa|fas|far|fab|fal|glyphicon|dashicons)(?:[\s_-]|$)/i,T=/icon|awesome|glyph|material symbols|dashicons/i,v=!1;try{v=T.test(getComputedStyle(p).fontFamily||"");}catch{}let E=Ne=>parseFloat(Ne||"0")||0,I=Ne=>{if(Ne.hasAttribute("hidden"))return !0;let Ie=(Ne.getAttribute("style")||"").toLowerCase().replace(/\s+/g,"");if(/clip:rect\(0/.test(Ie)||/clip-path:inset\((50|100)%/.test(Ie))return !0;if(/position:(absolute|fixed)/.test(Ie)){if(/(width|height):[01](px)?(;|!|$)/.test(Ie))return !0;let nt=Ie.match(/(?:left|top):(-\d+)/);if(nt&&parseInt(nt[1],10)<=-999)return !0}return !1},H=(Ne,Ie)=>{if(Ne.hasAttribute("hidden")||E(Ie.fontSize)===0)return !0;let nt=(Ie.clip||"").replace(/\s+/g,"");if(/^rect\(0(px)?,?0(px)?,?0(px)?,?0(px)?\)$/.test(nt)||/inset\((50|100)%\)/.test(Ie.clipPath||""))return !0;let Et=Ne.getBoundingClientRect();return !!(/hidden|clip/.test(Ie.overflow||Ie.overflowX+" "+Ie.overflowY)&&(Et.width<=1||Et.height<=1)||(Ie.position==="absolute"||Ie.position==="fixed")&&(E(Ie.left)<=-999||E(Ie.top)<=-999||Et.right<=0||Et.bottom<=-window.scrollY))},V=!1,G='h1, h2, h3, h4, h5, h6, [role="heading"]',N=0;try{N=E(getComputedStyle(p).fontSize);}catch{}let U=Ne=>{try{let Ie=getComputedStyle(Ne);return {size:E(Ie.fontSize),weight:parseInt(Ie.fontWeight||"400",10)||400}}catch{return {size:0,weight:400}}},Y=Ne=>{let Ie=Ne.closest(G);return !!Ie&&p.contains(Ie)},Z=Ne=>{for(let Ie=Ne;Ie&&Ie!==p;Ie=Ie.parentElement)try{let nt=getComputedStyle(Ie).display||"";if(nt&&!/^inline(?!-block)|^contents$/.test(nt))return Ie}catch{return p}return p},z=Ne=>Ne.split(/\s+/).filter(Ie=>/[\p{L}\p{N}]/u.test(Ie)).length,ie=document.createTreeWalker(p,NodeFilter.SHOW_TEXT),se;for(;se=ie.nextNode();){let Ne=se.parentElement;if(!Ne)continue;let Ie=(se.textContent||"").trim();if(!Ie||Ne===p&&v)continue;let nt=!1,Et=!1;for(let st=Ne;st&&st!==p;st=st.parentElement){if(st.tagName==="KBD"&&(Et=!0),st.tagName==="NOSCRIPT"||st.tagName==="SCRIPT"||st.tagName==="STYLE"||st.tagName==="TEMPLATE"){nt=!0;break}if(st.getAttribute("aria-hidden")==="true"){nt=!0;break}if(X.test(st.getAttribute("class")||"")||X.test(st.getAttribute("id")||"")){nt=!0;break}try{let lt=getComputedStyle(st);if(lt.display==="none"||lt.visibility==="hidden"){nt=!0;break}if(parseFloat(lt.opacity||"1")===0){nt=!0;break}if(T.test(lt.fontFamily||"")){nt=!0;break}if(H(st,lt)){nt=!0;break}}catch{if(I(st)){nt=!0;break}st.tagName==="SPAN"&&(V=!0);}}!nt&&/[\p{L}\p{N}]/u.test(Ie)&&x.push({text:Ie,kbd:Et,p:Ne});}let fe=0,me=x.length;for(;fe<me&&x[fe].kbd;)fe++;for(;me>fe&&x[me-1].kbd;)me--;let Pe=fe<me?x.slice(fe,me):x,ve=Pe.map(Ne=>U(Ne.p)),Se=Pe.map(Ne=>Y(Ne.p)),ht=ve.map(Ne=>Ne.size).filter(Ne=>Ne>0),Dt=ht.length?Math.min(...ht):0,He=ht.length?Math.max(...ht):0,Lt=Math.min(...ve.map(Ne=>Ne.weight)),br=0;ve.forEach((Ne,Ie)=>{!Se[Ie]&&Ne.weight<600&&Ne.size>br&&(br=Ne.size);});let Bt=Pe.map(Ne=>Z(Ne.p)),Gt=Ne=>Pe.some((Ie,nt)=>Bt[nt]===Bt[Ne]&&ve[nt].weight<600&&!Se[nt]),Tt=Pe.map((Ne,Ie)=>Se[Ie]||He>Dt&&ve[Ie].size>=He||ve[Ie].weight>=600&&Lt<600&&ve[Ie].size>=br&&!Gt(Ie)),tr=Pe.filter((Ne,Ie)=>Tt[Ie]),Ee=Pe;if(tr.length&&tr.length<Pe.length){let Ne=z(tr.map(st=>st.text).join(" ")),Ie=(st,lt)=>{for(let Jt=st.p;Jt&&Jt!==p;Jt=Jt.parentElement)if(Jt.tagName==="TIME"||Jt.tagName==="SMALL")return !0;return N>0&&ve[lt].size>0&&ve[lt].size<N},nt=st=>{let lt=Bt[st];if(tr.some(Vr=>lt.contains(Vr.p)))return !1;let Jt=z(Pe.filter((Vr,it)=>!Tt[it]&&Bt[it]===lt).map(Vr=>Vr.text).join(" "));return Jt>=5&&Jt>Ne},Et=Pe.filter((st,lt)=>Tt[lt]||!Ie(st,lt)&&!nt(lt));Et.length&&(Ee=Et);}for(let Ne of Ee)A.push(Ne.text);b=V?"":A.join(" ").trim().toLowerCase();}catch{b=((p.innerText!=null?p.innerText:p.textContent)||"").trim().toLowerCase();}if(!b||!/[\p{L}\p{N}]/u.test(b)||/^\p{L}$/u.test(b))continue;let R=/[\p{L}\p{N}\p{M}]/u,_=(p.getAttribute("aria-label")||"").trim().toLowerCase();if(!_){let X=p.getAttribute("aria-labelledby");X&&(_=(typeof __resolveIdRefs=="function"?__resolveIdRefs(X):"").toLowerCase());}if(!_)continue;let w=X=>{let T=X.toLowerCase().replace(/\([^)]*\)/g," ");return (/[\p{L}\p{N}]/u.test(T)?T:X.toLowerCase()).replace(/[\p{S}\u2026*]/gu," ").replace(/\s+/g," ").trim().normalize("NFC")},S=w(_),y=/[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Thai}\p{Script=Lao}\p{Script=Khmer}\p{Script=Myanmar}]/u,C=(X,T)=>!X||!R.test(X)||y.test(X)||y.test(T),F=(X,T)=>{if(T<=0)return "";let v=X.charCodeAt(T-1);return v>=56320&&v<=57343&&T>=2?X.slice(T-2,T):X.charAt(T-1)},P=(X,T)=>{let v=X.codePointAt(T);return v===void 0?"":String.fromCodePoint(v)},M=X=>{let T=X.substring(0,40);if(!T)return true;let v=X.length>=40,E=P(T,0),I=F(T,T.length);for(let H=0;;){let V=S.indexOf(T,H);if(V<0)return false;if(C(F(S,V),E)&&(v||C(P(S,V+T.length),I)))return true;H=V+1;}};if(M(w(b))||A.length>1&&M(w(A.join(""))))continue;if(A.length>1){let X=true,T=0;for(let v of A){let E=w(v.toLowerCase());if(!E)continue;let I=E.slice(0,40),H=-1;for(let V=T;;){let G=S.indexOf(I,V);if(G<0)break;let N=C(F(S,G),P(I,0)),U=I.length>=40||C(P(S,G+I.length),F(I,I.length));if(N&&U){H=G;break}V=G+1;}if(H<0){X=false;break}T=H+I.length;}if(X)continue}let q=typeof uniqueSel=="function"?uniqueSel(p):"",B=typeof getNearbyContext=="function"?getNearbyContext(p):{parentTag:p.tagName.toLowerCase(),nearbyHeading:""},j=[];j.push("visible: "+b.slice(0,40)),j.push("aria-label: "+_.slice(0,60)),B.nearbyHeading&&j.push("heading: "+B.nearbyHeading),j.push("parent: "+B.parentTag),c.push({selector:q,attribute:"aria-label",currentValue:_,issueType:"label_in_name",wcag:"2.5.3",context:j.join(" | "),needsAI:true,outerHtml:(p.outerHTML||"").slice(0,300)});}return c},ah={name:"labelInName",cap:40,async detect(l){return l.evaluate(kL)}};var CL=()=>{let l="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye],[class*=EquallyAI]",g=["click here","click","here","read more","more","link","this","go","info","details","learn more","see more","view","open","tap"],m=[];function p(_){if(!_)return "";let w=_.split("#")[0];return w.length>1&&w.charAt(w.length-1)==="/"&&(w=w.substring(0,w.length-1)),w}function b(_){let w=(_.getAttribute("aria-label")||"").trim();return w||(_.textContent||"").trim().replace(/\s+/g," ")}function A(_){return !!_.closest('nav, [role="navigation"], [role="menubar"], [class*=breadcrumb], [aria-label*="breadcrumb" i]')}let x={},k=document.querySelectorAll("a[href]");for(let _=0;_<k.length;_++){let w=k[_];if(w.closest(l)||w.getAttribute("aria-hidden")==="true"||!isVisible(w))continue;let S=w.getAttribute("href")||"";if(!S)continue;let y=S.toLowerCase();if(y.charAt(0)==="#"||y.indexOf("javascript:")===0||y.indexOf("mailto:")===0||y.indexOf("tel:")===0)continue;let C=w.href||S,F=p(C);if(!F||A(w))continue;let P=(w.textContent||"").trim(),M=!!w.querySelector("img, svg, picture");if(!P&&M)continue;let q=b(w);if(!q)continue;let B=q.toLowerCase();B===y||B===C.toLowerCase()||(x[F]||(x[F]=[]),x[F].push(w));}let R=Object.keys(x);for(let _=0;_<R.length&&!(m.length>=30);_++){let w=x[R[_]];if(!w||w.length<2)continue;let S={},y="";for(let M=0;M<w.length;M++){let q=b(w[M]),B=q.toLowerCase();S[B]=true,q.length>y.length&&(y=q);}if(Object.keys(S).length<2)continue;let F=y.toLowerCase().trim();if(F.length<5)continue;let P=false;for(let M=0;M<g.length;M++)if(F===g[M]){P=true;break}if(!P)for(let M=0;M<w.length&&!(m.length>=30);M++){let q=w[M],B=b(q);if(B.toLowerCase()===F)continue;let j=uniqueSel(q);m.push({selector:j,attribute:"aria-label",currentValue:B,issueType:"link_consistency",wcag:"3.2.4",context:"Same href as "+w.length+' link(s) on this page with different text (e.g. "'+y.slice(0,80)+'"). If these labels also differ across pages, unify the VISIBLE text \u2014 do not mask it with aria-label.',needsAI:false,needsReview:true,reviewReason:"WCAG 3.2.4 is a cross-page criterion; same-page label variation may be intentional and cannot be auto-verified from one page",outerHtml:q.outerHTML.slice(0,300)});}}return m},ih={name:"linkConsistency",cap:30,async detect(l){return l.evaluate(CL)}};var TL=()=>{let c=[],g=[".pdf",".doc",".docx",".xls",".xlsx",".zip",".csv",".ppt",".pptx",".txt",".rtf",".epub"],m="";try{m=window.location&&window.location.hostname||"";}catch{m="";}m=(m||"").toLowerCase();function p(C,F){if(!C||!F)return false;if(C===F||C.endsWith("."+F)||F.endsWith("."+C))return true;let P=M=>{let q=M.split(".");if(q.length<=2)return M;let B=q[q.length-1],j=q[q.length-2],X=["co","com","net","org","ac","gov","edu"],T=B.length===2&&X.indexOf(j)>=0?3:2;return q.slice(-T).join(".")};return P(C)===P(F)}function b(C){return C.indexOf("www.")===0?C.slice(4):C}function A(C){if(!C)return "";let F=C.toLowerCase();if(F.charAt(0)==="#"||F.charAt(0)==="/"||F.charAt(0)==="?"||F.indexOf("javascript:")===0||F.indexOf("mailto:")===0||F.indexOf("tel:")===0)return "";try{return (new window.URL(C,window.location.href).hostname||"").toLowerCase()}catch{return ""}}function x(C){if(!C)return "";let F=C,P=F.indexOf("?");P>=0&&(F=F.slice(0,P));let M=F.indexOf("#");M>=0&&(F=F.slice(0,M)),F=F.toLowerCase();for(let q=0;q<g.length;q++){let B=g[q];if(F.length>=B.length&&F.slice(F.length-B.length)===B)return B}return ""}function k(C){let F=[],P=(C.getAttribute("aria-label")||"").trim();P&&F.push(P);let M=(C.getAttribute("title")||"").trim();M&&F.push(M);let q=C.getAttribute("aria-labelledby");if(q)try{let B=typeof __resolveIdRefs=="function"?__resolveIdRefs(q):"";B&&F.push(B);}catch{}return F.push((C.textContent||"").trim()),F.join(" ").toLowerCase()}function R(C,F,P){let M="";try{typeof getAccessibleName=="function"&&(M=(getAccessibleName(C)||"").trim());}catch{}let q=(F||P||M||C.textContent||"").replace(/\s+/g," ").trim();return q||(C.getAttribute("href")||"").trim().replace(/^https?:\/\//i,"").replace(/\/+$/,"")}let _=(document.documentElement.getAttribute("lang")||"").trim();function w(C){return "current name: "+C.slice(0,200)+(_?" | page language: "+_:"")+" | keep the current name and add the notice, in the page language"}let S=document.querySelectorAll("a"),y=S.length;for(let C=0;C<y&&!(c.length>=50);C++){let F=S[C];if(!F||isWidget(F)||F.getAttribute("aria-hidden")==="true")continue;try{if(F.closest&&F.closest('[aria-hidden="true"]'))continue}catch{}if(!isVisible(F))continue;let P=F.getAttribute("href");if(P==null)continue;let M=String(P).trim();if(!M)continue;let q=M.toLowerCase(),B=k(F),j=(F.getAttribute("rel")||"").toLowerCase(),X=uniqueSel(F),T=(F.getAttribute("target")||"").toLowerCase(),v=(F.outerHTML||"").slice(0,300);if(M==="#"||q.indexOf("javascript:")===0||M.charAt(0)==="#"&&M.length>1)continue;let E=x(q);if(E){let G=F.hasAttribute&&F.hasAttribute("download"),N=B.indexOf(E)>=0||new RegExp("\\b"+E.slice(1)+"\\b").test(B)||B.indexOf("download")>=0;if(!G&&!N){let U=R(F,(F.getAttribute("aria-label")||"").trim(),"");c.push({selector:X,attribute:"aria-label",currentValue:(F.getAttribute("aria-label")||"").trim(),issueType:"download_link_warning",wcag:"3.2.5",context:"download link \u2014 file type "+E+" | href: "+M.slice(0,120)+" | "+w(U),needsAI:true,outerHtml:v});continue}}let I=A(M),H=q.indexOf("http://")===0||q.indexOf("https://")===0||q.indexOf("//")===0,V=!!I&&!!m&&!p(b(I),b(m));if(T==="_blank"){let G=j.indexOf("noopener")>=0||j.indexOf("noreferrer")>=0,N=B.indexOf("new window")>=0||B.indexOf("new tab")>=0||B.indexOf("opens in")>=0;if(!N){let U=(F.getAttribute("aria-label")||"").trim(),Y="",Z=F.getAttribute("aria-labelledby")||"";if(!U&&Z)try{typeof __resolveIdRefs=="function"&&(Y=(__resolveIdRefs(Z)||"").trim());}catch{}let z=R(F,U,Y),ie=[];G||ie.push("missing rel=noopener"),N||ie.push('missing "new window" hint'),ie.push("href: "+M.slice(0,120)),c.push({selector:X,attribute:"aria-label",currentValue:(F.getAttribute("aria-label")||"").trim(),issueType:"new_window_link",wcag:"3.2.5",context:ie.join(" | ")+" | opens in a new window | "+w(z),needsAI:true,outerHtml:v});continue}}if(V&&H){let G=j.indexOf("external")>=0,N=B.indexOf("external")>=0||B.indexOf("opens in")>=0||B.indexOf("new window")>=0||B.indexOf("new tab")>=0;if(!G&&!N){let U=(F.getAttribute("aria-label")||"").trim(),Y="",Z=F.getAttribute("aria-labelledby")||"";if(!U&&Z)try{typeof __resolveIdRefs=="function"&&(Y=(__resolveIdRefs(Z)||"").trim());}catch{}let z=R(F,U,Y);c.push({selector:X,attribute:"aria-label",currentValue:(F.getAttribute("aria-label")||"").trim(),issueType:"external_link_warning",wcag:"3.2.5",context:"external: "+I+" (page: "+m+") | href: "+M.slice(0,120)+" | "+w(z),needsAI:true,outerHtml:v});}}}return c},oh={name:"linkWarnings",cap:50,async detect(l){return l.evaluate(TL)}};var RL=()=>{let l="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye],[class*=ae-exclude],[id*=ae_app],[id*=ae_],[class*=EquallyAI]",g=[],m=new Set,p=document.querySelectorAll('main, [role="main"]'),b=[];return p.forEach(A=>{let x=getComputedStyle(A);x.display!=="none"&&x.visibility!=="hidden"&&b.push(A);}),p.forEach(A=>{if(g.length>=10||A.closest(l)||A.getAttribute("aria-hidden")!=="true")return;let x=getComputedStyle(A);if(x.display==="none"||x.visibility==="hidden"||A.closest('[role="dialog"]')||A.closest('[role="alertdialog"]')||A.closest("dialog")||b.some(w=>w!==A&&w.getAttribute("aria-hidden")!=="true"))return;let R=A.parentElement;for(;R&&R!==document.body&&R!==document.documentElement;){if(R.getAttribute("aria-hidden")==="true")return;R=R.parentElement;}let _=uniqueSel(A);m.has(_)||(m.add(_),g.push({selector:_,attribute:"aria-hidden",currentValue:"true",issueType:"main_content_hidden",wcag:"4.1.2",context:JSON.stringify({tag:A.tagName.toLowerCase(),role:A.getAttribute("role")||"",suggestion:'Main content container has aria-hidden="true", hiding the entire page from assistive technology. Set aria-hidden="false" to restore visibility.'}),needsAI:false,fixValue:"false",outerHtml:(A.outerHTML||"").slice(0,300)}));}),g},sh={name:"mainContentHidden",cap:10,async detect(l){return l.evaluate(RL)}};var FL=()=>{let c=[];function g(A){return !!(!A||isWidget(A)||(A.getAttribute("aria-hidden")||"").trim().toLowerCase()==="true")}function m(A){return (A.outerHTML||"").slice(0,300)}let p=document.querySelectorAll("video");for(let A of p){if(c.length>=10)break;let x=A;if(g(x))continue;let k=x.hasAttribute("controls"),R=x.hasAttribute("autoplay"),_=x.hasAttribute("muted"),w=R||!x.paused&&!x.ended,S=typeof isVisible=="function"?isVisible(x):true;if(!k&&w&&S&&(c.push({selector:uniqueSel(x),attribute:"controls",currentValue:"",issueType:"missing_media_controls",wcag:"2.2.2",context:"video element missing player controls",needsAI:false,fixValue:"",outerHtml:m(x)}),c.length>=10))break;R&&!_&&c.push({selector:uniqueSel(x),attribute:"muted",currentValue:"",issueType:"unsafe_autoplay",wcag:"1.4.2",context:"video autoplays with sound \u2014 add muted",needsAI:false,fixValue:"",outerHtml:m(x)});}let b=document.querySelectorAll("audio");for(let A of b){if(c.length>=10)break;let x=A;if(g(x))continue;let k=x.hasAttribute("controls"),R=x.hasAttribute("autoplay"),_=R||!x.paused&&!x.ended;if(!k&&_&&(c.push({selector:uniqueSel(x),attribute:"controls",currentValue:"",issueType:"missing_media_controls",wcag:"2.2.2",context:"audio element missing player controls",needsAI:false,fixValue:"",outerHtml:m(x)}),c.length>=10))break;R&&c.push({selector:uniqueSel(x),attribute:"remove_attribute",currentValue:"autoplay",issueType:"unsafe_autoplay",wcag:"1.4.2",context:"audio element autoplays \u2014 remove autoplay attribute",needsAI:false,fixValue:"autoplay",outerHtml:m(x)});}return c},lh={name:"mediaControls",cap:10,async detect(l){return l.evaluate(FL)}};var IL=()=>{let l="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],m=[],p=/^(image|photo|img|picture|pic|untitled|banner|hero|\d{1,2})$/i,b=/^(IMG[-_]?\d|DSC[-_]?\d|DSCN?\d|(?:screenshot|Screen\s*Shot|Bildschirmfoto|capture(?:\s+d['’]\s?[ée]cran)?)(?:$|\s+(?:from|at)\s+\d|[\s_-]*[\d(])|image\s*\d|foto|photo[-_]?\d|P\d{4,}|GOPR\d|DJI[-_]\d)/i,A=/pixel|track|beacon|doubleclick|facebook\.com\/tr\b/i,x=(w,S)=>{let y=w.getAttribute(S);if(y===null)return false;let C=parseFloat(y);return !isNaN(C)&&C<=1},k=document.querySelectorAll("img");for(let w of k){if(g.length>=50)break;if(w.closest(l)||w.closest("template, noscript, script"))continue;let S=w.getAttribute("src")||"",y=w.getAttribute("alt");if(S.startsWith("data:")||x(w,"width")||x(w,"height"))continue;let C=w.naturalWidth||0,F=w.naturalHeight||0;if(C>0&&F>0&&C<=3&&F<=3||w.getAttribute("role")==="presentation"||w.getAttribute("role")==="none"||w.getAttribute("aria-hidden")==="true")continue;let P=C||w.width,M=F||w.height,q=w.getBoundingClientRect(),B=!isVisible(w)||P<=2&&M<=2||q.width<=2&&q.height<=2||!!w.closest('[aria-hidden="true"]');if(B&&(y!==null||m.length>=50||A.test(S)))continue;let j=(w.getAttribute("aria-label")||"").trim(),X=(w.getAttribute("aria-labelledby")||"").trim();if(j||X)continue;if(y===null){let H=uniqueSel(w),V=getNearbyContext(w),G=[],N=w.closest("figure");if(N){let z=N.querySelector("figcaption");z&&G.push("figcaption: "+(z.textContent||"").trim().slice(0,80));}V.nearbyHeading&&G.push("heading: "+V.nearbyHeading);let U=w.closest("a");if(U){let z=U.getAttribute("href")||"",ie=(U.textContent||"").trim().replace(/\s+/g," ");ie&&G.push("link text: "+ie.slice(0,60)),z&&G.push("link href: "+z.slice(0,80));}S&&G.push("src: "+S.slice(0,120)),G.push("parent: "+V.parentTag);let Y=S;try{Y=new URL(S,document.baseURI).href;}catch{}(B?m:g).push({selector:H,attribute:"alt",currentValue:"",issueType:"missing_alt",wcag:"1.1.1",context:G.join(" | "),needsAI:true,imageSrc:Y,outerHtml:w.outerHTML.slice(0,300)});continue}let T=(y||"").trim();if(T==="")continue;let v=/\.(jpg|jpeg|png|gif|webp|svg|bmp|ico)$/i.test(T),E=p.test(T),I=b.test(T);if(v||E||I){let H=uniqueSel(w),V=getNearbyContext(w),G=[];V.nearbyHeading&&G.push("heading: "+V.nearbyHeading),S&&G.push("src: "+S.slice(0,120)),G.push("parent: "+V.parentTag);let N=S;try{N=new URL(S,document.baseURI).href;}catch{}g.push({selector:H,attribute:"alt",currentValue:T,issueType:"missing_alt",wcag:"1.1.1",context:G.join(" | "),needsAI:true,imageSrc:N,outerHtml:w.outerHTML.slice(0,300)});}}let R=globalThis;for(let w of Array.from(document.querySelectorAll("object"))){if(g.length>=50)break;if(w.closest(l)||w.closest('[aria-hidden="true"]')||w.getAttribute("aria-hidden")==="true")continue;let S=(w.getAttribute("role")||"").trim().toLowerCase();if(S==="presentation"||S==="none"||!R.isVisible(w))continue;let y=w.getAttribute("data")||"",C=(w.getAttribute("type")||"").trim().toLowerCase(),F=C.startsWith("image/"),P=/\.(png|jpe?g|gif|webp|bmp|svg)(\?[^#]*)?(#.*)?$/i.test(y);if(!y||!(F||!C&&P)||(w.getAttribute("aria-label")||"").trim()||(w.getAttribute("title")||"").trim())continue;let M=(w.getAttribute("aria-labelledby")||"").trim();M&&M.split(/\s+/).some(q=>(document.getElementById(q)?.textContent||"").trim())||w.closest('a, button, [role="button"], [role="link"]')||g.push({selector:R.uniqueSel(w),attribute:"aria-label",currentValue:"",issueType:"missing_alt",wcag:"1.1.1",context:"object image has no accessible name (fallback content does not name an object) | data: "+y.slice(0,120),needsAI:false,outerHtml:w.outerHTML.slice(0,300)});}let _=Array.from(document.querySelectorAll("script:not([src])")).map(w=>w.textContent||"");for(let w of Array.from(document.querySelectorAll("canvas"))){if(g.length>=50)break;if(w.closest(l)||w.closest('[aria-hidden="true"]')||w.getAttribute("aria-hidden")==="true")continue;let S=(w.getAttribute("role")||"").trim().toLowerCase();if(S==="presentation"||S==="none"||!R.isVisible(w)||(w.getAttribute("aria-label")||"").trim()||(w.getAttribute("aria-labelledby")||"").trim()||(w.getAttribute("title")||"").trim()||(w.textContent||"").trim()||w.children.length||w.closest('a, button, label, figure, [role="img"], [role="button"], [role="link"], [aria-label], [aria-labelledby], [aria-describedby]'))continue;let y=w.getBoundingClientRect();if(y.width<=30||y.height<=30)continue;let C=w.getAttribute("id");if(!C)continue;let F=new RegExp("#"+C.replace(/[^\w-]/g,"")+`\\b|getElementById\\(\\s*['"]`+C.replace(/[^\w-]/g,"")+`['"]`);_.some(M=>F.test(M)&&/\b(fillText|strokeText)\s*\(/.test(M))&&g.push({selector:R.uniqueSel(w),attribute:"aria-label",currentValue:"",issueType:"missing_alt",wcag:"1.1.1",context:"canvas draws text via script but has no accessible name or fallback content",needsAI:false,outerHtml:w.outerHTML.slice(0,300)});}for(let w of m){if(g.length>=50)break;g.push(w);}return g},uh={name:"missingAlt",cap:50,async detect(l){return l.evaluate(IL)}};var LL=()=>{let l="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye],[class*=EquallyAI],[id*=ae_],[class*=ae-exclude]",c='a[href], button, input:not([type="hidden"]), select, textarea, summary, [contenteditable]:not([contenteditable="false" i]), [role="button"], [role="link"], [role="checkbox"], [role="menuitem"], [role="tab"], [role="switch"], [role="option"], [role="radio"], [role="combobox"], [role="slider"], [role="textbox"]',g=["onclick","data-action","ng-click","@click","v-on:click"],m=y=>{if(getComputedStyle(y).visibility==="hidden")return false;for(let C=y;C&&C.nodeType===1;C=C.parentElement)if(getComputedStyle(C).display==="none")return false;return true},p=y=>Array.prototype.some.call(y.querySelectorAll("a:not([href])"),C=>m(C)&&!isHiddenFromAT(C)&&g.some(F=>C.hasAttribute(F))),b=y=>Array.prototype.some.call(y.querySelectorAll(c),C=>m(C)&&!isHiddenFromAT(C)),x=[];return document.querySelectorAll("div[onclick], span[onclick]").forEach(y=>{if(x.length>=50||y.closest(l)||!isVisible(y)||isHiddenFromAT(y)||b(y)||p(y))return;let C=y.getAttribute("role");if(C==="button"||C==="link"||C==="tab"||C==="menuitem"||C==="checkbox"||C==="radio")return;let F=uniqueSel(y),P=y.outerHTML.slice(0,300);x.push({selector:F,attribute:"role",currentValue:C||"",issueType:"missing_button_role",wcag:"4.1.2",context:JSON.stringify({tag:y.tagName.toLowerCase(),hasOnclick:true,currentTabindex:y.getAttribute("tabindex")}),needsAI:false,fixValue:"button",outerHtml:P}),y.getAttribute("tabindex")===null&&x.push({selector:F,attribute:"tabindex",currentValue:"",issueType:"missing_button_role",wcag:"4.1.2",context:JSON.stringify({tag:y.tagName.toLowerCase(),supplementary:'tabindex needed alongside role="button"'}),needsAI:false,fixValue:"0",outerHtml:P});}),document.querySelectorAll("a:not([href])").forEach(y=>{if(x.length>=50||y.closest(l)||!isVisible(y)||isHiddenFromAT(y)||y.getAttribute("role"))return;let F=y.hasAttribute("onclick"),P=y.getAttribute("data-action")||y.getAttribute("ng-click")||y.getAttribute("@click")||y.getAttribute("v-on:click");if(!F&&!P||b(y))return;let M=uniqueSel(y),q=y.outerHTML.slice(0,300);x.push({selector:M,attribute:"role",currentValue:"",issueType:"missing_button_role",wcag:"4.1.2",context:JSON.stringify({tag:"a",href:y.getAttribute("href")||"",hasOnclick:F}),needsAI:false,fixValue:"button",outerHtml:q});}),document.querySelectorAll("nav, ol, ul").forEach(y=>{if(x.length>=50||y.closest(l)||!isVisible(y)||isHiddenFromAT(y))return;let C=(y.className&&typeof y.className=="string"?y.className:"").toLowerCase(),F=(y.getAttribute("id")||"").toLowerCase();if(!C.includes("breadcrumb")&&!C.includes("crumb")&&!F.includes("breadcrumb")&&!F.includes("crumb"))return;let P=y.querySelectorAll("a");if(P.length<2)return;let M=(y.getAttribute("aria-label")||"").toLowerCase(),q=y.getAttribute("role");if(M.includes("breadcrumb")||M.includes("crumb")||q==="navigation"&&M)return;let B=uniqueSel(y);x.push({selector:B,attribute:"aria-label",currentValue:M,issueType:"missing_semantic_role",wcag:"4.1.2",context:JSON.stringify({tag:y.tagName.toLowerCase(),reason:"breadcrumb navigation missing aria-label",linkCount:P.length,pageLang:(document.documentElement.getAttribute("lang")||"").trim(),links:Array.prototype.slice.call(P,0,6).map(j=>(j.textContent||"").trim().slice(0,40)),otherLandmarkLabels:Array.prototype.slice.call(document.querySelectorAll('nav[aria-label], [role="navigation"][aria-label], [role="region"][aria-label], aside[aria-label]'),0,8).filter(j=>j!==y).map(j=>(j.getAttribute("aria-label")||"").trim().slice(0,60))}),needsAI:true,outerHtml:y.outerHTML.slice(0,300)});}),document.querySelectorAll("form, section, div").forEach(y=>{if(x.length>=50||y.closest(l)||!isVisible(y)||isHiddenFromAT(y))return;let C=(y.className&&typeof y.className=="string"?y.className:"").toLowerCase(),F=(y.getAttribute("id")||"").toLowerCase();if(!C.includes("search")&&!F.includes("search")||!y.querySelector('input[type="search"], input[type="text"], input[name*="search"], input[placeholder*="earch"]'))return;let M=y.getAttribute("role");if(M==="search"||y.closest('[role="search"]')||y.querySelector('[role="search"]')||Array.prototype.some.call(y.querySelectorAll("form, section, div"),j=>{let X=(j.className&&typeof j.className=="string"?j.className:"").toLowerCase(),T=(j.getAttribute("id")||"").toLowerCase();return !X.includes("search")&&!T.includes("search")||j.getAttribute("role")==="search"?false:!!j.querySelector('input[type="search"], input[type="text"], input[name*="search"], input[placeholder*="earch"]')}))return;let B=uniqueSel(y);x.push({selector:B,attribute:"role",currentValue:M||"",issueType:"missing_semantic_role",wcag:"4.1.2",context:JSON.stringify({tag:y.tagName.toLowerCase(),reason:'search section missing role="search"'}),needsAI:false,fixValue:"search",outerHtml:y.outerHTML.slice(0,300)});}),document.querySelectorAll('[role="menu"], [role="menubar"]').forEach(y=>{if(y.closest(l))return;let C=y.getAttribute("role")||"menu",F=Array.from(y.querySelectorAll("a")).filter(M=>{if(!isVisible(M)||isHiddenFromAT(M))return false;let q=M.getAttribute("role");return q!=="menuitem"&&q!=="menuitemcheckbox"&&q!=="menuitemradio"});if(F.length===0)return;let P=uniqueSel(y);x.push({selector:P,attribute:"role",currentValue:C,issueType:"missing_semantic_role",wcag:"4.1.2",context:JSON.stringify({tag:y.tagName.toLowerCase(),reason:`${F.length} link(s) inside role="${C}" without menuitem roles`,sample:F.slice(0,3).map(M=>(M.textContent||"").trim().slice(0,40))}),message:`container role="${C}" holds ${F.length} link(s) without menuitem roles \u2014 for site navigation use a nav list instead (role="menu" requires the full menu pattern: menuitem children plus arrow-key handling)`,needsAI:false,needsReview:true,reviewReason:'Adding role="menuitem" to plain navigation links is invalid ARIA when the menu pattern is not implemented. Prefer removing role="menu"/"menubar" from site navigation; keep it only for application menus built to the APG menu pattern.',outerHtml:y.outerHTML.slice(0,300)});}),x},ch={name:"missingRoles",cap:50,async detect(l){return l.evaluate(LL)}};var PL=()=>{let l="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye]",g=[],m={main:'main, [role="main"]',navigation:'nav, [role="navigation"]',banner:'header, [role="banner"]',contentinfo:'footer, [role="contentinfo"]',complementary:'aside, [role="complementary"]',search:'[role="search"]'};for(let[p,b]of Object.entries(m))document.querySelectorAll(b).forEach(x=>{if(g.length>=30||x.closest(l)||typeof isVisible=="function"&&!isVisible(x))return;let k=x.parentElement,R=null;for(;k&&k!==document.body;){if(k.matches(b)){R=k;break}k=k.parentElement;}if((p==="banner"||p==="contentinfo")&&x.closest("article, section, aside, main, nav")||!R||x.getAttribute("aria-label")?.trim()||x.getAttribute("aria-labelledby")?.trim())return;let _=typeof uniqueSel=="function"?uniqueSel(x):"",w=typeof getNearbyContext=="function"?getNearbyContext(x):{nearbyHeading:""};g.push({selector:_,attribute:"role",currentValue:x.getAttribute("role")||x.tagName.toLowerCase(),issueType:"nested_landmark",wcag:"1.3.1",context:`nested-in: ${p} | tag: ${x.tagName.toLowerCase()} | heading: ${w.nearbyHeading||""}`,needsAI:false,fixValue:"generic",outerHtml:(x.outerHTML||"").slice(0,300)});});return g},dh={name:"nestedLandmarks",cap:30,async detect(l){return l.evaluate(PL)}};var ML=()=>{let c=[],g=T=>typeof parseCssColor=="function"?parseCssColor(T):null,m=(T,v,E)=>typeof relLuminance=="function"?relLuminance(T,v,E):0,b=(T,v)=>typeof contrastRatio=="function"?contrastRatio(T,v):1;function A(T){let E=[0,0,0],I=0,H=G=>{let N=g(G||"");if(!N)return;let U=Math.max(0,Math.min(1,N[3]));if(U<=0)return;let Y=U*(1-I);E[0]+=N[0]*Y,E[1]+=N[1]*Y,E[2]+=N[2]*Y,I+=Y;};for(let G=T.parentElement;G&&I<.999999999;G=G.parentElement)H(getComputedStyle(G).backgroundColor);let V=1-I;return [Math.round(Math.min(255,E[0]+255*V)),Math.round(Math.min(255,E[1]+255*V)),Math.round(Math.min(255,E[2]+255*V))]}function x(T,v,E){return "#"+[T,v,E].map(I=>{let H=Math.max(0,Math.min(255,Math.round(I))).toString(16);return H.length===1?"0"+H:H}).join("")}function k(T,v,E){let I=m(v[0],v[1],v[2])>.5;return R(T,v,E,I)||R(T,v,E,!I)}function R(T,v,E,I){let H=0,V=1,G=null;for(let N=0;N<20;N++){let U=(H+V)/2,Y=I?[T[0]*(1-U),T[1]*(1-U),T[2]*(1-U)]:[T[0]+(255-T[0])*U,T[1]+(255-T[1])*U,T[2]+(255-T[2])*U],Z=[Math.round(Y[0]),Math.round(Y[1]),Math.round(Y[2])];b(Z,v)>=E?(G=Z,V=U):H=U;}return G}let _=(T,v)=>{let E=Math.max(0,Math.min(1,T[3]));return [T[0]*E+v[0]*(1-E),T[1]*E+v[1]*(1-E),T[2]*E+v[2]*(1-E)]};function w(T,v){let E=T.boxShadow||"";if(!E||E==="none")return null;let I=[],H=0,V="";for(let N of E)N==="("&&H++,N===")"&&H--,N===","&&H===0?(I.push(V),V=""):V+=N;V&&I.push(V);let G=null;for(let N of I){let U=N.match(/rgba?\([^)]*\)/),Y=U?g(U[0]):null;if(!Y||Y[3]<=0||(N.replace(/rgba?\([^)]*\)/,"").replace("inset","").trim().split(/\s+/).map(se=>parseFloat(se)).filter(se=>Number.isFinite(se))[3]??0)<=0)continue;let ie=b(_(Y,v),v);(G===null||ie>G)&&(G=ie);}return G}function S(T){let v=getComputedStyle(T),E=A(T),I=null,H=parseFloat(v.borderTopWidth||"0"),V=(v.borderTopStyle||"").toLowerCase(),G=g(v.borderTopColor||"");H>0&&V!=="none"&&V!=="hidden"&&G&&G[3]>0&&(I=b(_(G,E),E));let N=g(v.backgroundColor||"");if(N&&N[3]>0){let Y=b(_(N,E),E);(I===null||Y>I)&&(I=Y);}let U=w(v,E);return U!==null&&(I===null||U>I)&&(I=U),I}function y(T){let v=T.getBoundingClientRect();if(v.width*v.height<=0)return null;let E='input, select, textarea, button, [role="button"], svg, img, i, label',I=T.parentElement,H=null;for(let V=0;I&&V<3&&!(I===document.body||I===document.documentElement);V++,I=I.parentElement){let G=I.getBoundingClientRect();if(G.width*G.height>4*v.width*v.height+1||G.height>Math.max(2.5*v.height,v.height+40))break;let N=false,U=document.createTreeWalker(I,4),Y=U.nextNode();for(;Y;){if((Y.textContent||"").trim()&&Y.parentElement&&!Y.parentElement.closest(E)&&isVisible(Y.parentElement)){N=true;break}Y=U.nextNode();}if(N)break;let Z=S(I);Z!==null&&Z>1.01&&(H===null||Z>H)&&(H=Z);}return H}let C=T=>/^(img|picture|video|canvas|object|embed|iframe)$/.test((T.tagName||"").toLowerCase())||(getComputedStyle(T).backgroundImage||"none")!=="none",F=(T,v)=>{let E=Math.min(T.right,v.right)-Math.max(T.left,v.left),I=Math.min(T.bottom,v.bottom)-Math.max(T.top,v.top);return E>0&&I>0&&E*I/(T.width*T.height)>=.5},P=null;function M(T){let v=T.getBoundingClientRect();if(v.width*v.height<=0)return false;let E=v.left+v.width/2,I=v.top+v.height/2;if(E>=0&&I>=0&&E<window.innerWidth&&I<window.innerHeight&&typeof document.elementsFromPoint=="function"){let V=document.elementsFromPoint(E,I),G=V.indexOf(T);if(G>=0){for(let N of V.slice(G+1)){if(C(N))return true;let U=g(getComputedStyle(N).backgroundColor||"");if(U&&U[3]>.5)return false}return false}}for(let V=T.parentElement,G=0;V&&G<8;V=V.parentElement,G++){let N=getComputedStyle(V);if((N.backgroundImage||"none")!=="none")return true;let U=g(N.backgroundColor||"");if(U&&U[3]>.5||V===document.documentElement)break}P||(P=Array.from(document.querySelectorAll("img, picture, video, canvas, object, embed, iframe")));for(let V of P)if(!(V===T||T.contains(V)||V.contains(T))&&F(v,V.getBoundingClientRect())&&isVisible(V))return true;let H=T.offsetParent||T.parentElement;if(H&&H!==document.body&&H!==document.documentElement){let V=H.getElementsByTagName("*");for(let G=0;G<V.length&&G<400;G++){let N=V[G];if(!(N===T||T.contains(N)||N.contains(T))&&F(v,N.getBoundingClientRect())&&(getComputedStyle(N).backgroundImage||"none")!=="none"&&isVisible(N))return true}}return false}function q(T){for(let H=T.parentElement;H&&H.nodeType===1;H=H.parentElement)if(parseFloat(getComputedStyle(H).opacity||"1")<1)return false;let v=H=>{if(H.tagName.toLowerCase()!=="svg"){let N=g(getComputedStyle(H).color||"");return N&&N[3]>0?[N]:null}let V=[],G=Array.from(H.querySelectorAll("path, rect, circle, ellipse, polygon, polyline, line, text, use"));for(let N of G){let U=N.getBoundingClientRect();if(U.width===0&&U.height===0)continue;let Y=getComputedStyle(N);if(Y.display==="none"||Y.visibility==="hidden"||parseFloat(Y.opacity||"1")<1)return null;for(let[Z,z]of [[Y.fill,Y.fillOpacity],[Y.stroke,parseFloat(Y.strokeWidth||"0")>0?Y.strokeOpacity:"0"]]){let ie=String(Z||"");if(!ie||ie==="none"||parseFloat(String(z??"1"))===0)continue;if(ie.startsWith("url"))return null;let se=g(ie);if(!se)return null;se[3]*=parseFloat(String(z??"1")),se[3]>0&&V.push(se);}}return V.length?V:null},E=[];for(let H=0;H<=255;H+=17)E.push(H);let I=Array.from(T.querySelectorAll('svg, i[class], [class*="icon"]'));for(let H of I){let V=H.getBoundingClientRect();if(V.width*V.height===0)continue;let G=getComputedStyle(H);if(G.display==="none"||G.visibility==="hidden")continue;let N=v(H);if(!N)continue;let U=null,Y=1,Z=true;for(let se=H;se;se=se===T?null:se.parentElement){let fe=getComputedStyle(se),me=parseFloat(fe.opacity||"1");if(!U){let Pe=g(fe.backgroundColor||""),ve=String(fe.backgroundClip||"border-box").toLowerCase();if(!(String(fe.backgroundImage||"none")==="none")){Z=false;break}if(Pe&&Pe[3]>=1&&ve==="border-box")U=[Pe[0],Pe[1],Pe[2]];else if(me<1){Z=false;break}}U&&(Y*=me);}if(!U||!Z)continue;let z=U,ie=1/0;for(let se of N){let fe=_(se,z);for(let me of E)for(let Pe of E)for(let ve of E){let Se=[me,Pe,ve],ht=_([fe[0],fe[1],fe[2],Y],Se),Dt=_([z[0],z[1],z[2],Y],Se),He=b(ht,Dt);He<ie&&(ie=He);}}if(ie>=3)return true}return false}let B="control sits over an image, so the background colour measured behind it is not what the user sees \u2014 judge its boundary or glyph against the image pixels in the crop (WCAG 1.4.11, 3:1)";function j(T){let v=T.tagName.toLowerCase(),E=v==="input"||v==="select"||v==="textarea"?v+" field":v;c.push({selector:uniqueSel(T),message:"non-text contrast: "+E+" over an image backdrop \u2014 "+B,attribute:"style",currentValue:"?",issueType:"non_text_contrast_insufficient",wcag:"1.4.11",context:v+" backdrop=image needs=3",needsAI:false,needsReview:true,reviewReason:B,outerHtml:T.outerHTML.slice(0,200)});}let X=document.querySelectorAll('input:not([type="hidden"]), select, textarea, button, [role="button"], [role="checkbox"], [role="radio"], [role="switch"]');for(let T of X){if(c.length>=30)break;if(isWidget(T)||isHiddenFromAT(T)||!isVisible(T))continue;let v=getComputedStyle(T),E=A(T),I=g(v.backgroundColor||""),H=g(v.borderTopColor||""),V=parseFloat(v.borderTopWidth||"0"),G=(v.borderTopStyle||"").toLowerCase(),N=V>0&&G!=="none"&&G!=="hidden",U=T.tagName.toLowerCase(),Y=U==="input"||U==="select"||U==="textarea",Z=null;if(U==="input"){let Ee=(T.type||"").toLowerCase(),Ne=(v.appearance||v.webkitAppearance||"").toLowerCase();if(Ee==="checkbox"||Ee==="radio"){let Ie=Ne==="none"?"":String(v.accentColor||"").trim().toLowerCase(),nt=Ie&&Ie!=="auto"?g(Ie):null;if(nt&&nt[3]>.5)Z=b(_(nt,E),E);else if(Ne&&Ne!=="none")continue}}let z=N&&H&&H[3]>.5?b(_(H,E),E):null,ie=I&&I[3]>.5?b(_(I,E),E):Z,se=w(v,E),fe=z===null&&ie===null&&se===null?null:Math.max(z??0,ie??0,se??0);if(Y&&M(T)){j(T);continue}if(Y&&(fe===null||fe<3)){let Ee=y(T);if(Ee!==null&&Ee>=3)continue}let me=null,Pe=false,ve="";if(Y)fe!==null?(me=fe,fe<3&&(Pe=true)):(Pe=true,me=1);else {let Ee=false,Ne=document.createTreeWalker(T,4),Ie=Ne.nextNode();for(;Ie;){if((Ie.textContent||"").trim()&&Ie.parentElement&&isVisible(Ie.parentElement)){Ee=true;break}Ie=Ne.nextNode();}if(Ee)continue;let nt=M(T);{let pe=["Top","Right","Bottom","Left"].map(Ve=>({w:parseFloat(v["border"+Ve+"Width"]||"0"),s:String(v["border"+Ve+"Style"]||"").toLowerCase(),c:g(v["border"+Ve+"Color"]||"")})),xe=pe.filter(Ve=>Ve.w>0&&Ve.s!=="none"&&Ve.s!=="hidden"&&Ve.c&&Ve.c[3]>.5),Xe=pe.filter(Ve=>Ve.w>0&&Ve.s!=="none"&&Ve.s!=="hidden"&&Ve.c&&Ve.c[3]===0),at=true;for(let Ve=T.parentElement;Ve&&Ve.nodeType===1;Ve=Ve.parentElement)if(parseFloat(getComputedStyle(Ve).opacity||"1")<1){at=false;break}let dt=Math.max(0,Math.min(1,parseFloat(v.opacity||"1"))),yt=String(v.backgroundClip||"border-box").toLowerCase(),Qe=!!I&&I[3]>=1&&dt>=1&&yt==="border-box";if(xe.length&&Xe.length&&at&&(!nt||Qe)){let Ve=I&&I[3]>0?_(I,E):E,rr=_([Ve[0],Ve[1],Ve[2],dt],E),nr=jr=>{let da=_(jr,Ve);return _([da[0],da[1],da[2],dt],E)};if(xe.some(jr=>b(nr(jr.c),rr)>=3))continue}}if(nt){if(q(T))continue;j(T);continue}let st=Array.from(T.querySelectorAll('img, svg, picture, canvas, i[class], [class*="icon"]')),lt=new Map,Jt=pe=>{let xe=pe.getBoundingClientRect();if(xe.width*xe.height===0)return "absent";let Xe=parseFloat(getComputedStyle(T).opacity||"1");for(let at=pe;at&&at!==T;at=at.parentElement){let dt=getComputedStyle(at);if(dt.display==="none")return "absent";if(dt.visibility==="hidden"||parseFloat(dt.opacity||"1")===0)return "hidden-at-rest";Xe*=parseFloat(dt.opacity||"1");}return lt.set(pe,Xe),"painted"},Vr=st.map(Jt),it=st.filter((pe,xe)=>Vr[xe]==="painted"),$r=it.length>0,vn=!$r&&Vr.includes("hidden-at-rest"),ge=pe=>{let xe=(pe.tagName||"").toLowerCase();if(xe==="img"||xe==="picture"||xe==="canvas"||xe==="svg"&&pe.querySelector("image, foreignObject, linearGradient, radialGradient, pattern"))return null;let Xe=[];if(xe==="svg"){let dt=pe.querySelector("path, circle, rect, polygon, polyline, line, ellipse, use, text");for(let yt of [dt,pe]){if(!yt)continue;let Qe=getComputedStyle(yt),Ve=1;for(let nr=yt;nr&&nr!==pe;nr=nr.parentElement||nr.parentNode)Ve*=parseFloat(getComputedStyle(nr).opacity||"1");let rr=nr=>Number.isFinite(parseFloat(nr))?parseFloat(nr):1;if(Qe.fill&&Qe.fill!=="none"&&!Qe.fill.startsWith("url")&&Xe.push({color:Qe.fill,alpha:Ve*rr(Qe.fillOpacity)}),Qe.stroke&&Qe.stroke!=="none"&&!Qe.stroke.startsWith("url")&&parseFloat(Qe.strokeWidth||"0")>0&&Xe.push({color:Qe.stroke,alpha:Ve*rr(Qe.strokeOpacity)}),Xe.length)break}}else ((pe.textContent||"").trim()||getComputedStyle(pe,"::before").content!=="none")&&Xe.push({color:getComputedStyle(pe).color,alpha:1});let at=null;for(let dt of Xe){let yt=g(dt.color);if(!yt)continue;let Qe=yt[3]*dt.alpha*(lt.get(pe)??1),Ve=[yt[0]*Qe+E[0]*(1-Qe),yt[1]*Qe+E[1]*(1-Qe),yt[2]*Qe+E[2]*(1-Qe)],rr=b(Ve,E);(at===null||rr>at)&&(at=rr);}return at};if($r&&it.map(ge).some(xe=>xe!==null&&xe>=3))continue;let ae=false,ue=v.position;if((ue==="absolute"||ue==="fixed")&&T.parentElement){let pe=T.getBoundingClientRect(),xe=T.parentElement.getBoundingClientRect(),Xe=xe.width*xe.height;Xe>0&&pe.width*pe.height/Xe>=.85&&(ae=true);}if($r||ae||vn){if(Pe=true,me=N&&H&&H[3]>.5?b(_(H,E),E):1,me>=3)continue;ve=$r?"control is identified by an image or icon \u2014 verify the graphic itself has 3:1 contrast against its surroundings":vn?"control is identified by an icon that is transparent until hover/focus \u2014 verify the revealed icon has 3:1 contrast against its surroundings":"control is an overlay covering other content, which provides its visual affordance \u2014 verify the underlying presentation";}else fe!==null?(me=fe,fe<3&&(Pe=true)):(Pe=true,me=1);}if(!Pe)continue;let Se=H&&H[3]>.5?[H[0],H[1],H[2]]:I&&I[3]>.5?[I[0],I[1],I[2]]:[128,128,128],ht=k(Se,E,3);if(!ht)continue;let Dt=x(ht[0],ht[1],ht[2]),He=x(E[0],E[1],E[2]),Lt="border: 1px solid "+Dt+" !important;",br=uniqueSel(T),Bt=T.tagName.toLowerCase(),Gt=fe===null&&!N?"invisible (no border, no fill: 1.00:1)":me?me.toFixed(2)+":1":"not measurable",Tt=Bt==="input"||Bt==="select"||Bt==="textarea"?Bt+" field":Bt,tr=ve?"non-text contrast: "+Tt+" boundary is "+Gt+" against "+He+" (needs 3:1) \u2014 "+ve:"non-text contrast: "+Tt+" boundary (border and fill) is "+Gt+" against "+He+", needs 3:1 \u2014 e.g. border-color "+Dt;c.push({selector:br,message:tr,attribute:"style",currentValue:me?me.toFixed(2):"?",issueType:"non_text_contrast_insufficient",wcag:"1.4.11",context:Bt+" bg="+He+" ratio="+(me?me.toFixed(2):"?")+" needs=3",needsAI:false,...ve?{needsReview:true,reviewReason:ve}:{fixValue:Lt},outerHtml:T.outerHTML.slice(0,200)});}return c},fh={name:"nonTextContrast",cap:30,async detect(l){return l.evaluate(ML)}};var OL=()=>{let l="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],m=/location\s*[=.]|location\s*\.\s*href|\.submit\s*\(|window\s*\.\s*open|history\s*\.\s*(push|replace)/i,p=document.querySelectorAll("[onfocus]");for(let b of Array.from(p)){if(g.length>=20)break;if(b.closest(l))continue;let A=b.getAttribute("onfocus")||"";if(!A||!m.test(A))continue;let x=typeof uniqueSel=="function"?uniqueSel(b):"",k=typeof getNearbyContext=="function"?getNearbyContext(b):{parentTag:b.tagName.toLowerCase(),nearbyHeading:""},R=[];R.push("tag: "+b.tagName.toLowerCase()),R.push("onfocus: "+A.slice(0,100)),k.nearbyHeading&&R.push("heading: "+k.nearbyHeading),R.push("parent: "+k.parentTag),g.push({selector:x,attribute:"onfocus",currentValue:A.slice(0,200),issueType:"onfocus_context_change",wcag:"3.2.1",context:R.join(" | "),needsAI:true,outerHtml:(b.outerHTML||"").slice(0,300)});}return g},ph={name:"onFocus",cap:20,async detect(l){return l.evaluate(OL)}};var NL=()=>{let l="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",c=[],g=['a[href="#main-content"]','a[href="#main"]','a[href="#content"]','a[href="#skip"]','a[href="#skip-content"]','a[href="#maincontent"]',"a.skip-link","a.skip-nav","a.skip-to-content","a.skiplink","a.skip-navigation",'[class*="skip-link"]','[class*="skip-nav"]'],m=false;for(let P of g){let M=document.querySelector(P);if(M&&!M.closest(l)){m=true;break}}if(!m){let P=document.querySelectorAll('a[href^="#"]');for(let M of P){if(M.closest(l))continue;let q=(M.textContent||"").toLowerCase();if(q.includes("skip")&&(q.includes("main")||q.includes("content")||q.includes("nav"))){m=true;break}}}if(!m){let P=document.querySelectorAll('button, input[type="button"], input[type="submit"]');for(let M of Array.from(P)){if(M.closest(l))continue;let q=(M.getAttribute("value")||M.textContent||"").trim().toLowerCase();if(q.includes("skip")&&(q.includes("main")||q.includes("content")||q.includes("nav"))){m=true;break}}}if(!m){let P=document.body?document.body.firstElementChild:null;if(P&&P.matches('main, [role="main"], div#main')){let M=getComputedStyle(P),q=P.getBoundingClientRect();M.display!=="none"&&M.visibility!=="hidden"&&!P.closest('[hidden], [aria-hidden="true"]')&&q.width>0&&q.height>0&&(m=true);}}if(!m){let P=Array.from(document.querySelectorAll('main, [role="main"], div#main'));for(let M of P){let q=getComputedStyle(M);if(q.display==="none"||q.visibility==="hidden"||M.closest('[hidden], [aria-hidden="true"]'))continue;if(Array.from(M.querySelectorAll("h1, h2, h3, h4, h5, h6")).some(j=>{let X=getComputedStyle(j);return X.display!=="none"&&X.visibility!=="hidden"&&!j.closest('[hidden], [aria-hidden="true"]')})){m=true;break}}}if(!m&&document.querySelector("nav")){let P=document.querySelectorAll("a, button");for(let M of Array.from(P)){if(M.closest(l))continue;let q=(M.textContent||"").trim().toLowerCase();if((q.includes("toggle")||q.includes("hide")||q.includes("collapse")||q.includes("show"))&&q.includes("content")){m=true;break}}}if(m||Array.from(document.querySelectorAll('main, [role="main"]')).filter(P=>{let M=getComputedStyle(P);if(M.display==="none"||M.visibility==="hidden"||P.closest('[hidden], [aria-hidden="true"]'))return false;let q=P.getBoundingClientRect();return q.width>0&&q.height>0}).length===1)return c;let b="",A=document.querySelector('main[id], [role="main"][id]');if(A&&A.getAttribute("id"))b=A.getAttribute("id");else {let P=document.querySelector("h1[id]");if(P&&P.getAttribute("id"))b=P.getAttribute("id");else {let M=["main-content","maincontent","main","content","skip-content"];for(let q of M)if(document.getElementById(q)){b=q;break}}}let x=b==="",k=b||"main-content",_="<style>.wa-skip-link{position:absolute;left:-9999px;top:auto;width:1px;height:1px;overflow:hidden;z-index:999999;padding:8px 16px;background:#000;color:#fff;font-size:14px;text-decoration:none;border-radius:0 0 4px 0;}.wa-skip-link:focus{position:fixed;left:8px;top:8px;width:auto;height:auto;overflow:visible;outline:2px solid #fff;outline-offset:2px;}</style>"+'<a href="#'+k+'" class="wa-skip-link">{TEXT}</a>',w=(document.documentElement.getAttribute("lang")||"").trim(),S=document.querySelector('main, [role="main"]'),y=S?(S.getAttribute("aria-label")||"").trim():"",C=document.querySelector("h1"),F=C?(C.textContent||"").trim().replace(/\s+/g," ").slice(0,80):"";return c.push({selector:"body",attribute:"prepend",currentValue:"",issueType:"skip_link",wcag:"2.4.1",context:(x?'No skip navigation link found, and no element with a referenceable id (e.g. <main id="main-content">) exists to target.':"No skip navigation link found on page; target resolved to #"+k)+(w?" | page language: "+w:"")+(y?" | main landmark label: "+y:"")+(F?" | page heading: "+F:"")+" | html template (replace {TEXT} with the link text, in the page language): "+_,needsAI:true,...x?{manualFix:true}:{}}),c},mh={name:"skipLink",async detect(l){return l.evaluate(NL)}};var qL=()=>{let g=[],m=document.querySelectorAll("*"),p=0;for(let b of Array.from(m)){if(p++>5e3||g.length>=20)break;if(b.closest("[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye]")||typeof isVisible=="function"&&!isVisible(b))continue;let x=getComputedStyle(b).backgroundImage||"";if(!x||x==="none"||!x.includes("url("))continue;let k=x.match(/url\((['"]?)(.*?)\1\)/);if(!k)continue;let R=k[2];if(!R||R.startsWith("data:")&&R.length<256)continue;let _=b.getBoundingClientRect();if(_.width<32||_.height<32)continue;let w=b.tagName.toLowerCase(),S=b.getAttribute("role")||"",y=w==="a"||w==="button"||S==="button"||S==="link"||b.closest("a,button,[role=button],[role=link]")!==null,C=(b.textContent||"").trim().length>0,F=!!b.getAttribute("aria-label"),P=!!b.getAttribute("aria-labelledby"),M=!!b.getAttribute("title"),q=!!b.querySelector('img[alt]:not([alt=""])');if(b.closest('[aria-hidden="true"]')){let v=b.closest("a[href]");if(!!v&&Array.from(document.querySelectorAll("a[href]")).some(I=>I!==v&&I.href===v.href&&!I.closest('[aria-hidden="true"]')))continue}if(F||P||M||q||C||!y)continue;let B=b.closest("a,button,[role=button],[role=link]");if(B&&B!==b){let v=(B.textContent||"").trim(),E=B.getAttribute("aria-label")||B.getAttribute("title")||"",I=B.getAttribute("aria-labelledby"),H=!!B.querySelector('img[alt]:not([alt=""])');if(v||E.trim()||I||H)continue}let j=R;try{j=new URL(R,location.href).toString();}catch{continue}let X=typeof uniqueSel=="function"?uniqueSel(b):"",T=typeof getNearbyContext=="function"?getNearbyContext(b):{parentTag:w,nearbyHeading:""};g.push({selector:X,attribute:"aria-label",currentValue:"",issueType:"background_image_unlabeled",wcag:"1.1.1",context:`bg: ${j.slice(0,140)} | tag: ${w} | role: ${S||"(none)"} | parent: ${T.parentTag}${T.nearbyHeading?" | heading: "+T.nearbyHeading:""}`,needsAI:true,imageSrc:j,outerHtml:(b.outerHTML||"").slice(0,300)});}return g},gh={name:"backgroundImages",cap:20,async detect(l){return l.evaluate(qL)}};var BL=()=>{let l="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye]",g=[];return document.querySelectorAll("svg").forEach(p=>{if(g.length>=50||p.closest(l)||!isVisible(p)||p.getAttribute("aria-hidden")==="true")return;let A=p.getAttribute("role");if(A==="presentation"||A==="none"||p.closest('[aria-hidden="true"]'))return;let x=p.getAttribute("aria-label")||"",k=p.getAttribute("aria-labelledby")||"",R=p.querySelector("title"),_=R?(R.textContent||"").trim():"";if(x.trim()||k.trim()||_)return;let w=p.getBoundingClientRect(),S=w.width<=16&&w.height<=16;if(w.width<=4||w.height<=4||p.getAttribute("preserveAspectRatio")==="none")return;let y=p.closest('a, button, [role="button"], [role="link"], [onclick]');if(y){if(y.getAttribute("aria-label")?.trim()||y.getAttribute("aria-labelledby")?.trim())return;let E=getAccessibleName(y),I=y.cloneNode(true);I.querySelectorAll("svg").forEach(V=>V.remove());let H=(I.textContent||"").trim().replace(/\s+/g," ");if(E&&H.length>0)return}else {if(!/^(img|graphics-document|graphics-symbol)$/i.test((A||"").trim().split(/\s+/)[0])||S)return;let E=p.parentElement;if(E&&(E.textContent||"").trim().replace(/\s+/g," ").length>3)return}let C=uniqueSel(p),F=getNearbyContext(y||p),P=y&&y.getAttribute("href")||"",M=(y||p).outerHTML.slice(0,300),q=p.getAttribute("class")||"",B=p.getAttribute("data-icon")||"",j=y||p,X=j&&j!==p&&j.getAttribute("class")||"",T=typeof lookupIconLabel=="function"?lookupIconLabel(String(q),B,"")||lookupIconLabel(String(X),"",""):null,v=y?uniqueSel(y):C;g.push({selector:v,attribute:"aria-label",currentValue:"",issueType:"svg_missing_name",wcag:"1.1.1",context:JSON.stringify({parentTag:(y||p).tagName?(y||p).tagName.toLowerCase():"svg",href:P,nearbyHeading:F.nearbyHeading,parentRole:F.parentRole,svgClasses:q,iconLib:T||void 0,suggestion:"Add aria-label to the parent interactive element or <title> inside SVG"}),needsAI:true,outerHtml:M});}),g},hh={name:"svgNames",cap:50,async detect(l){return l.evaluate(BL)}};var HL=()=>{let l={"line-height":1.5,"letter-spacing":.12,"word-spacing":.16},c=1e-9,g=Object.keys(l),m=30,p="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",b={px:1,pt:1.333333,pc:16,in:96,cm:37.795,mm:3.7795,q:.37795},A=T=>{let v=[];for(let E of T.split(";")){let I=E.match(/^\s*([-a-zA-Z]+)\s*:\s*(.*?)\s*$/);if(!I)continue;let H=I[1].toLowerCase();if(!g.includes(H))continue;let V=I[2],G=/!\s*important\s*$/i.test(V);V=V.replace(/!\s*important\s*$/i,"").trim(),V&&(H!=="line-height"&&/^[-+]?\d+(\.\d+)?$/.test(V)&&parseFloat(V)!==0||v.push({prop:H,value:V,important:G}));}return v},x=(T,v,E,I)=>{let H=v.trim().toLowerCase();if(/^normal$|^initial$/.test(H))return {kind:"narrow"};if(/^inherit$|^revert$|^unset$/.test(H))return {kind:"notBlocked"};if(H.startsWith("var(")||H.startsWith("calc(")||H.startsWith("env("))return {kind:"undetermined"};if(/^-?[\d.]+$/.test(H)){let Y=parseFloat(H);return T==="line-height"?{kind:"ratio",factor:Y}:{kind:"ratio",factor:0}}let V=H.endsWith("%")&&/\d/.test(H),G=V?H.slice(0,-1).trim().match(/^([\d.]+)$/):H.match(/^([\d.]+)(em|rem|vw|vh|px|pt|cm|mm|pc|in|q)$/);if(!G)return {kind:"undetermined"};let N=parseFloat(G[1]);if(V||H.endsWith("em")){let Y=I??E;return Y&&E&&isFinite(Y)&&isFinite(E)&&Y>0&&E>0?V?{kind:"ratio",factor:N/100*(Y/E)}:{kind:"ratio",factor:N*(Y/E)}:V?{kind:"ratio",factor:N/100}:{kind:"ratio",factor:N}}let U=H.match(/(rem|vw|vh|px|pt|cm|mm|pc|in|q)$/)?.[1];if(U==="px"||U&&b[U]){let Y=U==="px"?N:N*(b[U]||0);return E===null||!isFinite(E)||E<=0?{kind:"undetermined"}:{kind:"ratio",factor:Y/E}}return {kind:"undetermined"}},k=(T,v,E)=>{let I=T;for(;I;){let H=v.get(I);if(H){let V=H.filter(G=>G.prop===E);if(V.length){let G=V.filter(U=>U.important);return {decl:G.length?G[G.length-1]:V[V.length-1],from:I}}}I=I.parentElement;}return null},R=T=>{let v=T;for(;v;){let E=v.style;if(E&&(E.display==="none"||E.visibility==="hidden")||E&&(E.position==="absolute"||E.position==="fixed")&&(_(E.top)||_(E.left)))return false;if(E&&(E.overflowX==="scroll"||E.overflowX==="auto")){for(let I=T;I!==v;I=I.parentElement)if(I.style&&w(I.style.width)>=900)return false}v=v.parentElement;}return true},_=T=>{if(!T)return false;let v=T.match(/^(-)([\d.]+)(px|em|rem|vh|vw)$/i);if(!v)return false;let E=parseFloat(v[2]),I=v[3].toLowerCase();return I==="px"?E>=100:I==="em"||I==="rem"?E>=4:E>=10},w=T=>{let v=T?T.match(/^([\d.]+)px$/):null;return v?parseFloat(v[1]):0},S=[],y=[],C=new Map,F=typeof getComputedStyle=="function"?getComputedStyle:null,P=T=>{try{let v=F?F(T).fontSize:"",E=v?v.match(/^([\d.]+)px$/):null;return E?parseFloat(E[1]):null}catch{return null}},M=new Map,q=Array.from(document.querySelectorAll('[style*="important" i]'));for(let T of q)T.closest(p)||M.set(T,A(T.getAttribute("style")||""));for(let T of document.querySelectorAll("body [style]"))T.closest(p)||M.has(T)||M.set(T,A(T.getAttribute("style")||""));let B=[],j=document.createTreeWalker(document.body,1),X=j.currentNode;for(;X;)Array.from(X.childNodes).some(v=>v.nodeType===3&&/\S/.test(v.textContent||""))&&!X.closest(p)&&B.push(X),X=j.nextNode();for(let T of B){if(S.length>=m)break;if(R(T))for(let v of g){let E=k(T,M,v);if(!E||!E.decl.important)continue;let I=P(T),H=E.from===T?I:P(E.from)??I,V=x(v,E.decl.value,I,H);if(!(V.kind==="undetermined"||V.kind==="narrow"||V.kind==="ratio"&&V.factor+c<l[v]))continue;let N=C.get(E.from);N||(N=[],C.set(E.from,N),y.push({from:E.from,props:N})),N.includes(v)||N.push(v);}}for(let{from:T,props:v}of y){if(S.length>=m)break;let E=typeof uniqueSel=="function"?uniqueSel(T):"",I=typeof getNearbyContext=="function"?getNearbyContext(T):{parentTag:T.parentElement?.tagName.toLowerCase()||"",nearbyHeading:""},H=[];H.push("blocked: "+v.join(",")),H.push("tag: "+T.tagName.toLowerCase()),I.nearbyHeading&&H.push("heading: "+I.nearbyHeading),H.push("parent: "+I.parentTag),S.push({selector:E,attribute:"style",currentValue:(T.getAttribute("style")||"").slice(0,200),issueType:"text_spacing_blocked",wcag:"1.4.12",context:H.join(" | "),needsAI:true,outerHtml:(T.outerHTML||"").slice(0,300)});}return S},vh={name:"textSpacing",cap:30,async detect(l){return l.evaluate(HL)}};var VL=()=>{let l="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],m=document.querySelectorAll('button, input[type="submit"], input[type="button"], input[type="reset"], [role="button"]');for(let p of m){if(g.length>=50)break;if(p.closest(l)||!isVisible(p))continue;let b=p,A=b.tagName==="INPUT"?(b.getAttribute("type")||"").toLowerCase():"";if(A==="submit"||A==="reset")continue;let x=(b.getAttribute("role")||"").trim().toLowerCase().split(/\s+/)[0];if((x==="none"||x==="presentation")&&b.disabled===true)continue;let k=(b.getAttribute("aria-label")||"").trim(),R=b.getAttribute("aria-labelledby"),_=(b.getAttribute("title")||"").trim(),w=(b.getAttribute("value")||"").trim(),S=(b.textContent||"").trim().replace(/\s+/g," "),y="";R&&(y=typeof __resolveIdRefs=="function"?__resolveIdRefs(R):"");let C=b.querySelector('img[alt]:not([alt=""])'),F=b.querySelector("svg title"),P=b.querySelector("svg[aria-label]");if(!!(k||y||_||w||S||C||F||P))continue;let q=uniqueSel(b),B=getNearbyContext(b),j=b.closest("form"),X=j&&(j.getAttribute("id")||j.getAttribute("name"))||"",T=b.getAttribute("class")||"",v=b.querySelector('i, svg, span[class*="icon"]'),E=v&&v.getAttribute("class")||"",I=v&&v.getAttribute("data-icon")||"",H=v?(v.textContent||"").trim():"",V=typeof lookupIconLabel=="function"?lookupIconLabel(String(E),I,H):null,G=!V&&typeof lookupIconLabel=="function"?lookupIconLabel(String(T),"",""):null,N=V||G,U=[];for(let z of ["type","name","id"]){let ie=(b.getAttribute(z)||"").trim();ie&&U.push(z+"="+ie.slice(0,40));}let Y=[];if(j){let z=(j.getAttribute("action")||"").trim();if(z){let se=z;try{se=new URL(z,document.baseURI).pathname;}catch{}Y.push("action: "+se.slice(0,80));}let ie=[];for(let se of j.querySelectorAll("input:not([type=hidden]):not([type=submit]):not([type=button]), textarea, select")){let fe=(se.getAttribute("aria-label")||se.getAttribute("placeholder")||se.id&&Array.from(j.querySelectorAll("label[for]")).find(me=>me.getAttribute("for")===se.id)?.textContent||se.getAttribute("name")||"").trim().replace(/\s+/g," ");if(ie.push(fe.slice(0,40)||se.getAttribute("type")||se.tagName.toLowerCase()),ie.length>=4)break}ie.length&&Y.push("fields: "+ie.join(", "));}let Z=[];X&&Z.push("form: "+X),B.nearbyHeading&&Z.push("heading: "+B.nearbyHeading),E&&Z.push("icon: "+String(E).slice(0,80)),T&&Z.push("class: "+String(T).slice(0,80)),Z.push("parent: "+B.parentTag),U.length&&Z.push("control: "+U.join(" "));for(let z of Y)Z.push("form "+z);N&&Z.push("icon-hint (glyph name only, not the action): "+N),g.push({selector:q,attribute:"aria-label",currentValue:"",issueType:"unlabeled_button",wcag:"4.1.2",context:Z.join(" | "),needsAI:true,outerHtml:b.outerHTML.slice(0,300)});}return g},bh={name:"unlabeledButtons",cap:50,async detect(l){return l.evaluate(VL)}};var $L=()=>{let l=new Set(["more","info","click","click here","here","read more","learn more","see more","link","button","this"]),c=new Set(["submit","send","yes","no","next","prev","previous","back","view","details","continue","go","ok","open","close","apply","save"]),g={};function m(T){if(isWidget(T)||!isVisible(T))return;let v=getAccessibleName(T);if(!v)return;let E=v.toLowerCase().trim();g[E]=(g[E]||0)+1;}document.querySelectorAll("a[href]").forEach(T=>m(T));let p=new Set(["fa","fas","far","fab","fal","fad","material-icons","material-symbols","bi","glyphicon"]),b=["fa-","bi-","icon-","icofont-","dashicons-","heroicon","feather-","lucide-","material-"];function A(T){let v=T.toLowerCase();return p.has(v)||b.some(E=>v.startsWith(E))}let x=/[\u4e00-\u9fff\u3040-\u30ff\uac00-\ud7af]/;function k(T,v){return x.test(T)?1:v}let R=50,_=[];function w(T){if((T.textContent||"").trim().replace(/\s+/g," ").length>0)return false;let E=T.querySelectorAll("i, span, em");for(let I of E)if((typeof I.className=="string"?I.className:"").split(/\s+/).some(A))return true;return false}function S(T){let v=T.className||"";return typeof v!="string"?false:v.split(/\s+/).some(A)}function y(T){if(_.length>=R||isWidget(T)||!isVisible(T))return;let v=getAccessibleName(T);if(!v)return;let E=v.toLowerCase().trim(),I=false,H=v.length>=2&&/^[A-Z][A-Z0-9]+$/.test(v.trim()),V=/^[[(]?\d{1,4}[\])]?$/.test(v.trim());if(v.length<k(v,3)&&!H&&!V)I=true;else if(l.has(E))I=true;else if(c.has(E)&&(g[E]||0)>=2){let Z=(T.getAttribute("aria-label")||"").trim().toLowerCase(),z=!!T.getAttribute("aria-labelledby")||!!Z&&Z!==E,ie=T.querySelector&&T.querySelector('.sr-only, .visually-hidden, [class*="sr-only"], [class*="visually-hidden"], [class*="screen-reader"]'),se=ie?(ie.textContent||"").trim().toLowerCase():"";!z&&!(ie&&se!==E)&&(I=true);}else (w(T)||S(T)&&v.length===0)&&(T.getAttribute("aria-label")||T.getAttribute("aria-labelledby")||T.querySelector&&T.querySelector('.sr-only, .visually-hidden, [class*="sr-only"], [class*="visually-hidden"]')||(I=true));if(!I)return;let G=getNearbyContext(T),N=uniqueSel(T),U=T.getAttribute("href")||"",Y=T.outerHTML.slice(0,300);_.push({selector:N,attribute:"aria-label",currentValue:(T.getAttribute("aria-label")||"").trim(),message:"weak link name: "+(T.getAttribute("aria-label")||T.getAttribute("aria-labelledby")?`"${v}" is too generic for a control \u2014 add distinguishing context`:`text "${v}" is too generic for a control \u2014 add distinguishing context`),issueType:"weak_link_name",wcag:"2.4.4",needsReview:true,reviewReason:"WCAG 2.4.4 (AA) judges link purpose in context: the link text together with its sentence, paragraph, list item or table cell (nearbyText). A link whose text names its destination page or topic passes, even as one word in a menu. Fail only generic text (here, more, click here, read more) whose context still does not say where the link goes.",context:JSON.stringify({currentText:v,href:U,nearbyHeading:G.nearbyHeading,parentTag:G.parentTag,parentRole:G.parentRole,cardText:G.cardText||"",imgAlt:G.imgAlt||""}),needsAI:true,outerHtml:Y});}document.querySelectorAll("a[href]").forEach(T=>y(T));let C=/^(untitled(?:\s+document)?|new\s+page|new\s+document|home|page\s*\d*|document|untitled)$/i,F=/^(iframe|embed|widget|frame|content|untitled)$/i,P=new Set(["section","title","heading","headings","page","content","chapter","part","article","document","intro","untitled","test","lorem","tbd","todo","draft","sample","example","welcome","hello","hi","home"]);function M(T){return !!(!T||T.getAttribute("aria-hidden")==="true"||T.closest('[aria-hidden="true"]'))}function q(T,v,E,I,H,V){if(_.length>=R)return;let G=uniqueSel(T),N=(T.outerHTML||"").slice(0,300);_.push({selector:G,attribute:v,currentValue:E,issueType:I,wcag:H,context:JSON.stringify(V),needsAI:true,outerHtml:N});}let B=document.querySelectorAll("h1,h2,h3,h4,h5,h6");for(let T=0;T<B.length&&!(_.length>=R);T++){let v=B[T];if(!v||isWidget(v)||M(v)||!isVisible(v))continue;let E=getAccessibleName(v);if(!E)continue;let I=E.toLowerCase().trim(),H=I.split(/\s+/).filter(Boolean),V=()=>{if(!/^\p{L}$/u.test(E))return false;let U=v.nextElementSibling;if(!U)return false;let Y=U.tagName.toLowerCase(),Z=[];if(Y==="dl"?Z=Array.from(U.querySelectorAll("dt")):Y==="ul"||Y==="ol"?Z=Array.from(U.children).filter(ie=>ie.tagName==="LI"):Y==="table"&&(Z=Array.from(U.querySelectorAll("tbody tr, tr")).map(ie=>ie.cells&&ie.cells[0])),Z=Z.filter(Boolean),Z.length<1)return false;let z=E.toLowerCase();return Z.every(ie=>(ie.textContent||"").trim().toLowerCase().startsWith(z))},G=false;if(E.length<k(E,3)?G=!V():(H.length===1&&(l.has(I)||P.has(I))||/^page\s*\d+$/i.test(I)||/^section\s*\d+$/i.test(I)||/^chapter\s*\d+$/i.test(I)||/^[^\p{L}\p{N}]+$/u.test(E))&&(G=true),!G)continue;let N=getNearbyContext(v);q(v,"textContent",E,"weak_heading","2.4.6",{currentText:E,tag:v.tagName.toLowerCase(),nearbyHeading:N.nearbyHeading,parentTag:N.parentTag,parentRole:N.parentRole});}let j=document.querySelectorAll("iframe");for(let T=0;T<j.length&&!(_.length>=R);T++){let v=j[T];if(!v||isWidget(v)||M(v))continue;let E=getComputedStyle(v);if(v.getClientRects().length===0||E.visibility==="hidden"||E.visibility==="collapse"||(v.getAttribute("src")||"").trim().toLowerCase().indexOf("javascript:")===0)continue;let I=(v.getAttribute("title")||"").trim();if(!I)continue;let H=I.toLowerCase(),V=false;if((I.length<k(I,3)||F.test(H)||l.has(H))&&(V=true),!V)continue;let G=(v.getAttribute("src")||"").slice(0,120),N=getNearbyContext(v);q(v,"title",I,"weak_iframe_title","4.1.2",{currentTitle:I,src:G,nearbyHeading:N.nearbyHeading,parentTag:N.parentTag});}if(_.length<R){let T=document.querySelector("head > title, title"),v=(document.title||"").trim();if(T&&v){let E=v.toLowerCase(),I=false;(v.length<k(v,5)||C.test(E)||/^untitled/i.test(v))&&(I=true),I&&_.push({selector:"title",attribute:"textContent",currentValue:v,issueType:"weak_page_title",wcag:"2.4.2",context:JSON.stringify({currentTitle:v,hostname:typeof location<"u"&&location&&location.hostname||"",pathname:typeof location<"u"&&location&&location.pathname||""}),needsAI:true,outerHtml:(T.outerHTML||"").slice(0,300)});}}let X=document.querySelectorAll("svg");for(let T=0;T<X.length&&!(_.length>=R);T++){let v=X[T];if(!v||isWidget(v)||M(v)||v.getAttribute("role")==="presentation"||v.getAttribute("role")==="none"||!isVisible(v))continue;let E=v.querySelector("title"),I=E?(E.textContent||"").trim():"",H=(v.getAttribute("aria-label")||"").trim(),V=H||I;if(!V)continue;let G=V.toLowerCase(),N=false;if((V.length<k(V,3)||l.has(G)||/^(icon|svg|image|graphic|logo)$/i.test(V))&&(N=true),!N)continue;let U=v.closest('a, button, [role="button"], [role="link"]'),Y=getNearbyContext(v);q(v,H?"aria-label":"title",V,"weak_svg_name","1.1.1",{currentName:V,svgClasses:v.getAttribute("class")||"",parentTag:U?U.tagName.toLowerCase():Y.parentTag,parentHref:U&&U.getAttribute("href")||"",nearbyHeading:Y.nearbyHeading});}return _},yh={name:"weakNames",cap:50,async detect(l){return l.evaluate($L)}};var jL=()=>{let c=[],g=document.querySelector('meta[name="viewport"]');if(g){let p=(g.getAttribute("content")||"").trim(),b=p.toLowerCase(),A=false,x=[];(b.indexOf("user-scalable=no")>=0||b.indexOf("user-scalable=0")>=0)&&(A=true,x.push("user-scalable=no blocks pinch-zoom"));let k=["yes","no","device-width","device-height"],R=b.match(/user-scalable\s*=\s*([a-z][a-z-]*)/);R&&k.indexOf(R[1])<0&&(A=true,x.push("user-scalable="+R[1]+" (invalid, parsed as 0)"));let _=b.match(/maximum-scale\s*=\s*([a-z][a-z-]*)/);_&&k.indexOf(_[1])<0&&(A=true,x.push("maximum-scale="+_[1]+" (invalid, parsed as 0)"));let w=b.match(/maximum-scale\s*=\s*([\d.]+)/);w&&parseFloat(w[1])<2&&(A=true,x.push("maximum-scale="+w[1]+" (<2)")),A&&c.push({selector:'meta[name="viewport"]',attribute:"content",currentValue:p,issueType:"zoom_restriction",wcag:"1.4.4",context:"viewport blocks zoom: "+x.join(" | "),needsAI:false,fixValue:"width=device-width, initial-scale=1"});}let m=[{el:document.documentElement,selector:"html"},{el:document.body,selector:"body"}];for(let p=0;p<m.length&&!(c.length>=5);p++){let b=m[p];if(b.el)try{let x=(getComputedStyle(b.el).getPropertyValue("touch-action")||"").trim().toLowerCase();(x==="none"||x==="pinch-zoom")&&c.push({selector:b.selector,attribute:"style",currentValue:"touch-action: "+x,issueType:"zoom_restriction",wcag:"1.4.4",context:"CSS touch-action: "+x+" on <"+b.selector+"> prevents pinch-zoom",needsAI:!1,fixValue:"touch-action: manipulation !important;"});}catch{}}return c},wh={name:"zoomUnlock",cap:5,async detect(l){return l.evaluate(jL)}};var zL=()=>{let c=[],g=document.body?document.body.querySelectorAll("*"):[];for(let m=0;m<g.length&&c.length<10;m++){let p=g[m],b=p.tagName.toLowerCase();if(b==="script"||b==="style"||b==="svg"||b==="textarea"||b==="select")continue;let A="";for(let M=p.firstChild;M;M=M.nextSibling)M.nodeType===3&&(A+=M.nodeValue);if(!A.replace(/\s+/g,"").length)continue;let x=getComputedStyle(p);if(x.display==="none"||x.visibility==="hidden"||x.display==="contents")continue;let k=x.overflowX,R=x.overflowY,_=k==="hidden"||k==="clip",w=R==="hidden"||R==="clip";if(!_&&!w||p.closest('[aria-hidden="true"],[hidden],[inert]'))continue;let S=p.clientWidth,y=p.clientHeight;if(y<=1||S<=1)continue;let C=x.webkitLineClamp||x.getPropertyValue("-webkit-line-clamp");if(C&&C!=="none")continue;let F="";if(w&&p.scrollHeight>y+2?F="height "+y+"px < content "+p.scrollHeight+"px":_&&x.textOverflow!=="ellipsis"&&p.scrollWidth>S+2&&(F="width "+S+"px < content "+p.scrollWidth+"px"),!F){let M=parseFloat(x.fontSize);if(!(M>0))continue;let q=p.style.getPropertyValue("font-size"),B=p.style.getPropertyPriority("font-size");p.style.setProperty("font-size",M*2+"px","important");let j=p.clientHeight,X=p.clientWidth;w&&j>1&&p.scrollHeight>j+2?F="at 200%: height "+j+"px < content "+p.scrollHeight+"px":_&&x.textOverflow!=="ellipsis"&&X>1&&p.scrollWidth>X+2&&(F="at 200%: width "+X+"px < content "+p.scrollWidth+"px"),q?p.style.setProperty("font-size",q,B):p.style.removeProperty("font-size");}if(!F)continue;let P=typeof uniqueSel=="function"?uniqueSel(p):b;c.push({selector:P,attribute:"style",currentValue:(p.getAttribute("style")||"").slice(0,200),issueType:"resize_text_clipped",wcag:"1.4.4",context:"text clipped by overflow:hidden: "+F,needsAI:true,needsReview:true,reviewReason:"WCAG 1.4.4 Resize Text: this text is cut off by overflow:hidden ("+F+"). Violation when content or function is lost at 200% text size and no other mechanism shows it. Pass when the clipped part is decorative or repeated elsewhere, or the box grows or scrolls when text is resized.",outerHtml:(p.outerHTML||"").slice(0,300)});}return c},xh={name:"textClip",cap:10,async detect(l){return l.evaluate(zL)}};var GL=()=>{let l=[],c=document.querySelectorAll('main *, [role="main"] *, body > div *'),g=new Set,m=Math.min(c.length,200);for(let p=0;p<m;p++){let b=c[p];if(g.has(b)||!b.offsetParent)continue;g.add(b);let A=getComputedStyle(b),x=parseInt(A.order||"0",10),k=A.position;if(x>=3){let R=b.getBoundingClientRect();if(R.width>0&&R.height>0){let _=(b.textContent?.trim().length||0)>10,w=!!b.querySelector("a, button, input, select, textarea");(_||w)&&l.push({selector:typeof uniqueSel=="function"?uniqueSel(b):b.tagName.toLowerCase(),attribute:"data-sequence-review",currentValue:`CSS order: ${x}`,issueType:"meaningful_sequence",wcag:"1.3.2",context:`Element uses CSS order:${x} \u2014 content with interactive elements or text is visually reordered far from its DOM position, which confuses screen readers and keyboard users.`,needsAI:true});}}if(k==="absolute"){if(!!!b.querySelector("a, button, input, select, textarea"))continue;let _=b.parentElement;if(!_||_.children.length<=2)continue;let w=b.getBoundingClientRect(),S=_.getBoundingClientRect();(w.top<S.top-100||w.left<S.left-300)&&l.push({selector:typeof uniqueSel=="function"?uniqueSel(b):b.tagName.toLowerCase(),attribute:"data-sequence-review",currentValue:`position: ${k}, displaced ${Math.round(Math.abs(w.top-S.top))}px`,issueType:"meaningful_sequence",wcag:"1.3.2",context:"Interactive content is absolutely positioned far from its DOM location. Screen readers and keyboard users will encounter it in a different order than visual users.",needsAI:true});}}return l},Ah={name:"meaningfulSequence",async detect(l){return l.evaluate(GL)}};var _h={name:"sensoryCharacteristics",async detect(l){let{instructionalTexts:c,controlLabels:g,navCount:m,labelTexts:p}=await l.evaluate(()=>{let x=[],k=document.querySelectorAll('p, li, td, label, span, div, a, button, h1, h2, h3, h4, h5, h6, figcaption, [role="alert"], [role="status"]'),R=Math.min(k.length,300),_=[];document.querySelectorAll('button, a[href], [role="button"], input[type="button"], input[type="submit"]').forEach(C=>{let F=((C.textContent||"")+" "+(C.getAttribute("aria-label")||"")+" "+(C.getAttribute("value")||"")).trim().toLowerCase();F&&_.push(F);});let w=C=>!!C.offsetParent||getComputedStyle(C).position==="fixed",S=Array.from(document.querySelectorAll('nav, [role="navigation"]')).filter(w).length,y=[];document.querySelectorAll('h1, h2, h3, h4, h5, h6, nav, [role="navigation"], [role="menu"], [role="menubar"], [aria-label], summary, button, a, legend').forEach(C=>{if(!w(C))return;let F=((C.getAttribute("aria-label")||"")+" "+(C.tagName.match(/^(H\d|SUMMARY|BUTTON|A|LEGEND)$/)&&C.textContent||"")).trim().toLowerCase();F&&F.length<=60&&y.push(F);});for(let C=0;C<R;C++){let F=k[C];if(!F.offsetParent||F.children.length>3||F.querySelector("p, div, ul, ol, li, table, section, article, nav, header, footer, main, aside, form, h1, h2, h3, h4, h5, h6")||F.closest('[aria-hidden="true"]'))continue;let P=F.textContent?.trim()||"";P.length<15||P.length>300||/click|tap|press|select|choose|find|look|see|drag|scroll|hover|go to|navigate/i.test(P)&&x.push({text:P,selector:typeof uniqueSel=="function"?uniqueSel(F):F.tagName.toLowerCase()});}return {instructionalTexts:x.slice(0,20),controlLabels:_,navCount:S,labelTexts:y}});if(c.length===0)return [];let b=[],A=x=>{let k=(x.toLowerCase().match(/\b(navigation|menu)\b/)||[])[1];return k?m===1?true:p.some(R=>R.indexOf(k)!==-1):false};for(let{text:x,selector:k}of c){x.toLowerCase();let _=/\b(round|square|circular|triangular|arrow-shaped)\b.*\b(button|icon|element|thing)\b/i.test(x)&&!/\b(submit|cancel|close|menu|search|delete|edit|save|back|next|previous|home)\b/i.test(x),w=/\b(header|footer|sidebar menu|breadcrumb)\b/i.test(x)||A(x),S=/\b(on the|to the|in the)\s+(left|right|top|bottom|upper|lower|above|below|sidebar)\b/i.test(x)&&!w&&/\b(click|tap|press|select|find)\b/i.test(x),y=/\b(red|green|blue|yellow|orange|purple|pink|gray|grey|white|black)\s+(button|link|icon|text|area|section|box|dot|circle|indicator)\b/i.test(x)&&!/\b(submit|cancel|close|delete|save|success|error|warning|danger)\b/i.test(x),C=/\b(large|small|big|tiny|narrow|wide)\s+(button|link|icon|box|area)\b/i.test(x)&&/\b(click|tap|press|select|find)\b/i.test(x),F=/\b(?:labell?ed|called|named|titled)\s+["'“‘]/i.test(x),P=(x.match(/\b(round|square|circular|triangular|arrow-shaped|red|green|blue|yellow|orange|purple|pink|gray|grey|white|black|large|small|big|tiny|narrow|wide)\b/i)||[])[1],M=!!P&&g.some(q=>q.indexOf(P.toLowerCase())!==-1);if(!(F||M)&&(_||S||y||C)){let q=_?"shape":S?"position":y?"color":"size";b.push({selector:k,attribute:"data-sensory-review",currentValue:x.slice(0,100),issueType:"sensory_characteristic",wcag:"1.3.3",context:`Instruction relies on ${q} alone: "${x.slice(0,80)}". Provide a non-sensory way to identify the referenced element (e.g., by name, label, or function).`,needsAI:true});}}return b}};var UL=()=>{let l=[],c=document.querySelectorAll("img");for(let g of c){if(!g.offsetParent||g.width<50||g.height<20||g.complete&&g.naturalWidth===0)continue;let m=g.src||g.getAttribute("data-src")||"",p=m.indexOf(","),b=(m.toLowerCase().startsWith("data:")&&p!==-1?m.slice(0,p):m).toLowerCase(),A=g.getAttribute("alt")||"",x=g.getAttribute("role")||"";if(g.getAttribute("aria-hidden")==="true"||!!g.closest('[aria-hidden="true"]')||x==="presentation"||x==="none"||g.hasAttribute("alt")&&A.trim()==="")continue;let R=g.width>200&&g.height<80&&g.height>15,_=/banner|header|logo-text|title|heading|cta|promo|offer|button.*\.(?:png|jpg|gif|webp)/i.test(b);if(!(_||R)||/(?:^|\/)(?:img|dsc|dscn|dcim|pict)[-_]?\d|photo|gallery/i.test(b)&&!_)continue;let S=g.closest("a[href]"),y=(()=>{if(!S)return false;let X=S.getAttribute("href")||"";if(X==="/"||X==="")return true;try{let T=new URL(S.href,location.href);return T.origin!==location.origin?!1:!!(T.pathname.replace(/\/+$/,"")===""||/^\/(?:index|home|default)(?:\.\w+)?$/i.test(T.pathname)||/^\/[a-z]{2}(?:-[a-z]{2})?(?:\.\w+)?$/i.test(T.pathname))}catch{return false}})();if(y&&(S.textContent||"").trim().length===0)continue;let F="";if(S&&!y&&(S.textContent||"").trim().length===0)try{let X=new URL(S.href,location.href),T=A.trim().split(/\s+/).filter(Boolean);if(X.origin!==location.origin&&/^https?:$/.test(X.protocol)&&T.length>0&&T.length<=4&&A.trim().length<=40){let v=G=>G.toLowerCase().normalize("NFKD").replace(/[^\p{L}\p{N}]/gu,""),E=v(A),I=X.hostname.toLowerCase().split(".").filter(G=>G&&G!=="www"),H=(I.length>1?I.slice(0,-1):I).map(v).filter(Boolean);F=E.length>=3&&(E===v(I.join(""))||E===H.join("")||H.some(G=>E===G||G.length>=5&&E.startsWith(G)))?"exempt":"review";}}catch{}let P=!!g.closest('header, [role="banner"], footer, [role="contentinfo"]'),M=g.height>0&&g.height<=120,q=P&&M,B=/logo|brand|wordmark|hero|banner-?(?:img|image)?|footer|marketing|promo|cover|screenshot|dashboard/i,j=q||B.test(b)||B.test(g.className)||B.test(g.getAttribute("id")||"");b.includes("icon")||b.includes("avatar")||b.includes("emoji")||l.push({selector:typeof uniqueSel=="function"?uniqueSel(g):"img",attribute:"data-image-of-text",currentValue:b.split("/").pop()?.slice(0,60)||"",issueType:"image_of_text",wcag:"1.4.5",context:`Image may contain text (${g.width}x${g.height}px, alt="${A.slice(0,40)}"). Use real text with CSS styling instead.`,needsAI:true,imageSrc:g.src,...j||F?{needsReview:true,reviewReason:q?"small graphic in the header/footer landmark \u2014 likely a logo, wordmark, or brand signature, which are exempt under WCAG 1.4.5 (logotypes)":F==="exempt"?"image is the only content of a link to another site and its alt names that site \u2014 likely the partner/sponsor logo, exempt under WCAG 1.4.5 (logotypes); confirm the image holds only the brand name":F==="review"?"image is the only content of a link to another site and its alt is a short name \u2014 likely a partner/sponsor logo, exempt under WCAG 1.4.5 (logotypes)":"filename suggests marketing/brand imagery; logos and brand collateral are exempt under WCAG 1.4.5"}:{}});}return l},Dh={name:"imagesOfText",async detect(l){return l.evaluate(UL)}};var Eh={name:"reflow",async detect(l){let c=l;if(!c.setViewport)return [];let g=c.viewport?.()??{width:1280,height:720},m=g.width??1280,p=g.height??720;try{return await c.setViewport({width:320,height:p}),await new Promise(A=>setTimeout(A,500)),await l.evaluate(A=>{let x=[],k=document.querySelectorAll("body *"),R=Math.min(k.length,500);for(let _=0;_<R;_++){let w=k[_];if(!w.offsetParent)continue;let S=w.tagName.toLowerCase();if(S==="script"||S==="style"||S==="noscript")continue;let y=w.getBoundingClientRect();y.right>A+5&&y.width>A*1.1&&x.push({selector:typeof uniqueSel=="function"?uniqueSel(w):S,attribute:"style",currentValue:`${Math.round(y.width)}px wide at ${A}px viewport`,issueType:"reflow_overflow",wcag:"1.4.10",context:`Element is ${Math.round(y.width)}px wide and overflows the ${A}px viewport by ${Math.round(y.right-A)}px. Content must reflow to a single column at 320px CSS width without horizontal scrolling.`,needsAI:!1,fixValue:"max-width: 100%; overflow-wrap: break-word;"});}return document.documentElement.scrollWidth>A+10&&x.push({selector:"html",attribute:"data-reflow",currentValue:`scrollWidth ${document.documentElement.scrollWidth}px at ${A}px viewport`,issueType:"reflow_overflow",wcag:"1.4.10",context:`Page has horizontal scrollbar at ${A}px width. WCAG 1.4.10 requires content to reflow without horizontal scrolling at 320 CSS pixels (equivalent to 1280px at 400% zoom).`,needsAI:!1,fixValue:"Fix elements causing horizontal overflow at narrow viewports"}),x},320)}finally{await c.setViewport({width:m,height:p}).catch(()=>{});}}};var WL=()=>{let l=[],c=document.querySelectorAll("video");for(let m of c){if(m.autoplay&&!m.muted&&l.push({selector:typeof uniqueSel=="function"?uniqueSel(m):"video",attribute:"muted",currentValue:"autoplay without muted",issueType:"unsafe_autoplay",wcag:"1.4.2",context:"Video autoplays with sound. Either mute by default, provide a mechanism to pause, or limit to 3 seconds.",needsAI:false,fixValue:"true"}),!(m.offsetParent!==null&&getComputedStyle(m).display!=="none"))continue;let b=m.getBoundingClientRect();if(b.width===0&&b.height===0||m.error)continue;let A=/mute|unmute|sound|volume|audio|play|pause/i,x=!!m.parentElement?.querySelector('button, [role="button"]')||!!m.getAttribute("id")&&!!document.querySelector('[aria-controls~="'+(m.getAttribute("id")||"").replace(/"/g,"")+'"]');for(let y=m.parentElement?.parentElement||null,C=0;y&&!x&&C<3;y=y.parentElement,C++)x=Array.from(y.querySelectorAll('button, [role="button"]')).some(F=>A.test((F.getAttribute("aria-label")||"")+" "+(F.getAttribute("title")||"")+" "+(F.textContent||"")));if((m.muted||m.hasAttribute("muted"))&&(m.loop||m.hasAttribute("loop"))&&!m.hasAttribute("controls")&&!x)continue;let k=m.querySelectorAll("track"),R=Array.from(k).find(y=>y.kind==="captions"||y.kind==="subtitles"),_=Array.from(k).find(y=>y.kind==="descriptions");m.src||m.querySelector("source")?.src||"";let S=typeof uniqueSel=="function"?uniqueSel(m):"video";R||l.push({selector:S,attribute:"data-captions-missing",currentValue:"",issueType:"missing_captions",wcag:"1.2.2",context:`Video element has no <track kind="captions">. Provide synchronized captions for all prerecorded audio content. Page language: ${(document.documentElement.getAttribute("lang")||"").trim()||"not declared"}; the caption track's srclang and label follow the spoken language, which only the audio settles.`,needsAI:false,fixValue:'Add a <track kind="captions" src="captions.vtt" srclang="[spoken language]" label="[language name]" default> element',needsReview:true,reviewReason:"cannot verify an audio track in-page \u2014 confirm the video has speech content before adding captions (silent videos need none)"}),_||l.push({selector:S,attribute:"data-audio-description",currentValue:"",issueType:"missing_audio_description",wcag:"1.2.5",context:"Video has no audio description track. For prerecorded video with meaningful visual content not described in the audio, provide an audio description track or a text transcript.",needsAI:true,needsReview:true,reviewReason:"needs a human to judge whether the video shows information its audio does not describe"});}let g=document.querySelectorAll("audio");for(let m of g){let p=typeof uniqueSel=="function"?uniqueSel(m):"audio";m.closest("figure, div, section")?.querySelector('a[href*="transcript"], [class*="transcript"]')||l.push({selector:p,attribute:"data-transcript-missing",currentValue:"",issueType:"missing_transcript",wcag:"1.2.1",context:"Audio element has no associated transcript. Provide a text transcript for all prerecorded audio-only content.",needsAI:true}),m.autoplay&&!m.muted&&l.push({selector:p,attribute:"muted",currentValue:"autoplay without muted",issueType:"unsafe_autoplay",wcag:"1.4.2",context:"Audio autoplays with sound. Provide a way to pause/stop/mute, or limit to 3 seconds.",needsAI:false,fixValue:"true"});}return l},Sh={name:"mediaAlternatives",cap:50,async detect(l){return (await l.evaluate(WL)).slice(0,50)}};var XL=()=>{let l=[],c=document.querySelector('meta[http-equiv="refresh"]');if(c){let T=c.getAttribute("content")||"",v=parseInt(T,10);!isNaN(v)&&v>0&&v<72e3&&l.push({selector:`meta[http-equiv="refresh"][content*="${T.trim().slice(0,20)}"]`,attribute:"data-auto-refresh",currentValue:T,issueType:"auto_refresh",wcag:"2.2.1",context:`Page auto-refreshes after ${v}s. Users must be able to turn off, adjust, or extend time limits (WCAG 2.2.1).`,needsAI:false,manualFix:true});}let g=document.querySelectorAll("[accesskey]");for(let T of g){let v=T.getAttribute("accesskey")||"";if(v.length===1){let E=typeof uniqueSel=="function"?uniqueSel(T):T.tagName.toLowerCase();l.push({selector:E,attribute:"accesskey",currentValue:v,issueType:"character_key_shortcut",wcag:"2.1.4",context:`Single character accesskey "${v}". Must allow users to remap or disable single-character shortcuts. Consider using modifier key combinations instead.`,needsAI:false,fixValue:"Provide a mechanism to remap or turn off the shortcut, or use modifier keys"});}}let m=document.querySelectorAll("select");for(let T of m){let v=T.hasAttribute("onchange"),E=T.getAttribute("onchange")||"";if(v&&/submit|location|href|navigate|window\./i.test(E)){let I=typeof uniqueSel=="function"?uniqueSel(T):"select";l.push({selector:I,attribute:"onchange",currentValue:E.slice(0,80),issueType:"on_input_change",wcag:"3.2.2",context:"Select element changes context on input (navigates or submits). Add an explicit submit button instead of auto-submitting on selection change.",needsAI:false,fixValue:"Add a submit button; remove auto-navigation from onchange"});}}let p=document.querySelectorAll("[ontouchstart], [ontouchmove], [ongesturestart], [ongesturechange]");for(let T of p)if(!(T.hasAttribute("onclick")||T.hasAttribute("onkeydown")||T.hasAttribute("onkeyup"))){let E=typeof uniqueSel=="function"?uniqueSel(T):T.tagName.toLowerCase();l.push({selector:E,attribute:"data-pointer-gesture",currentValue:"touch/gesture handler without keyboard alternative",issueType:"pointer_gesture",wcag:"2.5.1",context:"Element has touch/gesture handler but no keyboard or click alternative. All multipoint/path-based gestures must have single-pointer alternatives.",needsAI:true});}let b=document.querySelectorAll("[onmousedown]");for(let T of b){let v=T.hasAttribute("onmouseup"),E=T.tagName.toLowerCase();if(!v&&E!=="a"&&E!=="button"&&E!=="input"){let I=typeof uniqueSel=="function"?uniqueSel(T):E;l.push({selector:I,attribute:"data-pointer-cancellation",currentValue:"mousedown action without mouseup",issueType:"pointer_cancellation",wcag:"2.5.2",context:"Element fires action on mouse down-event. Use click or mouseup instead so users can cancel by moving the pointer away before releasing.",needsAI:false,fixValue:"Move action from onmousedown to onclick or onmouseup"});}}let A=/devicemotion|deviceorientation|accelerometer|gyroscope/i,x=/addEventListener\(\s*['"](?:devicemotion|deviceorientation)['"]\s*,\s*(?:\(\s*\)\s*=>|function\s*\(\s*\))\s*\{\s*(?:[A-Za-z_$][\w$]*\s*(?:\+\+|--)\s*;?\s*)+\}\s*\)/gi,k=/addEventListener\(\s*['"](?:click|keydown|keyup|input|change|pointerup|touchend)['"]/i,R=/(?:disable|turn off|switch off|stop|pause|deactivate|opt.?out)[^.]{0,40}(?:motion|shake|tilt|orientation|sensor|gyro|accelerometer)|(?:motion|shake|tilt|orientation|sensor)[^.]{0,40}(?:disable|turn off|switch off|opt.?out)/i;function _(){let T=document.querySelectorAll('label, button, [role="button"], [role="switch"], input[type="button"], input[type="checkbox"]');for(let v of Array.from(T)){let E=(v.textContent||"")+" "+(v.getAttribute("aria-label")||"")+" "+(v.getAttribute("value")||"");if(R.test(E))return true}return false}function w(T){return !A.test(T.replace(x,""))||k.test(T)?true:_()}let S=document.querySelectorAll("script:not([src]):not([data-wa-injected])");for(let T of S){let v=T.textContent||"";if(A.test(v)&&!w(v)){let E=[],I=T;for(;I&&I!==document.body&&I!==document.documentElement;){let G=I.parentElement,N=I.tagName.toLowerCase(),U=G?Array.from(G.children).filter(Z=>Z.tagName===I.tagName):[],Y=U.indexOf(I)+1;E.unshift(Y>1||U.length>1?N+":nth-of-type("+Y+")":N),I=G;}let H=I===document.body?"body":I===document.documentElement?"html":"",V=(H?H+" > ":"")+E.join(" > ");l.push({selector:V||"script",attribute:"data-motion-actuation",currentValue:"Uses device motion/orientation API",issueType:"motion_actuation",wcag:"2.5.4",context:"Page uses device motion/orientation. Any functionality operated by device motion must also be available via UI controls, and motion actuation must be disableable.",needsAI:true});break}}let y=document.querySelectorAll("form"),C='input:not([type="hidden"]):not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="image"]), select, textarea',F=/\bcc-|card.?(?:number|num|no\b)|cardnumber|\bcvv|\bcvc|\bcsc\b|security.?code|\bexpir|\biban\b|routing|account.?(?:number|no\b)|sort.?code|\bbilling\b|transaction-(?:amount|currency)/i,P=/card|payment/i,M=/\b(?:pay|buy|purchase|donate|subscribe and pay|place (?:your |my )?order|complete (?:order|purchase|payment)|confirm (?:order|purchase|payment)|check ?out)\b/i,q=/\b(?:delete|remove|close|deactivate|cancel|terminate)\b[^.]{0,30}\b(?:account|profile|subscription|membership|data|records?)\b/i,B=/\b(?:e-?)?sign\b(?![\s\u00a0-]*(?:up|in|on|out)\b)|\bagree and (?:submit|continue|sign)\b/i,j=/\b(?:save|update|change)\b/i,X=/e-?mail|name|phone|tel\b|zip|postal|company|organi[sz]ation|country/i;for(let T of y){let v=Array.from(T.querySelectorAll(C)),E=He=>[He.getAttribute("name"),He.getAttribute("id"),He.getAttribute("autocomplete"),He.getAttribute("placeholder"),He.getAttribute("aria-label")].join(" "),I=Array.from(T.querySelectorAll('button, input[type="submit"], input[type="image"]')).filter(He=>He.tagName!=="BUTTON"||!He.getAttribute("type")||(He.getAttribute("type")||"").toLowerCase()==="submit").map(He=>(He.getAttribute("value")||"")+" "+(He.textContent||"")+" "+(He.getAttribute("aria-label")||"")).join(" . "),H=v.some(He=>F.test(E(He)))||Array.from(T.querySelectorAll("iframe")).some(He=>P.test((He.getAttribute("title")||"")+" "+(He.getAttribute("name")||""))),V=v.some(He=>/signature/i.test(E(He))),G=H||M.test(I),N=q.test(I),U=V||B.test(I),Y=v.length>0&&v.some(He=>(He.getAttribute("type")||"").toLowerCase()==="email"||/e-?mail/i.test(E(He)))&&v.every(He=>{let Lt=He.tagName.toLowerCase()==="input"?(He.getAttribute("type")||"text").toLowerCase():He.tagName.toLowerCase();return Lt==="email"||Lt==="checkbox"||Lt==="tel"?true:Lt==="text"||Lt==="search"?X.test(E(He)+" "+(He.closest("label")?.textContent||"")):false}),Z=(T.textContent||"").toLowerCase(),z=/payment|credit card|billing|purchase|\border\b|checkout|bank|account number/i.test(Z),ie=/\bagree|terms|contract|binding|signature|consent|waiver/i.test(Z),se=/delete.*account|remove.*data|cancel.*account/i.test(Z),fe=G||N||U,me=Y&&(j.test(I)||se),Pe=!fe&&(!Y&&(z||ie||se)||me);if(!fe&&!Pe)continue;let ve=!!T.querySelector('[type="checkbox"][required], [class*="confirm"], [id*="confirm"], [name*="confirm"]'),Se=!!T.querySelector('[class*="review"], [class*="summary"], [id*="review"]');if(ve||Se)continue;let ht=typeof uniqueSel=="function"?uniqueSel(T):"form",Dt=fe?G?"financial":N?"data-deletion":"legal":me?se?"data-deletion":"data-modification":z?"financial":ie?"legal":"data-deletion";l.push({selector:ht,attribute:"data-error-prevention",currentValue:Dt,issueType:"error_prevention_missing",wcag:"3.3.4",context:`${Dt.charAt(0).toUpperCase()+Dt.slice(1)} form lacks a confirmation/review step. For ${Dt} transactions, provide: (1) a review step before submission, (2) ability to check/correct input, or (3) ability to reverse the submission.`,needsAI:true,...Pe?{needsReview:true,reviewReason:me&&se?"form text is about deleting an account or data and its submit is generic \u2014 confirm whether submitting it deletes stored user data":me?"form saves contact/account details \u2014 confirm whether submitting it changes stored user data that cannot be reviewed or reversed":`form text mentions ${Dt} topics but its controls show no ${Dt} transaction (no payment fields, pay/order/delete submit, or signature) \u2014 confirm whether submitting it commits the user`}:{}});}return l},kh={name:"timingAndInput",async detect(l){return l.evaluate(XL)}};var KL=()=>{let l=[],c=document.querySelectorAll('nav, [role="navigation"]');for(let p of c){if(!p.offsetParent||p.closest('footer, aside, [role="contentinfo"], [role="complementary"]')||p.parentElement?.closest('nav, [role="navigation"]'))continue;let b=p.getBoundingClientRect();if(b.top<=window.innerHeight)continue;let A=typeof uniqueSel=="function"?uniqueSel(p):"nav";l.push({selector:A,attribute:"data-nav-position",currentValue:`top: ${Math.round(b.top)}px`,issueType:"inconsistent_navigation",wcag:"3.2.3",context:"Primary navigation appears below the visible viewport on this page. WCAG 3.2.3 (Consistent Navigation) is a cross-page criterion and cannot be confirmed from a single page \u2014 manually verify this navigation appears in the same relative order across pages that share this template.",needsAI:true,needsReview:true,reviewReason:"Consistent Navigation (3.2.3) is a cross-page criterion; single-page position alone cannot confirm a violation."});}let g=document.querySelectorAll('[class*="blink" i], [class*="flash" i], [class*="strobe" i], blink, marquee');for(let p of g){if(!p.offsetParent)continue;let b=p.getBoundingClientRect();if(b.width<1||b.height<1||!(p.textContent||"").trim()&&!p.querySelector("img, svg, video, canvas, picture")&&getComputedStyle(p).backgroundImage==="none")continue;let A=typeof uniqueSel=="function"?uniqueSel(p):p.tagName.toLowerCase();l.push({selector:A,attribute:"data-flashing",currentValue:p.tagName.toLowerCase(),issueType:"flashing_content",wcag:"2.3.1",context:"Element may produce flashing content. Content must not flash more than 3 times per second. Remove blinking/flashing effects or ensure they are below the threshold.",needsAI:true});}let m=document.querySelectorAll('img[src*=".gif"]');for(let p of m){if(!p.offsetParent||p.width<25||p.height<25)continue;let b=p.getBoundingClientRect();if(b.width>100&&b.height>100){let A=typeof uniqueSel=="function"?uniqueSel(p):"img";l.push({selector:A,attribute:"data-animated-gif",currentValue:(p.src||"").split("/").pop()?.slice(0,40)||"",issueType:"animated_gif_no_pause",wcag:"2.2.2",context:"Animated GIF detected. If this GIF is animated and loops continuously, provide a pause mechanism. Also verify it does not flash more than 3 times per second (WCAG 2.3.1).",needsAI:true});}}return l},Ch={name:"navigationAndWayfinding",async detect(l){return l.evaluate(KL)}};var Th={name:"flashDetection",async detect(l){let c=[];if(!l.screenshot)return c;let m=await l.evaluate(()=>{let _=document.documentElement.style.getPropertyValue("--wa-animations-frozen")==="1";if(_){let w=document.querySelectorAll("*");for(let S of w)S.style.removeProperty("animation-play-state"),S.style.removeProperty("transition");}return _}),p=8,b=120,A=9,x=3,k=[];for(let R=0;R<p;R++){let _=await l.evaluate(w=>{let S=window.innerWidth,y=window.innerHeight,C=3,F=3,P=[];for(let M=0;M<F;M++)for(let q=0;q<C;q++){let B=Math.floor((q+.5)*(S/C)),j=Math.floor((M+.5)*(y/F)),X=document.elementFromPoint(B,j);if(!X){P.push(0);continue}let v=getComputedStyle(X).backgroundColor||"rgba(0,0,0,0)",E=typeof parseCssColor=="function"?parseCssColor(v):null;if(!E){P.push(0);continue}let I=.2126*E[0]+.7152*E[1]+.0722*E[2];P.push(I);}return P},A);k.push(_),R<p-1&&await new Promise(w=>setTimeout(w,b));}m&&await l.evaluate(()=>{let R=document.querySelectorAll("*");for(let _ of R)_.style.setProperty("animation-play-state","paused","important"),_.style.setProperty("transition","none","important");});for(let R=0;R<A;R++){let _=0,w=k[0][R],S=null;for(let F=1;F<p;F++){let P=k[F][R];if(Math.abs(P-w)>25){let q=P>w?"up":"down";S&&q!==S&&_++,S=q;}w=P;}let y=p*b/1e3,C=_/y;if(C>=x){let F=R%3,P=Math.floor(R/3);c.push({selector:"body",attribute:"data-flash-detected",currentValue:`${C.toFixed(1)} flashes/sec in region (${F},${P})`,issueType:"flashing_content",wcag:"2.3.1",context:`Content flashes ${C.toFixed(1)} times/second in screen region (row ${P}, col ${F}). WCAG requires no more than 3 flashes per second. This can trigger seizures in users with photosensitive epilepsy.`,needsAI:false,fixValue:"Remove or reduce flashing to below 3 per second, or ensure the flashing area is below the 21,824 sq pixel threshold"});}}return c}};var Rh={name:"reducedMotion",async detect(l){let c=[],g=await l.evaluate(()=>{let m=false,p=false;for(let A of document.styleSheets)try{for(let x of A.cssRules){let k=x.cssText||"";/animation|transition|@keyframes/i.test(k)&&!/prefers-reduced-motion/.test(k)&&(m=!0),x instanceof CSSMediaRule&&/prefers-reduced-motion/i.test(x.conditionText||x.media?.mediaText||"")&&(p=!0);}}catch{}let b=document.querySelectorAll('[class*="animate"], [class*="slide"], [class*="fade"], [class*="bounce"], [class*="spin"], [class*="pulse"]');return b.length>0&&(m=true),{hasAnimations:m,hasReducedMotionQuery:p,animatedCount:b.length}});return g.hasAnimations&&!g.hasReducedMotionQuery&&c.push({selector:"html",attribute:"data-reduced-motion",currentValue:`${g.animatedCount} animated elements, no @media (prefers-reduced-motion) query`,issueType:"motion_without_reduced_motion",wcag:"2.3.3",context:'Page has animations/transitions but no @media (prefers-reduced-motion: reduce) query. Users who set "Reduce motion" in their OS settings will still see all animations. Add: @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; } }',needsAI:false,fixValue:"@media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; } }"}),c}};var YL=()=>{let l="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],m=/^(0+(\.0+)?|false|off|no|none|disabled?)$/i,p=v=>v!==null&&!m.test(v.trim()),b=v=>{let E=parseFloat((v||"").trim());return Number.isFinite(E)&&E>0},A=/^(carousel|slider|slideshow|slides|slick|swiper|splide|flickity|owl|flexslider|glide|layerslider|ls|rotator|gallery)$/i,x=v=>v.split(/[\s_-]+/).filter(Boolean),k=v=>{if((v.getAttribute("aria-roledescription")||"").trim().toLowerCase()==="carousel")return true;let E=typeof v.className=="string"?v.className:v.getAttribute("class")||"";return x(E).some(I=>A.test(I))},R=/^(autoplay|autoPlay|auto_play|autoStart|autostart|auto_start)$/,_=v=>{let E=v.trim();if(!E.startsWith("{"))return "";let I;try{I=JSON.parse(E);}catch{try{I=JSON.parse(E.replace(/'/g,'"'));}catch{return ""}}if(!I||typeof I!="object")return "";for(let H of Object.keys(I)){if(!R.test(H))continue;let V=I[H];if(V===true||typeof V=="number"&&V>0||typeof V=="string"&&p(V)&&V.trim()!==""||V&&typeof V=="object")return `${H}: ${JSON.stringify(V).slice(0,40)}`}return ""},w=v=>{for(let H of ["data-autoplay","data-auto","data-autostart","data-bs-autoplay","data-auto-play"]){if(!v.hasAttribute(H))continue;let V=v.getAttribute(H)||"";if((V.trim()===""||p(V))&&(k(v)||j(v)>=2))return {attr:H,value:V}}let E=["data-interval","data-bs-interval"].some(H=>v.hasAttribute(H)&&m.test((v.getAttribute(H)||"").trim()));for(let H of ["data-ride","data-bs-ride"])if((v.getAttribute(H)||"").trim().toLowerCase()==="carousel"&&!E)return {attr:H,value:"carousel"};for(let H of ["data-interval","data-bs-interval"]){let V=v.getAttribute(H);if(b(V)&&k(v))return {attr:H,value:V||""}}let I=k(v);for(let H of Array.from(v.attributes)){if(!H.name.startsWith("data-")||!I&&!x(H.name.slice(5)).some(G=>A.test(G)))continue;let V=_(H.value);if(V)return {attr:H.name,value:V}}if((v.getAttribute("aria-roledescription")||"").trim().toLowerCase()==="carousel"){let H=/autoplay["']?\s*[:=]\s*["']?(false|0|off|no)\b/i;for(let V of Array.from(v.attributes)){if(/(^|-)autoplay$/i.test(V.name)&&(V.value.trim()===""||p(V.value)))return {attr:V.name,value:V.value.slice(0,60)};if(/autoplay/i.test(V.value)&&!H.test(V.value))return {attr:V.name,value:V.value.slice(0,60)}}}return null},S=/^(pause|stop|play|playpause|resume)$/i,y=/\b(pause|stop|play|resume)\b/i,C=v=>{let E=[v.getAttribute("aria-label")||"",v.getAttribute("title")||"",v.getAttribute("value")||"",(v.textContent||"").trim().slice(0,80)],I=(v.getAttribute("aria-labelledby")||"").trim();if(I)for(let H of I.split(/\s+/))E.push(document.getElementById(H)?.textContent||"");for(let H of Array.from(v.querySelectorAll("img[alt]")))E.push(H.getAttribute("alt")||"");return E.join(" ")},F=v=>{let E=v.getAttribute("class")||"";return x(E).some(I=>S.test(I))?true:v.matches('a, button, input, [role="button"], [role="switch"], [role="checkbox"], [tabindex]')?y.test(C(v)):false},P=/^(section|article|main|nav|aside|header|footer|form|dialog)$/i,M=v=>k(v)||w(v)!==null||Array.from(v.querySelectorAll("*")).some(E=>k(E)||w(E)!==null),q=v=>{if(v.querySelector("[aria-pressed]"))return true;let E=[v];for(let V of Array.from(v.parentElement?.children||[]))V===v||P.test(V.tagName)||M(V)||E.push(V);let I=v.getAttribute("id"),H=V=>{let G=[...(V.getAttribute("aria-controls")||"").split(/\s+/),(V.getAttribute("data-bs-target")||V.getAttribute("data-target")||"").replace(/^#/,"")].filter(Boolean);return G.length>0&&!G.includes(I||"")};for(let V of E){if(V!==v&&F(V)&&!H(V))return true;for(let G of Array.from(V.querySelectorAll("*")))if(F(G)&&!H(G))return true}if(I){let V=typeof CSS<"u"&&CSS.escape?CSS.escape(I):I.replace(/["\\]/g,"\\$&");for(let G of Array.from(document.querySelectorAll(`[aria-controls~="${V}"], [data-target="#${V}"], [data-bs-target="#${V}"]`)))if(F(G))return true}return false},B=/^(slide|cell)$/i,j=v=>{let E=G=>x(G.getAttribute("class")||"").some(N=>B.test(N))&&!/(^|[\s_-])cloned?([\s_-]|$)/i.test(G.getAttribute("class")||""),I=Array.from(v.querySelectorAll("[class]")).filter(E),H=I.filter(G=>!I.some(N=>N!==G&&N.contains(G)));if(!H.length)return 0;let V=H.length;for(let G of H){let N=Array.from(G.parentElement?.children||[]).filter(U=>U.tagName===G.tagName&&!/(^|[\s_-])cloned?([\s_-]|$)/i.test(U.getAttribute("class")||""));V=Math.max(V,N.length);}return V},X=new Set,T=(v,E)=>{if(g.length>=10||X.has(v)||(X.add(v),v.closest(l))||v.closest('[aria-hidden="true"], [hidden], template, noscript')||typeof isVisible=="function"&&!isVisible(v)||j(v)===1||q(v))return;let I=typeof uniqueSel=="function"?uniqueSel(v):v.tagName.toLowerCase();g.push({selector:I,attribute:E.attr,currentValue:E.value.slice(0,100),issueType:"carousel_autoplay_no_pause",wcag:"2.2.2",context:`slider markup declares autoplay (${E.attr}="${E.value.slice(0,60)}") and no pause / stop control sits in or beside it`,message:"carousel starts automatically and has no pause or stop control",needsAI:false,manualFix:true,reviewReason:"add a visible pause / stop control for the slider (or turn autoplay off); no attribute write fixes this",outerHtml:v.cloneNode(false).outerHTML.slice(0,300)});};for(let v of Array.from(document.body?document.body.querySelectorAll("*"):[])){if(g.length>=10)break;if(!v.attributes.length)continue;if(v.hasAttribute("data-swiper-autoplay")&&b(v.getAttribute("data-swiper-autoplay"))){let I=v.closest('.swiper, .swiper-container, [class*="swiper"]:not(.swiper-slide):not(.swiper-wrapper)')||v.parentElement?.parentElement||v;T(I,{attr:"data-swiper-autoplay",value:v.getAttribute("data-swiper-autoplay")||""});continue}let E=w(v);E&&T(v,E);}return g},Fh={name:"carouselAutoplay",cap:10,async detect(l){return l.evaluate(YL)}};var Hh=[yh,ch,hh,Mg,th,eh,Vg,fh,Gg,bh,Ug,mh,Og,uh,rh,jg,oh,Kg,lh,nh,wh,xh,ih,Bg,Hg,ah,ph,vh,$g,gh,Ng,sh,Ah,_h,Dh,Eh,Sh,kh,Ch,Th,Rh,Fh],wP=[Pg,qg,zg,dh];function Vh(l,c,g){l?.push({tool:c,kind:"engine-failed",detail:`detector threw, its findings are absent: ${g?.message??String(g)}`});}async function $h(l,c,g,m){let p=c??[],b=[];try{let{detectPlatform:q}=await Promise.resolve().then(()=>(Ru(),Tu));b=await q(l);}catch{}try{let{UNIQUE_SELECTOR_JS:q,IS_VISIBLE_JS:B,ACCESSIBLE_NAME_JS:j,WIDGET_SKIP_JS:X,IS_HIDDEN_FROM_AT_JS:T,IS_TRACKING_PIXEL_JS:v,NEARBY_CONTEXT_JS:E}=await Promise.resolve().then(()=>(Iu(),Lh)),{ICON_LABELS_JS:I}=await Promise.resolve().then(()=>(Mh(),Ph)),{COLOR_MATH_JS:H}=await Promise.resolve().then(()=>(Nh(),Oh)),G=`if(typeof __name==='undefined'){var __name=function(t,v){return t};var __defProp=Object.defineProperty;}
434
+ `);return pe}}},incompleteFallbackMessage:"axe couldn't tell the reason. Time to break out the element inspector!"},rules:[{id:"accesskeys",impact:"serious",selector:"[accesskey]",excludeHidden:false,tags:["cat.keyboard","best-practice"],all:[],any:[],none:["accesskeys"]},{id:"area-alt",impact:"critical",selector:"map area[href]",excludeHidden:false,tags:["cat.text-alternatives","wcag2a","wcag244","wcag412","section508","section508.22.a","TTv5","TT6.a","EN-301-549","EN-9.2.4.4","EN-9.4.1.2","ACT","RGAAv4","RGAA-1.1.2"],actIds:["c487ae"],all:[],any:[{options:{attribute:"alt"},id:"non-empty-alt"},"aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-allowed-attr",impact:"critical",matches:"aria-allowed-attr-matches",tags:["cat.aria","wcag2a","wcag412","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-7.1.1"],actIds:["5c01ea"],all:[{options:{validTreeRowAttrs:["aria-posinset","aria-setsize","aria-expanded","aria-level"]},id:"aria-allowed-attr"},"aria-allowed-attr-elm"],any:[],none:["aria-unsupported-attr"]},{id:"aria-allowed-role",impact:"minor",excludeHidden:false,selector:"[role]",matches:"aria-allowed-role-matches",tags:["cat.aria","best-practice"],all:[],any:[{options:{allowImplicit:true,ignoredTags:[]},id:"aria-allowed-role"}],none:[]},{id:"aria-braille-equivalent",reviewOnFail:true,impact:"serious",selector:"[aria-brailleroledescription], [aria-braillelabel]",tags:["cat.aria","wcag2a","wcag412","EN-301-549","EN-9.4.1.2"],all:["braille-roledescription-equivalent","braille-label-equivalent"],any:[],none:[]},{id:"aria-command-name",impact:"serious",selector:'[role="link"], [role="button"], [role="menuitem"]',matches:"no-naming-method-matches",tags:["cat.aria","wcag2a","wcag412","TTv5","TT6.a","EN-301-549","EN-9.4.1.2","ACT","RGAAv4","RGAA-11.9.1"],actIds:["97a4e1"],all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-conditional-attr",impact:"serious",matches:"aria-allowed-attr-matches",tags:["cat.aria","wcag2a","wcag412","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-7.1.1"],actIds:["5c01ea"],all:[{options:{invalidTableRowAttrs:["aria-posinset","aria-setsize","aria-expanded","aria-level"]},id:"aria-conditional-attr"}],any:[],none:[]},{id:"aria-deprecated-role",impact:"minor",selector:"[role]",matches:"no-empty-role-matches",tags:["cat.aria","wcag2a","wcag412","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-7.1.1"],actIds:["674b10"],all:[],any:[],none:["deprecatedrole"]},{id:"aria-dialog-name",impact:"serious",selector:'[role="dialog"], [role="alertdialog"]',matches:"no-naming-method-matches",tags:["cat.aria","best-practice"],all:[],any:["aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-hidden-body",impact:"critical",selector:"body",excludeHidden:false,matches:"is-initiator-matches",tags:["cat.aria","wcag2a","wcag131","wcag412","EN-301-549","EN-9.1.3.1","EN-9.4.1.2","RGAAv4","RGAA-10.8.1"],all:[],any:["aria-hidden-body"],none:[]},{id:"aria-hidden-focus",impact:"serious",selector:'[aria-hidden="true"]',matches:"aria-hidden-focus-matches",excludeHidden:false,tags:["cat.name-role-value","wcag2a","wcag412","TTv5","TT6.a","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-10.8.1"],actIds:["6cfa84"],all:["focusable-modal-open","focusable-disabled","focusable-not-tabbable"],any:[],none:[]},{id:"aria-input-field-name",impact:"serious",selector:'[role="combobox"], [role="listbox"], [role="searchbox"], [role="slider"], [role="spinbutton"], [role="textbox"]',matches:"no-naming-method-matches",tags:["cat.aria","wcag2a","wcag412","TTv5","TT5.c","EN-301-549","EN-9.4.1.2","ACT","RGAAv4","RGAA-11.1.1"],actIds:["e086e5"],all:[],any:["aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:["no-implicit-explicit-label"]},{id:"aria-meter-name",impact:"serious",selector:'[role="meter"]',matches:"no-naming-method-matches",tags:["cat.aria","wcag2a","wcag111","EN-301-549","EN-9.1.1.1","RGAAv4","RGAA-11.1.1"],all:[],any:["aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-progressbar-name",impact:"serious",selector:'[role="progressbar"]',matches:"no-naming-method-matches",tags:["cat.aria","wcag2a","wcag111","EN-301-549","EN-9.1.1.1","RGAAv4","RGAA-11.1.1"],all:[],any:["aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-prohibited-attr",impact:"serious",matches:"aria-allowed-attr-matches",tags:["cat.aria","wcag2a","wcag412","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-7.1.1"],actIds:["5c01ea"],all:[],any:[],none:[{options:{elementsAllowedAriaLabel:["applet","input"]},id:"aria-prohibited-attr"}]},{id:"aria-required-attr",impact:"critical",selector:"[role]",tags:["cat.aria","wcag2a","wcag412","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-7.1.1"],actIds:["4e8ab6"],all:[],any:["aria-required-attr"],none:[]},{id:"aria-required-children",impact:"critical",selector:"[role]",matches:"aria-required-children-matches",tags:["cat.aria","wcag2a","wcag131","EN-301-549","EN-9.1.3.1","RGAAv4","RGAA-9.3.1"],actIds:["bc4a75","ff89c9"],all:[],any:[{options:{reviewEmpty:["doc-bibliography","doc-endnotes","grid","list","listbox","menu","menubar","table","tablist","tree","treegrid","rowgroup"]},id:"aria-required-children"}],none:[]},{id:"aria-required-parent",impact:"critical",selector:"[role]",matches:"aria-required-parent-matches",tags:["cat.aria","wcag2a","wcag131","EN-301-549","EN-9.1.3.1","RGAAv4","RGAA-9.3.1"],actIds:["ff89c9"],all:[],any:[{options:{ownGroupRoles:["listitem","treeitem"]},id:"aria-required-parent"}],none:[]},{id:"aria-roledescription",impact:"serious",selector:"[aria-roledescription]",tags:["cat.aria","wcag2a","wcag412","EN-301-549","EN-9.4.1.2","deprecated"],enabled:false,all:[],any:[{options:{supportedRoles:["button","img","checkbox","radio","combobox","menuitemcheckbox","menuitemradio"]},id:"aria-roledescription"}],none:[]},{id:"aria-roles",impact:"critical",selector:"[role]",matches:"no-empty-role-matches",tags:["cat.aria","wcag2a","wcag412","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-7.1.1"],actIds:["674b10"],all:[],any:[],none:["invalidrole","abstractrole","unsupportedrole"]},{id:"aria-text",impact:"serious",selector:"[role=text]",tags:["cat.aria","best-practice"],all:[],any:["no-focusable-content"],none:[]},{id:"aria-toggle-field-name",impact:"serious",selector:'[role="checkbox"], [role="menuitemcheckbox"], [role="menuitemradio"], [role="radio"], [role="switch"], [role="option"]',matches:"no-naming-method-matches",tags:["cat.aria","wcag2a","wcag412","TTv5","TT5.c","EN-301-549","EN-9.4.1.2","ACT","RGAAv4","RGAA-7.1.1"],actIds:["e086e5"],all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:["no-implicit-explicit-label"]},{id:"aria-tooltip-name",impact:"serious",selector:'[role="tooltip"]',matches:"no-naming-method-matches",tags:["cat.aria","wcag2a","wcag412","EN-301-549","EN-9.4.1.2"],all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-treeitem-name",impact:"serious",selector:'[role="treeitem"]',matches:"no-naming-method-matches",tags:["cat.aria","best-practice"],all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"aria-valid-attr-value",impact:"critical",matches:"aria-has-attr-matches",tags:["cat.aria","wcag2a","wcag412","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-7.1.1"],actIds:["6a7281"],all:[{options:[],id:"aria-valid-attr-value"},"aria-errormessage","aria-level"],any:[],none:[]},{id:"aria-valid-attr",impact:"critical",matches:"aria-has-attr-matches",tags:["cat.aria","wcag2a","wcag412","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-7.1.1"],actIds:["5f99a7"],all:[],any:[{options:[],id:"aria-valid-attr"}],none:[]},{id:"audio-caption",impact:"critical",selector:"audio",enabled:false,excludeHidden:false,tags:["cat.time-and-media","wcag2a","wcag121","EN-301-549","EN-9.1.2.1","section508","section508.22.a","deprecated"],actIds:["2eb176","afb423"],all:[],any:[],none:["caption"]},{id:"autocomplete-valid",impact:"serious",matches:"autocomplete-matches",tags:["cat.forms","wcag21aa","wcag135","EN-301-549","EN-9.1.3.5","ACT","RGAAv4","RGAA-11.13.1"],actIds:["73f2c2"],all:[{options:{stateTerms:["none","false","true","disabled","enabled","undefined","null","xoff","xon"],ignoredValues:["text","pronouns","gender","message","content"]},id:"autocomplete-valid"}],any:[],none:[]},{id:"avoid-inline-spacing",impact:"serious",selector:"[style]",matches:"is-visible-on-screen-matches",tags:["cat.structure","wcag21aa","wcag1412","EN-301-549","EN-9.1.4.12","ACT"],actIds:["24afc2","9e45ec","78fd32"],all:[{options:{cssProperty:"letter-spacing",minValue:.12},id:"important-letter-spacing"},{options:{cssProperty:"word-spacing",minValue:.16},id:"important-word-spacing"},{options:{multiLineOnly:true,cssProperty:"line-height",minValue:1.5,normalValue:1},id:"important-line-height"}],any:[],none:[]},{id:"blink",impact:"serious",selector:"blink",excludeHidden:false,tags:["cat.time-and-media","wcag2a","wcag222","section508","section508.22.j","TTv5","TT2.b","EN-301-549","EN-9.2.2.2","RGAAv4","RGAA-13.8.1"],all:[],any:[],none:["is-on-screen"]},{id:"button-name",impact:"critical",selector:"button",matches:"no-explicit-name-required-matches",tags:["cat.name-role-value","wcag2a","wcag412","section508","section508.22.a","TTv5","TT6.a","EN-301-549","EN-9.4.1.2","ACT","RGAAv4","RGAA-11.9.1"],actIds:["97a4e1","m6b1q3"],all:[],any:["button-has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},"implicit-label","explicit-label","presentational-role"],none:[]},{id:"bypass",impact:"serious",selector:"html:not(html *)",pageLevel:true,matches:"bypass-matches",reviewOnFail:true,tags:["cat.keyboard","wcag2a","wcag241","section508","section508.22.o","TTv5","TT9.a","EN-301-549","EN-9.2.4.1","RGAAv4","RGAA-12.7.1"],actIds:["cf77f2","047fe0","b40fd1","3e12e1","ye5d6e"],all:[],any:["internal-link-present",{options:{selector:":is(h1, h2, h3, h4, h5, h6):not([role]), [role=heading]"},id:"header-present"},{options:{selector:"main, [role=main]"},id:"landmark"}],none:[]},{id:"color-contrast-enhanced",impact:"serious",matches:"color-contrast-matches",excludeHidden:false,enabled:false,tags:["cat.color","wcag2aaa","wcag146","ACT"],actIds:["09o5cg"],all:[],any:[{options:{ignoreUnicode:true,ignoreLength:false,ignorePseudo:false,boldValue:700,boldTextPt:14,largeTextPt:18,contrastRatio:{normal:{expected:7,minThreshold:4.5},large:{expected:4.5,minThreshold:3}},pseudoSizeThreshold:.25,shadowOutlineEmMax:.1,textStrokeEmMin:.03},id:"color-contrast-enhanced"}],none:[]},{id:"color-contrast",impact:"serious",matches:"color-contrast-matches",excludeHidden:false,tags:["cat.color","wcag2aa","wcag143","TTv5","TT13.c","EN-301-549","EN-9.1.4.3","ACT","RGAAv4","RGAA-3.2.1"],actIds:["afw4f7","09o5cg"],all:[],any:[{options:{ignoreUnicode:true,ignoreLength:false,ignorePseudo:false,boldValue:700,boldTextPt:14,largeTextPt:18,contrastRatio:{normal:{expected:4.5},large:{expected:3}},pseudoSizeThreshold:.25,shadowOutlineEmMax:.2,textStrokeEmMin:.03},id:"color-contrast"}],none:[]},{id:"css-orientation-lock",impact:"serious",selector:"html:not(html *)",tags:["cat.structure","wcag134","wcag21aa","EN-301-549","EN-9.1.3.4","RGAAv4","RGAA-13.9.1","experimental"],actIds:["b33eff"],all:[{options:{degreeThreshold:2},id:"css-orientation-lock"}],any:[],none:[],preload:true},{id:"definition-list",impact:"serious",selector:"dl",matches:"no-role-matches",tags:["cat.structure","wcag2a","wcag131","EN-301-549","EN-9.1.3.1","RGAAv4","RGAA-9.3.3"],all:[],any:[],none:["structured-dlitems",{options:{validRoles:["definition","term","listitem"],validNodeNames:["dt","dd"],divGroups:true},id:"only-dlitems"}]},{id:"dlitem",impact:"serious",selector:"dd, dt",matches:"no-role-matches",tags:["cat.structure","wcag2a","wcag131","EN-301-549","EN-9.1.3.1","RGAAv4","RGAA-9.3.3"],all:[],any:["dlitem"],none:[]},{id:"document-title",impact:"serious",selector:"html:not(html *)",matches:"is-initiator-matches",tags:["cat.text-alternatives","wcag2a","wcag242","TTv5","TT12.a","EN-301-549","EN-9.2.4.2","ACT","RGAAv4","RGAA-8.5.1"],actIds:["2779a5"],all:[],any:["doc-has-title"],none:[]},{id:"duplicate-id-active",impact:"serious",selector:"[id]",matches:"duplicate-id-active-matches",excludeHidden:false,tags:["cat.parsing","wcag2a-obsolete","wcag411","deprecated"],enabled:false,actIds:["3ea0c8"],all:[],any:["duplicate-id-active"],none:[]},{id:"duplicate-id-aria",impact:"critical",selector:"[id]",matches:"duplicate-id-aria-matches",excludeHidden:false,tags:["cat.parsing","wcag2a","wcag412","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-8.2.1"],reviewOnFail:true,actIds:["3ea0c8"],all:[],any:["duplicate-id-aria"],none:[]},{id:"duplicate-id",impact:"minor",selector:"[id]",matches:"duplicate-id-misc-matches",excludeHidden:false,tags:["cat.parsing","wcag2a-obsolete","wcag411","deprecated"],enabled:false,actIds:["3ea0c8"],all:[],any:["duplicate-id"],none:[]},{id:"empty-heading",impact:"minor",selector:'h1, h2, h3, h4, h5, h6, [role="heading"]',matches:"heading-matches",tags:["cat.name-role-value","best-practice"],actIds:["ffd0e9"],all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"empty-table-header",impact:"minor",selector:'th:not([role]), [role="rowheader"], [role="columnheader"]',tags:["cat.name-role-value","best-practice"],all:[],any:["has-visible-text"],none:[]},{id:"focus-order-semantics",impact:"minor",selector:"div, h1, h2, h3, h4, h5, h6, [role=heading], p, span",matches:"inserted-into-focus-order-matches",tags:["cat.keyboard","best-practice","RGAAv4","RGAA-12.8.1","experimental"],all:[],any:[{options:[],id:"has-widget-role"},{options:{roles:["tooltip"]},id:"valid-scrollable-semantics"}],none:[]},{id:"form-field-multiple-labels",impact:"moderate",selector:"input, select, textarea",matches:"label-matches",tags:["cat.forms","wcag2a","wcag332","TTv5","TT5.c","EN-301-549","EN-9.3.3.2","RGAAv4","RGAA-11.2.1"],all:[],any:[],none:["multiple-label"]},{id:"frame-focusable-content",impact:"serious",selector:"html:not(html *)",matches:"frame-focusable-content-matches",tags:["cat.keyboard","wcag2a","wcag211","TTv5","TT4.a","EN-301-549","EN-9.2.1.1","RGAAv4","RGAA-7.3.2"],actIds:["akn7bn"],all:[],any:["frame-focusable-content"],none:[]},{id:"frame-tested",impact:"critical",selector:"html:not(html *), frame, iframe",tags:["cat.structure","best-practice","review-item"],all:[{options:{isViolation:false},id:"frame-tested"}],any:[],none:[]},{id:"frame-title-unique",impact:"serious",selector:"frame[title], iframe[title]",matches:"frame-title-has-text-matches",tags:["cat.text-alternatives","wcag2a","wcag412","TTv5","TT12.d","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-2.2.1"],actIds:["4b1c6c"],all:[],any:[],none:["unique-frame-title"],reviewOnFail:true},{id:"frame-title",impact:"serious",selector:"frame, iframe",matches:"no-negative-tabindex-matches",tags:["cat.text-alternatives","wcag2a","wcag412","section508","section508.22.i","TTv5","TT12.d","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-2.1.1"],actIds:["cae760"],all:[],any:[{options:{attribute:"title"},id:"non-empty-title"},"aria-label","aria-labelledby","presentational-role"],none:[]},{id:"heading-order",impact:"moderate",selector:"h1, h2, h3, h4, h5, h6, [role=heading]",matches:"heading-matches",tags:["cat.semantics","best-practice"],all:[],any:["heading-order"],none:[]},{id:"hidden-content",impact:"minor",selector:"*",excludeHidden:false,tags:["cat.structure","best-practice","experimental","review-item"],all:[],any:["hidden-content"],none:[]},{id:"html-has-lang",impact:"serious",selector:"html:not(html *)",matches:"is-initiator-matches",tags:["cat.language","wcag2a","wcag311","TTv5","TT11.a","EN-301-549","EN-9.3.1.1","ACT","RGAAv4","RGAA-8.3.1"],actIds:["b5c3f8"],all:[],any:[{options:{attributes:["lang","xml:lang"]},id:"has-lang"}],none:[]},{id:"html-lang-valid",impact:"serious",selector:'html[lang]:not([lang=""]):not(html *), html[xml\\:lang]:not([xml\\:lang=""]):not(html *)',tags:["cat.language","wcag2a","wcag311","TTv5","TT11.a","EN-301-549","EN-9.3.1.1","ACT","RGAAv4","RGAA-8.4.1"],actIds:["bf051a"],all:[],any:[],none:[{options:{attributes:["lang","xml:lang"]},id:"valid-lang"}]},{id:"html-xml-lang-mismatch",impact:"moderate",selector:"html[lang][xml\\:lang]:not(html *)",matches:"xml-lang-mismatch-matches",tags:["cat.language","wcag2a","wcag311","EN-301-549","EN-9.3.1.1","ACT","RGAAv4","RGAA-8.3.1"],actIds:["5b7ae0"],all:["xml-lang-mismatch"],any:[],none:[]},{id:"identical-links-same-purpose",impact:"minor",selector:'a[href], area[href], [role="link"]',excludeHidden:false,enabled:false,matches:"identical-links-same-purpose-matches",tags:["cat.semantics","wcag2aaa","wcag249"],actIds:["b20e66"],all:["identical-links-same-purpose"],any:[],none:[]},{id:"image-alt",impact:"critical",selector:"img",matches:"no-explicit-name-required-matches",tags:["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a","TTv5","TT7.a","TT7.b","EN-301-549","EN-9.1.1.1","ACT","RGAAv4","RGAA-1.1.1"],actIds:["23a2a8"],all:[],any:["has-alt","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},"presentational-role"],none:["alt-space-value"]},{id:"image-redundant-alt",impact:"minor",selector:"img",tags:["cat.text-alternatives","best-practice"],all:[],any:[],none:[{options:{parentSelector:"button, [role=button], a[href], p, li, td, th"},id:"duplicate-img-label"}]},{id:"input-button-name",impact:"critical",selector:'input[type="button"], input[type="submit"], input[type="reset"]',matches:"no-explicit-name-required-matches",tags:["cat.name-role-value","wcag2a","wcag412","section508","section508.22.a","TTv5","TT5.c","EN-301-549","EN-9.4.1.2","ACT","RGAAv4","RGAA-11.9.1"],actIds:["97a4e1"],all:[],any:["non-empty-if-present",{options:{attribute:"value"},id:"non-empty-value"},"aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},"implicit-label","explicit-label","presentational-role"],none:[]},{id:"input-image-alt",impact:"critical",selector:'input[type="image"]',matches:"no-explicit-name-required-matches",tags:["cat.text-alternatives","wcag2a","wcag111","wcag412","section508","section508.22.a","TTv5","TT7.a","EN-301-549","EN-9.1.1.1","EN-9.4.1.2","ACT","RGAAv4","RGAA-1.1.3"],actIds:["59796f"],all:[],any:[{options:{attribute:"alt"},id:"non-empty-alt"},"aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},"implicit-label","explicit-label"],none:[]},{id:"label-content-name-mismatch",impact:"serious",matches:"label-content-name-mismatch-matches",tags:["cat.semantics","wcag21a","wcag253","EN-301-549","EN-9.2.5.3","RGAAv4","RGAA-6.1.5","experimental"],actIds:["2ee8b8"],all:[],any:[{options:{pixelThreshold:.1,occurrenceThreshold:3},id:"label-content-name-mismatch"}],none:[]},{id:"label-title-only",impact:"serious",selector:"input, select, textarea",matches:"label-matches",tags:["cat.forms","best-practice"],all:[],any:[],none:["title-only"]},{id:"label",impact:"critical",selector:"input, textarea",matches:"label-matches",tags:["cat.forms","wcag2a","wcag412","section508","section508.22.n","TTv5","TT5.c","EN-301-549","EN-9.4.1.2","ACT","RGAAv4","RGAA-11.1.1"],actIds:["e086e5"],all:[],any:["implicit-label","explicit-label","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},{options:{attribute:"placeholder"},id:"non-empty-placeholder"},"presentational-role"],none:["hidden-explicit-label"]},{id:"landmark-banner-is-top-level",impact:"moderate",selector:"header:not([role]), [role=banner]",matches:"landmark-has-body-context-matches",tags:["cat.semantics","best-practice"],all:[],any:["landmark-is-top-level"],none:[]},{id:"landmark-complementary-is-top-level",impact:"moderate",selector:"aside:not([role]), [role=complementary]",tags:["cat.semantics","best-practice"],all:[],any:["landmark-is-top-level"],none:[]},{id:"landmark-contentinfo-is-top-level",impact:"moderate",selector:"footer:not([role]), [role=contentinfo]",matches:"landmark-has-body-context-matches",tags:["cat.semantics","best-practice"],all:[],any:["landmark-is-top-level"],none:[]},{id:"landmark-main-is-top-level",impact:"moderate",selector:"main:not([role]), [role=main]",tags:["cat.semantics","best-practice"],all:[],any:["landmark-is-top-level"],none:[]},{id:"landmark-no-duplicate-banner",impact:"moderate",selector:"header:not([role]), [role=banner]",tags:["cat.semantics","best-practice"],all:[],any:[{options:{selector:"header:not([role]), [role=banner]",role:"banner"},id:"page-no-duplicate-banner"}],none:[]},{id:"landmark-no-duplicate-contentinfo",impact:"moderate",selector:"footer:not([role]), [role=contentinfo]",tags:["cat.semantics","best-practice"],all:[],any:[{options:{selector:"footer:not([role]), [role=contentinfo]",role:"contentinfo"},id:"page-no-duplicate-contentinfo"}],none:[]},{id:"landmark-no-duplicate-main",impact:"moderate",selector:"main:not([role]), [role=main]",tags:["cat.semantics","best-practice"],all:[],any:[{options:{selector:"main:not([role]), [role='main']"},id:"page-no-duplicate-main"}],none:[]},{id:"landmark-one-main",impact:"moderate",selector:"html:not(html *)",tags:["cat.semantics","best-practice"],all:[{options:{selector:"main:not([role]), [role='main']",passForModal:true},id:"page-has-main"}],any:[],none:[]},{id:"landmark-unique",impact:"moderate",selector:"[role=banner], [role=complementary], [role=contentinfo], [role=main], [role=navigation], [role=region], [role=search], [role=form], form, footer, header, aside, main, nav, section",tags:["cat.semantics","best-practice"],matches:"landmark-unique-matches",all:[],any:["landmark-is-unique"],none:[]},{id:"link-in-text-block",impact:"serious",selector:"a[href], [role=link]",matches:"link-in-text-block-matches",excludeHidden:false,tags:["cat.color","wcag2a","wcag141","TTv5","TT13.a","EN-301-549","EN-9.1.4.1","RGAAv4","RGAA-10.6.1"],all:[],any:[{options:{requiredContrastRatio:3,allowSameColor:true},id:"link-in-text-block"},"link-in-text-block-style"],none:[]},{id:"link-name",impact:"serious",selector:"a[href]",tags:["cat.name-role-value","wcag2a","wcag244","wcag412","section508","section508.22.a","TTv5","TT6.a","EN-301-549","EN-9.2.4.4","EN-9.4.1.2","ACT","RGAAv4","RGAA-6.2.1"],actIds:["c487ae"],all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:["focusable-no-name"]},{id:"list",impact:"serious",selector:"ul, ol",matches:"no-role-matches",tags:["cat.structure","wcag2a","wcag131","EN-301-549","EN-9.1.3.1","RGAAv4","RGAA-9.3.1"],all:[],any:[],none:[{options:{validRoles:["listitem"],validNodeNames:["li"]},id:"only-listitems"}]},{id:"listitem",impact:"serious",selector:"li",matches:"no-role-matches",tags:["cat.structure","wcag2a","wcag131","EN-301-549","EN-9.1.3.1","RGAAv4","RGAA-9.3.1"],all:[],any:["listitem"],none:[]},{id:"marquee",impact:"serious",selector:"marquee",excludeHidden:false,tags:["cat.parsing","wcag2a","wcag222","TTv5","TT2.b","EN-301-549","EN-9.2.2.2","RGAAv4","RGAA-13.8.1"],all:[],any:[],none:["is-on-screen"]},{id:"meta-refresh-no-exceptions",impact:"minor",selector:'meta[http-equiv="refresh"][content]',excludeHidden:false,enabled:false,tags:["cat.time-and-media","wcag2aaa","wcag224","wcag325"],actIds:["bisz58"],all:[],any:[{options:{minDelay:72e3,maxDelay:false},id:"meta-refresh-no-exceptions"}],none:[]},{id:"meta-refresh",impact:"critical",selector:'meta[http-equiv="refresh"][content]',excludeHidden:false,tags:["cat.time-and-media","wcag2a","wcag221","TTv5","TT8.a","EN-301-549","EN-9.2.2.1","RGAAv4","RGAA-13.1.2"],actIds:["bc659a","bisz58"],all:[],any:[{options:{minDelay:0,maxDelay:72e3},id:"meta-refresh"}],none:[]},{id:"meta-viewport-large",impact:"minor",selector:'meta[name="viewport"]',matches:"is-initiator-matches",excludeHidden:false,tags:["cat.sensory-and-visual-cues","best-practice"],all:[],any:[{options:{scaleMinimum:5,lowerBound:2},id:"meta-viewport-large"}],none:[]},{id:"meta-viewport",impact:"moderate",selector:'meta[name="viewport"]',matches:"is-initiator-matches",excludeHidden:false,tags:["cat.sensory-and-visual-cues","wcag2aa","wcag144","EN-301-549","EN-9.1.4.4","ACT","RGAAv4","RGAA-10.4.2"],actIds:["b4f0c3"],all:[],any:[{options:{scaleMinimum:2},id:"meta-viewport"}],none:[]},{id:"nested-interactive",impact:"serious",matches:"nested-interactive-matches",tags:["cat.keyboard","wcag2a","wcag412","TTv5","TT6.a","EN-301-549","EN-9.4.1.2","RGAAv4","RGAA-7.1.1"],actIds:["307n5z"],all:[],any:["no-focusable-content"],none:[]},{id:"no-autoplay-audio",impact:"moderate",excludeHidden:false,selector:"audio[autoplay], video[autoplay]",matches:"no-autoplay-audio-matches",reviewOnFail:true,tags:["cat.time-and-media","wcag2a","wcag142","TTv5","TT2.a","EN-301-549","EN-9.1.4.2","ACT","RGAAv4","RGAA-4.10.1"],actIds:["80f0bf"],preload:true,all:[{options:{allowedDuration:3},id:"no-autoplay-audio"}],any:[],none:[]},{id:"object-alt",impact:"serious",selector:"object[data]",matches:"object-is-loaded-matches",tags:["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a","EN-301-549","EN-9.1.1.1","RGAAv4","RGAA-1.1.6"],actIds:["8fc3b6"],all:[],any:["aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},"presentational-role"],none:[]},{id:"p-as-heading",impact:"serious",selector:"p",matches:"p-as-heading-matches",tags:["cat.semantics","wcag2a","wcag131","EN-301-549","EN-9.1.3.1","RGAAv4","RGAA-9.1.3","experimental"],all:[{options:{margins:[{weight:150,italic:true},{weight:150,size:1.15},{italic:true,size:1.15},{size:1.4}],passLength:1,failLength:.5},id:"p-as-heading"}],any:[],none:[]},{id:"page-has-heading-one",impact:"moderate",selector:"html:not(html *)",tags:["cat.semantics","best-practice"],all:[{options:{selector:"h1:not([role], [aria-level]), :is(h1, h2, h3, h4, h5, h6):not([role])[aria-level=1], [role=heading][aria-level=1]",passForModal:true},id:"page-has-heading-one"}],any:[],none:[]},{id:"presentation-role-conflict",impact:"minor",selector:`img[alt=''], [role="none"], [role="presentation"]`,matches:"has-implicit-chromium-role-matches",tags:["cat.aria","best-practice","ACT"],actIds:["46ca7f"],all:[],any:[],none:["is-element-focusable","has-global-aria-attribute"]},{id:"region",impact:"moderate",selector:"body *",tags:["cat.keyboard","best-practice","RGAAv4","RGAA-9.2.1"],all:[],any:[{options:{regionMatcher:"dialog, [role=dialog], [role=alertdialog], svg"},id:"region"}],none:[]},{id:"role-img-alt",impact:"serious",selector:"[role='img']:not(img, area, input, object)",matches:"html-namespace-matches",tags:["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a","TTv5","TT7.a","EN-301-549","EN-9.1.1.1","ACT","RGAAv4","RGAA-1.1.1"],actIds:["23a2a8"],all:[],any:["aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"scope-attr-valid",impact:"moderate",selector:"td[scope], th[scope]",tags:["cat.tables","best-practice"],all:["html5-scope",{options:{values:["row","col","rowgroup","colgroup"]},id:"scope-value"}],any:[],none:[]},{id:"scrollable-region-focusable",impact:"serious",selector:"*:not(select,textarea)",matches:"scrollable-region-focusable-matches",tags:["cat.keyboard","wcag2a","wcag211","wcag213","TTv5","TT4.a","EN-301-549","EN-9.2.1.1","EN-9.2.1.3","RGAAv4","RGAA-7.3.2"],actIds:["0ssw9k"],all:[],any:["focusable-content","focusable-element"],none:[]},{id:"select-name",impact:"critical",selector:"select",tags:["cat.forms","wcag2a","wcag412","section508","section508.22.n","TTv5","TT5.c","EN-301-549","EN-9.4.1.2","ACT","RGAAv4","RGAA-11.1.1"],actIds:["e086e5"],all:[],any:["implicit-label","explicit-label","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"},"presentational-role"],none:["hidden-explicit-label"]},{id:"server-side-image-map",impact:"minor",selector:"img[ismap]",tags:["cat.text-alternatives","wcag2a","wcag211","section508","section508.22.f","TTv5","TT4.a","EN-301-549","EN-9.2.1.1","RGAAv4","RGAA-1.1.4"],all:[],any:[],none:["exists"]},{id:"skip-link",impact:"moderate",selector:'a[href^="#"], a[href^="/#"]',matches:"skip-link-matches",tags:["cat.keyboard","best-practice","RGAAv4","RGAA-12.7.1"],all:[],any:["skip-link"],none:[]},{id:"summary-name",impact:"serious",selector:"summary",matches:"summary-interactive-matches",tags:["cat.name-role-value","wcag2a","wcag412","section508","section508.22.a","TTv5","TT6.a","EN-301-549","EN-9.4.1.2"],all:[],any:["has-visible-text","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"svg-img-alt",impact:"serious",selector:'[role="img"], [role="graphics-symbol"], svg[role="graphics-document"]',matches:"svg-namespace-matches",tags:["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a","TTv5","TT7.a","EN-301-549","EN-9.1.1.1","ACT","RGAAv4","RGAA-1.1.5"],actIds:["7d6734"],all:[],any:["svg-non-empty-title","aria-label","aria-labelledby",{options:{attribute:"title"},id:"non-empty-title"}],none:[]},{id:"tabindex",impact:"serious",selector:"[tabindex]",tags:["cat.keyboard","best-practice"],all:[],any:["tabindex"],none:[]},{id:"table-duplicate-name",impact:"minor",selector:"table",tags:["cat.tables","best-practice","RGAAv4","RGAA-5.2.1"],all:[],any:[],none:["same-caption-summary"]},{id:"table-fake-caption",impact:"serious",selector:"table",matches:"data-table-matches",tags:["cat.tables","experimental","wcag2a","wcag131","section508","section508.22.g","EN-301-549","EN-9.1.3.1","RGAAv4","RGAA-5.4.1"],all:["caption-faked"],any:[],none:[]},{id:"target-size",impact:"serious",selector:"*",enabled:false,matches:"widget-not-inline-matches",tags:["cat.sensory-and-visual-cues","wcag22aa","wcag258"],all:[],any:[{options:{minSize:24},id:"target-size"},{options:{minOffset:24},id:"target-offset"}],none:[]},{id:"td-has-header",impact:"critical",selector:"table",matches:"data-table-large-matches",tags:["cat.tables","experimental","wcag2a","wcag131","section508","section508.22.g","TTv5","TT14.b","EN-301-549","EN-9.1.3.1","RGAAv4","RGAA-5.7.4"],all:["td-has-header"],any:[],none:[]},{id:"td-headers-attr",impact:"serious",selector:"table",matches:"table-or-grid-role-matches",tags:["cat.tables","wcag2a","wcag131","section508","section508.22.g","TTv5","TT14.b","EN-301-549","EN-9.1.3.1","RGAAv4","RGAA-5.7.4"],actIds:["a25f45"],all:["td-headers-attr"],any:[],none:[]},{id:"th-has-data-cells",impact:"serious",selector:"table",matches:"data-table-matches",tags:["cat.tables","wcag2a","wcag131","section508","section508.22.g","TTv5","TT14.b","EN-301-549","EN-9.1.3.1","RGAAv4","RGAA-5.7.1"],actIds:["d0f69e"],all:["th-has-data-cells"],any:[],none:[]},{id:"valid-lang",impact:"serious",selector:"[lang]:not(html), [xml\\:lang]:not(html)",tags:["cat.language","wcag2aa","wcag312","TTv5","TT11.b","EN-301-549","EN-9.3.1.2","ACT","RGAAv4","RGAA-8.8.1"],actIds:["de46e4"],all:[],any:[],none:[{options:{attributes:["lang","xml:lang"]},id:"valid-lang"}]},{id:"video-caption",impact:"critical",selector:"video",tags:["cat.text-alternatives","wcag2a","wcag122","section508","section508.22.a","TTv5","TT17.a","EN-301-549","EN-9.1.2.2","RGAAv4","RGAA-4.3.1"],actIds:["eac66b"],all:[],any:[],none:["caption"]}],checks:[{id:"abstractrole",evaluate:"abstractrole-evaluate"},{id:"aria-allowed-attr-elm",evaluate:"aria-allowed-attr-elm-evaluate"},{id:"aria-allowed-attr",evaluate:"aria-allowed-attr-evaluate",options:{validTreeRowAttrs:["aria-posinset","aria-setsize","aria-expanded","aria-level"]}},{id:"aria-allowed-role",evaluate:"aria-allowed-role-evaluate",options:{allowImplicit:true,ignoredTags:[]}},{id:"aria-busy",evaluate:"aria-busy-evaluate",deprecated:true},{id:"aria-conditional-attr",evaluate:"aria-conditional-attr-evaluate",options:{invalidTableRowAttrs:["aria-posinset","aria-setsize","aria-expanded","aria-level"]}},{id:"aria-errormessage",evaluate:"aria-errormessage-evaluate"},{id:"aria-hidden-body",evaluate:"aria-hidden-body-evaluate"},{id:"aria-level",evaluate:"aria-level-evaluate"},{id:"aria-prohibited-attr",evaluate:"aria-prohibited-attr-evaluate",options:{elementsAllowedAriaLabel:["applet","input"]}},{id:"aria-required-attr",evaluate:"aria-required-attr-evaluate"},{id:"aria-required-children",evaluate:"aria-required-children-evaluate",options:{reviewEmpty:["doc-bibliography","doc-endnotes","grid","list","listbox","menu","menubar","table","tablist","tree","treegrid","rowgroup"]}},{id:"aria-required-parent",evaluate:"aria-required-parent-evaluate",options:{ownGroupRoles:["listitem","treeitem"]}},{id:"aria-roledescription",evaluate:"aria-roledescription-evaluate",options:{supportedRoles:["button","img","checkbox","radio","combobox","menuitemcheckbox","menuitemradio"]}},{id:"aria-unsupported-attr",evaluate:"aria-unsupported-attr-evaluate"},{id:"aria-valid-attr-value",evaluate:"aria-valid-attr-value-evaluate",options:[]},{id:"aria-valid-attr",evaluate:"aria-valid-attr-evaluate",options:[]},{id:"braille-label-equivalent",evaluate:"braille-label-equivalent-evaluate"},{id:"braille-roledescription-equivalent",evaluate:"braille-roledescription-equivalent-evaluate"},{id:"deprecatedrole",evaluate:"deprecatedrole-evaluate"},{id:"fallbackrole",evaluate:"fallbackrole-evaluate"},{id:"has-global-aria-attribute",evaluate:"has-global-aria-attribute-evaluate"},{id:"has-widget-role",evaluate:"has-widget-role-evaluate",options:[]},{id:"invalidrole",evaluate:"invalidrole-evaluate"},{id:"is-element-focusable",evaluate:"is-element-focusable-evaluate"},{id:"no-implicit-explicit-label",evaluate:"no-implicit-explicit-label-evaluate"},{id:"unsupportedrole",evaluate:"unsupportedrole-evaluate"},{id:"valid-scrollable-semantics",evaluate:"valid-scrollable-semantics-evaluate",options:{roles:["tooltip"]}},{id:"color-contrast-enhanced",evaluate:"color-contrast-evaluate",options:{ignoreUnicode:true,ignoreLength:false,ignorePseudo:false,boldValue:700,boldTextPt:14,largeTextPt:18,contrastRatio:{normal:{expected:7,minThreshold:4.5},large:{expected:4.5,minThreshold:3}},pseudoSizeThreshold:.25,shadowOutlineEmMax:.1,textStrokeEmMin:.03}},{id:"color-contrast",evaluate:"color-contrast-evaluate",options:{ignoreUnicode:true,ignoreLength:false,ignorePseudo:false,boldValue:700,boldTextPt:14,largeTextPt:18,contrastRatio:{normal:{expected:4.5},large:{expected:3}},pseudoSizeThreshold:.25,shadowOutlineEmMax:.2,textStrokeEmMin:.03}},{id:"link-in-text-block-style",evaluate:"link-in-text-block-style-evaluate"},{id:"link-in-text-block",evaluate:"link-in-text-block-evaluate",options:{requiredContrastRatio:3,allowSameColor:true}},{id:"autocomplete-appropriate",evaluate:"autocomplete-appropriate-evaluate",deprecated:true},{id:"autocomplete-valid",evaluate:"autocomplete-valid-evaluate",options:{stateTerms:["none","false","true","disabled","enabled","undefined","null","xoff","xon"],ignoredValues:["text","pronouns","gender","message","content"]}},{id:"accesskeys",evaluate:"accesskeys-evaluate",after:"accesskeys-after"},{id:"focusable-content",evaluate:"focusable-content-evaluate"},{id:"focusable-disabled",evaluate:"focusable-disabled-evaluate"},{id:"focusable-element",evaluate:"focusable-element-evaluate"},{id:"focusable-modal-open",evaluate:"focusable-modal-open-evaluate"},{id:"focusable-no-name",evaluate:"focusable-no-name-evaluate"},{id:"focusable-not-tabbable",evaluate:"focusable-not-tabbable-evaluate"},{id:"frame-focusable-content",evaluate:"frame-focusable-content-evaluate"},{id:"landmark-is-top-level",evaluate:"landmark-is-top-level-evaluate"},{id:"no-focusable-content",evaluate:"no-focusable-content-evaluate"},{id:"page-has-heading-one",evaluate:"has-descendant-evaluate",after:"has-descendant-after",options:{selector:"h1:not([role], [aria-level]), :is(h1, h2, h3, h4, h5, h6):not([role])[aria-level=1], [role=heading][aria-level=1]",passForModal:true}},{id:"page-has-main",evaluate:"has-descendant-evaluate",after:"has-descendant-after",options:{selector:"main:not([role]), [role='main']",passForModal:true}},{id:"page-no-duplicate-banner",evaluate:"page-no-duplicate-evaluate",after:"page-no-duplicate-after",options:{selector:"header:not([role]), [role=banner]",role:"banner"}},{id:"page-no-duplicate-contentinfo",evaluate:"page-no-duplicate-evaluate",after:"page-no-duplicate-after",options:{selector:"footer:not([role]), [role=contentinfo]",role:"contentinfo"}},{id:"page-no-duplicate-main",evaluate:"page-no-duplicate-evaluate",after:"page-no-duplicate-after",options:{selector:"main:not([role]), [role='main']"}},{id:"tabindex",evaluate:"tabindex-evaluate"},{id:"alt-space-value",evaluate:"alt-space-value-evaluate"},{id:"duplicate-img-label",evaluate:"duplicate-img-label-evaluate",options:{parentSelector:"button, [role=button], a[href], p, li, td, th"}},{id:"explicit-label",evaluate:"explicit-evaluate"},{id:"help-same-as-label",evaluate:"help-same-as-label-evaluate"},{id:"hidden-explicit-label",evaluate:"hidden-explicit-label-evaluate"},{id:"implicit-label",evaluate:"implicit-evaluate"},{id:"label-content-name-mismatch",evaluate:"label-content-name-mismatch-evaluate",options:{pixelThreshold:.1,occurrenceThreshold:3}},{id:"multiple-label",evaluate:"multiple-label-evaluate"},{id:"title-only",evaluate:"title-only-evaluate"},{id:"landmark-is-unique",evaluate:"landmark-is-unique-evaluate",after:"landmark-is-unique-after"},{id:"has-lang",evaluate:"has-lang-evaluate",options:{attributes:["lang","xml:lang"]}},{id:"valid-lang",evaluate:"valid-lang-evaluate",options:{attributes:["lang","xml:lang"]}},{id:"xml-lang-mismatch",evaluate:"xml-lang-mismatch-evaluate"},{id:"dlitem",evaluate:"dlitem-evaluate"},{id:"listitem",evaluate:"listitem-evaluate"},{id:"only-dlitems",evaluate:"invalid-children-evaluate",options:{validRoles:["definition","term","listitem"],validNodeNames:["dt","dd"],divGroups:true}},{id:"only-listitems",evaluate:"invalid-children-evaluate",options:{validRoles:["listitem"],validNodeNames:["li"]}},{id:"structured-dlitems",evaluate:"structured-dlitems-evaluate"},{id:"caption",evaluate:"caption-evaluate"},{id:"frame-tested",evaluate:"frame-tested-evaluate",after:"frame-tested-after",options:{isViolation:false}},{id:"no-autoplay-audio",evaluate:"no-autoplay-audio-evaluate",options:{allowedDuration:3}},{id:"css-orientation-lock",evaluate:"css-orientation-lock-evaluate",options:{degreeThreshold:2}},{id:"meta-viewport-large",evaluate:"meta-viewport-scale-evaluate",options:{scaleMinimum:5,lowerBound:2}},{id:"meta-viewport",evaluate:"meta-viewport-scale-evaluate",options:{scaleMinimum:2}},{id:"target-offset",evaluate:"target-offset-evaluate",options:{minOffset:24}},{id:"target-size",evaluate:"target-size-evaluate",options:{minSize:24}},{id:"header-present",evaluate:"has-descendant-evaluate",after:"has-descendant-after",options:{selector:":is(h1, h2, h3, h4, h5, h6):not([role]), [role=heading]"}},{id:"heading-order",evaluate:"heading-order-evaluate",after:"heading-order-after"},{id:"identical-links-same-purpose",evaluate:"identical-links-same-purpose-evaluate",after:"identical-links-same-purpose-after"},{id:"internal-link-present",evaluate:"internal-link-present-evaluate"},{id:"landmark",evaluate:"has-descendant-evaluate",options:{selector:"main, [role=main]"}},{id:"meta-refresh-no-exceptions",evaluate:"meta-refresh-evaluate",options:{minDelay:72e3,maxDelay:false}},{id:"meta-refresh",evaluate:"meta-refresh-evaluate",options:{minDelay:0,maxDelay:72e3}},{id:"p-as-heading",evaluate:"p-as-heading-evaluate",options:{margins:[{weight:150,italic:true},{weight:150,size:1.15},{italic:true,size:1.15},{size:1.4}],passLength:1,failLength:.5}},{id:"region",evaluate:"region-evaluate",after:"region-after",options:{regionMatcher:"dialog, [role=dialog], [role=alertdialog], svg"}},{id:"skip-link",evaluate:"skip-link-evaluate"},{id:"unique-frame-title",evaluate:"unique-frame-title-evaluate",after:"unique-frame-title-after"},{id:"duplicate-id-active",evaluate:"duplicate-id-evaluate",after:"duplicate-id-after"},{id:"duplicate-id-aria",evaluate:"duplicate-id-evaluate",after:"duplicate-id-after"},{id:"duplicate-id",evaluate:"duplicate-id-evaluate",after:"duplicate-id-after"},{id:"aria-label",evaluate:"aria-label-evaluate"},{id:"aria-labelledby",evaluate:"aria-labelledby-evaluate"},{id:"avoid-inline-spacing",evaluate:"avoid-inline-spacing-evaluate",options:{cssProperties:["line-height","letter-spacing","word-spacing"]}},{id:"button-has-visible-text",evaluate:"has-text-content-evaluate"},{id:"doc-has-title",evaluate:"doc-has-title-evaluate"},{id:"error-occurred",evaluate:"exists-evaluate"},{id:"exists",evaluate:"exists-evaluate"},{id:"has-alt",evaluate:"has-alt-evaluate"},{id:"has-visible-text",evaluate:"has-text-content-evaluate"},{id:"important-letter-spacing",evaluate:"inline-style-property-evaluate",options:{cssProperty:"letter-spacing",minValue:.12}},{id:"important-line-height",evaluate:"inline-style-property-evaluate",options:{multiLineOnly:true,cssProperty:"line-height",minValue:1.5,normalValue:1}},{id:"important-word-spacing",evaluate:"inline-style-property-evaluate",options:{cssProperty:"word-spacing",minValue:.16}},{id:"is-on-screen",evaluate:"is-on-screen-evaluate"},{id:"non-empty-alt",evaluate:"attr-non-space-content-evaluate",options:{attribute:"alt"}},{id:"non-empty-if-present",evaluate:"non-empty-if-present-evaluate"},{id:"non-empty-placeholder",evaluate:"attr-non-space-content-evaluate",options:{attribute:"placeholder"}},{id:"non-empty-title",evaluate:"attr-non-space-content-evaluate",options:{attribute:"title"}},{id:"non-empty-value",evaluate:"attr-non-space-content-evaluate",options:{attribute:"value"}},{id:"presentational-role",evaluate:"presentational-role-evaluate"},{id:"role-none",evaluate:"matches-definition-evaluate",deprecated:true,options:{matcher:{attributes:{role:"none"}}}},{id:"role-presentation",evaluate:"matches-definition-evaluate",deprecated:true,options:{matcher:{attributes:{role:"presentation"}}}},{id:"svg-non-empty-title",evaluate:"svg-non-empty-title-evaluate"},{id:"caption-faked",evaluate:"caption-faked-evaluate"},{id:"html5-scope",evaluate:"html5-scope-evaluate"},{id:"same-caption-summary",evaluate:"same-caption-summary-evaluate"},{id:"scope-value",evaluate:"scope-value-evaluate",options:{values:["row","col","rowgroup","colgroup"]}},{id:"td-has-header",evaluate:"td-has-header-evaluate"},{id:"td-headers-attr",evaluate:"td-headers-attr-evaluate"},{id:"th-has-data-cells",evaluate:"th-has-data-cells-evaluate"},{id:"hidden-content",evaluate:"hidden-content-evaluate"}]});})(typeof window=="object"?window:Uh);});var bv={};Cr(bv,{dismissModals:()=>xM});async function xM(l){await l.evaluate(c=>{for(let g of c){let m=document.querySelectorAll(g);for(let p of m)if(p.offsetParent!==null){p.click();return}}},wM),await new Promise(c=>setTimeout(c,500));}var wM,yv=kr(()=>{wM=['[class*="cookie"] button[class*="accept"]','[class*="cookie"] button[class*="agree"]','[class*="consent"] button[class*="accept"]','[class*="consent"] button[class*="agree"]','[id*="cookie"] button','[id*="consent"] button',".cc-dismiss",".cc-allow",".cc-btn",'[class*="gdpr"] button[class*="accept"]','[aria-label*="cookie" i] button','[aria-label*="consent" i] button','button[class*="close-banner"]','[class*="popup"] [class*="close"]','[class*="overlay"] [class*="close"]','[class*="modal"] [class*="close"]','[class*="notification"] [class*="close"]','button[aria-label="Close"]','button[aria-label="Dismiss"]'];});var Uo={};Cr(Uo,{pruneHiddenIframeIssues:()=>EM,pruneInvisibleContrast:()=>DM,waitForRenderSettle:()=>AM});async function AM(l,c=4e3){let g=Date.now()+c;try{await l.waitForLoadState?.("load",{timeout:Math.min(c/2,2e3)});}catch{}let m="";for(;Date.now()<g;){let p;try{p=await l.evaluate(()=>{let b=typeof document.getAnimations=="function"?document.getAnimations():[],A=0;for(let _ of b){if(_.playState!=="running")continue;let w;try{w=_.effect?.getComputedTiming?.().iterations;}catch{w=void 0;}w!==1/0&&A++;}let x="",k=document.body?document.body.querySelectorAll('[style*="opacity"]'):[],R=Math.min(k.length,50);for(let _=0;_<R;_++)x+=getComputedStyle(k[_]).opacity+",";return A+"|"+x});}catch{return}if(p.indexOf("0|")===0&&p===m)return;m=p,await new Promise(b=>setTimeout(b,150));}}function wv(l){return _M.has(l.wcag)||/contrast/i.test(l.type||"")}async function DM(l,c){let g=Array.from(new Set(c.filter(A=>wv(A)&&A.selector).map(A=>A.selector))).slice(0,100);if(g.length===0)return c;let m;try{m=await l.evaluate(A=>{let x=[],k={},R=Math.max(document.documentElement.scrollWidth,window.innerWidth),_=Math.max(document.documentElement.scrollHeight,window.innerHeight),w=S=>{let y=S.match(/rgba?\(([^)]+)\)/);if(!y)return !1;let C=y[1].split(/[ ,/]+/).filter(Boolean);return C.length<4||parseFloat(C[3])>=.95};for(let S of A){let y=null;try{y=document.querySelector(S);}catch{continue}if(!y)continue;let C=getComputedStyle(y),F=y.getBoundingClientRect(),P=C.clipPath&&C.clipPath!=="none"&&/inset\(\s*(?:50|100)%/.test(C.clipPath)||/rect\(\s*0(?:px)?\s*,?\s*0(?:px)?\s*,?\s*0(?:px)?\s*,?\s*0(?:px)?\s*\)/.test(C.clip||""),M=F.width<=1||F.height<=1,q=window.scrollX,B=window.scrollY,j=F.right+q<=0||F.bottom+B<=0||F.left+q>=R||F.top+B>=_,X=!1;if(j)for(let G=y.parentElement;G&&G!==document.body&&G!==document.documentElement;G=G.parentElement){let N=getComputedStyle(G);if(N.overflowX!=="visible"||N.overflowY!=="visible"||N.transform&&N.transform!=="none"){X=!0;break}}if(P||M||F.right+q<=0||F.bottom+B<=0||j&&!X){x.push(S);continue}let T=y,v=!1;for(;T&&T!==document.documentElement;){if(parseFloat(getComputedStyle(T).opacity)===0){v=!0;break}T=T.parentElement;}if(v){k[S]="text is inside an opacity:0 element (hidden slide or pre-animation state) \u2014 check contrast in the state where it is shown";continue}let E=F.left+F.width/2,I=F.top+F.height/2,H=y,V=!1;for(let G=0;H&&H!==document.body&&G<8;G++){let N=getComputedStyle(H);if(w(N.backgroundColor)||N.backgroundImage&&N.backgroundImage!=="none")break;let U=H.querySelectorAll("video, canvas, img, picture");for(let Y=0;Y<U.length;Y++){let Z=U[Y];if(Z.contains(y)||y.contains(Z))continue;let z=Z.getBoundingClientRect();if(z.width>0&&z.height>0&&E>=z.left&&E<=z.right&&I>=z.top&&I<=z.bottom){V=!0;break}}if(V)break;H=H.parentElement;}V&&(k[S]="text sits over a video or image \u2014 the background behind the glyphs cannot be measured from CSS");}return {hidden:x,review:k}},g);}catch{return c}let p=new Set(m.hidden),b=[];for(let A of c){if(!wv(A)){b.push(A);continue}if(p.has(A.selector))continue;let x=m.review[A.selector];b.push(x&&A.confidence!=="needs_review"?{...A,confidence:"needs_review",reviewReason:x,...A.fix?{fix:{...A.fix,needsManualReview:true}}:{}}:A);}return b}async function EM(l,c){let g=Array.from(new Set(c.filter(b=>b.selector).map(b=>b.selector))).slice(0,200);if(g.length===0)return c;let m;try{m=await l.evaluate(b=>{let A=[];for(let x of b){let k=null;try{k=document.querySelector(x);}catch{continue}if(!k||k.tagName!=="IFRAME")continue;let R=getComputedStyle(k),_=k.getClientRects().length===0||R.visibility==="hidden"||R.visibility==="collapse",w=(k.getAttribute("src")||"").trim().toLowerCase().indexOf("javascript:")===0;(_||w)&&A.push(x);}return A},g);}catch{return c}if(m.length===0)return c;let p=new Set(m);return c.filter(b=>!p.has(b.selector))}var _M,Wo=kr(()=>{_M=new Set(["1.4.3","1.4.6","1.4.11"]);});var Xo={};Cr(Xo,{focusOnlyObscuredIndexes:()=>RM,resetInteractionState:()=>SM,restoreInteractionState:()=>CM,snapshotInteractionState:()=>kM});async function SM(l){try{await l.evaluate(()=>{try{document.activeElement?.blur?.();}catch{}try{window.scrollTo({left:0,top:0,behavior:"instant"});}catch{}});}catch{}}async function kM(l){try{await l.evaluate(()=>{let c=window;c.__waCallerState={el:document.activeElement,x:window.scrollX,y:window.scrollY};});}catch{}}async function CM(l){try{await l.evaluate(()=>{let c=window,g=c.__waCallerState;if(delete c.__waCallerState,!g)return;let m=g.el;if(m&&m!==document.body&&m!==document.documentElement&&m.isConnected)try{m.focus({preventScroll:!0});}catch{}try{window.scrollTo({left:g.x,top:g.y,behavior:"instant"});}catch{}});}catch{}}function TM(l){if(typeof l=="string")return l;if(!Array.isArray(l))return null;let c=l.flat(1/0).filter(g=>typeof g=="string");return c.length===1?c[0]:null}async function RM(l,c){let g=c.map(A=>{let k=[...A.any??[],...A.none??[]].flatMap(_=>_.relatedNodes??[]);if(!k.length)return null;let R=k.map(_=>TM(_.target));return R.every(_=>!!_)?R:null}),m=Array.from(new Set(g.flatMap(A=>A??[])));if(!m.length)return new Set;let p={};try{p=await l.evaluate(({sels:A,own:x})=>{let k=_=>{let w=_.getBoundingClientRect(),S=getComputedStyle(_);return !!((w.width<=1||w.height<=1)&&(S.overflow==="hidden"||S.position==="absolute"||S.position==="fixed")||/^rect\(\s*0(px)?[\s,]+0(px)?[\s,]+0(px)?[\s,]+0(px)?\s*\)$/.test(S.clip||"")||/inset\(\s*50%/.test(S.clipPath||""))},R={};for(let _ of A){let w=null;try{w=document.querySelector(_);}catch{w=null;}if(!w){R[_]=!1;continue}let S=w.closest(x);if(S&&S!==document.body&&S!==document.documentElement){R[_]=!0;continue}if(w===document.activeElement){try{w.blur();}catch{}R[_]=k(w);continue}R[_]=k(w);}return R},{sels:m,own:$o});}catch{return new Set}let b=new Set;return g.forEach((A,x)=>{A&&A.length&&A.every(k=>p[k]===true)&&b.add(x);}),b}var Ko=kr(()=>{Tr();});var ua={};Cr(ua,{dedupeByElementIdentity:()=>MM,deduplicateIssues:()=>FM});function FM(l){let c=new Map,g=[...l].sort((m,p)=>{let b={webability:0,"axe-core":1,"deep-analysis":2},A=b[m.source]??3,x=b[p.source]??3;return A-x});for(let m of g){let p=IM(m);c.has(p)?!c.get(p).fix?.suggestedValue&&m.fix?.suggestedValue&&c.set(p,m):c.set(p,m);}return Array.from(c.values())}function IM(l){let c=l.selector.replace(/:focus-visible$/,"").replace(/:focus$/,"").replace(/\[data-[^\]]+\]/g,"").trim(),g=l.wcag||"";return c&&g?`${c}::${g}`:`${l.type}::${c||l.id}`}async function MM(l,c){if(c.length<2)return c;let g=Array.from(new Set(c.map(_=>_.selector).filter(Boolean))),m;try{m=await l.evaluate(_=>{let w=Array.from(document.querySelectorAll("*")),S=new Map;w.forEach((C,F)=>S.set(C,F));let y={};for(let C of _){let F=null;try{F=document.querySelector(C);}catch{}if(!F){let P=C.replace(/:(?:focus-visible|focus-within|focus|hover|active)$/,"");if(P!==C)try{F=document.querySelector(P);}catch{}}if(F){let P=F.closest("table");y[C]={el:S.get(F),table:P?S.get(P):-1,doc:F===document.documentElement||F===document.body};}}return y},g);}catch{return c}let p={webability:0,"axe-core":1,"deep-analysis":2},b=_=>{let w=m[_.selector];if(!w)return null;let S=_.wcag||_.type;return w.doc?{key:PM.has(_.wcag||"")?`doc::${S}`:`doc::${S}::${_.type}`,owner:true}:w.table>=0&&LM.test(_.type)?{key:`${w.table}::${S}::table-headers`,owner:w.el===w.table}:{key:`${w.el}::${S}`,owner:true}},A=[...c].sort((_,w)=>{let S=b(_),y=b(w),C=S?.owner?0:1,F=y?.owner?0:1;return C-F||(p[_.source]??3)-(p[w.source]??3)}),x=new Map,k=[];for(let _ of A){let w=b(_);if(!w){k.push(_);continue}let S=x.get(w.key);S?!S.fix?.suggestedValue&&_.fix?.suggestedValue&&(b(S)?.owner??true)===w.owner&&x.set(w.key,_):x.set(w.key,_);}let R=new Set([...x.values(),...k]);return c.filter(_=>R.has(_))}var LM,PM,ca=kr(()=>{LM=/^missing_table_header$|^td-has-header$|^th-has-data-cells$|^h43|^h63/,PM=new Set(["2.4.1","3.1.1","2.4.2"]);});var _v={};Cr(_v,{parseGif:()=>xv,playsOverFiveSeconds:()=>Av,verifyAnimatedGifs:()=>OM});function xv(l){if(String.fromCharCode(l[0]??0,l[1]??0,l[2]??0)!=="GIF")return null;let g=13,m=l[10]??0;m&128&&(g+=3*(1<<(m&7)+1));let p=0,b=0,A=0,x=null,k=()=>{for(;g<l.length;){let R=l[g++];if(R===0)return;g+=R;}};for(;g<l.length;){let R=l[g++];if(R===59)break;if(R===33){let _=l[g++];if(_===249)A=(l[g+2]??0)|(l[g+3]??0)<<8,g+=1+(l[g]??4),k();else if(_===255){let w=l[g]??0,S=String.fromCharCode(...Array.from(l.subarray(g+1,g+1+w)));g+=1+w,(S==="NETSCAPE2.0"||S==="ANIMEXTS1.0")&&l[g]===3&&l[g+1]===1&&(x=(l[g+2]??0)|(l[g+3]??0)<<8),k();}else k();}else if(R===44){let _=l[g+8]??0;g+=9,_&128&&(g+=3*(1<<(_&7)+1)),g+=1,k(),p++,b+=A<2?10:A,A=0;}else break}return {frames:p,seconds:b/100,loops:x}}function Av(l){if(l.frames<2)return false;if(l.loops===0)return true;let c=l.loops===null?1:l.loops+1;return l.seconds*c>5}async function OM(l,c){let g=c.filter(b=>b.type==="animated_gif_no_pause");if(!g.length)return c;let m=Array.from(new Set(g.map(b=>b.selector))),p={};try{p=await l.evaluate(async({sels:b,parserSrc:A})=>{let x=new Function("var __name = function (f) { return f }; return ("+A+")")(),k={};return await Promise.all(b.map(async R=>{k[R]=null;try{let _=document.querySelector(R),w=_&&(_.currentSrc||_.src);if(!w)return;let S=new AbortController,y=setTimeout(()=>S.abort(),5e3);try{let C=await fetch(w,{signal:S.signal,credentials:"same-origin"});if(!C.ok||Number(C.headers.get("content-length")||"0")>2e7)return;k[R]=x(new Uint8Array(await C.arrayBuffer()));}finally{clearTimeout(y);}}catch{}})),k},{sels:m,parserSrc:xv.toString()});}catch{p={};}return c.flatMap(b=>{if(b.type!=="animated_gif_no_pause")return [b];let A=p[b.selector];if(!A)return [{...b,message:`${b.message} \u2014 the GIF file could not be read from the page (cross-origin or blocked), so its frame count and duration were not measured`}];if(!Av(A))return [];let x=A.loops===0?"loops forever":`plays for ${(A.seconds*(A.loops===null?1:A.loops+1)).toFixed(1)}s`;return [{...b,message:`animated GIF (${A.frames} frames, ${x}) starts automatically with no pause control \u2014 replace it with a video that has controls or a static image, or add a pause button (WCAG 2.2.2)`}]})}var Dv=kr(()=>{});var Ku={};Cr(Ku,{scopeIssuesToRoot:()=>NM});async function NM(l,c,g){let m=Array.from(new Set(c.map(b=>b.selector).filter(Boolean))),p;try{p=await l.evaluate(({rootSel:b,sels:A})=>{let x=_=>{try{let S=document.querySelector(_);if(S)return S}catch{}let w=_.replace(/:(?:focus-visible|focus-within|focus|hover|active)$/,"");if(w!==_)try{return document.querySelector(w)}catch{return null}return null},k=null;try{k=document.querySelector(b);}catch{return {invalid:!0,matched:!1,within:{}}}if(!k)return {invalid:!1,matched:!1,within:{}};let R={};for(let _ of A){let w=x(_);R[_]=w?w===k||k.contains(w):!0;}return {invalid:!1,matched:!0,within:R}},{rootSel:g,sels:m});}catch{return {issues:c,warning:`scope:evaluate-failed (${g}) \u2014 results unfiltered`}}return p.invalid?{issues:c,warning:`scope:invalid-selector (${g}) \u2014 results unfiltered`}:p.matched?{issues:c.filter(b=>b.selector?p.within[b.selector]===true:true)}:{issues:[],warning:`scope:root-miss (${g} matched nothing \u2014 empty result)`}}var Yu=kr(()=>{});var Ho={mobile:{width:375,height:667},tablet:{width:768,height:1024},desktop:{width:1280,height:720}};function Lg(l,c){let g=l??"";if(g.trimStart().startsWith("{"))try{let m=JSON.parse(g);if(m&&typeof m=="object"&&!Array.isArray(m))return JSON.stringify({...m,platform:c})}catch{}return (g?g+" | ":"")+"platform: "+c}var iL=()=>{let l="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye]",g=[],m=new Set;function p(x){let k=(x.textContent||"").trim().replace(/\s+/g,""),R=x.querySelector("img, svg, picture")!==null,_=x.querySelector("i[class], span[class]")!==null;if(k.length>0&&!R&&!_)return false;if(R){let w=x.querySelectorAll("img"),S="";w.forEach(F=>{S+=(F.getAttribute("alt")||"").trim();});let y=k.replace(/\s+/g,""),C=S.replace(/\s+/g,"");return y===""||y===C}return false}function b(x){let k=x.nextElementSibling;for(;k;){if(isVisible(k))return k;k=k.nextElementSibling;}return null}return document.querySelectorAll("a[href]").forEach(x=>{if(g.length>=50||x.closest(l)||!isVisible(x)||m.has(x))return;let k=x.getAttribute("href");if(!k||k==="#")return;let R=b(x);if(!R||R.tagName!=="A"||R.getAttribute("href")!==k||m.has(R)||x.getAttribute("aria-hidden")==="true"||R.getAttribute("aria-hidden")==="true")return;let w=p(x),S=p(R);if(!w&&!S)return;let y=w?x:R,C=w?R:x;m.add(y),m.add(C);let F=uniqueSel(y),P=y.outerHTML.slice(0,300),M=(C.textContent||"").trim().slice(0,80);g.push({selector:F,attribute:"aria-hidden",currentValue:"",issueType:"adjacent_redundant_link",wcag:"2.4.4",context:JSON.stringify({href:k,imageLink:true,adjacentLinkText:M,suggestion:'Add aria-hidden="true" and tabindex="-1" to the image-only link'}),needsAI:false,fixValue:"true",outerHtml:P}),g.push({selector:F,attribute:"tabindex",currentValue:"",issueType:"adjacent_redundant_link",wcag:"2.4.4",context:JSON.stringify({supplementary:"Remove from tab order alongside aria-hidden",href:k}),needsAI:false,fixValue:"-1",outerHtml:P});}),g},Pg={name:"adjacentLinks",cap:50,async detect(l){return l.evaluate(iL)}};var oL=()=>{let l="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye],[class*=ae-exclude],[id*=ae_app],[id*=ae_],[class*=EquallyAI]",c='.slick-cloned,.slick-clone,.swiper-slide-duplicate,.owl-item.cloned,[data-slick-index^="-"],[data-swiper-slide-index]:not([data-swiper-slide-index=""])',g=["[aria-expanded]",'[class*="dropdown" i]','[class*="submenu" i]','[class*="sub-menu" i]','[class*="collapse" i]','[class*="accordion" i]','[class*="megamenu" i]','[class*="mega-menu" i]','[class*="flyout" i]','[class*="fsNav" i]','[role="menu"]','[role="menubar"]','[role="tablist"]','[role="tab"]',"nav"].join(","),m=new Set(["A","BUTTON","INPUT","SELECT","TEXTAREA"]),p=50,b=[],A=new Set;function x(_){let w=_,S=0;for(;w&&w.nodeType===1&&w!==document.body&&S<20;){try{let y=getComputedStyle(w);if(y.display==="none"||y.visibility==="hidden"||y.visibility==="collapse")return !0}catch{}w=w.parentElement,S++;}return false}function k(_){let w=_.tagName,S=_.getAttribute("tabindex");if(S!==null){let y=parseInt(S,10);if(!isNaN(y)&&y>=0)return true;if(!isNaN(y)&&y<0)return false}return m.has(w)?!(w==="A"&&!_.hasAttribute("href")||_.hasAttribute("disabled")):false}return document.querySelectorAll('[aria-hidden="true"]').forEach(_=>{if(b.length>=p||_.closest(l)||_.closest(c)||_.closest(g)||_.matches(g))return;let w=[];if(k(_)&&w.push(_),_.querySelectorAll("a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]").forEach(y=>{k(y)&&w.push(y);}),w.length!==0)for(let y of w){if(b.length>=p)return;let C=uniqueSel(y),F=C+"\0tabindex";if(A.has(F))continue;A.add(F);let P=x(y),M=!P;b.push({selector:C,attribute:"tabindex",currentValue:y.getAttribute("tabindex")||"",issueType:"aria_hidden_focusable",wcag:"4.1.2",context:JSON.stringify({tag:y.tagName.toLowerCase(),parentHidden:_.tagName.toLowerCase(),collapsed:P,suggestion:P?"Focusable control inside an aria-hidden region that is currently display:none/visibility:hidden \u2014 likely a closed modal/dialog/dropdown. Confirm the control is permanently hidden before removing it from the tab order.":'This control is rendered and operable inside an aria-hidden region. Remove aria-hidden from the region if the control is meant to be used, or hide the region (display:none / hidden / inert) when it is not. Do not set tabindex="-1" on a visible control: keyboard users lose it.'}),needsAI:false,fixValue:"-1",...P?{needsReview:true,reviewReason:'this focusable control is inside an aria-hidden region that is currently hidden by layout (display:none/visibility:hidden) \u2014 the signature of a closed modal/dialog/dropdown/tab-panel whose controls are meant to become focusable when it opens. A static tabindex="-1" would permanently remove it from the tab order and create a keyboard trap once the widget is shown. Confirm the control is permanently hidden before applying.'}:{},...M?{manualFix:true,reviewReason:'the control is rendered inside an aria-hidden region: tabindex="-1" would leave a visible, clickable control unreachable by keyboard (2.1.1). The right fix is on the region (remove aria-hidden, or hide it for everyone), which needs a person.'}:{},outerHtml:(y.outerHTML||"").slice(0,300)});}}),b},Mg={name:"ariaHiddenFocusable",cap:50,async detect(l){return l.evaluate(oL)}};var sL=()=>{let l="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],m=new Set,p=[/\btoast\b/i,/\bsnackbar\b/i,/error[-_]message|error[-_]msg|form[-_]error|validation[-_]error/i,/success[-_]message|success[-_]msg/i,/alert[-_]message|alert[-_]banner/i,/flash[-_]message|flash[-_]notice/i,/cart[-_]count|cart[-_]badge|cart[-_]quantity/i,/loading[-_]spinner|loading[-_]indicator/i,/search[-_]results?[-_]count/i,/\blive[-_]region\b/i,/notification[-_](bar|area|container|popup|wrapper)/i,/status[-_]message/i];function b(A){if((A.textContent||"").trim())return false;if(typeof A.checkVisibility=="function")return A.checkVisibility({visibilityProperty:true});for(let x=A;x&&x.nodeType===1;x=x.parentElement)if(getComputedStyle(x).display==="none")return false;return getComputedStyle(A).visibility!=="hidden"}for(let A of p){if(g.length>=50)break;let x=document.querySelectorAll("*");for(let k of x){if(g.length>=50)break;if(m.has(k)||k.closest(l))continue;let R=k.className&&typeof k.className=="string"?k.className:"",_=k.getAttribute("id")||"";if(!A.test(R)&&!A.test(_)||k.getAttribute("aria-live"))continue;let w=k.getAttribute("role")||"";if(["alert","status","log","timer","marquee"].includes(w)||!b(k))continue;m.add(k);let S=uniqueSel(k),y=A.test(R)?"class":"id",C=y==="class"?R.slice(0,60):_;g.push({selector:S,attribute:"aria-live",currentValue:"",issueType:"aria_live",wcag:"4.1.3",context:y+": "+C+" | pattern: "+A.source,needsAI:false,fixValue:"polite"});}}return g},Og={name:"ariaLive",cap:50,async detect(l){return l.evaluate(sL)}};var lL=()=>{let l="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye],[class*=ae-exclude],[id*=ae_app],[id*=ae_],[class*=EquallyAI]",g=[],m=new Set,p=["aria-labelledby","aria-describedby"];return document.querySelectorAll("[aria-labelledby],[aria-describedby]").forEach(x=>{if(!(g.length>=50)&&!x.closest(l)&&isVisible(x)&&!isHiddenFromAT(x)&&!x.getAttribute("aria-live")&&!x.closest("[aria-live]")&&!x.closest("template"))for(let k of p){let R=x.getAttribute(k);if(!R||!R.trim())continue;let _=R.trim().split(/\s+/).filter(B=>B.length>0);if(_.length===0||!_.every(B=>!document.getElementById(B)))continue;let S=x.getAttribute("aria-label");if(S&&S.trim())continue;let y=getAccessibleName(x);if(y&&y.trim())continue;let C=uniqueSel(x),F=C+"\0"+k;if(m.has(F))continue;m.add(F);let{nearbyHeading:P,parentTag:M,parentRole:q}=getNearbyContext(x);g.push({selector:C,attribute:"aria-label",currentValue:"",issueType:"broken_aria_reference",wcag:"4.1.2",context:JSON.stringify({tag:x.tagName.toLowerCase(),brokenAttr:k,brokenIds:_,nearbyHeading:P,parentTag:M,parentRole:q,suggestion:`All IDs in ${k}="${R}" are missing from the DOM. Element has no accessible name. Generate an aria-label.`}),needsAI:true,outerHtml:(x.outerHTML||"").slice(0,300)});}}),g},Ng={name:"brokenAriaReferences",cap:50,async detect(l){return l.evaluate(lL)}};var uL=()=>{let c=[],g=["submit","send","login","log in","sign in","sign up","register","subscribe","save","order","purchase","checkout","pay","book","apply","enroll","confirm","join","create account","get started","schedule","place order","buy","donate","search","find","go"],m=document.querySelectorAll("button");for(let p of m){if(c.length>=50)break;let b=p;if(isWidget(b)||b.hasAttribute("type")||!b.closest("form"))continue;let A=(b.textContent||"").trim().slice(0,60),x=(b.getAttribute("aria-label")||"").trim().slice(0,60),k=A||x||"(no label)",R=k.toLowerCase();g.some(w=>R.includes(w))||c.push({selector:uniqueSel(b),attribute:"type",currentValue:"",issueType:"missing_button_type",wcag:"3.2.2",context:"button inside <form> missing type attribute \u2014 defaults to submit | label: "+k,needsAI:false,fixValue:"button",outerHtml:(b.outerHTML||"").slice(0,300)});}return c},qg={name:"buttonType",cap:50,async detect(l){return l.evaluate(uL)}};var cL=()=>{let c=[],g=document.querySelectorAll("video, audio");for(let m of Array.from(g)){if(c.length>=20)break;if(isWidget(m)||typeof isVisible=="function"&&!isVisible(m)||m.error)continue;let p=m.tagName==="VIDEO";if(p){let F=m.hasAttribute("muted")||m.muted,P=m.hasAttribute("controls"),M=m.hasAttribute("loop")||m.loop,q=/mute|unmute|sound|volume|audio|play|pause/i,B=!!m.parentElement?.querySelector('button, [role="button"]')||!!m.getAttribute("id")&&!!document.querySelector('[aria-controls~="'+(m.getAttribute("id")||"").replace(/"/g,"")+'"]');for(let j=m.parentElement?.parentElement||null,X=0;j&&!B&&X<3;j=j.parentElement,X++)B=Array.from(j.querySelectorAll('button, [role="button"]')).some(T=>q.test((T.getAttribute("aria-label")||"")+" "+(T.getAttribute("title")||"")+" "+(T.textContent||"")));if(F&&M&&!P&&!B)continue}let b=m.querySelectorAll("track"),A=false;for(let F of Array.from(b)){let P=(F.getAttribute("kind")||"").toLowerCase();if(P==="captions"||P==="subtitles"){A=true;break}}if(A)continue;let x=m.currentSrc||m.getAttribute("src")||"";if(x||(x=m.querySelector("source")?.getAttribute("src")||""),!x)continue;let k=x.toLowerCase();if(k.startsWith("blob:")||k.startsWith("data:")||k.startsWith("about:")||k.startsWith("javascript:")||k.endsWith(".m3u8")||k.includes(".m3u8?")||k.endsWith(".mpd")||k.includes(".mpd?"))continue;let R=x;try{R=new URL(x,location.href).toString();}catch{continue}let _=typeof uniqueSel=="function"?uniqueSel(m):"",w=m.getAttribute("title")||m.getAttribute("aria-label")||"",S=typeof getNearbyContext=="function"?getNearbyContext(m):{parentTag:m.tagName.toLowerCase(),nearbyHeading:""},y=[];y.push("media: "+m.tagName.toLowerCase()),y.push("src: "+R.slice(0,200)),w&&y.push("title: "+w.slice(0,80)),S.nearbyHeading&&y.push("heading: "+S.nearbyHeading),y.push("parent: "+S.parentTag);let C=p;c.push({selector:_,attribute:"data-needs-captions",currentValue:"",issueType:"missing_captions",wcag:"1.2.2",context:y.join(" | "),needsAI:true,...C?{needsReview:true,reviewReason:"cannot verify an audio track in-page \u2014 confirm the video has speech content before transcribing (silent videos need no captions)"}:{},imageSrc:R,outerHtml:(m.outerHTML||"").slice(0,300)});}return c},Bg={name:"captions",cap:20,async detect(l){return l.evaluate(cL)}};var dL=()=>{let l="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],m="p, li, blockquote, article, section, main, div",p=document.querySelectorAll("a[href]"),b=new Map;for(let A of Array.from(p)){if(g.length>=40)break;if(A.closest(l)||A.closest('nav, header, footer, aside, [role="navigation"], [role="banner"], [role="contentinfo"]')||typeof isVisible=="function"&&!isVisible(A))continue;let x=A.closest(m);if(!x)continue;let k=(A.textContent||"").trim();if(!k)continue;let R=b.get(x);if(R===void 0){R=0;let j=document.createTreeWalker(x,NodeFilter.SHOW_TEXT),X;for(;X=j.nextNode();){let T=X.parentElement;!T||T.closest("a")||T.closest(m)===x&&(typeof isVisible=="function"&&!isVisible(T)||(R+=(X.textContent||"").trim().length));}b.set(x,R);}if(R<20||A.querySelector("img, svg, [class*=icon], [class*=arrow]"))continue;let _=getComputedStyle(A),w=getComputedStyle(x);if((_.textDecorationLine||_.textDecoration||"").includes("underline")||(()=>{let j=document.createTreeWalker(A,NodeFilter.SHOW_TEXT),X,T=false;for(;X=j.nextNode();){if(!/[\p{L}\p{N}]/u.test(X.textContent||""))continue;T=true;let v=false;for(let E=X.parentElement;E&&E!==A;E=E.parentElement){let I=getComputedStyle(E),H=(I.textDecorationColor||"").replace(/\s/g,"");if((I.textDecorationLine||"").includes("underline")&&H!=="transparent"&&!/^rgba\([^)]*,0(?:\.0+)?\)$/.test(H)){v=true;break}let V=(I.borderBottomColor||"").replace(/\s/g,""),G=V==="transparent"||/^rgba\([^)]*,0(?:\.0+)?\)$/.test(V);if((I.borderBottomStyle||"none")!=="none"&&parseFloat(I.borderBottomWidth||"0")>0&&!G){v=true;break}}if(!v)return false}return T})())continue;let C=parseInt(_.fontWeight||"400",10),F=parseInt(w.fontWeight||"400",10);if(Number.isFinite(C)&&Number.isFinite(F)&&C-F>=300||(_.borderBottomStyle||"none")!=="none"&&(_.borderBottomWidth||"0px")!=="0px"||_.color===w.color)continue;let M=typeof uniqueSel=="function"?uniqueSel(A):"",q=typeof getNearbyContext=="function"?getNearbyContext(A):{parentTag:A.tagName.toLowerCase(),nearbyHeading:""},B=[];B.push("link: "+k.slice(0,40)),B.push("color: "+_.color),B.push("parent-color: "+w.color),q.nearbyHeading&&B.push("heading: "+q.nearbyHeading),B.push("parent: "+q.parentTag),g.push({selector:M,attribute:"style",currentValue:_.textDecoration||"",issueType:"color_only_link",wcag:"1.4.1",context:B.join(" | "),needsAI:false,fixValue:"text-decoration: underline !important;",outerHtml:(A.outerHTML||"").slice(0,300)});}return g},Hg={name:"colorOnly",cap:40,async detect(l){return l.evaluate(dL)}};var fL=()=>{let l=[],c=v=>typeof parseCssColor=="function"?parseCssColor(v):null,g=(v,E,I)=>typeof relLuminance=="function"?relLuminance(v,E,I):0,m=(v,E)=>typeof contrastRatio=="function"?contrastRatio(v,E):1;function p(v){let E=String(v.backgroundImage||"none");if(E==="none")return false;if(/gradient\(/i.test(E))return true;if(!/url\(/i.test(E))return false;let I=String(v.backgroundRepeat||"").toLowerCase(),H=String(v.backgroundSize||"").toLowerCase(),V=I.split(",").map(N=>N.trim()).some(N=>N!==""&&N!=="no-repeat"),G=/cover|contain|100%/.test(H);return V||G}let b=new Map;function A(v){let E=[],I=false;for(let H=v;H&&H.nodeType===1;H=H.parentElement){let V=b.get(H);if(V!==void 0){I=V;break}if(E.push(H),parseFloat(getComputedStyle(H).opacity||"1")<1){I=true;break}}for(let H of E)b.set(H,I);return I}let x=new Map;function k(v){let E=x.get(v);if(E)return E;E=[];let I=Array.from(v.children);for(let H=0;H<I.length;H++){let V=getComputedStyle(I[H]);V.position==="static"||V.display==="none"||V.visibility!=="visible"||parseFloat(V.opacity||"1")<=0||E.push({el:I[H],z:V.zIndex==="auto"?0:parseInt(V.zIndex,10)||0,i:H});}return x.set(v,E),E}function R(v){if(v===document.documentElement)return true;let E=getComputedStyle(v);return !!(E.position==="fixed"||E.position==="sticky"||E.zIndex!=="auto"&&E.position!=="static"||E.zIndex!=="auto"&&v.parentElement&&/flex|grid/.test(getComputedStyle(v.parentElement).display||"")||parseFloat(E.opacity||"1")<1||E.transform&&E.transform!=="none"||E.filter&&E.filter!=="none"||E.isolation==="isolate"||E.mixBlendMode&&E.mixBlendMode!=="normal"||/paint|strict|content/.test(E.contain||""))}function _(v,E,I,H){let V=k(v);if(!V.length||V.length===1&&V[0].el===E)return [];let G=-1/0;for(let Y=I;Y&&Y!==v;Y=Y.parentElement){let Z=getComputedStyle(Y);if(Z.position==="static")continue;let z=Z.zIndex==="auto"?0:parseInt(Z.zIndex,10)||0;z>G&&(G=z);}let N=Array.prototype.indexOf.call(v.children,E),U=[];for(let Y of V){if(Y.el===E||!(Y.z<0?R(v):G>Y.z||G===Y.z&&Y.i<N))continue;let z=Y.el.getBoundingClientRect();z.left>H.left+1||z.top>H.top+1||z.right<H.right-1||z.bottom<H.bottom-1||U.push(Y);}return U.sort((Y,Z)=>Z.z-Y.z||Z.i-Y.i),U.map(Y=>Y.el)}function w(v){try{let I=document.createRange(),H=null;for(let V of Array.from(v.childNodes)){if(V.nodeType!==3||!(V.textContent||"").trim())continue;I.selectNodeContents(V);let G=I.getBoundingClientRect();G.width<=0||G.height<=0||(H=H?{left:Math.min(H.left,G.left),top:Math.min(H.top,G.top),right:Math.max(H.right,G.right),bottom:Math.max(H.bottom,G.bottom)}:{left:G.left,top:G.top,right:G.right,bottom:G.bottom});}if(H)return H}catch{}let E=v.getBoundingClientRect();return {left:E.left,top:E.top,right:E.right,bottom:E.bottom}}function S(v,E){let I=document.documentElement,H=null,V=[{acc:[0,0,0],cover:0},{acc:[0,0,0],cover:0},{acc:[0,0,0],cover:0}],G=Math.max(0,Math.min(1,E[3]));V[0].acc=[E[0]*G,E[1]*G,E[2]*G],V[0].cover=G,V[2].cover=1;let N=1,U=()=>V.some(me=>me.cover<1-1e-9),Y=(me,Pe=1)=>{if(!U())return true;let ve=c(me.backgroundColor||""),Se=p(me);for(let ht of V){if(ht.cover>=1-1e-9)continue;if(Se)return false;if(!ve)continue;let Dt=Math.max(0,Math.min(1,ve[3]))*Pe;if(Dt<=0)continue;let He=Dt*(1-ht.cover);ht.acc[0]+=ve[0]*He,ht.acc[1]+=ve[1]*He,ht.acc[2]+=ve[2]*He,ht.cover+=He;}return true},Z=me=>{let Pe=Math.max(0,Math.min(1,parseFloat(me.opacity||"1")));if(!(Pe>=1)){for(let ve of V)ve.acc=ve.acc.map(Se=>Se*Pe),ve.cover*=Pe;N*=Pe;}},z=v,ie=null;for(;z&&z!==I&&!(!U()&&!A(z));){let me=getComputedStyle(z);if(ie&&k(z).length){H||(H=w(v));for(let Pe of _(z,ie,v,H)){let ve=getComputedStyle(Pe);if(!Y(ve,Math.max(0,Math.min(1,parseFloat(ve.opacity||"1")))))return null}}if(!Y(me))return null;Z(me),ie=z,z=z.parentElement;}if(z===I){let me=getComputedStyle(I);if(!Y(me))return null;Z(me);}for(let me of V){let Pe=1-me.cover;Pe>0&&(me.acc=me.acc.map(ve=>ve+255*Pe),me.cover=1);}let se=me=>[Math.round(Math.min(255,me.acc[0])),Math.round(Math.min(255,me.acc[1])),Math.round(Math.min(255,me.acc[2]))],fe=V[2].acc.map(me=>Math.min(255,me));return {fg:se(V[0]),bg:se(V[1]),k:N,rest:fe}}function y(v,E,I){return "#"+[v,E,I].map(H=>{let V=Math.max(0,Math.min(255,Math.round(H))).toString(16);return V.length===1?"0"+V:V}).join("")}let C=.1;function F(v,E,I,H=1,V=[0,0,0]){let G=g(E[0],E[1],E[2])>.5;for(let N of [I+C,I]){let U=P(v,E,N,G,H,V)||P(v,E,N,!G,H,V);if(U)return U}return null}function P(v,E,I,H,V,G){let N=0,U=1,Y=null;for(let Z=0;Z<20;Z++){let z=(N+U)/2,ie=H?[v[0]*(1-z),v[1]*(1-z),v[2]*(1-z)]:[v[0]+(255-v[0])*z,v[1]+(255-v[1])*z,v[2]+(255-v[2])*z],se=[Math.round(ie[0]),Math.round(ie[1]),Math.round(ie[2])],fe=[se[0]*V+G[0],se[1]*V+G[1],se[2]*V+G[2]];m(fe,E)>=I?(Y=se,U=z):N=z;}return Y}let M=new Set(["application","button","checkbox","columnheader","combobox","grid","gridcell","group","link","listbox","menu","menubar","menuitem","menuitemcheckbox","menuitemradio","option","radio","radiogroup","row","rowheader","scrollbar","searchbox","separator","slider","spinbutton","switch","tab","tablist","textbox","toolbar","tree","treegrid","treeitem"]);function q(v){if(v.closest("button:disabled, input:disabled, select:disabled, textarea:disabled, optgroup:disabled, option:disabled"))return true;for(let I=v;I&&I.nodeType===1;I=I.parentElement){if(I.getAttribute("aria-disabled")!=="true")continue;let H=(I.getAttribute("role")||"").trim().toLowerCase().split(/\s+/)[0];if(H&&M.has(H))return true}let E=v.closest("label");if(E){let I=E.control;if(I&&(I.disabled||I.getAttribute("aria-disabled")==="true"))return true}return false}let B=document.createTreeWalker(document.body,4),j=new Set,X=[],T=B.nextNode();for(;T;){let v=(T.textContent||"").trim();if(v.length>=2||/[\p{L}\p{N}]/u.test(v)){let E=T.parentElement;E&&!j.has(E)&&(j.add(E),X.push(E));}T=B.nextNode();}for(let v of X){if(isWidget(v)||isHiddenFromAT(v)||!isVisible(v)||q(v))continue;let E=getComputedStyle(v),I=c(E.webkitTextFillColor||E.color||"");if(!I)continue;if(I[3]<.5){let He=E.webkitBackgroundClip||E.backgroundClip||"",Lt=E.backgroundImage||"";if(String(He).includes("text")&&/gradient\(/i.test(Lt)){let br=Array.from(v.childNodes).filter(Bt=>Bt.nodeType===3).map(Bt=>(Bt.textContent||"").trim()).join("");br&&l.push({selector:uniqueSel(v),attribute:"style",currentValue:"gradient-clipped text",message:"contrast: gradient-clipped text \u2014 the glyph colour varies across the gradient, so the ratio cannot be computed; check the lightest stop meets 4.5:1",issueType:"contrast_insufficient",wcag:"1.4.3",context:"background-clip:text gradient text \u2014 glyph color varies across the gradient; contrast cannot be computed from CSS. text="+JSON.stringify(br.slice(0,40)),needsAI:true,needsReview:true,reviewReason:"gradient-clipped text \u2014 verify the lightest gradient stop still meets 4.5:1 against the surrounding background",outerHtml:v.outerHTML.slice(0,200)});}continue}let H=parseFloat(E.fontSize||"16"),V=parseInt(E.fontWeight||"400",10),N=H>=24||H>=18.66&&V>=700?3:4.5,U=Array.from(v.childNodes).filter(He=>He.nodeType===3).map(He=>(He.textContent||"").trim()).join("");if(!U||!hasRenderedText(v))continue;let Y=y(I[0],I[1],I[2]),Z=uniqueSel(v),z=S(v,I),ie=z?z.bg:null;if(ie===null){l.push({selector:Z,attribute:"style",currentValue:Y,message:"contrast: text "+Y+" on a gradient or image background \u2014 the ratio cannot be computed from CSS; check it meets "+N+":1 where the background is lightest/darkest",issueType:"contrast_insufficient",wcag:"1.4.3",context:"fg="+Y+" bg=<gradient-or-image> needs="+N+" text="+JSON.stringify(U.slice(0,40)),needsAI:true,needsReview:true,reviewReason:"background uses gradient or image \u2014 contrast cannot be reliably computed",outerHtml:v.outerHTML.slice(0,200)});continue}let se=z,fe=m(se.fg,ie);if(fe>=N)continue;let me=F([I[0],I[1],I[2]],ie,N,se.k,se.rest);if(!me)continue;let Pe=y(me[0],me[1],me[2]),ve=y(ie[0],ie[1],ie[2]),Se=y(se.fg[0],se.fg[1],se.fg[2]),ht=Se===Y?"":" (shown as "+Se+" after opacity/alpha)",Dt="color:"+Pe+" !important;";l.push({selector:Z,attribute:"style",currentValue:Y,message:"contrast: "+Y+ht+" on "+ve+" is "+fe.toFixed(2)+":1, needs "+N+":1 \u2014 e.g. color "+Pe,issueType:"contrast_insufficient",wcag:"1.4.3",context:"fg="+Se+" bg="+ve+" ratio="+fe.toFixed(2)+" needs="+N+" text="+JSON.stringify(U.slice(0,40)),needsAI:false,fixValue:Dt,outerHtml:v.outerHTML.slice(0,200)});}return l},Vg={name:"contrast",async detect(l){return l.evaluate(fL)}};var pL=()=>{let l="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye]",g=[],m=document.querySelectorAll("marquee, blink");for(let k of Array.from(m)){if(g.length>=30)break;if(k.closest(l))continue;let R=typeof uniqueSel=="function"?uniqueSel(k):k.tagName.toLowerCase();g.push({selector:R,attribute:"aria-hidden",currentValue:k.getAttribute("aria-hidden")||"",issueType:"motion_uncontrollable",wcag:"2.2.2",context:`deprecated ${k.tagName.toLowerCase()} element \u2014 uncontrollable motion`,needsAI:false,manualFix:true,fixValue:"true",outerHtml:(k.outerHTML||"").slice(0,300)});}let p=document.querySelectorAll('img[src*=".gif" i], img[src$=".gif" i]');for(let k of Array.from(p)){if(g.length>=30)break;if(k.closest(l))continue;let R=k.getAttribute("src")||"";if(!/\.gif(\?|#|$)/i.test(R)||typeof isVisible=="function"&&!isVisible(k))continue;let _=k.getBoundingClientRect();if(_.width<=40&&_.height<=40)continue;let w=typeof uniqueSel=="function"?uniqueSel(k):"img";g.push({selector:w,attribute:"data-asw-motion-review",currentValue:"",issueType:"animated_gif_no_pause",wcag:"2.2.2",context:`animated GIF without pause control: ${R.split("/").pop()?.slice(0,60)||R.slice(-60)}`,needsAI:true,outerHtml:(k.outerHTML||"").slice(0,300)});}let b=document.querySelectorAll('meta[http-equiv="refresh"], meta[http-equiv="Refresh"], meta[http-equiv="REFRESH"]');for(let k of Array.from(b)){if(g.length>=30)break;let R=(k.getAttribute("content")||"").trim(),_=parseInt((R.split(/[;,]/)[0]||"").trim(),10);!Number.isFinite(_)||_<=0||g.push({selector:`meta[http-equiv="refresh"][content*="${R.slice(0,20)}"]`,attribute:"data-auto-refresh",currentValue:R,issueType:"auto_refresh",wcag:"2.2.1",context:`auto-refresh every ${_}s \u2014 interrupts screen reader users mid-sentence (WCAG 2.2.1)`,needsAI:false,manualFix:true,outerHtml:(k.outerHTML||"").slice(0,200)});}try{let k=!1,R=!1;for(let _ of Array.from(document.styleSheets)){let w=null;try{w=_.cssRules;}catch{continue}if(w)for(let S of Array.from(w)){let y=S.cssText||"";if(/animation[^;]*\binfinite\b/i.test(y)&&/(keyframes|animation-name)/i.test(y+" "+(S.name||""))&&(k=!0),/prefers-reduced-motion[^{]*\(\s*reduce\s*\)/i.test(y)&&(R=!0),S.cssRules)for(let C of Array.from(S.cssRules)){let F=C.cssText||"";/animation[^;]*\binfinite\b/i.test(F)&&(k=!0);}}}k&&!R&&g.push({selector:"html",attribute:"data-asw-motion-review",currentValue:"",issueType:"motion_without_reduced_motion",wcag:"2.3.3",context:"infinite CSS animation detected without @media (prefers-reduced-motion: reduce) override",needsAI:!0,outerHtml:""});}catch{}let A=/\b(flash(ing)?|blink(ing)?|strobe)\b/i,x=document.querySelectorAll('[class*="flash" i], [class*="blink" i], [class*="strobe" i]');for(let k of Array.from(x)){if(g.length>=30)break;if(k.closest(l)||k.tagName==="BODY"||k.tagName==="HTML")continue;let R=k.className&&typeof k.className=="string"?k.className:"";if(!A.test(R)||typeof isVisible=="function"&&!isVisible(k))continue;let w=getComputedStyle(k).animationDuration,S=9999;if(w){let C=parseFloat(w);Number.isFinite(C)&&(S=/ms/i.test(w)?C:C*1e3);}if(S>333)continue;let y=typeof uniqueSel=="function"?uniqueSel(k):"";g.push({selector:y,attribute:"data-flashing-review",currentValue:"",issueType:"flashing_content",wcag:"2.3.1",context:`class matches flash/blink/strobe with ${S}ms animation-duration \u2014 seizure risk`,needsAI:false,needsReview:true,reviewReason:"WCAG 2.3.1 is met by stopping or slowing the flashing below 3 per second (remove the animation, slow it past 333ms, or add a pause control). aria-hidden does not stop flashing and hides content from assistive tech \u2014 do not apply it.",outerHtml:(k.outerHTML||"").slice(0,300)});}return g},$g={name:"cssAnimations",cap:30,async detect(l){return l.evaluate(pL)}};var mL=()=>{let c=[];function g(A){let x=(A.getAttribute("role")||"").toLowerCase();return x==="presentation"||x==="none"||(A.getAttribute("class")||"").toLowerCase().indexOf("layout")!==-1}function m(A){if(!A)return 0;let x=A.querySelectorAll("th, td"),k=0;for(let R=0;R<x.length;R++){let _=parseInt(x[R].getAttribute("colspan")||"1",10);k+=isNaN(_)||_<1?1:_;}return k}function p(A){let x=A.querySelectorAll("tr"),k=[];for(let R=0;R<x.length;R++){let _=x[R];_.closest("table")===A&&k.push(_);}return k}let b=document.querySelectorAll("table");for(let A=0;A<b.length&&!(c.length>=30);A++){let x=b[A];if(isWidget(x)||!isVisible(x)||g(x))continue;let k=p(x);if(k.length<=1)continue;let R=k[0],_=m(R);if(_<=1)continue;let w=uniqueSel(x),S=getNearbyContext(x),y=x.querySelectorAll("img, svg, picture").length>=2;if(y&&!(x.textContent||"").trim()){if(x.querySelector("input, select, textarea, button")&&(y=false),y&&x.querySelector("th, thead, caption, [scope], [headers]")&&(y=false),y){let v=Array.from(x.querySelectorAll("img")).map(E=>(E.getAttribute("alt")||"").trim().toLowerCase()).filter(Boolean);new Set(v).size<v.length&&(y=false);}}else if(y){let v=x.querySelectorAll("td, th"),E=0;for(let I=0;I<v.length&&y;I++){let H=v[I];if(H.closest("table")!==x)continue;let V=(H.textContent||"").trim(),G=!!H.querySelector("img, svg, picture");if(!V&&!G)continue;E++;let N=H.querySelectorAll("a[href]");y=H.tagName==="TD"&&N.length===1&&G&&(N[0].textContent||"").trim()===V;}E<2&&(y=false);}if(y){c.push({selector:w,attribute:"role",currentValue:x.getAttribute("role")||"",issueType:"missing_table_header",wcag:"1.3.1",context:JSON.stringify({reason:"table lays out images / image links only \u2014 likely a layout table",rows:k.length,cols:_,nearbyHeading:S.nearbyHeading}),needsAI:false,fixValue:"presentation",needsReview:true,reviewReason:'table of images or single image-links is likely layout \u2014 confirm, then mark it role="presentation" (do not add headers)',outerHtml:(x.outerHTML||"").slice(0,300)});continue}let C=null,F=x.querySelectorAll("thead");for(let v=0;v<F.length;v++)if(F[v].closest("table")===x){C=F[v];break}let P=C&&C.querySelector("tr")!==null,M=false;for(let v=0;v<k.length&&!M;v++){let E=k[v].children;for(let I=0;I<E.length&&!M;I++){let H=E[I],V=(H.tagName||"").toLowerCase();if(V!=="td"&&V!=="th")continue;if(V==="th"){M=true;break}let G=(H.getAttribute("headers")||"").trim();if(!G)continue;let N=G.split(/\s+/);for(let U=0;U<N.length;U++){let Y=document.getElementById(N[U]);if(Y&&(Y.tagName||"").toLowerCase()==="th"&&Y.closest("table")===x){M=true;break}}}}if(!P&&!M&&c.length<30&&c.push({selector:w,attribute:"thead",currentValue:C?"empty":"",issueType:"missing_table_header",wcag:"1.3.1",context:JSON.stringify({reason:C?"<thead> has no <tr>":"no <thead> element",rows:k.length,cols:_,nearbyHeading:S.nearbyHeading}),needsAI:false,fixValue:"wrap-first-row",outerHtml:(x.outerHTML||"").slice(0,300)}),_>2){let v=R.querySelectorAll("th, td"),E=v.length>0;for(let I=0;I<v.length;I++)if((v[I].tagName||"").toLowerCase()!=="td"){E=false;break}if(E)for(let I=0;I<v.length&&!(c.length>=30);I++){let H=v[I],V=uniqueSel(H),G=(H.textContent||"").trim().slice(0,60);c.push({selector:V,attribute:"role",currentValue:H.getAttribute("role")||"",issueType:"missing_table_header",wcag:"1.3.1",context:JSON.stringify({reason:"first-row <td> in data table \u2014 should be <th>",cellText:G,colIndex:I,nearbyHeading:S.nearbyHeading}),needsAI:false,fixValue:"columnheader",outerHtml:(H.outerHTML||"").slice(0,300)});}}let q=[],B=[],j=new Map;for(let v=0;v<k.length;v++){let E=k[v],I=0;for(let H=0;H<E.children.length;H++){let V=E.children[H],G=(V.tagName||"").toLowerCase();if(G!=="td"&&G!=="th")continue;for(;q.some(Z=>Z.lane===I&&Z.untilRow>v);)I++;let N=parseInt(V.getAttribute("colspan")||"1",10);(isNaN(N)||N<1)&&(N=1);let U={rowIdx:v,lane:I,span:N,headers:(V.getAttribute("headers")||"").trim()};G==="td"?B.push(U):j.set(V,U);let Y=parseInt(V.getAttribute("rowspan")||"1",10)||1;if(Y>1)for(let Z=0;Z<N;Z++)q.push({lane:I+Z,untilRow:v+Y});I+=N;}}let X=(v,E)=>E.lane<v.lane+v.span&&E.lane+E.span>v.lane,T=x.querySelectorAll("th");for(let v=0;v<T.length&&!(c.length>=30);v++){let E=T[v];if(E.closest("table")!==x)continue;let I=(E.getAttribute("scope")||"").trim().toLowerCase();if(I==="col"||I==="row"||I==="colgroup"||I==="rowgroup")continue;let H=false;if((E.getAttribute("headers")||"").trim())H=true;else {let se=(E.getAttribute("id")||"").trim();if(se)for(let fe=0;fe<B.length;fe++){let me=B[fe].headers;if(me&&me.split(/\s+/).indexOf(se)!==-1){H=true;break}}}if(H)continue;let V=E.closest("tr"),G=E.closest("thead")!==null,N=false;V&&k.length>0&&k[0]===V&&(N=true);let U=false;if(V){let se=V.querySelectorAll("th, td");se.length>0&&se[0]===E&&(U=true);}let Y="col";G||N?Y="col":U&&(Y="row");let Z=j.get(E);if(!H&&Z){if(Y==="row")H=B.some(se=>se.rowIdx===Z.rowIdx&&!se.headers&&se.lane>=Z.lane+Z.span);else if(H=B.some(se=>se.rowIdx>Z.rowIdx&&!se.headers&&X(Z,se)),!H)for(let se=0;se<T.length;se++){let fe=j.get(T[se]);if(!fe||fe.rowIdx<=Z.rowIdx||!X(Z,fe))continue;let me=k[fe.rowIdx],Pe=me?me.children:[];if(Pe.length>0&&Pe[0]===T[se]&&T[se].closest("table")===x){H=true;break}}}if(H)continue;let z=uniqueSel(E),ie=(E.textContent||"").trim().slice(0,60);c.push({selector:z,attribute:"scope",currentValue:I,issueType:"missing_table_scope",wcag:"1.3.1",context:JSON.stringify({reason:"<th> missing scope attribute",inferred:Y,inThead:G,firstRow:N,firstCol:U,headerText:ie}),needsAI:false,fixValue:Y,outerHtml:(E.outerHTML||"").slice(0,300)});}}return c},jg={name:"dataTables",cap:30,async detect(l){return l.evaluate(mL)}};var gL=()=>{let c=[];for(let g of document.querySelectorAll("img[alt]")){if(c.length>=30)break;let m=g;if((m.getAttribute("alt")||"").trim()!=="")continue;let p=(m.getAttribute("title")||"").trim().replace(/\s+/g," ");if(!p||isWidget(m))continue;let b=(m.getAttribute("role")||"").toLowerCase();b==="presentation"||b==="none"||m.getAttribute("aria-hidden")==="true"||m.closest('[aria-hidden="true"]')||(m.getAttribute("aria-label")||"").trim()||(m.getAttribute("aria-labelledby")||"").trim()||isVisible(m)&&c.push({selector:uniqueSel(m),attribute:"data-asw-decorative-title",currentValue:"",issueType:"decorative_image_with_title",wcag:"1.1.1",context:'image with alt="" also has title="'+p.slice(0,80)+'"',needsAI:true,needsReview:true,reviewReason:'WCAG 1.1.1 Non-text Content: this image has an empty alt (declared decorative) but also a title of "'+p.slice(0,80)+'". Violation when the picture conveys information the title names (a logo, a chart, a labelled icon), so the empty alt hides it. Pass when the picture is purely decorative and the title only repeats nearby text or adds nothing.',outerHtml:(m.outerHTML||"").slice(0,300)});}return c},zg={name:"decorativeImageTitle",cap:30,async detect(l){return l.evaluate(gL)}};var hL=()=>{let l="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",c=/^[^\p{L}\p{N}\s]*$/u,g=/^[\s\u00A0\u2000-\u200F\u2028-\u202F]*$/,p=[],b=["link","button","menuitem","menuitemcheckbox","menuitemradio","tab","checkbox","radio","switch","option","treeitem","gridcell","combobox","textbox","searchbox","slider","spinbutton","img","heading","listitem","none","presentation","generic","navigation","region","group","dialog"],A=R=>{let _=R.computedRole;if(typeof _=="string")return _.toLowerCase();let w=(R.getAttribute("role")||"").trim().toLowerCase().split(/\s+/);for(let S of w)if(b.indexOf(S)>=0)return S;return R.hasAttribute("href")?"link":"generic"},x=R=>{let _=A(R);if(_==="link"||R.hasAttribute("href"))return true;if(_&&_!=="generic")return false;let w=R.getAttribute("tabindex");if(w===null)return false;let S=parseInt(w,10);return !isNaN(S)&&S>=0},k=document.querySelectorAll("a");for(let R of k){if(p.length>=50)break;if(!x(R)||R.closest(l)||R.getAttribute("aria-hidden")==="true"||R.getAttribute("role")==="presentation"||R.closest('[aria-hidden="true"]')||!isVisible(R))continue;let _=getAccessibleName(R);if(_&&_.length>0&&!g.test(_)&&!c.test(_))continue;let w=R.querySelectorAll("img[alt]"),S="";for(let T of w){let v=(T.getAttribute("alt")||"").trim();v&&(S+=v+" ");}if(S.trim())continue;let y=R.getAttribute("aria-labelledby");if(y&&typeof __resolveIdRefs=="function"&&__resolveIdRefs(y))continue;let C=uniqueSel(R),F=R.getAttribute("href")||"",P=(R.textContent||"").trim(),M=getNearbyContext(R),q="";P&&g.test(P)?q="[whitespace only]":P&&c.test(P)&&(q=P);let B=(document.documentElement.getAttribute("lang")||"").trim(),j=[];R.closest("nav")&&j.push("inside nav"),M.nearbyHeading&&j.push("heading: "+M.nearbyHeading),F&&j.push("href: "+F.slice(0,120)),j.push("parent: "+M.parentTag),B&&j.push("page language: "+B);let X={selector:C,attribute:"aria-label",currentValue:q,issueType:"empty_link",wcag:"2.4.4",context:j.join(" | "),needsAI:true,outerHtml:R.outerHTML.slice(0,300)};p.push(X);}return p},Gg={name:"emptyLinks",cap:50,async detect(l){return l.evaluate(hL)}};var vL=()=>{let c=[],g=new Set;function m(_){return (_||"").trim()}function p(_){let w=m(_.getAttribute("aria-label")||"");if(w)return w;let S=_.getAttribute("aria-labelledby");if(S){let C=S.split(/\s+/),F="";for(let P=0;P<C.length;P++){let M=document.getElementById(C[P]);M&&(F+=" "+(M.textContent||""));}if(m(F))return m(F)}let y=m(_.getAttribute("title")||"");return y||""}let b=document.querySelectorAll("fieldset");for(let _=0;_<b.length&&!(c.length>=30);_++){let w=b[_];if(isWidget(w)||!isVisible(w)||isHiddenFromAT(w))continue;if(p(w)){g.add(w);continue}let S=null,y=w.querySelectorAll("legend");for(let B=0;B<y.length;B++)if(y[B].closest("fieldset")===w){S=y[B];break}let C=S!==null,F=S?m(S.textContent||""):"";if(C&&F){g.add(w);continue}let P=getNearbyContext(w),M=w.querySelectorAll("input, select, textarea"),q=uniqueSel(w);c.push({selector:q,attribute:"aria-label",currentValue:"",issueType:"missing_fieldset_legend",wcag:"1.3.1",context:JSON.stringify({reason:C?"fieldset has empty <legend>":"fieldset missing <legend>",controlCount:M.length,nearbyHeading:P.nearbyHeading,parentTag:P.parentTag}),needsAI:true,outerHtml:(w.outerHTML||"").slice(0,300)}),g.add(w);}let A=document.querySelectorAll('[role="group"], [role="radiogroup"]');for(let _=0;_<A.length&&!(c.length>=30);_++){let w=A[_];if(isWidget(w)||!isVisible(w)||isHiddenFromAT(w)||g.has(w))continue;if(p(w)){g.add(w);continue}let S=w.getAttribute("role")||"",y=getNearbyContext(w),C=w.querySelectorAll("input, select, textarea");if(S==="group"&&w.querySelectorAll('input:not([type="hidden"]), select, textarea, [role="radio"], [role="checkbox"], [role="switch"], [role="textbox"], [role="combobox"], [role="spinbutton"], [role="slider"]').length===0)continue;let F=uniqueSel(w);c.push({selector:F,attribute:"aria-label",currentValue:"",issueType:"missing_fieldset_legend",wcag:"1.3.1",context:JSON.stringify({reason:'role="'+S+'" container without accessible name',role:S,controlCount:C.length,nearbyHeading:y.nearbyHeading,parentTag:y.parentTag}),needsAI:true,outerHtml:(w.outerHTML||"").slice(0,300)}),g.add(w);}let x={},k=document.querySelectorAll('input[type="radio"], input[type="checkbox"]');for(let _=0;_<k.length;_++){let w=k[_];if(isWidget(w)||!isVisible(w)||isHiddenFromAT(w))continue;let S=w.getAttribute("name")||"";if(!S)continue;let y=w.closest("form"),C=y?y.getAttribute("id")||y.getAttribute("action")||y.tagName:"no-form",F=(w.getAttribute("type")||"").toLowerCase(),P=C+"::"+F+"::"+S;x[P]||(x[P]=[]),x[P].push(w);}let R=Object.keys(x);for(let _=0;_<R.length&&!(c.length>=30);_++){let w=x[R[_]];if(w.length<3)continue;let S=w[0],y=S.closest('fieldset, [role="group"], [role="radiogroup"]'),C=false;if(y){C=true;for(let j=1;j<w.length;j++)if(!y.contains(w[j])){C=false;break}}if(C&&y)continue;let F=S.parentElement;for(;F&&F!==document.body;){let j=true;for(let X=1;X<w.length;X++)if(!F.contains(w[X])){j=false;break}if(j)break;F=F.parentElement;}if(!F||F===document.body||g.has(F))continue;let P=(S.getAttribute("type")||"").toLowerCase(),M=S.getAttribute("name")||"",q=getNearbyContext(S),B=uniqueSel(F);c.push({selector:B,attribute:"role",currentValue:F.getAttribute("role")||"",issueType:"missing_fieldset_legend",wcag:"1.3.1",context:JSON.stringify({reason:"unwrapped "+P+" group ("+w.length+' inputs share name="'+M+'")',inputType:P,inputCount:w.length,name:M,nearbyHeading:q.nearbyHeading,parentTag:q.parentTag}),needsAI:false,fixValue:P==="radio"?"radiogroup":"group",outerHtml:(F.outerHTML||"").slice(0,300)}),g.add(F);}return c},Ug={name:"fieldsetLegend",cap:30,async detect(l){return l.evaluate(vL)}};var bL=()=>{let l=[],c=document.querySelectorAll('header, nav, div, [class*="header"], [class*="navbar"], [class*="sticky"], [role="banner"]'),g=0;for(let m of Array.from(c)){let p=getComputedStyle(m);if(p.display==="none"||p.visibility==="hidden"||p.position!=="sticky"&&p.position!=="fixed")continue;let b=m.getBoundingClientRect();if(b.top>50||b.bottom<=0)continue;let A=Math.round(b.height);A<40||A>240||A>g&&(g=A);}if(g>0){let m=window.scrollX,p=window.scrollY,b=0,A=0;try{let k=[],R=new Set;document.querySelectorAll('a[href^="#"]').forEach(_=>{let w=_.getAttribute("href").slice(1);if(!w)return;let S=document.getElementById(w);S&&!R.has(S)&&(R.add(S),k.push(S));});for(let _ of k){if(A>=8)break;let w=getComputedStyle(_);if(w.display==="none"||w.visibility==="hidden")continue;A++,_.scrollIntoView({block:"start"});let S=_.getBoundingClientRect(),y=Math.max(S.height,1);Math.max(0,Math.min(S.bottom,g)-Math.max(S.top,0))/Math.min(y,g)>=.5&&b++;}}catch{}try{window.scrollTo(m,p);}catch{}let x=`scroll-margin-top: ${g+8}px; scroll-padding-top: ${g+8}px;`;A>0&&b>0?l.push({selector:"html",attribute:"style",currentValue:"",issueType:"focus_obscured_by_sticky",wcag:"2.4.11",context:`sticky header height: ${g}px \u2014 ${b}/${A} in-page anchor targets land under it on jump`,needsAI:false,fixValue:x}):A===0&&l.push({selector:"html",attribute:"style",currentValue:"",issueType:"focus_obscured_by_sticky",wcag:"2.4.11",context:`sticky header height: ${g}px \u2014 no in-page anchor targets available to verify obscuring behaviorally`,needsAI:false,needsReview:true,reviewReason:"sticky top bar present; could not verify focus/jump obscuring automatically \u2014 check skip-link and anchor landing positions, or set scroll-padding-top preventively",fixValue:x});}return l},Wg={name:"focusObscured",async detect(l){return l.evaluate(bL)}};var Xg={name:"focusVisible",cap:40,async detect(l){let c=typeof l.keyboard?.press=="function";try{await l.evaluate(()=>{let g=document.activeElement;window[Symbol.for("wa.prevFocus")]=g&&g!==document.body&&g!==document.documentElement?g:null,window[Symbol.for("wa.prevScroll")]=[window.scrollX,window.scrollY];let m=getSelection();window[Symbol.for("wa.prevSelection")]=m?Array.from({length:m.rangeCount},(p,b)=>m.getRangeAt(b).cloneRange()):[];});}catch{}if(c)try{await l.keyboard.press("Tab");}catch{}return l.evaluate(async g=>{let p=[],b=["a[href]","button",'input:not([type="hidden"])',"select","textarea",'[role="button"]','[role="link"]','[role="menuitem"]','[role="tab"]','[tabindex]:not([tabindex="-1"])'].join(",");try{document.activeElement?.blur?.();}catch{}let A=document.querySelectorAll(b),x=Symbol.for("wa.prevFocus"),k=window[x]??null;try{delete window[x];}catch{}for(let R of A){if(p.length>=40)break;if(typeof isWidget=="function"&&isWidget(R)||typeof isHiddenFromAT=="function"&&isHiddenFromAT(R)||typeof isVisible=="function"&&!isVisible(R)||!R.offsetParent&&R.tagName!=="BODY")continue;let _=R.hasAttribute("style"),w=R.getAttribute("style"),S=["transition-property","transition-duration","transition-timing-function","transition-delay","transition-behavior"],y=R.style?S.map(H=>[H,R.style.getPropertyValue(H),R.style.getPropertyPriority(H)]):[];R.style&&(R.style.transition="none");let C=()=>{if(R.style){R.style.removeProperty("transition");for(let[H,V,G]of y)V&&R.style.setProperty(H,V,G);!_&&!R.getAttribute("style")?R.removeAttribute("style"):_&&w!==null&&w.trim()===""&&R.getAttribute("style")===""&&R.setAttribute("style",w);}},F=getComputedStyle(R),P=F.outline,M=F.outlineWidth,q=F.outlineStyle,B=F.boxShadow,j=F.border,X=F.backgroundColor;try{R.focus({preventScroll:!0});}catch{C();continue}if(document.activeElement!==R){C();continue}let T=()=>{let H=getComputedStyle(R),V=(H.outlineStyle||"").toLowerCase(),G=parseFloat(H.outlineWidth||"0"),N=H.outline!==P,U=V!=="none"&&V!=="hidden"&&G>0,Y=H.boxShadow!==B&&H.boxShadow!=="none"&&H.boxShadow!=="",Z=H.border!==j,z=H.backgroundColor!==X;return N&&U||Y||Z||z},v=T(),E=typeof R.getAnimations=="function"&&R.getAnimations().some(H=>H.playState==="running"&&!("transitionProperty"in H));if(!v&&!E){let H=V=>typeof requestAnimationFrame=="function"?requestAnimationFrame(V):setTimeout(V,16);if(await new Promise(V=>setTimeout(()=>H(()=>V()),20)),document.activeElement!==R){C();continue}v=T();}if(C(),v||parseFloat(M)>0&&q!=="none")continue;let I=typeof uniqueSel=="function"?uniqueSel(R):R.tagName.toLowerCase();p.push({selector:I,pseudo:":focus-visible",attribute:"style",currentValue:q+" "+M,issueType:"focus_not_visible",wcag:"2.4.7",context:`${R.tagName.toLowerCase()} has no visible focus indicator \u2014 outline, box-shadow, border, and background all unchanged on focus (apply the style under :focus-visible)`,needsAI:false,fixValue:"outline: 2px solid #2563eb !important;outline-offset: 2px !important;",outerHtml:R.outerHTML.slice(0,200),...g?{}:{needsReview:true,reviewReason:"Focus indicator could not be verified with a real keyboard event; may use a keyboard-only (:focus-visible) pattern \u2014 verify by tabbing to it."}});}try{document.activeElement?.blur?.();}catch{}try{k&&k.isConnected&&k.focus({preventScroll:!0});}catch{}try{let R=Symbol.for("wa.prevScroll"),_=window[R];delete window[R],_&&window.scrollTo({left:_[0],top:_[1],behavior:"instant"});}catch{}try{let R=Symbol.for("wa.prevSelection"),_=window[R];delete window[R];let w=getSelection();if(w&&_){w.removeAllRanges();for(let S of _)w.addRange(S);}}catch{}return p},c)}};var yL=()=>{let c=[],g=["new","register","signup","sign-up","sign_up","create","change","reset"],m=["confirm","verify","retype","re-type","repeat","again"];function p(w){if(!w)return false;let S=" "+((w.getAttribute("id")||"")+" "+(w.getAttribute("class")||"")+" "+(w.getAttribute("name")||"")+" "+(w.getAttribute("action")||"")).toLowerCase()+" ";for(let y=0;y<g.length;y++)if(S.indexOf(g[y])!==-1)return true;return false}function b(w){let S=((w.getAttribute("name")||"")+" "+(w.getAttribute("id")||"")+" "+(w.getAttribute("placeholder")||"")+" "+(w.getAttribute("aria-label")||"")).toLowerCase();for(let y=0;y<m.length;y++)if(S.indexOf(m[y])!==-1)return true;return false}let A=document.querySelectorAll('input[type="password"], input[type="Password"]');for(let w of A){if(c.length>=30)break;let S=w;if(isWidget(S)||isHiddenFromAT(S)||!isVisible(S))continue;let y=(S.getAttribute("autocomplete")||"").trim().toLowerCase();if(b(S)){if(y==="new-password")continue;let q=uniqueSel(S);c.push({selector:q,attribute:"autocomplete",currentValue:y,issueType:"missing_autocomplete",wcag:"1.3.5",context:"confirm password field | name: "+(S.getAttribute("name")||"")+" | id: "+(S.getAttribute("id")||""),needsAI:false,fixValue:"new-password",outerHtml:(S.outerHTML||"").slice(0,300)});continue}if(y)continue;let F=S.form||S.closest("form"),P=p(F),M=uniqueSel(S);c.push({selector:M,attribute:"autocomplete",currentValue:"",issueType:"missing_autocomplete",wcag:"1.3.5",context:(P?"new/signup/change password form":"login form")+" | name: "+(S.getAttribute("name")||"")+" | id: "+(S.getAttribute("id")||""),needsAI:false,fixValue:P?"new-password":"current-password",outerHtml:(S.outerHTML||"").slice(0,300)});}let x=document.querySelectorAll("form"),k=/\*|\brequired\b|\bmandatory\b/i;for(let w of x){if(c.length>=30)break;let S=w;if(isWidget(S)||!isVisible(S))continue;let y=S.querySelectorAll("input[required], select[required], textarea[required]");if(!y.length)continue;let C=0;for(let B of y)isVisible(B)&&C++;if(C===0)continue;let F=S.querySelectorAll('input:not([type="hidden"]):not([type="submit"]):not([type="button"]), select, textarea'),P=0;for(let B of F)isVisible(B)&&P++;if(C>=P||(S.getAttribute("data-asw-required-hint")||"").trim())continue;let M=(S.textContent||"").trim();if(k.test(M))continue;let q=uniqueSel(S);c.push({selector:q,attribute:"data-asw-required-hint",currentValue:"",issueType:"missing_required_indicator",wcag:"3.3.2",context:`form has ${C} required input(s) but no visible "*" / "required" / "mandatory" marker`,needsAI:true,outerHtml:(S.outerHTML||"").slice(0,300)});}let R='input[type="submit" i], input[type="image" i], button:not([type]), button[type="submit" i], button[type=""]',_='input:not([type="hidden"]):not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="image"]), select, textarea';for(let w of x){if(c.length>=30)break;let S=w;if(isWidget(S)||!isVisible(S)||isHiddenFromAT(S))continue;let y=[];for(let B of S.querySelectorAll(_))isVisible(B)&&y.push(B);if(y.length===0||S.querySelector(R))continue;let C=S.getAttribute("id");if(C){let B=false;for(let j of document.querySelectorAll(R))if(j.getAttribute("form")===C){B=true;break}if(B)continue}if(((S.getAttribute("role")||"").toLowerCase()==="search"||!!S.closest('[role="search"]'))&&y.length===1)continue;let P=y.slice(0,4).map(B=>B.tagName.toLowerCase()+(B.tagName==="INPUT"?"["+(B.getAttribute("type")||"text")+"]":"")).join(", "),M=[];for(let B of S.querySelectorAll('button:not([type="reset" i]), input[type="button" i], [role="button"]')){if(M.length>=3)break;let j=B;if(!isVisible(j))continue;let X=((j.tagName==="INPUT"?j.getAttribute("value"):j.textContent)||j.getAttribute("aria-label")||"").trim().replace(/\s+/g," ").slice(0,30);M.push('"'+X+'"');}if(M.length&&!(S.getAttribute("action")||"").trim())continue;let q=M.length?" Buttons present that are not a submit control (type=button or role=button): "+M.join(", ")+".":"";c.push({selector:uniqueSel(S),attribute:"data-asw-submit-control",currentValue:"",issueType:"form_missing_submit",wcag:"3.2.2",context:`form with ${y.length} visible field(s) (${P}) and no submit control`,needsAI:true,needsReview:true,reviewReason:"WCAG 3.2.2 On Input: this form has "+y.length+" visible field(s) ("+P+") and no submit control (no submit button, input[type=submit|image], or outside button via form=). Violation only when changing a field or pressing Enter causes an unexpected change of context (navigation, submission, reload) with no button to ask for it. Pass when it is a script-driven or search-style form with no such surprise."+q,outerHtml:(S.outerHTML||"").slice(0,300)});}return c},Kg={name:"formAttributes",cap:30,async detect(l){return l.evaluate(yL)}};var Jg={en:"the and of to is in that for with on are this you it be as at by from or your our we not have has was will can an all more about which their they",de:"der die das und ist nicht mit sich des den dem ein eine einen einer auf f\xFCr von zu im in auch sie wir ihr bei oder wird sind werden \xFCber nach aus wie noch nur unsere ihre sowie k\xF6nnen zum zur",nl:"de het een en van is dat op te in zijn voor met niet aan er ook als bij door wordt om uit worden naar onze uw jouw maar dan nog deze kunt wij u ons of wat die kan was",fr:"le la les et des est une du que pour dans qui pas sur au avec ce plus sont vous nous par ou leur cette mais \xEAtre aux votre vos notre nos",es:"el la los las y es una del que por para con se en no su sus m\xE1s al como pero este esta son nuestro nuestra nuestros usted tambi\xE9n de",it:"il lo la gli le e \xE8 di che per in una un del della con non sono pi\xF9 dei delle nel alla come anche questo questa nostro nostra nostri ti",pt:"o a os as e \xE9 de do da dos das que para com n\xE3o uma um em no na por mais seu sua nosso nossa voc\xEA tamb\xE9m s\xE3o",da:"og er det en at til af p\xE5 med for ikke den som de har vi kan vil fra jeres vores ogs\xE5 eller jer hvis efter",sv:"och \xE4r det en att till av p\xE5 med f\xF6r inte den som har vi kan ska fr\xE5n ocks\xE5 eller v\xE5ra v\xE5r din dina",nb:"og er det en at til av p\xE5 med for ikke den som har vi kan skal fra ogs\xE5 eller v\xE5re v\xE5r deg dine",pl:"i w na z do \u017Ce si\u0119 jest nie to o od jak dla po przez s\u0105 lub oraz nasz nasze mo\u017Ce tak\u017Ce jego",cs:"a v na se je \u017Ee s z do o to jako pro by nen\xED jsou nebo tak\xE9 ale jeho na\u0161e",ca:"el la els les i \xE9s de del dels que per amb en un una no es al als com m\xE9s per\xF2 aquest aquesta aquests s\xF3n seu seva nostre nostra hi ho ja tamb\xE9 o",gl:"o a os as e \xE9 de do da dos das que para con non unha un en no na nos nas por m\xE1is seu s\xFAa cando tam\xE9n pero este esta moi",af:"die en van is in dat op te vir nie met om wat sy hy hulle ons jy u was het aan as by ook maar of kan sal hierdie n ek julle deur baie"},Vo=new Map(Object.entries(Jg).map(([l,c])=>[l,new Set(c.split(" "))])),Yg=(()=>{let l=new Map;for(let[g,m]of Object.entries(Jg))for(let p of new Set(m.split(" "))){let b=l.get(p)||[];b.push(g),l.set(p,b);}let c=new Map;for(let[g,m]of l)c.set(g,m.map(p=>[p,1/m.length]));return c})(),wL=[["ko",/\p{Script=Hangul}/gu],["el",/\p{Script=Greek}/gu],["he",/\p{Script=Hebrew}/gu],["th",/\p{Script=Thai}/gu],["ja",/[\p{Script=Hiragana}\p{Script=Katakana}]/gu],["zh",/\p{Script=Han}/gu]],ai;function xL(l){if(!/^[a-z]{2,3}$/.test(l))return false;if(ai===void 0)try{ai=new Intl.DisplayNames(["en"],{type:"language",fallback:"none"});}catch{ai=null;}if(!ai)return l.length===2;try{let c=ai.of(l);return !!c&&c.toLowerCase()!==l}catch{return false}}function ta(l){let c=String(l||"").trim().toLowerCase().match(/^([a-z]{2,3})(?:[-_][a-z0-9]{2,8})*$/);return !c||c[1]==="und"||c[1]==="mul"||c[1]==="zxx"?"":xL(c[1])?c[1]:""}function Zg(l){if(!l)return "";let c;try{c=new URL(/^[a-z][a-z0-9+.-]*:\/\//i.test(l)?l:`https://${l}`);}catch{return ""}let g=/^([a-z]{2})(?:[-_][a-z]{2,4})?$/i,m=c.hostname.toLowerCase().split(".");if(m.length>=3&&g.test(m[0])){let b=ta(m[0]);if(b)return b}let p=c.pathname.split("/").filter(Boolean)[0]||"";return g.test(p)?ta(p):""}function Qg(l){let c=String(l||"").slice(0,2e4),g={lean:null,confident:false,ruledOut:new Set};if(!c.trim())return g;let m=(c.match(/\p{L}/gu)||[]).length;if(m>=40){let j=wL.map(([I,H])=>[I,(c.match(H)||[]).length]),X=j.find(([I])=>I==="ja")[1],T=j.find(([I])=>I==="zh")[1],v=X>=Math.max(5,(X+T)*.05)?[["ja",X+T]]:[["zh",T]],E=[...j.filter(([I])=>I!=="ja"&&I!=="zh"),...v].sort((I,H)=>H[1]-I[1]);if(E[0][1]/m>=.6)return {lean:E[0][0],confident:true,ruledOut:new Set(Vo.keys())}}let p=c.toLowerCase().match(/\p{L}+/gu)||[];if(!p.length)return g;let b={};for(let j of p){let X=Yg.get(j);if(X)for(let[T,v]of X)b[T]=(b[T]||0)+v;}let A=new Map;for(let j of p)Yg.has(j)&&A.set(j,(A.get(j)||0)+1);let x=new Map,k=new Map;for(let[j,X]of Vo){let T=0,v=0;for(let[E,I]of A)X.has(E)&&(T+=I,v++);x.set(j,T/p.length),k.set(j,v);}let R=p.length>=30,_=new Set(R?[...x].filter(([,j])=>j<.12).map(([j])=>j):[]),w=(j,X)=>{let T=Vo.get(j),v=Vo.get(X),E=0;for(let[I,H]of A)T.has(I)&&!v.has(I)&&(E+=H);return E},S=Object.entries(b).sort((j,X)=>X[1]-j[1]);if(!S.length)return {...g,ruledOut:_};let[y,C]=S[0],F=S[1]?.[1]||0,M=(R?[...x].filter(([j,X])=>j!==y&&X>=.12).map(([j])=>j):[]).every(j=>{let X=w(y,j);return X>=5&&X>=w(j,y)*2}),q=R&&C>=5&&(x.get(y)||0)>=.12&&(k.get(y)||0)>=6&&M,B=C>=2&&(q||C>=F*1.5)?y:null;return {lean:B,confident:!!B&&q,ruledOut:_}}function Cu(l){let c=[...new Set((l.declared||[]).map(ta).filter(Boolean))],g=Zg(l.url),m=Qg(l.text);if(m.confident&&m.lean)return c.some(p=>p!==m.lean)||g&&g!==m.lean?null:{lang:m.lean,source:"text"};if(c.length===1){let p=c[0];return m.lean&&m.lean!==p||m.ruledOut.has(p)||g&&g!==p?null:{lang:p,source:"declared"}}return c.length>1?null:g&&m.lean===g&&!m.ruledOut.has(g)?{lang:g,source:"url"}:null}function AL(){let l=document.documentElement;if(!l||(l.getAttribute("lang")||"").trim())return null;let c=String(typeof location<"u"&&location.href||""),g=b=>b.replace(/[#?].*$/,"").replace(/\/+$/,""),m=null;try{let b=document.querySelectorAll('link[rel="alternate"][hreflang]');for(let A=0;A<b.length;A++){let x=b[A],k=x.getAttribute("hreflang")||"";if(k&&k.toLowerCase()!=="x-default"&&x.href&&g(x.href)===g(c)){m=k;break}}}catch{}return {url:c,text:(()=>{let b=document.body;if(!b)return "";if(typeof b.innerText=="string")return b.innerText.slice(0,2e4);let A=b.cloneNode(true);return A.querySelectorAll('script, style, noscript, template, [hidden], [aria-hidden="true"]').forEach(x=>x.remove()),String(A.textContent||"").replace(/\s+/g," ").slice(0,2e4)})(),declared:[l.getAttribute("xml:lang"),document.querySelector('meta[http-equiv="content-language" i]')?.getAttribute("content")??null,document.querySelector('meta[name="language" i]')?.getAttribute("content")??null,document.querySelector('meta[property="og:locale"]')?.getAttribute("content")??null,document.body?.getAttribute("lang")??null,m]}}function _L(l){if(!l)return [];let c=Cu(l),g={selector:"html",attribute:"lang",currentValue:"",issueType:"missing_document_language",wcag:"3.1.1",needsAI:false};return c?[{...g,context:`Document language not declared; detected "${c.lang}" from page ${c.source}`,fixValue:c.lang}]:[{...g,context:"Document language not declared, and the page text does not settle which language it is (short, mixed, conflicting, or a language without a detector list) \u2014 set <html lang> by hand",manualFix:true}]}var eh={name:"htmlLang",async detect(l){let c=await l.evaluate(AL);return _L(c)}};var DL=()=>{let l="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],m=document.querySelectorAll("iframe");for(let p of m){if(g.length>=50)break;if(p.closest(l))continue;let b=false;for(let q=p;q;q=q.parentElement)if((q.getAttribute("aria-hidden")||"").trim()==="true"){b=true;break}let A=(p.getAttribute("role")||"").trim().toLowerCase();if(b||A==="presentation"||A==="none"||p.closest("[inert]"))continue;let x=/^[\t\n\f\r ]*([-+]?\d+)/.exec(p.getAttribute("tabindex")||"");if(x&&parseInt(x[1],10)<0)continue;let k=getComputedStyle(p);if(p.getClientRects().length===0||k.visibility==="hidden"||k.visibility==="collapse"||(p.getAttribute("src")||"").trim().toLowerCase().indexOf("javascript:")===0)continue;let R="",_=(p.getAttribute("aria-labelledby")||"").trim();if(_){let q=_.split(/\s+/);for(let B=0;B<q.length;B++){let j=document.getElementById(q[B]);j&&(R+=" "+(j.textContent||""));}R=R.trim();}if(R||(R=(p.getAttribute("aria-label")||"").trim()),R)continue;let w=(p.getAttribute("title")||"").trim(),S=w.length===0;if(!S)continue;let y=(p.getAttribute("src")||"").toLowerCase(),C=uniqueSel(p),F=getNearbyContext(p),P=(document.documentElement.getAttribute("lang")||"").trim(),M="src: "+y.slice(0,120)+(F.nearbyHeading?" | heading: "+F.nearbyHeading:"")+(F.cardText?" | nearby text: "+F.cardText:"")+(P?" | page language: "+P:"");S&&g.push({selector:C,attribute:"title",currentValue:w,issueType:"missing_label",wcag:"4.1.2",context:M,needsAI:true,outerHtml:p.outerHTML.slice(0,300)});}return g},th={name:"iframeTitle",cap:50,async detect(l){return l.evaluate(DL)}};var EL=()=>{let l="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",c=["hidden","submit","button","reset","image","checkbox","radio","file","range","color"],m=[],p={email:"email",tel:"tel",password:"current-password"},b=[{pattern:"organization",autocomplete:"organization"},{pattern:"telephone",autocomplete:"tel"},{pattern:"first-name",autocomplete:"given-name"},{pattern:"first_name",autocomplete:"given-name"},{pattern:"last-name",autocomplete:"family-name"},{pattern:"last_name",autocomplete:"family-name"},{pattern:"firstname",autocomplete:"given-name"},{pattern:"postcode",autocomplete:"postal-code"},{pattern:"birthday",autocomplete:"bday"},{pattern:"lastname",autocomplete:"family-name"},{pattern:"province",autocomplete:"address-level1"},{pattern:"username",autocomplete:"username"},{pattern:"website",autocomplete:"url"},{pattern:"address",autocomplete:"street-address"},{pattern:"company",autocomplete:"organization"},{pattern:"country",autocomplete:"country"},{pattern:"mobile",autocomplete:"tel"},{pattern:"postal",autocomplete:"postal-code"},{pattern:"street",autocomplete:"street-address"},{pattern:"e-mail",autocomplete:"email"},{pattern:"email",autocomplete:"email"},{pattern:"phone",autocomplete:"tel"},{pattern:"state",autocomplete:"address-level1"},{pattern:"fname",autocomplete:"given-name"},{pattern:"lname",autocomplete:"family-name"},{pattern:"city",autocomplete:"address-level2"},{pattern:"bday",autocomplete:"bday"},{pattern:"name",autocomplete:"name"},{pattern:"zip",autocomplete:"postal-code"},{pattern:"url",autocomplete:"url"}],A=document.querySelectorAll("input, select, textarea");for(let x of A){if(m.length>=50)break;if(x.closest(l))continue;let k=x,R=(k.getAttribute("type")||"text").toLowerCase();if(c.includes(R)||k.getAttribute("autocomplete")||!isVisible(k))continue;let _="";if(p[R]&&(_=p[R]),!_){let S=(k.getAttribute("name")||"").toLowerCase(),y=(k.getAttribute("id")||"").toLowerCase(),C=(k.getAttribute("placeholder")||"").toLowerCase(),F=S+" "+y+" "+C;for(let P of b)if(F.includes(P.pattern)){_=P.autocomplete;break}}if(!_)continue;if(_==="country"){let S=false;if(k.tagName==="SELECT"){let y=Array.from(k.options).map(C=>(C.value||"").trim()).filter(Boolean);S=y.length>0&&y.every(C=>/^[A-Za-z]{2}$/.test(C));}S||(_="country-name");}let w=uniqueSel(k);m.push({selector:w,attribute:"autocomplete",currentValue:"",issueType:"identify_input_purpose",wcag:"1.3.5",context:"type: "+R+" | name: "+(k.getAttribute("name")||"")+" | id: "+(k.getAttribute("id")||""),needsAI:false,fixValue:_});}return m},rh={name:"inputPurpose",cap:50,async detect(l){return l.evaluate(EL)}};var SL=()=>{let l="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],m=['a[href]:not([href=""])',"button:not([disabled])",'input:not([type="hidden"]):not([disabled])',"select:not([disabled])","textarea:not([disabled])",'[role="button"]:not([aria-disabled="true"])','[role="link"]:not([aria-disabled="true"])','[role="menuitem"]:not([aria-disabled="true"])','[role="tab"]:not([aria-disabled="true"])','[role="checkbox"]:not([aria-disabled="true"])','[role="radio"]:not([aria-disabled="true"])'].join(",");function p(S){let y=S.getBoundingClientRect();if(y.width===0&&y.height===0)return false;let C=-window.scrollX,F=-window.scrollY,P=document.documentElement,M=getComputedStyle(S).position;if(M==="fixed")return false;let q=M==="absolute";for(let B=S.parentElement;B&&B!==document.body&&B!==P;B=B.parentElement){let j=getComputedStyle(B);if(q){if(j.position==="static")continue;q=false;}if(/auto|scroll/.test(j.overflowX+" "+j.overflowY))return false;let X=j.overflowX==="hidden"||j.overflowX==="clip",T=j.overflowY==="hidden"||j.overflowY==="clip";if(!X&&!T)continue;let v=B.getBoundingClientRect();if(X&&(y.right<=v.left||y.left>=v.right)||T&&(y.bottom<=v.top||y.top>=v.bottom))return true;if(M=j.position,M==="fixed")return false;M==="absolute"&&(q=true);}return y.right<=C||y.bottom<=F||y.left>=C+P.scrollWidth||y.top>=F+P.scrollHeight}let b='[role="tablist"],[aria-roledescription="carousel" i],[aria-roledescription="slide" i],[class*="slick"],[class*="swiper"],[class*="owl"],[class*="splide"],[class*="flickity"]',A='nav,section,article,aside,main,header,footer,form,ul,ol,dl,[role="navigation"],[role="region"],[role="main"],[role="complementary"],[role="banner"],[role="contentinfo"],[role="list"],[role="form"],[role="search"]',x='a[href],area[href],button,input:not([type="hidden"]),select,textarea,summary,iframe';function k(S){if(S.tagName==="A"){let C=S.href;if(C){for(let F of document.querySelectorAll("a[href]"))if(!(F===S||F.href!==C||F.tabIndex<0)&&!F.closest('[aria-hidden="true"],[hidden],[inert]')&&!(typeof isVisible=="function"&&!isVisible(F)))return "another focusable link to the same href exists"}}if(S.closest(b))return "inside a slider / carousel / tablist that manages its own tab order";if(S.hasAttribute("aria-controls")||S.hasAttribute("aria-selected"))return "carries aria-controls / aria-selected (a widget manages its state)";if(S.closest('[inert],[aria-hidden="true"]'))return "inside an inert or aria-hidden container";let y=S.parentElement?.closest(A);if(y){let C=0;for(let F of y.querySelectorAll(x))F!==S&&F.getAttribute("tabindex")?.trim()==="-1"&&C++;if(C>=2)return `${C} other controls in the same <${y.tagName.toLowerCase()}> also carry tabindex="-1" (inert by design)`}for(let C=S.parentElement;C&&C!==document.body&&!C.matches(x);C=C.parentElement){let F=parseInt(C.getAttribute("tabindex")||"",10);if(!Number.isFinite(F)||F<0)continue;let P=[...C.querySelectorAll(x)];if(P.length>=2&&P.every(M=>M.getAttribute("tabindex")?.trim()==="-1"))return 'a focusable ancestor owns focus and every control inside it carries tabindex="-1"';break}return ""}let R=document.querySelectorAll(m);for(let S of R){if(g.length>=30)break;if(S.closest(l)||!S.hasAttribute("tabindex"))continue;let y=S.getAttribute("tabindex")||"",C=parseInt(y,10);if(!Number.isFinite(C)||C===0||S.getAttribute("aria-disabled")==="true"||S.getAttribute("aria-hidden")==="true"||S.closest('[aria-hidden="true"]')||S.closest("[hidden]"))continue;let F=S.closest('[role="dialog"],[role="alertdialog"],dialog,[role="menu"],[role="listbox"]');if(F&&!(F.hasAttribute("open")||F.getAttribute("aria-modal")==="true"||F.getAttribute("aria-hidden")!=="true")||typeof isVisible=="function"&&!isVisible(S)||C<0&&p(S))continue;let P=(S.getAttribute("role")||"").toLowerCase();if(C<0&&S.closest('[role="tablist"],[role="menu"],[role="menubar"],[role="listbox"],[role="tree"],[role="treegrid"],[role="grid"],[role="radiogroup"],[role="toolbar"]'))continue;if(C<0&&S.tagName==="A"){if((S.getAttribute("aria-current")||"").trim().toLowerCase()==="page")continue;let E=(S.getAttribute("href")||"").trim();if(E&&!E.includes("#"))try{let I=new URL(E,document.baseURI),H=new URL(location.href);if(I.hash="",H.hash="",I.href===H.href)continue}catch{}}let q=typeof uniqueSel=="function"?uniqueSel(S):"",B=typeof getNearbyContext=="function"?getNearbyContext(S):{parentTag:S.tagName.toLowerCase(),nearbyHeading:""},j,X,T=C<0?k(S):"";C<0?(j="keyboard_trap",X="2.1.1"):(j="focus_order_disruption",X="2.4.3");let v=[];v.push("tabindex: "+C),v.push("tag: "+S.tagName.toLowerCase()),P&&v.push("role: "+P),B.nearbyHeading&&v.push("heading: "+B.nearbyHeading),v.push("parent: "+B.parentTag),T&&v.push('author tabindex="-1" looks intentional: '+T),g.push({selector:q,attribute:"tabindex",currentValue:String(C),issueType:j,wcag:X,context:v.join(" | "),needsAI:false,fixValue:"0",...T?{manualFix:true,reviewReason:`the author's tabindex="-1" looks intentional (${T}); tabindex="0" could add a duplicate or out-of-sync tab stop. Confirm the control must be reachable on its own before applying.`}:{},outerHtml:(S.outerHTML||"").slice(0,300)});}let _=/\b(?:this|(?:event|evt|e)\.(?:target|currentTarget))\.focus\s*\(\s*\)/,w=/\b(?:if|else|switch|while|for)\b|&&|\|\||\?/;for(let S of document.querySelectorAll("[onblur]")){if(g.length>=30)break;if(S.closest(l))continue;let y=S.getAttribute("onblur")||"";!_.test(y)||w.test(y)||S.matches('[disabled], [aria-disabled="true"]')||S.closest('[aria-hidden="true"], [hidden]')||typeof isVisible=="function"&&!isVisible(S)||g.push({selector:typeof uniqueSel=="function"?uniqueSel(S):S.tagName.toLowerCase(),attribute:"onblur",currentValue:y.slice(0,100),issueType:"keyboard_trap_self_focus",wcag:"2.1.2",context:"tag: "+S.tagName.toLowerCase()+" | onblur returns focus to the same element, so keyboard focus cannot leave it",needsAI:false,outerHtml:(S.outerHTML||"").slice(0,300)});}return g},nh={name:"keyboardTrap",cap:30,async detect(l){return l.evaluate(SL)}};var kL=()=>{let l="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",c=[],m=document.querySelectorAll('button, a[href], [role="button"], [role="link"], input[type="submit"], input[type="button"]');for(let p of Array.from(m)){if(p.closest(l)||typeof isVisible=="function"&&!isVisible(p))continue;let b="",A=[],x=[];try{let X=/(?:^|[\s_-])(?:icon|material-icons|material-symbols(?:-\w+)?|fa|fas|far|fab|fal|glyphicon|dashicons)(?:[\s_-]|$)/i,T=/icon|awesome|glyph|material symbols|dashicons/i,v=!1;try{v=T.test(getComputedStyle(p).fontFamily||"");}catch{}let E=Ne=>parseFloat(Ne||"0")||0,I=Ne=>{if(Ne.hasAttribute("hidden"))return !0;let Ie=(Ne.getAttribute("style")||"").toLowerCase().replace(/\s+/g,"");if(/clip:rect\(0/.test(Ie)||/clip-path:inset\((50|100)%/.test(Ie))return !0;if(/position:(absolute|fixed)/.test(Ie)){if(/(width|height):[01](px)?(;|!|$)/.test(Ie))return !0;let nt=Ie.match(/(?:left|top):(-\d+)/);if(nt&&parseInt(nt[1],10)<=-999)return !0}return !1},H=(Ne,Ie)=>{if(Ne.hasAttribute("hidden")||E(Ie.fontSize)===0)return !0;let nt=(Ie.clip||"").replace(/\s+/g,"");if(/^rect\(0(px)?,?0(px)?,?0(px)?,?0(px)?\)$/.test(nt)||/inset\((50|100)%\)/.test(Ie.clipPath||""))return !0;let Et=Ne.getBoundingClientRect();return !!(/hidden|clip/.test(Ie.overflow||Ie.overflowX+" "+Ie.overflowY)&&(Et.width<=1||Et.height<=1)||(Ie.position==="absolute"||Ie.position==="fixed")&&(E(Ie.left)<=-999||E(Ie.top)<=-999||Et.right<=0||Et.bottom<=-window.scrollY))},V=!1,G='h1, h2, h3, h4, h5, h6, [role="heading"]',N=0;try{N=E(getComputedStyle(p).fontSize);}catch{}let U=Ne=>{try{let Ie=getComputedStyle(Ne);return {size:E(Ie.fontSize),weight:parseInt(Ie.fontWeight||"400",10)||400}}catch{return {size:0,weight:400}}},Y=Ne=>{let Ie=Ne.closest(G);return !!Ie&&p.contains(Ie)},Z=Ne=>{for(let Ie=Ne;Ie&&Ie!==p;Ie=Ie.parentElement)try{let nt=getComputedStyle(Ie).display||"";if(nt&&!/^inline(?!-block)|^contents$/.test(nt))return Ie}catch{return p}return p},z=Ne=>Ne.split(/\s+/).filter(Ie=>/[\p{L}\p{N}]/u.test(Ie)).length,ie=document.createTreeWalker(p,NodeFilter.SHOW_TEXT),se;for(;se=ie.nextNode();){let Ne=se.parentElement;if(!Ne)continue;let Ie=(se.textContent||"").trim();if(!Ie||Ne===p&&v)continue;let nt=!1,Et=!1;for(let st=Ne;st&&st!==p;st=st.parentElement){if(st.tagName==="KBD"&&(Et=!0),st.tagName==="NOSCRIPT"||st.tagName==="SCRIPT"||st.tagName==="STYLE"||st.tagName==="TEMPLATE"){nt=!0;break}if(st.getAttribute("aria-hidden")==="true"){nt=!0;break}if(X.test(st.getAttribute("class")||"")||X.test(st.getAttribute("id")||"")){nt=!0;break}try{let lt=getComputedStyle(st);if(lt.display==="none"||lt.visibility==="hidden"){nt=!0;break}if(parseFloat(lt.opacity||"1")===0){nt=!0;break}if(T.test(lt.fontFamily||"")){nt=!0;break}if(H(st,lt)){nt=!0;break}}catch{if(I(st)){nt=!0;break}st.tagName==="SPAN"&&(V=!0);}}!nt&&/[\p{L}\p{N}]/u.test(Ie)&&x.push({text:Ie,kbd:Et,p:Ne});}let fe=0,me=x.length;for(;fe<me&&x[fe].kbd;)fe++;for(;me>fe&&x[me-1].kbd;)me--;let Pe=fe<me?x.slice(fe,me):x,ve=Pe.map(Ne=>U(Ne.p)),Se=Pe.map(Ne=>Y(Ne.p)),ht=ve.map(Ne=>Ne.size).filter(Ne=>Ne>0),Dt=ht.length?Math.min(...ht):0,He=ht.length?Math.max(...ht):0,Lt=Math.min(...ve.map(Ne=>Ne.weight)),br=0;ve.forEach((Ne,Ie)=>{!Se[Ie]&&Ne.weight<600&&Ne.size>br&&(br=Ne.size);});let Bt=Pe.map(Ne=>Z(Ne.p)),Gt=Ne=>Pe.some((Ie,nt)=>Bt[nt]===Bt[Ne]&&ve[nt].weight<600&&!Se[nt]),Tt=Pe.map((Ne,Ie)=>Se[Ie]||He>Dt&&ve[Ie].size>=He||ve[Ie].weight>=600&&Lt<600&&ve[Ie].size>=br&&!Gt(Ie)),tr=Pe.filter((Ne,Ie)=>Tt[Ie]),Ee=Pe;if(tr.length&&tr.length<Pe.length){let Ne=z(tr.map(st=>st.text).join(" ")),Ie=(st,lt)=>{for(let Jt=st.p;Jt&&Jt!==p;Jt=Jt.parentElement)if(Jt.tagName==="TIME"||Jt.tagName==="SMALL")return !0;return N>0&&ve[lt].size>0&&ve[lt].size<N},nt=st=>{let lt=Bt[st];if(tr.some(Vr=>lt.contains(Vr.p)))return !1;let Jt=z(Pe.filter((Vr,it)=>!Tt[it]&&Bt[it]===lt).map(Vr=>Vr.text).join(" "));return Jt>=5&&Jt>Ne},Et=Pe.filter((st,lt)=>Tt[lt]||!Ie(st,lt)&&!nt(lt));Et.length&&(Ee=Et);}for(let Ne of Ee)A.push(Ne.text);b=V?"":A.join(" ").trim().toLowerCase();}catch{b=((p.innerText!=null?p.innerText:p.textContent)||"").trim().toLowerCase();}if(!b||!/[\p{L}\p{N}]/u.test(b)||/^\p{L}$/u.test(b))continue;let R=/[\p{L}\p{N}\p{M}]/u,_=(p.getAttribute("aria-label")||"").trim().toLowerCase();if(!_){let X=p.getAttribute("aria-labelledby");X&&(_=(typeof __resolveIdRefs=="function"?__resolveIdRefs(X):"").toLowerCase());}if(!_)continue;let w=X=>{let T=X.toLowerCase().replace(/\([^)]*\)/g," ");return (/[\p{L}\p{N}]/u.test(T)?T:X.toLowerCase()).replace(/[\p{S}\u2026*]/gu," ").replace(/\s+/g," ").trim().normalize("NFC")},S=w(_),y=/[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Thai}\p{Script=Lao}\p{Script=Khmer}\p{Script=Myanmar}]/u,C=(X,T)=>!X||!R.test(X)||y.test(X)||y.test(T),F=(X,T)=>{if(T<=0)return "";let v=X.charCodeAt(T-1);return v>=56320&&v<=57343&&T>=2?X.slice(T-2,T):X.charAt(T-1)},P=(X,T)=>{let v=X.codePointAt(T);return v===void 0?"":String.fromCodePoint(v)},M=X=>{let T=X.substring(0,40);if(!T)return true;let v=X.length>=40,E=P(T,0),I=F(T,T.length);for(let H=0;;){let V=S.indexOf(T,H);if(V<0)return false;if(C(F(S,V),E)&&(v||C(P(S,V+T.length),I)))return true;H=V+1;}};if(M(w(b))||A.length>1&&M(w(A.join(""))))continue;if(A.length>1){let X=true,T=0;for(let v of A){let E=w(v.toLowerCase());if(!E)continue;let I=E.slice(0,40),H=-1;for(let V=T;;){let G=S.indexOf(I,V);if(G<0)break;let N=C(F(S,G),P(I,0)),U=I.length>=40||C(P(S,G+I.length),F(I,I.length));if(N&&U){H=G;break}V=G+1;}if(H<0){X=false;break}T=H+I.length;}if(X)continue}let q=typeof uniqueSel=="function"?uniqueSel(p):"",B=typeof getNearbyContext=="function"?getNearbyContext(p):{parentTag:p.tagName.toLowerCase(),nearbyHeading:""},j=[];j.push("visible: "+b.slice(0,40)),j.push("aria-label: "+_.slice(0,60)),B.nearbyHeading&&j.push("heading: "+B.nearbyHeading),j.push("parent: "+B.parentTag),c.push({selector:q,attribute:"aria-label",currentValue:_,issueType:"label_in_name",wcag:"2.5.3",context:j.join(" | "),needsAI:true,outerHtml:(p.outerHTML||"").slice(0,300)});}return c},ah={name:"labelInName",cap:40,async detect(l){return l.evaluate(kL)}};var CL=()=>{let l="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye],[class*=EquallyAI]",g=["click here","click","here","read more","more","link","this","go","info","details","learn more","see more","view","open","tap"],m=[];function p(_){if(!_)return "";let w=_.split("#")[0];return w.length>1&&w.charAt(w.length-1)==="/"&&(w=w.substring(0,w.length-1)),w}function b(_){let w=(_.getAttribute("aria-label")||"").trim();return w||(_.textContent||"").trim().replace(/\s+/g," ")}function A(_){return !!_.closest('nav, [role="navigation"], [role="menubar"], [class*=breadcrumb], [aria-label*="breadcrumb" i]')}let x={},k=document.querySelectorAll("a[href]");for(let _=0;_<k.length;_++){let w=k[_];if(w.closest(l)||w.getAttribute("aria-hidden")==="true"||!isVisible(w))continue;let S=w.getAttribute("href")||"";if(!S)continue;let y=S.toLowerCase();if(y.charAt(0)==="#"||y.indexOf("javascript:")===0||y.indexOf("mailto:")===0||y.indexOf("tel:")===0)continue;let C=w.href||S,F=p(C);if(!F||A(w))continue;let P=(w.textContent||"").trim(),M=!!w.querySelector("img, svg, picture");if(!P&&M)continue;let q=b(w);if(!q)continue;let B=q.toLowerCase();B===y||B===C.toLowerCase()||(x[F]||(x[F]=[]),x[F].push(w));}let R=Object.keys(x);for(let _=0;_<R.length&&!(m.length>=30);_++){let w=x[R[_]];if(!w||w.length<2)continue;let S={},y="";for(let M=0;M<w.length;M++){let q=b(w[M]),B=q.toLowerCase();S[B]=true,q.length>y.length&&(y=q);}if(Object.keys(S).length<2)continue;let F=y.toLowerCase().trim();if(F.length<5)continue;let P=false;for(let M=0;M<g.length;M++)if(F===g[M]){P=true;break}if(!P)for(let M=0;M<w.length&&!(m.length>=30);M++){let q=w[M],B=b(q);if(B.toLowerCase()===F)continue;let j=uniqueSel(q);m.push({selector:j,attribute:"aria-label",currentValue:B,issueType:"link_consistency",wcag:"3.2.4",context:"Same href as "+w.length+' link(s) on this page with different text (e.g. "'+y.slice(0,80)+'"). If these labels also differ across pages, unify the VISIBLE text \u2014 do not mask it with aria-label.',needsAI:false,needsReview:true,reviewReason:"WCAG 3.2.4 is a cross-page criterion; same-page label variation may be intentional and cannot be auto-verified from one page",outerHtml:q.outerHTML.slice(0,300)});}}return m},ih={name:"linkConsistency",cap:30,async detect(l){return l.evaluate(CL)}};var TL=()=>{let c=[],g=[".pdf",".doc",".docx",".xls",".xlsx",".zip",".csv",".ppt",".pptx",".txt",".rtf",".epub"],m="";try{m=window.location&&window.location.hostname||"";}catch{m="";}m=(m||"").toLowerCase();function p(C,F){if(!C||!F)return false;if(C===F||C.endsWith("."+F)||F.endsWith("."+C))return true;let P=M=>{let q=M.split(".");if(q.length<=2)return M;let B=q[q.length-1],j=q[q.length-2],X=["co","com","net","org","ac","gov","edu"],T=B.length===2&&X.indexOf(j)>=0?3:2;return q.slice(-T).join(".")};return P(C)===P(F)}function b(C){return C.indexOf("www.")===0?C.slice(4):C}function A(C){if(!C)return "";let F=C.toLowerCase();if(F.charAt(0)==="#"||F.charAt(0)==="/"||F.charAt(0)==="?"||F.indexOf("javascript:")===0||F.indexOf("mailto:")===0||F.indexOf("tel:")===0)return "";try{return (new window.URL(C,window.location.href).hostname||"").toLowerCase()}catch{return ""}}function x(C){if(!C)return "";let F=C,P=F.indexOf("?");P>=0&&(F=F.slice(0,P));let M=F.indexOf("#");M>=0&&(F=F.slice(0,M)),F=F.toLowerCase();for(let q=0;q<g.length;q++){let B=g[q];if(F.length>=B.length&&F.slice(F.length-B.length)===B)return B}return ""}function k(C){let F=[],P=(C.getAttribute("aria-label")||"").trim();P&&F.push(P);let M=(C.getAttribute("title")||"").trim();M&&F.push(M);let q=C.getAttribute("aria-labelledby");if(q)try{let B=typeof __resolveIdRefs=="function"?__resolveIdRefs(q):"";B&&F.push(B);}catch{}return F.push((C.textContent||"").trim()),F.join(" ").toLowerCase()}function R(C,F,P){let M="";try{typeof getAccessibleName=="function"&&(M=(getAccessibleName(C)||"").trim());}catch{}let q=(F||P||M||C.textContent||"").replace(/\s+/g," ").trim();return q||(C.getAttribute("href")||"").trim().replace(/^https?:\/\//i,"").replace(/\/+$/,"")}let _=(document.documentElement.getAttribute("lang")||"").trim();function w(C){return "current name: "+C.slice(0,200)+(_?" | page language: "+_:"")+" | keep the current name and add the notice, in the page language"}let S=document.querySelectorAll("a"),y=S.length;for(let C=0;C<y&&!(c.length>=50);C++){let F=S[C];if(!F||isWidget(F)||F.getAttribute("aria-hidden")==="true")continue;try{if(F.closest&&F.closest('[aria-hidden="true"]'))continue}catch{}if(!isVisible(F))continue;let P=F.getAttribute("href");if(P==null)continue;let M=String(P).trim();if(!M)continue;let q=M.toLowerCase(),B=k(F),j=(F.getAttribute("rel")||"").toLowerCase(),X=uniqueSel(F),T=(F.getAttribute("target")||"").toLowerCase(),v=(F.outerHTML||"").slice(0,300);if(M==="#"||q.indexOf("javascript:")===0||M.charAt(0)==="#"&&M.length>1)continue;let E=x(q);if(E){let G=F.hasAttribute&&F.hasAttribute("download"),N=B.indexOf(E)>=0||new RegExp("\\b"+E.slice(1)+"\\b").test(B)||B.indexOf("download")>=0;if(!G&&!N){let U=R(F,(F.getAttribute("aria-label")||"").trim(),"");c.push({selector:X,attribute:"aria-label",currentValue:(F.getAttribute("aria-label")||"").trim(),issueType:"download_link_warning",wcag:"3.2.5",context:"download link \u2014 file type "+E+" | href: "+M.slice(0,120)+" | "+w(U),needsAI:true,outerHtml:v});continue}}let I=A(M),H=q.indexOf("http://")===0||q.indexOf("https://")===0||q.indexOf("//")===0,V=!!I&&!!m&&!p(b(I),b(m));if(T==="_blank"){let G=j.indexOf("noopener")>=0||j.indexOf("noreferrer")>=0,N=B.indexOf("new window")>=0||B.indexOf("new tab")>=0||B.indexOf("opens in")>=0;if(!N){let U=(F.getAttribute("aria-label")||"").trim(),Y="",Z=F.getAttribute("aria-labelledby")||"";if(!U&&Z)try{typeof __resolveIdRefs=="function"&&(Y=(__resolveIdRefs(Z)||"").trim());}catch{}let z=R(F,U,Y),ie=[];G||ie.push("missing rel=noopener"),N||ie.push('missing "new window" hint'),ie.push("href: "+M.slice(0,120)),c.push({selector:X,attribute:"aria-label",currentValue:(F.getAttribute("aria-label")||"").trim(),issueType:"new_window_link",wcag:"3.2.5",context:ie.join(" | ")+" | opens in a new window | "+w(z),needsAI:true,outerHtml:v});continue}}if(V&&H){let G=j.indexOf("external")>=0,N=B.indexOf("external")>=0||B.indexOf("opens in")>=0||B.indexOf("new window")>=0||B.indexOf("new tab")>=0;if(!G&&!N){let U=(F.getAttribute("aria-label")||"").trim(),Y="",Z=F.getAttribute("aria-labelledby")||"";if(!U&&Z)try{typeof __resolveIdRefs=="function"&&(Y=(__resolveIdRefs(Z)||"").trim());}catch{}let z=R(F,U,Y);c.push({selector:X,attribute:"aria-label",currentValue:(F.getAttribute("aria-label")||"").trim(),issueType:"external_link_warning",wcag:"3.2.5",context:"external: "+I+" (page: "+m+") | href: "+M.slice(0,120)+" | "+w(z),needsAI:true,outerHtml:v});}}}return c},oh={name:"linkWarnings",cap:50,async detect(l){return l.evaluate(TL)}};var RL=()=>{let l="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye],[class*=ae-exclude],[id*=ae_app],[id*=ae_],[class*=EquallyAI]",g=[],m=new Set,p=document.querySelectorAll('main, [role="main"]'),b=[];return p.forEach(A=>{let x=getComputedStyle(A);x.display!=="none"&&x.visibility!=="hidden"&&b.push(A);}),p.forEach(A=>{if(g.length>=10||A.closest(l)||A.getAttribute("aria-hidden")!=="true")return;let x=getComputedStyle(A);if(x.display==="none"||x.visibility==="hidden"||A.closest('[role="dialog"]')||A.closest('[role="alertdialog"]')||A.closest("dialog")||b.some(w=>w!==A&&w.getAttribute("aria-hidden")!=="true"))return;let R=A.parentElement;for(;R&&R!==document.body&&R!==document.documentElement;){if(R.getAttribute("aria-hidden")==="true")return;R=R.parentElement;}let _=uniqueSel(A);m.has(_)||(m.add(_),g.push({selector:_,attribute:"aria-hidden",currentValue:"true",issueType:"main_content_hidden",wcag:"4.1.2",context:JSON.stringify({tag:A.tagName.toLowerCase(),role:A.getAttribute("role")||"",suggestion:'Main content container has aria-hidden="true", hiding the entire page from assistive technology. Set aria-hidden="false" to restore visibility.'}),needsAI:false,fixValue:"false",outerHtml:(A.outerHTML||"").slice(0,300)}));}),g},sh={name:"mainContentHidden",cap:10,async detect(l){return l.evaluate(RL)}};var FL=()=>{let c=[];function g(A){return !!(!A||isWidget(A)||(A.getAttribute("aria-hidden")||"").trim().toLowerCase()==="true")}function m(A){return (A.outerHTML||"").slice(0,300)}let p=document.querySelectorAll("video");for(let A of p){if(c.length>=10)break;let x=A;if(g(x))continue;let k=x.hasAttribute("controls"),R=x.hasAttribute("autoplay"),_=x.hasAttribute("muted"),w=R||!x.paused&&!x.ended,S=typeof isVisible=="function"?isVisible(x):true;if(!k&&w&&S&&(c.push({selector:uniqueSel(x),attribute:"controls",currentValue:"",issueType:"missing_media_controls",wcag:"2.2.2",context:"video element missing player controls",needsAI:false,fixValue:"",outerHtml:m(x)}),c.length>=10))break;R&&!_&&c.push({selector:uniqueSel(x),attribute:"muted",currentValue:"",issueType:"unsafe_autoplay",wcag:"1.4.2",context:"video autoplays with sound \u2014 add muted",needsAI:false,fixValue:"",outerHtml:m(x)});}let b=document.querySelectorAll("audio");for(let A of b){if(c.length>=10)break;let x=A;if(g(x))continue;let k=x.hasAttribute("controls"),R=x.hasAttribute("autoplay"),_=R||!x.paused&&!x.ended;if(!k&&_&&(c.push({selector:uniqueSel(x),attribute:"controls",currentValue:"",issueType:"missing_media_controls",wcag:"2.2.2",context:"audio element missing player controls",needsAI:false,fixValue:"",outerHtml:m(x)}),c.length>=10))break;R&&c.push({selector:uniqueSel(x),attribute:"remove_attribute",currentValue:"autoplay",issueType:"unsafe_autoplay",wcag:"1.4.2",context:"audio element autoplays \u2014 remove autoplay attribute",needsAI:false,fixValue:"autoplay",outerHtml:m(x)});}return c},lh={name:"mediaControls",cap:10,async detect(l){return l.evaluate(FL)}};var IL=()=>{let l="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],m=[],p=/^(image|photo|img|picture|pic|untitled|banner|hero|\d{1,2})$/i,b=/^(IMG[-_]?\d|DSC[-_]?\d|DSCN?\d|(?:screenshot|Screen\s*Shot|Bildschirmfoto|capture(?:\s+d['’]\s?[ée]cran)?)(?:$|\s+(?:from|at)\s+\d|[\s_-]*[\d(])|image\s*\d|foto|photo[-_]?\d|P\d{4,}|GOPR\d|DJI[-_]\d)/i,A=/pixel|track|beacon|doubleclick|facebook\.com\/tr\b/i,x=(w,S)=>{let y=w.getAttribute(S);if(y===null)return false;let C=parseFloat(y);return !isNaN(C)&&C<=1},k=document.querySelectorAll("img");for(let w of k){if(g.length>=50)break;if(w.closest(l)||w.closest("template, noscript, script"))continue;let S=w.getAttribute("src")||"",y=w.getAttribute("alt");if(S.startsWith("data:")||x(w,"width")||x(w,"height"))continue;let C=w.naturalWidth||0,F=w.naturalHeight||0;if(C>0&&F>0&&C<=3&&F<=3||w.getAttribute("role")==="presentation"||w.getAttribute("role")==="none"||w.getAttribute("aria-hidden")==="true")continue;let P=C||w.width,M=F||w.height,q=w.getBoundingClientRect(),B=!isVisible(w)||P<=2&&M<=2||q.width<=2&&q.height<=2||!!w.closest('[aria-hidden="true"]');if(B&&(y!==null||m.length>=50||A.test(S)))continue;let j=(w.getAttribute("aria-label")||"").trim(),X=(w.getAttribute("aria-labelledby")||"").trim();if(j||X)continue;if(y===null){let H=uniqueSel(w),V=getNearbyContext(w),G=[],N=w.closest("figure");if(N){let z=N.querySelector("figcaption");z&&G.push("figcaption: "+(z.textContent||"").trim().slice(0,80));}V.nearbyHeading&&G.push("heading: "+V.nearbyHeading);let U=w.closest("a");if(U){let z=U.getAttribute("href")||"",ie=(U.textContent||"").trim().replace(/\s+/g," ");ie&&G.push("link text: "+ie.slice(0,60)),z&&G.push("link href: "+z.slice(0,80));}S&&G.push("src: "+S.slice(0,120)),G.push("parent: "+V.parentTag);let Y=S;try{Y=new URL(S,document.baseURI).href;}catch{}(B?m:g).push({selector:H,attribute:"alt",currentValue:"",issueType:"missing_alt",wcag:"1.1.1",context:G.join(" | "),needsAI:true,imageSrc:Y,outerHtml:w.outerHTML.slice(0,300)});continue}let T=(y||"").trim();if(T==="")continue;let v=/\.(jpg|jpeg|png|gif|webp|svg|bmp|ico)$/i.test(T),E=p.test(T),I=b.test(T);if(v||E||I){let H=uniqueSel(w),V=getNearbyContext(w),G=[];V.nearbyHeading&&G.push("heading: "+V.nearbyHeading),S&&G.push("src: "+S.slice(0,120)),G.push("parent: "+V.parentTag);let N=S;try{N=new URL(S,document.baseURI).href;}catch{}g.push({selector:H,attribute:"alt",currentValue:T,issueType:"missing_alt",wcag:"1.1.1",context:G.join(" | "),needsAI:true,imageSrc:N,outerHtml:w.outerHTML.slice(0,300)});}}let R=globalThis;for(let w of Array.from(document.querySelectorAll("object"))){if(g.length>=50)break;if(w.closest(l)||w.closest('[aria-hidden="true"]')||w.getAttribute("aria-hidden")==="true")continue;let S=(w.getAttribute("role")||"").trim().toLowerCase();if(S==="presentation"||S==="none"||!R.isVisible(w))continue;let y=w.getAttribute("data")||"",C=(w.getAttribute("type")||"").trim().toLowerCase(),F=C.startsWith("image/"),P=/\.(png|jpe?g|gif|webp|bmp|svg)(\?[^#]*)?(#.*)?$/i.test(y);if(!y||!(F||!C&&P)||(w.getAttribute("aria-label")||"").trim()||(w.getAttribute("title")||"").trim())continue;let M=(w.getAttribute("aria-labelledby")||"").trim();M&&M.split(/\s+/).some(q=>(document.getElementById(q)?.textContent||"").trim())||w.closest('a, button, [role="button"], [role="link"]')||g.push({selector:R.uniqueSel(w),attribute:"aria-label",currentValue:"",issueType:"missing_alt",wcag:"1.1.1",context:"object image has no accessible name (fallback content does not name an object) | data: "+y.slice(0,120),needsAI:false,outerHtml:w.outerHTML.slice(0,300)});}let _=Array.from(document.querySelectorAll("script:not([src])")).map(w=>w.textContent||"");for(let w of Array.from(document.querySelectorAll("canvas"))){if(g.length>=50)break;if(w.closest(l)||w.closest('[aria-hidden="true"]')||w.getAttribute("aria-hidden")==="true")continue;let S=(w.getAttribute("role")||"").trim().toLowerCase();if(S==="presentation"||S==="none"||!R.isVisible(w)||(w.getAttribute("aria-label")||"").trim()||(w.getAttribute("aria-labelledby")||"").trim()||(w.getAttribute("title")||"").trim()||(w.textContent||"").trim()||w.children.length||w.closest('a, button, label, figure, [role="img"], [role="button"], [role="link"], [aria-label], [aria-labelledby], [aria-describedby]'))continue;let y=w.getBoundingClientRect();if(y.width<=30||y.height<=30)continue;let C=w.getAttribute("id");if(!C)continue;let F=new RegExp("#"+C.replace(/[^\w-]/g,"")+`\\b|getElementById\\(\\s*['"]`+C.replace(/[^\w-]/g,"")+`['"]`);_.some(M=>F.test(M)&&/\b(fillText|strokeText)\s*\(/.test(M))&&g.push({selector:R.uniqueSel(w),attribute:"aria-label",currentValue:"",issueType:"missing_alt",wcag:"1.1.1",context:"canvas draws text via script but has no accessible name or fallback content",needsAI:false,outerHtml:w.outerHTML.slice(0,300)});}for(let w of m){if(g.length>=50)break;g.push(w);}return g},uh={name:"missingAlt",cap:50,async detect(l){return l.evaluate(IL)}};var LL=()=>{let l="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye],[class*=EquallyAI],[id*=ae_],[class*=ae-exclude]",c='a[href], button, input:not([type="hidden"]), select, textarea, summary, [contenteditable]:not([contenteditable="false" i]), [role="button"], [role="link"], [role="checkbox"], [role="menuitem"], [role="tab"], [role="switch"], [role="option"], [role="radio"], [role="combobox"], [role="slider"], [role="textbox"]',g=["onclick","data-action","ng-click","@click","v-on:click"],m=y=>{if(getComputedStyle(y).visibility==="hidden")return false;for(let C=y;C&&C.nodeType===1;C=C.parentElement)if(getComputedStyle(C).display==="none")return false;return true},p=y=>Array.prototype.some.call(y.querySelectorAll("a:not([href])"),C=>m(C)&&!isHiddenFromAT(C)&&g.some(F=>C.hasAttribute(F))),b=y=>Array.prototype.some.call(y.querySelectorAll(c),C=>m(C)&&!isHiddenFromAT(C)),x=[];return document.querySelectorAll("div[onclick], span[onclick]").forEach(y=>{if(x.length>=50||y.closest(l)||!isVisible(y)||isHiddenFromAT(y)||b(y)||p(y))return;let C=y.getAttribute("role");if(C==="button"||C==="link"||C==="tab"||C==="menuitem"||C==="checkbox"||C==="radio")return;let F=uniqueSel(y),P=y.outerHTML.slice(0,300);x.push({selector:F,attribute:"role",currentValue:C||"",issueType:"missing_button_role",wcag:"4.1.2",context:JSON.stringify({tag:y.tagName.toLowerCase(),hasOnclick:true,currentTabindex:y.getAttribute("tabindex")}),needsAI:false,fixValue:"button",outerHtml:P}),y.getAttribute("tabindex")===null&&x.push({selector:F,attribute:"tabindex",currentValue:"",issueType:"missing_button_role",wcag:"4.1.2",context:JSON.stringify({tag:y.tagName.toLowerCase(),supplementary:'tabindex needed alongside role="button"'}),needsAI:false,fixValue:"0",outerHtml:P});}),document.querySelectorAll("a:not([href])").forEach(y=>{if(x.length>=50||y.closest(l)||!isVisible(y)||isHiddenFromAT(y)||y.getAttribute("role"))return;let F=y.hasAttribute("onclick"),P=y.getAttribute("data-action")||y.getAttribute("ng-click")||y.getAttribute("@click")||y.getAttribute("v-on:click");if(!F&&!P||b(y))return;let M=uniqueSel(y),q=y.outerHTML.slice(0,300);x.push({selector:M,attribute:"role",currentValue:"",issueType:"missing_button_role",wcag:"4.1.2",context:JSON.stringify({tag:"a",href:y.getAttribute("href")||"",hasOnclick:F}),needsAI:false,fixValue:"button",outerHtml:q});}),document.querySelectorAll("nav, ol, ul").forEach(y=>{if(x.length>=50||y.closest(l)||!isVisible(y)||isHiddenFromAT(y))return;let C=(y.className&&typeof y.className=="string"?y.className:"").toLowerCase(),F=(y.getAttribute("id")||"").toLowerCase();if(!C.includes("breadcrumb")&&!C.includes("crumb")&&!F.includes("breadcrumb")&&!F.includes("crumb"))return;let P=y.querySelectorAll("a");if(P.length<2)return;let M=(y.getAttribute("aria-label")||"").toLowerCase(),q=y.getAttribute("role");if(M.includes("breadcrumb")||M.includes("crumb")||q==="navigation"&&M)return;let B=uniqueSel(y);x.push({selector:B,attribute:"aria-label",currentValue:M,issueType:"missing_semantic_role",wcag:"4.1.2",context:JSON.stringify({tag:y.tagName.toLowerCase(),reason:"breadcrumb navigation missing aria-label",linkCount:P.length,pageLang:(document.documentElement.getAttribute("lang")||"").trim(),links:Array.prototype.slice.call(P,0,6).map(j=>(j.textContent||"").trim().slice(0,40)),otherLandmarkLabels:Array.prototype.slice.call(document.querySelectorAll('nav[aria-label], [role="navigation"][aria-label], [role="region"][aria-label], aside[aria-label]'),0,8).filter(j=>j!==y).map(j=>(j.getAttribute("aria-label")||"").trim().slice(0,60))}),needsAI:true,outerHtml:y.outerHTML.slice(0,300)});}),document.querySelectorAll("form, section, div").forEach(y=>{if(x.length>=50||y.closest(l)||!isVisible(y)||isHiddenFromAT(y))return;let C=(y.className&&typeof y.className=="string"?y.className:"").toLowerCase(),F=(y.getAttribute("id")||"").toLowerCase();if(!C.includes("search")&&!F.includes("search")||!y.querySelector('input[type="search"], input[type="text"], input[name*="search"], input[placeholder*="earch"]'))return;let M=y.getAttribute("role");if(M==="search"||y.closest('[role="search"]')||y.querySelector('[role="search"]')||Array.prototype.some.call(y.querySelectorAll("form, section, div"),j=>{let X=(j.className&&typeof j.className=="string"?j.className:"").toLowerCase(),T=(j.getAttribute("id")||"").toLowerCase();return !X.includes("search")&&!T.includes("search")||j.getAttribute("role")==="search"?false:!!j.querySelector('input[type="search"], input[type="text"], input[name*="search"], input[placeholder*="earch"]')}))return;let B=uniqueSel(y);x.push({selector:B,attribute:"role",currentValue:M||"",issueType:"missing_semantic_role",wcag:"4.1.2",context:JSON.stringify({tag:y.tagName.toLowerCase(),reason:'search section missing role="search"'}),needsAI:false,fixValue:"search",outerHtml:y.outerHTML.slice(0,300)});}),document.querySelectorAll('[role="menu"], [role="menubar"]').forEach(y=>{if(y.closest(l))return;let C=y.getAttribute("role")||"menu",F=Array.from(y.querySelectorAll("a")).filter(M=>{if(!isVisible(M)||isHiddenFromAT(M))return false;let q=M.getAttribute("role");return q!=="menuitem"&&q!=="menuitemcheckbox"&&q!=="menuitemradio"});if(F.length===0)return;let P=uniqueSel(y);x.push({selector:P,attribute:"role",currentValue:C,issueType:"missing_semantic_role",wcag:"4.1.2",context:JSON.stringify({tag:y.tagName.toLowerCase(),reason:`${F.length} link(s) inside role="${C}" without menuitem roles`,sample:F.slice(0,3).map(M=>(M.textContent||"").trim().slice(0,40))}),message:`container role="${C}" holds ${F.length} link(s) without menuitem roles \u2014 for site navigation use a nav list instead (role="menu" requires the full menu pattern: menuitem children plus arrow-key handling)`,needsAI:false,needsReview:true,reviewReason:'Adding role="menuitem" to plain navigation links is invalid ARIA when the menu pattern is not implemented. Prefer removing role="menu"/"menubar" from site navigation; keep it only for application menus built to the APG menu pattern.',outerHtml:y.outerHTML.slice(0,300)});}),x},ch={name:"missingRoles",cap:50,async detect(l){return l.evaluate(LL)}};var PL=()=>{let l="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye]",g=[],m={main:'main, [role="main"]',navigation:'nav, [role="navigation"]',banner:'header, [role="banner"]',contentinfo:'footer, [role="contentinfo"]',complementary:'aside, [role="complementary"]',search:'[role="search"]'};for(let[p,b]of Object.entries(m))document.querySelectorAll(b).forEach(x=>{if(g.length>=30||x.closest(l)||typeof isVisible=="function"&&!isVisible(x))return;let k=x.parentElement,R=null;for(;k&&k!==document.body;){if(k.matches(b)){R=k;break}k=k.parentElement;}if((p==="banner"||p==="contentinfo")&&x.closest("article, section, aside, main, nav")||!R||x.getAttribute("aria-label")?.trim()||x.getAttribute("aria-labelledby")?.trim())return;let _=typeof uniqueSel=="function"?uniqueSel(x):"",w=typeof getNearbyContext=="function"?getNearbyContext(x):{nearbyHeading:""};g.push({selector:_,attribute:"role",currentValue:x.getAttribute("role")||x.tagName.toLowerCase(),issueType:"nested_landmark",wcag:"1.3.1",context:`nested-in: ${p} | tag: ${x.tagName.toLowerCase()} | heading: ${w.nearbyHeading||""}`,needsAI:false,fixValue:"generic",outerHtml:(x.outerHTML||"").slice(0,300)});});return g},dh={name:"nestedLandmarks",cap:30,async detect(l){return l.evaluate(PL)}};var ML=()=>{let c=[],g=T=>typeof parseCssColor=="function"?parseCssColor(T):null,m=(T,v,E)=>typeof relLuminance=="function"?relLuminance(T,v,E):0,b=(T,v)=>typeof contrastRatio=="function"?contrastRatio(T,v):1;function A(T){let E=[0,0,0],I=0,H=G=>{let N=g(G||"");if(!N)return;let U=Math.max(0,Math.min(1,N[3]));if(U<=0)return;let Y=U*(1-I);E[0]+=N[0]*Y,E[1]+=N[1]*Y,E[2]+=N[2]*Y,I+=Y;};for(let G=T.parentElement;G&&I<.999999999;G=G.parentElement)H(getComputedStyle(G).backgroundColor);let V=1-I;return [Math.round(Math.min(255,E[0]+255*V)),Math.round(Math.min(255,E[1]+255*V)),Math.round(Math.min(255,E[2]+255*V))]}function x(T,v,E){return "#"+[T,v,E].map(I=>{let H=Math.max(0,Math.min(255,Math.round(I))).toString(16);return H.length===1?"0"+H:H}).join("")}function k(T,v,E){let I=m(v[0],v[1],v[2])>.5;return R(T,v,E,I)||R(T,v,E,!I)}function R(T,v,E,I){let H=0,V=1,G=null;for(let N=0;N<20;N++){let U=(H+V)/2,Y=I?[T[0]*(1-U),T[1]*(1-U),T[2]*(1-U)]:[T[0]+(255-T[0])*U,T[1]+(255-T[1])*U,T[2]+(255-T[2])*U],Z=[Math.round(Y[0]),Math.round(Y[1]),Math.round(Y[2])];b(Z,v)>=E?(G=Z,V=U):H=U;}return G}let _=(T,v)=>{let E=Math.max(0,Math.min(1,T[3]));return [T[0]*E+v[0]*(1-E),T[1]*E+v[1]*(1-E),T[2]*E+v[2]*(1-E)]};function w(T,v){let E=T.boxShadow||"";if(!E||E==="none")return null;let I=[],H=0,V="";for(let N of E)N==="("&&H++,N===")"&&H--,N===","&&H===0?(I.push(V),V=""):V+=N;V&&I.push(V);let G=null;for(let N of I){let U=N.match(/rgba?\([^)]*\)/),Y=U?g(U[0]):null;if(!Y||Y[3]<=0||(N.replace(/rgba?\([^)]*\)/,"").replace("inset","").trim().split(/\s+/).map(se=>parseFloat(se)).filter(se=>Number.isFinite(se))[3]??0)<=0)continue;let ie=b(_(Y,v),v);(G===null||ie>G)&&(G=ie);}return G}function S(T){let v=getComputedStyle(T),E=A(T),I=null,H=parseFloat(v.borderTopWidth||"0"),V=(v.borderTopStyle||"").toLowerCase(),G=g(v.borderTopColor||"");H>0&&V!=="none"&&V!=="hidden"&&G&&G[3]>0&&(I=b(_(G,E),E));let N=g(v.backgroundColor||"");if(N&&N[3]>0){let Y=b(_(N,E),E);(I===null||Y>I)&&(I=Y);}let U=w(v,E);return U!==null&&(I===null||U>I)&&(I=U),I}function y(T){let v=T.getBoundingClientRect();if(v.width*v.height<=0)return null;let E='input, select, textarea, button, [role="button"], svg, img, i, label',I=T.parentElement,H=null;for(let V=0;I&&V<3&&!(I===document.body||I===document.documentElement);V++,I=I.parentElement){let G=I.getBoundingClientRect();if(G.width*G.height>4*v.width*v.height+1||G.height>Math.max(2.5*v.height,v.height+40))break;let N=false,U=document.createTreeWalker(I,4),Y=U.nextNode();for(;Y;){if((Y.textContent||"").trim()&&Y.parentElement&&!Y.parentElement.closest(E)&&isVisible(Y.parentElement)){N=true;break}Y=U.nextNode();}if(N)break;let Z=S(I);Z!==null&&Z>1.01&&(H===null||Z>H)&&(H=Z);}return H}let C=T=>/^(img|picture|video|canvas|object|embed|iframe)$/.test((T.tagName||"").toLowerCase())||(getComputedStyle(T).backgroundImage||"none")!=="none",F=(T,v)=>{let E=Math.min(T.right,v.right)-Math.max(T.left,v.left),I=Math.min(T.bottom,v.bottom)-Math.max(T.top,v.top);return E>0&&I>0&&E*I/(T.width*T.height)>=.5},P=null;function M(T){let v=T.getBoundingClientRect();if(v.width*v.height<=0)return false;let E=v.left+v.width/2,I=v.top+v.height/2;if(E>=0&&I>=0&&E<window.innerWidth&&I<window.innerHeight&&typeof document.elementsFromPoint=="function"){let V=document.elementsFromPoint(E,I),G=V.indexOf(T);if(G>=0){for(let N of V.slice(G+1)){if(C(N))return true;let U=g(getComputedStyle(N).backgroundColor||"");if(U&&U[3]>.5)return false}return false}}for(let V=T.parentElement,G=0;V&&G<8;V=V.parentElement,G++){let N=getComputedStyle(V);if((N.backgroundImage||"none")!=="none")return true;let U=g(N.backgroundColor||"");if(U&&U[3]>.5||V===document.documentElement)break}P||(P=Array.from(document.querySelectorAll("img, picture, video, canvas, object, embed, iframe")));for(let V of P)if(!(V===T||T.contains(V)||V.contains(T))&&F(v,V.getBoundingClientRect())&&isVisible(V))return true;let H=T.offsetParent||T.parentElement;if(H&&H!==document.body&&H!==document.documentElement){let V=H.getElementsByTagName("*");for(let G=0;G<V.length&&G<400;G++){let N=V[G];if(!(N===T||T.contains(N)||N.contains(T))&&F(v,N.getBoundingClientRect())&&(getComputedStyle(N).backgroundImage||"none")!=="none"&&isVisible(N))return true}}return false}function q(T){for(let H=T.parentElement;H&&H.nodeType===1;H=H.parentElement)if(parseFloat(getComputedStyle(H).opacity||"1")<1)return false;let v=H=>{if(H.tagName.toLowerCase()!=="svg"){let N=g(getComputedStyle(H).color||"");return N&&N[3]>0?[N]:null}let V=[],G=Array.from(H.querySelectorAll("path, rect, circle, ellipse, polygon, polyline, line, text, use"));for(let N of G){let U=N.getBoundingClientRect();if(U.width===0&&U.height===0)continue;let Y=getComputedStyle(N);if(Y.display==="none"||Y.visibility==="hidden"||parseFloat(Y.opacity||"1")<1)return null;for(let[Z,z]of [[Y.fill,Y.fillOpacity],[Y.stroke,parseFloat(Y.strokeWidth||"0")>0?Y.strokeOpacity:"0"]]){let ie=String(Z||"");if(!ie||ie==="none"||parseFloat(String(z??"1"))===0)continue;if(ie.startsWith("url"))return null;let se=g(ie);if(!se)return null;se[3]*=parseFloat(String(z??"1")),se[3]>0&&V.push(se);}}return V.length?V:null},E=[];for(let H=0;H<=255;H+=17)E.push(H);let I=Array.from(T.querySelectorAll('svg, i[class], [class*="icon"]'));for(let H of I){let V=H.getBoundingClientRect();if(V.width*V.height===0)continue;let G=getComputedStyle(H);if(G.display==="none"||G.visibility==="hidden")continue;let N=v(H);if(!N)continue;let U=null,Y=1,Z=true;for(let se=H;se;se=se===T?null:se.parentElement){let fe=getComputedStyle(se),me=parseFloat(fe.opacity||"1");if(!U){let Pe=g(fe.backgroundColor||""),ve=String(fe.backgroundClip||"border-box").toLowerCase();if(!(String(fe.backgroundImage||"none")==="none")){Z=false;break}if(Pe&&Pe[3]>=1&&ve==="border-box")U=[Pe[0],Pe[1],Pe[2]];else if(me<1){Z=false;break}}U&&(Y*=me);}if(!U||!Z)continue;let z=U,ie=1/0;for(let se of N){let fe=_(se,z);for(let me of E)for(let Pe of E)for(let ve of E){let Se=[me,Pe,ve],ht=_([fe[0],fe[1],fe[2],Y],Se),Dt=_([z[0],z[1],z[2],Y],Se),He=b(ht,Dt);He<ie&&(ie=He);}}if(ie>=3)return true}return false}let B="control sits over an image, so the background colour measured behind it is not what the user sees \u2014 judge its boundary or glyph against the image pixels in the crop (WCAG 1.4.11, 3:1)";function j(T){let v=T.tagName.toLowerCase(),E=v==="input"||v==="select"||v==="textarea"?v+" field":v;c.push({selector:uniqueSel(T),message:"non-text contrast: "+E+" over an image backdrop \u2014 "+B,attribute:"style",currentValue:"?",issueType:"non_text_contrast_insufficient",wcag:"1.4.11",context:v+" backdrop=image needs=3",needsAI:false,needsReview:true,reviewReason:B,outerHtml:T.outerHTML.slice(0,200)});}let X=document.querySelectorAll('input:not([type="hidden"]), select, textarea, button, [role="button"], [role="checkbox"], [role="radio"], [role="switch"]');for(let T of X){if(c.length>=30)break;if(isWidget(T)||isHiddenFromAT(T)||!isVisible(T))continue;let v=getComputedStyle(T),E=A(T),I=g(v.backgroundColor||""),H=g(v.borderTopColor||""),V=parseFloat(v.borderTopWidth||"0"),G=(v.borderTopStyle||"").toLowerCase(),N=V>0&&G!=="none"&&G!=="hidden",U=T.tagName.toLowerCase(),Y=U==="input"||U==="select"||U==="textarea",Z=null;if(U==="input"){let Ee=(T.type||"").toLowerCase(),Ne=(v.appearance||v.webkitAppearance||"").toLowerCase();if(Ee==="checkbox"||Ee==="radio"){let Ie=Ne==="none"?"":String(v.accentColor||"").trim().toLowerCase(),nt=Ie&&Ie!=="auto"?g(Ie):null;if(nt&&nt[3]>.5)Z=b(_(nt,E),E);else if(Ne&&Ne!=="none")continue}}let z=N&&H&&H[3]>.5?b(_(H,E),E):null,ie=I&&I[3]>.5?b(_(I,E),E):Z,se=w(v,E),fe=z===null&&ie===null&&se===null?null:Math.max(z??0,ie??0,se??0);if(Y&&M(T)){j(T);continue}if(Y&&(fe===null||fe<3)){let Ee=y(T);if(Ee!==null&&Ee>=3)continue}let me=null,Pe=false,ve="";if(Y)fe!==null?(me=fe,fe<3&&(Pe=true)):(Pe=true,me=1);else {let Ee=false,Ne=document.createTreeWalker(T,4),Ie=Ne.nextNode();for(;Ie;){if((Ie.textContent||"").trim()&&Ie.parentElement&&isVisible(Ie.parentElement)){Ee=true;break}Ie=Ne.nextNode();}if(Ee)continue;let nt=M(T);{let pe=["Top","Right","Bottom","Left"].map(Ve=>({w:parseFloat(v["border"+Ve+"Width"]||"0"),s:String(v["border"+Ve+"Style"]||"").toLowerCase(),c:g(v["border"+Ve+"Color"]||"")})),xe=pe.filter(Ve=>Ve.w>0&&Ve.s!=="none"&&Ve.s!=="hidden"&&Ve.c&&Ve.c[3]>.5),Xe=pe.filter(Ve=>Ve.w>0&&Ve.s!=="none"&&Ve.s!=="hidden"&&Ve.c&&Ve.c[3]===0),at=true;for(let Ve=T.parentElement;Ve&&Ve.nodeType===1;Ve=Ve.parentElement)if(parseFloat(getComputedStyle(Ve).opacity||"1")<1){at=false;break}let dt=Math.max(0,Math.min(1,parseFloat(v.opacity||"1"))),yt=String(v.backgroundClip||"border-box").toLowerCase(),Qe=!!I&&I[3]>=1&&dt>=1&&yt==="border-box";if(xe.length&&Xe.length&&at&&(!nt||Qe)){let Ve=I&&I[3]>0?_(I,E):E,rr=_([Ve[0],Ve[1],Ve[2],dt],E),nr=jr=>{let da=_(jr,Ve);return _([da[0],da[1],da[2],dt],E)};if(xe.some(jr=>b(nr(jr.c),rr)>=3))continue}}if(nt){if(q(T))continue;j(T);continue}let st=Array.from(T.querySelectorAll('img, svg, picture, canvas, i[class], [class*="icon"]')),lt=new Map,Jt=pe=>{let xe=pe.getBoundingClientRect();if(xe.width*xe.height===0)return "absent";let Xe=parseFloat(getComputedStyle(T).opacity||"1");for(let at=pe;at&&at!==T;at=at.parentElement){let dt=getComputedStyle(at);if(dt.display==="none")return "absent";if(dt.visibility==="hidden"||parseFloat(dt.opacity||"1")===0)return "hidden-at-rest";Xe*=parseFloat(dt.opacity||"1");}return lt.set(pe,Xe),"painted"},Vr=st.map(Jt),it=st.filter((pe,xe)=>Vr[xe]==="painted"),$r=it.length>0,vn=!$r&&Vr.includes("hidden-at-rest"),ge=pe=>{let xe=(pe.tagName||"").toLowerCase();if(xe==="img"||xe==="picture"||xe==="canvas"||xe==="svg"&&pe.querySelector("image, foreignObject, linearGradient, radialGradient, pattern"))return null;let Xe=[];if(xe==="svg"){let dt=pe.querySelector("path, circle, rect, polygon, polyline, line, ellipse, use, text");for(let yt of [dt,pe]){if(!yt)continue;let Qe=getComputedStyle(yt),Ve=1;for(let nr=yt;nr&&nr!==pe;nr=nr.parentElement||nr.parentNode)Ve*=parseFloat(getComputedStyle(nr).opacity||"1");let rr=nr=>Number.isFinite(parseFloat(nr))?parseFloat(nr):1;if(Qe.fill&&Qe.fill!=="none"&&!Qe.fill.startsWith("url")&&Xe.push({color:Qe.fill,alpha:Ve*rr(Qe.fillOpacity)}),Qe.stroke&&Qe.stroke!=="none"&&!Qe.stroke.startsWith("url")&&parseFloat(Qe.strokeWidth||"0")>0&&Xe.push({color:Qe.stroke,alpha:Ve*rr(Qe.strokeOpacity)}),Xe.length)break}}else ((pe.textContent||"").trim()||getComputedStyle(pe,"::before").content!=="none")&&Xe.push({color:getComputedStyle(pe).color,alpha:1});let at=null;for(let dt of Xe){let yt=g(dt.color);if(!yt)continue;let Qe=yt[3]*dt.alpha*(lt.get(pe)??1),Ve=[yt[0]*Qe+E[0]*(1-Qe),yt[1]*Qe+E[1]*(1-Qe),yt[2]*Qe+E[2]*(1-Qe)],rr=b(Ve,E);(at===null||rr>at)&&(at=rr);}return at};if($r&&it.map(ge).some(xe=>xe!==null&&xe>=3))continue;let ae=false,ue=v.position;if((ue==="absolute"||ue==="fixed")&&T.parentElement){let pe=T.getBoundingClientRect(),xe=T.parentElement.getBoundingClientRect(),Xe=xe.width*xe.height;Xe>0&&pe.width*pe.height/Xe>=.85&&(ae=true);}if($r||ae||vn){if(Pe=true,me=N&&H&&H[3]>.5?b(_(H,E),E):1,me>=3)continue;ve=$r?"control is identified by an image or icon \u2014 verify the graphic itself has 3:1 contrast against its surroundings":vn?"control is identified by an icon that is transparent until hover/focus \u2014 verify the revealed icon has 3:1 contrast against its surroundings":"control is an overlay covering other content, which provides its visual affordance \u2014 verify the underlying presentation";}else fe!==null?(me=fe,fe<3&&(Pe=true)):(Pe=true,me=1);}if(!Pe)continue;let Se=H&&H[3]>.5?[H[0],H[1],H[2]]:I&&I[3]>.5?[I[0],I[1],I[2]]:[128,128,128],ht=k(Se,E,3);if(!ht)continue;let Dt=x(ht[0],ht[1],ht[2]),He=x(E[0],E[1],E[2]),Lt="border: 1px solid "+Dt+" !important;",br=uniqueSel(T),Bt=T.tagName.toLowerCase(),Gt=fe===null&&!N?"invisible (no border, no fill: 1.00:1)":me?me.toFixed(2)+":1":"not measurable",Tt=Bt==="input"||Bt==="select"||Bt==="textarea"?Bt+" field":Bt,tr=ve?"non-text contrast: "+Tt+" boundary is "+Gt+" against "+He+" (needs 3:1) \u2014 "+ve:"non-text contrast: "+Tt+" boundary (border and fill) is "+Gt+" against "+He+", needs 3:1 \u2014 e.g. border-color "+Dt;c.push({selector:br,message:tr,attribute:"style",currentValue:me?me.toFixed(2):"?",issueType:"non_text_contrast_insufficient",wcag:"1.4.11",context:Bt+" bg="+He+" ratio="+(me?me.toFixed(2):"?")+" needs=3",needsAI:false,...ve?{needsReview:true,reviewReason:ve}:{fixValue:Lt},outerHtml:T.outerHTML.slice(0,200)});}return c},fh={name:"nonTextContrast",cap:30,async detect(l){return l.evaluate(ML)}};var OL=()=>{let l="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],m=/location\s*[=.]|location\s*\.\s*href|\.submit\s*\(|window\s*\.\s*open|history\s*\.\s*(push|replace)/i,p=document.querySelectorAll("[onfocus]");for(let b of Array.from(p)){if(g.length>=20)break;if(b.closest(l))continue;let A=b.getAttribute("onfocus")||"";if(!A||!m.test(A))continue;let x=typeof uniqueSel=="function"?uniqueSel(b):"",k=typeof getNearbyContext=="function"?getNearbyContext(b):{parentTag:b.tagName.toLowerCase(),nearbyHeading:""},R=[];R.push("tag: "+b.tagName.toLowerCase()),R.push("onfocus: "+A.slice(0,100)),k.nearbyHeading&&R.push("heading: "+k.nearbyHeading),R.push("parent: "+k.parentTag),g.push({selector:x,attribute:"onfocus",currentValue:A.slice(0,200),issueType:"onfocus_context_change",wcag:"3.2.1",context:R.join(" | "),needsAI:true,outerHtml:(b.outerHTML||"").slice(0,300)});}return g},ph={name:"onFocus",cap:20,async detect(l){return l.evaluate(OL)}};var NL=()=>{let l="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",c=[],g=['a[href="#main-content"]','a[href="#main"]','a[href="#content"]','a[href="#skip"]','a[href="#skip-content"]','a[href="#maincontent"]',"a.skip-link","a.skip-nav","a.skip-to-content","a.skiplink","a.skip-navigation",'[class*="skip-link"]','[class*="skip-nav"]'],m=false;for(let P of g){let M=document.querySelector(P);if(M&&!M.closest(l)){m=true;break}}if(!m){let P=document.querySelectorAll('a[href^="#"]');for(let M of P){if(M.closest(l))continue;let q=(M.textContent||"").toLowerCase();if(q.includes("skip")&&(q.includes("main")||q.includes("content")||q.includes("nav"))){m=true;break}}}if(!m){let P=document.querySelectorAll('button, input[type="button"], input[type="submit"]');for(let M of Array.from(P)){if(M.closest(l))continue;let q=(M.getAttribute("value")||M.textContent||"").trim().toLowerCase();if(q.includes("skip")&&(q.includes("main")||q.includes("content")||q.includes("nav"))){m=true;break}}}if(!m){let P=document.body?document.body.firstElementChild:null;if(P&&P.matches('main, [role="main"], div#main')){let M=getComputedStyle(P),q=P.getBoundingClientRect();M.display!=="none"&&M.visibility!=="hidden"&&!P.closest('[hidden], [aria-hidden="true"]')&&q.width>0&&q.height>0&&(m=true);}}if(!m){let P=Array.from(document.querySelectorAll('main, [role="main"], div#main'));for(let M of P){let q=getComputedStyle(M);if(q.display==="none"||q.visibility==="hidden"||M.closest('[hidden], [aria-hidden="true"]'))continue;if(Array.from(M.querySelectorAll("h1, h2, h3, h4, h5, h6")).some(j=>{let X=getComputedStyle(j);return X.display!=="none"&&X.visibility!=="hidden"&&!j.closest('[hidden], [aria-hidden="true"]')})){m=true;break}}}if(!m&&document.querySelector("nav")){let P=document.querySelectorAll("a, button");for(let M of Array.from(P)){if(M.closest(l))continue;let q=(M.textContent||"").trim().toLowerCase();if((q.includes("toggle")||q.includes("hide")||q.includes("collapse")||q.includes("show"))&&q.includes("content")){m=true;break}}}if(m||Array.from(document.querySelectorAll('main, [role="main"]')).filter(P=>{let M=getComputedStyle(P);if(M.display==="none"||M.visibility==="hidden"||P.closest('[hidden], [aria-hidden="true"]'))return false;let q=P.getBoundingClientRect();return q.width>0&&q.height>0}).length===1)return c;let b="",A=document.querySelector('main[id], [role="main"][id]');if(A&&A.getAttribute("id"))b=A.getAttribute("id");else {let P=document.querySelector("h1[id]");if(P&&P.getAttribute("id"))b=P.getAttribute("id");else {let M=["main-content","maincontent","main","content","skip-content"];for(let q of M)if(document.getElementById(q)){b=q;break}}}let x=b==="",k=b||"main-content",_="<style>.wa-skip-link{position:absolute;left:-9999px;top:auto;width:1px;height:1px;overflow:hidden;z-index:999999;padding:8px 16px;background:#000;color:#fff;font-size:14px;text-decoration:none;border-radius:0 0 4px 0;}.wa-skip-link:focus{position:fixed;left:8px;top:8px;width:auto;height:auto;overflow:visible;outline:2px solid #fff;outline-offset:2px;}</style>"+'<a href="#'+k+'" class="wa-skip-link">{TEXT}</a>',w=(document.documentElement.getAttribute("lang")||"").trim(),S=document.querySelector('main, [role="main"]'),y=S?(S.getAttribute("aria-label")||"").trim():"",C=document.querySelector("h1"),F=C?(C.textContent||"").trim().replace(/\s+/g," ").slice(0,80):"";return c.push({selector:"body",attribute:"prepend",currentValue:"",issueType:"skip_link",wcag:"2.4.1",context:(x?'No skip navigation link found, and no element with a referenceable id (e.g. <main id="main-content">) exists to target.':"No skip navigation link found on page; target resolved to #"+k)+(w?" | page language: "+w:"")+(y?" | main landmark label: "+y:"")+(F?" | page heading: "+F:"")+" | html template (replace {TEXT} with the link text, in the page language): "+_,needsAI:true,...x?{manualFix:true}:{}}),c},mh={name:"skipLink",async detect(l){return l.evaluate(NL)}};var qL=()=>{let g=[],m=document.querySelectorAll("*"),p=0;for(let b of Array.from(m)){if(p++>5e3||g.length>=20)break;if(b.closest("[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye]")||typeof isVisible=="function"&&!isVisible(b))continue;let x=getComputedStyle(b).backgroundImage||"";if(!x||x==="none"||!x.includes("url("))continue;let k=x.match(/url\((['"]?)(.*?)\1\)/);if(!k)continue;let R=k[2];if(!R||R.startsWith("data:")&&R.length<256)continue;let _=b.getBoundingClientRect();if(_.width<32||_.height<32)continue;let w=b.tagName.toLowerCase(),S=b.getAttribute("role")||"",y=w==="a"||w==="button"||S==="button"||S==="link"||b.closest("a,button,[role=button],[role=link]")!==null,C=(b.textContent||"").trim().length>0,F=!!b.getAttribute("aria-label"),P=!!b.getAttribute("aria-labelledby"),M=!!b.getAttribute("title"),q=!!b.querySelector('img[alt]:not([alt=""])');if(b.closest('[aria-hidden="true"]')){let v=b.closest("a[href]");if(!!v&&Array.from(document.querySelectorAll("a[href]")).some(I=>I!==v&&I.href===v.href&&!I.closest('[aria-hidden="true"]')))continue}if(F||P||M||q||C||!y)continue;let B=b.closest("a,button,[role=button],[role=link]");if(B&&B!==b){let v=(B.textContent||"").trim(),E=B.getAttribute("aria-label")||B.getAttribute("title")||"",I=B.getAttribute("aria-labelledby"),H=!!B.querySelector('img[alt]:not([alt=""])');if(v||E.trim()||I||H)continue}let j=R;try{j=new URL(R,location.href).toString();}catch{continue}let X=typeof uniqueSel=="function"?uniqueSel(b):"",T=typeof getNearbyContext=="function"?getNearbyContext(b):{parentTag:w,nearbyHeading:""};g.push({selector:X,attribute:"aria-label",currentValue:"",issueType:"background_image_unlabeled",wcag:"1.1.1",context:`bg: ${j.slice(0,140)} | tag: ${w} | role: ${S||"(none)"} | parent: ${T.parentTag}${T.nearbyHeading?" | heading: "+T.nearbyHeading:""}`,needsAI:true,imageSrc:j,outerHtml:(b.outerHTML||"").slice(0,300)});}return g},gh={name:"backgroundImages",cap:20,async detect(l){return l.evaluate(qL)}};var BL=()=>{let l="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye]",g=[];return document.querySelectorAll("svg").forEach(p=>{if(g.length>=50||p.closest(l)||!isVisible(p)||p.getAttribute("aria-hidden")==="true")return;let A=p.getAttribute("role");if(A==="presentation"||A==="none"||p.closest('[aria-hidden="true"]'))return;let x=p.getAttribute("aria-label")||"",k=p.getAttribute("aria-labelledby")||"",R=p.querySelector("title"),_=R?(R.textContent||"").trim():"";if(x.trim()||k.trim()||_)return;let w=p.getBoundingClientRect(),S=w.width<=16&&w.height<=16;if(w.width<=4||w.height<=4||p.getAttribute("preserveAspectRatio")==="none")return;let y=p.closest('a, button, [role="button"], [role="link"], [onclick]');if(y){if(y.getAttribute("aria-label")?.trim()||y.getAttribute("aria-labelledby")?.trim())return;let E=getAccessibleName(y),I=y.cloneNode(true);I.querySelectorAll("svg").forEach(V=>V.remove());let H=(I.textContent||"").trim().replace(/\s+/g," ");if(E&&H.length>0)return}else {if(!/^(img|graphics-document|graphics-symbol)$/i.test((A||"").trim().split(/\s+/)[0])||S)return;let E=p.parentElement;if(E&&(E.textContent||"").trim().replace(/\s+/g," ").length>3)return}let C=uniqueSel(p),F=getNearbyContext(y||p),P=y&&y.getAttribute("href")||"",M=(y||p).outerHTML.slice(0,300),q=p.getAttribute("class")||"",B=p.getAttribute("data-icon")||"",j=y||p,X=j&&j!==p&&j.getAttribute("class")||"",T=typeof lookupIconLabel=="function"?lookupIconLabel(String(q),B,"")||lookupIconLabel(String(X),"",""):null,v=y?uniqueSel(y):C;g.push({selector:v,attribute:"aria-label",currentValue:"",issueType:"svg_missing_name",wcag:"1.1.1",context:JSON.stringify({parentTag:(y||p).tagName?(y||p).tagName.toLowerCase():"svg",href:P,nearbyHeading:F.nearbyHeading,parentRole:F.parentRole,svgClasses:q,iconLib:T||void 0,suggestion:"Add aria-label to the parent interactive element or <title> inside SVG"}),needsAI:true,outerHtml:M});}),g},hh={name:"svgNames",cap:50,async detect(l){return l.evaluate(BL)}};var HL=()=>{let l={"line-height":1.5,"letter-spacing":.12,"word-spacing":.16},c=1e-9,g=Object.keys(l),m=30,p="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",b={px:1,pt:1.333333,pc:16,in:96,cm:37.795,mm:3.7795,q:.37795},A=T=>{let v=[];for(let E of T.split(";")){let I=E.match(/^\s*([-a-zA-Z]+)\s*:\s*(.*?)\s*$/);if(!I)continue;let H=I[1].toLowerCase();if(!g.includes(H))continue;let V=I[2],G=/!\s*important\s*$/i.test(V);V=V.replace(/!\s*important\s*$/i,"").trim(),V&&(H!=="line-height"&&/^[-+]?\d+(\.\d+)?$/.test(V)&&parseFloat(V)!==0||v.push({prop:H,value:V,important:G}));}return v},x=(T,v,E,I)=>{let H=v.trim().toLowerCase();if(/^normal$|^initial$/.test(H))return {kind:"narrow"};if(/^inherit$|^revert$|^unset$/.test(H))return {kind:"notBlocked"};if(H.startsWith("var(")||H.startsWith("calc(")||H.startsWith("env("))return {kind:"undetermined"};if(/^-?[\d.]+$/.test(H)){let Y=parseFloat(H);return T==="line-height"?{kind:"ratio",factor:Y}:{kind:"ratio",factor:0}}let V=H.endsWith("%")&&/\d/.test(H),G=V?H.slice(0,-1).trim().match(/^([\d.]+)$/):H.match(/^([\d.]+)(em|rem|vw|vh|px|pt|cm|mm|pc|in|q)$/);if(!G)return {kind:"undetermined"};let N=parseFloat(G[1]);if(V||H.endsWith("em")){let Y=I??E;return Y&&E&&isFinite(Y)&&isFinite(E)&&Y>0&&E>0?V?{kind:"ratio",factor:N/100*(Y/E)}:{kind:"ratio",factor:N*(Y/E)}:V?{kind:"ratio",factor:N/100}:{kind:"ratio",factor:N}}let U=H.match(/(rem|vw|vh|px|pt|cm|mm|pc|in|q)$/)?.[1];if(U==="px"||U&&b[U]){let Y=U==="px"?N:N*(b[U]||0);return E===null||!isFinite(E)||E<=0?{kind:"undetermined"}:{kind:"ratio",factor:Y/E}}return {kind:"undetermined"}},k=(T,v,E)=>{let I=T;for(;I;){let H=v.get(I);if(H){let V=H.filter(G=>G.prop===E);if(V.length){let G=V.filter(U=>U.important);return {decl:G.length?G[G.length-1]:V[V.length-1],from:I}}}I=I.parentElement;}return null},R=T=>{let v=T;for(;v;){let E=v.style;if(E&&(E.display==="none"||E.visibility==="hidden")||E&&(E.position==="absolute"||E.position==="fixed")&&(_(E.top)||_(E.left)))return false;if(E&&(E.overflowX==="scroll"||E.overflowX==="auto")){for(let I=T;I!==v;I=I.parentElement)if(I.style&&w(I.style.width)>=900)return false}v=v.parentElement;}return true},_=T=>{if(!T)return false;let v=T.match(/^(-)([\d.]+)(px|em|rem|vh|vw)$/i);if(!v)return false;let E=parseFloat(v[2]),I=v[3].toLowerCase();return I==="px"?E>=100:I==="em"||I==="rem"?E>=4:E>=10},w=T=>{let v=T?T.match(/^([\d.]+)px$/):null;return v?parseFloat(v[1]):0},S=[],y=[],C=new Map,F=typeof getComputedStyle=="function"?getComputedStyle:null,P=T=>{try{let v=F?F(T).fontSize:"",E=v?v.match(/^([\d.]+)px$/):null;return E?parseFloat(E[1]):null}catch{return null}},M=new Map,q=Array.from(document.querySelectorAll('[style*="important" i]'));for(let T of q)T.closest(p)||M.set(T,A(T.getAttribute("style")||""));for(let T of document.querySelectorAll("body [style]"))T.closest(p)||M.has(T)||M.set(T,A(T.getAttribute("style")||""));let B=[],j=document.createTreeWalker(document.body,1),X=j.currentNode;for(;X;)Array.from(X.childNodes).some(v=>v.nodeType===3&&/\S/.test(v.textContent||""))&&!X.closest(p)&&B.push(X),X=j.nextNode();for(let T of B){if(S.length>=m)break;if(R(T))for(let v of g){let E=k(T,M,v);if(!E||!E.decl.important)continue;let I=P(T),H=E.from===T?I:P(E.from)??I,V=x(v,E.decl.value,I,H);if(!(V.kind==="undetermined"||V.kind==="narrow"||V.kind==="ratio"&&V.factor+c<l[v]))continue;let N=C.get(E.from);N||(N=[],C.set(E.from,N),y.push({from:E.from,props:N})),N.includes(v)||N.push(v);}}for(let{from:T,props:v}of y){if(S.length>=m)break;let E=typeof uniqueSel=="function"?uniqueSel(T):"",I=typeof getNearbyContext=="function"?getNearbyContext(T):{parentTag:T.parentElement?.tagName.toLowerCase()||"",nearbyHeading:""},H=[];H.push("blocked: "+v.join(",")),H.push("tag: "+T.tagName.toLowerCase()),I.nearbyHeading&&H.push("heading: "+I.nearbyHeading),H.push("parent: "+I.parentTag),S.push({selector:E,attribute:"style",currentValue:(T.getAttribute("style")||"").slice(0,200),issueType:"text_spacing_blocked",wcag:"1.4.12",context:H.join(" | "),needsAI:true,outerHtml:(T.outerHTML||"").slice(0,300)});}return S},vh={name:"textSpacing",cap:30,async detect(l){return l.evaluate(HL)}};var VL=()=>{let l="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],m=document.querySelectorAll('button, input[type="submit"], input[type="button"], input[type="reset"], [role="button"]');for(let p of m){if(g.length>=50)break;if(p.closest(l)||!isVisible(p))continue;let b=p,A=b.tagName==="INPUT"?(b.getAttribute("type")||"").toLowerCase():"";if(A==="submit"||A==="reset")continue;let x=(b.getAttribute("role")||"").trim().toLowerCase().split(/\s+/)[0];if((x==="none"||x==="presentation")&&b.disabled===true)continue;let k=(b.getAttribute("aria-label")||"").trim(),R=b.getAttribute("aria-labelledby"),_=(b.getAttribute("title")||"").trim(),w=(b.getAttribute("value")||"").trim(),S=(b.textContent||"").trim().replace(/\s+/g," "),y="";R&&(y=typeof __resolveIdRefs=="function"?__resolveIdRefs(R):"");let C=b.querySelector('img[alt]:not([alt=""])'),F=b.querySelector("svg title"),P=b.querySelector("svg[aria-label]");if(!!(k||y||_||w||S||C||F||P))continue;let q=uniqueSel(b),B=getNearbyContext(b),j=b.closest("form"),X=j&&(j.getAttribute("id")||j.getAttribute("name"))||"",T=b.getAttribute("class")||"",v=b.querySelector('i, svg, span[class*="icon"]'),E=v&&v.getAttribute("class")||"",I=v&&v.getAttribute("data-icon")||"",H=v?(v.textContent||"").trim():"",V=typeof lookupIconLabel=="function"?lookupIconLabel(String(E),I,H):null,G=!V&&typeof lookupIconLabel=="function"?lookupIconLabel(String(T),"",""):null,N=V||G,U=[];for(let z of ["type","name","id"]){let ie=(b.getAttribute(z)||"").trim();ie&&U.push(z+"="+ie.slice(0,40));}let Y=[];if(j){let z=(j.getAttribute("action")||"").trim();if(z){let se=z;try{se=new URL(z,document.baseURI).pathname;}catch{}Y.push("action: "+se.slice(0,80));}let ie=[];for(let se of j.querySelectorAll("input:not([type=hidden]):not([type=submit]):not([type=button]), textarea, select")){let fe=(se.getAttribute("aria-label")||se.getAttribute("placeholder")||se.id&&Array.from(j.querySelectorAll("label[for]")).find(me=>me.getAttribute("for")===se.id)?.textContent||se.getAttribute("name")||"").trim().replace(/\s+/g," ");if(ie.push(fe.slice(0,40)||se.getAttribute("type")||se.tagName.toLowerCase()),ie.length>=4)break}ie.length&&Y.push("fields: "+ie.join(", "));}let Z=[];X&&Z.push("form: "+X),B.nearbyHeading&&Z.push("heading: "+B.nearbyHeading),E&&Z.push("icon: "+String(E).slice(0,80)),T&&Z.push("class: "+String(T).slice(0,80)),Z.push("parent: "+B.parentTag),U.length&&Z.push("control: "+U.join(" "));for(let z of Y)Z.push("form "+z);N&&Z.push("icon-hint (glyph name only, not the action): "+N),g.push({selector:q,attribute:"aria-label",currentValue:"",issueType:"unlabeled_button",wcag:"4.1.2",context:Z.join(" | "),needsAI:true,outerHtml:b.outerHTML.slice(0,300)});}return g},bh={name:"unlabeledButtons",cap:50,async detect(l){return l.evaluate(VL)}};var $L=()=>{let l=new Set(["more","info","click","click here","here","read more","learn more","see more","link","button","this"]),c=new Set(["submit","send","yes","no","next","prev","previous","back","view","details","continue","go","ok","open","close","apply","save"]),g={};function m(T){if(isWidget(T)||!isVisible(T))return;let v=getAccessibleName(T);if(!v)return;let E=v.toLowerCase().trim();g[E]=(g[E]||0)+1;}document.querySelectorAll("a[href]").forEach(T=>m(T));let p=new Set(["fa","fas","far","fab","fal","fad","material-icons","material-symbols","bi","glyphicon"]),b=["fa-","bi-","icon-","icofont-","dashicons-","heroicon","feather-","lucide-","material-"];function A(T){let v=T.toLowerCase();return p.has(v)||b.some(E=>v.startsWith(E))}let x=/[\u4e00-\u9fff\u3040-\u30ff\uac00-\ud7af]/;function k(T,v){return x.test(T)?1:v}let R=50,_=[];function w(T){if((T.textContent||"").trim().replace(/\s+/g," ").length>0)return false;let E=T.querySelectorAll("i, span, em");for(let I of E)if((typeof I.className=="string"?I.className:"").split(/\s+/).some(A))return true;return false}function S(T){let v=T.className||"";return typeof v!="string"?false:v.split(/\s+/).some(A)}function y(T){if(_.length>=R||isWidget(T)||!isVisible(T))return;let v=getAccessibleName(T);if(!v)return;let E=v.toLowerCase().trim(),I=false,H=v.length>=2&&/^[A-Z][A-Z0-9]+$/.test(v.trim()),V=/^[[(]?\d{1,4}[\])]?$/.test(v.trim());if(v.length<k(v,3)&&!H&&!V)I=true;else if(l.has(E))I=true;else if(c.has(E)&&(g[E]||0)>=2){let Z=(T.getAttribute("aria-label")||"").trim().toLowerCase(),z=!!T.getAttribute("aria-labelledby")||!!Z&&Z!==E,ie=T.querySelector&&T.querySelector('.sr-only, .visually-hidden, [class*="sr-only"], [class*="visually-hidden"], [class*="screen-reader"]'),se=ie?(ie.textContent||"").trim().toLowerCase():"";!z&&!(ie&&se!==E)&&(I=true);}else (w(T)||S(T)&&v.length===0)&&(T.getAttribute("aria-label")||T.getAttribute("aria-labelledby")||T.querySelector&&T.querySelector('.sr-only, .visually-hidden, [class*="sr-only"], [class*="visually-hidden"]')||(I=true));if(!I)return;let G=getNearbyContext(T),N=uniqueSel(T),U=T.getAttribute("href")||"",Y=T.outerHTML.slice(0,300);_.push({selector:N,attribute:"aria-label",currentValue:(T.getAttribute("aria-label")||"").trim(),message:"weak link name: "+(T.getAttribute("aria-label")||T.getAttribute("aria-labelledby")?`"${v}" is too generic for a control \u2014 add distinguishing context`:`text "${v}" is too generic for a control \u2014 add distinguishing context`),issueType:"weak_link_name",wcag:"2.4.4",needsReview:true,reviewReason:"WCAG 2.4.4 (AA) judges link purpose in context: the link text together with its sentence, paragraph, list item or table cell (nearbyText). A link whose text names its destination page or topic passes, even as one word in a menu. Fail only generic text (here, more, click here, read more) whose context still does not say where the link goes.",context:JSON.stringify({currentText:v,href:U,nearbyHeading:G.nearbyHeading,parentTag:G.parentTag,parentRole:G.parentRole,cardText:G.cardText||"",imgAlt:G.imgAlt||""}),needsAI:true,outerHtml:Y});}document.querySelectorAll("a[href]").forEach(T=>y(T));let C=/^(untitled(?:\s+document)?|new\s+page|new\s+document|home|page\s*\d*|document|untitled)$/i,F=/^(iframe|embed|widget|frame|content|untitled)$/i,P=new Set(["section","title","heading","headings","page","content","chapter","part","article","document","intro","untitled","test","lorem","tbd","todo","draft","sample","example","welcome","hello","hi","home"]);function M(T){return !!(!T||T.getAttribute("aria-hidden")==="true"||T.closest('[aria-hidden="true"]'))}function q(T,v,E,I,H,V){if(_.length>=R)return;let G=uniqueSel(T),N=(T.outerHTML||"").slice(0,300);_.push({selector:G,attribute:v,currentValue:E,issueType:I,wcag:H,context:JSON.stringify(V),needsAI:true,outerHtml:N});}let B=document.querySelectorAll("h1,h2,h3,h4,h5,h6");for(let T=0;T<B.length&&!(_.length>=R);T++){let v=B[T];if(!v||isWidget(v)||M(v)||!isVisible(v))continue;let E=getAccessibleName(v);if(!E)continue;let I=E.toLowerCase().trim(),H=I.split(/\s+/).filter(Boolean),V=()=>{if(!/^\p{L}$/u.test(E))return false;let U=v.nextElementSibling;if(!U)return false;let Y=U.tagName.toLowerCase(),Z=[];if(Y==="dl"?Z=Array.from(U.querySelectorAll("dt")):Y==="ul"||Y==="ol"?Z=Array.from(U.children).filter(ie=>ie.tagName==="LI"):Y==="table"&&(Z=Array.from(U.querySelectorAll("tbody tr, tr")).map(ie=>ie.cells&&ie.cells[0])),Z=Z.filter(Boolean),Z.length<1)return false;let z=E.toLowerCase();return Z.every(ie=>(ie.textContent||"").trim().toLowerCase().startsWith(z))},G=false;if(E.length<k(E,3)?G=!V():(H.length===1&&(l.has(I)||P.has(I))||/^page\s*\d+$/i.test(I)||/^section\s*\d+$/i.test(I)||/^chapter\s*\d+$/i.test(I)||/^[^\p{L}\p{N}]+$/u.test(E))&&(G=true),!G)continue;let N=getNearbyContext(v);q(v,"textContent",E,"weak_heading","2.4.6",{currentText:E,tag:v.tagName.toLowerCase(),nearbyHeading:N.nearbyHeading,parentTag:N.parentTag,parentRole:N.parentRole});}let j=document.querySelectorAll("iframe");for(let T=0;T<j.length&&!(_.length>=R);T++){let v=j[T];if(!v||isWidget(v)||M(v))continue;let E=getComputedStyle(v);if(v.getClientRects().length===0||E.visibility==="hidden"||E.visibility==="collapse"||(v.getAttribute("src")||"").trim().toLowerCase().indexOf("javascript:")===0)continue;let I=(v.getAttribute("title")||"").trim();if(!I)continue;let H=I.toLowerCase(),V=false;if((I.length<k(I,3)||F.test(H)||l.has(H))&&(V=true),!V)continue;let G=(v.getAttribute("src")||"").slice(0,120),N=getNearbyContext(v);q(v,"title",I,"weak_iframe_title","4.1.2",{currentTitle:I,src:G,nearbyHeading:N.nearbyHeading,parentTag:N.parentTag});}if(_.length<R){let T=document.querySelector("head > title, title"),v=(document.title||"").trim();if(T&&v){let E=v.toLowerCase(),I=false;(v.length<k(v,5)||C.test(E)||/^untitled/i.test(v))&&(I=true),I&&_.push({selector:"title",attribute:"textContent",currentValue:v,issueType:"weak_page_title",wcag:"2.4.2",context:JSON.stringify({currentTitle:v,hostname:typeof location<"u"&&location&&location.hostname||"",pathname:typeof location<"u"&&location&&location.pathname||""}),needsAI:true,outerHtml:(T.outerHTML||"").slice(0,300)});}}let X=document.querySelectorAll("svg");for(let T=0;T<X.length&&!(_.length>=R);T++){let v=X[T];if(!v||isWidget(v)||M(v)||v.getAttribute("role")==="presentation"||v.getAttribute("role")==="none"||!isVisible(v))continue;let E=v.querySelector("title"),I=E?(E.textContent||"").trim():"",H=(v.getAttribute("aria-label")||"").trim(),V=H||I;if(!V)continue;let G=V.toLowerCase(),N=false;if((V.length<k(V,3)||l.has(G)||/^(icon|svg|image|graphic|logo)$/i.test(V))&&(N=true),!N)continue;let U=v.closest('a, button, [role="button"], [role="link"]'),Y=getNearbyContext(v);q(v,H?"aria-label":"title",V,"weak_svg_name","1.1.1",{currentName:V,svgClasses:v.getAttribute("class")||"",parentTag:U?U.tagName.toLowerCase():Y.parentTag,parentHref:U&&U.getAttribute("href")||"",nearbyHeading:Y.nearbyHeading});}return _},yh={name:"weakNames",cap:50,async detect(l){return l.evaluate($L)}};var jL=()=>{let c=[],g=document.querySelector('meta[name="viewport"]');if(g){let p=(g.getAttribute("content")||"").trim(),b=p.toLowerCase(),A=false,x=[];(b.indexOf("user-scalable=no")>=0||b.indexOf("user-scalable=0")>=0)&&(A=true,x.push("user-scalable=no blocks pinch-zoom"));let k=["yes","no","device-width","device-height"],R=b.match(/user-scalable\s*=\s*([a-z][a-z-]*)/);R&&k.indexOf(R[1])<0&&(A=true,x.push("user-scalable="+R[1]+" (invalid, parsed as 0)"));let _=b.match(/maximum-scale\s*=\s*([a-z][a-z-]*)/);_&&k.indexOf(_[1])<0&&(A=true,x.push("maximum-scale="+_[1]+" (invalid, parsed as 0)"));let w=b.match(/maximum-scale\s*=\s*([\d.]+)/);w&&parseFloat(w[1])<2&&(A=true,x.push("maximum-scale="+w[1]+" (<2)")),A&&c.push({selector:'meta[name="viewport"]',attribute:"content",currentValue:p,issueType:"zoom_restriction",wcag:"1.4.4",context:"viewport blocks zoom: "+x.join(" | "),needsAI:false,fixValue:"width=device-width, initial-scale=1"});}let m=[{el:document.documentElement,selector:"html"},{el:document.body,selector:"body"}];for(let p=0;p<m.length&&!(c.length>=5);p++){let b=m[p];if(b.el)try{let x=(getComputedStyle(b.el).getPropertyValue("touch-action")||"").trim().toLowerCase();(x==="none"||x==="pinch-zoom")&&c.push({selector:b.selector,attribute:"style",currentValue:"touch-action: "+x,issueType:"zoom_restriction",wcag:"1.4.4",context:"CSS touch-action: "+x+" on <"+b.selector+"> prevents pinch-zoom",needsAI:!1,fixValue:"touch-action: manipulation !important;"});}catch{}}return c},wh={name:"zoomUnlock",cap:5,async detect(l){return l.evaluate(jL)}};var zL=()=>{let c=[],g=document.body?document.body.querySelectorAll("*"):[];for(let m=0;m<g.length&&c.length<10;m++){let p=g[m],b=p.tagName.toLowerCase();if(b==="script"||b==="style"||b==="svg"||b==="textarea"||b==="select")continue;let A="";for(let M=p.firstChild;M;M=M.nextSibling)M.nodeType===3&&(A+=M.nodeValue);if(!A.replace(/\s+/g,"").length)continue;let x=getComputedStyle(p);if(x.display==="none"||x.visibility==="hidden"||x.display==="contents")continue;let k=x.overflowX,R=x.overflowY,_=k==="hidden"||k==="clip",w=R==="hidden"||R==="clip";if(!_&&!w||p.closest('[aria-hidden="true"],[hidden],[inert]'))continue;let S=p.clientWidth,y=p.clientHeight;if(y<=1||S<=1)continue;let C=x.webkitLineClamp||x.getPropertyValue("-webkit-line-clamp");if(C&&C!=="none")continue;let F="";if(w&&p.scrollHeight>y+2?F="height "+y+"px < content "+p.scrollHeight+"px":_&&x.textOverflow!=="ellipsis"&&p.scrollWidth>S+2&&(F="width "+S+"px < content "+p.scrollWidth+"px"),!F){let M=parseFloat(x.fontSize);if(!(M>0))continue;let q=p.style.getPropertyValue("font-size"),B=p.style.getPropertyPriority("font-size");p.style.setProperty("font-size",M*2+"px","important");let j=p.clientHeight,X=p.clientWidth;w&&j>1&&p.scrollHeight>j+2?F="at 200%: height "+j+"px < content "+p.scrollHeight+"px":_&&x.textOverflow!=="ellipsis"&&X>1&&p.scrollWidth>X+2&&(F="at 200%: width "+X+"px < content "+p.scrollWidth+"px"),q?p.style.setProperty("font-size",q,B):p.style.removeProperty("font-size");}if(!F)continue;let P=typeof uniqueSel=="function"?uniqueSel(p):b;c.push({selector:P,attribute:"style",currentValue:(p.getAttribute("style")||"").slice(0,200),issueType:"resize_text_clipped",wcag:"1.4.4",context:"text clipped by overflow:hidden: "+F,needsAI:true,needsReview:true,reviewReason:"WCAG 1.4.4 Resize Text: this text is cut off by overflow:hidden ("+F+"). Violation when content or function is lost at 200% text size and no other mechanism shows it. Pass when the clipped part is decorative or repeated elsewhere, or the box grows or scrolls when text is resized.",outerHtml:(p.outerHTML||"").slice(0,300)});}return c},xh={name:"textClip",cap:10,async detect(l){return l.evaluate(zL)}};var GL=()=>{let l=[],c=document.querySelectorAll('main *, [role="main"] *, body > div *'),g=new Set,m=Math.min(c.length,200);for(let p=0;p<m;p++){let b=c[p];if(g.has(b)||!b.offsetParent)continue;g.add(b);let A=getComputedStyle(b),x=parseInt(A.order||"0",10),k=A.position;if(x>=3){let R=b.getBoundingClientRect();if(R.width>0&&R.height>0){let _=(b.textContent?.trim().length||0)>10,w=!!b.querySelector("a, button, input, select, textarea");(_||w)&&l.push({selector:typeof uniqueSel=="function"?uniqueSel(b):b.tagName.toLowerCase(),attribute:"data-sequence-review",currentValue:`CSS order: ${x}`,issueType:"meaningful_sequence",wcag:"1.3.2",context:`Element uses CSS order:${x} \u2014 content with interactive elements or text is visually reordered far from its DOM position, which confuses screen readers and keyboard users.`,needsAI:true});}}if(k==="absolute"){if(!!!b.querySelector("a, button, input, select, textarea"))continue;let _=b.parentElement;if(!_||_.children.length<=2)continue;let w=b.getBoundingClientRect(),S=_.getBoundingClientRect();(w.top<S.top-100||w.left<S.left-300)&&l.push({selector:typeof uniqueSel=="function"?uniqueSel(b):b.tagName.toLowerCase(),attribute:"data-sequence-review",currentValue:`position: ${k}, displaced ${Math.round(Math.abs(w.top-S.top))}px`,issueType:"meaningful_sequence",wcag:"1.3.2",context:"Interactive content is absolutely positioned far from its DOM location. Screen readers and keyboard users will encounter it in a different order than visual users.",needsAI:true});}}return l},Ah={name:"meaningfulSequence",async detect(l){return l.evaluate(GL)}};var _h={name:"sensoryCharacteristics",async detect(l){let{instructionalTexts:c,controlLabels:g,navCount:m,labelTexts:p}=await l.evaluate(()=>{let x=[],k=document.querySelectorAll('p, li, td, label, span, div, a, button, h1, h2, h3, h4, h5, h6, figcaption, [role="alert"], [role="status"]'),R=Math.min(k.length,300),_=[];document.querySelectorAll('button, a[href], [role="button"], input[type="button"], input[type="submit"]').forEach(C=>{let F=((C.textContent||"")+" "+(C.getAttribute("aria-label")||"")+" "+(C.getAttribute("value")||"")).trim().toLowerCase();F&&_.push(F);});let w=C=>!!C.offsetParent||getComputedStyle(C).position==="fixed",S=Array.from(document.querySelectorAll('nav, [role="navigation"]')).filter(w).length,y=[];document.querySelectorAll('h1, h2, h3, h4, h5, h6, nav, [role="navigation"], [role="menu"], [role="menubar"], [aria-label], summary, button, a, legend').forEach(C=>{if(!w(C))return;let F=((C.getAttribute("aria-label")||"")+" "+(C.tagName.match(/^(H\d|SUMMARY|BUTTON|A|LEGEND)$/)&&C.textContent||"")).trim().toLowerCase();F&&F.length<=60&&y.push(F);});for(let C=0;C<R;C++){let F=k[C];if(!F.offsetParent||F.children.length>3||F.querySelector("p, div, ul, ol, li, table, section, article, nav, header, footer, main, aside, form, h1, h2, h3, h4, h5, h6")||F.closest('[aria-hidden="true"]'))continue;let P=F.textContent?.trim()||"";P.length<15||P.length>300||/click|tap|press|select|choose|find|look|see|drag|scroll|hover|go to|navigate/i.test(P)&&x.push({text:P,selector:typeof uniqueSel=="function"?uniqueSel(F):F.tagName.toLowerCase()});}return {instructionalTexts:x.slice(0,20),controlLabels:_,navCount:S,labelTexts:y}});if(c.length===0)return [];let b=[],A=x=>{let k=(x.toLowerCase().match(/\b(navigation|menu)\b/)||[])[1];return k?m===1?true:p.some(R=>R.indexOf(k)!==-1):false};for(let{text:x,selector:k}of c){x.toLowerCase();let _=/\b(round|square|circular|triangular|arrow-shaped)\b.*\b(button|icon|element|thing)\b/i.test(x)&&!/\b(submit|cancel|close|menu|search|delete|edit|save|back|next|previous|home)\b/i.test(x),w=/\b(header|footer|sidebar menu|breadcrumb)\b/i.test(x)||A(x),S=/\b(on the|to the|in the)\s+(left|right|top|bottom|upper|lower|above|below|sidebar)\b/i.test(x)&&!w&&/\b(click|tap|press|select|find)\b/i.test(x),y=/\b(red|green|blue|yellow|orange|purple|pink|gray|grey|white|black)\s+(button|link|icon|text|area|section|box|dot|circle|indicator)\b/i.test(x)&&!/\b(submit|cancel|close|delete|save|success|error|warning|danger)\b/i.test(x),C=/\b(large|small|big|tiny|narrow|wide)\s+(button|link|icon|box|area)\b/i.test(x)&&/\b(click|tap|press|select|find)\b/i.test(x),F=/\b(?:labell?ed|called|named|titled)\s+["'“‘]/i.test(x),P=(x.match(/\b(round|square|circular|triangular|arrow-shaped|red|green|blue|yellow|orange|purple|pink|gray|grey|white|black|large|small|big|tiny|narrow|wide)\b/i)||[])[1],M=!!P&&g.some(q=>q.indexOf(P.toLowerCase())!==-1);if(!(F||M)&&(_||S||y||C)){let q=_?"shape":S?"position":y?"color":"size";b.push({selector:k,attribute:"data-sensory-review",currentValue:x.slice(0,100),issueType:"sensory_characteristic",wcag:"1.3.3",context:`Instruction relies on ${q} alone: "${x.slice(0,80)}". Provide a non-sensory way to identify the referenced element (e.g., by name, label, or function).`,needsAI:true});}}return b}};var UL=()=>{let l=[],c=document.querySelectorAll("img");for(let g of c){if(!g.offsetParent||g.width<50||g.height<20||g.complete&&g.naturalWidth===0)continue;let m=g.src||g.getAttribute("data-src")||"",p=m.indexOf(","),b=(m.toLowerCase().startsWith("data:")&&p!==-1?m.slice(0,p):m).toLowerCase(),A=g.getAttribute("alt")||"",x=g.getAttribute("role")||"";if(g.getAttribute("aria-hidden")==="true"||!!g.closest('[aria-hidden="true"]')||x==="presentation"||x==="none"||g.hasAttribute("alt")&&A.trim()==="")continue;let R=g.width>200&&g.height<80&&g.height>15,_=/banner|header|logo-text|title|heading|cta|promo|offer|button.*\.(?:png|jpg|gif|webp)/i.test(b);if(!(_||R)||/(?:^|\/)(?:img|dsc|dscn|dcim|pict)[-_]?\d|photo|gallery/i.test(b)&&!_)continue;let S=g.closest("a[href]"),y=(()=>{if(!S)return false;let X=S.getAttribute("href")||"";if(X==="/"||X==="")return true;try{let T=new URL(S.href,location.href);return T.origin!==location.origin?!1:!!(T.pathname.replace(/\/+$/,"")===""||/^\/(?:index|home|default)(?:\.\w+)?$/i.test(T.pathname)||/^\/[a-z]{2}(?:-[a-z]{2})?(?:\.\w+)?$/i.test(T.pathname))}catch{return false}})();if(y&&(S.textContent||"").trim().length===0)continue;let F="";if(S&&!y&&(S.textContent||"").trim().length===0)try{let X=new URL(S.href,location.href),T=A.trim().split(/\s+/).filter(Boolean);if(X.origin!==location.origin&&/^https?:$/.test(X.protocol)&&T.length>0&&T.length<=4&&A.trim().length<=40){let v=G=>G.toLowerCase().normalize("NFKD").replace(/[^\p{L}\p{N}]/gu,""),E=v(A),I=X.hostname.toLowerCase().split(".").filter(G=>G&&G!=="www"),H=(I.length>1?I.slice(0,-1):I).map(v).filter(Boolean);F=E.length>=3&&(E===v(I.join(""))||E===H.join("")||H.some(G=>E===G||G.length>=5&&E.startsWith(G)))?"exempt":"review";}}catch{}let P=!!g.closest('header, [role="banner"], footer, [role="contentinfo"]'),M=g.height>0&&g.height<=120,q=P&&M,B=/logo|brand|wordmark|hero|banner-?(?:img|image)?|footer|marketing|promo|cover|screenshot|dashboard/i,j=q||B.test(b)||B.test(g.className)||B.test(g.getAttribute("id")||"");b.includes("icon")||b.includes("avatar")||b.includes("emoji")||l.push({selector:typeof uniqueSel=="function"?uniqueSel(g):"img",attribute:"data-image-of-text",currentValue:b.split("/").pop()?.slice(0,60)||"",issueType:"image_of_text",wcag:"1.4.5",context:`Image may contain text (${g.width}x${g.height}px, alt="${A.slice(0,40)}"). Use real text with CSS styling instead.`,needsAI:true,imageSrc:g.src,...j||F?{needsReview:true,reviewReason:q?"small graphic in the header/footer landmark \u2014 likely a logo, wordmark, or brand signature, which are exempt under WCAG 1.4.5 (logotypes)":F==="exempt"?"image is the only content of a link to another site and its alt names that site \u2014 likely the partner/sponsor logo, exempt under WCAG 1.4.5 (logotypes); confirm the image holds only the brand name":F==="review"?"image is the only content of a link to another site and its alt is a short name \u2014 likely a partner/sponsor logo, exempt under WCAG 1.4.5 (logotypes)":"filename suggests marketing/brand imagery; logos and brand collateral are exempt under WCAG 1.4.5"}:{}});}return l},Dh={name:"imagesOfText",async detect(l){return l.evaluate(UL)}};var Eh={name:"reflow",async detect(l){let c=l;if(!c.setViewport)return [];let g=c.viewport?.()??{width:1280,height:720},m=g.width??1280,p=g.height??720;try{return await c.setViewport({width:320,height:p}),await new Promise(A=>setTimeout(A,500)),await l.evaluate(A=>{let x=[],k=document.querySelectorAll("body *"),R=Math.min(k.length,500);for(let _=0;_<R;_++){let w=k[_];if(!w.offsetParent)continue;let S=w.tagName.toLowerCase();if(S==="script"||S==="style"||S==="noscript")continue;let y=w.getBoundingClientRect();y.right>A+5&&y.width>A*1.1&&x.push({selector:typeof uniqueSel=="function"?uniqueSel(w):S,attribute:"style",currentValue:`${Math.round(y.width)}px wide at ${A}px viewport`,issueType:"reflow_overflow",wcag:"1.4.10",context:`Element is ${Math.round(y.width)}px wide and overflows the ${A}px viewport by ${Math.round(y.right-A)}px. Content must reflow to a single column at 320px CSS width without horizontal scrolling.`,needsAI:!1,fixValue:"max-width: 100%; overflow-wrap: break-word;"});}return document.documentElement.scrollWidth>A+10&&x.push({selector:"html",attribute:"data-reflow",currentValue:`scrollWidth ${document.documentElement.scrollWidth}px at ${A}px viewport`,issueType:"reflow_overflow",wcag:"1.4.10",context:`Page has horizontal scrollbar at ${A}px width. WCAG 1.4.10 requires content to reflow without horizontal scrolling at 320 CSS pixels (equivalent to 1280px at 400% zoom).`,needsAI:!1,fixValue:"Fix elements causing horizontal overflow at narrow viewports"}),x},320)}finally{await c.setViewport({width:m,height:p}).catch(()=>{});}}};var WL=()=>{let l=[],c=document.querySelectorAll("video");for(let m of c){if(m.autoplay&&!m.muted&&l.push({selector:typeof uniqueSel=="function"?uniqueSel(m):"video",attribute:"muted",currentValue:"autoplay without muted",issueType:"unsafe_autoplay",wcag:"1.4.2",context:"Video autoplays with sound. Either mute by default, provide a mechanism to pause, or limit to 3 seconds.",needsAI:false,fixValue:"true"}),!(m.offsetParent!==null&&getComputedStyle(m).display!=="none"))continue;let b=m.getBoundingClientRect();if(b.width===0&&b.height===0||m.error)continue;let A=/mute|unmute|sound|volume|audio|play|pause/i,x=!!m.parentElement?.querySelector('button, [role="button"]')||!!m.getAttribute("id")&&!!document.querySelector('[aria-controls~="'+(m.getAttribute("id")||"").replace(/"/g,"")+'"]');for(let y=m.parentElement?.parentElement||null,C=0;y&&!x&&C<3;y=y.parentElement,C++)x=Array.from(y.querySelectorAll('button, [role="button"]')).some(F=>A.test((F.getAttribute("aria-label")||"")+" "+(F.getAttribute("title")||"")+" "+(F.textContent||"")));if((m.muted||m.hasAttribute("muted"))&&(m.loop||m.hasAttribute("loop"))&&!m.hasAttribute("controls")&&!x)continue;let k=m.querySelectorAll("track"),R=Array.from(k).find(y=>y.kind==="captions"||y.kind==="subtitles"),_=Array.from(k).find(y=>y.kind==="descriptions");m.src||m.querySelector("source")?.src||"";let S=typeof uniqueSel=="function"?uniqueSel(m):"video";R||l.push({selector:S,attribute:"data-captions-missing",currentValue:"",issueType:"missing_captions",wcag:"1.2.2",context:`Video element has no <track kind="captions">. Provide synchronized captions for all prerecorded audio content. Page language: ${(document.documentElement.getAttribute("lang")||"").trim()||"not declared"}; the caption track's srclang and label follow the spoken language, which only the audio settles.`,needsAI:false,fixValue:'Add a <track kind="captions" src="captions.vtt" srclang="[spoken language]" label="[language name]" default> element',needsReview:true,reviewReason:"cannot verify an audio track in-page \u2014 confirm the video has speech content before adding captions (silent videos need none)"}),_||l.push({selector:S,attribute:"data-audio-description",currentValue:"",issueType:"missing_audio_description",wcag:"1.2.5",context:"Video has no audio description track. For prerecorded video with meaningful visual content not described in the audio, provide an audio description track or a text transcript.",needsAI:true,needsReview:true,reviewReason:"needs a human to judge whether the video shows information its audio does not describe"});}let g=document.querySelectorAll("audio");for(let m of g){let p=typeof uniqueSel=="function"?uniqueSel(m):"audio";m.closest("figure, div, section")?.querySelector('a[href*="transcript"], [class*="transcript"]')||l.push({selector:p,attribute:"data-transcript-missing",currentValue:"",issueType:"missing_transcript",wcag:"1.2.1",context:"Audio element has no associated transcript. Provide a text transcript for all prerecorded audio-only content.",needsAI:true}),m.autoplay&&!m.muted&&l.push({selector:p,attribute:"muted",currentValue:"autoplay without muted",issueType:"unsafe_autoplay",wcag:"1.4.2",context:"Audio autoplays with sound. Provide a way to pause/stop/mute, or limit to 3 seconds.",needsAI:false,fixValue:"true"});}return l},Sh={name:"mediaAlternatives",cap:50,async detect(l){return (await l.evaluate(WL)).slice(0,50)}};var XL=()=>{let l=[],c=document.querySelector('meta[http-equiv="refresh"]');if(c){let T=c.getAttribute("content")||"",v=parseInt(T,10);!isNaN(v)&&v>0&&v<72e3&&l.push({selector:`meta[http-equiv="refresh"][content*="${T.trim().slice(0,20)}"]`,attribute:"data-auto-refresh",currentValue:T,issueType:"auto_refresh",wcag:"2.2.1",context:`Page auto-refreshes after ${v}s. Users must be able to turn off, adjust, or extend time limits (WCAG 2.2.1).`,needsAI:false,manualFix:true});}let g=document.querySelectorAll("[accesskey]");for(let T of g){let v=T.getAttribute("accesskey")||"";if(v.length===1){let E=typeof uniqueSel=="function"?uniqueSel(T):T.tagName.toLowerCase();l.push({selector:E,attribute:"accesskey",currentValue:v,issueType:"character_key_shortcut",wcag:"2.1.4",context:`Single character accesskey "${v}". Must allow users to remap or disable single-character shortcuts. Consider using modifier key combinations instead.`,needsAI:false,fixValue:"Provide a mechanism to remap or turn off the shortcut, or use modifier keys"});}}let m=document.querySelectorAll("select");for(let T of m){let v=T.hasAttribute("onchange"),E=T.getAttribute("onchange")||"";if(v&&/submit|location|href|navigate|window\./i.test(E)){let I=typeof uniqueSel=="function"?uniqueSel(T):"select";l.push({selector:I,attribute:"onchange",currentValue:E.slice(0,80),issueType:"on_input_change",wcag:"3.2.2",context:"Select element changes context on input (navigates or submits). Add an explicit submit button instead of auto-submitting on selection change.",needsAI:false,fixValue:"Add a submit button; remove auto-navigation from onchange"});}}let p=document.querySelectorAll("[ontouchstart], [ontouchmove], [ongesturestart], [ongesturechange]");for(let T of p)if(!(T.hasAttribute("onclick")||T.hasAttribute("onkeydown")||T.hasAttribute("onkeyup"))){let E=typeof uniqueSel=="function"?uniqueSel(T):T.tagName.toLowerCase();l.push({selector:E,attribute:"data-pointer-gesture",currentValue:"touch/gesture handler without keyboard alternative",issueType:"pointer_gesture",wcag:"2.5.1",context:"Element has touch/gesture handler but no keyboard or click alternative. All multipoint/path-based gestures must have single-pointer alternatives.",needsAI:true});}let b=document.querySelectorAll("[onmousedown]");for(let T of b){let v=T.hasAttribute("onmouseup"),E=T.tagName.toLowerCase();if(!v&&E!=="a"&&E!=="button"&&E!=="input"){let I=typeof uniqueSel=="function"?uniqueSel(T):E;l.push({selector:I,attribute:"data-pointer-cancellation",currentValue:"mousedown action without mouseup",issueType:"pointer_cancellation",wcag:"2.5.2",context:"Element fires action on mouse down-event. Use click or mouseup instead so users can cancel by moving the pointer away before releasing.",needsAI:false,fixValue:"Move action from onmousedown to onclick or onmouseup"});}}let A=/devicemotion|deviceorientation|accelerometer|gyroscope/i,x=/addEventListener\(\s*['"](?:devicemotion|deviceorientation)['"]\s*,\s*(?:\(\s*\)\s*=>|function\s*\(\s*\))\s*\{\s*(?:[A-Za-z_$][\w$]*\s*(?:\+\+|--)\s*;?\s*)+\}\s*\)/gi,k=/addEventListener\(\s*['"](?:click|keydown|keyup|input|change|pointerup|touchend)['"]/i,R=/(?:disable|turn off|switch off|stop|pause|deactivate|opt.?out)[^.]{0,40}(?:motion|shake|tilt|orientation|sensor|gyro|accelerometer)|(?:motion|shake|tilt|orientation|sensor)[^.]{0,40}(?:disable|turn off|switch off|opt.?out)/i;function _(){let T=document.querySelectorAll('label, button, [role="button"], [role="switch"], input[type="button"], input[type="checkbox"]');for(let v of Array.from(T)){let E=(v.textContent||"")+" "+(v.getAttribute("aria-label")||"")+" "+(v.getAttribute("value")||"");if(R.test(E))return true}return false}function w(T){return !A.test(T.replace(x,""))||k.test(T)?true:_()}let S=document.querySelectorAll("script:not([src]):not([data-wa-injected])");for(let T of S){let v=T.textContent||"";if(A.test(v)&&!w(v)){let E=[],I=T;for(;I&&I!==document.body&&I!==document.documentElement;){let G=I.parentElement,N=I.tagName.toLowerCase(),U=G?Array.from(G.children).filter(Z=>Z.tagName===I.tagName):[],Y=U.indexOf(I)+1;E.unshift(Y>1||U.length>1?N+":nth-of-type("+Y+")":N),I=G;}let H=I===document.body?"body":I===document.documentElement?"html":"",V=(H?H+" > ":"")+E.join(" > ");l.push({selector:V||"script",attribute:"data-motion-actuation",currentValue:"Uses device motion/orientation API",issueType:"motion_actuation",wcag:"2.5.4",context:"Page uses device motion/orientation. Any functionality operated by device motion must also be available via UI controls, and motion actuation must be disableable.",needsAI:true});break}}let y=document.querySelectorAll("form"),C='input:not([type="hidden"]):not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="image"]), select, textarea',F=/\bcc-|card.?(?:number|num|no\b)|cardnumber|\bcvv|\bcvc|\bcsc\b|security.?code|\bexpir|\biban\b|routing|account.?(?:number|no\b)|sort.?code|\bbilling\b|transaction-(?:amount|currency)/i,P=/card|payment/i,M=/\b(?:pay|buy|purchase|donate|subscribe and pay|place (?:your |my )?order|complete (?:order|purchase|payment)|confirm (?:order|purchase|payment)|check ?out)\b/i,q=/\b(?:delete|remove|close|deactivate|cancel|terminate)\b[^.]{0,30}\b(?:account|profile|subscription|membership|data|records?)\b/i,B=/\b(?:e-?)?sign\b(?![\s\u00a0-]*(?:up|in|on|out)\b)|\bagree and (?:submit|continue|sign)\b/i,j=/\b(?:save|update|change)\b/i,X=/e-?mail|name|phone|tel\b|zip|postal|company|organi[sz]ation|country/i;for(let T of y){let v=Array.from(T.querySelectorAll(C)),E=He=>[He.getAttribute("name"),He.getAttribute("id"),He.getAttribute("autocomplete"),He.getAttribute("placeholder"),He.getAttribute("aria-label")].join(" "),I=Array.from(T.querySelectorAll('button, input[type="submit"], input[type="image"]')).filter(He=>He.tagName!=="BUTTON"||!He.getAttribute("type")||(He.getAttribute("type")||"").toLowerCase()==="submit").map(He=>(He.getAttribute("value")||"")+" "+(He.textContent||"")+" "+(He.getAttribute("aria-label")||"")).join(" . "),H=v.some(He=>F.test(E(He)))||Array.from(T.querySelectorAll("iframe")).some(He=>P.test((He.getAttribute("title")||"")+" "+(He.getAttribute("name")||""))),V=v.some(He=>/signature/i.test(E(He))),G=H||M.test(I),N=q.test(I),U=V||B.test(I),Y=v.length>0&&v.some(He=>(He.getAttribute("type")||"").toLowerCase()==="email"||/e-?mail/i.test(E(He)))&&v.every(He=>{let Lt=He.tagName.toLowerCase()==="input"?(He.getAttribute("type")||"text").toLowerCase():He.tagName.toLowerCase();return Lt==="email"||Lt==="checkbox"||Lt==="tel"?true:Lt==="text"||Lt==="search"?X.test(E(He)+" "+(He.closest("label")?.textContent||"")):false}),Z=(T.textContent||"").toLowerCase(),z=/payment|credit card|billing|purchase|\border\b|checkout|bank|account number/i.test(Z),ie=/\bagree|terms|contract|binding|signature|consent|waiver/i.test(Z),se=/delete.*account|remove.*data|cancel.*account/i.test(Z),fe=G||N||U,me=Y&&(j.test(I)||se),Pe=!fe&&(!Y&&(z||ie||se)||me);if(!fe&&!Pe)continue;let ve=!!T.querySelector('[type="checkbox"][required], [class*="confirm"], [id*="confirm"], [name*="confirm"]'),Se=!!T.querySelector('[class*="review"], [class*="summary"], [id*="review"]');if(ve||Se)continue;let ht=typeof uniqueSel=="function"?uniqueSel(T):"form",Dt=fe?G?"financial":N?"data-deletion":"legal":me?se?"data-deletion":"data-modification":z?"financial":ie?"legal":"data-deletion";l.push({selector:ht,attribute:"data-error-prevention",currentValue:Dt,issueType:"error_prevention_missing",wcag:"3.3.4",context:`${Dt.charAt(0).toUpperCase()+Dt.slice(1)} form lacks a confirmation/review step. For ${Dt} transactions, provide: (1) a review step before submission, (2) ability to check/correct input, or (3) ability to reverse the submission.`,needsAI:true,...Pe?{needsReview:true,reviewReason:me&&se?"form text is about deleting an account or data and its submit is generic \u2014 confirm whether submitting it deletes stored user data":me?"form saves contact/account details \u2014 confirm whether submitting it changes stored user data that cannot be reviewed or reversed":`form text mentions ${Dt} topics but its controls show no ${Dt} transaction (no payment fields, pay/order/delete submit, or signature) \u2014 confirm whether submitting it commits the user`}:{}});}return l},kh={name:"timingAndInput",async detect(l){return l.evaluate(XL)}};var KL=()=>{let l=[],c=document.querySelectorAll('nav, [role="navigation"]');for(let p of c){if(!p.offsetParent||p.closest('footer, aside, [role="contentinfo"], [role="complementary"]')||p.parentElement?.closest('nav, [role="navigation"]'))continue;let b=p.getBoundingClientRect();if(b.top<=window.innerHeight)continue;let A=typeof uniqueSel=="function"?uniqueSel(p):"nav";l.push({selector:A,attribute:"data-nav-position",currentValue:`top: ${Math.round(b.top)}px`,issueType:"inconsistent_navigation",wcag:"3.2.3",context:"Primary navigation appears below the visible viewport on this page. WCAG 3.2.3 (Consistent Navigation) is a cross-page criterion and cannot be confirmed from a single page \u2014 manually verify this navigation appears in the same relative order across pages that share this template.",needsAI:true,needsReview:true,reviewReason:"Consistent Navigation (3.2.3) is a cross-page criterion; single-page position alone cannot confirm a violation."});}let g=document.querySelectorAll('[class*="blink" i], [class*="flash" i], [class*="strobe" i], blink, marquee');for(let p of g){if(!p.offsetParent)continue;let b=p.getBoundingClientRect();if(b.width<1||b.height<1||!(p.textContent||"").trim()&&!p.querySelector("img, svg, video, canvas, picture")&&getComputedStyle(p).backgroundImage==="none")continue;let A=typeof uniqueSel=="function"?uniqueSel(p):p.tagName.toLowerCase();l.push({selector:A,attribute:"data-flashing",currentValue:p.tagName.toLowerCase(),issueType:"flashing_content",wcag:"2.3.1",context:"Element may produce flashing content. Content must not flash more than 3 times per second. Remove blinking/flashing effects or ensure they are below the threshold.",needsAI:true});}let m=document.querySelectorAll('img[src*=".gif"]');for(let p of m){if(!p.offsetParent||p.width<25||p.height<25)continue;let b=p.getBoundingClientRect();if(b.width>100&&b.height>100){let A=typeof uniqueSel=="function"?uniqueSel(p):"img";l.push({selector:A,attribute:"data-animated-gif",currentValue:(p.src||"").split("/").pop()?.slice(0,40)||"",issueType:"animated_gif_no_pause",wcag:"2.2.2",context:"Animated GIF detected. If this GIF is animated and loops continuously, provide a pause mechanism. Also verify it does not flash more than 3 times per second (WCAG 2.3.1).",needsAI:true});}}return l},Ch={name:"navigationAndWayfinding",async detect(l){return l.evaluate(KL)}};var Th={name:"flashDetection",async detect(l){let c=[];if(!l.screenshot)return c;let m=await l.evaluate(()=>{let _=document.documentElement.style.getPropertyValue("--wa-animations-frozen")==="1";if(_){let w=document.querySelectorAll("*");for(let S of w)S.style.removeProperty("animation-play-state"),S.style.removeProperty("transition");}return _}),p=8,b=120,A=9,x=3,k=[];for(let R=0;R<p;R++){let _=await l.evaluate(w=>{let S=window.innerWidth,y=window.innerHeight,C=3,F=3,P=[];for(let M=0;M<F;M++)for(let q=0;q<C;q++){let B=Math.floor((q+.5)*(S/C)),j=Math.floor((M+.5)*(y/F)),X=document.elementFromPoint(B,j);if(!X){P.push(0);continue}let v=getComputedStyle(X).backgroundColor||"rgba(0,0,0,0)",E=typeof parseCssColor=="function"?parseCssColor(v):null;if(!E){P.push(0);continue}let I=.2126*E[0]+.7152*E[1]+.0722*E[2];P.push(I);}return P},A);k.push(_),R<p-1&&await new Promise(w=>setTimeout(w,b));}m&&await l.evaluate(()=>{let R=document.querySelectorAll("*");for(let _ of R)_.style.setProperty("animation-play-state","paused","important"),_.style.setProperty("transition","none","important");});for(let R=0;R<A;R++){let _=0,w=k[0][R],S=null;for(let F=1;F<p;F++){let P=k[F][R];if(Math.abs(P-w)>25){let q=P>w?"up":"down";S&&q!==S&&_++,S=q;}w=P;}let y=p*b/1e3,C=_/y;if(C>=x){let F=R%3,P=Math.floor(R/3);c.push({selector:"body",attribute:"data-flash-detected",currentValue:`${C.toFixed(1)} flashes/sec in region (${F},${P})`,issueType:"flashing_content",wcag:"2.3.1",context:`Content flashes ${C.toFixed(1)} times/second in screen region (row ${P}, col ${F}). WCAG requires no more than 3 flashes per second. This can trigger seizures in users with photosensitive epilepsy.`,needsAI:false,fixValue:"Remove or reduce flashing to below 3 per second, or ensure the flashing area is below the 21,824 sq pixel threshold"});}}return c}};var Rh={name:"reducedMotion",async detect(l){let c=[],g=await l.evaluate(()=>{let m=false,p=false;for(let A of document.styleSheets)try{for(let x of A.cssRules){let k=x.cssText||"";/animation|transition|@keyframes/i.test(k)&&!/prefers-reduced-motion/.test(k)&&(m=!0),x instanceof CSSMediaRule&&/prefers-reduced-motion/i.test(x.conditionText||x.media?.mediaText||"")&&(p=!0);}}catch{}let b=document.querySelectorAll('[class*="animate"], [class*="slide"], [class*="fade"], [class*="bounce"], [class*="spin"], [class*="pulse"]');return b.length>0&&(m=true),{hasAnimations:m,hasReducedMotionQuery:p,animatedCount:b.length}});return g.hasAnimations&&!g.hasReducedMotionQuery&&c.push({selector:"html",attribute:"data-reduced-motion",currentValue:`${g.animatedCount} animated elements, no @media (prefers-reduced-motion) query`,issueType:"motion_without_reduced_motion",wcag:"2.3.3",context:'Page has animations/transitions but no @media (prefers-reduced-motion: reduce) query. Users who set "Reduce motion" in their OS settings will still see all animations. Add: @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; } }',needsAI:false,fixValue:"@media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; } }"}),c}};var YL=()=>{let l="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],m=/^(0+(\.0+)?|false|off|no|none|disabled?)$/i,p=v=>v!==null&&!m.test(v.trim()),b=v=>{let E=parseFloat((v||"").trim());return Number.isFinite(E)&&E>0},A=/^(carousel|slider|slideshow|slides|slick|swiper|splide|flickity|owl|flexslider|glide|layerslider|ls|rotator|gallery)$/i,x=v=>v.split(/[\s_-]+/).filter(Boolean),k=v=>{if((v.getAttribute("aria-roledescription")||"").trim().toLowerCase()==="carousel")return true;let E=typeof v.className=="string"?v.className:v.getAttribute("class")||"";return x(E).some(I=>A.test(I))},R=/^(autoplay|autoPlay|auto_play|autoStart|autostart|auto_start)$/,_=v=>{let E=v.trim();if(!E.startsWith("{"))return "";let I;try{I=JSON.parse(E);}catch{try{I=JSON.parse(E.replace(/'/g,'"'));}catch{return ""}}if(!I||typeof I!="object")return "";for(let H of Object.keys(I)){if(!R.test(H))continue;let V=I[H];if(V===true||typeof V=="number"&&V>0||typeof V=="string"&&p(V)&&V.trim()!==""||V&&typeof V=="object")return `${H}: ${JSON.stringify(V).slice(0,40)}`}return ""},w=v=>{for(let H of ["data-autoplay","data-auto","data-autostart","data-bs-autoplay","data-auto-play"]){if(!v.hasAttribute(H))continue;let V=v.getAttribute(H)||"";if((V.trim()===""||p(V))&&(k(v)||j(v)>=2))return {attr:H,value:V}}let E=["data-interval","data-bs-interval"].some(H=>v.hasAttribute(H)&&m.test((v.getAttribute(H)||"").trim()));for(let H of ["data-ride","data-bs-ride"])if((v.getAttribute(H)||"").trim().toLowerCase()==="carousel"&&!E)return {attr:H,value:"carousel"};for(let H of ["data-interval","data-bs-interval"]){let V=v.getAttribute(H);if(b(V)&&k(v))return {attr:H,value:V||""}}let I=k(v);for(let H of Array.from(v.attributes)){if(!H.name.startsWith("data-")||!I&&!x(H.name.slice(5)).some(G=>A.test(G)))continue;let V=_(H.value);if(V)return {attr:H.name,value:V}}if((v.getAttribute("aria-roledescription")||"").trim().toLowerCase()==="carousel"){let H=/autoplay["']?\s*[:=]\s*["']?(false|0|off|no)\b/i;for(let V of Array.from(v.attributes)){if(/(^|-)autoplay$/i.test(V.name)&&(V.value.trim()===""||p(V.value)))return {attr:V.name,value:V.value.slice(0,60)};if(/autoplay/i.test(V.value)&&!H.test(V.value))return {attr:V.name,value:V.value.slice(0,60)}}}return null},S=/^(pause|stop|play|playpause|resume)$/i,y=/\b(pause|stop|play|resume)\b/i,C=v=>{let E=[v.getAttribute("aria-label")||"",v.getAttribute("title")||"",v.getAttribute("value")||"",(v.textContent||"").trim().slice(0,80)],I=(v.getAttribute("aria-labelledby")||"").trim();if(I)for(let H of I.split(/\s+/))E.push(document.getElementById(H)?.textContent||"");for(let H of Array.from(v.querySelectorAll("img[alt]")))E.push(H.getAttribute("alt")||"");return E.join(" ")},F=v=>{let E=v.getAttribute("class")||"";return x(E).some(I=>S.test(I))?true:v.matches('a, button, input, [role="button"], [role="switch"], [role="checkbox"], [tabindex]')?y.test(C(v)):false},P=/^(section|article|main|nav|aside|header|footer|form|dialog)$/i,M=v=>k(v)||w(v)!==null||Array.from(v.querySelectorAll("*")).some(E=>k(E)||w(E)!==null),q=v=>{if(v.querySelector("[aria-pressed]"))return true;let E=[v];for(let V of Array.from(v.parentElement?.children||[]))V===v||P.test(V.tagName)||M(V)||E.push(V);let I=v.getAttribute("id"),H=V=>{let G=[...(V.getAttribute("aria-controls")||"").split(/\s+/),(V.getAttribute("data-bs-target")||V.getAttribute("data-target")||"").replace(/^#/,"")].filter(Boolean);return G.length>0&&!G.includes(I||"")};for(let V of E){if(V!==v&&F(V)&&!H(V))return true;for(let G of Array.from(V.querySelectorAll("*")))if(F(G)&&!H(G))return true}if(I){let V=typeof CSS<"u"&&CSS.escape?CSS.escape(I):I.replace(/["\\]/g,"\\$&");for(let G of Array.from(document.querySelectorAll(`[aria-controls~="${V}"], [data-target="#${V}"], [data-bs-target="#${V}"]`)))if(F(G))return true}return false},B=/^(slide|cell)$/i,j=v=>{let E=G=>x(G.getAttribute("class")||"").some(N=>B.test(N))&&!/(^|[\s_-])cloned?([\s_-]|$)/i.test(G.getAttribute("class")||""),I=Array.from(v.querySelectorAll("[class]")).filter(E),H=I.filter(G=>!I.some(N=>N!==G&&N.contains(G)));if(!H.length)return 0;let V=H.length;for(let G of H){let N=Array.from(G.parentElement?.children||[]).filter(U=>U.tagName===G.tagName&&!/(^|[\s_-])cloned?([\s_-]|$)/i.test(U.getAttribute("class")||""));V=Math.max(V,N.length);}return V},X=new Set,T=(v,E)=>{if(g.length>=10||X.has(v)||(X.add(v),v.closest(l))||v.closest('[aria-hidden="true"], [hidden], template, noscript')||typeof isVisible=="function"&&!isVisible(v)||j(v)===1||q(v))return;let I=typeof uniqueSel=="function"?uniqueSel(v):v.tagName.toLowerCase();g.push({selector:I,attribute:E.attr,currentValue:E.value.slice(0,100),issueType:"carousel_autoplay_no_pause",wcag:"2.2.2",context:`slider markup declares autoplay (${E.attr}="${E.value.slice(0,60)}") and no pause / stop control sits in or beside it`,message:"carousel starts automatically and has no pause or stop control",needsAI:false,manualFix:true,reviewReason:"add a visible pause / stop control for the slider (or turn autoplay off); no attribute write fixes this",outerHtml:v.cloneNode(false).outerHTML.slice(0,300)});};for(let v of Array.from(document.body?document.body.querySelectorAll("*"):[])){if(g.length>=10)break;if(!v.attributes.length)continue;if(v.hasAttribute("data-swiper-autoplay")&&b(v.getAttribute("data-swiper-autoplay"))){let I=v.closest('.swiper, .swiper-container, [class*="swiper"]:not(.swiper-slide):not(.swiper-wrapper)')||v.parentElement?.parentElement||v;T(I,{attr:"data-swiper-autoplay",value:v.getAttribute("data-swiper-autoplay")||""});continue}let E=w(v);E&&T(v,E);}return g},Fh={name:"carouselAutoplay",cap:10,async detect(l){return l.evaluate(YL)}};var Hh=[yh,ch,hh,Mg,th,eh,Vg,fh,Gg,bh,Ug,mh,Og,uh,rh,jg,oh,Kg,lh,nh,wh,xh,ih,Bg,Hg,ah,ph,vh,$g,gh,Ng,sh,Ah,_h,Dh,Eh,Sh,kh,Ch,Th,Rh,Fh],wP=[Pg,qg,zg,dh];function Vh(l,c,g){l?.push({tool:c,kind:"engine-failed",detail:`detector threw, its findings are absent: ${g?.message??String(g)}`});}async function $h(l,c,g,m){let p=c??[],b=[];try{let{detectPlatform:q}=await Promise.resolve().then(()=>(Ru(),Tu));b=await q(l);}catch{}try{let{UNIQUE_SELECTOR_JS:q,IS_VISIBLE_JS:B,ACCESSIBLE_NAME_JS:j,WIDGET_SKIP_JS:X,IS_HIDDEN_FROM_AT_JS:T,IS_TRACKING_PIXEL_JS:v,NEARBY_CONTEXT_JS:E}=await Promise.resolve().then(()=>(Iu(),Lh)),{ICON_LABELS_JS:I}=await Promise.resolve().then(()=>(Mh(),Ph)),{COLOR_MATH_JS:H}=await Promise.resolve().then(()=>(Nh(),Oh)),G=`if(typeof __name==='undefined'){var __name=function(t,v){return t};var __defProp=Object.defineProperty;}
384
435
  `+[q,B,j,X,T,v,E,I,H].join(`
385
- `),{inject:N}=await Promise.resolve().then(()=>(Tr(),Qr));try{await N(l,{tool:"detector-helpers",content:G});}catch{await l.evaluate(`(0,eval)(${JSON.stringify(G)})`);}}catch(q){console.warn("[webability] helper injection failed:",q.message),(g??[]).push("color:kernel-injection-failed");}let A=[],x="";try{let{applyPlatformTemplates:q}=await Promise.resolve().then(()=>(Ru(),Tu)),B=b;x=B.filter(j=>j!=="universal"&&j!=="universal_iframe").join(", "),A=await q(l,B);}catch{}let{guardDetectorState:k}=await Promise.resolve().then(()=>(Tr(),Qr)),R=globalThis.process?.env?.WA_STRICT_STATE==="1",_={strict:R,bugs:m?.internalBugs},w=await k(l,"detectors:parallel",g??[],()=>Promise.allSettled((m?.experimental?[...Hh,...wP]:Hh).map(async q=>{try{let B=await q.detect(l);return q.cap&&B.length>=q.cap&&p.push({detector:q.name,cap:q.cap}),B}catch(B){return Vh(m?.internalBugs,q.name,B),[]}})),_),S=[];m?.skipFocusMutating&&(g??[]).push("focus:mutating-detectors-skipped (live-tab scan; focus visibility and focus obscured were not checked)");let y=[...m?.skipFocusMutating?[]:[Xg,Wg],...m?.extraSerialDetectors??[]];for(let q of y){let B=[];try{B=await k(l,q.name,g??[],()=>q.detect(l).catch(j=>(Vh(m?.internalBugs,q.name,j),[])),_);}catch(j){if(R)throw j}try{q.cap&&B.length>=q.cap&&p.push({detector:q.name,cap:q.cap}),S=S.concat(B);}catch{}}let C=[...w.flatMap(q=>q.status==="fulfilled"?q.value:[]),...S];if(x)for(let q of C)q.needsAI&&(q.context=Lg(q.context,x));let F=[...A,...C],P=xP(F),M=["wp-ada-compliance","webability-widget","webability-a11y","asw-","userway","acsb","audioeye","equallyai"];return P.filter(q=>{let B=q.selector.toLowerCase();return B.trim()?!M.some(j=>B.includes(j)):false})}function xP(l){let c=new Set;return l.filter(g=>{let m=`${g.selector}::${g.issueType}`;return c.has(m)?false:(c.add(m),true)})}var aa="1.16.0";var Pu=["wcag2a","wcag2aa","wcag21aa","wcag22aa"];function Mu(l){return l.includes("wcag21aa")||l.includes("wcag22aa")||l.includes("wcag134")?{"css-orientation-lock":{enabled:true}}:{}}function jh(l,c){return c==="AAA"&&!l.includes("wcag2aaa")?[...l,"wcag2aaa"]:l}var AP={"1.1.1":"A","1.2.1":"A","1.2.2":"A","1.2.3":"A","1.3.1":"A","1.3.2":"A","1.3.3":"A","1.4.1":"A","1.4.2":"A","2.1.1":"A","2.1.2":"A","2.1.4":"A","2.2.1":"A","2.2.2":"A","2.3.1":"A","2.4.1":"A","2.4.2":"A","2.4.3":"A","2.4.4":"A","2.5.1":"A","2.5.2":"A","2.5.3":"A","2.5.4":"A","3.1.1":"A","3.2.1":"A","3.2.2":"A","3.2.6":"A","3.3.1":"A","3.3.2":"A","3.3.7":"A","4.1.2":"A","1.2.4":"AA","1.2.5":"AA","1.3.4":"AA","1.3.5":"AA","1.4.3":"AA","1.4.4":"AA","1.4.5":"AA","1.4.10":"AA","1.4.11":"AA","1.4.12":"AA","1.4.13":"AA","2.4.5":"AA","2.4.6":"AA","2.4.7":"AA","2.4.11":"AA","2.5.7":"AA","2.5.8":"AA","3.1.2":"AA","3.2.3":"AA","3.2.4":"AA","3.3.3":"AA","3.3.4":"AA","3.3.8":"AA","4.1.3":"AA","1.2.6":"AAA","1.2.7":"AAA","1.2.8":"AAA","1.2.9":"AAA","1.3.6":"AAA","1.4.6":"AAA","1.4.7":"AAA","1.4.8":"AAA","1.4.9":"AAA","2.1.3":"AAA","2.2.3":"AAA","2.2.4":"AAA","2.2.5":"AAA","2.2.6":"AAA","2.3.2":"AAA","2.3.3":"AAA","2.4.8":"AAA","2.4.9":"AAA","2.4.10":"AAA","2.4.12":"AAA","2.4.13":"AAA","2.5.5":"AAA","2.5.6":"AAA","3.1.3":"AAA","3.1.4":"AAA","3.1.5":"AAA","3.1.6":"AAA","3.2.5":"AAA","3.3.5":"AAA","3.3.6":"AAA","3.3.9":"AAA"};function _P(l){return AP[l]}var oi={A:1,AA:2,AAA:3};function zh(l){let c=String(l.wcag||"").split(/[,\s]+/).filter(m=>/^\d+\.\d+\.\d+$/.test(m));if(c.length===0)return l.level??"AA";let g;for(let m of c){let p=_P(m);p&&(!g||oi[p]<oi[g])&&(g=p);}return g}function ia(l,c="AA"){let g=oi[c]??oi.AA;return l.filter(m=>{let p=zh(m);return !!p&&oi[p]<=g})}var DP=new Set(["new_window_link","external_link_warning","download_link_warning"]);function Gh(l){let c=DP.has(l.issueType)?"minor":l.needsAI?"serious":"moderate",g=l.attribute==="style",m=l.attribute.startsWith("data-"),p=g&&l.fixValue?EP(l.fixValue):l.fixValue;return {id:`wa-${l.issueType}-${In(l.selector)}`,source:"webability",type:l.issueType,wcag:l.wcag,level:zh({wcag:l.wcag})??"AA",impact:c,message:SP(l,p,m),selector:l.selector,html:l.outerHtml,...l.needsReview?{confidence:"needs_review"}:{},...l.reviewReason?{reviewReason:l.reviewReason}:{},fix:{attribute:l.attribute,currentValue:l.currentValue,suggestedValue:p,needsManualReview:l.needsAI||g||m||!!l.needsReview||!!l.manualFix}}}function EP(l){let c=l.trim();if(!c)return "";let g=c.endsWith(";"),p=c.split(";").map(b=>{let x=b.toLowerCase().lastIndexOf("!important");return x===-1?b.trim():b.slice(0,x).trim()}).filter(b=>b.length>0);return p.length===0?"":p.join(";")+(g?";":"")}function SP(l,c,g){if(l.message)return l.message;let m=l.issueType.replace(/_/g," "),p=c??l.fixValue;return g?p?`${m}: ${p}`:l.currentValue?`${m}: ${l.currentValue}`:l.context?`${m}: ${l.context}`:m:p?`${m}: set ${l.attribute}="${p}"`:l.currentValue?`${m}: ${l.attribute} is "${l.currentValue}"`:`${m}: missing ${l.attribute}`}function oa(l){return Array.isArray(l)?l.flat(1/0).filter(g=>typeof g=="string").join(" >>> "):typeof l=="string"?l:""}function In(l){let c=0;for(let g=0;g<l.length;g++)c=(c<<5)-c+l.charCodeAt(g)|0;return Math.abs(c).toString(36)}function Ou(l){return l==="critical"||l==="serious"||l==="moderate"||l==="minor"?l:"moderate"}function Nu(l,c=[]){return {total:l.length,critical:l.filter(g=>g.impact==="critical").length,serious:l.filter(g=>g.impact==="serious").length,moderate:l.filter(g=>g.impact==="moderate").length,minor:l.filter(g=>g.impact==="minor").length,incomplete:0}}function kP(l){let c=/^wcag(\d)(\d)(\d{1,2})$/.exec(l);return c?`${c[1]}.${c[2]}.${c[3]}`:""}function qu(l){for(let c of l){let g=kP(c);if(g)return g}return ""}function Bu(l){return l.includes("wcag2aaa")?"AAA":l.includes("wcag2aa")||l.includes("wcag21aa")||l.includes("wcag22aa")?"AA":"A"}async function Wh(l,c){try{let{AxeBuilder:g}=await import('@axe-core/playwright'),m=typeof l.mainFrame=="function"?l:l.axePage?.()??l;return await new g({page:m}).options({rules:Mu(c)}).withTags(c).analyze()}catch{return CP(l,c)}}async function CP(l,c){let g=await Promise.resolve().then(()=>Ig(Hu())),m=g.source??g.default?.source;if(!m)throw new Error("axe-core source unavailable");try{await l.evaluate(m);}catch{let{inject:b}=await Promise.resolve().then(()=>(Tr(),Qr));await b(l,{tool:"axe",content:m});}return await l.evaluate(({wcagTags:b,rules:A})=>new Promise((x,k)=>{let R=window;if(!R.axe)return k(new Error("axe-core not loaded"));R.axe.run(document,{runOnly:{type:"tag",values:b},rules:A,resultTypes:["violations","incomplete"]}).then(x).catch(k);}),{wcagTags:c,rules:Mu(c)})}function Vu(l){let c=[],g=[];for(let m of l)m.confidence==="needs_review"||RP(m)?g.push(m):c.push(TP(m));return {verdicts:c,undecided:g}}function TP(l){if(l.confidence===void 0&&l.reviewReason===void 0)return l;let{confidence:c,reviewReason:g,...m}=l;return m}function RP(l){let c=(l.type||"").toLowerCase(),g=l.wcag||"",m=l.html||"",p=(l.message||"").toLowerCase();if((c==="contrast_insufficient"||c==="color-contrast"||g==="1.4.3"||g==="1.4.11")&&FP(m))return "background uses gradient or image";if(c==="image_of_text"||g==="1.4.5"){let b=Xh(m,"src").toLowerCase();b.startsWith("data:")&&(b=b.split(",")[0]);let A=Xh(m,"alt").toLowerCase();if(/\b(logo|brand|wordmark|hero|banner|footer|marketing|promo|cover)\b/.test(b))return "brand imagery";if(A.length>0&&/\b(logo|brand|product screenshot|dashboard)\b/.test(A))return "branded imagery"}return (c==="inconsistent_navigation"||p.includes("inconsistent navigation"))&&(/<footer/i.test(m)||/<aside/i.test(m))?"footer/aside nav":""}function FP(l){return /background(-image)?\s*:\s*(?:linear-gradient|radial-gradient|conic-gradient|url\()/i.test(l)}function Xh(l,c){let g=new RegExp(`\\b${c}\\s*=\\s*"([^"]*)"`,"i"),m=l.match(g);return m?m[1]:""}Tr();var Kh=60,Yh=3,Jh=120,Zh=1200,Qh=300,ev=2e5,tv=8e3,IP=new Set(["bgImage","bgGradient","bgOverlap","elmPartiallyObscured","elmPartiallyObscuring"]),LP="*,*::before,*::after{color:transparent!important;-webkit-text-fill-color:transparent!important;text-shadow:none!important;text-decoration-color:transparent!important;caret-color:transparent!important}";function PP(l){let{selectors:c,maxBoxes:g,maxW:m,maxH:p,maxArea:b}=l,A=document.documentElement.scrollWidth,x=document.documentElement.scrollHeight,k=document.createElement("canvas");k.width=k.height=1;let R=k.getContext("2d",{willReadFrequently:true}),_=P=>{try{R.clearRect(0,0,1,1),R.fillStyle="#000",R.fillStyle=P,R.fillRect(0,0,1,1);let M=R.getImageData(0,0,1,1).data;return [M[0],M[1],M[2],M[3]]}catch{return null}},w={},S=document.querySelectorAll("video,canvas,iframe,embed,object");if(S.length>200){for(let P of c)w[P]=null;return w}let y=Array.from(S).map(P=>P.getBoundingClientRect()),C=window.scrollX,F=window.scrollY;for(let P of c){w[P]=null;let M=null;try{M=document.querySelector(P);}catch{continue}if(!M)continue;let q=getComputedStyle(M);if(q.visibility!=="visible"||q.display==="none"||q.webkitBackgroundClip==="text"||q.backgroundClip==="text")continue;let B=false,j=0;for(let Z=M;Z;Z=Z.parentElement){if(++j>64){B=true;break}let z=getComputedStyle(Z);parseFloat(z.opacity)<1&&(B=true),(z.mixBlendMode!=="normal"||z.filter!=="none")&&(B=true);}if(B)continue;let X=_(q.color);if(!X||X[3]<255)continue;let T=parseFloat(q.fontSize),v=parseInt(q.fontWeight,10)>=700,E=T>=24||v&&T>=18.66,I=[],H=M.getBoundingClientRect();if(H.height>p*g||H.width>m*2)continue;let V=document.createTreeWalker(M,NodeFilter.SHOW_TEXT),G,N=0,U=false;for(;!U&&(G=V.nextNode());){if(++N>50){U=true;break}if(G.parentElement!==M)continue;let Z=G.textContent||"";if(Z.length>2e3){U=true;break}if(!Z.trim())continue;let z=document.createRange();z.selectNodeContents(G);let ie=z.getClientRects();if(ie.length>g){U=true;break}for(let se=0;se<ie.length;se++){let fe=ie[se];if(!(fe.width<2||fe.height<2)&&(I.push({x:Math.round(fe.left+C),y:Math.round(fe.top+F),w:Math.max(1,Math.round(fe.width)),h:Math.max(1,Math.round(fe.height))}),I.length>g)){U=true;break}}}U||I.length===0||I.length>g||I.some(Z=>Z.w>m||Z.h>p||Z.w*Z.h>b||Z.x<0||Z.y<0||Z.x+Z.w>A||Z.y+Z.h>x)||I.some(Z=>y.some(z=>Z.x<z.right+C&&Z.x+Z.w>z.left+C&&Z.y<z.bottom+F&&Z.y+Z.h>z.top+F))||(w[P]={fg:`rgb(${X[0]},${X[1]},${X[2]})`,threshold:E?3:4.5,boxes:I});}return w}async function MP(l){let{b64:c,fg:g}=l,m=atob(c),p=new Uint8Array(m.length);for(let B=0;B<m.length;B++)p[B]=m.charCodeAt(B);let b=await createImageBitmap(new Blob([p],{type:"image/png"})),A=document.createElement("canvas");A.width=b.width,A.height=b.height;let x=A.getContext("2d",{willReadFrequently:true});x.drawImage(b,0,0);let k=x.getImageData(0,0,A.width,A.height).data,R=B=>{let j=B/255;return j<=.03928?j/12.92:Math.pow((j+.055)/1.055,2.4)},_=(B,j,X)=>.2126*R(B)+.7152*R(j)+.0722*R(X),w=g.match(/\d+/g).map(Number),S=_(w[0],w[1],w[2]),y=Math.max(1,Math.floor(Math.sqrt(A.width*A.height/1500))),C=0,F=1/0,P="",M="",q=0;for(let B=0;B<A.height;B+=y)for(let j=0;j<A.width;j+=y){let X=(B*A.width+j)*4;if(k[X+3]<255)continue;let T=_(k[X],k[X+1],k[X+2]),v=Math.max(S,T),E=Math.min(S,T),I=(v+.05)/(E+.05);I>C&&(C=I,M=`rgb(${k[X]},${k[X+1]},${k[X+2]})`),I<F&&(F=I,P=`rgb(${k[X]},${k[X+1]},${k[X+2]})`),q++;}return q===0?null:{best:C,worst:F,worstBg:P,bestBg:M}}var zo=class extends Error{};function vr(l,c){let g=c-Date.now();if(g<=0)return Promise.reject(new zo("pixel pass deadline"));let m,p=new Promise((b,A)=>{m=setTimeout(()=>A(new zo("pixel pass deadline")),g);});return Promise.race([l,p]).finally(()=>clearTimeout(m))}async function $u(l,c){let g=l.screenshot;if(typeof g!="function"||c.length===0)return [];let m=Array.from(new Set(c)).slice(0,Kh),p=[],b=false,A=Date.now()+tv;try{await vr(l.evaluate("if(typeof globalThis.__name==='undefined'){globalThis.__name=function(t){return t}}"),A);let x=await vr(l.evaluate(PP,{selectors:m,maxBoxes:Yh,maxW:Zh,maxH:Qh,maxArea:ev}),A);await vr(jo(l,{tool:"contrast-pixels",css:LP}),A),b=!0;let k=0;for(let R of m){let _=x[R];if(!_)continue;if(Date.now()>A||k+_.boxes.length>Jh)break;let w=0,S=1/0,y="",C="",F=!0;for(let P of _.boxes){k++;let M=await vr(g.call(l,{clip:{x:P.x,y:P.y,width:P.w,height:P.h},fullPage:!0,type:"png",animations:"disabled"}),A),q=globalThis.Buffer,B=q?q.from(M).toString("base64"):"",j=await vr(l.evaluate(MP,{b64:B,fg:_.fg}),A);if(!j){F=!1;break}j.best>w&&(w=j.best,C=j.bestBg),j.worst<S&&(S=j.worst,y=j.worstBg);}F&&p.push({selector:R,fail:w<_.threshold*.97,bestRatio:w,worstRatio:S,...y?{worstBg:y}:{},...C?{bestBg:C}:{},threshold:_.threshold,fg:_.fg});}}catch(x){globalThis.process?.env?.WA_DEBUG_PIXELS&&console.error("pixel judge failed",x);}finally{if(b)try{await Promise.race([l.evaluate(()=>document.querySelectorAll('style[data-wa-injected^="contrast-pixels:"]').forEach(x=>x.remove())),new Promise(x=>setTimeout(x,1e3))]);}catch{}}return p}function OP(l){let{selectors:c,maxBoxes:g,maxW:m,maxH:p,maxArea:b}=l,A=document.documentElement.scrollWidth,x=document.documentElement.scrollHeight,k=window.scrollX,R=window.scrollY,_={};for(let w of c){_[w]=null;let S=null;try{S=document.querySelector(w);}catch{continue}if(!S)continue;let y=getComputedStyle(S);if(y.visibility!=="visible"||y.display==="none"||!(y.webkitBackgroundClip==="text"||y.backgroundClip==="text"))continue;let C=false,F=0;for(let E=S;E;E=E.parentElement){if(++F>64){C=true;break}let I=getComputedStyle(E);(parseFloat(I.opacity)<1||I.mixBlendMode!=="normal"||I.filter!=="none")&&(C=true);}if(C)continue;let P=parseFloat(y.fontSize),M=parseInt(y.fontWeight,10)>=700,q=P>=24||M&&P>=18.66,B=[],j=document.createTreeWalker(S,NodeFilter.SHOW_TEXT),X,T=0,v=false;for(;!v&&(X=j.nextNode());){if(++T>50){v=true;break}if(!(X.textContent||"").trim())continue;let E=document.createRange();E.selectNodeContents(X);let I=E.getClientRects();for(let H=0;H<I.length;H++){let V=I[H];if(!(V.width<2||V.height<2)&&(B.push({x:Math.round(V.left+k),y:Math.round(V.top+R),w:Math.max(1,Math.round(V.width)),h:Math.max(1,Math.round(V.height))}),B.length>g)){v=true;break}}}v||B.length===0||B.some(E=>E.w>m||E.h>p||E.w*E.h>b||E.x<0||E.y<0||E.x+E.w>A||E.y+E.h>x)||(_[w]={threshold:q?3:4.5,boxes:B});}return _}async function NP(l){let c=async S=>{let y=atob(S),C=new Uint8Array(y.length);for(let q=0;q<y.length;q++)C[q]=y.charCodeAt(q);let F=await createImageBitmap(new Blob([C],{type:"image/png"})),P=document.createElement("canvas");P.width=F.width,P.height=F.height;let M=P.getContext("2d",{willReadFrequently:true});return M.drawImage(F,0,0),{w:P.width,h:P.height,d:M.getImageData(0,0,P.width,P.height).data}},g=await c(l.painted),m=await c(l.backdrop);if(g.w!==m.w||g.h!==m.h)return null;let p=S=>{let y=S/255;return y<=.03928?y/12.92:Math.pow((y+.055)/1.055,2.4)},b=(S,y,C)=>.2126*p(S)+.7152*p(y)+.0722*p(C),A=g.w,x=g.h,k=new Uint8Array(A*x);for(let S=0;S<A*x;S++){let y=S*4;k[S]=Math.abs(g.d[y]-m.d[y])+Math.abs(g.d[y+1]-m.d[y+1])+Math.abs(g.d[y+2]-m.d[y+2])>48?1:0;}let R=2,_=[];for(let S=R;S<x-R;S++)for(let y=R;y<A-R;y++){let C=S*A+y;if(!k[C])continue;let F=true;for(let B=-R;B<=R&&F;B++)for(let j=-R;j<=R;j++)if(!k[C+B*A+j]){F=false;break}if(!F)continue;let P=C*4,M=b(g.d[P],g.d[P+1],g.d[P+2]),q=b(m.d[P],m.d[P+1],m.d[P+2]);_.push({ratio:(Math.max(M,q)+.05)/(Math.min(M,q)+.05),fg:`rgb(${g.d[P]},${g.d[P+1]},${g.d[P+2]})`,bg:`rgb(${m.d[P]},${m.d[P+1]},${m.d[P+2]})`});}if(_.length<40)return null;_.sort((S,y)=>S.ratio-y.ratio);let w=_[Math.floor(_.length*.02)];return {worst:w.ratio,best:_[_.length-1].ratio,worstFg:w.fg,worstBg:w.bg,core:_.length}}async function qP(l,c){let g=l.screenshot;if(typeof g!="function"||c.length===0)return [];let m=Array.from(new Set(c)).slice(0,Kh),p=[],b=false,A=Date.now()+tv;try{await vr(l.evaluate("if(typeof globalThis.__name==='undefined'){globalThis.__name=function(t){return t}}"),A);let x=await vr(l.evaluate(OP,{selectors:m,maxBoxes:Yh,maxW:Zh,maxH:Qh,maxArea:ev}),A);await vr(jo(l,{tool:"contrast-gradient-text",css:"[data-wa-gt]{background-image:none!important;background-color:transparent!important}"}),A),b=!0;let k=0;for(let R of m){let _=x[R];if(!_)continue;if(Date.now()>A||k+_.boxes.length*2>Jh)break;let w=1/0,S=0,y="",C="",F=!0,P=globalThis.Buffer;for(let M of _.boxes){k+=2;let q={x:M.x,y:M.y,width:M.w,height:M.h},B=await vr(g.call(l,{clip:q,fullPage:!0,type:"png",animations:"disabled"}),A);await vr(l.evaluate(T=>{document.querySelector(T)?.setAttribute("data-wa-gt","1");},R),A);let j;try{j=await vr(g.call(l,{clip:q,fullPage:!0,type:"png",animations:"disabled"}),A);}finally{await l.evaluate(T=>{document.querySelector(T)?.removeAttribute("data-wa-gt");},R).catch(()=>{});}let X=await vr(l.evaluate(NP,{painted:P?P.from(B).toString("base64"):"",backdrop:P?P.from(j).toString("base64"):""}),A);if(!X){F=!1;break}X.worst<w&&(w=X.worst,y=X.worstFg,C=X.worstBg),X.best>S&&(S=X.best);}!F||!isFinite(w)||p.push({selector:R,fail:w<_.threshold*.97,bestRatio:S,worstRatio:w,worstBg:C,threshold:_.threshold,fg:y,gradientText:!0});}}catch(x){globalThis.process?.env?.WA_DEBUG_PIXELS&&console.error("gradient text judge failed",x);}finally{if(b)try{await Promise.race([l.evaluate(()=>{document.querySelectorAll('style[data-wa-injected^="contrast-gradient-text:"]').forEach(x=>x.remove()),document.querySelectorAll("[data-wa-gt]").forEach(x=>x.removeAttribute("data-wa-gt"));}),new Promise(x=>setTimeout(x,1e3))]);}catch{}}return p}function BP(l,c){let{confidence:g,reviewReason:m,...p}=l;return {...p,id:l.id.replace("axe-incomplete-","axe-"),impact:"serious",message:c.gradientText?`contrast: gradient text \u2014 worst stop ${c.fg} is ${c.worstRatio.toFixed(2)}:1 on ${c.worstBg??"its backdrop"}, needs ${c.threshold}:1 (measured from the painted glyph pixels)`:`contrast: ${c.fg} text on its rendered background is at best ${c.bestRatio.toFixed(2)}:1 (measured from pixels, every background pixel behind the text fails), needs ${c.threshold}:1`}}async function rv(l,c,g,m){let p=c.filter(_=>_.wcag!=="1.4.3"||!_.selector?false:_.source==="axe-core"?IP.has(g.get(_.id)??""):_.type==="contrast_insufficient"&&/gradient or image|gradient-clipped/.test(_.reviewReason??""));if(p.length===0)return [];let b=_=>/gradient-clipped/.test(_.reviewReason??""),A=[...await $u(l,p.filter(_=>!b(_)).map(_=>_.selector)),...await qP(l,p.filter(b).map(_=>_.selector))];if(m)for(let _ of A)m.set(_.selector,_);globalThis.process?.env?.WA_DEBUG_PIXELS&&console.error(`pixel judge: ${p.length} candidates, ${A.length} measured, ${A.filter(_=>_.fail).length} fail`);let x=new Map(A.filter(_=>_.fail).map(_=>[_.selector,_])),k=[],R=new Set;for(let _ of p){let w=x.get(_.selector);!w||R.has(_.selector)||(R.add(_.selector),k.push(BP(_,w)));}return k}function HP(l){l=l.replace("#",""),l.length===3&&(l=l[0]+l[0]+l[1]+l[1]+l[2]+l[2]);let c=parseInt(l,16);return [c>>16&255,c>>8&255,c&255]}function ju(l){let c=l/255;return c<=.03928?c/12.92:Math.pow((c+.055)/1.055,2.4)}function nv(l,c,g){return .2126*ju(l)+.7152*ju(c)+.0722*ju(g)}function VP(l,c){let g=Math.max(l,c),m=Math.min(l,c);return (g+.05)/(m+.05)}function av(l){if(l.startsWith("#"))return HP(l);let c=l.match(/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)/);return c?[parseInt(c[1]),parseInt(c[2]),parseInt(c[3])]:null}function Ln(l,c){let g=av(l),m=av(c);return !g||!m?0:VP(nv(...g),nv(...m))}var $P=30,jP=10,zP=2e4,GP=30,UP=400*1024,WP="https://openrouter.ai/api/v1",XP="anthropic/claude-haiku-4.5",iv="deepseek/deepseek-v4-flash",ov=400,sv=125,zu=160,KP=2e3,Go=new Map;function YP(l){let c=0;for(let g=0;g<l.length;g++)c=(c<<5)-c+l.charCodeAt(g)|0;return Math.abs(c).toString(36)}var Gu=l=>l.wcag||l.type,lv=(l,c,g)=>`${l}|${c.selector}|${Gu(c)}|${YP(g)}`,Uu=()=>!!globalThis.process?.env?.WA_DEBUG_JUDGE;function JP(l){let{selectors:c,maxHtml:g}=l,m={elements:{}},p=[],b=P=>/\(\s*prefers-reduced-motion\s*(:\s*reduce\s*)?\)/i.test(P)&&!/^\s*not\b/i.test(P),A=P=>{let M=P.split(",").map(q=>q.trim()).filter(Boolean);return M.length?M.every(q=>{let B=q.match(/^(-?[\d.]+)(ms|s)$/i);return B?parseFloat(B[1])*(B[2].toLowerCase()==="s"?1e3:1)<=10:false}):false},x=(P,M,q)=>{if(!(q>8))for(let B of Array.from(P)){let j=B.media?.mediaText,X=M||typeof j=="string"&&b(j),T=B.style,v=B.selectorText;if(X&&T&&typeof v=="string"){let H=T.getPropertyValue("animation-name").trim(),V=/^none(\s*,\s*none)*$/i.test(H)||A(T.getPropertyValue("animation-duration"))||/^paused/i.test(T.getPropertyValue("animation-play-state").trim()),G=/^none(\s*,\s*none)*$/i.test(T.getPropertyValue("transition-property").trim())||A(T.getPropertyValue("transition-duration"));(V||G)&&p.push({selector:v,anim:V,trans:G});}let E=B.cssRules;E&&E.length&&x(E,X,q+1);let I=B.styleSheet;if(I)try{x(I.cssRules,X||b(B.media?.mediaText||""),q+1);}catch{}}};try{for(let P of Array.from(document.styleSheets))try{x(P.cssRules,b(P.media?.mediaText||""),0);}catch{}}catch{}let k=(P,M)=>{try{return P.matches(M)}catch{return false}},R=P=>P.split(",").map(M=>{let q=M.trim().match(/^(-?[\d.]+)(ms|s)$/i);return q?parseFloat(q[1])*(q[2].toLowerCase()==="s"?1e3:1):0}),_=P=>{let M=P.cloneNode(true);M.querySelectorAll("script, style").forEach(B=>B.remove());let q=(M.textContent||"").replace(/\s+/g," ").trim();if(!q){for(let B of Array.from(P.querySelectorAll("img[alt], [aria-label]")))if(q=(B.getAttribute("alt")||B.getAttribute("aria-label")||"").trim(),q)break}return q},w=P=>{let M=(P.getAttribute("aria-label")||"").trim();if(M)return M;let B=(P.getAttribute("aria-labelledby")||"").split(/\s+/).filter(Boolean).map(T=>{let v=document.getElementById(T);return v?(v.textContent||"").replace(/\s+/g," ").trim():""}).filter(Boolean).join(" ");if(B)return B;let j=_(P);if(j)return j;let X=P instanceof HTMLInputElement&&/^(submit|button|reset|image)$/i.test(P.type)?(P.value||P.alt||"").trim():"";return X||(P.getAttribute("title")||"").trim()},S='a[href], button, input:not([type="hidden"]), select, textarea, summary, [role="button"], [role="link"], [role="menuitem"], [role="tab"], [role="img"], [tabindex]:not([tabindex="-1"])',y=window.scrollX||0,C=window.scrollY||0,F=[];for(let P of c){let M=null;try{M=document.querySelector(P);}catch{}if(!M){m.elements[P]={found:false};continue}let q=F.indexOf(M);q<0&&(q=F.push(M)-1);let B=getComputedStyle(M),j=M.getBoundingClientRect(),X=M.tagName.toLowerCase(),T={found:true,elementKey:q,tag:X,html:(M.outerHTML||"").slice(0,g),rect:{x:j.left+y,y:j.top+C,w:j.width,h:j.height},role:(M.getAttribute("role")||"").toLowerCase(),ariaHidden:M.getAttribute("aria-hidden")==="true"||!!M.closest('[aria-hidden="true"]'),hidden:B.display==="none"||B.visibility==="hidden"||!!M.closest("[hidden]"),cssBackgroundImage:/url\(/i.test(B.backgroundImage||""),reducedMotionHandled:false,nearText:"",fg:B.color,bg:B.backgroundColor,fontSize:parseFloat(B.fontSize)||0,fontWeight:parseInt(B.fontWeight,10)||400};if(X==="img"){let G=M;T.img={src:(G.currentSrc||G.getAttribute("src")||"").slice(0,300),alt:G.getAttribute("alt"),naturalW:G.naturalWidth||0,naturalH:G.naturalHeight||0,attrW:parseInt(G.getAttribute("width")||"0",10)||0,attrH:parseInt(G.getAttribute("height")||"0",10)||0};}if(T.cssBackgroundImage){let G=M.closest(S);G&&(T.control={tag:G.tagName.toLowerCase(),name:w(G).slice(0,120)});}if(!/^(img|video|canvas|iframe|object|embed|svg)$/.test(X)){let G=B.animationName.split(",").some(z=>z.trim()&&z.trim()!=="none")&&R(B.animationDuration).some(z=>z>10),N=R(B.transitionDuration).some(z=>z>10)&&B.transitionProperty.trim()!=="none",U=p.filter(z=>k(M,z.selector)),Y=!G||U.some(z=>z.anim),Z=!N||U.some(z=>z.trans);T.reducedMotionHandled=(G||N)&&Y&&Z;}let v=M.closest('a[href], button, [role="button"], [role="link"]');if(v&&v!==M){let G=v.cloneNode(true);G.querySelectorAll("img, svg").forEach(Y=>Y.remove());let N=(G.textContent||"").replace(/\s+/g," ").trim(),U=(v.getAttribute("aria-label")||"").trim();T.parentInteractive={tag:v.tagName.toLowerCase(),text:(N||U).slice(0,120)};}let E=G=>{let N=G.cloneNode(true);return N.querySelectorAll("script, style").forEach(U=>U.remove()),(N.textContent||"").replace(/\s+/g," ").trim()},I=M.matches('a[href], [role="link"]'),H=E(M),V=M.parentElement;if(I&&(V=M.closest("p, li, td, th, dd, dt, figcaption, blockquote")||M.parentElement),V){let G=E(V),N=I&&H?G.indexOf(H):-1,U=N>120?N-120:0;T.nearText=(U?"\u2026":"")+G.slice(U,U+240);}m.elements[P]=T;}return m}function ZP(l,c){let g=(l.type||"").toLowerCase(),m=l.wcag||"";return g==="decorative_image_with_title"?"generic":m==="1.1.1"&&(c?.tag==="img"||/alt|image/.test(g))?"alt":m==="1.4.3"||m==="1.4.6"||g==="color-contrast"||g==="contrast_insufficient"||g==="contrast_enhanced"?"contrast":m==="2.2.2"||m==="2.3.3"||/motion|animation|reduced_motion/.test(g)?"motion":"generic"}function Wu(l){return !!l&&l.tag!=="img"&&l.cssBackgroundImage&&!l.img}var QP=/\b(needs?|requires?|for)\s+(a\s+)?(human|manual)?\s*review\b|\bhuman review\b|\bmanual review\b|\bincomplete\b/gi;function eM(l){let c=String(l??"").replace(/\s+/g," ").replace(QP,"judged").trim();if(c.length<=zu)return c;let g=c.slice(0,zu-1),m=g.lastIndexOf(" ");return (m>zu/2?g.slice(0,m):g).replace(/[\s,;:–—-]+$/,"")+"\u2026"}function tM(l){let c=String(l??"").replace(/\s+/g," ").trim();if(c=c.replace(/^(an?\s+|the\s+)?(image|picture|photo|photograph|graphic|icon|illustration|screenshot)\s+(of|showing|depicting)(\s+|$)(an?\s+|the\s+)?/i,""),c=c.replace(/^["'“”]+|["'“”]+$/g,"").trim(),c.length>sv){c=c.slice(0,sv);let g=c.lastIndexOf(" ");g>60&&(c=c.slice(0,g)),c=c.replace(/[\s,;:–—-]+$/,"");}return c&&(c=c[0].toUpperCase()+c.slice(1)),c}function sa(l){let c=l.match(/\d+(\.\d+)?/g);return !c||c.length<3?l:"#"+c.slice(0,3).map(g=>Math.round(Number(g)).toString(16).padStart(2,"0")).join("")}var dv=/^#?([0-9a-f]{6})$/i;function rM(l){let c=String(l??"").trim().match(dv);return c?"#"+c[1].toLowerCase():null}function nM(l){let{confidence:c,reviewReason:g,...m}=l;return {...m,id:l.id.replace("axe-incomplete-","axe-")}}function aM(l){let c=l;if(typeof l=="string"){let p=l.replace(/```json\s*/gi,"").replace(/```/g,"").match(/\[[\s\S]*\]/);if(!p)return null;try{c=JSON.parse(p[0]);}catch{return null}}else l&&typeof l=="object"&&Array.isArray(l.verdicts)&&(c=l.verdicts);if(!Array.isArray(c))return null;let g=[];for(let m of c){if(!m||typeof m!="object")continue;let{id:p,verdict:b,reason:A,fix:x}=m;if(typeof p!="string"||b!=="pass"&&b!=="violation")continue;let k=x&&typeof x=="object"?x:void 0;g.push({id:p,verdict:b,reason:typeof A=="string"?A:void 0,fix:k?{attribute:typeof k.attribute=="string"?k.attribute:void 0,value:typeof k.value=="string"?k.value:void 0}:void 0});}return g}var la=class extends Error{},iM=`You are the final accessibility judge for a WCAG scanner. Automated engines could not decide the findings below. You MUST decide each one: "pass" (not a violation) or "violation". There is no third option \u2014 never answer "unsure", never defer to a human.
436
+ `),{inject:N}=await Promise.resolve().then(()=>(Tr(),Qr));try{await N(l,{tool:"detector-helpers",content:G});}catch{await l.evaluate(`(0,eval)(${JSON.stringify(G)})`);}}catch(q){console.warn("[webability] helper injection failed:",q.message),(g??[]).push("color:kernel-injection-failed");}let A=[],x="";try{let{applyPlatformTemplates:q}=await Promise.resolve().then(()=>(Ru(),Tu)),B=b;x=B.filter(j=>j!=="universal"&&j!=="universal_iframe").join(", "),A=await q(l,B);}catch{}let{guardDetectorState:k}=await Promise.resolve().then(()=>(Tr(),Qr)),R=globalThis.process?.env?.WA_STRICT_STATE==="1",_={strict:R,bugs:m?.internalBugs},w=await k(l,"detectors:parallel",g??[],()=>Promise.allSettled((m?.experimental?[...Hh,...wP]:Hh).map(async q=>{try{let B=await q.detect(l);return q.cap&&B.length>=q.cap&&p.push({detector:q.name,cap:q.cap}),B}catch(B){return Vh(m?.internalBugs,q.name,B),[]}})),_),S=[];m?.skipFocusMutating&&(g??[]).push("focus:mutating-detectors-skipped (live-tab scan; focus visibility and focus obscured were not checked)");let y=[...m?.skipFocusMutating?[]:[Xg,Wg],...m?.extraSerialDetectors??[]];for(let q of y){let B=[];try{B=await k(l,q.name,g??[],()=>q.detect(l).catch(j=>(Vh(m?.internalBugs,q.name,j),[])),_);}catch(j){if(R)throw j}try{q.cap&&B.length>=q.cap&&p.push({detector:q.name,cap:q.cap}),S=S.concat(B);}catch{}}let C=[...w.flatMap(q=>q.status==="fulfilled"?q.value:[]),...S];if(x)for(let q of C)q.needsAI&&(q.context=Lg(q.context,x));let F=[...A,...C],P=xP(F),M=["wp-ada-compliance","webability-widget","webability-a11y","asw-","userway","acsb","audioeye","equallyai"];return P.filter(q=>{let B=q.selector.toLowerCase();return B.trim()?!M.some(j=>B.includes(j)):false})}function xP(l){let c=new Set;return l.filter(g=>{let m=`${g.selector}::${g.issueType}`;return c.has(m)?false:(c.add(m),true)})}var aa="1.17.1";var Pu=["wcag2a","wcag2aa","wcag21aa","wcag22aa"];function Mu(l){return l.includes("wcag21aa")||l.includes("wcag22aa")||l.includes("wcag134")?{"css-orientation-lock":{enabled:true}}:{}}function jh(l,c){return c==="AAA"&&!l.includes("wcag2aaa")?[...l,"wcag2aaa"]:l}var AP={"1.1.1":"A","1.2.1":"A","1.2.2":"A","1.2.3":"A","1.3.1":"A","1.3.2":"A","1.3.3":"A","1.4.1":"A","1.4.2":"A","2.1.1":"A","2.1.2":"A","2.1.4":"A","2.2.1":"A","2.2.2":"A","2.3.1":"A","2.4.1":"A","2.4.2":"A","2.4.3":"A","2.4.4":"A","2.5.1":"A","2.5.2":"A","2.5.3":"A","2.5.4":"A","3.1.1":"A","3.2.1":"A","3.2.2":"A","3.2.6":"A","3.3.1":"A","3.3.2":"A","3.3.7":"A","4.1.2":"A","1.2.4":"AA","1.2.5":"AA","1.3.4":"AA","1.3.5":"AA","1.4.3":"AA","1.4.4":"AA","1.4.5":"AA","1.4.10":"AA","1.4.11":"AA","1.4.12":"AA","1.4.13":"AA","2.4.5":"AA","2.4.6":"AA","2.4.7":"AA","2.4.11":"AA","2.5.7":"AA","2.5.8":"AA","3.1.2":"AA","3.2.3":"AA","3.2.4":"AA","3.3.3":"AA","3.3.4":"AA","3.3.8":"AA","4.1.3":"AA","1.2.6":"AAA","1.2.7":"AAA","1.2.8":"AAA","1.2.9":"AAA","1.3.6":"AAA","1.4.6":"AAA","1.4.7":"AAA","1.4.8":"AAA","1.4.9":"AAA","2.1.3":"AAA","2.2.3":"AAA","2.2.4":"AAA","2.2.5":"AAA","2.2.6":"AAA","2.3.2":"AAA","2.3.3":"AAA","2.4.8":"AAA","2.4.9":"AAA","2.4.10":"AAA","2.4.12":"AAA","2.4.13":"AAA","2.5.5":"AAA","2.5.6":"AAA","3.1.3":"AAA","3.1.4":"AAA","3.1.5":"AAA","3.1.6":"AAA","3.2.5":"AAA","3.3.5":"AAA","3.3.6":"AAA","3.3.9":"AAA"};function _P(l){return AP[l]}var oi={A:1,AA:2,AAA:3};function zh(l){let c=String(l.wcag||"").split(/[,\s]+/).filter(m=>/^\d+\.\d+\.\d+$/.test(m));if(c.length===0)return l.level??"AA";let g;for(let m of c){let p=_P(m);p&&(!g||oi[p]<oi[g])&&(g=p);}return g}function ia(l,c="AA"){let g=oi[c]??oi.AA;return l.filter(m=>{let p=zh(m);return !!p&&oi[p]<=g})}var DP=new Set(["new_window_link","external_link_warning","download_link_warning"]);function Gh(l){let c=DP.has(l.issueType)?"minor":l.needsAI?"serious":"moderate",g=l.attribute==="style",m=l.attribute.startsWith("data-"),p=g&&l.fixValue?EP(l.fixValue):l.fixValue;return {id:`wa-${l.issueType}-${In(l.selector)}`,source:"webability",type:l.issueType,wcag:l.wcag,level:zh({wcag:l.wcag})??"AA",impact:c,message:SP(l,p,m),selector:l.selector,html:l.outerHtml,...l.needsReview?{confidence:"needs_review"}:{},...l.reviewReason?{reviewReason:l.reviewReason}:{},fix:{attribute:l.attribute,currentValue:l.currentValue,suggestedValue:p,needsManualReview:l.needsAI||g||m||!!l.needsReview||!!l.manualFix}}}function EP(l){let c=l.trim();if(!c)return "";let g=c.endsWith(";"),p=c.split(";").map(b=>{let x=b.toLowerCase().lastIndexOf("!important");return x===-1?b.trim():b.slice(0,x).trim()}).filter(b=>b.length>0);return p.length===0?"":p.join(";")+(g?";":"")}function SP(l,c,g){if(l.message)return l.message;let m=l.issueType.replace(/_/g," "),p=c??l.fixValue;return g?p?`${m}: ${p}`:l.currentValue?`${m}: ${l.currentValue}`:l.context?`${m}: ${l.context}`:m:p?`${m}: set ${l.attribute}="${p}"`:l.currentValue?`${m}: ${l.attribute} is "${l.currentValue}"`:`${m}: missing ${l.attribute}`}function oa(l){return Array.isArray(l)?l.flat(1/0).filter(g=>typeof g=="string").join(" >>> "):typeof l=="string"?l:""}function In(l){let c=0;for(let g=0;g<l.length;g++)c=(c<<5)-c+l.charCodeAt(g)|0;return Math.abs(c).toString(36)}function Ou(l){return l==="critical"||l==="serious"||l==="moderate"||l==="minor"?l:"moderate"}function Nu(l,c=[]){return {total:l.length,critical:l.filter(g=>g.impact==="critical").length,serious:l.filter(g=>g.impact==="serious").length,moderate:l.filter(g=>g.impact==="moderate").length,minor:l.filter(g=>g.impact==="minor").length,incomplete:0}}function kP(l){let c=/^wcag(\d)(\d)(\d{1,2})$/.exec(l);return c?`${c[1]}.${c[2]}.${c[3]}`:""}function qu(l){for(let c of l){let g=kP(c);if(g)return g}return ""}function Bu(l){return l.includes("wcag2aaa")?"AAA":l.includes("wcag2aa")||l.includes("wcag21aa")||l.includes("wcag22aa")?"AA":"A"}async function Wh(l,c){try{let{AxeBuilder:g}=await import('@axe-core/playwright'),m=typeof l.mainFrame=="function"?l:l.axePage?.()??l;return await new g({page:m}).options({rules:Mu(c)}).withTags(c).analyze()}catch{return CP(l,c)}}async function CP(l,c){let g=await Promise.resolve().then(()=>Ig(Hu())),m=g.source??g.default?.source;if(!m)throw new Error("axe-core source unavailable");try{await l.evaluate(m);}catch{let{inject:b}=await Promise.resolve().then(()=>(Tr(),Qr));await b(l,{tool:"axe",content:m});}return await l.evaluate(({wcagTags:b,rules:A})=>new Promise((x,k)=>{let R=window;if(!R.axe)return k(new Error("axe-core not loaded"));R.axe.run(document,{runOnly:{type:"tag",values:b},rules:A,resultTypes:["violations","incomplete"]}).then(x).catch(k);}),{wcagTags:c,rules:Mu(c)})}function Vu(l){let c=[],g=[];for(let m of l)m.confidence==="needs_review"||RP(m)?g.push(m):c.push(TP(m));return {verdicts:c,undecided:g}}function TP(l){if(l.confidence===void 0&&l.reviewReason===void 0)return l;let{confidence:c,reviewReason:g,...m}=l;return m}function RP(l){let c=(l.type||"").toLowerCase(),g=l.wcag||"",m=l.html||"",p=(l.message||"").toLowerCase();if((c==="contrast_insufficient"||c==="color-contrast"||g==="1.4.3"||g==="1.4.11")&&FP(m))return "background uses gradient or image";if(c==="image_of_text"||g==="1.4.5"){let b=Xh(m,"src").toLowerCase();b.startsWith("data:")&&(b=b.split(",")[0]);let A=Xh(m,"alt").toLowerCase();if(/\b(logo|brand|wordmark|hero|banner|footer|marketing|promo|cover)\b/.test(b))return "brand imagery";if(A.length>0&&/\b(logo|brand|product screenshot|dashboard)\b/.test(A))return "branded imagery"}return (c==="inconsistent_navigation"||p.includes("inconsistent navigation"))&&(/<footer/i.test(m)||/<aside/i.test(m))?"footer/aside nav":""}function FP(l){return /background(-image)?\s*:\s*(?:linear-gradient|radial-gradient|conic-gradient|url\()/i.test(l)}function Xh(l,c){let g=new RegExp(`\\b${c}\\s*=\\s*"([^"]*)"`,"i"),m=l.match(g);return m?m[1]:""}Tr();var Kh=60,Yh=3,Jh=120,Zh=1200,Qh=300,ev=2e5,tv=8e3,IP=new Set(["bgImage","bgGradient","bgOverlap","elmPartiallyObscured","elmPartiallyObscuring"]),LP="*,*::before,*::after{color:transparent!important;-webkit-text-fill-color:transparent!important;text-shadow:none!important;text-decoration-color:transparent!important;caret-color:transparent!important}";function PP(l){let{selectors:c,maxBoxes:g,maxW:m,maxH:p,maxArea:b}=l,A=document.documentElement.scrollWidth,x=document.documentElement.scrollHeight,k=document.createElement("canvas");k.width=k.height=1;let R=k.getContext("2d",{willReadFrequently:true}),_=P=>{try{R.clearRect(0,0,1,1),R.fillStyle="#000",R.fillStyle=P,R.fillRect(0,0,1,1);let M=R.getImageData(0,0,1,1).data;return [M[0],M[1],M[2],M[3]]}catch{return null}},w={},S=document.querySelectorAll("video,canvas,iframe,embed,object");if(S.length>200){for(let P of c)w[P]=null;return w}let y=Array.from(S).map(P=>P.getBoundingClientRect()),C=window.scrollX,F=window.scrollY;for(let P of c){w[P]=null;let M=null;try{M=document.querySelector(P);}catch{continue}if(!M)continue;let q=getComputedStyle(M);if(q.visibility!=="visible"||q.display==="none"||q.webkitBackgroundClip==="text"||q.backgroundClip==="text")continue;let B=false,j=0;for(let Z=M;Z;Z=Z.parentElement){if(++j>64){B=true;break}let z=getComputedStyle(Z);parseFloat(z.opacity)<1&&(B=true),(z.mixBlendMode!=="normal"||z.filter!=="none")&&(B=true);}if(B)continue;let X=_(q.color);if(!X||X[3]<255)continue;let T=parseFloat(q.fontSize),v=parseInt(q.fontWeight,10)>=700,E=T>=24||v&&T>=18.66,I=[],H=M.getBoundingClientRect();if(H.height>p*g||H.width>m*2)continue;let V=document.createTreeWalker(M,NodeFilter.SHOW_TEXT),G,N=0,U=false;for(;!U&&(G=V.nextNode());){if(++N>50){U=true;break}if(G.parentElement!==M)continue;let Z=G.textContent||"";if(Z.length>2e3){U=true;break}if(!Z.trim())continue;let z=document.createRange();z.selectNodeContents(G);let ie=z.getClientRects();if(ie.length>g){U=true;break}for(let se=0;se<ie.length;se++){let fe=ie[se];if(!(fe.width<2||fe.height<2)&&(I.push({x:Math.round(fe.left+C),y:Math.round(fe.top+F),w:Math.max(1,Math.round(fe.width)),h:Math.max(1,Math.round(fe.height))}),I.length>g)){U=true;break}}}U||I.length===0||I.length>g||I.some(Z=>Z.w>m||Z.h>p||Z.w*Z.h>b||Z.x<0||Z.y<0||Z.x+Z.w>A||Z.y+Z.h>x)||I.some(Z=>y.some(z=>Z.x<z.right+C&&Z.x+Z.w>z.left+C&&Z.y<z.bottom+F&&Z.y+Z.h>z.top+F))||(w[P]={fg:`rgb(${X[0]},${X[1]},${X[2]})`,threshold:E?3:4.5,boxes:I});}return w}async function MP(l){let{b64:c,fg:g}=l,m=atob(c),p=new Uint8Array(m.length);for(let B=0;B<m.length;B++)p[B]=m.charCodeAt(B);let b=await createImageBitmap(new Blob([p],{type:"image/png"})),A=document.createElement("canvas");A.width=b.width,A.height=b.height;let x=A.getContext("2d",{willReadFrequently:true});x.drawImage(b,0,0);let k=x.getImageData(0,0,A.width,A.height).data,R=B=>{let j=B/255;return j<=.03928?j/12.92:Math.pow((j+.055)/1.055,2.4)},_=(B,j,X)=>.2126*R(B)+.7152*R(j)+.0722*R(X),w=g.match(/\d+/g).map(Number),S=_(w[0],w[1],w[2]),y=Math.max(1,Math.floor(Math.sqrt(A.width*A.height/1500))),C=0,F=1/0,P="",M="",q=0;for(let B=0;B<A.height;B+=y)for(let j=0;j<A.width;j+=y){let X=(B*A.width+j)*4;if(k[X+3]<255)continue;let T=_(k[X],k[X+1],k[X+2]),v=Math.max(S,T),E=Math.min(S,T),I=(v+.05)/(E+.05);I>C&&(C=I,M=`rgb(${k[X]},${k[X+1]},${k[X+2]})`),I<F&&(F=I,P=`rgb(${k[X]},${k[X+1]},${k[X+2]})`),q++;}return q===0?null:{best:C,worst:F,worstBg:P,bestBg:M}}var zo=class extends Error{};function vr(l,c){let g=c-Date.now();if(g<=0)return l.catch(()=>{}),Promise.reject(new zo("pixel pass deadline"));let m,p=new Promise((b,A)=>{m=setTimeout(()=>A(new zo("pixel pass deadline")),g);});return Promise.race([l,p]).finally(()=>clearTimeout(m))}async function $u(l,c){let g=l.screenshot;if(typeof g!="function"||c.length===0)return [];let m=Array.from(new Set(c)).slice(0,Kh),p=[],b=false,A=Date.now()+tv;try{await vr(l.evaluate("if(typeof globalThis.__name==='undefined'){globalThis.__name=function(t){return t}}"),A);let x=await vr(l.evaluate(PP,{selectors:m,maxBoxes:Yh,maxW:Zh,maxH:Qh,maxArea:ev}),A);await vr(jo(l,{tool:"contrast-pixels",css:LP}),A),b=!0;let k=0;for(let R of m){let _=x[R];if(!_)continue;if(Date.now()>A||k+_.boxes.length>Jh)break;let w=0,S=1/0,y="",C="",F=!0;for(let P of _.boxes){k++;let M=await vr(g.call(l,{clip:{x:P.x,y:P.y,width:P.w,height:P.h},fullPage:!0,type:"png",animations:"disabled"}),A),q=globalThis.Buffer,B=q?q.from(M).toString("base64"):"",j=await vr(l.evaluate(MP,{b64:B,fg:_.fg}),A);if(!j){F=!1;break}j.best>w&&(w=j.best,C=j.bestBg),j.worst<S&&(S=j.worst,y=j.worstBg);}F&&p.push({selector:R,fail:w<_.threshold*.97,bestRatio:w,worstRatio:S,...y?{worstBg:y}:{},...C?{bestBg:C}:{},threshold:_.threshold,fg:_.fg});}}catch(x){globalThis.process?.env?.WA_DEBUG_PIXELS&&console.error("pixel judge failed",x);}finally{if(b)try{await Promise.race([l.evaluate(()=>document.querySelectorAll('style[data-wa-injected^="contrast-pixels:"]').forEach(x=>x.remove())),new Promise(x=>setTimeout(x,1e3))]);}catch{}}return p}function OP(l){let{selectors:c,maxBoxes:g,maxW:m,maxH:p,maxArea:b}=l,A=document.documentElement.scrollWidth,x=document.documentElement.scrollHeight,k=window.scrollX,R=window.scrollY,_={};for(let w of c){_[w]=null;let S=null;try{S=document.querySelector(w);}catch{continue}if(!S)continue;let y=getComputedStyle(S);if(y.visibility!=="visible"||y.display==="none"||!(y.webkitBackgroundClip==="text"||y.backgroundClip==="text"))continue;let C=false,F=0;for(let E=S;E;E=E.parentElement){if(++F>64){C=true;break}let I=getComputedStyle(E);(parseFloat(I.opacity)<1||I.mixBlendMode!=="normal"||I.filter!=="none")&&(C=true);}if(C)continue;let P=parseFloat(y.fontSize),M=parseInt(y.fontWeight,10)>=700,q=P>=24||M&&P>=18.66,B=[],j=document.createTreeWalker(S,NodeFilter.SHOW_TEXT),X,T=0,v=false;for(;!v&&(X=j.nextNode());){if(++T>50){v=true;break}if(!(X.textContent||"").trim())continue;let E=document.createRange();E.selectNodeContents(X);let I=E.getClientRects();for(let H=0;H<I.length;H++){let V=I[H];if(!(V.width<2||V.height<2)&&(B.push({x:Math.round(V.left+k),y:Math.round(V.top+R),w:Math.max(1,Math.round(V.width)),h:Math.max(1,Math.round(V.height))}),B.length>g)){v=true;break}}}v||B.length===0||B.some(E=>E.w>m||E.h>p||E.w*E.h>b||E.x<0||E.y<0||E.x+E.w>A||E.y+E.h>x)||(_[w]={threshold:q?3:4.5,boxes:B});}return _}async function NP(l){let c=async S=>{let y=atob(S),C=new Uint8Array(y.length);for(let q=0;q<y.length;q++)C[q]=y.charCodeAt(q);let F=await createImageBitmap(new Blob([C],{type:"image/png"})),P=document.createElement("canvas");P.width=F.width,P.height=F.height;let M=P.getContext("2d",{willReadFrequently:true});return M.drawImage(F,0,0),{w:P.width,h:P.height,d:M.getImageData(0,0,P.width,P.height).data}},g=await c(l.painted),m=await c(l.backdrop);if(g.w!==m.w||g.h!==m.h)return null;let p=S=>{let y=S/255;return y<=.03928?y/12.92:Math.pow((y+.055)/1.055,2.4)},b=(S,y,C)=>.2126*p(S)+.7152*p(y)+.0722*p(C),A=g.w,x=g.h,k=new Uint8Array(A*x);for(let S=0;S<A*x;S++){let y=S*4;k[S]=Math.abs(g.d[y]-m.d[y])+Math.abs(g.d[y+1]-m.d[y+1])+Math.abs(g.d[y+2]-m.d[y+2])>48?1:0;}let R=2,_=[];for(let S=R;S<x-R;S++)for(let y=R;y<A-R;y++){let C=S*A+y;if(!k[C])continue;let F=true;for(let B=-R;B<=R&&F;B++)for(let j=-R;j<=R;j++)if(!k[C+B*A+j]){F=false;break}if(!F)continue;let P=C*4,M=b(g.d[P],g.d[P+1],g.d[P+2]),q=b(m.d[P],m.d[P+1],m.d[P+2]);_.push({ratio:(Math.max(M,q)+.05)/(Math.min(M,q)+.05),fg:`rgb(${g.d[P]},${g.d[P+1]},${g.d[P+2]})`,bg:`rgb(${m.d[P]},${m.d[P+1]},${m.d[P+2]})`});}if(_.length<40)return null;_.sort((S,y)=>S.ratio-y.ratio);let w=_[Math.floor(_.length*.02)];return {worst:w.ratio,best:_[_.length-1].ratio,worstFg:w.fg,worstBg:w.bg,core:_.length}}async function qP(l,c){let g=l.screenshot;if(typeof g!="function"||c.length===0)return [];let m=Array.from(new Set(c)).slice(0,Kh),p=[],b=false,A=Date.now()+tv;try{await vr(l.evaluate("if(typeof globalThis.__name==='undefined'){globalThis.__name=function(t){return t}}"),A);let x=await vr(l.evaluate(OP,{selectors:m,maxBoxes:Yh,maxW:Zh,maxH:Qh,maxArea:ev}),A);await vr(jo(l,{tool:"contrast-gradient-text",css:"[data-wa-gt]{background-image:none!important;background-color:transparent!important}"}),A),b=!0;let k=0;for(let R of m){let _=x[R];if(!_)continue;if(Date.now()>A||k+_.boxes.length*2>Jh)break;let w=1/0,S=0,y="",C="",F=!0,P=globalThis.Buffer;for(let M of _.boxes){k+=2;let q={x:M.x,y:M.y,width:M.w,height:M.h},B=await vr(g.call(l,{clip:q,fullPage:!0,type:"png",animations:"disabled"}),A);await vr(l.evaluate(T=>{document.querySelector(T)?.setAttribute("data-wa-gt","1");},R),A);let j;try{j=await vr(g.call(l,{clip:q,fullPage:!0,type:"png",animations:"disabled"}),A);}finally{await l.evaluate(T=>{document.querySelector(T)?.removeAttribute("data-wa-gt");},R).catch(()=>{});}let X=await vr(l.evaluate(NP,{painted:P?P.from(B).toString("base64"):"",backdrop:P?P.from(j).toString("base64"):""}),A);if(!X){F=!1;break}X.worst<w&&(w=X.worst,y=X.worstFg,C=X.worstBg),X.best>S&&(S=X.best);}!F||!isFinite(w)||p.push({selector:R,fail:w<_.threshold*.97,bestRatio:S,worstRatio:w,worstBg:C,threshold:_.threshold,fg:y,gradientText:!0});}}catch(x){globalThis.process?.env?.WA_DEBUG_PIXELS&&console.error("gradient text judge failed",x);}finally{if(b)try{await Promise.race([l.evaluate(()=>{document.querySelectorAll('style[data-wa-injected^="contrast-gradient-text:"]').forEach(x=>x.remove()),document.querySelectorAll("[data-wa-gt]").forEach(x=>x.removeAttribute("data-wa-gt"));}),new Promise(x=>setTimeout(x,1e3))]);}catch{}}return p}function BP(l,c){let{confidence:g,reviewReason:m,...p}=l;return {...p,id:l.id.replace("axe-incomplete-","axe-"),impact:"serious",message:c.gradientText?`contrast: gradient text \u2014 worst stop ${c.fg} is ${c.worstRatio.toFixed(2)}:1 on ${c.worstBg??"its backdrop"}, needs ${c.threshold}:1 (measured from the painted glyph pixels)`:`contrast: ${c.fg} text on its rendered background is at best ${c.bestRatio.toFixed(2)}:1 (measured from pixels, every background pixel behind the text fails), needs ${c.threshold}:1`}}async function rv(l,c,g,m){let p=c.filter(_=>_.wcag!=="1.4.3"||!_.selector?false:_.source==="axe-core"?IP.has(g.get(_.id)??""):_.type==="contrast_insufficient"&&/gradient or image|gradient-clipped/.test(_.reviewReason??""));if(p.length===0)return [];let b=_=>/gradient-clipped/.test(_.reviewReason??""),A=[...await $u(l,p.filter(_=>!b(_)).map(_=>_.selector)),...await qP(l,p.filter(b).map(_=>_.selector))];if(m)for(let _ of A)m.set(_.selector,_);globalThis.process?.env?.WA_DEBUG_PIXELS&&console.error(`pixel judge: ${p.length} candidates, ${A.length} measured, ${A.filter(_=>_.fail).length} fail`);let x=new Map(A.filter(_=>_.fail).map(_=>[_.selector,_])),k=[],R=new Set;for(let _ of p){let w=x.get(_.selector);!w||R.has(_.selector)||(R.add(_.selector),k.push(BP(_,w)));}return k}function HP(l){l=l.replace("#",""),l.length===3&&(l=l[0]+l[0]+l[1]+l[1]+l[2]+l[2]);let c=parseInt(l,16);return [c>>16&255,c>>8&255,c&255]}function ju(l){let c=l/255;return c<=.03928?c/12.92:Math.pow((c+.055)/1.055,2.4)}function nv(l,c,g){return .2126*ju(l)+.7152*ju(c)+.0722*ju(g)}function VP(l,c){let g=Math.max(l,c),m=Math.min(l,c);return (g+.05)/(m+.05)}function av(l){if(l.startsWith("#"))return HP(l);let c=l.match(/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)/);return c?[parseInt(c[1]),parseInt(c[2]),parseInt(c[3])]:null}function Ln(l,c){let g=av(l),m=av(c);return !g||!m?0:VP(nv(...g),nv(...m))}var $P=30,jP=10,zP=2e4,GP=30,UP=400*1024,WP="https://openrouter.ai/api/v1",XP="anthropic/claude-haiku-4.5",iv="deepseek/deepseek-v4-flash",ov=400,sv=125,zu=160,KP=2e3,Go=new Map;function YP(l){let c=0;for(let g=0;g<l.length;g++)c=(c<<5)-c+l.charCodeAt(g)|0;return Math.abs(c).toString(36)}var Gu=l=>l.wcag||l.type,lv=(l,c,g)=>`${l}|${c.selector}|${Gu(c)}|${YP(g)}`,Uu=()=>!!globalThis.process?.env?.WA_DEBUG_JUDGE;function JP(l){let{selectors:c,maxHtml:g}=l,m={elements:{}},p=[],b=P=>/\(\s*prefers-reduced-motion\s*(:\s*reduce\s*)?\)/i.test(P)&&!/^\s*not\b/i.test(P),A=P=>{let M=P.split(",").map(q=>q.trim()).filter(Boolean);return M.length?M.every(q=>{let B=q.match(/^(-?[\d.]+)(ms|s)$/i);return B?parseFloat(B[1])*(B[2].toLowerCase()==="s"?1e3:1)<=10:false}):false},x=(P,M,q)=>{if(!(q>8))for(let B of Array.from(P)){let j=B.media?.mediaText,X=M||typeof j=="string"&&b(j),T=B.style,v=B.selectorText;if(X&&T&&typeof v=="string"){let H=T.getPropertyValue("animation-name").trim(),V=/^none(\s*,\s*none)*$/i.test(H)||A(T.getPropertyValue("animation-duration"))||/^paused/i.test(T.getPropertyValue("animation-play-state").trim()),G=/^none(\s*,\s*none)*$/i.test(T.getPropertyValue("transition-property").trim())||A(T.getPropertyValue("transition-duration"));(V||G)&&p.push({selector:v,anim:V,trans:G});}let E=B.cssRules;E&&E.length&&x(E,X,q+1);let I=B.styleSheet;if(I)try{x(I.cssRules,X||b(B.media?.mediaText||""),q+1);}catch{}}};try{for(let P of Array.from(document.styleSheets))try{x(P.cssRules,b(P.media?.mediaText||""),0);}catch{}}catch{}let k=(P,M)=>{try{return P.matches(M)}catch{return false}},R=P=>P.split(",").map(M=>{let q=M.trim().match(/^(-?[\d.]+)(ms|s)$/i);return q?parseFloat(q[1])*(q[2].toLowerCase()==="s"?1e3:1):0}),_=P=>{let M=P.cloneNode(true);M.querySelectorAll("script, style").forEach(B=>B.remove());let q=(M.textContent||"").replace(/\s+/g," ").trim();if(!q){for(let B of Array.from(P.querySelectorAll("img[alt], [aria-label]")))if(q=(B.getAttribute("alt")||B.getAttribute("aria-label")||"").trim(),q)break}return q},w=P=>{let M=(P.getAttribute("aria-label")||"").trim();if(M)return M;let B=(P.getAttribute("aria-labelledby")||"").split(/\s+/).filter(Boolean).map(T=>{let v=document.getElementById(T);return v?(v.textContent||"").replace(/\s+/g," ").trim():""}).filter(Boolean).join(" ");if(B)return B;let j=_(P);if(j)return j;let X=P instanceof HTMLInputElement&&/^(submit|button|reset|image)$/i.test(P.type)?(P.value||P.alt||"").trim():"";return X||(P.getAttribute("title")||"").trim()},S='a[href], button, input:not([type="hidden"]), select, textarea, summary, [role="button"], [role="link"], [role="menuitem"], [role="tab"], [role="img"], [tabindex]:not([tabindex="-1"])',y=window.scrollX||0,C=window.scrollY||0,F=[];for(let P of c){let M=null;try{M=document.querySelector(P);}catch{}if(!M){m.elements[P]={found:false};continue}let q=F.indexOf(M);q<0&&(q=F.push(M)-1);let B=getComputedStyle(M),j=M.getBoundingClientRect(),X=M.tagName.toLowerCase(),T={found:true,elementKey:q,tag:X,html:(M.outerHTML||"").slice(0,g),rect:{x:j.left+y,y:j.top+C,w:j.width,h:j.height},role:(M.getAttribute("role")||"").toLowerCase(),ariaHidden:M.getAttribute("aria-hidden")==="true"||!!M.closest('[aria-hidden="true"]'),hidden:B.display==="none"||B.visibility==="hidden"||!!M.closest("[hidden]"),cssBackgroundImage:/url\(/i.test(B.backgroundImage||""),reducedMotionHandled:false,nearText:"",fg:B.color,bg:B.backgroundColor,fontSize:parseFloat(B.fontSize)||0,fontWeight:parseInt(B.fontWeight,10)||400};if(X==="img"){let G=M;T.img={src:(G.currentSrc||G.getAttribute("src")||"").slice(0,300),alt:G.getAttribute("alt"),naturalW:G.naturalWidth||0,naturalH:G.naturalHeight||0,attrW:parseInt(G.getAttribute("width")||"0",10)||0,attrH:parseInt(G.getAttribute("height")||"0",10)||0};}if(T.cssBackgroundImage){let G=M.closest(S);G&&(T.control={tag:G.tagName.toLowerCase(),name:w(G).slice(0,120)});}if(!/^(img|video|canvas|iframe|object|embed|svg)$/.test(X)){let G=B.animationName.split(",").some(z=>z.trim()&&z.trim()!=="none")&&R(B.animationDuration).some(z=>z>10),N=R(B.transitionDuration).some(z=>z>10)&&B.transitionProperty.trim()!=="none",U=p.filter(z=>k(M,z.selector)),Y=!G||U.some(z=>z.anim),Z=!N||U.some(z=>z.trans);T.reducedMotionHandled=(G||N)&&Y&&Z;}let v=M.closest('a[href], button, [role="button"], [role="link"]');if(v&&v!==M){let G=v.cloneNode(true);G.querySelectorAll("img, svg").forEach(Y=>Y.remove());let N=(G.textContent||"").replace(/\s+/g," ").trim(),U=(v.getAttribute("aria-label")||"").trim();T.parentInteractive={tag:v.tagName.toLowerCase(),text:(N||U).slice(0,120)};}let E=G=>{let N=G.cloneNode(true);return N.querySelectorAll("script, style").forEach(U=>U.remove()),(N.textContent||"").replace(/\s+/g," ").trim()},I=M.matches('a[href], [role="link"]'),H=E(M),V=M.parentElement;if(I&&(V=M.closest("p, li, td, th, dd, dt, figcaption, blockquote")||M.parentElement),V){let G=E(V),N=I&&H?G.indexOf(H):-1,U=N>120?N-120:0;T.nearText=(U?"\u2026":"")+G.slice(U,U+240);}m.elements[P]=T;}return m}function ZP(l,c){let g=(l.type||"").toLowerCase(),m=l.wcag||"";return g==="decorative_image_with_title"?"generic":m==="1.1.1"&&(c?.tag==="img"||/alt|image/.test(g))?"alt":m==="1.4.3"||m==="1.4.6"||g==="color-contrast"||g==="contrast_insufficient"||g==="contrast_enhanced"?"contrast":m==="2.2.2"||m==="2.3.3"||/motion|animation|reduced_motion/.test(g)?"motion":"generic"}function Wu(l){return !!l&&l.tag!=="img"&&l.cssBackgroundImage&&!l.img}var QP=/\b(needs?|requires?|for)\s+(a\s+)?(human|manual)?\s*review\b|\bhuman review\b|\bmanual review\b|\bincomplete\b/gi;function eM(l){let c=String(l??"").replace(/\s+/g," ").replace(QP,"judged").trim();if(c.length<=zu)return c;let g=c.slice(0,zu-1),m=g.lastIndexOf(" ");return (m>zu/2?g.slice(0,m):g).replace(/[\s,;:–—-]+$/,"")+"\u2026"}function tM(l){let c=String(l??"").replace(/\s+/g," ").trim();if(c=c.replace(/^(an?\s+|the\s+)?(image|picture|photo|photograph|graphic|icon|illustration|screenshot)\s+(of|showing|depicting)(\s+|$)(an?\s+|the\s+)?/i,""),c=c.replace(/^["'“”]+|["'“”]+$/g,"").trim(),c.length>sv){c=c.slice(0,sv);let g=c.lastIndexOf(" ");g>60&&(c=c.slice(0,g)),c=c.replace(/[\s,;:–—-]+$/,"");}return c&&(c=c[0].toUpperCase()+c.slice(1)),c}function sa(l){let c=l.match(/\d+(\.\d+)?/g);return !c||c.length<3?l:"#"+c.slice(0,3).map(g=>Math.round(Number(g)).toString(16).padStart(2,"0")).join("")}var dv=/^#?([0-9a-f]{6})$/i;function rM(l){let c=String(l??"").trim().match(dv);return c?"#"+c[1].toLowerCase():null}function nM(l){let{confidence:c,reviewReason:g,...m}=l;return {...m,id:l.id.replace("axe-incomplete-","axe-")}}function aM(l){let c=l;if(typeof l=="string"){let p=l.replace(/```json\s*/gi,"").replace(/```/g,"").match(/\[[\s\S]*\]/);if(!p)return null;try{c=JSON.parse(p[0]);}catch{return null}}else l&&typeof l=="object"&&Array.isArray(l.verdicts)&&(c=l.verdicts);if(!Array.isArray(c))return null;let g=[];for(let m of c){if(!m||typeof m!="object")continue;let{id:p,verdict:b,reason:A,fix:x}=m;if(typeof p!="string"||b!=="pass"&&b!=="violation")continue;let k=x&&typeof x=="object"?x:void 0;g.push({id:p,verdict:b,reason:typeof A=="string"?A:void 0,fix:k?{attribute:typeof k.attribute=="string"?k.attribute:void 0,value:typeof k.value=="string"?k.value:void 0}:void 0});}return g}var la=class extends Error{},iM=`You are the final accessibility judge for a WCAG scanner. Automated engines could not decide the findings below. You MUST decide each one: "pass" (not a violation) or "violation". There is no third option \u2014 never answer "unsure", never defer to a human.
386
437
 
387
438
  Rules:
388
439
  - Images (1.1.1): "pass" when the image is decorative, purely presentational, a spacer/tracking pixel, or is named by the text of its enclosing link/button. Otherwise "violation" with fix.attribute="alt" and a concrete alt text written from the image and its context: \u2264125 characters, no "image of"/"picture of" prefix, no file names.
@@ -402,7 +453,7 @@ Omit "fix" for passes.`;function oM(l){let c=l.items.map(({screenshot:g,...m})=>
402
453
  Conformance level: ${l.level}
403
454
 
404
455
  Findings:
405
- ${JSON.stringify(c,null,1)}`}function sM(l,c={}){let g=l.vision&&l.items.some(b=>b.screenshot),m=g?c.visionModel||XP:c.textModel||iv,p=[{type:"text",text:oM(l)}];if(g)for(let b of l.items)b.screenshot&&(p.push({type:"text",text:`Crop for ${b.id}:`}),p.push({type:"image_url",image_url:{url:`data:image/png;base64,${b.screenshot}`}}));return {model:m,temperature:0,max_tokens:4096,...m===iv&&c.disableTextModelReasoning?{reasoning:{enabled:false}}:{},messages:[{role:"system",content:iM},{role:"user",content:p}]}}function lM(l){let c=(l.baseUrl||WP).replace(/\/+$/,""),g=false;try{let m=new URL(c).hostname;g=m==="openrouter.ai"||m.endsWith(".openrouter.ai");}catch{}return async(m,p)=>{let b=await fetch(`${c}/chat/completions`,{method:"POST",signal:p,headers:{"Content-Type":"application/json",Authorization:`Bearer ${l.apiKey}`,"HTTP-Referer":"https://webability.io","X-Title":"WebAbility scanner judge"},body:JSON.stringify(sM(m,{visionModel:l.visionModel,textModel:l.textModel,disableTextModelReasoning:g}))});if(!b.ok)throw new la(`judge model HTTP ${b.status}`);let x=(await b.json()).choices?.[0]?.message?.content;if(typeof x=="string")return x;if(Array.isArray(x))return x.map(k=>typeof k?.text=="string"?k.text:"").join("");throw new Error("judge model returned no content")}}function uM(l){let c=l.apiUrl.replace(/\/+$/,"");return async(g,m)=>{let p=await fetch(`${c}/api/judge-incomplete`,{method:"POST",signal:m,redirect:"manual",headers:{"Content-Type":"application/json",...l.token?{Authorization:`Bearer ${l.token}`}:{},...l.internalSecret?{"x-mcp-internal":l.internalSecret}:{}},body:JSON.stringify(g)});if(p.status>=300&&p.status<400)throw new la(`judge endpoint redirected (HTTP ${p.status}); not followed`);if(!p.ok)throw new la(`judge endpoint HTTP ${p.status}`);return p.json()}}function cM(l){return l.transport?l.transport:l.apiKey?lM({apiKey:l.apiKey,baseUrl:l.baseUrl,visionModel:l.visionModel,textModel:l.textModel}):l.apiUrl?uM({apiUrl:l.apiUrl,token:l.apiToken,internalSecret:l.internalSecret}):null}function dM(l){return l.maxCropChars??(!l.transport&&!l.apiKey&&l.apiUrl?UP:void 0)}async function fv(l,c,g){let m={promoted:[],judged:[]},p=cM(g);if(c.length===0)return m;let b=g.level??"AA",A=g.timeoutMs??zP,x=Date.now()+A,k=ia([...c],b);if(k.length===0)return m;let R=new Map;for(let v of k){let E=`${v.selector}|${Gu(v)}`,I=R.get(E);I?I.members.push(v):R.set(E,{key:E,members:[v],rep:v,ctx:void 0,kind:"generic"});}let _={elements:{}};if(l)try{await l.evaluate("if(typeof globalThis.__name==='undefined'){globalThis.__name=function(t){return t}}"),_=await l.evaluate(JP,{selectors:[...R.keys()].map(v=>R.get(v).rep.selector),maxHtml:ov});}catch{}for(let v of R.values())v.ctx=_.elements[v.rep.selector],v.ctx&&!v.ctx.found&&(v.ctx=void 0),v.kind=ZP(v.rep,v.ctx);let w=new Map;for(let[v,E]of [...R]){if(!E.ctx)continue;let I=`${E.ctx.elementKey}|${Gu(E.rep)}`,H=w.get(I);if(!H){w.set(I,E);continue}H.members.push(...E.members),R.delete(v);}let S={promoted:[],judged:[]},y=(v,E)=>{for(let I of v.members){if(E.verdict==="violation"){let H=pM(I,v,E);if(!H)continue;S.promoted.push(H);}S.judged.push({id:I.id.replace("axe-incomplete-","axe-"),type:I.type,verdict:E.verdict,reason:E.reason});}},C=[...R.values()].filter(v=>v.kind==="contrast");if(C.length&&l){for(let E of C)E.pixels=g.measured?.get(E.rep.selector);let v=C.filter(E=>!E.pixels).map(E=>E.rep.selector);if(v.length)try{for(let E of await $u(l,v))for(let I of C)I.rep.selector===E.selector&&(I.pixels=E);}catch{}}let F=[];for(let v of R.values()){let E=p?Go.get(lv(g.url,v.rep,v.ctx?.html??v.rep.html??"")):void 0;if(E){y(v,E);continue}let I=fM(v);if(I!=="drop"){if(I){y(v,I);continue}F.push(v);}}if(F.length===0||!p)return S;let P=g.vision!==false&&!!l&&typeof l.screenshot=="function",M=new Map,q=new Set,B=0,j=dM(g),X=v=>({id:v.rep.id,type:v.rep.type,wcag:v.rep.wcag,message:v.rep.message,selector:v.rep.selector,html:(v.ctx?.html??v.rep.html??"").slice(0,ov),context:q.has(v.key)?{...uv(v),cropNote:"no image attached: the crop was too large to send"}:uv(v),...M.has(v.key)?{screenshot:M.get(v.key)}:{}}),T=P?jP:$P;for(let v=0;v<F.length;v+=T){let E=x-Date.now();if(E<=0)break;let I=F.slice(v,v+T);if(P){for(let Z of I){if(B>=GP||Date.now()>x)break;let z=await hM(l,Z.ctx,j);z&&(B++,z.data?M.set(Z.key,z.data):q.add(Z.key));}if(Date.now()>x)break}let H=new Map(I.map(Z=>[Z.rep.id,Z])),V=new AbortController,G=setTimeout(()=>V.abort(),E),N=null,U=false,Y=Date.now();try{let Z=await Promise.race([p({url:g.url,level:b,vision:P,items:I.map(X)},V.signal),new Promise((z,ie)=>V.signal.addEventListener("abort",()=>ie(new Error("judge deadline"))))]);N=aM(Z),Uu()&&console.error(`ai judge: batch ${I.length} items, ${I.filter(z=>M.has(z.key)).length} crops, ${Date.now()-Y}ms, ${N?N.length+" verdicts":"MALFORMED: "+String(Z).slice(0,200)}`);}catch(Z){Uu()&&console.error(`ai judge: batch ${I.length} items failed after ${Date.now()-Y}ms: ${Z.message}`),N=null,U=Z instanceof la;}finally{clearTimeout(G);}if(!N){if(V.signal.aborted||U)break;continue}for(let Z of N){let z=H.get(Z.id);if(!z)continue;H.delete(Z.id);let ie={verdict:Z.verdict,reason:eM(Z.reason),fix:Z.fix};Go.size>=KP&&Go.clear(),Go.set(lv(g.url,z.rep,z.ctx?.html??z.rep.html??""),ie),y(z,ie);}}return S}function fM(l){let c=l.ctx;if(l.kind==="alt"){if(c?.role==="presentation"||c?.role==="none")return {verdict:"pass",reason:"declared decorative (role=presentation)"};if(c?.ariaHidden)return {verdict:"pass",reason:"hidden from assistive technology (aria-hidden)"};if(c?.img){let{attrW:g,attrH:m,naturalW:p,naturalH:b}=c.img;if(g>0&&g<=1&&m>0&&m<=1||p>0&&p<=1&&b>0&&b<=1)return {verdict:"pass",reason:"1x1 tracking/spacer pixel"}}return c&&Wu(c)?c.control?c.control.name?{verdict:"pass",reason:`${c.control.tag} is named ("${c.control.name.slice(0,40)}"); the background image needs no text`}:null:{verdict:"pass",reason:"CSS background image on a non-interactive element; decorative"}:c?.parentInteractive?.text?{verdict:"pass",reason:`${c.parentInteractive.tag} is named by its visible link text ("${c.parentInteractive.text.slice(0,40)}"); alt may be empty`}:null}if(l.kind==="motion")return c?.reducedMotionHandled?{verdict:"pass",reason:"a prefers-reduced-motion: reduce rule stops this element's animation"}:null;if(l.kind==="contrast"){if(!l.pixels)return "drop";let g=Xu(l.rep,l.pixels.threshold);return l.pixels.worstRatio>=g?{verdict:"pass",reason:`measured ${l.pixels.worstRatio.toFixed(2)}:1 at worst behind the text, meets ${g}:1`}:l.pixels.bestRatio<g*.97?{verdict:"violation",reason:`measured ${l.pixels.bestRatio.toFixed(2)}:1 at best behind the text, below ${g}:1 everywhere`}:null}return null}function uv(l){let c=l.ctx,g={};return l.rep.reviewReason&&(g.engineNote=l.rep.reviewReason),c&&(g.tag=c.tag,c.nearText&&(g.nearbyText=c.nearText),c.parentInteractive&&(g.parentControl=c.parentInteractive),l.kind==="alt"&&Wu(c)&&c.control&&(g.control={tag:c.control.tag,accessibleName:c.control.name}),l.kind==="alt"&&c.img&&(g.image={src:c.img.src,alt:c.img.alt,width:c.img.naturalW||c.img.attrW||c.rect.w,height:c.img.naturalH||c.img.attrH||c.rect.h}),l.kind==="contrast"&&l.pixels&&(g.fg=sa(l.pixels.fg),g.threshold=Xu(l.rep,l.pixels.threshold),g.bestRatio=cv(l.pixels.bestRatio),g.worstRatio=cv(l.pixels.worstRatio),g.fontSize=c.fontSize,g.fontWeight=c.fontWeight),l.kind==="generic"&&(g.fg=sa(c.fg),g.bg=sa(c.bg),g.size={w:Math.round(c.rect.w),h:Math.round(c.rect.h)})),g}function Xu(l,c){return l.wcag==="1.4.6"||l.type==="contrast_enhanced"?c===3?4.5:7:c}var cv=l=>Math.round(l*100)/100;function pM(l,c,g){let m=nM(l);if(c.kind==="alt"){let b=tM(g.fix?.value);return b?Wu(c.ctx)?{...m,fix:{attribute:"aria-label",currentValue:"",suggestedValue:b,needsManualReview:false}}:{...m,fix:{attribute:"alt",currentValue:c.ctx?.img?.alt??l.fix?.currentValue??"",suggestedValue:b,needsManualReview:false}}:null}if(c.kind==="contrast"){let b=c.pixels;if(!b)return null;let A=sa(b.fg),x=Xu(l,b.threshold),k=b.worstBg?sa(b.worstBg):null,R=b.bestBg?sa(b.bestBg):null,_=C=>!!C&&!!k&&Ln(C,k)>=x&&(!R||Ln(C,R)>=x),w,S=rM(g.fix?.value),y=k?mM(A,k,x):null;return S&&S!==A.toLowerCase()&&_(S)?w=`color:${S} !important;`:_(y)?w=`color:${y} !important;`:R&&Ln(A,R)>=x&&(w=`background-color:${R} !important;`),{...m,impact:"serious",message:`contrast: ${A} text on its rendered background measures ${b.worstRatio.toFixed(2)}:1 at worst (${b.bestRatio.toFixed(2)}:1 at best, from pixels; judge: ${g.reason||"not readable"}), needs ${x}:1`,fix:{attribute:"style",currentValue:A,...w?{suggestedValue:w}:{},needsManualReview:true}}}let p=l.fix;return p?{...m,fix:p}:g.fix?.attribute&&g.fix.value?{...m,fix:{attribute:g.fix.attribute,currentValue:"",suggestedValue:g.fix.value,needsManualReview:true}}:m}function mM(l,c,g){let m=l.match(dv);if(!m)return null;let p=parseInt(m[1],16),b=[p>>16&255,p>>8&255,p&255],A=R=>"#"+R.map(_=>Math.round(Math.min(255,Math.max(0,_))).toString(16).padStart(2,"0")).join(""),x=(R,_)=>A(b.map(w=>_?w*(1-R):w+(255-w)*R)),k=null;for(let R of [true,false]){if(Ln(x(1,R),c)<g)continue;let _=0,w=1;for(let y=0;y<24;y++){let C=(_+w)/2;Ln(x(C,R),c)>=g?w=C:_=C;}let S=x(w,R);Ln(S,c)>=g&&(!k||w<k.t)&&(k={t:w,hex:S});}return k?.hex??null}var gM=[1,.6,.35];async function hM(l,c,g){let m=l.screenshot;if(typeof m!="function"||!c||c.rect.w<2||c.rect.h<2||c.hidden)return null;try{let b=Math.min(1200,c.rect.w+16),A=Math.min(600,c.rect.h+16),x=c.rect.x+c.rect.w/2,k=c.rect.y+c.rect.h/2,R=globalThis.Buffer;if(!R)return null;let _=0;for(let w of g===void 0?[1]:gM){let S=Math.max(2,Math.round(b*w)),y=Math.max(2,Math.round(A*w)),C=w===1?Math.max(0,c.rect.x-8):Math.max(0,x-S/2),F=w===1?Math.max(0,c.rect.y-8):Math.max(0,k-y/2),P=await m.call(l,{clip:{x:C,y:F,width:S,height:y},fullPage:!0,type:"png",animations:"disabled"}),M=R.from(P).toString("base64");if(_=M.length,g===void 0||M.length<=g)return {data:M}}return Uu()&&console.error(`ai judge: crop for ${c.tag} left out (${_} base64 chars > ${g} at the smallest clip)`),{}}catch{return null}}async function vM(l){let c=C=>({verdict:"drop",why:C}),g=null;try{g=document.querySelector(l.selector);}catch{return c("bad selector")}if(!g||g.tagName!=="VIDEO")return c("not a video");let m=getComputedStyle(g),p=g.getBoundingClientRect();if(m.display==="none"||m.visibility==="hidden"||g.closest("[hidden]")||p.width<100||p.height<50)return c("not visible/large enough");if(g.error)return c("failed load");let b=g.currentSrc||g.getAttribute("src")||g.querySelector("source")?.getAttribute("src")||"";if(!b||/^(blob|data|about|javascript):/i.test(b)||/\.(m3u8|mpd)(\?|$)/i.test(b))return c("no direct src / MSE");let A=g.hasAttribute("muted")||g.muted,x=g.hasAttribute("controls"),k=g.hasAttribute("autoplay")||g.autoplay,R=g.hasAttribute("loop")||g.loop,_=x||k&&!A;if(!_){let C=/play|pause|mute|unmute|sound|volume/i;for(let F=g.parentElement,P=0;F&&P<3&&!_;F=F.parentElement,P++)_=Array.from(F.querySelectorAll('button, [role="button"]')).some(M=>C.test((M.getAttribute("aria-label")||"")+" "+(M.getAttribute("title")||"")+" "+(M.textContent||"")));}if(!_)return c("not user-playable");if(A&&R&&!x)return c("decorative loop");if(g.hasAttribute("muted")&&!x&&!k)return c("muted");if(Number.isFinite(g.duration)&&g.duration>0&&g.duration<5)return c("under 5s");await new Promise(C=>setTimeout(C,2e3));for(let C of Array.from(g.querySelectorAll("track"))){let F=(C.getAttribute("kind")||"subtitles").toLowerCase();if((F==="captions"||F==="subtitles")&&C.getAttribute("src"))return c("has caption track")}let w=g.textTracks;for(let C=0;w&&C<w.length;C++)if(w[C].kind==="captions"||w[C].kind==="subtitles")return c("has text track");let S=g,y=null;if(typeof S.mozHasAudio=="boolean"?y=S.mozHasAudio:S.audioTracks&&typeof S.audioTracks.length=="number"&&(y=S.audioTracks.length>0?true:null),y===null&&typeof S.webkitAudioDecodedByteCount=="number"&&S.webkitAudioDecodedByteCount>0&&(y=true),y===null)try{let C=new AbortController,F=setTimeout(()=>C.abort(),l.fetchMs),P=await fetch(b,{headers:{Range:"bytes=0-"+(l.rangeBytes-1)},signal:C.signal}),M=new Uint8Array(l.rangeBytes),q=0,B=P.body?P.body.getReader():null;if(B)try{for(;q<l.rangeBytes;){let{done:T,value:v}=await B.read();if(T||!v)break;let E=Math.min(v.length,l.rangeBytes-q);M.set(v.subarray(0,E),q),q+=E;}}finally{try{await B.cancel();}catch{}}clearTimeout(F);let j=(T,v=0)=>{e:for(let E=v;E<=q-T.length;E++){for(let I=0;I<T.length;I++)if(M[E+I]!==T[I])continue e;return E}return -1},X=T=>Array.from(T).map(v=>v.charCodeAt(0));j(X("ftyp"))>=0&&j(X("moov"))>=0?y=j(X("hdlr"))>=0&&j(X("soun"))>=0:M[0]===26&&M[1]===69&&M[2]===223&&M[3]===163&&j([22,84,174,107])>=0&&(y=j([131,129,2])>=0);}catch{y=null;}return y!==true?c(y===false?"silent":"audio unknowable"):{verdict:"violation"}}async function pv(l,c){let g=c.filter(b=>b.type==="missing_captions"&&/^<video\b/i.test(b.html??"")&&b.selector).slice(0,10);if(g.length===0)return [];let m=[],p=Date.now()+1e4;try{await l.evaluate("if(typeof globalThis.__name==='undefined'){globalThis.__name=function(t){return t}}");for(let b of g){if(Date.now()>p)break;let A=p-Date.now(),x,k=await Promise.race([l.evaluate(vM,{selector:b.selector,rangeBytes:1048576,fetchMs:4e3}),new Promise(R=>{x=setTimeout(()=>R(null),A);})]).finally(()=>x&&clearTimeout(x));if(!k)break;if(k.verdict==="violation"){let{confidence:R,reviewReason:_,...w}=b;m.push({...w,id:b.id.replace("axe-incomplete-","axe-"),message:"video has an audio track, can be played by the user, and has no captions or subtitles track (WCAG 1.2.2)"});}}}catch{}return m}function hv(){let l=p=>{let b=p.getBoundingClientRect();if(b.width===0||b.height===0)return false;let A=window.getComputedStyle(p);return A.visibility!=="hidden"&&A.display!=="none"&&A.opacity!=="0"},c=Array.from(document.querySelectorAll('input[type="password"]')),g=Array.from(document.querySelectorAll('button, input[type="submit"], a[role="button"]')).filter(l).map(p=>(p.value||p.textContent||"").trim().toLowerCase()).filter(p=>p.length>0&&p.length<40),m=Array.from(document.querySelectorAll("button, a")).filter(l).filter(p=>/sign in with|continue with|log in with/i.test(p.textContent||"")).length;return {passwordFields:c.length,visiblePasswordFields:c.filter(l).length,submitLabels:g,oauthButtons:m,formCount:document.querySelectorAll("form").length,bodyTextLength:(document.body?.innerText||"").trim().length,headingText:(document.querySelector("h1, h2")?.textContent||"").trim().slice(0,120).toLowerCase()}}var bM=/\b(log ?in|sign ?in|sign ?on|authenticate)\b/,yM=/\b(log ?in|sign ?in|sign ?on|authentication|welcome back|access denied|unauthori[sz]ed)\b/;function mv(l){try{let c=new URL(l).pathname.toLowerCase();return /(^|\/)(login|signin|sign-in|log-in|auth|sso|session\/new|users\/sign_in)(\/|$)/.test(c)}catch{return false}}function vv(l,c,g){if(mv(c))return null;let m=gv(c)!==gv(g),p=l.submitLabels.some(w=>bM.test(w)),b=yM.test(l.headingText),A=mv(g),x=[];A&&x.push("url"),p&&x.push("submit"),b&&x.push("heading"),m&&x.push("redirected");let k=l.visiblePasswordFields>0,R=l.oauthButtons>0&&l.bodyTextLength<600&&l.formCount<=1;if(!k&&!R||x.length<2)return null;let _=`${k?"password-field":"oauth-only"}+${x.join("+")}`;return {reason:`Scan did not reach the requested page \u2014 it landed on a sign-in page at ${g}. The findings would describe the login screen, not the intended page. Configure site authentication for this site, or scan a page that does not require a session.`,signal:_,finalUrl:g}}function gv(l){try{let c=new URL(l);return `${c.origin}${c.pathname.replace(/\/+$/,"")}`.toLowerCase()}catch{return l.toLowerCase()}}async function qM(l){try{return await l.evaluate(()=>{let c=(document.title||"").toLowerCase(),g=[["just a moment","Cloudflare"],["attention required","Cloudflare"],["checking your browser","Cloudflare"],["access to this page has been denied","PerimeterX/HUMAN"],["please verify you are a human","PerimeterX/HUMAN"],["verify you are human","bot-challenge"],["are you a robot","bot-challenge"],["you have been blocked","bot-challenge"],["request unsuccessful","Imperva/Incapsula"],["human verification","bot-challenge"],["additional security check is required","bot-challenge"]];for(let[b,A]of g)if(c.includes(b))return {vendor:A,signal:`title:"${document.title}"`,needsCorroboration:!1};let m=[["#cf-chl-widget","Cloudflare"],["#challenge-running","Cloudflare"],["#cf-challenge-running","Cloudflare"],[".cf-browser-verification","Cloudflare"],["#cf-please-wait","Cloudflare"],["div.cf-error-details","Cloudflare"],["#px-captcha","PerimeterX/HUMAN"],["#distilCaptchaForm","Distil"],["form#challenge-form","bot-challenge"]];for(let[b,A]of m)if(document.querySelector(b))return {vendor:A,signal:`marker:${b}`,needsCorroboration:!1};if(window._cf_chl_opt)return {vendor:"Cloudflare",signal:"marker:window._cf_chl_opt",needsCorroboration:!1};let p=[["please wait...","Cloudflare"],["access denied","bot-challenge"]];for(let[b,A]of p)if(c.includes(b))return {vendor:A,signal:`title:"${document.title}"`,needsCorroboration:!0};return null})}catch{return null}}async function BM(l){try{return await l.evaluate(()=>{let c=document.querySelectorAll("body *").length;if(c>250)return null;let g=['[id*="captcha" i]','[class*="captcha" i]','img[src*="captcha" i]','iframe[src*="recaptcha" i]','iframe[src*="hcaptcha" i]','iframe[src*="turnstile" i]','[name*="captcha" i]'];for(let p of g)try{if(document.querySelector(p))return {signal:`marker:${p}`,elements:c}}catch{}let m=(document.title||"").toLowerCase();return m.includes("captcha")||m.includes("security check")||m.includes("bot verification")?{signal:`title:"${document.title}"`,elements:c}:null})}catch{return null}}async function HM(l,c){let g=await qM(l),m=typeof c=="number"&&c>=400,p=g&&(!g.needsCorroboration||m)?g:null;if(!p&&!m)return null;let b=[];return p&&b.push(`served a ${p.vendor} bot-challenge / interstitial page`),m&&b.push(`main document returned HTTP ${c}`),{reason:`Scan did not reach the real page \u2014 the target ${b.join(" and ")}. The returned issue list reflects the challenge/error page, not the intended site.`,...p?{vendor:p.vendor}:{},...typeof c=="number"?{status:c}:{},...p?{signal:p.signal}:m?{signal:`status:${c}`}:{}}}async function Sv(l,c){let g=typeof l=="string",m={wcagTags:Pu,includeAxe:true,deep:false,dismissModals:g,...c},p,b,A,x;if(g){A=l.startsWith("http")?l:`https://${l}`;let k=typeof m.viewport=="string"?Ho[m.viewport]??Ho.desktop:m.viewport??Ho.desktop;b=await(await import('playwright')).chromium.launch({headless:m.browser?.headless??true}),p=await(await b.newContext({viewport:k})).newPage();let w=await p.goto(A,{waitUntil:"domcontentloaded",timeout:m.browser?.timeout??3e4});x=typeof w?.status=="function"?w.status():void 0;}else p=l,A=p.url(),x=m.mainStatus;if(m.dismissModals)try{let{dismissModals:k}=await Promise.resolve().then(()=>(yv(),bv));await k(p);}catch{}if(m.settle!==false)try{let{waitForRenderSettle:k}=await Promise.resolve().then(()=>(Wo(),Uo));await k(p,typeof m.settle=="number"?m.settle:void 0);}catch{}if(!b){let{snapshotInteractionState:k}=await Promise.resolve().then(()=>(Ko(),Xo));await k(p);}try{let k=await p.evaluate(()=>performance.timeOrigin);try{let Y=await p.evaluate(hv),Z=vv(Y,A,typeof p.url=="function"?p.url():A);if(Z)return {url:A,timestamp:new Date().toISOString(),blocked:{reason:Z.reason,signal:`auth-wall:${Z.signal}`,...typeof x=="number"?{status:x}:{}},issues:[],incomplete:[],internal_bugs:[],summary:{total:0,critical:0,serious:0,moderate:0,minor:0,incomplete:0}}}catch{}let R=await HM(p,x);if(R)return {url:A,timestamp:new Date().toISOString(),blocked:R,issues:[],incomplete:[],internal_bugs:[],summary:{total:0,critical:0,serious:0,moderate:0,minor:0,incomplete:0}};let _=[],w=new Map,S=[],y=[],C=[],{guardDetectorState:F,dropToolingFindings:P}=await Promise.resolve().then(()=>(Tr(),Qr)),M=await BM(p);M&&y.push(`challenge:suspected-interstitial (${M.signal}; ${M.elements} elements) \u2014 this looks like a bot-challenge/CAPTCHA page, not the real site; results may be invalid`),await(await Promise.resolve().then(()=>(Tr(),Qr))).startProvenance(p);let q=await $h(p,S,y,{internalBugs:C,extraSerialDetectors:m.extraSerialDetectors,experimental:m.experimental});_.push(...q.map(Gh));let{resetInteractionState:B,focusOnlyObscuredIndexes:j}=await Promise.resolve().then(()=>(Ko(),Xo));if(await B(p),m.includeAxe)try{let Y=await F(p,"axe",y,()=>Wh(p,jh(m.wcagTags??Pu,m.level)),{bugs:C});for(let Z of Y.violations){let z=Z.id==="target-size"?await j(p,Z.nodes):new Set;for(let[ie,se]of Z.nodes.entries()){if(z.has(ie)){C.push({tool:"axe",kind:"finding-dropped",detail:"target-size obscured only by a focus-only element (scanner focus state)",selector:oa(se.target)});continue}_.push({id:`axe-${Z.id}-${In(oa(se.target))}`,source:"axe-core",type:Z.id,wcag:qu(Z.tags),level:Bu(Z.tags),impact:Ou(Z.impact),message:Z.help,selector:oa(se.target),html:se.html?.slice(0,300)});}}for(let Z of Y.incomplete??[])for(let z of Z.nodes){let ie=`axe-incomplete-${Z.id}-${In(oa(z.target))}`,se=z.any?.[0]?.data?.messageKey;se&&w.set(ie,se),_.push({id:ie,source:"axe-core",type:Z.id,wcag:qu(Z.tags),level:Bu(Z.tags),impact:Ou(Z.impact),message:Z.help,selector:oa(z.target),html:z.html?.slice(0,300),confidence:"needs_review",reviewReason:"axe-core flagged this as needing human review"});}}catch(Y){C.push({tool:"axe",kind:"engine-failed",detail:`axe-core threw, its findings are absent: ${Y?.message??String(Y)}`});}let{deduplicateIssues:X}=await Promise.resolve().then(()=>(ca(),ua)),T=Vu(_),v=X(T.verdicts);try{let{pruneInvisibleContrast:Y}=await Promise.resolve().then(()=>(Wo(),Uo));v=await Y(p,v);}catch{}try{let{pruneHiddenIframeIssues:Y}=await Promise.resolve().then(()=>(Wo(),Uo));v=await Y(p,v);}catch{}try{let{dedupeByElementIdentity:Y}=await Promise.resolve().then(()=>(ca(),ua));v=await Y(p,v);}catch{}try{v=await P(p,v,C);}catch{}try{let{verifyAnimatedGifs:Y}=await Promise.resolve().then(()=>(Dv(),_v));v=await Y(p,v);}catch{}if(m.deep&&m.deepApiKey)try{let Y=await VM(A,v,m);v.push(...Y);}catch{}if(m.rootSelector)try{let{scopeIssuesToRoot:Y}=await Promise.resolve().then(()=>(Yu(),Ku)),Z=await Y(p,v,m.rootSelector);v=Z.issues,Z.warning&&y.push(Z.warning);}catch{}v=ia(v,m.level??"AA");let E=Vu(v),I=E.verdicts,H=[],V=[],G=new Set;try{if(V=[...T.undecided,...E.undecided],m.rootSelector){let{scopeIssuesToRoot:se}=await Promise.resolve().then(()=>(Yu(),Ku));V=(await se(p,V,m.rootSelector)).issues;}let Y=new Map;await B(p);let Z=await F(p,"contrast-pixels",y,()=>rv(p,V,w,Y),{bugs:C}),z=await pv(p,V),ie=[...Z,...z];if(G=new Set(ie.map(se=>`${se.selector}|${se.wcag}`)),ie.length){let{deduplicateIssues:se}=await Promise.resolve().then(()=>(ca(),ua));I=se([...I,...ie]);}{let se=V.filter(me=>!G.has(`${me.selector}|${me.wcag}`)),fe=await fv(p,se,{...m.judge,url:A,level:m.judge?.level??m.level??"AA",measured:Y});if(globalThis.process?.env?.WA_DEBUG_JUDGE&&console.error(`ai judge: ${se.length} undecided before judge, ${fe.promoted.length} promoted, ${fe.judged.filter(me=>me.verdict==="pass").length} passed`),H=fe.judged,fe.promoted.length){let{deduplicateIssues:me}=await Promise.resolve().then(()=>(ca(),ua));I=me([...I,...ia(fe.promoted,m.level??"AA")]);}}}catch{}let N;{let Y=new Set(H.map(z=>z.id)),Z=ia(V,m.level??"AA").filter(z=>!G.has(`${z.selector}|${z.wcag}`)&&!Y.has(z.id.replace("axe-incomplete-","axe-")));Z.length&&(N={count:Z.length,wcag:[...new Set(Z.map(z=>z.wcag))].sort()});}try{let{dedupeByElementIdentity:Y}=await Promise.resolve().then(()=>(ca(),ua));I=await Y(p,I);}catch{}try{I=await P(p,I,C);}catch{}if(await p.evaluate(()=>performance.timeOrigin)!==k)throw new Error(`the page's document was replaced during the scan (navigation to ${p.url()}); the findings mix two documents`);{let{attachMutations:Y,stopProvenance:Z}=await Promise.resolve().then(()=>(Tr(),Qr));Y(C,await Z(p));}let U={url:A,timestamp:new Date().toISOString(),engine:aa,issues:I,internal_bugs:C,incomplete:[],...H.length?{judged:H}:{},...S.length?{truncated:S}:{},...y.length?{engineWarnings:y}:{},...N?{unsettled:N}:{},...m.keepDetected?{detected:q}:{},summary:Nu(I)};if(m.review!==!1&&m.deepApiKey)try{U=await $M(U,m);}catch{}return U}finally{let{stopProvenance:k}=await Promise.resolve().then(()=>(Tr(),Qr));if(await k(p),b)await b.close();else {let{restoreInteractionState:R}=await Promise.resolve().then(()=>(Ko(),Xo));await R(p);}}}async function VM(l,c,g){let m=g.deepApiUrl||"https://api.webability.io",p=await fetch(`${m}/cli/deep-scan`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${g.deepApiKey}`},body:JSON.stringify({url:l,standardIssues:c.slice(0,30).map(({source:A,...x})=>x)})});return p.ok?((await p.json()).issues??[]).map((A,x)=>({id:`deep-${x}-${In(A.selector||A.element||"")}`,source:"deep-analysis",type:`wcag-${A.wcag}`,wcag:A.wcag,level:"AA",impact:A.severity==="High"?"critical":A.severity==="Medium"?"serious":"moderate",message:A.message,selector:A.selector||A.element||""})):[]}function Ev(l){let c=l.fix?.attribute??"";return !!l.fix?.needsManualReview&&c!=="style"&&!c.startsWith("data-")}async function $M(l,c){let g=c.deepApiUrl||"https://api.webability.io",m=l.issues.filter(Ev);if(m.length===0)return l;try{let p=await fetch(`${g}/review-findings`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${c.deepApiKey}`},body:JSON.stringify({url:l.url,issues:m.slice(0,30).map(({source:k,...R})=>R)})});if(!p.ok)return l;let b=await p.json();if(!b.confirmed_ids)return l;let A=new Set(b.confirmed_ids),x=l.issues.filter(k=>!Ev(k)||A.has(k.id));return {...l,issues:x,summary:Nu(x)}}catch{return l}}var kv=/token|nonce|key|sig|signature|auth|session|_wpnonce/i,jM=new Set(["stylesheet","font","image"]);function Yo(l){try{let c=new URL(l);return c.hash="",c.href}catch{return l}}function zM(l){try{for(let c of new URL(l).searchParams.keys())if(kv.test(c))return !0}catch{}return false}function Ju(l,c={}){let g=Yo(l);return m=>m.navigation&&m.mainFrame&&Yo(m.url)===g?"fulfill":/^(data|blob):/i.test(m.url)?"continue":jM.has(m.resourceType)||c.scripts&&m.resourceType==="script"?zM(m.url)?"abort":"continue":"abort"}function Zu(l){let c=Yo(l);return g=>g.navigation&&g.mainFrame&&Yo(g.url)===c?"fulfill":"continue"}var Qu=8e3;function Cv(l){let{ms:c,served:g}=l;return new Promise(m=>{let p=0,b=setTimeout(()=>m(p),c),A=new Promise(_=>{g&&(document.readyState==="complete"?_():window.addEventListener("load",()=>_(),{once:true}));}),k=Array.from(document.querySelectorAll('link[rel~="stylesheet" i]')).map(_=>_.sheet||!_.href?Promise.resolve():(p++,Promise.race([new Promise(w=>{_.addEventListener("load",()=>w(),{once:true}),_.addEventListener("error",()=>w(),{once:true});}),A]).then(()=>{p--;}))),R=()=>document.fonts?.ready??Promise.resolve();Promise.all(k).then(R).then(()=>{clearTimeout(b),m(0);});})}var Tv="[class*=slick],[class*=swiper],[class*=carousel],[class*=splide]";function Rv(l){let c={finished:0,held:0,skipped:0},g=new Set,m=[document],p=x=>{x.querySelectorAll("*").forEach(k=>{k.shadowRoot&&(m.push(k.shadowRoot),p(k.shadowRoot));});};p(document);for(let x of m){let k=typeof x.getAnimations=="function"?x.getAnimations():[];for(let R of k){if(g.has(R))continue;g.add(R);let _=R.effect,w=_?.target;if(w&&w.closest(l)){c.skipped++;continue}try{let S=_?.getComputedTiming(),y=typeof S?.duration=="number"?S.duration:0;S&&Number.isFinite(S.iterations)&&Number.isFinite(S.endTime)?(R.finish(),c.finished++):(R.currentTime=Math.max(0,(Number(S?.delay)||0)+y-.001),R.pause(),c.held++);}catch{}}}let b="*,*::before,*::after{transition:none!important;animation-play-state:paused!important}",A=document.createElement("style");A.setAttribute("data-wa-freeze",""),A.textContent=b,(document.head||document.documentElement).appendChild(A);for(let x of m){if(x===document)continue;let k=document.createElement("style");k.textContent=b,x.appendChild(k);}return c}function ec(l,c){return {evaluate:(g,...m)=>l.evaluate(g,...m),async addScriptTag(g){if(l.addScriptTag)return l.addScriptTag(g);if(typeof g.content=="string")return l.evaluate(g.content);throw new Error("this driver cannot load a script by URL")},url:()=>l.url?l.url():c,keyboard:l.keyboard,screenshot:g=>l.screenshot(g),...l.waitForLoadState?{waitForLoadState:(g,m)=>l.waitForLoadState(g,m)}:{},...l.playwrightPage?{axePage:()=>l.playwrightPage()}:{}}}async function Jo(l,c,g,m={}){let p=!!(g&&l.loadHtml),b=p?`wa-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`:"";if(p&&m.scripts)return Fv(l,`<!--${b}-->`+c.replace(/^\uFEFF/,""),g,b,m.policy);await l.goto("about:blank");let A=await l.evaluate(x=>{let k=new DOMParser().parseFromString(x.html,"text/html");if(k.querySelectorAll('script, meta[http-equiv="refresh" i]').forEach(R=>R.remove()),x.visitor&&(k.querySelectorAll("noscript").forEach(R=>R.remove()),k.querySelectorAll("*").forEach(R=>{let _=/^(iframe|frame|object|embed)$/i.test(R.localName);for(let w of Array.from(R.attributes)){let S=w.name.toLowerCase(),y=w.value.replace(/[\u0000-\u0020]/g,"").toLowerCase();S==="srcdoc"||_&&y.startsWith("data:")?R.removeAttributeNode(w):S.startsWith("on")?w.value=w.value?`/*${w.value.replace(/\*\//g,"* /")}*/`:"":y.startsWith("javascript:")&&(w.value="javascript:void(0)");}}),x.base&&k.querySelectorAll("base[href]").forEach(R=>{try{R.setAttribute("href",new URL(R.getAttribute("href")??"",x.base).href);}catch{R.remove();}})),x.serialize)return `<!--${x.marker}-->`+(k.doctype?`<!DOCTYPE ${k.doctype.name}>`:"")+k.documentElement.outerHTML;if(x.base&&!k.querySelector("base[href]")){let R=k.createElement("base");R.setAttribute("href",x.base),k.head.insertBefore(R,k.head.firstChild);}return document.replaceChild(document.adoptNode(k.documentElement),document.documentElement),""},{html:c,base:g,serialize:p,visitor:!!m.visitor,marker:b});return p?Fv(l,A,g,b,m.policy):{served:false}}async function Fv(l,c,g,m,p){let b=await l.loadHtml(c,g,p)||void 0;if(!await l.evaluate(x=>{for(let k of Array.from(document.childNodes))if(k.nodeType===8&&k.data===x)return k.remove(),true;return false},m).catch(()=>false))throw await b?.(),new Error("the html was not served at baseURL (another request handler answered the navigation)");return {served:true,release:b}}function GM(l){let c=l.route&&l.unroute?{on:l.route.bind(l),off:l.unroute.bind(l)}:null;return {goto:(m,p)=>l.goto(m,p),evaluate:((m,...p)=>l.evaluate(m,p[0])),screenshot:m=>l.screenshot(m),keyboard:{press:m=>l.keyboard.press(m)},url:()=>l.url(),...l.waitForLoadState?{waitForLoadState:(m,p)=>l.waitForLoadState(m,p)}:{},...l.addScriptTag?{addScriptTag:m=>l.addScriptTag(m)}:{},...typeof l.mainFrame=="function"?{playwrightPage:()=>l}:{},...l.setViewportSize?{setViewport:m=>l.setViewportSize(m)}:{},...c?{async loadHtml(m,p,b){let A=new URL(p);A.hash="";let x=b??Zu(A.href),k=()=>true,R=w=>{let S=w.request(),y=false;try{y=!S.frame().parentFrame();}catch{}let C=x({url:S.url(),resourceType:S.resourceType(),navigation:S.isNavigationRequest(),mainFrame:y}),F=C==="fulfill"?w.fulfill({status:200,contentType:"text/html; charset=utf-8",body:m}):C==="abort"?w.abort("blockedbyclient"):w.fallback();return Promise.resolve(F).catch(()=>{})};await c.on(k,R);let _=()=>c.off(k,R).catch(()=>{});try{await l.goto(A.href,{waitUntil:"domcontentloaded",timeout:3e4});}catch(w){throw await _(),w}return _}}:{}}}function UM(l,c={}){let g=c.interceptDocument&&l.setRequestInterception&&l.on&&l.off;return {goto:(m,p)=>l.goto(m,p),evaluate:((m,...p)=>l.evaluate(m,...p)),screenshot:m=>{let{animations:p,...b}=m??{};return l.screenshot(m?b:void 0)},keyboard:{press:m=>l.keyboard.press(m)},url:()=>l.url(),...l.waitForFunction?{async waitForLoadState(m,p){await l.waitForFunction(()=>document.readyState==="complete",p?.timeout!==void 0?{timeout:p.timeout}:{});}}:{},...l.addScriptTag?{addScriptTag:m=>l.addScriptTag(m)}:{},...l.setViewport?{setViewport:m=>l.setViewport(m)}:{},...g?{async loadHtml(m,p,b){let A=new URL(p);A.hash="";let x=b??Zu(A.href),k=_=>{if(_.isInterceptResolutionHandled?.())return;let w=_.frame?.(),S=x({url:_.url(),resourceType:_.resourceType(),navigation:_.isNavigationRequest(),mainFrame:!!w&&!w.parentFrame?.()}),y=S==="fulfill"?_.respond({status:200,contentType:"text/html; charset=utf-8",body:m},0):S==="abort"?_.abort("blockedbyclient",0):_.continue({},0);Promise.resolve(y).catch(()=>{});};await l.setRequestInterception(true),l.on("request",k);let R=async()=>{l.off("request",k),l.__keepRequestInterception||await l.setRequestInterception(false).catch(()=>{});};try{await l.goto(A.href,{waitUntil:"domcontentloaded",timeout:3e4});}catch(_){throw await R(),_}return R}}:{}}}function Iv(l){if(!l)return "/";try{return new URL(l).pathname||"/"}catch{return "/"}}var Lv=new Set(["button","link","menuitem","menuitemcheckbox","menuitemradio","tab","checkbox","radio","switch","option","combobox","textbox","searchbox","slider","spinbutton"]);function Pv(l,c){let g=(l||"").toLowerCase(),m=(c||"").toLowerCase();return g==="aria-hidden"&&m==="true"||g==="role"&&(m==="presentation"||m==="none")}var Mv='a[href],button,input,select,textarea,[tabindex]:not([tabindex="-1"]),[contenteditable="true"]';function WM(l,c){let g=(l.tagName||"").toLowerCase(),m=(l.getAttribute("role")||"").toLowerCase(),p=l.getAttribute("tabindex"),b=p!==null&&parseInt(p,10)>=0;if(g==="a"&&l.hasAttribute("href")||g==="button"||g==="input"||g==="select"||g==="textarea"||Lv.has(m)||b||l.isContentEditable===true)return true;try{if(l.querySelector(Mv)!==null)return !0}catch{return false}return c?[l,...Array.from(l.querySelectorAll?.("*")??[])].some(k=>c(k)&&(k.textContent||"").trim()!==""):false}async function tc(l,c,g){let m=c.map((A,x)=>Pv(A.attribute,A.fixValue)?x:-1).filter(A=>A>=0);if(!m.length)return c;let p=[];try{p=await l.evaluate(A=>{let{payload:x,roles:k,focusableSel:R}=A,_=k.reduce((C,F)=>(C[F]=1,C),{}),w=C=>{let F=getComputedStyle(C);if(F.display==="none"||F.visibility==="hidden")return !1;let P=C.getBoundingClientRect(),M=/rect\(\s*0(px)?[ ,]+0(px)?[ ,]+0(px)?[ ,]+0(px)?\s*\)/.test(F.clip)||/inset\(\s*50%/.test(F.clipPath),q=P.width<=1&&P.height<=1&&F.overflow==="hidden";return M||q},S=C=>{let F=C.tagName.toLowerCase(),P=(C.getAttribute("role")||"").toLowerCase(),M=C.getAttribute("tabindex"),q=M!==null&&parseInt(M,10)>=0;if(F==="a"&&C.hasAttribute("href")||F==="button"||F==="input"||F==="select"||F==="textarea"||_[P]===1||q||C.isContentEditable===!0)return !0;try{if(C.querySelector(R))return !0}catch{return !1}return [C,...Array.from(C.querySelectorAll("*"))].some(X=>w(X)&&(X.textContent||"").trim()!=="")},y=[];for(let C of x){let F;try{F=document.querySelectorAll(C.sel);}catch{continue}if(!F.length)continue;let P=!1;for(let M=0;M<F.length;M++)if(S(F[M])){P=!0;break}P&&y.push(C.i);}return y},{payload:m.map(A=>({i:A,sel:c[A].selector})),roles:[...Lv],focusableSel:Mv});}catch(A){g?.(A),p=m;}if(!p.length)return c;let b=new Set(p);return c.filter((A,x)=>!b.has(x))}var XM=new Set(["a","button","summary"]),KM=new Set(["button","link","menuitem","menuitemcheckbox","menuitemradio","tab","checkbox","radio","switch","option","treeitem","gridcell","searchbox","textbox","combobox","slider","spinbutton"]),YM=new Set(["checkbox","radio","switch","combobox","textbox","searchbox","slider","spinbutton"]),JM=new Set(["empty_link","missing_link_name","weak_link_name","new_window_link","external_link_warning","download_link_warning","placeholder_link","javascript_link","adjacent_redundant_link","adjacent_identical_links","image_text_adjacent_links","inconsistent_link_identification","link_consistency","skip_link","weak_skip_link","missing_skip_link","button_name","missing_button_name","empty_button","weak_button_name","unlabeled_button","label_in_name"]);function Ov(){let c=/[\p{L}\p{N}]/u,g=/^\p{L}$/u,m=/[\p{L}\p{N}\p{M}]/u,p=/[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Thai}\p{Script=Lao}\p{Script=Khmer}\p{Script=Myanmar}]/u;function b(w,S){if(S<=0)return "";let y=w.charCodeAt(S-1);return y>=56320&&y<=57343&&S>=2?w.slice(S-2,S):w.charAt(S-1)}function A(w,S){let y=w.codePointAt(S);return y===void 0?"":String.fromCodePoint(y)}function x(w,S){return !w||!m.test(w)||p.test(w)||p.test(S)}function k(w){return c.test(w)&&!g.test(w)}function R(w,S){let y=w.normalize("NFC").replace(/\s+/g," ").toLowerCase(),C=S.normalize("NFC").toLowerCase(),F=C.substring(0,40),P=C.length>=40,M=A(F,0),q=b(F,F.length),B=0;for(;;){let j=y.indexOf(F,B);if(j<0)return false;if(x(b(y,j),M)&&(P||x(A(y,j+F.length),q)))return true;B=j+1;}}function _(w){return (w||"").trim().replace(/\s+/g," ")}return {TEXT_PREFIX_LENGTH:40,HAS_NAME_CHARS:c,SINGLE_LETTER:g,WORD_CHAR:m,NO_WORD_BOUNDARY:p,codePointBefore:b,codePointAt:A,isBoundary:x,isLabelText:k,labelContainsText:R,normalizeVisibleText:_}}var rc=Ov(),Nv=rc.isLabelText,qv=rc.labelContainsText,Bv=rc.normalizeVisibleText,ZM=`var __waLin=(${Ov.toString()})();var TEXT_PREFIX_LENGTH=__waLin.TEXT_PREFIX_LENGTH;var HAS_NAME_CHARS=__waLin.HAS_NAME_CHARS;var SINGLE_LETTER=__waLin.SINGLE_LETTER;var WORD_CHAR=__waLin.WORD_CHAR;var NO_WORD_BOUNDARY=__waLin.NO_WORD_BOUNDARY;var codePointBefore=__waLin.codePointBefore;var codePointAt=__waLin.codePointAt;var isBoundary=__waLin.isBoundary;var isLabelText=__waLin.isLabelText;var labelContainsText=__waLin.labelContainsText;var normalizeVisibleText=__waLin.normalizeVisibleText;`;function li(l){return (l||"").toLowerCase().normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^\p{L}\p{N}]+/gu," ").trim()}function QM(l,c){let g=li(l),m=li(c);return m?g===m||g.startsWith(`${m} `)||g.endsWith(` ${m}`)||g.includes(` ${m} `):false}var eO=["text","currentText","urlText","visibleText","linkText"];function Hv(l){let c={tag:"",role:"",text:"",ariaLabel:""};if(!l||typeof l!="string")return c;try{let p=JSON.parse(l);if(p&&typeof p=="object"&&typeof p.original=="string")try{p=JSON.parse(p.original);}catch{}if(p&&typeof p=="object"){typeof p.tag=="string"&&(c.tag=p.tag.trim().toLowerCase());let b=typeof p.role=="string"?p.role:p.attrs&&typeof p.attrs.role=="string"?p.attrs.role:"";c.role=b.trim().toLowerCase();let A=p.attrs&&typeof p.attrs["aria-label"]=="string"&&p.attrs["aria-label"].trim()?p.attrs["aria-label"]:typeof p.currentAriaLabel=="string"?p.currentAriaLabel:"";c.ariaLabel=A.trim();for(let x of eO){let k=p[x];if(typeof k=="string"&&k.trim()){c.text=k;break}}return c}}catch{}let g=/(?:^|\|)\s*visible:\s*(.*?)\s*(?:\||$)/.exec(l);g&&(c.text=g[1]);let m=/(?:^|\|)\s*aria-label:\s*(.*?)\s*(?:\||$)/.exec(l);return m&&(c.ariaLabel=m[1]),c}function tO(l){if(!l||l.charCodeAt(0)!==123)return false;try{return JSON.parse(l).lin===0}catch{return false}}function rO(l,c){return l.role?KM.has(l.role):l.tag?XM.has(l.tag):!!c&&JM.has(c)}function nc(l){if((l.attribute||"").trim().toLowerCase()!=="aria-label")return {ok:true};if(typeof l.value!="string")return {ok:true};if(l.value.trim()==="")return {ok:true};if(tO(l.context))return {ok:false,reason:"label-in-name: violation recorded before the visible text was stripped"};let c=Hv(l.context);if(!rO(c,l.issueType))return {ok:true};if(l.issueType==="label_in_name"&&c.ariaLabel&&li(l.value)===li(c.ariaLabel))return {ok:false,reason:`label-in-name: value "${l.value}" is a no-op \u2014 it equals the current aria-label "${c.ariaLabel}"`};let g=Bv(c.text);return Nv(g)?qv(l.value,g)?{ok:true}:{ok:false,reason:`label-in-name: visible text "${g}" not contained in "${l.value}"`}:{ok:true}}function nO(l){let c=[],m=l.replace(/\[\s*([\w-]+)\s*(?:[~|^$*]?=\s*("([^"]*)"|'([^']*)'|([^\]\s]+)))?\s*[is]?\s*\]/g,(p,b,A,x,k,R)=>{let _=x??k??R;if(_&&/^(id|class)$/i.test(b))for(let w of _.split(/\s+/))w&&c.push(w);return " "}).replace(/::?[\w-]+(\([^)]*\))?/g," ");for(let p of m.matchAll(/[#.]([\w-]+)/g))c.push(p[1]);for(let p of m.matchAll(/(?:^|[\s>+~,])([a-zA-Z][\w-]*)/g))c.push(p[1]);return c}function Vv(l){let c=new RegExp(l,"i");return {test:g=>nO(g).some(m=>c.test(m))}}var $v=[{pattern:/\bintercom\b/i,category:"third-party",reason:"Intercom chat widget"},{pattern:/\bdrift[-_]/i,category:"third-party",reason:"Drift chat widget"},{pattern:/\bcrisp[-_]/i,category:"third-party",reason:"Crisp chat widget"},{pattern:/\btawk[-_]/i,category:"third-party",reason:"Tawk chat widget"},{pattern:/\bhubspot[-_]|hs[-_]messages/i,category:"third-party",reason:"HubSpot widget"},{pattern:/\bzendesk\b/i,category:"third-party",reason:"Zendesk widget"},{pattern:/\bfreshchat\b/i,category:"third-party",reason:"Freshchat widget"},{pattern:/\bgoog-gt\b|\bgoog-te\b/i,category:"third-party",reason:"Google Translate"},{pattern:/\brecaptcha\b|\bhcaptcha\b/i,category:"third-party",reason:"CAPTCHA widget"},{pattern:/\bwistia\b/i,category:"third-party",reason:"Wistia video player"},{pattern:/\bvimeo-player\b/i,category:"third-party",reason:"Vimeo player"},{pattern:/\bconsolto\b/i,category:"third-party",reason:"Consolto widget"},{pattern:/\basw[-_]/i,category:"overlay",reason:"WebAbility widget (legacy asw- namespace)"},{pattern:/webability[-_]widget|webability[-_]a11y/i,category:"overlay",reason:"WebAbility widget (current namespace)"},{pattern:/\bwp-ada-compliance\b/i,category:"overlay",reason:"WP ADA Compliance plugin UI"},{pattern:/\buserway\b/i,category:"overlay",reason:"UserWay overlay"},{pattern:/\bacsb[-_]/i,category:"overlay",reason:"accessiBe overlay"},{pattern:/\baudioeye\b|#ae_/i,category:"overlay",reason:"AudioEye overlay"},{pattern:/\bEquallyAI\b/i,category:"overlay",reason:"EquallyAI overlay"},{pattern:/#wpadminbar\b|#wp-admin-bar|\.adminbar/i,category:"admin",reason:"WordPress admin bar"},{pattern:/#adminbar-search\b/i,category:"admin",reason:"WordPress admin bar search"},{pattern:/#query-monitor/i,category:"admin",reason:"Query Monitor debug panel"},{pattern:/\.elementor-add-section/i,category:"admin",reason:"Elementor editor UI"},{pattern:/\.shopify-section-announcement/i,category:"admin",reason:"Shopify admin preview"},{pattern:/#mceu_\d|\.mce-|\.tox-/i,category:"admin",reason:"TinyMCE editor UI"},{pattern:/#et-vb-app-frame\b|#et-fb-app\b|\.et-fb-/i,category:"admin",reason:"Divi visual builder UI"},{pattern:Vv("speechify"),category:"extension",reason:"Speechify browser extension"},{pattern:Vv("grammarly"),category:"extension",reason:"Grammarly browser extension"},{pattern:/\bcmplz[-_]btn\b|\bcmplz[-_]link\b|\bcmplz[-_]manage\b|#cmplz[-_].*optin\b|#cmplz[-_].*optout\b/i,category:"consent",reason:"Complianz consent control"},{pattern:/\bonetrust\b/i,category:"consent",reason:"OneTrust consent"},{pattern:/\bcookiebot\b/i,category:"consent",reason:"Cookiebot consent"},{pattern:/\bcookieconsent\b|\bcc[-_]btn\b|\bcc[-_]dismiss\b/i,category:"consent",reason:"Cookie consent control"},{pattern:/\bborlabs[-_]cookie\b|\bbrlbs[-_]/i,category:"consent",reason:"Borlabs Cookie consent"},{pattern:/\bgdpr\b.*\bbtn\b|\bgdpr\b.*\bbutton\b/i,category:"consent",reason:"GDPR consent control"}];function jv(l){for(let{pattern:c,category:g,reason:m}of $v)if(c.test(l))return {protected:true,category:g,reason:m};return {protected:false}}var aO=new Set(["admin","overlay","extension"]);function zv(l){for(let{pattern:c,category:g,reason:m}of $v)if(aO.has(g)&&c.test(l))return {protected:true,category:g,reason:m};return {protected:false}}var iO=[/^#_[Rr]_[a-z0-9]+_(?:-[a-z-]+)?$/,/^#radix-(?:_[Rr]_[a-z0-9]+_|\\?:[Rr][0-9a-z]+\\?:)(?:-[a-z-]+)?$/,/^#headlessui-[a-z][a-z-]*-[0-9]+$/,/^#(?:radix|headlessui|mui)-[a-z0-9][a-z0-9-]*$/i,/^#\\?:[Rr][0-9a-z]+\\?:(?:-[a-z-]+)?$/,/^#«[Rr][0-9a-z]+»(?:-[a-z-]+)?$/,/^#(?:mantine|cdk|ng|swiper)-[a-z0-9-]+$/i,/^#[a-z0-9-]*[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f-]+(?:_\d+)?$/i];function oO(l){let c=l.match(/^#[a-z][a-z-]*-([0-9a-f]{6,}(?:-[0-9a-f]{4,})*)$/i);if(!c)return false;let g=c[1].replace(/-/g,"");if(g.length>=12)return true;let m=(g.match(/[a-f]/gi)||[]).length,p=/[0-9]/.test(g);return m>=2&&p}var sO=[/\[[a-zA-Z-]+[*^$|~]?=["']?(?:[^"'\]]*\s)?(?:radix-|headlessui-|mui-|mantine-|cdk-|ng-)/,/\[[a-zA-Z-]+[*^$|~]?=["']?(?:[^"'\]]*\s)?\\?:[Rr][0-9a-z]+\\?:/,/\[[a-zA-Z-]+[*^$|~]?=["']?(?:[^"'\]]*\s)?_[Rr]_[a-z0-9]+_/],lO=[/\.\w*-jss\d+\b/,/\.makeStyles-\w+-\d+\b/,/\.mui-[A-Za-z0-9]{6,}\b/,/\.css-[a-z0-9]{6,}\b/,/\.sc-[A-Za-z0-9]{6,}\b/];function Gv(l){if(!l)return false;let c=l.split(/\s*[>+~]\s*|\s+/);for(let g of c){let m=g.indexOf("#");if(m===-1)continue;let p=g.slice(m);if(iO.some(b=>b.test(p))||uO(p.slice(1))||oO(p)||/\d{10,}/.test(p))return true}return !!(l.indexOf("[")!==-1&&sO.some(g=>g.test(l))||l.indexOf(".")!==-1&&lO.some(g=>g.test(l)))}function uO(l){for(var c=l.split(/[-_]+/),g=0;g<c.length;g++){var m=c[g];if(m.length>=12&&/^[0-9a-f]+$/i.test(m))return true;if(!(m.length<6||!/[0-9]/.test(m)||!/[a-z]/i.test(m))){var p=m.match(/[0-9]+|[a-z]+/gi);if(p&&p.length>=4&&p.join("")===m)return true}}return false}var Uv=new Set(["a","abbr","article","aside","audio","b","blockquote","br","button","canvas","caption","code","col","dd","details","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hr","i","iframe","img","input","label","legend","li","main","map","mark","nav","ol","option","p","pre","section","select","small","span","strong","sub","summary","sup","svg","table","tbody","td","textarea","tfoot","th","thead","time","tr","u","ul","video"]);function ac(l){let c=[],g=1,m=l.trim().toLowerCase();if(Uv.has(m))return {score:0,reasons:[`bare <${m}> selector matches all ${m} elements on page`]};if(m.match(/^([a-z][a-z0-9]*):(nth-of-type|nth-child)\(\d+\)$/i))return {score:.1,reasons:[`positional selector ${m} has no class/id anchor \u2014 breaks on any DOM change`]};if(Gv(l))return {score:0,reasons:[`${l.slice(0,60)} anchors on a framework-generated id (unstable across renders)`]};let b=/#[a-zA-Z]/.test(l),A=/\.[a-zA-Z]/.test(l),x=/\[data-/.test(l),k=/\[(aria-)[^=\]]*=["'][^"']{2,}["']|\[href[^=\]]*=["'][^"'#]{2,}["']|\[src[*$^]?=["'][^"']{2,}["']/.test(l);!b&&!A&&!x&&!k&&(g=.3,c.push("no class, id, data attribute, or semantic attribute anchor \u2014 fragile positional selector")),k&&!b&&!A&&!x&&(g=Math.max(g,.8)),b&&(g=Math.max(g,.9));let R=(l.match(/:nth-of-type|:nth-child/gi)||[]).length;R>=3&&(g=Math.min(g,.4),c.push(`${R}x positional selectors \u2014 very fragile`));let _=(l.match(/>/g)||[]).length;return _>=6&&(g=Math.min(g,.5),c.push(`${_}-level deep nesting \u2014 fragile`)),{score:g,reasons:c}}var cO=new Set(["aria-label","aria-labelledby","aria-describedby","aria-hidden","aria-live","aria-atomic","aria-required","aria-expanded","aria-controls","aria-current","aria-sort","aria-invalid","aria-level","aria-haspopup","aria-pressed","aria-checked","aria-selected","aria-valuemin","aria-valuemax","aria-valuenow","aria-valuetext","aria-orientation","aria-multiselectable","aria-readonly","aria-disabled","aria-errormessage","aria-modal","aria-placeholder","aria-roledescription","aria-colcount","aria-rowcount","aria-colindex","aria-rowindex","role","alt","title","lang","dir","tabindex","href","type","autocomplete","for","pattern","inputmode","controls","muted","id","name","scope","style","class","append","prepend","textContent","remove","remove_attribute"]);function dO(l){return !!(cO.has(l)||l.startsWith("data-")&&/^data-[a-z0-9-]{1,64}$/i.test(l))}var fO=new Set(["alert","alertdialog","application","article","banner","blockquote","button","caption","cell","checkbox","code","columnheader","combobox","complementary","contentinfo","definition","deletion","dialog","directory","document","emphasis","feed","figure","form","generic","grid","gridcell","group","heading","img","insertion","link","list","listbox","listitem","log","main","marquee","math","menu","menubar","menuitem","menuitemcheckbox","menuitemradio","meter","navigation","none","note","option","paragraph","presentation","progressbar","radio","radiogroup","region","row","rowgroup","rowheader","scrollbar","search","searchbox","separator","slider","spinbutton","status","strong","subscript","superscript","switch","tab","table","tablist","tabpanel","term","textbox","time","timer","toolbar","tooltip","tree","treegrid","treeitem"]),pO=/(?:^|[\s>+~,])(?:body|html)(?:[#.:\[][^\s>+~,]*)*\s*$/i;function mO(l){return l?l.split(",").some(c=>pO.test(c.trim())):false}function Zv(l){if(typeof l!="string"||l.trim()==="")return {ok:false,reason:"empty role value"};let c=l.split(" ");for(let g of c){if(g==="")return {ok:false,reason:`role "${l}" has malformed whitespace`};if(g!==g.toLowerCase())return {ok:false,reason:`role "${g}" must be lowercase (ARIA roles are case-sensitive)`};if(!fO.has(g))return {ok:false,reason:`"${g}" is not a valid ARIA role`}}return {ok:true}}var gO=new Set(["off","on","name","honorific-prefix","given-name","additional-name","family-name","honorific-suffix","nickname","organization-title","username","new-password","current-password","one-time-code","organization","street-address","address-line1","address-line2","address-line3","address-level4","address-level3","address-level2","address-level1","country","country-name","postal-code","cc-name","cc-given-name","cc-additional-name","cc-family-name","cc-number","cc-exp","cc-exp-month","cc-exp-year","cc-csc","cc-type","transaction-currency","transaction-amount","language","bday","bday-day","bday-month","bday-year","sex","url","photo","tel","tel-country-code","tel-national","tel-area-code","tel-local","tel-local-prefix","tel-local-suffix","tel-extension","impp","email","webauthn"]),Qv=/^\s*html\s*$/i;function ic(l,c){return typeof l=="string"&&Qv.test(l)&&(c??"").trim()==="lang"}function hO(l){return typeof l!="string"||l===""?{ok:false,reason:"empty <html lang> is report-only, not a fix"}:ta(l)!==l?{ok:false,reason:`<html lang> must be a primary language tag, got "${l.slice(0,20)}"`}:{ok:true}}function vO(l,c,g="full"){return ic(l,c)?{ok:true}:sc(l,g)}var bO=[{re:/^\s*\*\s*$/,reason:"universal selector (*) blanks every element"},{re:Qv,reason:"<html> root \u2014 belongs in global settings, not a fix"},{re:/javascript:/i,reason:"javascript: scheme inside selector"},{re:/<script/i,reason:"script tag inside selector"}],yO=new Set("not is where has nth-child nth-last-child nth-of-type nth-last-of-type first-child last-child only-child first-of-type last-of-type only-of-type empty root scope hover active focus focus-within focus-visible visited link any-link local-link target target-within checked indeterminate default disabled enabled required optional valid invalid user-valid user-invalid in-range out-of-range read-only read-write placeholder-shown autofill lang dir host host-context defined open closed modal popover-open fullscreen picture-in-picture playing paused muted seeking buffering stalled volume-locked past future current blank state has-slotted nth-col nth-last-col left right first before after first-line first-letter placeholder selection marker backdrop part slotted cue cue-region file-selector-button highlight spelling-error grammar-error target-text view-transition view-transition-group view-transition-image-pair view-transition-old view-transition-new".split(" ")),Wv=new Set(["child","parent","sibling","adjacent","descendant","column-combinator"]),wO=/^-?[_a-z\u00A0-\uFFFF][\w\-\u00A0-\uFFFF]*$/i,xO=/^\s*(even|odd|[+-]?\d*n(\s*[+-]\s*\d+)?|[+-]?\d+)\s*$/i;function oc(l,c=false){for(let g of l){if(!g.length||Wv.has(g[g.length-1].type)||!c&&Wv.has(g[0].type))return false;for(let m of g){if(m.type==="column-combinator"||m.type==="tag"&&!wO.test(m.name))return false;if(m.type!=="pseudo"&&m.type!=="pseudo-element")continue;let p=m.name.toLowerCase();if(!yO.has(p))return false;if(m.type==="pseudo-element"){if(m.data==="")return false;continue}if(p.startsWith("nth-")&&(typeof m.data!="string"||!AO(m.data))||Array.isArray(m.data)&&!oc(m.data,p==="has"))return false}}return true}function AO(l){let c=/^([\s\S]*?)(?:\s+of\s+(\S[\s\S]*))?$/i.exec(l);if(!c||!xO.test(c[1]))return false;if(c[2]===void 0)return true;try{return oc(cssWhat.parse(c[2]))}catch{return false}}function eb(l){let c=l.replace(/\\[\s\S]/g,"x").replace(/"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'/g,'""');for(let g=0;g<4;g++)c=c.replace(/\((?:[^()]|\(\))*\)/g,"()");if(/[()]/.test(c.replace(/\(\)/g,""))||/[^\w\-#.[\]=*^$|~:()>+,\s"\u00A0-\uFFFF]/.test(c))return false;for(let g of c.matchAll(/\[[^\]]*?[*^$|~]?=([^\]]*)\]/g)){let m=g[1].trim();if(!/^(""|-?[_a-z\u00A0-\uFFFF][\w\-\u00A0-\uFFFF]*)(\s+[is])?$/i.test(m))return false}try{return oc(cssWhat.parse(l))}catch{return false}}function sc(l,c="full"){if(!l||typeof l!="string")return {ok:false,reason:"empty selector"};if(l.length>2e3)return {ok:false,reason:"selector too long (>2000 chars)"};for(let{re:p,reason:b}of bO)if(p.test(l))return {ok:false,reason:b};if(!eb(l))return {ok:false,reason:"selector does not parse (unescaped class/id character or unknown pseudo)"};let g=ac(l);if(g.score<=.1)return {ok:false,reason:g.reasons[0]||"selector too broad"};let m=c==="dead-region"?zv(l):jv(l);return m.protected?{ok:false,reason:`protected element: ${m.reason}`}:{ok:true}}function tb(l){return !l||typeof l!="string"?{ok:false,reason:"empty attribute"}:l.length>64?{ok:false,reason:"attribute name too long"}:/^on[a-z]/i.test(l)?{ok:false,reason:`event handler attribute "${l}" not permitted`}:dO(l)?{ok:true}:{ok:false,reason:`attribute "${l}" not in allowlist`}}var rb=[{re:/<script/i,reason:"<script> tag in value"},{re:/<iframe/i,reason:"<iframe> tag in value"},{re:/<object/i,reason:"<object> tag in value"},{re:/<embed/i,reason:"<embed> tag in value"},{re:/javascript:/i,reason:"javascript: URL in value"},{re:/data:text\/html/i,reason:"data:text/html URL in value"},{re:/\bon[a-z]+\s*=/i,reason:"inline event handler in value"}];function lc(l,c){if(typeof l!="string")return {ok:false,reason:"value not a string"};if(l.length>500)return {ok:false,reason:"value too long (>500 chars)"};for(let{re:g,reason:m}of rb)if(g.test(l))return {ok:false,reason:m};if(c==="aria-label"||c==="alt"){if(l==="")return {ok:true};if(/<[a-z][a-z0-9]*[\s>]/i.test(l))return {ok:false,reason:"HTML tag in label \u2014 screen reader will read markup"};if(/^https?:\/\//i.test(l))return {ok:false,reason:"URL as label"};if(/^www\./i.test(l))return {ok:false,reason:"URL as label"};if(/mailto:/i.test(l))return {ok:false,reason:"mailto: in label \u2014 use readable text"};if(/^Visit tel:/i.test(l))return {ok:false,reason:"raw tel: URI in label \u2014 use readable text"};if(l.length>80)return {ok:false,reason:"label too long (>80 chars) \u2014 keep concise for screen readers"};if(/^[^a-zA-Z]*$/.test(l))return {ok:false,reason:"label has no letters"};if(/\.(png|jpg|jpeg|svg|gif|webp|ico|bmp)$/i.test(l))return {ok:false,reason:"filename as label"};if(/^Field\[/i.test(l))return {ok:false,reason:"form field index as label"};if(/^(Checkbox field|Radio field|Id|Img )$/i.test(l))return {ok:false,reason:"generic field type as label"};if(/\s\s[WX]$/.test(l))return {ok:false,reason:"filename dimension suffix in label"};if(/^(Go to|Visit) [?#]/.test(l))return {ok:false,reason:"query string / hash fragment as label"};if(/^(Go to|Visit) \d+\.\d+/.test(l))return {ok:false,reason:"IP address as label"};if(/^visit \(opens/i.test(l))return {ok:false,reason:"no destination in label"};if(new Set(["search","close","home","menu","previous","submit","next","back","details","view all","learn more","yes","no","show more","ok","go","open","more","here","click","link","button","icon","image"]).has(l.toLowerCase()))return {ok:false,reason:"vague single-word label"}}if(c==="role"){let g=Zv(l);if(!g.ok)return g}if(c==="tabindex"&&l!=="-1"&&l!=="0")return {ok:false,reason:`tabindex="${l}" \u2014 only -1 or 0 allowed`};if(c==="aria-hidden"&&l!=="true")return {ok:false,reason:`aria-hidden="${l}" \u2014 must be "true"`};if(c==="href"&&l==="")return {ok:false,reason:"empty href makes link navigate to current page"};if(c==="autocomplete"){let m=l.trim().toLowerCase().split(/\s+/),p=m[m.length-1];if(!gO.has(p))return {ok:false,reason:`"${p}" is not a valid HTML autocomplete token (HTML Living Standard)`}}return {ok:true}}var _O=new Set(["track","legend","caption","a","span","source","style"]);function DO(l){if(typeof l!="string")return {ok:false,reason:"value not a string"};if(l.length>2e3)return {ok:false,reason:"HTML value too long (>2000 chars)"};for(let{re:g,reason:m}of rb)if(g.test(l))return {ok:false,reason:m};let c=l.match(/<\/?([a-z][a-z0-9]*)\b/gi)||[];for(let g of c){let m=g.replace(/<\/?/,"").toLowerCase();if(!_O.has(m))return {ok:false,reason:`tag <${m}> not in allowlist`}}return {ok:true}}var Xv=new Set(["href","src","action","method","type","name","value","for"]),EO=new Set(["aria-hidden","tabindex","style","class","aria-live","muted"]);function nb(l){return l.attribute==="remove_attribute"?Xv.has(l.value)?{tier:"destructive",reason:`removing ${l.value} breaks functionality`}:{tier:"modifier",reason:`removing ${l.value} requires review`}:Xv.has(l.attribute)&&l.value===""?{tier:"destructive",reason:`emptying ${l.attribute} breaks functionality`}:EO.has(l.attribute)?{tier:"modifier",reason:`${l.attribute} changes element visibility/interactivity`}:l.attribute==="prepend"||l.attribute==="append"||l.attribute==="textContent"?{tier:"modifier",reason:`${l.attribute} modifies page content`}:{tier:"additive",reason:"adds missing accessibility attribute"}}var Kv=300,Yv=8;function SO(l){if(l.length>Kv)return `selector_too_deep: ${l.length} chars (> ${Kv})`;let c=(l.match(/:nth-(of-type|child)\(/g)||[]).length;return c>Yv?`selector_too_deep: ${c} positional steps (> ${Yv})`:null}var kO=/^meta\[name=(["'])viewport\1\]$/;function CO(l,c){if(!kO.test(l.trim()))return {ok:false,reason:'attribute "content" is allowed only on meta[name="viewport"]'};let g=String(c).toLowerCase();if(/user-scalable\s*=\s*(no|0)\b/.test(g))return {ok:false,reason:"viewport content still blocks zoom (user-scalable=no)"};let m=g.match(/maximum-scale\s*=\s*([\d.]+)/);return m&&parseFloat(m[1])<2?{ok:false,reason:`viewport content still limits zoom (maximum-scale=${m[1]})`}:lc(c,"content")}function Zo(l,c="full"){if(ic(l.selector,l.attribute))return hO(l.value);let g=sc(l.selector,c);if(!g.ok)return g;let m=SO(l.selector);if(m)return {ok:false,reason:m};if(l.attribute==="content")return CO(l.selector,l.value);let p=tb(l.attribute);if(!p.ok)return p;if(l.attribute==="role"&&mO(l.selector))return {ok:false,reason:"role on <body>/<html> is ignored by assistive technology"};let b=nb(l);if(b.tier==="destructive")return {ok:false,reason:b.reason};if(l.attribute==="append"||l.attribute==="prepend")return DO(l.value);let A=lc(l.value,l.attribute);if(!A.ok)return A;let x=nc(l);return x.ok?{ok:true}:x}var TO=["button","link","checkbox","radio","switch","tab","menuitem"],RO={aria_hidden_focusable:{sc:"4.1.2",level:"A",writes:{tabindex:["-1"]}},missing_button_role:{sc:"4.1.2",level:"A",writes:{role:["button"],tabindex:["0"]}},javascript_link:{sc:"4.1.2",level:"A",writes:{role:["button"]}},placeholder_link:{sc:"4.1.2",level:"A",writes:{role:["button"]}},missing_semantic_role:{sc:"4.1.2",level:"A",writes:{role:TO}},missing_label:{sc:"4.1.2",level:"A",writes:{title:"*","aria-label":"*"}},unlabeled_button:{sc:"4.1.2",level:"A",writes:{"aria-label":"*"}},main_content_hidden:{sc:"4.1.2",level:"A",writes:{"aria-hidden":["false"]}},keyboard_trap:{sc:"2.1.1",level:"A",writes:{tabindex:["0"]}},scrollable_not_focusable:{sc:"2.1.1",level:"A",writes:{tabindex:["0"]}},focus_order_disruption:{sc:"2.4.3",level:"A",writes:{tabindex:["0"]}},missing_alt:{sc:"1.1.1",level:"A",writes:{alt:"*"}},svg_missing_name:{sc:"1.1.1",level:"A",writes:{"aria-label":"*"}},decorative_icon:{sc:"1.1.1",level:"A",writes:{"aria-hidden":["true"]}},empty_link:{sc:"2.4.4",level:"A",writes:{"aria-label":"*"}},missing_fieldset_legend:{sc:"1.3.1",level:"A",writes:{role:["group","radiogroup"]}},missing_table_header:{sc:"1.3.1",level:"A",writes:{role:["columnheader","presentation"]}},missing_table_scope:{sc:"1.3.1",level:"A",writes:{scope:["col","row","colgroup","rowgroup"]}},listitem:{sc:"1.3.1",level:"A",writes:{role:["list","none"]}},list:{sc:"1.3.1",level:"A",writes:{role:["none"]}},"aria-required-parent":{sc:"1.3.1",level:"A",writes:{role:["none","menu","tablist","listbox","tree","list","radiogroup"]}},"aria-required-children":{sc:"1.3.1",level:"A",writes:{role:["none"]}},missing_document_language:{sc:"3.1.1",level:"A",writes:{lang:"*"}},unsafe_autoplay:{sc:"1.4.2",level:"A",writes:{muted:"*"}},identify_input_purpose:{sc:"1.3.5",level:"AA",writes:{autocomplete:"*"}},missing_autocomplete:{sc:"1.3.5",level:"AA",writes:{autocomplete:"*"}},aria_live:{sc:"4.1.3",level:"AA",writes:{"aria-live":["polite","assertive"]}},zoom_restriction:{sc:"1.4.4",level:"AA",writes:{content:"*"}},target_too_small:{sc:"2.5.8",level:"AA",writes:{style:["min-width:24px;min-height:24px;"]}}},FO={missing_landmark:"landmarks are a best practice, not an A/AA criterion",nested_landmark:"landmarks are a best practice, not an A/AA criterion",duplicate_id:"4.1.1 Parsing is obsolete in WCAG 2.2",missing_button_type:"a button without type fails no A/AA criterion",empty_heading:"empty headings are a best practice, not an A/AA criterion",adjacent_redundant_link:"adjacent duplicate links fail no A/AA criterion"};function uc(l,c="AA"){if(c==="AAA")return {ok:true,sc:""};let g=FO[l.issueType];if(g)return {ok:false,reason:`${l.issueType}: ${g}`};let m=RO[l.issueType];if(!m)return {ok:false,reason:`${l.issueType}: no WCAG 2.2 ${c} criterion this fix remedies`};if(c==="A"&&m.level!=="A")return {ok:false,reason:`${l.issueType}: ${m.sc} is level ${m.level}, above level A`};let p=m.writes[l.attribute.toLowerCase()];return p?p!=="*"&&!p.includes(l.value.trim().toLowerCase())?{ok:false,reason:`${l.issueType}: ${l.attribute}="${l.value}" does not remedy ${m.sc}`}:{ok:true,sc:m.sc}:{ok:false,reason:`${l.issueType}: writing ${l.attribute} does not remedy ${m.sc}`}}async function ab(l,c){if(!c.length)return [];try{return await l.evaluate(IO,c)}catch(g){return c.map(()=>`never-harm check could not run: ${g.message}`)}}function IO(l){let c=["list"],g={ul:c,ol:c,menu:c,li:["listitem"],dl:["list"],dt:["term","listitem"],dd:["definition","listitem"],table:["table","grid","treegrid","presentation","none"],thead:["rowgroup"],tbody:["rowgroup"],tfoot:["rowgroup"],tr:["row"],th:["columnheader","rowheader","cell"],td:["cell","gridcell","columnheader","rowheader"],caption:["caption"],h1:["heading"],h2:["heading"],h3:["heading"],h4:["heading"],h5:["heading"],h6:["heading"],button:["button"],input:[],select:[],textarea:[],option:["option"],label:[],fieldset:["group","radiogroup"],img:["img","presentation","none"],iframe:[],video:[],audio:[],summary:[],nav:["navigation"],main:["main"],form:["form","search"],dialog:["dialog","alertdialog"]},m={menu:["menuitem","menuitemcheckbox","menuitemradio"],menubar:["menuitem","menuitemcheckbox","menuitemradio"],tablist:["tab"],listbox:["option"],tree:["treeitem"],radiogroup:["radio"]},p=["button","link","checkbox","radio","switch","tab","menuitem","menuitemcheckbox","menuitemradio","option","combobox","textbox","searchbox","slider","spinbutton","treeitem","gridcell","scrollbar"],b='a[href],area[href],button,input:not([type=hidden]),select,textarea,summary,iframe,[contenteditable=""],[contenteditable="true"],audio[controls],video[controls],[tabindex]:not([tabindex="-1"])',A=N=>(N||"").trim().toLowerCase().split(/\s+/)[0]||"",x=new Map,k=l.map(()=>null),R=l.map(N=>{try{return Array.from(document.querySelectorAll(N.sel))}catch{return []}}),_=(N,U,Y)=>{let Z=N.tagName.toLowerCase(),z=A(U);if(Z==="a"&&N.hasAttribute("href"))return z==="link"?null:`role="${z}" would override the native <a href> link`;let ie=g[Z];if(!ie||ie.includes(z))return null;if(Z==="li"&&(z==="none"||z==="presentation")){let se=N.parentElement,fe=m[A(se?.getAttribute("role")??null)];if(fe&&Array.from(N.querySelectorAll("[role]")).some(me=>fe.includes(A(me.getAttribute("role")))))return null}return (Z==="ul"||Z==="ol")&&(z==="none"||z==="presentation")&&!N.querySelector("li")?null:`role="${z}" would override the native <${Z}> semantics`},w=N=>{let U=N.tagName.toLowerCase();if((U==="a"||U==="area")&&N.hasAttribute("href")||["button","select","textarea","summary","iframe"].includes(U)||U==="input"&&(N.getAttribute("type")||"").toLowerCase()!=="hidden"||(U==="audio"||U==="video")&&N.hasAttribute("controls")||N.isContentEditable)return true;let Y=x.get(N)??A(N.getAttribute("role"));return p.includes(Y)},S=N=>{let U=N.closest("[role=dialog],[role=alertdialog],dialog,[role=menu],[role=menubar],[role=listbox]");return !U||U.closest('[aria-hidden="true"],[hidden]')||!U.getClientRects().length||getComputedStyle(U).visibility==="hidden"?null:U},y=N=>{if(N.closest("[hidden],[inert]")||!N.getClientRects().length)return false;let U=getComputedStyle(N).visibility;return U!=="hidden"&&U!=="collapse"},C=N=>{let U=N.href;return N.tagName.toLowerCase()!=="a"||!U?false:Array.from(document.querySelectorAll("a[href]")).some(Y=>Y!==N&&Y.href===U&&Y.tabIndex>=0&&y(Y))},F=N=>{let U=getComputedStyle(N),Y=/auto|scroll/.test(U.overflowY)&&N.scrollHeight>N.clientHeight+1;return /auto|scroll/.test(U.overflowX)&&N.scrollWidth>N.clientWidth+1||Y},P=(N,U,Y)=>{let Z=parseInt(U,10),z=S(N);return z?`tabindex change inside an open ${z.getAttribute("role")||z.tagName.toLowerCase()} (dialog/menu focus is the widget's own)`:Z<0?!(N.matches(b)||w(N))||!y(N)||C(N)?null:`tabindex="${U}" on a rendered interactive <${N.tagName.toLowerCase()}>: it stays visible and clickable but leaves the keyboard order`:!(Z>=0)||w(N)?null:Y==="scrollable_not_focusable"?F(N)?N.querySelector(b)?"scroll container already holds a focusable descendant":null:"tabindex>=0 on a container that does not scroll":`tabindex="${U}" on a non-interactive <${N.tagName.toLowerCase()}>`},M=N=>" "+N.replace(/([a-z])([A-Z])/g,"$1 $2").toLowerCase().replace(/[^a-z0-9]+/g," ").trim()+" ",q=[["email",/ e ?mail /],["tel",/ (phone|telephone|tel|mobile|cell) /],["given-name",/ (first ?name|fname|given ?name|forename) /],["family-name",/ (last ?name|lname|surname|family ?name) /],["username",/ (user ?name|login|user ?id) /],["street-address",/ (street|address|addr|address ?line ?1?|address1) /],["postal-code",/ (zip|zip ?code|postal|post ?code|postcode) /],["country",/ country /],["cc",/ (card ?number|cc ?num(ber)?|credit ?card|cvv|cvc|csc|expiry|expiration) /],["other",/ (company|organi[sz]ation|business|city|town|state|province|birthday|birth|website|url|title|job) /]],B=N=>{let U=N.trim().toLowerCase().split(/\s+/).pop()||"";return U==="email"?"email":U.startsWith("tel")?"tel":U==="country"||U==="country-name"?"country":U.startsWith("cc-")?"cc":U==="address-line1"?"street-address":["given-name","family-name","name","street-address","postal-code","username","current-password","new-password"].includes(U)?U:""},j=N=>{let U=[];for(let Z of Array.from(N.labels??[]))U.push(Z.textContent||"");let Y=N.getAttribute("aria-label");Y&&U.push(Y);for(let Z of (N.getAttribute("aria-labelledby")||"").split(/\s+/).filter(Boolean))U.push(document.getElementById(Z)?.textContent||"");return U},X=(N,U)=>{let Y=B(U);if(!Y)return `autocomplete="${U}" is outside the unambiguous token set`;let Z=(N.getAttribute("type")||"").toLowerCase(),z=[N.getAttribute("name")||"",N.getAttribute("id")||"",N.getAttribute("placeholder")||"",...j(N)].map(M),ie=z.join(" ");if(Z==="search"||/ (search|query|keyword|keywords) /.test(ie)||/ (q|s) /.test(M(N.getAttribute("name")||""))||N.closest("[role=search]"))return "autocomplete in a search field";if(Z==="password"){let fe=N.form??N.closest("form"),me=fe?M(["id","class","name","action"].map(ht=>fe.getAttribute(ht)||"").join(" ")):" ",Se=!/ (current|old|existing) /.test(ie)&&(/ (new|confirm(ation)?|verify|create|register|signup|sign up|repeat|re ?type|again|change|reset) /.test(ie)||/ (new|register|signup|sign up|create|change|reset) /.test(me))?"new-password":"current-password";return Y===Se?null:`autocomplete="${U}" on a password field that reads as ${Se}`}let se=new Set;Z==="email"&&se.add("email"),Z==="tel"&&se.add("tel");for(let fe of z){for(let[Pe,ve]of q)ve.test(fe)&&se.add(Pe);let me=fe.replace(/ (first ?name|last ?name|given ?name|family ?name|user ?name|fname|lname) /g," ");/ name /.test(me)&&se.add(/^ ((full|your) )?name $/.test(me.replace(/\s+/g," "))?"name":"other");}return se.size!==1||!se.has(Y)?`autocomplete="${U}": the field names ${se.size?[...se].join(" + "):"no purpose"}, not exactly one`:null},T=N=>!!(N||"").trim(),v=N=>(N.getAttribute("aria-labelledby")||"").trim().split(/\s+/).filter(Boolean).map(U=>document.getElementById(U)?.textContent||"").join(" "),E=N=>T(N.getAttribute("aria-label"))||T(v(N))||T(N.getAttribute("title")),I=N=>{let U=N.tagName.toLowerCase(),Y=A(N.getAttribute("role"));if(Y==="presentation"||Y==="none")return "none";if(U==="img")return N.hasAttribute("alt")?T(N.getAttribute("alt"))||E(N)?"named":"none":E(N)?"named":"unnamed";if(U==="svg"){let Z=Array.from(N.children).some(z=>z.tagName.toLowerCase()==="title"&&T(z.textContent));return E(N)||Z?"named":"unnamed"}return Y==="img"?E(N)?"named":"unnamed":"none"},H=N=>{let U="",Y=Z=>{for(let z of Array.from(Z.childNodes))z.nodeType===3?U+=z.textContent||"":z.nodeType===1&&!["svg","script","style","template"].includes(z.tagName.toLowerCase())&&Y(z);};return Y(N),U.trim()},V=N=>{let U="decorative aria-hidden: no 1.1.1 evidence (not an image exposed without a name)",Y=I(N);if(Y==="unnamed")return null;if(Y==="named")return "decorative aria-hidden: the image has a name (would hide a named image)";if(H(N))return U;let Z=Array.from(N.querySelectorAll('img, svg, [role~="img"]')).filter(ie=>!ie.parentElement?.closest("svg"));if(!Z.length)return U;let z=Z.map(I);return z.includes("named")?"decorative aria-hidden: the holder contains a named image":z.includes("unnamed")?null:U},G=l.map((N,U)=>U).sort((N,U)=>+(l[U].attr==="role")-+(l[N].attr==="role"));for(let N of G){let U=l[N],Y=R[N];if(!Y.length)continue;let Z=U.attr.toLowerCase();for(let z of Y){let ie=null;if(Z==="role"?ie=_(z,U.val,U.issueType):Z==="tabindex"?ie=P(z,U.val,U.issueType):Z==="autocomplete"?ie=X(z,U.val):U.issueType==="decorative_icon"&&Z==="aria-hidden"&&(ie=V(z)),ie){k[N]=ie;break}}if(Z==="role"&&!k[N])for(let z of Y)x.set(z,A(U.val));}return k}var ib=["wcag2a","wcag2aa","wcag21a","wcag21aa","wcag22aa"];async function LO(l){if(await l.evaluate(()=>typeof window.axe?.run=="function"))return;let g=await Promise.resolve().then(()=>Ig(Hu())),m=g.source??g.default?.source;if(!m)throw new Error("axe-core source unavailable");try{await l.evaluate(m);}catch{let{inject:p}=await Promise.resolve().then(()=>(Tr(),Qr));await p(l,{tool:"axe",content:m});}}async function ob(l){try{return await LO(l),await l.evaluate(async c=>{let g=window,m=await g.axe.run(document,{runOnly:{type:"tag",values:c},rules:{"color-contrast":{enabled:!1}},resultTypes:["violations"],elementRef:!0,iframes:!1}),p=new Map;for(let b of m.violations){let A=p.get(b.id)??new Set;p.set(b.id,A);for(let x of b.nodes)x.element&&A.add(x.element);}g.__waFixVerify={pre:p};},ib),{ok:!0}}catch(c){return {ok:false,error:c.message}}}async function sb(l,c,g={}){let m=Date.now(),p=b=>({results:c.map(()=>({status:"not_verifiable",reason:b})),axeRuns:0,ms:Date.now()-m,error:b});if(!c.length)return {results:[],axeRuns:0,ms:0};try{let b=await l.evaluate(PO,{fixes:c.map(A=>({sel:A.sel,attr:A.attr,val:A.val})),tags:ib,maxRuns:g.maxAxeRuns??40});return b.error?p(b.error):{results:b.results,axeRuns:b.runs,ms:Date.now()-m}}catch(b){return p(`verify: ${b.message}`)}}async function PO(l){let{fixes:c,tags:g,maxRuns:m}=l,p=window,b=p.__waFixVerify;if(!b?.pre)return {error:"no pre-fix axe run on this page",results:[],runs:0};if(typeof p.axe?.run!="function")return {error:"axe-core is not loaded",results:[],runs:0};let A=["remove_attribute","prepend","append","textcontent","innerhtml","thead"],x=c.map(j=>{let X=[];try{X=Array.from(document.querySelectorAll(j.sel));}catch{}return {attr:j.attr,val:j.val,els:X,ok:X.length>0&&/^[a-z][a-z0-9_.:-]*$/i.test(j.attr)&&!A.includes(j.attr.toLowerCase())}}),k=x.map(j=>j.ok?"pending":"not_verifiable"),R=x.map(j=>j.ok?void 0:j.els.length?`"${j.attr}" is not an attribute write the verifier can apply`:"selector matches no element"),_=x.map(()=>new Set),w=new Map,S=()=>{for(let[j,X]of w)for(let[T,v]of X)v===null?j.removeAttribute(T):j.setAttribute(T,v);},y=j=>{S();for(let X of j)for(let T of x[X].els){let v=w.get(T);v||w.set(T,v=new Map),v.has(x[X].attr)||v.set(x[X].attr,T.getAttribute(x[X].attr));try{T.setAttribute(x[X].attr,x[X].val);}catch{k[X]="not_verifiable",R[X]=`attribute "${x[X].attr}" cannot be written`;}}},C=0,F=new Map,P=async j=>{C++;let X=await p.axe.run(j,{runOnly:{type:"tag",values:g},rules:{"color-contrast":{enabled:false}},resultTypes:["violations"],elementRef:true,iframes:false}),T=[];for(let v of X.violations)for(let E of v.nodes)E.element&&!b.pre.get(v.id)?.has(E.element)&&!F.get(v.id)?.has(E.element)&&T.push({rule:v.id,el:E.element});return T},M=(j,X)=>x[j].els.some(T=>T===X||T.contains(X)||X.contains(T)),q=()=>k.map((j,X)=>j==="pending"?X:-1).filter(j=>j>=0),B=(j,X,T)=>{k[j]="rejected_regression";for(let v of X)_[j].add(v.rule);T&&(R[j]=T);};try{let j=q();y(j);let X=await P(document);if(X.length){y([]);let T=await P(document);for(let v of T){let E=F.get(v.rule)??new Set;F.set(v.rule,E),E.add(v.el);}if(T.length){X=X.filter(v=>!F.get(v.rule)?.has(v.el));for(let v of j){let E=Array.from(new Set(T.filter(I=>M(v,I.el)).map(I=>I.rule)));E.length&&(k[v]="not_verifiable",R[v]=`baseline not clean: ${E.join(", ")} fails on this element with no fix applied`);}}}if(X.length){let T=q(),v=T.filter(V=>X.some(G=>M(V,G.el))),E=T.filter(V=>!v.includes(V));for(let V of v){let G=X.filter(Y=>M(V,Y.el));if(C>=m){B(V,G,"verify budget exhausted while the fix was under suspicion");continue}y([...E,V]);let N=Array.from(new Set([...G.map(Y=>Y.el),...x[V].els])),U=(await P({include:N})).filter(Y=>M(V,Y.el));U.length&&B(V,U);}let I=q();y(I);let H=await P(document);if(H.length){let V=async N=>{if(C>=m)throw new Error("budget");return y(N),P(document)},G=async(N,U)=>{let Y=await V([...U,...N]);if(!Y.length)return [];if(N.length===1)return B(N[0],Y),N;let Z=N.length>>1,z=N.slice(0,Z),ie=await G(z,U),se=await G(N.slice(Z),[...U,...z.filter(fe=>!ie.includes(fe))]);return [...ie,...se]};try{await G(I,[]);}catch{let N=H.some(U=>!I.some(Y=>M(Y,U.el)));I=q();for(let U of I)(N||H.some(Y=>M(U,Y.el)))&&B(U,H.filter(Y=>M(U,Y.el)),"verify budget exhausted before the regression was isolated");}}}for(let T of q())k[T]="verified";}finally{S();}return {runs:C,results:k.map((j,X)=>({status:j,..._[X].size?{newViolations:Array.from(_[X])}:{},...R[X]?{reason:R[X]}:{}}))}}var MO=new Set(["correct_needed","correct_unneeded","wrong_value","harmful","unclear"]),lb=(l,c)=>({sel:l.sel,attr:l.attr,val:l.val,issueType:l.issueType,verdict:c.verdict,apply:c.apply,...c.suggestedValue!==void 0?{suggestedValue:c.suggestedValue}:{},reason:c.reason}),cc=(l,c)=>lb(l,{verdict:"unclear",apply:false,reason:c});function OO(l){if(!l||typeof l!="object")return null;let c=l;if(typeof c.index!="number"||!Number.isInteger(c.index)||typeof c.verdict!="string"||!MO.has(c.verdict))return null;let g=c.verdict;return {index:c.index,verdict:g,apply:c.apply===true&&g==="correct_needed",...typeof c.suggestedValue=="string"?{suggestedValue:c.suggestedValue}:{},reason:typeof c.reason=="string"?c.reason.replace(/\s+/g," ").slice(0,200):""}}async function ub(l,c){let g=[],m=[],p=null;for(let b=0;b<l.length;b+=20){let A=l.slice(b,b+20);if(p){g.push(...A.map(R=>cc(R,`fix judge unavailable (${p})`)));continue}let x=new AbortController,k=setTimeout(()=>x.abort(),c.timeoutMs??16e4);try{let R=await Promise.race([c.transport({url:c.url,...c.viewport?{viewport:c.viewport}:{},fixes:A.map(w=>({issue_type:w.issueType,selector:w.sel,attr:w.attr,value:w.val}))},x.signal),new Promise((w,S)=>x.signal.addEventListener("abort",()=>S(new Error("timeout"))))]),_=new Map;for(let w of Array.isArray(R?.verdicts)?R.verdicts:[]){let S=OO(w);S&&S.index>=0&&S.index<A.length&&_.set(S.index,_.has(S.index)?null:S);}A.forEach((w,S)=>{let y=_.get(S);g.push(y?lb(w,y):cc(w,"the judge returned no verdict for this fix"));});}catch(R){p=x.signal.aborted?"timeout":(R?.message||"error").slice(0,120),m.push(`fix judge: ${p}; ${l.length-b} fixes left unjudged`),g.push(...A.map(_=>cc(_,`fix judge unavailable (${p})`)));}finally{clearTimeout(k);}}return {judged:g,errors:m}}Iu();async function cb(l){return await l.evaluate(()=>typeof window.uniqueSel=="function")||await l.evaluate(`(0,eval)(${JSON.stringify(`if(typeof __name==='undefined'){var __name=function(t){return t}}
456
+ ${JSON.stringify(c,null,1)}`}function sM(l,c={}){let g=l.vision&&l.items.some(b=>b.screenshot),m=g?c.visionModel||XP:c.textModel||iv,p=[{type:"text",text:oM(l)}];if(g)for(let b of l.items)b.screenshot&&(p.push({type:"text",text:`Crop for ${b.id}:`}),p.push({type:"image_url",image_url:{url:`data:image/png;base64,${b.screenshot}`}}));return {model:m,temperature:0,max_tokens:4096,...m===iv&&c.disableTextModelReasoning?{reasoning:{enabled:false}}:{},messages:[{role:"system",content:iM},{role:"user",content:p}]}}function lM(l){let c=(l.baseUrl||WP).replace(/\/+$/,""),g=false;try{let m=new URL(c).hostname;g=m==="openrouter.ai"||m.endsWith(".openrouter.ai");}catch{}return async(m,p)=>{let b=await fetch(`${c}/chat/completions`,{method:"POST",signal:p,headers:{"Content-Type":"application/json",Authorization:`Bearer ${l.apiKey}`,"HTTP-Referer":"https://webability.io","X-Title":"WebAbility scanner judge"},body:JSON.stringify(sM(m,{visionModel:l.visionModel,textModel:l.textModel,disableTextModelReasoning:g}))});if(!b.ok)throw new la(`judge model HTTP ${b.status}`);let x=(await b.json()).choices?.[0]?.message?.content;if(typeof x=="string")return x;if(Array.isArray(x))return x.map(k=>typeof k?.text=="string"?k.text:"").join("");throw new Error("judge model returned no content")}}function uM(l){let c=l.apiUrl.replace(/\/+$/,"");return async(g,m)=>{let p=await fetch(`${c}/api/judge-incomplete`,{method:"POST",signal:m,redirect:"manual",headers:{"Content-Type":"application/json",...l.token?{Authorization:`Bearer ${l.token}`}:{},...l.internalSecret?{"x-mcp-internal":l.internalSecret}:{}},body:JSON.stringify(g)});if(p.status>=300&&p.status<400)throw new la(`judge endpoint redirected (HTTP ${p.status}); not followed`);if(!p.ok)throw new la(`judge endpoint HTTP ${p.status}`);return p.json()}}function cM(l){return l.transport?l.transport:l.apiKey?lM({apiKey:l.apiKey,baseUrl:l.baseUrl,visionModel:l.visionModel,textModel:l.textModel}):l.apiUrl?uM({apiUrl:l.apiUrl,token:l.apiToken,internalSecret:l.internalSecret}):null}function dM(l){return l.maxCropChars??(!l.transport&&!l.apiKey&&l.apiUrl?UP:void 0)}async function fv(l,c,g){let m={promoted:[],judged:[]},p=cM(g);if(c.length===0)return m;let b=g.level??"AA",A=g.timeoutMs??zP,x=Date.now()+A,k=ia([...c],b);if(k.length===0)return m;let R=new Map;for(let v of k){let E=`${v.selector}|${Gu(v)}`,I=R.get(E);I?I.members.push(v):R.set(E,{key:E,members:[v],rep:v,ctx:void 0,kind:"generic"});}let _={elements:{}};if(l)try{await l.evaluate("if(typeof globalThis.__name==='undefined'){globalThis.__name=function(t){return t}}"),_=await l.evaluate(JP,{selectors:[...R.keys()].map(v=>R.get(v).rep.selector),maxHtml:ov});}catch{}for(let v of R.values())v.ctx=_.elements[v.rep.selector],v.ctx&&!v.ctx.found&&(v.ctx=void 0),v.kind=ZP(v.rep,v.ctx);let w=new Map;for(let[v,E]of [...R]){if(!E.ctx)continue;let I=`${E.ctx.elementKey}|${Gu(E.rep)}`,H=w.get(I);if(!H){w.set(I,E);continue}H.members.push(...E.members),R.delete(v);}let S={promoted:[],judged:[]},y=(v,E)=>{for(let I of v.members){if(E.verdict==="violation"){let H=pM(I,v,E);if(!H)continue;S.promoted.push(H);}S.judged.push({id:I.id.replace("axe-incomplete-","axe-"),type:I.type,verdict:E.verdict,reason:E.reason});}},C=[...R.values()].filter(v=>v.kind==="contrast");if(C.length&&l){for(let E of C)E.pixels=g.measured?.get(E.rep.selector);let v=C.filter(E=>!E.pixels).map(E=>E.rep.selector);if(v.length)try{for(let E of await $u(l,v))for(let I of C)I.rep.selector===E.selector&&(I.pixels=E);}catch{}}let F=[];for(let v of R.values()){let E=p?Go.get(lv(g.url,v.rep,v.ctx?.html??v.rep.html??"")):void 0;if(E){y(v,E);continue}let I=fM(v);if(I!=="drop"){if(I){y(v,I);continue}F.push(v);}}if(F.length===0||!p)return S;let P=g.vision!==false&&!!l&&typeof l.screenshot=="function",M=new Map,q=new Set,B=0,j=dM(g),X=v=>({id:v.rep.id,type:v.rep.type,wcag:v.rep.wcag,message:v.rep.message,selector:v.rep.selector,html:(v.ctx?.html??v.rep.html??"").slice(0,ov),context:q.has(v.key)?{...uv(v),cropNote:"no image attached: the crop was too large to send"}:uv(v),...M.has(v.key)?{screenshot:M.get(v.key)}:{}}),T=P?jP:$P;for(let v=0;v<F.length;v+=T){let E=x-Date.now();if(E<=0)break;let I=F.slice(v,v+T);if(P){for(let Z of I){if(B>=GP||Date.now()>x)break;let z=await hM(l,Z.ctx,j);z&&(B++,z.data?M.set(Z.key,z.data):q.add(Z.key));}if(Date.now()>x)break}let H=new Map(I.map(Z=>[Z.rep.id,Z])),V=new AbortController,G=setTimeout(()=>V.abort(),E),N=null,U=false,Y=Date.now();try{let Z=await Promise.race([p({url:g.url,level:b,vision:P,items:I.map(X)},V.signal),new Promise((z,ie)=>V.signal.addEventListener("abort",()=>ie(new Error("judge deadline"))))]);N=aM(Z),Uu()&&console.error(`ai judge: batch ${I.length} items, ${I.filter(z=>M.has(z.key)).length} crops, ${Date.now()-Y}ms, ${N?N.length+" verdicts":"MALFORMED: "+String(Z).slice(0,200)}`);}catch(Z){Uu()&&console.error(`ai judge: batch ${I.length} items failed after ${Date.now()-Y}ms: ${Z.message}`),N=null,U=Z instanceof la;}finally{clearTimeout(G);}if(!N){if(V.signal.aborted||U)break;continue}for(let Z of N){let z=H.get(Z.id);if(!z)continue;H.delete(Z.id);let ie={verdict:Z.verdict,reason:eM(Z.reason),fix:Z.fix};Go.size>=KP&&Go.clear(),Go.set(lv(g.url,z.rep,z.ctx?.html??z.rep.html??""),ie),y(z,ie);}}return S}function fM(l){let c=l.ctx;if(l.kind==="alt"){if(c?.role==="presentation"||c?.role==="none")return {verdict:"pass",reason:"declared decorative (role=presentation)"};if(c?.ariaHidden)return {verdict:"pass",reason:"hidden from assistive technology (aria-hidden)"};if(c?.img){let{attrW:g,attrH:m,naturalW:p,naturalH:b}=c.img;if(g>0&&g<=1&&m>0&&m<=1||p>0&&p<=1&&b>0&&b<=1)return {verdict:"pass",reason:"1x1 tracking/spacer pixel"}}return c&&Wu(c)?c.control?c.control.name?{verdict:"pass",reason:`${c.control.tag} is named ("${c.control.name.slice(0,40)}"); the background image needs no text`}:null:{verdict:"pass",reason:"CSS background image on a non-interactive element; decorative"}:c?.parentInteractive?.text?{verdict:"pass",reason:`${c.parentInteractive.tag} is named by its visible link text ("${c.parentInteractive.text.slice(0,40)}"); alt may be empty`}:null}if(l.kind==="motion")return c?.reducedMotionHandled?{verdict:"pass",reason:"a prefers-reduced-motion: reduce rule stops this element's animation"}:null;if(l.kind==="contrast"){if(!l.pixels)return "drop";let g=Xu(l.rep,l.pixels.threshold);return l.pixels.worstRatio>=g?{verdict:"pass",reason:`measured ${l.pixels.worstRatio.toFixed(2)}:1 at worst behind the text, meets ${g}:1`}:l.pixels.bestRatio<g*.97?{verdict:"violation",reason:`measured ${l.pixels.bestRatio.toFixed(2)}:1 at best behind the text, below ${g}:1 everywhere`}:null}return null}function uv(l){let c=l.ctx,g={};return l.rep.reviewReason&&(g.engineNote=l.rep.reviewReason),c&&(g.tag=c.tag,c.nearText&&(g.nearbyText=c.nearText),c.parentInteractive&&(g.parentControl=c.parentInteractive),l.kind==="alt"&&Wu(c)&&c.control&&(g.control={tag:c.control.tag,accessibleName:c.control.name}),l.kind==="alt"&&c.img&&(g.image={src:c.img.src,alt:c.img.alt,width:c.img.naturalW||c.img.attrW||c.rect.w,height:c.img.naturalH||c.img.attrH||c.rect.h}),l.kind==="contrast"&&l.pixels&&(g.fg=sa(l.pixels.fg),g.threshold=Xu(l.rep,l.pixels.threshold),g.bestRatio=cv(l.pixels.bestRatio),g.worstRatio=cv(l.pixels.worstRatio),g.fontSize=c.fontSize,g.fontWeight=c.fontWeight),l.kind==="generic"&&(g.fg=sa(c.fg),g.bg=sa(c.bg),g.size={w:Math.round(c.rect.w),h:Math.round(c.rect.h)})),g}function Xu(l,c){return l.wcag==="1.4.6"||l.type==="contrast_enhanced"?c===3?4.5:7:c}var cv=l=>Math.round(l*100)/100;function pM(l,c,g){let m=nM(l);if(c.kind==="alt"){let b=tM(g.fix?.value);return b?Wu(c.ctx)?{...m,fix:{attribute:"aria-label",currentValue:"",suggestedValue:b,needsManualReview:false}}:{...m,fix:{attribute:"alt",currentValue:c.ctx?.img?.alt??l.fix?.currentValue??"",suggestedValue:b,needsManualReview:false}}:null}if(c.kind==="contrast"){let b=c.pixels;if(!b)return null;let A=sa(b.fg),x=Xu(l,b.threshold),k=b.worstBg?sa(b.worstBg):null,R=b.bestBg?sa(b.bestBg):null,_=C=>!!C&&!!k&&Ln(C,k)>=x&&(!R||Ln(C,R)>=x),w,S=rM(g.fix?.value),y=k?mM(A,k,x):null;return S&&S!==A.toLowerCase()&&_(S)?w=`color:${S} !important;`:_(y)?w=`color:${y} !important;`:R&&Ln(A,R)>=x&&(w=`background-color:${R} !important;`),{...m,impact:"serious",message:`contrast: ${A} text on its rendered background measures ${b.worstRatio.toFixed(2)}:1 at worst (${b.bestRatio.toFixed(2)}:1 at best, from pixels; judge: ${g.reason||"not readable"}), needs ${x}:1`,fix:{attribute:"style",currentValue:A,...w?{suggestedValue:w}:{},needsManualReview:true}}}let p=l.fix;return p?{...m,fix:p}:g.fix?.attribute&&g.fix.value?{...m,fix:{attribute:g.fix.attribute,currentValue:"",suggestedValue:g.fix.value,needsManualReview:true}}:m}function mM(l,c,g){let m=l.match(dv);if(!m)return null;let p=parseInt(m[1],16),b=[p>>16&255,p>>8&255,p&255],A=R=>"#"+R.map(_=>Math.round(Math.min(255,Math.max(0,_))).toString(16).padStart(2,"0")).join(""),x=(R,_)=>A(b.map(w=>_?w*(1-R):w+(255-w)*R)),k=null;for(let R of [true,false]){if(Ln(x(1,R),c)<g)continue;let _=0,w=1;for(let y=0;y<24;y++){let C=(_+w)/2;Ln(x(C,R),c)>=g?w=C:_=C;}let S=x(w,R);Ln(S,c)>=g&&(!k||w<k.t)&&(k={t:w,hex:S});}return k?.hex??null}var gM=[1,.6,.35];async function hM(l,c,g){let m=l.screenshot;if(typeof m!="function"||!c||c.rect.w<2||c.rect.h<2||c.hidden)return null;try{let b=Math.min(1200,c.rect.w+16),A=Math.min(600,c.rect.h+16),x=c.rect.x+c.rect.w/2,k=c.rect.y+c.rect.h/2,R=globalThis.Buffer;if(!R)return null;let _=0;for(let w of g===void 0?[1]:gM){let S=Math.max(2,Math.round(b*w)),y=Math.max(2,Math.round(A*w)),C=w===1?Math.max(0,c.rect.x-8):Math.max(0,x-S/2),F=w===1?Math.max(0,c.rect.y-8):Math.max(0,k-y/2),P=await m.call(l,{clip:{x:C,y:F,width:S,height:y},fullPage:!0,type:"png",animations:"disabled"}),M=R.from(P).toString("base64");if(_=M.length,g===void 0||M.length<=g)return {data:M}}return Uu()&&console.error(`ai judge: crop for ${c.tag} left out (${_} base64 chars > ${g} at the smallest clip)`),{}}catch{return null}}async function vM(l){let c=C=>({verdict:"drop",why:C}),g=null;try{g=document.querySelector(l.selector);}catch{return c("bad selector")}if(!g||g.tagName!=="VIDEO")return c("not a video");let m=getComputedStyle(g),p=g.getBoundingClientRect();if(m.display==="none"||m.visibility==="hidden"||g.closest("[hidden]")||p.width<100||p.height<50)return c("not visible/large enough");if(g.error)return c("failed load");let b=g.currentSrc||g.getAttribute("src")||g.querySelector("source")?.getAttribute("src")||"";if(!b||/^(blob|data|about|javascript):/i.test(b)||/\.(m3u8|mpd)(\?|$)/i.test(b))return c("no direct src / MSE");let A=g.hasAttribute("muted")||g.muted,x=g.hasAttribute("controls"),k=g.hasAttribute("autoplay")||g.autoplay,R=g.hasAttribute("loop")||g.loop,_=x||k&&!A;if(!_){let C=/play|pause|mute|unmute|sound|volume/i;for(let F=g.parentElement,P=0;F&&P<3&&!_;F=F.parentElement,P++)_=Array.from(F.querySelectorAll('button, [role="button"]')).some(M=>C.test((M.getAttribute("aria-label")||"")+" "+(M.getAttribute("title")||"")+" "+(M.textContent||"")));}if(!_)return c("not user-playable");if(A&&R&&!x)return c("decorative loop");if(g.hasAttribute("muted")&&!x&&!k)return c("muted");if(Number.isFinite(g.duration)&&g.duration>0&&g.duration<5)return c("under 5s");await new Promise(C=>setTimeout(C,2e3));for(let C of Array.from(g.querySelectorAll("track"))){let F=(C.getAttribute("kind")||"subtitles").toLowerCase();if((F==="captions"||F==="subtitles")&&C.getAttribute("src"))return c("has caption track")}let w=g.textTracks;for(let C=0;w&&C<w.length;C++)if(w[C].kind==="captions"||w[C].kind==="subtitles")return c("has text track");let S=g,y=null;if(typeof S.mozHasAudio=="boolean"?y=S.mozHasAudio:S.audioTracks&&typeof S.audioTracks.length=="number"&&(y=S.audioTracks.length>0?true:null),y===null&&typeof S.webkitAudioDecodedByteCount=="number"&&S.webkitAudioDecodedByteCount>0&&(y=true),y===null)try{let C=new AbortController,F=setTimeout(()=>C.abort(),l.fetchMs),P=await fetch(b,{headers:{Range:"bytes=0-"+(l.rangeBytes-1)},signal:C.signal}),M=new Uint8Array(l.rangeBytes),q=0,B=P.body?P.body.getReader():null;if(B)try{for(;q<l.rangeBytes;){let{done:T,value:v}=await B.read();if(T||!v)break;let E=Math.min(v.length,l.rangeBytes-q);M.set(v.subarray(0,E),q),q+=E;}}finally{try{await B.cancel();}catch{}}clearTimeout(F);let j=(T,v=0)=>{e:for(let E=v;E<=q-T.length;E++){for(let I=0;I<T.length;I++)if(M[E+I]!==T[I])continue e;return E}return -1},X=T=>Array.from(T).map(v=>v.charCodeAt(0));j(X("ftyp"))>=0&&j(X("moov"))>=0?y=j(X("hdlr"))>=0&&j(X("soun"))>=0:M[0]===26&&M[1]===69&&M[2]===223&&M[3]===163&&j([22,84,174,107])>=0&&(y=j([131,129,2])>=0);}catch{y=null;}return y!==true?c(y===false?"silent":"audio unknowable"):{verdict:"violation"}}async function pv(l,c){let g=c.filter(b=>b.type==="missing_captions"&&/^<video\b/i.test(b.html??"")&&b.selector).slice(0,10);if(g.length===0)return [];let m=[],p=Date.now()+1e4;try{await l.evaluate("if(typeof globalThis.__name==='undefined'){globalThis.__name=function(t){return t}}");for(let b of g){if(Date.now()>p)break;let A=p-Date.now(),x,k=await Promise.race([l.evaluate(vM,{selector:b.selector,rangeBytes:1048576,fetchMs:4e3}),new Promise(R=>{x=setTimeout(()=>R(null),A);})]).finally(()=>x&&clearTimeout(x));if(!k)break;if(k.verdict==="violation"){let{confidence:R,reviewReason:_,...w}=b;m.push({...w,id:b.id.replace("axe-incomplete-","axe-"),message:"video has an audio track, can be played by the user, and has no captions or subtitles track (WCAG 1.2.2)"});}}}catch{}return m}function hv(){let l=p=>{let b=p.getBoundingClientRect();if(b.width===0||b.height===0)return false;let A=window.getComputedStyle(p);return A.visibility!=="hidden"&&A.display!=="none"&&A.opacity!=="0"},c=Array.from(document.querySelectorAll('input[type="password"]')),g=Array.from(document.querySelectorAll('button, input[type="submit"], a[role="button"]')).filter(l).map(p=>(p.value||p.textContent||"").trim().toLowerCase()).filter(p=>p.length>0&&p.length<40),m=Array.from(document.querySelectorAll("button, a")).filter(l).filter(p=>/sign in with|continue with|log in with/i.test(p.textContent||"")).length;return {passwordFields:c.length,visiblePasswordFields:c.filter(l).length,submitLabels:g,oauthButtons:m,formCount:document.querySelectorAll("form").length,bodyTextLength:(document.body?.innerText||"").trim().length,headingText:(document.querySelector("h1, h2")?.textContent||"").trim().slice(0,120).toLowerCase()}}var bM=/\b(log ?in|sign ?in|sign ?on|authenticate)\b/,yM=/\b(log ?in|sign ?in|sign ?on|authentication|welcome back|access denied|unauthori[sz]ed)\b/;function mv(l){try{let c=new URL(l).pathname.toLowerCase();return /(^|\/)(login|signin|sign-in|log-in|auth|sso|session\/new|users\/sign_in)(\/|$)/.test(c)}catch{return false}}function vv(l,c,g){if(mv(c))return null;let m=gv(c)!==gv(g),p=l.submitLabels.some(w=>bM.test(w)),b=yM.test(l.headingText),A=mv(g),x=[];A&&x.push("url"),p&&x.push("submit"),b&&x.push("heading"),m&&x.push("redirected");let k=l.visiblePasswordFields>0,R=l.oauthButtons>0&&l.bodyTextLength<600&&l.formCount<=1;if(!k&&!R||x.length<2)return null;let _=`${k?"password-field":"oauth-only"}+${x.join("+")}`;return {reason:`Scan did not reach the requested page \u2014 it landed on a sign-in page at ${g}. The findings would describe the login screen, not the intended page. Configure site authentication for this site, or scan a page that does not require a session.`,signal:_,finalUrl:g}}function gv(l){try{let c=new URL(l);return `${c.origin}${c.pathname.replace(/\/+$/,"")}`.toLowerCase()}catch{return l.toLowerCase()}}async function qM(l){try{return await l.evaluate(()=>{let c=(document.title||"").toLowerCase(),g=[["just a moment","Cloudflare"],["attention required","Cloudflare"],["checking your browser","Cloudflare"],["access to this page has been denied","PerimeterX/HUMAN"],["please verify you are a human","PerimeterX/HUMAN"],["verify you are human","bot-challenge"],["are you a robot","bot-challenge"],["you have been blocked","bot-challenge"],["request unsuccessful","Imperva/Incapsula"],["human verification","bot-challenge"],["additional security check is required","bot-challenge"]];for(let[b,A]of g)if(c.includes(b))return {vendor:A,signal:`title:"${document.title}"`,needsCorroboration:!1};let m=[["#cf-chl-widget","Cloudflare"],["#challenge-running","Cloudflare"],["#cf-challenge-running","Cloudflare"],[".cf-browser-verification","Cloudflare"],["#cf-please-wait","Cloudflare"],["div.cf-error-details","Cloudflare"],["#px-captcha","PerimeterX/HUMAN"],["#distilCaptchaForm","Distil"],["form#challenge-form","bot-challenge"]];for(let[b,A]of m)if(document.querySelector(b))return {vendor:A,signal:`marker:${b}`,needsCorroboration:!1};if(window._cf_chl_opt)return {vendor:"Cloudflare",signal:"marker:window._cf_chl_opt",needsCorroboration:!1};let p=[["please wait...","Cloudflare"],["access denied","bot-challenge"]];for(let[b,A]of p)if(c.includes(b))return {vendor:A,signal:`title:"${document.title}"`,needsCorroboration:!0};return null})}catch{return null}}async function BM(l){try{return await l.evaluate(()=>{let c=document.querySelectorAll("body *").length;if(c>250)return null;let g=['[id*="captcha" i]','[class*="captcha" i]','img[src*="captcha" i]','iframe[src*="recaptcha" i]','iframe[src*="hcaptcha" i]','iframe[src*="turnstile" i]','[name*="captcha" i]'];for(let p of g)try{if(document.querySelector(p))return {signal:`marker:${p}`,elements:c}}catch{}let m=(document.title||"").toLowerCase();return m.includes("captcha")||m.includes("security check")||m.includes("bot verification")?{signal:`title:"${document.title}"`,elements:c}:null})}catch{return null}}async function HM(l,c){let g=await qM(l),m=typeof c=="number"&&c>=400,p=g&&(!g.needsCorroboration||m)?g:null;if(!p&&!m)return null;let b=[];return p&&b.push(`served a ${p.vendor} bot-challenge / interstitial page`),m&&b.push(`main document returned HTTP ${c}`),{reason:`Scan did not reach the real page \u2014 the target ${b.join(" and ")}. The returned issue list reflects the challenge/error page, not the intended site.`,...p?{vendor:p.vendor}:{},...typeof c=="number"?{status:c}:{},...p?{signal:p.signal}:m?{signal:`status:${c}`}:{}}}async function Sv(l,c){let g=typeof l=="string",m={wcagTags:Pu,includeAxe:true,deep:false,dismissModals:g,...c},p,b,A,x;if(g){A=l.startsWith("http")?l:`https://${l}`;let k=typeof m.viewport=="string"?Ho[m.viewport]??Ho.desktop:m.viewport??Ho.desktop;b=await(await import('playwright')).chromium.launch({headless:m.browser?.headless??true}),p=await(await b.newContext({viewport:k})).newPage();let w=await p.goto(A,{waitUntil:"domcontentloaded",timeout:m.browser?.timeout??3e4});x=typeof w?.status=="function"?w.status():void 0;}else p=l,A=p.url(),x=m.mainStatus;if(m.dismissModals)try{let{dismissModals:k}=await Promise.resolve().then(()=>(yv(),bv));await k(p);}catch{}if(m.settle!==false)try{let{waitForRenderSettle:k}=await Promise.resolve().then(()=>(Wo(),Uo));await k(p,typeof m.settle=="number"?m.settle:void 0);}catch{}if(!b){let{snapshotInteractionState:k}=await Promise.resolve().then(()=>(Ko(),Xo));await k(p);}try{let k=await p.evaluate(()=>performance.timeOrigin);try{let Y=await p.evaluate(hv),Z=vv(Y,A,typeof p.url=="function"?p.url():A);if(Z)return {url:A,timestamp:new Date().toISOString(),blocked:{reason:Z.reason,signal:`auth-wall:${Z.signal}`,...typeof x=="number"?{status:x}:{}},issues:[],incomplete:[],internal_bugs:[],summary:{total:0,critical:0,serious:0,moderate:0,minor:0,incomplete:0}}}catch{}let R=await HM(p,x);if(R)return {url:A,timestamp:new Date().toISOString(),blocked:R,issues:[],incomplete:[],internal_bugs:[],summary:{total:0,critical:0,serious:0,moderate:0,minor:0,incomplete:0}};let _=[],w=new Map,S=[],y=[],C=[],{guardDetectorState:F,dropToolingFindings:P}=await Promise.resolve().then(()=>(Tr(),Qr)),M=await BM(p);M&&y.push(`challenge:suspected-interstitial (${M.signal}; ${M.elements} elements) \u2014 this looks like a bot-challenge/CAPTCHA page, not the real site; results may be invalid`),await(await Promise.resolve().then(()=>(Tr(),Qr))).startProvenance(p);let q=await $h(p,S,y,{internalBugs:C,extraSerialDetectors:m.extraSerialDetectors,experimental:m.experimental});_.push(...q.map(Gh));let{resetInteractionState:B,focusOnlyObscuredIndexes:j}=await Promise.resolve().then(()=>(Ko(),Xo));if(await B(p),m.includeAxe)try{let Y=await F(p,"axe",y,()=>Wh(p,jh(m.wcagTags??Pu,m.level)),{bugs:C});for(let Z of Y.violations){let z=Z.id==="target-size"?await j(p,Z.nodes):new Set;for(let[ie,se]of Z.nodes.entries()){if(z.has(ie)){C.push({tool:"axe",kind:"finding-dropped",detail:"target-size obscured only by a focus-only element (scanner focus state)",selector:oa(se.target)});continue}_.push({id:`axe-${Z.id}-${In(oa(se.target))}`,source:"axe-core",type:Z.id,wcag:qu(Z.tags),level:Bu(Z.tags),impact:Ou(Z.impact),message:Z.help,selector:oa(se.target),html:se.html?.slice(0,300)});}}for(let Z of Y.incomplete??[])for(let z of Z.nodes){let ie=`axe-incomplete-${Z.id}-${In(oa(z.target))}`,se=z.any?.[0]?.data?.messageKey;se&&w.set(ie,se),_.push({id:ie,source:"axe-core",type:Z.id,wcag:qu(Z.tags),level:Bu(Z.tags),impact:Ou(Z.impact),message:Z.help,selector:oa(z.target),html:z.html?.slice(0,300),confidence:"needs_review",reviewReason:"axe-core flagged this as needing human review"});}}catch(Y){C.push({tool:"axe",kind:"engine-failed",detail:`axe-core threw, its findings are absent: ${Y?.message??String(Y)}`});}let{deduplicateIssues:X}=await Promise.resolve().then(()=>(ca(),ua)),T=Vu(_),v=X(T.verdicts);try{let{pruneInvisibleContrast:Y}=await Promise.resolve().then(()=>(Wo(),Uo));v=await Y(p,v);}catch{}try{let{pruneHiddenIframeIssues:Y}=await Promise.resolve().then(()=>(Wo(),Uo));v=await Y(p,v);}catch{}try{let{dedupeByElementIdentity:Y}=await Promise.resolve().then(()=>(ca(),ua));v=await Y(p,v);}catch{}try{v=await P(p,v,C);}catch{}try{let{verifyAnimatedGifs:Y}=await Promise.resolve().then(()=>(Dv(),_v));v=await Y(p,v);}catch{}if(m.deep&&m.deepApiKey)try{let Y=await VM(A,v,m);v.push(...Y);}catch{}if(m.rootSelector)try{let{scopeIssuesToRoot:Y}=await Promise.resolve().then(()=>(Yu(),Ku)),Z=await Y(p,v,m.rootSelector);v=Z.issues,Z.warning&&y.push(Z.warning);}catch{}v=ia(v,m.level??"AA");let E=Vu(v),I=E.verdicts,H=[],V=[],G=new Set;try{if(V=[...T.undecided,...E.undecided],m.rootSelector){let{scopeIssuesToRoot:se}=await Promise.resolve().then(()=>(Yu(),Ku));V=(await se(p,V,m.rootSelector)).issues;}let Y=new Map;await B(p);let Z=await F(p,"contrast-pixels",y,()=>rv(p,V,w,Y),{bugs:C}),z=await pv(p,V),ie=[...Z,...z];if(G=new Set(ie.map(se=>`${se.selector}|${se.wcag}`)),ie.length){let{deduplicateIssues:se}=await Promise.resolve().then(()=>(ca(),ua));I=se([...I,...ie]);}{let se=V.filter(me=>!G.has(`${me.selector}|${me.wcag}`)),fe=await fv(p,se,{...m.judge,url:A,level:m.judge?.level??m.level??"AA",measured:Y});if(globalThis.process?.env?.WA_DEBUG_JUDGE&&console.error(`ai judge: ${se.length} undecided before judge, ${fe.promoted.length} promoted, ${fe.judged.filter(me=>me.verdict==="pass").length} passed`),H=fe.judged,fe.promoted.length){let{deduplicateIssues:me}=await Promise.resolve().then(()=>(ca(),ua));I=me([...I,...ia(fe.promoted,m.level??"AA")]);}}}catch{}let N;{let Y=new Set(H.map(z=>z.id)),Z=ia(V,m.level??"AA").filter(z=>!G.has(`${z.selector}|${z.wcag}`)&&!Y.has(z.id.replace("axe-incomplete-","axe-")));Z.length&&(N={count:Z.length,wcag:[...new Set(Z.map(z=>z.wcag))].sort()});}try{let{dedupeByElementIdentity:Y}=await Promise.resolve().then(()=>(ca(),ua));I=await Y(p,I);}catch{}try{I=await P(p,I,C);}catch{}if(await p.evaluate(()=>performance.timeOrigin)!==k)throw new Error(`the page's document was replaced during the scan (navigation to ${p.url()}); the findings mix two documents`);{let{attachMutations:Y,stopProvenance:Z}=await Promise.resolve().then(()=>(Tr(),Qr));Y(C,await Z(p));}let U={url:A,timestamp:new Date().toISOString(),engine:aa,issues:I,internal_bugs:C,incomplete:[],...H.length?{judged:H}:{},...S.length?{truncated:S}:{},...y.length?{engineWarnings:y}:{},...N?{unsettled:N}:{},...m.keepDetected?{detected:q}:{},summary:Nu(I)};if(m.review!==!1&&m.deepApiKey)try{U=await $M(U,m);}catch{}return U}finally{let{stopProvenance:k}=await Promise.resolve().then(()=>(Tr(),Qr));if(await k(p),b)await b.close();else {let{restoreInteractionState:R}=await Promise.resolve().then(()=>(Ko(),Xo));await R(p);}}}async function VM(l,c,g){let m=g.deepApiUrl||"https://api.webability.io",p=await fetch(`${m}/cli/deep-scan`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${g.deepApiKey}`},body:JSON.stringify({url:l,standardIssues:c.slice(0,30).map(({source:A,...x})=>x)})});return p.ok?((await p.json()).issues??[]).map((A,x)=>({id:`deep-${x}-${In(A.selector||A.element||"")}`,source:"deep-analysis",type:`wcag-${A.wcag}`,wcag:A.wcag,level:"AA",impact:A.severity==="High"?"critical":A.severity==="Medium"?"serious":"moderate",message:A.message,selector:A.selector||A.element||""})):[]}function Ev(l){let c=l.fix?.attribute??"";return !!l.fix?.needsManualReview&&c!=="style"&&!c.startsWith("data-")}async function $M(l,c){let g=c.deepApiUrl||"https://api.webability.io",m=l.issues.filter(Ev);if(m.length===0)return l;try{let p=await fetch(`${g}/review-findings`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${c.deepApiKey}`},body:JSON.stringify({url:l.url,issues:m.slice(0,30).map(({source:k,...R})=>R)})});if(!p.ok)return l;let b=await p.json();if(!b.confirmed_ids)return l;let A=new Set(b.confirmed_ids),x=l.issues.filter(k=>!Ev(k)||A.has(k.id));return {...l,issues:x,summary:Nu(x)}}catch{return l}}var kv=/token|nonce|key|sig|signature|auth|session|_wpnonce/i,jM=new Set(["stylesheet","font","image"]);function Yo(l){try{let c=new URL(l);return c.hash="",c.href}catch{return l}}function zM(l){try{for(let c of new URL(l).searchParams.keys())if(kv.test(c))return !0}catch{}return false}function Ju(l,c={}){let g=Yo(l);return m=>m.navigation&&m.mainFrame&&Yo(m.url)===g?"fulfill":/^(data|blob):/i.test(m.url)?"continue":jM.has(m.resourceType)||c.scripts&&m.resourceType==="script"?zM(m.url)?"abort":"continue":"abort"}function Zu(l){let c=Yo(l);return g=>g.navigation&&g.mainFrame&&Yo(g.url)===c?"fulfill":"continue"}var Qu=8e3;function Cv(l){let{ms:c,served:g}=l;return new Promise(m=>{let p=0,b=setTimeout(()=>m(p),c),A=new Promise(_=>{g&&(document.readyState==="complete"?_():window.addEventListener("load",()=>_(),{once:true}));}),k=Array.from(document.querySelectorAll('link[rel~="stylesheet" i]')).map(_=>_.sheet||!_.href?Promise.resolve():(p++,Promise.race([new Promise(w=>{_.addEventListener("load",()=>w(),{once:true}),_.addEventListener("error",()=>w(),{once:true});}),A]).then(()=>{p--;}))),R=()=>document.fonts?.ready??Promise.resolve();Promise.all(k).then(R).then(()=>{clearTimeout(b),m(0);});})}var Tv="[class*=slick],[class*=swiper],[class*=carousel],[class*=splide]";function Rv(l){let c={finished:0,held:0,skipped:0},g=new Set,m=[document],p=x=>{x.querySelectorAll("*").forEach(k=>{k.shadowRoot&&(m.push(k.shadowRoot),p(k.shadowRoot));});};p(document);for(let x of m){let k=typeof x.getAnimations=="function"?x.getAnimations():[];for(let R of k){if(g.has(R))continue;g.add(R);let _=R.effect,w=_?.target;if(w&&w.closest(l)){c.skipped++;continue}try{let S=_?.getComputedTiming(),y=typeof S?.duration=="number"?S.duration:0;S&&Number.isFinite(S.iterations)&&Number.isFinite(S.endTime)?(R.finish(),c.finished++):(R.currentTime=Math.max(0,(Number(S?.delay)||0)+y-.001),R.pause(),c.held++);}catch{}}}let b="*,*::before,*::after{transition:none!important;animation-play-state:paused!important}",A=document.createElement("style");A.setAttribute("data-wa-freeze",""),A.textContent=b,(document.head||document.documentElement).appendChild(A);for(let x of m){if(x===document)continue;let k=document.createElement("style");k.textContent=b,x.appendChild(k);}return c}function ec(l,c){return {evaluate:(g,...m)=>l.evaluate(g,...m),async addScriptTag(g){if(l.addScriptTag)return l.addScriptTag(g);if(typeof g.content=="string")return l.evaluate(g.content);throw new Error("this driver cannot load a script by URL")},url:()=>l.url?l.url():c,keyboard:l.keyboard,screenshot:g=>l.screenshot(g),...l.waitForLoadState?{waitForLoadState:(g,m)=>l.waitForLoadState(g,m)}:{},...l.playwrightPage?{axePage:()=>l.playwrightPage()}:{}}}async function Jo(l,c,g,m={}){let p=!!(g&&l.loadHtml),b=p?`wa-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`:"";if(p&&m.scripts)return Fv(l,`<!--${b}-->`+c.replace(/^\uFEFF/,""),g,b,m.policy);await l.goto("about:blank");let A=await l.evaluate(x=>{let k=new DOMParser().parseFromString(x.html,"text/html");if(k.querySelectorAll('script, meta[http-equiv="refresh" i]').forEach(R=>R.remove()),x.visitor&&(k.querySelectorAll("noscript").forEach(R=>R.remove()),k.querySelectorAll("*").forEach(R=>{let _=/^(iframe|frame|object|embed)$/i.test(R.localName);for(let w of Array.from(R.attributes)){let S=w.name.toLowerCase(),y=w.value.replace(/[\u0000-\u0020]/g,"").toLowerCase();S==="srcdoc"||_&&y.startsWith("data:")?R.removeAttributeNode(w):S.startsWith("on")?w.value=w.value?`/*${w.value.replace(/\*\//g,"* /")}*/`:"":y.startsWith("javascript:")&&(w.value="javascript:void(0)");}}),x.base&&k.querySelectorAll("base[href]").forEach(R=>{try{R.setAttribute("href",new URL(R.getAttribute("href")??"",x.base).href);}catch{R.remove();}})),x.serialize)return `<!--${x.marker}-->`+(k.doctype?`<!DOCTYPE ${k.doctype.name}>`:"")+k.documentElement.outerHTML;if(x.base&&!k.querySelector("base[href]")){let R=k.createElement("base");R.setAttribute("href",x.base),k.head.insertBefore(R,k.head.firstChild);}return document.replaceChild(document.adoptNode(k.documentElement),document.documentElement),""},{html:c,base:g,serialize:p,visitor:!!m.visitor,marker:b});return p?Fv(l,A,g,b,m.policy):{served:false}}async function Fv(l,c,g,m,p){let b=await l.loadHtml(c,g,p)||void 0;if(!await l.evaluate(x=>{for(let k of Array.from(document.childNodes))if(k.nodeType===8&&k.data===x)return k.remove(),true;return false},m).catch(()=>false))throw await b?.(),new Error("the html was not served at baseURL (another request handler answered the navigation)");return {served:true,release:b}}function GM(l){let c=l.route&&l.unroute?{on:l.route.bind(l),off:l.unroute.bind(l)}:null;return {goto:(m,p)=>l.goto(m,p),evaluate:((m,...p)=>l.evaluate(m,p[0])),screenshot:m=>l.screenshot(m),keyboard:{press:m=>l.keyboard.press(m)},url:()=>l.url(),...l.waitForLoadState?{waitForLoadState:(m,p)=>l.waitForLoadState(m,p)}:{},...l.addScriptTag?{addScriptTag:m=>l.addScriptTag(m)}:{},...typeof l.mainFrame=="function"?{playwrightPage:()=>l}:{},...l.setViewportSize?{setViewport:m=>l.setViewportSize(m)}:{},...c?{async loadHtml(m,p,b){let A=new URL(p);A.hash="";let x=b??Zu(A.href),k=()=>true,R=w=>{let S=w.request(),y=false;try{y=!S.frame().parentFrame();}catch{}let C=x({url:S.url(),resourceType:S.resourceType(),navigation:S.isNavigationRequest(),mainFrame:y}),F=C==="fulfill"?w.fulfill({status:200,contentType:"text/html; charset=utf-8",body:m}):C==="abort"?w.abort("blockedbyclient"):w.fallback();return Promise.resolve(F).catch(()=>{})};await c.on(k,R);let _=()=>c.off(k,R).catch(()=>{});try{await l.goto(A.href,{waitUntil:"domcontentloaded",timeout:3e4});}catch(w){throw await _(),w}return _}}:{}}}function UM(l,c={}){let g=c.interceptDocument&&l.setRequestInterception&&l.on&&l.off;return {goto:(m,p)=>l.goto(m,p),evaluate:((m,...p)=>l.evaluate(m,...p)),screenshot:m=>{let{animations:p,...b}=m??{};return l.screenshot(m?b:void 0)},keyboard:{press:m=>l.keyboard.press(m)},url:()=>l.url(),...l.waitForFunction?{async waitForLoadState(m,p){await l.waitForFunction(()=>document.readyState==="complete",p?.timeout!==void 0?{timeout:p.timeout}:{});}}:{},...l.addScriptTag?{addScriptTag:m=>l.addScriptTag(m)}:{},...l.setViewport?{setViewport:m=>l.setViewport(m)}:{},...g?{async loadHtml(m,p,b){let A=new URL(p);A.hash="";let x=b??Zu(A.href),k=_=>{if(_.isInterceptResolutionHandled?.())return;let w=_.frame?.(),S=x({url:_.url(),resourceType:_.resourceType(),navigation:_.isNavigationRequest(),mainFrame:!!w&&!w.parentFrame?.()}),y=S==="fulfill"?_.respond({status:200,contentType:"text/html; charset=utf-8",body:m},0):S==="abort"?_.abort("blockedbyclient",0):_.continue({},0);Promise.resolve(y).catch(()=>{});};await l.setRequestInterception(true),l.on("request",k);let R=async()=>{l.off("request",k),l.__keepRequestInterception||await l.setRequestInterception(false).catch(()=>{});};try{await l.goto(A.href,{waitUntil:"domcontentloaded",timeout:3e4});}catch(_){throw await R(),_}return R}}:{}}}function Iv(l){if(!l)return "/";try{return new URL(l).pathname||"/"}catch{return "/"}}var Lv=new Set(["button","link","menuitem","menuitemcheckbox","menuitemradio","tab","checkbox","radio","switch","option","combobox","textbox","searchbox","slider","spinbutton"]);function Pv(l,c){let g=(l||"").toLowerCase(),m=(c||"").toLowerCase();return g==="aria-hidden"&&m==="true"||g==="role"&&(m==="presentation"||m==="none")}var Mv='a[href],button,input,select,textarea,[tabindex]:not([tabindex="-1"]),[contenteditable="true"]';function WM(l,c){let g=(l.tagName||"").toLowerCase(),m=(l.getAttribute("role")||"").toLowerCase(),p=l.getAttribute("tabindex"),b=p!==null&&parseInt(p,10)>=0;if(g==="a"&&l.hasAttribute("href")||g==="button"||g==="input"||g==="select"||g==="textarea"||Lv.has(m)||b||l.isContentEditable===true)return true;try{if(l.querySelector(Mv)!==null)return !0}catch{return false}return c?[l,...Array.from(l.querySelectorAll?.("*")??[])].some(k=>c(k)&&(k.textContent||"").trim()!==""):false}async function tc(l,c,g){let m=c.map((A,x)=>Pv(A.attribute,A.fixValue)?x:-1).filter(A=>A>=0);if(!m.length)return c;let p=[];try{p=await l.evaluate(A=>{let{payload:x,roles:k,focusableSel:R}=A,_=k.reduce((C,F)=>(C[F]=1,C),{}),w=C=>{let F=getComputedStyle(C);if(F.display==="none"||F.visibility==="hidden")return !1;let P=C.getBoundingClientRect(),M=/rect\(\s*0(px)?[ ,]+0(px)?[ ,]+0(px)?[ ,]+0(px)?\s*\)/.test(F.clip)||/inset\(\s*50%/.test(F.clipPath),q=P.width<=1&&P.height<=1&&F.overflow==="hidden";return M||q},S=C=>{let F=C.tagName.toLowerCase(),P=(C.getAttribute("role")||"").toLowerCase(),M=C.getAttribute("tabindex"),q=M!==null&&parseInt(M,10)>=0;if(F==="a"&&C.hasAttribute("href")||F==="button"||F==="input"||F==="select"||F==="textarea"||_[P]===1||q||C.isContentEditable===!0)return !0;try{if(C.querySelector(R))return !0}catch{return !1}return [C,...Array.from(C.querySelectorAll("*"))].some(X=>w(X)&&(X.textContent||"").trim()!=="")},y=[];for(let C of x){let F;try{F=document.querySelectorAll(C.sel);}catch{continue}if(!F.length)continue;let P=!1;for(let M=0;M<F.length;M++)if(S(F[M])){P=!0;break}P&&y.push(C.i);}return y},{payload:m.map(A=>({i:A,sel:c[A].selector})),roles:[...Lv],focusableSel:Mv});}catch(A){g?.(A),p=m;}if(!p.length)return c;let b=new Set(p);return c.filter((A,x)=>!b.has(x))}var XM=new Set(["a","button","summary"]),KM=new Set(["button","link","menuitem","menuitemcheckbox","menuitemradio","tab","checkbox","radio","switch","option","treeitem","gridcell","searchbox","textbox","combobox","slider","spinbutton"]),YM=new Set(["checkbox","radio","switch","combobox","textbox","searchbox","slider","spinbutton"]),JM=new Set(["empty_link","missing_link_name","weak_link_name","new_window_link","external_link_warning","download_link_warning","placeholder_link","javascript_link","adjacent_redundant_link","adjacent_identical_links","image_text_adjacent_links","inconsistent_link_identification","link_consistency","skip_link","weak_skip_link","missing_skip_link","button_name","missing_button_name","empty_button","weak_button_name","unlabeled_button","label_in_name"]);function Ov(){let c=/[\p{L}\p{N}]/u,g=/^\p{L}$/u,m=/[\p{L}\p{N}\p{M}]/u,p=/[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Thai}\p{Script=Lao}\p{Script=Khmer}\p{Script=Myanmar}]/u;function b(w,S){if(S<=0)return "";let y=w.charCodeAt(S-1);return y>=56320&&y<=57343&&S>=2?w.slice(S-2,S):w.charAt(S-1)}function A(w,S){let y=w.codePointAt(S);return y===void 0?"":String.fromCodePoint(y)}function x(w,S){return !w||!m.test(w)||p.test(w)||p.test(S)}function k(w){return c.test(w)&&!g.test(w)}function R(w,S){let y=w.normalize("NFC").replace(/\s+/g," ").toLowerCase(),C=S.normalize("NFC").toLowerCase(),F=C.substring(0,40),P=C.length>=40,M=A(F,0),q=b(F,F.length),B=0;for(;;){let j=y.indexOf(F,B);if(j<0)return false;if(x(b(y,j),M)&&(P||x(A(y,j+F.length),q)))return true;B=j+1;}}function _(w){return (w||"").trim().replace(/\s+/g," ")}return {TEXT_PREFIX_LENGTH:40,HAS_NAME_CHARS:c,SINGLE_LETTER:g,WORD_CHAR:m,NO_WORD_BOUNDARY:p,codePointBefore:b,codePointAt:A,isBoundary:x,isLabelText:k,labelContainsText:R,normalizeVisibleText:_}}var rc=Ov(),Nv=rc.isLabelText,qv=rc.labelContainsText,Bv=rc.normalizeVisibleText,ZM=`var __waLin=(${Ov.toString()})();var TEXT_PREFIX_LENGTH=__waLin.TEXT_PREFIX_LENGTH;var HAS_NAME_CHARS=__waLin.HAS_NAME_CHARS;var SINGLE_LETTER=__waLin.SINGLE_LETTER;var WORD_CHAR=__waLin.WORD_CHAR;var NO_WORD_BOUNDARY=__waLin.NO_WORD_BOUNDARY;var codePointBefore=__waLin.codePointBefore;var codePointAt=__waLin.codePointAt;var isBoundary=__waLin.isBoundary;var isLabelText=__waLin.isLabelText;var labelContainsText=__waLin.labelContainsText;var normalizeVisibleText=__waLin.normalizeVisibleText;`;function li(l){return (l||"").toLowerCase().normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^\p{L}\p{N}]+/gu," ").trim()}function QM(l,c){let g=li(l),m=li(c);return m?g===m||g.startsWith(`${m} `)||g.endsWith(` ${m}`)||g.includes(` ${m} `):false}var eO=["text","currentText","urlText","visibleText","linkText"];function Hv(l){let c={tag:"",role:"",text:"",ariaLabel:""};if(!l||typeof l!="string")return c;try{let p=JSON.parse(l);if(p&&typeof p=="object"&&typeof p.original=="string")try{p=JSON.parse(p.original);}catch{}if(p&&typeof p=="object"){typeof p.tag=="string"&&(c.tag=p.tag.trim().toLowerCase());let b=typeof p.role=="string"?p.role:p.attrs&&typeof p.attrs.role=="string"?p.attrs.role:"";c.role=b.trim().toLowerCase();let A=p.attrs&&typeof p.attrs["aria-label"]=="string"&&p.attrs["aria-label"].trim()?p.attrs["aria-label"]:typeof p.currentAriaLabel=="string"?p.currentAriaLabel:"";c.ariaLabel=A.trim();for(let x of eO){let k=p[x];if(typeof k=="string"&&k.trim()){c.text=k;break}}return c}}catch{}let g=/(?:^|\|)\s*visible:\s*(.*?)\s*(?:\||$)/.exec(l);g&&(c.text=g[1]);let m=/(?:^|\|)\s*aria-label:\s*(.*?)\s*(?:\||$)/.exec(l);return m&&(c.ariaLabel=m[1]),c}function tO(l){if(!l||l.charCodeAt(0)!==123)return false;try{return JSON.parse(l).lin===0}catch{return false}}function rO(l,c){return l.role?KM.has(l.role):l.tag?XM.has(l.tag):!!c&&JM.has(c)}function nc(l){if((l.attribute||"").trim().toLowerCase()!=="aria-label")return {ok:true};if(typeof l.value!="string")return {ok:true};if(l.value.trim()==="")return {ok:true};if(tO(l.context))return {ok:false,reason:"label-in-name: violation recorded before the visible text was stripped"};let c=Hv(l.context);if(!rO(c,l.issueType))return {ok:true};if(l.issueType==="label_in_name"&&c.ariaLabel&&li(l.value)===li(c.ariaLabel))return {ok:false,reason:`label-in-name: value "${l.value}" is a no-op \u2014 it equals the current aria-label "${c.ariaLabel}"`};let g=Bv(c.text);return Nv(g)?qv(l.value,g)?{ok:true}:{ok:false,reason:`label-in-name: visible text "${g}" not contained in "${l.value}"`}:{ok:true}}function nO(l){let c=[],m=l.replace(/\[\s*([\w-]+)\s*(?:[~|^$*]?=\s*("([^"]*)"|'([^']*)'|([^\]\s]+)))?\s*[is]?\s*\]/g,(p,b,A,x,k,R)=>{let _=x??k??R;if(_&&/^(id|class)$/i.test(b))for(let w of _.split(/\s+/))w&&c.push(w);return " "}).replace(/::?[\w-]+(\([^)]*\))?/g," ");for(let p of m.matchAll(/[#.]([\w-]+)/g))c.push(p[1]);for(let p of m.matchAll(/(?:^|[\s>+~,])([a-zA-Z][\w-]*)/g))c.push(p[1]);return c}function Vv(l){let c=new RegExp(l,"i");return {test:g=>nO(g).some(m=>c.test(m))}}var $v=[{pattern:/\bintercom\b/i,category:"third-party",reason:"Intercom chat widget"},{pattern:/\bdrift[-_]/i,category:"third-party",reason:"Drift chat widget"},{pattern:/\bcrisp[-_]/i,category:"third-party",reason:"Crisp chat widget"},{pattern:/\btawk[-_]/i,category:"third-party",reason:"Tawk chat widget"},{pattern:/\bhubspot[-_]|hs[-_]messages/i,category:"third-party",reason:"HubSpot widget"},{pattern:/\bzendesk\b/i,category:"third-party",reason:"Zendesk widget"},{pattern:/\bfreshchat\b/i,category:"third-party",reason:"Freshchat widget"},{pattern:/\bgoog-gt\b|\bgoog-te\b/i,category:"third-party",reason:"Google Translate"},{pattern:/\brecaptcha\b|\bhcaptcha\b/i,category:"third-party",reason:"CAPTCHA widget"},{pattern:/\bwistia\b/i,category:"third-party",reason:"Wistia video player"},{pattern:/\bvimeo-player\b/i,category:"third-party",reason:"Vimeo player"},{pattern:/\bconsolto\b/i,category:"third-party",reason:"Consolto widget"},{pattern:/\basw[-_]/i,category:"overlay",reason:"WebAbility widget (legacy asw- namespace)"},{pattern:/webability[-_]widget|webability[-_]a11y/i,category:"overlay",reason:"WebAbility widget (current namespace)"},{pattern:/\bwp-ada-compliance\b/i,category:"overlay",reason:"WP ADA Compliance plugin UI"},{pattern:/\buserway\b/i,category:"overlay",reason:"UserWay overlay"},{pattern:/\bacsb[-_]/i,category:"overlay",reason:"accessiBe overlay"},{pattern:/\baudioeye\b|#ae_/i,category:"overlay",reason:"AudioEye overlay"},{pattern:/\bEquallyAI\b/i,category:"overlay",reason:"EquallyAI overlay"},{pattern:/#wpadminbar\b|#wp-admin-bar|\.adminbar/i,category:"admin",reason:"WordPress admin bar"},{pattern:/#adminbar-search\b/i,category:"admin",reason:"WordPress admin bar search"},{pattern:/#query-monitor/i,category:"admin",reason:"Query Monitor debug panel"},{pattern:/\.elementor-add-section/i,category:"admin",reason:"Elementor editor UI"},{pattern:/\.shopify-section-announcement/i,category:"admin",reason:"Shopify admin preview"},{pattern:/#mceu_\d|\.mce-|\.tox-/i,category:"admin",reason:"TinyMCE editor UI"},{pattern:/#et-vb-app-frame\b|#et-fb-app\b|\.et-fb-/i,category:"admin",reason:"Divi visual builder UI"},{pattern:Vv("speechify"),category:"extension",reason:"Speechify browser extension"},{pattern:Vv("grammarly"),category:"extension",reason:"Grammarly browser extension"},{pattern:/\bcmplz[-_]btn\b|\bcmplz[-_]link\b|\bcmplz[-_]manage\b|#cmplz[-_].*optin\b|#cmplz[-_].*optout\b/i,category:"consent",reason:"Complianz consent control"},{pattern:/\bonetrust\b/i,category:"consent",reason:"OneTrust consent"},{pattern:/\bcookiebot\b/i,category:"consent",reason:"Cookiebot consent"},{pattern:/\bcookieconsent\b|\bcc[-_]btn\b|\bcc[-_]dismiss\b/i,category:"consent",reason:"Cookie consent control"},{pattern:/\bborlabs[-_]cookie\b|\bbrlbs[-_]/i,category:"consent",reason:"Borlabs Cookie consent"},{pattern:/\bgdpr\b.*\bbtn\b|\bgdpr\b.*\bbutton\b/i,category:"consent",reason:"GDPR consent control"}];function jv(l){for(let{pattern:c,category:g,reason:m}of $v)if(c.test(l))return {protected:true,category:g,reason:m};return {protected:false}}var aO=new Set(["admin","overlay","extension"]);function zv(l){for(let{pattern:c,category:g,reason:m}of $v)if(aO.has(g)&&c.test(l))return {protected:true,category:g,reason:m};return {protected:false}}var iO=[/^#_[Rr]_[a-z0-9]+_(?:-[a-z-]+)?$/,/^#radix-(?:_[Rr]_[a-z0-9]+_|\\?:[Rr][0-9a-z]+\\?:)(?:-[a-z-]+)?$/,/^#headlessui-[a-z][a-z-]*-[0-9]+$/,/^#(?:radix|headlessui|mui)-[a-z0-9][a-z0-9-]*$/i,/^#\\?:[Rr][0-9a-z]+\\?:(?:-[a-z-]+)?$/,/^#«[Rr][0-9a-z]+»(?:-[a-z-]+)?$/,/^#(?:mantine|cdk|ng|swiper)-[a-z0-9-]+$/i,/^#[a-z0-9-]*[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f-]+(?:_\d+)?$/i];function oO(l){let c=l.match(/^#[a-z][a-z-]*-([0-9a-f]{6,}(?:-[0-9a-f]{4,})*)$/i);if(!c)return false;let g=c[1].replace(/-/g,"");if(g.length>=12)return true;let m=(g.match(/[a-f]/gi)||[]).length,p=/[0-9]/.test(g);return m>=2&&p}var sO=[/\[[a-zA-Z-]+[*^$|~]?=["']?(?:[^"'\]]*\s)?(?:radix-|headlessui-|mui-|mantine-|cdk-|ng-)/,/\[[a-zA-Z-]+[*^$|~]?=["']?(?:[^"'\]]*\s)?\\?:[Rr][0-9a-z]+\\?:/,/\[[a-zA-Z-]+[*^$|~]?=["']?(?:[^"'\]]*\s)?_[Rr]_[a-z0-9]+_/],lO=[/\.\w*-jss\d+\b/,/\.makeStyles-\w+-\d+\b/,/\.mui-[A-Za-z0-9]{6,}\b/,/\.css-[a-z0-9]{6,}\b/,/\.sc-(?:(?=[A-Za-z0-9]*[A-Z0-9])[A-Za-z0-9]{6,}\b|(?=[A-Za-z0-9]*[a-z])(?=[A-Za-z0-9]*[A-Z])[A-Za-z0-9]{5}(?![A-Za-z0-9-])|(?=[a-z]{0,3}[b-df-hj-np-tv-xz]{3})[a-z]{6}(?![A-Za-z0-9-]))/];function Gv(l){if(!l)return false;let c=l.split(/\s*[>+~]\s*|\s+/);for(let g of c){let m=g.indexOf("#");if(m===-1)continue;let p=g.slice(m);if(iO.some(b=>b.test(p))||uO(p.slice(1))||oO(p)||/\d{10,}/.test(p))return true}return !!(l.indexOf("[")!==-1&&sO.some(g=>g.test(l))||l.indexOf(".")!==-1&&lO.some(g=>g.test(l)))}function uO(l){for(var c=l.split(/[-_]+/),g=0;g<c.length;g++){var m=c[g];if(m.length>=12&&/^[0-9a-f]+$/i.test(m))return true;if(!(m.length<6||!/[0-9]/.test(m)||!/[a-z]/i.test(m))){var p=m.match(/[0-9]+|[a-z]+/gi);if(p&&p.length>=4&&p.join("")===m)return true}}return false}var Uv=new Set(["a","abbr","article","aside","audio","b","blockquote","br","button","canvas","caption","code","col","dd","details","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hr","i","iframe","img","input","label","legend","li","main","map","mark","nav","ol","option","p","pre","section","select","small","span","strong","sub","summary","sup","svg","table","tbody","td","textarea","tfoot","th","thead","time","tr","u","ul","video"]);function ac(l){let c=[],g=1,m=l.trim().toLowerCase();if(Uv.has(m))return {score:0,reasons:[`bare <${m}> selector matches all ${m} elements on page`]};if(m.match(/^([a-z][a-z0-9]*):(nth-of-type|nth-child)\(\d+\)$/i))return {score:.1,reasons:[`positional selector ${m} has no class/id anchor \u2014 breaks on any DOM change`]};if(Gv(l))return {score:0,reasons:[`${l.slice(0,60)} anchors on a framework-generated id (unstable across renders)`]};let b=/#[a-zA-Z]/.test(l),A=/\.[a-zA-Z]/.test(l),x=/\[data-/.test(l),k=/\[(aria-)[^=\]]*=["'][^"']{2,}["']|\[href[^=\]]*=["'][^"'#]{2,}["']|\[src[*$^]?=["'][^"']{2,}["']/.test(l);!b&&!A&&!x&&!k&&(g=.3,c.push("no class, id, data attribute, or semantic attribute anchor \u2014 fragile positional selector")),k&&!b&&!A&&!x&&(g=Math.max(g,.8)),b&&(g=Math.max(g,.9));let R=(l.match(/:nth-of-type|:nth-child/gi)||[]).length;R>=3&&(g=Math.min(g,.4),c.push(`${R}x positional selectors \u2014 very fragile`));let _=(l.match(/>/g)||[]).length;return _>=6&&(g=Math.min(g,.5),c.push(`${_}-level deep nesting \u2014 fragile`)),{score:g,reasons:c}}var cO=new Set(["aria-label","aria-labelledby","aria-describedby","aria-hidden","aria-live","aria-atomic","aria-required","aria-expanded","aria-controls","aria-current","aria-sort","aria-invalid","aria-level","aria-haspopup","aria-pressed","aria-checked","aria-selected","aria-valuemin","aria-valuemax","aria-valuenow","aria-valuetext","aria-orientation","aria-multiselectable","aria-readonly","aria-disabled","aria-errormessage","aria-modal","aria-placeholder","aria-roledescription","aria-colcount","aria-rowcount","aria-colindex","aria-rowindex","role","alt","title","lang","dir","tabindex","href","type","autocomplete","for","pattern","inputmode","controls","muted","id","name","scope","style","class","append","prepend","textContent","remove","remove_attribute"]);function dO(l){return !!(cO.has(l)||l.startsWith("data-")&&/^data-[a-z0-9-]{1,64}$/i.test(l))}var fO=new Set(["alert","alertdialog","application","article","banner","blockquote","button","caption","cell","checkbox","code","columnheader","combobox","complementary","contentinfo","definition","deletion","dialog","directory","document","emphasis","feed","figure","form","generic","grid","gridcell","group","heading","img","insertion","link","list","listbox","listitem","log","main","marquee","math","menu","menubar","menuitem","menuitemcheckbox","menuitemradio","meter","navigation","none","note","option","paragraph","presentation","progressbar","radio","radiogroup","region","row","rowgroup","rowheader","scrollbar","search","searchbox","separator","slider","spinbutton","status","strong","subscript","superscript","switch","tab","table","tablist","tabpanel","term","textbox","time","timer","toolbar","tooltip","tree","treegrid","treeitem"]),pO=/(?:^|[\s>+~,])(?:body|html)(?:[#.:\[][^\s>+~,]*)*\s*$/i;function mO(l){return l?l.split(",").some(c=>pO.test(c.trim())):false}function Zv(l){if(typeof l!="string"||l.trim()==="")return {ok:false,reason:"empty role value"};let c=l.split(" ");for(let g of c){if(g==="")return {ok:false,reason:`role "${l}" has malformed whitespace`};if(g!==g.toLowerCase())return {ok:false,reason:`role "${g}" must be lowercase (ARIA roles are case-sensitive)`};if(!fO.has(g))return {ok:false,reason:`"${g}" is not a valid ARIA role`}}return {ok:true}}var gO=new Set(["off","on","name","honorific-prefix","given-name","additional-name","family-name","honorific-suffix","nickname","organization-title","username","new-password","current-password","one-time-code","organization","street-address","address-line1","address-line2","address-line3","address-level4","address-level3","address-level2","address-level1","country","country-name","postal-code","cc-name","cc-given-name","cc-additional-name","cc-family-name","cc-number","cc-exp","cc-exp-month","cc-exp-year","cc-csc","cc-type","transaction-currency","transaction-amount","language","bday","bday-day","bday-month","bday-year","sex","url","photo","tel","tel-country-code","tel-national","tel-area-code","tel-local","tel-local-prefix","tel-local-suffix","tel-extension","impp","email","webauthn"]),Qv=/^\s*html\s*$/i;function ic(l,c){return typeof l=="string"&&Qv.test(l)&&(c??"").trim()==="lang"}function hO(l){return typeof l!="string"||l===""?{ok:false,reason:"empty <html lang> is report-only, not a fix"}:ta(l)!==l?{ok:false,reason:`<html lang> must be a primary language tag, got "${l.slice(0,20)}"`}:{ok:true}}function vO(l,c,g="full"){return ic(l,c)?{ok:true}:sc(l,g)}var bO=[{re:/^\s*\*\s*$/,reason:"universal selector (*) blanks every element"},{re:Qv,reason:"<html> root \u2014 belongs in global settings, not a fix"},{re:/javascript:/i,reason:"javascript: scheme inside selector"},{re:/<script/i,reason:"script tag inside selector"}],yO=new Set("not is where has nth-child nth-last-child nth-of-type nth-last-of-type first-child last-child only-child first-of-type last-of-type only-of-type empty root scope hover active focus focus-within focus-visible visited link any-link local-link target target-within checked indeterminate default disabled enabled required optional valid invalid user-valid user-invalid in-range out-of-range read-only read-write placeholder-shown autofill lang dir host host-context defined open closed modal popover-open fullscreen picture-in-picture playing paused muted seeking buffering stalled volume-locked past future current blank state has-slotted nth-col nth-last-col left right first before after first-line first-letter placeholder selection marker backdrop part slotted cue cue-region file-selector-button highlight spelling-error grammar-error target-text view-transition view-transition-group view-transition-image-pair view-transition-old view-transition-new".split(" ")),Wv=new Set(["child","parent","sibling","adjacent","descendant","column-combinator"]),wO=/^-?[_a-z\u00A0-\uFFFF][\w\-\u00A0-\uFFFF]*$/i,xO=/^\s*(even|odd|[+-]?\d*n(\s*[+-]\s*\d+)?|[+-]?\d+)\s*$/i;function oc(l,c=false){for(let g of l){if(!g.length||Wv.has(g[g.length-1].type)||!c&&Wv.has(g[0].type))return false;for(let m of g){if(m.type==="column-combinator"||m.type==="tag"&&!wO.test(m.name))return false;if(m.type!=="pseudo"&&m.type!=="pseudo-element")continue;let p=m.name.toLowerCase();if(!yO.has(p))return false;if(m.type==="pseudo-element"){if(m.data==="")return false;continue}if(p.startsWith("nth-")&&(typeof m.data!="string"||!AO(m.data))||Array.isArray(m.data)&&!oc(m.data,p==="has"))return false}}return true}function AO(l){let c=/^([\s\S]*?)(?:\s+of\s+(\S[\s\S]*))?$/i.exec(l);if(!c||!xO.test(c[1]))return false;if(c[2]===void 0)return true;try{return oc(cssWhat.parse(c[2]))}catch{return false}}function eb(l){let c=l.replace(/\\[\s\S]/g,"x").replace(/"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'/g,'""');for(let g=0;g<4;g++)c=c.replace(/\((?:[^()]|\(\))*\)/g,"()");if(/[()]/.test(c.replace(/\(\)/g,""))||/[^\w\-#.[\]=*^$|~:()>+,\s"\u00A0-\uFFFF]/.test(c))return false;for(let g of c.matchAll(/\[[^\]]*?[*^$|~]?=([^\]]*)\]/g)){let m=g[1].trim();if(!/^(""|-?[_a-z\u00A0-\uFFFF][\w\-\u00A0-\uFFFF]*)(\s+[is])?$/i.test(m))return false}try{return oc(cssWhat.parse(l))}catch{return false}}function sc(l,c="full"){if(!l||typeof l!="string")return {ok:false,reason:"empty selector"};if(l.length>2e3)return {ok:false,reason:"selector too long (>2000 chars)"};for(let{re:p,reason:b}of bO)if(p.test(l))return {ok:false,reason:b};if(!eb(l))return {ok:false,reason:"selector does not parse (unescaped class/id character or unknown pseudo)"};let g=ac(l);if(g.score<=.1)return {ok:false,reason:g.reasons[0]||"selector too broad"};let m=c==="dead-region"?zv(l):jv(l);return m.protected?{ok:false,reason:`protected element: ${m.reason}`}:{ok:true}}function tb(l){return !l||typeof l!="string"?{ok:false,reason:"empty attribute"}:l.length>64?{ok:false,reason:"attribute name too long"}:/^on[a-z]/i.test(l)?{ok:false,reason:`event handler attribute "${l}" not permitted`}:dO(l)?{ok:true}:{ok:false,reason:`attribute "${l}" not in allowlist`}}var rb=[{re:/<script/i,reason:"<script> tag in value"},{re:/<iframe/i,reason:"<iframe> tag in value"},{re:/<object/i,reason:"<object> tag in value"},{re:/<embed/i,reason:"<embed> tag in value"},{re:/javascript:/i,reason:"javascript: URL in value"},{re:/data:text\/html/i,reason:"data:text/html URL in value"},{re:/\bon[a-z]+\s*=/i,reason:"inline event handler in value"}];function lc(l,c){if(typeof l!="string")return {ok:false,reason:"value not a string"};if(l.length>500)return {ok:false,reason:"value too long (>500 chars)"};for(let{re:g,reason:m}of rb)if(g.test(l))return {ok:false,reason:m};if(c==="aria-label"||c==="alt"){if(l==="")return {ok:true};if(/<[a-z][a-z0-9]*[\s>]/i.test(l))return {ok:false,reason:"HTML tag in label \u2014 screen reader will read markup"};if(/^https?:\/\//i.test(l))return {ok:false,reason:"URL as label"};if(/^www\./i.test(l))return {ok:false,reason:"URL as label"};if(/mailto:/i.test(l))return {ok:false,reason:"mailto: in label \u2014 use readable text"};if(/^Visit tel:/i.test(l))return {ok:false,reason:"raw tel: URI in label \u2014 use readable text"};if(l.length>80)return {ok:false,reason:"label too long (>80 chars) \u2014 keep concise for screen readers"};if(/^[^a-zA-Z]*$/.test(l))return {ok:false,reason:"label has no letters"};if(/\.(png|jpg|jpeg|svg|gif|webp|ico|bmp)$/i.test(l))return {ok:false,reason:"filename as label"};if(/^Field\[/i.test(l))return {ok:false,reason:"form field index as label"};if(/^(Checkbox field|Radio field|Id|Img )$/i.test(l))return {ok:false,reason:"generic field type as label"};if(/\s\s[WX]$/.test(l))return {ok:false,reason:"filename dimension suffix in label"};if(/^(Go to|Visit) [?#]/.test(l))return {ok:false,reason:"query string / hash fragment as label"};if(/^(Go to|Visit) \d+\.\d+/.test(l))return {ok:false,reason:"IP address as label"};if(/^visit \(opens/i.test(l))return {ok:false,reason:"no destination in label"};if(new Set(["search","close","home","menu","previous","submit","next","back","details","view all","learn more","yes","no","show more","ok","go","open","more","here","click","link","button","icon","image"]).has(l.toLowerCase()))return {ok:false,reason:"vague single-word label"}}if(c==="role"){let g=Zv(l);if(!g.ok)return g}if(c==="tabindex"&&l!=="-1"&&l!=="0")return {ok:false,reason:`tabindex="${l}" \u2014 only -1 or 0 allowed`};if(c==="aria-hidden"&&l!=="true")return {ok:false,reason:`aria-hidden="${l}" \u2014 must be "true"`};if(c==="href"&&l==="")return {ok:false,reason:"empty href makes link navigate to current page"};if(c==="autocomplete"){let m=l.trim().toLowerCase().split(/\s+/),p=m[m.length-1];if(!gO.has(p))return {ok:false,reason:`"${p}" is not a valid HTML autocomplete token (HTML Living Standard)`}}return {ok:true}}var _O=new Set(["track","legend","caption","a","span","source","style"]);function DO(l){if(typeof l!="string")return {ok:false,reason:"value not a string"};if(l.length>2e3)return {ok:false,reason:"HTML value too long (>2000 chars)"};for(let{re:g,reason:m}of rb)if(g.test(l))return {ok:false,reason:m};let c=l.match(/<\/?([a-z][a-z0-9]*)\b/gi)||[];for(let g of c){let m=g.replace(/<\/?/,"").toLowerCase();if(!_O.has(m))return {ok:false,reason:`tag <${m}> not in allowlist`}}return {ok:true}}var Xv=new Set(["href","src","action","method","type","name","value","for"]),EO=new Set(["aria-hidden","tabindex","style","class","aria-live","muted"]);function nb(l){return l.attribute==="remove_attribute"?Xv.has(l.value)?{tier:"destructive",reason:`removing ${l.value} breaks functionality`}:{tier:"modifier",reason:`removing ${l.value} requires review`}:Xv.has(l.attribute)&&l.value===""?{tier:"destructive",reason:`emptying ${l.attribute} breaks functionality`}:EO.has(l.attribute)?{tier:"modifier",reason:`${l.attribute} changes element visibility/interactivity`}:l.attribute==="prepend"||l.attribute==="append"||l.attribute==="textContent"?{tier:"modifier",reason:`${l.attribute} modifies page content`}:{tier:"additive",reason:"adds missing accessibility attribute"}}var Kv=300,Yv=8;function SO(l){if(l.length>Kv)return `selector_too_deep: ${l.length} chars (> ${Kv})`;let c=(l.match(/:nth-(of-type|child)\(/g)||[]).length;return c>Yv?`selector_too_deep: ${c} positional steps (> ${Yv})`:null}var kO=/^meta\[name=(["'])viewport\1\]$/;function CO(l,c){if(!kO.test(l.trim()))return {ok:false,reason:'attribute "content" is allowed only on meta[name="viewport"]'};let g=String(c).toLowerCase();if(/user-scalable\s*=\s*(no|0)\b/.test(g))return {ok:false,reason:"viewport content still blocks zoom (user-scalable=no)"};let m=g.match(/maximum-scale\s*=\s*([\d.]+)/);return m&&parseFloat(m[1])<2?{ok:false,reason:`viewport content still limits zoom (maximum-scale=${m[1]})`}:lc(c,"content")}function Zo(l,c="full"){if(ic(l.selector,l.attribute))return hO(l.value);let g=sc(l.selector,c);if(!g.ok)return g;let m=SO(l.selector);if(m)return {ok:false,reason:m};if(l.attribute==="content")return CO(l.selector,l.value);let p=tb(l.attribute);if(!p.ok)return p;if(l.attribute==="role"&&mO(l.selector))return {ok:false,reason:"role on <body>/<html> is ignored by assistive technology"};let b=nb(l);if(b.tier==="destructive")return {ok:false,reason:b.reason};if(l.attribute==="append"||l.attribute==="prepend")return DO(l.value);let A=lc(l.value,l.attribute);if(!A.ok)return A;let x=nc(l);return x.ok?{ok:true}:x}var TO=["button","link","checkbox","radio","switch","tab","menuitem"],RO={aria_hidden_focusable:{sc:"4.1.2",level:"A",writes:{tabindex:["-1"]}},missing_button_role:{sc:"4.1.2",level:"A",writes:{role:["button"],tabindex:["0"]}},javascript_link:{sc:"4.1.2",level:"A",writes:{role:["button"]}},placeholder_link:{sc:"4.1.2",level:"A",writes:{role:["button"]}},missing_semantic_role:{sc:"4.1.2",level:"A",writes:{role:TO}},missing_label:{sc:"4.1.2",level:"A",writes:{title:"*","aria-label":"*"}},unlabeled_button:{sc:"4.1.2",level:"A",writes:{"aria-label":"*"}},main_content_hidden:{sc:"4.1.2",level:"A",writes:{"aria-hidden":["false"]}},keyboard_trap:{sc:"2.1.1",level:"A",writes:{tabindex:["0"]}},scrollable_not_focusable:{sc:"2.1.1",level:"A",writes:{tabindex:["0"]}},focus_order_disruption:{sc:"2.4.3",level:"A",writes:{tabindex:["0"]}},missing_alt:{sc:"1.1.1",level:"A",writes:{alt:"*"}},svg_missing_name:{sc:"1.1.1",level:"A",writes:{"aria-label":"*"}},decorative_icon:{sc:"1.1.1",level:"A",writes:{"aria-hidden":["true"]}},empty_link:{sc:"2.4.4",level:"A",writes:{"aria-label":"*"}},missing_fieldset_legend:{sc:"1.3.1",level:"A",writes:{role:["group","radiogroup"]}},missing_table_header:{sc:"1.3.1",level:"A",writes:{role:["columnheader","presentation"]}},missing_table_scope:{sc:"1.3.1",level:"A",writes:{scope:["col","row","colgroup","rowgroup"]}},listitem:{sc:"1.3.1",level:"A",writes:{role:["list","none"]}},list:{sc:"1.3.1",level:"A",writes:{role:["none"]}},"aria-required-parent":{sc:"1.3.1",level:"A",writes:{role:["none","menu","tablist","listbox","tree","list","radiogroup"]}},"aria-required-children":{sc:"1.3.1",level:"A",writes:{role:["none"]}},missing_document_language:{sc:"3.1.1",level:"A",writes:{lang:"*"}},unsafe_autoplay:{sc:"1.4.2",level:"A",writes:{muted:"*"}},identify_input_purpose:{sc:"1.3.5",level:"AA",writes:{autocomplete:"*"}},missing_autocomplete:{sc:"1.3.5",level:"AA",writes:{autocomplete:"*"}},aria_live:{sc:"4.1.3",level:"AA",writes:{"aria-live":["polite","assertive"]}},zoom_restriction:{sc:"1.4.4",level:"AA",writes:{content:"*"}},target_too_small:{sc:"2.5.8",level:"AA",writes:{style:["min-width:24px;min-height:24px;"]}}},FO={missing_landmark:"landmarks are a best practice, not an A/AA criterion",nested_landmark:"landmarks are a best practice, not an A/AA criterion",duplicate_id:"4.1.1 Parsing is obsolete in WCAG 2.2",missing_button_type:"a button without type fails no A/AA criterion",empty_heading:"empty headings are a best practice, not an A/AA criterion",adjacent_redundant_link:"adjacent duplicate links fail no A/AA criterion"};function uc(l,c="AA"){if(c==="AAA")return {ok:true,sc:""};let g=FO[l.issueType];if(g)return {ok:false,reason:`${l.issueType}: ${g}`};let m=RO[l.issueType];if(!m)return {ok:false,reason:`${l.issueType}: no WCAG 2.2 ${c} criterion this fix remedies`};if(c==="A"&&m.level!=="A")return {ok:false,reason:`${l.issueType}: ${m.sc} is level ${m.level}, above level A`};let p=m.writes[l.attribute.toLowerCase()];return p?p!=="*"&&!p.includes(l.value.trim().toLowerCase())?{ok:false,reason:`${l.issueType}: ${l.attribute}="${l.value}" does not remedy ${m.sc}`}:{ok:true,sc:m.sc}:{ok:false,reason:`${l.issueType}: writing ${l.attribute} does not remedy ${m.sc}`}}async function ab(l,c){if(!c.length)return [];try{return await l.evaluate(IO,c)}catch(g){return c.map(()=>`never-harm check could not run: ${g.message}`)}}function IO(l){let c=["list"],g={ul:c,ol:c,menu:c,li:["listitem"],dl:["list"],dt:["term","listitem"],dd:["definition","listitem"],table:["table","grid","treegrid","presentation","none"],thead:["rowgroup"],tbody:["rowgroup"],tfoot:["rowgroup"],tr:["row"],th:["columnheader","rowheader","cell"],td:["cell","gridcell","columnheader","rowheader"],caption:["caption"],h1:["heading"],h2:["heading"],h3:["heading"],h4:["heading"],h5:["heading"],h6:["heading"],button:["button"],input:[],select:[],textarea:[],option:["option"],label:[],fieldset:["group","radiogroup"],img:["img","presentation","none"],iframe:[],video:[],audio:[],summary:[],nav:["navigation"],main:["main"],form:["form","search"],dialog:["dialog","alertdialog"]},m={menu:["menuitem","menuitemcheckbox","menuitemradio"],menubar:["menuitem","menuitemcheckbox","menuitemradio"],tablist:["tab"],listbox:["option"],tree:["treeitem"],radiogroup:["radio"]},p=["button","link","checkbox","radio","switch","tab","menuitem","menuitemcheckbox","menuitemradio","option","combobox","textbox","searchbox","slider","spinbutton","treeitem","gridcell","scrollbar"],b='a[href],area[href],button,input:not([type=hidden]),select,textarea,summary,iframe,[contenteditable=""],[contenteditable="true"],audio[controls],video[controls],[tabindex]:not([tabindex="-1"])',A=N=>(N||"").trim().toLowerCase().split(/\s+/)[0]||"",x=new Map,k=l.map(()=>null),R=l.map(N=>{try{return Array.from(document.querySelectorAll(N.sel))}catch{return []}}),_=(N,U,Y)=>{let Z=N.tagName.toLowerCase(),z=A(U);if(Z==="a"&&N.hasAttribute("href"))return z==="link"?null:`role="${z}" would override the native <a href> link`;let ie=g[Z];if(!ie||ie.includes(z))return null;if(Z==="li"&&(z==="none"||z==="presentation")){let se=N.parentElement,fe=m[A(se?.getAttribute("role")??null)];if(fe&&Array.from(N.querySelectorAll("[role]")).some(me=>fe.includes(A(me.getAttribute("role")))))return null}return (Z==="ul"||Z==="ol")&&(z==="none"||z==="presentation")&&!N.querySelector("li")?null:`role="${z}" would override the native <${Z}> semantics`},w=N=>{let U=N.tagName.toLowerCase();if((U==="a"||U==="area")&&N.hasAttribute("href")||["button","select","textarea","summary","iframe"].includes(U)||U==="input"&&(N.getAttribute("type")||"").toLowerCase()!=="hidden"||(U==="audio"||U==="video")&&N.hasAttribute("controls")||N.isContentEditable)return true;let Y=x.get(N)??A(N.getAttribute("role"));return p.includes(Y)},S=N=>{let U=N.closest("[role=dialog],[role=alertdialog],dialog,[role=menu],[role=menubar],[role=listbox]");return !U||U.closest('[aria-hidden="true"],[hidden]')||!U.getClientRects().length||getComputedStyle(U).visibility==="hidden"?null:U},y=N=>{if(N.closest("[hidden],[inert]")||!N.getClientRects().length)return false;let U=getComputedStyle(N).visibility;return U!=="hidden"&&U!=="collapse"},C=N=>{let U=N.href;return N.tagName.toLowerCase()!=="a"||!U?false:Array.from(document.querySelectorAll("a[href]")).some(Y=>Y!==N&&Y.href===U&&Y.tabIndex>=0&&y(Y))},F=N=>{let U=getComputedStyle(N),Y=/auto|scroll/.test(U.overflowY)&&N.scrollHeight>N.clientHeight+1;return /auto|scroll/.test(U.overflowX)&&N.scrollWidth>N.clientWidth+1||Y},P=(N,U,Y)=>{let Z=parseInt(U,10),z=S(N);return z?`tabindex change inside an open ${z.getAttribute("role")||z.tagName.toLowerCase()} (dialog/menu focus is the widget's own)`:Z<0?!(N.matches(b)||w(N))||!y(N)||C(N)?null:`tabindex="${U}" on a rendered interactive <${N.tagName.toLowerCase()}>: it stays visible and clickable but leaves the keyboard order`:!(Z>=0)||w(N)?null:Y==="scrollable_not_focusable"?F(N)?N.querySelector(b)?"scroll container already holds a focusable descendant":null:"tabindex>=0 on a container that does not scroll":`tabindex="${U}" on a non-interactive <${N.tagName.toLowerCase()}>`},M=N=>" "+N.replace(/([a-z])([A-Z])/g,"$1 $2").toLowerCase().replace(/[^a-z0-9]+/g," ").trim()+" ",q=[["email",/ e ?mail /],["tel",/ (phone|telephone|tel|mobile|cell) /],["given-name",/ (first ?name|fname|given ?name|forename) /],["family-name",/ (last ?name|lname|surname|family ?name) /],["username",/ (user ?name|login|user ?id) /],["street-address",/ (street|address|addr|address ?line ?1?|address1) /],["postal-code",/ (zip|zip ?code|postal|post ?code|postcode) /],["country",/ country /],["cc",/ (card ?number|cc ?num(ber)?|credit ?card|cvv|cvc|csc|expiry|expiration) /],["other",/ (company|organi[sz]ation|business|city|town|state|province|birthday|birth|website|url|title|job) /]],B=N=>{let U=N.trim().toLowerCase().split(/\s+/).pop()||"";return U==="email"?"email":U.startsWith("tel")?"tel":U==="country"||U==="country-name"?"country":U.startsWith("cc-")?"cc":U==="address-line1"?"street-address":["given-name","family-name","name","street-address","postal-code","username","current-password","new-password"].includes(U)?U:""},j=N=>{let U=[];for(let Z of Array.from(N.labels??[]))U.push(Z.textContent||"");let Y=N.getAttribute("aria-label");Y&&U.push(Y);for(let Z of (N.getAttribute("aria-labelledby")||"").split(/\s+/).filter(Boolean))U.push(document.getElementById(Z)?.textContent||"");return U},X=(N,U)=>{let Y=B(U);if(!Y)return `autocomplete="${U}" is outside the unambiguous token set`;let Z=(N.getAttribute("type")||"").toLowerCase(),z=[N.getAttribute("name")||"",N.getAttribute("id")||"",N.getAttribute("placeholder")||"",...j(N)].map(M),ie=z.join(" ");if(Z==="search"||/ (search|query|keyword|keywords) /.test(ie)||/ (q|s) /.test(M(N.getAttribute("name")||""))||N.closest("[role=search]"))return "autocomplete in a search field";if(Z==="password"){let fe=N.form??N.closest("form"),me=fe?M(["id","class","name","action"].map(ht=>fe.getAttribute(ht)||"").join(" ")):" ",Se=!/ (current|old|existing) /.test(ie)&&(/ (new|confirm(ation)?|verify|create|register|signup|sign up|repeat|re ?type|again|change|reset) /.test(ie)||/ (new|register|signup|sign up|create|change|reset) /.test(me))?"new-password":"current-password";return Y===Se?null:`autocomplete="${U}" on a password field that reads as ${Se}`}let se=new Set;Z==="email"&&se.add("email"),Z==="tel"&&se.add("tel");for(let fe of z){for(let[Pe,ve]of q)ve.test(fe)&&se.add(Pe);let me=fe.replace(/ (first ?name|last ?name|given ?name|family ?name|user ?name|fname|lname) /g," ");/ name /.test(me)&&se.add(/^ ((full|your) )?name $/.test(me.replace(/\s+/g," "))?"name":"other");}return se.size!==1||!se.has(Y)?`autocomplete="${U}": the field names ${se.size?[...se].join(" + "):"no purpose"}, not exactly one`:null},T=N=>!!(N||"").trim(),v=N=>(N.getAttribute("aria-labelledby")||"").trim().split(/\s+/).filter(Boolean).map(U=>document.getElementById(U)?.textContent||"").join(" "),E=N=>T(N.getAttribute("aria-label"))||T(v(N))||T(N.getAttribute("title")),I=N=>{let U=N.tagName.toLowerCase(),Y=A(N.getAttribute("role"));if(Y==="presentation"||Y==="none")return "none";if(U==="img")return N.hasAttribute("alt")?T(N.getAttribute("alt"))||E(N)?"named":"none":E(N)?"named":"unnamed";if(U==="svg"){let Z=Array.from(N.children).some(z=>z.tagName.toLowerCase()==="title"&&T(z.textContent));return E(N)||Z?"named":"unnamed"}return Y==="img"?E(N)?"named":"unnamed":"none"},H=N=>{let U="",Y=Z=>{for(let z of Array.from(Z.childNodes))z.nodeType===3?U+=z.textContent||"":z.nodeType===1&&!["svg","script","style","template"].includes(z.tagName.toLowerCase())&&Y(z);};return Y(N),U.trim()},V=N=>{let U="decorative aria-hidden: no 1.1.1 evidence (not an image exposed without a name)",Y=I(N);if(Y==="unnamed")return null;if(Y==="named")return "decorative aria-hidden: the image has a name (would hide a named image)";if(H(N))return U;let Z=Array.from(N.querySelectorAll('img, svg, [role~="img"]')).filter(ie=>!ie.parentElement?.closest("svg"));if(!Z.length)return U;let z=Z.map(I);return z.includes("named")?"decorative aria-hidden: the holder contains a named image":z.includes("unnamed")?null:U},G=l.map((N,U)=>U).sort((N,U)=>+(l[U].attr==="role")-+(l[N].attr==="role"));for(let N of G){let U=l[N],Y=R[N];if(!Y.length)continue;let Z=U.attr.toLowerCase();for(let z of Y){let ie=null;if(Z==="role"?ie=_(z,U.val,U.issueType):Z==="tabindex"?ie=P(z,U.val,U.issueType):Z==="autocomplete"?ie=X(z,U.val):U.issueType==="decorative_icon"&&Z==="aria-hidden"&&(ie=V(z)),ie){k[N]=ie;break}}if(Z==="role"&&!k[N])for(let z of Y)x.set(z,A(U.val));}return k}var ib=["wcag2a","wcag2aa","wcag21a","wcag21aa","wcag22aa"];async function LO(l){if(await l.evaluate(()=>typeof window.axe?.run=="function"))return;let g=await Promise.resolve().then(()=>Ig(Hu())),m=g.source??g.default?.source;if(!m)throw new Error("axe-core source unavailable");try{await l.evaluate(m);}catch{let{inject:p}=await Promise.resolve().then(()=>(Tr(),Qr));await p(l,{tool:"axe",content:m});}}async function ob(l){try{return await LO(l),await l.evaluate(async c=>{let g=window,m=await g.axe.run(document,{runOnly:{type:"tag",values:c},rules:{"color-contrast":{enabled:!1}},resultTypes:["violations"],elementRef:!0,iframes:!1}),p=new Map;for(let b of m.violations){let A=p.get(b.id)??new Set;p.set(b.id,A);for(let x of b.nodes)x.element&&A.add(x.element);}g.__waFixVerify={pre:p};},ib),{ok:!0}}catch(c){return {ok:false,error:c.message}}}async function sb(l,c,g={}){let m=Date.now(),p=b=>({results:c.map(()=>({status:"not_verifiable",reason:b})),axeRuns:0,ms:Date.now()-m,error:b});if(!c.length)return {results:[],axeRuns:0,ms:0};try{let b=await l.evaluate(PO,{fixes:c.map(A=>({sel:A.sel,attr:A.attr,val:A.val})),tags:ib,maxRuns:g.maxAxeRuns??40});return b.error?p(b.error):{results:b.results,axeRuns:b.runs,ms:Date.now()-m}}catch(b){return p(`verify: ${b.message}`)}}async function PO(l){let{fixes:c,tags:g,maxRuns:m}=l,p=window,b=p.__waFixVerify;if(!b?.pre)return {error:"no pre-fix axe run on this page",results:[],runs:0};if(typeof p.axe?.run!="function")return {error:"axe-core is not loaded",results:[],runs:0};let A=["remove_attribute","prepend","append","textcontent","innerhtml","thead"],x=c.map(j=>{let X=[];try{X=Array.from(document.querySelectorAll(j.sel));}catch{}return {attr:j.attr,val:j.val,els:X,ok:X.length>0&&/^[a-z][a-z0-9_.:-]*$/i.test(j.attr)&&!A.includes(j.attr.toLowerCase())}}),k=x.map(j=>j.ok?"pending":"not_verifiable"),R=x.map(j=>j.ok?void 0:j.els.length?`"${j.attr}" is not an attribute write the verifier can apply`:"selector matches no element"),_=x.map(()=>new Set),w=new Map,S=()=>{for(let[j,X]of w)for(let[T,v]of X)v===null?j.removeAttribute(T):j.setAttribute(T,v);},y=j=>{S();for(let X of j)for(let T of x[X].els){let v=w.get(T);v||w.set(T,v=new Map),v.has(x[X].attr)||v.set(x[X].attr,T.getAttribute(x[X].attr));try{T.setAttribute(x[X].attr,x[X].val);}catch{k[X]="not_verifiable",R[X]=`attribute "${x[X].attr}" cannot be written`;}}},C=0,F=new Map,P=async j=>{C++;let X=await p.axe.run(j,{runOnly:{type:"tag",values:g},rules:{"color-contrast":{enabled:false}},resultTypes:["violations"],elementRef:true,iframes:false}),T=[];for(let v of X.violations)for(let E of v.nodes)E.element&&!b.pre.get(v.id)?.has(E.element)&&!F.get(v.id)?.has(E.element)&&T.push({rule:v.id,el:E.element});return T},M=(j,X)=>x[j].els.some(T=>T===X||T.contains(X)||X.contains(T)),q=()=>k.map((j,X)=>j==="pending"?X:-1).filter(j=>j>=0),B=(j,X,T)=>{k[j]="rejected_regression";for(let v of X)_[j].add(v.rule);T&&(R[j]=T);};try{let j=q();y(j);let X=await P(document);if(X.length){y([]);let T=await P(document);for(let v of T){let E=F.get(v.rule)??new Set;F.set(v.rule,E),E.add(v.el);}if(T.length){X=X.filter(v=>!F.get(v.rule)?.has(v.el));for(let v of j){let E=Array.from(new Set(T.filter(I=>M(v,I.el)).map(I=>I.rule)));E.length&&(k[v]="not_verifiable",R[v]=`baseline not clean: ${E.join(", ")} fails on this element with no fix applied`);}}}if(X.length){let T=q(),v=T.filter(V=>X.some(G=>M(V,G.el))),E=T.filter(V=>!v.includes(V));for(let V of v){let G=X.filter(Y=>M(V,Y.el));if(C>=m){B(V,G,"verify budget exhausted while the fix was under suspicion");continue}y([...E,V]);let N=Array.from(new Set([...G.map(Y=>Y.el),...x[V].els])),U=(await P({include:N})).filter(Y=>M(V,Y.el));U.length&&B(V,U);}let I=q();y(I);let H=await P(document);if(H.length){let V=async N=>{if(C>=m)throw new Error("budget");return y(N),P(document)},G=async(N,U)=>{let Y=await V([...U,...N]);if(!Y.length)return [];if(N.length===1)return B(N[0],Y),N;let Z=N.length>>1,z=N.slice(0,Z),ie=await G(z,U),se=await G(N.slice(Z),[...U,...z.filter(fe=>!ie.includes(fe))]);return [...ie,...se]};try{await G(I,[]);}catch{let N=H.some(U=>!I.some(Y=>M(Y,U.el)));I=q();for(let U of I)(N||H.some(Y=>M(U,Y.el)))&&B(U,H.filter(Y=>M(U,Y.el)),"verify budget exhausted before the regression was isolated");}}}for(let T of q())k[T]="verified";}finally{S();}return {runs:C,results:k.map((j,X)=>({status:j,..._[X].size?{newViolations:Array.from(_[X])}:{},...R[X]?{reason:R[X]}:{}}))}}var MO=new Set(["correct_needed","correct_unneeded","wrong_value","harmful","unclear"]),lb=(l,c)=>({sel:l.sel,attr:l.attr,val:l.val,issueType:l.issueType,verdict:c.verdict,apply:c.apply,...c.suggestedValue!==void 0?{suggestedValue:c.suggestedValue}:{},reason:c.reason}),cc=(l,c)=>lb(l,{verdict:"unclear",apply:false,reason:c});function OO(l){if(!l||typeof l!="object")return null;let c=l;if(typeof c.index!="number"||!Number.isInteger(c.index)||typeof c.verdict!="string"||!MO.has(c.verdict))return null;let g=c.verdict;return {index:c.index,verdict:g,apply:c.apply===true&&g==="correct_needed",...typeof c.suggestedValue=="string"?{suggestedValue:c.suggestedValue}:{},reason:typeof c.reason=="string"?c.reason.replace(/\s+/g," ").slice(0,200):""}}async function ub(l,c){let g=[],m=[],p=null;for(let b=0;b<l.length;b+=20){let A=l.slice(b,b+20);if(p){g.push(...A.map(R=>cc(R,`fix judge unavailable (${p})`)));continue}let x=new AbortController,k=setTimeout(()=>x.abort(),c.timeoutMs??16e4);try{let R=await Promise.race([c.transport({url:c.url,...c.viewport?{viewport:c.viewport}:{},fixes:A.map(w=>({issue_type:w.issueType,selector:w.sel,attr:w.attr,value:w.val}))},x.signal),new Promise((w,S)=>x.signal.addEventListener("abort",()=>S(new Error("timeout"))))]),_=new Map;for(let w of Array.isArray(R?.verdicts)?R.verdicts:[]){let S=OO(w);S&&S.index>=0&&S.index<A.length&&_.set(S.index,_.has(S.index)?null:S);}A.forEach((w,S)=>{let y=_.get(S);g.push(y?lb(w,y):cc(w,"the judge returned no verdict for this fix"));});}catch(R){p=x.signal.aborted?"timeout":(R?.message||"error").slice(0,120),m.push(`fix judge: ${p}; ${l.length-b} fixes left unjudged`),g.push(...A.map(_=>cc(_,`fix judge unavailable (${p})`)));}finally{clearTimeout(k);}}return {judged:g,errors:m}}Iu();async function cb(l){return await l.evaluate(()=>typeof window.uniqueSel=="function")||await l.evaluate(`(0,eval)(${JSON.stringify(`if(typeof __name==='undefined'){var __name=function(t){return t}}
406
457
  `+Fu)})`),l.evaluate(NO,null)}function NO(){let l=window,c=l.__waFixVerify?.pre;if(!c)return [];let g={menu:["menuitem","menuitemcheckbox","menuitemradio"],menubar:["menuitem","menuitemcheckbox","menuitemradio"],tablist:["tab"],listbox:["option"],tree:["treeitem"],radiogroup:["radio"]},m={menuitem:"menu",menuitemcheckbox:"menu",menuitemradio:"menu",tab:"tablist",option:"listbox",treeitem:"tree",listitem:"list"},p=["navigation","presentation","none","region","group","banner","contentinfo","complementary","main","generic","directory","document","section"],b=y=>(y&&y.getAttribute("role")||"").trim().toLowerCase().split(/\s+/)[0]||"",A=y=>!!y&&/^(UL|OL|MENU)$/.test(y.tagName),x=y=>!!y&&/^(DIV|SPAN)$/.test(y.tagName)&&!y.hasAttribute("role"),k=[],R=new Set,_=(y,C,F,P)=>{R.has(y)||(R.add(y),k.push({sel:l.uniqueSel(y),attr:"role",val:C,issueType:F,wcag:"1.3.1",evidence:`${P} | ${(y.outerHTML||"").slice(0,200)}`}));},w=(y,C)=>{if(y.tagName!=="LI"||y.hasAttribute("role"))return false;let F=y.parentElement,P=g[b(F)];return !P||!A(F)||!Array.from(y.querySelectorAll("[role]")).some(M=>P.includes(b(M)))?false:(_(y,"none",C,`li inside role="${b(F)}" holds its ${P[0]}: role="none" makes the item a direct child of the widget`),true)},S=y=>Array.from(c.get(y)??[]).filter(C=>C.isConnected);for(let y of S("listitem")){let C=y.parentElement;if(C)if(A(C)){let F=b(C);g[F]?w(y,"listitem"):p.includes(F)&&_(C,"list","listitem",`role="${F}" on a <${C.tagName.toLowerCase()}> stripped its list semantics`);}else x(C)&&Array.from(C.children).every(F=>F.tagName==="LI")&&_(C,"list","listitem","li items whose parent is a generic container");}for(let y of S("aria-required-parent")){let C=b(y),F=m[C];if(!F)continue;let P=y.parentElement;P&&(P.tagName==="LI"&&w(P,"aria-required-parent")||x(P)&&Array.from(P.children).every(M=>b(M)===C)&&_(P,F,"aria-required-parent",`every child carries role="${C}" and the container has no role`));}for(let y of S("aria-required-children"))if(!(!g[b(y)]||!A(y)))for(let C of Array.from(y.children))w(C,"aria-required-children");for(let y of S("list"))!A(y)||y.hasAttribute("role")||y.querySelector("li")||Array.from(y.children).every(C=>C.tagName==="BR")&&_(y,"none","list",`<${y.tagName.toLowerCase()}> holds text, no list items`);return k}var qO="min-width:24px;min-height:24px;";var dc="target_too_small";async function db(l,c,g={}){if(!c.length)return [];try{return await l.evaluate(BO,{selectors:c,style:qO,budgetMs:g.budgetMs??5e3})}catch(m){return c.map(()=>({ok:false,reason:"eval_error",detail:m.message}))}}async function BO(l){let p=/^(IMG|SVG|VIDEO|CANVAS|INPUT|SELECT|TEXTAREA|IFRAME|OBJECT|EMBED|METER|PROGRESS)$/,b='a[href],button,input:not([type=hidden]),select,textarea,summary,[tabindex]:not([tabindex^="-"]),[role=button],[role=link],[role=checkbox],[role=radio],[role=menuitem],[role=tab],[role=switch],[onclick]',A=M=>{let q=M.getBoundingClientRect();return {l:q.left+window.scrollX,t:q.top+window.scrollY,w:q.width,h:q.height}},k=[],R=performance.now()+l.budgetMs,_=Array.from(document.querySelectorAll("*")),w=Array.from(document.querySelectorAll(b)),S=null,y=null,C=[],F=new Map,P=M=>{let q=F.get(M)??null;q===null?M.removeAttribute("style"):M.setAttribute("style",q);};try{for(let M of l.selectors){if(performance.now()>=R){k.push({ok:!1,reason:"budget_exhausted"});continue}let q=[];try{q=Array.from(document.querySelectorAll(M));}catch{k.push({ok:!1,reason:"selector_not_unique"});continue}if(q.length!==1){k.push({ok:!1,reason:"selector_not_unique"});continue}let B=q[0];if((B.getAttribute("style")??"").trim()!==""){k.push({ok:!1,reason:"inline_style"});continue}F.set(B,B.getAttribute("style"));let X=getComputedStyle(B).display,T=B.tagName.toUpperCase(),v=A(B);if(v.w>=24-.01&&v.h>=24-.01){k.push({ok:!1,reason:"not_undersized"});continue}if(_.length>6e3){k.push({ok:!1,reason:"page_too_large"});continue}let E=X==="inline"&&!p.test(T);if(X==="none"||X==="contents"||E){k.push({ok:!1,reason:"unsafe_to_grow",detail:"inline box: min-size does nothing"});continue}let I=S??=_.map(A),H=y??=w.map(N=>A(N)),V=[document.documentElement.scrollWidth,document.documentElement.scrollHeight],G=null;try{B.setAttribute("style",l.style),B.offsetWidth;let N=A(B),U=[document.documentElement.scrollWidth,document.documentElement.scrollHeight],Y="";if(N.w<24-.5||N.h<24-.5)Y="box_not_grown";else {let Z=Math.abs(U[0]-V[0])>1||Math.abs(U[1]-V[1])>1;for(let z=0;z<_.length&&!Z;z++){let ie=_[z];if(ie===B||B.contains(ie))continue;let se=A(ie),fe=I[z];(Math.abs(se.l-fe.l)>1||Math.abs(se.t-fe.t)>1||Math.abs(se.w-fe.w)>1||Math.abs(se.h-fe.h)>1)&&(Z=!0);}if(Z)Y="layout_shift";else {let z=!1;for(let ie=0;ie<w.length;ie++){let se=w[ie];if(se===B||B.contains(se)||se.contains(B))continue;let fe=H[ie];if(fe.w<=0||fe.h<=0)continue;let me=Math.min(N.l+N.w,fe.l+fe.w)-Math.max(N.l,fe.l),Pe=Math.min(N.t+N.h,fe.t+fe.h)-Math.max(N.t,fe.t),ve=Math.min(v.l+v.w,fe.l+fe.w)-Math.max(v.l,fe.l),Se=Math.min(v.t+v.h,fe.t+fe.h)-Math.max(v.t,fe.t),ht=me>.5&&Pe>.5,Dt=ve>.5&&Se>.5;if(ht&&(!Dt||me-ve>.5||Pe-Se>.5)){z=!0;break}}z?Y="overlaps_target":G={ok:!0,style:l.style,before:{w:v.w,h:v.h},after:{w:N.w,h:N.h}};}}G||(G={ok:!1,reason:"unsafe_to_grow",detail:Y});}finally{G?.ok||P(B);}G.ok&&(C.push(B),S=null,y=null),k.push(G);}if(C.length){let M=window,q=null;if(typeof M.axe?.run=="function")try{let B=await M.axe.run(document,{runOnly:{type:"rule",values:["target-size"]},resultTypes:["violations"],elementRef:!0,iframes:!1});q=new Set;for(let j of B.violations)for(let X of j.nodes)X.element&&q.add(X.element);}catch{q=null;}for(let B=0,j=0;B<k.length;B++){if(!k[B].ok)continue;let T=C[j++];(q===null||q.has(T))&&(k[B]={ok:!1,reason:"still_fails_axe",detail:q===null?"axe unavailable to confirm":"axe target-size still fails with the style applied"});}}}finally{for(let M of C)P(M);}return k}async function HO(l){let c={};try{return await VO(l,c)}finally{await c.release?.().catch(()=>{});}}async function VO(l,c){let{page:g,input:m}=l,p=l.opts??{},b=Date.now(),A=typeof m.html=="string",x=A&&typeof m.baseURL=="string",k=!A&&m.loaded===true,R=m.url??m.baseURL,_=R??"about:blank",w=Iv(R),S=[],y={engineVersion:aa,input:x?"html":A?"snapshot":k?"loaded":"url",ms:0,deterministic:{issues:0,bySource:{},engineWarnings:[]},fixes:{candidates:0,structuralCandidates:0,emitted:0,rejectedByValidator:0,rejectedByGate:0,rejectedByHidingGuard:0,rejectedBySelector:0,rejectedByDuplicate:0,rejectedByEmptyValue:0,rejectedByNeverHarm:0,rejectedByVerify:0,targetSizeSkipped:{},rejected:[]},verify:{ran:false,skipped:"no fixes",structural:0,verified:0,rejected:0,notVerifiable:0,axeRuns:0,ms:0},agent:{ran:false,skipped:l.model?"no agent stage in this engine yet (rubric agent pending); the injected model was not called":"no model injected"},io:{dbRows:0,r2Gets:0,r2Puts:0,kvOps:0},errors:[],warnings:[]},C=z=>(y.ms=Date.now()-b,{url:_,...z,findings:z.findings??[],internal_bugs:S,stats:y}),F;try{if(x){let z=m.scripts===!0;if(m.viewport&&(g.setViewport?await g.setViewport(m.viewport):y.warnings.push("Page.setViewport absent: input.viewport was not applied")),!g.loadHtml)return y.input="html-blank",y.errors.push("load: Page.loadHtml absent: visitor html is not loaded or scanned with no request policy (iframes, media and token-keyed URLs would go out)"),C({issues:[],incomplete:[],fixes:[]});let ie=await Jo(g,m.html,m.baseURL,{scripts:z,visitor:!z,policy:Ju(m.baseURL,{scripts:z})});c.release=ie.release;let se=await g.evaluate(Cv,{ms:Qu,served:ie.served});se>0&&y.warnings.push(`${se} stylesheet(s) still loading after ${Qu} ms; scanned without them`),await g.evaluate(Rv,Tv).catch(fe=>y.warnings.push(`animations not finished: ${fe.message}`));}else if(A)await Jo(g,m.html,R).then(z=>c.release=z.release);else if(!k){let z=await g.goto(_,{waitUntil:"domcontentloaded",timeout:3e4});typeof z?.status=="function"&&(F=z.status());}}catch(z){return y.errors.push(`load: ${z.message}`),C({issues:[],incomplete:[],fixes:[]})}A&&!x&&!(R&&g.loadHtml)&&y.warnings.push("Page.loadHtml absent (or no input.url): the snapshot document is about:blank, so checks that compare links with location (same-page links, current-page wayfinding) see about:blank"),g.waitForLoadState||y.warnings.push("Page.waitForLoadState absent: render settle does not wait for the load event; late iframes, media and images may be scanned before they load");let P;try{let z=p.scan??{};P=await Sv(ec(g,_),{level:p.level??"AA",includeAxe:!0,dismissModals:z.dismissModals??!1,keepDetected:!0,...p.includeBestPractice?{experimental:!0}:{},...z.rootSelector?{rootSelector:z.rootSelector}:{},...z.judge?{judge:z.judge}:{},...z.wcagTags?.length?{wcagTags:z.wcagTags}:{},...z.settle===!1?{settle:!1}:{},...(p.mainStatus??F)!==void 0?{mainStatus:p.mainStatus??F}:{}});}catch(z){return S.push({tool:"engine:scan",kind:"finding-dropped",detail:`scan() threw, every finding dropped: ${z.stack?.slice(0,1e3)??z.message}`}),C({issues:[],incomplete:[],fixes:[]})}if(S.push(...P.internal_bugs??[]),P.blocked)return {...C({issues:[],incomplete:[],fixes:[]}),blocked:P.blocked};let M=[...P.issues];y.deterministic.issues=M.length;for(let z of M)y.deterministic.bySource[z.source]=(y.deterministic.bySource[z.source]??0)+1;y.deterministic.engineWarnings=P.engineWarnings??[];let q=[];for(let z of M){let ie=z.fix;if(!(z.source!=="webability"||!ie||ie.needsManualReview||typeof ie.suggestedValue!="string")){if(y.fixes.candidates++,ie.suggestedValue===""&&ie.attribute!=="alt"){y.fixes.rejectedByEmptyValue++,y.fixes.rejected.push({sel:z.selector,attr:ie.attribute,why:"empty_value"});continue}q.push({selector:z.selector,attribute:ie.attribute,fixValue:ie.suggestedValue,issue:z});}}let B=[];{let z=new Set,ie=M.filter(se=>se.source==="axe-core"&&se.type==="target-size"&&!z.has(se.selector)&&!!z.add(se.selector));if(ie.length){let se=await db(g,ie.map(me=>me.selector)),fe={};ie.forEach((me,Pe)=>{let ve=se[Pe];if(!ve?.ok){let Se=ve?.ok===false?ve.detail||ve.reason:"eval_error";fe[Se]=(fe[Se]??0)+1;return}y.fixes.candidates++,q.push({selector:me.selector,attribute:"style",fixValue:ve.style,issue:{...me,type:dc}}),B.push({id:me.id,selector:me.selector,attribute:"style",currentValue:"",issueType:dc,wcag:me.wcag,context:me.message,needsAI:false,fixValue:ve.style,...me.html?{outerHtml:me.html.slice(0,fb)}:{},needsReview:false});}),y.fixes.targetSizeSkipped=fe;}}let j=q.filter(z=>{let ie=Zo({selector:z.selector,attribute:z.attribute,value:z.fixValue,issueType:z.issue.type});return ie.ok||(y.fixes.rejectedByValidator++,y.fixes.rejected.push({sel:z.selector,attr:z.attribute,why:`validator: ${ie.reason}`})),ie.ok}),X=p.level??"AA",T=j.filter(z=>{let ie=uc({issueType:String(z.issue.type),attribute:z.attribute,value:z.fixValue},X);return ie.ok||(y.fixes.rejectedByGate++,y.fixes.rejected.push({sel:z.selector,attr:z.attribute,why:`aa gate: ${ie.reason}`})),ie.ok}),v=new Set,E=T.filter(z=>{let ie=`${z.selector}|${z.attribute.toLowerCase()}`;return v.has(ie)?(y.fixes.rejectedByDuplicate++,y.fixes.rejected.push({sel:z.selector,attr:z.attribute,why:"duplicate_candidate"}),false):(v.add(ie),true)}),I=await tc(g,E,z=>y.errors.push(`hiding guard: ${z.message}; hiding fixes withheld`));for(let z of E)I.includes(z)||(y.fixes.rejectedByHidingGuard++,y.fixes.rejected.push({sel:z.selector,attr:z.attribute,why:"hiding guard: target is or contains a control or screen-reader-only text"}));let H;try{H=await g.evaluate(z=>z.map(ie=>{try{return document.querySelectorAll(ie).length}catch{return -1}}),I.map(z=>z.selector));}catch(z){y.errors.push(`fix selector check: ${z.message}; ${I.length} fixes withheld`);}let V=[];I.forEach((z,ie)=>{let se=H?.[ie];if(se===void 0||se<1){y.fixes.rejectedBySelector++,y.fixes.rejected.push({sel:z.selector,attr:z.attribute,why:H?se!==void 0&&se<0?"selector_unmatched: does not parse":"selector_unmatched":"selector_unmatched: selector check failed"}),H&&S.push({tool:"engine:fixes",kind:"finding-dropped",detail:`${z.issue.type}: ${se!==void 0&&se<0?"fix selector does not parse in the page":"fix selector matches no element on the page it was produced on"}`,selector:z.selector});return}V.push({sel:z.selector,originalSel:z.selector,attr:z.attribute,val:z.fixValue,mode:"attr",p:w,issueType:String(z.issue.type),wcag:z.issue.wcag,evidence:`${z.issue.message}${z.issue.html?` | ${z.issue.html.slice(0,300)}`:""}`,engineVersion:aa});});let G=await $O(g,V,{level:X,p:w,verify:p.verify!==false,maxAxeRuns:p.verifyMaxAxeRuns},y);y.fixes.emitted=G.length;let N;if(p.fixJudge&&G.length){let z=A?void 0:g.url?.()||R;if(!z||!/^https?:\/\//i.test(z))y.warnings.push(A?"fixJudge skipped: the judge loads the live URL and this run scanned html/snapshot input":"fixJudge skipped: the page has no http(s) URL");else {let ie=await ub(G,{url:z,transport:p.fixJudge.transport,viewport:p.fixJudge.viewport,timeoutMs:p.fixJudge.timeoutMs});N=ie.judged,y.errors.push(...ie.errors);}}let U=jO(M,P.detected??[]),Y=[...U,...B],Z=M.filter(z=>z.source==="webability").length-U.length;return Z>0&&y.errors.push(`findings: ${Z} WebAbility issues have no detector record; their findings are absent`),C({issues:M,incomplete:P.incomplete??[],fixes:G,findings:Y,...N?{judgedFixes:N}:{},...P.judged?.length?{judged:P.judged}:{}})}async function $O(l,c,g,m){let p=m.verify,b=c,A=false;if(g.verify){let w=await ob(l);if(A=w.ok,!w.ok)p.error=`pre-fix axe run failed: ${w.error}`,m.errors.push(`verify: ${p.error}; fixes emitted not_verifiable, no structural fixes`);else try{let S=new Set(c.map(y=>`${y.sel}|${y.attr}`));for(let y of await cb(l)){m.fixes.candidates++,m.fixes.structuralCandidates++;let C=Zo({selector:y.sel,attribute:y.attr,value:y.val,issueType:y.issueType}).ok?uc({issueType:y.issueType,attribute:y.attr,value:y.val},g.level).ok?S.has(`${y.sel}|${y.attr}`)?"another fix writes this attribute":"":"aa gate":"validator";if(C){C==="validator"?m.fixes.rejectedByValidator++:C==="aa gate"?m.fixes.rejectedByGate++:m.fixes.rejectedByDuplicate++,m.fixes.rejected.push({sel:y.sel,attr:y.attr,why:`structural ${y.issueType}: ${C}`});continue}S.add(`${y.sel}|${y.attr}`),p.structural++,b=[...b,{sel:y.sel,originalSel:y.sel,attr:y.attr,val:y.val,mode:"attr",p:g.p,issueType:y.issueType,wcag:y.wcag,evidence:y.evidence,engineVersion:aa}];}}catch(S){m.errors.push(`structural fixers: ${S.message}`);}}if(!b.length)return [];let x=await ab(l,b.map(w=>({sel:w.sel,attr:w.attr,val:w.val,issueType:w.issueType}))),k=b.filter((w,S)=>x[S]?(m.fixes.rejectedByNeverHarm++,m.fixes.rejected.push({sel:w.sel,attr:w.attr,why:`never-harm: ${x[S]}`}),false):true);if(!g.verify)return p.skipped="opts.verify is false",k;if(!A)return p.skipped=p.error,p.notVerifiable=k.length,k.map(w=>({...w,verification:"not_verifiable"}));delete p.skipped,p.ran=true;let R=await sb(l,k,{maxAxeRuns:g.maxAxeRuns});p.axeRuns=R.axeRuns+1,p.ms=R.ms,R.error&&(p.error=R.error,m.errors.push(`verify: ${R.error}; fixes emitted not_verifiable`));let _=[];return k.forEach((w,S)=>{let y=R.results[S];if(y.status==="rejected_regression"){p.rejected++,m.fixes.rejectedByVerify++,m.fixes.rejected.push({sel:w.sel,attr:w.attr,why:`verify: ${y.newViolations?.length?`new axe ${y.newViolations.join(", ")}`:"regression"}${y.reason?` (${y.reason})`:""}`});return}y.status==="verified"?p.verified++:p.notVerifiable++,_.push({...w,verification:y.status});}),_}var fb=300;function jO(l,c){let g=new Map;for(let p of c){let b=`wa-${p.issueType}-${In(p.selector)}`;g.has(b)||g.set(b,p);}let m=[];for(let p of l){if(p.source!=="webability")continue;let b=g.get(p.id);b&&m.push({id:p.id,selector:p.selector,attribute:b.attribute,currentValue:b.currentValue??"",issueType:String(p.type),wcag:p.wcag,context:b.context??"",needsAI:!!b.needsAI,...typeof b.fixValue=="string"?{fixValue:b.fixValue}:{},...b.imageSrc?{imageSrc:b.imageSrc}:{},...b.outerHtml?{outerHtml:b.outerHtml.slice(0,fb)}:{},needsReview:!!(b.needsReview||b.manualFix),...b.reviewReason?{reviewReason:b.reviewReason}:{},...b.pseudo?{pseudo:b.pseudo}:{}});}return m}var zO=["sel","attr","val","mode","p"];var GO=200;function UO(l){let c=/^(SCRIPT|STYLE|NOSCRIPT|TEMPLATE|HEAD|META|LINK|TITLE|SVG|CANVAS)$/,g=C=>{let F=[];for(let P=C;P&&P!==document.documentElement;P=P.parentElement){if(P.id&&document.querySelectorAll("#"+CSS.escape(P.id)).length===1){F.unshift("#"+CSS.escape(P.id));break}let M=P.parentElement?Array.from(P.parentElement.children).filter(q=>q.tagName===P.tagName):[P];F.unshift(P.tagName.toLowerCase()+(M.length>1?":nth-of-type("+(M.indexOf(P)+1)+")":""));}return F.join(" > ")},m=C=>{let F=C.match(/rgba?\(([^)]+)\)/);if(!F)return null;let P=F[1].split(/[ ,/]+/).filter(Boolean).map(Number);return [P[0],P[1],P[2],P.length>3?P[3]:1]},p=(C,F,P)=>{let M=q=>(q/=255,q<=.03928?q/12.92:Math.pow((q+.055)/1.055,2.4));return .2126*M(C)+.7152*M(F)+.0722*M(P)},b=C=>{let F=getComputedStyle(C),P=[];return F.display==="none"&&P.push("display"),(F.visibility==="hidden"||F.visibility==="collapse")&&P.push("visibility"),parseFloat(F.opacity)<.05&&P.push("opacity"),P},A=C=>{for(let F=C;F&&F!==document.documentElement;F=F.parentElement){let P=getComputedStyle(F).transform;if(P&&P!=="none")return true}return false},x=C=>Array.from(C.childNodes).some(F=>F.nodeType===3&&/[\p{L}\p{N}]/u.test(F.textContent||"")),k=C=>{let F=C.getBoundingClientRect();if(F.width<1||F.height<1)return "zero-size";let P=window.scrollX;if(F.right+P<=0||F.left+P>=document.documentElement.scrollWidth)return "offscreen";for(let M=C.parentElement;M&&M!==document.body&&M!==document.documentElement;M=M.parentElement){let q=getComputedStyle(M);if(q.overflowX!=="visible"||q.overflowY!=="visible"){let B=M.getBoundingClientRect();if(B.width>=1&&(F.right<=B.left||F.left>=B.right||F.bottom<=B.top||F.top>=B.bottom))return "overflow-clip"}}return null},R=C=>{let F=getComputedStyle(C),P=F.webkitTextFillColor,M=m(P&&!/rgba\(0, 0, 0, 0\)|transparent/.test(P)?P:F.color),q=parseFloat(F.fontSize||"16"),B=parseInt(F.fontWeight||"400",10),j=q>=24||q>=18.66&&B>=700?3:4.5,X=M?`rgb(${M[0]}, ${M[1]}, ${M[2]})`:null,T=[],v="plain";for(let N=C;N;N=N.parentElement){let U=getComputedStyle(N),Y=U.backgroundImage;if(Y&&Y!=="none"){v=/gradient\(/i.test(Y)&&!/url\(/i.test(Y)?"gradient":"image";break}let Z=m(U.backgroundColor);if(Z&&Z[3]>0&&(T.push(Z),Z[3]>=1))break}if(v==="plain"){let N=C.parentElement;e:for(let U=0;N&&U<4&&N!==document.body;U++,N=N.parentElement)for(let Y of Array.from(N.children).slice(0,30)){if(Y===C||Y.contains(C)||C.contains(Y)||(Y.textContent||"").trim())continue;let Z=getComputedStyle(Y).backgroundImage;if(/^(IMG|PICTURE|VIDEO|CANVAS)$/.test(Y.tagName)||Z&&Z!=="none"){v="sibling-layer";break e}}}if(v!=="plain"||!M)return {bg:null,kind:M?v:"unknown",ratio:null,fg:X,threshold:j};let E=[255,255,255];for(let N=T.length-1;N>=0;N--){let[U,Y,Z,z]=T[N];E=[U*z+E[0]*(1-z),Y*z+E[1]*(1-z),Z*z+E[2]*(1-z)];}let I=M[3],H=[M[0]*I+E[0]*(1-I),M[1]*I+E[1]*(1-I),M[2]*I+E[2]*(1-I)],V=p(H[0],H[1],H[2]),G=p(E[0],E[1],E[2]);return {bg:`rgb(${Math.round(E[0])}, ${Math.round(E[1])}, ${Math.round(E[2])})`,kind:v,ratio:Math.round((Math.max(V,G)+.05)/(Math.min(V,G)+.05)*100)/100,fg:X,threshold:j}},_=new Map,w=new Map;for(let C of Array.from(document.body?document.body.querySelectorAll("*"):[])){if(c.test(C.tagName.toUpperCase())||!x(C))continue;let F=null,P=[];for(let B=C;B&&B!==document.documentElement;B=B.parentElement){let j=b(B);if(j.length){F=B;for(let X of j)P.push({kind:X,el:B});}}if(!F){let B=k(C);if(!B)continue;F=C,P.push({kind:B,el:C});}let M=_.get(F)??[];M.push(C),_.set(F,M);let q=w.get(F)??[];for(let B of P)q.some(j=>j.el===B.el&&j.kind===B.kind)||q.push(B);w.set(F,q);}let S="button,a[href],[role=button],[role=tab],[role=link],[role=menuitem],[role=switch],summary,input,select,[tabindex]",y=[];for(let[C,F]of Array.from(_.entries()).slice(0,l.max)){let P=[],M=new Set,q=C.parentElement;for(let B=1;q&&B<=5&&q!==document.body&&P.length<l.maxNearby;B++,q=q.parentElement){let X=[...q.matches(S)?[q]:[],...Array.from(q.querySelectorAll(S))];for(let T of X){if(P.length>=l.maxNearby)break;if(M.has(T)||C.contains(T))continue;let v=T.getBoundingClientRect();if(v.width<1||v.height<1)continue;M.add(T);let E=T.tagName==="A"?(T.getAttribute("href")||"").trim():"",I="none";if(T.tagName==="A")if(!E)I="none";else if(E.startsWith("#"))I="hash";else if(/^javascript:/i.test(E))I="javascript";else try{let H=new URL(E,location.href);I=H.origin===location.origin&&H.pathname===location.pathname?"same-page":"external";}catch{I="external";}P.push({selector:g(T),tag:T.tagName.toLowerCase(),role:T.getAttribute("role"),name:(T.getAttribute("aria-label")||T.textContent||"").trim().replace(/\s+/g," ").slice(0,60),hrefKind:I,inForm:!!T.closest("form"),expanded:T.getAttribute("aria-expanded"),selected:T.getAttribute("aria-selected"),current:T.getAttribute("aria-current"),pressed:T.getAttribute("aria-pressed"),distance:B,relation:T.contains(C)?"ancestor":"in-ancestor"});}}y.push({root:g(C),hiddenBy:(w.get(C)??[]).map(B=>({kind:B.kind,selector:g(B.el),...B.kind==="offscreen"||B.kind==="overflow-clip"?{transformed:A(B.el)}:{}})),ariaHidden:!!C.closest('[aria-hidden="true"]'),inert:!!C.closest("[inert]"),texts:F.slice(0,l.maxTexts).map(B=>{let j=R(B),X=B.getBoundingClientRect();return {selector:g(B),text:(B.textContent||"").trim().replace(/\s+/g," ").slice(0,60),fg:j.fg,bg:j.bg,backdropKind:j.kind,staticRatio:j.ratio,threshold:j.threshold,rect:X.width>=1&&X.height>=1?{x:Math.round(X.left+window.scrollX),y:Math.round(X.top+window.scrollY),w:Math.round(X.width),h:Math.round(X.height)}:null}}),interactiveNearby:P});}return {found:_.size,groups:y}}async function WO(l,c={}){let g=c.max??200;await l.evaluate("if(typeof globalThis.__name==='undefined'){globalThis.__name=function(t){return t}}");let m=await l.evaluate(UO,{max:g,maxTexts:12,maxNearby:12}),p=m.groups.map((b,A)=>({id:A,...b}));return {candidates:p,found:m.found,...m.found>p.length?{truncated:{found:m.found,kept:p.length,cap:g}}:{}}}/*! Bundled license information:
407
458
 
408
459
  axe-core/axe.js: