@wcag-checkr/ci 1.0.0-rc.72 → 1.0.0-rc.74

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.
@@ -1,4 +1,4 @@
1
- import{j as n,r as u}from"./styles-D2VxXLiY.js";import{c as g}from"./ErrorBoundary-WCBiDb3V.js";import"./_commonjsHelpers-Cpj98o6Y.js";import"./crash-reporter-Dc5lvxvY.js";import"./state-BIsozXtc.js";import"./preload-helper-D7HrI6pR.js";import"./forensic-log-VcNR3Xcq.js";const d=g(e=>({status:"idle",result:null,beginScan:()=>e({status:"scanning"}),setResult:t=>e({status:"done",result:t}),clear:()=>e({status:"idle",result:null})})),h=[{ruleId:"color-contrast",wcagCriterion:"1.4.3",wcagLevel:"AA",ownerLabel:"Text is too light to read",ownerFix:"Make the text color darker (or background lighter) until the contrast ratio is at least 4.5:1 for normal text or 3:1 for large/bold text. WebAIM's free contrast checker (webaim.org/resources/contrastchecker) verifies any pair."},{ruleId:"image-alt",wcagCriterion:"1.1.1",wcagLevel:"A",ownerLabel:"Image is missing alt text",ownerFix:'Add an `alt` attribute to every `<img>` tag describing what the image shows or its purpose. Decorative images that add nothing semantically get `alt=""` (empty but present).'},{ruleId:"input-image-alt",wcagCriterion:"1.1.1",wcagLevel:"A",ownerLabel:"Image button is missing a label",ownerFix:'Add an `alt` attribute to every `<input type="image">` describing what the button does ("Search", "Submit", etc.).'},{ruleId:"label",wcagCriterion:"3.3.2",wcagLevel:"A",ownerLabel:"Form field is missing a label",ownerFix:"Every text input, select, and textarea needs an associated `<label>` (via `for=...` matching the input's `id`) or an `aria-label`/`aria-labelledby`. Placeholder text alone is not a label."},{ruleId:"button-name",wcagCriterion:"4.1.2",wcagLevel:"A",ownerLabel:"Button has no accessible name",ownerFix:'Every `<button>` needs visible text content OR an `aria-label` describing what it does. Icon-only buttons (like a close ✕) need `aria-label="Close"`.'},{ruleId:"input-button-name",wcagCriterion:"4.1.2",wcagLevel:"A",ownerLabel:"Submit/reset button has no label",ownerFix:'Every `<input type="submit">` and `<input type="button">` needs a `value` attribute (which is also its visible label) or an `aria-label`.'},{ruleId:"link-name",wcagCriterion:"2.4.4",wcagLevel:"A",ownerLabel:"Link has no readable text",ownerFix:"Every `<a>` needs visible text content OR `aria-label`/`aria-labelledby`. Icon-only or image-only links need either alt text on the image or aria-label on the link itself."},{ruleId:"empty-button",wcagCriterion:"4.1.2",wcagLevel:"A",ownerLabel:"Empty button on the page",ownerFix:"A `<button>` with no text and no `aria-label` is invisible to assistive tech. Add visible text or an aria-label describing the button's action."},{ruleId:"empty-link",wcagCriterion:"2.4.4",wcagLevel:"A",ownerLabel:"Empty link on the page",ownerFix:"A link with no text and no aria-label is unreachable by screen readers. Add visible text or `aria-label` describing where the link goes."},{ruleId:"empty-heading",wcagCriterion:"2.4.6",wcagLevel:"AA",ownerLabel:"Empty heading element",ownerFix:"Every heading (`<h1>`–`<h6>`) needs visible text. Empty headings confuse screen readers and break page outline."},{ruleId:"document-title",wcagCriterion:"2.4.2",wcagLevel:"A",ownerLabel:"Page is missing a title",ownerFix:"Add a descriptive `<title>` element inside `<head>`. The title should briefly describe what this page is about — it shows in browser tabs, bookmarks, and is the first thing screen readers announce."},{ruleId:"html-has-lang",wcagCriterion:"3.1.1",wcagLevel:"A",ownerLabel:"Page language not declared",ownerFix:'Add a `lang` attribute to your `<html>` element (e.g., `<html lang="en">`). Screen readers use this to pick the correct pronunciation engine.'},{ruleId:"landmark-one-main",wcagCriterion:"1.3.1",wcagLevel:"A",ownerLabel:"No main content area defined",ownerFix:'Wrap your primary page content in `<main>` (or `<div role="main">`). Screen-reader users have a built-in shortcut to skip directly to main content — without this, every page-load starts at the top with the menu.'},{ruleId:"frame-title",wcagCriterion:"4.1.2",wcagLevel:"A",ownerLabel:"Iframe is missing a title",ownerFix:'Every `<iframe>` needs a `title` attribute describing what it contains (e.g., `title="Sign-up form"`, `title="Embedded video"`). Without this, screen readers announce it as just "frame."'}],b=h.map(e=>e.ruleId);function f(e){return h.find(t=>t.ruleId===e)??null}async function x(){const[e]=await chrome.tabs.query({active:!0,currentWindow:!0});return e??null}function w(e){return e?/^https?:\/\//i.test(e)||e.startsWith("file://"):!1}function v(e){const t=window;return t.axe?t.axe.run(document,{runOnly:{type:"rule",values:e},resultTypes:["violations"]}):Promise.reject(new Error("axe-core not loaded in target tab"))}function y(e){var i;const t=new Map;for(const a of e){const s=f(a.id);if(s)for(const c of a.nodes){const o=c.target.join(" "),p=((i=/[.#]([\w-]+)/.exec(o))==null?void 0:i[1])??o,m=`${a.id}::${p}`;let l=t.get(m);l||(l={rule:s,samples:[],count:0},t.set(m,l)),l.count++,l.samples.length<20&&l.samples.push({selector:o,textSnippet:""})}}const r=[];for(const a of t.values())a.rule&&r.push({ruleId:a.rule.ruleId,wcagCriterion:a.rule.wcagCriterion,wcagLevel:a.rule.wcagLevel,ownerLabel:a.rule.ownerLabel,ownerFix:a.rule.ownerFix,affectedSamples:a.samples,affectedCount:a.count});return r.sort((a,s)=>a.wcagLevel!==s.wcagLevel?a.wcagLevel==="A"?-1:1:s.affectedCount-a.affectedCount),r}async function j(){var c;const e=performance.now(),t=await x();if(!t||!t.id)return{url:"",title:"",scannedAt:new Date().toISOString(),durationMs:0,verdict:"unscannable",findings:[],unscannableReason:"No active tab found. Open the page you want to scan and try again."};if(!w(t.url))return{url:t.url??"",title:t.title??"",scannedAt:new Date().toISOString(),durationMs:performance.now()-e,verdict:"unscannable",findings:[],unscannableReason:"This is a browser internal page (chrome://, about:, etc.) and cannot be scanned. Navigate to your website and try again."};try{await chrome.scripting.executeScript({target:{tabId:t.id},files:["axe.min.js"]})}catch(o){return{url:t.url??"",title:t.title??"",scannedAt:new Date().toISOString(),durationMs:performance.now()-e,verdict:"unscannable",findings:[],unscannableReason:"Could not inject the scanner into this page (likely a strict Content-Security-Policy). Try a different page or contact support."+(o instanceof Error?` (${o.message})`:"")}}let r;try{r=(c=(await chrome.scripting.executeScript({target:{tabId:t.id},func:v,args:[b]}))[0])==null?void 0:c.result}catch(o){return{url:t.url??"",title:t.title??"",scannedAt:new Date().toISOString(),durationMs:performance.now()-e,verdict:"unscannable",findings:[],unscannableReason:"Scanner crashed while reading this page."+(o instanceof Error?` (${o.message})`:"")}}const i=(r==null?void 0:r.violations)??[],a=y(i),s=a.length===0?"safe":"at-risk";return{url:t.url??"",title:t.title??"",scannedAt:new Date().toISOString(),durationMs:performance.now()-e,verdict:s,findings:a}}function A({status:e,onClick:t}){const r=e==="scanning",i=e==="done";return n.jsx("button",{type:"button","data-normal-scan-button":!0,onClick:t,disabled:r,className:"w-full py-4 rounded-lg bg-brand-500 text-white text-base font-semibold shadow-sm hover:bg-brand-600 disabled:opacity-60 disabled:cursor-wait transition",children:r?"Checking page…":i?"Re-check this page":"Check this page"})}function C({finding:e,index:t,expanded:r,onToggle:i}){return n.jsxs("li",{className:"rounded-lg border border-slate-200 bg-white",children:[n.jsxs("button",{type:"button",onClick:i,"aria-expanded":r,className:"w-full px-3 py-2 text-left flex items-start gap-2 hover:bg-slate-50 rounded-lg",children:[n.jsxs("span",{className:"text-[11px] font-mono text-slate-400 mt-0.5",children:[t,"."]}),n.jsxs("span",{className:"flex-1 min-w-0",children:[n.jsx("span",{className:"block text-sm font-medium text-slate-900 leading-snug",children:e.ownerLabel}),n.jsxs("span",{className:"block text-[11px] text-slate-500 mt-0.5",children:["WCAG ",e.wcagCriterion," (",e.wcagLevel,") ·"," ",e.affectedCount===1?"1 element":`${e.affectedCount} elements`]})]}),n.jsx("span",{className:"text-slate-400 text-sm shrink-0","aria-hidden":"true",children:r?"−":"+"})]}),r&&n.jsxs("div",{className:"px-3 pb-3 pt-1 border-t border-slate-100 space-y-2 text-[12px]",children:[n.jsx("p",{className:"text-slate-700 leading-snug",children:e.ownerFix}),e.affectedSamples.length>0&&n.jsxs("div",{children:[n.jsxs("p",{className:"text-[10px] uppercase tracking-wide text-slate-400 mb-1",children:["Affected",e.affectedCount>e.affectedSamples.length?` (first ${e.affectedSamples.length} of ${e.affectedCount})`:""]}),n.jsx("ul",{className:"bg-slate-50 rounded p-2 max-h-32 overflow-y-auto space-y-0.5",children:e.affectedSamples.map((a,s)=>n.jsx("li",{className:"font-mono text-[10px] text-slate-700 truncate",children:a.selector},s))})]})]})]})}function S(e){const t=[];if(t.push(`# Accessibility issues on ${e.url}`),t.push(""),t.push(`Scanned: ${e.scannedAt}`),t.push(""),e.verdict==="safe")return t.push("**Good news.** Automated accessibility scan caught no issues on this page. This means the page passes the same checks demand-letter mills use to identify lawsuit targets. It does NOT mean the page is fully WCAG 2.1 AA conformant — full conformance requires manual verification by a human evaluator, which automation alone cannot replace. But you're off the easy-target list."),t.join(`
1
+ import{j as n,r as u}from"./styles-D2VxXLiY.js";import{c as g}from"./ErrorBoundary-WfdXwtby.js";import"./_commonjsHelpers-Cpj98o6Y.js";import"./crash-reporter-Dc5lvxvY.js";import"./state-BIsozXtc.js";import"./preload-helper-D7HrI6pR.js";import"./forensic-log-VcNR3Xcq.js";const d=g(e=>({status:"idle",result:null,beginScan:()=>e({status:"scanning"}),setResult:t=>e({status:"done",result:t}),clear:()=>e({status:"idle",result:null})})),m=[{ruleId:"color-contrast",wcagCriterion:"1.4.3",wcagLevel:"AA",ownerLabel:"Text is too light to read",ownerFix:"Make the text color darker (or background lighter) until the contrast ratio is at least 4.5:1 for normal text or 3:1 for large/bold text. WebAIM's free contrast checker (webaim.org/resources/contrastchecker) verifies any pair."},{ruleId:"image-alt",wcagCriterion:"1.1.1",wcagLevel:"A",ownerLabel:"Image is missing alt text",ownerFix:'Add an `alt` attribute to every `<img>` tag describing what the image shows or its purpose. Decorative images that add nothing semantically get `alt=""` (empty but present).'},{ruleId:"input-image-alt",wcagCriterion:"1.1.1",wcagLevel:"A",ownerLabel:"Image button is missing a label",ownerFix:'Add an `alt` attribute to every `<input type="image">` describing what the button does ("Search", "Submit", etc.).'},{ruleId:"label",wcagCriterion:"3.3.2",wcagLevel:"A",ownerLabel:"Form field is missing a label",ownerFix:"Every text input, select, and textarea needs an associated `<label>` (via `for=...` matching the input's `id`) or an `aria-label`/`aria-labelledby`. Placeholder text alone is not a label."},{ruleId:"button-name",wcagCriterion:"4.1.2",wcagLevel:"A",ownerLabel:"Button has no accessible name",ownerFix:'Every `<button>` needs visible text content OR an `aria-label` describing what it does. Icon-only buttons (like a close ✕) need `aria-label="Close"`.'},{ruleId:"input-button-name",wcagCriterion:"4.1.2",wcagLevel:"A",ownerLabel:"Submit/reset button has no label",ownerFix:'Every `<input type="submit">` and `<input type="button">` needs a `value` attribute (which is also its visible label) or an `aria-label`.'},{ruleId:"link-name",wcagCriterion:"2.4.4",wcagLevel:"A",ownerLabel:"Link has no readable text",ownerFix:"Every `<a>` needs visible text content OR `aria-label`/`aria-labelledby`. Icon-only or image-only links need either alt text on the image or aria-label on the link itself."},{ruleId:"empty-button",wcagCriterion:"4.1.2",wcagLevel:"A",ownerLabel:"Empty button on the page",ownerFix:"A `<button>` with no text and no `aria-label` is invisible to assistive tech. Add visible text or an aria-label describing the button's action."},{ruleId:"empty-link",wcagCriterion:"2.4.4",wcagLevel:"A",ownerLabel:"Empty link on the page",ownerFix:"A link with no text and no aria-label is unreachable by screen readers. Add visible text or `aria-label` describing where the link goes."},{ruleId:"empty-heading",wcagCriterion:"2.4.6",wcagLevel:"AA",ownerLabel:"Empty heading element",ownerFix:"Every heading (`<h1>`–`<h6>`) needs visible text. Empty headings confuse screen readers and break page outline."},{ruleId:"document-title",wcagCriterion:"2.4.2",wcagLevel:"A",ownerLabel:"Page is missing a title",ownerFix:"Add a descriptive `<title>` element inside `<head>`. The title should briefly describe what this page is about — it shows in browser tabs, bookmarks, and is the first thing screen readers announce."},{ruleId:"html-has-lang",wcagCriterion:"3.1.1",wcagLevel:"A",ownerLabel:"Page language not declared",ownerFix:'Add a `lang` attribute to your `<html>` element (e.g., `<html lang="en">`). Screen readers use this to pick the correct pronunciation engine.'},{ruleId:"landmark-one-main",wcagCriterion:"1.3.1",wcagLevel:"A",ownerLabel:"No main content area defined",ownerFix:'Wrap your primary page content in `<main>` (or `<div role="main">`). Screen-reader users have a built-in shortcut to skip directly to main content — without this, every page-load starts at the top with the menu.'},{ruleId:"frame-title",wcagCriterion:"4.1.2",wcagLevel:"A",ownerLabel:"Iframe is missing a title",ownerFix:'Every `<iframe>` needs a `title` attribute describing what it contains (e.g., `title="Sign-up form"`, `title="Embedded video"`). Without this, screen readers announce it as just "frame."'},{ruleId:"label-content-name-mismatch",wcagCriterion:"2.5.3",wcagLevel:"A",ownerLabel:"Visible label doesn't match accessible name",ownerFix:'When a button or link has BOTH visible text AND an `aria-label`, the aria-label must start with (or contain) the visible text. Otherwise voice-control users saying "click [visible text]" fail to activate the control. Either remove the aria-label or rewrite it to include the visible text verbatim.'}],b=m.map(e=>e.ruleId);function f(e){return m.find(t=>t.ruleId===e)??null}async function x(){const[e]=await chrome.tabs.query({active:!0,currentWindow:!0});return e??null}function w(e){return e?/^https?:\/\//i.test(e)||e.startsWith("file://"):!1}function v(e){const t=window;return t.axe?t.axe.run(document,{runOnly:{type:"rule",values:e},resultTypes:["violations"]}):Promise.reject(new Error("axe-core not loaded in target tab"))}function y(e){var r;const t=new Map;for(const a of e){const s=f(a.id);if(s)for(const c of a.nodes){const o=c.target.join(" "),p=((r=/[.#]([\w-]+)/.exec(o))==null?void 0:r[1])??o,h=`${a.id}::${p}`;let l=t.get(h);l||(l={rule:s,samples:[],count:0},t.set(h,l)),l.count++,l.samples.length<20&&l.samples.push({selector:o,textSnippet:""})}}const i=[];for(const a of t.values())a.rule&&i.push({ruleId:a.rule.ruleId,wcagCriterion:a.rule.wcagCriterion,wcagLevel:a.rule.wcagLevel,ownerLabel:a.rule.ownerLabel,ownerFix:a.rule.ownerFix,affectedSamples:a.samples,affectedCount:a.count});return i.sort((a,s)=>a.wcagLevel!==s.wcagLevel?a.wcagLevel==="A"?-1:1:s.affectedCount-a.affectedCount),i}async function A(){var c;const e=performance.now(),t=await x();if(!t||!t.id)return{url:"",title:"",scannedAt:new Date().toISOString(),durationMs:0,verdict:"unscannable",findings:[],unscannableReason:"No active tab found. Open the page you want to scan and try again."};if(!w(t.url))return{url:t.url??"",title:t.title??"",scannedAt:new Date().toISOString(),durationMs:performance.now()-e,verdict:"unscannable",findings:[],unscannableReason:"This is a browser internal page (chrome://, about:, etc.) and cannot be scanned. Navigate to your website and try again."};try{await chrome.scripting.executeScript({target:{tabId:t.id},files:["axe.min.js"]})}catch(o){return{url:t.url??"",title:t.title??"",scannedAt:new Date().toISOString(),durationMs:performance.now()-e,verdict:"unscannable",findings:[],unscannableReason:"Could not inject the scanner into this page (likely a strict Content-Security-Policy). Try a different page or contact support."+(o instanceof Error?` (${o.message})`:"")}}let i;try{i=(c=(await chrome.scripting.executeScript({target:{tabId:t.id},func:v,args:[b]}))[0])==null?void 0:c.result}catch(o){return{url:t.url??"",title:t.title??"",scannedAt:new Date().toISOString(),durationMs:performance.now()-e,verdict:"unscannable",findings:[],unscannableReason:"Scanner crashed while reading this page."+(o instanceof Error?` (${o.message})`:"")}}const r=(i==null?void 0:i.violations)??[],a=y(r),s=a.length===0?"safe":"at-risk";return{url:t.url??"",title:t.title??"",scannedAt:new Date().toISOString(),durationMs:performance.now()-e,verdict:s,findings:a}}function j({status:e,onClick:t}){const i=e==="scanning",r=e==="done";return n.jsx("button",{type:"button","data-normal-scan-button":!0,onClick:t,disabled:i,className:"w-full py-4 rounded-lg bg-brand-500 text-white text-base font-semibold shadow-sm hover:bg-brand-600 disabled:opacity-60 disabled:cursor-wait transition",children:i?"Checking page…":r?"Re-check this page":"Check this page"})}function C({finding:e,index:t,expanded:i,onToggle:r}){return n.jsxs("li",{className:"rounded-lg border border-slate-200 bg-white",children:[n.jsxs("button",{type:"button",onClick:r,"aria-expanded":i,className:"w-full px-3 py-2 text-left flex items-start gap-2 hover:bg-slate-50 rounded-lg",children:[n.jsxs("span",{className:"text-[11px] font-mono text-slate-400 mt-0.5",children:[t,"."]}),n.jsxs("span",{className:"flex-1 min-w-0",children:[n.jsx("span",{className:"block text-sm font-medium text-slate-900 leading-snug",children:e.ownerLabel}),n.jsxs("span",{className:"block text-[11px] text-slate-500 mt-0.5",children:["WCAG ",e.wcagCriterion," (",e.wcagLevel,") ·"," ",e.affectedCount===1?"1 element":`${e.affectedCount} elements`]})]}),n.jsx("span",{className:"text-slate-400 text-sm shrink-0","aria-hidden":"true",children:i?"−":"+"})]}),i&&n.jsxs("div",{className:"px-3 pb-3 pt-1 border-t border-slate-100 space-y-2 text-[12px]",children:[n.jsx("p",{className:"text-slate-700 leading-snug",children:e.ownerFix}),e.affectedSamples.length>0&&n.jsxs("div",{children:[n.jsxs("p",{className:"text-[10px] uppercase tracking-wide text-slate-400 mb-1",children:["Affected",e.affectedCount>e.affectedSamples.length?` (first ${e.affectedSamples.length} of ${e.affectedCount})`:""]}),n.jsx("ul",{className:"bg-slate-50 rounded p-2 max-h-32 overflow-y-auto space-y-0.5",children:e.affectedSamples.map((a,s)=>n.jsx("li",{className:"font-mono text-[10px] text-slate-700 truncate",children:a.selector},s))})]})]})]})}function k(e){const t=[];if(t.push(`# Accessibility issues on ${e.url}`),t.push(""),t.push(`Scanned: ${e.scannedAt}`),t.push(""),e.verdict==="safe")return t.push("**Good news.** Automated accessibility scan caught no issues on this page. This means the page passes the same checks demand-letter mills use to identify lawsuit targets. It does NOT mean the page is fully WCAG 2.1 AA conformant — full conformance requires manual verification by a human evaluator, which automation alone cannot replace. But you're off the easy-target list."),t.join(`
2
2
  `);if(e.verdict==="unscannable")return t.push(`Scan could not run: ${e.unscannableReason??"unknown reason"}`),t.join(`
3
- `);t.push(`An automated accessibility scan found **${e.findings.length} ${e.findings.length===1?"issue":"issues"}** on this page. These are the same kinds of issues demand-letter mills look for when they identify lawsuit targets — please fix them as soon as possible.`),t.push(""),t.push("---"),t.push("");for(let r=0;r<e.findings.length;r++){const i=e.findings[r];t.push(`## ${r+1}. ${i.ownerLabel} — WCAG ${i.wcagCriterion} (Level ${i.wcagLevel})`),t.push(""),t.push(i.ownerFix),t.push(""),t.push(`**Affected** ${i.affectedCount===1?"element":`${i.affectedCount} elements`}`+(i.affectedCount>i.affectedSamples.length?` (showing first ${i.affectedSamples.length}):`:":")),t.push(""),t.push("```");for(const a of i.affectedSamples)t.push(a.selector);t.push("```"),t.push(""),t.push(`Reference: https://www.w3.org/WAI/WCAG21/Understanding/${k(i.wcagCriterion)}.html`),t.push(""),t.push("---"),t.push("")}return t.push('Once these are fixed, re-run the scan to confirm. The scan tool is at wcagcheckr.com — install the Chrome extension, navigate to this page, click "Check this page."'),t.join(`
4
- `)}function k(e){return{"1.1.1":"non-text-content","1.3.1":"info-and-relationships","1.4.3":"contrast-minimum","2.4.2":"page-titled","2.4.4":"link-purpose-in-context","2.4.6":"headings-and-labels","3.1.1":"language-of-page","3.3.2":"labels-or-instructions","4.1.2":"name-role-value"}[e]??""}function L({result:e}){const[t,r]=u.useState(!1);async function i(){const a=S(e);try{await navigator.clipboard.writeText(a),r(!0),setTimeout(()=>r(!1),2400)}catch{const s=document.createElement("textarea");s.value=a,s.style.position="fixed",s.style.opacity="0",document.body.appendChild(s),s.select(),document.execCommand("copy"),document.body.removeChild(s),r(!0),setTimeout(()=>r(!1),2400)}}return n.jsx("button",{type:"button",onClick:()=>void i(),className:"w-full py-2 rounded-lg border border-slate-300 bg-white text-sm font-medium hover:bg-slate-50",children:t?"✓ Copied — paste into email":"✉ Copy fix list for my developer"})}function N({result:e}){const[t,r]=u.useState(null);return e.verdict==="unscannable"?n.jsxs("div",{className:"rounded-lg border border-amber-200 bg-amber-50 p-3 text-sm text-amber-900",children:[n.jsx("p",{className:"font-semibold",children:"Couldn't scan this page"}),n.jsx("p",{className:"mt-1 text-[12px]",children:e.unscannableReason??"Unknown reason."})]}):e.verdict==="safe"?n.jsxs("div",{className:"rounded-lg border border-emerald-200 bg-emerald-50 p-4",children:[n.jsxs("div",{className:"flex items-center gap-2",children:[n.jsx("span",{className:"text-3xl","aria-hidden":"true",children:"✓"}),n.jsx("p",{className:"text-base font-semibold text-emerald-900",children:"Off the radar"})]}),n.jsx("p",{className:"text-[12px] text-emerald-900 mt-2 leading-snug",children:"Automated scan caught no issues. This page passes the same checks demand-letter mills use to identify lawsuit targets. Note: full WCAG 2.1 AA conformance still requires human verification — switch to Advanced mode for that."}),n.jsxs("p",{className:"text-[10px] text-emerald-700 mt-2",children:["Scanned ",e.url," in ",Math.round(e.durationMs)," ms."]})]}):n.jsxs("div",{className:"space-y-3",children:[n.jsxs("div",{className:"rounded-lg border border-rose-200 bg-rose-50 p-4",children:[n.jsxs("div",{className:"flex items-center gap-2",children:[n.jsx("span",{className:"text-3xl","aria-hidden":"true",children:"⚠"}),n.jsxs("p",{className:"text-base font-semibold text-rose-900",children:[e.findings.length," ",e.findings.length===1?"issue":"issues"," to fix"]})]}),n.jsx("p",{className:"text-[12px] text-rose-900 mt-2 leading-snug",children:"These are the issues demand-letter mills look for. Until they're fixed, this page is at risk of being flagged as a lawsuit target."}),n.jsxs("p",{className:"text-[10px] text-rose-700 mt-2",children:["Scanned ",e.url," in ",Math.round(e.durationMs)," ms."]})]}),n.jsx("ul",{className:"space-y-2",children:e.findings.map((i,a)=>n.jsx(C,{finding:i,index:a+1,expanded:t===a,onToggle:()=>r(t===a?null:a)},`${i.ruleId}-${a}`))}),n.jsx(L,{result:e})]})}function I(){async function e(){await chrome.storage.local.set({userMode:"developer"}),window.location.reload()}return n.jsxs("footer",{className:"px-4 py-2 bg-slate-100 border-t border-slate-200 text-[11px] text-slate-500 flex items-center justify-between",children:[n.jsx("span",{children:"Normal mode"}),n.jsx("button",{type:"button",onClick:()=>void e(),className:"underline hover:text-slate-800",children:"Switch to Advanced mode →"})]})}function W(){const e=d(s=>s.status),t=d(s=>s.result),r=d(s=>s.beginScan),i=d(s=>s.setResult);async function a(){r();const s=await j();i(s)}return u.useEffect(()=>{const s=document.querySelector("[data-normal-scan-button]");s==null||s.focus()},[]),n.jsxs("div",{className:"min-h-screen bg-slate-50 text-slate-900 flex flex-col",children:[n.jsxs("header",{className:"px-4 py-3 bg-white border-b border-slate-200",children:[n.jsx("h1",{className:"text-base font-semibold",children:"wcagcheckr"}),n.jsx("p",{className:"text-[11px] text-slate-500",children:"Off the lawsuit-mill radar in one click."})]}),n.jsxs("main",{className:"flex-1 px-4 py-4 space-y-4",children:[n.jsx(A,{status:e,onClick:()=>void a()}),t&&n.jsx(N,{result:t})]}),n.jsx(I,{})]})}export{W as NormalApp};
3
+ `);t.push(`An automated accessibility scan found **${e.findings.length} ${e.findings.length===1?"issue":"issues"}** on this page. These are the same kinds of issues demand-letter mills look for when they identify lawsuit targets — please fix them as soon as possible.`),t.push(""),t.push("---"),t.push("");for(let i=0;i<e.findings.length;i++){const r=e.findings[i];t.push(`## ${i+1}. ${r.ownerLabel} — WCAG ${r.wcagCriterion} (Level ${r.wcagLevel})`),t.push(""),t.push(r.ownerFix),t.push(""),t.push(`**Affected** ${r.affectedCount===1?"element":`${r.affectedCount} elements`}`+(r.affectedCount>r.affectedSamples.length?` (showing first ${r.affectedSamples.length}):`:":")),t.push(""),t.push("```");for(const a of r.affectedSamples)t.push(a.selector);t.push("```"),t.push(""),t.push(`Reference: https://www.w3.org/WAI/WCAG21/Understanding/${S(r.wcagCriterion)}.html`),t.push(""),t.push("---"),t.push("")}return t.push('Once these are fixed, re-run the scan to confirm. The scan tool is at wcagcheckr.com — install the Chrome extension, navigate to this page, click "Check this page."'),t.join(`
4
+ `)}function S(e){return{"1.1.1":"non-text-content","1.3.1":"info-and-relationships","1.4.3":"contrast-minimum","2.4.2":"page-titled","2.4.4":"link-purpose-in-context","2.4.6":"headings-and-labels","3.1.1":"language-of-page","3.3.2":"labels-or-instructions","4.1.2":"name-role-value"}[e]??""}function L({result:e}){const[t,i]=u.useState(!1);async function r(){const a=k(e);try{await navigator.clipboard.writeText(a),i(!0),setTimeout(()=>i(!1),2400)}catch{const s=document.createElement("textarea");s.value=a,s.style.position="fixed",s.style.opacity="0",document.body.appendChild(s),s.select(),document.execCommand("copy"),document.body.removeChild(s),i(!0),setTimeout(()=>i(!1),2400)}}return n.jsx("button",{type:"button",onClick:()=>void r(),className:"w-full py-2 rounded-lg border border-slate-300 bg-white text-sm font-medium hover:bg-slate-50",children:t?"✓ Copied — paste into email":"✉ Copy fix list for my developer"})}function N({result:e}){const[t,i]=u.useState(null);return e.verdict==="unscannable"?n.jsxs("div",{className:"rounded-lg border border-amber-200 bg-amber-50 p-3 text-sm text-amber-900",children:[n.jsx("p",{className:"font-semibold",children:"Couldn't scan this page"}),n.jsx("p",{className:"mt-1 text-[12px]",children:e.unscannableReason??"Unknown reason."})]}):e.verdict==="safe"?n.jsxs("div",{className:"rounded-lg border border-emerald-200 bg-emerald-50 p-4",children:[n.jsxs("div",{className:"flex items-center gap-2",children:[n.jsx("span",{className:"text-3xl","aria-hidden":"true",children:"✓"}),n.jsx("p",{className:"text-base font-semibold text-emerald-900",children:"Off the radar"})]}),n.jsx("p",{className:"text-[12px] text-emerald-900 mt-2 leading-snug",children:"Automated scan caught no issues. This page passes the same checks demand-letter mills use to identify lawsuit targets. Note: full WCAG 2.1 AA conformance still requires human verification — switch to Advanced mode for that."}),n.jsxs("p",{className:"text-[10px] text-emerald-700 mt-2",children:["Scanned ",e.url," in ",Math.round(e.durationMs)," ms."]})]}):n.jsxs("div",{className:"space-y-3",children:[n.jsxs("div",{className:"rounded-lg border border-rose-200 bg-rose-50 p-4",children:[n.jsxs("div",{className:"flex items-center gap-2",children:[n.jsx("span",{className:"text-3xl","aria-hidden":"true",children:"⚠"}),n.jsxs("p",{className:"text-base font-semibold text-rose-900",children:[e.findings.length," ",e.findings.length===1?"issue":"issues"," to fix"]})]}),n.jsx("p",{className:"text-[12px] text-rose-900 mt-2 leading-snug",children:"These are the issues demand-letter mills look for. Until they're fixed, this page is at risk of being flagged as a lawsuit target."}),n.jsxs("p",{className:"text-[10px] text-rose-700 mt-2",children:["Scanned ",e.url," in ",Math.round(e.durationMs)," ms."]})]}),n.jsx("ul",{className:"space-y-2",children:e.findings.map((r,a)=>n.jsx(C,{finding:r,index:a+1,expanded:t===a,onToggle:()=>i(t===a?null:a)},`${r.ruleId}-${a}`))}),n.jsx(L,{result:e})]})}function I(){async function e(){await chrome.storage.local.set({userMode:"developer"}),window.location.reload()}return n.jsxs("footer",{className:"px-4 py-2 bg-slate-100 border-t border-slate-200 text-[11px] text-slate-500 flex items-center justify-between",children:[n.jsx("span",{children:"Normal mode"}),n.jsx("button",{type:"button",onClick:()=>void e(),className:"underline hover:text-slate-800",children:"Switch to Advanced mode →"})]})}function W(){const e=d(s=>s.status),t=d(s=>s.result),i=d(s=>s.beginScan),r=d(s=>s.setResult);async function a(){i();const s=await A();r(s)}return u.useEffect(()=>{const s=document.querySelector("[data-normal-scan-button]");s==null||s.focus()},[]),n.jsxs("div",{className:"min-h-screen bg-slate-50 text-slate-900 flex flex-col",children:[n.jsxs("header",{className:"px-4 py-3 bg-white border-b border-slate-200",children:[n.jsx("h1",{className:"text-base font-semibold",children:"wcagcheckr"}),n.jsx("p",{className:"text-[11px] text-slate-500",children:"Off the lawsuit-mill radar in one click."})]}),n.jsxs("main",{className:"flex-1 px-4 py-4 space-y-4",children:[n.jsx(j,{status:e,onClick:()=>void a()}),t&&n.jsx(N,{result:t})]}),n.jsx(I,{})]})}export{W as NormalApp};
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/forensic-log-VcNR3Xcq.js","assets/crash-reporter-Dc5lvxvY.js","assets/state-BIsozXtc.js","assets/site-report-renderer-CXRggal1.js","assets/App-CWTgG7P6.js","assets/styles-D2VxXLiY.js","assets/_commonjsHelpers-Cpj98o6Y.js","assets/styles-DyeH361z.css","assets/preload-helper-D7HrI6pR.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/forensic-log-VcNR3Xcq.js","assets/crash-reporter-Dc5lvxvY.js","assets/state-BIsozXtc.js","assets/site-report-renderer-CXRggal1.js","assets/App-Bpsz7bQq.js","assets/styles-D2VxXLiY.js","assets/_commonjsHelpers-Cpj98o6Y.js","assets/styles-DyeH361z.css","assets/preload-helper-D7HrI6pR.js"])))=>i.map(i=>d[i]);
2
2
  var Mt=Object.defineProperty;var Pt=(t,s,a)=>s in t?Mt(t,s,{enumerable:!0,configurable:!0,writable:!0,value:a}):t[s]=a;var Ye=(t,s,a)=>Pt(t,typeof s!="symbol"?s+"":s,a);import{_ as je}from"./preload-helper-D7HrI6pR.js";import{R as ye,i as le,r as g,j as e,M as ke,C as Ke,l as Gt,o as xt,t as ft,m as Vt,s as Bt,k as Me}from"./styles-D2VxXLiY.js";import{o as ee,r as Q,s as J,c as gt,b as se,d as Ie}from"./crash-reporter-Dc5lvxvY.js";import{g as Wt,a as Z,u as Ht,b as zt,c as Kt,d as bt,e as Ce,f as qt,l as Qt,h as vt,A as Y,s as Jt,i as yt,j as Yt,O as Xt,k as Zt,m as es,n as Xe,o as ts,p as ss,q as as,r as ns,t as rs,T as is,v as os,w as ls}from"./forensic-log-VcNR3Xcq.js";import{B as Pe,i as wt,b as jt,T as Nt}from"./state-BIsozXtc.js";const Ze=t=>{let s;const a=new Set,n=(m,c)=>{const p=typeof m=="function"?m(s):m;if(!Object.is(p,s)){const u=s;s=c??(typeof p!="object"||p===null)?p:Object.assign({},s,p),a.forEach(f=>f(s,u))}},r=()=>s,l={setState:n,getState:r,getInitialState:()=>d,subscribe:m=>(a.add(m),()=>a.delete(m))},d=s=t(n,r,l);return l},cs=t=>t?Ze(t):Ze,ds=t=>t;function us(t,s=ds){const a=ye.useSyncExternalStore(t.subscribe,ye.useCallback(()=>s(t.getState()),[t,s]),ye.useCallback(()=>s(t.getInitialState()),[t,s]));return ye.useDebugValue(a),a}const et=t=>{const s=cs(t),a=n=>us(s,n);return Object.assign(a,s),a},ps=t=>t?et(t):et,b=ps(t=>({status:"idle",progress:null,results:[],delta:null,componentId:null,errorMessage:null,freshThisSession:!1,baselineList:[],tier:"trial",trialDaysRemaining:null,seatsUsed:null,seatsTotal:null,planCode:null,licenseDaysRemaining:null,pastDue:!1,messages:[],unreadMessageCount:0,criticalUnacked:!1,view:"matrix",userMode:null,siteCrawlStatus:"idle",siteCrawlProgress:null,siteCrawlReport:null,siteCrawlError:null,pinnedMatchKey:null,pinnedFound:!0,aiFailure:null,aiProgress:null,acknowledgedKeys:new Set,setStatus:s=>t({status:s}),startNewScan:()=>t({status:"running",results:[],delta:null,errorMessage:null,progress:null,componentId:null,pinnedMatchKey:null,pinnedFound:!0,aiFailure:null,aiProgress:null}),setProgress:s=>t({progress:s}),setResults:(s,a,n)=>t({results:s,delta:a,componentId:n,status:"complete",errorMessage:null,freshThisSession:!0,aiProgress:null,pinnedMatchKey:null,pinnedFound:!0}),setDelta:s=>t({delta:s}),setError:s=>t({errorMessage:s,status:"failed"}),setBaselineList:s=>t({baselineList:s}),clearResults:()=>t({results:[],delta:null,componentId:null,errorMessage:null,progress:null,status:"idle",freshThisSession:!1,pinnedMatchKey:null,pinnedFound:!0,aiFailure:null,aiProgress:null}),setTier:(s,a)=>t({tier:s,trialDaysRemaining:(a==null?void 0:a.trialDaysRemaining)??null,seatsUsed:(a==null?void 0:a.seatsUsed)??null,seatsTotal:(a==null?void 0:a.seatsTotal)??null,planCode:(a==null?void 0:a.planCode)??null,licenseDaysRemaining:(a==null?void 0:a.licenseDaysRemaining)??null,pastDue:(a==null?void 0:a.pastDue)??!1}),setView:s=>t({view:s}),setUserMode:s=>t({userMode:s}),setSiteCrawlStatus:s=>t({siteCrawlStatus:s}),setSiteCrawlProgress:s=>t({siteCrawlProgress:s}),setSiteCrawlReport:s=>t({siteCrawlReport:s}),setSiteCrawlError:s=>t({siteCrawlError:s}),setPinned:(s,a=!0)=>t({pinnedMatchKey:s,pinnedFound:a}),setAiFailure:s=>t({aiFailure:s}),clearAiFailure:()=>t({aiFailure:null}),setAiProgress:s=>t({aiProgress:s}),setAcknowledgedKeys:s=>t({acknowledgedKeys:s}),markAcknowledged:s=>t(a=>({acknowledgedKeys:new Set(a.acknowledgedKeys).add(s)})),markUnacknowledged:s=>t(a=>{const n=new Set(a.acknowledgedKeys);return n.delete(s),{acknowledgedKeys:n}}),setMessages:(s,a,n)=>t({messages:s,unreadMessageCount:a,criticalUnacked:n}),applyMessageAck:(s,a)=>t(n=>{const r=n.messages.map(l=>l.id!==s?l:a==="seen"?{...l,seen:!0}:a==="dismissed"?{...l,dismissed:!0}:a==="acknowledged"?{...l,acknowledged:!0}:a==="clicked"?{...l,clicked:!0}:l).filter(l=>l.severity==="critical"?!l.acknowledged:!l.dismissed),i=r.filter(l=>!l.seen).length,o=r.some(l=>l.severity==="critical"&&!l.acknowledged);return{messages:r,unreadMessageCount:i,criticalUnacked:o}})})),Te="sidePanel:lastAudit";function ms(){const t=[];return t.push(ee("AUDIT_PROGRESS_EVENT",s=>{const a=b.getState().status==="running";b.getState().setProgress({current:s.current,total:s.total,currentState:s.currentState}),b.getState().setStatus("running"),a||le.polite(`Audit running, scanning ${s.total} state${s.total===1?"":"s"}.`)})),t.push(ee("AUDIT_COMPLETE_EVENT",s=>{var i;b.getState().setResults(s.results,s.delta,s.componentId);const a=s.results.reduce((o,l)=>o+l.violations.length,0),n=((i=s.delta)==null?void 0:i.newCount)??0,r=s.delta?`Audit complete. ${n} new violation${n===1?"":"s"} versus baseline.`:`Audit complete. ${a} violation${a===1?"":"s"} found across ${s.results.length} state${s.results.length===1?"":"s"}.`;le.polite(r),hs({results:s.results,delta:s.delta,componentId:s.componentId})})),t.push(ee("AUDIT_FAILED_EVENT",s=>{b.getState().setError(s.error.message)})),t.push(ee("AI_AUGMENTATION_PROGRESS_EVENT",s=>{const a=b.getState().aiProgress;b.getState().setAiProgress({currentCheckLabel:s.currentCheckLabel,current:s.current,total:s.total,candidatesDone:s.candidatesDone,candidatesTotal:s.candidatesTotal}),a||le.polite(`AI augmentation running ${s.total} check${s.total===1?"":"s"}.`)})),t.push(ee("AI_AUGMENTATION_FAILED_EVENT",s=>{b.getState().setAiFailure({severity:s.severity,reason:s.reason,checksAttempted:s.checksAttempted,checksSucceeded:s.checksSucceeded,checksErrored:s.checksErrored,errorDetails:s.errorDetails})})),t.push(ee("SCORECARD_UPDATED_EVENT",()=>{$e()})),t.push(ee("LICENSE_CHANGED_EVENT",()=>{St()})),t.push(ee("SITE_CRAWL_PROGRESS_EVENT",s=>{const a=b.getState();a.setSiteCrawlStatus("running"),a.setSiteCrawlProgress({current:s.current,total:s.total,url:s.url,lastViolations:s.violations}),s.status==="auditing"&&s.current===1&&le.polite(`Site crawl started, scanning up to ${s.total} pages.`)})),t.push(ee("SITE_CRAWL_COMPLETE_EVENT",s=>{const a=b.getState();a.setSiteCrawlStatus("complete"),a.setSiteCrawlReport(s.report),a.setSiteCrawlProgress(null),le.polite(`Site crawl complete. Grade ${s.report.siteGrade}, ${s.report.totalUniqueViolations} unique violation${s.report.totalUniqueViolations===1?"":"s"}.`)})),t.push(ee("SITE_CRAWL_FAILED_EVENT",s=>{const a=b.getState();a.setSiteCrawlStatus("failed"),a.setSiteCrawlError(s.error.message),a.setSiteCrawlProgress(null),le.assertive(`Site crawl failed: ${s.error.message}`)})),()=>t.forEach(s=>s())}async function hs(t){const s={...t,results:t.results.map(({screenshotDataUrl:a,...n})=>n)};try{await chrome.storage.local.set({[Te]:s})}catch(a){console.warn("[wire-messaging] persistLastAudit failed; results stay in-memory only",a)}}async function xs(){const s=(await chrome.storage.local.get(Te))[Te];s&&b.setState({results:s.results,delta:s.delta,componentId:s.componentId,status:"complete"})}async function fs(){await chrome.storage.local.remove(Te)}async function kt(){b.getState().clearResults(),await fs()}async function $e(){const t=await Q({type:"BASELINE_LIST"});b.getState().setBaselineList(t.items)}async function St(t){const s=await Q({type:"TIER_GET",forceRefresh:(t==null?void 0:t.forceRefresh)===!0});b.getState().setTier(s.tier,{trialDaysRemaining:s.trialDaysRemaining,seatsUsed:s.seatsUsed,seatsTotal:s.seatsTotal,planCode:s.planCode,licenseDaysRemaining:s.licenseDaysRemaining,pastDue:s.pastDue}),At()}async function At(){const{fetchMessages:t}=await je(async()=>{const{fetchMessages:n}=await Promise.resolve().then(()=>Ss);return{fetchMessages:n}},void 0),s=b.getState().userMode,a=await t(s);a&&b.getState().setMessages(a.messages,a.unreadCount,a.criticalUnacked)}async function gs(){const s=(await Q({type:"SETTINGS_GET",key:"userMode"})).data,a=s==="owner"||s==="dev"?s:null;b.getState().setUserMode(a)}function bs(){return chrome.runtime.connect({name:"audit-keepalive"})}let _e=null;async function vs(){if(_e===null)try{const t=await chrome.windows.getCurrent();typeof t.id=="number"&&(_e=t.id)}catch{}}function Ct(){if(_e===null)return;const t=chrome.sidePanel;!t||typeof t.open!="function"||t.open({windowId:_e}).catch(()=>{})}function ce(t){Ct(),J(t)}function ys({onClose:t}){const[s,a]=g.useState(""),[n,r]=g.useState(""),[i,o]=g.useState(!0),[l,d]=g.useState(""),[m,c]=g.useState(!1),[p,u]=g.useState(null);async function f(h){var w;if(h.preventDefault(),!(!s.trim()||!n.trim())){c(!0),u(null);try{const R=await Q({type:"SUPPORT_MESSAGE_REQUEST",subject:s.trim(),body:n.trim(),includeContext:i,replyEmail:l.trim()||void 0});R.success?(u({ok:!0,msg:`Sent (ref: ${R.ticketRef??"n/a"})`}),setTimeout(t,1200)):u({ok:!1,msg:((w=R.error)==null?void 0:w.message)??"Failed to send"})}finally{c(!1)}}}return e.jsxs("form",{onSubmit:f,className:"space-y-3 text-sm",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"support-subject",className:"block text-xs font-medium mb-1",children:"Subject"}),e.jsx("input",{id:"support-subject",type:"text",value:s,onChange:h=>a(h.target.value),required:!0,className:"w-full text-xs border border-slate-300 rounded px-2 py-1"})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"support-body",className:"block text-xs font-medium mb-1",children:"Message"}),e.jsx("textarea",{id:"support-body",value:n,onChange:h=>r(h.target.value),required:!0,rows:6,className:"w-full text-xs border border-slate-300 rounded px-2 py-1"})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"support-reply",className:"block text-xs font-medium mb-1",children:"Reply email (optional)"}),e.jsx("input",{id:"support-reply",type:"email",autoComplete:"email",value:l,onChange:h=>d(h.target.value),className:"w-full text-xs border border-slate-300 rounded px-2 py-1"})]}),e.jsxs("label",{className:"flex items-start gap-2 text-xs",children:[e.jsx("input",{type:"checkbox",checked:i,onChange:h=>o(h.target.checked),className:"mt-0.5"}),e.jsx("span",{className:"text-slate-600",children:"Include extension version, browser platform, and license tier (no URLs, page content, or audit data is sent)."})]}),p&&e.jsx("p",{id:"support-form-result",role:p.ok?"status":"alert",className:`text-xs ${p.ok?"text-green-700":"text-red-700"}`,children:p.msg}),e.jsxs("div",{className:"flex gap-2 justify-end",children:[e.jsx("button",{type:"button",onClick:t,className:"text-xs px-3 py-1 hover:bg-slate-100 rounded",children:"Cancel"}),e.jsx("button",{type:"submit",disabled:m,className:"text-xs px-3 py-1 bg-brand-500 text-white rounded disabled:opacity-50",children:m?"Sending…":"Send"})]})]})}function tt({onClick:t,ariaLabel:s,title:a,children:n,className:r}){return e.jsx("button",{onClick:t,"aria-label":s,title:a??s,className:`inline-flex items-center justify-center min-w-[24px] min-h-[24px] text-xs text-slate-500 hover:text-slate-900 ${r??""}`,children:n})}const Le=gt("messages-client"),ws="https://api.wcagcheckr.com",Et="wcagcheckr",js=1e4;function Ns(){try{return chrome.runtime.getManifest().version}catch{return"0.0.0"}}async function Rt(t,s){const a=await Wt();if(!a)throw new Error("no_license_token");const n={...(s==null?void 0:s.headers)??{},Authorization:`Bearer ${a}`,"X-Extension-Version":Ns()};return s!=null&&s.userMode&&(n["X-User-Mode"]=s.userMode),fetch(`${ws}${t}`,{...s,headers:n,signal:AbortSignal.timeout(js)})}async function ks(t){try{const s=await Rt(`/v1/products/${Et}/messages`,{userMode:t??null});return s.ok?await s.json():(Le.warn("fetchMessages http",s.status),null)}catch(s){return Le.warn("fetchMessages failed",s),null}}async function ue(t,s){try{const a=await Rt(`/v1/products/${Et}/messages/${t}/ack`,{method:"POST",body:JSON.stringify({action:s}),headers:{"content-type":"application/json"}});return a.ok?!0:(Le.warn("ackMessage http",a.status,"action",s),!1)}catch(a){return Le.warn("ackMessage failed",a),!1}}const Ss=Object.freeze(Object.defineProperty({__proto__:null,ackMessage:ue,fetchMessages:ks},Symbol.toStringTag,{value:"Module"})),As=["http:","https:"];function Cs(t){try{const s=new URL(t);return As.includes(s.protocol)}catch{return!1}}function st(t){const s=[];let a=0,n=0;for(;a<t.length;){if(t[a]==="["){const i=t.indexOf("]",a+1);if(i!==-1&&t[i+1]==="("){const o=t.indexOf(")",i+2);if(o!==-1){const l=t.slice(a+1,i),d=t.slice(i+2,o);Cs(d)?s.push(e.jsx("a",{href:d,target:"_blank",rel:"noopener",className:"text-brand-700 underline",children:l},`l-${n++}`)):s.push(e.jsx(g.Fragment,{children:l},`l-${n++}`)),a=o+1;continue}}}if(t[a]==="*"&&t[a+1]==="*"){const i=t.indexOf("**",a+2);if(i!==-1){s.push(e.jsx("strong",{children:t.slice(a+2,i)},`b-${n++}`)),a=i+2;continue}}if(t[a]==="*"&&t[a+1]!=="*"){const i=t.indexOf("*",a+1);if(i!==-1&&t[i+1]!=="*"){s.push(e.jsx("em",{children:t.slice(a+1,i)},`i-${n++}`)),a=i+1;continue}}let r=a+1;for(;r<t.length&&t[r]!=="*"&&t[r]!=="[";)r++;s.push(e.jsx(g.Fragment,{children:t.slice(a,r)},`t-${n++}`)),a=r}return s}function It({source:t}){const s=t.split(/\r?\n/),a=[];let n=[],r=[],i=0;function o(){if(r.length===0)return;const d=r.join(" ");a.push(e.jsx("p",{className:"leading-snug",children:st(d)},`p-${i++}`)),r=[]}function l(){n.length!==0&&(a.push(e.jsx("ul",{className:"list-disc pl-5 space-y-0.5",children:n.map((d,m)=>e.jsx("li",{children:st(d)},m))},`u-${i++}`)),n=[])}for(const d of s){const m=d.trimEnd();if(m===""){o(),l();continue}const c=/^[-*]\s+(.*)$/.exec(m);if(c){o(),n.push(c[1]);continue}l(),r.push(m)}return o(),l(),e.jsx("div",{className:"space-y-1.5",children:a})}const Es={info:"bg-blue-500",promo:"bg-purple-500",warning:"bg-amber-500",critical:"bg-rose-500"},Rs={critical:"bg-rose-50 border-rose-200"};function Is(){const t=b(u=>u.unreadMessageCount),s=b(u=>u.messages),a=b(u=>u.applyMessageAck),[n,r]=g.useState(!1),i=g.useRef(-1),[o,l]=g.useState(!1);g.useEffect(()=>{const u=s.filter(h=>!h.seen);if(u.length===0)return;const f=Math.max(...u.map(h=>h.id));if(f>i.current){i.current=f,l(!0);const h=setTimeout(()=>l(!1),1500);return()=>clearTimeout(h)}},[s]);async function d(){const u=s.filter(f=>!f.seen);if(u.length!==0)for(const f of u)a(f.id,"seen"),ue(f.id,"seen")}function m(){const u=!n;r(u),u&&d()}async function c(u){a(u.id,"dismissed"),await ue(u.id,"dismissed")}async function p(u){u.ctaUrl&&(a(u.id,"clicked"),ue(u.id,"clicked"),chrome.tabs.create({url:u.ctaUrl}).catch(()=>{window.open(u.ctaUrl,"_blank","noopener")}))}return e.jsxs("div",{className:"relative",children:[e.jsxs("button",{type:"button",onClick:m,"aria-label":t>0?`Notifications (${t} unread)`:"Notifications","aria-expanded":n,"aria-haspopup":"dialog",className:`relative grid place-items-center w-7 h-7 rounded text-slate-500 hover:bg-slate-100 hover:text-slate-700 focus-visible:outline focus-visible:outline-2 focus-visible:outline-brand-500 ${o?"animate-bell-pulse":""}`,title:t>0?`${t} new message${t===1?"":"s"}`:"No new messages",children:[e.jsx(Ts,{active:t>0}),t>0&&e.jsx("span",{"aria-hidden":"true",className:"absolute top-0.5 right-0.5 w-2 h-2 rounded-full bg-rose-500 ring-2 ring-white"})]}),n&&e.jsx($s,{messages:s,onClose:()=>r(!1),onDismiss:c,onCtaClick:p})]})}function Ts({active:t}){return e.jsx("svg",{viewBox:"0 0 20 20",width:"16",height:"16","aria-hidden":"true",fill:"currentColor",className:t?"text-rose-500":"",children:e.jsx("path",{d:"M10 2a5 5 0 00-5 5v3l-1.6 2.4a1 1 0 00.84 1.6h11.52a1 1 0 00.84-1.6L15 10V7a5 5 0 00-5-5zm-1.5 13a1.5 1.5 0 003 0h-3z"})})}function $s({messages:t,onClose:s,onDismiss:a,onCtaClick:n}){const r=g.useRef(null);return g.useEffect(()=>{const i=l=>{r.current&&(r.current.contains(l.target)||s())},o=l=>{l.key==="Escape"&&s()};return document.addEventListener("mousedown",i),document.addEventListener("keydown",o),()=>{document.removeEventListener("mousedown",i),document.removeEventListener("keydown",o)}},[s]),e.jsxs("div",{ref:r,role:"dialog","aria-label":"Notifications",className:"absolute right-0 top-full mt-1 w-80 max-h-[420px] overflow-y-auto bg-white border border-slate-200 rounded shadow-lg z-50 text-xs",children:[e.jsxs("div",{className:"flex items-center justify-between px-3 py-2 border-b border-slate-200",children:[e.jsx("span",{className:"font-medium",children:"Notifications"}),e.jsx("button",{type:"button",onClick:()=>{At()},className:"text-[11px] text-brand-700 hover:underline",children:"Refresh"})]}),t.length===0?e.jsx("div",{className:"p-4 text-center text-slate-500 text-[11px]",children:"No messages."}):e.jsx("ul",{className:"divide-y divide-slate-100",children:t.map(i=>e.jsx("li",{className:`p-3 ${i.seen?"":"bg-slate-50"}`,children:e.jsxs("div",{className:"flex gap-2",children:[e.jsx("div",{className:`shrink-0 w-1 self-stretch rounded ${Es[i.severity]}`,"aria-hidden":"true"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsx("div",{className:"font-medium text-slate-800",children:i.title}),i.dismissible&&i.severity!=="critical"&&e.jsx("button",{type:"button",onClick:()=>a(i),"aria-label":"Dismiss message",className:"text-slate-400 hover:text-slate-700 shrink-0",children:"✕"})]}),e.jsx("div",{className:"mt-1 text-slate-700",children:e.jsx(It,{source:i.bodyMd})}),i.ctaLabel&&i.ctaUrl&&e.jsx("button",{type:"button",onClick:()=>n(i),className:"mt-2 text-[11px] px-2 py-1 bg-brand-500 text-white rounded hover:bg-brand-600",children:i.ctaLabel}),e.jsx("div",{className:"mt-1 text-[10px] text-slate-400",children:new Date(i.createdAt).toLocaleString()})]})]})},i.id))})]})}function _s(){const t=b(i=>i.messages),s=b(i=>i.applyMessageAck),a=t.find(i=>i.severity==="critical"&&!i.acknowledged);if(!a)return null;async function n(){s(a.id,"acknowledged"),await ue(a.id,"acknowledged")}async function r(){a.ctaUrl&&(s(a.id,"clicked"),ue(a.id,"clicked"),chrome.tabs.create({url:a.ctaUrl}).catch(()=>{}))}return e.jsxs("div",{role:"alert",className:`border-y ${Rs.critical} px-3 py-2 text-xs flex items-start gap-2`,children:[e.jsx("span",{"aria-hidden":"true",className:"text-rose-600 text-sm leading-none mt-0.5",children:"⚠"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("div",{className:"font-semibold text-rose-900",children:a.title}),e.jsx("div",{className:"mt-0.5 text-rose-900/90",children:e.jsx(It,{source:a.bodyMd})}),e.jsxs("div",{className:"mt-1.5 flex items-center gap-2",children:[a.ctaLabel&&a.ctaUrl&&e.jsx("button",{type:"button",onClick:r,className:"text-[11px] px-2 py-1 bg-rose-600 text-white rounded hover:bg-rose-700",children:a.ctaLabel}),e.jsx("button",{type:"button",onClick:n,className:"text-[11px] px-2 py-1 border border-rose-300 text-rose-800 rounded hover:bg-rose-100",children:"Acknowledge"})]})]})]})}const fe=["matrix","delta","activity","guided","flows","scorecard","crawl","forensic","compliance"];function Ls(t){if(!t)return null;try{return new URL(t).hostname}catch{return t}}function Us(){var p,u;const t=b(f=>f.view),s=b(f=>f.setView),a=b(f=>f.setUserMode),n=b(f=>f.results),r=b(f=>f.status),[i,o]=g.useState(!1),l=((p=n[0])==null?void 0:p.pageUrl)??((u=n[0])==null?void 0:u.scope),d=Ls(l),m=n.length>0&&r!=="running";function c(){a("owner"),J({type:"SETTINGS_SET",key:"userMode",value:"owner"})}return e.jsxs("header",{className:"border-b border-slate-200 bg-white px-3 py-2",children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"font-semibold text-sm leading-tight",children:"wcagcheckr"}),e.jsxs("p",{className:"text-[10px] text-slate-500 leading-tight font-mono",children:["v",chrome.runtime.getManifest().version]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{type:"button",onClick:c,title:"Switch to the simplified site-owner view",className:"text-[11px] px-2 py-1 border border-slate-300 rounded text-slate-600 hover:bg-slate-50",children:"Owner mode"}),e.jsx(Is,{}),e.jsx(tt,{onClick:()=>void J({type:"OPEN_SETTINGS"}),ariaLabel:"Open settings",children:"⚙"}),e.jsx(tt,{onClick:()=>o(!0),ariaLabel:"Send support message",children:"?"})]})]}),m&&d&&e.jsxs("div",{className:"flex items-center gap-2 mb-2 px-2 py-1 rounded bg-brand-50 border border-brand-200 text-[11px]",title:l??"",children:[e.jsx("span",{className:"text-slate-500 shrink-0",children:"Audit:"}),e.jsx("span",{className:"font-mono font-medium text-slate-800 truncate flex-1","aria-label":`Showing audit results for ${d}`,children:d}),e.jsx("button",{type:"button",onClick:()=>void kt(),className:"shrink-0 text-[11px] px-2 py-0.5 rounded border border-slate-300 bg-white text-slate-700 hover:bg-slate-50 hover:border-slate-400",title:"Clear these results so you can run a fresh audit",children:"Clear"})]}),e.jsx(Ds,{view:t,setView:s}),e.jsx(ke,{open:i,onClose:()=>o(!1),title:"Send support message",children:e.jsx(ys,{onClose:()=>o(!1)})})]})}function Ds({view:t,setView:s}){const a=g.useRef([]);function n(i){var d;const o=(i+fe.length)%fe.length,l=fe[o];l&&(s(l),(d=a.current[o])==null||d.focus())}function r(i,o){switch(i.key){case"ArrowRight":i.preventDefault(),n(o+1);break;case"ArrowLeft":i.preventDefault(),n(o-1);break;case"Home":i.preventDefault(),n(0);break;case"End":i.preventDefault(),n(fe.length-1);break}}return e.jsx("nav",{className:"flex flex-wrap gap-1","aria-label":"Audit views",role:"tablist",children:fe.map((i,o)=>{const l=t===i;return e.jsx("button",{ref:d=>{a.current[o]=d},role:"tab","aria-selected":l,tabIndex:l?0:-1,onClick:()=>s(i),onKeyDown:d=>r(d,o),className:l?"text-xs px-3 py-1 rounded bg-brand-500 text-white":"text-xs px-3 py-1 rounded text-slate-600 hover:bg-slate-100",children:i[0].toUpperCase()+i.slice(1)},i)})})}function Os({feature:t,upgradeUrl:s}){const[a,n]=g.useState(!1);return e.jsxs("div",{className:"p-3 bg-amber-50 border border-amber-200 rounded",children:[e.jsxs("p",{className:"text-xs text-amber-900 mb-2",children:[e.jsx("strong",{children:t})," requires a higher tier."]}),e.jsx("button",{type:"button",onClick:()=>n(!0),className:"text-xs text-brand-600 hover:underline font-medium",children:"Upgrade →"}),e.jsx(Ke,{open:a,onClose:()=>n(!1)})]})}const Fs="https://wcagcheckr.com/upgrade";function Ms(){const[t,s]=g.useState("single-element"),[a,n]=g.useState(!1),[r,i]=g.useState(null),[o,l]=g.useState(null),[d,m]=g.useState(Pe),[c,p]=g.useState(Pe[0].id),u=b(S=>S.status),f=b(S=>S.tier),h=b(S=>S.results.length>0),w=u==="running";g.useEffect(()=>{Promise.all([Q({type:"SETTINGS_GET",key:"matrixPresets"}),Q({type:"SETTINGS_GET",key:"activePresetId"})]).then(([S,B])=>{const A=Array.isArray(S.data)?S.data:null;m(A&&A.length>0?A:Pe),typeof B.data=="string"&&p(B.data)})},[]);function R(S){const B=d.find(A=>A.id===S);B&&(p(S),J({type:"SETTINGS_SET",key:"activePresetId",value:S}),J({type:"SETTINGS_SET",key:"stateMatrix",value:B.matrix}))}const T=wt(f,"storybookAutoIterate");g.useEffect(()=>{const S=ee("ELEMENT_PICKED_EVENT",(A,M)=>{n(!1);const D=M.frameId;j(D),i({selector:A.selector,frameId:D})}),B=ee("PICKER_CANCELLED_EVENT",()=>n(!1));return()=>{S(),B()}},[]);async function x(){const S=await Z();S&&(n(!0),await se(S,{type:"PICKER_ACTIVATE_REQUEST",tabId:S}))}function v(){r&&(j(r.frameId),ce({type:"START_AUDIT",mode:"single-element",scope:r.selector,frameId:r.frameId}),b.getState().startNewScan())}function y(){if(!T){l("storybook:auto-iterate");return}j(),ce({type:"START_AUDIT",mode:"storybook-all"}),b.getState().startNewScan()}function k(){j(),ce({type:"START_AUDIT",mode:"all-frames"}),b.getState().startNewScan()}function I(){j(),ce({type:"START_AUDIT",mode:"full-page"}),b.getState().startNewScan()}function C(){j(),ce({type:"START_AUDIT",mode:"quick-scan"}),b.getState().startNewScan()}function $(){J({type:"CANCEL_AUDIT"})}async function j(S){b.getState().setPinned(null);const B=await Z();if(B)try{await se(B,{type:"HIGHLIGHT_CLEAR_REQUEST",tabId:B},S)}catch{}}return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"px-3 py-2 border-b border-slate-200 bg-white space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsxs("select",{"aria-label":"Audit mode",value:t,onChange:S=>s(S.target.value),disabled:w||a,className:"text-xs border border-slate-300 rounded px-2 py-1",children:[e.jsx("option",{value:"single-element",children:"Single element"}),e.jsx("option",{value:"full-page",children:"Full page"}),e.jsx("option",{value:"quick-scan",children:"Quick scan (markup only, ~1s)"}),e.jsx("option",{value:"all-frames",children:"All iframes"}),e.jsxs("option",{value:"storybook-all",children:["All stories (Storybook / Ladle)",T?"":" (paid)"]})]}),e.jsx("select",{"aria-label":"State-matrix preset",value:c,onChange:S=>R(S.target.value),disabled:w||a,title:"Switch the state-matrix preset used for the next audit",className:"text-xs border border-slate-300 rounded px-2 py-1",children:d.map(S=>e.jsx("option",{value:S.id,children:S.name},S.id))}),t==="single-element"?e.jsx(Ps,{picking:a,picked:r,isRunning:w,onPick:x,onRun:v,onClearPick:()=>i(null)}):t==="full-page"?e.jsx("button",{onClick:I,disabled:w,className:"text-xs px-3 py-1 bg-brand-500 text-white rounded hover:bg-brand-600 disabled:opacity-50",children:w?"Auditing…":"Scan page"}):t==="quick-scan"?e.jsx("button",{onClick:C,disabled:w,className:"text-xs px-3 py-1 bg-brand-500 text-white rounded hover:bg-brand-600 disabled:opacity-50",title:"One-state audit (default · light · ltr · desktop). Catches markup-level findings in ~1 second. Run a Full page audit for hover-only contrast, mobile reflow, RTL bidi.",children:w?"Auditing…":"⚡ Quick scan"}):t==="all-frames"?e.jsx("button",{onClick:k,disabled:w,className:"text-xs px-3 py-1 bg-brand-500 text-white rounded hover:bg-brand-600 disabled:opacity-50",children:w?"Auditing…":"Audit all iframes"}):e.jsx("button",{onClick:y,disabled:w,className:"text-xs px-3 py-1 bg-brand-500 text-white rounded hover:bg-brand-600 disabled:opacity-50",children:w?"Auditing…":"Audit all stories"}),w&&e.jsx("button",{onClick:$,className:"text-xs px-3 py-1 border border-slate-300 text-slate-700 rounded hover:bg-slate-100",children:"Stop"}),!w&&h&&e.jsx("button",{type:"button",onClick:()=>void kt(),className:"text-xs text-slate-500 hover:text-slate-800 hover:underline ml-auto",title:"Clear current results",children:"Clear"})]}),t==="single-element"&&r&&!a&&!w&&e.jsx(Gs,{selector:r.selector,onRepick:x,onClear:()=>i(null)})]}),e.jsx(ke,{open:o!==null,onClose:()=>l(null),title:"Upgrade to continue",children:e.jsx(Os,{feature:o??"",upgradeUrl:Fs})})]})}function Ps({picking:t,picked:s,isRunning:a,onPick:n,onRun:r,onClearPick:i}){return a?e.jsx("button",{disabled:!0,className:"text-xs px-3 py-1 bg-brand-500 text-white rounded opacity-50",children:"Auditing…"}):t?e.jsx("button",{disabled:!0,className:"text-xs px-3 py-1 bg-brand-400 text-white rounded",children:"Click an element on the page"}):s?e.jsx("button",{onClick:r,className:"text-xs px-3 py-1 bg-brand-500 text-white rounded hover:bg-brand-600",children:"Run audit"}):e.jsx("button",{onClick:n,className:"text-xs px-3 py-1 bg-brand-500 text-white rounded hover:bg-brand-600",children:"Pick element"})}function Gs({selector:t,onRepick:s,onClear:a}){return e.jsxs("div",{className:"text-[11px] text-slate-600 flex items-center gap-2 flex-wrap",children:[e.jsx("span",{children:"Selected:"}),e.jsx("code",{className:"font-mono bg-slate-100 px-1.5 py-0.5 rounded text-slate-700 truncate max-w-[180px]",title:t,children:t}),e.jsx("button",{type:"button",onClick:s,className:"text-brand-600 hover:underline",children:"Re-pick"}),e.jsx("span",{"aria-hidden":"true",className:"text-slate-300",children:"·"}),e.jsx("button",{type:"button",onClick:a,className:"text-slate-500 hover:text-slate-700 hover:underline",children:"Clear"})]})}const Vs={outline:"OUTLINE_HIDE_REQUEST","tab-order":"TAB_ORDER_HIDE_REQUEST","reading-order":"READING_ORDER_HIDE_REQUEST","target-size":"TARGET_SIZE_HIDE_REQUEST"},Bs={outline:"OUTLINE_SHOW_REQUEST","tab-order":"TAB_ORDER_SHOW_REQUEST","reading-order":"READING_ORDER_SHOW_REQUEST","target-size":"TARGET_SIZE_SHOW_REQUEST"};function Ws(){const[t,s]=g.useState(null),[a,n]=g.useState(!1),[r,i]=g.useState(null),[o,l]=g.useState("off"),m=b(f=>f.results).flatMap(f=>f.violations);async function c(f){const h=await Z();h&&(l(f),f==="off"?await se(h,{type:"VISION_SIMULATOR_CLEAR",tabId:h}).catch(()=>{}):await se(h,{type:"VISION_SIMULATOR_APPLY",tabId:h,mode:f}).catch(()=>{}))}async function p(f){const h=await Z();if(h){if(t&&await se(h,{type:Vs[t],tabId:h}).catch(()=>{}),t===f){s(null);return}await se(h,{type:Bs[f],tabId:h}).catch(()=>{}),s(f)}}async function u(){const f=await Z();if(f){if(a){await se(f,{type:"FIX_PREVIEW_HIDE_REQUEST",tabId:f}).catch(()=>{}),n(!1),i(null);return}if(m.length===0){i("Run an audit first.");return}try{const h=await Ie(f,{type:"FIX_PREVIEW_SHOW_REQUEST",tabId:f,violations:m});n(!0),i(`Previewing ${h.visualFixCount} visual fix${h.visualFixCount===1?"":"es"} + ${h.annotationCount} annotation${h.annotationCount===1?"":"s"}.`)}catch{i("Preview failed.")}}}return e.jsxs("div",{className:"px-3 py-2 border-b border-slate-200 bg-white flex items-center gap-2 flex-wrap",children:[e.jsx("span",{className:"text-[11px] uppercase tracking-wide text-slate-500 mr-1",title:"Page overlays — these draw information on the live page. They do NOT change what the audit detects.",children:"Visualizers"}),e.jsx(ge,{label:"Outline",title:"Show heading + landmark structure overlay",on:t==="outline",onClick:()=>p("outline")}),e.jsx(ge,{label:"Tab order",title:"Number focusables in tab sequence. Red = tab order doesn't follow visual layout (focus jumps around). Amber = positive tabindex reordered the DOM sequence.",on:t==="tab-order",onClick:()=>p("tab-order")}),e.jsx(ge,{label:"Reading order",title:"Number content in DOM order (what a screen reader reads). Red = element's DOM position differs from its visual position; badge shows DOM→Visual.",on:t==="reading-order",onClick:()=>p("reading-order")}),e.jsx(ge,{label:"Targets",title:"Show interactive-element dimensions vs WCAG 2.5.8 (24px AA) / 2.5.5 (44px AAA)",on:t==="target-size",onClick:()=>p("target-size")}),e.jsx("span",{className:"w-px h-4 bg-slate-200 mx-1","aria-hidden":"true"}),e.jsx(ge,{label:"Preview fixes ✨",title:"Apply contrast/target-size/focus-ring fixes to the live page + annotate where labels and alt text are missing. Toggle off to revert.",on:a,onClick:u}),e.jsx("span",{className:"w-px h-4 bg-slate-200 mx-1","aria-hidden":"true"}),e.jsxs("label",{className:"text-[11px] text-slate-700 flex items-center gap-1.5",children:[e.jsx("span",{title:"Apply a CSS filter that simulates how the page looks for users with color-vision or low-vision impairments. Visual only — does NOT change what the audit detects.",children:"Vision sim:"}),e.jsxs("select",{"aria-label":"Vision-impairment simulator",value:o,onChange:f=>void c(f.target.value),className:`text-xs border rounded px-1.5 py-0.5 ${o==="off"?"border-slate-300 bg-white text-slate-700":"border-brand-500 bg-brand-50 text-brand-700 font-medium"}`,children:[e.jsx("option",{value:"off",children:"Off"}),e.jsxs("optgroup",{label:"Color blindness",children:[e.jsx("option",{value:"deuteranomaly",children:"Deuteranomaly (green-weak — most common)"}),e.jsx("option",{value:"deuteranopia",children:"Deuteranopia (green-blind)"}),e.jsx("option",{value:"protanomaly",children:"Protanomaly (red-weak)"}),e.jsx("option",{value:"protanopia",children:"Protanopia (red-blind)"}),e.jsx("option",{value:"tritanomaly",children:"Tritanomaly (blue-weak)"}),e.jsx("option",{value:"tritanopia",children:"Tritanopia (blue-blind)"}),e.jsx("option",{value:"achromatomaly",children:"Achromatomaly (partial color blindness)"}),e.jsx("option",{value:"achromatopsia",children:"Achromatopsia (no color)"})]}),e.jsxs("optgroup",{label:"Low vision",children:[e.jsx("option",{value:"cataract",children:"Cataract (blur)"}),e.jsx("option",{value:"low-contrast",children:"Low contrast sensitivity"}),e.jsx("option",{value:"glaucoma",children:"Glaucoma (tunnel vision)"}),e.jsx("option",{value:"macular",children:"Macular degeneration (central loss)"})]})]})]}),r&&e.jsx("span",{className:"text-[11px] text-slate-500 basis-full",children:r})]})}function ge({label:t,title:s,on:a,onClick:n}){return e.jsx("button",{type:"button",title:s,"aria-pressed":a,onClick:n,className:`text-xs px-2 py-1 rounded border transition-colors ${a?"bg-brand-500 text-white border-brand-500 hover:bg-brand-600":"bg-white text-slate-700 border-slate-300 hover:bg-slate-50"}`,children:t})}function Hs(t){if(!t)return"";const s=[t.pseudoState];return t.theme!=="light"&&s.push(t.theme),t.direction!=="ltr"&&s.push(t.direction),s.join(" · ")}function zs(){const t=b(m=>m.status),s=b(m=>m.progress),a=b(m=>m.aiProgress);if(t!=="running"||!s)return null;const n=a!=null,r=!n&&s.current>=s.total,i=n?a.current/a.total*100:s.current/s.total*100,o=n?a.current:s.current,l=n?a.total:s.total,d=n?`AI augmentation: ${a.current} of ${a.total} checks. ${a.currentCheckLabel}`:r?"Running deep analyzers: reading order, tab order, typography, custom properties, AI candidates.":`Audit progress: ${s.current} of ${s.total} states`;return e.jsxs("div",{className:"px-3 py-2 bg-slate-100 border-b border-slate-200",children:[e.jsxs("div",{className:"flex justify-between items-center gap-2 text-xs text-slate-600 mb-1",children:[e.jsx("span",{children:n?e.jsxs(e.Fragment,{children:["AI augmentation… ",a.current,"/",a.total]}):r?e.jsx(e.Fragment,{children:"Running deep analyzers…"}):e.jsxs(e.Fragment,{children:["Auditing… ",s.current,"/",s.total]})}),e.jsx("span",{className:"text-slate-500 truncate flex-1",children:n?a.candidatesTotal&&a.candidatesTotal>0?`${a.currentCheckLabel} (${a.candidatesDone??0}/${a.candidatesTotal})`:a.currentCheckLabel:r?"reading order · tab order · typography · CSS vars · AI candidates":Hs(s.currentState)}),e.jsx("button",{type:"button",onClick:()=>void J({type:"CANCEL_AUDIT"}),className:"text-[11px] px-2 py-0.5 border border-slate-400 bg-white text-slate-700 rounded hover:bg-slate-200 shrink-0",children:"Stop"})]}),e.jsx("div",{className:`h-1 rounded-full overflow-hidden ${n?"bg-violet-100":"bg-slate-200"}`,role:"progressbar","aria-valuenow":o,"aria-valuemin":0,"aria-valuemax":l,"aria-label":d,children:e.jsx("div",{className:`h-full transition-all ${n?"bg-violet-500":"bg-brand-500"}`,style:{width:`${i}%`}})})]})}const be={"ada-iii":{id:"ada-iii",name:"ADA Title III",region:"US",blurb:"US civil-rights law; courts treat WCAG 2.1 AA as the de facto digital standard."},508:{id:"508",name:"Section 508",region:"US federal",blurb:"US federal procurement requirement; references WCAG 2.0 AA via 36 CFR Part 1194."},eaa:{id:"eaa",name:"EAA",region:"EU",blurb:"European Accessibility Act, in force 2025-06-28; references EN 301 549 → WCAG 2.1 AA."},"en-301-549":{id:"en-301-549",name:"EN 301 549",region:"EU",blurb:"European harmonized accessibility standard, baseline WCAG 2.1 AA."},aoda:{id:"aoda",name:"AODA",region:"Ontario",blurb:"Accessibility for Ontarians with Disabilities Act; WCAG 2.0 AA required since 2021."}};function Ks(t){return/^wcag\d/.test(t.wcagCriterion)?[be["ada-iii"],be[508],be.eaa,be["en-301-549"],be.aoda]:[]}const qs={minor:"bg-blue-100 text-blue-700",moderate:"bg-yellow-100 text-yellow-700",serious:"bg-orange-100 text-orange-700",critical:"bg-red-100 text-red-700"};function Ue({violation:t,alreadyAcknowledged:s}){const a=b(x=>x.pinnedMatchKey),n=b(x=>x.pinnedFound),r=b(x=>x.setPinned),i=b(x=>{var v;return(v=x.results[0])==null?void 0:v.frameId}),o=b(x=>{var v;return(v=x.results[0])==null?void 0:v.scope}),l=b(x=>x.results),d=b(x=>x.acknowledgedKeys.has(t.matchKey)),m=b(x=>x.markAcknowledged),c=b(x=>x.markUnacknowledged),p=s||d,u=a===t.matchKey,f=u&&!n;async function h(x){try{return(await Ie(x,{type:"HIGHLIGHT_SHOW_REQUEST",tabId:x,selector:t.target.selector},i)).found}catch{return!0}}async function w(){const x=await Z();if(!x)return;if(u){r(null);try{await se(x,{type:"HIGHLIGHT_CLEAR_REQUEST",tabId:x},i)}catch{}return}const v=await h(x);r(t.matchKey,v)}function R(x){x.stopPropagation(),t.currentState.breakpoint.width<=640&&Ct(),(async()=>{const v=await Z();if(!v)return;try{await Q({type:"STATE_DRIVE_REQUEST",tabId:v,state:t.currentState,scope:o,frameId:i})}catch{}const y=await h(v);r(t.matchKey,y)})()}async function T(x){x.stopPropagation();const v=await Z();if(!v)return;try{await Q({type:"STATE_DRIVE_REQUEST",tabId:v,state:Xs(),scope:o,frameId:i})}catch{J({type:"STATE_RESET_REQUEST",tabId:v})}const y=await h(v);r(t.matchKey,y)}return e.jsxs("button",{type:"button",onClick:w,"aria-pressed":u,className:`w-full text-left border rounded p-2 bg-white block transition-shadow
3
3
  ${u?"border-rose-400 ring-2 ring-rose-300":"border-slate-200 hover:border-slate-300"}`,children:[e.jsxs("div",{className:"flex items-start justify-between mb-1 gap-2",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"font-medium text-xs truncate",children:t.ruleId}),e.jsxs("div",{className:"text-xs text-slate-500",children:[t.wcagCriterion," · ",t.wcagLevel]})]}),e.jsxs("div",{className:"flex items-center gap-1 shrink-0",children:[t.flakyAcrossRuns&&e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-amber-100 text-amber-700",title:"Did not appear in every audit run — likely a transient environment artifact",children:"flaky"}),e.jsx("span",{className:`text-[10px] px-1.5 py-0.5 rounded ${qs[t.impact]}`,children:t.impact})]})]}),e.jsx("p",{className:"text-xs text-slate-700 mb-2",children:t.description}),e.jsx("code",{className:"text-[11px] bg-slate-50 p-1.5 rounded block text-slate-600 font-mono whitespace-pre-wrap break-all",children:t.target.outerHTML}),e.jsx(Zs,{violation:t}),e.jsx(sa,{violation:t}),e.jsx(ta,{violation:t}),e.jsx(ea,{text:t.target.failureSummary}),e.jsx(aa,{ruleId:t.ruleId}),u&&e.jsxs("div",{className:"text-[11px] text-slate-600 mt-2 flex flex-wrap items-center gap-x-2 gap-y-1",children:[e.jsxs("span",{children:["State: ",Qs(t.currentState)]}),e.jsx("span",{"aria-hidden":"true",children:"·"}),e.jsx("a",{role:"button",tabIndex:0,onClick:R,onKeyDown:x=>{(x.key==="Enter"||x.key===" ")&&(x.preventDefault(),R(x))},className:"text-brand-600 hover:underline cursor-pointer",children:"Load state"}),e.jsx("span",{"aria-hidden":"true",children:"·"}),e.jsx("a",{role:"button",tabIndex:0,onClick:T,onKeyDown:x=>{(x.key==="Enter"||x.key===" ")&&(x.preventDefault(),T(x))},className:"text-brand-600 hover:underline cursor-pointer",children:"Load default"}),f&&e.jsx("span",{className:"text-amber-700 basis-full",children:"Couldn't find this element on the page. The story may have re-rendered or unmounted."})]}),t.needsReview&&e.jsx("div",{className:"mt-2 flex items-center gap-2 text-xs",children:p?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"inline-flex items-center gap-1 text-[10px] px-1.5 py-0.5 rounded bg-emerald-100 text-emerald-800 font-semibold",children:"✓ Acknowledged"}),e.jsx("span",{role:"button",tabIndex:0,onClick:x=>{x.stopPropagation(),c(t.matchKey),Ys(t,l)},onKeyDown:x=>{(x.key==="Enter"||x.key===" ")&&(x.preventDefault(),x.target.click())},className:"text-slate-600 hover:text-slate-900 hover:underline cursor-pointer",children:"Un-acknowledge"})]}):e.jsx("span",{role:"button",tabIndex:0,onClick:x=>{x.stopPropagation(),m(t.matchKey),Js(t,l)},onKeyDown:x=>{(x.key==="Enter"||x.key===" ")&&(x.preventDefault(),x.target.click())},title:"Mark this finding as 'reviewed, not an issue.' It won't appear in future audits unless the content changes.",className:"px-2 py-0.5 border border-slate-300 bg-white text-slate-700 rounded hover:bg-slate-50 cursor-pointer",children:"Acknowledge as not an issue"})}),t.helpUrl&&e.jsx("a",{href:t.helpUrl,target:"_blank",rel:"noreferrer",onClick:x=>x.stopPropagation(),className:"text-xs text-brand-600 hover:underline mt-2 inline-block",children:"Learn more →"})]})}function Qs(t){const s=[];return s.push(t.pseudoState==="default"?"default":`:${t.pseudoState}`),t.theme!=="light"&&s.push(t.theme),t.direction!=="ltr"&&s.push(t.direction),t.breakpoint.id!=="desktop"&&s.push(t.breakpoint.id),t.ariaVariation&&s.push(t.ariaVariation.id),s.join(" · ")}async function Js(t,s){await zt({componentId:t.componentId,matchKey:t.matchKey,ruleId:t.ruleId}),await Tt(t.componentId,s)}async function Ys(t,s){await Ht(t.componentId,t.matchKey),await Tt(t.componentId,s)}async function Tt(t,s){const a=s.flatMap(n=>n.violations);try{const n=await Q({type:"BASELINE_COMPARE",componentId:t,currentViolations:a});b.getState().setDelta(n.delta)}catch{}}function Xs(){const t=jt.breakpointPresets;return{pseudoState:"default",ariaVariation:null,theme:"light",direction:"ltr",breakpoint:t.find(a=>a.id==="desktop")??t[0]}}function $t(t){if(t.ruleId!=="color-contrast"&&t.ruleId!=="color-contrast-enhanced")return null;const s=t.target.failureSummary||"",a=/contrast of (\d+(?:\.\d+)?)/i.exec(s),n=/Expected contrast ratio of (\d+(?:\.\d+)?):1/i.exec(s),r=/foreground color:\s*(#[0-9a-fA-F]+)/i.exec(s),i=/background color:\s*(#[0-9a-fA-F]+)/i.exec(s);return!a||!n?null:{ratio:parseFloat(a[1]),required:parseFloat(n[1]),fg:(r==null?void 0:r[1])??"#000000",bg:(i==null?void 0:i[1])??"#ffffff"}}function Zs({violation:t}){const s=$t(t);if(!s)return null;const a=s.ratio>=s.required;return e.jsxs("div",{className:"mt-2 flex items-center gap-2 text-[11px]",children:[e.jsx("div",{className:"flex items-center justify-center w-9 h-6 rounded border border-slate-300",style:{background:s.bg,color:s.fg},title:`fg ${s.fg} on bg ${s.bg}`,children:"Aa"}),e.jsxs("span",{className:a?"text-green-700":"text-rose-700 font-medium",children:[s.ratio.toFixed(2)," : 1"]}),e.jsxs("span",{className:"text-slate-500",children:["needs ",s.required.toFixed(1)," : 1"]})]})}function ea({text:t}){return t?e.jsxs("details",{className:"mt-2",children:[e.jsx("summary",{className:"text-[11px] text-slate-500 cursor-pointer hover:text-slate-700",children:"Show failure detail"}),e.jsx("pre",{className:"text-[11px] text-slate-600 whitespace-pre-wrap mt-1 bg-slate-50 p-1.5 rounded",children:t})]}):null}function ta({violation:t}){const s=Ks(t);return s.length===0?null:e.jsx("div",{className:"mt-2 flex flex-wrap gap-1",children:s.map(a=>e.jsx("span",{title:`${a.region} — ${a.blurb}`,className:"text-[10px] px-1.5 py-0.5 rounded bg-slate-100 text-slate-600 border border-slate-200",children:a.name},a.id))})}function sa({violation:t}){const s=$t(t),[a,n]=g.useState({kind:"idle"});if(!s)return null;async function r(){n({kind:"loading"});try{const i=t.ruleId==="color-contrast-enhanced"?"AAA":"AA",o=await Q({type:"AI_COLOR_SUGGEST_REQUEST",inputs:[{matchKey:t.matchKey,foreground:s.fg,background:s.bg,fontSize:16,fontWeight:400,targetLevel:i}]}),l=o.results.find(d=>d.matchKey===t.matchKey);n(l?{kind:"ready",suggestion:l}:{kind:"empty",reason:o.unavailableReason??"AI returned no suggestions for this contrast pair."})}catch(i){n({kind:"empty",reason:i instanceof Error?i.message:String(i)})}}return e.jsxs("div",{className:"mt-2",children:[a.kind==="idle"&&e.jsx("button",{type:"button",onClick:i=>{i.stopPropagation(),r()},className:"text-[11px] px-2 py-1 rounded border border-brand-300 bg-brand-50 text-brand-700 hover:bg-brand-100 font-medium",title:"Ask the configured AI for in-palette color replacements that pass WCAG contrast.",children:"✨ AI fix suggestions"}),a.kind==="loading"&&e.jsx("span",{className:"text-[11px] text-slate-500",children:"Asking AI for color suggestions…"}),a.kind==="empty"&&e.jsx("p",{className:"text-[11px] text-slate-500 bg-slate-50 border border-slate-200 rounded p-2",children:a.reason}),a.kind==="ready"&&e.jsxs("div",{className:"border border-brand-200 rounded bg-brand-50 p-2 space-y-2",children:[e.jsxs("p",{className:"text-[11px] text-brand-900 font-medium",children:["AI suggestions (",a.suggestion.suggestions.length,")"]}),e.jsx("ul",{className:"space-y-1.5",children:a.suggestion.suggestions.map((i,o)=>e.jsxs("li",{className:"flex items-start gap-2 text-[11px]",children:[e.jsx("div",{className:"flex items-center justify-center w-9 h-6 rounded border border-slate-300 shrink-0",style:{background:i.background,color:i.foreground},title:`fg ${i.foreground} on bg ${i.background}`,children:"Aa"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-baseline gap-1.5",children:[e.jsx("code",{className:"font-mono",children:i.foreground}),e.jsx("span",{className:"text-slate-500",children:"on"}),e.jsx("code",{className:"font-mono",children:i.background}),e.jsxs("span",{className:"text-emerald-700 font-medium",children:[i.contrast.toFixed(2)," : 1"]})]}),i.rationale&&e.jsx("p",{className:"text-slate-600 mt-0.5",children:i.rationale})]})]},o))}),a.suggestion.reasoning&&e.jsx("p",{className:"text-[10px] text-slate-500 italic",children:a.suggestion.reasoning})]})]})}function aa({ruleId:t}){const s=Kt(t);return s?e.jsxs("details",{className:"mt-2",children:[e.jsx("summary",{className:"text-[11px] text-emerald-700 cursor-pointer hover:text-emerald-900 font-medium",children:"How to fix"}),e.jsxs("div",{className:"mt-1 bg-emerald-50 border border-emerald-200 rounded p-2 space-y-2",children:[e.jsx("p",{className:"text-[11px] text-slate-700 leading-relaxed",children:s.summary}),s.snippet&&e.jsx("pre",{className:"text-[11px] text-slate-700 bg-white p-1.5 rounded border border-emerald-100 overflow-x-auto",children:e.jsx("code",{children:s.snippet})})]})]}):null}const na=[{id:"contrast",label:"Color & contrast",axeRules:["color-contrast","color-contrast-enhanced","link-in-text-block"],igtWorkflowIds:["visual-indicators"]},{id:"alt-text",label:"Alt text",axeRules:["image-alt","input-image-alt","object-alt","svg-img-alt","area-alt","role-img-alt"],igtWorkflowIds:[]},{id:"forms",label:"Forms",axeRules:["label","select-name","aria-input-field-name","aria-toggle-field-name","form-field-multiple-labels","label-content-name-mismatch","autocomplete-valid","label-title-only","wcc-onfocus-context-change","wcc-oninput-context-change","wcc-cognitive-auth-challenge"],igtWorkflowIds:["forms"]},{id:"keyboard",label:"Keyboard",axeRules:["nested-interactive","tabindex","frame-focusable-content","no-focusable-content","focus-order-semantics","wcc-gesture-no-alternative","wcc-drag-no-alternative"],igtWorkflowIds:["keyboard","focus-management"]},{id:"tab-order",label:"Tab order",axeRules:[],igtWorkflowIds:[],verifiedByWorkflowIds:["keyboard"],heuristic:"tab-order"},{id:"screen-reader",label:"Screen reader / ARIA",axeRules:["aria-allowed-attr","aria-required-attr","aria-required-children","aria-required-parent","aria-roles","aria-valid-attr-value","aria-valid-attr","aria-hidden-body","aria-hidden-focus","button-name","input-button-name","link-name","frame-title","presentation-role-conflict","aria-allowed-role","aria-prohibited-attr","aria-text","aria-deprecated-role","aria-conditional-attr","aria-braille-equivalent","empty-button","empty-heading","empty-link"],igtWorkflowIds:["screen-reader"]},{id:"reading-order",label:"Reading order",axeRules:[],igtWorkflowIds:[],verifiedByWorkflowIds:["page-structure"],heuristic:"reading-order"},{id:"page-structure",label:"Page structure",axeRules:["heading-order","page-has-heading-one","landmark-one-main","landmark-no-duplicate-banner","landmark-no-duplicate-contentinfo","landmark-no-duplicate-main","region","bypass","empty-table-header","landmark-banner-is-top-level","landmark-complementary-is-top-level","landmark-contentinfo-is-top-level","landmark-main-is-top-level","landmark-unique"],igtWorkflowIds:["page-structure"]}];function ra(t){const s=na.map(i=>ia(i,t)),a=s.reduce((i,o)=>i+oa(o.letter),0)/Math.max(1,s.length),n=la(Math.round(a)),r=s.filter(i=>i.letter==="D"||i.letter==="F");return{overallLetter:n,subGrades:s,warningAreas:r,isLawsuitRisk:r.length>0}}function ia(t,s){const a=new Set(t.axeRules),n=s.violations.filter(C=>a.has(C.ruleId)),r=s.manualRuns.filter(C=>t.igtWorkflowIds.includes(C.workflowId)),i=t.igtWorkflowIds.map(C=>s.workflows.find($=>$.id===C)).filter(C=>C!=null);let o=i.length>0;for(const C of i){const $=r.find(S=>S.workflowId===C.id);if(($?Object.keys($.steps).length:0)!==C.steps.length){o=!1;break}}const l=r.some(C=>Object.keys(C.steps).length>0),d=t.verifiedByWorkflowIds??[],m=s.manualRuns.filter(C=>d.includes(C.workflowId)),c=d.map(C=>s.workflows.find($=>$.id===C)).filter(C=>C!=null);let p=d.length>0&&c.length===d.length;for(const C of c){const $=m.find(S=>S.workflowId===C.id);if(($?Object.keys($.steps).length:0)!==C.steps.length){p=!1;break}}let u=null;if(p)for(const C of m)C.completedAt&&(u===null||C.completedAt>u)&&(u=C.completedAt);const f=t.heuristic==="tab-order"?s.heuristicCounts.tabOrder??0:t.heuristic==="reading-order"?s.heuristicCounts.readingOrder??0:0,h=d[0]??t.igtWorkflowIds[0]??null;if(p&&d.length>0)return{id:t.id,label:t.label,letter:"A",untested:!1,needsIgt:!1,igtCompleted:!0,verifiedByIgt:!0,verifiedAt:u,suppressedHeuristicCount:f,primaryVerifierWorkflowId:h,counts:{critical:0,serious:0,moderate:0,minor:0},caps:{cappedAtC:!1,cappedAtB:!1}};const w=t.axeRules.length>0||t.heuristic!=null,R=t.igtWorkflowIds.length>0;if(w?!s.auditRan:!l)return{id:t.id,label:t.label,letter:"F",untested:!0,needsIgt:R||d.length>0,igtCompleted:!1,verifiedByIgt:!1,verifiedAt:null,suppressedHeuristicCount:0,primaryVerifierWorkflowId:h,counts:{critical:0,serious:0,moderate:0,minor:0},caps:{cappedAtC:!1,cappedAtB:!1}};const x={critical:0,serious:0,moderate:0,minor:0};for(const C of bt(n))x[C.impact]++;x.serious+=f;for(const C of r){const $=i.find(j=>j.id===C.workflowId);if($)for(const j of $.steps){const S=C.steps[j.id];(S==null?void 0:S.status)==="fail"&&(j.severity==="required"?x.serious++:x.moderate++)}}const v=x.critical>0,y=x.serious>0;let k;x.critical>=5?k="F":x.critical>=1?k="D":x.serious>=1?k="C":x.moderate>=1?k="B":k="A";const I=k!=="A"&&(R&&!o||d.length>0&&!p);return{id:t.id,label:t.label,letter:k,untested:!1,needsIgt:I,igtCompleted:o,verifiedByIgt:!1,verifiedAt:null,suppressedHeuristicCount:0,primaryVerifierWorkflowId:h,counts:x,caps:{cappedAtC:v,cappedAtB:y}}}function oa(t){return t==="A"?4:t==="B"?3:t==="C"?2:t==="D"?1:0}function la(t){return t>=4?"A":t>=3?"B":t>=2?"C":t>=1?"D":"F"}const ca={A:"bg-emerald-500",B:"bg-lime-500",C:"bg-yellow-500",D:"bg-orange-500",F:"bg-rose-600"},da={A:"bg-emerald-500 text-white",B:"bg-lime-500 text-white",C:"bg-yellow-500 text-slate-900",D:"bg-orange-500 text-white",F:"bg-rose-600 text-white"};function ua({violations:t,componentId:s}){var K,te,q,ae,ne,G,Se;const[a,n]=g.useState([]),[r,i]=g.useState([]),[o,l]=g.useState(new Set),[d,m]=g.useState(null),[c,p]=g.useState({}),[u,f]=g.useState(new Set),h=b(_=>_.status),w=b(_=>_.progress),R=b(_=>_.freshThisSession),T=b(_=>_.results),x=(K=T[0])==null?void 0:K.startedAt,v=((te=T[0])==null?void 0:te.pageUrl)??((q=T[0])==null?void 0:q.scope)??null;if(g.useEffect(()=>{if(!s){n([]);return}let _=!1;return chrome.storage.local.get("igtRuns").then(W=>{if(_)return;const U=((W==null?void 0:W.igtRuns)??{})[s]??{};n(Object.values(U))}),()=>{_=!0}},[s]),g.useEffect(()=>{if(!v){i([]);return}let _=!1;return Ce(v).then(W=>{_||i(W)}),()=>{_=!0}},[v]),h==="running")return e.jsx(ba,{current:w==null?void 0:w.current,total:w==null?void 0:w.total});const y=ra({violations:t,auditRan:T.length>0,manualRuns:a,workflows:Y,heuristicCounts:{tabOrder:((ne=(ae=T[0])==null?void 0:ae.tabOrderIssues)==null?void 0:ne.length)??0,readingOrder:((Se=(G=T[0])==null?void 0:G.readingOrderIssues)==null?void 0:Se.length)??0}}),k=b(_=>_.acknowledgedKeys),I=T.length>0?qt(T,{runs:a,workflows:Y},"2.1","AA",k,r):void 0,C=T.length>0?Qt(vt({audits:T,igtRuns:a,workflows:Y,acknowledgedMatchKeys:k,incompleteResolutions:r}),Y):void 0,$=I?I.failingCriteria.length>0||I.inconclusiveCriteria.length>0:!1,j=$&&y.overallLetter==="A"?"B":y.overallLetter;async function S(_){var H;if(!v||!((H=I==null?void 0:I.inconclusiveReasons)!=null&&H[_]))return;const N=I.inconclusiveReasons[_].filter(V=>V.source==="axe-incomplete"&&V.elements&&V.elements.length>0);if(N.length===0)return;l(V=>new Set(V).add(_)),m(null);const U=[];let L=0;try{for(const O of N){const z=await J({type:"AI_RESOLVE_INCOMPLETE_REQUEST",ruleId:O.ruleOrStepId,pageUrl:O.pageUrl??v,wcagCriterion:_,elements:O.elements??[],targetLevel:"AA"});if(z!=null&&z.unavailableReason){m(z.unavailableReason);break}z!=null&&z.resolutions&&(U.push(...z.resolutions),L+=z.totalCostUsd??0)}if(v){const O=await Ce(v);i(O)}const V={total:U.length,pass:U.filter(O=>O.verdict==="pass").length,fail:U.filter(O=>O.verdict==="fail").length,uncertain:U.filter(O=>O.verdict==="uncertain").length,costUsd:L,resolutions:U};p(O=>({...O,[_]:V}))}finally{l(V=>{const O=new Set(V);return O.delete(_),O})}}function B(_){f(W=>{const N=new Set(W);return N.has(_)?N.delete(_):N.add(_),N})}async function A(_){var z,he;if(!v)return;const W=((z=I==null?void 0:I.inconclusiveReasons)==null?void 0:z[_])??[],N=((he=I==null?void 0:I.failingReasons)==null?void 0:he[_])??[],U=[],L=new Set;for(const P of W){if(P.source!=="axe-incomplete"||!P.elements)continue;const re=P.pageUrl??v;for(const ie of P.elements){const xe=`${re}::${P.ruleOrStepId}::${ie.selector}`;L.has(xe)||(L.add(xe),U.push({ruleId:P.ruleOrStepId,pageUrl:re,selector:ie.selector}))}}for(const P of N){if(P.source!=="ai"||!P.selector)continue;const re=P.ruleOrStepId.startsWith("ai-resolved::")?P.ruleOrStepId.slice(13):P.ruleOrStepId,ie=P.pageUrl??v,xe=`${ie}::${re}::${P.selector}`;L.has(xe)||(L.add(xe),U.push({ruleId:re,pageUrl:ie,selector:P.selector}))}if(U.length===0)return;const H=new Date().toISOString(),V=[];for(const P of U){const re=r.find(ie=>ie.pageUrl===P.pageUrl&&ie.ruleId===P.ruleId&&ie.selector===P.selector);re&&re.verdict==="pass"&&re.reasoning.startsWith("Marked as visually verified")||V.push({pageUrl:P.pageUrl,ruleId:P.ruleId,selector:P.selector,verdict:"pass",reasoning:`Marked as visually verified by user on ${H.slice(0,10)}.`,resolvedAt:H,costUsd:0,wcagCriterion:_})}if(V.length===0)return;await Jt(V);const O=await Ce(v);i(O),p(P=>({...P,[_]:{total:V.length,pass:V.length,fail:0,uncertain:0,costUsd:0,resolutions:V}}))}const M=(()=>{if(!$||y.overallLetter!=="A"||!I)return null;const _=I.inconclusiveCriteria.length,W=I.failingCriteria.length,N=[];W>0&&N.push(`${W} WCAG ${I.targetLevel} ${W===1?"criterion":"criteria"} failing`),_>0&&N.push(`${_} WCAG ${I.targetLevel} ${_===1?"criterion":"criteria"} inconclusive`);const U=W>0?"Fix the failing items OR Mark visually verified if AI was wrong about them.":"Resolve axe-incomplete + IGT-skip items to claim conformance.";return`Capped at B — ${N.join(" + ")}. ${U}`})();let D=0;for(const _ of Y){const W=a.find(U=>U.workflowId===_.id);if(!W)continue;_.steps.every(U=>{const L=W.steps[U.id];return(L==null?void 0:L.status)==="pass"||(L==null?void 0:L.status)==="fail"||(L==null?void 0:L.status)==="skip"||(L==null?void 0:L.status)==="not-applicable"})&&D++}const X=bt(t.filter(_=>!k.has(_.matchKey))).length;return e.jsxs("div",{className:"border border-slate-200 rounded-lg bg-white overflow-hidden",children:[!R&&x&&e.jsx(va,{scannedAt:x}),e.jsxs("div",{className:"flex",children:[e.jsx("div",{className:`flex items-center justify-center w-24 ${ca[j]} text-white shrink-0`,children:e.jsx("span",{className:"text-5xl font-bold leading-none",children:j})}),e.jsxs("div",{className:"flex-1 p-3 space-y-1",children:[e.jsx("p",{className:"text-xs font-semibold text-slate-900",children:"Overall grade"}),e.jsxs("p",{className:"text-[11px] text-slate-600 leading-snug",children:["Mean of ",y.subGrades.length," verification areas below. Untested areas count as F until verified."]}),M&&e.jsx("p",{className:"text-[11px] text-amber-800 leading-snug mt-1 bg-amber-50 border border-amber-200 rounded px-2 py-1",children:M})]})]}),y.isLawsuitRisk&&e.jsx(ha,{areas:y.warningAreas}),e.jsx(xa,{grades:y.subGrades}),I&&e.jsx(pa,{coverage:I,onResolveWithAi:S,onMarkVisuallyVerified:A,resolving:o,resolveError:d,lastResolveResult:c,expandedResultFor:u,onToggleResultDetail:B}),C&&e.jsx(ma,{layers:C}),e.jsx(ga,{violationsRemaining:X,manualCompleted:D,manualTotal:Y.length}),D>0||T.length>0?e.jsxs("div",{className:"border-t border-slate-200 px-3 py-2 bg-slate-50",children:[e.jsx("p",{className:"text-[11px] uppercase tracking-wide text-slate-500 mb-1.5",children:"Manual coverage (Guided Tests)"}),e.jsxs("div",{className:"text-[11px] text-slate-700 mb-1.5",children:[e.jsx("strong",{children:D})," of ",e.jsx("strong",{children:Y.length})," workflows complete"]}),e.jsx("div",{className:"flex h-1 bg-slate-200 rounded-full overflow-hidden",children:e.jsx("div",{className:"bg-emerald-500",style:{width:`${D/Y.length*100}%`}})})]}):null]})}function pa({coverage:t,onResolveWithAi:s,onMarkVisuallyVerified:a,resolving:n,resolveError:r,lastResolveResult:i,expandedResultFor:o,onToggleResultDetail:l}){const d=t.untestedCriteria.length+t.inconclusiveCriteria.length,[m,c]=g.useState(d>0&&d<=3),p=t.totalApplicable===0?0:Math.round(t.evaluated/t.totalApplicable*100),u=t.canClaimConformance,f=[];return t.failingCriteria.length>0&&f.push({kind:"failing",ids:t.failingCriteria}),t.inconclusiveCriteria.length>0&&f.push({kind:"inconclusive",ids:t.inconclusiveCriteria}),t.untestedCriteria.length>0&&f.push({kind:"untested",ids:t.untestedCriteria}),e.jsxs("div",{className:`border-t ${u?"border-emerald-200 bg-emerald-50":"border-amber-200 bg-amber-50"} px-3 py-2 text-[11px] leading-snug`,children:[e.jsxs("div",{className:`flex items-center justify-between gap-2 ${u?"text-emerald-900":"text-amber-900"}`,children:[e.jsxs("div",{children:[e.jsxs("span",{className:"font-semibold",children:["WCAG ",t.targetVersion," ",t.targetLevel," coverage:"," ",t.evaluated," of ",t.totalApplicable," criteria evaluated (",p,"%)"]}),u&&e.jsxs("p",{className:"text-[11px] mt-0.5",children:["Every applicable criterion has been evaluated and either passes or is N/A. This audit can be presented as a conformance-claim for ",t.targetVersion," ",t.targetLevel," for the audited URL(s)."]}),!u&&(()=>{const h=[];t.failingCriteria.length>0&&h.push("failing"),t.inconclusiveCriteria.length>0&&h.push("inconclusive"),t.untestedCriteria.length>0&&h.push("untested");const w=h.length===0?"unresolved":h.length===1?h[0]:h.length===2?`${h[0]} or ${h[1]}`:`${h.slice(0,-1).join(", ")}, or ${h[h.length-1]}`;return e.jsxs("p",{className:"text-[11px] mt-0.5 font-semibold",children:["Cannot claim ",t.targetLevel," conformance — applicable criteria remain ",w,"."]})})(),!u&&t.untestedCriteria.length>0&&e.jsxs("p",{className:"text-[11px] mt-0.5",children:[e.jsxs("strong",{children:[t.untestedCriteria.length," untested"]})," ",t.untestedCriteria.length===1?"criterion":"criteria"," — mark Pass / Fail / N/A in Guided Tests below."]}),!u&&t.inconclusiveCriteria.length>0&&e.jsxs("p",{className:"text-[11px] mt-0.5",children:[e.jsxs("strong",{children:[t.inconclusiveCriteria.length," inconclusive"]})," ",t.inconclusiveCriteria.length===1?"criterion":"criteria"," — axe couldn't fully determine OR an IGT step was skipped. Resolve before claiming conformance."]})]}),!u&&f.length>0&&e.jsx("button",{type:"button",onClick:()=>c(h=>!h),className:"text-[11px] underline shrink-0 self-start",children:m?"hide":"show list"})]}),m&&!u&&e.jsxs("div",{className:"mt-1.5 space-y-1.5",children:[f.map(h=>e.jsxs("div",{children:[e.jsxs("div",{className:`text-[10.5px] font-semibold uppercase tracking-wide ${h.kind==="failing"?"text-rose-900":"text-amber-900"}`,children:[h.kind==="untested"?"Untested":h.kind==="inconclusive"?"Inconclusive":"Failing"," (",h.ids.length,")"]}),e.jsx("ul",{className:"text-[10.5px] text-amber-900 space-y-1",children:h.ids.map(w=>{var C,$;const R=h.kind==="inconclusive"?(C=t.inconclusiveReasons)==null?void 0:C[w]:void 0,T=h.kind==="failing"?($=t.failingReasons)==null?void 0:$[w]:void 0,x=R==null?void 0:R.some(j=>j.source==="axe-incomplete"&&j.elements&&j.elements.length>0),v=T==null?void 0:T.some(j=>j.source==="ai"),y=(n==null?void 0:n.has(w))??!1,k=i==null?void 0:i[w],I=(o==null?void 0:o.has(w))??!1;return e.jsxs("li",{className:"leading-snug",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2 flex-wrap",children:[e.jsxs("code",{className:"font-mono text-[11px]",children:["· ",w]}),(h.kind==="inconclusive"&&x||h.kind==="failing"&&v)&&(s||a)&&e.jsxs("div",{className:"flex items-center gap-1.5 flex-wrap",children:[h.kind==="inconclusive"&&s&&e.jsx("button",{type:"button",disabled:y,onClick:()=>s(w),className:"text-[11px] font-semibold px-2 py-1 bg-brand-500 text-white rounded hover:bg-brand-600 disabled:opacity-50 shadow-sm",title:"Ask AI to determine pass/fail for the specific elements axe couldn't sample.",children:y?"Resolving…":k?"✨ Resolve again →":"✨ Resolve with AI →"}),a&&e.jsx("button",{type:"button",disabled:y,onClick:()=>a(w),className:"text-[11px] font-semibold px-2 py-1 bg-white text-emerald-700 border border-emerald-500 rounded hover:bg-emerald-50 disabled:opacity-50",title:h.kind==="failing"?"Override AI's fail determination — your human visual judgment is the highest authority per WCAG-EM.":"Mark all unresolved elements as visually verified by you. Same semantic weight as Acknowledge on a violation — closes the loop for items only a human can judge (text over images, gradients, etc.).",children:"✓ Mark visually verified"})]})]}),k&&e.jsxs("div",{className:"ml-3 mt-1 p-1.5 bg-white/60 border border-amber-200 rounded text-[10.5px]",children:[e.jsxs("div",{className:"font-semibold text-amber-900 flex items-center gap-2 flex-wrap",children:["AI returned ",k.total," ",k.total===1?"verdict":"verdicts",":",k.pass>0&&e.jsxs("span",{className:"text-emerald-700",children:["✓ ",k.pass," pass"]}),k.fail>0&&e.jsxs("span",{className:"text-rose-700",children:["✗ ",k.fail," fail"]}),k.uncertain>0&&e.jsxs("span",{className:"text-amber-700",children:["? ",k.uncertain," uncertain"]}),e.jsxs("span",{className:"text-slate-500 font-normal",children:["· $",k.costUsd.toFixed(4)]}),l&&e.jsx("button",{type:"button",onClick:()=>l(w),className:"ml-auto text-[10px] underline text-brand-700",children:I?"hide reasoning":"show reasoning"})]}),k.uncertain>0&&e.jsxs("p",{className:"mt-0.5 text-[10px] text-amber-800",children:["AI couldn't determine ",k.uncertain," ",k.uncertain===1?"element":"elements"," ","(typically text over images/gradients — needs visual review). These keep the criterion inconclusive."]}),k.pass===k.total&&k.total>0&&e.jsxs("p",{className:"mt-0.5 text-[10px] text-emerald-800",children:["All elements passed contrast — criterion above will flip to"," ",e.jsx("strong",{children:"pass"})," on next render."]}),I&&e.jsx("ul",{className:"mt-1.5 space-y-1 max-h-40 overflow-y-auto",children:k.resolutions.map((j,S)=>e.jsxs("li",{className:"text-[10px] leading-snug",children:[e.jsx("span",{className:j.verdict==="pass"?"text-emerald-700 font-semibold":j.verdict==="fail"?"text-rose-700 font-semibold":"text-amber-700 font-semibold",children:j.verdict==="pass"?"✓":j.verdict==="fail"?"✗":"?"})," ",e.jsx("code",{className:"font-mono bg-slate-100 px-1 rounded",children:j.selector}),e.jsx("div",{className:"ml-4 text-slate-600",children:j.reasoning})]},S))})]}),T&&T.length>0&&e.jsx("ul",{className:"ml-3 mt-0.5 space-y-0.5",children:T.map((j,S)=>e.jsxs("li",{className:"text-[10px] text-rose-800",children:[j.source==="ai"&&e.jsxs(e.Fragment,{children:["AI verdict ",e.jsx("code",{className:"font-mono",children:j.ruleOrStepId.replace(/^ai-resolved::/,"")})," fail — "]}),j.source==="axe"&&e.jsxs(e.Fragment,{children:["axe rule ",e.jsx("code",{className:"font-mono",children:j.ruleOrStepId})," fail — "]}),j.source==="igt"&&e.jsxs(e.Fragment,{children:["Guided Test ",e.jsx("code",{className:"font-mono",children:j.ruleOrStepId})," fail — "]}),j.selector&&e.jsx("code",{className:"font-mono bg-rose-100 px-1 rounded mr-1",children:j.selector}),j.notes&&e.jsx("span",{className:"text-rose-700",children:j.notes})]},S))}),R&&R.length>0?e.jsx("ul",{className:"ml-3 mt-0.5 space-y-0.5",children:R.map((j,S)=>e.jsxs("li",{className:"text-[10px] text-amber-800",children:[j.source==="axe-incomplete"&&e.jsxs(e.Fragment,{children:["axe rule ",e.jsx("code",{className:"font-mono",children:j.ruleOrStepId})," — "]}),j.source==="igt-skip"&&e.jsxs(e.Fragment,{children:["Guided Test step ",e.jsx("code",{className:"font-mono",children:j.ruleOrStepId})," skipped — "]}),j.source==="ai-uncertain"&&e.jsxs(e.Fragment,{children:["AI rule ",e.jsx("code",{className:"font-mono",children:j.ruleOrStepId})," — "]}),j.resolutionHint,j.elements&&j.elements.length>0&&e.jsxs("span",{className:"block ml-1 mt-0.5 text-[10px] text-amber-700",children:["on ",j.elements.length===1?"element":`${j.elements.length} elements`,":"," ",j.elements.slice(0,3).map((B,A,M)=>e.jsxs("span",{children:[e.jsx("code",{className:"font-mono bg-amber-100 px-1 rounded",children:B.selector}),A<M.length-1&&e.jsx("span",{className:"text-amber-600",children:", "})]},A)),j.elements.length>3&&e.jsxs("span",{className:"text-amber-600",children:[", +",j.elements.length-3," more"]})]})]},S))}):h.kind==="inconclusive"&&e.jsx("p",{className:"ml-3 mt-0.5 text-[10px] text-amber-800 italic",children:"Re-run the audit to see the specific axe rule or Guided Test step responsible. (Cached data from a pre-rc.53 build doesn't carry the reason metadata.)"})]},w)})})]},h.kind)),r&&e.jsx("p",{className:"text-[10px] text-rose-700 bg-rose-50 border border-rose-200 rounded px-1.5 py-1 mt-1",children:r})]})]})}const at={automation:{label:"Automation",hint:"axe-core rules — runs on every scan."},ai:{label:"AI judgment",hint:"wcagcheckr AI analyzers (alt-text, contrast, vision)."},human:{label:"Human verification",hint:"Independent Guided Tests — manual checks."}};function ma({layers:t}){const s=b(n=>n.setView),a=["automation","ai","human"];return e.jsxs("div",{className:"border-t border-slate-200 px-3 py-2",children:[e.jsx("p",{className:"text-[11px] uppercase tracking-wide text-slate-500 mb-1.5",children:"Evidence layers"}),e.jsx("ul",{className:"space-y-1",children:a.map(n=>{const r=t[n],i=r.coveredCriteria.length,o=r.blocked.length,l=r.unevaluated.length,d=r.cleared,m=i>0&&o===0&&l===0,c=m?"text-emerald-700":o>0?"text-rose-700":"text-amber-700";return e.jsxs("li",{className:"flex items-start gap-2 text-[11px]",children:[e.jsx("span",{className:`w-5 h-5 inline-flex items-center justify-center rounded text-[10px] font-bold shrink-0 ${m?"bg-emerald-500 text-white":o>0?"bg-rose-500 text-white":"bg-amber-500 text-white"}`,"aria-hidden":"true",children:m?"✓":o>0?"!":"?"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-baseline gap-1.5 flex-wrap",children:[e.jsx("span",{className:"font-medium text-slate-800",children:at[n].label}),e.jsx("span",{className:`font-mono text-[10px] ${c}`,children:i===0?"no coverage yet":`${d}/${i}`}),o>0&&e.jsxs("span",{className:"text-[10px] text-rose-700",children:["· ",o," blocked"]}),l>0&&e.jsxs("span",{className:"text-[10px] text-amber-700",children:["· ",l," pending"]})]}),e.jsx("p",{className:"text-[10px] text-slate-500 leading-snug",children:at[n].hint}),n==="human"&&l>0&&e.jsx("button",{type:"button",onClick:()=>s("guided"),className:"text-[10px] text-brand-600 hover:underline mt-0.5",children:"Open Guided Tests →"})]})]},n)})})]})}function ha({areas:t}){const s=t.map(a=>a.label);return e.jsxs("div",{className:"border-t border-rose-200 bg-rose-50 px-3 py-2 text-[11px] text-rose-900 leading-snug",children:[e.jsx("p",{className:"font-semibold mb-0.5",children:"⚠ Not lawsuit-safe"}),e.jsx("p",{children:s.length===1?e.jsxs(e.Fragment,{children:[e.jsx("strong",{children:s[0]})," scored ",t[0].letter,". Even a high overall grade doesn't help if one area is failing — demand-letter mills target the weakest link."]}):e.jsxs(e.Fragment,{children:[s.length," areas are at lawsuit-risk:"," ",s.map((a,n)=>e.jsxs("span",{children:[e.jsx("strong",{children:a}),n<s.length-1?", ":""]},a)),". Fix these before relying on the overall grade."]})})]})}function xa({grades:t}){const s=b(a=>a.setView);return e.jsxs("div",{className:"border-t border-slate-200 px-3 py-2",children:[e.jsx("p",{className:"text-[11px] uppercase tracking-wide text-slate-500 mb-2",children:"Verification areas"}),e.jsx("ul",{className:"grid grid-cols-1 gap-1.5",children:t.map(a=>e.jsxs("li",{className:"flex items-center gap-2 text-[11px]",children:[e.jsx("span",{className:`w-6 h-6 inline-flex items-center justify-center rounded text-xs font-bold ${da[a.letter]}`,"aria-label":`Grade ${a.letter}`,children:a.letter}),e.jsx("span",{className:"font-medium text-slate-800 flex-1 min-w-0",children:a.label}),e.jsx(fa,{grade:a,onOpenGuided:()=>s("guided")})]},a.id))})]})}function fa({grade:t,onOpenGuided:s}){const a=n=>{if(!n)return"";const r=Y.find(i=>i.id===n);return(r==null?void 0:r.name)??n};if(t.untested)return e.jsxs("span",{className:"text-slate-500 text-[10px] italic",children:["not graded —"," ",t.primaryVerifierWorkflowId?e.jsxs("button",{type:"button",onClick:s,className:"text-brand-600 hover:underline not-italic",children:["run ",a(t.primaryVerifierWorkflowId)," →"]}):"no data yet"]});if(t.verifiedByIgt){const n=t.verifiedAt?_t(Date.now()-new Date(t.verifiedAt).getTime()):null;return e.jsxs("span",{className:"text-emerald-700 text-[10px]",title:t.suppressedHeuristicCount>0?`Heuristic flagged ${t.suppressedHeuristicCount} issue${t.suppressedHeuristicCount===1?"":"s"}, but you verified this area in Guided Tests — those are treated as noise unless you re-verify.`:"Verified via Guided Tests",children:["✓ verified",n?` ${n} ago`:""]})}return t.needsIgt?e.jsxs("button",{type:"button",onClick:s,className:"text-amber-700 hover:underline text-[10px]",title:"Verify this area by running the relevant Guided Tests workflow",children:["verify with ",a(t.primaryVerifierWorkflowId)," →"]}):t.counts.critical>0||t.counts.serious>0?e.jsxs("span",{className:"text-slate-500 text-[10px]",children:[t.counts.critical>0&&e.jsxs("span",{className:"text-rose-700",children:[t.counts.critical," critical"]}),t.counts.critical>0&&t.counts.serious>0&&" · ",t.counts.serious>0&&e.jsxs("span",{className:"text-orange-700",children:[t.counts.serious," serious"]})]}):e.jsx("span",{className:"text-emerald-700 text-[10px]",children:"clean"})}function ga({violationsRemaining:t,manualCompleted:s,manualTotal:a}){const n=b(o=>o.setView),r=[{done:t===0,label:t===0?"Automated checks pass":`Fix ${t} automated violation${t===1?"":"s"}`,action:void 0,tooltip:void 0},{done:!0,label:`Optional: deep-check via Guided Tests (${s}/${a} done)`,action:()=>n("guided"),tooltip:"Guided Tests are opt-in. The audit's automated checks + AI analyzers already produce a binary pass/fail for every WCAG criterion. Run these workflows if you want belt-and-suspenders confidence on top of automation."},{done:!1,label:"Export AI fix prompt + complete manual checklist",action:()=>n("delta"),tooltip:`Switches to the Delta tab. Click the Export menu and pick "AI fix prompt" — markdown for ChatGPT/Claude/Copilot, with manual checklist for the WCAG criteria automation can't detect.`}],i=r.findIndex(o=>!o.done);return e.jsxs("div",{className:"border-t border-slate-200 px-3 py-2 bg-slate-50",children:[e.jsx("p",{className:"text-[11px] uppercase tracking-wide text-slate-500 mb-1.5",children:"Path to full WCAG compliance"}),e.jsx("ol",{className:"space-y-1 text-[11px]",children:r.map((o,l)=>{const d=l===i,m=o.done;return e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:m?"font-mono text-emerald-700 shrink-0":d?"font-mono text-brand-600 font-semibold shrink-0":"font-mono text-slate-400 shrink-0","aria-hidden":"true",children:m?"✓":`${l+1}.`}),o.action?e.jsxs("button",{type:"button",onClick:o.action,title:o.tooltip,className:d?"text-brand-700 font-semibold underline-offset-2 hover:underline text-left leading-snug":"text-slate-600 underline-offset-2 hover:underline hover:text-slate-900 text-left leading-snug",children:[o.label," →"]}):e.jsx("span",{className:m?"text-slate-500 line-through leading-snug":d?"text-slate-900 font-medium leading-snug":"text-slate-500 leading-snug",children:o.label})]},l)})})]})}function ba({current:t,total:s}){return e.jsxs("div",{role:"status","aria-live":"polite",className:"border border-slate-200 rounded-lg bg-white p-4 flex items-center gap-3",children:[e.jsx("span",{className:"inline-block w-5 h-5 border-2 border-brand-500 border-t-transparent rounded-full animate-spin motion-reduce:animate-none","aria-hidden":"true"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("p",{className:"text-sm font-medium text-slate-900",children:"Scanning…"}),e.jsx("p",{className:"text-[11px] text-slate-500",children:typeof t=="number"&&typeof s=="number"?`State ${t} of ${s}. Grade will appear when the scan completes.`:"Grade will appear when the scan completes."})]})]})}function va({scannedAt:t}){const s=Date.now()-new Date(t).getTime();return e.jsxs("div",{className:"bg-amber-50 border-b border-amber-200 px-3 py-1.5 text-[11px] text-amber-900 flex items-center gap-2",children:[e.jsx("span",{"aria-hidden":"true",children:"↻"}),e.jsxs("span",{children:["Showing a previous scan (",_t(s)," old). Re-scan to grade the current page state."]})]})}function _t(t){const s=Math.floor(t/1e3);if(s<60)return"less than a minute";if(s<120)return"1 minute";if(s<3600)return`${Math.floor(s/60)} minutes`;if(s<7200)return"1 hour";if(s<86400)return`${Math.floor(s/3600)} hours`;const a=Math.floor(s/86400);return a===1?"1 day":`${a} days`}const qe="dismissedFindings";function Oe(t){try{const s=new URL(t);return`${s.origin}${s.pathname.replace(/\/+$/,"")}`}catch{return t}}function pe(t){return`reading-order::${t}`}function me(t){return`tab-order::${t}`}async function Fe(){try{const t=await chrome.storage.local.get(qe),s=t==null?void 0:t[qe];if(s&&typeof s=="object")return s}catch{}return{}}async function Je(t){await chrome.storage.local.set({[qe]:t})}async function De(t){return(await Fe())[Oe(t)]??{}}async function Lt(t,s,a,n){const r=await Fe(),i=Oe(t),o=r[i]??{};o[s]={reason:a,dismissedAt:new Date().toISOString(),snippet:n},r[i]=o,await Je(r)}async function Ne(t,s){if(s.length===0)return;const a=await Fe(),n=Oe(t),r=a[n]??{},i=new Date().toISOString();for(const o of s)r[o.key]={reason:o.reason,dismissedAt:i,snippet:o.snippet};a[n]=r,await Je(a)}async function Ut(t,s){const a=await Fe(),n=Oe(t),r=a[n];!r||!(s in r)||(delete r[s],Object.keys(r).length===0?delete a[n]:a[n]=r,await Je(a))}const ya=Object.freeze(Object.defineProperty({__proto__:null,addDismissal:Lt,addDismissals:Ne,dismissalKeyForReadingOrder:pe,dismissalKeyForTabOrder:me,getDismissalsForUrl:De,removeDismissal:Ut},Symbol.toStringTag,{value:"Module"}));function Dt(t){return[t.pseudoState,t.theme,t.direction,t.breakpoint.id].join(" · ")}function Ot(t){return`${yt(t.ruleId,t.target.selector)}::${t.target.outerHTML.slice(0,64)}`}function wa(t){const s=new Map;for(const a of t)for(const n of a.violations){const r=Ot(n),i=s.get(r);i?i.states.push(n.currentState):s.set(r,{representative:n,states:[n.currentState]})}return Array.from(s.values())}const nt={critical:0,serious:1,moderate:2,minor:3};function ja(){var h,w,R,T;const t=b(x=>x.results),s=b(x=>x.componentId),a=b(x=>x.setView),n=((h=t[0])==null?void 0:h.pageUrl)??((w=t[0])==null?void 0:w.scope)??"",[r,i]=g.useState({}),[o,l]=g.useState(new Set);if(g.useEffect(()=>{if(!n)return;De(n).then(i);const x=()=>{document.visibilityState==="visible"&&n&&De(n).then(i)};return document.addEventListener("visibilitychange",x),()=>document.removeEventListener("visibilitychange",x)},[n]),g.useEffect(()=>{if(!s){l(new Set);return}let x=!1;const v=async()=>{const k=await chrome.storage.local.get("igtRuns");if(x)return;const C=((k==null?void 0:k.igtRuns)??{})[s]??{},$=new Set;for(const j of Y){const S=C[j.id];S&&Object.keys(S.steps).length===j.steps.length&&$.add(j.id)}l($)};v();const y=()=>{document.visibilityState==="visible"&&v()};return document.addEventListener("visibilitychange",y),()=>{x=!0,document.removeEventListener("visibilitychange",y)}},[s]),t.length===0)return e.jsx("div",{className:"p-4 text-center text-slate-500 text-sm",children:"No audit results yet. Pick an element to start."});const d=t.reduce((x,v)=>x+v.durationMs,0),m=t.reduce((x,v)=>x+v.violations.length,0),c=wa(t);c.sort((x,v)=>{const y=nt[x.representative.impact]??99,k=nt[v.representative.impact]??99;return y!==k?y-k:v.states.length-x.states.length});const p=t.map(x=>Dt(x.state)).join(`
4
4
  `),u=o.has("keyboard")?0:(((R=t[0])==null?void 0:R.tabOrderIssues)??[]).filter(x=>!(me(x.selector)in r)).length,f=o.has("page-structure")?0:(((T=t[0])==null?void 0:T.readingOrderIssues)??[]).filter(x=>!(pe(x.selector)in r)).length;return e.jsxs("div",{className:"p-3 space-y-3",children:[e.jsx(ua,{violations:t.flatMap(x=>x.violations),componentId:s}),(u>0||f>0)&&e.jsxs("button",{type:"button",onClick:()=>a("activity"),className:"w-full text-left border border-rose-200 rounded bg-rose-50 px-3 py-2 hover:bg-rose-100 transition-colors",children:[e.jsx("p",{className:"text-xs font-semibold text-rose-900",children:"⚠ Keyboard / screen-reader concerns axe-core can't see"}),e.jsxs("p",{className:"text-[11px] text-rose-800 leading-snug mt-0.5",children:[u>0&&e.jsxs(e.Fragment,{children:[e.jsx("strong",{children:u})," tab-order issue",u===1?"":"s"," (WCAG 2.4.3)"]}),u>0&&f>0&&" · ",f>0&&e.jsxs(e.Fragment,{children:[e.jsx("strong",{children:f})," reading-order issue",f===1?"":"s"," (WCAG 1.3.2)"]})," ","— click to view in ",e.jsx("span",{className:"underline",children:"Activity"})," tab."]})]}),e.jsxs("div",{className:"text-xs text-slate-500 border-b border-slate-200 pb-2",children:[e.jsxs("span",{title:p,"aria-label":`${t.length} states tested: ${p.replace(/\n/g,", ")}`,className:"underline decoration-dotted decoration-slate-400 cursor-help",children:[t.length," ",t.length===1?"state":"states"]})," · ",c.length," unique ",c.length===1?"violation":"violations"," ",e.jsxs("span",{className:"text-slate-500",children:["(",m," across all states)"]})," · ",(d/1e3).toFixed(1),"s"]}),c.length===0?e.jsx("p",{className:"text-xs text-slate-500 italic px-1",children:"No violations found."}):e.jsx("div",{className:"space-y-1.5",children:c.map(x=>e.jsxs("div",{className:"space-y-1",children:[e.jsx(Ue,{violation:x.representative}),e.jsx(Na,{states:x.states,totalStates:t.length})]},Ot(x.representative)))})]})}function Na({states:t,totalStates:s}){if(t.length===s)return e.jsxs("p",{className:"text-[11px] text-slate-500 px-1",children:["Found in ",e.jsxs("span",{className:"font-medium",children:["all ",s," states"]}),"."]});const a=Array.from(new Set(t.map(Dt))),n=a.slice(0,3).join(", "),r=a.length>3?`, +${a.length-3} more`:"",i=a.join(`
@@ -516,4 +516,4 @@ document.getElementById('copy').addEventListener('click', () => {
516
516
  </body>
517
517
  </html>`}async function Vn(t,s){const a=Gn(t,s),n=new Blob([a],{type:"text/html;charset=utf-8"}),r=URL.createObjectURL(n);await chrome.tabs.create({url:r})}const ze=gt("wcag-em-anchor"),Bn="https://api.wcagcheckr.com",Wn="wcagcheckr",Hn=15e3;function Ft(t){return{scope:{siteName:t.inputs.siteName,siteUrl:t.inputs.siteUrl,targetVersion:t.inputs.targetVersion,targetLevel:t.inputs.targetLevel,accessibilitySupportBaseline:t.inputs.accessibilitySupportBaseline,additionalStandards:t.inputs.additionalStandards??[]},evaluator:{name:t.inputs.evaluator.name,organization:t.inputs.evaluator.organization??null,qualifications:t.inputs.evaluator.qualifications??null,contact:t.inputs.evaluator.contact??null},sample:{pages:t.inputs.pageSample.map(s=>({url:s.url,type:s.pageType,selectionType:s.selectionType,hasAuditData:s.hasAuditData}))},verdicts:t.rows.map(s=>({sc:s.criterion.id,level:s.criterion.level,verdict:s.verdict,overridden:s.overridden,axeFailureCount:s.signals.axeFailures.length,igtFailureCount:s.signals.igtFailures.length})),summary:{totalCriteria:t.summary.totalCriteria,pass:t.summary.pass,fail:t.summary.fail,inconclusive:t.summary.inconclusive,notApplicable:t.summary.notApplicable,notEvaluated:t.summary.notEvaluated,levelAchieved:t.summary.levelAchieved,meetsTarget:t.summary.meetsTarget},generatedAt:t.generatedAt}}async function zn(t){const s=new TextEncoder().encode(t),a=await crypto.subtle.digest("SHA-256",s);return Array.from(new Uint8Array(a)).map(n=>n.toString(16).padStart(2,"0")).join("")}async function Kn(t){return zn(rs(Ft(t)))}function qn(t){if(typeof t!="object"||t===null)return!1;const s=t;return s.schemaVersion!==1&&s.schemaVersion!==2||!(typeof s.anchoredAt=="string"&&typeof s.tsaName=="string"&&typeof s.rfc3161TokenBase64=="string"&&s.rfc3161TokenBase64.length>0&&typeof s.serverSignatureBase64=="string"&&s.serverSignatureBase64.length>0&&typeof s.serverKeyFingerprint=="string"&&s.serverKeyFingerprint.length>0)?!1:s.schemaVersion===2?typeof s.prevAuditHash=="string"&&/^[0-9a-f]{64}$/.test(s.prevAuditHash):!0}async function Qn(t,s){const a=await Kn(t),n={auditHash:a,pageUrl:t.inputs.siteUrl,capturedAt:t.generatedAt},r=`${Bn}/v1/products/${Wn}/forensic/anchor`;try{const i=await fetch(r,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(n),signal:AbortSignal.timeout(Hn)});if(!i.ok)return ze.warn(`anchor HTTP ${i.status}`),null;const o=await i.json();return qn(o)?{reportHash:a,capturedAt:t.generatedAt,receipt:o}:(ze.warn("anchor returned malformed receipt",o),null)}catch(i){return ze.warn("anchor request failed",i),null}}function Jn(t,s,a){return{schemaVersion:1,tool:{name:"wcagcheckr",version:a},productSlug:"wcagcheckr",bundledAt:new Date().toISOString(),reportHash:s.reportHash,receipt:s.receipt,canonicalPayload:Ft(t)}}const ht="igtRuns",Yn={pass:"bg-emerald-100 text-emerald-800",fail:"bg-rose-100 text-rose-800",inconclusive:"bg-amber-100 text-amber-800","not-evaluated":"bg-slate-100 text-slate-700","not-applicable":"bg-slate-50 text-slate-500"},Xn={pass:"Pass",fail:"Fail",inconclusive:"Inconclusive","not-evaluated":"Not eval","not-applicable":"N/A"};function Zn(){const t=b(N=>N.results),s=b(N=>N.acknowledgedKeys),[a,n]=g.useState(""),[r,i]=g.useState(""),o=os,l=is,[d,m]=g.useState("Latest two stable versions of Chrome, Safari, Firefox, and Edge on Windows + macOS, paired with NVDA, JAWS, and VoiceOver."),[c,p]=g.useState(""),[u,f]=g.useState(""),[h,w]=g.useState(""),[R,T]=g.useState(""),[x,v]=g.useState(""),[y,k]=g.useState(""),[I,C]=g.useState({}),[$,j]=g.useState(!1),[S,B]=g.useState([]),[A,M]=g.useState(null),[D,X]=g.useState(!1),[K,te]=g.useState(null);g.useEffect(()=>{let N=!1;return chrome.storage.local.get(ht).then(U=>{if(N)return;const L=U[ht]??{};C(L),j(!0)}).catch(()=>{N||j(!0)}),()=>{N=!0}},[]),g.useEffect(()=>{var N;if(!a&&((N=t[0])!=null&&N.pageUrl))try{const U=new URL(t[0].pageUrl);n(U.hostname),i(U.origin)}catch{}},[t,a]),g.useEffect(()=>{const N=new Set;for(const L of t)N.add(L.pageUrl??L.scope);if(N.size===0){B([]);return}let U=!1;return Promise.all(Array.from(N).map(L=>Ce(L))).then(L=>{U||B(L.flat())}).catch(()=>{}),()=>{U=!0}},[t]);const q=g.useMemo(()=>{const N=new Map,U=new Map;for(const H of t){const V=H.pageUrl??H.scope,O=N.get(V)??[];O.push(H),N.set(V,O)}const L=new Map;for(const H of t){const V=H.pageUrl??H.scope;L.set(H.componentId,V)}for(const[H,V]of Object.entries(I)){const O=L.get(H);if(!O)continue;const z=U.get(O)??{};Object.assign(z,V),U.set(O,z)}return{auditsByUrl:N,igtRunsByUrl:U,workflows:Y,acknowledgedMatchKeys:s,incompleteResolutions:S}},[t,I,s,S]),ae=g.useMemo(()=>{const N=[],U=new Set;for(const L of q.auditsByUrl.keys())U.has(L)||(U.add(L),N.push({url:L,selectionType:"critical",pageType:"audited",hasAuditData:!0}));for(const L of y.split(`
518
518
  `).map(H=>H.trim()).filter(Boolean))U.has(L)||(U.add(L),N.push({url:L,selectionType:"structured",pageType:"unaudited",hasAuditData:!1}));return N},[q,y]),ne=g.useMemo(()=>({siteName:a||"Untitled site",siteUrl:r||"https://example.com",targetVersion:o,targetLevel:l,accessibilitySupportBaseline:d,additionalStandards:c.split(",").map(N=>N.trim()).filter(Boolean),pageSample:ae,evaluator:{name:u||"(evaluator name pending)",organization:h||void 0,qualifications:R||void 0,contact:x||void 0}}),[a,r,o,l,d,c,ae,u,h,R,x]),G=g.useMemo(()=>$?Mn(ne,q):null,[ne,q,$]);async function Se(){G&&await Vn(G,A)}async function _(){if(G){X(!0),te(null);try{const N=await Qn(G);if(!N){te("Anchor request failed. The server may be unreachable, or the license tier may not include forensic anchoring. Report is still generatable without anchoring.");return}M(N)}finally{X(!1)}}}function W(){var z,he,P;if(!G||!A)return;const N=((P=(he=(z=chrome.runtime).getManifest)==null?void 0:he.call(z))==null?void 0:P.version)??"0.0.0",U=Jn(G,A,N),L=new Blob([JSON.stringify(U,null,2)],{type:"application/json"}),H=URL.createObjectURL(L),V=`wcagcheckr-wcag-em-bundle-${new Date().toISOString().replace(/[:.]/g,"-")}.json`,O=document.createElement("a");O.href=H,O.download=V,O.click(),setTimeout(()=>URL.revokeObjectURL(H),1e3)}return g.useEffect(()=>{M(null),te(null)},[a,r,d,c,u,h,R,x,y]),$?e.jsxs("div",{className:"p-3 space-y-3 text-xs",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-sm font-semibold text-slate-900",children:"WCAG-EM Conformance Report"}),e.jsx("p",{className:"text-[11px] text-slate-500 mt-1",children:"Generate a W3C-EM-format report combining your axe audit data + Independent Guided Test results into a per-criterion conformance verdict. Output is a printable HTML page you can save as PDF."})]}),G&&G.summary.totalCriteria>0&&e.jsx(er,{totalCriteria:G.summary.totalCriteria,pass:G.summary.pass,fail:G.summary.fail,inconclusive:G.summary.inconclusive,notEvaluated:G.summary.notEvaluated,notApplicable:G.summary.notApplicable,levelAchieved:G.summary.levelAchieved,meetsTarget:G.summary.meetsTarget,targetVersion:o,targetLevel:l,auditedUrlCount:q.auditsByUrl.size}),e.jsxs("fieldset",{className:"border border-slate-200 rounded p-2 space-y-2",children:[e.jsx("legend",{className:"px-1 text-[11px] font-medium text-slate-700",children:"Scope"}),e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"block text-[11px] font-medium text-slate-600",children:"Site / app name"}),e.jsx("input",{type:"text",value:a,onChange:N=>n(N.target.value),placeholder:"Acme Web App",className:"w-full border border-slate-300 rounded px-2 py-1 text-xs"})]}),e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"block text-[11px] font-medium text-slate-600",children:"Site URL"}),e.jsx("input",{type:"url",value:r,onChange:N=>i(N.target.value),placeholder:"https://app.example.com",className:"w-full border border-slate-300 rounded px-2 py-1 text-xs"})]}),e.jsxs("div",{children:[e.jsx("span",{className:"block text-[11px] font-medium text-slate-600",children:"Conformance target"}),e.jsxs("div",{className:"inline-flex items-center gap-2 mt-0.5 px-2 py-1 bg-slate-50 border border-slate-200 rounded text-xs",children:[e.jsxs("span",{className:"font-semibold text-slate-900",children:["WCAG ",o," Level ",l]}),e.jsx("span",{className:"text-[10px] text-slate-500",children:"— locked target"})]}),e.jsx("p",{className:"text-[10px] text-slate-500 mt-1",children:"AA is the legal-protection bar (ADA / Section 508 / EN 301 549). Level A is insufficient for lawsuit defence; AAA is unachievable for most production sites. wcagcheckr grades against AA only."})]}),e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"block text-[11px] font-medium text-slate-600",children:"Accessibility-support baseline"}),e.jsx("textarea",{value:d,onChange:N=>m(N.target.value),rows:2,className:"w-full border border-slate-300 rounded px-2 py-1 text-xs resize-y"}),e.jsx("span",{className:"text-[10px] text-slate-500",children:"Per W3C-EM §2.b — the AT / browser combos your claim covers."})]}),e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"block text-[11px] font-medium text-slate-600",children:"Additional standards (comma-separated, optional)"}),e.jsx("input",{type:"text",value:c,onChange:N=>p(N.target.value),placeholder:"Section 508 (Revised 2017), EN 301 549 v3.2.1, ADA Title III",className:"w-full border border-slate-300 rounded px-2 py-1 text-xs"})]})]}),e.jsxs("fieldset",{className:"border border-slate-200 rounded p-2 space-y-2",children:[e.jsx("legend",{className:"px-1 text-[11px] font-medium text-slate-700",children:"Page sample"}),e.jsxs("p",{className:"text-[11px] text-slate-500",children:["Audited pages are auto-included.",q.auditsByUrl.size>0?e.jsxs(e.Fragment,{children:[" Current audit covers ",e.jsx("strong",{children:q.auditsByUrl.size})," URL",q.auditsByUrl.size===1?"":"s","."]}):e.jsx(e.Fragment,{children:" No audited URL data in the store yet — run an audit first."})]}),e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"block text-[11px] font-medium text-slate-600",children:"Additional sample URLs (one per line, optional)"}),e.jsx("textarea",{value:y,onChange:N=>k(N.target.value),rows:3,placeholder:`https://app.example.com/checkout
519
- https://app.example.com/account`,className:"w-full border border-slate-300 rounded px-2 py-1 text-xs resize-y"}),e.jsx("span",{className:"text-[10px] text-slate-500",children:'Pages without audit data will be listed in the report as "no audit data" — audit each then regenerate.'})]})]}),e.jsxs("fieldset",{className:"border border-slate-200 rounded p-2 space-y-2",children:[e.jsx("legend",{className:"px-1 text-[11px] font-medium text-slate-700",children:"Evaluator"}),e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"block text-[11px] font-medium text-slate-600",children:"Name"}),e.jsx("input",{type:"text",value:u,onChange:N=>f(N.target.value),placeholder:"Jane Doe",className:"w-full border border-slate-300 rounded px-2 py-1 text-xs"})]}),e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"block text-[11px] font-medium text-slate-600",children:"Organization (optional)"}),e.jsx("input",{type:"text",value:h,onChange:N=>w(N.target.value),className:"w-full border border-slate-300 rounded px-2 py-1 text-xs"})]}),e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"block text-[11px] font-medium text-slate-600",children:"Qualifications (optional)"}),e.jsx("input",{type:"text",value:R,onChange:N=>T(N.target.value),placeholder:"IAAP CPACC; 7 years a11y consulting",className:"w-full border border-slate-300 rounded px-2 py-1 text-xs"})]}),e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"block text-[11px] font-medium text-slate-600",children:"Contact (optional)"}),e.jsx("input",{type:"text",value:x,onChange:N=>v(N.target.value),placeholder:"jane@example.com",className:"w-full border border-slate-300 rounded px-2 py-1 text-xs"})]})]}),G&&e.jsxs("details",{className:"border border-slate-200 rounded",children:[e.jsxs("summary",{className:"px-2 py-1.5 cursor-pointer font-medium text-slate-700",children:["Per-criterion verdicts (",G.rows.length,")"]}),e.jsx("ul",{className:"divide-y divide-slate-100 max-h-96 overflow-y-auto",children:G.rows.map(N=>e.jsxs("li",{className:"px-2 py-1.5 flex items-center justify-between gap-2",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"font-mono text-[10px] text-slate-500",children:[N.criterion.id," · ",N.criterion.level]}),e.jsx("div",{className:"text-[11px] text-slate-700 truncate",children:N.criterion.title})]}),e.jsx("span",{className:`shrink-0 px-1.5 py-0.5 rounded text-[10px] font-semibold ${Yn[N.verdict]}`,children:Xn[N.verdict]})]},N.criterion.id))})]}),e.jsxs("fieldset",{className:"border border-slate-200 rounded p-2 space-y-2",children:[e.jsx("legend",{className:"px-1 text-[11px] font-medium text-slate-700",children:"Forensic anchor"}),A?e.jsxs("div",{className:"text-[11px] bg-sky-50 border border-sky-200 rounded p-2 text-sky-900",children:[e.jsx("div",{className:"font-medium",children:"✓ Anchored"}),e.jsxs("div",{className:"mt-0.5",children:["Hash: ",e.jsxs("code",{className:"font-mono text-[10px]",children:[A.reportHash.slice(0,24),"…"]})]}),e.jsxs("div",{className:"mt-0.5",children:["RFC 3161 timestamp from ",A.receipt.tsaName,", ed25519 signed."]}),e.jsx("div",{className:"mt-1 text-[10px] text-sky-700",children:"Any edit to the form will clear this anchor — re-anchor before generating the final report."})]}):e.jsx("p",{className:"text-[11px] text-slate-500",children:`Anchoring attaches an RFC 3161 trusted timestamp + ed25519 signature to this report's content hash, defending against later-altered claims of the form "this report dated X said Y." Paid feature.`}),K&&e.jsx("p",{className:"text-[11px] text-rose-700 bg-rose-50 border border-rose-200 rounded p-1.5",children:K}),e.jsxs("div",{className:"flex gap-2 flex-wrap",children:[e.jsx("button",{type:"button",disabled:!G||!a||!u||D,onClick:()=>void _(),className:"text-xs px-3 py-1.5 border border-slate-300 rounded hover:bg-slate-50 disabled:opacity-50",children:D?"Anchoring…":A?"Re-anchor":"Anchor this report"}),A&&e.jsx("button",{type:"button",onClick:W,className:"text-xs px-3 py-1.5 border border-slate-300 rounded hover:bg-slate-50",title:"Download a JSON file containing the canonical report + receipt; verify offline via wcagcheckr-ci verify",children:"Download verification bundle"})]})]}),e.jsx("div",{className:"flex justify-end gap-2 pt-1 border-t border-slate-200",children:e.jsx("button",{type:"button",disabled:!G||!a||!u,onClick:()=>void Se(),className:"text-xs px-3 py-1.5 bg-brand-500 text-white rounded hover:bg-brand-600 disabled:opacity-50",children:"Generate WCAG-EM report →"})})]}):e.jsx("div",{className:"p-3 text-xs text-slate-500",children:"Loading IGT runs…"})}function er({totalCriteria:t,pass:s,fail:a,inconclusive:n,notEvaluated:r,notApplicable:i,levelAchieved:o,meetsTarget:l,targetVersion:d,targetLevel:m,auditedUrlCount:c}){return e.jsxs("div",{className:`border rounded p-2 ${l?"border-emerald-300 bg-emerald-50":"border-amber-300 bg-amber-50"}`,children:[e.jsx("div",{className:`text-xs font-semibold ${l?"text-emerald-900":"text-amber-900"}`,children:l?`Currently meeting WCAG ${d} Level ${m}`:`Does not currently meet WCAG ${d} Level ${m}`}),e.jsxs("div",{className:"text-[11px] mt-1 text-slate-700",children:["Highest fully-satisfied: ",e.jsx("strong",{children:o??"none"})," · ",t," applicable criteria across ",c," audited URL",c===1?"":"s"]}),e.jsxs("div",{className:"text-[10px] mt-1 text-slate-600",children:["Pass ",s," · Fail ",a," · Inconclusive ",n,i>0&&e.jsxs(e.Fragment,{children:[" · N/A ",i]})," · ","Not evaluated ",r]})]})}function tr(t){return t===null?"Trial":t===0?"Trial · expires today":t===1?"Trial · 1 day left":`Trial · ${t} days left`}const sr={eyebrow:"You're on a trial",headline:"Full features unlocked while you evaluate.",body:"When your trial ends, a paid plan keeps RFC 3161 trusted-timestamp anchoring, AI fix suggestions, and audit-history evidence active for every scan."},ar={eyebrow:"You're on the free tier",headline:"Audits run locally — but no forensic record is being kept.",body:"Upgrade to anchor every audit with court-grade trusted timestamps, unlock AI-powered fix suggestions, and build a third-party-verifiable history of your remediation effort."},nr={label:"Solo plan",perks:"forensic anchoring + AI features unlocked"},rr={label:"Team plan",perks:"forensic anchoring + AI + team seats"};function ir(){const t=b(p=>p.tier),s=b(p=>p.trialDaysRemaining),a=b(p=>p.seatsUsed),n=b(p=>p.seatsTotal),r=b(p=>p.planCode),i=b(p=>p.licenseDaysRemaining),o=b(p=>p.pastDue),[l,d]=g.useState(!1);if(t==="solo"&&r==="solo-single-month"){const p=i,u=p!==null&&p<=7,f=p===null?"":p===0?"expires today":p===1?"1 day left":`${p} days left`;return e.jsxs("aside",{"aria-label":"License status",className:u?"relative z-20 bg-amber-50 border-b border-amber-200 px-3 py-2 space-y-1 text-[11px] shadow-[0_2px_8px_-2px_rgba(120,53,15,0.12)]":"relative z-20 bg-emerald-50 border-b border-emerald-200 px-3 py-2 space-y-1 text-[11px] shadow-[0_2px_8px_-2px_rgba(6,78,59,0.12)]",children:[e.jsxs("div",{className:u?"text-amber-900":"text-emerald-800",children:[e.jsx("span",{className:"font-medium",children:"✓ Solo · single-month pass"}),f&&e.jsxs("span",{className:u?"text-amber-900 font-semibold":"text-emerald-700",children:[" ","· ",f]})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1",children:[e.jsx("button",{type:"button",onClick:()=>d(!0),className:u?"text-amber-900 font-medium hover:underline":"text-emerald-800 font-medium hover:underline",title:"Switch to a recurring monthly subscription — auto-renews, no need to re-buy each month",children:"Upgrade to monthly →"}),e.jsx("span",{className:u?"text-amber-300":"text-emerald-300","aria-hidden":"true",children:"·"}),e.jsx("button",{type:"button",onClick:()=>void J({type:"OPEN_SETTINGS"}),className:u?"text-amber-700 hover:underline":"text-emerald-700 hover:underline",children:"Manage license"})]}),e.jsx(Ke,{open:l,onClose:()=>d(!1)})]})}if(t==="solo"||t==="team"){const p=t==="team"?rr:nr,u=t==="team"&&a!==null&&n!==null?`${a} of ${n} seats used`:p.perks,f=t==="team"&&a!==null&&n!==null&&a>n,h=t==="team"&&a!==null&&n!==null&&a===n,w=o?{bg:"bg-rose-50",border:"border-rose-200",shadow:"shadow-[0_2px_8px_-2px_rgba(159,18,57,0.16)]",title:"text-rose-900",subtitle:"text-rose-700",link:"text-rose-700 hover:underline"}:f?{bg:"bg-rose-50",border:"border-rose-200",shadow:"shadow-[0_2px_8px_-2px_rgba(159,18,57,0.16)]",title:"text-rose-900",subtitle:"text-rose-700",link:"text-rose-700 hover:underline"}:h?{bg:"bg-amber-50",border:"border-amber-200",shadow:"shadow-[0_2px_8px_-2px_rgba(120,53,15,0.12)]",title:"text-amber-900",subtitle:"text-amber-800",link:"text-amber-700 hover:underline"}:{bg:"bg-emerald-50",border:"border-emerald-200",shadow:"shadow-[0_2px_8px_-2px_rgba(6,78,59,0.12)]",title:"text-emerald-800",subtitle:"text-emerald-700",link:"text-emerald-700 hover:underline"};return e.jsxs("aside",{"aria-label":"License status",className:`relative z-20 ${w.bg} border-b ${w.border} px-3 py-2 space-y-1 text-[11px] ${w.shadow}`,children:[e.jsxs("div",{className:w.title,children:[e.jsxs("span",{className:"font-medium",children:["✓ ",p.label]}),e.jsxs("span",{className:w.subtitle,children:[" · ",u]})]}),o&&e.jsx("div",{className:"text-[11px] text-rose-900 font-medium",children:"Payment failed — update your card in Settings → License before access cuts off."}),f&&e.jsx("div",{className:"text-[11px] text-rose-900 font-medium",children:"Over capacity — release a seat or upgrade. New devices will be blocked."}),h&&!f&&e.jsx("div",{className:"text-[11px] text-amber-900",children:"At capacity — next device that activates will be rejected."}),e.jsx("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1",children:e.jsx("button",{type:"button",onClick:()=>void J({type:"OPEN_SETTINGS"}),className:w.link,children:"Manage license →"})})]})}const m=t==="trial"?sr:ar,c=t==="trial"?tr(s):"Free";return e.jsxs("aside",{"aria-label":"Upgrade prompt",className:"relative z-20 border-b border-brand-200 bg-gradient-to-br from-brand-50 via-white to-white px-3 py-2.5 space-y-2 shadow-[0_4px_16px_-4px_rgba(31,41,55,0.14)]",children:[e.jsxs("div",{className:"flex items-baseline justify-between gap-2",children:[e.jsx("p",{className:"text-[10px] uppercase tracking-[0.06em] text-brand-700 font-medium",children:m.eyebrow}),e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded-full bg-brand-100 text-brand-700",children:c})]}),e.jsx("p",{className:"text-xs font-medium text-slate-900 leading-snug",children:m.headline}),e.jsx("p",{className:"text-[11px] text-slate-600 leading-snug",children:m.body}),e.jsxs("div",{className:"flex items-center gap-2 pt-0.5",children:[e.jsx("button",{type:"button",onClick:()=>d(!0),className:"text-xs px-3 py-1.5 bg-brand-500 text-white rounded hover:bg-brand-600 font-medium",children:"Upgrade →"}),e.jsx("button",{type:"button",onClick:()=>void J({type:"OPEN_SETTINGS"}),className:"text-xs px-2.5 py-1.5 text-slate-600 hover:text-slate-900 underline-offset-2 hover:underline",children:"I have a license token"})]}),e.jsx(Ke,{open:l,onClose:()=>d(!1)})]})}const or=g.lazy(()=>je(()=>import("./App-CWTgG7P6.js"),__vite__mapDeps([4,5,6,1,2,7,8,0])).then(t=>({default:t.NormalApp})));function hr(){const t=b(a=>a.view),s=b(a=>a.userMode);return g.useEffect(()=>{const a=bs(),r=new URLSearchParams(window.location.search).get("context")==="overlay"?null:chrome.runtime.connect({name:"sidepanel-tracker"}),i=ms();St({forceRefresh:!0}).catch(()=>{}),$e().catch(()=>{}),gs().catch(()=>{}),vs().catch(()=>{}),xs().catch(()=>{}),ls().then(l=>{b.getState().setAcknowledgedKeys(new Set(l.map(d=>d.matchKey)))}).catch(()=>{});const o=l=>{if(l.key!=="Escape")return;const{pinnedMatchKey:d,setPinned:m,results:c}=b.getState();d&&(m(null),Z().then(p=>{var u;p&&se(p,{type:"HIGHLIGHT_CLEAR_REQUEST",tabId:p},(u=c[0])==null?void 0:u.frameId).catch(()=>{})}))};return window.addEventListener("keydown",o),()=>{i(),a.disconnect(),r==null||r.disconnect(),window.removeEventListener("keydown",o)}},[]),s===null?e.jsxs(e.Fragment,{children:[e.jsx(Sn,{}),e.jsx(Me,{})]}):s==="owner"?e.jsxs(g.Suspense,{fallback:e.jsx("div",{className:"p-4 text-sm text-slate-500",children:"Loading…"}),children:[e.jsx(or,{}),e.jsx(Me,{})]}):e.jsxs("div",{className:"flex flex-col h-screen bg-slate-50 text-slate-900 text-sm",children:[e.jsx("a",{href:"#main-content",className:"sr-only focus:not-sr-only focus:fixed focus:top-2 focus:left-2 focus:z-50 focus:bg-white focus:text-slate-900 focus:px-3 focus:py-1.5 focus:rounded focus:shadow focus:outline focus:outline-2 focus:outline-brand-500",children:"Skip to main content"}),e.jsx(ir,{}),e.jsx(_s,{}),e.jsx(Us,{}),e.jsxs("main",{id:"main-content",className:"flex-1 flex flex-col overflow-hidden","aria-label":"wcagcheckr",children:[e.jsx(Ms,{}),e.jsx(Ws,{}),e.jsx(wn,{}),e.jsx(yn,{}),e.jsx(zs,{}),e.jsx(gn,{}),e.jsx(bn,{}),e.jsxs("div",{className:"flex-1 overflow-y-auto",role:"region","aria-label":`${t} view`,children:[t==="matrix"&&e.jsx(ja,{}),t==="delta"&&e.jsx(Ta,{}),t==="activity"&&e.jsx(Ba,{}),t==="guided"&&e.jsx(tn,{}),t==="flows"&&e.jsx(rn,{}),t==="scorecard"&&e.jsx(cn,{}),t==="crawl"&&e.jsx(hn,{}),t==="forensic"&&e.jsx(Ln,{}),t==="compliance"&&e.jsx(Zn,{})]})]}),e.jsx(kn,{}),e.jsx(jn,{}),e.jsx(fn,{}),e.jsx(vn,{}),e.jsx(Me,{})]})}class xr extends ye.Component{constructor(){super(...arguments);Ye(this,"state",{error:null})}static getDerivedStateFromError(a){return{error:a}}componentDidCatch(a,n){console.error("[side-panel] render crashed",a,n.componentStack)}render(){return this.state.error?e.jsxs("div",{className:"p-4 text-sm bg-red-50 text-red-900 h-full flex flex-col",children:[e.jsx("h2",{className:"font-semibold mb-2",children:"Side panel crashed"}),e.jsx("p",{className:"text-xs mb-3",children:this.state.error.message}),e.jsx("button",{onClick:()=>location.reload(),className:"text-xs px-3 py-1 bg-red-600 text-white rounded hover:bg-red-700 self-start",children:"Reload"})]}):this.props.children}}export{hr as A,xr as E,ps as c};
519
+ https://app.example.com/account`,className:"w-full border border-slate-300 rounded px-2 py-1 text-xs resize-y"}),e.jsx("span",{className:"text-[10px] text-slate-500",children:'Pages without audit data will be listed in the report as "no audit data" — audit each then regenerate.'})]})]}),e.jsxs("fieldset",{className:"border border-slate-200 rounded p-2 space-y-2",children:[e.jsx("legend",{className:"px-1 text-[11px] font-medium text-slate-700",children:"Evaluator"}),e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"block text-[11px] font-medium text-slate-600",children:"Name"}),e.jsx("input",{type:"text",value:u,onChange:N=>f(N.target.value),placeholder:"Jane Doe",className:"w-full border border-slate-300 rounded px-2 py-1 text-xs"})]}),e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"block text-[11px] font-medium text-slate-600",children:"Organization (optional)"}),e.jsx("input",{type:"text",value:h,onChange:N=>w(N.target.value),className:"w-full border border-slate-300 rounded px-2 py-1 text-xs"})]}),e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"block text-[11px] font-medium text-slate-600",children:"Qualifications (optional)"}),e.jsx("input",{type:"text",value:R,onChange:N=>T(N.target.value),placeholder:"IAAP CPACC; 7 years a11y consulting",className:"w-full border border-slate-300 rounded px-2 py-1 text-xs"})]}),e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"block text-[11px] font-medium text-slate-600",children:"Contact (optional)"}),e.jsx("input",{type:"text",value:x,onChange:N=>v(N.target.value),placeholder:"jane@example.com",className:"w-full border border-slate-300 rounded px-2 py-1 text-xs"})]})]}),G&&e.jsxs("details",{className:"border border-slate-200 rounded",children:[e.jsxs("summary",{className:"px-2 py-1.5 cursor-pointer font-medium text-slate-700",children:["Per-criterion verdicts (",G.rows.length,")"]}),e.jsx("ul",{className:"divide-y divide-slate-100 max-h-96 overflow-y-auto",children:G.rows.map(N=>e.jsxs("li",{className:"px-2 py-1.5 flex items-center justify-between gap-2",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"font-mono text-[10px] text-slate-500",children:[N.criterion.id," · ",N.criterion.level]}),e.jsx("div",{className:"text-[11px] text-slate-700 truncate",children:N.criterion.title})]}),e.jsx("span",{className:`shrink-0 px-1.5 py-0.5 rounded text-[10px] font-semibold ${Yn[N.verdict]}`,children:Xn[N.verdict]})]},N.criterion.id))})]}),e.jsxs("fieldset",{className:"border border-slate-200 rounded p-2 space-y-2",children:[e.jsx("legend",{className:"px-1 text-[11px] font-medium text-slate-700",children:"Forensic anchor"}),A?e.jsxs("div",{className:"text-[11px] bg-sky-50 border border-sky-200 rounded p-2 text-sky-900",children:[e.jsx("div",{className:"font-medium",children:"✓ Anchored"}),e.jsxs("div",{className:"mt-0.5",children:["Hash: ",e.jsxs("code",{className:"font-mono text-[10px]",children:[A.reportHash.slice(0,24),"…"]})]}),e.jsxs("div",{className:"mt-0.5",children:["RFC 3161 timestamp from ",A.receipt.tsaName,", ed25519 signed."]}),e.jsx("div",{className:"mt-1 text-[10px] text-sky-700",children:"Any edit to the form will clear this anchor — re-anchor before generating the final report."})]}):e.jsx("p",{className:"text-[11px] text-slate-500",children:`Anchoring attaches an RFC 3161 trusted timestamp + ed25519 signature to this report's content hash, defending against later-altered claims of the form "this report dated X said Y." Paid feature.`}),K&&e.jsx("p",{className:"text-[11px] text-rose-700 bg-rose-50 border border-rose-200 rounded p-1.5",children:K}),e.jsxs("div",{className:"flex gap-2 flex-wrap",children:[e.jsx("button",{type:"button",disabled:!G||!a||!u||D,onClick:()=>void _(),className:"text-xs px-3 py-1.5 border border-slate-300 rounded hover:bg-slate-50 disabled:opacity-50",children:D?"Anchoring…":A?"Re-anchor":"Anchor this report"}),A&&e.jsx("button",{type:"button",onClick:W,className:"text-xs px-3 py-1.5 border border-slate-300 rounded hover:bg-slate-50",title:"Download a JSON file containing the canonical report + receipt; verify offline via wcagcheckr-ci verify",children:"Download verification bundle"})]})]}),e.jsx("div",{className:"flex justify-end gap-2 pt-1 border-t border-slate-200",children:e.jsx("button",{type:"button",disabled:!G||!a||!u,onClick:()=>void Se(),className:"text-xs px-3 py-1.5 bg-brand-500 text-white rounded hover:bg-brand-600 disabled:opacity-50",children:"Generate WCAG-EM report →"})})]}):e.jsx("div",{className:"p-3 text-xs text-slate-500",children:"Loading IGT runs…"})}function er({totalCriteria:t,pass:s,fail:a,inconclusive:n,notEvaluated:r,notApplicable:i,levelAchieved:o,meetsTarget:l,targetVersion:d,targetLevel:m,auditedUrlCount:c}){return e.jsxs("div",{className:`border rounded p-2 ${l?"border-emerald-300 bg-emerald-50":"border-amber-300 bg-amber-50"}`,children:[e.jsx("div",{className:`text-xs font-semibold ${l?"text-emerald-900":"text-amber-900"}`,children:l?`Currently meeting WCAG ${d} Level ${m}`:`Does not currently meet WCAG ${d} Level ${m}`}),e.jsxs("div",{className:"text-[11px] mt-1 text-slate-700",children:["Highest fully-satisfied: ",e.jsx("strong",{children:o??"none"})," · ",t," applicable criteria across ",c," audited URL",c===1?"":"s"]}),e.jsxs("div",{className:"text-[10px] mt-1 text-slate-600",children:["Pass ",s," · Fail ",a," · Inconclusive ",n,i>0&&e.jsxs(e.Fragment,{children:[" · N/A ",i]})," · ","Not evaluated ",r]})]})}function tr(t){return t===null?"Trial":t===0?"Trial · expires today":t===1?"Trial · 1 day left":`Trial · ${t} days left`}const sr={eyebrow:"You're on a trial",headline:"Full features unlocked while you evaluate.",body:"When your trial ends, a paid plan keeps RFC 3161 trusted-timestamp anchoring, AI fix suggestions, and audit-history evidence active for every scan."},ar={eyebrow:"You're on the free tier",headline:"Audits run locally — but no forensic record is being kept.",body:"Upgrade to anchor every audit with court-grade trusted timestamps, unlock AI-powered fix suggestions, and build a third-party-verifiable history of your remediation effort."},nr={label:"Solo plan",perks:"forensic anchoring + AI features unlocked"},rr={label:"Team plan",perks:"forensic anchoring + AI + team seats"};function ir(){const t=b(p=>p.tier),s=b(p=>p.trialDaysRemaining),a=b(p=>p.seatsUsed),n=b(p=>p.seatsTotal),r=b(p=>p.planCode),i=b(p=>p.licenseDaysRemaining),o=b(p=>p.pastDue),[l,d]=g.useState(!1);if(t==="solo"&&r==="solo-single-month"){const p=i,u=p!==null&&p<=7,f=p===null?"":p===0?"expires today":p===1?"1 day left":`${p} days left`;return e.jsxs("aside",{"aria-label":"License status",className:u?"relative z-20 bg-amber-50 border-b border-amber-200 px-3 py-2 space-y-1 text-[11px] shadow-[0_2px_8px_-2px_rgba(120,53,15,0.12)]":"relative z-20 bg-emerald-50 border-b border-emerald-200 px-3 py-2 space-y-1 text-[11px] shadow-[0_2px_8px_-2px_rgba(6,78,59,0.12)]",children:[e.jsxs("div",{className:u?"text-amber-900":"text-emerald-800",children:[e.jsx("span",{className:"font-medium",children:"✓ Solo · single-month pass"}),f&&e.jsxs("span",{className:u?"text-amber-900 font-semibold":"text-emerald-700",children:[" ","· ",f]})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1",children:[e.jsx("button",{type:"button",onClick:()=>d(!0),className:u?"text-amber-900 font-medium hover:underline":"text-emerald-800 font-medium hover:underline",title:"Switch to a recurring monthly subscription — auto-renews, no need to re-buy each month",children:"Upgrade to monthly →"}),e.jsx("span",{className:u?"text-amber-300":"text-emerald-300","aria-hidden":"true",children:"·"}),e.jsx("button",{type:"button",onClick:()=>void J({type:"OPEN_SETTINGS"}),className:u?"text-amber-700 hover:underline":"text-emerald-700 hover:underline",children:"Manage license"})]}),e.jsx(Ke,{open:l,onClose:()=>d(!1)})]})}if(t==="solo"||t==="team"){const p=t==="team"?rr:nr,u=t==="team"&&a!==null&&n!==null?`${a} of ${n} seats used`:p.perks,f=t==="team"&&a!==null&&n!==null&&a>n,h=t==="team"&&a!==null&&n!==null&&a===n,w=o?{bg:"bg-rose-50",border:"border-rose-200",shadow:"shadow-[0_2px_8px_-2px_rgba(159,18,57,0.16)]",title:"text-rose-900",subtitle:"text-rose-700",link:"text-rose-700 hover:underline"}:f?{bg:"bg-rose-50",border:"border-rose-200",shadow:"shadow-[0_2px_8px_-2px_rgba(159,18,57,0.16)]",title:"text-rose-900",subtitle:"text-rose-700",link:"text-rose-700 hover:underline"}:h?{bg:"bg-amber-50",border:"border-amber-200",shadow:"shadow-[0_2px_8px_-2px_rgba(120,53,15,0.12)]",title:"text-amber-900",subtitle:"text-amber-800",link:"text-amber-700 hover:underline"}:{bg:"bg-emerald-50",border:"border-emerald-200",shadow:"shadow-[0_2px_8px_-2px_rgba(6,78,59,0.12)]",title:"text-emerald-800",subtitle:"text-emerald-700",link:"text-emerald-700 hover:underline"};return e.jsxs("aside",{"aria-label":"License status",className:`relative z-20 ${w.bg} border-b ${w.border} px-3 py-2 space-y-1 text-[11px] ${w.shadow}`,children:[e.jsxs("div",{className:w.title,children:[e.jsxs("span",{className:"font-medium",children:["✓ ",p.label]}),e.jsxs("span",{className:w.subtitle,children:[" · ",u]})]}),o&&e.jsx("div",{className:"text-[11px] text-rose-900 font-medium",children:"Payment failed — update your card in Settings → License before access cuts off."}),f&&e.jsx("div",{className:"text-[11px] text-rose-900 font-medium",children:"Over capacity — release a seat or upgrade. New devices will be blocked."}),h&&!f&&e.jsx("div",{className:"text-[11px] text-amber-900",children:"At capacity — next device that activates will be rejected."}),e.jsx("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1",children:e.jsx("button",{type:"button",onClick:()=>void J({type:"OPEN_SETTINGS"}),className:w.link,children:"Manage license →"})})]})}const m=t==="trial"?sr:ar,c=t==="trial"?tr(s):"Free";return e.jsxs("aside",{"aria-label":"Upgrade prompt",className:"relative z-20 border-b border-brand-200 bg-gradient-to-br from-brand-50 via-white to-white px-3 py-2.5 space-y-2 shadow-[0_4px_16px_-4px_rgba(31,41,55,0.14)]",children:[e.jsxs("div",{className:"flex items-baseline justify-between gap-2",children:[e.jsx("p",{className:"text-[10px] uppercase tracking-[0.06em] text-brand-700 font-medium",children:m.eyebrow}),e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded-full bg-brand-100 text-brand-700",children:c})]}),e.jsx("p",{className:"text-xs font-medium text-slate-900 leading-snug",children:m.headline}),e.jsx("p",{className:"text-[11px] text-slate-600 leading-snug",children:m.body}),e.jsxs("div",{className:"flex items-center gap-2 pt-0.5",children:[e.jsx("button",{type:"button",onClick:()=>d(!0),className:"text-xs px-3 py-1.5 bg-brand-500 text-white rounded hover:bg-brand-600 font-medium",children:"Upgrade →"}),e.jsx("button",{type:"button",onClick:()=>void J({type:"OPEN_SETTINGS"}),className:"text-xs px-2.5 py-1.5 text-slate-600 hover:text-slate-900 underline-offset-2 hover:underline",children:"I have a license token"})]}),e.jsx(Ke,{open:l,onClose:()=>d(!1)})]})}const or=g.lazy(()=>je(()=>import("./App-Bpsz7bQq.js"),__vite__mapDeps([4,5,6,1,2,7,8,0])).then(t=>({default:t.NormalApp})));function hr(){const t=b(a=>a.view),s=b(a=>a.userMode);return g.useEffect(()=>{const a=bs(),r=new URLSearchParams(window.location.search).get("context")==="overlay"?null:chrome.runtime.connect({name:"sidepanel-tracker"}),i=ms();St({forceRefresh:!0}).catch(()=>{}),$e().catch(()=>{}),gs().catch(()=>{}),vs().catch(()=>{}),xs().catch(()=>{}),ls().then(l=>{b.getState().setAcknowledgedKeys(new Set(l.map(d=>d.matchKey)))}).catch(()=>{});const o=l=>{if(l.key!=="Escape")return;const{pinnedMatchKey:d,setPinned:m,results:c}=b.getState();d&&(m(null),Z().then(p=>{var u;p&&se(p,{type:"HIGHLIGHT_CLEAR_REQUEST",tabId:p},(u=c[0])==null?void 0:u.frameId).catch(()=>{})}))};return window.addEventListener("keydown",o),()=>{i(),a.disconnect(),r==null||r.disconnect(),window.removeEventListener("keydown",o)}},[]),s===null?e.jsxs(e.Fragment,{children:[e.jsx(Sn,{}),e.jsx(Me,{})]}):s==="owner"?e.jsxs(g.Suspense,{fallback:e.jsx("div",{className:"p-4 text-sm text-slate-500",children:"Loading…"}),children:[e.jsx(or,{}),e.jsx(Me,{})]}):e.jsxs("div",{className:"flex flex-col h-screen bg-slate-50 text-slate-900 text-sm",children:[e.jsx("a",{href:"#main-content",className:"sr-only focus:not-sr-only focus:fixed focus:top-2 focus:left-2 focus:z-50 focus:bg-white focus:text-slate-900 focus:px-3 focus:py-1.5 focus:rounded focus:shadow focus:outline focus:outline-2 focus:outline-brand-500",children:"Skip to main content"}),e.jsx(ir,{}),e.jsx(_s,{}),e.jsx(Us,{}),e.jsxs("main",{id:"main-content",className:"flex-1 flex flex-col overflow-hidden","aria-label":"wcagcheckr",children:[e.jsx(Ms,{}),e.jsx(Ws,{}),e.jsx(wn,{}),e.jsx(yn,{}),e.jsx(zs,{}),e.jsx(gn,{}),e.jsx(bn,{}),e.jsxs("div",{className:"flex-1 overflow-y-auto",role:"region","aria-label":`${t} view`,children:[t==="matrix"&&e.jsx(ja,{}),t==="delta"&&e.jsx(Ta,{}),t==="activity"&&e.jsx(Ba,{}),t==="guided"&&e.jsx(tn,{}),t==="flows"&&e.jsx(rn,{}),t==="scorecard"&&e.jsx(cn,{}),t==="crawl"&&e.jsx(hn,{}),t==="forensic"&&e.jsx(Ln,{}),t==="compliance"&&e.jsx(Zn,{})]})]}),e.jsx(kn,{}),e.jsx(jn,{}),e.jsx(fn,{}),e.jsx(vn,{}),e.jsx(Me,{})]})}class xr extends ye.Component{constructor(){super(...arguments);Ye(this,"state",{error:null})}static getDerivedStateFromError(a){return{error:a}}componentDidCatch(a,n){console.error("[side-panel] render crashed",a,n.componentStack)}render(){return this.state.error?e.jsxs("div",{className:"p-4 text-sm bg-red-50 text-red-900 h-full flex flex-col",children:[e.jsx("h2",{className:"font-semibold mb-2",children:"Side panel crashed"}),e.jsx("p",{className:"text-xs mb-3",children:this.state.error.message}),e.jsx("button",{onClick:()=>location.reload(),className:"text-xs px-3 py-1 bg-red-600 text-white rounded hover:bg-red-700 self-start",children:"Reload"})]}):this.props.children}}export{hr as A,xr as E,ps as c};