@webability/core 1.14.0 → 1.15.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.js +1 -1
- package/dist/engine.cjs +30 -30
- package/dist/engine.d.cts +35 -1
- package/dist/engine.d.ts +35 -1
- package/dist/engine.js +30 -30
- package/dist/hostedFixJudge-DXYes7X1.d.cts +62 -0
- package/dist/hostedFixJudge-DXYes7X1.d.ts +62 -0
- package/dist/index.cjs +28 -28
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +28 -28
- package/dist/playwright.cjs +1 -1
- package/dist/playwright.js +1 -1
- package/package.json +1 -1
package/dist/playwright.cjs
CHANGED
|
@@ -382,7 +382,7 @@ See: https://github.com/dequelabs/axe-core/blob/master/doc/context.md`));}functi
|
|
|
382
382
|
`).join(`
|
|
383
383
|
`);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:_g);});var $g={};kr($g,{dismissModals:()=>hL});async function hL(f){await f.evaluate(d=>{for(let g of d){let h=document.querySelectorAll(g);for(let p of h)if(p.offsetParent!==null){p.click();return}}},mL),await new Promise(d=>setTimeout(d,500));}var mL,zg=Sr(()=>{mL=['[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 $o={};kr($o,{pruneHiddenIframeIssues:()=>yL,pruneInvisibleContrast:()=>bL,waitForRenderSettle:()=>gL});async function gL(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 p;try{p=await f.evaluate(()=>{let y=typeof document.getAnimations=="function"?document.getAnimations():[],_=0;for(let S of y){if(S.playState!=="running")continue;let x;try{x=S.effect?.getComputedTiming?.().iterations;}catch{x=void 0;}x!==1/0&&_++;}let w="",R=document.body?document.body.querySelectorAll('[style*="opacity"]'):[],F=Math.min(R.length,50);for(let S=0;S<F;S++)w+=getComputedStyle(R[S]).opacity+",";return _+"|"+w});}catch{return}if(p.indexOf("0|")===0&&p===h)return;h=p,await new Promise(y=>setTimeout(y,150));}}function Gg(f){return vL.has(f.wcag)||/contrast/i.test(f.type||"")}async function bL(f,d){let g=Array.from(new Set(d.filter(_=>Gg(_)&&_.selector).map(_=>_.selector))).slice(0,100);if(g.length===0)return d;let h;try{h=await f.evaluate(_=>{let w=[],R={},F=Math.max(document.documentElement.scrollWidth,window.innerWidth),S=Math.max(document.documentElement.scrollHeight,window.innerHeight),x=T=>{let C=T.match(/rgba?\(([^)]+)\)/);if(!C)return !1;let M=C[1].split(/[ ,/]+/).filter(Boolean);return M.length<4||parseFloat(M[3])>=.95};for(let T of _){let C=null;try{C=document.querySelector(T);}catch{continue}if(!C)continue;let M=getComputedStyle(C),L=C.getBoundingClientRect(),H=M.clipPath&&M.clipPath!=="none"&&/inset\(\s*(?:50|100)%/.test(M.clipPath)||/rect\(\s*0(?:px)?\s*,?\s*0(?:px)?\s*,?\s*0(?:px)?\s*,?\s*0(?:px)?\s*\)/.test(M.clip||""),N=L.width<=1||L.height<=1,V=window.scrollX,z=window.scrollY,U=L.right+V<=0||L.bottom+z<=0||L.left+V>=F||L.top+z>=S,ee=!1;if(U)for(let j=C.parentElement;j&&j!==document.body&&j!==document.documentElement;j=j.parentElement){let W=getComputedStyle(j);if(W.overflowX!=="visible"||W.overflowY!=="visible"||W.transform&&W.transform!=="none"){ee=!0;break}}if(U&&ee){R[T]="text is outside the visible page inside a scrolling / clipped container \u2014 check contrast where it is shown";continue}if(H||N||U){w.push(T);continue}let k=C,v=!1;for(;k&&k!==document.documentElement;){if(parseFloat(getComputedStyle(k).opacity)===0){v=!0;break}k=k.parentElement;}if(v){R[T]="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 D=L.left+L.width/2,E=L.top+L.height/2,P=C,q=!1;for(let j=0;P&&P!==document.body&&j<8;j++){let W=getComputedStyle(P);if(x(W.backgroundColor)||W.backgroundImage&&W.backgroundImage!=="none")break;let Q=P.querySelectorAll("video, canvas, img, picture");for(let te=0;te<Q.length;te++){let J=Q[te];if(J.contains(C)||C.contains(J))continue;let oe=J.getBoundingClientRect();if(oe.width>0&&oe.height>0&&D>=oe.left&&D<=oe.right&&E>=oe.top&&E<=oe.bottom){q=!0;break}}if(q)break;P=P.parentElement;}q&&(R[T]="text sits over a video or image \u2014 the background behind the glyphs cannot be measured from CSS");}return {hidden:w,review:R}},g);}catch{return d}let p=new Set(h.hidden),y=[];for(let _ of d){if(!Gg(_)){y.push(_);continue}if(p.has(_.selector))continue;let w=h.review[_.selector];y.push(w&&_.confidence!=="needs_review"?{..._,confidence:"needs_review",reviewReason:w,..._.fix?{fix:{..._.fix,needsManualReview:true}}:{}}:_);}return y}async function yL(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 _=[];for(let w of y){let R=null;try{R=document.querySelector(w);}catch{continue}if(!R||R.tagName!=="IFRAME")continue;let F=getComputedStyle(R),S=R.getClientRects().length===0||F.visibility==="hidden"||F.visibility==="collapse",x=(R.getAttribute("src")||"").trim().toLowerCase().indexOf("javascript:")===0;(S||x)&&_.push(w);}return _},g);}catch{return d}if(h.length===0)return d;let p=new Set(h);return d.filter(y=>!p.has(y.selector))}var vL,zo=Sr(()=>{vL=new Set(["1.4.3","1.4.6","1.4.11"]);});var Go={};kr(Go,{focusOnlyObscuredIndexes:()=>AL,resetInteractionState:()=>wL,restoreInteractionState:()=>DL,snapshotInteractionState:()=>xL});async function wL(f){try{await f.evaluate(()=>{try{document.activeElement?.blur?.();}catch{}try{window.scrollTo({left:0,top:0,behavior:"instant"});}catch{}});}catch{}}async function xL(f){try{await f.evaluate(()=>{let d=window;d.__waCallerState={el:document.activeElement,x:window.scrollX,y:window.scrollY};});}catch{}}async function DL(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 _L(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 AL(f,d){let g=d.map(_=>{let R=[..._.any??[],..._.none??[]].flatMap(S=>S.relatedNodes??[]);if(!R.length)return null;let F=R.map(S=>_L(S.target));return F.every(S=>!!S)?F:null}),h=Array.from(new Set(g.flatMap(_=>_??[])));if(!h.length)return new Set;let p={};try{p=await f.evaluate(({sels:_,own:w})=>{let R=S=>{let x=S.getBoundingClientRect(),T=getComputedStyle(S);return !!((x.width<=1||x.height<=1)&&(T.overflow==="hidden"||T.position==="absolute"||T.position==="fixed")||/^rect\(\s*0(px)?[\s,]+0(px)?[\s,]+0(px)?[\s,]+0(px)?\s*\)$/.test(T.clip||"")||/inset\(\s*50%/.test(T.clipPath||""))},F={};for(let S of _){let x=null;try{x=document.querySelector(S);}catch{x=null;}if(!x){F[S]=!1;continue}let T=x.closest(w);if(T&&T!==document.body&&T!==document.documentElement){F[S]=!0;continue}if(x===document.activeElement){try{x.blur();}catch{}F[S]=R(x);continue}F[S]=R(x);}return F},{sels:h,own:Ho});}catch{return new Set}let y=new Set;return g.forEach((_,w)=>{_&&_.length&&_.every(R=>p[R]===true)&&y.add(w);}),y}var Uo=Sr(()=>{Hr();});var ia={};kr(ia,{dedupeByElementIdentity:()=>TL,deduplicateIssues:()=>EL});function EL(f){let d=new Map,g=[...f].sort((h,p)=>{let y={webability:0,"axe-core":1,"deep-analysis":2},_=y[h.source]??3,w=y[p.source]??3;return _-w});for(let h of g){let p=CL(h);d.has(p)?!d.get(p).fix?.suggestedValue&&h.fix?.suggestedValue&&d.set(p,h):d.set(p,h);}return Array.from(d.values())}function CL(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 TL(f,d){if(d.length<2)return d;let g=Array.from(new Set(d.map(S=>S.selector).filter(Boolean))),h;try{h=await f.evaluate(S=>{let x=Array.from(document.querySelectorAll("*")),T=new Map;x.forEach((M,L)=>T.set(M,L));let C={};for(let M of S){let L=null;try{L=document.querySelector(M);}catch{}if(!L){let H=M.replace(/:(?:focus-visible|focus-within|focus|hover|active)$/,"");if(H!==M)try{L=document.querySelector(H);}catch{}}if(L){let H=L.closest("table");C[M]={el:T.get(L),table:H?T.get(H):-1,doc:L===document.documentElement||L===document.body};}}return C},g);}catch{return d}let p={webability:0,"axe-core":1,"deep-analysis":2},y=S=>{let x=h[S.selector];if(!x)return null;let T=S.wcag||S.type;return x.doc?{key:kL.has(S.wcag||"")?`doc::${T}`:`doc::${T}::${S.type}`,owner:true}:x.table>=0&&SL.test(S.type)?{key:`${x.table}::${T}::table-headers`,owner:x.el===x.table}:{key:`${x.el}::${T}`,owner:true}},_=[...d].sort((S,x)=>{let T=y(S),C=y(x),M=T?.owner?0:1,L=C?.owner?0:1;return M-L||(p[S.source]??3)-(p[x.source]??3)}),w=new Map,R=[];for(let S of _){let x=y(S);if(!x){R.push(S);continue}let T=w.get(x.key);T?!T.fix?.suggestedValue&&S.fix?.suggestedValue&&(y(T)?.owner??true)===x.owner&&w.set(x.key,S):w.set(x.key,S);}let F=new Set([...w.values(),...R]);return d.filter(S=>F.has(S))}var SL,kL,oa=Sr(()=>{SL=/^missing_table_header$|^td-has-header$|^th-has-data-cells$|^h43|^h63/,kL=new Set(["2.4.1","3.1.1","2.4.2"]);});var Xg={};kr(Xg,{parseGif:()=>Ug,playsOverFiveSeconds:()=>Wg,verifyAnimatedGifs:()=>RL});function Ug(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 p=0,y=0,_=0,w=null,R=()=>{for(;g<f.length;){let F=f[g++];if(F===0)return;g+=F;}};for(;g<f.length;){let F=f[g++];if(F===59)break;if(F===33){let S=f[g++];if(S===249)_=(f[g+2]??0)|(f[g+3]??0)<<8,g+=1+(f[g]??4),R();else if(S===255){let x=f[g]??0,T=String.fromCharCode(...Array.from(f.subarray(g+1,g+1+x)));g+=1+x,(T==="NETSCAPE2.0"||T==="ANIMEXTS1.0")&&f[g]===3&&f[g+1]===1&&(w=(f[g+2]??0)|(f[g+3]??0)<<8),R();}else R();}else if(F===44){let S=f[g+8]??0;g+=9,S&128&&(g+=3*(1<<(S&7)+1)),g+=1,R(),p++,y+=_<2?10:_,_=0;}else break}return {frames:p,seconds:y/100,loops:w}}function Wg(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 RL(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))),p={};try{p=await f.evaluate(async({sels:y,parserSrc:_})=>{let w=new Function("var __name = function (f) { return f }; return ("+_+")")(),R={};return await Promise.all(y.map(async F=>{R[F]=null;try{let S=document.querySelector(F),x=S&&(S.currentSrc||S.src);if(!x)return;let T=new AbortController,C=setTimeout(()=>T.abort(),5e3);try{let M=await fetch(x,{signal:T.signal,credentials:"same-origin"});if(!M.ok||Number(M.headers.get("content-length")||"0")>2e7)return;R[F]=w(new Uint8Array(await M.arrayBuffer()));}finally{clearTimeout(C);}}catch{}})),R},{sels:h,parserSrc:Ug.toString()});}catch{p={};}return d.flatMap(y=>{if(y.type!=="animated_gif_no_pause")return [y];let _=p[y.selector];if(!_)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(!Wg(_))return [];let w=_.loops===0?"loops forever":`plays for ${(_.seconds*(_.loops===null?1:_.loops+1)).toFixed(1)}s`;return [{...y,message:`animated GIF (${_.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 Kg=Sr(()=>{});var Vu={};kr(Vu,{scopeIssuesToRoot:()=>FL});async function FL(f,d,g){let h=Array.from(new Set(d.map(y=>y.selector).filter(Boolean))),p;try{p=await f.evaluate(({rootSel:y,sels:_})=>{let w=S=>{try{let T=document.querySelector(S);if(T)return T}catch{}let x=S.replace(/:(?:focus-visible|focus-within|focus|hover|active)$/,"");if(x!==S)try{return document.querySelector(x)}catch{return null}return null},R=null;try{R=document.querySelector(y);}catch{return {invalid:!0,matched:!1,within:{}}}if(!R)return {invalid:!1,matched:!1,within:{}};let F={};for(let S of _){let x=w(S);F[S]=x?x===R||R.contains(x):!0;}return {invalid:!1,matched:!0,within:F}},{rootSel:g,sels:h});}catch{return {issues:d,warning:`scope:evaluate-failed (${g}) \u2014 results unfiltered`}}return p.invalid?{issues:d,warning:`scope:invalid-selector (${g}) \u2014 results unfiltered`}:p.matched?{issues:d.filter(y=>y.selector?p.within[y.selector]===true:true)}:{issues:[],warning:`scope:root-miss (${g} matched nothing \u2014 empty result)`}}var ju=Sr(()=>{});var qo={mobile:{width:375,height:667},tablet:{width:768,height:1024},desktop:{width:1280,height:720}};function uh(f,d){let g=f??"";if(g.trimStart().startsWith("{"))try{let h=JSON.parse(g);if(h&&typeof h=="object"&&!Array.isArray(h))return JSON.stringify({...h,platform:d})}catch{}return (g?g+" | ":"")+"platform: "+d}var U3=()=>{let f="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye]",g=[],h=new Set;function p(w){let R=(w.textContent||"").trim().replace(/\s+/g,""),F=w.querySelector("img, svg, picture")!==null,S=w.querySelector("i[class], span[class]")!==null;if(R.length>0&&!F&&!S)return false;if(F){let x=w.querySelectorAll("img"),T="";x.forEach(L=>{T+=(L.getAttribute("alt")||"").trim();});let C=R.replace(/\s+/g,""),M=T.replace(/\s+/g,"");return C===""||C===M}return false}function y(w){let R=w.nextElementSibling;for(;R;){if(isVisible(R))return R;R=R.nextElementSibling;}return null}return document.querySelectorAll("a[href]").forEach(w=>{if(g.length>=50||w.closest(f)||!isVisible(w)||h.has(w))return;let R=w.getAttribute("href");if(!R||R==="#")return;let F=y(w);if(!F||F.tagName!=="A"||F.getAttribute("href")!==R||h.has(F)||w.getAttribute("aria-hidden")==="true"||F.getAttribute("aria-hidden")==="true")return;let x=p(w),T=p(F);if(!x&&!T)return;let C=x?w:F,M=x?F:w;h.add(C),h.add(M);let L=uniqueSel(C),H=C.outerHTML.slice(0,300),N=(M.textContent||"").trim().slice(0,80);g.push({selector:L,attribute:"aria-hidden",currentValue:"",issueType:"adjacent_redundant_link",wcag:"2.4.4",context:JSON.stringify({href:R,imageLink:true,adjacentLinkText:N,suggestion:'Add aria-hidden="true" and tabindex="-1" to the image-only link'}),needsAI:false,fixValue:"true",outerHtml:H}),g.push({selector:L,attribute:"tabindex",currentValue:"",issueType:"adjacent_redundant_link",wcag:"2.4.4",context:JSON.stringify({supplementary:"Remove from tab order alongside aria-hidden",href:R}),needsAI:false,fixValue:"-1",outerHtml:H});}),g},ch={name:"adjacentLinks",cap:50,async detect(f){return f.evaluate(U3)}};var W3=()=>{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"]),p=50,y=[],_=new Set;function w(S){let x=S,T=0;for(;x&&x.nodeType===1&&x!==document.body&&T<20;){try{let C=getComputedStyle(x);if(C.display==="none"||C.visibility==="hidden"||C.visibility==="collapse")return !0}catch{}x=x.parentElement,T++;}return false}function R(S){let x=S.tagName,T=S.getAttribute("tabindex");if(T!==null){let C=parseInt(T,10);if(!isNaN(C)&&C>=0)return true;if(!isNaN(C)&&C<0)return false}return h.has(x)?!(x==="A"&&!S.hasAttribute("href")||S.hasAttribute("disabled")):false}return document.querySelectorAll('[aria-hidden="true"]').forEach(S=>{if(y.length>=p||S.closest(f)||S.closest(d)||S.closest(g)||S.matches(g))return;let x=[];if(R(S)&&x.push(S),S.querySelectorAll("a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]").forEach(C=>{R(C)&&x.push(C);}),x.length!==0)for(let C of x){if(y.length>=p)return;let M=uniqueSel(C),L=M+"\0tabindex";if(_.has(L))continue;_.add(L);let H=w(C),N=!H;y.push({selector:M,attribute:"tabindex",currentValue:C.getAttribute("tabindex")||"",issueType:"aria_hidden_focusable",wcag:"4.1.2",context:JSON.stringify({tag:C.tagName.toLowerCase(),parentHidden:S.tagName.toLowerCase(),collapsed:H,suggestion:H?"Focusable control inside an aria-hidden region that is currently display:none/visibility:hidden \u2014 likely a closed modal/dialog/dropdown. Confirm the control is permanently hidden before removing it from the tab order.":'This control is rendered and operable inside an aria-hidden region. Remove aria-hidden from the region if the control is meant to be used, or hide the region (display:none / hidden / inert) when it is not. Do not set tabindex="-1" on a visible control: keyboard users lose it.'}),needsAI:false,fixValue:"-1",...H?{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.'}:{},...N?{manualFix:true,reviewReason:'the control is rendered inside an aria-hidden region: tabindex="-1" would leave a visible, clickable control unreachable by keyboard (2.1.1). The right fix is on the region (remove aria-hidden, or hide it for everyone), which needs a person.'}:{},outerHtml:(C.outerHTML||"").slice(0,300)});}}),y},dh={name:"ariaHiddenFocusable",cap:50,async detect(f){return f.evaluate(W3)}};var X3=()=>{let f="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],h=new Set,p=[/\btoast\b/i,/\bsnackbar\b/i,/error[-_]message|error[-_]msg|form[-_]error|validation[-_]error/i,/success[-_]message|success[-_]msg/i,/alert[-_]message|alert[-_]banner/i,/flash[-_]message|flash[-_]notice/i,/cart[-_]count|cart[-_]badge|cart[-_]quantity/i,/loading[-_]spinner|loading[-_]indicator/i,/search[-_]results?[-_]count/i,/\blive[-_]region\b/i,/notification[-_](bar|area|container|popup|wrapper)/i,/status[-_]message/i];function y(_){if((_.textContent||"").trim())return false;if(typeof _.checkVisibility=="function")return _.checkVisibility({visibilityProperty:true});for(let w=_;w&&w.nodeType===1;w=w.parentElement)if(getComputedStyle(w).display==="none")return false;return getComputedStyle(_).visibility!=="hidden"}for(let _ of p){if(g.length>=50)break;let w=document.querySelectorAll("*");for(let R of w){if(g.length>=50)break;if(h.has(R)||R.closest(f))continue;let F=R.className&&typeof R.className=="string"?R.className:"",S=R.getAttribute("id")||"";if(!_.test(F)&&!_.test(S)||R.getAttribute("aria-live"))continue;let x=R.getAttribute("role")||"";if(["alert","status","log","timer","marquee"].includes(x)||!y(R))continue;h.add(R);let T=uniqueSel(R),C=_.test(F)?"class":"id",M=C==="class"?F.slice(0,60):S;g.push({selector:T,attribute:"aria-live",currentValue:"",issueType:"aria_live",wcag:"4.1.3",context:C+": "+M+" | pattern: "+_.source,needsAI:false,fixValue:"polite"});}}return g},fh={name:"ariaLive",cap:50,async detect(f){return f.evaluate(X3)}};var K3=()=>{let f="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye],[class*=ae-exclude],[id*=ae_app],[id*=ae_],[class*=EquallyAI]",g=[],h=new Set,p=["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 R of p){let F=w.getAttribute(R);if(!F||!F.trim())continue;let S=F.trim().split(/\s+/).filter(z=>z.length>0);if(S.length===0||!S.every(z=>!document.getElementById(z)))continue;let T=w.getAttribute("aria-label");if(T&&T.trim())continue;let C=getAccessibleName(w);if(C&&C.trim())continue;let M=uniqueSel(w),L=M+"\0"+R;if(h.has(L))continue;h.add(L);let{nearbyHeading:H,parentTag:N,parentRole:V}=getNearbyContext(w);g.push({selector:M,attribute:"aria-label",currentValue:"",issueType:"broken_aria_reference",wcag:"4.1.2",context:JSON.stringify({tag:w.tagName.toLowerCase(),brokenAttr:R,brokenIds:S,nearbyHeading:H,parentTag:N,parentRole:V,suggestion:`All IDs in ${R}="${F}" are missing from the DOM. Element has no accessible name. Generate an aria-label.`}),needsAI:true,outerHtml:(w.outerHTML||"").slice(0,300)});}}),g},ph={name:"brokenAriaReferences",cap:50,async detect(f){return f.evaluate(K3)}};var Y3=()=>{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 p of h){if(d.length>=50)break;let y=p;if(isWidget(y)||y.hasAttribute("type")||!y.closest("form"))continue;let _=(y.textContent||"").trim().slice(0,60),w=(y.getAttribute("aria-label")||"").trim().slice(0,60),R=_||w||"(no label)",F=R.toLowerCase();g.some(x=>F.includes(x))||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: "+R,needsAI:false,fixValue:"button",outerHtml:(y.outerHTML||"").slice(0,300)});}return d},mh={name:"buttonType",cap:50,async detect(f){return f.evaluate(Y3)}};var J3=()=>{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 p=h.tagName==="VIDEO";if(p){let L=h.hasAttribute("muted")||h.muted,H=h.hasAttribute("controls"),N=h.hasAttribute("loop")||h.loop,V=/mute|unmute|sound|volume|audio|play|pause/i,z=!!h.parentElement?.querySelector('button, [role="button"]')||!!h.getAttribute("id")&&!!document.querySelector('[aria-controls~="'+(h.getAttribute("id")||"").replace(/"/g,"")+'"]');for(let U=h.parentElement?.parentElement||null,ee=0;U&&!z&&ee<3;U=U.parentElement,ee++)z=Array.from(U.querySelectorAll('button, [role="button"]')).some(k=>V.test((k.getAttribute("aria-label")||"")+" "+(k.getAttribute("title")||"")+" "+(k.textContent||"")));if(L&&N&&!H&&!z)continue}let y=h.querySelectorAll("track"),_=false;for(let L of Array.from(y)){let H=(L.getAttribute("kind")||"").toLowerCase();if(H==="captions"||H==="subtitles"){_=true;break}}if(_)continue;let w=h.currentSrc||h.getAttribute("src")||"";if(w||(w=h.querySelector("source")?.getAttribute("src")||""),!w)continue;let R=w.toLowerCase();if(R.startsWith("blob:")||R.startsWith("data:")||R.startsWith("about:")||R.startsWith("javascript:")||R.endsWith(".m3u8")||R.includes(".m3u8?")||R.endsWith(".mpd")||R.includes(".mpd?"))continue;let F=w;try{F=new URL(w,location.href).toString();}catch{continue}let S=typeof uniqueSel=="function"?uniqueSel(h):"",x=h.getAttribute("title")||h.getAttribute("aria-label")||"",T=typeof getNearbyContext=="function"?getNearbyContext(h):{parentTag:h.tagName.toLowerCase(),nearbyHeading:""},C=[];C.push("media: "+h.tagName.toLowerCase()),C.push("src: "+F.slice(0,200)),x&&C.push("title: "+x.slice(0,80)),T.nearbyHeading&&C.push("heading: "+T.nearbyHeading),C.push("parent: "+T.parentTag);let M=p;d.push({selector:S,attribute:"data-needs-captions",currentValue:"",issueType:"missing_captions",wcag:"1.2.2",context:C.join(" | "),needsAI:true,...M?{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:F,outerHtml:(h.outerHTML||"").slice(0,300)});}return d},hh={name:"captions",cap:20,async detect(f){return f.evaluate(J3)}};var Z3=()=>{let f="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],h="p, li, blockquote, article, section, main, div",p=document.querySelectorAll("a[href]"),y=new Map;for(let _ of Array.from(p)){if(g.length>=40)break;if(_.closest(f)||_.closest('nav, header, footer, aside, [role="navigation"], [role="banner"], [role="contentinfo"]')||typeof isVisible=="function"&&!isVisible(_))continue;let w=_.closest(h);if(!w)continue;let R=(_.textContent||"").trim();if(!R)continue;let F=y.get(w);if(F===void 0){F=0;let U=document.createTreeWalker(w,NodeFilter.SHOW_TEXT),ee;for(;ee=U.nextNode();){let k=ee.parentElement;!k||k.closest("a")||k.closest(h)===w&&(typeof isVisible=="function"&&!isVisible(k)||(F+=(ee.textContent||"").trim().length));}y.set(w,F);}if(F<20||_.querySelector("img, svg, [class*=icon], [class*=arrow]"))continue;let S=getComputedStyle(_),x=getComputedStyle(w);if((S.textDecorationLine||S.textDecoration||"").includes("underline")||(()=>{let U=document.createTreeWalker(_,NodeFilter.SHOW_TEXT),ee,k=false;for(;ee=U.nextNode();){if(!/[\p{L}\p{N}]/u.test(ee.textContent||""))continue;k=true;let v=false;for(let D=ee.parentElement;D&&D!==_;D=D.parentElement){let E=getComputedStyle(D),P=(E.textDecorationColor||"").replace(/\s/g,"");if((E.textDecorationLine||"").includes("underline")&&P!=="transparent"&&!/^rgba\([^)]*,0(?:\.0+)?\)$/.test(P)){v=true;break}let q=(E.borderBottomColor||"").replace(/\s/g,""),j=q==="transparent"||/^rgba\([^)]*,0(?:\.0+)?\)$/.test(q);if((E.borderBottomStyle||"none")!=="none"&&parseFloat(E.borderBottomWidth||"0")>0&&!j){v=true;break}}if(!v)return false}return k})())continue;let M=parseInt(S.fontWeight||"400",10),L=parseInt(x.fontWeight||"400",10);if(Number.isFinite(M)&&Number.isFinite(L)&&M-L>=300||(S.borderBottomStyle||"none")!=="none"&&(S.borderBottomWidth||"0px")!=="0px"||S.color===x.color)continue;let N=typeof uniqueSel=="function"?uniqueSel(_):"",V=typeof getNearbyContext=="function"?getNearbyContext(_):{parentTag:_.tagName.toLowerCase(),nearbyHeading:""},z=[];z.push("link: "+R.slice(0,40)),z.push("color: "+S.color),z.push("parent-color: "+x.color),V.nearbyHeading&&z.push("heading: "+V.nearbyHeading),z.push("parent: "+V.parentTag),g.push({selector:N,attribute:"style",currentValue:S.textDecoration||"",issueType:"color_only_link",wcag:"1.4.1",context:z.join(" | "),needsAI:false,fixValue:"text-decoration: underline !important;",outerHtml:(_.outerHTML||"").slice(0,300)});}return g},gh={name:"colorOnly",cap:40,async detect(f){return f.evaluate(Z3)}};var Q3=()=>{let d=[],g=D=>typeof parseCssColor=="function"?parseCssColor(D):null,h=(D,E,P)=>typeof relLuminance=="function"?relLuminance(D,E,P):0,p=(D,E)=>typeof contrastRatio=="function"?contrastRatio(D,E):1;function y(D){let E=String(D.backgroundImage||"none");if(E==="none")return false;if(/gradient\(/i.test(E))return true;if(!/url\(/i.test(E))return false;let P=String(D.backgroundRepeat||"").toLowerCase(),q=String(D.backgroundSize||"").toLowerCase(),j=P.split(",").map(Q=>Q.trim()).some(Q=>Q!==""&&Q!=="no-repeat"),W=/cover|contain|100%/.test(q);return j||W}let _=new Map;function w(D){let E=[],P=false;for(let q=D;q&&q.nodeType===1;q=q.parentElement){let j=_.get(q);if(j!==void 0){P=j;break}if(E.push(q),parseFloat(getComputedStyle(q).opacity||"1")<1){P=true;break}}for(let q of E)_.set(q,P);return P}let R=new Map;function F(D){let E=R.get(D);if(E)return E;E=[];let P=Array.from(D.children);for(let q=0;q<P.length;q++){let j=getComputedStyle(P[q]);j.position==="static"||j.display==="none"||j.visibility!=="visible"||parseFloat(j.opacity||"1")<=0||E.push({el:P[q],z:j.zIndex==="auto"?0:parseInt(j.zIndex,10)||0,i:q});}return R.set(D,E),E}function S(D){if(D===document.documentElement)return true;let E=getComputedStyle(D);return !!(E.position==="fixed"||E.position==="sticky"||E.zIndex!=="auto"&&E.position!=="static"||E.zIndex!=="auto"&&D.parentElement&&/flex|grid/.test(getComputedStyle(D.parentElement).display||"")||parseFloat(E.opacity||"1")<1||E.transform&&E.transform!=="none"||E.filter&&E.filter!=="none"||E.isolation==="isolate"||E.mixBlendMode&&E.mixBlendMode!=="normal"||/paint|strict|content/.test(E.contain||""))}function x(D,E,P,q){let j=F(D);if(!j.length||j.length===1&&j[0].el===E)return [];let W=-1/0;for(let J=P;J&&J!==D;J=J.parentElement){let oe=getComputedStyle(J);if(oe.position==="static")continue;let de=oe.zIndex==="auto"?0:parseInt(oe.zIndex,10)||0;de>W&&(W=de);}let Q=Array.prototype.indexOf.call(D.children,E),te=[];for(let J of j){if(J.el===E||!(J.z<0?S(D):W>J.z||W===J.z&&J.i<Q))continue;let de=J.el.getBoundingClientRect();de.left>q.left+1||de.top>q.top+1||de.right<q.right-1||de.bottom<q.bottom-1||te.push(J);}return te.sort((J,oe)=>oe.z-J.z||oe.i-J.i),te.map(J=>J.el)}function T(D){try{let P=document.createRange(),q=null;for(let j of Array.from(D.childNodes)){if(j.nodeType!==3||!(j.textContent||"").trim())continue;P.selectNodeContents(j);let W=P.getBoundingClientRect();W.width<=0||W.height<=0||(q=q?{left:Math.min(q.left,W.left),top:Math.min(q.top,W.top),right:Math.max(q.right,W.right),bottom:Math.max(q.bottom,W.bottom)}:{left:W.left,top:W.top,right:W.right,bottom:W.bottom});}if(q)return q}catch{}let E=D.getBoundingClientRect();return {left:E.left,top:E.top,right:E.right,bottom:E.bottom}}function C(D,E){let P=document.documentElement,q=null,j=[{acc:[0,0,0],cover:0},{acc:[0,0,0],cover:0},{acc:[0,0,0],cover:0}],W=Math.max(0,Math.min(1,E[3]));j[0].acc=[E[0]*W,E[1]*W,E[2]*W],j[0].cover=W,j[2].cover=1;let Q=1,te=()=>j.some(Re=>Re.cover<1-1e-9),J=(Re,Ae=1)=>{if(!te())return true;let be=g(Re.backgroundColor||""),Et=y(Re);for(let gt of j){if(gt.cover>=1-1e-9)continue;if(Et)return false;if(!be)continue;let Ge=Math.max(0,Math.min(1,be[3]))*Ae;if(Ge<=0)continue;let ct=Ge*(1-gt.cover);gt.acc[0]+=be[0]*ct,gt.acc[1]+=be[1]*ct,gt.acc[2]+=be[2]*ct,gt.cover+=ct;}return true},oe=Re=>{let Ae=Math.max(0,Math.min(1,parseFloat(Re.opacity||"1")));if(!(Ae>=1)){for(let be of j)be.acc=be.acc.map(Et=>Et*Ae),be.cover*=Ae;Q*=Ae;}},de=D,fe=null;for(;de&&de!==P&&!(!te()&&!w(de));){let Re=getComputedStyle(de);if(fe&&F(de).length){q||(q=T(D));for(let Ae of x(de,fe,D,q)){let be=getComputedStyle(Ae);if(!J(be,Math.max(0,Math.min(1,parseFloat(be.opacity||"1")))))return null}}if(!J(Re))return null;oe(Re),fe=de,de=de.parentElement;}if(de===P){let Re=getComputedStyle(P);if(!J(Re))return null;oe(Re);}for(let Re of j){let Ae=1-Re.cover;Ae>0&&(Re.acc=Re.acc.map(be=>be+255*Ae),Re.cover=1);}let Ee=Re=>[Math.round(Math.min(255,Re.acc[0])),Math.round(Math.min(255,Re.acc[1])),Math.round(Math.min(255,Re.acc[2]))],Ne=j[2].acc.map(Re=>Math.min(255,Re));return {fg:Ee(j[0]),bg:Ee(j[1]),k:Q,rest:Ne}}function M(D,E,P){return "#"+[D,E,P].map(q=>{let j=Math.max(0,Math.min(255,Math.round(q))).toString(16);return j.length===1?"0"+j:j}).join("")}let L=.1;function H(D,E,P,q=1,j=[0,0,0]){let W=h(E[0],E[1],E[2])>.5;for(let Q of [P+L,P]){let te=N(D,E,Q,W,q,j)||N(D,E,Q,!W,q,j);if(te)return te}return null}function N(D,E,P,q,j,W){let Q=0,te=1,J=null;for(let oe=0;oe<20;oe++){let de=(Q+te)/2,fe=q?[D[0]*(1-de),D[1]*(1-de),D[2]*(1-de)]:[D[0]+(255-D[0])*de,D[1]+(255-D[1])*de,D[2]+(255-D[2])*de],Ee=[Math.round(fe[0]),Math.round(fe[1]),Math.round(fe[2])],Ne=[Ee[0]*j+W[0],Ee[1]*j+W[1],Ee[2]*j+W[2]];p(Ne,E)>=P?(J=Ee,te=de):Q=de;}return J}let V=new Set(["application","button","checkbox","columnheader","combobox","grid","gridcell","group","link","listbox","menu","menubar","menuitem","menuitemcheckbox","menuitemradio","option","radio","radiogroup","row","rowheader","scrollbar","searchbox","separator","slider","spinbutton","switch","tab","tablist","textbox","toolbar","tree","treegrid","treeitem"]);function z(D){if(D.closest("button:disabled, input:disabled, select:disabled, textarea:disabled, optgroup:disabled, option:disabled"))return true;for(let P=D;P&&P.nodeType===1;P=P.parentElement){if(P.getAttribute("aria-disabled")!=="true")continue;let q=(P.getAttribute("role")||"").trim().toLowerCase().split(/\s+/)[0];if(q&&V.has(q))return true}let E=D.closest("label");if(E){let P=E.control;if(P&&(P.disabled||P.getAttribute("aria-disabled")==="true"))return true}return false}let U=document.createTreeWalker(document.body,4),ee=new Set,k=[],v=U.nextNode();for(;v;){if((v.textContent||"").trim().length>=2){let E=v.parentElement;E&&!ee.has(E)&&(ee.add(E),k.push(E));}v=U.nextNode();}for(let D of k){if(d.length>=30)break;if(isWidget(D)||isHiddenFromAT(D)||!isVisible(D)||z(D))continue;let E=getComputedStyle(D),P=g(E.color||"");if(!P)continue;if(P[3]<.5){let ct=E.webkitBackgroundClip||E.backgroundClip||"",Jr=E.backgroundImage||"";if(String(ct).includes("text")&&/gradient\(/i.test(Jr)){let zt=Array.from(D.childNodes).filter(At=>At.nodeType===3).map(At=>(At.textContent||"").trim()).join("");zt&&d.push({selector:uniqueSel(D),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(zt.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:D.outerHTML.slice(0,200)});}continue}let q=parseFloat(E.fontSize||"16"),j=parseInt(E.fontWeight||"400",10),Q=q>=24||q>=18.66&&j>=700?3:4.5,te=Array.from(D.childNodes).filter(ct=>ct.nodeType===3).map(ct=>(ct.textContent||"").trim()).join("");if(!te)continue;let J=M(P[0],P[1],P[2]),oe=uniqueSel(D),de=C(D,P),fe=de?de.bg:null;if(fe===null){d.push({selector:oe,attribute:"style",currentValue:J,message:"contrast: text "+J+" on a gradient or image background \u2014 the ratio cannot be computed from CSS; check it meets "+Q+":1 where the background is lightest/darkest",issueType:"contrast_insufficient",wcag:"1.4.3",context:"fg="+J+" bg=<gradient-or-image> needs="+Q+" text="+JSON.stringify(te.slice(0,40)),needsAI:true,needsReview:true,reviewReason:"background uses gradient or image \u2014 contrast cannot be reliably computed",outerHtml:D.outerHTML.slice(0,200)});continue}let Ee=de,Ne=p(Ee.fg,fe);if(Ne>=Q)continue;let Re=H([P[0],P[1],P[2]],fe,Q,Ee.k,Ee.rest);if(!Re)continue;let Ae=M(Re[0],Re[1],Re[2]),be=M(fe[0],fe[1],fe[2]),Et=M(Ee.fg[0],Ee.fg[1],Ee.fg[2]),gt=Et===J?"":" (shown as "+Et+" after opacity/alpha)",Ge="color:"+Ae+" !important;";d.push({selector:oe,attribute:"style",currentValue:J,message:"contrast: "+J+gt+" on "+be+" is "+Ne.toFixed(2)+":1, needs "+Q+":1 \u2014 e.g. color "+Ae,issueType:"contrast_insufficient",wcag:"1.4.3",context:"fg="+Et+" bg="+be+" ratio="+Ne.toFixed(2)+" needs="+Q+" text="+JSON.stringify(te.slice(0,40)),needsAI:false,fixValue:Ge,outerHtml:D.outerHTML.slice(0,200)});}return d},vh={name:"contrast",cap:30,async detect(f){return f.evaluate(Q3)}};var eI=()=>{let f="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye]",g=[],h=document.querySelectorAll("marquee, blink");for(let R of Array.from(h)){if(g.length>=30)break;if(R.closest(f))continue;let F=typeof uniqueSel=="function"?uniqueSel(R):R.tagName.toLowerCase();g.push({selector:F,attribute:"aria-hidden",currentValue:R.getAttribute("aria-hidden")||"",issueType:"motion_uncontrollable",wcag:"2.2.2",context:`deprecated ${R.tagName.toLowerCase()} element \u2014 uncontrollable motion`,needsAI:false,manualFix:true,fixValue:"true",outerHtml:(R.outerHTML||"").slice(0,300)});}let p=document.querySelectorAll('img[src*=".gif" i], img[src$=".gif" i]');for(let R of Array.from(p)){if(g.length>=30)break;if(R.closest(f))continue;let F=R.getAttribute("src")||"";if(!/\.gif(\?|#|$)/i.test(F)||typeof isVisible=="function"&&!isVisible(R))continue;let S=R.getBoundingClientRect();if(S.width<=40&&S.height<=40)continue;let x=typeof uniqueSel=="function"?uniqueSel(R):"img";g.push({selector:x,attribute:"data-asw-motion-review",currentValue:"",issueType:"animated_gif_no_pause",wcag:"2.2.2",context:`animated GIF without pause control: ${F.split("/").pop()?.slice(0,60)||F.slice(-60)}`,needsAI:true,outerHtml:(R.outerHTML||"").slice(0,300)});}let y=document.querySelectorAll('meta[http-equiv="refresh"], meta[http-equiv="Refresh"], meta[http-equiv="REFRESH"]');for(let R of Array.from(y)){if(g.length>=30)break;let F=(R.getAttribute("content")||"").trim(),S=parseInt((F.split(/[;,]/)[0]||"").trim(),10);!Number.isFinite(S)||S<=0||g.push({selector:`meta[http-equiv="refresh"][content*="${F.slice(0,20)}"]`,attribute:"data-auto-refresh",currentValue:F,issueType:"auto_refresh",wcag:"2.2.1",context:`auto-refresh every ${S}s \u2014 interrupts screen reader users mid-sentence (WCAG 2.2.1)`,needsAI:false,manualFix:true,outerHtml:(R.outerHTML||"").slice(0,200)});}try{let R=!1,F=!1;for(let S of Array.from(document.styleSheets)){let x=null;try{x=S.cssRules;}catch{continue}if(x)for(let T of Array.from(x)){let C=T.cssText||"";if(/animation[^;]*\binfinite\b/i.test(C)&&/(keyframes|animation-name)/i.test(C+" "+(T.name||""))&&(R=!0),/prefers-reduced-motion[^{]*\(\s*reduce\s*\)/i.test(C)&&(F=!0),T.cssRules)for(let M of Array.from(T.cssRules)){let L=M.cssText||"";/animation[^;]*\binfinite\b/i.test(L)&&(R=!0);}}}R&&!F&&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 _=/\b(flash(ing)?|blink(ing)?|strobe)\b/i,w=document.querySelectorAll('[class*="flash" i], [class*="blink" i], [class*="strobe" i]');for(let R of Array.from(w)){if(g.length>=30)break;if(R.closest(f)||R.tagName==="BODY"||R.tagName==="HTML")continue;let F=R.className&&typeof R.className=="string"?R.className:"";if(!_.test(F)||typeof isVisible=="function"&&!isVisible(R))continue;let x=getComputedStyle(R).animationDuration,T=9999;if(x){let M=parseFloat(x);Number.isFinite(M)&&(T=/ms/i.test(x)?M:M*1e3);}if(T>333)continue;let C=typeof uniqueSel=="function"?uniqueSel(R):"";g.push({selector:C,attribute:"data-flashing-review",currentValue:"",issueType:"flashing_content",wcag:"2.3.1",context:`class matches flash/blink/strobe with ${T}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:(R.outerHTML||"").slice(0,300)});}return g},bh={name:"cssAnimations",cap:30,async detect(f){return f.evaluate(eI)}};var tI=()=>{let d=[];function g(_){let w=(_.getAttribute("role")||"").toLowerCase();return w==="presentation"||w==="none"||(_.getAttribute("class")||"").toLowerCase().indexOf("layout")!==-1}function h(_){if(!_)return 0;let w=_.querySelectorAll("th, td"),R=0;for(let F=0;F<w.length;F++){let S=parseInt(w[F].getAttribute("colspan")||"1",10);R+=isNaN(S)||S<1?1:S;}return R}function p(_){let w=_.querySelectorAll("tr"),R=[];for(let F=0;F<w.length;F++){let S=w[F];S.closest("table")===_&&R.push(S);}return R}let y=document.querySelectorAll("table");for(let _=0;_<y.length&&!(d.length>=30);_++){let w=y[_];if(isWidget(w)||!isVisible(w)||g(w))continue;let R=p(w);if(R.length<=1)continue;let F=R[0],S=h(F);if(S<=1)continue;let x=uniqueSel(w),T=getNearbyContext(w),C=w.querySelectorAll("img, svg, picture").length>=2;if(C&&!(w.textContent||"").trim()){if(w.querySelector("input, select, textarea, button")&&(C=false),C&&w.querySelector("th, thead, caption, [scope], [headers]")&&(C=false),C){let v=Array.from(w.querySelectorAll("img")).map(D=>(D.getAttribute("alt")||"").trim().toLowerCase()).filter(Boolean);new Set(v).size<v.length&&(C=false);}}else if(C){let v=w.querySelectorAll("td, th"),D=0;for(let E=0;E<v.length&&C;E++){let P=v[E];if(P.closest("table")!==w)continue;let q=(P.textContent||"").trim(),j=!!P.querySelector("img, svg, picture");if(!q&&!j)continue;D++;let W=P.querySelectorAll("a[href]");C=P.tagName==="TD"&&W.length===1&&j&&(W[0].textContent||"").trim()===q;}D<2&&(C=false);}if(C){d.push({selector:x,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:R.length,cols:S,nearbyHeading:T.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 M=null,L=w.querySelectorAll("thead");for(let v=0;v<L.length;v++)if(L[v].closest("table")===w){M=L[v];break}let H=M&&M.querySelector("tr")!==null,N=false;for(let v=0;v<R.length&&!N;v++){let D=R[v].children;for(let E=0;E<D.length&&!N;E++){let P=D[E],q=(P.tagName||"").toLowerCase();if(q!=="td"&&q!=="th")continue;if(q==="th"){N=true;break}let j=(P.getAttribute("headers")||"").trim();if(!j)continue;let W=j.split(/\s+/);for(let Q=0;Q<W.length;Q++){let te=document.getElementById(W[Q]);if(te&&(te.tagName||"").toLowerCase()==="th"&&te.closest("table")===w){N=true;break}}}}if(!H&&!N&&d.length<30&&d.push({selector:x,attribute:"thead",currentValue:M?"empty":"",issueType:"missing_table_header",wcag:"1.3.1",context:JSON.stringify({reason:M?"<thead> has no <tr>":"no <thead> element",rows:R.length,cols:S,nearbyHeading:T.nearbyHeading}),needsAI:false,fixValue:"wrap-first-row",outerHtml:(w.outerHTML||"").slice(0,300)}),S>2){let v=F.querySelectorAll("th, td"),D=v.length>0;for(let E=0;E<v.length;E++)if((v[E].tagName||"").toLowerCase()!=="td"){D=false;break}if(D)for(let E=0;E<v.length&&!(d.length>=30);E++){let P=v[E],q=uniqueSel(P),j=(P.textContent||"").trim().slice(0,60);d.push({selector:q,attribute:"role",currentValue:P.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:j,colIndex:E,nearbyHeading:T.nearbyHeading}),needsAI:false,fixValue:"columnheader",outerHtml:(P.outerHTML||"").slice(0,300)});}}let V=[],z=[],U=new Map;for(let v=0;v<R.length;v++){let D=R[v],E=0;for(let P=0;P<D.children.length;P++){let q=D.children[P],j=(q.tagName||"").toLowerCase();if(j!=="td"&&j!=="th")continue;for(;V.some(J=>J.lane===E&&J.untilRow>v);)E++;let W=parseInt(q.getAttribute("colspan")||"1",10);(isNaN(W)||W<1)&&(W=1);let Q={rowIdx:v,lane:E,span:W,headers:(q.getAttribute("headers")||"").trim()};j==="td"?z.push(Q):U.set(q,Q);let te=parseInt(q.getAttribute("rowspan")||"1",10)||1;if(te>1)for(let J=0;J<W;J++)V.push({lane:E+J,untilRow:v+te});E+=W;}}let ee=(v,D)=>D.lane<v.lane+v.span&&D.lane+D.span>v.lane,k=w.querySelectorAll("th");for(let v=0;v<k.length&&!(d.length>=30);v++){let D=k[v];if(D.closest("table")!==w)continue;let E=(D.getAttribute("scope")||"").trim().toLowerCase();if(E==="col"||E==="row"||E==="colgroup"||E==="rowgroup")continue;let P=false;if((D.getAttribute("headers")||"").trim())P=true;else {let fe=(D.getAttribute("id")||"").trim();if(fe)for(let Ee=0;Ee<z.length;Ee++){let Ne=z[Ee].headers;if(Ne&&Ne.split(/\s+/).indexOf(fe)!==-1){P=true;break}}}if(P)continue;let q=D.closest("tr"),j=D.closest("thead")!==null,W=false;q&&R.length>0&&R[0]===q&&(W=true);let Q=false;if(q){let fe=q.querySelectorAll("th, td");fe.length>0&&fe[0]===D&&(Q=true);}let te="col";j||W?te="col":Q&&(te="row");let J=U.get(D);if(!P&&J){if(te==="row")P=z.some(fe=>fe.rowIdx===J.rowIdx&&!fe.headers&&fe.lane>=J.lane+J.span);else if(P=z.some(fe=>fe.rowIdx>J.rowIdx&&!fe.headers&&ee(J,fe)),!P)for(let fe=0;fe<k.length;fe++){let Ee=U.get(k[fe]);if(!Ee||Ee.rowIdx<=J.rowIdx||!ee(J,Ee))continue;let Ne=R[Ee.rowIdx],Re=Ne?Ne.children:[];if(Re.length>0&&Re[0]===k[fe]&&k[fe].closest("table")===w){P=true;break}}}if(P)continue;let oe=uniqueSel(D),de=(D.textContent||"").trim().slice(0,60);d.push({selector:oe,attribute:"scope",currentValue:E,issueType:"missing_table_scope",wcag:"1.3.1",context:JSON.stringify({reason:"<th> missing scope attribute",inferred:te,inThead:j,firstRow:W,firstCol:Q,headerText:de}),needsAI:false,fixValue:te,outerHtml:(D.outerHTML||"").slice(0,300)});}}return d},yh={name:"dataTables",cap:30,async detect(f){return f.evaluate(tI)}};var rI=()=>{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 p=(h.getAttribute("title")||"").trim().replace(/\s+/g," ");if(!p||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="'+p.slice(0,80)+'"',needsAI:true,needsReview:true,reviewReason:'WCAG 1.1.1 Non-text Content: this image has an empty alt (declared decorative) but also a title of "'+p.slice(0,80)+'". Violation when the picture conveys information the title names (a logo, a chart, a labelled icon), so the empty alt hides it. Pass when the picture is purely decorative and the title only repeats nearby text or adds nothing.',outerHtml:(h.outerHTML||"").slice(0,300)});}return d},wh={name:"decorativeImageTitle",cap:30,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]*$/,p=[],y=["link","button","menuitem","menuitemcheckbox","menuitemradio","tab","checkbox","radio","switch","option","treeitem","gridcell","combobox","textbox","searchbox","slider","spinbutton","img","heading","listitem","none","presentation","generic","navigation","region","group","dialog"],_=F=>{let S=F.computedRole;if(typeof S=="string")return S.toLowerCase();let x=(F.getAttribute("role")||"").trim().toLowerCase().split(/\s+/);for(let T of x)if(y.indexOf(T)>=0)return T;return F.hasAttribute("href")?"link":"generic"},w=F=>{let S=_(F);if(S==="link"||F.hasAttribute("href"))return true;if(S&&S!=="generic")return false;let x=F.getAttribute("tabindex");if(x===null)return false;let T=parseInt(x,10);return !isNaN(T)&&T>=0},R=document.querySelectorAll("a");for(let F of R){if(p.length>=50)break;if(!w(F)||F.closest(f)||F.getAttribute("aria-hidden")==="true"||F.getAttribute("role")==="presentation"||F.closest('[aria-hidden="true"]')||!isVisible(F))continue;let S=getAccessibleName(F);if(S&&S.length>0&&!g.test(S)&&!d.test(S))continue;let x=F.querySelectorAll("img[alt]"),T="";for(let k of x){let v=(k.getAttribute("alt")||"").trim();v&&(T+=v+" ");}if(T.trim())continue;let C=F.getAttribute("aria-labelledby");if(C&&typeof __resolveIdRefs=="function"&&__resolveIdRefs(C))continue;let M=uniqueSel(F),L=F.getAttribute("href")||"",H=(F.textContent||"").trim(),N=getNearbyContext(F),V="";H&&g.test(H)?V="[whitespace only]":H&&d.test(H)&&(V=H);let z=(document.documentElement.getAttribute("lang")||"").trim(),U=[];F.closest("nav")&&U.push("inside nav"),N.nearbyHeading&&U.push("heading: "+N.nearbyHeading),L&&U.push("href: "+L.slice(0,120)),U.push("parent: "+N.parentTag),z&&U.push("page language: "+z);let ee={selector:M,attribute:"aria-label",currentValue:V,issueType:"empty_link",wcag:"2.4.4",context:U.join(" | "),needsAI:true,outerHtml:F.outerHTML.slice(0,300)};p.push(ee);}return p},xh={name:"emptyLinks",cap:50,async detect(f){return f.evaluate(nI)}};var aI=()=>{let d=[],g=new Set;function h(S){return (S||"").trim()}function p(S){let x=h(S.getAttribute("aria-label")||"");if(x)return x;let T=S.getAttribute("aria-labelledby");if(T){let M=T.split(/\s+/),L="";for(let H=0;H<M.length;H++){let N=document.getElementById(M[H]);N&&(L+=" "+(N.textContent||""));}if(h(L))return h(L)}let C=h(S.getAttribute("title")||"");return C||""}let y=document.querySelectorAll("fieldset");for(let S=0;S<y.length&&!(d.length>=30);S++){let x=y[S];if(isWidget(x)||!isVisible(x)||isHiddenFromAT(x))continue;if(p(x)){g.add(x);continue}let T=null,C=x.querySelectorAll("legend");for(let z=0;z<C.length;z++)if(C[z].closest("fieldset")===x){T=C[z];break}let M=T!==null,L=T?h(T.textContent||""):"";if(M&&L){g.add(x);continue}let H=getNearbyContext(x),N=x.querySelectorAll("input, select, textarea"),V=uniqueSel(x);d.push({selector:V,attribute:"aria-label",currentValue:"",issueType:"missing_fieldset_legend",wcag:"1.3.1",context:JSON.stringify({reason:M?"fieldset has empty <legend>":"fieldset missing <legend>",controlCount:N.length,nearbyHeading:H.nearbyHeading,parentTag:H.parentTag}),needsAI:true,outerHtml:(x.outerHTML||"").slice(0,300)}),g.add(x);}let _=document.querySelectorAll('[role="group"], [role="radiogroup"]');for(let S=0;S<_.length&&!(d.length>=30);S++){let x=_[S];if(isWidget(x)||!isVisible(x)||isHiddenFromAT(x)||g.has(x))continue;if(p(x)){g.add(x);continue}let T=x.getAttribute("role")||"",C=getNearbyContext(x),M=x.querySelectorAll("input, select, textarea");if(T==="group"&&x.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 L=uniqueSel(x);d.push({selector:L,attribute:"aria-label",currentValue:"",issueType:"missing_fieldset_legend",wcag:"1.3.1",context:JSON.stringify({reason:'role="'+T+'" container without accessible name',role:T,controlCount:M.length,nearbyHeading:C.nearbyHeading,parentTag:C.parentTag}),needsAI:true,outerHtml:(x.outerHTML||"").slice(0,300)}),g.add(x);}let w={},R=document.querySelectorAll('input[type="radio"], input[type="checkbox"]');for(let S=0;S<R.length;S++){let x=R[S];if(isWidget(x)||!isVisible(x)||isHiddenFromAT(x))continue;let T=x.getAttribute("name")||"";if(!T)continue;let C=x.closest("form"),M=C?C.getAttribute("id")||C.getAttribute("action")||C.tagName:"no-form",L=(x.getAttribute("type")||"").toLowerCase(),H=M+"::"+L+"::"+T;w[H]||(w[H]=[]),w[H].push(x);}let F=Object.keys(w);for(let S=0;S<F.length&&!(d.length>=30);S++){let x=w[F[S]];if(x.length<3)continue;let T=x[0],C=T.closest('fieldset, [role="group"], [role="radiogroup"]'),M=false;if(C){M=true;for(let U=1;U<x.length;U++)if(!C.contains(x[U])){M=false;break}}if(M&&C)continue;let L=T.parentElement;for(;L&&L!==document.body;){let U=true;for(let ee=1;ee<x.length;ee++)if(!L.contains(x[ee])){U=false;break}if(U)break;L=L.parentElement;}if(!L||L===document.body||g.has(L))continue;let H=(T.getAttribute("type")||"").toLowerCase(),N=T.getAttribute("name")||"",V=getNearbyContext(T),z=uniqueSel(L);d.push({selector:z,attribute:"role",currentValue:L.getAttribute("role")||"",issueType:"missing_fieldset_legend",wcag:"1.3.1",context:JSON.stringify({reason:"unwrapped "+H+" group ("+x.length+' inputs share name="'+N+'")',inputType:H,inputCount:x.length,name:N,nearbyHeading:V.nearbyHeading,parentTag:V.parentTag}),needsAI:false,fixValue:H==="radio"?"radiogroup":"group",outerHtml:(L.outerHTML||"").slice(0,300)}),g.add(L);}return d},Dh={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 p=getComputedStyle(h);if(p.display==="none"||p.visibility==="hidden"||p.position!=="sticky"&&p.position!=="fixed")continue;let y=h.getBoundingClientRect();if(y.top>50||y.bottom<=0)continue;let _=Math.round(y.height);_<40||_>240||_>g&&(g=_);}if(g>0){let h=window.scrollX,p=window.scrollY,y=0,_=0;try{let R=[],F=new Set;document.querySelectorAll('a[href^="#"]').forEach(S=>{let x=S.getAttribute("href").slice(1);if(!x)return;let T=document.getElementById(x);T&&!F.has(T)&&(F.add(T),R.push(T));});for(let S of R){if(_>=8)break;let x=getComputedStyle(S);if(x.display==="none"||x.visibility==="hidden")continue;_++,S.scrollIntoView({block:"start"});let T=S.getBoundingClientRect(),C=Math.max(T.height,1);Math.max(0,Math.min(T.bottom,g)-Math.max(T.top,0))/Math.min(C,g)>=.5&&y++;}}catch{}try{window.scrollTo(h,p);}catch{}let w=`scroll-margin-top: ${g+8}px; scroll-padding-top: ${g+8}px;`;_>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}/${_} in-page anchor targets land under it on jump`,needsAI:false,fixValue:w}):_===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},_h={name:"focusObscured",async detect(f){return f.evaluate(iI)}};var Ah={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},(p,y)=>h.getRangeAt(y).cloneRange()):[];});}catch{}if(d)try{await f.keyboard.press("Tab");}catch{}return f.evaluate(g=>{let p=[],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 _=document.querySelectorAll(y),w=Symbol.for("wa.prevFocus"),R=window[w]??null;try{delete window[w];}catch{}for(let F of _){if(p.length>=40)break;if(typeof isWidget=="function"&&isWidget(F)||typeof isHiddenFromAT=="function"&&isHiddenFromAT(F)||typeof isVisible=="function"&&!isVisible(F)||!F.offsetParent&&F.tagName!=="BODY")continue;let S=getComputedStyle(F),x=S.outline,T=S.outlineWidth,C=S.outlineStyle,M=S.boxShadow,L=S.border,H=S.backgroundColor;try{F.focus({preventScroll:!0});}catch{continue}if(document.activeElement!==F)continue;let N=getComputedStyle(F),V=N.outline,z=(N.outlineStyle||"").toLowerCase(),U=parseFloat(N.outlineWidth||"0"),ee=N.boxShadow,k=N.border,v=N.backgroundColor,D=V!==x,E=z!=="none"&&z!=="hidden"&&U>0;if(D&&E||ee!==M&&ee!=="none"&&ee!==""||k!==L||v!==H||parseFloat(T)>0&&C!=="none")continue;let Q=typeof uniqueSel=="function"?uniqueSel(F):F.tagName.toLowerCase();p.push({selector:Q,pseudo:":focus-visible",attribute:"style",currentValue:C+" "+T,issueType:"focus_not_visible",wcag:"2.4.7",context:`${F.tagName.toLowerCase()} has no visible focus indicator \u2014 outline, box-shadow, border, and background all unchanged on focus (apply the style under :focus-visible)`,needsAI:false,fixValue:"outline: 2px solid #2563eb !important;outline-offset: 2px !important;",outerHtml:F.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{R&&R.isConnected&&R.focus({preventScroll:!0});}catch{}try{let F=Symbol.for("wa.prevScroll"),S=window[F];delete window[F],S&&window.scrollTo({left:S[0],top:S[1],behavior:"instant"});}catch{}try{let F=Symbol.for("wa.prevSelection"),S=window[F];delete window[F];let x=getSelection();if(x&&S){x.removeAllRanges();for(let T of S)x.addRange(T);}}catch{}return p},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 p(x){if(!x)return false;let T=" "+((x.getAttribute("id")||"")+" "+(x.getAttribute("class")||"")+" "+(x.getAttribute("name")||"")+" "+(x.getAttribute("action")||"")).toLowerCase()+" ";for(let C=0;C<g.length;C++)if(T.indexOf(g[C])!==-1)return true;return false}function y(x){let T=((x.getAttribute("name")||"")+" "+(x.getAttribute("id")||"")+" "+(x.getAttribute("placeholder")||"")+" "+(x.getAttribute("aria-label")||"")).toLowerCase();for(let C=0;C<h.length;C++)if(T.indexOf(h[C])!==-1)return true;return false}let _=document.querySelectorAll('input[type="password"], input[type="Password"]');for(let x of _){if(d.length>=30)break;let T=x;if(isWidget(T)||isHiddenFromAT(T)||!isVisible(T))continue;let C=(T.getAttribute("autocomplete")||"").trim().toLowerCase();if(y(T)){if(C==="new-password")continue;let V=uniqueSel(T);d.push({selector:V,attribute:"autocomplete",currentValue:C,issueType:"missing_autocomplete",wcag:"1.3.5",context:"confirm password field | name: "+(T.getAttribute("name")||"")+" | id: "+(T.getAttribute("id")||""),needsAI:false,fixValue:"new-password",outerHtml:(T.outerHTML||"").slice(0,300)});continue}if(C)continue;let L=T.form||T.closest("form"),H=p(L),N=uniqueSel(T);d.push({selector:N,attribute:"autocomplete",currentValue:"",issueType:"missing_autocomplete",wcag:"1.3.5",context:(H?"new/signup/change password form":"login form")+" | name: "+(T.getAttribute("name")||"")+" | id: "+(T.getAttribute("id")||""),needsAI:false,fixValue:H?"new-password":"current-password",outerHtml:(T.outerHTML||"").slice(0,300)});}let w=document.querySelectorAll("form"),R=/\*|\brequired\b|\bmandatory\b/i;for(let x of w){if(d.length>=30)break;let T=x;if(isWidget(T)||!isVisible(T))continue;let C=T.querySelectorAll("input[required], select[required], textarea[required]");if(!C.length)continue;let M=0;for(let z of C)isVisible(z)&&M++;if(M===0)continue;let L=T.querySelectorAll('input:not([type="hidden"]):not([type="submit"]):not([type="button"]), select, textarea'),H=0;for(let z of L)isVisible(z)&&H++;if(M>=H||(T.getAttribute("data-asw-required-hint")||"").trim())continue;let N=(T.textContent||"").trim();if(R.test(N))continue;let V=uniqueSel(T);d.push({selector:V,attribute:"data-asw-required-hint",currentValue:"",issueType:"missing_required_indicator",wcag:"3.3.2",context:`form has ${M} required input(s) but no visible "*" / "required" / "mandatory" marker`,needsAI:true,outerHtml:(T.outerHTML||"").slice(0,300)});}let F='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 x of w){if(d.length>=30)break;let T=x;if(isWidget(T)||!isVisible(T)||isHiddenFromAT(T))continue;let C=[];for(let z of T.querySelectorAll(S))isVisible(z)&&C.push(z);if(C.length===0||T.querySelector(F))continue;let M=T.getAttribute("id");if(M){let z=false;for(let U of document.querySelectorAll(F))if(U.getAttribute("form")===M){z=true;break}if(z)continue}if(((T.getAttribute("role")||"").toLowerCase()==="search"||!!T.closest('[role="search"]'))&&C.length===1)continue;let H=C.slice(0,4).map(z=>z.tagName.toLowerCase()+(z.tagName==="INPUT"?"["+(z.getAttribute("type")||"text")+"]":"")).join(", "),N=[];for(let z of T.querySelectorAll('button:not([type="reset" i]), input[type="button" i], [role="button"]')){if(N.length>=3)break;let U=z;if(!isVisible(U))continue;let ee=((U.tagName==="INPUT"?U.getAttribute("value"):U.textContent)||U.getAttribute("aria-label")||"").trim().replace(/\s+/g," ").slice(0,30);N.push('"'+ee+'"');}if(N.length&&!(T.getAttribute("action")||"").trim())continue;let V=N.length?" Buttons present that are not a submit control (type=button or role=button): "+N.join(", ")+".":"";d.push({selector:uniqueSel(T),attribute:"data-asw-submit-control",currentValue:"",issueType:"form_missing_submit",wcag:"3.2.2",context:`form with ${C.length} visible field(s) (${H}) and no submit control`,needsAI:true,needsReview:true,reviewReason:"WCAG 3.2.2 On Input: this form has "+C.length+" visible field(s) ("+H+") 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:(T.outerHTML||"").slice(0,300)});}return d},Eh={name:"formAttributes",cap:30,async detect(f){return f.evaluate(oI)}};var Sh={en:"the and of to is in that for with on are this you it be as at by from or your our we not have has was will can an all more about which their they",de:"der die das und ist nicht mit sich des den dem ein eine einen einer auf f\xFCr von zu im in auch sie wir ihr bei oder wird sind werden \xFCber nach aus wie noch nur unsere ihre sowie k\xF6nnen zum zur",nl:"de het een en van is dat op te in zijn voor met niet aan er ook als bij door wordt om uit worden naar onze uw jouw maar dan nog deze kunt wij u ons of wat die kan was",fr:"le la les et des est une du que pour dans qui pas sur au avec ce plus sont vous nous par ou leur cette mais \xEAtre aux votre vos notre nos",es:"el la los las y es una del que por para con se en no su sus m\xE1s al como pero este esta son nuestro nuestra nuestros usted tambi\xE9n de",it:"il lo la gli le e \xE8 di che per in una un del della con non sono pi\xF9 dei delle nel alla come anche questo questa nostro nostra nostri ti",pt:"o a os as e \xE9 de do da dos das que para com n\xE3o uma um em no na por mais seu sua nosso nossa voc\xEA tamb\xE9m s\xE3o",da:"og er det en at til af p\xE5 med for ikke den som de har vi kan vil fra jeres vores ogs\xE5 eller jer hvis efter",sv:"och \xE4r det en att till av p\xE5 med f\xF6r inte den som har vi kan ska fr\xE5n ocks\xE5 eller v\xE5ra v\xE5r din dina",nb:"og er det en at til av p\xE5 med for ikke den som har vi kan skal fra ogs\xE5 eller v\xE5re v\xE5r deg dine",pl:"i w na z do \u017Ce si\u0119 jest nie to o od jak dla po przez s\u0105 lub oraz nasz nasze mo\u017Ce tak\u017Ce jego",cs:"a v na se je \u017Ee s z do o to jako pro by nen\xED jsou nebo tak\xE9 ale jeho na\u0161e",ca:"el la els les i \xE9s de del dels que per amb en un una no es al als com m\xE9s per\xF2 aquest aquesta aquests s\xF3n seu seva nostre nostra hi ho ja tamb\xE9 o",gl:"o a os as e \xE9 de do da dos das que para con non unha un en no na nos nas por m\xE1is seu s\xFAa cando tam\xE9n pero este esta moi",af:"die en van is in dat op te vir nie met om wat sy hy hulle ons jy u was het aan as by ook maar of kan sal hierdie n ek julle deur baie"},Bo=new Map(Object.entries(Sh).map(([f,d])=>[f,new Set(d.split(" "))])),Ch=(()=>{let f=new Map;for(let[g,h]of Object.entries(Sh))for(let p of new Set(h.split(" "))){let y=f.get(p)||[];y.push(g),f.set(p,y);}let d=new Map;for(let[g,h]of f)d.set(g,h.map(p=>[p,1/h.length]));return d})(),sI=[["ko",/\p{Script=Hangul}/gu],["el",/\p{Script=Greek}/gu],["he",/\p{Script=Hebrew}/gu],["th",/\p{Script=Thai}/gu],["ja",/[\p{Script=Hiragana}\p{Script=Katakana}]/gu],["zh",/\p{Script=Han}/gu]],ei;function lI(f){if(!/^[a-z]{2,3}$/.test(f))return false;if(ei===void 0)try{ei=new Intl.DisplayNames(["en"],{type:"language",fallback:"none"});}catch{ei=null;}if(!ei)return f.length===2;try{let d=ei.of(f);return !!d&&d.toLowerCase()!==f}catch{return false}}function Du(f){let d=String(f||"").trim().toLowerCase().match(/^([a-z]{2,3})(?:[-_][a-z0-9]{2,8})*$/);return !d||d[1]==="und"||d[1]==="mul"||d[1]==="zxx"?"":lI(d[1])?d[1]:""}function uI(f){if(!f)return "";let d;try{d=new URL(/^[a-z][a-z0-9+.-]*:\/\//i.test(f)?f:`https://${f}`);}catch{return ""}let g=/^([a-z]{2})(?:[-_][a-z]{2,4})?$/i,h=d.hostname.toLowerCase().split(".");if(h.length>=3&&g.test(h[0])){let y=Du(h[0]);if(y)return y}let p=d.pathname.split("/").filter(Boolean)[0]||"";return g.test(p)?Du(p):""}function cI(f){let d=String(f||"").slice(0,2e4),g={lean:null,confident:false,ruledOut:new Set};if(!d.trim())return g;let h=(d.match(/\p{L}/gu)||[]).length;if(h>=40){let U=sI.map(([E,P])=>[E,(d.match(P)||[]).length]),ee=U.find(([E])=>E==="ja")[1],k=U.find(([E])=>E==="zh")[1],v=ee>=Math.max(5,(ee+k)*.05)?[["ja",ee+k]]:[["zh",k]],D=[...U.filter(([E])=>E!=="ja"&&E!=="zh"),...v].sort((E,P)=>P[1]-E[1]);if(D[0][1]/h>=.6)return {lean:D[0][0],confident:true,ruledOut:new Set(Bo.keys())}}let p=d.toLowerCase().match(/\p{L}+/gu)||[];if(!p.length)return g;let y={};for(let U of p){let ee=Ch.get(U);if(ee)for(let[k,v]of ee)y[k]=(y[k]||0)+v;}let _=new Map;for(let U of p)Ch.has(U)&&_.set(U,(_.get(U)||0)+1);let w=new Map,R=new Map;for(let[U,ee]of Bo){let k=0,v=0;for(let[D,E]of _)ee.has(D)&&(k+=E,v++);w.set(U,k/p.length),R.set(U,v);}let F=p.length>=30,S=new Set(F?[...w].filter(([,U])=>U<.12).map(([U])=>U):[]),x=(U,ee)=>{let k=Bo.get(U),v=Bo.get(ee),D=0;for(let[E,P]of _)k.has(E)&&!v.has(E)&&(D+=P);return D},T=Object.entries(y).sort((U,ee)=>ee[1]-U[1]);if(!T.length)return {...g,ruledOut:S};let[C,M]=T[0],L=T[1]?.[1]||0,N=(F?[...w].filter(([U,ee])=>U!==C&&ee>=.12).map(([U])=>U):[]).every(U=>{let ee=x(C,U);return ee>=5&&ee>=x(U,C)*2}),V=F&&M>=5&&(w.get(C)||0)>=.12&&(R.get(C)||0)>=6&&N,z=M>=2&&(V||M>=L*1.5)?C:null;return {lean:z,confident:!!z&&V,ruledOut:S}}function kh(f){let d=[...new Set((f.declared||[]).map(Du).filter(Boolean))],g=uI(f.url),h=cI(f.text);if(h.confident&&h.lean)return d.some(p=>p!==h.lean)||g&&g!==h.lean?null:{lang:h.lean,source:"text"};if(d.length===1){let p=d[0];return h.lean&&h.lean!==p||h.ruledOut.has(p)||g&&g!==p?null:{lang:p,source:"declared"}}return d.length>1?null:g&&h.lean===g&&!h.ruledOut.has(g)?{lang:g,source:"url"}:null}function dI(){let f=document.documentElement;if(!f||(f.getAttribute("lang")||"").trim())return null;let d=String(typeof location<"u"&&location.href||""),g=y=>y.replace(/[#?].*$/,"").replace(/\/+$/,""),h=null;try{let y=document.querySelectorAll('link[rel="alternate"][hreflang]');for(let _=0;_<y.length;_++){let w=y[_],R=w.getAttribute("hreflang")||"";if(R&&R.toLowerCase()!=="x-default"&&w.href&&g(w.href)===g(d)){h=R;break}}}catch{}return {url:d,text:(()=>{let y=document.body;if(!y)return "";if(typeof y.innerText=="string")return y.innerText.slice(0,2e4);let _=y.cloneNode(true);return _.querySelectorAll('script, style, noscript, template, [hidden], [aria-hidden="true"]').forEach(w=>w.remove()),String(_.textContent||"").replace(/\s+/g," ").slice(0,2e4)})(),declared:[f.getAttribute("xml:lang"),document.querySelector('meta[http-equiv="content-language" i]')?.getAttribute("content")??null,document.querySelector('meta[name="language" i]')?.getAttribute("content")??null,document.querySelector('meta[property="og:locale"]')?.getAttribute("content")??null,document.body?.getAttribute("lang")??null,h]}}function fI(f){if(!f)return [];let d=kh(f),g={selector:"html",attribute:"lang",currentValue:"",issueType:"missing_document_language",wcag:"3.1.1",needsAI:false};return d?[{...g,context:`Document language not declared; detected "${d.lang}" from page ${d.source}`,fixValue:d.lang}]:[{...g,context:"Document language not declared, and the page text does not settle which language it is (short, mixed, conflicting, or a language without a detector list) \u2014 set <html lang> by hand",manualFix:true}]}var Th={name:"htmlLang",async detect(f){let d=await f.evaluate(dI);return fI(d)}};var pI=()=>{let f="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],h=document.querySelectorAll("iframe");for(let p of h){if(g.length>=50)break;if(p.closest(f))continue;let y=false;for(let V=p;V;V=V.parentElement)if((V.getAttribute("aria-hidden")||"").trim()==="true"){y=true;break}let _=(p.getAttribute("role")||"").trim().toLowerCase();if(y||_==="presentation"||_==="none"||p.closest("[inert]"))continue;let w=/^[\t\n\f\r ]*([-+]?\d+)/.exec(p.getAttribute("tabindex")||"");if(w&&parseInt(w[1],10)<0)continue;let R=getComputedStyle(p);if(p.getClientRects().length===0||R.visibility==="hidden"||R.visibility==="collapse"||(p.getAttribute("src")||"").trim().toLowerCase().indexOf("javascript:")===0)continue;let F="",S=(p.getAttribute("aria-labelledby")||"").trim();if(S){let V=S.split(/\s+/);for(let z=0;z<V.length;z++){let U=document.getElementById(V[z]);U&&(F+=" "+(U.textContent||""));}F=F.trim();}if(F||(F=(p.getAttribute("aria-label")||"").trim()),F)continue;let x=(p.getAttribute("title")||"").trim(),T=x.length===0;if(!T)continue;let C=(p.getAttribute("src")||"").toLowerCase(),M=uniqueSel(p),L=getNearbyContext(p),H=(document.documentElement.getAttribute("lang")||"").trim(),N="src: "+C.slice(0,120)+(L.nearbyHeading?" | heading: "+L.nearbyHeading:"")+(L.cardText?" | nearby text: "+L.cardText:"")+(H?" | page language: "+H:"");T&&g.push({selector:M,attribute:"title",currentValue:x,issueType:"missing_label",wcag:"4.1.2",context:N,needsAI:true,outerHtml:p.outerHTML.slice(0,300)});}return g},Rh={name:"iframeTitle",cap:50,async detect(f){return f.evaluate(pI)}};var mI=()=>{let f="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",d=["hidden","submit","button","reset","image","checkbox","radio","file","range","color"],h=[],p={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"}],_=document.querySelectorAll("input, select, textarea");for(let w of _){if(h.length>=50)break;if(w.closest(f))continue;let R=w,F=(R.getAttribute("type")||"text").toLowerCase();if(d.includes(F)||R.getAttribute("autocomplete")||!isVisible(R))continue;let S="";if(p[F]&&(S=p[F]),!S){let T=(R.getAttribute("name")||"").toLowerCase(),C=(R.getAttribute("id")||"").toLowerCase(),M=(R.getAttribute("placeholder")||"").toLowerCase(),L=T+" "+C+" "+M;for(let H of y)if(L.includes(H.pattern)){S=H.autocomplete;break}}if(!S)continue;if(S==="country"){let T=false;if(R.tagName==="SELECT"){let C=Array.from(R.options).map(M=>(M.value||"").trim()).filter(Boolean);T=C.length>0&&C.every(M=>/^[A-Za-z]{2}$/.test(M));}T||(S="country-name");}let x=uniqueSel(R);h.push({selector:x,attribute:"autocomplete",currentValue:"",issueType:"identify_input_purpose",wcag:"1.3.5",context:"type: "+F+" | name: "+(R.getAttribute("name")||"")+" | id: "+(R.getAttribute("id")||""),needsAI:false,fixValue:S});}return h},Fh={name:"inputPurpose",cap:50,async detect(f){return f.evaluate(mI)}};var hI=()=>{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 p(T){let C=T.getBoundingClientRect();if(C.width===0&&C.height===0)return false;let M=-window.scrollX,L=-window.scrollY,H=document.documentElement,N=getComputedStyle(T).position;if(N==="fixed")return false;let V=N==="absolute";for(let z=T.parentElement;z&&z!==document.body&&z!==H;z=z.parentElement){let U=getComputedStyle(z);if(V){if(U.position==="static")continue;V=false;}if(/auto|scroll/.test(U.overflowX+" "+U.overflowY))return false;let ee=U.overflowX==="hidden"||U.overflowX==="clip",k=U.overflowY==="hidden"||U.overflowY==="clip";if(!ee&&!k)continue;let v=z.getBoundingClientRect();if(ee&&(C.right<=v.left||C.left>=v.right)||k&&(C.bottom<=v.top||C.top>=v.bottom))return true;if(N=U.position,N==="fixed")return false;N==="absolute"&&(V=true);}return C.right<=M||C.bottom<=L||C.left>=M+H.scrollWidth||C.top>=L+H.scrollHeight}let y='[role="tablist"],[aria-roledescription="carousel" i],[aria-roledescription="slide" i],[class*="slick"],[class*="swiper"],[class*="owl"],[class*="splide"],[class*="flickity"]',_='nav,section,article,aside,main,header,footer,form,ul,ol,dl,[role="navigation"],[role="region"],[role="main"],[role="complementary"],[role="banner"],[role="contentinfo"],[role="list"],[role="form"],[role="search"]',w='a[href],area[href],button,input:not([type="hidden"]),select,textarea,summary,iframe';function R(T){if(T.tagName==="A"){let M=T.href;if(M){for(let L of document.querySelectorAll("a[href]"))if(!(L===T||L.href!==M||L.tabIndex<0)&&!L.closest('[aria-hidden="true"],[hidden],[inert]')&&!(typeof isVisible=="function"&&!isVisible(L)))return "another focusable link to the same href exists"}}if(T.closest(y))return "inside a slider / carousel / tablist that manages its own tab order";if(T.hasAttribute("aria-controls")||T.hasAttribute("aria-selected"))return "carries aria-controls / aria-selected (a widget manages its state)";if(T.closest('[inert],[aria-hidden="true"]'))return "inside an inert or aria-hidden container";let C=T.parentElement?.closest(_);if(C){let M=0;for(let L of C.querySelectorAll(w))L!==T&&L.getAttribute("tabindex")?.trim()==="-1"&&M++;if(M>=2)return `${M} other controls in the same <${C.tagName.toLowerCase()}> also carry tabindex="-1" (inert by design)`}for(let M=T.parentElement;M&&M!==document.body&&!M.matches(w);M=M.parentElement){let L=parseInt(M.getAttribute("tabindex")||"",10);if(!Number.isFinite(L)||L<0)continue;let H=[...M.querySelectorAll(w)];if(H.length>=2&&H.every(N=>N.getAttribute("tabindex")?.trim()==="-1"))return 'a focusable ancestor owns focus and every control inside it carries tabindex="-1"';break}return ""}let F=document.querySelectorAll(h);for(let T of F){if(g.length>=30)break;if(T.closest(f)||!T.hasAttribute("tabindex"))continue;let C=T.getAttribute("tabindex")||"",M=parseInt(C,10);if(!Number.isFinite(M)||M===0||T.getAttribute("aria-disabled")==="true"||T.getAttribute("aria-hidden")==="true"||T.closest('[aria-hidden="true"]')||T.closest("[hidden]"))continue;let L=T.closest('[role="dialog"],[role="alertdialog"],dialog,[role="menu"],[role="listbox"]');if(L&&!(L.hasAttribute("open")||L.getAttribute("aria-modal")==="true"||L.getAttribute("aria-hidden")!=="true")||typeof isVisible=="function"&&!isVisible(T)||M<0&&p(T))continue;let H=(T.getAttribute("role")||"").toLowerCase();if(M<0&&T.closest('[role="tablist"],[role="menu"],[role="menubar"],[role="listbox"],[role="tree"],[role="treegrid"],[role="grid"],[role="radiogroup"],[role="toolbar"]'))continue;if(M<0&&T.tagName==="A"){if((T.getAttribute("aria-current")||"").trim().toLowerCase()==="page")continue;let D=(T.getAttribute("href")||"").trim();if(D&&!D.includes("#"))try{let E=new URL(D,document.baseURI),P=new URL(location.href);if(E.hash="",P.hash="",E.href===P.href)continue}catch{}}let V=typeof uniqueSel=="function"?uniqueSel(T):"",z=typeof getNearbyContext=="function"?getNearbyContext(T):{parentTag:T.tagName.toLowerCase(),nearbyHeading:""},U,ee,k=M<0?R(T):"";M<0?(U="keyboard_trap",ee="2.1.1"):(U="focus_order_disruption",ee="2.4.3");let v=[];v.push("tabindex: "+M),v.push("tag: "+T.tagName.toLowerCase()),H&&v.push("role: "+H),z.nearbyHeading&&v.push("heading: "+z.nearbyHeading),v.push("parent: "+z.parentTag),k&&v.push('author tabindex="-1" looks intentional: '+k),g.push({selector:V,attribute:"tabindex",currentValue:String(M),issueType:U,wcag:ee,context:v.join(" | "),needsAI:false,fixValue:"0",...k?{manualFix:true,reviewReason:`the author's tabindex="-1" looks intentional (${k}); tabindex="0" could add a duplicate or out-of-sync tab stop. Confirm the control must be reachable on its own before applying.`}:{},outerHtml:(T.outerHTML||"").slice(0,300)});}let S=/\b(?:this|(?:event|evt|e)\.(?:target|currentTarget))\.focus\s*\(\s*\)/,x=/\b(?:if|else|switch|while|for)\b|&&|\|\||\?/;for(let T of document.querySelectorAll("[onblur]")){if(g.length>=30)break;if(T.closest(f))continue;let C=T.getAttribute("onblur")||"";!S.test(C)||x.test(C)||T.matches('[disabled], [aria-disabled="true"]')||T.closest('[aria-hidden="true"], [hidden]')||typeof isVisible=="function"&&!isVisible(T)||g.push({selector:typeof uniqueSel=="function"?uniqueSel(T):T.tagName.toLowerCase(),attribute:"onblur",currentValue:C.slice(0,100),issueType:"keyboard_trap_self_focus",wcag:"2.1.2",context:"tag: "+T.tagName.toLowerCase()+" | onblur returns focus to the same element, so keyboard focus cannot leave it",needsAI:false,outerHtml:(T.outerHTML||"").slice(0,300)});}return g},Ih={name:"keyboardTrap",cap:30,async detect(f){return f.evaluate(hI)}};var gI=()=>{let f="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],p=document.querySelectorAll('button, a[href], [role="button"], [role="link"], input[type="submit"], input[type="button"]');for(let y of Array.from(p)){if(g.length>=40)break;if(y.closest(f)||typeof isVisible=="function"&&!isVisible(y))continue;let _="",w=[],R=[];try{let k=/(?:^|[\s_-])(?:icon|material-icons|material-symbols(?:-\w+)?|fa|fas|far|fab|fal|glyphicon|dashicons)(?:[\s_-]|$)/i,v=/icon|awesome|glyph|material symbols|dashicons/i,D=!1;try{D=v.test(getComputedStyle(y).fontFamily||"");}catch{}let E=Oe=>parseFloat(Oe||"0")||0,P=Oe=>{if(Oe.hasAttribute("hidden"))return !0;let Me=(Oe.getAttribute("style")||"").toLowerCase().replace(/\s+/g,"");if(/clip:rect\(0/.test(Me)||/clip-path:inset\((50|100)%/.test(Me))return !0;if(/position:(absolute|fixed)/.test(Me)){if(/(width|height):[01](px)?(;|!|$)/.test(Me))return !0;let rt=Me.match(/(?:left|top):(-\d+)/);if(rt&&parseInt(rt[1],10)<=-999)return !0}return !1},q=(Oe,Me)=>{if(Oe.hasAttribute("hidden")||E(Me.fontSize)===0)return !0;let rt=(Me.clip||"").replace(/\s+/g,"");if(/^rect\(0(px)?,?0(px)?,?0(px)?,?0(px)?\)$/.test(rt)||/inset\((50|100)%\)/.test(Me.clipPath||""))return !0;let Gt=Oe.getBoundingClientRect();return !!(/hidden|clip/.test(Me.overflow||Me.overflowX+" "+Me.overflowY)&&(Gt.width<=1||Gt.height<=1)||(Me.position==="absolute"||Me.position==="fixed")&&(E(Me.left)<=-999||E(Me.top)<=-999||Gt.right<=0||Gt.bottom<=-window.scrollY))},j=!1,W='h1, h2, h3, h4, h5, h6, [role="heading"]',Q=0;try{Q=E(getComputedStyle(y).fontSize);}catch{}let te=Oe=>{try{let Me=getComputedStyle(Oe);return {size:E(Me.fontSize),weight:parseInt(Me.fontWeight||"400",10)||400}}catch{return {size:0,weight:400}}},J=Oe=>{let Me=Oe.closest(W);return !!Me&&y.contains(Me)},oe=Oe=>{for(let Me=Oe;Me&&Me!==y;Me=Me.parentElement)try{let rt=getComputedStyle(Me).display||"";if(rt&&!/^inline(?!-block)|^contents$/.test(rt))return Me}catch{return y}return y},de=Oe=>Oe.split(/\s+/).filter(Me=>/[\p{L}\p{N}]/u.test(Me)).length,fe=document.createTreeWalker(y,NodeFilter.SHOW_TEXT),Ee;for(;Ee=fe.nextNode();){let Oe=Ee.parentElement;if(!Oe)continue;let Me=(Ee.textContent||"").trim();if(!Me||Oe===y&&D)continue;let rt=!1,Gt=!1;for(let nt=Oe;nt&&nt!==y;nt=nt.parentElement){if(nt.tagName==="KBD"&&(Gt=!0),nt.getAttribute("aria-hidden")==="true"){rt=!0;break}if(k.test(nt.getAttribute("class")||"")||k.test(nt.getAttribute("id")||"")){rt=!0;break}try{let Tt=getComputedStyle(nt);if(Tt.display==="none"||Tt.visibility==="hidden"){rt=!0;break}if(parseFloat(Tt.opacity||"1")===0){rt=!0;break}if(v.test(Tt.fontFamily||"")){rt=!0;break}if(q(nt,Tt)){rt=!0;break}}catch{if(P(nt)){rt=!0;break}nt.tagName==="SPAN"&&(j=!0);}}!rt&&/[\p{L}\p{N}]/u.test(Me)&&R.push({text:Me,kbd:Gt,p:Oe});}let Ne=0,Re=R.length;for(;Ne<Re&&R[Ne].kbd;)Ne++;for(;Re>Ne&&R[Re-1].kbd;)Re--;let Ae=Ne<Re?R.slice(Ne,Re):R,be=Ae.map(Oe=>te(Oe.p)),Et=Ae.map(Oe=>J(Oe.p)),gt=be.map(Oe=>Oe.size).filter(Oe=>Oe>0),Ge=gt.length?Math.min(...gt):0,ct=gt.length?Math.max(...gt):0,Jr=Math.min(...be.map(Oe=>Oe.weight)),zt=0;be.forEach((Oe,Me)=>{!Et[Me]&&Oe.weight<600&&Oe.size>zt&&(zt=Oe.size);});let At=Ae.map(Oe=>oe(Oe.p)),Pt=Oe=>Ae.some((Me,rt)=>At[rt]===At[Oe]&&be[rt].weight<600&&!Et[rt]),ur=Ae.map((Oe,Me)=>Et[Me]||ct>Ge&&be[Me].size>=ct||be[Me].weight>=600&&Jr<600&&be[Me].size>=zt&&!Pt(Me)),De=Ae.filter((Oe,Me)=>ur[Me]),cr=Ae;if(De.length&&De.length<Ae.length){let Oe=de(De.map(nt=>nt.text).join(" ")),Me=(nt,Tt)=>{for(let Jt=nt.p;Jt&&Jt!==y;Jt=Jt.parentElement)if(Jt.tagName==="TIME"||Jt.tagName==="SMALL")return !0;return Q>0&&be[Tt].size>0&&be[Tt].size<Q},rt=nt=>{let Tt=At[nt];if(De.some(at=>Tt.contains(at.p)))return !1;let Jt=de(Ae.filter((at,dr)=>!ur[dr]&&At[dr]===Tt).map(at=>at.text).join(" "));return Jt>=5&&Jt>Oe},Gt=Ae.filter((nt,Tt)=>ur[Tt]||!Me(nt,Tt)&&!rt(Tt));Gt.length&&(cr=Gt);}for(let Oe of cr)w.push(Oe.text);_=j?"":w.join(" ").trim().toLowerCase();}catch{_=((y.innerText!=null?y.innerText:y.textContent)||"").trim().toLowerCase();}if(!_||!/[\p{L}\p{N}]/u.test(_)||/^\p{L}$/u.test(_))continue;let S=/[\p{L}\p{N}\p{M}]/u,x=(y.getAttribute("aria-label")||"").trim().toLowerCase();if(!x){let k=y.getAttribute("aria-labelledby");k&&(x=(typeof __resolveIdRefs=="function"?__resolveIdRefs(k):"").toLowerCase());}if(!x)continue;let T=k=>{let v=k.toLowerCase().replace(/\([^)]*\)/g," ");return (/[\p{L}\p{N}]/u.test(v)?v:k.toLowerCase()).replace(/[\p{S}\u2026*]/gu," ").replace(/\s+/g," ").trim().normalize("NFC")},C=T(x),M=/[\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,L=(k,v)=>!k||!S.test(k)||M.test(k)||M.test(v),H=(k,v)=>{if(v<=0)return "";let D=k.charCodeAt(v-1);return D>=56320&&D<=57343&&v>=2?k.slice(v-2,v):k.charAt(v-1)},N=(k,v)=>{let D=k.codePointAt(v);return D===void 0?"":String.fromCodePoint(D)},V=k=>{let v=k.substring(0,40);if(!v)return true;let D=k.length>=40,E=N(v,0),P=H(v,v.length);for(let q=0;;){let j=C.indexOf(v,q);if(j<0)return false;if(L(H(C,j),E)&&(D||L(N(C,j+v.length),P)))return true;q=j+1;}};if(V(T(_))||w.length>1&&V(T(w.join(""))))continue;if(w.length>1){let k=true,v=0;for(let D of w){let E=T(D.toLowerCase());if(!E)continue;let P=E.slice(0,40),q=-1;for(let j=v;;){let W=C.indexOf(P,j);if(W<0)break;let Q=L(H(C,W),N(P,0)),te=P.length>=40||L(N(C,W+P.length),H(P,P.length));if(Q&&te){q=W;break}j=W+1;}if(q<0){k=false;break}v=q+P.length;}if(k)continue}let z=typeof uniqueSel=="function"?uniqueSel(y):"",U=typeof getNearbyContext=="function"?getNearbyContext(y):{parentTag:y.tagName.toLowerCase(),nearbyHeading:""},ee=[];ee.push("visible: "+_.slice(0,40)),ee.push("aria-label: "+x.slice(0,60)),U.nearbyHeading&&ee.push("heading: "+U.nearbyHeading),ee.push("parent: "+U.parentTag),g.push({selector:z,attribute:"aria-label",currentValue:x,issueType:"label_in_name",wcag:"2.5.3",context:ee.join(" | "),needsAI:true,outerHtml:(y.outerHTML||"").slice(0,300)});}return g},Mh={name:"labelInName",cap:40,async detect(f){return f.evaluate(gI)}};var vI=()=>{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 p(S){if(!S)return "";let x=S.split("#")[0];return x.length>1&&x.charAt(x.length-1)==="/"&&(x=x.substring(0,x.length-1)),x}function y(S){let x=(S.getAttribute("aria-label")||"").trim();return x||(S.textContent||"").trim().replace(/\s+/g," ")}function _(S){return !!S.closest('nav, [role="navigation"], [role="menubar"], [class*=breadcrumb], [aria-label*="breadcrumb" i]')}let w={},R=document.querySelectorAll("a[href]");for(let S=0;S<R.length;S++){let x=R[S];if(x.closest(f)||x.getAttribute("aria-hidden")==="true"||!isVisible(x))continue;let T=x.getAttribute("href")||"";if(!T)continue;let C=T.toLowerCase();if(C.charAt(0)==="#"||C.indexOf("javascript:")===0||C.indexOf("mailto:")===0||C.indexOf("tel:")===0)continue;let M=x.href||T,L=p(M);if(!L||_(x))continue;let H=(x.textContent||"").trim(),N=!!x.querySelector("img, svg, picture");if(!H&&N)continue;let V=y(x);if(!V)continue;let z=V.toLowerCase();z===C||z===M.toLowerCase()||(w[L]||(w[L]=[]),w[L].push(x));}let F=Object.keys(w);for(let S=0;S<F.length&&!(h.length>=30);S++){let x=w[F[S]];if(!x||x.length<2)continue;let T={},C="";for(let N=0;N<x.length;N++){let V=y(x[N]),z=V.toLowerCase();T[z]=true,V.length>C.length&&(C=V);}if(Object.keys(T).length<2)continue;let L=C.toLowerCase().trim();if(L.length<5)continue;let H=false;for(let N=0;N<g.length;N++)if(L===g[N]){H=true;break}if(!H)for(let N=0;N<x.length&&!(h.length>=30);N++){let V=x[N],z=y(V);if(z.toLowerCase()===L)continue;let U=uniqueSel(V);h.push({selector:U,attribute:"aria-label",currentValue:z,issueType:"link_consistency",wcag:"3.2.4",context:"Same href as "+x.length+' link(s) on this page with different text (e.g. "'+C.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:V.outerHTML.slice(0,300)});}}return h},Lh={name:"linkConsistency",cap:30,async detect(f){return f.evaluate(vI)}};var bI=()=>{let d=[],g=[".pdf",".doc",".docx",".xls",".xlsx",".zip",".csv",".ppt",".pptx",".txt",".rtf",".epub"],h="";try{h=window.location&&window.location.hostname||"";}catch{h="";}h=(h||"").toLowerCase();function p(M,L){if(!M||!L)return false;if(M===L||M.endsWith("."+L)||L.endsWith("."+M))return true;let H=N=>{let V=N.split(".");if(V.length<=2)return N;let z=V[V.length-1],U=V[V.length-2],ee=["co","com","net","org","ac","gov","edu"],k=z.length===2&&ee.indexOf(U)>=0?3:2;return V.slice(-k).join(".")};return H(M)===H(L)}function y(M){return M.indexOf("www.")===0?M.slice(4):M}function _(M){if(!M)return "";let L=M.toLowerCase();if(L.charAt(0)==="#"||L.charAt(0)==="/"||L.charAt(0)==="?"||L.indexOf("javascript:")===0||L.indexOf("mailto:")===0||L.indexOf("tel:")===0)return "";try{return (new window.URL(M,window.location.href).hostname||"").toLowerCase()}catch{return ""}}function w(M){if(!M)return "";let L=M,H=L.indexOf("?");H>=0&&(L=L.slice(0,H));let N=L.indexOf("#");N>=0&&(L=L.slice(0,N)),L=L.toLowerCase();for(let V=0;V<g.length;V++){let z=g[V];if(L.length>=z.length&&L.slice(L.length-z.length)===z)return z}return ""}function R(M){let L=[],H=(M.getAttribute("aria-label")||"").trim();H&&L.push(H);let N=(M.getAttribute("title")||"").trim();N&&L.push(N);let V=M.getAttribute("aria-labelledby");if(V)try{let z=typeof __resolveIdRefs=="function"?__resolveIdRefs(V):"";z&&L.push(z);}catch{}return L.push((M.textContent||"").trim()),L.join(" ").toLowerCase()}function F(M,L,H){let N="";try{typeof getAccessibleName=="function"&&(N=(getAccessibleName(M)||"").trim());}catch{}let V=(L||H||N||M.textContent||"").replace(/\s+/g," ").trim();return V||(M.getAttribute("href")||"").trim().replace(/^https?:\/\//i,"").replace(/\/+$/,"")}let S=(document.documentElement.getAttribute("lang")||"").trim();function x(M){return "current name: "+M.slice(0,200)+(S?" | page language: "+S:"")+" | keep the current name and add the notice, in the page language"}let T=document.querySelectorAll("a"),C=T.length;for(let M=0;M<C&&!(d.length>=50);M++){let L=T[M];if(!L||isWidget(L)||L.getAttribute("aria-hidden")==="true")continue;try{if(L.closest&&L.closest('[aria-hidden="true"]'))continue}catch{}if(!isVisible(L))continue;let H=L.getAttribute("href");if(H==null)continue;let N=String(H).trim();if(!N)continue;let V=N.toLowerCase(),z=R(L),U=(L.getAttribute("rel")||"").toLowerCase(),ee=uniqueSel(L),k=(L.getAttribute("target")||"").toLowerCase(),v=(L.outerHTML||"").slice(0,300);if(N==="#"||V.indexOf("javascript:")===0||N.charAt(0)==="#"&&N.length>1)continue;let D=w(V);if(D){let j=L.hasAttribute&&L.hasAttribute("download"),W=z.indexOf(D)>=0||new RegExp("\\b"+D.slice(1)+"\\b").test(z)||z.indexOf("download")>=0;if(!j&&!W){let Q=F(L,(L.getAttribute("aria-label")||"").trim(),"");d.push({selector:ee,attribute:"aria-label",currentValue:(L.getAttribute("aria-label")||"").trim(),issueType:"download_link_warning",wcag:"3.2.5",context:"download link \u2014 file type "+D+" | href: "+N.slice(0,120)+" | "+x(Q),needsAI:true,outerHtml:v});continue}}let E=_(N),P=V.indexOf("http://")===0||V.indexOf("https://")===0||V.indexOf("//")===0,q=!!E&&!!h&&!p(y(E),y(h));if(k==="_blank"){let j=U.indexOf("noopener")>=0||U.indexOf("noreferrer")>=0,W=z.indexOf("new window")>=0||z.indexOf("new tab")>=0||z.indexOf("opens in")>=0;if(!W){let Q=(L.getAttribute("aria-label")||"").trim(),te="",J=L.getAttribute("aria-labelledby")||"";if(!Q&&J)try{typeof __resolveIdRefs=="function"&&(te=(__resolveIdRefs(J)||"").trim());}catch{}let oe=F(L,Q,te),de=[];j||de.push("missing rel=noopener"),W||de.push('missing "new window" hint'),de.push("href: "+N.slice(0,120)),d.push({selector:ee,attribute:"aria-label",currentValue:(L.getAttribute("aria-label")||"").trim(),issueType:"new_window_link",wcag:"3.2.5",context:de.join(" | ")+" | opens in a new window | "+x(oe),needsAI:true,outerHtml:v});continue}}if(q&&P){let j=U.indexOf("external")>=0,W=z.indexOf("external")>=0||z.indexOf("opens in")>=0||z.indexOf("new window")>=0||z.indexOf("new tab")>=0;if(!j&&!W){let Q=(L.getAttribute("aria-label")||"").trim(),te="",J=L.getAttribute("aria-labelledby")||"";if(!Q&&J)try{typeof __resolveIdRefs=="function"&&(te=(__resolveIdRefs(J)||"").trim());}catch{}let oe=F(L,Q,te);d.push({selector:ee,attribute:"aria-label",currentValue:(L.getAttribute("aria-label")||"").trim(),issueType:"external_link_warning",wcag:"3.2.5",context:"external: "+E+" (page: "+h+") | href: "+N.slice(0,120)+" | "+x(oe),needsAI:true,outerHtml:v});}}}return d},Oh={name:"linkWarnings",cap:50,async detect(f){return f.evaluate(bI)}};var yI=()=>{let f="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye],[class*=ae-exclude],[id*=ae_app],[id*=ae_],[class*=EquallyAI]",g=[],h=new Set,p=document.querySelectorAll('main, [role="main"]'),y=[];return p.forEach(_=>{let w=getComputedStyle(_);w.display!=="none"&&w.visibility!=="hidden"&&y.push(_);}),p.forEach(_=>{if(g.length>=10||_.closest(f)||_.getAttribute("aria-hidden")!=="true")return;let w=getComputedStyle(_);if(w.display==="none"||w.visibility==="hidden"||_.closest('[role="dialog"]')||_.closest('[role="alertdialog"]')||_.closest("dialog")||y.some(x=>x!==_&&x.getAttribute("aria-hidden")!=="true"))return;let F=_.parentElement;for(;F&&F!==document.body&&F!==document.documentElement;){if(F.getAttribute("aria-hidden")==="true")return;F=F.parentElement;}let S=uniqueSel(_);h.has(S)||(h.add(S),g.push({selector:S,attribute:"aria-hidden",currentValue:"true",issueType:"main_content_hidden",wcag:"4.1.2",context:JSON.stringify({tag:_.tagName.toLowerCase(),role:_.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:(_.outerHTML||"").slice(0,300)}));}),g},Ph={name:"mainContentHidden",cap:10,async detect(f){return f.evaluate(yI)}};var wI=()=>{let d=[];function g(_){return !!(!_||isWidget(_)||(_.getAttribute("aria-hidden")||"").trim().toLowerCase()==="true")}function h(_){return (_.outerHTML||"").slice(0,300)}let p=document.querySelectorAll("video");for(let _ of p){if(d.length>=10)break;let w=_;if(g(w))continue;let R=w.hasAttribute("controls"),F=w.hasAttribute("autoplay"),S=w.hasAttribute("muted"),x=F||!w.paused&&!w.ended,T=typeof isVisible=="function"?isVisible(w):true;if(!R&&x&&T&&(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;F&&!S&&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 _ of y){if(d.length>=10)break;let w=_;if(g(w))continue;let R=w.hasAttribute("controls"),F=w.hasAttribute("autoplay"),S=F||!w.paused&&!w.ended;if(!R&&S&&(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;F&&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},Nh={name:"mediaControls",cap:10,async detect(f){return f.evaluate(wI)}};var xI=()=>{let f="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],h=[],p=/^(image|photo|img|picture|pic|untitled|banner|hero|\d{1,2})$/i,y=/^(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,_=/pixel|track|beacon|doubleclick|facebook\.com\/tr\b/i,w=(x,T)=>{let C=x.getAttribute(T);if(C===null)return false;let M=parseFloat(C);return !isNaN(M)&&M<=1},R=document.querySelectorAll("img");for(let x of R){if(g.length>=50)break;if(x.closest(f)||x.closest("template, noscript, script"))continue;let T=x.getAttribute("src")||"",C=x.getAttribute("alt");if(T.startsWith("data:")||w(x,"width")||w(x,"height"))continue;let M=x.naturalWidth||0,L=x.naturalHeight||0;if(M>0&&L>0&&M<=3&&L<=3||x.getAttribute("role")==="presentation"||x.getAttribute("role")==="none"||x.getAttribute("aria-hidden")==="true")continue;let H=M||x.width,N=L||x.height,V=x.getBoundingClientRect(),z=!isVisible(x)||H<=2&&N<=2||V.width<=2&&V.height<=2||!!x.closest('[aria-hidden="true"]');if(z&&(C!==null||h.length>=50||_.test(T)))continue;let U=(x.getAttribute("aria-label")||"").trim(),ee=(x.getAttribute("aria-labelledby")||"").trim();if(U||ee)continue;if(C===null){let P=uniqueSel(x),q=getNearbyContext(x),j=[],W=x.closest("figure");if(W){let oe=W.querySelector("figcaption");oe&&j.push("figcaption: "+(oe.textContent||"").trim().slice(0,80));}q.nearbyHeading&&j.push("heading: "+q.nearbyHeading);let Q=x.closest("a");if(Q){let oe=Q.getAttribute("href")||"",de=(Q.textContent||"").trim().replace(/\s+/g," ");de&&j.push("link text: "+de.slice(0,60)),oe&&j.push("link href: "+oe.slice(0,80));}T&&j.push("src: "+T.slice(0,120)),j.push("parent: "+q.parentTag);let te=T;try{te=new URL(T,document.baseURI).href;}catch{}(z?h:g).push({selector:P,attribute:"alt",currentValue:"",issueType:"missing_alt",wcag:"1.1.1",context:j.join(" | "),needsAI:true,imageSrc:te,outerHtml:x.outerHTML.slice(0,300)});continue}let k=(C||"").trim();if(k==="")continue;let v=/\.(jpg|jpeg|png|gif|webp|svg|bmp|ico)$/i.test(k),D=p.test(k),E=y.test(k);if(v||D||E){let P=uniqueSel(x),q=getNearbyContext(x),j=[];q.nearbyHeading&&j.push("heading: "+q.nearbyHeading),T&&j.push("src: "+T.slice(0,120)),j.push("parent: "+q.parentTag);let W=T;try{W=new URL(T,document.baseURI).href;}catch{}g.push({selector:P,attribute:"alt",currentValue:k,issueType:"missing_alt",wcag:"1.1.1",context:j.join(" | "),needsAI:true,imageSrc:W,outerHtml:x.outerHTML.slice(0,300)});}}let F=globalThis;for(let x of Array.from(document.querySelectorAll("object"))){if(g.length>=50)break;if(x.closest(f)||x.closest('[aria-hidden="true"]')||x.getAttribute("aria-hidden")==="true")continue;let T=(x.getAttribute("role")||"").trim().toLowerCase();if(T==="presentation"||T==="none"||!F.isVisible(x))continue;let C=x.getAttribute("data")||"",M=(x.getAttribute("type")||"").trim().toLowerCase(),L=M.startsWith("image/"),H=/\.(png|jpe?g|gif|webp|bmp|svg)(\?[^#]*)?(#.*)?$/i.test(C);if(!C||!(L||!M&&H)||(x.getAttribute("aria-label")||"").trim()||(x.getAttribute("title")||"").trim())continue;let N=(x.getAttribute("aria-labelledby")||"").trim();N&&N.split(/\s+/).some(V=>(document.getElementById(V)?.textContent||"").trim())||x.closest('a, button, [role="button"], [role="link"]')||g.push({selector:F.uniqueSel(x),attribute:"aria-label",currentValue:"",issueType:"missing_alt",wcag:"1.1.1",context:"object image has no accessible name (fallback content does not name an object) | data: "+C.slice(0,120),needsAI:false,outerHtml:x.outerHTML.slice(0,300)});}let S=Array.from(document.querySelectorAll("script:not([src])")).map(x=>x.textContent||"");for(let x of Array.from(document.querySelectorAll("canvas"))){if(g.length>=50)break;if(x.closest(f)||x.closest('[aria-hidden="true"]')||x.getAttribute("aria-hidden")==="true")continue;let T=(x.getAttribute("role")||"").trim().toLowerCase();if(T==="presentation"||T==="none"||!F.isVisible(x)||(x.getAttribute("aria-label")||"").trim()||(x.getAttribute("aria-labelledby")||"").trim()||(x.getAttribute("title")||"").trim()||(x.textContent||"").trim()||x.children.length||x.closest('a, button, label, figure, [role="img"], [role="button"], [role="link"], [aria-label], [aria-labelledby], [aria-describedby]'))continue;let C=x.getBoundingClientRect();if(C.width<=30||C.height<=30)continue;let M=x.getAttribute("id");if(!M)continue;let L=new RegExp("#"+M.replace(/[^\w-]/g,"")+`\\b|getElementById\\(\\s*['"]`+M.replace(/[^\w-]/g,"")+`['"]`);S.some(N=>L.test(N)&&/\b(fillText|strokeText)\s*\(/.test(N))&&g.push({selector:F.uniqueSel(x),attribute:"aria-label",currentValue:"",issueType:"missing_alt",wcag:"1.1.1",context:"canvas draws text via script but has no accessible name or fallback content",needsAI:false,outerHtml:x.outerHTML.slice(0,300)});}for(let x of h){if(g.length>=50)break;g.push(x);}return g},qh={name:"missingAlt",cap:50,async detect(f){return f.evaluate(xI)}};var DI=()=>{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=C=>{if(getComputedStyle(C).visibility==="hidden")return false;for(let M=C;M&&M.nodeType===1;M=M.parentElement)if(getComputedStyle(M).display==="none")return false;return true},p=C=>Array.prototype.some.call(C.querySelectorAll("a:not([href])"),M=>h(M)&&!isHiddenFromAT(M)&&g.some(L=>M.hasAttribute(L))),y=C=>Array.prototype.some.call(C.querySelectorAll(d),M=>h(M)&&!isHiddenFromAT(M)),w=[];return document.querySelectorAll("div[onclick], span[onclick]").forEach(C=>{if(w.length>=50||C.closest(f)||!isVisible(C)||isHiddenFromAT(C)||y(C)||p(C))return;let M=C.getAttribute("role");if(M==="button"||M==="link"||M==="tab"||M==="menuitem"||M==="checkbox"||M==="radio")return;let L=uniqueSel(C),H=C.outerHTML.slice(0,300);w.push({selector:L,attribute:"role",currentValue:M||"",issueType:"missing_button_role",wcag:"4.1.2",context:JSON.stringify({tag:C.tagName.toLowerCase(),hasOnclick:true,currentTabindex:C.getAttribute("tabindex")}),needsAI:false,fixValue:"button",outerHtml:H}),C.getAttribute("tabindex")===null&&w.push({selector:L,attribute:"tabindex",currentValue:"",issueType:"missing_button_role",wcag:"4.1.2",context:JSON.stringify({tag:C.tagName.toLowerCase(),supplementary:'tabindex needed alongside role="button"'}),needsAI:false,fixValue:"0",outerHtml:H});}),document.querySelectorAll("a:not([href])").forEach(C=>{if(w.length>=50||C.closest(f)||!isVisible(C)||isHiddenFromAT(C)||C.getAttribute("role"))return;let L=C.hasAttribute("onclick"),H=C.getAttribute("data-action")||C.getAttribute("ng-click")||C.getAttribute("@click")||C.getAttribute("v-on:click");if(!L&&!H||y(C))return;let N=uniqueSel(C),V=C.outerHTML.slice(0,300);w.push({selector:N,attribute:"role",currentValue:"",issueType:"missing_button_role",wcag:"4.1.2",context:JSON.stringify({tag:"a",href:C.getAttribute("href")||"",hasOnclick:L}),needsAI:false,fixValue:"button",outerHtml:V});}),document.querySelectorAll("nav, ol, ul").forEach(C=>{if(w.length>=50||C.closest(f)||!isVisible(C)||isHiddenFromAT(C))return;let M=(C.className&&typeof C.className=="string"?C.className:"").toLowerCase(),L=(C.getAttribute("id")||"").toLowerCase();if(!M.includes("breadcrumb")&&!M.includes("crumb")&&!L.includes("breadcrumb")&&!L.includes("crumb"))return;let H=C.querySelectorAll("a");if(H.length<2)return;let N=(C.getAttribute("aria-label")||"").toLowerCase(),V=C.getAttribute("role");if(N.includes("breadcrumb")||N.includes("crumb")||V==="navigation"&&N)return;let z=uniqueSel(C);w.push({selector:z,attribute:"aria-label",currentValue:N,issueType:"missing_semantic_role",wcag:"4.1.2",context:JSON.stringify({tag:C.tagName.toLowerCase(),reason:"breadcrumb navigation missing aria-label",linkCount:H.length,pageLang:(document.documentElement.getAttribute("lang")||"").trim(),links:Array.prototype.slice.call(H,0,6).map(U=>(U.textContent||"").trim().slice(0,40)),otherLandmarkLabels:Array.prototype.slice.call(document.querySelectorAll('nav[aria-label], [role="navigation"][aria-label], [role="region"][aria-label], aside[aria-label]'),0,8).filter(U=>U!==C).map(U=>(U.getAttribute("aria-label")||"").trim().slice(0,60))}),needsAI:true,outerHtml:C.outerHTML.slice(0,300)});}),document.querySelectorAll("form, section, div").forEach(C=>{if(w.length>=50||C.closest(f)||!isVisible(C)||isHiddenFromAT(C))return;let M=(C.className&&typeof C.className=="string"?C.className:"").toLowerCase(),L=(C.getAttribute("id")||"").toLowerCase();if(!M.includes("search")&&!L.includes("search")||!C.querySelector('input[type="search"], input[type="text"], input[name*="search"], input[placeholder*="earch"]'))return;let N=C.getAttribute("role");if(N==="search"||C.closest('[role="search"]')||C.querySelector('[role="search"]')||Array.prototype.some.call(C.querySelectorAll("form, section, div"),U=>{let ee=(U.className&&typeof U.className=="string"?U.className:"").toLowerCase(),k=(U.getAttribute("id")||"").toLowerCase();return !ee.includes("search")&&!k.includes("search")||U.getAttribute("role")==="search"?false:!!U.querySelector('input[type="search"], input[type="text"], input[name*="search"], input[placeholder*="earch"]')}))return;let z=uniqueSel(C);w.push({selector:z,attribute:"role",currentValue:N||"",issueType:"missing_semantic_role",wcag:"4.1.2",context:JSON.stringify({tag:C.tagName.toLowerCase(),reason:'search section missing role="search"'}),needsAI:false,fixValue:"search",outerHtml:C.outerHTML.slice(0,300)});}),document.querySelectorAll('[role="menu"], [role="menubar"]').forEach(C=>{if(C.closest(f))return;let M=C.getAttribute("role")||"menu",L=Array.from(C.querySelectorAll("a")).filter(N=>{if(!isVisible(N)||isHiddenFromAT(N))return false;let V=N.getAttribute("role");return V!=="menuitem"&&V!=="menuitemcheckbox"&&V!=="menuitemradio"});if(L.length===0)return;let H=uniqueSel(C);w.push({selector:H,attribute:"role",currentValue:M,issueType:"missing_semantic_role",wcag:"4.1.2",context:JSON.stringify({tag:C.tagName.toLowerCase(),reason:`${L.length} link(s) inside role="${M}" without menuitem roles`,sample:L.slice(0,3).map(N=>(N.textContent||"").trim().slice(0,40))}),message:`container role="${M}" holds ${L.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:C.outerHTML.slice(0,300)});}),w},Bh={name:"missingRoles",cap:50,async detect(f){return f.evaluate(DI)}};var _I=()=>{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[p,y]of Object.entries(h))document.querySelectorAll(y).forEach(w=>{if(g.length>=30||w.closest(f)||typeof isVisible=="function"&&!isVisible(w))return;let R=w.parentElement,F=null;for(;R&&R!==document.body;){if(R.matches(y)){F=R;break}R=R.parentElement;}if((p==="banner"||p==="contentinfo")&&w.closest("article, section, aside, main, nav")||!F||w.getAttribute("aria-label")?.trim()||w.getAttribute("aria-labelledby")?.trim())return;let S=typeof uniqueSel=="function"?uniqueSel(w):"",x=typeof getNearbyContext=="function"?getNearbyContext(w):{nearbyHeading:""};g.push({selector:S,attribute:"role",currentValue:w.getAttribute("role")||w.tagName.toLowerCase(),issueType:"nested_landmark",wcag:"1.3.1",context:`nested-in: ${p} | tag: ${w.tagName.toLowerCase()} | heading: ${x.nearbyHeading||""}`,needsAI:false,fixValue:"generic",outerHtml:(w.outerHTML||"").slice(0,300)});});return g},Hh={name:"nestedLandmarks",cap:30,async detect(f){return f.evaluate(_I)}};var AI=()=>{let d=[],g=k=>typeof parseCssColor=="function"?parseCssColor(k):null,h=(k,v,D)=>typeof relLuminance=="function"?relLuminance(k,v,D):0,y=(k,v)=>typeof contrastRatio=="function"?contrastRatio(k,v):1;function _(k){let D=[0,0,0],E=0,P=j=>{let W=g(j||"");if(!W)return;let Q=Math.max(0,Math.min(1,W[3]));if(Q<=0)return;let te=Q*(1-E);D[0]+=W[0]*te,D[1]+=W[1]*te,D[2]+=W[2]*te,E+=te;};for(let j=k.parentElement;j&&E<.999999999;j=j.parentElement)P(getComputedStyle(j).backgroundColor);let q=1-E;return [Math.round(Math.min(255,D[0]+255*q)),Math.round(Math.min(255,D[1]+255*q)),Math.round(Math.min(255,D[2]+255*q))]}function w(k,v,D){return "#"+[k,v,D].map(E=>{let P=Math.max(0,Math.min(255,Math.round(E))).toString(16);return P.length===1?"0"+P:P}).join("")}function R(k,v,D){let E=h(v[0],v[1],v[2])>.5;return F(k,v,D,E)||F(k,v,D,!E)}function F(k,v,D,E){let P=0,q=1,j=null;for(let W=0;W<20;W++){let Q=(P+q)/2,te=E?[k[0]*(1-Q),k[1]*(1-Q),k[2]*(1-Q)]:[k[0]+(255-k[0])*Q,k[1]+(255-k[1])*Q,k[2]+(255-k[2])*Q],J=[Math.round(te[0]),Math.round(te[1]),Math.round(te[2])];y(J,v)>=D?(j=J,q=Q):P=Q;}return j}let S=(k,v)=>{let D=Math.max(0,Math.min(1,k[3]));return [k[0]*D+v[0]*(1-D),k[1]*D+v[1]*(1-D),k[2]*D+v[2]*(1-D)]};function x(k,v){let D=k.boxShadow||"";if(!D||D==="none")return null;let E=[],P=0,q="";for(let W of D)W==="("&&P++,W===")"&&P--,W===","&&P===0?(E.push(q),q=""):q+=W;q&&E.push(q);let j=null;for(let W of E){let Q=W.match(/rgba?\([^)]*\)/),te=Q?g(Q[0]):null;if(!te||te[3]<=0||(W.replace(/rgba?\([^)]*\)/,"").replace("inset","").trim().split(/\s+/).map(fe=>parseFloat(fe)).filter(fe=>Number.isFinite(fe))[3]??0)<=0)continue;let de=y(S(te,v),v);(j===null||de>j)&&(j=de);}return j}function T(k){let v=getComputedStyle(k),D=_(k),E=null,P=parseFloat(v.borderTopWidth||"0"),q=(v.borderTopStyle||"").toLowerCase(),j=g(v.borderTopColor||"");P>0&&q!=="none"&&q!=="hidden"&&j&&j[3]>0&&(E=y(S(j,D),D));let W=g(v.backgroundColor||"");if(W&&W[3]>0){let te=y(S(W,D),D);(E===null||te>E)&&(E=te);}let Q=x(v,D);return Q!==null&&(E===null||Q>E)&&(E=Q),E}function C(k){let v=k.getBoundingClientRect();if(v.width*v.height<=0)return null;let D='input, select, textarea, button, [role="button"], svg, img, i, label',E=k.parentElement,P=null;for(let q=0;E&&q<3&&!(E===document.body||E===document.documentElement);q++,E=E.parentElement){let j=E.getBoundingClientRect();if(j.width*j.height>4*v.width*v.height+1||j.height>Math.max(2.5*v.height,v.height+40))break;let W=false,Q=document.createTreeWalker(E,4),te=Q.nextNode();for(;te;){if((te.textContent||"").trim()&&te.parentElement&&!te.parentElement.closest(D)&&isVisible(te.parentElement)){W=true;break}te=Q.nextNode();}if(W)break;let J=T(E);J!==null&&J>1.01&&(P===null||J>P)&&(P=J);}return P}let M=k=>/^(img|picture|video|canvas|object|embed|iframe)$/.test((k.tagName||"").toLowerCase())||(getComputedStyle(k).backgroundImage||"none")!=="none",L=(k,v)=>{let D=Math.min(k.right,v.right)-Math.max(k.left,v.left),E=Math.min(k.bottom,v.bottom)-Math.max(k.top,v.top);return D>0&&E>0&&D*E/(k.width*k.height)>=.5},H=null;function N(k){let v=k.getBoundingClientRect();if(v.width*v.height<=0)return false;let D=v.left+v.width/2,E=v.top+v.height/2;if(D>=0&&E>=0&&D<window.innerWidth&&E<window.innerHeight&&typeof document.elementsFromPoint=="function"){let q=document.elementsFromPoint(D,E),j=q.indexOf(k);if(j>=0){for(let W of q.slice(j+1)){if(M(W))return true;let Q=g(getComputedStyle(W).backgroundColor||"");if(Q&&Q[3]>.5)return false}return false}}for(let q=k.parentElement,j=0;q&&j<8;q=q.parentElement,j++){let W=getComputedStyle(q);if((W.backgroundImage||"none")!=="none")return true;let Q=g(W.backgroundColor||"");if(Q&&Q[3]>.5||q===document.documentElement)break}H||(H=Array.from(document.querySelectorAll("img, picture, video, canvas, object, embed, iframe")));for(let q of H)if(!(q===k||k.contains(q)||q.contains(k))&&L(v,q.getBoundingClientRect())&&isVisible(q))return true;let P=k.offsetParent||k.parentElement;if(P&&P!==document.body&&P!==document.documentElement){let q=P.getElementsByTagName("*");for(let j=0;j<q.length&&j<400;j++){let W=q[j];if(!(W===k||k.contains(W)||W.contains(k))&&L(v,W.getBoundingClientRect())&&(getComputedStyle(W).backgroundImage||"none")!=="none"&&isVisible(W))return true}}return false}function V(k){for(let P=k.parentElement;P&&P.nodeType===1;P=P.parentElement)if(parseFloat(getComputedStyle(P).opacity||"1")<1)return false;let v=P=>{if(P.tagName.toLowerCase()!=="svg"){let W=g(getComputedStyle(P).color||"");return W&&W[3]>0?[W]:null}let q=[],j=Array.from(P.querySelectorAll("path, rect, circle, ellipse, polygon, polyline, line, text, use"));for(let W of j){let Q=W.getBoundingClientRect();if(Q.width===0&&Q.height===0)continue;let te=getComputedStyle(W);if(te.display==="none"||te.visibility==="hidden"||parseFloat(te.opacity||"1")<1)return null;for(let[J,oe]of [[te.fill,te.fillOpacity],[te.stroke,parseFloat(te.strokeWidth||"0")>0?te.strokeOpacity:"0"]]){let de=String(J||"");if(!de||de==="none"||parseFloat(String(oe??"1"))===0)continue;if(de.startsWith("url"))return null;let fe=g(de);if(!fe)return null;fe[3]*=parseFloat(String(oe??"1")),fe[3]>0&&q.push(fe);}}return q.length?q:null},D=[];for(let P=0;P<=255;P+=17)D.push(P);let E=Array.from(k.querySelectorAll('svg, i[class], [class*="icon"]'));for(let P of E){let q=P.getBoundingClientRect();if(q.width*q.height===0)continue;let j=getComputedStyle(P);if(j.display==="none"||j.visibility==="hidden")continue;let W=v(P);if(!W)continue;let Q=null,te=1,J=true;for(let fe=P;fe;fe=fe===k?null:fe.parentElement){let Ee=getComputedStyle(fe),Ne=parseFloat(Ee.opacity||"1");if(!Q){let Re=g(Ee.backgroundColor||""),Ae=String(Ee.backgroundClip||"border-box").toLowerCase();if(!(String(Ee.backgroundImage||"none")==="none")){J=false;break}if(Re&&Re[3]>=1&&Ae==="border-box")Q=[Re[0],Re[1],Re[2]];else if(Ne<1){J=false;break}}Q&&(te*=Ne);}if(!Q||!J)continue;let oe=Q,de=1/0;for(let fe of W){let Ee=S(fe,oe);for(let Ne of D)for(let Re of D)for(let Ae of D){let be=[Ne,Re,Ae],Et=S([Ee[0],Ee[1],Ee[2],te],be),gt=S([oe[0],oe[1],oe[2],te],be),Ge=y(Et,gt);Ge<de&&(de=Ge);}}if(de>=3)return true}return false}let z="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 U(k){let v=k.tagName.toLowerCase(),D=v==="input"||v==="select"||v==="textarea"?v+" field":v;d.push({selector:uniqueSel(k),message:"non-text contrast: "+D+" over an image backdrop \u2014 "+z,attribute:"style",currentValue:"?",issueType:"non_text_contrast_insufficient",wcag:"1.4.11",context:v+" backdrop=image needs=3",needsAI:false,needsReview:true,reviewReason:z,outerHtml:k.outerHTML.slice(0,200)});}let ee=document.querySelectorAll('input:not([type="hidden"]), select, textarea, button, [role="button"], [role="checkbox"], [role="radio"], [role="switch"]');for(let k of ee){if(d.length>=30)break;if(isWidget(k)||isHiddenFromAT(k)||!isVisible(k))continue;let v=getComputedStyle(k),D=_(k),E=g(v.backgroundColor||""),P=g(v.borderTopColor||""),q=parseFloat(v.borderTopWidth||"0"),j=(v.borderTopStyle||"").toLowerCase(),W=q>0&&j!=="none"&&j!=="hidden",Q=k.tagName.toLowerCase(),te=Q==="input"||Q==="select"||Q==="textarea",J=null;if(Q==="input"){let De=(k.type||"").toLowerCase(),cr=(v.appearance||v.webkitAppearance||"").toLowerCase();if(De==="checkbox"||De==="radio"){let Oe=cr==="none"?"":String(v.accentColor||"").trim().toLowerCase(),Me=Oe&&Oe!=="auto"?g(Oe):null;if(Me&&Me[3]>.5)J=y(S(Me,D),D);else if(cr&&cr!=="none")continue}}let oe=W&&P&&P[3]>.5?y(S(P,D),D):null,de=E&&E[3]>.5?y(S(E,D),D):J,fe=x(v,D),Ee=oe===null&&de===null&&fe===null?null:Math.max(oe??0,de??0,fe??0);if(te&&N(k)){U(k);continue}if(te&&(Ee===null||Ee<3)){let De=C(k);if(De!==null&&De>=3)continue}let Ne=null,Re=false,Ae="";if(te)Ee!==null?(Ne=Ee,Ee<3&&(Re=true)):(Re=true,Ne=1);else {let De=false,cr=document.createTreeWalker(k,4),Oe=cr.nextNode();for(;Oe;){if((Oe.textContent||"").trim()&&Oe.parentElement&&isVisible(Oe.parentElement)){De=true;break}Oe=cr.nextNode();}if(De)continue;let Me=N(k);{let ce=["Top","Right","Bottom","Left"].map(He=>({w:parseFloat(v["border"+He+"Width"]||"0"),s:String(v["border"+He+"Style"]||"").toLowerCase(),c:g(v["border"+He+"Color"]||"")})),ye=ce.filter(He=>He.w>0&&He.s!=="none"&&He.s!=="hidden"&&He.c&&He.c[3]>.5),Xe=ce.filter(He=>He.w>0&&He.s!=="none"&&He.s!=="hidden"&&He.c&&He.c[3]===0),ot=true;for(let He=k.parentElement;He&&He.nodeType===1;He=He.parentElement)if(parseFloat(getComputedStyle(He).opacity||"1")<1){ot=false;break}let dt=Math.max(0,Math.min(1,parseFloat(v.opacity||"1"))),yt=String(v.backgroundClip||"border-box").toLowerCase(),Qe=!!E&&E[3]>=1&&dt>=1&&yt==="border-box";if(ye.length&&Xe.length&&ot&&(!Me||Qe)){let He=E&&E[3]>0?S(E,D):D,tr=S([He[0],He[1],He[2],dt],D),rr=Vr=>{let sa=S(Vr,He);return S([sa[0],sa[1],sa[2],dt],D)};if(ye.some(Vr=>y(rr(Vr.c),tr)>=3))continue}}if(Me){if(V(k))continue;U(k);continue}let Gt=Array.from(k.querySelectorAll('img, svg, picture, canvas, i[class], [class*="icon"]')),nt=new Map,Tt=ce=>{let ye=ce.getBoundingClientRect();if(ye.width*ye.height===0)return "absent";let Xe=parseFloat(getComputedStyle(k).opacity||"1");for(let ot=ce;ot&&ot!==k;ot=ot.parentElement){let dt=getComputedStyle(ot);if(dt.display==="none")return "absent";if(dt.visibility==="hidden"||parseFloat(dt.opacity||"1")===0)return "hidden-at-rest";Xe*=parseFloat(dt.opacity||"1");}return nt.set(ce,Xe),"painted"},Jt=Gt.map(Tt),at=Gt.filter((ce,ye)=>Jt[ye]==="painted"),dr=at.length>0,gn=!dr&&Jt.includes("hidden-at-rest"),pe=ce=>{let ye=(ce.tagName||"").toLowerCase();if(ye==="img"||ye==="picture"||ye==="canvas"||ye==="svg"&&ce.querySelector("image, foreignObject, linearGradient, radialGradient, pattern"))return null;let Xe=[];if(ye==="svg"){let dt=ce.querySelector("path, circle, rect, polygon, polyline, line, ellipse, use, text");for(let yt of [dt,ce]){if(!yt)continue;let Qe=getComputedStyle(yt),He=1;for(let rr=yt;rr&&rr!==ce;rr=rr.parentElement||rr.parentNode)He*=parseFloat(getComputedStyle(rr).opacity||"1");let tr=rr=>Number.isFinite(parseFloat(rr))?parseFloat(rr):1;if(Qe.fill&&Qe.fill!=="none"&&!Qe.fill.startsWith("url")&&Xe.push({color:Qe.fill,alpha:He*tr(Qe.fillOpacity)}),Qe.stroke&&Qe.stroke!=="none"&&!Qe.stroke.startsWith("url")&&parseFloat(Qe.strokeWidth||"0")>0&&Xe.push({color:Qe.stroke,alpha:He*tr(Qe.strokeOpacity)}),Xe.length)break}}else ((ce.textContent||"").trim()||getComputedStyle(ce,"::before").content!=="none")&&Xe.push({color:getComputedStyle(ce).color,alpha:1});let ot=null;for(let dt of Xe){let yt=g(dt.color);if(!yt)continue;let Qe=yt[3]*dt.alpha*(nt.get(ce)??1),He=[yt[0]*Qe+D[0]*(1-Qe),yt[1]*Qe+D[1]*(1-Qe),yt[2]*Qe+D[2]*(1-Qe)],tr=y(He,D);(ot===null||tr>ot)&&(ot=tr);}return ot};if(dr&&at.map(pe).some(ye=>ye!==null&&ye>=3))continue;let ne=false,se=v.position;if((se==="absolute"||se==="fixed")&&k.parentElement){let ce=k.getBoundingClientRect(),ye=k.parentElement.getBoundingClientRect(),Xe=ye.width*ye.height;Xe>0&&ce.width*ce.height/Xe>=.85&&(ne=true);}if(dr||ne||gn){if(Re=true,Ne=W&&P&&P[3]>.5?y(S(P,D),D):1,Ne>=3)continue;Ae=dr?"control is identified by an image or icon \u2014 verify the graphic itself has 3:1 contrast against its surroundings":gn?"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 Ee!==null?(Ne=Ee,Ee<3&&(Re=true)):(Re=true,Ne=1);}if(!Re)continue;let be=P&&P[3]>.5?[P[0],P[1],P[2]]:E&&E[3]>.5?[E[0],E[1],E[2]]:[128,128,128],Et=R(be,D,3);if(!Et)continue;let gt=w(Et[0],Et[1],Et[2]),Ge=w(D[0],D[1],D[2]),ct="border: 1px solid "+gt+" !important;",Jr=uniqueSel(k),zt=k.tagName.toLowerCase(),At=Ee===null&&!W?"invisible (no border, no fill: 1.00:1)":Ne?Ne.toFixed(2)+":1":"not measurable",Pt=zt==="input"||zt==="select"||zt==="textarea"?zt+" field":zt,ur=Ae?"non-text contrast: "+Pt+" boundary is "+At+" against "+Ge+" (needs 3:1) \u2014 "+Ae:"non-text contrast: "+Pt+" boundary (border and fill) is "+At+" against "+Ge+", needs 3:1 \u2014 e.g. border-color "+gt;d.push({selector:Jr,message:ur,attribute:"style",currentValue:Ne?Ne.toFixed(2):"?",issueType:"non_text_contrast_insufficient",wcag:"1.4.11",context:zt+" bg="+Ge+" ratio="+(Ne?Ne.toFixed(2):"?")+" needs=3",needsAI:false,...Ae?{needsReview:true,reviewReason:Ae}:{fixValue:ct},outerHtml:k.outerHTML.slice(0,200)});}return d},Vh={name:"nonTextContrast",cap:30,async detect(f){return f.evaluate(AI)}};var EI=()=>{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,p=document.querySelectorAll("[onfocus]");for(let y of Array.from(p)){if(g.length>=20)break;if(y.closest(f))continue;let _=y.getAttribute("onfocus")||"";if(!_||!h.test(_))continue;let w=typeof uniqueSel=="function"?uniqueSel(y):"",R=typeof getNearbyContext=="function"?getNearbyContext(y):{parentTag:y.tagName.toLowerCase(),nearbyHeading:""},F=[];F.push("tag: "+y.tagName.toLowerCase()),F.push("onfocus: "+_.slice(0,100)),R.nearbyHeading&&F.push("heading: "+R.nearbyHeading),F.push("parent: "+R.parentTag),g.push({selector:w,attribute:"onfocus",currentValue:_.slice(0,200),issueType:"onfocus_context_change",wcag:"3.2.1",context:F.join(" | "),needsAI:true,outerHtml:(y.outerHTML||"").slice(0,300)});}return g},jh={name:"onFocus",cap:20,async detect(f){return f.evaluate(EI)}};var CI=()=>{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 H of g){let N=document.querySelector(H);if(N&&!N.closest(f)){h=true;break}}if(!h){let H=document.querySelectorAll('a[href^="#"]');for(let N of H){if(N.closest(f))continue;let V=(N.textContent||"").toLowerCase();if(V.includes("skip")&&(V.includes("main")||V.includes("content")||V.includes("nav"))){h=true;break}}}if(!h){let H=document.querySelectorAll('button, input[type="button"], input[type="submit"]');for(let N of Array.from(H)){if(N.closest(f))continue;let V=(N.getAttribute("value")||N.textContent||"").trim().toLowerCase();if(V.includes("skip")&&(V.includes("main")||V.includes("content")||V.includes("nav"))){h=true;break}}}if(!h){let H=document.body?document.body.firstElementChild:null;if(H&&H.matches('main, [role="main"], div#main')){let N=getComputedStyle(H),V=H.getBoundingClientRect();N.display!=="none"&&N.visibility!=="hidden"&&!H.closest('[hidden], [aria-hidden="true"]')&&V.width>0&&V.height>0&&(h=true);}}if(!h){let H=Array.from(document.querySelectorAll('main, [role="main"], div#main'));for(let N of H){let V=getComputedStyle(N);if(V.display==="none"||V.visibility==="hidden"||N.closest('[hidden], [aria-hidden="true"]'))continue;if(Array.from(N.querySelectorAll("h1, h2, h3, h4, h5, h6")).some(U=>{let ee=getComputedStyle(U);return ee.display!=="none"&&ee.visibility!=="hidden"&&!U.closest('[hidden], [aria-hidden="true"]')})){h=true;break}}}if(!h&&document.querySelector("nav")){let H=document.querySelectorAll("a, button");for(let N of Array.from(H)){if(N.closest(f))continue;let V=(N.textContent||"").trim().toLowerCase();if((V.includes("toggle")||V.includes("hide")||V.includes("collapse")||V.includes("show"))&&V.includes("content")){h=true;break}}}if(h||Array.from(document.querySelectorAll('main, [role="main"]')).filter(H=>{let N=getComputedStyle(H);if(N.display==="none"||N.visibility==="hidden"||H.closest('[hidden], [aria-hidden="true"]'))return false;let V=H.getBoundingClientRect();return V.width>0&&V.height>0}).length===1)return d;let y="",_=document.querySelector('main[id], [role="main"][id]');if(_&&_.getAttribute("id"))y=_.getAttribute("id");else {let H=document.querySelector("h1[id]");if(H&&H.getAttribute("id"))y=H.getAttribute("id");else {let N=["main-content","maincontent","main","content","skip-content"];for(let V of N)if(document.getElementById(V)){y=V;break}}}let w=y==="",R=y||"main-content",S="<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="#'+R+'" class="wa-skip-link">{TEXT}</a>',x=(document.documentElement.getAttribute("lang")||"").trim(),T=document.querySelector('main, [role="main"]'),C=T?(T.getAttribute("aria-label")||"").trim():"",M=document.querySelector("h1"),L=M?(M.textContent||"").trim().replace(/\s+/g," ").slice(0,80):"";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 #"+R)+(x?" | page language: "+x:"")+(C?" | main landmark label: "+C:"")+(L?" | page heading: "+L:"")+" | html template (replace {TEXT} with the link text, in the page language): "+S,needsAI:true,...w?{manualFix:true}:{}}),d},$h={name:"skipLink",async detect(f){return f.evaluate(CI)}};var SI=()=>{let g=[],h=document.querySelectorAll("*"),p=0;for(let y of Array.from(h)){if(p++>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 R=w.match(/url\((['"]?)(.*?)\1\)/);if(!R)continue;let F=R[2];if(!F||F.startsWith("data:")&&F.length<256)continue;let S=y.getBoundingClientRect();if(S.width<32||S.height<32)continue;let x=y.tagName.toLowerCase(),T=y.getAttribute("role")||"",C=x==="a"||x==="button"||T==="button"||T==="link"||y.closest("a,button,[role=button],[role=link]")!==null,M=(y.textContent||"").trim().length>0,L=!!y.getAttribute("aria-label"),H=!!y.getAttribute("aria-labelledby"),N=!!y.getAttribute("title"),V=!!y.querySelector('img[alt]:not([alt=""])');if(y.closest('[aria-hidden="true"]')){let v=y.closest("a[href]");if(!!v&&Array.from(document.querySelectorAll("a[href]")).some(E=>E!==v&&E.href===v.href&&!E.closest('[aria-hidden="true"]')))continue}if(L||H||N||V||M||!C)continue;let z=y.closest("a,button,[role=button],[role=link]");if(z&&z!==y){let v=(z.textContent||"").trim(),D=z.getAttribute("aria-label")||z.getAttribute("title")||"",E=z.getAttribute("aria-labelledby"),P=!!z.querySelector('img[alt]:not([alt=""])');if(v||D.trim()||E||P)continue}let U=F;try{U=new URL(F,location.href).toString();}catch{continue}let ee=typeof uniqueSel=="function"?uniqueSel(y):"",k=typeof getNearbyContext=="function"?getNearbyContext(y):{parentTag:x,nearbyHeading:""};g.push({selector:ee,attribute:"aria-label",currentValue:"",issueType:"background_image_unlabeled",wcag:"1.1.1",context:`bg: ${U.slice(0,140)} | tag: ${x} | role: ${T||"(none)"} | parent: ${k.parentTag}${k.nearbyHeading?" | heading: "+k.nearbyHeading:""}`,needsAI:true,imageSrc:U,outerHtml:(y.outerHTML||"").slice(0,300)});}return g},zh={name:"backgroundImages",cap:20,async detect(f){return f.evaluate(SI)}};var kI=()=>{let f="[class*=asw-],[class*=userway],[class*=acsb],[class*=audioeye]",g=[];return document.querySelectorAll("svg").forEach(p=>{if(g.length>=50||p.closest(f)||!isVisible(p)||p.getAttribute("aria-hidden")==="true")return;let _=p.getAttribute("role");if(_==="presentation"||_==="none"||p.closest('[aria-hidden="true"]'))return;let w=p.getAttribute("aria-label")||"",R=p.getAttribute("aria-labelledby")||"",F=p.querySelector("title"),S=F?(F.textContent||"").trim():"";if(w.trim()||R.trim()||S)return;let x=p.getBoundingClientRect(),T=x.width<=16&&x.height<=16;if(x.width<=4||x.height<=4||p.getAttribute("preserveAspectRatio")==="none")return;let C=p.closest('a, button, [role="button"], [role="link"], [onclick]');if(C){if(C.getAttribute("aria-label")?.trim()||C.getAttribute("aria-labelledby")?.trim())return;let D=getAccessibleName(C),E=C.cloneNode(true);E.querySelectorAll("svg").forEach(q=>q.remove());let P=(E.textContent||"").trim().replace(/\s+/g," ");if(D&&P.length>0)return}else {if(!/^(img|graphics-document|graphics-symbol)$/i.test((_||"").trim().split(/\s+/)[0])||T)return;let D=p.parentElement;if(D&&(D.textContent||"").trim().replace(/\s+/g," ").length>3)return}let M=uniqueSel(p),L=getNearbyContext(C||p),H=C&&C.getAttribute("href")||"",N=(C||p).outerHTML.slice(0,300),V=p.getAttribute("class")||"",z=p.getAttribute("data-icon")||"",U=C||p,ee=U&&U!==p&&U.getAttribute("class")||"",k=typeof lookupIconLabel=="function"?lookupIconLabel(String(V),z,"")||lookupIconLabel(String(ee),"",""):null,v=C?uniqueSel(C):M;g.push({selector:v,attribute:"aria-label",currentValue:"",issueType:"svg_missing_name",wcag:"1.1.1",context:JSON.stringify({parentTag:(C||p).tagName?(C||p).tagName.toLowerCase():"svg",href:H,nearbyHeading:L.nearbyHeading,parentRole:L.parentRole,svgClasses:V,iconLib:k||void 0,suggestion:"Add aria-label to the parent interactive element or <title> inside SVG"}),needsAI:true,outerHtml:N});}),g},Gh={name:"svgNames",cap:50,async detect(f){return f.evaluate(kI)}};var TI=()=>{let f={"line-height":1.5,"letter-spacing":.12,"word-spacing":.16},d=1e-9,g=Object.keys(f),h=30,p="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",y={px:1,pt:1.333333,pc:16,in:96,cm:37.795,mm:3.7795,q:.37795},_=k=>{let v=[];for(let D of k.split(";")){let E=D.match(/^\s*([-a-zA-Z]+)\s*:\s*(.*?)\s*$/);if(!E)continue;let P=E[1].toLowerCase();if(!g.includes(P))continue;let q=E[2],j=/!\s*important\s*$/i.test(q);q=q.replace(/!\s*important\s*$/i,"").trim(),q&&(P!=="line-height"&&/^[-+]?\d+(\.\d+)?$/.test(q)&&parseFloat(q)!==0||v.push({prop:P,value:q,important:j}));}return v},w=(k,v,D,E)=>{let P=v.trim().toLowerCase();if(/^normal$|^initial$/.test(P))return {kind:"narrow"};if(/^inherit$|^revert$|^unset$/.test(P))return {kind:"notBlocked"};if(P.startsWith("var(")||P.startsWith("calc(")||P.startsWith("env("))return {kind:"undetermined"};if(/^-?[\d.]+$/.test(P)){let te=parseFloat(P);return k==="line-height"?{kind:"ratio",factor:te}:{kind:"ratio",factor:0}}let q=P.endsWith("%")&&/\d/.test(P),j=q?P.slice(0,-1).trim().match(/^([\d.]+)$/):P.match(/^([\d.]+)(em|rem|vw|vh|px|pt|cm|mm|pc|in|q)$/);if(!j)return {kind:"undetermined"};let W=parseFloat(j[1]);if(q||P.endsWith("em")){let te=E??D;return te&&D&&isFinite(te)&&isFinite(D)&&te>0&&D>0?q?{kind:"ratio",factor:W/100*(te/D)}:{kind:"ratio",factor:W*(te/D)}:q?{kind:"ratio",factor:W/100}:{kind:"ratio",factor:W}}let Q=P.match(/(rem|vw|vh|px|pt|cm|mm|pc|in|q)$/)?.[1];if(Q==="px"||Q&&y[Q]){let te=Q==="px"?W:W*(y[Q]||0);return D===null||!isFinite(D)||D<=0?{kind:"undetermined"}:{kind:"ratio",factor:te/D}}return {kind:"undetermined"}},R=(k,v,D)=>{let E=k;for(;E;){let P=v.get(E);if(P){let q=P.filter(j=>j.prop===D);if(q.length){let j=q.filter(Q=>Q.important);return {decl:j.length?j[j.length-1]:q[q.length-1],from:E}}}E=E.parentElement;}return null},F=k=>{let v=k;for(;v;){let D=v.style;if(D&&(D.display==="none"||D.visibility==="hidden")||D&&(D.position==="absolute"||D.position==="fixed")&&(S(D.top)||S(D.left)))return false;if(D&&(D.overflowX==="scroll"||D.overflowX==="auto")){for(let E=k;E!==v;E=E.parentElement)if(E.style&&x(E.style.width)>=900)return false}v=v.parentElement;}return true},S=k=>{if(!k)return false;let v=k.match(/^(-)([\d.]+)(px|em|rem|vh|vw)$/i);if(!v)return false;let D=parseFloat(v[2]),E=v[3].toLowerCase();return E==="px"?D>=100:E==="em"||E==="rem"?D>=4:D>=10},x=k=>{let v=k?k.match(/^([\d.]+)px$/):null;return v?parseFloat(v[1]):0},T=[],C=[],M=new Map,L=typeof getComputedStyle=="function"?getComputedStyle:null,H=k=>{try{let v=L?L(k).fontSize:"",D=v?v.match(/^([\d.]+)px$/):null;return D?parseFloat(D[1]):null}catch{return null}},N=new Map,V=Array.from(document.querySelectorAll('[style*="important" i]'));for(let k of V)k.closest(p)||N.set(k,_(k.getAttribute("style")||""));for(let k of document.querySelectorAll("body [style]"))k.closest(p)||N.has(k)||N.set(k,_(k.getAttribute("style")||""));let z=[],U=document.createTreeWalker(document.body,1),ee=U.currentNode;for(;ee;)Array.from(ee.childNodes).some(v=>v.nodeType===3&&/\S/.test(v.textContent||""))&&!ee.closest(p)&&z.push(ee),ee=U.nextNode();for(let k of z){if(T.length>=h)break;if(F(k))for(let v of g){let D=R(k,N,v);if(!D||!D.decl.important)continue;let E=H(k),P=D.from===k?E:H(D.from)??E,q=w(v,D.decl.value,E,P);if(!(q.kind==="undetermined"||q.kind==="narrow"||q.kind==="ratio"&&q.factor+d<f[v]))continue;let W=M.get(D.from);W||(W=[],M.set(D.from,W),C.push({from:D.from,props:W})),W.includes(v)||W.push(v);}}for(let{from:k,props:v}of C){if(T.length>=h)break;let D=typeof uniqueSel=="function"?uniqueSel(k):"",E=typeof getNearbyContext=="function"?getNearbyContext(k):{parentTag:k.parentElement?.tagName.toLowerCase()||"",nearbyHeading:""},P=[];P.push("blocked: "+v.join(",")),P.push("tag: "+k.tagName.toLowerCase()),E.nearbyHeading&&P.push("heading: "+E.nearbyHeading),P.push("parent: "+E.parentTag),T.push({selector:D,attribute:"style",currentValue:(k.getAttribute("style")||"").slice(0,200),issueType:"text_spacing_blocked",wcag:"1.4.12",context:P.join(" | "),needsAI:true,outerHtml:(k.outerHTML||"").slice(0,300)});}return T},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 p of h){if(g.length>=50)break;if(p.closest(f)||!isVisible(p))continue;let y=p,_=y.tagName==="INPUT"?(y.getAttribute("type")||"").toLowerCase():"";if(_==="submit"||_==="reset")continue;let w=(y.getAttribute("role")||"").trim().toLowerCase().split(/\s+/)[0];if((w==="none"||w==="presentation")&&y.disabled===true)continue;let R=(y.getAttribute("aria-label")||"").trim(),F=y.getAttribute("aria-labelledby"),S=(y.getAttribute("title")||"").trim(),x=(y.getAttribute("value")||"").trim(),T=(y.textContent||"").trim().replace(/\s+/g," "),C="";F&&(C=typeof __resolveIdRefs=="function"?__resolveIdRefs(F):"");let M=y.querySelector('img[alt]:not([alt=""])'),L=y.querySelector("svg title"),H=y.querySelector("svg[aria-label]");if(!!(R||C||S||x||T||M||L||H))continue;let V=uniqueSel(y),z=getNearbyContext(y),U=y.closest("form"),ee=U&&(U.getAttribute("id")||U.getAttribute("name"))||"",k=y.getAttribute("class")||"",v=y.querySelector('i, svg, span[class*="icon"]'),D=v&&v.getAttribute("class")||"",E=v&&v.getAttribute("data-icon")||"",P=v?(v.textContent||"").trim():"",q=typeof lookupIconLabel=="function"?lookupIconLabel(String(D),E,P):null,j=!q&&typeof lookupIconLabel=="function"?lookupIconLabel(String(k),"",""):null,W=q||j,Q=[];for(let oe of ["type","name","id"]){let de=(y.getAttribute(oe)||"").trim();de&&Q.push(oe+"="+de.slice(0,40));}let te=[];if(U){let oe=(U.getAttribute("action")||"").trim();if(oe){let fe=oe;try{fe=new URL(oe,document.baseURI).pathname;}catch{}te.push("action: "+fe.slice(0,80));}let de=[];for(let fe of U.querySelectorAll("input:not([type=hidden]):not([type=submit]):not([type=button]), textarea, select")){let Ee=(fe.getAttribute("aria-label")||fe.getAttribute("placeholder")||fe.id&&Array.from(U.querySelectorAll("label[for]")).find(Ne=>Ne.getAttribute("for")===fe.id)?.textContent||fe.getAttribute("name")||"").trim().replace(/\s+/g," ");if(de.push(Ee.slice(0,40)||fe.getAttribute("type")||fe.tagName.toLowerCase()),de.length>=4)break}de.length&&te.push("fields: "+de.join(", "));}let J=[];ee&&J.push("form: "+ee),z.nearbyHeading&&J.push("heading: "+z.nearbyHeading),D&&J.push("icon: "+String(D).slice(0,80)),k&&J.push("class: "+String(k).slice(0,80)),J.push("parent: "+z.parentTag),Q.length&&J.push("control: "+Q.join(" "));for(let oe of te)J.push("form "+oe);W&&J.push("icon-hint (glyph name only, not the action): "+W),g.push({selector:V,attribute:"aria-label",currentValue:"",issueType:"unlabeled_button",wcag:"4.1.2",context:J.join(" | "),needsAI:true,outerHtml:y.outerHTML.slice(0,300)});}return g},Wh={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(k){if(isWidget(k)||!isVisible(k))return;let v=getAccessibleName(k);if(!v)return;let D=v.toLowerCase().trim();g[D]=(g[D]||0)+1;}document.querySelectorAll("a[href]").forEach(k=>h(k));let p=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 _(k){let v=k.toLowerCase();return p.has(v)||y.some(D=>v.startsWith(D))}let w=/[\u4e00-\u9fff\u3040-\u30ff\uac00-\ud7af]/;function R(k,v){return w.test(k)?1:v}let F=50,S=[];function x(k){if((k.textContent||"").trim().replace(/\s+/g," ").length>0)return false;let D=k.querySelectorAll("i, span, em");for(let E of D)if((typeof E.className=="string"?E.className:"").split(/\s+/).some(_))return true;return false}function T(k){let v=k.className||"";return typeof v!="string"?false:v.split(/\s+/).some(_)}function C(k){if(S.length>=F||isWidget(k)||!isVisible(k))return;let v=getAccessibleName(k);if(!v)return;let D=v.toLowerCase().trim(),E=false,P=v.length>=2&&/^[A-Z][A-Z0-9]+$/.test(v.trim()),q=/^[[(]?\d{1,4}[\])]?$/.test(v.trim());if(v.length<R(v,3)&&!P&&!q)E=true;else if(f.has(D))E=true;else if(d.has(D)&&(g[D]||0)>=2){let J=(k.getAttribute("aria-label")||"").trim().toLowerCase(),oe=!!k.getAttribute("aria-labelledby")||!!J&&J!==D,de=k.querySelector&&k.querySelector('.sr-only, .visually-hidden, [class*="sr-only"], [class*="visually-hidden"], [class*="screen-reader"]'),fe=de?(de.textContent||"").trim().toLowerCase():"";!oe&&!(de&&fe!==D)&&(E=true);}else (x(k)||T(k)&&v.length===0)&&(k.getAttribute("aria-label")||k.getAttribute("aria-labelledby")||k.querySelector&&k.querySelector('.sr-only, .visually-hidden, [class*="sr-only"], [class*="visually-hidden"]')||(E=true));if(!E)return;let j=getNearbyContext(k),W=uniqueSel(k),Q=k.getAttribute("href")||"",te=k.outerHTML.slice(0,300);S.push({selector:W,attribute:"aria-label",currentValue:(k.getAttribute("aria-label")||"").trim(),message:"weak link name: "+(k.getAttribute("aria-label")||k.getAttribute("aria-labelledby")?`"${v}" is too generic for a control \u2014 add distinguishing context`:`text "${v}" is too generic for a control \u2014 add distinguishing context`),issueType:"weak_link_name",wcag:"2.4.4",needsReview:true,reviewReason:"WCAG 2.4.4 (AA) judges link purpose in context: the link text together with its sentence, paragraph, list item or table cell (nearbyText). A link whose text names its destination page or topic passes, even as one word in a menu. Fail only generic text (here, more, click here, read more) whose context still does not say where the link goes.",context:JSON.stringify({currentText:v,href:Q,nearbyHeading:j.nearbyHeading,parentTag:j.parentTag,parentRole:j.parentRole,cardText:j.cardText||"",imgAlt:j.imgAlt||""}),needsAI:true,outerHtml:te});}document.querySelectorAll("a[href]").forEach(k=>C(k));let M=/^(untitled(?:\s+document)?|new\s+page|new\s+document|home|page\s*\d*|document|untitled)$/i,L=/^(iframe|embed|widget|frame|content|untitled)$/i,H=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 N(k){return !!(!k||k.getAttribute("aria-hidden")==="true"||k.closest('[aria-hidden="true"]'))}function V(k,v,D,E,P,q){if(S.length>=F)return;let j=uniqueSel(k),W=(k.outerHTML||"").slice(0,300);S.push({selector:j,attribute:v,currentValue:D,issueType:E,wcag:P,context:JSON.stringify(q),needsAI:true,outerHtml:W});}let z=document.querySelectorAll("h1,h2,h3,h4,h5,h6");for(let k=0;k<z.length&&!(S.length>=F);k++){let v=z[k];if(!v||isWidget(v)||N(v)||!isVisible(v))continue;let D=getAccessibleName(v);if(!D)continue;let E=D.toLowerCase().trim(),P=E.split(/\s+/).filter(Boolean),q=()=>{if(!/^\p{L}$/u.test(D))return false;let Q=v.nextElementSibling;if(!Q)return false;let te=Q.tagName.toLowerCase(),J=[];if(te==="dl"?J=Array.from(Q.querySelectorAll("dt")):te==="ul"||te==="ol"?J=Array.from(Q.children).filter(de=>de.tagName==="LI"):te==="table"&&(J=Array.from(Q.querySelectorAll("tbody tr, tr")).map(de=>de.cells&&de.cells[0])),J=J.filter(Boolean),J.length<1)return false;let oe=D.toLowerCase();return J.every(de=>(de.textContent||"").trim().toLowerCase().startsWith(oe))},j=false;if(D.length<R(D,3)?j=!q():(P.length===1&&(f.has(E)||H.has(E))||/^page\s*\d+$/i.test(E)||/^section\s*\d+$/i.test(E)||/^chapter\s*\d+$/i.test(E)||/^[^\p{L}\p{N}]+$/u.test(D))&&(j=true),!j)continue;let W=getNearbyContext(v);V(v,"textContent",D,"weak_heading","2.4.6",{currentText:D,tag:v.tagName.toLowerCase(),nearbyHeading:W.nearbyHeading,parentTag:W.parentTag,parentRole:W.parentRole});}let U=document.querySelectorAll("iframe");for(let k=0;k<U.length&&!(S.length>=F);k++){let v=U[k];if(!v||isWidget(v)||N(v))continue;let D=getComputedStyle(v);if(v.getClientRects().length===0||D.visibility==="hidden"||D.visibility==="collapse"||(v.getAttribute("src")||"").trim().toLowerCase().indexOf("javascript:")===0)continue;let E=(v.getAttribute("title")||"").trim();if(!E)continue;let P=E.toLowerCase(),q=false;if((E.length<R(E,3)||L.test(P)||f.has(P))&&(q=true),!q)continue;let j=(v.getAttribute("src")||"").slice(0,120),W=getNearbyContext(v);V(v,"title",E,"weak_iframe_title","4.1.2",{currentTitle:E,src:j,nearbyHeading:W.nearbyHeading,parentTag:W.parentTag});}if(S.length<F){let k=document.querySelector("head > title, title"),v=(document.title||"").trim();if(k&&v){let D=v.toLowerCase(),E=false;(v.length<R(v,5)||M.test(D)||/^untitled/i.test(v))&&(E=true),E&&S.push({selector:"title",attribute:"textContent",currentValue:v,issueType:"weak_page_title",wcag:"2.4.2",context:JSON.stringify({currentTitle:v,hostname:typeof location<"u"&&location&&location.hostname||"",pathname:typeof location<"u"&&location&&location.pathname||""}),needsAI:true,outerHtml:(k.outerHTML||"").slice(0,300)});}}let ee=document.querySelectorAll("svg");for(let k=0;k<ee.length&&!(S.length>=F);k++){let v=ee[k];if(!v||isWidget(v)||N(v)||v.getAttribute("role")==="presentation"||v.getAttribute("role")==="none"||!isVisible(v))continue;let D=v.querySelector("title"),E=D?(D.textContent||"").trim():"",P=(v.getAttribute("aria-label")||"").trim(),q=P||E;if(!q)continue;let j=q.toLowerCase(),W=false;if((q.length<R(q,3)||f.has(j)||/^(icon|svg|image|graphic|logo)$/i.test(q))&&(W=true),!W)continue;let Q=v.closest('a, button, [role="button"], [role="link"]'),te=getNearbyContext(v);V(v,P?"aria-label":"title",q,"weak_svg_name","1.1.1",{currentName:q,svgClasses:v.getAttribute("class")||"",parentTag:Q?Q.tagName.toLowerCase():te.parentTag,parentHref:Q&&Q.getAttribute("href")||"",nearbyHeading:te.nearbyHeading});}return S},Xh={name:"weakNames",cap:50,async detect(f){return f.evaluate(FI)}};var II=()=>{let d=[],g=document.querySelector('meta[name="viewport"]');if(g){let p=(g.getAttribute("content")||"").trim(),y=p.toLowerCase(),_=false,w=[];(y.indexOf("user-scalable=no")>=0||y.indexOf("user-scalable=0")>=0)&&(_=true,w.push("user-scalable=no blocks pinch-zoom"));let R=["yes","no","device-width","device-height"],F=y.match(/user-scalable\s*=\s*([a-z][a-z-]*)/);F&&R.indexOf(F[1])<0&&(_=true,w.push("user-scalable="+F[1]+" (invalid, parsed as 0)"));let S=y.match(/maximum-scale\s*=\s*([a-z][a-z-]*)/);S&&R.indexOf(S[1])<0&&(_=true,w.push("maximum-scale="+S[1]+" (invalid, parsed as 0)"));let x=y.match(/maximum-scale\s*=\s*([\d.]+)/);x&&parseFloat(x[1])<2&&(_=true,w.push("maximum-scale="+x[1]+" (<2)")),_&&d.push({selector:'meta[name="viewport"]',attribute:"content",currentValue:p,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 p=0;p<h.length&&!(d.length>=5);p++){let y=h[p];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 MI=()=>{let d=[],g=document.body?document.body.querySelectorAll("*"):[];for(let h=0;h<g.length&&d.length<10;h++){let p=g[h],y=p.tagName.toLowerCase();if(y==="script"||y==="style"||y==="svg"||y==="textarea"||y==="select")continue;let _="";for(let N=p.firstChild;N;N=N.nextSibling)N.nodeType===3&&(_+=N.nodeValue);if(!_.replace(/\s+/g,"").length)continue;let w=getComputedStyle(p);if(w.display==="none"||w.visibility==="hidden"||w.display==="contents")continue;let R=w.overflowX,F=w.overflowY,S=R==="hidden"||R==="clip",x=F==="hidden"||F==="clip";if(!S&&!x||p.closest('[aria-hidden="true"],[hidden],[inert]'))continue;let T=p.clientWidth,C=p.clientHeight;if(C<=1||T<=1)continue;let M=w.webkitLineClamp||w.getPropertyValue("-webkit-line-clamp");if(M&&M!=="none")continue;let L="";if(x&&p.scrollHeight>C+2?L="height "+C+"px < content "+p.scrollHeight+"px":S&&w.textOverflow!=="ellipsis"&&p.scrollWidth>T+2&&(L="width "+T+"px < content "+p.scrollWidth+"px"),!L){let N=parseFloat(w.fontSize);if(!(N>0))continue;let V=p.style.getPropertyValue("font-size"),z=p.style.getPropertyPriority("font-size");p.style.setProperty("font-size",N*2+"px","important");let U=p.clientHeight,ee=p.clientWidth;x&&U>1&&p.scrollHeight>U+2?L="at 200%: height "+U+"px < content "+p.scrollHeight+"px":S&&w.textOverflow!=="ellipsis"&&ee>1&&p.scrollWidth>ee+2&&(L="at 200%: width "+ee+"px < content "+p.scrollWidth+"px"),V?p.style.setProperty("font-size",V,z):p.style.removeProperty("font-size");}if(!L)continue;let H=typeof uniqueSel=="function"?uniqueSel(p):y;d.push({selector:H,attribute:"style",currentValue:(p.getAttribute("style")||"").slice(0,200),issueType:"resize_text_clipped",wcag:"1.4.4",context:"text clipped by overflow:hidden: "+L,needsAI:true,needsReview:true,reviewReason:"WCAG 1.4.4 Resize Text: this text is cut off by overflow:hidden ("+L+"). Violation when content or function is lost at 200% text size and no other mechanism shows it. Pass when the clipped part is decorative or repeated elsewhere, or the box grows or scrolls when text is resized.",outerHtml:(p.outerHTML||"").slice(0,300)});}return d},Yh={name:"textClip",cap:10,async detect(f){return f.evaluate(MI)}};var LI=()=>{let f=[],d=document.querySelectorAll('main *, [role="main"] *, body > div *'),g=new Set,h=Math.min(d.length,200);for(let p=0;p<h;p++){let y=d[p];if(g.has(y)||!y.offsetParent)continue;g.add(y);let _=getComputedStyle(y),w=parseInt(_.order||"0",10),R=_.position;if(w>=3){let F=y.getBoundingClientRect();if(F.width>0&&F.height>0){let S=(y.textContent?.trim().length||0)>10,x=!!y.querySelector("a, button, input, select, textarea");(S||x)&&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(R==="absolute"){if(!!!y.querySelector("a, button, input, select, textarea"))continue;let S=y.parentElement;if(!S||S.children.length<=2)continue;let x=y.getBoundingClientRect(),T=S.getBoundingClientRect();(x.top<T.top-100||x.left<T.left-300)&&f.push({selector:typeof uniqueSel=="function"?uniqueSel(y):y.tagName.toLowerCase(),attribute:"data-sequence-review",currentValue:`position: ${R}, displaced ${Math.round(Math.abs(x.top-T.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{instructionalTexts:d,controlLabels:g,navCount:h,labelTexts:p}=await f.evaluate(()=>{let w=[],R=document.querySelectorAll('p, li, td, label, span, div, a, button, h1, h2, h3, h4, h5, h6, figcaption, [role="alert"], [role="status"]'),F=Math.min(R.length,300),S=[];document.querySelectorAll('button, a[href], [role="button"], input[type="button"], input[type="submit"]').forEach(M=>{let L=((M.textContent||"")+" "+(M.getAttribute("aria-label")||"")+" "+(M.getAttribute("value")||"")).trim().toLowerCase();L&&S.push(L);});let x=M=>!!M.offsetParent||getComputedStyle(M).position==="fixed",T=Array.from(document.querySelectorAll('nav, [role="navigation"]')).filter(x).length,C=[];document.querySelectorAll('h1, h2, h3, h4, h5, h6, nav, [role="navigation"], [role="menu"], [role="menubar"], [aria-label], summary, button, a, legend').forEach(M=>{if(!x(M))return;let L=((M.getAttribute("aria-label")||"")+" "+(M.tagName.match(/^(H\d|SUMMARY|BUTTON|A|LEGEND)$/)&&M.textContent||"")).trim().toLowerCase();L&&L.length<=60&&C.push(L);});for(let M=0;M<F;M++){let L=R[M];if(!L.offsetParent||L.children.length>3||L.querySelector("p, div, ul, ol, li, table, section, article, nav, header, footer, main, aside, form, h1, h2, h3, h4, h5, h6")||L.closest('[aria-hidden="true"]'))continue;let H=L.textContent?.trim()||"";H.length<15||H.length>300||/click|tap|press|select|choose|find|look|see|drag|scroll|hover|go to|navigate/i.test(H)&&w.push({text:H,selector:typeof uniqueSel=="function"?uniqueSel(L):L.tagName.toLowerCase()});}return {instructionalTexts:w.slice(0,20),controlLabels:S,navCount:T,labelTexts:C}});if(d.length===0)return [];let y=[],_=w=>{let R=(w.toLowerCase().match(/\b(navigation|menu)\b/)||[])[1];return R?h===1?true:p.some(F=>F.indexOf(R)!==-1):false};for(let{text:w,selector:R}of d){w.toLowerCase();let S=/\b(round|square|circular|triangular|arrow-shaped)\b.*\b(button|icon|element|thing)\b/i.test(w)&&!/\b(submit|cancel|close|menu|search|delete|edit|save|back|next|previous|home)\b/i.test(w),x=/\b(header|footer|sidebar menu|breadcrumb)\b/i.test(w)||_(w),T=/\b(on the|to the|in the)\s+(left|right|top|bottom|upper|lower|above|below|sidebar)\b/i.test(w)&&!x&&/\b(click|tap|press|select|find)\b/i.test(w),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(w)&&!/\b(submit|cancel|close|delete|save|success|error|warning|danger)\b/i.test(w),M=/\b(large|small|big|tiny|narrow|wide)\s+(button|link|icon|box|area)\b/i.test(w)&&/\b(click|tap|press|select|find)\b/i.test(w),L=/\b(?:labell?ed|called|named|titled)\s+["'“‘]/i.test(w),H=(w.match(/\b(round|square|circular|triangular|arrow-shaped|red|green|blue|yellow|orange|purple|pink|gray|grey|white|black|large|small|big|tiny|narrow|wide)\b/i)||[])[1],N=!!H&&g.some(V=>V.indexOf(H.toLowerCase())!==-1);if(!(L||N)&&(S||T||C||M)){let V=S?"shape":T?"position":C?"color":"size";y.push({selector:R,attribute:"data-sensory-review",currentValue:w.slice(0,100),issueType:"sensory_characteristic",wcag:"1.3.3",context:`Instruction relies on ${V} alone: "${w.slice(0,80)}". Provide a non-sensory way to identify the referenced element (e.g., by name, label, or function).`,needsAI:true});}}return y}};var OI=()=>{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")||"",p=h.indexOf(","),y=(h.toLowerCase().startsWith("data:")&&p!==-1?h.slice(0,p):h).toLowerCase(),_=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")&&_.trim()==="")continue;let F=g.width>200&&g.height<80&&g.height>15,S=/banner|header|logo-text|title|heading|cta|promo|offer|button.*\.(?:png|jpg|gif|webp)/i.test(y);if(!(S||F)||/(?:^|\/)(?:img|dsc|dscn|dcim|pict)[-_]?\d|photo|gallery/i.test(y)&&!S)continue;let T=g.closest("a[href]"),C=(()=>{if(!T)return false;let ee=T.getAttribute("href")||"";if(ee==="/"||ee==="")return true;try{let k=new URL(T.href,location.href);return k.origin!==location.origin?!1:!!(k.pathname.replace(/\/+$/,"")===""||/^\/(?:index|home|default)(?:\.\w+)?$/i.test(k.pathname)||/^\/[a-z]{2}(?:-[a-z]{2})?(?:\.\w+)?$/i.test(k.pathname))}catch{return false}})();if(C&&(T.textContent||"").trim().length===0)continue;let L="";if(T&&!C&&(T.textContent||"").trim().length===0)try{let ee=new URL(T.href,location.href),k=_.trim().split(/\s+/).filter(Boolean);if(ee.origin!==location.origin&&/^https?:$/.test(ee.protocol)&&k.length>0&&k.length<=4&&_.trim().length<=40){let v=j=>j.toLowerCase().normalize("NFKD").replace(/[^\p{L}\p{N}]/gu,""),D=v(_),E=ee.hostname.toLowerCase().split(".").filter(j=>j&&j!=="www"),P=(E.length>1?E.slice(0,-1):E).map(v).filter(Boolean);L=D.length>=3&&(D===v(E.join(""))||D===P.join("")||P.some(j=>D===j||j.length>=5&&D.startsWith(j)))?"exempt":"review";}}catch{}let H=!!g.closest('header, [role="banner"], footer, [role="contentinfo"]'),N=g.height>0&&g.height<=120,V=H&&N,z=/logo|brand|wordmark|hero|banner-?(?:img|image)?|footer|marketing|promo|cover|screenshot|dashboard/i,U=V||z.test(y)||z.test(g.className)||z.test(g.getAttribute("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="${_.slice(0,40)}"). Use real text with CSS styling instead.`,needsAI:true,imageSrc:g.src,...U||L?{needsReview:true,reviewReason:V?"small graphic in the header/footer landmark \u2014 likely a logo, wordmark, or brand signature, which are exempt under WCAG 1.4.5 (logotypes)":L==="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":L==="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(OI)}};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,p=g.height??720;try{return await d.setViewport({width:320,height:p}),await new Promise(_=>setTimeout(_,500)),await f.evaluate(_=>{let w=[],R=document.querySelectorAll("body *"),F=Math.min(R.length,500);for(let S=0;S<F;S++){let x=R[S];if(!x.offsetParent)continue;let T=x.tagName.toLowerCase();if(T==="script"||T==="style"||T==="noscript")continue;let C=x.getBoundingClientRect();C.right>_+5&&C.width>_*1.1&&w.push({selector:typeof uniqueSel=="function"?uniqueSel(x):T,attribute:"style",currentValue:`${Math.round(C.width)}px wide at ${_}px viewport`,issueType:"reflow_overflow",wcag:"1.4.10",context:`Element is ${Math.round(C.width)}px wide and overflows the ${_}px viewport by ${Math.round(C.right-_)}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>_+10&&w.push({selector:"html",attribute:"data-reflow",currentValue:`scrollWidth ${document.documentElement.scrollWidth}px at ${_}px viewport`,issueType:"reflow_overflow",wcag:"1.4.10",context:`Page has horizontal scrollbar at ${_}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:p}).catch(()=>{});}}};var PI=()=>{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 _=/mute|unmute|sound|volume|audio|play|pause/i,w=!!h.parentElement?.querySelector('button, [role="button"]')||!!h.getAttribute("id")&&!!document.querySelector('[aria-controls~="'+(h.getAttribute("id")||"").replace(/"/g,"")+'"]');for(let C=h.parentElement?.parentElement||null,M=0;C&&!w&&M<3;C=C.parentElement,M++)w=Array.from(C.querySelectorAll('button, [role="button"]')).some(L=>_.test((L.getAttribute("aria-label")||"")+" "+(L.getAttribute("title")||"")+" "+(L.textContent||"")));if((h.muted||h.hasAttribute("muted"))&&(h.loop||h.hasAttribute("loop"))&&!h.hasAttribute("controls")&&!w)continue;let R=h.querySelectorAll("track"),F=Array.from(R).find(C=>C.kind==="captions"||C.kind==="subtitles"),S=Array.from(R).find(C=>C.kind==="descriptions");h.src||h.querySelector("source")?.src||"";let T=typeof uniqueSel=="function"?uniqueSel(h):"video";F||f.push({selector:T,attribute:"data-captions-missing",currentValue:"",issueType:"missing_captions",wcag:"1.2.2",context:`Video element has no <track kind="captions">. Provide synchronized captions for all prerecorded audio content. Page language: ${(document.documentElement.getAttribute("lang")||"").trim()||"not declared"}; the caption track's srclang and label follow the spoken language, which only the audio settles.`,needsAI:false,fixValue:'Add a <track kind="captions" src="captions.vtt" srclang="[spoken language]" label="[language name]" default> element',needsReview:true,reviewReason:"cannot verify an audio track in-page \u2014 confirm the video has speech content before adding captions (silent videos need none)"}),S||f.push({selector:T,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 p=typeof uniqueSel=="function"?uniqueSel(h):"audio";h.closest("figure, div, section")?.querySelector('a[href*="transcript"], [class*="transcript"]')||f.push({selector:p,attribute:"data-transcript-missing",currentValue:"",issueType:"missing_transcript",wcag:"1.2.1",context:"Audio element has no associated transcript. Provide a text transcript for all prerecorded audio-only content.",needsAI:true}),h.autoplay&&!h.muted&&f.push({selector:p,attribute:"muted",currentValue:"autoplay without muted",issueType:"unsafe_autoplay",wcag:"1.4.2",context:"Audio autoplays with sound. Provide a way to pause/stop/mute, or limit to 3 seconds.",needsAI:false,fixValue:"true"});}return f},tg={name:"mediaAlternatives",cap:50,async detect(f){return (await f.evaluate(PI)).slice(0,50)}};var NI=()=>{let f=[],d=document.querySelector('meta[http-equiv="refresh"]');if(d){let k=d.getAttribute("content")||"",v=parseInt(k,10);!isNaN(v)&&v>0&&v<72e3&&f.push({selector:`meta[http-equiv="refresh"][content*="${k.trim().slice(0,20)}"]`,attribute:"data-auto-refresh",currentValue:k,issueType:"auto_refresh",wcag:"2.2.1",context:`Page auto-refreshes after ${v}s. Users must be able to turn off, adjust, or extend time limits (WCAG 2.2.1).`,needsAI:false,manualFix:true});}let g=document.querySelectorAll("[accesskey]");for(let k of g){let v=k.getAttribute("accesskey")||"";if(v.length===1){let D=typeof uniqueSel=="function"?uniqueSel(k):k.tagName.toLowerCase();f.push({selector:D,attribute:"accesskey",currentValue:v,issueType:"character_key_shortcut",wcag:"2.1.4",context:`Single character accesskey "${v}". Must allow users to remap or disable single-character shortcuts. Consider using modifier key combinations instead.`,needsAI:false,fixValue:"Provide a mechanism to remap or turn off the shortcut, or use modifier keys"});}}let h=document.querySelectorAll("select");for(let k of h){let v=k.hasAttribute("onchange"),D=k.getAttribute("onchange")||"";if(v&&/submit|location|href|navigate|window\./i.test(D)){let E=typeof uniqueSel=="function"?uniqueSel(k):"select";f.push({selector:E,attribute:"onchange",currentValue:D.slice(0,80),issueType:"on_input_change",wcag:"3.2.2",context:"Select element changes context on input (navigates or submits). Add an explicit submit button instead of auto-submitting on selection change.",needsAI:false,fixValue:"Add a submit button; remove auto-navigation from onchange"});}}let p=document.querySelectorAll("[ontouchstart], [ontouchmove], [ongesturestart], [ongesturechange]");for(let k of p)if(!(k.hasAttribute("onclick")||k.hasAttribute("onkeydown")||k.hasAttribute("onkeyup"))){let D=typeof uniqueSel=="function"?uniqueSel(k):k.tagName.toLowerCase();f.push({selector:D,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 k of y){let v=k.hasAttribute("onmouseup"),D=k.tagName.toLowerCase();if(!v&&D!=="a"&&D!=="button"&&D!=="input"){let E=typeof uniqueSel=="function"?uniqueSel(k):D;f.push({selector:E,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 _=/devicemotion|deviceorientation|accelerometer|gyroscope/i,w=/addEventListener\(\s*['"](?:devicemotion|deviceorientation)['"]\s*,\s*(?:\(\s*\)\s*=>|function\s*\(\s*\))\s*\{\s*(?:[A-Za-z_$][\w$]*\s*(?:\+\+|--)\s*;?\s*)+\}\s*\)/gi,R=/addEventListener\(\s*['"](?:click|keydown|keyup|input|change|pointerup|touchend)['"]/i,F=/(?:disable|turn off|switch off|stop|pause|deactivate|opt.?out)[^.]{0,40}(?:motion|shake|tilt|orientation|sensor|gyro|accelerometer)|(?:motion|shake|tilt|orientation|sensor)[^.]{0,40}(?:disable|turn off|switch off|opt.?out)/i;function S(){let k=document.querySelectorAll('label, button, [role="button"], [role="switch"], input[type="button"], input[type="checkbox"]');for(let v of Array.from(k)){let D=(v.textContent||"")+" "+(v.getAttribute("aria-label")||"")+" "+(v.getAttribute("value")||"");if(F.test(D))return true}return false}function x(k){return !_.test(k.replace(w,""))||R.test(k)?true:S()}let T=document.querySelectorAll("script:not([src]):not([data-wa-injected])");for(let k of T){let v=k.textContent||"";if(_.test(v)&&!x(v)){let D=[],E=k;for(;E&&E!==document.body&&E!==document.documentElement;){let j=E.parentElement,W=E.tagName.toLowerCase(),Q=j?Array.from(j.children).filter(J=>J.tagName===E.tagName):[],te=Q.indexOf(E)+1;D.unshift(te>1||Q.length>1?W+":nth-of-type("+te+")":W),E=j;}let P=E===document.body?"body":E===document.documentElement?"html":"",q=(P?P+" > ":"")+D.join(" > ");f.push({selector:q||"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 C=document.querySelectorAll("form"),M='input:not([type="hidden"]):not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="image"]), select, textarea',L=/\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,H=/card|payment/i,N=/\b(?:pay|buy|purchase|donate|subscribe and pay|place (?:your |my )?order|complete (?:order|purchase|payment)|confirm (?:order|purchase|payment)|check ?out)\b/i,V=/\b(?:delete|remove|close|deactivate|cancel|terminate)\b[^.]{0,30}\b(?:account|profile|subscription|membership|data|records?)\b/i,z=/\b(?:e-?)?sign\b(?![\s\u00a0-]*(?:up|in|on|out)\b)|\bagree and (?:submit|continue|sign)\b/i,U=/\b(?:save|update|change)\b/i,ee=/e-?mail|name|phone|tel\b|zip|postal|company|organi[sz]ation|country/i;for(let k of C){let v=Array.from(k.querySelectorAll(M)),D=Ge=>[Ge.getAttribute("name"),Ge.getAttribute("id"),Ge.getAttribute("autocomplete"),Ge.getAttribute("placeholder"),Ge.getAttribute("aria-label")].join(" "),E=Array.from(k.querySelectorAll('button, input[type="submit"], input[type="image"]')).filter(Ge=>Ge.tagName!=="BUTTON"||!Ge.getAttribute("type")||(Ge.getAttribute("type")||"").toLowerCase()==="submit").map(Ge=>(Ge.getAttribute("value")||"")+" "+(Ge.textContent||"")+" "+(Ge.getAttribute("aria-label")||"")).join(" . "),P=v.some(Ge=>L.test(D(Ge)))||Array.from(k.querySelectorAll("iframe")).some(Ge=>H.test((Ge.getAttribute("title")||"")+" "+(Ge.getAttribute("name")||""))),q=v.some(Ge=>/signature/i.test(D(Ge))),j=P||N.test(E),W=V.test(E),Q=q||z.test(E),te=v.length>0&&v.some(Ge=>(Ge.getAttribute("type")||"").toLowerCase()==="email"||/e-?mail/i.test(D(Ge)))&&v.every(Ge=>{let ct=Ge.tagName.toLowerCase()==="input"?(Ge.getAttribute("type")||"text").toLowerCase():Ge.tagName.toLowerCase();return ct==="email"||ct==="checkbox"||ct==="tel"?true:ct==="text"||ct==="search"?ee.test(D(Ge)+" "+(Ge.closest("label")?.textContent||"")):false}),J=(k.textContent||"").toLowerCase(),oe=/payment|credit card|billing|purchase|\border\b|checkout|bank|account number/i.test(J),de=/\bagree|terms|contract|binding|signature|consent|waiver/i.test(J),fe=/delete.*account|remove.*data|cancel.*account/i.test(J),Ee=j||W||Q,Ne=te&&(U.test(E)||fe),Re=!Ee&&(!te&&(oe||de||fe)||Ne);if(!Ee&&!Re)continue;let Ae=!!k.querySelector('[type="checkbox"][required], [class*="confirm"], [id*="confirm"], [name*="confirm"]'),be=!!k.querySelector('[class*="review"], [class*="summary"], [id*="review"]');if(Ae||be)continue;let Et=typeof uniqueSel=="function"?uniqueSel(k):"form",gt=Ee?j?"financial":W?"data-deletion":"legal":Ne?fe?"data-deletion":"data-modification":oe?"financial":de?"legal":"data-deletion";f.push({selector:Et,attribute:"data-error-prevention",currentValue:gt,issueType:"error_prevention_missing",wcag:"3.3.4",context:`${gt.charAt(0).toUpperCase()+gt.slice(1)} form lacks a confirmation/review step. For ${gt} transactions, provide: (1) a review step before submission, (2) ability to check/correct input, or (3) ability to reverse the submission.`,needsAI:true,...Re?{needsReview:true,reviewReason:Ne&&fe?"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 ${gt} topics but its controls show no ${gt} 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(NI)}};var qI=()=>{let f=[],d=document.querySelectorAll('nav, [role="navigation"]');for(let p of d){if(!p.offsetParent||p.closest('footer, aside, [role="contentinfo"], [role="complementary"]')||p.parentElement?.closest('nav, [role="navigation"]'))continue;let y=p.getBoundingClientRect();if(y.top<=window.innerHeight)continue;let _=typeof uniqueSel=="function"?uniqueSel(p):"nav";f.push({selector:_,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 p of g){if(!p.offsetParent)continue;let y=p.getBoundingClientRect();if(y.width<1||y.height<1||!(p.textContent||"").trim()&&!p.querySelector("img, svg, video, canvas, picture")&&getComputedStyle(p).backgroundImage==="none")continue;let _=typeof uniqueSel=="function"?uniqueSel(p):p.tagName.toLowerCase();f.push({selector:_,attribute:"data-flashing",currentValue:p.tagName.toLowerCase(),issueType:"flashing_content",wcag:"2.3.1",context:"Element may produce flashing content. Content must not flash more than 3 times per second. Remove blinking/flashing effects or ensure they are below the threshold.",needsAI:true});}let h=document.querySelectorAll('img[src*=".gif"]');for(let p of h){if(!p.offsetParent||p.width<25||p.height<25)continue;let y=p.getBoundingClientRect();if(y.width>100&&y.height>100){let _=typeof uniqueSel=="function"?uniqueSel(p):"img";f.push({selector:_,attribute:"data-animated-gif",currentValue:(p.src||"").split("/").pop()?.slice(0,40)||"",issueType:"animated_gif_no_pause",wcag:"2.2.2",context:"Animated GIF detected. If this GIF is animated and loops continuously, provide a pause mechanism. Also verify it does not flash more than 3 times per second (WCAG 2.3.1).",needsAI:true});}}return f},ng={name:"navigationAndWayfinding",async detect(f){return f.evaluate(qI)}};var ag={name:"flashDetection",async detect(f){let d=[];if(!f.screenshot)return d;let h=await f.evaluate(()=>{let S=document.documentElement.style.getPropertyValue("--wa-animations-frozen")==="1";if(S){let x=document.querySelectorAll("*");for(let T of x)T.style.removeProperty("animation-play-state"),T.style.removeProperty("transition");}return S}),p=8,y=120,_=9,w=3,R=[];for(let F=0;F<p;F++){let S=await f.evaluate(x=>{let T=window.innerWidth,C=window.innerHeight,M=3,L=3,H=[];for(let N=0;N<L;N++)for(let V=0;V<M;V++){let z=Math.floor((V+.5)*(T/M)),U=Math.floor((N+.5)*(C/L)),ee=document.elementFromPoint(z,U);if(!ee){H.push(0);continue}let v=getComputedStyle(ee).backgroundColor||"rgba(0,0,0,0)",D=typeof parseCssColor=="function"?parseCssColor(v):null;if(!D){H.push(0);continue}let E=.2126*D[0]+.7152*D[1]+.0722*D[2];H.push(E);}return H},_);R.push(S),F<p-1&&await new Promise(x=>setTimeout(x,y));}h&&await f.evaluate(()=>{let F=document.querySelectorAll("*");for(let S of F)S.style.setProperty("animation-play-state","paused","important"),S.style.setProperty("transition","none","important");});for(let F=0;F<_;F++){let S=0,x=R[0][F],T=null;for(let L=1;L<p;L++){let H=R[L][F];if(Math.abs(H-x)>25){let V=H>x?"up":"down";T&&V!==T&&S++,T=V;}x=H;}let C=p*y/1e3,M=S/C;if(M>=w){let L=F%3,H=Math.floor(F/3);d.push({selector:"body",attribute:"data-flash-detected",currentValue:`${M.toFixed(1)} flashes/sec in region (${L},${H})`,issueType:"flashing_content",wcag:"2.3.1",context:`Content flashes ${M.toFixed(1)} times/second in screen region (row ${H}, col ${L}). 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,p=false;for(let _ of document.styleSheets)try{for(let w of _.cssRules){let R=w.cssText||"";/animation|transition|@keyframes/i.test(R)&&!/prefers-reduced-motion/.test(R)&&(h=!0),w instanceof CSSMediaRule&&/prefers-reduced-motion/i.test(w.conditionText||w.media?.mediaText||"")&&(p=!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:p,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 BI=()=>{let f="[class*=asw-], [class*=userway], [class*=acsb], [class*=audioeye], [class*=EquallyAI]",g=[],h=/^(0+(\.0+)?|false|off|no|none|disabled?)$/i,p=v=>v!==null&&!h.test(v.trim()),y=v=>{let D=parseFloat((v||"").trim());return Number.isFinite(D)&&D>0},_=/^(carousel|slider|slideshow|slides|slick|swiper|splide|flickity|owl|flexslider|glide|layerslider|ls|rotator|gallery)$/i,w=v=>v.split(/[\s_-]+/).filter(Boolean),R=v=>{if((v.getAttribute("aria-roledescription")||"").trim().toLowerCase()==="carousel")return true;let D=typeof v.className=="string"?v.className:v.getAttribute("class")||"";return w(D).some(E=>_.test(E))},F=/^(autoplay|autoPlay|auto_play|autoStart|autostart|auto_start)$/,S=v=>{let D=v.trim();if(!D.startsWith("{"))return "";let E;try{E=JSON.parse(D);}catch{try{E=JSON.parse(D.replace(/'/g,'"'));}catch{return ""}}if(!E||typeof E!="object")return "";for(let P of Object.keys(E)){if(!F.test(P))continue;let q=E[P];if(q===true||typeof q=="number"&&q>0||typeof q=="string"&&p(q)&&q.trim()!==""||q&&typeof q=="object")return `${P}: ${JSON.stringify(q).slice(0,40)}`}return ""},x=v=>{for(let P of ["data-autoplay","data-auto","data-autostart","data-bs-autoplay","data-auto-play"]){if(!v.hasAttribute(P))continue;let q=v.getAttribute(P)||"";if((q.trim()===""||p(q))&&(R(v)||U(v)>=2))return {attr:P,value:q}}let D=["data-interval","data-bs-interval"].some(P=>v.hasAttribute(P)&&h.test((v.getAttribute(P)||"").trim()));for(let P of ["data-ride","data-bs-ride"])if((v.getAttribute(P)||"").trim().toLowerCase()==="carousel"&&!D)return {attr:P,value:"carousel"};for(let P of ["data-interval","data-bs-interval"]){let q=v.getAttribute(P);if(y(q)&&R(v))return {attr:P,value:q||""}}let E=R(v);for(let P of Array.from(v.attributes)){if(!P.name.startsWith("data-")||!E&&!w(P.name.slice(5)).some(j=>_.test(j)))continue;let q=S(P.value);if(q)return {attr:P.name,value:q}}if((v.getAttribute("aria-roledescription")||"").trim().toLowerCase()==="carousel"){let P=/autoplay["']?\s*[:=]\s*["']?(false|0|off|no)\b/i;for(let q of Array.from(v.attributes)){if(/(^|-)autoplay$/i.test(q.name)&&(q.value.trim()===""||p(q.value)))return {attr:q.name,value:q.value.slice(0,60)};if(/autoplay/i.test(q.value)&&!P.test(q.value))return {attr:q.name,value:q.value.slice(0,60)}}}return null},T=/^(pause|stop|play|playpause|resume)$/i,C=/\b(pause|stop|play|resume)\b/i,M=v=>{let D=[v.getAttribute("aria-label")||"",v.getAttribute("title")||"",v.getAttribute("value")||"",(v.textContent||"").trim().slice(0,80)],E=(v.getAttribute("aria-labelledby")||"").trim();if(E)for(let P of E.split(/\s+/))D.push(document.getElementById(P)?.textContent||"");for(let P of Array.from(v.querySelectorAll("img[alt]")))D.push(P.getAttribute("alt")||"");return D.join(" ")},L=v=>{let D=v.getAttribute("class")||"";return w(D).some(E=>T.test(E))?true:v.matches('a, button, input, [role="button"], [role="switch"], [role="checkbox"], [tabindex]')?C.test(M(v)):false},H=/^(section|article|main|nav|aside|header|footer|form|dialog)$/i,N=v=>R(v)||x(v)!==null||Array.from(v.querySelectorAll("*")).some(D=>R(D)||x(D)!==null),V=v=>{if(v.querySelector("[aria-pressed]"))return true;let D=[v];for(let q of Array.from(v.parentElement?.children||[]))q===v||H.test(q.tagName)||N(q)||D.push(q);let E=v.getAttribute("id"),P=q=>{let j=[...(q.getAttribute("aria-controls")||"").split(/\s+/),(q.getAttribute("data-bs-target")||q.getAttribute("data-target")||"").replace(/^#/,"")].filter(Boolean);return j.length>0&&!j.includes(E||"")};for(let q of D){if(q!==v&&L(q)&&!P(q))return true;for(let j of Array.from(q.querySelectorAll("*")))if(L(j)&&!P(j))return true}if(E){let q=typeof CSS<"u"&&CSS.escape?CSS.escape(E):E.replace(/["\\]/g,"\\$&");for(let j of Array.from(document.querySelectorAll(`[aria-controls~="${q}"], [data-target="#${q}"], [data-bs-target="#${q}"]`)))if(L(j))return true}return false},z=/^(slide|cell)$/i,U=v=>{let D=j=>w(j.getAttribute("class")||"").some(W=>z.test(W))&&!/(^|[\s_-])cloned?([\s_-]|$)/i.test(j.getAttribute("class")||""),E=Array.from(v.querySelectorAll("[class]")).filter(D),P=E.filter(j=>!E.some(W=>W!==j&&W.contains(j)));if(!P.length)return 0;let q=P.length;for(let j of P){let W=Array.from(j.parentElement?.children||[]).filter(Q=>Q.tagName===j.tagName&&!/(^|[\s_-])cloned?([\s_-]|$)/i.test(Q.getAttribute("class")||""));q=Math.max(q,W.length);}return q},ee=new Set,k=(v,D)=>{if(g.length>=10||ee.has(v)||(ee.add(v),v.closest(f))||v.closest('[aria-hidden="true"], [hidden], template, noscript')||typeof isVisible=="function"&&!isVisible(v)||U(v)===1||V(v))return;let E=typeof uniqueSel=="function"?uniqueSel(v):v.tagName.toLowerCase();g.push({selector:E,attribute:D.attr,currentValue:D.value.slice(0,100),issueType:"carousel_autoplay_no_pause",wcag:"2.2.2",context:`slider markup declares autoplay (${D.attr}="${D.value.slice(0,60)}") and no pause / stop control sits in or beside it`,message:"carousel starts automatically and has no pause or stop control",needsAI:false,manualFix:true,reviewReason:"add a visible pause / stop control for the slider (or turn autoplay off); no attribute write fixes this",outerHtml:v.cloneNode(false).outerHTML.slice(0,300)});};for(let v of Array.from(document.body?document.body.querySelectorAll("*"):[])){if(g.length>=10)break;if(!v.attributes.length)continue;if(v.hasAttribute("data-swiper-autoplay")&&y(v.getAttribute("data-swiper-autoplay"))){let E=v.closest('.swiper, .swiper-container, [class*="swiper"]:not(.swiper-slide):not(.swiper-wrapper)')||v.parentElement?.parentElement||v;k(E,{attr:"data-swiper-autoplay",value:v.getAttribute("data-swiper-autoplay")||""});continue}let D=x(v);D&&k(v,D);}return g},og={name:"carouselAutoplay",cap:10,async detect(f){return f.evaluate(BI)}};var gg=[Xh,Bh,Gh,dh,Rh,Th,vh,Vh,xh,Wh,Dh,$h,fh,qh,Fh,yh,Oh,Eh,Nh,Ih,Kh,Yh,Lh,hh,gh,Mh,jh,Uh,bh,zh,ph,Ph,Jh,Zh,Qh,eg,tg,rg,ng,ag,ig,og],cM=[ch,mh,wh,Hh];function vg(f,d,g){f?.push({tool:d,kind:"engine-failed",detail:`detector threw, its findings are absent: ${g?.message??String(g)}`});}async function bg(f,d,g,h){let p=d??[],y=[];try{let{detectPlatform:V}=await Promise.resolve().then(()=>(Au(),_u));y=await V(f);}catch{}try{let{UNIQUE_SELECTOR_JS:V,IS_VISIBLE_JS:z,ACCESSIBLE_NAME_JS:U,WIDGET_SKIP_JS:ee,IS_HIDDEN_FROM_AT_JS:k,IS_TRACKING_PIXEL_JS:v,NEARBY_CONTEXT_JS:D}=await Promise.resolve().then(()=>(ug(),lg)),{ICON_LABELS_JS:E}=await Promise.resolve().then(()=>(dg(),cg)),{COLOR_MATH_JS:P}=await Promise.resolve().then(()=>(pg(),fg)),j=`if(typeof __name==='undefined'){var __name=function(t,v){return t};var __defProp=Object.defineProperty;}
|
|
384
384
|
`+[V,z,U,ee,k,v,D,E,P].join(`
|
|
385
|
-
`),{inject:W}=await Promise.resolve().then(()=>(Hr(),hn));try{await W(f,{tool:"detector-helpers",content:j});}catch{await f.evaluate(`(0,eval)(${JSON.stringify(j)})`);}}catch(V){console.warn("[webability] helper injection failed:",V.message),(g??[]).push("color:kernel-injection-failed");}let _=[],w="";try{let{applyPlatformTemplates:V}=await Promise.resolve().then(()=>(Au(),_u)),z=y;w=z.filter(U=>U!=="universal"&&U!=="universal_iframe").join(", "),_=await V(f,z);}catch{}let{guardDetectorState:R}=await Promise.resolve().then(()=>(Hr(),hn)),F=globalThis.process?.env?.WA_STRICT_STATE==="1",S={strict:F,bugs:h?.internalBugs},x=await R(f,"detectors:parallel",g??[],()=>Promise.allSettled((h?.experimental?[...gg,...cM]:gg).map(async V=>{try{let z=await V.detect(f);return V.cap&&z.length>=V.cap&&p.push({detector:V.name,cap:V.cap}),z}catch(z){return vg(h?.internalBugs,V.name,z),[]}})),S),T=[];h?.skipFocusMutating&&(g??[]).push("focus:mutating-detectors-skipped (live-tab scan; focus visibility and focus obscured were not checked)");let C=[...h?.skipFocusMutating?[]:[Ah,_h],...h?.extraSerialDetectors??[]];for(let V of C){let z=[];try{z=await R(f,V.name,g??[],()=>V.detect(f).catch(U=>(vg(h?.internalBugs,V.name,U),[])),S);}catch(U){if(F)throw U}try{V.cap&&z.length>=V.cap&&p.push({detector:V.name,cap:V.cap}),T=T.concat(z);}catch{}}let M=[...x.flatMap(V=>V.status==="fulfilled"?V.value:[]),...T];if(w)for(let V of M)V.needsAI&&(V.context=uh(V.context,w));let L=[..._,...M],H=dM(L),N=["wp-ada-compliance","webability-widget","webability-a11y","asw-","userway","acsb","audioeye","equallyai"];return H.filter(V=>{let z=V.selector.toLowerCase();return z.trim()?!N.some(U=>z.includes(U)):false})}function dM(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 yg="1.14.0";var Su=["wcag2a","wcag2aa","wcag21aa","wcag22aa"];function ku(f){return f.includes("wcag21aa")||f.includes("wcag22aa")||f.includes("wcag134")?{"css-orientation-lock":{enabled:true}}:{}}function wg(f,d){return d==="AAA"&&!f.includes("wcag2aaa")?[...f,"wcag2aaa"]:f}var fM={"1.1.1":"A","1.2.1":"A","1.2.2":"A","1.2.3":"A","1.3.1":"A","1.3.2":"A","1.3.3":"A","1.4.1":"A","1.4.2":"A","2.1.1":"A","2.1.2":"A","2.1.4":"A","2.2.1":"A","2.2.2":"A","2.3.1":"A","2.4.1":"A","2.4.2":"A","2.4.3":"A","2.4.4":"A","2.5.1":"A","2.5.2":"A","2.5.3":"A","2.5.4":"A","3.1.1":"A","3.2.1":"A","3.2.2":"A","3.2.6":"A","3.3.1":"A","3.3.2":"A","3.3.7":"A","4.1.2":"A","1.2.4":"AA","1.2.5":"AA","1.3.4":"AA","1.3.5":"AA","1.4.3":"AA","1.4.4":"AA","1.4.5":"AA","1.4.10":"AA","1.4.11":"AA","1.4.12":"AA","1.4.13":"AA","2.4.5":"AA","2.4.6":"AA","2.4.7":"AA","2.4.11":"AA","2.5.7":"AA","2.5.8":"AA","3.1.2":"AA","3.2.3":"AA","3.2.4":"AA","3.3.3":"AA","3.3.4":"AA","3.3.8":"AA","4.1.3":"AA","1.2.6":"AAA","1.2.7":"AAA","1.2.8":"AAA","1.2.9":"AAA","1.3.6":"AAA","1.4.6":"AAA","1.4.7":"AAA","1.4.8":"AAA","1.4.9":"AAA","2.1.3":"AAA","2.2.3":"AAA","2.2.4":"AAA","2.2.5":"AAA","2.2.6":"AAA","2.3.2":"AAA","2.3.3":"AAA","2.4.8":"AAA","2.4.9":"AAA","2.4.10":"AAA","2.4.12":"AAA","2.4.13":"AAA","2.5.5":"AAA","2.5.6":"AAA","3.1.3":"AAA","3.1.4":"AAA","3.1.5":"AAA","3.1.6":"AAA","3.2.5":"AAA","3.3.5":"AAA","3.3.6":"AAA","3.3.9":"AAA"};function pM(f){return fM[f]}var ri={A:1,AA:2,AAA:3};function xg(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;for(let h of d){let p=pM(h);p&&(!g||ri[p]<ri[g])&&(g=p);}return g}function ta(f,d="AA"){let g=ri[d]??ri.AA;return f.filter(h=>{let p=xg(h);return !!p&&ri[p]<=g})}var mM=new Set(["new_window_link","external_link_warning","download_link_warning"]);function Dg(f){let d=mM.has(f.issueType)?"minor":f.needsAI?"serious":"moderate",g=f.attribute==="style",h=f.attribute.startsWith("data-"),p=g&&f.fixValue?hM(f.fixValue):f.fixValue;return {id:`wa-${f.issueType}-${ni(f.selector)}`,source:"webability",type:f.issueType,wcag:f.wcag,level:xg({wcag:f.wcag})??"AA",impact:d,message:gM(f,p,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:p,needsManualReview:f.needsAI||g||h||!!f.needsReview||!!f.manualFix}}}function hM(f){let d=f.trim();if(!d)return "";let g=d.endsWith(";"),p=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 p.length===0?"":p.join(";")+(g?";":"")}function gM(f,d,g){if(f.message)return f.message;let h=f.issueType.replace(/_/g," "),p=d??f.fixValue;return g?p?`${h}: ${p}`:f.currentValue?`${h}: ${f.currentValue}`:f.context?`${h}: ${f.context}`:h:p?`${h}: set ${f.attribute}="${p}"`:f.currentValue?`${h}: ${f.attribute} is "${f.currentValue}"`:`${h}: missing ${f.attribute}`}function ra(f){return Array.isArray(f)?f.flat(1/0).filter(g=>typeof g=="string").join(" >>> "):typeof f=="string"?f:""}function ni(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 Tu(f){return f==="critical"||f==="serious"||f==="moderate"||f==="minor"?f:"moderate"}function Ru(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 vM(f){let d=/^wcag(\d)(\d)(\d{1,2})$/.exec(f);return d?`${d[1]}.${d[2]}.${d[3]}`:""}function Fu(f){for(let d of f){let g=vM(d);if(g)return g}return ""}function Iu(f){return f.includes("wcag2aaa")?"AAA":f.includes("wcag2aa")||f.includes("wcag21aa")||f.includes("wcag22aa")?"AA":"A"}async function Eg(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:ku(d)}).withTags(d).analyze()}catch{return bM(f,d)}}async function bM(f,d){let g=await Promise.resolve().then(()=>G3(Ag())),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(()=>(Hr(),hn));await y(f,{tool:"axe",content:h});}return await f.evaluate(({wcagTags:y,rules:_})=>new Promise((w,R)=>{let F=window;if(!F.axe)return R(new Error("axe-core not loaded"));F.axe.run(document,{runOnly:{type:"tag",values:y},rules:_,resultTypes:["violations","incomplete"]}).then(w).catch(R);}),{wcagTags:d,rules:ku(d)})}function Mu(f){let d=[],g=[];for(let h of f)h.confidence==="needs_review"||wM(h)?g.push(h):d.push(yM(h));return {verdicts:d,undecided:g}}function yM(f){if(f.confidence===void 0&&f.reviewReason===void 0)return f;let{confidence:d,reviewReason:g,...h}=f;return h}function wM(f){let d=(f.type||"").toLowerCase(),g=f.wcag||"",h=f.html||"",p=(f.message||"").toLowerCase();if((d==="contrast_insufficient"||d==="color-contrast"||g==="1.4.3"||g==="1.4.11")&&xM(h))return "background uses gradient or image";if(d==="image_of_text"||g==="1.4.5"){let y=Cg(h,"src").toLowerCase();y.startsWith("data:")&&(y=y.split(",")[0]);let _=Cg(h,"alt").toLowerCase();if(/\b(logo|brand|wordmark|hero|banner|footer|marketing|promo|cover)\b/.test(y))return "brand imagery";if(_.length>0&&/\b(logo|brand|product screenshot|dashboard)\b/.test(_))return "branded imagery"}return (d==="inconsistent_navigation"||p.includes("inconsistent navigation"))&&(/<footer/i.test(h)||/<aside/i.test(h))?"footer/aside nav":""}function xM(f){return /background(-image)?\s*:\s*(?:linear-gradient|radial-gradient|conic-gradient|url\()/i.test(f)}function Cg(f,d){let g=new RegExp(`\\b${d}\\s*=\\s*"([^"]*)"`,"i"),h=f.match(g);return h?h[1]:""}Hr();var DM=60,_M=3,AM=120,EM=1200,CM=300,SM=2e5,kM=8e3,TM=new Set(["bgImage","bgGradient","bgOverlap","elmPartiallyObscured","elmPartiallyObscuring"]),RM="*,*::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 FM(f){let{selectors:d,maxBoxes:g,maxW:h,maxH:p,maxArea:y}=f,_=document.documentElement.scrollWidth,w=document.documentElement.scrollHeight,R=document.createElement("canvas");R.width=R.height=1;let F=R.getContext("2d",{willReadFrequently:true}),S=H=>{try{F.clearRect(0,0,1,1),F.fillStyle="#000",F.fillStyle=H,F.fillRect(0,0,1,1);let N=F.getImageData(0,0,1,1).data;return [N[0],N[1],N[2],N[3]]}catch{return null}},x={},T=document.querySelectorAll("video,canvas,iframe,embed,object");if(T.length>200){for(let H of d)x[H]=null;return x}let C=Array.from(T).map(H=>H.getBoundingClientRect()),M=window.scrollX,L=window.scrollY;for(let H of d){x[H]=null;let N=null;try{N=document.querySelector(H);}catch{continue}if(!N)continue;let V=getComputedStyle(N);if(V.visibility!=="visible"||V.display==="none"||V.webkitBackgroundClip==="text"||V.backgroundClip==="text")continue;let z=false,U=0;for(let J=N;J;J=J.parentElement){if(++U>64){z=true;break}let oe=getComputedStyle(J);parseFloat(oe.opacity)<1&&(z=true),(oe.transform!=="none"||oe.mixBlendMode!=="normal"||oe.filter!=="none")&&(z=true);}if(z)continue;let ee=S(V.color);if(!ee||ee[3]<255)continue;let k=parseFloat(V.fontSize),v=parseInt(V.fontWeight,10)>=700,D=k>=24||v&&k>=18.66,E=[],P=N.getBoundingClientRect();if(P.height>p*g||P.width>h*2)continue;let q=document.createTreeWalker(N,NodeFilter.SHOW_TEXT),j,W=0,Q=false;for(;!Q&&(j=q.nextNode());){if(++W>50){Q=true;break}if(j.parentElement!==N)continue;let J=j.textContent||"";if(J.length>2e3){Q=true;break}if(!J.trim())continue;let oe=document.createRange();oe.selectNodeContents(j);let de=oe.getClientRects();if(de.length>g){Q=true;break}for(let fe=0;fe<de.length;fe++){let Ee=de[fe];if(!(Ee.width<2||Ee.height<2)&&(E.push({x:Math.round(Ee.left+M),y:Math.round(Ee.top+L),w:Math.max(1,Math.round(Ee.width)),h:Math.max(1,Math.round(Ee.height))}),E.length>g)){Q=true;break}}}Q||E.length===0||E.length>g||E.some(J=>J.w>h||J.h>p||J.w*J.h>y||J.x<0||J.y<0||J.x+J.w>_||J.y+J.h>w)||E.some(J=>C.some(oe=>J.x<oe.right+M&&J.x+J.w>oe.left+M&&J.y<oe.bottom+L&&J.y+J.h>oe.top+L))||(x[H]={fg:`rgb(${ee[0]},${ee[1]},${ee[2]})`,threshold:D?3:4.5,boxes:E});}return x}async function IM(f){let{b64:d,fg:g}=f,h=atob(d),p=new Uint8Array(h.length);for(let z=0;z<h.length;z++)p[z]=h.charCodeAt(z);let y=await createImageBitmap(new Blob([p],{type:"image/png"})),_=document.createElement("canvas");_.width=y.width,_.height=y.height;let w=_.getContext("2d",{willReadFrequently:true});w.drawImage(y,0,0);let R=w.getImageData(0,0,_.width,_.height).data,F=z=>{let U=z/255;return U<=.03928?U/12.92:Math.pow((U+.055)/1.055,2.4)},S=(z,U,ee)=>.2126*F(z)+.7152*F(U)+.0722*F(ee),x=g.match(/\d+/g).map(Number),T=S(x[0],x[1],x[2]),C=Math.max(1,Math.floor(Math.sqrt(_.width*_.height/1500))),M=0,L=1/0,H="",N="",V=0;for(let z=0;z<_.height;z+=C)for(let U=0;U<_.width;U+=C){let ee=(z*_.width+U)*4;if(R[ee+3]<255)continue;let k=S(R[ee],R[ee+1],R[ee+2]),v=Math.max(T,k),D=Math.min(T,k),E=(v+.05)/(D+.05);E>M&&(M=E,N=`rgb(${R[ee]},${R[ee+1]},${R[ee+2]})`),E<L&&(L=E,H=`rgb(${R[ee]},${R[ee+1]},${R[ee+2]})`),V++;}return V===0?null:{best:M,worst:L,worstBg:H,bestBg:N}}var Vo=class extends Error{};function ii(f,d){let g=d-Date.now();if(g<=0)return Promise.reject(new Vo("pixel pass deadline"));let h,p=new Promise((y,_)=>{h=setTimeout(()=>_(new Vo("pixel pass deadline")),g);});return Promise.race([f,p]).finally(()=>clearTimeout(h))}async function Lu(f,d){let g=f.screenshot;if(typeof g!="function"||d.length===0)return [];let h=Array.from(new Set(d)).slice(0,DM),p=[],y=false,_=Date.now()+kM;try{await ii(f.evaluate("if(typeof globalThis.__name==='undefined'){globalThis.__name=function(t){return t}}"),_);let w=await ii(f.evaluate(FM,{selectors:h,maxBoxes:_M,maxW:EM,maxH:CM,maxArea:SM}),_);await ii(Cu(f,{tool:"contrast-pixels",css:RM}),_),y=!0;let R=0;for(let F of h){let S=w[F];if(!S)continue;if(Date.now()>_||R+S.boxes.length>AM)break;let x=0,T=1/0,C="",M="",L=!0;for(let H of S.boxes){R++;let N=await ii(g.call(f,{clip:{x:H.x,y:H.y,width:H.w,height:H.h},fullPage:!0,type:"png",animations:"disabled"}),_),V=globalThis.Buffer,z=V?V.from(N).toString("base64"):"",U=await ii(f.evaluate(IM,{b64:z,fg:S.fg}),_);if(!U){L=!1;break}U.best>x&&(x=U.best,M=U.bestBg),U.worst<T&&(T=U.worst,C=U.worstBg);}L&&p.push({selector:F,fail:x<S.threshold*.97,bestRatio:x,worstRatio:T,...C?{worstBg:C}:{},...M?{bestBg:M}:{},threshold:S.threshold,fg:S.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 p}function MM(f,d){let{confidence:g,reviewReason:h,...p}=f;return {...p,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 Sg(f,d,g,h){let p=d.filter(F=>F.wcag!=="1.4.3"||!F.selector?false:F.source==="axe-core"?TM.has(g.get(F.id)??""):F.type==="contrast_insufficient"&&/gradient or image/.test(F.reviewReason??""));if(p.length===0)return [];let y=await Lu(f,p.map(F=>F.selector));if(h)for(let F of y)h.set(F.selector,F);globalThis.process?.env?.WA_DEBUG_PIXELS&&console.error(`pixel judge: ${p.length} candidates, ${y.length} measured, ${y.filter(F=>F.fail).length} fail`);let _=new Map(y.filter(F=>F.fail).map(F=>[F.selector,F])),w=[],R=new Set;for(let F of p){let S=_.get(F.selector);!S||R.has(F.selector)||(R.add(F.selector),w.push(MM(F,S)));}return w}function LM(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 Ou(f){let d=f/255;return d<=.03928?d/12.92:Math.pow((d+.055)/1.055,2.4)}function kg(f,d,g){return .2126*Ou(f)+.7152*Ou(d)+.0722*Ou(g)}function OM(f,d){let g=Math.max(f,d),h=Math.min(f,d);return (g+.05)/(h+.05)}function Tg(f){if(f.startsWith("#"))return LM(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 Fn(f,d){let g=Tg(f),h=Tg(d);return !g||!h?0:OM(kg(...g),kg(...h))}var PM=30,NM=10,qM=2e4,BM=30,HM=400*1024,VM="https://openrouter.ai/api/v1",jM="anthropic/claude-haiku-4.5",Rg="deepseek/deepseek-v4-flash",Fg=400,Ig=125,Pu=160,$M=2e3,jo=new Map;function zM(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 Nu=f=>f.wcag||f.type,Mg=(f,d,g)=>`${f}|${d.selector}|${Nu(d)}|${zM(g)}`,qu=()=>!!globalThis.process?.env?.WA_DEBUG_JUDGE;function GM(f){let{selectors:d,maxHtml:g}=f,h={elements:{}},p=[],y=H=>/\(\s*prefers-reduced-motion\s*(:\s*reduce\s*)?\)/i.test(H)&&!/^\s*not\b/i.test(H),_=H=>{let N=H.split(",").map(V=>V.trim()).filter(Boolean);return N.length?N.every(V=>{let z=V.match(/^(-?[\d.]+)(ms|s)$/i);return z?parseFloat(z[1])*(z[2].toLowerCase()==="s"?1e3:1)<=10:false}):false},w=(H,N,V)=>{if(!(V>8))for(let z of Array.from(H)){let U=z.media?.mediaText,ee=N||typeof U=="string"&&y(U),k=z.style,v=z.selectorText;if(ee&&k&&typeof v=="string"){let P=k.getPropertyValue("animation-name").trim(),q=/^none(\s*,\s*none)*$/i.test(P)||_(k.getPropertyValue("animation-duration"))||/^paused/i.test(k.getPropertyValue("animation-play-state").trim()),j=/^none(\s*,\s*none)*$/i.test(k.getPropertyValue("transition-property").trim())||_(k.getPropertyValue("transition-duration"));(q||j)&&p.push({selector:v,anim:q,trans:j});}let D=z.cssRules;D&&D.length&&w(D,ee,V+1);let E=z.styleSheet;if(E)try{w(E.cssRules,ee||y(z.media?.mediaText||""),V+1);}catch{}}};try{for(let H of Array.from(document.styleSheets))try{w(H.cssRules,y(H.media?.mediaText||""),0);}catch{}}catch{}let R=(H,N)=>{try{return H.matches(N)}catch{return false}},F=H=>H.split(",").map(N=>{let V=N.trim().match(/^(-?[\d.]+)(ms|s)$/i);return V?parseFloat(V[1])*(V[2].toLowerCase()==="s"?1e3:1):0}),S=H=>{let N=H.cloneNode(true);N.querySelectorAll("script, style").forEach(z=>z.remove());let V=(N.textContent||"").replace(/\s+/g," ").trim();if(!V){for(let z of Array.from(H.querySelectorAll("img[alt], [aria-label]")))if(V=(z.getAttribute("alt")||z.getAttribute("aria-label")||"").trim(),V)break}return V},x=H=>{let N=(H.getAttribute("aria-label")||"").trim();if(N)return N;let z=(H.getAttribute("aria-labelledby")||"").split(/\s+/).filter(Boolean).map(k=>{let v=document.getElementById(k);return v?(v.textContent||"").replace(/\s+/g," ").trim():""}).filter(Boolean).join(" ");if(z)return z;let U=S(H);if(U)return U;let ee=H instanceof HTMLInputElement&&/^(submit|button|reset|image)$/i.test(H.type)?(H.value||H.alt||"").trim():"";return ee||(H.getAttribute("title")||"").trim()},T='a[href], button, input:not([type="hidden"]), select, textarea, summary, [role="button"], [role="link"], [role="menuitem"], [role="tab"], [role="img"], [tabindex]:not([tabindex="-1"])',C=window.scrollX||0,M=window.scrollY||0,L=[];for(let H of d){let N=null;try{N=document.querySelector(H);}catch{}if(!N){h.elements[H]={found:false};continue}let V=L.indexOf(N);V<0&&(V=L.push(N)-1);let z=getComputedStyle(N),U=N.getBoundingClientRect(),ee=N.tagName.toLowerCase(),k={found:true,elementKey:V,tag:ee,html:(N.outerHTML||"").slice(0,g),rect:{x:U.left+C,y:U.top+M,w:U.width,h:U.height},role:(N.getAttribute("role")||"").toLowerCase(),ariaHidden:N.getAttribute("aria-hidden")==="true"||!!N.closest('[aria-hidden="true"]'),hidden:z.display==="none"||z.visibility==="hidden"||!!N.closest("[hidden]"),cssBackgroundImage:/url\(/i.test(z.backgroundImage||""),reducedMotionHandled:false,nearText:"",fg:z.color,bg:z.backgroundColor,fontSize:parseFloat(z.fontSize)||0,fontWeight:parseInt(z.fontWeight,10)||400};if(ee==="img"){let j=N;k.img={src:(j.currentSrc||j.getAttribute("src")||"").slice(0,300),alt:j.getAttribute("alt"),naturalW:j.naturalWidth||0,naturalH:j.naturalHeight||0,attrW:parseInt(j.getAttribute("width")||"0",10)||0,attrH:parseInt(j.getAttribute("height")||"0",10)||0};}if(k.cssBackgroundImage){let j=N.closest(T);j&&(k.control={tag:j.tagName.toLowerCase(),name:x(j).slice(0,120)});}if(!/^(img|video|canvas|iframe|object|embed|svg)$/.test(ee)){let j=z.animationName.split(",").some(oe=>oe.trim()&&oe.trim()!=="none")&&F(z.animationDuration).some(oe=>oe>10),W=F(z.transitionDuration).some(oe=>oe>10)&&z.transitionProperty.trim()!=="none",Q=p.filter(oe=>R(N,oe.selector)),te=!j||Q.some(oe=>oe.anim),J=!W||Q.some(oe=>oe.trans);k.reducedMotionHandled=(j||W)&&te&&J;}let v=N.closest('a[href], button, [role="button"], [role="link"]');if(v&&v!==N){let j=v.cloneNode(true);j.querySelectorAll("img, svg").forEach(te=>te.remove());let W=(j.textContent||"").replace(/\s+/g," ").trim(),Q=(v.getAttribute("aria-label")||"").trim();k.parentInteractive={tag:v.tagName.toLowerCase(),text:(W||Q).slice(0,120)};}let D=j=>{let W=j.cloneNode(true);return W.querySelectorAll("script, style").forEach(Q=>Q.remove()),(W.textContent||"").replace(/\s+/g," ").trim()},E=N.matches('a[href], [role="link"]'),P=D(N),q=N.parentElement;if(E&&(q=N.closest("p, li, td, th, dd, dt, figcaption, blockquote")||N.parentElement),q){let j=D(q),W=E&&P?j.indexOf(P):-1,Q=W>120?W-120:0;k.nearText=(Q?"\u2026":"")+j.slice(Q,Q+240);}h.elements[H]=k;}return h}function UM(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 Bu(f){return !!f&&f.tag!=="img"&&f.cssBackgroundImage&&!f.img}var WM=/\b(needs?|requires?|for)\s+(a\s+)?(human|manual)?\s*review\b|\bhuman review\b|\bmanual review\b|\bincomplete\b/gi;function XM(f){let d=String(f??"").replace(/\s+/g," ").replace(WM,"judged").trim();if(d.length<=Pu)return d;let g=d.slice(0,Pu-1),h=g.lastIndexOf(" ");return (h>Pu/2?g.slice(0,h):g).replace(/[\s,;:–—-]+$/,"")+"\u2026"}function KM(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>Ig){d=d.slice(0,Ig);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 na(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 Pg=/^#?([0-9a-f]{6})$/i;function YM(f){let d=String(f??"").trim().match(Pg);return d?"#"+d[1].toLowerCase():null}function JM(f){let{confidence:d,reviewReason:g,...h}=f;return {...h,id:f.id.replace("axe-incomplete-","axe-")}}function ZM(f){let d=f;if(typeof f=="string"){let p=f.replace(/```json\s*/gi,"").replace(/```/g,"").match(/\[[\s\S]*\]/);if(!p)return null;try{d=JSON.parse(p[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:p,verdict:y,reason:_,fix:w}=h;if(typeof p!="string"||y!=="pass"&&y!=="violation")continue;let R=w&&typeof w=="object"?w:void 0;g.push({id:p,verdict:y,reason:typeof _=="string"?_:void 0,fix:R?{attribute:typeof R.attribute=="string"?R.attribute:void 0,value:typeof R.value=="string"?R.value:void 0}:void 0});}return g}var aa=class extends Error{},QM=`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.
|
|
385
|
+
`),{inject:W}=await Promise.resolve().then(()=>(Hr(),hn));try{await W(f,{tool:"detector-helpers",content:j});}catch{await f.evaluate(`(0,eval)(${JSON.stringify(j)})`);}}catch(V){console.warn("[webability] helper injection failed:",V.message),(g??[]).push("color:kernel-injection-failed");}let _=[],w="";try{let{applyPlatformTemplates:V}=await Promise.resolve().then(()=>(Au(),_u)),z=y;w=z.filter(U=>U!=="universal"&&U!=="universal_iframe").join(", "),_=await V(f,z);}catch{}let{guardDetectorState:R}=await Promise.resolve().then(()=>(Hr(),hn)),F=globalThis.process?.env?.WA_STRICT_STATE==="1",S={strict:F,bugs:h?.internalBugs},x=await R(f,"detectors:parallel",g??[],()=>Promise.allSettled((h?.experimental?[...gg,...cM]:gg).map(async V=>{try{let z=await V.detect(f);return V.cap&&z.length>=V.cap&&p.push({detector:V.name,cap:V.cap}),z}catch(z){return vg(h?.internalBugs,V.name,z),[]}})),S),T=[];h?.skipFocusMutating&&(g??[]).push("focus:mutating-detectors-skipped (live-tab scan; focus visibility and focus obscured were not checked)");let C=[...h?.skipFocusMutating?[]:[Ah,_h],...h?.extraSerialDetectors??[]];for(let V of C){let z=[];try{z=await R(f,V.name,g??[],()=>V.detect(f).catch(U=>(vg(h?.internalBugs,V.name,U),[])),S);}catch(U){if(F)throw U}try{V.cap&&z.length>=V.cap&&p.push({detector:V.name,cap:V.cap}),T=T.concat(z);}catch{}}let M=[...x.flatMap(V=>V.status==="fulfilled"?V.value:[]),...T];if(w)for(let V of M)V.needsAI&&(V.context=uh(V.context,w));let L=[..._,...M],H=dM(L),N=["wp-ada-compliance","webability-widget","webability-a11y","asw-","userway","acsb","audioeye","equallyai"];return H.filter(V=>{let z=V.selector.toLowerCase();return z.trim()?!N.some(U=>z.includes(U)):false})}function dM(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 yg="1.15.0";var Su=["wcag2a","wcag2aa","wcag21aa","wcag22aa"];function ku(f){return f.includes("wcag21aa")||f.includes("wcag22aa")||f.includes("wcag134")?{"css-orientation-lock":{enabled:true}}:{}}function wg(f,d){return d==="AAA"&&!f.includes("wcag2aaa")?[...f,"wcag2aaa"]:f}var fM={"1.1.1":"A","1.2.1":"A","1.2.2":"A","1.2.3":"A","1.3.1":"A","1.3.2":"A","1.3.3":"A","1.4.1":"A","1.4.2":"A","2.1.1":"A","2.1.2":"A","2.1.4":"A","2.2.1":"A","2.2.2":"A","2.3.1":"A","2.4.1":"A","2.4.2":"A","2.4.3":"A","2.4.4":"A","2.5.1":"A","2.5.2":"A","2.5.3":"A","2.5.4":"A","3.1.1":"A","3.2.1":"A","3.2.2":"A","3.2.6":"A","3.3.1":"A","3.3.2":"A","3.3.7":"A","4.1.2":"A","1.2.4":"AA","1.2.5":"AA","1.3.4":"AA","1.3.5":"AA","1.4.3":"AA","1.4.4":"AA","1.4.5":"AA","1.4.10":"AA","1.4.11":"AA","1.4.12":"AA","1.4.13":"AA","2.4.5":"AA","2.4.6":"AA","2.4.7":"AA","2.4.11":"AA","2.5.7":"AA","2.5.8":"AA","3.1.2":"AA","3.2.3":"AA","3.2.4":"AA","3.3.3":"AA","3.3.4":"AA","3.3.8":"AA","4.1.3":"AA","1.2.6":"AAA","1.2.7":"AAA","1.2.8":"AAA","1.2.9":"AAA","1.3.6":"AAA","1.4.6":"AAA","1.4.7":"AAA","1.4.8":"AAA","1.4.9":"AAA","2.1.3":"AAA","2.2.3":"AAA","2.2.4":"AAA","2.2.5":"AAA","2.2.6":"AAA","2.3.2":"AAA","2.3.3":"AAA","2.4.8":"AAA","2.4.9":"AAA","2.4.10":"AAA","2.4.12":"AAA","2.4.13":"AAA","2.5.5":"AAA","2.5.6":"AAA","3.1.3":"AAA","3.1.4":"AAA","3.1.5":"AAA","3.1.6":"AAA","3.2.5":"AAA","3.3.5":"AAA","3.3.6":"AAA","3.3.9":"AAA"};function pM(f){return fM[f]}var ri={A:1,AA:2,AAA:3};function xg(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;for(let h of d){let p=pM(h);p&&(!g||ri[p]<ri[g])&&(g=p);}return g}function ta(f,d="AA"){let g=ri[d]??ri.AA;return f.filter(h=>{let p=xg(h);return !!p&&ri[p]<=g})}var mM=new Set(["new_window_link","external_link_warning","download_link_warning"]);function Dg(f){let d=mM.has(f.issueType)?"minor":f.needsAI?"serious":"moderate",g=f.attribute==="style",h=f.attribute.startsWith("data-"),p=g&&f.fixValue?hM(f.fixValue):f.fixValue;return {id:`wa-${f.issueType}-${ni(f.selector)}`,source:"webability",type:f.issueType,wcag:f.wcag,level:xg({wcag:f.wcag})??"AA",impact:d,message:gM(f,p,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:p,needsManualReview:f.needsAI||g||h||!!f.needsReview||!!f.manualFix}}}function hM(f){let d=f.trim();if(!d)return "";let g=d.endsWith(";"),p=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 p.length===0?"":p.join(";")+(g?";":"")}function gM(f,d,g){if(f.message)return f.message;let h=f.issueType.replace(/_/g," "),p=d??f.fixValue;return g?p?`${h}: ${p}`:f.currentValue?`${h}: ${f.currentValue}`:f.context?`${h}: ${f.context}`:h:p?`${h}: set ${f.attribute}="${p}"`:f.currentValue?`${h}: ${f.attribute} is "${f.currentValue}"`:`${h}: missing ${f.attribute}`}function ra(f){return Array.isArray(f)?f.flat(1/0).filter(g=>typeof g=="string").join(" >>> "):typeof f=="string"?f:""}function ni(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 Tu(f){return f==="critical"||f==="serious"||f==="moderate"||f==="minor"?f:"moderate"}function Ru(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 vM(f){let d=/^wcag(\d)(\d)(\d{1,2})$/.exec(f);return d?`${d[1]}.${d[2]}.${d[3]}`:""}function Fu(f){for(let d of f){let g=vM(d);if(g)return g}return ""}function Iu(f){return f.includes("wcag2aaa")?"AAA":f.includes("wcag2aa")||f.includes("wcag21aa")||f.includes("wcag22aa")?"AA":"A"}async function Eg(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:ku(d)}).withTags(d).analyze()}catch{return bM(f,d)}}async function bM(f,d){let g=await Promise.resolve().then(()=>G3(Ag())),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(()=>(Hr(),hn));await y(f,{tool:"axe",content:h});}return await f.evaluate(({wcagTags:y,rules:_})=>new Promise((w,R)=>{let F=window;if(!F.axe)return R(new Error("axe-core not loaded"));F.axe.run(document,{runOnly:{type:"tag",values:y},rules:_,resultTypes:["violations","incomplete"]}).then(w).catch(R);}),{wcagTags:d,rules:ku(d)})}function Mu(f){let d=[],g=[];for(let h of f)h.confidence==="needs_review"||wM(h)?g.push(h):d.push(yM(h));return {verdicts:d,undecided:g}}function yM(f){if(f.confidence===void 0&&f.reviewReason===void 0)return f;let{confidence:d,reviewReason:g,...h}=f;return h}function wM(f){let d=(f.type||"").toLowerCase(),g=f.wcag||"",h=f.html||"",p=(f.message||"").toLowerCase();if((d==="contrast_insufficient"||d==="color-contrast"||g==="1.4.3"||g==="1.4.11")&&xM(h))return "background uses gradient or image";if(d==="image_of_text"||g==="1.4.5"){let y=Cg(h,"src").toLowerCase();y.startsWith("data:")&&(y=y.split(",")[0]);let _=Cg(h,"alt").toLowerCase();if(/\b(logo|brand|wordmark|hero|banner|footer|marketing|promo|cover)\b/.test(y))return "brand imagery";if(_.length>0&&/\b(logo|brand|product screenshot|dashboard)\b/.test(_))return "branded imagery"}return (d==="inconsistent_navigation"||p.includes("inconsistent navigation"))&&(/<footer/i.test(h)||/<aside/i.test(h))?"footer/aside nav":""}function xM(f){return /background(-image)?\s*:\s*(?:linear-gradient|radial-gradient|conic-gradient|url\()/i.test(f)}function Cg(f,d){let g=new RegExp(`\\b${d}\\s*=\\s*"([^"]*)"`,"i"),h=f.match(g);return h?h[1]:""}Hr();var DM=60,_M=3,AM=120,EM=1200,CM=300,SM=2e5,kM=8e3,TM=new Set(["bgImage","bgGradient","bgOverlap","elmPartiallyObscured","elmPartiallyObscuring"]),RM="*,*::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 FM(f){let{selectors:d,maxBoxes:g,maxW:h,maxH:p,maxArea:y}=f,_=document.documentElement.scrollWidth,w=document.documentElement.scrollHeight,R=document.createElement("canvas");R.width=R.height=1;let F=R.getContext("2d",{willReadFrequently:true}),S=H=>{try{F.clearRect(0,0,1,1),F.fillStyle="#000",F.fillStyle=H,F.fillRect(0,0,1,1);let N=F.getImageData(0,0,1,1).data;return [N[0],N[1],N[2],N[3]]}catch{return null}},x={},T=document.querySelectorAll("video,canvas,iframe,embed,object");if(T.length>200){for(let H of d)x[H]=null;return x}let C=Array.from(T).map(H=>H.getBoundingClientRect()),M=window.scrollX,L=window.scrollY;for(let H of d){x[H]=null;let N=null;try{N=document.querySelector(H);}catch{continue}if(!N)continue;let V=getComputedStyle(N);if(V.visibility!=="visible"||V.display==="none"||V.webkitBackgroundClip==="text"||V.backgroundClip==="text")continue;let z=false,U=0;for(let J=N;J;J=J.parentElement){if(++U>64){z=true;break}let oe=getComputedStyle(J);parseFloat(oe.opacity)<1&&(z=true),(oe.transform!=="none"||oe.mixBlendMode!=="normal"||oe.filter!=="none")&&(z=true);}if(z)continue;let ee=S(V.color);if(!ee||ee[3]<255)continue;let k=parseFloat(V.fontSize),v=parseInt(V.fontWeight,10)>=700,D=k>=24||v&&k>=18.66,E=[],P=N.getBoundingClientRect();if(P.height>p*g||P.width>h*2)continue;let q=document.createTreeWalker(N,NodeFilter.SHOW_TEXT),j,W=0,Q=false;for(;!Q&&(j=q.nextNode());){if(++W>50){Q=true;break}if(j.parentElement!==N)continue;let J=j.textContent||"";if(J.length>2e3){Q=true;break}if(!J.trim())continue;let oe=document.createRange();oe.selectNodeContents(j);let de=oe.getClientRects();if(de.length>g){Q=true;break}for(let fe=0;fe<de.length;fe++){let Ee=de[fe];if(!(Ee.width<2||Ee.height<2)&&(E.push({x:Math.round(Ee.left+M),y:Math.round(Ee.top+L),w:Math.max(1,Math.round(Ee.width)),h:Math.max(1,Math.round(Ee.height))}),E.length>g)){Q=true;break}}}Q||E.length===0||E.length>g||E.some(J=>J.w>h||J.h>p||J.w*J.h>y||J.x<0||J.y<0||J.x+J.w>_||J.y+J.h>w)||E.some(J=>C.some(oe=>J.x<oe.right+M&&J.x+J.w>oe.left+M&&J.y<oe.bottom+L&&J.y+J.h>oe.top+L))||(x[H]={fg:`rgb(${ee[0]},${ee[1]},${ee[2]})`,threshold:D?3:4.5,boxes:E});}return x}async function IM(f){let{b64:d,fg:g}=f,h=atob(d),p=new Uint8Array(h.length);for(let z=0;z<h.length;z++)p[z]=h.charCodeAt(z);let y=await createImageBitmap(new Blob([p],{type:"image/png"})),_=document.createElement("canvas");_.width=y.width,_.height=y.height;let w=_.getContext("2d",{willReadFrequently:true});w.drawImage(y,0,0);let R=w.getImageData(0,0,_.width,_.height).data,F=z=>{let U=z/255;return U<=.03928?U/12.92:Math.pow((U+.055)/1.055,2.4)},S=(z,U,ee)=>.2126*F(z)+.7152*F(U)+.0722*F(ee),x=g.match(/\d+/g).map(Number),T=S(x[0],x[1],x[2]),C=Math.max(1,Math.floor(Math.sqrt(_.width*_.height/1500))),M=0,L=1/0,H="",N="",V=0;for(let z=0;z<_.height;z+=C)for(let U=0;U<_.width;U+=C){let ee=(z*_.width+U)*4;if(R[ee+3]<255)continue;let k=S(R[ee],R[ee+1],R[ee+2]),v=Math.max(T,k),D=Math.min(T,k),E=(v+.05)/(D+.05);E>M&&(M=E,N=`rgb(${R[ee]},${R[ee+1]},${R[ee+2]})`),E<L&&(L=E,H=`rgb(${R[ee]},${R[ee+1]},${R[ee+2]})`),V++;}return V===0?null:{best:M,worst:L,worstBg:H,bestBg:N}}var Vo=class extends Error{};function ii(f,d){let g=d-Date.now();if(g<=0)return Promise.reject(new Vo("pixel pass deadline"));let h,p=new Promise((y,_)=>{h=setTimeout(()=>_(new Vo("pixel pass deadline")),g);});return Promise.race([f,p]).finally(()=>clearTimeout(h))}async function Lu(f,d){let g=f.screenshot;if(typeof g!="function"||d.length===0)return [];let h=Array.from(new Set(d)).slice(0,DM),p=[],y=false,_=Date.now()+kM;try{await ii(f.evaluate("if(typeof globalThis.__name==='undefined'){globalThis.__name=function(t){return t}}"),_);let w=await ii(f.evaluate(FM,{selectors:h,maxBoxes:_M,maxW:EM,maxH:CM,maxArea:SM}),_);await ii(Cu(f,{tool:"contrast-pixels",css:RM}),_),y=!0;let R=0;for(let F of h){let S=w[F];if(!S)continue;if(Date.now()>_||R+S.boxes.length>AM)break;let x=0,T=1/0,C="",M="",L=!0;for(let H of S.boxes){R++;let N=await ii(g.call(f,{clip:{x:H.x,y:H.y,width:H.w,height:H.h},fullPage:!0,type:"png",animations:"disabled"}),_),V=globalThis.Buffer,z=V?V.from(N).toString("base64"):"",U=await ii(f.evaluate(IM,{b64:z,fg:S.fg}),_);if(!U){L=!1;break}U.best>x&&(x=U.best,M=U.bestBg),U.worst<T&&(T=U.worst,C=U.worstBg);}L&&p.push({selector:F,fail:x<S.threshold*.97,bestRatio:x,worstRatio:T,...C?{worstBg:C}:{},...M?{bestBg:M}:{},threshold:S.threshold,fg:S.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 p}function MM(f,d){let{confidence:g,reviewReason:h,...p}=f;return {...p,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 Sg(f,d,g,h){let p=d.filter(F=>F.wcag!=="1.4.3"||!F.selector?false:F.source==="axe-core"?TM.has(g.get(F.id)??""):F.type==="contrast_insufficient"&&/gradient or image/.test(F.reviewReason??""));if(p.length===0)return [];let y=await Lu(f,p.map(F=>F.selector));if(h)for(let F of y)h.set(F.selector,F);globalThis.process?.env?.WA_DEBUG_PIXELS&&console.error(`pixel judge: ${p.length} candidates, ${y.length} measured, ${y.filter(F=>F.fail).length} fail`);let _=new Map(y.filter(F=>F.fail).map(F=>[F.selector,F])),w=[],R=new Set;for(let F of p){let S=_.get(F.selector);!S||R.has(F.selector)||(R.add(F.selector),w.push(MM(F,S)));}return w}function LM(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 Ou(f){let d=f/255;return d<=.03928?d/12.92:Math.pow((d+.055)/1.055,2.4)}function kg(f,d,g){return .2126*Ou(f)+.7152*Ou(d)+.0722*Ou(g)}function OM(f,d){let g=Math.max(f,d),h=Math.min(f,d);return (g+.05)/(h+.05)}function Tg(f){if(f.startsWith("#"))return LM(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 Fn(f,d){let g=Tg(f),h=Tg(d);return !g||!h?0:OM(kg(...g),kg(...h))}var PM=30,NM=10,qM=2e4,BM=30,HM=400*1024,VM="https://openrouter.ai/api/v1",jM="anthropic/claude-haiku-4.5",Rg="deepseek/deepseek-v4-flash",Fg=400,Ig=125,Pu=160,$M=2e3,jo=new Map;function zM(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 Nu=f=>f.wcag||f.type,Mg=(f,d,g)=>`${f}|${d.selector}|${Nu(d)}|${zM(g)}`,qu=()=>!!globalThis.process?.env?.WA_DEBUG_JUDGE;function GM(f){let{selectors:d,maxHtml:g}=f,h={elements:{}},p=[],y=H=>/\(\s*prefers-reduced-motion\s*(:\s*reduce\s*)?\)/i.test(H)&&!/^\s*not\b/i.test(H),_=H=>{let N=H.split(",").map(V=>V.trim()).filter(Boolean);return N.length?N.every(V=>{let z=V.match(/^(-?[\d.]+)(ms|s)$/i);return z?parseFloat(z[1])*(z[2].toLowerCase()==="s"?1e3:1)<=10:false}):false},w=(H,N,V)=>{if(!(V>8))for(let z of Array.from(H)){let U=z.media?.mediaText,ee=N||typeof U=="string"&&y(U),k=z.style,v=z.selectorText;if(ee&&k&&typeof v=="string"){let P=k.getPropertyValue("animation-name").trim(),q=/^none(\s*,\s*none)*$/i.test(P)||_(k.getPropertyValue("animation-duration"))||/^paused/i.test(k.getPropertyValue("animation-play-state").trim()),j=/^none(\s*,\s*none)*$/i.test(k.getPropertyValue("transition-property").trim())||_(k.getPropertyValue("transition-duration"));(q||j)&&p.push({selector:v,anim:q,trans:j});}let D=z.cssRules;D&&D.length&&w(D,ee,V+1);let E=z.styleSheet;if(E)try{w(E.cssRules,ee||y(z.media?.mediaText||""),V+1);}catch{}}};try{for(let H of Array.from(document.styleSheets))try{w(H.cssRules,y(H.media?.mediaText||""),0);}catch{}}catch{}let R=(H,N)=>{try{return H.matches(N)}catch{return false}},F=H=>H.split(",").map(N=>{let V=N.trim().match(/^(-?[\d.]+)(ms|s)$/i);return V?parseFloat(V[1])*(V[2].toLowerCase()==="s"?1e3:1):0}),S=H=>{let N=H.cloneNode(true);N.querySelectorAll("script, style").forEach(z=>z.remove());let V=(N.textContent||"").replace(/\s+/g," ").trim();if(!V){for(let z of Array.from(H.querySelectorAll("img[alt], [aria-label]")))if(V=(z.getAttribute("alt")||z.getAttribute("aria-label")||"").trim(),V)break}return V},x=H=>{let N=(H.getAttribute("aria-label")||"").trim();if(N)return N;let z=(H.getAttribute("aria-labelledby")||"").split(/\s+/).filter(Boolean).map(k=>{let v=document.getElementById(k);return v?(v.textContent||"").replace(/\s+/g," ").trim():""}).filter(Boolean).join(" ");if(z)return z;let U=S(H);if(U)return U;let ee=H instanceof HTMLInputElement&&/^(submit|button|reset|image)$/i.test(H.type)?(H.value||H.alt||"").trim():"";return ee||(H.getAttribute("title")||"").trim()},T='a[href], button, input:not([type="hidden"]), select, textarea, summary, [role="button"], [role="link"], [role="menuitem"], [role="tab"], [role="img"], [tabindex]:not([tabindex="-1"])',C=window.scrollX||0,M=window.scrollY||0,L=[];for(let H of d){let N=null;try{N=document.querySelector(H);}catch{}if(!N){h.elements[H]={found:false};continue}let V=L.indexOf(N);V<0&&(V=L.push(N)-1);let z=getComputedStyle(N),U=N.getBoundingClientRect(),ee=N.tagName.toLowerCase(),k={found:true,elementKey:V,tag:ee,html:(N.outerHTML||"").slice(0,g),rect:{x:U.left+C,y:U.top+M,w:U.width,h:U.height},role:(N.getAttribute("role")||"").toLowerCase(),ariaHidden:N.getAttribute("aria-hidden")==="true"||!!N.closest('[aria-hidden="true"]'),hidden:z.display==="none"||z.visibility==="hidden"||!!N.closest("[hidden]"),cssBackgroundImage:/url\(/i.test(z.backgroundImage||""),reducedMotionHandled:false,nearText:"",fg:z.color,bg:z.backgroundColor,fontSize:parseFloat(z.fontSize)||0,fontWeight:parseInt(z.fontWeight,10)||400};if(ee==="img"){let j=N;k.img={src:(j.currentSrc||j.getAttribute("src")||"").slice(0,300),alt:j.getAttribute("alt"),naturalW:j.naturalWidth||0,naturalH:j.naturalHeight||0,attrW:parseInt(j.getAttribute("width")||"0",10)||0,attrH:parseInt(j.getAttribute("height")||"0",10)||0};}if(k.cssBackgroundImage){let j=N.closest(T);j&&(k.control={tag:j.tagName.toLowerCase(),name:x(j).slice(0,120)});}if(!/^(img|video|canvas|iframe|object|embed|svg)$/.test(ee)){let j=z.animationName.split(",").some(oe=>oe.trim()&&oe.trim()!=="none")&&F(z.animationDuration).some(oe=>oe>10),W=F(z.transitionDuration).some(oe=>oe>10)&&z.transitionProperty.trim()!=="none",Q=p.filter(oe=>R(N,oe.selector)),te=!j||Q.some(oe=>oe.anim),J=!W||Q.some(oe=>oe.trans);k.reducedMotionHandled=(j||W)&&te&&J;}let v=N.closest('a[href], button, [role="button"], [role="link"]');if(v&&v!==N){let j=v.cloneNode(true);j.querySelectorAll("img, svg").forEach(te=>te.remove());let W=(j.textContent||"").replace(/\s+/g," ").trim(),Q=(v.getAttribute("aria-label")||"").trim();k.parentInteractive={tag:v.tagName.toLowerCase(),text:(W||Q).slice(0,120)};}let D=j=>{let W=j.cloneNode(true);return W.querySelectorAll("script, style").forEach(Q=>Q.remove()),(W.textContent||"").replace(/\s+/g," ").trim()},E=N.matches('a[href], [role="link"]'),P=D(N),q=N.parentElement;if(E&&(q=N.closest("p, li, td, th, dd, dt, figcaption, blockquote")||N.parentElement),q){let j=D(q),W=E&&P?j.indexOf(P):-1,Q=W>120?W-120:0;k.nearText=(Q?"\u2026":"")+j.slice(Q,Q+240);}h.elements[H]=k;}return h}function UM(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 Bu(f){return !!f&&f.tag!=="img"&&f.cssBackgroundImage&&!f.img}var WM=/\b(needs?|requires?|for)\s+(a\s+)?(human|manual)?\s*review\b|\bhuman review\b|\bmanual review\b|\bincomplete\b/gi;function XM(f){let d=String(f??"").replace(/\s+/g," ").replace(WM,"judged").trim();if(d.length<=Pu)return d;let g=d.slice(0,Pu-1),h=g.lastIndexOf(" ");return (h>Pu/2?g.slice(0,h):g).replace(/[\s,;:–—-]+$/,"")+"\u2026"}function KM(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>Ig){d=d.slice(0,Ig);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 na(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 Pg=/^#?([0-9a-f]{6})$/i;function YM(f){let d=String(f??"").trim().match(Pg);return d?"#"+d[1].toLowerCase():null}function JM(f){let{confidence:d,reviewReason:g,...h}=f;return {...h,id:f.id.replace("axe-incomplete-","axe-")}}function ZM(f){let d=f;if(typeof f=="string"){let p=f.replace(/```json\s*/gi,"").replace(/```/g,"").match(/\[[\s\S]*\]/);if(!p)return null;try{d=JSON.parse(p[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:p,verdict:y,reason:_,fix:w}=h;if(typeof p!="string"||y!=="pass"&&y!=="violation")continue;let R=w&&typeof w=="object"?w:void 0;g.push({id:p,verdict:y,reason:typeof _=="string"?_:void 0,fix:R?{attribute:typeof R.attribute=="string"?R.attribute:void 0,value:typeof R.value=="string"?R.value:void 0}:void 0});}return g}var aa=class extends Error{},QM=`You are the final accessibility judge for a WCAG scanner. Automated engines could not decide the findings below. You MUST decide each one: "pass" (not a violation) or "violation". There is no third option \u2014 never answer "unsure", never defer to a human.
|
|
386
386
|
|
|
387
387
|
Rules:
|
|
388
388
|
- 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.
|