@webability/core 1.9.0 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dom.cjs +1 -1
- package/dist/dom.d.cts +1 -1
- package/dist/dom.d.ts +1 -1
- package/dist/dom.js +1 -1
- package/dist/engine.cjs +12 -12
- package/dist/engine.d.cts +24 -1
- package/dist/engine.d.ts +24 -1
- package/dist/engine.js +12 -12
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/playwright.cjs +1 -1
- package/dist/playwright.d.cts +1 -1
- package/dist/playwright.d.ts +1 -1
- package/dist/playwright.js +1 -1
- package/dist/{types-g-bI_MhR.d.cts → types-fjs6XhzQ.d.cts} +2 -0
- package/dist/{types-g-bI_MhR.d.ts → types-fjs6XhzQ.d.ts} +2 -0
- package/package.json +1 -1
package/dist/playwright.js
CHANGED
|
@@ -377,7 +377,7 @@ See: https://github.com/dequelabs/axe-core/blob/master/doc/context.md`));}functi
|
|
|
377
377
|
`).join(`
|
|
378
378
|
`);return ce}}},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:wg);});var Hg={};br(Hg,{dismissModals:()=>fP});async function fP(f){await f.evaluate(d=>{for(let g of d){let h=document.querySelectorAll(g);for(let m of h)if(m.offsetParent!==null){m.click();return}}},dP),await new Promise(d=>setTimeout(d,500));}var dP,Vg=vr(()=>{dP=['[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 Vo={};br(Vo,{pruneHiddenIframeIssues:()=>gP,pruneInvisibleContrast:()=>hP,waitForRenderSettle:()=>pP});async function pP(f,d=4e3){let g=Date.now()+d;try{await f.waitForLoadState?.("load",{timeout:Math.min(d/2,2e3)});}catch{}let h="";for(;Date.now()<g;){let m;try{m=await f.evaluate(()=>{let y=typeof document.getAnimations=="function"?document.getAnimations():[],v=0;for(let A of y){if(A.playState!=="running")continue;let S;try{S=A.effect?.getComputedTiming?.().iterations;}catch{S=void 0;}S!==1/0&&v++;}let w="",C=document.body?document.body.querySelectorAll('[style*="opacity"]'):[],E=Math.min(C.length,50);for(let A=0;A<E;A++)w+=getComputedStyle(C[A]).opacity+",";return v+"|"+w});}catch{return}if(m.indexOf("0|")===0&&m===h)return;h=m,await new Promise(y=>setTimeout(y,150));}}function jg(f){return mP.has(f.wcag)||/contrast/i.test(f.type||"")}async function hP(f,d){let g=Array.from(new Set(d.filter(v=>jg(v)&&v.selector).map(v=>v.selector))).slice(0,100);if(g.length===0)return d;let h;try{h=await f.evaluate(v=>{let w=[],C={},E=Math.max(document.documentElement.scrollWidth,window.innerWidth),A=Math.max(document.documentElement.scrollHeight,window.innerHeight),S=F=>{let D=F.match(/rgba?\(([^)]+)\)/);if(!D)return !1;let x=D[1].split(/[ ,/]+/).filter(Boolean);return x.length<4||parseFloat(x[3])>=.95};for(let F of v){let D=null;try{D=document.querySelector(F);}catch{continue}if(!D)continue;let x=getComputedStyle(D),k=D.getBoundingClientRect(),T=x.clipPath&&x.clipPath!=="none"&&/inset\(\s*(?:50|100)%/.test(x.clipPath)||/rect\(\s*0(?:px)?\s*,?\s*0(?:px)?\s*,?\s*0(?:px)?\s*,?\s*0(?:px)?\s*\)/.test(x.clip||""),I=k.width<=1||k.height<=1,M=window.scrollX,V=window.scrollY,z=k.right+M<=0||k.bottom+V<=0||k.left+M>=E||k.top+V>=A,Y=!1;if(z)for(let K=D.parentElement;K&&K!==document.body&&K!==document.documentElement;K=K.parentElement){let te=getComputedStyle(K);if(te.overflowX!=="visible"||te.overflowY!=="visible"||te.transform&&te.transform!=="none"){Y=!0;break}}if(z&&Y){C[F]="text is outside the visible page inside a scrolling / clipped container \u2014 check contrast where it is shown";continue}if(T||I||z){w.push(F);continue}let q=D,P=!1;for(;q&&q!==document.documentElement;){if(parseFloat(getComputedStyle(q).opacity)===0){P=!0;break}q=q.parentElement;}if(P){C[F]="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 O=k.left+k.width/2,B=k.top+k.height/2,$=D,X=!1;for(let K=0;$&&$!==document.body&&K<8;K++){let te=getComputedStyle($);if(S(te.backgroundColor)||te.backgroundImage&&te.backgroundImage!=="none")break;let Z=$.querySelectorAll("video, canvas, img, picture");for(let ne=0;ne<Z.length;ne++){let ae=Z[ne];if(ae.contains(D)||D.contains(ae))continue;let ue=ae.getBoundingClientRect();if(ue.width>0&&ue.height>0&&O>=ue.left&&O<=ue.right&&B>=ue.top&&B<=ue.bottom){X=!0;break}}if(X)break;$=$.parentElement;}X&&(C[F]="text sits over a video or image \u2014 the background behind the glyphs cannot be measured from CSS");}return {hidden:w,review:C}},g);}catch{return d}let m=new Set(h.hidden),y=[];for(let v of d){if(!jg(v)){y.push(v);continue}if(m.has(v.selector))continue;let w=h.review[v.selector];y.push(w&&v.confidence!=="needs_review"?{...v,confidence:"needs_review",reviewReason:w,...v.fix?{fix:{...v.fix,needsManualReview:true}}:{}}:v);}return y}async function gP(f,d){let g=Array.from(new Set(d.filter(y=>y.selector).map(y=>y.selector))).slice(0,200);if(g.length===0)return d;let h;try{h=await f.evaluate(y=>{let v=[];for(let w of y){let C=null;try{C=document.querySelector(w);}catch{continue}if(!C||C.tagName!=="IFRAME")continue;let E=getComputedStyle(C),A=C.getClientRects().length===0||E.visibility==="hidden"||E.visibility==="collapse",S=(C.getAttribute("src")||"").trim().toLowerCase().indexOf("javascript:")===0;(A||S)&&v.push(w);}return v},g);}catch{return d}if(h.length===0)return d;let m=new Set(h);return d.filter(y=>!m.has(y.selector))}var mP,jo=vr(()=>{mP=new Set(["1.4.3","1.4.6","1.4.11"]);});var $o={};br($o,{focusOnlyObscuredIndexes:()=>xP,resetInteractionState:()=>vP,restoreInteractionState:()=>yP,snapshotInteractionState:()=>bP});async function vP(f){try{await f.evaluate(()=>{try{document.activeElement?.blur?.();}catch{}try{window.scrollTo({left:0,top:0,behavior:"instant"});}catch{}});}catch{}}async function bP(f){try{await f.evaluate(()=>{let d=window;d.__waCallerState={el:document.activeElement,x:window.scrollX,y:window.scrollY};});}catch{}}async function yP(f){try{await f.evaluate(()=>{let d=window,g=d.__waCallerState;if(delete d.__waCallerState,!g)return;let h=g.el;if(h&&h!==document.body&&h!==document.documentElement&&h.isConnected)try{h.focus({preventScroll:!0});}catch{}try{window.scrollTo({left:g.x,top:g.y,behavior:"instant"});}catch{}});}catch{}}function wP(f){if(typeof f=="string")return f;if(!Array.isArray(f))return null;let d=f.flat(1/0).filter(g=>typeof g=="string");return d.length===1?d[0]:null}async function xP(f,d){let g=d.map(v=>{let C=[...v.any??[],...v.none??[]].flatMap(A=>A.relatedNodes??[]);if(!C.length)return null;let E=C.map(A=>wP(A.target));return E.every(A=>!!A)?E:null}),h=Array.from(new Set(g.flatMap(v=>v??[])));if(!h.length)return new Set;let m={};try{m=await f.evaluate(({sels:v,own:w})=>{let C=A=>{let S=A.getBoundingClientRect(),F=getComputedStyle(A);return !!((S.width<=1||S.height<=1)&&(F.overflow==="hidden"||F.position==="absolute"||F.position==="fixed")||/^rect\(\s*0(px)?[\s,]+0(px)?[\s,]+0(px)?[\s,]+0(px)?\s*\)$/.test(F.clip||"")||/inset\(\s*50%/.test(F.clipPath||""))},E={};for(let A of v){let S=null;try{S=document.querySelector(A);}catch{S=null;}if(!S){E[A]=!1;continue}let F=S.closest(w);if(F&&F!==document.body&&F!==document.documentElement){E[A]=!0;continue}if(S===document.activeElement){try{S.blur();}catch{}E[A]=C(S);continue}E[A]=C(S);}return E},{sels:h,own:qo});}catch{return new Set}let y=new Set;return g.forEach((v,w)=>{v&&v.length&&v.every(C=>m[C]===true)&&y.add(w);}),y}var zo=vr(()=>{Fr();});var ta={};br(ta,{dedupeByElementIdentity:()=>CP,deduplicateIssues:()=>DP});function DP(f){let d=new Map,g=[...f].sort((h,m)=>{let y={webability:0,"axe-core":1,"deep-analysis":2},v=y[h.source]??3,w=y[m.source]??3;return v-w});for(let h of g){let m=_P(h);d.has(m)?!d.get(m).fix?.suggestedValue&&h.fix?.suggestedValue&&d.set(m,h):d.set(m,h);}return Array.from(d.values())}function _P(f){let d=f.selector.replace(/:focus-visible$/,"").replace(/:focus$/,"").replace(/\[data-[^\]]+\]/g,"").trim(),g=f.wcag||"";return d&&g?`${d}::${g}`:`${f.type}::${d||f.id}`}async function CP(f,d){if(d.length<2)return d;let g=Array.from(new Set(d.map(A=>A.selector).filter(Boolean))),h;try{h=await f.evaluate(A=>{let S=Array.from(document.querySelectorAll("*")),F=new Map;S.forEach((x,k)=>F.set(x,k));let D={};for(let x of A){let k=null;try{k=document.querySelector(x);}catch{}if(!k){let T=x.replace(/:(?:focus-visible|focus-within|focus|hover|active)$/,"");if(T!==x)try{k=document.querySelector(T);}catch{}}if(k){let T=k.closest("table");D[x]={el:F.get(k),table:T?F.get(T):-1,doc:k===document.documentElement||k===document.body};}}return D},g);}catch{return d}let m={webability:0,"axe-core":1,"deep-analysis":2},y=A=>{let S=h[A.selector];if(!S)return null;let F=A.wcag||A.type;return S.doc?{key:EP.has(A.wcag||"")?`doc::${F}`:`doc::${F}::${A.type}`,owner:true}:S.table>=0&&AP.test(A.type)?{key:`${S.table}::${F}::table-headers`,owner:S.el===S.table}:{key:`${S.el}::${F}`,owner:true}},v=[...d].sort((A,S)=>{let F=y(A),D=y(S),x=F?.owner?0:1,k=D?.owner?0:1;return x-k||(m[A.source]??3)-(m[S.source]??3)}),w=new Map,C=[];for(let A of v){let S=y(A);if(!S){C.push(A);continue}let F=w.get(S.key);F?!F.fix?.suggestedValue&&A.fix?.suggestedValue&&(y(F)?.owner??true)===S.owner&&w.set(S.key,A):w.set(S.key,A);}let E=new Set([...w.values(),...C]);return d.filter(A=>E.has(A))}var AP,EP,ra=vr(()=>{AP=/^missing_table_header$|^td-has-header$|^th-has-data-cells$|^h43|^h63/,EP=new Set(["2.4.1","3.1.1","2.4.2"]);});var Gg={};br(Gg,{parseGif:()=>$g,playsOverFiveSeconds:()=>zg,verifyAnimatedGifs:()=>SP});function $g(f){if(String.fromCharCode(f[0]??0,f[1]??0,f[2]??0)!=="GIF")return null;let g=13,h=f[10]??0;h&128&&(g+=3*(1<<(h&7)+1));let m=0,y=0,v=0,w=null,C=()=>{for(;g<f.length;){let E=f[g++];if(E===0)return;g+=E;}};for(;g<f.length;){let E=f[g++];if(E===59)break;if(E===33){let A=f[g++];if(A===249)v=(f[g+2]??0)|(f[g+3]??0)<<8,g+=1+(f[g]??4),C();else if(A===255){let S=f[g]??0,F=String.fromCharCode(...Array.from(f.subarray(g+1,g+1+S)));g+=1+S,(F==="NETSCAPE2.0"||F==="ANIMEXTS1.0")&&f[g]===3&&f[g+1]===1&&(w=(f[g+2]??0)|(f[g+3]??0)<<8),C();}else C();}else if(E===44){let A=f[g+8]??0;g+=9,A&128&&(g+=3*(1<<(A&7)+1)),g+=1,C(),m++,y+=v<2?10:v,v=0;}else break}return {frames:m,seconds:y/100,loops:w}}function zg(f){if(f.frames<2)return false;if(f.loops===0)return true;let d=f.loops===null?1:f.loops+1;return f.seconds*d>5}async function SP(f,d){let g=d.filter(y=>y.type==="animated_gif_no_pause");if(!g.length)return d;let h=Array.from(new Set(g.map(y=>y.selector))),m={};try{m=await f.evaluate(async({sels:y,parserSrc:v})=>{let w=new Function("var __name = function (f) { return f }; return ("+v+")")(),C={};return await Promise.all(y.map(async E=>{C[E]=null;try{let A=document.querySelector(E),S=A&&(A.currentSrc||A.src);if(!S)return;let F=new AbortController,D=setTimeout(()=>F.abort(),5e3);try{let x=await fetch(S,{signal:F.signal,credentials:"same-origin"});if(!x.ok||Number(x.headers.get("content-length")||"0")>2e7)return;C[E]=w(new Uint8Array(await x.arrayBuffer()));}finally{clearTimeout(D);}}catch{}})),C},{sels:h,parserSrc:$g.toString()});}catch{m={};}return d.flatMap(y=>{if(y.type!=="animated_gif_no_pause")return [y];let v=m[y.selector];if(!v)return [{...y,message:`${y.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(!zg(v))return [];let w=v.loops===0?"loops forever":`plays for ${(v.seconds*(v.loops===null?1:v.loops+1)).toFixed(1)}s`;return [{...y,message:`animated GIF (${v.frames} frames, ${w}) 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 Wg=vr(()=>{});var qu={};br(qu,{scopeIssuesToRoot:()=>kP});async function kP(f,d,g){let h=Array.from(new Set(d.map(y=>y.selector).filter(Boolean))),m;try{m=await f.evaluate(({rootSel:y,sels:v})=>{let w=A=>{try{let F=document.querySelector(A);if(F)return F}catch{}let S=A.replace(/:(?:focus-visible|focus-within|focus|hover|active)$/,"");if(S!==A)try{return document.querySelector(S)}catch{return null}return null},C=null;try{C=document.querySelector(y);}catch{return {invalid:!0,matched:!1,within:{}}}if(!C)return {invalid:!1,matched:!1,within:{}};let E={};for(let A of v){let S=w(A);E[A]=S?S===C||C.contains(S):!0;}return {invalid:!1,matched:!0,within:E}},{rootSel:g,sels:h});}catch{return {issues:d,warning:`scope:evaluate-failed (${g}) \u2014 results unfiltered`}}return m.invalid?{issues:d,warning:`scope:invalid-selector (${g}) \u2014 results unfiltered`}:m.matched?{issues:d.filter(y=>y.selector?m.within[y.selector]===true:true)}:{issues:[],warning:`scope:root-miss (${g} matched nothing \u2014 empty result)`}}var Bu=vr(()=>{});var No={mobile:{width:375,height:667},tablet:{width:768,height:1024},desktop:{width:1280,height:720}};var $3=()=>{let f="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye]",g=[],h=new Set;function m(w){let C=(w.textContent||"").trim().replace(/\s+/g,""),E=w.querySelector("img, svg, picture")!==null,A=w.querySelector("i[class], span[class]")!==null;if(C.length>0&&!E&&!A)return false;if(E){let S=w.querySelectorAll("img"),F="";S.forEach(k=>{F+=(k.getAttribute("alt")||"").trim();});let D=C.replace(/\s+/g,""),x=F.replace(/\s+/g,"");return D===""||D===x}return false}function y(w){let C=w.nextElementSibling;for(;C;){if(isVisible(C))return C;C=C.nextElementSibling;}return null}return document.querySelectorAll("a[href]").forEach(w=>{if(g.length>=50||w.closest(f)||!isVisible(w)||h.has(w))return;let C=w.getAttribute("href");if(!C||C==="#")return;let E=y(w);if(!E||E.tagName!=="A"||E.getAttribute("href")!==C||h.has(E)||w.getAttribute("aria-hidden")==="true"||E.getAttribute("aria-hidden")==="true")return;let S=m(w),F=m(E);if(!S&&!F)return;let D=S?w:E,x=S?E:w;h.add(D),h.add(x);let k=uniqueSel(D),T=D.outerHTML.slice(0,300),I=(x.textContent||"").trim().slice(0,80);g.push({selector:k,attribute:"aria-hidden",currentValue:"",issueType:"adjacent_redundant_link",wcag:"2.4.4",context:JSON.stringify({href:C,imageLink:true,adjacentLinkText:I,suggestion:'Add aria-hidden="true" and tabindex="-1" to the image-only link'}),needsAI:false,fixValue:"true",outerHtml:T}),g.push({selector:k,attribute:"tabindex",currentValue:"",issueType:"adjacent_redundant_link",wcag:"2.4.4",context:JSON.stringify({supplementary:"Remove from tab order alongside aria-hidden",href:C}),needsAI:false,fixValue:"-1",outerHtml:T});}),g},oh={name:"adjacentLinks",cap:50,async detect(f){return f.evaluate($3)}};var z3=()=>{let f="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye],[class*=ae-exclude],[id*=ae_app],[id*=ae_],[class*=EquallyAI]",d='.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(","),h=new Set(["A","BUTTON","INPUT","SELECT","TEXTAREA"]),m=50,y=[],v=new Set;function w(A){let S=A,F=0;for(;S&&S.nodeType===1&&S!==document.body&&F<20;){try{let D=getComputedStyle(S);if(D.display==="none"||D.visibility==="hidden"||D.visibility==="collapse")return !0}catch{}S=S.parentElement,F++;}return false}function C(A){let S=A.tagName,F=A.getAttribute("tabindex");if(F!==null){let D=parseInt(F,10);if(!isNaN(D)&&D>=0)return true;if(!isNaN(D)&&D<0)return false}return h.has(S)?!(S==="A"&&!A.hasAttribute("href")||A.hasAttribute("disabled")):false}return document.querySelectorAll('[aria-hidden="true"]').forEach(A=>{if(y.length>=m||A.closest(f)||A.closest(d)||A.closest(g)||A.matches(g))return;let S=[];if(C(A)&&S.push(A),A.querySelectorAll("a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]").forEach(D=>{C(D)&&S.push(D);}),S.length!==0)for(let D of S){if(y.length>=m)return;let x=uniqueSel(D),k=x+"\0tabindex";if(v.has(k))continue;v.add(k);let T=w(D);y.push({selector:x,attribute:"tabindex",currentValue:D.getAttribute("tabindex")||"",issueType:"aria_hidden_focusable",wcag:"4.1.2",context:JSON.stringify({tag:D.tagName.toLowerCase(),parentHidden:A.tagName.toLowerCase(),collapsed:T,suggestion:T?"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.":'Add tabindex="-1" to the focusable child so it cannot be tabbed into while parent is aria-hidden'}),needsAI:false,fixValue:"-1",...T?{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.'}:{},outerHtml:(D.outerHTML||"").slice(0,300)});}}),y},sh={name:"ariaHiddenFocusable",cap:50,async detect(f){return f.evaluate(z3)}};var G3=()=>{let f="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],h=new Set,m=[{regex:/\btoast\b/i,ariaLive:"polite",role:"status"},{regex:/\bsnackbar\b/i,ariaLive:"polite",role:"status"},{regex:/error[-_]message|error[-_]msg|form[-_]error|validation[-_]error/i,ariaLive:"assertive",role:"alert"},{regex:/success[-_]message|success[-_]msg/i,ariaLive:"polite",role:"status"},{regex:/alert[-_]message|alert[-_]banner/i,ariaLive:"assertive",role:"alert"},{regex:/flash[-_]message|flash[-_]notice/i,ariaLive:"polite",role:"status"},{regex:/cart[-_]count|cart[-_]badge|cart[-_]quantity/i,ariaLive:"polite",role:"status"},{regex:/loading[-_]spinner|loading[-_]indicator/i,ariaLive:"polite",role:"status"},{regex:/search[-_]results?[-_]count/i,ariaLive:"polite",role:"status"},{regex:/\blive[-_]region\b/i,ariaLive:"polite",role:"status"},{regex:/notification[-_](bar|area|container|popup|wrapper)/i,ariaLive:"polite",role:"status"},{regex:/status[-_]message/i,ariaLive:"polite",role:"status"}];function y(v){if(!(v.textContent||"").trim())return true;let C=getComputedStyle(v);return !!(C.display==="none"||C.visibility==="hidden"||C.opacity==="0"||C.maxHeight==="0px"||C.height==="0px"||v.hasAttribute("data-bind")||v.hasAttribute("v-if")||v.hasAttribute("v-show")||v.hasAttribute("ng-if")||v.hasAttribute("ng-show")||v.hasAttribute(":class")||v.hasAttribute("x-show")||v.hasAttribute("x-if")||v.hasAttribute("aria-atomic"))}for(let v of m){if(g.length>=50)break;let w=document.querySelectorAll("*");for(let C of w){if(g.length>=50)break;if(h.has(C)||C.closest(f))continue;let E=C.className&&typeof C.className=="string"?C.className:"",A=C.getAttribute("id")||"";if(!v.regex.test(E)&&!v.regex.test(A)||C.getAttribute("aria-live"))continue;let S=C.getAttribute("role")||"";if(["alert","status","log","timer","marquee"].includes(S)||!/\btoast\b|\bsnackbar\b|error[-_]|success[-_]|alert[-_]|flash[-_]/i.test(E+" "+A)&&!y(C))continue;h.add(C);let D=uniqueSel(C),x=v.regex.test(E)?"class":"id",k=x==="class"?E.slice(0,60):A;g.push({selector:D,attribute:"aria-live",currentValue:"",issueType:"aria_live",wcag:"4.1.3",context:x+": "+k+" | pattern: "+v.regex.source,needsAI:false,fixValue:v.ariaLive});}}return g},lh={name:"ariaLive",cap:50,async detect(f){return f.evaluate(G3)}};var W3=()=>{let f="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye],[class*=ae-exclude],[id*=ae_app],[id*=ae_],[class*=EquallyAI]",g=[],h=new Set,m=["aria-labelledby","aria-describedby"];return document.querySelectorAll("[aria-labelledby],[aria-describedby]").forEach(w=>{if(!(g.length>=50)&&!w.closest(f)&&isVisible(w)&&!isHiddenFromAT(w)&&!w.getAttribute("aria-live")&&!w.closest("[aria-live]")&&!w.closest("template"))for(let C of m){let E=w.getAttribute(C);if(!E||!E.trim())continue;let A=E.trim().split(/\s+/).filter(V=>V.length>0);if(A.length===0||!A.every(V=>!document.getElementById(V)))continue;let F=w.getAttribute("aria-label");if(F&&F.trim())continue;let D=getAccessibleName(w);if(D&&D.trim())continue;let x=uniqueSel(w),k=x+"\0"+C;if(h.has(k))continue;h.add(k);let{nearbyHeading:T,parentTag:I,parentRole:M}=getNearbyContext(w);g.push({selector:x,attribute:"aria-label",currentValue:"",issueType:"broken_aria_reference",wcag:"4.1.2",context:JSON.stringify({tag:w.tagName.toLowerCase(),brokenAttr:C,brokenIds:A,nearbyHeading:T,parentTag:I,parentRole:M,suggestion:`All IDs in ${C}="${E}" are missing from the DOM. Element has no accessible name. Generate an aria-label.`}),needsAI:true,outerHtml:(w.outerHTML||"").slice(0,300)});}}),g},uh={name:"brokenAriaReferences",cap:50,async detect(f){return f.evaluate(W3)}};var U3=()=>{let d=[],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"],h=document.querySelectorAll("button");for(let m of h){if(d.length>=50)break;let y=m;if(isWidget(y)||y.hasAttribute("type")||!y.closest("form"))continue;let v=(y.textContent||"").trim().slice(0,60),w=(y.getAttribute("aria-label")||"").trim().slice(0,60),C=v||w||"(no label)",E=C.toLowerCase();g.some(S=>E.includes(S))||d.push({selector:uniqueSel(y),attribute:"type",currentValue:"",issueType:"missing_button_type",wcag:"3.2.2",context:"button inside <form> missing type attribute \u2014 defaults to submit | label: "+C,needsAI:false,fixValue:"button",outerHtml:(y.outerHTML||"").slice(0,300)});}return d},ch={name:"buttonType",cap:50,async detect(f){return f.evaluate(U3)}};var X3=()=>{let d=[],g=document.querySelectorAll("video, audio");for(let h of Array.from(g)){if(d.length>=20)break;if(isWidget(h)||typeof isVisible=="function"&&!isVisible(h)||h.error)continue;let m=h.tagName==="VIDEO";if(m){let k=h.hasAttribute("muted")||h.muted,T=h.hasAttribute("controls"),I=h.hasAttribute("loop")||h.loop,M=/mute|unmute|sound|volume|audio|play|pause/i,V=!!h.parentElement?.querySelector('button, [role="button"]')||!!h.id&&!!document.querySelector('[aria-controls~="'+h.id.replace(/"/g,"")+'"]');for(let z=h.parentElement?.parentElement||null,Y=0;z&&!V&&Y<3;z=z.parentElement,Y++)V=Array.from(z.querySelectorAll('button, [role="button"]')).some(q=>M.test((q.getAttribute("aria-label")||"")+" "+(q.getAttribute("title")||"")+" "+(q.textContent||"")));if(k&&I&&!T&&!V)continue}let y=h.querySelectorAll("track"),v=false;for(let k of Array.from(y)){let T=(k.getAttribute("kind")||"").toLowerCase();if(T==="captions"||T==="subtitles"){v=true;break}}if(v)continue;let w=h.currentSrc||h.getAttribute("src")||"";if(w||(w=h.querySelector("source")?.getAttribute("src")||""),!w)continue;let C=w.toLowerCase();if(C.startsWith("blob:")||C.startsWith("data:")||C.startsWith("about:")||C.startsWith("javascript:")||C.endsWith(".m3u8")||C.includes(".m3u8?")||C.endsWith(".mpd")||C.includes(".mpd?"))continue;let E=w;try{E=new URL(w,location.href).toString();}catch{continue}let A=typeof uniqueSel=="function"?uniqueSel(h):"",S=h.getAttribute("title")||h.getAttribute("aria-label")||"",F=typeof getNearbyContext=="function"?getNearbyContext(h):{parentTag:h.tagName.toLowerCase(),nearbyHeading:""},D=[];D.push("media: "+h.tagName.toLowerCase()),D.push("src: "+E.slice(0,200)),S&&D.push("title: "+S.slice(0,80)),F.nearbyHeading&&D.push("heading: "+F.nearbyHeading),D.push("parent: "+F.parentTag);let x=m;d.push({selector:A,attribute:"data-needs-captions",currentValue:"",issueType:"missing_captions",wcag:"1.2.2",context:D.join(" | "),needsAI:true,...x?{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:E,outerHtml:(h.outerHTML||"").slice(0,300)});}return d},dh={name:"captions",cap:20,async detect(f){return f.evaluate(X3)}};var Y3=()=>{let f="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],h="p, li, blockquote, article, section, main, div",m=document.querySelectorAll("a[href]"),y=new Map;for(let v of Array.from(m)){if(g.length>=40)break;if(v.closest(f)||v.closest('nav, header, footer, aside, [role="navigation"], [role="banner"], [role="contentinfo"]')||typeof isVisible=="function"&&!isVisible(v))continue;let w=v.closest(h);if(!w)continue;let C=(v.textContent||"").trim();if(!C)continue;let E=y.get(w);if(E===void 0){E=0;let z=document.createTreeWalker(w,NodeFilter.SHOW_TEXT),Y;for(;Y=z.nextNode();){let q=Y.parentElement;!q||q.closest("a")||q.closest(h)===w&&(typeof isVisible=="function"&&!isVisible(q)||(E+=(Y.textContent||"").trim().length));}y.set(w,E);}if(E<20||v.querySelector("img, svg, [class*=icon], [class*=arrow]"))continue;let A=getComputedStyle(v),S=getComputedStyle(w);if((A.textDecorationLine||A.textDecoration||"").includes("underline")||(()=>{let z=document.createTreeWalker(v,NodeFilter.SHOW_TEXT),Y,q=false;for(;Y=z.nextNode();){if(!/[\p{L}\p{N}]/u.test(Y.textContent||""))continue;q=true;let P=false;for(let O=Y.parentElement;O&&O!==v;O=O.parentElement){let B=getComputedStyle(O),$=(B.textDecorationColor||"").replace(/\s/g,"");if((B.textDecorationLine||"").includes("underline")&&$!=="transparent"&&!/^rgba\([^)]*,0(?:\.0+)?\)$/.test($)){P=true;break}let X=(B.borderBottomColor||"").replace(/\s/g,""),K=X==="transparent"||/^rgba\([^)]*,0(?:\.0+)?\)$/.test(X);if((B.borderBottomStyle||"none")!=="none"&&parseFloat(B.borderBottomWidth||"0")>0&&!K){P=true;break}}if(!P)return false}return q})())continue;let x=parseInt(A.fontWeight||"400",10),k=parseInt(S.fontWeight||"400",10);if(Number.isFinite(x)&&Number.isFinite(k)&&x-k>=300||(A.borderBottomStyle||"none")!=="none"&&(A.borderBottomWidth||"0px")!=="0px"||A.color===S.color)continue;let I=typeof uniqueSel=="function"?uniqueSel(v):"",M=typeof getNearbyContext=="function"?getNearbyContext(v):{parentTag:v.tagName.toLowerCase(),nearbyHeading:""},V=[];V.push("link: "+C.slice(0,40)),V.push("color: "+A.color),V.push("parent-color: "+S.color),M.nearbyHeading&&V.push("heading: "+M.nearbyHeading),V.push("parent: "+M.parentTag),g.push({selector:I,attribute:"style",currentValue:A.textDecoration||"",issueType:"color_only_link",wcag:"1.4.1",context:V.join(" | "),needsAI:false,fixValue:"text-decoration: underline !important;",outerHtml:(v.outerHTML||"").slice(0,300)});}return g},fh={name:"colorOnly",cap:40,async detect(f){return f.evaluate(Y3)}};var K3=()=>{let d=[],g=x=>typeof parseCssColor=="function"?parseCssColor(x):null,h=(x,k,T)=>typeof relLuminance=="function"?relLuminance(x,k,T):0,m=(x,k)=>typeof contrastRatio=="function"?contrastRatio(x,k):1;function y(x){let k=String(x.backgroundImage||"none");if(k==="none")return false;if(/gradient\(/i.test(k))return true;if(!/url\(/i.test(k))return false;let T=String(x.backgroundRepeat||"").toLowerCase(),I=String(x.backgroundSize||"").toLowerCase(),M=T.split(",").map(z=>z.trim()).some(z=>z!==""&&z!=="no-repeat"),V=/cover|contain|100%/.test(I);return M||V}function v(x){let k=document.documentElement,T=x,I=0;for(;T&&T!==k&&I<12;){let q=getComputedStyle(T);if(y(q))return null;let P=g(q.backgroundColor||"");if(P&&P[3]>.5)return [P[0],P[1],P[2]];T=T.parentElement,I++;}let M=document.body;if(T&&T!==k&&M&&M.contains(T)){let q=getComputedStyle(M);if(y(q))return null;let P=g(q.backgroundColor||"");if(P&&P[3]>.5)return [P[0],P[1],P[2]]}let V=getComputedStyle(k);if(y(V))return null;let z=g(V.backgroundColor||""),Y=z?Math.min(z[3],1):0;return !z||Y<=0?[255,255,255]:[Math.round(z[0]*Y+255*(1-Y)),Math.round(z[1]*Y+255*(1-Y)),Math.round(z[2]*Y+255*(1-Y))]}function w(x,k,T){return "#"+[x,k,T].map(I=>{let M=Math.max(0,Math.min(255,Math.round(I))).toString(16);return M.length===1?"0"+M:M}).join("")}function C(x,k,T){let I=h(k[0],k[1],k[2])>.5;return E(x,k,T,I)||E(x,k,T,!I)}function E(x,k,T,I){let M=0,V=1,z=null;for(let Y=0;Y<20;Y++){let q=(M+V)/2,P=I?[x[0]*(1-q),x[1]*(1-q),x[2]*(1-q)]:[x[0]+(255-x[0])*q,x[1]+(255-x[1])*q,x[2]+(255-x[2])*q],O=[Math.round(P[0]),Math.round(P[1]),Math.round(P[2])];m(O,k)>=T?(z=O,V=q):M=q;}return z}let A=document.createTreeWalker(document.body,4),S=new Set,F=[],D=A.nextNode();for(;D;){if((D.textContent||"").trim().length>=2){let k=D.parentElement;k&&!S.has(k)&&(S.add(k),F.push(k));}D=A.nextNode();}for(let x of F){if(d.length>=30)break;if(isWidget(x)||isHiddenFromAT(x)||!isVisible(x))continue;let k=getComputedStyle(x),T=g(k.color||"");if(!T)continue;if(T[3]<.5){let Z=k.webkitBackgroundClip||k.backgroundClip||"",ne=k.backgroundImage||"";if(String(Z).includes("text")&&/gradient\(/i.test(ne)){let ae=Array.from(x.childNodes).filter(ue=>ue.nodeType===3).map(ue=>(ue.textContent||"").trim()).join("");ae&&d.push({selector:uniqueSel(x),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(ae.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:x.outerHTML.slice(0,200)});}continue}let I=v(x),M=parseFloat(k.fontSize||"16"),V=parseInt(k.fontWeight||"400",10),Y=M>=24||M>=18.66&&V>=700?3:4.5,q=Array.from(x.childNodes).filter(Z=>Z.nodeType===3).map(Z=>(Z.textContent||"").trim()).join("");if(!q)continue;let P=w(T[0],T[1],T[2]),O=uniqueSel(x);if(I===null){d.push({selector:O,attribute:"style",currentValue:P,message:"contrast: text "+P+" on a gradient or image background \u2014 the ratio cannot be computed from CSS; check it meets "+Y+":1 where the background is lightest/darkest",issueType:"contrast_insufficient",wcag:"1.4.3",context:"fg="+P+" bg=<gradient-or-image> needs="+Y+" text="+JSON.stringify(q.slice(0,40)),needsAI:true,needsReview:true,reviewReason:"background uses gradient or image \u2014 contrast cannot be reliably computed",outerHtml:x.outerHTML.slice(0,200)});continue}let B=m([T[0],T[1],T[2]],I);if(B>=Y)continue;let $=C([T[0],T[1],T[2]],I,Y);if(!$)continue;let X=w($[0],$[1],$[2]),K=w(I[0],I[1],I[2]),te="color:"+X+" !important;";d.push({selector:O,attribute:"style",currentValue:P,message:"contrast: "+P+" on "+K+" is "+B.toFixed(2)+":1, needs "+Y+":1 \u2014 e.g. color "+X,issueType:"contrast_insufficient",wcag:"1.4.3",context:"fg="+P+" bg="+K+" ratio="+B.toFixed(2)+" needs="+Y+" text="+JSON.stringify(q.slice(0,40)),needsAI:false,fixValue:te,outerHtml:x.outerHTML.slice(0,200)});}return d},ph={name:"contrast",cap:30,async detect(f){return f.evaluate(K3)}};var J3=()=>{let f="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye]",g=[],h=document.querySelectorAll("marquee, blink");for(let C of Array.from(h)){if(g.length>=30)break;if(C.closest(f))continue;let E=typeof uniqueSel=="function"?uniqueSel(C):C.tagName.toLowerCase();g.push({selector:E,attribute:"aria-hidden",currentValue:C.getAttribute("aria-hidden")||"",issueType:"motion_uncontrollable",wcag:"2.2.2",context:`deprecated ${C.tagName.toLowerCase()} element \u2014 uncontrollable motion`,needsAI:false,manualFix:true,fixValue:"true",outerHtml:(C.outerHTML||"").slice(0,300)});}let m=document.querySelectorAll('img[src*=".gif" i], img[src$=".gif" i]');for(let C of Array.from(m)){if(g.length>=30)break;if(C.closest(f))continue;let E=C.getAttribute("src")||"";if(!/\.gif(\?|#|$)/i.test(E)||typeof isVisible=="function"&&!isVisible(C))continue;let A=C.getBoundingClientRect();if(A.width<=40&&A.height<=40)continue;let S=typeof uniqueSel=="function"?uniqueSel(C):"img";g.push({selector:S,attribute:"data-asw-motion-review",currentValue:"",issueType:"animated_gif_no_pause",wcag:"2.2.2",context:`animated GIF without pause control: ${E.split("/").pop()?.slice(0,60)||E.slice(-60)}`,needsAI:true,outerHtml:(C.outerHTML||"").slice(0,300)});}let y=document.querySelectorAll('meta[http-equiv="refresh"], meta[http-equiv="Refresh"], meta[http-equiv="REFRESH"]');for(let C of Array.from(y)){if(g.length>=30)break;let E=(C.getAttribute("content")||"").trim(),A=parseInt((E.split(/[;,]/)[0]||"").trim(),10);!Number.isFinite(A)||A<=0||g.push({selector:`meta[http-equiv="refresh"][content*="${E.slice(0,20)}"]`,attribute:"data-auto-refresh",currentValue:E,issueType:"auto_refresh",wcag:"2.2.1",context:`auto-refresh every ${A}s \u2014 interrupts screen reader users mid-sentence (WCAG 2.2.1)`,needsAI:false,manualFix:true,outerHtml:(C.outerHTML||"").slice(0,200)});}try{let C=!1,E=!1;for(let A of Array.from(document.styleSheets)){let S=null;try{S=A.cssRules;}catch{continue}if(S)for(let F of Array.from(S)){let D=F.cssText||"";if(/animation[^;]*\binfinite\b/i.test(D)&&/(keyframes|animation-name)/i.test(D+" "+(F.name||""))&&(C=!0),/prefers-reduced-motion[^{]*\(\s*reduce\s*\)/i.test(D)&&(E=!0),F.cssRules)for(let x of Array.from(F.cssRules)){let k=x.cssText||"";/animation[^;]*\binfinite\b/i.test(k)&&(C=!0);}}}C&&!E&&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 v=/\b(flash(ing)?|blink(ing)?|strobe)\b/i,w=document.querySelectorAll('[class*="flash" i], [class*="blink" i], [class*="strobe" i]');for(let C of Array.from(w)){if(g.length>=30)break;if(C.closest(f)||C.tagName==="BODY"||C.tagName==="HTML")continue;let E=C.className&&typeof C.className=="string"?C.className:"";if(!v.test(E)||typeof isVisible=="function"&&!isVisible(C))continue;let S=getComputedStyle(C).animationDuration,F=9999;if(S){let x=parseFloat(S);Number.isFinite(x)&&(F=/ms/i.test(S)?x:x*1e3);}if(F>333)continue;let D=typeof uniqueSel=="function"?uniqueSel(C):"";g.push({selector:D,attribute:"data-flashing-review",currentValue:"",issueType:"flashing_content",wcag:"2.3.1",context:`class matches flash/blink/strobe with ${F}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:(C.outerHTML||"").slice(0,300)});}return g},mh={name:"cssAnimations",cap:30,async detect(f){return f.evaluate(J3)}};var Z3=()=>{let d=[];function g(v){let w=(v.getAttribute("role")||"").toLowerCase();return w==="presentation"||w==="none"||(v.getAttribute("class")||"").toLowerCase().indexOf("layout")!==-1}function h(v){if(!v)return 0;let w=v.querySelectorAll("th, td"),C=0;for(let E=0;E<w.length;E++){let A=parseInt(w[E].getAttribute("colspan")||"1",10);C+=isNaN(A)||A<1?1:A;}return C}function m(v){let w=v.querySelectorAll("tr"),C=[];for(let E=0;E<w.length;E++){let A=w[E];A.closest("table")===v&&C.push(A);}return C}let y=document.querySelectorAll("table");for(let v=0;v<y.length&&!(d.length>=30);v++){let w=y[v];if(isWidget(w)||!isVisible(w)||g(w))continue;let C=m(w);if(C.length<=1)continue;let E=C[0],A=h(E);if(A<=1)continue;let S=uniqueSel(w),F=getNearbyContext(w),D=w.querySelectorAll("img, svg, picture").length>=2;if(D&&!(w.textContent||"").trim()){if(w.querySelector("input, select, textarea, button")&&(D=false),D&&w.querySelector("th, thead, caption, [scope], [headers]")&&(D=false),D){let $=Array.from(w.querySelectorAll("img")).map(X=>(X.getAttribute("alt")||"").trim().toLowerCase()).filter(Boolean);new Set($).size<$.length&&(D=false);}}else if(D){let $=w.querySelectorAll("td, th"),X=0;for(let K=0;K<$.length&&D;K++){let te=$[K];if(te.closest("table")!==w)continue;let Z=(te.textContent||"").trim(),ne=!!te.querySelector("img, svg, picture");if(!Z&&!ne)continue;X++;let ae=te.querySelectorAll("a[href]");D=te.tagName==="TD"&&ae.length===1&&ne&&(ae[0].textContent||"").trim()===Z;}X<2&&(D=false);}if(D){d.push({selector:S,attribute:"role",currentValue:w.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:C.length,cols:A,nearbyHeading:F.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:(w.outerHTML||"").slice(0,300)});continue}let x=null,k=w.querySelectorAll("caption");for(let $=0;$<k.length;$++)if(k[$].closest("table")===w){x=k[$];break}let T=x?(x.textContent||"").trim():"",I=(w.getAttribute("aria-label")||"").trim(),M=(w.getAttribute("title")||"").trim(),V=w.getAttribute("aria-labelledby"),z="";if(V){let $=V.split(/\s+/);for(let X=0;X<$.length;X++){let K=document.getElementById($[X]);K&&(z+=" "+(K.textContent||""));}z=z.trim();}(!x||!T)&&!(I||z||M)&&d.length<30&&d.push({selector:S,attribute:"caption",currentValue:"",issueType:"missing_table_caption",wcag:"1.3.1",context:JSON.stringify({reason:x?"empty <caption>":"no <caption> element",rows:C.length,cols:A,nearbyHeading:F.nearbyHeading,parentTag:F.parentTag}),needsAI:true,outerHtml:(w.outerHTML||"").slice(0,300)});let q=null,P=w.querySelectorAll("thead");for(let $=0;$<P.length;$++)if(P[$].closest("table")===w){q=P[$];break}if(q&&q.querySelector("tr")!==null||d.length<30&&d.push({selector:S,attribute:"thead",currentValue:q?"empty":"",issueType:"missing_table_header",wcag:"1.3.1",context:JSON.stringify({reason:q?"<thead> has no <tr>":"no <thead> element",rows:C.length,cols:A,nearbyHeading:F.nearbyHeading}),needsAI:false,fixValue:"wrap-first-row",outerHtml:(w.outerHTML||"").slice(0,300)}),A>2){let $=E.querySelectorAll("th, td"),X=$.length>0;for(let K=0;K<$.length;K++)if(($[K].tagName||"").toLowerCase()!=="td"){X=false;break}if(X)for(let K=0;K<$.length&&!(d.length>=30);K++){let te=$[K],Z=uniqueSel(te),ne=(te.textContent||"").trim().slice(0,60);d.push({selector:Z,attribute:"role",currentValue:te.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:ne,colIndex:K,nearbyHeading:F.nearbyHeading}),needsAI:false,fixValue:"columnheader",outerHtml:(te.outerHTML||"").slice(0,300)});}}let B=w.querySelectorAll("th");for(let $=0;$<B.length&&!(d.length>=30);$++){let X=B[$];if(X.closest("table")!==w)continue;let K=(X.getAttribute("scope")||"").trim().toLowerCase();if(K==="col"||K==="row"||K==="colgroup"||K==="rowgroup")continue;let te=X.closest("tr"),Z=X.closest("thead")!==null,ne=false;te&&C.length>0&&C[0]===te&&(ne=true);let ae=false;if(te){let Ae=te.querySelectorAll("th, td");Ae.length>0&&Ae[0]===X&&(ae=true);}let ue="col";Z||ne?ue="col":ae&&(ue="row");let xe=uniqueSel(X),Ie=(X.textContent||"").trim().slice(0,60);d.push({selector:xe,attribute:"scope",currentValue:K,issueType:"missing_table_scope",wcag:"1.3.1",context:JSON.stringify({reason:"<th> missing scope attribute",inferred:ue,inThead:Z,firstRow:ne,firstCol:ae,headerText:Ie}),needsAI:false,fixValue:ue,outerHtml:(X.outerHTML||"").slice(0,300)});}}return d},hh={name:"dataTables",cap:30,async detect(f){return f.evaluate(Z3)}};var Q3=async()=>{let d=["tab","button","menuitem","switch","checkbox","option","treeitem"],g=["aria-controls","aria-expanded","aria-haspopup","data-toggle","data-bs-toggle","data-target","data-bs-target"],h=x=>x.split("#")[0],m=h(document.URL);function y(x){let k=(x.getAttribute("href")||"").trim();if(!k||k==="#"||/^javascript:/i.test(k))return null;let T;try{T=new URL(k,document.baseURI);}catch{return null}return T.protocol!=="http:"&&T.protocol!=="https:"&&T.protocol!=="file:"||h(T.href)!==m||k.indexOf("#")===-1?null:T.hash.slice(1)}function v(x){return !(!x||x.toLowerCase()==="top"||x==="0"||x.charAt(0)==="/"||x.charAt(0)==="!"||x.indexOf("=")!==-1)}function w(x){let k=[x];try{let I=decodeURIComponent(x);I!==x&&k.push(I);}catch{}for(let I of k)if(document.getElementById(I))return true;let T=document.querySelectorAll("a[name]");for(let I of T){let M=I.getAttribute("name")||"";if(k.indexOf(M)!==-1)return true}return false}function C(){let x=[];for(let k of document.querySelectorAll('a[href], button, input:not([type="hidden" i]), select, textarea, summary, [tabindex]')){let T=k;if(T.disabled||T.hasAttribute("inert")||T.closest("[inert]"))continue;let I=T.getAttribute("tabindex");I!==null&&Number(I)<0||T.getClientRects().length===0||getComputedStyle(T).visibility==="hidden"||x.push(T);}return x}let E=3,A=3;function S(x,k){let T=k.indexOf(x);if(T<0||T>=E||k.length-T-1<A)return false;let I=document.querySelector('main, [role="main"]')||document.querySelector("h1");return !(I&&!(x.compareDocumentPosition(I)&Node.DOCUMENT_POSITION_FOLLOWING))}function F(){let x=[],k=C(),T=k.slice(0,E);for(let I of document.querySelectorAll("a[href]")){let M=I;if(T.indexOf(M)<0||isWidget(M))continue;let V=y(M);if(V===null||!v(V)||w(V))continue;let z=(M.getAttribute("role")||"").toLowerCase();if(d.indexOf(z)===-1&&!g.some(Y=>M.hasAttribute(Y))&&!(M.getClientRects().length===0||getComputedStyle(M).visibility==="hidden"||isHiddenFromAT(M))&&S(M,k)&&(x.push(M),x.length>=30))break}return x}if(F().length===0)return [];await new Promise(x=>setTimeout(x,500));let D=[];for(let x of F()){let k=(x.getAttribute("href")||"").trim(),T="#"+(y(x)||""),I=(x.textContent||"").trim().replace(/\s+/g," ").slice(0,60);D.push({selector:uniqueSel(x),attribute:"href",currentValue:k,issueType:"broken_anchor",wcag:"2.4.1",context:'in-page link "'+I+'" points to '+T+", which matches no id or a[name] in this page",needsAI:true,needsReview:true,reviewReason:"WCAG 2.4.1 Bypass Blocks: this link is one of the first focusable elements, ahead of the main content, and jumps to "+T+" but no element on the page has that id or name. Violation only when the link is the page's bypass mechanism (a skip link that should jump past repeated blocks), so activating it goes nowhere. Pass when it is anything else: a script-driven control or an ordinary link. A dead fragment on an ordinary link is not a 2.4.1 failure.",outerHtml:(x.outerHTML||"").slice(0,300)});}return D},gh={name:"deadAnchors",cap:30,async detect(f){return f.evaluate(Q3)}};var eI=()=>{let d=[];for(let g of document.querySelectorAll("img[alt]")){if(d.length>=30)break;let h=g;if((h.getAttribute("alt")||"").trim()!=="")continue;let m=(h.getAttribute("title")||"").trim().replace(/\s+/g," ");if(!m||isWidget(h))continue;let y=(h.getAttribute("role")||"").toLowerCase();y==="presentation"||y==="none"||h.getAttribute("aria-hidden")==="true"||h.closest('[aria-hidden="true"]')||(h.getAttribute("aria-label")||"").trim()||(h.getAttribute("aria-labelledby")||"").trim()||isVisible(h)&&d.push({selector:uniqueSel(h),attribute:"data-asw-decorative-title",currentValue:"",issueType:"decorative_image_with_title",wcag:"1.1.1",context:'image with alt="" also has title="'+m.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 "'+m.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:(h.outerHTML||"").slice(0,300)});}return d},vh={name:"decorativeImageTitle",cap:30,async detect(f){return f.evaluate(eI)}};var tI=()=>{let f="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI], [id*=ae_], [class*=ae-exclude]",g=[],h='a[href], button, input, select, textarea, summary, label, iframe, audio[controls], video[controls], [contenteditable=""], [contenteditable="true"], [tabindex]:not([tabindex="-1"]), [role="button"], [role="link"], [role="menuitem"], [role="menuitemcheckbox"], [role="menuitemradio"], [role="tab"], [role="option"], [role="checkbox"], [role="radio"], [role="switch"], [role="combobox"], [role="textbox"], [role="searchbox"], [role="slider"], [role="spinbutton"]',m=D=>{try{return !!(D.querySelector&&D.querySelector(h))}catch{return false}},y=new Set(["fa","fas","far","fab","fal","fad","material-icons","material-symbols","bi","glyphicon"]),v=["fa-","bi-","icon-","icofont-","dashicons-","heroicon","feather-","lucide-"],w=["spinner","loading","spin","loader","pulse"],C=document.querySelectorAll('i, span[class*="icon"], span[class*="fa-"], span[class*="bi-"], span[class*="material"]');for(let D of C){if(g.length>=50)break;if(D.closest(f)||isHiddenFromAT(D)||!isVisible(D))continue;let x=D.className&&typeof D.className=="string"?D.className.toLowerCase():"";if(!x.split(/\s+/).filter(Boolean).some(z=>y.has(z)||v.some(Y=>z.startsWith(Y)))||D.closest(h)||m(D)||Array.from(D.children).some(z=>/[\p{L}\p{N}]/u.test(z.textContent||"")))continue;let M=w.some(z=>x.includes(z)),V=uniqueSel(D);g.push({selector:V,attribute:"aria-hidden",currentValue:"",issueType:"decorative_icon",wcag:"1.1.1",context:M?"spinner/loader icon":"icon classes: "+x.slice(0,80),needsAI:false,fixValue:"true",outerHtml:D.outerHTML.slice(0,300)});}let E=document.querySelectorAll("svg");for(let D of E){if(g.length>=50)break;if(D.closest(f)||isHiddenFromAT(D)||!isVisible(D)||D.closest(h)||m(D))continue;let x=D.getAttribute("aria-label")||"",k=D.getAttribute("aria-labelledby")||"",T=D.querySelector("title"),I=T?(T.textContent||"").trim():"",M=D.getAttribute("role");if(x.trim()||k.trim()||I||M==="img")continue;let V=D.getBoundingClientRect(),z=V.width<=16&&V.height<=16,Y=D.parentElement?(D.parentElement.textContent||"").trim().replace(/\s+/g," "):"",q=V.width<=4||V.height<=4,P=D.getAttribute("preserveAspectRatio")==="none";if(!z&&Y.length<=3&&!q&&!P)continue;let O=uniqueSel(D);g.push({selector:O,attribute:"aria-hidden",currentValue:"",issueType:"decorative_icon",wcag:"1.1.1",context:"decorative SVG without title or aria-label",needsAI:false,fixValue:"true",outerHtml:D.outerHTML.slice(0,300)});}let A=D=>D.indexOf(":")!==-1?false:/^(?:[a-z0-9]+[-_])*(?:disabled|inactive)$/i.test(D),S=document.querySelectorAll('[class*="disabled"], [class*="inactive"], [aria-disabled="true"]');for(let D of S){if(g.length>=50)break;if(D.closest(f)||isHiddenFromAT(D))continue;let x=D.tagName.toLowerCase();if(!(x==="a"||x==="button"||x==="input"||x==="select"||x==="textarea"||D.getAttribute("role")==="button"||D.getAttribute("role")==="link"||D.getAttribute("role")==="tab")||D.hasAttribute("disabled"))continue;let T=D.className&&typeof D.className=="string"?D.className:"",I=T.split(/\s+/).some(A),M=D.getAttribute("aria-disabled")==="true",V=getComputedStyle(D).pointerEvents==="none";if(!M&&!(I&&V))continue;let z=D.getAttribute("tabindex")!=="-1"||m(D),Y=uniqueSel(D);g.push({selector:Y,attribute:"aria-hidden",currentValue:"",issueType:"decorative_icon",wcag:"1.1.1",context:"disabled/inactive element still exposed to assistive technology: "+T.toLowerCase().slice(0,60),needsAI:false,fixValue:"true",...z?{needsReview:true,reviewReason:"element is still keyboard-focusable; aria-hidden would create a hidden focusable element \u2014 remove it from the tab order first or confirm intent"}:{},outerHtml:D.outerHTML.slice(0,300)});}let F=document.querySelectorAll('[class*="visuallyHidden"], [class*="visually-hidden"], [class*="sr-only"], [class*="screenreader"]');for(let D of F){if(g.length>=50)break;if(D.closest(f)||isHiddenFromAT(D))continue;let x=D.querySelectorAll('a[href], button, input, select, textarea, [tabindex]:not([tabindex="-1"])');if(x.length===0)continue;let k=uniqueSel(D);g.push({selector:k,attribute:"aria-hidden",currentValue:"",issueType:"decorative_icon",wcag:"1.1.1",context:"sr-only/visually-hidden container with "+x.length+" focusable children (keyboard trap risk)",needsAI:false,fixValue:"true",needsReview:true,reviewReason:"container has "+x.length+' keyboard-focusable descendant(s); aria-hidden="true" alone would create hidden focusables \u2014 also set tabindex="-1" on those children or confirm intent',outerHtml:D.outerHTML.slice(0,300)});}return g},bh={name:"decorativeIcons",cap:50,async detect(f){return f.evaluate(tI)}};var rI=()=>{let f="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],h=new Map,m=document.querySelectorAll("[id]");for(let y of m){if(y.closest(f))continue;let v=(y.getAttribute("id")||"").trim();if(!v)continue;let w=h.get(v);w?w.push(y):h.set(v,[y]);}for(let[y,v]of h)if(!(v.length<=1)){if(g.length<50){let w=v[0];g.push({selector:typeof uniqueSel=="function"?uniqueSel(w):w.tagName.toLowerCase(),attribute:"id",currentValue:y,issueType:"duplicate_id",wcag:"4.1.1",context:'id "'+y+'" is shared by '+v.length+" elements; this is the canonical first occurrence (kept \u2014 references resolve here). Later occurrences carry rename fixes.",needsAI:false,needsReview:true,reviewReason:"first occurrence of a duplicated id \u2014 shown for completeness; renaming it would break references, so the fix targets the later occurrences",outerHtml:(w.outerHTML||"").slice(0,300)});}for(let w=1;w<v.length&&!(g.length>=50);w++){let C=v[w],E=w+1,A=y+"-"+E,S=C.tagName.toLowerCase(),F=C.parentElement,D=S;if(F){let x=Array.from(F.children).filter(T=>T.tagName===C.tagName);if(x.length>1){let T=x.indexOf(C)+1;D=S+":nth-of-type("+T+")";}let k=F.tagName.toLowerCase();if(F.id&&F.id!==y)D="#"+CSS.escape(F.id)+" > "+D;else {let T=F.parentElement;if(T){let I=Array.from(T.children).filter(M=>M.tagName===F.tagName);if(I.length>1){let M=I.indexOf(F)+1;D=k+":nth-of-type("+M+") > "+D;}else D=k+" > "+D;}}}g.push({selector:D,attribute:"id",currentValue:y,issueType:"duplicate_id",wcag:"4.1.1",context:"duplicate #"+E+' of id="'+y+'" | tag: <'+S+">",needsAI:false,fixValue:A});}}return g},yh={name:"duplicateIds",cap:50,async detect(f){return f.evaluate(rI)}};var nI=()=>{let f="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",d=/^[^\p{L}\p{N}\s]*$/u,g=/^[\s\u00A0\u2000-\u200F\u2028-\u202F]*$/,m=[],y=document.querySelectorAll("a");for(let v of y){if(m.length>=50)break;if(v.closest(f)||v.getAttribute("aria-hidden")==="true"||v.getAttribute("role")==="presentation"||v.closest('[aria-hidden="true"]')||!isVisible(v))continue;let w=getAccessibleName(v);if(w&&w.length>0&&!g.test(w)&&!d.test(w))continue;let C=v.querySelectorAll("img[alt]"),E="";for(let z of C){let Y=(z.getAttribute("alt")||"").trim();Y&&(E+=Y+" ");}if(E.trim())continue;let A=v.getAttribute("aria-labelledby");if(A&&typeof __resolveIdRefs=="function"&&__resolveIdRefs(A))continue;let S=uniqueSel(v),F=v.getAttribute("href")||"",D=(v.textContent||"").trim(),x=getNearbyContext(v),k="";D&&g.test(D)?k="[whitespace only]":D&&d.test(D)&&(k=D);let T="",I=true;if(F&&F!=="#"&&!F.startsWith("javascript:")){if(F.startsWith("mailto:")){let z=F.slice(7).split("?")[0];z&&z.includes("@")&&(T="Email "+z,I=false);}else if(F.startsWith("tel:")){let z=F.slice(4);try{z=decodeURIComponent(z);}catch{}z=z.replace(/^\+/,"").trim(),z&&(T="Call "+z,I=false);}}let M=[];v.closest("nav")&&M.push("inside nav"),x.nearbyHeading&&M.push("heading: "+x.nearbyHeading),F&&M.push("href: "+F.slice(0,120)),M.push("parent: "+x.parentTag);let V={selector:S,attribute:"aria-label",currentValue:k,issueType:"empty_link",wcag:"2.4.4",context:M.join(" | "),needsAI:I,outerHtml:v.outerHTML.slice(0,300)};!I&&T&&(V.fixValue=T),m.push(V);}return m},wh={name:"emptyLinks",cap:50,async detect(f){return f.evaluate(nI)}};var aI=()=>{let d=[],g=new Set;function h(A){return (A||"").trim()}function m(A){let S=h(A.getAttribute("aria-label")||"");if(S)return S;let F=A.getAttribute("aria-labelledby");if(F){let x=F.split(/\s+/),k="";for(let T=0;T<x.length;T++){let I=document.getElementById(x[T]);I&&(k+=" "+(I.textContent||""));}if(h(k))return h(k)}let D=h(A.getAttribute("title")||"");return D||""}let y=document.querySelectorAll("fieldset");for(let A=0;A<y.length&&!(d.length>=30);A++){let S=y[A];if(isWidget(S)||!isVisible(S)||isHiddenFromAT(S))continue;if(m(S)){g.add(S);continue}let F=null,D=S.querySelectorAll("legend");for(let V=0;V<D.length;V++)if(D[V].closest("fieldset")===S){F=D[V];break}let x=F!==null,k=F?h(F.textContent||""):"";if(x&&k){g.add(S);continue}let T=getNearbyContext(S),I=S.querySelectorAll("input, select, textarea"),M=uniqueSel(S);d.push({selector:M,attribute:"aria-label",currentValue:"",issueType:"missing_fieldset_legend",wcag:"1.3.1",context:JSON.stringify({reason:x?"fieldset has empty <legend>":"fieldset missing <legend>",controlCount:I.length,nearbyHeading:T.nearbyHeading,parentTag:T.parentTag}),needsAI:true,outerHtml:(S.outerHTML||"").slice(0,300)}),g.add(S);}let v=document.querySelectorAll('[role="group"], [role="radiogroup"]');for(let A=0;A<v.length&&!(d.length>=30);A++){let S=v[A];if(isWidget(S)||!isVisible(S)||isHiddenFromAT(S)||g.has(S))continue;if(m(S)){g.add(S);continue}let F=S.getAttribute("role")||"",D=getNearbyContext(S),x=S.querySelectorAll("input, select, textarea");if(F==="group"&&S.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 k=uniqueSel(S);d.push({selector:k,attribute:"aria-label",currentValue:"",issueType:"missing_fieldset_legend",wcag:"1.3.1",context:JSON.stringify({reason:'role="'+F+'" container without accessible name',role:F,controlCount:x.length,nearbyHeading:D.nearbyHeading,parentTag:D.parentTag}),needsAI:true,outerHtml:(S.outerHTML||"").slice(0,300)}),g.add(S);}let w={},C=document.querySelectorAll('input[type="radio"], input[type="checkbox"]');for(let A=0;A<C.length;A++){let S=C[A];if(isWidget(S)||!isVisible(S)||isHiddenFromAT(S))continue;let F=S.getAttribute("name")||"";if(!F)continue;let D=S.closest("form"),x=D?D.getAttribute("id")||D.getAttribute("action")||D.tagName:"no-form",k=(S.getAttribute("type")||"").toLowerCase(),T=x+"::"+k+"::"+F;w[T]||(w[T]=[]),w[T].push(S);}let E=Object.keys(w);for(let A=0;A<E.length&&!(d.length>=30);A++){let S=w[E[A]];if(S.length<3)continue;let F=S[0],D=F.closest('fieldset, [role="group"], [role="radiogroup"]'),x=false;if(D){x=true;for(let z=1;z<S.length;z++)if(!D.contains(S[z])){x=false;break}}if(x&&D)continue;let k=F.parentElement;for(;k&&k!==document.body;){let z=true;for(let Y=1;Y<S.length;Y++)if(!k.contains(S[Y])){z=false;break}if(z)break;k=k.parentElement;}if(!k||k===document.body||g.has(k))continue;let T=(F.getAttribute("type")||"").toLowerCase(),I=F.getAttribute("name")||"",M=getNearbyContext(F),V=uniqueSel(k);d.push({selector:V,attribute:"role",currentValue:k.getAttribute("role")||"",issueType:"missing_fieldset_legend",wcag:"1.3.1",context:JSON.stringify({reason:"unwrapped "+T+" group ("+S.length+' inputs share name="'+I+'")',inputType:T,inputCount:S.length,name:I,nearbyHeading:M.nearbyHeading,parentTag:M.parentTag}),needsAI:false,fixValue:T==="radio"?"radiogroup":"group",outerHtml:(k.outerHTML||"").slice(0,300)}),g.add(k);}return d},xh={name:"fieldsetLegend",cap:30,async detect(f){return f.evaluate(aI)}};var iI=()=>{let f=[],d=document.querySelectorAll('header, nav, div, [class*="header"], [class*="navbar"], [class*="sticky"], [role="banner"]'),g=0;for(let h of Array.from(d)){let m=getComputedStyle(h);if(m.display==="none"||m.visibility==="hidden"||m.position!=="sticky"&&m.position!=="fixed")continue;let y=h.getBoundingClientRect();if(y.top>50||y.bottom<=0)continue;let v=Math.round(y.height);v<40||v>240||v>g&&(g=v);}if(g>0){let h=window.scrollX,m=window.scrollY,y=0,v=0;try{let C=[],E=new Set;document.querySelectorAll('a[href^="#"]').forEach(A=>{let S=A.getAttribute("href").slice(1);if(!S)return;let F=document.getElementById(S);F&&!E.has(F)&&(E.add(F),C.push(F));});for(let A of C){if(v>=8)break;let S=getComputedStyle(A);if(S.display==="none"||S.visibility==="hidden")continue;v++,A.scrollIntoView({block:"start"});let F=A.getBoundingClientRect(),D=Math.max(F.height,1);Math.max(0,Math.min(F.bottom,g)-Math.max(F.top,0))/Math.min(D,g)>=.5&&y++;}}catch{}try{window.scrollTo(h,m);}catch{}let w=`scroll-margin-top: ${g+8}px; scroll-padding-top: ${g+8}px;`;v>0&&y>0?f.push({selector:"html",attribute:"style",currentValue:"",issueType:"focus_obscured_by_sticky",wcag:"2.4.11",context:`sticky header height: ${g}px \u2014 ${y}/${v} in-page anchor targets land under it on jump`,needsAI:false,fixValue:w}):v===0&&f.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:w});}return f},Dh={name:"focusObscured",async detect(f){return f.evaluate(iI)}};var _h={name:"focusVisible",cap:40,async detect(f){let d=typeof f.keyboard?.press=="function";try{await f.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 h=getSelection();window[Symbol.for("wa.prevSelection")]=h?Array.from({length:h.rangeCount},(m,y)=>h.getRangeAt(y).cloneRange()):[];});}catch{}if(d)try{await f.keyboard.press("Tab");}catch{}return f.evaluate(g=>{let m=[],y=["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 v=document.querySelectorAll(y),w=Symbol.for("wa.prevFocus"),C=window[w]??null;try{delete window[w];}catch{}for(let E of v){if(m.length>=40)break;if(typeof isWidget=="function"&&isWidget(E)||typeof isHiddenFromAT=="function"&&isHiddenFromAT(E)||typeof isVisible=="function"&&!isVisible(E)||!E.offsetParent&&E.tagName!=="BODY")continue;let A=getComputedStyle(E),S=A.outline,F=A.outlineWidth,D=A.outlineStyle,x=A.boxShadow,k=A.border,T=A.backgroundColor;try{E.focus({preventScroll:!0});}catch{continue}if(document.activeElement!==E)continue;let I=getComputedStyle(E),M=I.outline,V=(I.outlineStyle||"").toLowerCase(),z=parseFloat(I.outlineWidth||"0"),Y=I.boxShadow,q=I.border,P=I.backgroundColor,O=M!==S,B=V!=="none"&&V!=="hidden"&&z>0;if(O&&B||Y!==x&&Y!=="none"&&Y!==""||q!==k||P!==T||parseFloat(F)>0&&D!=="none")continue;let Z=typeof uniqueSel=="function"?uniqueSel(E):E.tagName.toLowerCase();m.push({selector:Z+":focus-visible",attribute:"style",currentValue:D+" "+F,issueType:"focus_not_visible",wcag:"2.4.7",context:`${E.tagName.toLowerCase()} has no visible focus indicator \u2014 outline, box-shadow, border, and background all unchanged on focus`,needsAI:false,fixValue:"outline: 2px solid #2563eb !important;outline-offset: 2px !important;",outerHtml:E.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{C&&C.isConnected&&C.focus({preventScroll:!0});}catch{}try{let E=Symbol.for("wa.prevScroll"),A=window[E];delete window[E],A&&window.scrollTo({left:A[0],top:A[1],behavior:"instant"});}catch{}try{let E=Symbol.for("wa.prevSelection"),A=window[E];delete window[E];let S=getSelection();if(S&&A){S.removeAllRanges();for(let F of A)S.addRange(F);}}catch{}return m},d)}};var oI=()=>{let d=[],g=["new","register","signup","sign-up","sign_up","create","change","reset"],h=["confirm","verify","retype","re-type","repeat","again"];function m(F){if(!F)return false;let D=" "+((F.id||"")+" "+(F.className||"")+" "+(F.getAttribute("name")||"")+" "+(F.getAttribute("action")||"")).toLowerCase()+" ";for(let x=0;x<g.length;x++)if(D.indexOf(g[x])!==-1)return true;return false}function y(F){let D=((F.getAttribute("name")||"")+" "+(F.getAttribute("id")||"")+" "+(F.getAttribute("placeholder")||"")+" "+(F.getAttribute("aria-label")||"")).toLowerCase();for(let x=0;x<h.length;x++)if(D.indexOf(h[x])!==-1)return true;return false}let v=document.querySelectorAll("input[pattern]");for(let F of v){if(d.length>=30)break;let D=F;if(isWidget(D)||isHiddenFromAT(D)||!isVisible(D)||(D.getAttribute("title")||"").trim()||(D.getAttribute("aria-describedby")||"").trim())continue;let T=uniqueSel(D),I=(D.getAttribute("pattern")||"").slice(0,80),M=D.getAttribute("name")||"",V=D.getAttribute("placeholder")||"";d.push({selector:T,attribute:"title",currentValue:"",issueType:"missing_pattern_title",wcag:"3.3.2",context:"pattern: "+I+" | name: "+M+" | placeholder: "+V,needsAI:true,outerHtml:(D.outerHTML||"").slice(0,300)});}let w=document.querySelectorAll('input[type="password"], input[type="Password"]');for(let F of w){if(d.length>=30)break;let D=F;if(isWidget(D)||isHiddenFromAT(D)||!isVisible(D))continue;let x=(D.getAttribute("autocomplete")||"").trim().toLowerCase();if(y(D)){if(x==="new-password")continue;let V=uniqueSel(D);d.push({selector:V,attribute:"autocomplete",currentValue:x,issueType:"missing_autocomplete",wcag:"1.3.5",context:"confirm password field | name: "+(D.getAttribute("name")||"")+" | id: "+(D.getAttribute("id")||""),needsAI:false,fixValue:"new-password",outerHtml:(D.outerHTML||"").slice(0,300)});continue}if(x)continue;let T=D.form||D.closest("form"),I=m(T),M=uniqueSel(D);d.push({selector:M,attribute:"autocomplete",currentValue:"",issueType:"missing_autocomplete",wcag:"1.3.5",context:(I?"new/signup/change password form":"login form")+" | name: "+(D.getAttribute("name")||"")+" | id: "+(D.getAttribute("id")||""),needsAI:false,fixValue:I?"new-password":"current-password",outerHtml:(D.outerHTML||"").slice(0,300)});}let C=document.querySelectorAll("form"),E=/\*|\brequired\b|\bmandatory\b/i;for(let F of C){if(d.length>=30)break;let D=F;if(isWidget(D)||!isVisible(D))continue;let x=D.querySelectorAll("input[required], select[required], textarea[required]");if(!x.length)continue;let k=0;for(let z of x)isVisible(z)&&k++;if(k===0)continue;let T=D.querySelectorAll('input:not([type="hidden"]):not([type="submit"]):not([type="button"]), select, textarea'),I=0;for(let z of T)isVisible(z)&&I++;if(k>=I||(D.getAttribute("data-asw-required-hint")||"").trim())continue;let M=(D.textContent||"").trim();if(E.test(M))continue;let V=uniqueSel(D);d.push({selector:V,attribute:"data-asw-required-hint",currentValue:"",issueType:"missing_required_indicator",wcag:"3.3.2",context:`form has ${k} required input(s) but no visible "*" / "required" / "mandatory" marker`,needsAI:true,outerHtml:(D.outerHTML||"").slice(0,300)});}let A='input[type="submit" i], input[type="image" i], button:not([type]), button[type="submit" i], button[type=""]',S='input:not([type="hidden"]):not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="image"]), select, textarea';for(let F of C){if(d.length>=30)break;let D=F;if(isWidget(D)||!isVisible(D)||isHiddenFromAT(D))continue;let x=[];for(let z of D.querySelectorAll(S))isVisible(z)&&x.push(z);if(x.length===0||D.querySelector(A))continue;let k=D.getAttribute("id");if(k){let z=false;for(let Y of document.querySelectorAll(A))if(Y.getAttribute("form")===k){z=true;break}if(z)continue}if(((D.getAttribute("role")||"").toLowerCase()==="search"||!!D.closest('[role="search"]'))&&x.length===1)continue;let I=x.slice(0,4).map(z=>z.tagName.toLowerCase()+(z.tagName==="INPUT"?"["+(z.getAttribute("type")||"text")+"]":"")).join(", "),M=[];for(let z of D.querySelectorAll('button:not([type="reset" i]), input[type="button" i], [role="button"]')){if(M.length>=3)break;let Y=z;if(!isVisible(Y))continue;let q=((Y.tagName==="INPUT"?Y.getAttribute("value"):Y.textContent)||Y.getAttribute("aria-label")||"").trim().replace(/\s+/g," ").slice(0,30);M.push('"'+q+'"');}if(M.length&&!(D.getAttribute("action")||"").trim())continue;let V=M.length?" Buttons present that are not a submit control (type=button or role=button): "+M.join(", ")+".":"";d.push({selector:uniqueSel(D),attribute:"data-asw-submit-control",currentValue:"",issueType:"form_missing_submit",wcag:"3.2.2",context:`form with ${x.length} visible field(s) (${I}) and no submit control`,needsAI:true,needsReview:true,reviewReason:"WCAG 3.2.2 On Input: this form has "+x.length+" visible field(s) ("+I+") 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."+V,outerHtml:(D.outerHTML||"").slice(0,300)});}return d},Ah={name:"formAttributes",cap:30,async detect(f){return f.evaluate(oI)}};var sI=()=>{let f=document.documentElement;return f?(f.getAttribute("lang")||"").trim()?[]:[{selector:"html",attribute:"lang",currentValue:"",issueType:"missing_document_language",wcag:"3.1.1",context:"Document language not declared",needsAI:false,fixValue:"en"}]:[]},Eh={name:"htmlLang",async detect(f){return f.evaluate(sI)}};var lI=()=>{let f="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],h=[{pattern:"youtube",title:"YouTube video"},{pattern:"youtu.be",title:"YouTube video"},{pattern:"vimeo",title:"Vimeo video"},{pattern:"google.com/maps",title:"Google Maps"},{pattern:"pay.google.com",title:"Google Pay"},{pattern:"recaptcha",title:"reCAPTCHA verification"},{pattern:"facebook",title:"Facebook widget"},{pattern:"twitter",title:"Twitter widget"},{pattern:"x.com",title:"Twitter widget"},{pattern:"instagram",title:"Instagram widget"},{pattern:"calendly",title:"Scheduling widget"}],m=/^(iframe|embed|widget|frame|content|untitled)$/i,y=document.querySelectorAll("iframe");for(let v of y){if(g.length>=50)break;if(v.closest(f))continue;let w=(v.getAttribute("aria-hidden")||"").trim(),C=(v.getAttribute("role")||"").trim().toLowerCase();if(w==="true"||C==="presentation")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 A=(v.getAttribute("title")||"").trim(),S=A.length===0,F=!S&&(A.length<3||m.test(A));if(!S&&!F)continue;let D=(v.getAttribute("src")||"").toLowerCase(),x=uniqueSel(v),k=getNearbyContext(v),T="src: "+D.slice(0,120)+(k.nearbyHeading?" | heading: "+k.nearbyHeading:""),I=false;for(let M of h)if(D.includes(M.pattern)){g.push({selector:x,attribute:"title",currentValue:A,issueType:"missing_label",wcag:"4.1.2",context:T,needsAI:false,fixValue:M.title,outerHtml:v.outerHTML.slice(0,300)}),I=true;break}!I&&S&&g.push({selector:x,attribute:"title",currentValue:A,issueType:"missing_label",wcag:"4.1.2",context:T,needsAI:true,outerHtml:v.outerHTML.slice(0,300)});}return g},Ch={name:"iframeTitle",cap:50,async detect(f){return f.evaluate(lI)}};var uI=()=>{let f="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",d=["hidden","submit","button","reset","image","checkbox","radio","file","range","color"],h=[],m={email:"email",tel:"tel",password:"current-password"},y=[{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"}],v=document.querySelectorAll("input, select, textarea");for(let w of v){if(h.length>=50)break;if(w.closest(f))continue;let C=w,E=(C.getAttribute("type")||"text").toLowerCase();if(d.includes(E)||C.getAttribute("autocomplete")||!isVisible(C))continue;let A="";if(m[E]&&(A=m[E]),!A){let F=(C.getAttribute("name")||"").toLowerCase(),D=(C.getAttribute("id")||"").toLowerCase(),x=(C.getAttribute("placeholder")||"").toLowerCase(),k=F+" "+D+" "+x;for(let T of y)if(k.includes(T.pattern)){A=T.autocomplete;break}}if(!A)continue;if(A==="country"){let F=false;if(C.tagName==="SELECT"){let D=Array.from(C.options).map(x=>(x.value||"").trim()).filter(Boolean);F=D.length>0&&D.every(x=>/^[A-Za-z]{2}$/.test(x));}F||(A="country-name");}let S=uniqueSel(C);h.push({selector:S,attribute:"autocomplete",currentValue:"",issueType:"identify_input_purpose",wcag:"1.3.5",context:"type: "+E+" | name: "+(C.getAttribute("name")||"")+" | id: "+(C.getAttribute("id")||""),needsAI:false,fixValue:A});}return h},Sh={name:"inputPurpose",cap:50,async detect(f){return f.evaluate(uI)}};var cI=()=>{let f="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],h=['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 m(v){let w=v.getBoundingClientRect();if(w.width===0&&w.height===0)return false;let C=-window.scrollX,E=-window.scrollY,A=document.documentElement,S=getComputedStyle(v).position;if(S==="fixed")return false;let F=S==="absolute";for(let D=v.parentElement;D&&D!==document.body&&D!==A;D=D.parentElement){let x=getComputedStyle(D);if(F){if(x.position==="static")continue;F=false;}if(/auto|scroll/.test(x.overflowX+" "+x.overflowY))return false;let k=x.overflowX==="hidden"||x.overflowX==="clip",T=x.overflowY==="hidden"||x.overflowY==="clip";if(!k&&!T)continue;let I=D.getBoundingClientRect();if(k&&(w.right<=I.left||w.left>=I.right)||T&&(w.bottom<=I.top||w.top>=I.bottom))return true;if(S=x.position,S==="fixed")return false;S==="absolute"&&(F=true);}return w.right<=C||w.bottom<=E||w.left>=C+A.scrollWidth||w.top>=E+A.scrollHeight}let y=document.querySelectorAll(h);for(let v of y){if(g.length>=30)break;if(v.closest(f)||!v.hasAttribute("tabindex"))continue;let w=v.getAttribute("tabindex")||"",C=parseInt(w,10);if(!Number.isFinite(C)||C===0||v.getAttribute("aria-disabled")==="true"||v.getAttribute("aria-hidden")==="true"||v.closest('[aria-hidden="true"]')||v.closest("[hidden]"))continue;let E=v.closest('[role="dialog"],[role="alertdialog"],dialog,[role="menu"],[role="listbox"]');if(E&&!(E.hasAttribute("open")||E.getAttribute("aria-modal")==="true"||E.getAttribute("aria-hidden")!=="true")||typeof isVisible=="function"&&!isVisible(v)||C<0&&m(v))continue;let A=(v.getAttribute("role")||"").toLowerCase();if(C<0&&v.closest('[role="tablist"],[role="menu"],[role="menubar"],[role="listbox"],[role="tree"],[role="treegrid"],[role="grid"],[role="radiogroup"],[role="toolbar"]'))continue;let F=typeof uniqueSel=="function"?uniqueSel(v):"",D=typeof getNearbyContext=="function"?getNearbyContext(v):{parentTag:v.tagName.toLowerCase(),nearbyHeading:""},x,k;C<0?(x="keyboard_trap",k="2.1.1"):(x="focus_order_disruption",k="2.4.3");let T=[];T.push("tabindex: "+C),T.push("tag: "+v.tagName.toLowerCase()),A&&T.push("role: "+A),D.nearbyHeading&&T.push("heading: "+D.nearbyHeading),T.push("parent: "+D.parentTag),g.push({selector:F,attribute:"tabindex",currentValue:String(C),issueType:x,wcag:k,context:T.join(" | "),needsAI:false,fixValue:"0",outerHtml:(v.outerHTML||"").slice(0,300)});}return g},kh={name:"keyboardTrap",cap:30,async detect(f){return f.evaluate(cI)}};var dI=()=>{let f="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],m=document.querySelectorAll('button, a[href], [role="button"], [role="link"], input[type="submit"], input[type="button"]');for(let y of Array.from(m)){if(g.length>=40)break;if(y.closest(f)||typeof isVisible=="function"&&!isVisible(y))continue;let v="",w=[],C=[];try{let $=/(?:^|[\s_-])(?:icon|material-icons|material-symbols(?:-\w+)?|fa|fas|far|fab|fal|glyphicon|dashicons)(?:[\s_-]|$)/i,X=/icon|awesome|glyph|material symbols|dashicons/i,K=!1;try{K=X.test(getComputedStyle(y).fontFamily||"");}catch{}let te=document.createTreeWalker(y,NodeFilter.SHOW_TEXT),Z;for(;Z=te.nextNode();){let xe=Z.parentElement;if(!xe)continue;let Ie=(Z.textContent||"").trim();if(!Ie||xe===y&&K)continue;let Ae=!1,Se=!1;for(let je=xe;je&&je!==y;je=je.parentElement){if(je.tagName==="KBD"&&(Se=!0),je.getAttribute("aria-hidden")==="true"){Ae=!0;break}if($.test(je.className||"")||$.test(je.id||"")){Ae=!0;break}try{let Le=getComputedStyle(je);if(Le.display==="none"||Le.visibility==="hidden"){Ae=!0;break}if(parseFloat(Le.opacity||"1")===0){Ae=!0;break}if(X.test(Le.fontFamily||"")){Ae=!0;break}}catch{}}!Ae&&/[\p{L}\p{N}]/u.test(Ie)&&C.push({text:Ie,kbd:Se});}let ne=0,ae=C.length;for(;ne<ae&&C[ne].kbd;)ne++;for(;ae>ne&&C[ae-1].kbd;)ae--;let ue=ne<ae?C.slice(ne,ae):C;for(let xe of ue)w.push(xe.text);v=w.join(" ").trim().toLowerCase();}catch{v=((y.innerText!=null?y.innerText:y.textContent)||"").trim().toLowerCase();}if(!v||!/[\p{L}\p{N}]/u.test(v)||/^\p{L}$/u.test(v))continue;let A=/[\p{L}\p{N}\p{M}]/u,S=(y.getAttribute("aria-label")||"").trim().toLowerCase();if(!S){let $=y.getAttribute("aria-labelledby");$&&(S=(typeof __resolveIdRefs=="function"?__resolveIdRefs($):"").toLowerCase());}if(!S)continue;let F=v.replace(/\s+/g," ").normalize("NFC"),D=S.replace(/\s+/g," ").normalize("NFC"),x=/[\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,k=($,X)=>!$||!A.test($)||x.test($)||x.test(X),T=($,X)=>{if(X<=0)return "";let K=$.charCodeAt(X-1);return K>=56320&&K<=57343&&X>=2?$.slice(X-2,X):$.charAt(X-1)},I=($,X)=>{let K=$.codePointAt(X);return K===void 0?"":String.fromCodePoint(K)},M=F.substring(0,40),V=F.length>=40,z=I(M,0),Y=T(M,M.length),q=false;for(let $=0;!q;){let X=D.indexOf(M,$);if(X<0)break;k(T(D,X),z)&&(V||k(I(D,X+M.length),Y))&&(q=true),$=X+1;}if(q)continue;if(w.length>1){let $=true,X=0;for(let K of w){let te=K.replace(/\s+/g," ").trim().normalize("NFC").toLowerCase();if(!te)continue;let Z=te.slice(0,40),ne=-1;for(let ae=X;;){let ue=D.indexOf(Z,ae);if(ue<0)break;let xe=k(T(D,ue),I(Z,0)),Ie=Z.length>=40||k(I(D,ue+Z.length),T(Z,Z.length));if(xe&&Ie){ne=ue;break}ae=ue+1;}if(ne<0){$=false;break}X=ne+Z.length;}if($)continue}let P=typeof uniqueSel=="function"?uniqueSel(y):"",O=typeof getNearbyContext=="function"?getNearbyContext(y):{parentTag:y.tagName.toLowerCase(),nearbyHeading:""},B=[];B.push("visible: "+v.slice(0,40)),B.push("aria-label: "+S.slice(0,60)),O.nearbyHeading&&B.push("heading: "+O.nearbyHeading),B.push("parent: "+O.parentTag),g.push({selector:P,attribute:"aria-label",currentValue:S,issueType:"label_in_name",wcag:"2.5.3",context:B.join(" | "),needsAI:true,outerHtml:(y.outerHTML||"").slice(0,300)});}return g},Th={name:"labelInName",cap:40,async detect(f){return f.evaluate(dI)}};var fI=()=>{function f(E){let A=E.closest("section,article,div,nav,main,aside,header,footer"),S=A?A.querySelector("h1,h2,h3,h4,h5,h6"):null;return S?(S.textContent||"").trim().slice(0,80):""}let d="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye],[class*=EquallyAI],[id*=ae_],[class*=ae-exclude]",g=50,h=[],m=document.querySelectorAll("div, section, ul, ol");for(let E of m){if(h.length>=g)break;if(E.closest(d)||!isVisible(E)||isHiddenFromAT(E)||E.tagName.toLowerCase()==="nav")continue;let A=E.getAttribute("role");if(A&&A!=="navigation")continue;let S=(E.className&&typeof E.className=="string"?E.className:"").toLowerCase(),F=(E.id||"").toLowerCase();if(!(S.includes("nav")||S.includes("menu")||S.includes("navigation")||F.includes("nav")||F.includes("menu")||F.includes("navigation"))||E.closest('nav, [role="navigation"]'))continue;let x=Array.from(E.querySelectorAll('nav, [role="navigation"]')).filter(z=>isVisible(z)&&!isHiddenFromAT(z)),k=Array.from(E.querySelectorAll("a[href]")).filter(z=>!x.some(Y=>Y.contains(z)));if(k.length<3)continue;let T=E.closest('header, [role="banner"], footer, [role="contentinfo"]'),M=!!T&&Array.from(T.querySelectorAll('nav, [role="navigation"]')).some(z=>!E.contains(z)&&isVisible(z)&&!isHiddenFromAT(z))||x.length>0,V=uniqueSel(E);h.push({selector:V,attribute:"role",currentValue:"",issueType:"missing_landmark",wcag:"1.3.1",context:JSON.stringify({tag:E.tagName.toLowerCase(),reason:'navigation-like container missing role="navigation"',linkCount:k.length,classes:S.slice(0,80)}),needsAI:false,fixValue:"navigation",...M?{needsReview:true,reviewReason:x.length>0?"this container already holds a navigation landmark \u2014 confirm the links outside it are a separate navigation block before adding a second one":"this header/footer region already has a navigation landmark \u2014 confirm these links are a separate navigation block before adding a second one"}:{},outerHtml:E.outerHTML.slice(0,300)});}let y=document.querySelectorAll('aside, [role="complementary"]'),v=Array.from(y).filter(E=>!E.closest(d)&&isVisible(E)&&!isHiddenFromAT(E));if(v.length>1)for(let E of v){if(h.length>=g)break;let A=E.getAttribute("aria-label")||"",S=E.getAttribute("aria-labelledby")||"",F=E.getAttribute("title")||"";if(A.trim()||S.trim()||F.trim())continue;let D=f(E),x=uniqueSel(E);h.push({selector:x,attribute:"aria-label",currentValue:"",issueType:"missing_landmark",wcag:"1.3.1",context:JSON.stringify({tag:E.tagName.toLowerCase(),reason:"multiple complementary landmarks without distinguishing labels",totalAsides:y.length,nearbyHeading:D}),needsAI:true,outerHtml:E.outerHTML.slice(0,300)});}let w=document.querySelectorAll('nav, [role="navigation"]'),C=Array.from(w).filter(E=>!E.closest(d)&&isVisible(E)&&!isHiddenFromAT(E));if(C.length>1)for(let E of C){if(h.length>=g)break;let A=E.getAttribute("aria-label")||"",S=E.getAttribute("aria-labelledby")||"",F=E.getAttribute("title")||"";if(A.trim()||S.trim()||F.trim())continue;let D=f(E),x=uniqueSel(E);h.push({selector:x,attribute:"aria-label",currentValue:"",issueType:"missing_landmark",wcag:"1.3.1",context:JSON.stringify({tag:E.tagName.toLowerCase(),reason:"multiple nav landmarks without distinguishing labels",totalNavs:w.length,nearbyHeading:D}),needsAI:true,outerHtml:E.outerHTML.slice(0,300)});}return h},Rh={name:"landmarkRoles",cap:50,async detect(f){return f.evaluate(fI)}};var pI=()=>{let f="[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"],h=[];function m(A){if(!A)return "";let S=A.split("#")[0];return S.length>1&&S.charAt(S.length-1)==="/"&&(S=S.substring(0,S.length-1)),S}function y(A){let S=(A.getAttribute("aria-label")||"").trim();return S||(A.textContent||"").trim().replace(/\s+/g," ")}function v(A){return !!A.closest('nav, [role="navigation"], [role="menubar"], [class*=breadcrumb], [aria-label*="breadcrumb" i]')}let w={},C=document.querySelectorAll("a[href]");for(let A=0;A<C.length;A++){let S=C[A];if(S.closest(f)||S.getAttribute("aria-hidden")==="true"||!isVisible(S))continue;let F=S.getAttribute("href")||"";if(!F)continue;let D=F.toLowerCase();if(D.charAt(0)==="#"||D.indexOf("javascript:")===0||D.indexOf("mailto:")===0||D.indexOf("tel:")===0)continue;let x=S.href||F,k=m(x);if(!k||v(S))continue;let T=(S.textContent||"").trim(),I=!!S.querySelector("img, svg, picture");if(!T&&I)continue;let M=y(S);if(!M)continue;let V=M.toLowerCase();V===D||V===x.toLowerCase()||(w[k]||(w[k]=[]),w[k].push(S));}let E=Object.keys(w);for(let A=0;A<E.length&&!(h.length>=30);A++){let S=w[E[A]];if(!S||S.length<2)continue;let F={},D="";for(let I=0;I<S.length;I++){let M=y(S[I]),V=M.toLowerCase();F[V]=true,M.length>D.length&&(D=M);}if(Object.keys(F).length<2)continue;let k=D.toLowerCase().trim();if(k.length<5)continue;let T=false;for(let I=0;I<g.length;I++)if(k===g[I]){T=true;break}if(!T)for(let I=0;I<S.length&&!(h.length>=30);I++){let M=S[I],V=y(M);if(V.toLowerCase()===k)continue;let z=uniqueSel(M);h.push({selector:z,attribute:"aria-label",currentValue:V,issueType:"link_consistency",wcag:"3.2.4",context:"Same href as "+S.length+' link(s) on this page with different text (e.g. "'+D.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:M.outerHTML.slice(0,300)});}}return h},Fh={name:"linkConsistency",cap:30,async detect(f){return f.evaluate(pI)}};var mI=()=>{let d=[],g=[".pdf",".doc",".docx",".xls",".xlsx",".zip",".csv",".ppt",".pptx",".txt",".rtf",".epub"],h={".pdf":"PDF",".doc":"Word document",".docx":"Word document",".xls":"Excel spreadsheet",".xlsx":"Excel spreadsheet",".zip":"ZIP archive",".csv":"CSV file",".ppt":"PowerPoint",".pptx":"PowerPoint",".txt":"text file",".rtf":"RTF document",".epub":"EPUB file"},m="";try{m=window.location&&window.location.hostname||"";}catch{m="";}m=(m||"").toLowerCase();function y(x,k){if(!x||!k)return false;if(x===k||x.endsWith("."+k)||k.endsWith("."+x))return true;let T=I=>{let M=I.split(".");if(M.length<=2)return I;let V=M[M.length-1],z=M[M.length-2],Y=["co","com","net","org","ac","gov","edu"],q=V.length===2&&Y.indexOf(z)>=0?3:2;return M.slice(-q).join(".")};return T(x)===T(k)}function v(x){return x.indexOf("www.")===0?x.slice(4):x}function w(x){if(!x)return "";let k=x.toLowerCase();if(k.charAt(0)==="#"||k.charAt(0)==="/"||k.charAt(0)==="?"||k.indexOf("javascript:")===0||k.indexOf("mailto:")===0||k.indexOf("tel:")===0)return "";try{return (new window.URL(x,window.location.href).hostname||"").toLowerCase()}catch{return ""}}function C(x){if(!x)return "";let k=x,T=k.indexOf("?");T>=0&&(k=k.slice(0,T));let I=k.indexOf("#");I>=0&&(k=k.slice(0,I)),k=k.toLowerCase();for(let M=0;M<g.length;M++){let V=g[M];if(k.length>=V.length&&k.slice(k.length-V.length)===V)return V}return ""}function E(x){let k=[],T=(x.getAttribute("aria-label")||"").trim();T&&k.push(T);let I=(x.getAttribute("title")||"").trim();I&&k.push(I);let M=x.getAttribute("aria-labelledby");if(M)try{let V=typeof __resolveIdRefs=="function"?__resolveIdRefs(M):"";V&&k.push(V);}catch{}return k.push((x.textContent||"").trim()),k.join(" ").toLowerCase()}function A(x,k,T){let I="";try{typeof getAccessibleName=="function"&&(I=(getAccessibleName(x)||"").trim());}catch{}let M=(k||T||I||x.textContent||"").replace(/\s+/g," ").trim();return M||(x.getAttribute("href")||"").trim().replace(/^https?:\/\//i,"").replace(/\/+$/,"")}function S(x,k){let I=200-k.length;I<8&&(I=8);let M=x;if(M.length>I){let V=M.slice(0,I),z=V.lastIndexOf(" ");z>I*.6&&(V=V.slice(0,z)),M=V.replace(/[\s…,;:.\-]+$/,"")+"\u2026";}return (M+k).slice(0,200)}let F=document.querySelectorAll("a"),D=F.length;for(let x=0;x<D&&!(d.length>=50);x++){let k=F[x];if(!k||isWidget(k)||k.getAttribute("aria-hidden")==="true")continue;try{if(k.closest&&k.closest('[aria-hidden="true"]'))continue}catch{}if(!isVisible(k))continue;let T=k.getAttribute("href");if(T==null)continue;let I=String(T).trim();if(!I)continue;let M=I.toLowerCase(),V=E(k),z=(k.getAttribute("rel")||"").toLowerCase(),Y=uniqueSel(k),q=(k.textContent||"").trim().slice(0,80),P=(k.getAttribute("target")||"").toLowerCase(),O=(k.outerHTML||"").slice(0,300),B=I==="#",$=M.indexOf("javascript:")===0;if((B||$)&&(k.getAttribute("role")||"").toLowerCase()!=="button"){let ae=k.hasAttribute&&k.hasAttribute("onclick"),ue=k.hasAttribute&&(k.hasAttribute("data-action")||k.hasAttribute("data-click")||k.hasAttribute("data-toggle")||k.hasAttribute("data-target")),xe=typeof k.onclick=="function",Ie=ae||ue||xe,Ae=[];Ae.push("href: "+I),q&&Ae.push("text: "+q),Ae.push(Ie?"has click handler (should be <button> or role=button)":"dead link \u2014 remove or replace with navigation");let Se='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"]',je=Te=>{if(getComputedStyle(Te).visibility==="hidden")return false;for(let Bt=Te;Bt&&Bt.nodeType===1;Bt=Bt.parentElement)if(getComputedStyle(Bt).display==="none")return false;return true},Le=Array.prototype.some.call(k.querySelectorAll(Se),Te=>je(Te)&&!isHiddenFromAT(Te));Ie&&!Le&&d.push({selector:Y,attribute:"role",currentValue:I,issueType:"placeholder_link",wcag:"2.4.4",context:Ae.join(" | "),needsAI:false,fixValue:"button",outerHtml:O});continue}if(I.charAt(0)==="#"&&I.length>1){let ne=I.slice(1),ae=ne;try{ae=decodeURIComponent(ne);}catch{ae=ne;}let ue=null;try{ue=document.getElementById(ae);}catch{ue=null;}if(!ue)try{ue=document.querySelector('[name="'+ae.replace(/"/g,'\\"')+'"]');}catch{ue=null;}continue}let X=C(M);if(X){let ne=k.hasAttribute&&k.hasAttribute("download"),ae=(h[X]||X).toLowerCase(),ue=V.indexOf(X)>=0||V.indexOf(ae)>=0||V.indexOf("download")>=0;if(!ne&&!ue){let xe=A(k,(k.getAttribute("aria-label")||"").trim(),""),Ie=S(xe," ("+(h[X]||X)+" download)");d.push({selector:Y,attribute:"aria-label",currentValue:(k.getAttribute("aria-label")||"").trim(),issueType:"download_link_warning",wcag:"3.2.5",context:"download link \u2014 "+X+" | href: "+I.slice(0,120),needsAI:false,fixValue:Ie,outerHtml:O});continue}}let K=w(I),te=M.indexOf("http://")===0||M.indexOf("https://")===0||M.indexOf("//")===0,Z=!!K&&!!m&&!y(v(K),v(m));if(P==="_blank"){let ne=z.indexOf("noopener")>=0||z.indexOf("noreferrer")>=0,ae=V.indexOf("new window")>=0||V.indexOf("new tab")>=0||V.indexOf("opens in")>=0;if(!ae){let ue=(k.getAttribute("aria-label")||"").trim(),xe="",Ie=k.getAttribute("aria-labelledby")||"";if(!ue&&Ie)try{typeof __resolveIdRefs=="function"&&(xe=(__resolveIdRefs(Ie)||"").trim());}catch{}let Ae=A(k,ue,xe),Se=S(Ae," (opens in new window)"),je=[];ne||je.push("missing rel=noopener"),ae||je.push('missing "new window" hint'),je.push("href: "+I.slice(0,120)),d.push({selector:Y,attribute:"aria-label",currentValue:(k.getAttribute("aria-label")||"").trim(),issueType:"new_window_link",wcag:"3.2.5",context:je.join(" | "),needsAI:false,fixValue:Se,outerHtml:O});continue}}if(Z&&te){let ne=z.indexOf("external")>=0,ae=V.indexOf("external")>=0||V.indexOf("opens in")>=0||V.indexOf("new window")>=0||V.indexOf("new tab")>=0;if(!ne&&!ae){let ue=(k.getAttribute("aria-label")||"").trim(),xe="",Ie=k.getAttribute("aria-labelledby")||"";if(!ue&&Ie)try{typeof __resolveIdRefs=="function"&&(xe=(__resolveIdRefs(Ie)||"").trim());}catch{}let Ae=A(k,ue,xe),Se=S(Ae," (external link)");d.push({selector:Y,attribute:"aria-label",currentValue:(k.getAttribute("aria-label")||"").trim(),issueType:"external_link_warning",wcag:"3.2.5",context:"external: "+K+" (page: "+m+") | href: "+I.slice(0,120),needsAI:false,fixValue:Se,outerHtml:O});}}}return d},Ih={name:"linkWarnings",cap:50,async detect(f){return f.evaluate(mI)}};var hI=()=>{let f="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye],[class*=ae-exclude],[id*=ae_app],[id*=ae_],[class*=EquallyAI]",g=[],h=new Set,m=document.querySelectorAll('main, [role="main"]'),y=[];return m.forEach(v=>{let w=getComputedStyle(v);w.display!=="none"&&w.visibility!=="hidden"&&y.push(v);}),m.forEach(v=>{if(g.length>=10||v.closest(f)||v.getAttribute("aria-hidden")!=="true")return;let w=getComputedStyle(v);if(w.display==="none"||w.visibility==="hidden"||v.closest('[role="dialog"]')||v.closest('[role="alertdialog"]')||v.closest("dialog")||y.some(S=>S!==v&&S.getAttribute("aria-hidden")!=="true"))return;let E=v.parentElement;for(;E&&E!==document.body&&E!==document.documentElement;){if(E.getAttribute("aria-hidden")==="true")return;E=E.parentElement;}let A=uniqueSel(v);h.has(A)||(h.add(A),g.push({selector:A,attribute:"aria-hidden",currentValue:"true",issueType:"main_content_hidden",wcag:"4.1.2",context:JSON.stringify({tag:v.tagName.toLowerCase(),role:v.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:(v.outerHTML||"").slice(0,300)}));}),g},Lh={name:"mainContentHidden",cap:10,async detect(f){return f.evaluate(hI)}};var gI=()=>{let d=[];function g(v){return !!(!v||isWidget(v)||(v.getAttribute("aria-hidden")||"").trim().toLowerCase()==="true")}function h(v){return (v.outerHTML||"").slice(0,300)}let m=document.querySelectorAll("video");for(let v of m){if(d.length>=10)break;let w=v;if(g(w))continue;let C=w.hasAttribute("controls"),E=w.hasAttribute("autoplay"),A=w.hasAttribute("muted"),S=E||!w.paused&&!w.ended,F=typeof isVisible=="function"?isVisible(w):true;if(!C&&S&&F&&(d.push({selector:uniqueSel(w),attribute:"controls",currentValue:"",issueType:"missing_media_controls",wcag:"2.2.2",context:"video element missing player controls",needsAI:false,fixValue:"",outerHtml:h(w)}),d.length>=10))break;E&&!A&&d.push({selector:uniqueSel(w),attribute:"muted",currentValue:"",issueType:"unsafe_autoplay",wcag:"1.4.2",context:"video autoplays with sound \u2014 add muted",needsAI:false,fixValue:"",outerHtml:h(w)});}let y=document.querySelectorAll("audio");for(let v of y){if(d.length>=10)break;let w=v;if(g(w))continue;let C=w.hasAttribute("controls"),E=w.hasAttribute("autoplay"),A=E||!w.paused&&!w.ended;if(!C&&A&&(d.push({selector:uniqueSel(w),attribute:"controls",currentValue:"",issueType:"missing_media_controls",wcag:"2.2.2",context:"audio element missing player controls",needsAI:false,fixValue:"",outerHtml:h(w)}),d.length>=10))break;E&&d.push({selector:uniqueSel(w),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:h(w)});}return d},Ph={name:"mediaControls",cap:10,async detect(f){return f.evaluate(gI)}};var vI=()=>{let f="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],h=/^(image|photo|img|picture|pic|untitled|banner|hero|\d{1,2})$/i,m=/^(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,y=document.querySelectorAll("img");for(let v of y){if(g.length>=50)break;if(v.closest(f))continue;let w=v.getAttribute("src")||"",C=v.getAttribute("alt");if(w.startsWith("data:"))continue;let E=v.naturalWidth||v.width,A=v.naturalHeight||v.height;if(E<=3&&A<=3&&E>0&&A>0||E<=2&&A<=2)continue;let S=v.getBoundingClientRect();if(S.width<=2&&S.height<=2||!isVisible(v)||v.getAttribute("role")==="presentation"||v.getAttribute("role")==="none"||v.getAttribute("aria-hidden")==="true"||v.closest('[aria-hidden="true"]'))continue;let F=(v.getAttribute("aria-label")||"").trim(),D=(v.getAttribute("aria-labelledby")||"").trim();if(F||D)continue;let x=v.getBoundingClientRect(),k=x.width>0&&x.width<=30&&x.height<=30,T=!!v.closest('a, button, [role="button"], [role="link"]');if(k&&!T&&C===null){let Y=uniqueSel(v);g.push({selector:Y,attribute:"aria-hidden",currentValue:"",issueType:"decorative_icon",wcag:"1.1.1",context:"small icon ("+Math.round(x.width)+"x"+Math.round(x.height)+"px) \u2014 likely decorative",needsAI:false,fixValue:"true"});continue}if(C===null){let Y=uniqueSel(v),q=getNearbyContext(v),P=[],O=v.closest("figure");if(O){let X=O.querySelector("figcaption");X&&P.push("figcaption: "+(X.textContent||"").trim().slice(0,80));}q.nearbyHeading&&P.push("heading: "+q.nearbyHeading);let B=v.closest("a");if(B){let X=B.getAttribute("href")||"",K=(B.textContent||"").trim().replace(/\s+/g," ");K&&P.push("link text: "+K.slice(0,60)),X&&P.push("link href: "+X.slice(0,80));}w&&P.push("src: "+w.slice(0,120)),P.push("parent: "+q.parentTag);let $=w;try{$=new URL(w,document.baseURI).href;}catch{}g.push({selector:Y,attribute:"alt",currentValue:"",issueType:"missing_alt",wcag:"1.1.1",context:P.join(" | "),needsAI:true,imageSrc:$,outerHtml:v.outerHTML.slice(0,300)});continue}let I=(C||"").trim();if(I==="")continue;let M=/\.(jpg|jpeg|png|gif|webp|svg|bmp|ico)$/i.test(I),V=h.test(I),z=m.test(I);if(M||V||z){let Y=uniqueSel(v),q=getNearbyContext(v),P=[];q.nearbyHeading&&P.push("heading: "+q.nearbyHeading),w&&P.push("src: "+w.slice(0,120)),P.push("parent: "+q.parentTag);let O=w;try{O=new URL(w,document.baseURI).href;}catch{}g.push({selector:Y,attribute:"alt",currentValue:I,issueType:"missing_alt",wcag:"1.1.1",context:P.join(" | "),needsAI:true,imageSrc:O,outerHtml:v.outerHTML.slice(0,300)});}}return g},Mh={name:"missingAlt",cap:50,async detect(f){return f.evaluate(vI)}};var bI=()=>{let f="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye],[class*=EquallyAI],[id*=ae_],[class*=ae-exclude]",d='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"],h=x=>{if(getComputedStyle(x).visibility==="hidden")return false;for(let k=x;k&&k.nodeType===1;k=k.parentElement)if(getComputedStyle(k).display==="none")return false;return true},m=x=>Array.prototype.some.call(x.querySelectorAll("a:not([href])"),k=>h(k)&&!isHiddenFromAT(k)&&g.some(T=>k.hasAttribute(T))),y=x=>Array.prototype.some.call(x.querySelectorAll(d),k=>h(k)&&!isHiddenFromAT(k)),w=[];return document.querySelectorAll("div[onclick], span[onclick]").forEach(x=>{if(w.length>=50||x.closest(f)||!isVisible(x)||isHiddenFromAT(x)||y(x)||m(x))return;let k=x.getAttribute("role");if(k==="button"||k==="link"||k==="tab"||k==="menuitem"||k==="checkbox"||k==="radio")return;let T=uniqueSel(x),I=x.outerHTML.slice(0,300);w.push({selector:T,attribute:"role",currentValue:k||"",issueType:"missing_button_role",wcag:"4.1.2",context:JSON.stringify({tag:x.tagName.toLowerCase(),hasOnclick:true,currentTabindex:x.getAttribute("tabindex")}),needsAI:false,fixValue:"button",outerHtml:I}),x.getAttribute("tabindex")===null&&w.push({selector:T,attribute:"tabindex",currentValue:"",issueType:"missing_button_role",wcag:"4.1.2",context:JSON.stringify({tag:x.tagName.toLowerCase(),supplementary:'tabindex needed alongside role="button"'}),needsAI:false,fixValue:"0",outerHtml:I});}),document.querySelectorAll('a:not([href]), a[href=""], a[href="#"], a[href="javascript:void(0)"], a[href="javascript:;"]').forEach(x=>{if(w.length>=50||x.closest(f)||!isVisible(x)||isHiddenFromAT(x)||x.getAttribute("role"))return;let T=x.hasAttribute("onclick"),I=x.getAttribute("data-action")||x.getAttribute("ng-click")||x.getAttribute("@click")||x.getAttribute("v-on:click");if(!T&&!I||y(x))return;let M=uniqueSel(x),V=x.outerHTML.slice(0,300);w.push({selector:M,attribute:"role",currentValue:"",issueType:"missing_button_role",wcag:"4.1.2",context:JSON.stringify({tag:"a",href:x.getAttribute("href")||"",hasOnclick:T}),needsAI:false,fixValue:"button",outerHtml:V});}),document.querySelectorAll('a[href^="#"]:not([href="#"]), a[href^="javascript:"]').forEach(x=>{if(w.length>=50||x.closest(f)||!isVisible(x)||isHiddenFromAT(x)||x.getAttribute("role"))return;let T=x.getAttribute("href")||"",I=false;if(T.startsWith("#")&&T.length>1){if(T.charAt(1)==="/")return;let Y=T.slice(1);if(document.getElementById(Y))return;try{if(document.querySelector('[name="'+CSS.escape(Y)+'"]'))return}catch{}I=true;}let M=T.startsWith("javascript:")||x.hasAttribute("onclick")||x.getAttribute("data-action")||x.getAttribute("ng-click")||x.getAttribute("@click")||x.getAttribute("v-on:click")||x.hasAttribute("aria-haspopup")||x.hasAttribute("aria-expanded")||x.hasAttribute("aria-controls"),V=I&&!M;if(y(x))return;let z=uniqueSel(x);w.push({selector:z,attribute:"role",currentValue:"",issueType:"missing_button_role",wcag:"4.1.2",context:JSON.stringify({tag:"a",href:T,reason:"non-navigating link acting as button"}),needsAI:false,fixValue:"button",outerHtml:x.outerHTML.slice(0,300),...V?{needsReview:true,reviewReason:"fragment href has no matching target and no click-behavior evidence \u2014 may be a dead link, not a button"}:{}});}),document.querySelectorAll("nav, ol, ul").forEach(x=>{if(w.length>=50||x.closest(f)||!isVisible(x)||isHiddenFromAT(x))return;let k=(x.className&&typeof x.className=="string"?x.className:"").toLowerCase(),T=(x.id||"").toLowerCase();if(!k.includes("breadcrumb")&&!k.includes("crumb")&&!T.includes("breadcrumb")&&!T.includes("crumb"))return;let I=x.querySelectorAll("a");if(I.length<2)return;let M=(x.getAttribute("aria-label")||"").toLowerCase(),V=x.getAttribute("role");if(M.includes("breadcrumb")||M.includes("crumb")||V==="navigation"&&M)return;let z=uniqueSel(x);w.push({selector:z,attribute:"aria-label",currentValue:M,issueType:"missing_semantic_role",wcag:"4.1.2",context:JSON.stringify({tag:x.tagName.toLowerCase(),reason:"breadcrumb navigation missing aria-label",linkCount:I.length}),needsAI:false,fixValue:"Breadcrumb",outerHtml:x.outerHTML.slice(0,300)});}),document.querySelectorAll("form, section, div").forEach(x=>{if(w.length>=50||x.closest(f)||!isVisible(x)||isHiddenFromAT(x))return;let k=(x.className&&typeof x.className=="string"?x.className:"").toLowerCase(),T=(x.id||"").toLowerCase();if(!k.includes("search")&&!T.includes("search")||!x.querySelector('input[type="search"], input[type="text"], input[name*="search"], input[placeholder*="earch"]'))return;let M=x.getAttribute("role");if(M==="search"||x.closest('[role="search"]')||x.querySelector('[role="search"]')||Array.prototype.some.call(x.querySelectorAll("form, section, div"),Y=>{let q=(Y.className&&typeof Y.className=="string"?Y.className:"").toLowerCase(),P=(Y.id||"").toLowerCase();return !q.includes("search")&&!P.includes("search")||Y.getAttribute("role")==="search"?false:!!Y.querySelector('input[type="search"], input[type="text"], input[name*="search"], input[placeholder*="earch"]')}))return;let z=uniqueSel(x);w.push({selector:z,attribute:"role",currentValue:M||"",issueType:"missing_semantic_role",wcag:"4.1.2",context:JSON.stringify({tag:x.tagName.toLowerCase(),reason:'search section missing role="search"'}),needsAI:false,fixValue:"search",outerHtml:x.outerHTML.slice(0,300)});}),document.querySelectorAll('[role="menu"], [role="menubar"]').forEach(x=>{if(x.closest(f))return;let k=x.getAttribute("role")||"menu",T=Array.from(x.querySelectorAll("a")).filter(M=>{if(!isVisible(M)||isHiddenFromAT(M))return false;let V=M.getAttribute("role");return V!=="menuitem"&&V!=="menuitemcheckbox"&&V!=="menuitemradio"});if(T.length===0)return;let I=uniqueSel(x);w.push({selector:I,attribute:"role",currentValue:k,issueType:"missing_semantic_role",wcag:"4.1.2",context:JSON.stringify({tag:x.tagName.toLowerCase(),reason:`${T.length} link(s) inside role="${k}" without menuitem roles`,sample:T.slice(0,3).map(M=>(M.textContent||"").trim().slice(0,40))}),message:`container role="${k}" holds ${T.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:x.outerHTML.slice(0,300)});}),w},Oh={name:"missingRoles",cap:50,async detect(f){return f.evaluate(bI)}};var yI=()=>{let f="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye]",g=[],h={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[m,y]of Object.entries(h))document.querySelectorAll(y).forEach(w=>{if(g.length>=30||w.closest(f)||typeof isVisible=="function"&&!isVisible(w))return;let C=w.parentElement,E=null;for(;C&&C!==document.body;){if(C.matches(y)){E=C;break}C=C.parentElement;}if((m==="banner"||m==="contentinfo")&&w.closest("article, section, aside, main, nav")||!E||w.getAttribute("aria-label")?.trim()||w.getAttribute("aria-labelledby")?.trim())return;let A=typeof uniqueSel=="function"?uniqueSel(w):"",S=typeof getNearbyContext=="function"?getNearbyContext(w):{nearbyHeading:""};g.push({selector:A,attribute:"role",currentValue:w.getAttribute("role")||w.tagName.toLowerCase(),issueType:"nested_landmark",wcag:"1.3.1",context:`nested-in: ${m} | tag: ${w.tagName.toLowerCase()} | heading: ${S.nearbyHeading||""}`,needsAI:false,fixValue:"generic",outerHtml:(w.outerHTML||"").slice(0,300)});});return g},Nh={name:"nestedLandmarks",cap:30,async detect(f){return f.evaluate(yI)}};var wI=()=>{let d=[],g=q=>typeof parseCssColor=="function"?parseCssColor(q):null,h=(q,P,O)=>typeof relLuminance=="function"?relLuminance(q,P,O):0,y=(q,P)=>typeof contrastRatio=="function"?contrastRatio(q,P):1;function v(q){let P=document.documentElement,O=q.parentElement,B=0;for(;O&&O!==P&&B<6;){let te=getComputedStyle(O).backgroundColor||"",Z=g(te);if(Z&&Z[3]>.5)return [Z[0],Z[1],Z[2]];O=O.parentElement,B++;}let $=document.body;if(O&&O!==P&&$&&$.contains(O)){let te=g(getComputedStyle($).backgroundColor||"");if(te&&te[3]>.5)return [te[0],te[1],te[2]]}let X=g(getComputedStyle(P).backgroundColor||""),K=X?Math.min(X[3],1):0;return !X||K<=0?[255,255,255]:[Math.round(X[0]*K+255*(1-K)),Math.round(X[1]*K+255*(1-K)),Math.round(X[2]*K+255*(1-K))]}function w(q,P,O){return "#"+[q,P,O].map(B=>{let $=Math.max(0,Math.min(255,Math.round(B))).toString(16);return $.length===1?"0"+$:$}).join("")}function C(q,P,O){let B=h(P[0],P[1],P[2])>.5;return E(q,P,O,B)||E(q,P,O,!B)}function E(q,P,O,B){let $=0,X=1,K=null;for(let te=0;te<20;te++){let Z=($+X)/2,ne=B?[q[0]*(1-Z),q[1]*(1-Z),q[2]*(1-Z)]:[q[0]+(255-q[0])*Z,q[1]+(255-q[1])*Z,q[2]+(255-q[2])*Z],ae=[Math.round(ne[0]),Math.round(ne[1]),Math.round(ne[2])];y(ae,P)>=O?(K=ae,X=Z):$=Z;}return K}let A=(q,P)=>{let O=Math.max(0,Math.min(1,q[3]));return [q[0]*O+P[0]*(1-O),q[1]*O+P[1]*(1-O),q[2]*O+P[2]*(1-O)]};function S(q,P){let O=q.boxShadow||"";if(!O||O==="none")return null;let B=[],$=0,X="";for(let te of O)te==="("&&$++,te===")"&&$--,te===","&&$===0?(B.push(X),X=""):X+=te;X&&B.push(X);let K=null;for(let te of B){let Z=te.match(/rgba?\([^)]*\)/),ne=Z?g(Z[0]):null;if(!ne||ne[3]<=0||(te.replace(/rgba?\([^)]*\)/,"").replace("inset","").trim().split(/\s+/).map(Ie=>parseFloat(Ie)).filter(Ie=>Number.isFinite(Ie))[3]??0)<=0)continue;let xe=y(A(ne,P),P);(K===null||xe>K)&&(K=xe);}return K}function F(q){let P=getComputedStyle(q),O=v(q),B=null,$=parseFloat(P.borderTopWidth||"0"),X=(P.borderTopStyle||"").toLowerCase(),K=g(P.borderTopColor||"");$>0&&X!=="none"&&X!=="hidden"&&K&&K[3]>0&&(B=y(A(K,O),O));let te=g(P.backgroundColor||"");if(te&&te[3]>0){let ne=y(A(te,O),O);(B===null||ne>B)&&(B=ne);}let Z=S(P,O);return Z!==null&&(B===null||Z>B)&&(B=Z),B}function D(q){let P=q.getBoundingClientRect();if(P.width*P.height<=0)return null;let O='input, select, textarea, button, [role="button"], svg, img, i, label',B=q.parentElement,$=null;for(let X=0;B&&X<3&&!(B===document.body||B===document.documentElement);X++,B=B.parentElement){let K=B.getBoundingClientRect();if(K.width*K.height>4*P.width*P.height+1||K.height>Math.max(2.5*P.height,P.height+40))break;let te=false,Z=document.createTreeWalker(B,4),ne=Z.nextNode();for(;ne;){if((ne.textContent||"").trim()&&ne.parentElement&&!ne.parentElement.closest(O)&&isVisible(ne.parentElement)){te=true;break}ne=Z.nextNode();}if(te)break;let ae=F(B);ae!==null&&ae>1.01&&($===null||ae>$)&&($=ae);}return $}let x=q=>/^(img|picture|video|canvas|object|embed|iframe)$/.test((q.tagName||"").toLowerCase())||(getComputedStyle(q).backgroundImage||"none")!=="none",k=(q,P)=>{let O=Math.min(q.right,P.right)-Math.max(q.left,P.left),B=Math.min(q.bottom,P.bottom)-Math.max(q.top,P.top);return O>0&&B>0&&O*B/(q.width*q.height)>=.5},T=null;function I(q){let P=q.getBoundingClientRect();if(P.width*P.height<=0)return false;let O=P.left+P.width/2,B=P.top+P.height/2;if(O>=0&&B>=0&&O<window.innerWidth&&B<window.innerHeight&&typeof document.elementsFromPoint=="function"){let X=document.elementsFromPoint(O,B),K=X.indexOf(q);if(K>=0){for(let te of X.slice(K+1)){if(x(te))return true;let Z=g(getComputedStyle(te).backgroundColor||"");if(Z&&Z[3]>.5)return false}return false}}for(let X=q.parentElement,K=0;X&&K<8;X=X.parentElement,K++){let te=getComputedStyle(X);if((te.backgroundImage||"none")!=="none")return true;let Z=g(te.backgroundColor||"");if(Z&&Z[3]>.5||X===document.documentElement)break}T||(T=Array.from(document.querySelectorAll("img, picture, video, canvas, object, embed, iframe")));for(let X of T)if(!(X===q||q.contains(X)||X.contains(q))&&k(P,X.getBoundingClientRect())&&isVisible(X))return true;let $=q.offsetParent||q.parentElement;if($&&$!==document.body&&$!==document.documentElement){let X=$.getElementsByTagName("*");for(let K=0;K<X.length&&K<400;K++){let te=X[K];if(!(te===q||q.contains(te)||te.contains(q))&&k(P,te.getBoundingClientRect())&&(getComputedStyle(te).backgroundImage||"none")!=="none"&&isVisible(te))return true}}return false}function M(q){for(let $=q.parentElement;$&&$.nodeType===1;$=$.parentElement)if(parseFloat(getComputedStyle($).opacity||"1")<1)return false;let P=$=>{if($.tagName.toLowerCase()!=="svg"){let te=g(getComputedStyle($).color||"");return te&&te[3]>0?[te]:null}let X=[],K=Array.from($.querySelectorAll("path, rect, circle, ellipse, polygon, polyline, line, text, use"));for(let te of K){let Z=te.getBoundingClientRect();if(Z.width===0&&Z.height===0)continue;let ne=getComputedStyle(te);if(ne.display==="none"||ne.visibility==="hidden"||parseFloat(ne.opacity||"1")<1)return null;for(let[ae,ue]of [[ne.fill,ne.fillOpacity],[ne.stroke,parseFloat(ne.strokeWidth||"0")>0?ne.strokeOpacity:"0"]]){let xe=String(ae||"");if(!xe||xe==="none"||parseFloat(String(ue??"1"))===0)continue;if(xe.startsWith("url"))return null;let Ie=g(xe);if(!Ie)return null;Ie[3]*=parseFloat(String(ue??"1")),Ie[3]>0&&X.push(Ie);}}return X.length?X:null},O=[];for(let $=0;$<=255;$+=17)O.push($);let B=Array.from(q.querySelectorAll('svg, i[class], [class*="icon"]'));for(let $ of B){let X=$.getBoundingClientRect();if(X.width*X.height===0)continue;let K=getComputedStyle($);if(K.display==="none"||K.visibility==="hidden")continue;let te=P($);if(!te)continue;let Z=null,ne=1,ae=true;for(let Ie=$;Ie;Ie=Ie===q?null:Ie.parentElement){let Ae=getComputedStyle(Ie),Se=parseFloat(Ae.opacity||"1");if(!Z){let je=g(Ae.backgroundColor||""),Le=String(Ae.backgroundClip||"border-box").toLowerCase();if(!(String(Ae.backgroundImage||"none")==="none")){ae=false;break}if(je&&je[3]>=1&&Le==="border-box")Z=[je[0],je[1],je[2]];else if(Se<1){ae=false;break}}Z&&(ne*=Se);}if(!Z||!ae)continue;let ue=Z,xe=1/0;for(let Ie of te){let Ae=A(Ie,ue);for(let Se of O)for(let je of O)for(let Le of O){let Te=[Se,je,Le],Bt=A([Ae[0],Ae[1],Ae[2],ne],Te),dn=A([ue[0],ue[1],ue[2],ne],Te),Gr=y(Bt,dn);Gr<xe&&(xe=Gr);}}if(xe>=3)return true}return false}let V="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 z(q){let P=q.tagName.toLowerCase(),O=P==="input"||P==="select"||P==="textarea"?P+" field":P;d.push({selector:uniqueSel(q),message:"non-text contrast: "+O+" over an image backdrop \u2014 "+V,attribute:"style",currentValue:"?",issueType:"non_text_contrast_insufficient",wcag:"1.4.11",context:P+" backdrop=image needs=3",needsAI:false,needsReview:true,reviewReason:V,outerHtml:q.outerHTML.slice(0,200)});}let Y=document.querySelectorAll('input:not([type="hidden"]), select, textarea, button, [role="button"], [role="checkbox"], [role="radio"], [role="switch"]');for(let q of Y){if(d.length>=30)break;if(isWidget(q)||isHiddenFromAT(q)||!isVisible(q))continue;let P=getComputedStyle(q),O=v(q),B=g(P.backgroundColor||""),$=g(P.borderTopColor||""),X=parseFloat(P.borderTopWidth||"0"),K=(P.borderTopStyle||"").toLowerCase(),te=X>0&&K!=="none"&&K!=="hidden",Z=q.tagName.toLowerCase(),ne=Z==="input"||Z==="select"||Z==="textarea",ae=null;if(Z==="input"){let we=(q.type||"").toLowerCase(),Lr=(P.appearance||P.webkitAppearance||"").toLowerCase();if(we==="checkbox"||we==="radio"){let sr=Lr==="none"?"":String(P.accentColor||"").trim().toLowerCase(),lr=sr&&sr!=="auto"?g(sr):null;if(lr&&lr[3]>.5)ae=y([lr[0],lr[1],lr[2]],O);else if(Lr&&Lr!=="none")continue}}let ue=te&&$&&$[3]>.5?y([$[0],$[1],$[2]],O):null,xe=B&&B[3]>.5?y([B[0],B[1],B[2]],O):ae,Ie=S(P,O),Ae=ue===null&&xe===null&&Ie===null?null:Math.max(ue??0,xe??0,Ie??0);if(ne&&I(q)){z(q);continue}if(ne&&(Ae===null||Ae<3)){let we=D(q);if(we!==null&&we>=3)continue}let Se=null,je=false,Le="";if(ne)Ae!==null?(Se=Ae,Ae<3&&(je=true)):(je=true,Se=1);else {let we=false,Lr=document.createTreeWalker(q,4),sr=Lr.nextNode();for(;sr;){if((sr.textContent||"").trim()&&sr.parentElement&&isVisible(sr.parentElement)){we=true;break}sr=Lr.nextNode();}if(we)continue;let lr=I(q);{let ce=["Top","Right","Bottom","Left"].map(Ne=>({w:parseFloat(P["border"+Ne+"Width"]||"0"),s:String(P["border"+Ne+"Style"]||"").toLowerCase(),c:g(P["border"+Ne+"Color"]||"")})),ge=ce.filter(Ne=>Ne.w>0&&Ne.s!=="none"&&Ne.s!=="hidden"&&Ne.c&&Ne.c[3]>.5),Ge=ce.filter(Ne=>Ne.w>0&&Ne.s!=="none"&&Ne.s!=="hidden"&&Ne.c&&Ne.c[3]===0),et=true;for(let Ne=q.parentElement;Ne&&Ne.nodeType===1;Ne=Ne.parentElement)if(parseFloat(getComputedStyle(Ne).opacity||"1")<1){et=false;break}let it=Math.max(0,Math.min(1,parseFloat(P.opacity||"1"))),ft=String(P.backgroundClip||"border-box").toLowerCase(),Ke=!!B&&B[3]>=1&&it>=1&&ft==="border-box";if(ge.length&&Ge.length&&et&&(!lr||Ke)){let Ne=B&&B[3]>0?A(B,O):O,Gt=A([Ne[0],Ne[1],Ne[2],it],O),Wt=Mr=>{let aa=A(Mr,Ne);return A([aa[0],aa[1],aa[2],it],O)};if(ge.some(Mr=>y(Wt(Mr.c),Gt)>=3))continue}}if(lr){if(M(q))continue;z(q);continue}let na=Array.from(q.querySelectorAll('img, svg, picture, canvas, i[class], [class*="icon"]')),Vt=new Map,ai=ce=>{let ge=ce.getBoundingClientRect();if(ge.width*ge.height===0)return "absent";let Ge=parseFloat(getComputedStyle(q).opacity||"1");for(let et=ce;et&&et!==q;et=et.parentElement){let it=getComputedStyle(et);if(it.display==="none")return "absent";if(it.visibility==="hidden"||parseFloat(it.opacity||"1")===0)return "hidden-at-rest";Ge*=parseFloat(it.opacity||"1");}return Vt.set(ce,Ge),"painted"},ii=na.map(ai),at=na.filter((ce,ge)=>ii[ge]==="painted"),Pr=at.length>0,fn=!Pr&&ii.includes("hidden-at-rest"),de=ce=>{let ge=(ce.tagName||"").toLowerCase();if(ge==="img"||ge==="picture"||ge==="canvas"||ge==="svg"&&ce.querySelector("image, foreignObject, linearGradient, radialGradient, pattern"))return null;let Ge=[];if(ge==="svg"){let it=ce.querySelector("path, circle, rect, polygon, polyline, line, ellipse, use, text");for(let ft of [it,ce]){if(!ft)continue;let Ke=getComputedStyle(ft),Ne=1;for(let Wt=ft;Wt&&Wt!==ce;Wt=Wt.parentElement||Wt.parentNode)Ne*=parseFloat(getComputedStyle(Wt).opacity||"1");let Gt=Wt=>Number.isFinite(parseFloat(Wt))?parseFloat(Wt):1;if(Ke.fill&&Ke.fill!=="none"&&!Ke.fill.startsWith("url")&&Ge.push({color:Ke.fill,alpha:Ne*Gt(Ke.fillOpacity)}),Ke.stroke&&Ke.stroke!=="none"&&!Ke.stroke.startsWith("url")&&parseFloat(Ke.strokeWidth||"0")>0&&Ge.push({color:Ke.stroke,alpha:Ne*Gt(Ke.strokeOpacity)}),Ge.length)break}}else ((ce.textContent||"").trim()||getComputedStyle(ce,"::before").content!=="none")&&Ge.push({color:getComputedStyle(ce).color,alpha:1});let et=null;for(let it of Ge){let ft=g(it.color);if(!ft)continue;let Ke=ft[3]*it.alpha*(Vt.get(ce)??1),Ne=[ft[0]*Ke+O[0]*(1-Ke),ft[1]*Ke+O[1]*(1-Ke),ft[2]*Ke+O[2]*(1-Ke)],Gt=y(Ne,O);(et===null||Gt>et)&&(et=Gt);}return et};if(Pr&&at.map(de).some(ge=>ge!==null&&ge>=3))continue;let ee=false,oe=P.position;if((oe==="absolute"||oe==="fixed")&&q.parentElement){let ce=q.getBoundingClientRect(),ge=q.parentElement.getBoundingClientRect(),Ge=ge.width*ge.height;Ge>0&&ce.width*ce.height/Ge>=.85&&(ee=true);}if(Pr||ee||fn){if(je=true,Se=te&&$&&$[3]>.5?y([$[0],$[1],$[2]],O):1,Se>=3)continue;Le=Pr?"control is identified by an image or icon \u2014 verify the graphic itself has 3:1 contrast against its surroundings":fn?"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 Ae!==null?(Se=Ae,Ae<3&&(je=true)):(je=true,Se=1);}if(!je)continue;let Te=$&&$[3]>.5?[$[0],$[1],$[2]]:B&&B[3]>.5?[B[0],B[1],B[2]]:[128,128,128],Bt=C(Te,O,3);if(!Bt)continue;let dn=w(Bt[0],Bt[1],Bt[2]),Gr=w(O[0],O[1],O[2]),yr="border: 1px solid "+dn+" !important;",ni=uniqueSel(q),Ir=q.tagName.toLowerCase(),Ht=Ae===null&&!te?"invisible (no border, no fill: 1.00:1)":Se?Se.toFixed(2)+":1":"not measurable",Tt=Ir==="input"||Ir==="select"||Ir==="textarea"?Ir+" field":Ir,Wr=Le?"non-text contrast: "+Tt+" boundary is "+Ht+" against "+Gr+" (needs 3:1) \u2014 "+Le:"non-text contrast: "+Tt+" boundary (border and fill) is "+Ht+" against "+Gr+", needs 3:1 \u2014 e.g. border-color "+dn;d.push({selector:ni,message:Wr,attribute:"style",currentValue:Se?Se.toFixed(2):"?",issueType:"non_text_contrast_insufficient",wcag:"1.4.11",context:Ir+" bg="+Gr+" ratio="+(Se?Se.toFixed(2):"?")+" needs=3",needsAI:false,...Le?{needsReview:true,reviewReason:Le}:{fixValue:yr},outerHtml:q.outerHTML.slice(0,200)});}return d},qh={name:"nonTextContrast",cap:30,async detect(f){return f.evaluate(wI)}};var xI=()=>{let f="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],h=/location\s*[=.]|location\s*\.\s*href|\.submit\s*\(|window\s*\.\s*open|history\s*\.\s*(push|replace)/i,m=document.querySelectorAll("[onfocus]");for(let y of Array.from(m)){if(g.length>=20)break;if(y.closest(f))continue;let v=y.getAttribute("onfocus")||"";if(!v||!h.test(v))continue;let w=typeof uniqueSel=="function"?uniqueSel(y):"",C=typeof getNearbyContext=="function"?getNearbyContext(y):{parentTag:y.tagName.toLowerCase(),nearbyHeading:""},E=[];E.push("tag: "+y.tagName.toLowerCase()),E.push("onfocus: "+v.slice(0,100)),C.nearbyHeading&&E.push("heading: "+C.nearbyHeading),E.push("parent: "+C.parentTag),g.push({selector:w,attribute:"onfocus",currentValue:v.slice(0,200),issueType:"onfocus_context_change",wcag:"3.2.1",context:E.join(" | "),needsAI:true,outerHtml:(y.outerHTML||"").slice(0,300)});}return g},Bh={name:"onFocus",cap:20,async detect(f){return f.evaluate(xI)}};var DI=()=>{let f="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye],[class*=ae-exclude],[id*=ae_app],[id*=ae_],[class*=EquallyAI]",h=[],m=new Set,y=new Set(["dialog","alertdialog","menu","menubar","listbox","tree","grid","treegrid","tabpanel","application","toolbar","combobox"]);return document.querySelectorAll("div, section, article, aside, pre, code, ul, ol, nav, blockquote").forEach(w=>{if(h.length>=30||w.closest(f))return;let C=w.tagName;if(C==="BODY"||C==="HTML"||!isVisible(w)||isHiddenFromAT(w)||w.hasAttribute("tabindex"))return;let E=w.getAttribute("role");if(E&&y.has(E))return;let A=getComputedStyle(w),S=A.overflowY,F=A.overflowX,D=S==="auto"||S==="scroll",x=F==="auto"||F==="scroll";if(!D&&!x)return;let k=D&&w.scrollHeight-w.clientHeight>50,T=x&&w.scrollWidth-w.clientWidth>50;if(!k&&!T||w.querySelectorAll('a[href], button:not([disabled]), input:not([disabled]):not([type=hidden]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])').length>0)return;let M=uniqueSel(w);if(m.has(M))return;m.add(M);let{nearbyHeading:V}=getNearbyContext(w),z="";if(V)z=V;else {let P=(typeof w.className=="string"?w.className:"").toLowerCase(),O=(w.id||"").toLowerCase();P.includes("code")||P.includes("snippet")||C==="PRE"||C==="CODE"?z="Code block":P.includes("terms")||P.includes("tos")||P.includes("legal")?z="Terms and conditions":P.includes("chat")||P.includes("message")?z="Chat messages":P.includes("table")||P.includes("data")?z="Data table":O?z=O.replace(/[-_]/g," "):z="Scrollable content";}let Y=(w.outerHTML||"").slice(0,300);h.push({selector:M,attribute:"tabindex",currentValue:"",issueType:"scrollable_not_focusable",wcag:"2.1.1",context:JSON.stringify({tag:C.toLowerCase(),overflowY:D?S:void 0,overflowX:x?F:void 0,scrollHeight:w.scrollHeight,clientHeight:w.clientHeight,scrollWidth:w.scrollWidth,clientWidth:w.clientWidth,suggestion:'Add tabindex="0" so keyboard users can scroll this container'}),needsAI:false,fixValue:"0",outerHtml:Y}),E||h.push({selector:M,attribute:"role",currentValue:"",issueType:"missing_semantic_role",wcag:"2.1.1",context:JSON.stringify({tag:C.toLowerCase(),supplementary:'role="region" needed alongside tabindex="0" for screen reader announcement'}),needsAI:false,fixValue:"region",outerHtml:Y}),w.getAttribute("aria-label")||w.getAttribute("aria-labelledby")||h.push({selector:M,attribute:"aria-label",currentValue:"",issueType:"missing_landmark",wcag:"2.1.1",context:JSON.stringify({tag:C.toLowerCase(),labelHint:z,supplementary:"aria-label needed so screen readers announce the scrollable region"}),needsAI:true,outerHtml:Y});}),h},Hh={name:"scrollableFocus",cap:30,async detect(f){return f.evaluate(DI)}};var _I=()=>{let f="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",d=[],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"]'],h=false;for(let S of g){let F=document.querySelector(S);if(F&&!F.closest(f)){h=true;break}}if(!h){let S=document.querySelectorAll('a[href^="#"]');for(let F of S){if(F.closest(f))continue;let D=(F.textContent||"").toLowerCase();if(D.includes("skip")&&(D.includes("main")||D.includes("content")||D.includes("nav"))){h=true;break}}}if(h||Array.from(document.querySelectorAll('main, [role="main"]')).filter(S=>{let F=getComputedStyle(S);if(F.display==="none"||F.visibility==="hidden"||S.closest('[hidden], [aria-hidden="true"]'))return false;let D=S.getBoundingClientRect();return D.width>0&&D.height>0}).length===1)return d;let y="",v=document.querySelector('main[id], [role="main"][id]');if(v&&v.getAttribute("id"))y=v.getAttribute("id");else {let S=document.querySelector("h1[id]");if(S&&S.getAttribute("id"))y=S.getAttribute("id");else {let F=["main-content","maincontent","main","content","skip-content"];for(let D of F)if(document.getElementById(D)){y=D;break}}}let w=y==="",C=y||"main-content",A="<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="#'+C+'" class="wa-skip-link">Skip to main content</a>';return d.push({selector:"body",attribute:"prepend",currentValue:"",issueType:"skip_link",wcag:"2.4.1",context:w?'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 #"+C,needsAI:false,fixValue:A,...w?{manualFix:true}:{}}),d},Vh={name:"skipLink",async detect(f){return f.evaluate(_I)}};var AI=()=>{let g=[],h=document.querySelectorAll("*"),m=0;for(let y of Array.from(h)){if(m++>5e3||g.length>=20)break;if(y.closest("[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye]")||typeof isVisible=="function"&&!isVisible(y))continue;let w=getComputedStyle(y).backgroundImage||"";if(!w||w==="none"||!w.includes("url("))continue;let C=w.match(/url\((['"]?)(.*?)\1\)/);if(!C)continue;let E=C[2];if(!E||E.startsWith("data:")&&E.length<256)continue;let A=y.getBoundingClientRect();if(A.width<32||A.height<32)continue;let S=y.tagName.toLowerCase(),F=y.getAttribute("role")||"",D=S==="a"||S==="button"||F==="button"||F==="link"||y.closest("a,button,[role=button],[role=link]")!==null,x=(y.textContent||"").trim().length>0,k=!!y.getAttribute("aria-label"),T=!!y.getAttribute("aria-labelledby"),I=!!y.getAttribute("title"),M=!!y.querySelector('img[alt]:not([alt=""])');if(y.closest('[aria-hidden="true"]')){let P=y.closest("a[href]");if(!!P&&Array.from(document.querySelectorAll("a[href]")).some(B=>B!==P&&B.href===P.href&&!B.closest('[aria-hidden="true"]')))continue}if(k||T||I||M||x||!D)continue;let V=y.closest("a,button,[role=button],[role=link]");if(V&&V!==y){let P=(V.textContent||"").trim(),O=V.getAttribute("aria-label")||V.getAttribute("title")||"",B=V.getAttribute("aria-labelledby"),$=!!V.querySelector('img[alt]:not([alt=""])');if(P||O.trim()||B||$)continue}let z=E;try{z=new URL(E,location.href).toString();}catch{continue}let Y=typeof uniqueSel=="function"?uniqueSel(y):"",q=typeof getNearbyContext=="function"?getNearbyContext(y):{parentTag:S,nearbyHeading:""};g.push({selector:Y,attribute:"aria-label",currentValue:"",issueType:"background_image_unlabeled",wcag:"1.1.1",context:`bg: ${z.slice(0,140)} | tag: ${S} | role: ${F||"(none)"} | parent: ${q.parentTag}${q.nearbyHeading?" | heading: "+q.nearbyHeading:""}`,needsAI:true,imageSrc:z,outerHtml:(y.outerHTML||"").slice(0,300)});}return g},jh={name:"backgroundImages",cap:20,async detect(f){return f.evaluate(AI)}},EI=()=>{let d=[],g=document.querySelectorAll("h1, h2, h3, h4, h5, h6, [role=heading]");for(let h of Array.from(g)){if(d.length>=15)break;if(h.closest("[class*=asw-], [class*=userway], [class*=acsb]")||typeof isVisible=="function"&&!isVisible(h)||(h.textContent||"").trim().length>0)continue;let y=h.getAttribute("aria-label");if(y&&y.trim()||h.getAttribute("aria-labelledby")||h.getAttribute("aria-hidden")==="true")continue;let v=typeof uniqueSel=="function"?uniqueSel(h):"";d.push({selector:v,attribute:"aria-hidden",currentValue:"",issueType:"empty_heading",wcag:"1.3.1",context:`Empty heading: ${h.tagName.toLowerCase()}`,needsAI:false,needsReview:true,reviewReason:"Empty heading may be a layout anchor populated by JS after load; hiding it from assistive tech could suppress real content.",fixValue:"true",outerHtml:(h.outerHTML||"").slice(0,200)});}return d},$h={cap:15,name:"emptyHeadings",async detect(f){return f.evaluate(EI)}},CI=()=>{let d=[],g=document.querySelectorAll('a[href^="javascript:"], a[href^="JAVASCRIPT:"]');for(let h of Array.from(g)){if(d.length>=15)break;if(h.closest("[class*=asw-], [class*=userway], [class*=acsb]")||typeof isVisible=="function"&&!isVisible(h))continue;let m=(h.getAttribute("role")||"").toLowerCase();if(m==="button")continue;let y=(h.textContent||"").trim();if(!y)continue;let v=typeof uniqueSel=="function"?uniqueSel(h):"";d.push({selector:v,attribute:"role",currentValue:m||"",issueType:"javascript_link",wcag:"2.1.1",context:`<a href="javascript:..."> text: ${JSON.stringify(y.slice(0,60))}`,needsAI:false,fixValue:"button",outerHtml:(h.outerHTML||"").slice(0,200)});}return d},zh={cap:15,name:"javascriptLinks",async detect(f){return f.evaluate(CI)}};var SI=()=>{let f="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye]",g=[];return document.querySelectorAll("svg").forEach(m=>{if(g.length>=50||m.closest(f)||!isVisible(m)||m.getAttribute("aria-hidden")==="true")return;let v=m.getAttribute("role");if(v==="presentation"||v==="none"||m.closest('[aria-hidden="true"]'))return;let w=m.getAttribute("aria-label")||"",C=m.getAttribute("aria-labelledby")||"",E=m.querySelector("title"),A=E?(E.textContent||"").trim():"";if(w.trim()||C.trim()||A)return;let S=m.getBoundingClientRect(),F=S.width<=16&&S.height<=16;if(S.width<=4||S.height<=4||m.getAttribute("preserveAspectRatio")==="none")return;let D=m.closest('a, button, [role="button"], [role="link"], [onclick]');if(D){if(D.getAttribute("aria-label")?.trim()||D.getAttribute("aria-labelledby")?.trim())return;let O=getAccessibleName(D),B=D.cloneNode(true);B.querySelectorAll("svg").forEach(X=>X.remove());let $=(B.textContent||"").trim().replace(/\s+/g," ");if(O&&$.length>0)return}else {if(F)return;let O=m.parentElement;if(O&&(O.textContent||"").trim().replace(/\s+/g," ").length>3)return}let x=uniqueSel(m),k=getNearbyContext(D||m),T=D&&D.getAttribute("href")||"",I=(D||m).outerHTML.slice(0,300),M=m.getAttribute("class")||"",V=m.getAttribute("data-icon")||"",z=D||m,Y=z&&z!==m&&z.getAttribute("class")||"",q=typeof lookupIconLabel=="function"?lookupIconLabel(String(M),V,"")||lookupIconLabel(String(Y),"",""):null,P=D?uniqueSel(D):x;g.push({selector:P,attribute:"aria-label",currentValue:"",issueType:"svg_missing_name",wcag:"1.1.1",context:JSON.stringify({parentTag:(D||m).tagName?(D||m).tagName.toLowerCase():"svg",href:T,nearbyHeading:k.nearbyHeading,parentRole:k.parentRole,svgClasses:M,iconLib:q||void 0,suggestion:"Add aria-label to the parent interactive element or <title> inside SVG"}),needsAI:!q,fixValue:q||void 0,outerHtml:I});}),g},Gh={name:"svgNames",cap:50,async detect(f){return f.evaluate(SI)}};var kI=()=>{let g=[],h=["a[href]","button",'input[type="button"]','input[type="submit"]','input[type="reset"]','input[type="checkbox"]','input[type="radio"]','[role="button"]','[role="link"]','[role="checkbox"]','[role="radio"]','[role="menuitem"]','[role="tab"]','[role="switch"]',"[onclick]"].join(","),m=h;function y(E,A){let S=Array.from(E.getClientRects()).filter(k=>k.height>0);if(!S.length)return false;let F=document.createTreeWalker(A,NodeFilter.SHOW_TEXT),D,x=0;for(;(D=F.nextNode())&&x<400;){x++;let k=D.parentElement;if(!k||E.contains(D)||!/[\p{L}\p{N}]{2,}/u.test(D.textContent||"")||k.closest(m))continue;let T=document.createRange();T.selectNodeContents(D);for(let I of Array.from(T.getClientRects()))if(!(I.width===0||I.height===0)){for(let M of S)if(Math.min(M.bottom,I.bottom)-Math.max(M.top,I.top)>Math.min(M.height,I.height)/2)return true}}return false}function v(E){let A=E.getBoundingClientRect(),S=A.left,F=A.top,D=A.right,x=A.bottom;for(let k of Array.from(E.querySelectorAll("img, svg, picture, video, canvas"))){let T=k.getBoundingClientRect(),I=T.left,M=T.top,V=T.right,z=T.bottom;for(let Y=k.parentElement;Y;Y=Y.parentElement){let q=getComputedStyle(Y),P=Y.getBoundingClientRect();if(q.overflowX!=="visible"&&(I=Math.max(I,P.left),V=Math.min(V,P.right)),q.overflowY!=="visible"&&(M=Math.max(M,P.top),z=Math.min(z,P.bottom)),Y===E)break}V-I<=0||z-M<=0||(S=Math.min(S,I),F=Math.min(F,M),D=Math.max(D,V),x=Math.max(x,z));}return new DOMRect(S,F,D-S,x-F)}let w=document.querySelectorAll(h),C=[];for(let E of w){if(typeof isWidget=="function"&&isWidget(E)||typeof isHiddenFromAT=="function"&&isHiddenFromAT(E)||typeof isVisible=="function"&&!isVisible(E)||!E.offsetParent&&E.tagName!=="BODY")continue;let A=v(E);A.width===0&&A.height===0||C.push({el:E,rect:A});}for(let{el:E,rect:A}of C){if(g.length>=50)break;let S=A.width,F=A.height;if(S>=24&&F>=24)continue;let D=E.parentElement;if(D&&getComputedStyle(E).display==="inline"){if(Array.from(D.childNodes).some(B=>B.nodeType===3&&(B.textContent||"").trim().length>3))continue;let O=D;for(;O&&O!==document.body&&getComputedStyle(O).display.startsWith("inline");)O=O.parentElement;if(O&&y(E,O))continue}let x=false,k=A.left+A.width/2,T=A.top+A.height/2;for(let P of C){if(P.el===E||P.el.contains(E)||E.contains(P.el))continue;if(P.rect.width<24||P.rect.height<24){let B=P.rect.left+P.rect.width/2,$=P.rect.top+P.rect.height/2;if(Math.hypot(k-B,T-$)<24){x=true;break}}else {let B=Math.max(P.rect.left-k,0,k-P.rect.right),$=Math.max(P.rect.top-T,0,T-P.rect.bottom);if(Math.hypot(B,$)<12){x=true;break}}}if(!x&&S>=1&&F>=1)continue;let M=Math.max(0,24-F),z=Math.ceil(M/2),Y=[];Y.push("min-width:24px"),Y.push("min-height:24px"),Y.push("display:inline-block"),Y.push("box-sizing:border-box"),z>0&&Y.push("padding-top:"+z+"px"),z>0&&Y.push("padding-bottom:"+z+"px");let q=typeof uniqueSel=="function"?uniqueSel(E):E.tagName.toLowerCase();g.push({selector:q,attribute:"style",currentValue:Math.round(S)+"x"+Math.round(F)+"px",issueType:"target_too_small",wcag:"2.5.8",context:`${E.tagName.toLowerCase()} is ${Math.round(S)}x${Math.round(F)}px with adjacent targets \u2014 minimum 24x24px or sufficient spacing required`,needsAI:false,fixValue:Y.join(";")+";",outerHtml:E.outerHTML.slice(0,200)});}return g},Wh={name:"targetSize",cap:50,async detect(f){return f.evaluate(kI)}};var TI=()=>{let f="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],h=/(line-height|letter-spacing|word-spacing)\s*:[^;!]*!important/i,m=document.querySelectorAll('[style*="important" i]');for(let y of Array.from(m)){if(g.length>=30)break;if(y.closest(f))continue;let v=y.getAttribute("style")||"";if(!h.test(v))continue;let w=[];/line-height\s*:[^;!]*!important/i.test(v)&&w.push("line-height"),/letter-spacing\s*:[^;!]*!important/i.test(v)&&w.push("letter-spacing"),/word-spacing\s*:[^;!]*!important/i.test(v)&&w.push("word-spacing");let C=typeof uniqueSel=="function"?uniqueSel(y):"",E=typeof getNearbyContext=="function"?getNearbyContext(y):{parentTag:y.tagName.toLowerCase(),nearbyHeading:""},A=[];A.push("blocked: "+w.join(",")),A.push("tag: "+y.tagName.toLowerCase()),E.nearbyHeading&&A.push("heading: "+E.nearbyHeading),A.push("parent: "+E.parentTag),g.push({selector:C,attribute:"style",currentValue:v.slice(0,200),issueType:"text_spacing_blocked",wcag:"1.4.12",context:A.join(" | "),needsAI:true,outerHtml:(y.outerHTML||"").slice(0,300)});}return g},Uh={name:"textSpacing",cap:30,async detect(f){return f.evaluate(TI)}};var RI=()=>{let f="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],h=document.querySelectorAll('button, input[type="submit"], input[type="button"], input[type="reset"], [role="button"]');for(let m of h){if(g.length>=50)break;if(m.closest(f)||!isVisible(m))continue;let y=m,v=(y.getAttribute("aria-label")||"").trim(),w=y.getAttribute("aria-labelledby"),C=(y.getAttribute("title")||"").trim(),E=(y.getAttribute("value")||"").trim(),A=(y.textContent||"").trim().replace(/\s+/g," "),S="";w&&(S=typeof __resolveIdRefs=="function"?__resolveIdRefs(w):"");let F=y.querySelector('img[alt]:not([alt=""])'),D=y.querySelector("svg title"),x=y.querySelector("svg[aria-label]");if(!!(v||S||C||E||A||F||D||x))continue;let T=uniqueSel(y),I=getNearbyContext(y),M=y.closest("form"),V=M&&(M.getAttribute("id")||M.getAttribute("name"))||"",z=y.className||"",Y=y.querySelector('i, svg, span[class*="icon"]'),q=Y&&Y.className||"",P=Y&&Y.getAttribute("data-icon")||"",O=Y?(Y.textContent||"").trim():"",B=typeof lookupIconLabel=="function"?lookupIconLabel(String(q),P,O):null,$=!B&&typeof lookupIconLabel=="function"?lookupIconLabel(String(z),"",""):null,X=B||$,K=[];V&&K.push("form: "+V),I.nearbyHeading&&K.push("heading: "+I.nearbyHeading),q&&K.push("icon: "+String(q).slice(0,80)),z&&K.push("class: "+String(z).slice(0,80)),K.push("parent: "+I.parentTag),X&&K.push("icon-lib: "+X),g.push({selector:T,attribute:"aria-label",currentValue:"",issueType:"unlabeled_button",wcag:"4.1.2",context:K.join(" | "),needsAI:!X,fixValue:X||void 0,outerHtml:y.outerHTML.slice(0,300)});}return g},Xh={name:"unlabeledButtons",cap:50,async detect(f){return f.evaluate(RI)}};var FI=()=>{let f=new Set(["more","info","click","click here","here","read more","learn more","see more","link","button","this"]),d=new Set(["submit","send","yes","no","next","prev","previous","back","view","details","continue","go","ok","open","close","apply","save"]),g={};function h(O,B){if(isWidget(O)||!isVisible(O))return;let $=getAccessibleName(O);if(!$)return;let X=(B?"b:":"a:")+$.toLowerCase().trim();g[X]=(g[X]||0)+1;}document.querySelectorAll('button, [role="button"], input[type="button"], input[type="submit"]').forEach(O=>h(O,true)),document.querySelectorAll("a[href]").forEach(O=>h(O,false));let m=new Set(["fa","fas","far","fab","fal","fad","material-icons","material-symbols","bi","glyphicon"]),y=["fa-","bi-","icon-","icofont-","dashicons-","heroicon","feather-","lucide-","material-"];function v(O){let B=O.toLowerCase();return m.has(B)||y.some($=>B.startsWith($))}let w=/[\u4e00-\u9fff\u3040-\u30ff\uac00-\ud7af]/;function C(O,B){return w.test(O)?1:B}let E=50,A=[];function S(O){if((O.textContent||"").trim().replace(/\s+/g," ").length>0)return false;let $=O.querySelectorAll("i, span, em");for(let X of $)if((typeof X.className=="string"?X.className:"").split(/\s+/).some(v))return true;return false}function F(O){let B=O.className||"";return typeof B!="string"?false:B.split(/\s+/).some(v)}function D(O,B){if(A.length>=E||isWidget(O)||!isVisible(O))return;let $=getAccessibleName(O);if(!$)return;let X=$.toLowerCase().trim(),K=false,te=$.length>=2&&/^[A-Z][A-Z0-9]+$/.test($.trim()),Z=!B&&/^[[(]?\d{1,4}[\])]?$/.test($.trim());if($.length<C($,3)&&!te&&!Z)K=true;else if(f.has(X))K=true;else if(d.has(X)&&(g[(B?"b:":"a:")+X]||0)>=2){let Ie=(O.getAttribute("aria-label")||"").trim().toLowerCase(),Ae=!!O.getAttribute("aria-labelledby")||!!Ie&&Ie!==X,Se=O.querySelector&&O.querySelector('.sr-only, .visually-hidden, [class*="sr-only"], [class*="visually-hidden"], [class*="screen-reader"]'),je=Se?(Se.textContent||"").trim().toLowerCase():"";!Ae&&!(Se&&je!==X)&&(K=true);}else (S(O)||F(O)&&$.length===0)&&(O.getAttribute("aria-label")||O.getAttribute("aria-labelledby")||O.querySelector&&O.querySelector('.sr-only, .visually-hidden, [class*="sr-only"], [class*="visually-hidden"]')||(K=true));if(!K)return;let ne=getNearbyContext(O),ae=uniqueSel(O),ue=O.getAttribute("href")||"",xe=O.outerHTML.slice(0,300);A.push({selector:ae,attribute:"aria-label",currentValue:(O.getAttribute("aria-label")||"").trim(),message:(B?"weak button name: ":"weak link name: ")+(O.getAttribute("aria-label")||O.getAttribute("aria-labelledby")?`"${$}" is too generic for a control \u2014 add distinguishing context`:`text "${$}" is too generic for a control \u2014 add distinguishing context`),issueType:B?"weak_button_name":"weak_link_name",wcag:B?"4.1.2":"2.4.4",...B?{}:{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:$,href:ue,nearbyHeading:ne.nearbyHeading,parentTag:ne.parentTag,parentRole:ne.parentRole,cardText:ne.cardText||"",imgAlt:ne.imgAlt||""}),needsAI:true,outerHtml:xe});}document.querySelectorAll('button, [role="button"], input[type="button"], input[type="submit"]').forEach(O=>D(O,true)),document.querySelectorAll("a[href]").forEach(O=>D(O,false));let x=/^(untitled(?:\s+document)?|new\s+page|new\s+document|home|page\s*\d*|document|untitled)$/i,k=/^(iframe|embed|widget|frame|content|untitled)$/i,T=/^(skip|go|→|\->|main|content)$/i,I=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(O){return !!(!O||O.getAttribute("aria-hidden")==="true"||O.closest('[aria-hidden="true"]'))}function V(O,B,$,X,K,te){if(A.length>=E)return;let Z=uniqueSel(O),ne=(O.outerHTML||"").slice(0,300);A.push({selector:Z,attribute:B,currentValue:$,issueType:X,wcag:K,context:JSON.stringify(te),needsAI:true,outerHtml:ne});}let z=document.querySelectorAll("h1,h2,h3,h4,h5,h6");for(let O=0;O<z.length&&!(A.length>=E);O++){let B=z[O];if(!B||isWidget(B)||M(B)||!isVisible(B))continue;let $=getAccessibleName(B);if(!$)continue;let X=$.toLowerCase().trim(),K=X.split(/\s+/).filter(Boolean),te=false;if(($.length<C($,3)||K.length===1&&(f.has(X)||I.has(X))||/^page\s*\d+$/i.test(X)||/^section\s*\d+$/i.test(X)||/^chapter\s*\d+$/i.test(X)||/^[^\p{L}\p{N}]+$/u.test($))&&(te=true),!te)continue;let Z=getNearbyContext(B);V(B,"textContent",$,"weak_heading","2.4.6",{currentText:$,tag:B.tagName.toLowerCase(),nearbyHeading:Z.nearbyHeading,parentTag:Z.parentTag,parentRole:Z.parentRole});}let Y=document.querySelectorAll("iframe");for(let O=0;O<Y.length&&!(A.length>=E);O++){let B=Y[O];if(!B||isWidget(B)||M(B))continue;let $=getComputedStyle(B);if(B.getClientRects().length===0||$.visibility==="hidden"||$.visibility==="collapse"||(B.getAttribute("src")||"").trim().toLowerCase().indexOf("javascript:")===0)continue;let X=(B.getAttribute("title")||"").trim();if(!X)continue;let K=X.toLowerCase(),te=false;if((X.length<C(X,3)||k.test(K)||f.has(K))&&(te=true),!te)continue;let Z=(B.getAttribute("src")||"").slice(0,120),ne=getNearbyContext(B);V(B,"title",X,"weak_iframe_title","4.1.2",{currentTitle:X,src:Z,nearbyHeading:ne.nearbyHeading,parentTag:ne.parentTag});}if(A.length<E){let O=document.querySelector("head > title, title"),B=(document.title||"").trim();if(O&&B){let $=B.toLowerCase(),X=false;(B.length<C(B,5)||x.test($)||/^untitled/i.test(B))&&(X=true),X&&A.push({selector:"title",attribute:"textContent",currentValue:B,issueType:"weak_page_title",wcag:"2.4.2",context:JSON.stringify({currentTitle:B,hostname:typeof location<"u"&&location&&location.hostname||"",pathname:typeof location<"u"&&location&&location.pathname||""}),needsAI:true,outerHtml:(O.outerHTML||"").slice(0,300)});}}let q=document.querySelectorAll("svg");for(let O=0;O<q.length&&!(A.length>=E);O++){let B=q[O];if(!B||isWidget(B)||M(B)||B.getAttribute("role")==="presentation"||B.getAttribute("role")==="none"||!isVisible(B))continue;let $=B.querySelector("title"),X=$?($.textContent||"").trim():"",K=(B.getAttribute("aria-label")||"").trim(),te=K||X;if(!te)continue;let Z=te.toLowerCase(),ne=false;if((te.length<C(te,3)||f.has(Z)||/^(icon|svg|image|graphic|logo)$/i.test(te))&&(ne=true),!ne)continue;let ae=B.closest('a, button, [role="button"], [role="link"]'),ue=getNearbyContext(B);V(B,K?"aria-label":"title",te,"weak_svg_name","1.1.1",{currentName:te,svgClasses:B.getAttribute("class")||"",parentTag:ae?ae.tagName.toLowerCase():ue.parentTag,parentHref:ae&&ae.getAttribute("href")||"",nearbyHeading:ue.nearbyHeading});}let P=document.querySelectorAll('a[href="#main"], a[href="#main-content"], a[href="#content"], a[href="#skip"], a[href="#maincontent"], a.skip-link, a.skip-nav, a.skip-to-content, a.skiplink, a.skip-navigation, [class*="skip-link"], [class*="skip-nav"]');for(let O=0;O<P.length&&!(A.length>=E);O++){let B=P[O];if(!B||isWidget(B)||M(B))continue;let $=getAccessibleName(B);if(!$)continue;let X=$.toLowerCase().trim(),K=false;if(($.length<C($,4)||T.test(X)||X==="skip"||X==="skip link"||X==="jump")&&(K=true),!K)continue;let te=B.getAttribute("href")||"";A.push({selector:uniqueSel(B),attribute:"textContent",currentValue:$,issueType:"weak_skip_link",wcag:"2.4.1",context:JSON.stringify({currentText:$,href:te}),needsAI:false,fixValue:"Skip to main content",outerHtml:(B.outerHTML||"").slice(0,300)});}return A},Yh={name:"weakNames",cap:50,async detect(f){return f.evaluate(FI)}};var II=()=>{let d=[],g=document.querySelector('meta[name="viewport"]');if(g){let m=(g.getAttribute("content")||"").trim(),y=m.toLowerCase(),v=false,w=[];(y.indexOf("user-scalable=no")>=0||y.indexOf("user-scalable=0")>=0)&&(v=true,w.push("user-scalable=no blocks pinch-zoom"));let C=y.match(/maximum-scale\s*=\s*([\d.]+)/);C&&parseFloat(C[1])<2&&(v=true,w.push("maximum-scale="+C[1]+" (<2)")),v&&d.push({selector:'meta[name="viewport"]',attribute:"content",currentValue:m,issueType:"zoom_restriction",wcag:"1.4.4",context:"viewport blocks zoom: "+w.join(" | "),needsAI:false,fixValue:"width=device-width, initial-scale=1"});}let h=[{el:document.documentElement,selector:"html"},{el:document.body,selector:"body"}];for(let m=0;m<h.length&&!(d.length>=5);m++){let y=h[m];if(y.el)try{let w=(getComputedStyle(y.el).getPropertyValue("touch-action")||"").trim().toLowerCase();(w==="none"||w==="pinch-zoom")&&d.push({selector:y.selector,attribute:"style",currentValue:"touch-action: "+w,issueType:"zoom_restriction",wcag:"1.4.4",context:"CSS touch-action: "+w+" on <"+y.selector+"> prevents pinch-zoom",needsAI:!1,fixValue:"touch-action: manipulation !important;"});}catch{}}return d},Kh={name:"zoomUnlock",cap:5,async detect(f){return f.evaluate(II)}};var LI=()=>{let f=[],d=document.querySelectorAll('main *, [role="main"] *, body > div *'),g=new Set,h=Math.min(d.length,200);for(let m=0;m<h;m++){let y=d[m];if(g.has(y)||!y.offsetParent)continue;g.add(y);let v=getComputedStyle(y),w=parseInt(v.order||"0",10),C=v.position;if(w>=3){let E=y.getBoundingClientRect();if(E.width>0&&E.height>0){let A=(y.textContent?.trim().length||0)>10,S=!!y.querySelector("a, button, input, select, textarea");(A||S)&&f.push({selector:typeof uniqueSel=="function"?uniqueSel(y):y.tagName.toLowerCase(),attribute:"data-sequence-review",currentValue:`CSS order: ${w}`,issueType:"meaningful_sequence",wcag:"1.3.2",context:`Element uses CSS order:${w} \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(C==="absolute"){if(!!!y.querySelector("a, button, input, select, textarea"))continue;let A=y.parentElement;if(!A||A.children.length<=2)continue;let S=y.getBoundingClientRect(),F=A.getBoundingClientRect();(S.top<F.top-100||S.left<F.left-300)&&f.push({selector:typeof uniqueSel=="function"?uniqueSel(y):y.tagName.toLowerCase(),attribute:"data-sequence-review",currentValue:`position: ${C}, displaced ${Math.round(Math.abs(S.top-F.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 f},Jh={name:"meaningfulSequence",async detect(f){return f.evaluate(LI)}};var Zh={name:"sensoryCharacteristics",async detect(f){let d=await f.evaluate(()=>{let h=[],m=document.querySelectorAll('p, li, td, label, span, div, a, button, h1, h2, h3, h4, h5, h6, figcaption, [role="alert"], [role="status"]'),y=Math.min(m.length,300);for(let v=0;v<y;v++){let w=m[v];if(!w.offsetParent||w.children.length>3)continue;let C=w.textContent?.trim()||"";C.length<15||C.length>300||/click|tap|press|select|choose|find|look|see|drag|scroll|hover|go to|navigate/i.test(C)&&h.push({text:C,selector:typeof uniqueSel=="function"?uniqueSel(w):w.tagName.toLowerCase()});}return h.slice(0,20)});if(d.length===0)return [];let g=[];for(let{text:h,selector:m}of d){h.toLowerCase();let v=/\b(round|square|circular|triangular|arrow-shaped)\b.*\b(button|icon|element|thing)\b/i.test(h)&&!/\b(submit|cancel|close|menu|search|delete|edit|save|back|next|previous|home)\b/i.test(h),w=/\b(on the|to the|in the)\s+(left|right|top|bottom|upper|lower|above|below|sidebar)\b/i.test(h)&&!/\b(navigation|menu|header|footer|sidebar menu|breadcrumb)\b/i.test(h)&&/\b(click|tap|press|select|find)\b/i.test(h),C=/\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(h)&&!/\b(submit|cancel|close|delete|save|success|error|warning|danger)\b/i.test(h),E=/\b(large|small|big|tiny|narrow|wide)\s+(button|link|icon|box|area)\b/i.test(h)&&/\b(click|tap|press|select|find)\b/i.test(h);if(v||w||C||E){let A=v?"shape":w?"position":C?"color":"size";g.push({selector:m,attribute:"data-sensory-review",currentValue:h.slice(0,100),issueType:"sensory_characteristic",wcag:"1.3.3",context:`Instruction relies on ${A} alone: "${h.slice(0,80)}". Provide a non-sensory way to identify the referenced element (e.g., by name, label, or function).`,needsAI:true});}}return g}};var PI=()=>{let f=[],d=document.querySelectorAll("img");for(let g of d){if(!g.offsetParent||g.width<50||g.height<20||g.complete&&g.naturalWidth===0)continue;let h=g.src||g.getAttribute("data-src")||"",m=h.indexOf(","),y=(h.toLowerCase().startsWith("data:")&&m!==-1?h.slice(0,m):h).toLowerCase(),v=g.getAttribute("alt")||"",w=g.getAttribute("role")||"";if(g.getAttribute("aria-hidden")==="true"||!!g.closest('[aria-hidden="true"]')||w==="presentation"||w==="none"||g.hasAttribute("alt")&&v.trim()==="")continue;let E=g.width>200&&g.height<80&&g.height>15,A=/banner|header|logo-text|title|heading|cta|promo|offer|button.*\.(?:png|jpg|gif|webp)/i.test(y);if(!(A||E)||/(?:^|\/)(?:img|dsc|dscn|dcim|pict)[-_]?\d|photo|gallery/i.test(y)&&!A)continue;let F=g.closest("a[href]"),D=(()=>{if(!F)return false;let Y=F.getAttribute("href")||"";if(Y==="/"||Y==="")return true;try{let q=new URL(F.href,location.href);return q.origin!==location.origin?!1:!!(q.pathname.replace(/\/+$/,"")===""||/^\/(?:index|home|default)(?:\.\w+)?$/i.test(q.pathname)||/^\/[a-z]{2}(?:-[a-z]{2})?(?:\.\w+)?$/i.test(q.pathname))}catch{return false}})();if(D&&(F.textContent||"").trim().length===0)continue;let k="";if(F&&!D&&(F.textContent||"").trim().length===0)try{let Y=new URL(F.href,location.href),q=v.trim().split(/\s+/).filter(Boolean);if(Y.origin!==location.origin&&/^https?:$/.test(Y.protocol)&&q.length>0&&q.length<=4&&v.trim().length<=40){let P=K=>K.toLowerCase().normalize("NFKD").replace(/[^\p{L}\p{N}]/gu,""),O=P(v),B=Y.hostname.toLowerCase().split(".").filter(K=>K&&K!=="www"),$=(B.length>1?B.slice(0,-1):B).map(P).filter(Boolean);k=O.length>=3&&(O===P(B.join(""))||O===$.join("")||$.some(K=>O===K||K.length>=5&&O.startsWith(K)))?"exempt":"review";}}catch{}let T=!!g.closest('header, [role="banner"], footer, [role="contentinfo"]'),I=g.height>0&&g.height<=120,M=T&&I,V=/logo|brand|wordmark|hero|banner-?(?:img|image)?|footer|marketing|promo|cover|screenshot|dashboard/i,z=M||V.test(y)||V.test(g.className)||V.test(g.id||"");y.includes("icon")||y.includes("avatar")||y.includes("emoji")||f.push({selector:typeof uniqueSel=="function"?uniqueSel(g):"img",attribute:"data-image-of-text",currentValue:y.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="${v.slice(0,40)}"). Use real text with CSS styling instead.`,needsAI:true,imageSrc:g.src,...z||k?{needsReview:true,reviewReason:M?"small graphic in the header/footer landmark \u2014 likely a logo, wordmark, or brand signature, which are exempt under WCAG 1.4.5 (logotypes)":k==="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":k==="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 f},Qh={name:"imagesOfText",async detect(f){return f.evaluate(PI)}};var eg={name:"reflow",async detect(f){let d=f;if(!d.setViewport)return [];let g=d.viewport?.()??{width:1280,height:720},h=g.width??1280,m=g.height??720;try{return await d.setViewport({width:320,height:m}),await new Promise(v=>setTimeout(v,500)),await f.evaluate(v=>{let w=[],C=document.querySelectorAll("body *"),E=Math.min(C.length,500);for(let A=0;A<E;A++){let S=C[A];if(!S.offsetParent)continue;let F=S.tagName.toLowerCase();if(F==="script"||F==="style"||F==="noscript")continue;let D=S.getBoundingClientRect();D.right>v+5&&D.width>v*1.1&&w.push({selector:typeof uniqueSel=="function"?uniqueSel(S):F,attribute:"style",currentValue:`${Math.round(D.width)}px wide at ${v}px viewport`,issueType:"reflow_overflow",wcag:"1.4.10",context:`Element is ${Math.round(D.width)}px wide and overflows the ${v}px viewport by ${Math.round(D.right-v)}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>v+10&&w.push({selector:"html",attribute:"data-reflow",currentValue:`scrollWidth ${document.documentElement.scrollWidth}px at ${v}px viewport`,issueType:"reflow_overflow",wcag:"1.4.10",context:`Page has horizontal scrollbar at ${v}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"}),w},320)}finally{await d.setViewport({width:h,height:m}).catch(()=>{});}}};var MI=()=>{let f=[],d=document.querySelectorAll("video");for(let h of d){if(h.autoplay&&!h.muted&&f.push({selector:typeof uniqueSel=="function"?uniqueSel(h):"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"}),!(h.offsetParent!==null&&getComputedStyle(h).display!=="none"))continue;let y=h.getBoundingClientRect();if(y.width===0&&y.height===0||h.error)continue;let v=/mute|unmute|sound|volume|audio|play|pause/i,w=!!h.parentElement?.querySelector('button, [role="button"]')||!!h.id&&!!document.querySelector('[aria-controls~="'+h.id.replace(/"/g,"")+'"]');for(let D=h.parentElement?.parentElement||null,x=0;D&&!w&&x<3;D=D.parentElement,x++)w=Array.from(D.querySelectorAll('button, [role="button"]')).some(k=>v.test((k.getAttribute("aria-label")||"")+" "+(k.getAttribute("title")||"")+" "+(k.textContent||"")));if((h.muted||h.hasAttribute("muted"))&&(h.loop||h.hasAttribute("loop"))&&!h.hasAttribute("controls")&&!w)continue;let C=h.querySelectorAll("track"),E=Array.from(C).find(D=>D.kind==="captions"||D.kind==="subtitles"),A=Array.from(C).find(D=>D.kind==="descriptions");h.src||h.querySelector("source")?.src||"";let F=typeof uniqueSel=="function"?uniqueSel(h):"video";E||f.push({selector:F,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. Add: <track kind="captions" src="captions.vtt" srclang="en" label="English">',needsAI:false,fixValue:'Add <track kind="captions" src="captions.vtt" srclang="en" label="English" default>',needsReview:true,reviewReason:"cannot verify an audio track in-page \u2014 confirm the video has speech content before adding captions (silent videos need none)"}),A||f.push({selector:F,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 h of g){let m=typeof uniqueSel=="function"?uniqueSel(h):"audio";h.closest("figure, div, section")?.querySelector('a[href*="transcript"], [class*="transcript"]')||f.push({selector:m,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}),h.autoplay&&!h.muted&&f.push({selector:m,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 f},tg={name:"mediaAlternatives",cap:50,async detect(f){return (await f.evaluate(MI)).slice(0,50)}};var OI=()=>{let f=[],d=document.querySelector('meta[http-equiv="refresh"]');if(d){let T=d.getAttribute("content")||"",I=parseInt(T,10);!isNaN(I)&&I>0&&I<72e3&&f.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 ${I}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 I=T.getAttribute("accesskey")||"";if(I.length===1){let M=typeof uniqueSel=="function"?uniqueSel(T):T.tagName.toLowerCase();f.push({selector:M,attribute:"accesskey",currentValue:I,issueType:"character_key_shortcut",wcag:"2.1.4",context:`Single character accesskey "${I}". 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 h=document.querySelectorAll("select");for(let T of h){let I=T.hasAttribute("onchange"),M=T.getAttribute("onchange")||"";if(I&&/submit|location|href|navigate|window\./i.test(M)){let V=typeof uniqueSel=="function"?uniqueSel(T):"select";f.push({selector:V,attribute:"onchange",currentValue:M.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 m=document.querySelectorAll("[ontouchstart], [ontouchmove], [ongesturestart], [ongesturechange]");for(let T of m)if(!(T.hasAttribute("onclick")||T.hasAttribute("onkeydown")||T.hasAttribute("onkeyup"))){let M=typeof uniqueSel=="function"?uniqueSel(T):T.tagName.toLowerCase();f.push({selector:M,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 y=document.querySelectorAll("[onmousedown]");for(let T of y){let I=T.hasAttribute("onmouseup"),M=T.tagName.toLowerCase();if(!I&&M!=="a"&&M!=="button"&&M!=="input"){let V=typeof uniqueSel=="function"?uniqueSel(T):M;f.push({selector:V,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 v=document.querySelectorAll("script:not([src])");for(let T of v){let I=T.textContent||"";if(/devicemotion|deviceorientation|accelerometer|gyroscope/i.test(I)){f.push({selector:"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 w=document.querySelectorAll("form"),C='input:not([type="hidden"]):not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="image"]), select, textarea',E=/\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,A=/card|payment/i,S=/\b(?:pay|buy|purchase|donate|subscribe and pay|place (?:your |my )?order|complete (?:order|purchase|payment)|confirm (?:order|purchase|payment)|check ?out)\b/i,F=/\b(?:delete|remove|close|deactivate|cancel|terminate)\b[^.]{0,30}\b(?:account|profile|subscription|membership|data|records?)\b/i,D=/\b(?:e-?)?sign\b(?![\s\u00a0-]*(?:up|in|on|out)\b)|\bagree and (?:submit|continue|sign)\b/i,x=/\b(?:save|update|change)\b/i,k=/e-?mail|name|phone|tel\b|zip|postal|company|organi[sz]ation|country/i;for(let T of w){let I=Array.from(T.querySelectorAll(C)),M=Se=>[Se.getAttribute("name"),Se.id,Se.getAttribute("autocomplete"),Se.getAttribute("placeholder"),Se.getAttribute("aria-label")].join(" "),V=Array.from(T.querySelectorAll('button, input[type="submit"], input[type="image"]')).filter(Se=>Se.tagName!=="BUTTON"||!Se.getAttribute("type")||(Se.getAttribute("type")||"").toLowerCase()==="submit").map(Se=>(Se.getAttribute("value")||"")+" "+(Se.textContent||"")+" "+(Se.getAttribute("aria-label")||"")).join(" . "),z=I.some(Se=>E.test(M(Se)))||Array.from(T.querySelectorAll("iframe")).some(Se=>A.test((Se.getAttribute("title")||"")+" "+(Se.getAttribute("name")||""))),Y=I.some(Se=>/signature/i.test(M(Se))),q=z||S.test(V),P=F.test(V),O=Y||D.test(V),B=I.length>0&&I.some(Se=>(Se.getAttribute("type")||"").toLowerCase()==="email"||/e-?mail/i.test(M(Se)))&&I.every(Se=>{let je=Se.tagName.toLowerCase()==="input"?(Se.getAttribute("type")||"text").toLowerCase():Se.tagName.toLowerCase();return je==="email"||je==="checkbox"||je==="tel"?true:je==="text"||je==="search"?k.test(M(Se)+" "+(Se.closest("label")?.textContent||"")):false}),$=(T.textContent||"").toLowerCase(),X=/payment|credit card|billing|purchase|\border\b|checkout|bank|account number/i.test($),K=/\bagree|terms|contract|binding|signature|consent|waiver/i.test($),te=/delete.*account|remove.*data|cancel.*account/i.test($),Z=q||P||O,ne=B&&(x.test(V)||te),ae=!Z&&(!B&&(X||K||te)||ne);if(!Z&&!ae)continue;let ue=!!T.querySelector('[type="checkbox"][required], [class*="confirm"], [id*="confirm"], [name*="confirm"]'),xe=!!T.querySelector('[class*="review"], [class*="summary"], [id*="review"]');if(ue||xe)continue;let Ie=typeof uniqueSel=="function"?uniqueSel(T):"form",Ae=Z?q?"financial":P?"data-deletion":"legal":ne?te?"data-deletion":"data-modification":X?"financial":K?"legal":"data-deletion";f.push({selector:Ie,attribute:"data-error-prevention",currentValue:Ae,issueType:"error_prevention_missing",wcag:"3.3.4",context:`${Ae.charAt(0).toUpperCase()+Ae.slice(1)} form lacks a confirmation/review step. For ${Ae} transactions, provide: (1) a review step before submission, (2) ability to check/correct input, or (3) ability to reverse the submission.`,needsAI:true,...ae?{needsReview:true,reviewReason:ne&&te?"form text is about deleting an account or data and its submit is generic \u2014 confirm whether submitting it deletes stored user data":ne?"form saves contact/account details \u2014 confirm whether submitting it changes stored user data that cannot be reviewed or reversed":`form text mentions ${Ae} topics but its controls show no ${Ae} transaction (no payment fields, pay/order/delete submit, or signature) \u2014 confirm whether submitting it commits the user`}:{}});}return f},rg={name:"timingAndInput",async detect(f){return f.evaluate(OI)}};var NI=()=>{let f=[],d=document.querySelectorAll('nav, [role="navigation"]');for(let m of d){if(!m.offsetParent||m.closest('footer, aside, [role="contentinfo"], [role="complementary"]')||m.parentElement?.closest('nav, [role="navigation"]'))continue;let y=m.getBoundingClientRect();if(y.top<=window.innerHeight)continue;let v=typeof uniqueSel=="function"?uniqueSel(m):"nav";f.push({selector:v,attribute:"data-nav-position",currentValue:`top: ${Math.round(y.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 m of g){if(!m.offsetParent)continue;let y=m.getBoundingClientRect();if(y.width<1||y.height<1||!(m.textContent||"").trim()&&!m.querySelector("img, svg, video, canvas, picture")&&getComputedStyle(m).backgroundImage==="none")continue;let v=typeof uniqueSel=="function"?uniqueSel(m):m.tagName.toLowerCase();f.push({selector:v,attribute:"data-flashing",currentValue:m.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 h=document.querySelectorAll('img[src*=".gif"]');for(let m of h){if(!m.offsetParent||m.width<25||m.height<25)continue;let y=m.getBoundingClientRect();if(y.width>100&&y.height>100){let v=typeof uniqueSel=="function"?uniqueSel(m):"img";f.push({selector:v,attribute:"data-animated-gif",currentValue:(m.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 f},ng={name:"navigationAndWayfinding",async detect(f){return f.evaluate(NI)}};var ag={name:"flashDetection",async detect(f){let d=[];if(!f.screenshot)return d;let h=await f.evaluate(()=>{let A=document.documentElement.style.getPropertyValue("--wa-animations-frozen")==="1";if(A){let S=document.querySelectorAll("*");for(let F of S)F.style.removeProperty("animation-play-state"),F.style.removeProperty("transition");}return A}),m=8,y=120,v=9,w=3,C=[];for(let E=0;E<m;E++){let A=await f.evaluate(S=>{let F=window.innerWidth,D=window.innerHeight,x=3,k=3,T=[];for(let I=0;I<k;I++)for(let M=0;M<x;M++){let V=Math.floor((M+.5)*(F/x)),z=Math.floor((I+.5)*(D/k)),Y=document.elementFromPoint(V,z);if(!Y){T.push(0);continue}let P=getComputedStyle(Y).backgroundColor||"rgba(0,0,0,0)",O=typeof parseCssColor=="function"?parseCssColor(P):null;if(!O){T.push(0);continue}let B=.2126*O[0]+.7152*O[1]+.0722*O[2];T.push(B);}return T},v);C.push(A),E<m-1&&await new Promise(S=>setTimeout(S,y));}h&&await f.evaluate(()=>{let E=document.querySelectorAll("*");for(let A of E)A.style.setProperty("animation-play-state","paused","important"),A.style.setProperty("transition","none","important");});for(let E=0;E<v;E++){let A=0,S=C[0][E],F=null;for(let k=1;k<m;k++){let T=C[k][E];if(Math.abs(T-S)>25){let M=T>S?"up":"down";F&&M!==F&&A++,F=M;}S=T;}let D=m*y/1e3,x=A/D;if(x>=w){let k=E%3,T=Math.floor(E/3);d.push({selector:"body",attribute:"data-flash-detected",currentValue:`${x.toFixed(1)} flashes/sec in region (${k},${T})`,issueType:"flashing_content",wcag:"2.3.1",context:`Content flashes ${x.toFixed(1)} times/second in screen region (row ${T}, col ${k}). 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 d}};var ig={name:"reducedMotion",async detect(f){let d=[],g=await f.evaluate(()=>{let h=false,m=false;for(let v of document.styleSheets)try{for(let w of v.cssRules){let C=w.cssText||"";/animation|transition|@keyframes/i.test(C)&&!/prefers-reduced-motion/.test(C)&&(h=!0),w instanceof CSSMediaRule&&/prefers-reduced-motion/i.test(w.conditionText||w.media?.mediaText||"")&&(m=!0);}}catch{}let y=document.querySelectorAll('[class*="animate"], [class*="slide"], [class*="fade"], [class*="bounce"], [class*="spin"], [class*="pulse"]');return y.length>0&&(h=true),{hasAnimations:h,hasReducedMotionQuery:m,animatedCount:y.length}});return g.hasAnimations&&!g.hasReducedMotionQuery&&d.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; } }"}),d}};var sL=[Yh,Oh,Gh,sh,oh,Rh,Ch,Eh,Wh,ph,qh,wh,Xh,xh,bh,Vh,lh,Mh,Sh,yh,hh,Ih,gh,vh,Ah,Ph,kh,Kh,ch,Fh,dh,fh,Th,Bh,Uh,Nh,mh,jh,$h,zh,uh,Lh,Hh,Jh,Zh,Qh,eg,tg,rg,ng,ag,ig];async function gg(f,d,g,h){let m=d??[];try{let{UNIQUE_SELECTOR_JS:T,IS_VISIBLE_JS:I,ACCESSIBLE_NAME_JS:M,WIDGET_SKIP_JS:V,IS_HIDDEN_FROM_AT_JS:z,IS_TRACKING_PIXEL_JS:Y,NEARBY_CONTEXT_JS:q}=await Promise.resolve().then(()=>(sg(),og)),{ICON_LABELS_JS:P}=await Promise.resolve().then(()=>(ug(),lg)),{COLOR_MATH_JS:O}=await Promise.resolve().then(()=>(dg(),cg)),$=`if(typeof __name==='undefined'){var __name=function(t,v){return t};var __defProp=Object.defineProperty;}
|
|
379
379
|
`+[T,I,M,V,z,Y,q,P,O].join(`
|
|
380
|
-
`),{inject:X}=await Promise.resolve().then(()=>(Fr(),cn));try{await X(f,{tool:"detector-helpers",content:$});}catch{await f.evaluate(`(0,eval)(${JSON.stringify($)})`);}}catch(T){console.warn("[webability] helper injection failed:",T.message),(g??[]).push("color:kernel-injection-failed");}let y=[];try{let{detectPlatform:T,applyPlatformTemplates:I}=await Promise.resolve().then(()=>(hg(),mg)),M=await T(f);y=await I(f,M);}catch{}let{guardDetectorState:v}=await Promise.resolve().then(()=>(Fr(),cn)),w=globalThis.process?.env?.WA_STRICT_STATE==="1",C={strict:w,bugs:h?.internalBugs},E=await v(f,"detectors:parallel",g??[],()=>Promise.allSettled(sL.map(async T=>{try{let I=await T.detect(f);return T.cap&&I.length>=T.cap&&m.push({detector:T.name,cap:T.cap}),I}catch{return []}})),C),A=[];h?.skipFocusMutating&&(g??[]).push("focus:mutating-detectors-skipped (live-tab scan; focus visibility and focus obscured were not checked)");let S=[...h?.skipFocusMutating?[]:[_h,Dh],...h?.extraSerialDetectors??[]];for(let T of S){let I=[];try{I=await v(f,T.name,g??[],()=>T.detect(f).catch(()=>[]),C);}catch(M){if(w)throw M}try{T.cap&&I.length>=T.cap&&m.push({detector:T.name,cap:T.cap}),A=A.concat(I);}catch{}}let F=[...E.flatMap(T=>T.status==="fulfilled"?T.value:[]),...A],D=[...y,...F],x=lL(D),k=["wp-ada-compliance","webability-widget","webability-a11y","asw-","userway","acsb","audioeye","equallyai"];return x.filter(T=>{let I=T.selector.toLowerCase();return I.trim()?!k.some(M=>I.includes(M)):false})}function lL(f){let d=new Set;return f.filter(g=>{let h=`${g.selector}::${g.issueType}`;return d.has(h)?false:(d.add(h),true)})}var vg="1.9.0";var Au=["wcag2a","wcag2aa","wcag21aa","wcag22aa"];function Eu(f){return f.includes("wcag21aa")||f.includes("wcag22aa")||f.includes("wcag134")?{"css-orientation-lock":{enabled:true}}:{}}function bg(f,d){return d==="AAA"&&!f.includes("wcag2aaa")?[...f,"wcag2aaa"]:f}var uL={"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.1":"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 _u(f){return uL[f]??"AA"}var Za={A:1,AA:2,AAA:3};function cL(f){let d=String(f.wcag||"").split(/[,\s]+/).filter(h=>/^\d+\.\d+\.\d+$/.test(h));if(d.length===0)return f.level??"AA";let g="AAA";for(let h of d)Za[_u(h)]<Za[g]&&(g=_u(h));return g}function Jn(f,d="AA"){let g=Za[d]??Za.AA;return f.filter(h=>Za[cL(h)]<=g)}var dL=new Set(["new_window_link","external_link_warning","download_link_warning"]);function yg(f){let d=dL.has(f.issueType)?"minor":f.needsAI?"serious":"moderate",g=f.attribute==="style",h=f.attribute.startsWith("data-"),m=g&&f.fixValue?fL(f.fixValue):f.fixValue;return {id:`wa-${f.issueType}-${Qa(f.selector)}`,source:"webability",type:f.issueType,wcag:f.wcag,level:_u(f.wcag),impact:d,message:pL(f,m,h),selector:f.selector,html:f.outerHtml,...f.needsReview?{confidence:"needs_review"}:{},...f.reviewReason?{reviewReason:f.reviewReason}:{},fix:{attribute:f.attribute,currentValue:f.currentValue,suggestedValue:m,needsManualReview:f.needsAI||g||h||!!f.needsReview||!!f.manualFix}}}function fL(f){let d=f.trim();if(!d)return "";let g=d.endsWith(";"),m=d.split(";").map(y=>{let w=y.toLowerCase().lastIndexOf("!important");return w===-1?y.trim():y.slice(0,w).trim()}).filter(y=>y.length>0);return m.length===0?"":m.join(";")+(g?";":"")}function pL(f,d,g){if(f.message)return f.message;let h=f.issueType.replace(/_/g," "),m=d??f.fixValue;return g?m?`${h}: ${m}`:f.currentValue?`${h}: ${f.currentValue}`:f.context?`${h}: ${f.context}`:h:m?`${h}: set ${f.attribute}="${m}"`:f.currentValue?`${h}: ${f.attribute} is "${f.currentValue}"`:`${h}: missing ${f.attribute}`}function Zn(f){return Array.isArray(f)?f.flat(1/0).filter(g=>typeof g=="string").join(" >>> "):typeof f=="string"?f:""}function Qa(f){let d=0;for(let g=0;g<f.length;g++)d=(d<<5)-d+f.charCodeAt(g)|0;return Math.abs(d).toString(36)}function Cu(f){return f==="critical"||f==="serious"||f==="moderate"||f==="minor"?f:"moderate"}function Su(f,d=[]){return {total:f.length,critical:f.filter(g=>g.impact==="critical").length,serious:f.filter(g=>g.impact==="serious").length,moderate:f.filter(g=>g.impact==="moderate").length,minor:f.filter(g=>g.impact==="minor").length,incomplete:0}}function mL(f){let d=/^wcag(\d)(\d)(\d{1,2})$/.exec(f);return d?`${d[1]}.${d[2]}.${d[3]}`:""}function ku(f){for(let d of f){let g=mL(d);if(g)return g}return ""}function Tu(f){return f.includes("wcag2aaa")?"AAA":f.includes("wcag2aa")||f.includes("wcag21aa")||f.includes("wcag22aa")?"AA":"A"}async function Dg(f,d){try{let{AxeBuilder:g}=await import('@axe-core/playwright');return await new g({page:f}).options({rules:Eu(d)}).withTags(d).analyze()}catch{return hL(f,d)}}async function hL(f,d){let g=await Promise.resolve().then(()=>j3(xg())),h=g.source??g.default?.source;if(!h)throw new Error("axe-core source unavailable");try{await f.evaluate(h);}catch{let{inject:y}=await Promise.resolve().then(()=>(Fr(),cn));await y(f,{tool:"axe",content:h});}return await f.evaluate(({wcagTags:y,rules:v})=>new Promise((w,C)=>{let E=window;if(!E.axe)return C(new Error("axe-core not loaded"));E.axe.run(document,{runOnly:{type:"tag",values:y},rules:v,resultTypes:["violations","incomplete"]}).then(w).catch(C);}),{wcagTags:d,rules:Eu(d)})}function Ru(f){let d=[],g=[];for(let h of f)h.confidence==="needs_review"||vL(h)?g.push(h):d.push(gL(h));return {verdicts:d,undecided:g}}function gL(f){if(f.confidence===void 0&&f.reviewReason===void 0)return f;let{confidence:d,reviewReason:g,...h}=f;return h}function vL(f){let d=(f.type||"").toLowerCase(),g=f.wcag||"",h=f.html||"",m=(f.message||"").toLowerCase();if((d==="contrast_insufficient"||d==="color-contrast"||g==="1.4.3"||g==="1.4.11")&&bL(h))return "background uses gradient or image";if(d==="image_of_text"||g==="1.4.5"){let y=_g(h,"src").toLowerCase();y.startsWith("data:")&&(y=y.split(",")[0]);let v=_g(h,"alt").toLowerCase();if(/\b(logo|brand|wordmark|hero|banner|footer|marketing|promo|cover)\b/.test(y))return "brand imagery";if(v.length>0&&/\b(logo|brand|product screenshot|dashboard)\b/.test(v))return "branded imagery"}return (d==="inconsistent_navigation"||m.includes("inconsistent navigation"))&&(/<footer/i.test(h)||/<aside/i.test(h))?"footer/aside nav":""}function bL(f){return /background(-image)?\s*:\s*(?:linear-gradient|radial-gradient|conic-gradient|url\()/i.test(f)}function _g(f,d){let g=new RegExp(`\\b${d}\\s*=\\s*"([^"]*)"`,"i"),h=f.match(g);return h?h[1]:""}Fr();var yL=60,wL=3,xL=120,DL=1200,_L=300,AL=2e5,EL=8e3,CL=new Set(["bgImage","bgGradient","bgOverlap","elmPartiallyObscured","elmPartiallyObscuring"]),SL="*,*::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 kL(f){let{selectors:d,maxBoxes:g,maxW:h,maxH:m,maxArea:y}=f,v=document.documentElement.scrollWidth,w=document.documentElement.scrollHeight,C=document.createElement("canvas");C.width=C.height=1;let E=C.getContext("2d",{willReadFrequently:true}),A=T=>{try{E.clearRect(0,0,1,1),E.fillStyle="#000",E.fillStyle=T,E.fillRect(0,0,1,1);let I=E.getImageData(0,0,1,1).data;return [I[0],I[1],I[2],I[3]]}catch{return null}},S={},F=document.querySelectorAll("video,canvas,iframe,embed,object");if(F.length>200){for(let T of d)S[T]=null;return S}let D=Array.from(F).map(T=>T.getBoundingClientRect()),x=window.scrollX,k=window.scrollY;for(let T of d){S[T]=null;let I=null;try{I=document.querySelector(T);}catch{continue}if(!I)continue;let M=getComputedStyle(I);if(M.visibility!=="visible"||M.display==="none"||M.webkitBackgroundClip==="text"||M.backgroundClip==="text")continue;let V=false,z=0;for(let ae=I;ae;ae=ae.parentElement){if(++z>64){V=true;break}let ue=getComputedStyle(ae);parseFloat(ue.opacity)<1&&(V=true),(ue.transform!=="none"||ue.mixBlendMode!=="normal"||ue.filter!=="none")&&(V=true);}if(V)continue;let Y=A(M.color);if(!Y||Y[3]<255)continue;let q=parseFloat(M.fontSize),P=parseInt(M.fontWeight,10)>=700,O=q>=24||P&&q>=18.66,B=[],$=I.getBoundingClientRect();if($.height>m*g||$.width>h*2)continue;let X=document.createTreeWalker(I,NodeFilter.SHOW_TEXT),K,te=0,Z=false;for(;!Z&&(K=X.nextNode());){if(++te>50){Z=true;break}if(K.parentElement!==I)continue;let ae=K.textContent||"";if(ae.length>2e3){Z=true;break}if(!ae.trim())continue;let ue=document.createRange();ue.selectNodeContents(K);let xe=ue.getClientRects();if(xe.length>g){Z=true;break}for(let Ie=0;Ie<xe.length;Ie++){let Ae=xe[Ie];if(!(Ae.width<2||Ae.height<2)&&(B.push({x:Math.round(Ae.left+x),y:Math.round(Ae.top+k),w:Math.max(1,Math.round(Ae.width)),h:Math.max(1,Math.round(Ae.height))}),B.length>g)){Z=true;break}}}Z||B.length===0||B.length>g||B.some(ae=>ae.w>h||ae.h>m||ae.w*ae.h>y||ae.x<0||ae.y<0||ae.x+ae.w>v||ae.y+ae.h>w)||B.some(ae=>D.some(ue=>ae.x<ue.right+x&&ae.x+ae.w>ue.left+x&&ae.y<ue.bottom+k&&ae.y+ae.h>ue.top+k))||(S[T]={fg:`rgb(${Y[0]},${Y[1]},${Y[2]})`,threshold:O?3:4.5,boxes:B});}return S}async function TL(f){let{b64:d,fg:g}=f,h=atob(d),m=new Uint8Array(h.length);for(let V=0;V<h.length;V++)m[V]=h.charCodeAt(V);let y=await createImageBitmap(new Blob([m],{type:"image/png"})),v=document.createElement("canvas");v.width=y.width,v.height=y.height;let w=v.getContext("2d",{willReadFrequently:true});w.drawImage(y,0,0);let C=w.getImageData(0,0,v.width,v.height).data,E=V=>{let z=V/255;return z<=.03928?z/12.92:Math.pow((z+.055)/1.055,2.4)},A=(V,z,Y)=>.2126*E(V)+.7152*E(z)+.0722*E(Y),S=g.match(/\d+/g).map(Number),F=A(S[0],S[1],S[2]),D=Math.max(1,Math.floor(Math.sqrt(v.width*v.height/1500))),x=0,k=1/0,T="",I="",M=0;for(let V=0;V<v.height;V+=D)for(let z=0;z<v.width;z+=D){let Y=(V*v.width+z)*4;if(C[Y+3]<255)continue;let q=A(C[Y],C[Y+1],C[Y+2]),P=Math.max(F,q),O=Math.min(F,q),B=(P+.05)/(O+.05);B>x&&(x=B,I=`rgb(${C[Y]},${C[Y+1]},${C[Y+2]})`),B<k&&(k=B,T=`rgb(${C[Y]},${C[Y+1]},${C[Y+2]})`),M++;}return M===0?null:{best:x,worst:k,worstBg:T,bestBg:I}}var Bo=class extends Error{};function ti(f,d){let g=d-Date.now();if(g<=0)return Promise.reject(new Bo("pixel pass deadline"));let h,m=new Promise((y,v)=>{h=setTimeout(()=>v(new Bo("pixel pass deadline")),g);});return Promise.race([f,m]).finally(()=>clearTimeout(h))}async function Fu(f,d){let g=f.screenshot;if(typeof g!="function"||d.length===0)return [];let h=Array.from(new Set(d)).slice(0,yL),m=[],y=false,v=Date.now()+EL;try{await ti(f.evaluate("if(typeof globalThis.__name==='undefined'){globalThis.__name=function(t){return t}}"),v);let w=await ti(f.evaluate(kL,{selectors:h,maxBoxes:wL,maxW:DL,maxH:_L,maxArea:AL}),v);await ti(xu(f,{tool:"contrast-pixels",css:SL}),v),y=!0;let C=0;for(let E of h){let A=w[E];if(!A)continue;if(Date.now()>v||C+A.boxes.length>xL)break;let S=0,F=1/0,D="",x="",k=!0;for(let T of A.boxes){C++;let I=await ti(g.call(f,{clip:{x:T.x,y:T.y,width:T.w,height:T.h},fullPage:!0,type:"png",animations:"disabled"}),v),M=globalThis.Buffer,V=M?M.from(I).toString("base64"):"",z=await ti(f.evaluate(TL,{b64:V,fg:A.fg}),v);if(!z){k=!1;break}z.best>S&&(S=z.best,x=z.bestBg),z.worst<F&&(F=z.worst,D=z.worstBg);}k&&m.push({selector:E,fail:S<A.threshold*.97,bestRatio:S,worstRatio:F,...D?{worstBg:D}:{},...x?{bestBg:x}:{},threshold:A.threshold,fg:A.fg});}}catch(w){globalThis.process?.env?.WA_DEBUG_PIXELS&&console.error("pixel judge failed",w);}finally{if(y)try{await Promise.race([f.evaluate(()=>document.querySelectorAll('style[data-wa-injected^="contrast-pixels:"]').forEach(w=>w.remove())),new Promise(w=>setTimeout(w,1e3))]);}catch{}}return m}function RL(f,d){let{confidence:g,reviewReason:h,...m}=f;return {...m,id:f.id.replace("axe-incomplete-","axe-"),impact:"serious",message:`contrast: ${d.fg} text on its rendered background is at best ${d.bestRatio.toFixed(2)}:1 (measured from pixels, every background pixel behind the text fails), needs ${d.threshold}:1`}}async function Ag(f,d,g,h){let m=d.filter(E=>E.wcag!=="1.4.3"||!E.selector?false:E.source==="axe-core"?CL.has(g.get(E.id)??""):E.type==="contrast_insufficient"&&/gradient or image/.test(E.reviewReason??""));if(m.length===0)return [];let y=await Fu(f,m.map(E=>E.selector));if(h)for(let E of y)h.set(E.selector,E);globalThis.process?.env?.WA_DEBUG_PIXELS&&console.error(`pixel judge: ${m.length} candidates, ${y.length} measured, ${y.filter(E=>E.fail).length} fail`);let v=new Map(y.filter(E=>E.fail).map(E=>[E.selector,E])),w=[],C=new Set;for(let E of m){let A=v.get(E.selector);!A||C.has(E.selector)||(C.add(E.selector),w.push(RL(E,A)));}return w}function FL(f){f=f.replace("#",""),f.length===3&&(f=f[0]+f[0]+f[1]+f[1]+f[2]+f[2]);let d=parseInt(f,16);return [d>>16&255,d>>8&255,d&255]}function Iu(f){let d=f/255;return d<=.03928?d/12.92:Math.pow((d+.055)/1.055,2.4)}function Eg(f,d,g){return .2126*Iu(f)+.7152*Iu(d)+.0722*Iu(g)}function IL(f,d){let g=Math.max(f,d),h=Math.min(f,d);return (g+.05)/(h+.05)}function Cg(f){if(f.startsWith("#"))return FL(f);let d=f.match(/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)/);return d?[parseInt(d[1]),parseInt(d[2]),parseInt(d[3])]:null}function Sn(f,d){let g=Cg(f),h=Cg(d);return !g||!h?0:IL(Eg(...g),Eg(...h))}var LL=30,PL=10,ML=2e4,OL=30,NL=400*1024,qL="https://openrouter.ai/api/v1",BL="anthropic/claude-haiku-4.5",Sg="deepseek/deepseek-v4-flash",kg=400,Tg=125,Lu=160,HL=2e3,Ho=new Map;function VL(f){let d=0;for(let g=0;g<f.length;g++)d=(d<<5)-d+f.charCodeAt(g)|0;return Math.abs(d).toString(36)}var Pu=f=>f.wcag||f.type,Rg=(f,d,g)=>`${f}|${d.selector}|${Pu(d)}|${VL(g)}`,Mu=()=>!!globalThis.process?.env?.WA_DEBUG_JUDGE;function jL(f){let{selectors:d,maxHtml:g}=f,h={elements:{}},m=[],y=T=>/\(\s*prefers-reduced-motion\s*(:\s*reduce\s*)?\)/i.test(T)&&!/^\s*not\b/i.test(T),v=T=>{let I=T.split(",").map(M=>M.trim()).filter(Boolean);return I.length?I.every(M=>{let V=M.match(/^(-?[\d.]+)(ms|s)$/i);return V?parseFloat(V[1])*(V[2].toLowerCase()==="s"?1e3:1)<=10:false}):false},w=(T,I,M)=>{if(!(M>8))for(let V of Array.from(T)){let z=V.media?.mediaText,Y=I||typeof z=="string"&&y(z),q=V.style,P=V.selectorText;if(Y&&q&&typeof P=="string"){let $=q.getPropertyValue("animation-name").trim(),X=/^none(\s*,\s*none)*$/i.test($)||v(q.getPropertyValue("animation-duration"))||/^paused/i.test(q.getPropertyValue("animation-play-state").trim()),K=/^none(\s*,\s*none)*$/i.test(q.getPropertyValue("transition-property").trim())||v(q.getPropertyValue("transition-duration"));(X||K)&&m.push({selector:P,anim:X,trans:K});}let O=V.cssRules;O&&O.length&&w(O,Y,M+1);let B=V.styleSheet;if(B)try{w(B.cssRules,Y||y(V.media?.mediaText||""),M+1);}catch{}}};try{for(let T of Array.from(document.styleSheets))try{w(T.cssRules,y(T.media?.mediaText||""),0);}catch{}}catch{}let C=(T,I)=>{try{return T.matches(I)}catch{return false}},E=T=>T.split(",").map(I=>{let M=I.trim().match(/^(-?[\d.]+)(ms|s)$/i);return M?parseFloat(M[1])*(M[2].toLowerCase()==="s"?1e3:1):0}),A=T=>{let I=T.cloneNode(true);I.querySelectorAll("script, style").forEach(V=>V.remove());let M=(I.textContent||"").replace(/\s+/g," ").trim();if(!M){for(let V of Array.from(T.querySelectorAll("img[alt], [aria-label]")))if(M=(V.getAttribute("alt")||V.getAttribute("aria-label")||"").trim(),M)break}return M},S=T=>{let I=(T.getAttribute("aria-label")||"").trim();if(I)return I;let V=(T.getAttribute("aria-labelledby")||"").split(/\s+/).filter(Boolean).map(q=>{let P=document.getElementById(q);return P?(P.textContent||"").replace(/\s+/g," ").trim():""}).filter(Boolean).join(" ");if(V)return V;let z=A(T);if(z)return z;let Y=T instanceof HTMLInputElement&&/^(submit|button|reset|image)$/i.test(T.type)?(T.value||T.alt||"").trim():"";return Y||(T.getAttribute("title")||"").trim()},F='a[href], button, input:not([type="hidden"]), select, textarea, summary, [role="button"], [role="link"], [role="menuitem"], [role="tab"], [role="img"], [tabindex]:not([tabindex="-1"])',D=window.scrollX||0,x=window.scrollY||0,k=[];for(let T of d){let I=null;try{I=document.querySelector(T);}catch{}if(!I){h.elements[T]={found:false};continue}let M=k.indexOf(I);M<0&&(M=k.push(I)-1);let V=getComputedStyle(I),z=I.getBoundingClientRect(),Y=I.tagName.toLowerCase(),q={found:true,elementKey:M,tag:Y,html:(I.outerHTML||"").slice(0,g),rect:{x:z.left+D,y:z.top+x,w:z.width,h:z.height},role:(I.getAttribute("role")||"").toLowerCase(),ariaHidden:I.getAttribute("aria-hidden")==="true"||!!I.closest('[aria-hidden="true"]'),hidden:V.display==="none"||V.visibility==="hidden"||!!I.closest("[hidden]"),cssBackgroundImage:/url\(/i.test(V.backgroundImage||""),reducedMotionHandled:false,nearText:"",fg:V.color,bg:V.backgroundColor,fontSize:parseFloat(V.fontSize)||0,fontWeight:parseInt(V.fontWeight,10)||400};if(Y==="img"){let K=I;q.img={src:(K.currentSrc||K.getAttribute("src")||"").slice(0,300),alt:K.getAttribute("alt"),naturalW:K.naturalWidth||0,naturalH:K.naturalHeight||0,attrW:parseInt(K.getAttribute("width")||"0",10)||0,attrH:parseInt(K.getAttribute("height")||"0",10)||0};}if(q.cssBackgroundImage){let K=I.closest(F);K&&(q.control={tag:K.tagName.toLowerCase(),name:S(K).slice(0,120)});}if(!/^(img|video|canvas|iframe|object|embed|svg)$/.test(Y)){let K=V.animationName.split(",").some(ue=>ue.trim()&&ue.trim()!=="none")&&E(V.animationDuration).some(ue=>ue>10),te=E(V.transitionDuration).some(ue=>ue>10)&&V.transitionProperty.trim()!=="none",Z=m.filter(ue=>C(I,ue.selector)),ne=!K||Z.some(ue=>ue.anim),ae=!te||Z.some(ue=>ue.trans);q.reducedMotionHandled=(K||te)&&ne&&ae;}let P=I.closest('a[href], button, [role="button"], [role="link"]');if(P&&P!==I){let K=P.cloneNode(true);K.querySelectorAll("img, svg").forEach(ne=>ne.remove());let te=(K.textContent||"").replace(/\s+/g," ").trim(),Z=(P.getAttribute("aria-label")||"").trim();q.parentInteractive={tag:P.tagName.toLowerCase(),text:(te||Z).slice(0,120)};}let O=K=>{let te=K.cloneNode(true);return te.querySelectorAll("script, style").forEach(Z=>Z.remove()),(te.textContent||"").replace(/\s+/g," ").trim()},B=I.matches('a[href], [role="link"]'),$=O(I),X=I.parentElement;if(B&&(X=I.closest("p, li, td, th, dd, dt, figcaption, blockquote")||I.parentElement),X){let K=O(X),te=B&&$?K.indexOf($):-1,Z=te>120?te-120:0;q.nearText=(Z?"\u2026":"")+K.slice(Z,Z+240);}h.elements[T]=q;}return h}function $L(f,d){let g=(f.type||"").toLowerCase(),h=f.wcag||"";return g==="decorative_image_with_title"?"generic":h==="1.1.1"&&(d?.tag==="img"||/alt|image/.test(g))?"alt":h==="1.4.3"||h==="1.4.6"||g==="color-contrast"||g==="contrast_insufficient"||g==="contrast_enhanced"?"contrast":h==="2.2.2"||h==="2.3.3"||/motion|animation|reduced_motion/.test(g)?"motion":"generic"}function Ou(f){return !!f&&f.tag!=="img"&&f.cssBackgroundImage&&!f.img}var zL=/\b(needs?|requires?|for)\s+(a\s+)?(human|manual)?\s*review\b|\bhuman review\b|\bmanual review\b|\bincomplete\b/gi;function GL(f){let d=String(f??"").replace(/\s+/g," ").replace(zL,"judged").trim();if(d.length<=Lu)return d;let g=d.slice(0,Lu-1),h=g.lastIndexOf(" ");return (h>Lu/2?g.slice(0,h):g).replace(/[\s,;:–—-]+$/,"")+"\u2026"}function WL(f){let d=String(f??"").replace(/\s+/g," ").trim();if(d=d.replace(/^(an?\s+|the\s+)?(image|picture|photo|photograph|graphic|icon|illustration|screenshot)\s+(of|showing|depicting)(\s+|$)(an?\s+|the\s+)?/i,""),d=d.replace(/^["'“”]+|["'“”]+$/g,"").trim(),d.length>Tg){d=d.slice(0,Tg);let g=d.lastIndexOf(" ");g>60&&(d=d.slice(0,g)),d=d.replace(/[\s,;:–—-]+$/,"");}return d&&(d=d[0].toUpperCase()+d.slice(1)),d}function Qn(f){let d=f.match(/\d+(\.\d+)?/g);return !d||d.length<3?f:"#"+d.slice(0,3).map(g=>Math.round(Number(g)).toString(16).padStart(2,"0")).join("")}var Lg=/^#?([0-9a-f]{6})$/i;function UL(f){let d=String(f??"").trim().match(Lg);return d?"#"+d[1].toLowerCase():null}function XL(f){let{confidence:d,reviewReason:g,...h}=f;return {...h,id:f.id.replace("axe-incomplete-","axe-")}}function YL(f){let d=f;if(typeof f=="string"){let m=f.replace(/```json\s*/gi,"").replace(/```/g,"").match(/\[[\s\S]*\]/);if(!m)return null;try{d=JSON.parse(m[0]);}catch{return null}}else f&&typeof f=="object"&&Array.isArray(f.verdicts)&&(d=f.verdicts);if(!Array.isArray(d))return null;let g=[];for(let h of d){if(!h||typeof h!="object")continue;let{id:m,verdict:y,reason:v,fix:w}=h;if(typeof m!="string"||y!=="pass"&&y!=="violation")continue;let C=w&&typeof w=="object"?w:void 0;g.push({id:m,verdict:y,reason:typeof v=="string"?v:void 0,fix:C?{attribute:typeof C.attribute=="string"?C.attribute:void 0,value:typeof C.value=="string"?C.value:void 0}:void 0});}return g}var ea=class extends Error{},KL=`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.
|
|
380
|
+
`),{inject:X}=await Promise.resolve().then(()=>(Fr(),cn));try{await X(f,{tool:"detector-helpers",content:$});}catch{await f.evaluate(`(0,eval)(${JSON.stringify($)})`);}}catch(T){console.warn("[webability] helper injection failed:",T.message),(g??[]).push("color:kernel-injection-failed");}let y=[];try{let{detectPlatform:T,applyPlatformTemplates:I}=await Promise.resolve().then(()=>(hg(),mg)),M=await T(f);y=await I(f,M);}catch{}let{guardDetectorState:v}=await Promise.resolve().then(()=>(Fr(),cn)),w=globalThis.process?.env?.WA_STRICT_STATE==="1",C={strict:w,bugs:h?.internalBugs},E=await v(f,"detectors:parallel",g??[],()=>Promise.allSettled(sL.map(async T=>{try{let I=await T.detect(f);return T.cap&&I.length>=T.cap&&m.push({detector:T.name,cap:T.cap}),I}catch{return []}})),C),A=[];h?.skipFocusMutating&&(g??[]).push("focus:mutating-detectors-skipped (live-tab scan; focus visibility and focus obscured were not checked)");let S=[...h?.skipFocusMutating?[]:[_h,Dh],...h?.extraSerialDetectors??[]];for(let T of S){let I=[];try{I=await v(f,T.name,g??[],()=>T.detect(f).catch(()=>[]),C);}catch(M){if(w)throw M}try{T.cap&&I.length>=T.cap&&m.push({detector:T.name,cap:T.cap}),A=A.concat(I);}catch{}}let F=[...E.flatMap(T=>T.status==="fulfilled"?T.value:[]),...A],D=[...y,...F],x=lL(D),k=["wp-ada-compliance","webability-widget","webability-a11y","asw-","userway","acsb","audioeye","equallyai"];return x.filter(T=>{let I=T.selector.toLowerCase();return I.trim()?!k.some(M=>I.includes(M)):false})}function lL(f){let d=new Set;return f.filter(g=>{let h=`${g.selector}::${g.issueType}`;return d.has(h)?false:(d.add(h),true)})}var vg="1.10.0";var Au=["wcag2a","wcag2aa","wcag21aa","wcag22aa"];function Eu(f){return f.includes("wcag21aa")||f.includes("wcag22aa")||f.includes("wcag134")?{"css-orientation-lock":{enabled:true}}:{}}function bg(f,d){return d==="AAA"&&!f.includes("wcag2aaa")?[...f,"wcag2aaa"]:f}var uL={"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.1":"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 _u(f){return uL[f]??"AA"}var Za={A:1,AA:2,AAA:3};function cL(f){let d=String(f.wcag||"").split(/[,\s]+/).filter(h=>/^\d+\.\d+\.\d+$/.test(h));if(d.length===0)return f.level??"AA";let g="AAA";for(let h of d)Za[_u(h)]<Za[g]&&(g=_u(h));return g}function Jn(f,d="AA"){let g=Za[d]??Za.AA;return f.filter(h=>Za[cL(h)]<=g)}var dL=new Set(["new_window_link","external_link_warning","download_link_warning"]);function yg(f){let d=dL.has(f.issueType)?"minor":f.needsAI?"serious":"moderate",g=f.attribute==="style",h=f.attribute.startsWith("data-"),m=g&&f.fixValue?fL(f.fixValue):f.fixValue;return {id:`wa-${f.issueType}-${Qa(f.selector)}`,source:"webability",type:f.issueType,wcag:f.wcag,level:_u(f.wcag),impact:d,message:pL(f,m,h),selector:f.selector,html:f.outerHtml,...f.needsReview?{confidence:"needs_review"}:{},...f.reviewReason?{reviewReason:f.reviewReason}:{},fix:{attribute:f.attribute,currentValue:f.currentValue,suggestedValue:m,needsManualReview:f.needsAI||g||h||!!f.needsReview||!!f.manualFix}}}function fL(f){let d=f.trim();if(!d)return "";let g=d.endsWith(";"),m=d.split(";").map(y=>{let w=y.toLowerCase().lastIndexOf("!important");return w===-1?y.trim():y.slice(0,w).trim()}).filter(y=>y.length>0);return m.length===0?"":m.join(";")+(g?";":"")}function pL(f,d,g){if(f.message)return f.message;let h=f.issueType.replace(/_/g," "),m=d??f.fixValue;return g?m?`${h}: ${m}`:f.currentValue?`${h}: ${f.currentValue}`:f.context?`${h}: ${f.context}`:h:m?`${h}: set ${f.attribute}="${m}"`:f.currentValue?`${h}: ${f.attribute} is "${f.currentValue}"`:`${h}: missing ${f.attribute}`}function Zn(f){return Array.isArray(f)?f.flat(1/0).filter(g=>typeof g=="string").join(" >>> "):typeof f=="string"?f:""}function Qa(f){let d=0;for(let g=0;g<f.length;g++)d=(d<<5)-d+f.charCodeAt(g)|0;return Math.abs(d).toString(36)}function Cu(f){return f==="critical"||f==="serious"||f==="moderate"||f==="minor"?f:"moderate"}function Su(f,d=[]){return {total:f.length,critical:f.filter(g=>g.impact==="critical").length,serious:f.filter(g=>g.impact==="serious").length,moderate:f.filter(g=>g.impact==="moderate").length,minor:f.filter(g=>g.impact==="minor").length,incomplete:0}}function mL(f){let d=/^wcag(\d)(\d)(\d{1,2})$/.exec(f);return d?`${d[1]}.${d[2]}.${d[3]}`:""}function ku(f){for(let d of f){let g=mL(d);if(g)return g}return ""}function Tu(f){return f.includes("wcag2aaa")?"AAA":f.includes("wcag2aa")||f.includes("wcag21aa")||f.includes("wcag22aa")?"AA":"A"}async function Dg(f,d){try{let{AxeBuilder:g}=await import('@axe-core/playwright'),h=typeof f.mainFrame=="function"?f:f.axePage?.()??f;return await new g({page:h}).options({rules:Eu(d)}).withTags(d).analyze()}catch{return hL(f,d)}}async function hL(f,d){let g=await Promise.resolve().then(()=>j3(xg())),h=g.source??g.default?.source;if(!h)throw new Error("axe-core source unavailable");try{await f.evaluate(h);}catch{let{inject:y}=await Promise.resolve().then(()=>(Fr(),cn));await y(f,{tool:"axe",content:h});}return await f.evaluate(({wcagTags:y,rules:v})=>new Promise((w,C)=>{let E=window;if(!E.axe)return C(new Error("axe-core not loaded"));E.axe.run(document,{runOnly:{type:"tag",values:y},rules:v,resultTypes:["violations","incomplete"]}).then(w).catch(C);}),{wcagTags:d,rules:Eu(d)})}function Ru(f){let d=[],g=[];for(let h of f)h.confidence==="needs_review"||vL(h)?g.push(h):d.push(gL(h));return {verdicts:d,undecided:g}}function gL(f){if(f.confidence===void 0&&f.reviewReason===void 0)return f;let{confidence:d,reviewReason:g,...h}=f;return h}function vL(f){let d=(f.type||"").toLowerCase(),g=f.wcag||"",h=f.html||"",m=(f.message||"").toLowerCase();if((d==="contrast_insufficient"||d==="color-contrast"||g==="1.4.3"||g==="1.4.11")&&bL(h))return "background uses gradient or image";if(d==="image_of_text"||g==="1.4.5"){let y=_g(h,"src").toLowerCase();y.startsWith("data:")&&(y=y.split(",")[0]);let v=_g(h,"alt").toLowerCase();if(/\b(logo|brand|wordmark|hero|banner|footer|marketing|promo|cover)\b/.test(y))return "brand imagery";if(v.length>0&&/\b(logo|brand|product screenshot|dashboard)\b/.test(v))return "branded imagery"}return (d==="inconsistent_navigation"||m.includes("inconsistent navigation"))&&(/<footer/i.test(h)||/<aside/i.test(h))?"footer/aside nav":""}function bL(f){return /background(-image)?\s*:\s*(?:linear-gradient|radial-gradient|conic-gradient|url\()/i.test(f)}function _g(f,d){let g=new RegExp(`\\b${d}\\s*=\\s*"([^"]*)"`,"i"),h=f.match(g);return h?h[1]:""}Fr();var yL=60,wL=3,xL=120,DL=1200,_L=300,AL=2e5,EL=8e3,CL=new Set(["bgImage","bgGradient","bgOverlap","elmPartiallyObscured","elmPartiallyObscuring"]),SL="*,*::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 kL(f){let{selectors:d,maxBoxes:g,maxW:h,maxH:m,maxArea:y}=f,v=document.documentElement.scrollWidth,w=document.documentElement.scrollHeight,C=document.createElement("canvas");C.width=C.height=1;let E=C.getContext("2d",{willReadFrequently:true}),A=T=>{try{E.clearRect(0,0,1,1),E.fillStyle="#000",E.fillStyle=T,E.fillRect(0,0,1,1);let I=E.getImageData(0,0,1,1).data;return [I[0],I[1],I[2],I[3]]}catch{return null}},S={},F=document.querySelectorAll("video,canvas,iframe,embed,object");if(F.length>200){for(let T of d)S[T]=null;return S}let D=Array.from(F).map(T=>T.getBoundingClientRect()),x=window.scrollX,k=window.scrollY;for(let T of d){S[T]=null;let I=null;try{I=document.querySelector(T);}catch{continue}if(!I)continue;let M=getComputedStyle(I);if(M.visibility!=="visible"||M.display==="none"||M.webkitBackgroundClip==="text"||M.backgroundClip==="text")continue;let V=false,z=0;for(let ae=I;ae;ae=ae.parentElement){if(++z>64){V=true;break}let ue=getComputedStyle(ae);parseFloat(ue.opacity)<1&&(V=true),(ue.transform!=="none"||ue.mixBlendMode!=="normal"||ue.filter!=="none")&&(V=true);}if(V)continue;let Y=A(M.color);if(!Y||Y[3]<255)continue;let q=parseFloat(M.fontSize),P=parseInt(M.fontWeight,10)>=700,O=q>=24||P&&q>=18.66,B=[],$=I.getBoundingClientRect();if($.height>m*g||$.width>h*2)continue;let X=document.createTreeWalker(I,NodeFilter.SHOW_TEXT),K,te=0,Z=false;for(;!Z&&(K=X.nextNode());){if(++te>50){Z=true;break}if(K.parentElement!==I)continue;let ae=K.textContent||"";if(ae.length>2e3){Z=true;break}if(!ae.trim())continue;let ue=document.createRange();ue.selectNodeContents(K);let xe=ue.getClientRects();if(xe.length>g){Z=true;break}for(let Ie=0;Ie<xe.length;Ie++){let Ae=xe[Ie];if(!(Ae.width<2||Ae.height<2)&&(B.push({x:Math.round(Ae.left+x),y:Math.round(Ae.top+k),w:Math.max(1,Math.round(Ae.width)),h:Math.max(1,Math.round(Ae.height))}),B.length>g)){Z=true;break}}}Z||B.length===0||B.length>g||B.some(ae=>ae.w>h||ae.h>m||ae.w*ae.h>y||ae.x<0||ae.y<0||ae.x+ae.w>v||ae.y+ae.h>w)||B.some(ae=>D.some(ue=>ae.x<ue.right+x&&ae.x+ae.w>ue.left+x&&ae.y<ue.bottom+k&&ae.y+ae.h>ue.top+k))||(S[T]={fg:`rgb(${Y[0]},${Y[1]},${Y[2]})`,threshold:O?3:4.5,boxes:B});}return S}async function TL(f){let{b64:d,fg:g}=f,h=atob(d),m=new Uint8Array(h.length);for(let V=0;V<h.length;V++)m[V]=h.charCodeAt(V);let y=await createImageBitmap(new Blob([m],{type:"image/png"})),v=document.createElement("canvas");v.width=y.width,v.height=y.height;let w=v.getContext("2d",{willReadFrequently:true});w.drawImage(y,0,0);let C=w.getImageData(0,0,v.width,v.height).data,E=V=>{let z=V/255;return z<=.03928?z/12.92:Math.pow((z+.055)/1.055,2.4)},A=(V,z,Y)=>.2126*E(V)+.7152*E(z)+.0722*E(Y),S=g.match(/\d+/g).map(Number),F=A(S[0],S[1],S[2]),D=Math.max(1,Math.floor(Math.sqrt(v.width*v.height/1500))),x=0,k=1/0,T="",I="",M=0;for(let V=0;V<v.height;V+=D)for(let z=0;z<v.width;z+=D){let Y=(V*v.width+z)*4;if(C[Y+3]<255)continue;let q=A(C[Y],C[Y+1],C[Y+2]),P=Math.max(F,q),O=Math.min(F,q),B=(P+.05)/(O+.05);B>x&&(x=B,I=`rgb(${C[Y]},${C[Y+1]},${C[Y+2]})`),B<k&&(k=B,T=`rgb(${C[Y]},${C[Y+1]},${C[Y+2]})`),M++;}return M===0?null:{best:x,worst:k,worstBg:T,bestBg:I}}var Bo=class extends Error{};function ti(f,d){let g=d-Date.now();if(g<=0)return Promise.reject(new Bo("pixel pass deadline"));let h,m=new Promise((y,v)=>{h=setTimeout(()=>v(new Bo("pixel pass deadline")),g);});return Promise.race([f,m]).finally(()=>clearTimeout(h))}async function Fu(f,d){let g=f.screenshot;if(typeof g!="function"||d.length===0)return [];let h=Array.from(new Set(d)).slice(0,yL),m=[],y=false,v=Date.now()+EL;try{await ti(f.evaluate("if(typeof globalThis.__name==='undefined'){globalThis.__name=function(t){return t}}"),v);let w=await ti(f.evaluate(kL,{selectors:h,maxBoxes:wL,maxW:DL,maxH:_L,maxArea:AL}),v);await ti(xu(f,{tool:"contrast-pixels",css:SL}),v),y=!0;let C=0;for(let E of h){let A=w[E];if(!A)continue;if(Date.now()>v||C+A.boxes.length>xL)break;let S=0,F=1/0,D="",x="",k=!0;for(let T of A.boxes){C++;let I=await ti(g.call(f,{clip:{x:T.x,y:T.y,width:T.w,height:T.h},fullPage:!0,type:"png",animations:"disabled"}),v),M=globalThis.Buffer,V=M?M.from(I).toString("base64"):"",z=await ti(f.evaluate(TL,{b64:V,fg:A.fg}),v);if(!z){k=!1;break}z.best>S&&(S=z.best,x=z.bestBg),z.worst<F&&(F=z.worst,D=z.worstBg);}k&&m.push({selector:E,fail:S<A.threshold*.97,bestRatio:S,worstRatio:F,...D?{worstBg:D}:{},...x?{bestBg:x}:{},threshold:A.threshold,fg:A.fg});}}catch(w){globalThis.process?.env?.WA_DEBUG_PIXELS&&console.error("pixel judge failed",w);}finally{if(y)try{await Promise.race([f.evaluate(()=>document.querySelectorAll('style[data-wa-injected^="contrast-pixels:"]').forEach(w=>w.remove())),new Promise(w=>setTimeout(w,1e3))]);}catch{}}return m}function RL(f,d){let{confidence:g,reviewReason:h,...m}=f;return {...m,id:f.id.replace("axe-incomplete-","axe-"),impact:"serious",message:`contrast: ${d.fg} text on its rendered background is at best ${d.bestRatio.toFixed(2)}:1 (measured from pixels, every background pixel behind the text fails), needs ${d.threshold}:1`}}async function Ag(f,d,g,h){let m=d.filter(E=>E.wcag!=="1.4.3"||!E.selector?false:E.source==="axe-core"?CL.has(g.get(E.id)??""):E.type==="contrast_insufficient"&&/gradient or image/.test(E.reviewReason??""));if(m.length===0)return [];let y=await Fu(f,m.map(E=>E.selector));if(h)for(let E of y)h.set(E.selector,E);globalThis.process?.env?.WA_DEBUG_PIXELS&&console.error(`pixel judge: ${m.length} candidates, ${y.length} measured, ${y.filter(E=>E.fail).length} fail`);let v=new Map(y.filter(E=>E.fail).map(E=>[E.selector,E])),w=[],C=new Set;for(let E of m){let A=v.get(E.selector);!A||C.has(E.selector)||(C.add(E.selector),w.push(RL(E,A)));}return w}function FL(f){f=f.replace("#",""),f.length===3&&(f=f[0]+f[0]+f[1]+f[1]+f[2]+f[2]);let d=parseInt(f,16);return [d>>16&255,d>>8&255,d&255]}function Iu(f){let d=f/255;return d<=.03928?d/12.92:Math.pow((d+.055)/1.055,2.4)}function Eg(f,d,g){return .2126*Iu(f)+.7152*Iu(d)+.0722*Iu(g)}function IL(f,d){let g=Math.max(f,d),h=Math.min(f,d);return (g+.05)/(h+.05)}function Cg(f){if(f.startsWith("#"))return FL(f);let d=f.match(/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)/);return d?[parseInt(d[1]),parseInt(d[2]),parseInt(d[3])]:null}function Sn(f,d){let g=Cg(f),h=Cg(d);return !g||!h?0:IL(Eg(...g),Eg(...h))}var LL=30,PL=10,ML=2e4,OL=30,NL=400*1024,qL="https://openrouter.ai/api/v1",BL="anthropic/claude-haiku-4.5",Sg="deepseek/deepseek-v4-flash",kg=400,Tg=125,Lu=160,HL=2e3,Ho=new Map;function VL(f){let d=0;for(let g=0;g<f.length;g++)d=(d<<5)-d+f.charCodeAt(g)|0;return Math.abs(d).toString(36)}var Pu=f=>f.wcag||f.type,Rg=(f,d,g)=>`${f}|${d.selector}|${Pu(d)}|${VL(g)}`,Mu=()=>!!globalThis.process?.env?.WA_DEBUG_JUDGE;function jL(f){let{selectors:d,maxHtml:g}=f,h={elements:{}},m=[],y=T=>/\(\s*prefers-reduced-motion\s*(:\s*reduce\s*)?\)/i.test(T)&&!/^\s*not\b/i.test(T),v=T=>{let I=T.split(",").map(M=>M.trim()).filter(Boolean);return I.length?I.every(M=>{let V=M.match(/^(-?[\d.]+)(ms|s)$/i);return V?parseFloat(V[1])*(V[2].toLowerCase()==="s"?1e3:1)<=10:false}):false},w=(T,I,M)=>{if(!(M>8))for(let V of Array.from(T)){let z=V.media?.mediaText,Y=I||typeof z=="string"&&y(z),q=V.style,P=V.selectorText;if(Y&&q&&typeof P=="string"){let $=q.getPropertyValue("animation-name").trim(),X=/^none(\s*,\s*none)*$/i.test($)||v(q.getPropertyValue("animation-duration"))||/^paused/i.test(q.getPropertyValue("animation-play-state").trim()),K=/^none(\s*,\s*none)*$/i.test(q.getPropertyValue("transition-property").trim())||v(q.getPropertyValue("transition-duration"));(X||K)&&m.push({selector:P,anim:X,trans:K});}let O=V.cssRules;O&&O.length&&w(O,Y,M+1);let B=V.styleSheet;if(B)try{w(B.cssRules,Y||y(V.media?.mediaText||""),M+1);}catch{}}};try{for(let T of Array.from(document.styleSheets))try{w(T.cssRules,y(T.media?.mediaText||""),0);}catch{}}catch{}let C=(T,I)=>{try{return T.matches(I)}catch{return false}},E=T=>T.split(",").map(I=>{let M=I.trim().match(/^(-?[\d.]+)(ms|s)$/i);return M?parseFloat(M[1])*(M[2].toLowerCase()==="s"?1e3:1):0}),A=T=>{let I=T.cloneNode(true);I.querySelectorAll("script, style").forEach(V=>V.remove());let M=(I.textContent||"").replace(/\s+/g," ").trim();if(!M){for(let V of Array.from(T.querySelectorAll("img[alt], [aria-label]")))if(M=(V.getAttribute("alt")||V.getAttribute("aria-label")||"").trim(),M)break}return M},S=T=>{let I=(T.getAttribute("aria-label")||"").trim();if(I)return I;let V=(T.getAttribute("aria-labelledby")||"").split(/\s+/).filter(Boolean).map(q=>{let P=document.getElementById(q);return P?(P.textContent||"").replace(/\s+/g," ").trim():""}).filter(Boolean).join(" ");if(V)return V;let z=A(T);if(z)return z;let Y=T instanceof HTMLInputElement&&/^(submit|button|reset|image)$/i.test(T.type)?(T.value||T.alt||"").trim():"";return Y||(T.getAttribute("title")||"").trim()},F='a[href], button, input:not([type="hidden"]), select, textarea, summary, [role="button"], [role="link"], [role="menuitem"], [role="tab"], [role="img"], [tabindex]:not([tabindex="-1"])',D=window.scrollX||0,x=window.scrollY||0,k=[];for(let T of d){let I=null;try{I=document.querySelector(T);}catch{}if(!I){h.elements[T]={found:false};continue}let M=k.indexOf(I);M<0&&(M=k.push(I)-1);let V=getComputedStyle(I),z=I.getBoundingClientRect(),Y=I.tagName.toLowerCase(),q={found:true,elementKey:M,tag:Y,html:(I.outerHTML||"").slice(0,g),rect:{x:z.left+D,y:z.top+x,w:z.width,h:z.height},role:(I.getAttribute("role")||"").toLowerCase(),ariaHidden:I.getAttribute("aria-hidden")==="true"||!!I.closest('[aria-hidden="true"]'),hidden:V.display==="none"||V.visibility==="hidden"||!!I.closest("[hidden]"),cssBackgroundImage:/url\(/i.test(V.backgroundImage||""),reducedMotionHandled:false,nearText:"",fg:V.color,bg:V.backgroundColor,fontSize:parseFloat(V.fontSize)||0,fontWeight:parseInt(V.fontWeight,10)||400};if(Y==="img"){let K=I;q.img={src:(K.currentSrc||K.getAttribute("src")||"").slice(0,300),alt:K.getAttribute("alt"),naturalW:K.naturalWidth||0,naturalH:K.naturalHeight||0,attrW:parseInt(K.getAttribute("width")||"0",10)||0,attrH:parseInt(K.getAttribute("height")||"0",10)||0};}if(q.cssBackgroundImage){let K=I.closest(F);K&&(q.control={tag:K.tagName.toLowerCase(),name:S(K).slice(0,120)});}if(!/^(img|video|canvas|iframe|object|embed|svg)$/.test(Y)){let K=V.animationName.split(",").some(ue=>ue.trim()&&ue.trim()!=="none")&&E(V.animationDuration).some(ue=>ue>10),te=E(V.transitionDuration).some(ue=>ue>10)&&V.transitionProperty.trim()!=="none",Z=m.filter(ue=>C(I,ue.selector)),ne=!K||Z.some(ue=>ue.anim),ae=!te||Z.some(ue=>ue.trans);q.reducedMotionHandled=(K||te)&&ne&&ae;}let P=I.closest('a[href], button, [role="button"], [role="link"]');if(P&&P!==I){let K=P.cloneNode(true);K.querySelectorAll("img, svg").forEach(ne=>ne.remove());let te=(K.textContent||"").replace(/\s+/g," ").trim(),Z=(P.getAttribute("aria-label")||"").trim();q.parentInteractive={tag:P.tagName.toLowerCase(),text:(te||Z).slice(0,120)};}let O=K=>{let te=K.cloneNode(true);return te.querySelectorAll("script, style").forEach(Z=>Z.remove()),(te.textContent||"").replace(/\s+/g," ").trim()},B=I.matches('a[href], [role="link"]'),$=O(I),X=I.parentElement;if(B&&(X=I.closest("p, li, td, th, dd, dt, figcaption, blockquote")||I.parentElement),X){let K=O(X),te=B&&$?K.indexOf($):-1,Z=te>120?te-120:0;q.nearText=(Z?"\u2026":"")+K.slice(Z,Z+240);}h.elements[T]=q;}return h}function $L(f,d){let g=(f.type||"").toLowerCase(),h=f.wcag||"";return g==="decorative_image_with_title"?"generic":h==="1.1.1"&&(d?.tag==="img"||/alt|image/.test(g))?"alt":h==="1.4.3"||h==="1.4.6"||g==="color-contrast"||g==="contrast_insufficient"||g==="contrast_enhanced"?"contrast":h==="2.2.2"||h==="2.3.3"||/motion|animation|reduced_motion/.test(g)?"motion":"generic"}function Ou(f){return !!f&&f.tag!=="img"&&f.cssBackgroundImage&&!f.img}var zL=/\b(needs?|requires?|for)\s+(a\s+)?(human|manual)?\s*review\b|\bhuman review\b|\bmanual review\b|\bincomplete\b/gi;function GL(f){let d=String(f??"").replace(/\s+/g," ").replace(zL,"judged").trim();if(d.length<=Lu)return d;let g=d.slice(0,Lu-1),h=g.lastIndexOf(" ");return (h>Lu/2?g.slice(0,h):g).replace(/[\s,;:–—-]+$/,"")+"\u2026"}function WL(f){let d=String(f??"").replace(/\s+/g," ").trim();if(d=d.replace(/^(an?\s+|the\s+)?(image|picture|photo|photograph|graphic|icon|illustration|screenshot)\s+(of|showing|depicting)(\s+|$)(an?\s+|the\s+)?/i,""),d=d.replace(/^["'“”]+|["'“”]+$/g,"").trim(),d.length>Tg){d=d.slice(0,Tg);let g=d.lastIndexOf(" ");g>60&&(d=d.slice(0,g)),d=d.replace(/[\s,;:–—-]+$/,"");}return d&&(d=d[0].toUpperCase()+d.slice(1)),d}function Qn(f){let d=f.match(/\d+(\.\d+)?/g);return !d||d.length<3?f:"#"+d.slice(0,3).map(g=>Math.round(Number(g)).toString(16).padStart(2,"0")).join("")}var Lg=/^#?([0-9a-f]{6})$/i;function UL(f){let d=String(f??"").trim().match(Lg);return d?"#"+d[1].toLowerCase():null}function XL(f){let{confidence:d,reviewReason:g,...h}=f;return {...h,id:f.id.replace("axe-incomplete-","axe-")}}function YL(f){let d=f;if(typeof f=="string"){let m=f.replace(/```json\s*/gi,"").replace(/```/g,"").match(/\[[\s\S]*\]/);if(!m)return null;try{d=JSON.parse(m[0]);}catch{return null}}else f&&typeof f=="object"&&Array.isArray(f.verdicts)&&(d=f.verdicts);if(!Array.isArray(d))return null;let g=[];for(let h of d){if(!h||typeof h!="object")continue;let{id:m,verdict:y,reason:v,fix:w}=h;if(typeof m!="string"||y!=="pass"&&y!=="violation")continue;let C=w&&typeof w=="object"?w:void 0;g.push({id:m,verdict:y,reason:typeof v=="string"?v:void 0,fix:C?{attribute:typeof C.attribute=="string"?C.attribute:void 0,value:typeof C.value=="string"?C.value:void 0}:void 0});}return g}var ea=class extends Error{},KL=`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.
|
|
381
381
|
|
|
382
382
|
Rules:
|
|
383
383
|
- 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.
|