@webability/core 1.17.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/dom.cjs +70 -19
- package/dist/dom.js +70 -19
- package/dist/engine.cjs +53 -2
- package/dist/engine.js +53 -2
- package/dist/index.cjs +68 -17
- package/dist/index.js +68 -17
- package/dist/playwright.cjs +68 -17
- package/dist/playwright.d.cts +11 -1
- package/dist/playwright.d.ts +11 -1
- package/dist/playwright.js +68 -17
- package/package.json +2 -2
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.17.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.
|