new-site/site/public/_astro/hoisted.y8JOxkpm.js
justin f8cd37ac8c Initial commit — Performance West telecom compliance platform
Includes: API (Express/TypeScript), Astro site, Python workers,
document generators, FCC compliance tools, Canada CRTC formation,
Ansible infrastructure, and deployment scripts.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 06:54:22 -05:00

30 lines
7.4 KiB
JavaScript

import"./hoisted.yFz1BYXO.js";const c=[{id:1,text:"Does your privacy policy list all categories of personal information you collect?",detail:"CCPA requires disclosure of categories such as identifiers, commercial information, internet activity, geolocation data, biometric data, and more.",gap:"Your privacy policy should enumerate every category of personal information you collect, not just a general statement."},{id:2,text:"Does it disclose who you share data with?",detail:"You must identify the categories of third parties that receive personal information (e.g., service providers, analytics vendors, advertising partners).",gap:"Add a section listing all categories of third parties you share personal data with and the purpose for each."},{id:3,text:"Does it include a California-specific section (CCPA)?",detail:"If you meet CCPA thresholds, your policy must include California-specific disclosures about consumer rights.",gap:"Add a dedicated CCPA section covering California consumers' right to know, delete, opt-out, and non-discrimination."},{id:4,text:'Do you have a working "Do Not Sell My Personal Information" opt-out link?',detail:"CCPA requires a clear, conspicuous link on your homepage if you sell or share personal information.",gap:'Add a prominent "Do Not Sell or Share My Personal Information" link to your website footer and homepage.'},{id:5,text:"Do you respond to consumer data requests within 45 days?",detail:"CCPA requires verifiable consumer requests to be acknowledged within 10 days and fulfilled within 45 days.",gap:"Establish an internal process to receive, verify, and respond to consumer data access and deletion requests within the 45-day window."},{id:6,text:"Is your privacy policy updated within the last 12 months?",detail:"Privacy policies must be reviewed and updated at least annually to reflect current practices.",gap:"Review and update your privacy policy immediately. Add a 'Last Updated' date and set a recurring annual review."},{id:7,text:"Do you have a cookie consent mechanism?",detail:"Many jurisdictions and industry standards require informing users about cookies and obtaining consent before setting non-essential cookies.",gap:"Implement a cookie consent banner that allows users to accept or reject non-essential cookies before they are set."},{id:8,text:"Does your privacy policy include your physical mailing address?",detail:"California law and other regulations require a physical address where consumers can send written inquiries.",gap:"Add your company's physical mailing address to your privacy policy contact section."}];function p(){const t=document.getElementById("checklist-container");t&&(t.innerHTML=c.map(e=>`
<div class="bg-white border border-gray-200 rounded-xl p-6 shadow-sm">
<div class="flex items-start gap-4">
<span class="flex-shrink-0 w-8 h-8 rounded-full bg-pw-100 text-pw-700 text-sm font-bold flex items-center justify-center">${e.id}</span>
<div class="flex-1">
<p class="font-medium text-gray-900 mb-1">${e.text}</p>
<p class="text-xs text-gray-500 mb-4">${e.detail}</p>
<div class="flex gap-3">
<label class="flex-1 cursor-pointer">
<input type="radio" name="c${e.id}" value="yes" class="peer sr-only" required />
<div class="peer-checked:bg-green-50 peer-checked:border-green-300 peer-checked:text-green-700 border border-gray-200 rounded-lg py-2 px-4 text-center text-sm font-medium text-gray-600 hover:bg-gray-50 transition-colors">
Yes
</div>
</label>
<label class="flex-1 cursor-pointer">
<input type="radio" name="c${e.id}" value="no" class="peer sr-only" required />
<div class="peer-checked:bg-red-50 peer-checked:border-red-300 peer-checked:text-red-700 border border-gray-200 rounded-lg py-2 px-4 text-center text-sm font-medium text-gray-600 hover:bg-gray-50 transition-colors">
No
</div>
</label>
</div>
</div>
</div>
</div>
`).join(""))}function y(){let t=0;const e=[];return c.forEach(o=>{const s=document.querySelector(`input[name="c${o.id}"]:checked`);s&&s.value==="no"&&(t++,e.push({text:o.text,gap:o.gap}))}),{noCount:t,gaps:e}}function g(t,e){const o=document.getElementById("results"),s=document.getElementById("result-card"),i=document.getElementById("result-icon"),n=document.getElementById("result-title"),r=document.getElementById("result-score"),a=document.getElementById("result-description"),l=document.getElementById("result-gaps"),u=document.getElementById("checklist-form");if(!o||!s||!i||!n||!r||!a||!l||!u)return;u.classList.add("hidden"),o.classList.remove("hidden");const d=8-t;t===0?(s.className="rounded-xl p-8 border-2 text-center bg-green-50 border-green-300",i.textContent="✅",n.textContent="Good Standing",n.className="text-2xl font-bold mb-3 text-green-800",r.textContent=`${d}/8 items passed. No gaps identified.`,r.className="text-sm font-medium mb-4 text-green-700",a.textContent="Your privacy policy appears to cover all the key elements we checked. Keep it up-to-date with annual reviews, especially as privacy laws evolve. Consider a professional review to catch nuances this checklist cannot."):t<=3?(s.className="rounded-xl p-8 border-2 text-center bg-amber-50 border-amber-300",i.textContent="⚠️",n.textContent="Needs Attention",n.className="text-2xl font-bold mb-3 text-amber-800",r.textContent=`${d}/8 items passed. ${t} gap${t>1?"s":""} identified.`,r.className="text-sm font-medium mb-4 text-amber-700",a.textContent="Your privacy policy has some gaps that could expose you to regulatory enforcement or consumer complaints. These are addressable issues, but you should prioritize resolving them."):(s.className="rounded-xl p-8 border-2 text-center bg-red-50 border-red-300",i.textContent="🚨",n.textContent="Significant Gaps",n.className="text-2xl font-bold mb-3 text-red-800",r.textContent=`${d}/8 items passed. ${t} gaps identified.`,r.className="text-sm font-medium mb-4 text-red-700",a.textContent="Your privacy policy has significant deficiencies that could result in regulatory fines, consumer lawsuits, or enforcement actions. Under CCPA, penalties can reach $2,500 per unintentional violation and $7,500 per intentional violation. A professional review is strongly recommended."),e.length>0&&(l.innerHTML='<p class="font-medium text-gray-700 mb-3">Identified gaps and recommended actions:</p>'+e.map(m=>`
<div class="bg-white border border-gray-200 rounded-lg p-4">
<p class="font-medium text-gray-800 text-sm mb-1">${m.text}</p>
<p class="text-xs text-gray-600">${m.gap}</p>
</div>
`).join("")),o.scrollIntoView({behavior:"smooth",block:"start"})}document.addEventListener("DOMContentLoaded",()=>{p(),document.getElementById("checklist-form")?.addEventListener("submit",e=>{e.preventDefault();let o=!0;if(c.forEach(n=>{document.querySelector(`input[name="c${n.id}"]:checked`)||(o=!1)}),!o){alert("Please answer all 8 questions before submitting.");return}const{noCount:s,gaps:i}=y();g(s,i)}),document.getElementById("retake-btn")?.addEventListener("click",()=>{const e=document.getElementById("checklist-form"),o=document.getElementById("results");e&&o&&(e.classList.remove("hidden"),o.classList.add("hidden"),p(),window.scrollTo({top:0,behavior:"smooth"}))})});