new-site/site/public/order/fcc-compliance/index.html
justin cbfb8d6091 Add engagement authorization, remove price headers from intake pages, fix duplicate emails
- Add clickwrap authorization checkbox to fcc-compliance, state-puc, neca-ocn order pages
- Store engagement_accepted_at/ip/version in compliance_orders (migration 074)
- Add 499-A past-due/multi-year eSign engagement letter generator
- Gate 499-A handler on engagement signature for past-due/multi-year orders
- Remove price/tax/fee headers from all 19 intake pages (post-payment only)
- Fix duplicate confirmation email for compliance_batch orders
- Add USAC past-due fee negotiation research doc

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-28 02:50:02 -05:00

452 lines
No EOL
70 KiB
HTML

<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="description" content="Automated classification, de minimis check, LIRE exemption analysis, and complete Form 499-A filing. From $499. Let us handle your USAC obligations."><link rel="canonical" href="https://performancewest.net/order/fcc-499a/"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><!-- Open Graph --><meta property="og:type" content="website"><meta property="og:url" content="https://performancewest.net/order/fcc-499a/"><meta property="og:title" content="FCC Compliance Remediation — USF Compliance | Performance West Inc."><meta property="og:description" content="Automated classification, de minimis check, LIRE exemption analysis, and complete Form 499-A filing. From $499. Let us handle your USAC obligations."><!-- Twitter --><meta name="twitter:card" content="summary"><meta name="twitter:title" content="FCC Compliance Remediation — USF Compliance | Performance West Inc."><meta name="twitter:description" content="Automated classification, de minimis check, LIRE exemption analysis, and complete Form 499-A filing. From $499. Let us handle your USAC obligations."><script>
window.__PW_API = (function() {
var h = window.location.hostname;
if (h === "localhost" || h === "127.0.0.1") return "http://" + h + ":3001";
if (h === "dev.performancewest.net") return "https://api.dev.performancewest.net";
return "https://api.performancewest.net";
})();
</script><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet"><title>FCC Compliance Remediation — USF Compliance | Performance West Inc.</title><script defer src="https://analytics.performancewest.net/script.js" data-website-id="55250014-ee15-44ac-a1f6-81dabad3fe0f"></script><link rel="stylesheet" href="/_astro/about.DhmoKVOS.css">
<style>.step-dot[data-astro-cid-k2lzm3bk]{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;background:#e5e7eb;color:#6b7280;font-weight:600;font-size:11px}.step-indicator[data-astro-cid-k2lzm3bk].active .step-dot[data-astro-cid-k2lzm3bk]{background:#1e3a5f;color:#fff}.step-indicator[data-astro-cid-k2lzm3bk].done .step-dot[data-astro-cid-k2lzm3bk]{background:#22c55e;color:#fff}
</style><script type="module" src="/_astro/hoisted.DyVnHzn9.js"></script></head> <body class="min-h-screen flex flex-col"> <!-- Navigation --> <nav class="border-b border-gray-200 bg-white sticky top-0 z-50"> <div class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8"> <div class="flex justify-between h-24 items-center"> <a href="/" class="flex items-center"> <img src="/images/logo.png" alt="Performance West" class="h-20 w-auto" width="83" height="70"> </a> <div class="hidden md:flex items-center gap-8"> <!-- Services dropdown --> <div class="relative" id="services-dropdown"> <button type="button" class="text-sm text-gray-600 hover:text-gray-900 inline-flex items-center gap-1" id="services-btn">
Services
<svg class="w-3.5 h-3.5 transition-transform" id="services-chevron" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"></path></svg> </button> <div id="services-menu" class="absolute left-1/2 -translate-x-1/2 top-full mt-2 rounded-xl border border-gray-200 bg-white shadow-xl hidden z-50" style="width: 720px;"> <div class="grid grid-cols-3 gap-0 p-4"> <!-- Column 1 --> <div class="pr-4 border-r border-gray-100"> <p class="text-[11px] font-semibold uppercase tracking-wider text-blue-500 mb-2">Telecom</p> <a href="/services/telecom/fcc-499a" class="block py-1.5 text-sm text-gray-700 hover:text-pw-700">FCC 499A Filing</a> <a href="/services/telecom/stir-shaken" class="block py-1.5 text-sm text-gray-700 hover:text-pw-700">STIR/SHAKEN</a> <a href="/services/telecom/ipes-isp" class="block py-1.5 text-sm text-gray-700 hover:text-pw-700">IPES & ISP Registration</a> <a href="/services/telecom/database-management" class="block py-1.5 text-sm text-gray-700 hover:text-pw-700">Telecom Databases</a> <a href="/services/telecom/state-puc" class="block py-1.5 text-sm text-gray-700 hover:text-pw-700">State PUC/PSC Filings</a> <a href="/services/telecom/canada-crtc" class="block py-1.5 text-sm font-medium text-blue-600 hover:text-blue-800">Canada CRTC Package <span class="inline-flex items-center px-1.5 py-0.5 rounded-full text-[9px] font-bold bg-red-500 text-white ml-1 animate-pulse">HOT</span></a> <a href="/tools/fcc-compliance-check" class="block py-1.5 text-sm font-medium text-green-600 hover:text-green-800">FCC Compliance Check <span class="inline-flex items-center px-1.5 py-0.5 rounded-full text-[9px] font-bold bg-green-500 text-white ml-1">FREE</span></a> </div> <!-- Column 2 --> <div class="px-4 border-r border-gray-100"> <p class="text-[11px] font-semibold uppercase tracking-wider text-purple-500 mb-2">Data Privacy</p> <a href="/services/privacy/ccpa-audit" class="block py-1.5 text-sm text-gray-700 hover:text-pw-700">CCPA/CPRA Audit</a> <a href="/services/privacy/privacy-policy" class="block py-1.5 text-sm text-gray-700 hover:text-pw-700">Privacy Policy Review</a> <a href="/services/privacy/data-mapping" class="block py-1.5 text-sm text-gray-700 hover:text-pw-700">Data Mapping</a> <a href="/services/privacy/breach-response" class="block py-1.5 text-sm text-gray-700 hover:text-pw-700">Breach Response Plan</a> <p class="text-[11px] font-semibold uppercase tracking-wider text-green-500 mb-2 mt-4">TCPA</p> <a href="/services/tcpa/consent-audit" class="block py-1.5 text-sm text-gray-700 hover:text-pw-700">Consent Audit</a> <a href="/services/tcpa/dnc-compliance" class="block py-1.5 text-sm text-gray-700 hover:text-pw-700">DNC Compliance</a> <a href="/services/tcpa/campaign-review" class="block py-1.5 text-sm text-gray-700 hover:text-pw-700">Campaign Review</a> </div> <!-- Column 3 --> <div class="pl-4"> <p class="text-[11px] font-semibold uppercase tracking-wider text-slate-500 mb-2">Corporate</p> <a href="/services/corporate/formation" class="block py-1.5 text-sm text-gray-700 hover:text-pw-700">Business Formation</a> <a href="/services/corporate/state-registration" class="block py-1.5 text-sm text-gray-700 hover:text-pw-700">State Registration</a> <a href="/services/corporate/annual-reports" class="block py-1.5 text-sm text-gray-700 hover:text-pw-700">Annual Reports</a> <a href="/services/corporate/registered-agent" class="block py-1.5 text-sm text-gray-700 hover:text-pw-700">Registered Agent</a> <a href="/order/formation" class="mt-3 block py-2 px-3 text-sm font-medium text-white bg-pw-700 hover:bg-pw-800 rounded-lg text-center transition-colors">Form a Business</a> </div> </div> </div> </div> <a href="/services" class="text-sm text-gray-600 hover:text-gray-900">All Services</a> <a href="/pricing" class="text-sm text-gray-600 hover:text-gray-900">Pricing</a> <a href="/tools/contractor-quiz" class="text-sm text-gray-600 hover:text-gray-900">Free Tools</a> <a href="/contact" class="text-sm text-gray-600 hover:text-gray-900">Contact</a> <a href="/order/formation" class="ml-2 px-4 py-2 text-sm font-medium text-white bg-pw-700 hover:bg-pw-800 rounded-lg transition-colors">Form a Business</a> <!-- Account button — links to ERPNext portal --> <a href="https://portal.performancewest.net" id="nav-login-btn" class="ml-1 flex items-center gap-1.5 px-3 py-2 text-sm font-medium text-gray-600 hover:text-pw-700 hover:bg-pw-50 rounded-lg transition-colors border border-gray-200 hover:border-pw-300"> <svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M15.75 6a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0zM4.501 20.118a7.5 7.5 0 0114.998 0A17.933 17.933 0 0112 21.75c-2.676 0-5.216-.584-7.499-1.632z"></path></svg>
Client Portal
</a> <!-- Account button — logged in (hidden until session confirmed) --> <div id="nav-account-btn" class="hidden relative ml-1" id="nav-account-dropdown-root"> <button type="button" id="nav-account-trigger" class="flex items-center gap-2 px-3 py-2 text-sm font-medium text-pw-700 hover:bg-pw-50 rounded-lg transition-colors border border-pw-200"> <div class="w-6 h-6 rounded-full bg-pw-600 flex items-center justify-center shrink-0"> <svg class="w-3.5 h-3.5 text-white" fill="currentColor" viewBox="0 0 24 24"><path d="M12 12c2.7 0 4.8-2.1 4.8-4.8S14.7 2.4 12 2.4 7.2 4.5 7.2 7.2 9.3 12 12 12zm0 2.4c-3.2 0-9.6 1.6-9.6 4.8v2.4h19.2v-2.4c0-3.2-6.4-4.8-9.6-4.8z"></path></svg> </div> <span id="nav-greeting" class="max-w-[120px] truncate">My Account</span> <svg class="w-3.5 h-3.5 text-gray-400" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"></path></svg> </button> <!-- Dropdown --> <div id="nav-account-menu" class="absolute right-0 top-full mt-1 w-48 bg-white rounded-xl border border-gray-200 shadow-lg hidden z-50 py-1"> <div class="px-4 py-2 border-b border-gray-100"> <p class="text-xs text-gray-500">Signed in as</p> <p id="nav-account-email" class="text-xs font-medium text-gray-800 truncate"></p> </div> <button type="button" id="nav-logout-btn" class="w-full text-left px-4 py-2 text-sm text-gray-700 hover:bg-gray-50 transition-colors">
Sign out
</button> </div> </div> </div> <!-- Mobile menu button --> <button type="button" class="md:hidden text-gray-600 hover:text-gray-900" id="mobile-menu-btn"> <svg class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M4 6h16M4 12h16M4 18h16"></path></svg> </button> </div> </div> <!-- Mobile menu --> <div id="mobile-menu" class="md:hidden hidden border-t border-gray-200 bg-white"> <div class="px-4 py-3 space-y-1"> <p class="text-xs font-semibold text-blue-500 uppercase tracking-wider px-2 pt-1">Telecom</p> <a href="/services/telecom/fcc-499a" class="block px-2 py-2 text-sm text-gray-700 hover:bg-gray-50 rounded">FCC 499A Filing</a> <a href="/services/telecom/stir-shaken" class="block px-2 py-2 text-sm text-gray-700 hover:bg-gray-50 rounded">STIR/SHAKEN</a> <a href="/services/telecom/ipes-isp" class="block px-2 py-2 text-sm text-gray-700 hover:bg-gray-50 rounded">IPES & ISP Registration</a> <a href="/services/telecom/database-management" class="block px-2 py-2 text-sm text-gray-700 hover:bg-gray-50 rounded">Telecom Databases</a> <a href="/services/telecom/state-puc" class="block px-2 py-2 text-sm text-gray-700 hover:bg-gray-50 rounded">State PUC/PSC</a> <a href="/services/telecom/canada-crtc" class="block px-2 py-2 text-sm font-medium text-blue-600 hover:bg-blue-50 rounded">Canada CRTC Package <span class="inline-flex items-center px-1.5 py-0.5 rounded-full text-[9px] font-bold bg-red-500 text-white ml-1 animate-pulse">HOT</span></a> <p class="text-xs font-semibold text-purple-500 uppercase tracking-wider px-2 pt-3">Data Privacy</p> <a href="/services/privacy/ccpa-audit" class="block px-2 py-2 text-sm text-gray-700 hover:bg-gray-50 rounded">CCPA/CPRA Audit</a> <a href="/services/privacy/privacy-policy" class="block px-2 py-2 text-sm text-gray-700 hover:bg-gray-50 rounded">Privacy Policy Review</a> <a href="/services/privacy/data-mapping" class="block px-2 py-2 text-sm text-gray-700 hover:bg-gray-50 rounded">Data Mapping</a> <a href="/services/privacy/breach-response" class="block px-2 py-2 text-sm text-gray-700 hover:bg-gray-50 rounded">Breach Response Plan</a> <p class="text-xs font-semibold text-green-500 uppercase tracking-wider px-2 pt-3">TCPA</p> <a href="/services/tcpa/consent-audit" class="block px-2 py-2 text-sm text-gray-700 hover:bg-gray-50 rounded">Consent Audit</a> <a href="/services/tcpa/dnc-compliance" class="block px-2 py-2 text-sm text-gray-700 hover:bg-gray-50 rounded">DNC Compliance</a> <a href="/services/tcpa/campaign-review" class="block px-2 py-2 text-sm text-gray-700 hover:bg-gray-50 rounded">Campaign Review</a> <p class="text-xs font-semibold text-slate-500 uppercase tracking-wider px-2 pt-3">Corporate</p> <a href="/services/corporate/formation" class="block px-2 py-2 text-sm text-gray-700 hover:bg-gray-50 rounded">Business Formation</a> <a href="/services/corporate/state-registration" class="block px-2 py-2 text-sm text-gray-700 hover:bg-gray-50 rounded">State Registration</a> <a href="/services/corporate/annual-reports" class="block px-2 py-2 text-sm text-gray-700 hover:bg-gray-50 rounded">Annual Reports</a> <a href="/services/corporate/registered-agent" class="block px-2 py-2 text-sm text-gray-700 hover:bg-gray-50 rounded">Registered Agent</a> <div class="border-t border-gray-100 my-2"></div> <a href="/services" class="block px-2 py-2 text-sm text-gray-700 hover:bg-gray-50 rounded">All Services</a> <a href="/pricing" class="block px-2 py-2 text-sm text-gray-700 hover:bg-gray-50 rounded">Pricing</a> <a href="/tools/contractor-quiz" class="block px-2 py-2 text-sm text-gray-700 hover:bg-gray-50 rounded">Free Tools</a> <a href="/contact" class="block px-2 py-2 text-sm text-gray-700 hover:bg-gray-50 rounded">Contact</a> <a href="/order/formation" class="block mx-2 mt-2 px-4 py-2.5 text-sm font-medium text-white bg-pw-700 hover:bg-pw-800 rounded-lg text-center transition-colors">Form a Business</a> </div> </div> </nav> <main style="max-width:720px;margin:0 auto;padding:2rem 1.25rem 4rem;">
<div style="margin-bottom:1.5rem;">
<h1 class="text-2xl font-bold text-gray-900">FCC Compliance Remediation</h1>
<p class="text-sm text-gray-500 mt-1 mb-3">Based on your compliance check results, the services below need attention. Click each service to start its order — each has its own intake wizard to collect the information needed for filing.</p>
<div style="margin:.75rem 0 1.25rem;padding:.6rem .9rem;background:#ecfdf5;border-left:3px solid #059669;border-radius:0 6px 6px 0;font-size:.88rem;color:#065f46;max-width:48rem">
<strong>Tax deductible</strong> &mdash; FCC compliance fees are deductible as ordinary business expenses under IRC &sect; 162.
<details style="margin-top:.35rem">
<summary style="cursor:pointer;font-weight:600;color:#047857;font-size:.82rem;list-style:none;padding:.1rem 0">&blacktriangleright; Learn more about deductibility</summary>
<div style="padding:.5rem 0 .25rem;font-size:.85rem;line-height:1.55">
<p style="margin:.4rem 0">Under IRC &sect; 162, ordinary and necessary business expenses are deductible in the year paid or incurred. FCC compliance filing fees (499-A, CPNI, RMD, STIR/SHAKEN, BDC, CALEA) qualify as regulatory compliance costs.</p>
<p style="margin:.4rem 0"><strong>How to report:</strong></p>
<ul style="margin:.4rem 0;padding-left:1.25rem">
<li>Sole proprietors: Schedule C, Line 17 (Legal and professional services)</li>
<li>Partnerships/LLCs: Form 1065, Part II deductions</li>
<li>S-Corps: Form 1120-S, Line 12 (Other deductions)</li>
<li>C-Corps: Form 1120, Line 26 (Other deductions)</li>
</ul>
<p style="font-size:.78rem;color:#047857;font-style:italic;border-top:1px dashed #a7f3d0;padding-top:.35rem;margin-top:.5rem">This is general tax information, not tax advice. Consult your CPA or tax professional for your specific situation.</p>
</div>
</details>
</div>
</div>
<!-- How it works -->
<div class="mb-6 bg-white border border-gray-200 rounded-xl p-5">
<div class="grid grid-cols-1 sm:grid-cols-3 gap-4">
<!-- Step 1 -->
<div>
<div class="w-10 h-10 mx-auto mb-2 rounded-full bg-blue-100 flex items-center justify-center">
<svg class="w-6 h-6 text-blue-600" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M15.75 6a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0zM4.501 20.118a7.5 7.5 0 0114.998 0A17.933 17.933 0 0112 21.75c-2.676 0-5.216-.584-7.499-1.632z"/></svg>
</div>
<h3 class="text-sm font-bold text-gray-900 mb-1">1. We learn your business</h3>
<p class="text-xs text-gray-500 leading-relaxed">Our intake wizard collects your carrier details, service types, and revenue. We automatically classify your operations and identify exemptions (de minimis, LIRE).</p>
</div>
<!-- Step 2 -->
<div>
<div class="w-10 h-10 mx-auto mb-2 rounded-full bg-green-100 flex items-center justify-center">
<svg class="w-6 h-6 text-green-600" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z"/></svg>
</div>
<h3 class="text-sm font-bold text-gray-900 mb-1">2. We craft your documents</h3>
<p class="text-xs text-gray-500 leading-relaxed">Every document addresses all FCC regulation points. 499-A gets correct revenue percentages and traffic studies. RMD and CPNI cover every mandatory section for 2026 compliance.</p>
</div>
<!-- Step 3 -->
<div>
<div class="w-10 h-10 mx-auto mb-2 rounded-full bg-purple-100 flex items-center justify-center">
<svg class="w-6 h-6 text-purple-600" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M9 12.75L11.25 15 15 9.75m-3-7.036A11.959 11.959 0 013.598 6 11.99 11.99 0 003 9.749c0 5.592 3.824 10.29 9 11.623 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.571-.598-3.751h-.152c-3.196 0-6.1-1.248-8.25-3.285z"/></svg>
</div>
<h3 class="text-sm font-bold text-gray-900 mb-1">3. We file &amp; confirm</h3>
<p class="text-xs text-gray-500 leading-relaxed">We submit directly to FCC portals (ECFS, RMD, USAC E-File) and email you the confirmation number + filed documents. Same-day service available for CPNI and RMD.</p>
</div>
</div>
<!-- Trust indicators -->
<div class="mt-4 pt-3 border-t border-gray-100 flex flex-wrap justify-center gap-3 text-xs text-gray-500">
<span class="flex items-center gap-1">
<svg class="w-3.5 h-3.5 text-green-500" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"/></svg>
No hourly billing
</span>
<span class="flex items-center gap-1">
<svg class="w-3.5 h-3.5 text-green-500" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"/></svg>
Fixed pricing
</span>
<span class="flex items-center gap-1">
<svg class="w-3.5 h-3.5 text-green-500" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"/></svg>
Same-day available
</span>
<span class="flex items-center gap-1">
<svg class="w-3.5 h-3.5 text-green-500" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"/></svg>
Portal submission included
</span>
</div>
</div>
<!-- Entity info bar -->
<div id="pw-entity-bar" class="flex items-center gap-3 px-4 py-3 mb-4 bg-gray-50 border border-gray-200 rounded-lg" hidden>
<span id="pw-entity-name" class="font-semibold text-gray-900"></span>
<span id="pw-entity-frn" class="font-mono text-sm text-gray-500"></span>
</div>
<!-- Service cards — each links to its individual order page -->
<div id="pw-svc-list" class="space-y-3 mb-6">
<p class="text-sm text-gray-400">Loading recommended services...</p>
</div>
<!-- Bundle tip -->
<div id="pw-bundle-tip" class="bg-green-50 border border-green-200 rounded-lg p-4 mb-6 text-center" hidden>
<p class="text-sm text-green-800">
<strong>Save 15%</strong> — order multiple services through the
<a href="/order/fcc-full-compliance" class="text-green-700 underline font-semibold">Full Compliance Bundle ($1,499)</a>
instead of ordering individually.
</p>
</div>
<!-- Security & payment badges -->
<div class="mt-6 pt-4 border-t border-gray-100">
<div class="flex flex-wrap items-center justify-center gap-4 sm:gap-6">
<div class="flex items-center gap-1.5 text-gray-500" title="256-bit TLS encryption">
<svg class="w-5 h-5 text-green-600" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M16.5 10.5V6.75a4.5 4.5 0 10-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 002.25-2.25v-6.75a2.25 2.25 0 00-2.25-2.25H6.75a2.25 2.25 0 00-2.25 2.25v6.75a2.25 2.25 0 002.25 2.25z"></path></svg>
<span class="text-[10px] font-semibold text-gray-600">SSL Secured</span>
</div>
<div class="flex items-center gap-1.5 text-gray-500" title="Payments by Stripe">
<svg class="w-5 h-5" viewBox="0 0 24 24" fill="none"><rect width="24" height="24" rx="4" fill="#635BFF"></rect><path d="M11.2 9.6c0-.66.54-.92 1.44-.92.96 0 2.16.3 3.12.82V6.82c-1.04-.42-2.08-.58-3.12-.58-2.56 0-4.24 1.34-4.24 3.56 0 3.48 4.78 2.92 4.78 4.42 0 .78-.68 1.04-1.64 1.04-1.42 0-2.46-.42-3.54-1.06v2.7c1.2.52 2.42.74 3.54.74 2.62 0 4.42-1.3 4.42-3.56-.02-3.74-4.76-3.08-4.76-4.28z" fill="white"></path></svg>
<span class="text-[10px] font-semibold text-gray-600">Stripe</span>
</div>
<div class="flex items-center gap-1" title="We accept all major cards, ACH, PayPal, Klarna, and crypto">
<img src="/images/cards/visa.png" alt="Visa" class="h-5 w-auto" loading="lazy">
<img src="/images/cards/mastercard.svg" alt="Mastercard" class="h-6 w-auto" loading="lazy">
<img src="/images/cards/amex.png" alt="Amex" class="h-6 w-auto" loading="lazy">
</div>
<div class="flex items-center gap-1.5 text-gray-500" title="100% satisfaction guaranteed">
<svg class="w-5 h-5" viewBox="0 0 40 40" fill="none"><circle cx="20" cy="20" r="19" fill="#059669"></circle><path d="M14 20 L18 24 L27 15" fill="none" stroke="white" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"></path></svg>
<span class="text-[10px] font-semibold text-gray-600">Guaranteed</span>
</div>
</div>
</div>
<div class="text-center mt-6">
<a href="/tools/fcc-compliance-check" class="inline-flex items-center gap-1.5 text-sm text-blue-600 hover:text-blue-800 transition-colors">
<svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M10.5 19.5L3 12m0 0l7.5-7.5M3 12h18"></path></svg>
Back to Compliance Check
</a>
</div>
</main>
<script>
var API = window.__PW_API || "https://api.performancewest.net";
window._hasExistingOCN = false;
window._existingOCN = "";
var CHECK_TO_SLUG = {
cpni:"cpni-certification", cpni_certification:"cpni-certification",
"499a":"fcc-499a", form_499a:"fcc-499a",
"499q":"fcc-499a-499q", form_499q:"fcc-499a-499q",
rmd:"rmd-filing", rmd_filing:"rmd-filing",
stir:"stir-shaken", stir_shaken:"stir-shaken",
bdc:"bdc-filing", bdc_filing:"bdc-filing",
"bdc-broadband":"bdc-broadband", "bdc-voice":"bdc-voice",
dc_agent:"dc-agent", calea:"calea-ssi", calea_ssi:"calea-ssi",
ocn:"ocn-registration", neca_ocn:"ocn-registration",
cores:"cores-frn-registration",
"499_init":"fcc-499-initial",
full:"fcc-full-compliance",
foreign:"foreign-qualification-multi"
};
var SLUG_META = {
"cpni-certification": {label:"CPNI Annual Certification", price:14900, desc:"47 CFR § 64.2009 annual CPNI cert filed to FCC ECFS", order:"/order/cpni-certification"},
"fcc-499a": {label:"FCC Form 499-A Filing", price:49900, desc:"Annual USF contribution filing at USAC E-File", order:"/order/fcc-499a"},
"fcc-499a-499q": {label:"FCC 499-A + 499-Q Bundle", price:59900, desc:"Annual + quarterly USF projections", order:"/order/fcc-499a-499q"},
"rmd-filing": {label:"RMD Registration / Recertification", price:21900, gov_fee:10000, gov_fee_label:"FCC RMD filing fee", desc:"Robocall Mitigation Database filing + $100 FCC filing fee", order:"/order/rmd-filing"},
"stir-shaken": {label:"STIR/SHAKEN Implementation", price:49900, desc:"STIR/SHAKEN certificate + attestation setup", order:"/order/stir-shaken"},
"bdc-filing": {label:"BDC Filing (Broadband + Voice)", price:29900, desc:"Broadband + Voice subscription data collection", order:"/order/bdc-filing"},
"bdc-broadband": {label:"BDC Broadband Deployment Filing", price:19900, desc:"Broadband deployment data collection (semi-annual)", order:"/order/bdc-broadband"},
"bdc-voice": {label:"BDC Voice Subscription Filing", price:14900, desc:"Voice subscription data collection, formerly Form 477 Voice", order:"/order/bdc-voice"},
"dc-agent": {label:"D.C. Registered Agent (Annual)", price:9900, desc:"Statutory agent for FCC correspondence", order:"/order/dc-agent"},
"calea-ssi": {label:"CALEA SSI Plan", price:29900, desc:"System Security & Integrity plan — required for voice, VoIP, and broadband providers (wholesale and retail)", order:"/order/calea-ssi", note:"We generate the SSI plan document and help identify a Trusted Third Party (TTP) vendor (Subsentio, Yaana, or CBI) for lawful intercept capability. CALEA applies to all telecom carriers and facilities-based broadband ISPs — wholesale and retail. You will need an active TTP contract (~$500\u2013$2,000/yr) for actual intercept. Wholesale-only carriers may qualify for a simplified cooperation agreement. <br><br><strong>Voice-only providers:</strong> Consider operating under a <a href='/order/canada-crtc' class='text-blue-600 underline font-medium'>Canadian CRTC carrier license</a> instead — Canada has significantly less compliance red tape for VoIP carriers, with no CALEA equivalent, no USF contributions, and no annual RMD/CPNI certifications."},
"ocn-registration": {label:"NECA OCN Registration", price:265000, nodiscount:true, desc:"OCN + sponsoring CLEC agreement — includes $550 NECA fee. One-time, no annual fees.", order:"/order/neca-ocn", note:"Includes OCN registration ($650: $550 NECA fee + $100 service) and sponsoring CLEC agreement ($2,000) required for NECA to process the application. <br><br>Already have your own tandem services agreement? <a href='/contact?subject=OCN+with+existing+tandem' class='text-blue-600 underline'>Open a ticket</a> for a reduced price of $650."},
"cores-frn-registration": {label:"CORES / FRN Registration", price:9900, desc:"FCC Registration Number enrollment", order:"/order/cores-frn-registration"},
"fcc-499-initial": {label:"Form 499 Initial Registration", price:29900, desc:"New filer USAC registration", order:"/order/fcc-499-initial"},
"fcc-full-compliance": {label:"FCC Full Compliance Bundle", price:149900,desc:"Everything in one engagement", order:"/order/fcc-full-compliance"}
};
function usd(c){return "$"+(c/100).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:0})}
var params=new URLSearchParams(window.location.search);
var rawKeys=(params.get("services")||"").split(",").map(function(s){return s.trim()}).filter(Boolean);
var frn=params.get("frn")||"";
var slugs=[]; var seen={};
rawKeys.forEach(function(k){var s=CHECK_TO_SLUG[k]||k; if(SLUG_META[s]&&!seen[s]){slugs.push(s);seen[s]=1}});
if(slugs.indexOf("fcc-499a")>=0&&slugs.indexOf("fcc-499a-499q")>=0) slugs.splice(slugs.indexOf("fcc-499a"),1);
var listEl=document.getElementById("pw-svc-list");
var entityBar=document.getElementById("pw-entity-bar");
var bundleTip=document.getElementById("pw-bundle-tip");
if(frn){
fetch(API+"/api/v1/fcc/lookup?frn="+frn+"&quick=1").then(function(r){return r.json()}).then(function(d){
if(d.entity_name){
document.getElementById("pw-entity-name").textContent=d.entity_name;
document.getElementById("pw-entity-frn").textContent="FRN: "+frn;
entityBar.hidden=false;
}
}).catch(function(){});
}
// Track selected services (starts with flagged ones)
var selectedSlugs = slugs.slice();
function renderServices() {
// Preserve the checkout form if it exists (don't wipe user's typed data)
var existingForm = document.getElementById("pw-checkout-section");
listEl.innerHTML="";
if(!Object.keys(SLUG_META).length) return;
// Flagged services (pre-checked)
var flaggedSection = document.createElement("div");
flaggedSection.className = "space-y-2";
if(slugs.length > 0) {
var flaggedLabel = document.createElement("p");
flaggedLabel.className = "text-xs font-semibold text-red-700 uppercase tracking-wider mb-2";
flaggedLabel.textContent = "Flagged by compliance check";
flaggedSection.appendChild(flaggedLabel);
}
// All services as checkboxes
var allSlugs = Object.keys(SLUG_META);
var otherSlugs = allSlugs.filter(function(s){ return slugs.indexOf(s) < 0 });
function makeCard(slug, isFlagged) {
var m = SLUG_META[slug]; if(!m) return null;
var checked = selectedSlugs.indexOf(slug) >= 0;
var card = document.createElement("label");
card.className = "flex items-center gap-3 p-3 rounded-lg border cursor-pointer transition-colors " +
(checked
? (isFlagged ? "border-red-300 bg-red-50" : "border-pw-300 bg-pw-50")
: "border-gray-200 bg-white hover:border-gray-300");
var noteHtml = '';
if (checked && m.note) {
noteHtml = '<p class="text-xs text-amber-700 bg-amber-50 border border-amber-200 rounded px-2 py-1.5 mt-2">' + m.note + '</p>';
}
// OCN: show "I already have an OCN" input when STIR/SHAKEN forces it
if (slug === "ocn-registration" && checked && selectedSlugs.indexOf("stir-shaken") >= 0) {
noteHtml += '<div class="mt-2 flex items-center gap-2">' +
'<label class="text-xs text-gray-600">Already have an OCN?</label>' +
'<input type="text" id="pw-existing-ocn" maxlength="4" placeholder="4-char OCN" value="' + (window._existingOCN || '') + '" class="w-20 px-2 py-1 text-xs font-mono border border-gray-300 rounded uppercase">' +
'<button type="button" onclick="var v=document.getElementById(\'pw-existing-ocn\').value.trim().toUpperCase();if(v.length===4){window._hasExistingOCN=true;window._existingOCN=v;selectedSlugs=selectedSlugs.filter(function(x){return x!==\'ocn-registration\'});renderServices();}else{window._hasExistingOCN=false;}" class="text-xs text-blue-600 underline">Remove OCN from order</button>' +
'</div>';
}
card.innerHTML =
'<input type="checkbox" data-slug="'+slug+'" '+(checked?'checked':'')+' class="w-4 h-4 rounded border-gray-300 text-pw-600 focus:ring-pw-500 shrink-0 mt-0.5">' +
'<div class="flex-1 min-w-0">' +
'<p class="text-sm font-semibold '+(checked?(isFlagged?'text-red-900':'text-gray-900'):'text-gray-700')+'">'+m.label+'</p>' +
'<p class="text-xs '+(checked?(isFlagged?'text-red-700':'text-gray-600'):'text-gray-400')+'">'+m.desc+'</p>' +
noteHtml +
'</div>' +
'<span class="text-sm font-bold '+(checked?(isFlagged?'text-red-800':'text-gray-900'):'text-gray-400')+' shrink-0">'+usd(m.price)+'</span>';
card.querySelector("input").addEventListener("change", function(e) {
var s = e.target.dataset.slug;
if(e.target.checked) { if(selectedSlugs.indexOf(s)<0) selectedSlugs.push(s); }
else { selectedSlugs = selectedSlugs.filter(function(x){return x!==s}); }
// Deduplicate 499a/499a-499q
if(s==="fcc-499a"&&e.target.checked&&selectedSlugs.indexOf("fcc-499a-499q")>=0) selectedSlugs=selectedSlugs.filter(function(x){return x!=="fcc-499a-499q"});
if(s==="fcc-499a-499q"&&e.target.checked&&selectedSlugs.indexOf("fcc-499a")>=0) selectedSlugs=selectedSlugs.filter(function(x){return x!=="fcc-499a"});
// STIR/SHAKEN requires OCN — auto-add if not already present
if(s==="stir-shaken"&&e.target.checked&&selectedSlugs.indexOf("ocn-registration")<0&&!window._hasExistingOCN) {
selectedSlugs.push("ocn-registration");
}
// Can't remove OCN while STIR/SHAKEN is selected (unless they have one)
if(s==="ocn-registration"&&!e.target.checked&&selectedSlugs.indexOf("stir-shaken")>=0&&!window._hasExistingOCN) {
selectedSlugs.push("ocn-registration"); // Re-add it
}
renderServices();
});
return card;
}
slugs.forEach(function(slug) {
var card = makeCard(slug, true);
if(card) flaggedSection.appendChild(card);
});
listEl.appendChild(flaggedSection);
// Only show relevant add-on services (not everything in the catalog)
// Exclude: BDC variants (only if flagged), CORES/FRN reg (only new carriers),
// 499 Initial (only new filers), Full Bundle (separate product)
var EXCLUDE_UNLESS_FLAGGED = new Set([
"bdc-filing", "bdc-broadband", "bdc-voice",
"cores-frn-registration", "fcc-499-initial", "fcc-full-compliance",
"dc-agent", "ocn-registration"
]);
var relevantAddons = otherSlugs.filter(function(s) {
if (!EXCLUDE_UNLESS_FLAGGED.has(s)) return true;
// Show OCN if STIR/SHAKEN is selected and user doesn't have existing OCN
if (s === "ocn-registration" && selectedSlugs.indexOf("stir-shaken") >= 0 && !window._hasExistingOCN) return true;
return false;
});
if(relevantAddons.length > 0) {
var addSection = document.createElement("div");
addSection.className = "mt-4";
var addLabel = document.createElement("p");
addLabel.className = "text-xs font-semibold text-gray-500 uppercase tracking-wider mb-2";
addLabel.textContent = "Add more services";
addSection.appendChild(addLabel);
var addGrid = document.createElement("div");
addGrid.className = "space-y-2";
relevantAddons.forEach(function(slug) {
var card = makeCard(slug, false);
if(card) addGrid.appendChild(card);
});
addSection.appendChild(addGrid);
listEl.appendChild(addSection);
}
// Total + discount info — gov fees (passthrough) are NOT discountable
if(selectedSlugs.length === 0) return;
var discountableTotal=0; var nonDiscountableTotal=0; var govTotal=0;
selectedSlugs.forEach(function(s){
var m=SLUG_META[s]||{};
if(m.nodiscount) nonDiscountableTotal+=m.price||0;
else discountableTotal+=m.price||0;
govTotal+=m.gov_fee||0;
});
var svcTotal=discountableTotal+nonDiscountableTotal;
var subtotal=svcTotal+govTotal;
var discountableSlugs = selectedSlugs.filter(function(s){ var m=SLUG_META[s]||{}; return m.price > 0 && !m.nodiscount; });
var hasDisc=discountableSlugs.length>=2;
var disc=hasDisc?Math.round(discountableTotal*0.15):0;
var summary=document.createElement("div");
summary.className="mt-4 p-4 bg-gray-50 border border-gray-200 rounded-lg";
var rows='<div class="flex justify-between text-sm mb-1"><span>'+selectedSlugs.length+' service'+(selectedSlugs.length>1?'s':'')+'</span><span>'+usd(svcTotal)+'</span></div>';
if(govTotal>0) rows+='<div class="flex justify-between text-sm text-gray-500 mb-1"><span>Government filing fees (passthrough)</span><span>'+usd(govTotal)+'</span></div>';
if(hasDisc) rows+='<div class="flex justify-between text-sm text-green-700 mb-1"><span>Bundle discount (15%)</span><span>-'+usd(disc)+'</span></div>';
rows+='<div class="flex justify-between font-bold text-base border-t border-gray-300 pt-2 mt-1"><span>Total</span><span>'+usd(subtotal-disc)+'</span></div>';
summary.innerHTML=rows;
listEl.appendChild(summary);
// Re-attach preserved form if it exists
if(existingForm && selectedSlugs.length > 0) {
listEl.appendChild(existingForm);
}
// Action: batch checkout with contact info + payment inline
if(selectedSlugs.length > 0 && !document.getElementById("pw-batch-form")) {
var actions=document.createElement("div");
actions.className="mt-5";
actions.id="pw-checkout-section";
actions.innerHTML=
'<form id="pw-batch-form" class="space-y-4">' +
'<h3 class="text-sm font-semibold text-gray-900">Contact Information</h3>' +
'<div class="grid grid-cols-2 gap-3" style="grid-template-columns:1fr 1fr">' +
'<div><label class="block text-xs font-medium text-gray-600 mb-1">Full name *</label>' +
'<input type="text" id="pw-name" required placeholder="Jane Doe" class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg outline-none"></div>' +
'<div><label class="block text-xs font-medium text-gray-600 mb-1">Email *</label>' +
'<input type="email" id="pw-email" required placeholder="jane@company.com" class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg outline-none"></div>' +
'<div><label class="block text-xs font-medium text-gray-600 mb-1">Phone</label>' +
'<input type="tel" id="pw-phone" placeholder="(555) 123-4567" class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg outline-none"></div>' +
'<div><label class="block text-xs font-medium text-gray-600 mb-1">Referral code</label>' +
'<input type="text" id="pw-promo" placeholder="Optional" class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg outline-none uppercase"></div>' +
'</div>' +
'<h4 class="text-sm font-semibold text-gray-900">Payment Method</h4>' +
'<div class="space-y-2">' +
'<label class="flex items-center gap-3 p-3 rounded-lg border border-gray-200 cursor-pointer hover:border-pw-400 has-[:checked]:border-pw-500 has-[:checked]:bg-pw-50"><input type="radio" name="pw_pay" value="ach" checked><span class="text-sm font-medium text-gray-800">ACH Bank Transfer</span><span class="ml-auto text-xs text-green-600 font-medium">Recommended — No fee</span></label>' +
'<label class="flex items-center gap-3 p-3 rounded-lg border border-gray-200 cursor-pointer hover:border-pw-400 has-[:checked]:border-pw-500 has-[:checked]:bg-pw-50"><input type="radio" name="pw_pay" value="card"><span class="text-sm font-medium text-gray-800">Credit / Debit Card</span><span class="ml-auto text-xs text-gray-400">+3%</span></label>' +
'<label class="flex items-center gap-3 p-3 rounded-lg border border-gray-200 cursor-pointer hover:border-pw-400 has-[:checked]:border-pw-500 has-[:checked]:bg-pw-50"><input type="radio" name="pw_pay" value="paypal"><span class="text-sm font-medium text-gray-800">PayPal</span><span class="ml-auto text-xs text-gray-400">+3%</span></label>' +
'<label class="flex items-center gap-3 p-3 rounded-lg border border-gray-200 cursor-pointer hover:border-pw-400 has-[:checked]:border-pw-500 has-[:checked]:bg-pw-50"><input type="radio" name="pw_pay" value="crypto"><span class="text-sm font-medium text-gray-800">Cryptocurrency</span><span class="ml-auto text-xs text-gray-400">No fee</span></label>' +
'</div>' +
'<label class="flex items-start gap-2 p-3 mt-3 rounded-lg border border-gray-200 cursor-pointer text-xs text-gray-600 leading-relaxed"><input type="checkbox" id="pw-engage" required class="mt-0.5 rounded border-gray-300 text-pw-600 focus:ring-pw-500"><span>I authorize Performance West Inc. to prepare and submit regulatory filings on my behalf as described above. I understand Performance West provides compliance consulting services, not legal advice or legal representation. I confirm the information I provide is accurate to the best of my knowledge. <a href="/terms" target="_blank" class="text-pw-600 underline">Terms of Service</a></span></label>' +
'<button type="submit" id="pw-submit" class="w-full py-3 rounded-lg bg-green-600 text-white font-bold text-base hover:bg-green-700 transition-colors disabled:bg-gray-400 disabled:cursor-not-allowed">Continue to Payment</button>' +
'<p id="pw-err" class="text-sm text-red-700 mt-1" hidden></p>' +
'</form>';
listEl.appendChild(actions);
// Batch checkout handler
document.getElementById("pw-batch-form").addEventListener("submit", function(e){
e.preventDefault();
if(selectedSlugs.length === 0){ alert("Please select at least one service."); return; }
var engageBox=document.getElementById("pw-engage");
if(engageBox && !engageBox.checked){ alert("Please accept the authorization terms to continue."); return; }
var errEl=document.getElementById("pw-err");errEl.hidden=true;
var btn=document.getElementById("pw-submit");btn.disabled=true;btn.textContent="Creating order...";
var payMethod=document.querySelector("input[name=pw_pay]:checked").value;
var body={
services:selectedSlugs,
customer_name:document.getElementById("pw-name").value.trim(),
customer_email:document.getElementById("pw-email").value.trim(),
customer_phone:document.getElementById("pw-phone").value.trim()||undefined,
discount_code:document.getElementById("pw-promo").value.trim()||undefined,
intake_data:{frn:frn,source:"compliance-check-remediation"},
engagement_accepted:true
};
fetch(API+"/api/v1/compliance-orders/batch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)})
.then(function(r){return r.json().then(function(d){if(!r.ok)throw new Error(d.error||"Order failed");return d})})
.then(function(d){
btn.textContent="Redirecting to payment...";
return fetch(API+"/api/v1/checkout/create-session",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({order_id:d.batch_id,order_type:"compliance_batch",payment_method:payMethod})}).then(function(r){return r.json().then(function(sd){if(!r.ok)throw new Error(sd.error||"Checkout failed");return sd})});
})
.then(function(sd){
if(!sd.checkout_url)throw new Error("No checkout URL");
window.location.href=sd.checkout_url;
})
.catch(function(err){
errEl.textContent=err.message;errEl.hidden=false;btn.disabled=false;btn.textContent="Continue to Payment";
});
});
} else if(selectedSlugs.length === 0) {
var existing = document.getElementById("pw-checkout-section");
if(existing) existing.remove();
}
bundleTip.hidden=true;
} // end renderServices
renderServices();
</script> <section class="py-10 border-t border-gray-100"> <div class="max-w-2xl mx-auto px-4 text-center"> <h2 class="text-lg font-bold text-gray-900 mb-2">Stay ahead of compliance changes</h2> <p class="text-sm text-gray-600 mb-5">Regulatory updates, enforcement trends, and compliance tips. No spam.</p> <button type="button" id="subscribe-btn-footer" class="inline-flex items-center gap-2 px-5 py-2.5 rounded-lg bg-pw-700 text-white text-sm font-medium hover:bg-pw-800 transition-colors"> <svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M21.75 6.75v10.5a2.25 2.25 0 01-2.25 2.25h-15a2.25 2.25 0 01-2.25-2.25V6.75m19.5 0A2.25 2.25 0 0019.5 4.5h-15a2.25 2.25 0 00-2.25 2.25m19.5 0v.243a2.25 2.25 0 01-1.07 1.916l-7.5 4.615a2.25 2.25 0 01-2.36 0L3.32 8.91a2.25 2.25 0 01-1.07-1.916V6.75"></path></svg>
Join Mailing List
</button> </div> </section> <!-- Subscribe modal --> <div id="subscribe-modal-global" class="fixed inset-0 z-[9999] hidden items-center justify-center bg-black/50 backdrop-blur-sm"> <div class="bg-white rounded-2xl shadow-2xl max-w-md w-full mx-4 p-6"> <div class="flex justify-between items-start mb-4"> <h3 class="text-lg font-semibold text-gray-900">Join our mailing list</h3> <button type="button" id="subscribe-close-global" class="text-gray-400 hover:text-gray-600"> <svg class="w-5 h-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"></path></svg> </button> </div> <form id="subscribe-form-global" class="space-y-4"> <div> <label for="sub-name-g" class="block text-sm font-medium text-gray-700 mb-1">Name <span class="text-gray-400">(optional)</span></label> <input type="text" id="sub-name-g" placeholder="Your name" maxlength="100" class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-pw-500 focus:border-pw-500 outline-none"> </div> <div> <label for="sub-company-g" class="block text-sm font-medium text-gray-700 mb-1">Company <span class="text-gray-400">(optional)</span></label> <input type="text" id="sub-company-g" placeholder="Your company" maxlength="200" class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-pw-500 focus:border-pw-500 outline-none"> </div> <div> <label for="sub-email-g" class="block text-sm font-medium text-gray-700 mb-1">Email <span class="text-red-400">*</span></label> <input type="email" id="sub-email-g" required placeholder="you@company.com" maxlength="200" class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-pw-500 focus:border-pw-500 outline-none"> </div> <div class="flex items-start gap-2"> <input type="checkbox" id="sub-consent-g" required class="mt-1 rounded border-gray-300 text-pw-600 focus:ring-pw-500"> <label for="sub-consent-g" class="text-xs text-gray-600 leading-relaxed">
I agree to receive compliance updates and service announcements from Performance West Inc. I can unsubscribe at any time. We never share your email.
</label> </div> <!-- Honeypot --> <div class="absolute opacity-0 h-0 overflow-hidden" aria-hidden="true" tabindex="-1"> <label for="sub-website-g">Website</label> <input type="text" id="sub-website-g" name="website" autocomplete="off" tabindex="-1"> </div> <input type="hidden" id="sub-ts-g" value=""> <button type="submit" id="sub-submit-g" class="w-full py-2.5 px-4 bg-pw-700 text-white text-sm font-medium rounded-lg hover:bg-pw-800 transition-colors disabled:opacity-50 disabled:cursor-not-allowed">
Subscribe
</button> </form> <div id="subscribe-success-global" class="hidden text-center py-4"> <div class="w-12 h-12 mx-auto mb-3 rounded-full bg-green-100 flex items-center justify-center"> <svg class="w-6 h-6 text-green-600" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M5 13l4 4L19 7"></path></svg> </div> <p class="text-sm font-medium text-gray-900">You're on the list!</p> <p class="text-xs text-gray-500 mt-1">We'll send compliance updates and regulatory alerts.</p> </div> </div> </div> <footer class="border-t border-gray-200 bg-gray-50 mt-auto"> <div class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-12"> <div class="grid grid-cols-2 md:grid-cols-4 gap-8"> <div> <h4 class="text-sm font-semibold text-gray-900 mb-3">Services</h4> <ul class="space-y-2 text-sm text-gray-600"> <li><a href="/services/telecom" class="hover:text-gray-900">Telecom Compliance</a></li> <li><a href="/services/privacy" class="hover:text-gray-900">Data Privacy</a></li> <li><a href="/services/tcpa" class="hover:text-gray-900">TCPA Compliance</a></li> <li><a href="/services/corporate" class="hover:text-gray-900">Corporate Services</a></li> <li><a href="/order/formation" class="font-medium text-pw-700 hover:text-pw-800">Form a Business</a></li> </ul> </div> <div> <h4 class="text-sm font-semibold text-gray-900 mb-3">Free Tools</h4> <ul class="space-y-2 text-sm text-gray-600"> <li><a href="/tools/formation-guide" class="hover:text-gray-900">Formation Guide</a></li> <li><a href="/tools/contractor-quiz" class="hover:text-gray-900">Contractor Quiz</a></li> <li><a href="/tools/privacy-check" class="hover:text-gray-900">Privacy Check</a></li> <li><a href="/tools/tcpa-check" class="hover:text-gray-900">TCPA Check</a></li> </ul> </div> <div> <h4 class="text-sm font-semibold text-gray-900 mb-3">Company</h4> <ul class="space-y-2 text-sm text-gray-600"> <li><a href="/about" class="hover:text-gray-900">About</a></li> <li><a href="/pricing" class="hover:text-gray-900">Pricing</a></li> <li><a href="/contact" class="hover:text-gray-900">Contact</a></li> <li><a href="https://portal.performancewest.net" class="hover:text-gray-900">Client Portal</a></li> <li><a href="/privacy" class="hover:text-gray-900">Privacy Policy</a></li> <li><a href="/terms" class="hover:text-gray-900">Terms of Service</a></li> </ul> </div> <div> <h4 class="text-sm font-semibold text-gray-900 mb-3">Contact</h4> <ul class="space-y-2 text-sm text-gray-600"> <li>Toll Free: 1-888-411-0383</li> <li><a href="mailto:info@performancewest.net" class="hover:text-gray-900">info@performancewest.net</a></li> <li class="text-xs leading-relaxed">525 Randall Ave Ste 100-1195<br>Cheyenne, WY 82001</li> <li><button type="button" id="footer-support-link" class="hover:text-gray-900">Open Support Ticket</button></li> </ul> </div> </div> <div class="mt-8 pt-8 border-t border-gray-200 flex flex-col items-center gap-3 text-sm text-gray-500"> <img src="/images/logo.png" alt="Performance West" class="h-12 w-auto" width="100" height="84" loading="lazy"> <p>&copy; 2026 Performance West Inc. &mdash; Professional compliance consulting.</p> <p class="text-xs text-gray-400">Performance West provides compliance consulting services. We do not provide legal advice or legal representation.</p> </div> </div> </footer> <!-- Floating help button --><button type="button" id="support-fab" aria-label="Open support" class="fixed bottom-6 left-6 z-[9999] w-14 h-14 rounded-full bg-pw-700 text-white shadow-lg hover:bg-pw-800 transition-all hover:scale-105 flex items-center justify-center"> <svg id="support-fab-icon-open" class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"> <path stroke-linecap="round" stroke-linejoin="round" d="M8.228 9c.549-1.165 2.03-2 3.772-2 2.21 0 4 1.343 4 3 0 1.4-1.278 2.575-3.006 2.907-.542.104-.994.54-.994 1.093m0 3h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path> </svg> <svg id="support-fab-icon-close" class="w-6 h-6 hidden" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"> <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"></path> </svg> </button> <!-- Slide-out panel --> <div id="support-panel" class="fixed bottom-24 left-6 z-[9998] w-[380px] max-w-[calc(100vw-2rem)] bg-white rounded-xl shadow-2xl border border-gray-200 transform translate-y-4 opacity-0 pointer-events-none transition-all duration-200 ease-out"> <div class="px-5 py-4 border-b border-gray-100 bg-gray-50 rounded-t-xl"> <h3 class="text-base font-semibold text-gray-900">How can we help?</h3> <p class="text-xs text-gray-500 mt-0.5">Choose a category and tell us what you need.</p> </div> <!-- Category selector (step 1) --> <div id="support-step-categories" class="p-4 space-y-2"> <button type="button" data-category="question" class="support-cat-btn w-full text-left px-4 py-3 rounded-lg border border-gray-200 hover:border-pw-300 hover:bg-pw-50 transition-colors group"> <div class="flex items-center gap-3"> <span class="flex-shrink-0 w-8 h-8 rounded-full bg-blue-100 text-blue-600 flex items-center justify-center"> <svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M8.228 9c.549-1.165 2.03-2 3.772-2 2.21 0 4 1.343 4 3 0 1.4-1.278 2.575-3.006 2.907-.542.104-.994.54-.994 1.093m0 3h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg> </span> <div> <span class="text-sm font-medium text-gray-900 group-hover:text-pw-700">Ask a Question</span> <span class="block text-xs text-gray-500">About our compliance services or process</span> </div> </div> </button> <button type="button" data-category="support" class="support-cat-btn w-full text-left px-4 py-3 rounded-lg border border-gray-200 hover:border-pw-300 hover:bg-pw-50 transition-colors group"> <div class="flex items-center gap-3"> <span class="flex-shrink-0 w-8 h-8 rounded-full bg-green-100 text-green-600 flex items-center justify-center"> <svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M18.364 5.636l-3.536 3.536m0 5.656l3.536 3.536M9.172 9.172L5.636 5.636m3.536 9.192l-3.536 3.536M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-5 0a4 4 0 11-8 0 4 4 0 018 0z"></path></svg> </span> <div> <span class="text-sm font-medium text-gray-900 group-hover:text-pw-700">Get Support</span> <span class="block text-xs text-gray-500">Help with an ongoing engagement</span> </div> </div> </button> <button type="button" data-category="issue" class="support-cat-btn w-full text-left px-4 py-3 rounded-lg border border-gray-200 hover:border-pw-300 hover:bg-pw-50 transition-colors group"> <div class="flex items-center gap-3"> <span class="flex-shrink-0 w-8 h-8 rounded-full bg-red-100 text-red-600 flex items-center justify-center"> <svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"></path></svg> </span> <div> <span class="text-sm font-medium text-gray-900 group-hover:text-pw-700">Report an Issue</span> <span class="block text-xs text-gray-500">Something isn't right with a deliverable</span> </div> </div> </button> <button type="button" data-category="service_request" class="support-cat-btn w-full text-left px-4 py-3 rounded-lg border border-gray-200 hover:border-pw-300 hover:bg-pw-50 transition-colors group"> <div class="flex items-center gap-3"> <span class="flex-shrink-0 w-8 h-8 rounded-full bg-purple-100 text-purple-600 flex items-center justify-center"> <svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"></path></svg> </span> <div> <span class="text-sm font-medium text-gray-900 group-hover:text-pw-700">Request a Service</span> <span class="block text-xs text-gray-500">Start a new compliance engagement</span> </div> </div> </button> <button type="button" data-category="quote" class="support-cat-btn w-full text-left px-4 py-3 rounded-lg border border-gray-200 hover:border-pw-300 hover:bg-pw-50 transition-colors group"> <div class="flex items-center gap-3"> <span class="flex-shrink-0 w-8 h-8 rounded-full bg-amber-100 text-amber-600 flex items-center justify-center"> <svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg> </span> <div> <span class="text-sm font-medium text-gray-900 group-hover:text-pw-700">Request a Quote</span> <span class="block text-xs text-gray-500">Get pricing for a complex engagement</span> </div> </div> </button> <!-- Sign-in link (hidden when logged in) --> <div id="support-signin-link" class="pt-2 border-t border-gray-100 mt-2"> <button type="button" id="support-signin-btn" class="w-full flex items-center justify-center gap-2 px-4 py-2 text-xs text-gray-500 hover:text-pw-700 transition-colors"> <svg class="w-3.5 h-3.5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"></path></svg>
Already a client? <span class="font-medium text-pw-600">Sign in</span> </button> </div> </div> <!-- Ticket form — Report an Issue + guest fallback (step 2a) --> <form id="support-step-form" class="hidden p-4"> <button type="button" id="support-back-btn" class="inline-flex items-center gap-1 text-xs text-gray-500 hover:text-gray-700 mb-3"> <svg class="w-3.5 h-3.5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"></path></svg>
Back
</button> <div id="support-category-badge" class="inline-flex items-center px-2.5 py-1 rounded-full text-xs font-medium bg-pw-100 text-pw-700 mb-3"></div> <div class="space-y-3"> <div> <label for="support-name" class="block text-xs font-medium text-gray-700 mb-1">Name <span class="text-gray-400">(optional)</span></label> <input type="text" id="support-name" name="name" placeholder="Your name" maxlength="100" class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-pw-500 focus:border-pw-500 outline-none transition-shadow"> </div> <div> <label for="support-email" class="block text-xs font-medium text-gray-700 mb-1">Email <span class="text-gray-400">(for follow-up)</span></label> <input type="email" id="support-email" name="email" placeholder="you@company.com" maxlength="200" class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-pw-500 focus:border-pw-500 outline-none transition-shadow"> </div> <div> <label for="support-subject" class="block text-xs font-medium text-gray-700 mb-1">Subject <span class="text-red-400">*</span></label> <input type="text" id="support-subject" name="subject" required minlength="3" maxlength="200" placeholder="Brief summary" class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-pw-500 focus:border-pw-500 outline-none transition-shadow"> </div> <div> <label for="support-message" class="block text-xs font-medium text-gray-700 mb-1">Message <span class="text-red-400">*</span></label> <textarea id="support-message" name="message" required minlength="10" maxlength="5000" rows="4" placeholder="Describe your question, issue, or request..." class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-pw-500 focus:border-pw-500 outline-none transition-shadow resize-y"></textarea> <p class="text-[10px] text-gray-400 mt-0.5 text-right"><span id="support-char-count">0</span> / 5000</p> </div> <button type="submit" id="support-submit-btn" class="w-full py-2.5 px-4 bg-pw-700 text-white text-sm font-medium rounded-lg hover:bg-pw-800 transition-colors disabled:opacity-50 disabled:cursor-not-allowed">
Submit
</button> </div> </form> <!-- Opportunity form — Request a Service / Request a Quote (step 2b) --> <form id="support-step-opportunity" class="hidden p-4"> <button type="button" id="opportunity-back-btn" class="inline-flex items-center gap-1 text-xs text-gray-500 hover:text-gray-700 mb-3"> <svg class="w-3.5 h-3.5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"></path></svg>
Back
</button> <div id="opportunity-category-badge" class="inline-flex items-center px-2.5 py-1 rounded-full text-xs font-medium bg-pw-100 text-pw-700 mb-3"></div> <div class="space-y-3"> <div> <label for="opp-name" class="block text-xs font-medium text-gray-700 mb-1">Name <span class="text-red-400">*</span></label> <input type="text" id="opp-name" name="name" required minlength="2" maxlength="100" placeholder="Your name" class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-pw-500 focus:border-pw-500 outline-none transition-shadow"> </div> <div> <label for="opp-email" class="block text-xs font-medium text-gray-700 mb-1">Email <span class="text-red-400">*</span></label> <input type="email" id="opp-email" name="email" required placeholder="you@company.com" maxlength="200" class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-pw-500 focus:border-pw-500 outline-none transition-shadow"> </div> <div> <label for="opp-company" class="block text-xs font-medium text-gray-700 mb-1">Company <span class="text-gray-400">(optional)</span></label> <input type="text" id="opp-company" name="company" placeholder="Company name" maxlength="200" class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-pw-500 focus:border-pw-500 outline-none transition-shadow"> </div> <div> <label for="opp-phone" class="block text-xs font-medium text-gray-700 mb-1">Phone <span class="text-gray-400">(optional)</span></label> <input type="tel" id="opp-phone" name="phone" placeholder="(555) 555-1234" maxlength="30" class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-pw-500 focus:border-pw-500 outline-none transition-shadow"> </div> <div> <label for="opp-service" class="block text-xs font-medium text-gray-700 mb-1">Service interest <span class="text-red-400">*</span></label> <select id="opp-service" name="service_slug" required class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-pw-500 focus:border-pw-500 outline-none transition-shadow bg-white"> <option value="" disabled selected>Select a service...</option> <option value="canada-crtc">Canada CRTC Carrier Package</option> <option value="llc-formation">LLC Formation</option> <option value="corporation-formation">Corporation Formation</option> <option value="registered-agent">Registered Agent</option> <option value="compliance-audit">Compliance Audit</option> <option value="other">Other / Not sure</option> </select> </div> <div> <label for="opp-details" class="block text-xs font-medium text-gray-700 mb-1">Details <span class="text-gray-400">(optional)</span></label> <textarea id="opp-details" name="details" maxlength="5000" rows="3" placeholder="Tell us about your project or what you need..." class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-pw-500 focus:border-pw-500 outline-none transition-shadow resize-y"></textarea> </div> <button type="submit" id="opp-submit-btn" class="w-full py-2.5 px-4 bg-pw-700 text-white text-sm font-medium rounded-lg hover:bg-pw-800 transition-colors disabled:opacity-50 disabled:cursor-not-allowed">
Submit Request
</button> </div> </form> <!-- Sign-in prompt — Ask a Question / Get Support when not logged in (step 2c) --> <div id="support-step-signin" class="hidden p-6"> <button type="button" id="signin-back-btn" class="inline-flex items-center gap-1 text-xs text-gray-500 hover:text-gray-700 mb-4"> <svg class="w-3.5 h-3.5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"></path></svg>
Back
</button> <div class="text-center"> <div class="w-12 h-12 mx-auto mb-3 rounded-full bg-blue-100 flex items-center justify-center"> <svg class="w-6 h-6 text-blue-600" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"></path></svg> </div> <h4 class="text-sm font-semibold text-gray-900 mb-1">Sign in for support</h4> <p class="text-xs text-gray-500 mb-5">Sign in to access your client portal where you can view your orders, submit support requests, and manage your services.</p> <button type="button" id="signin-auth-btn" class="w-full py-2.5 px-4 bg-pw-700 text-white text-sm font-medium rounded-lg hover:bg-pw-800 transition-colors mb-3">
Sign In
</button> <button type="button" id="signin-guest-btn" class="text-xs text-gray-500 hover:text-gray-700 transition-colors">
Continue as guest &rarr;
</button> </div> </div> <!-- Success state (step 3) --> <div id="support-step-success" class="hidden p-6 text-center"> <div class="w-12 h-12 mx-auto mb-3 rounded-full bg-green-100 flex items-center justify-center"> <svg class="w-6 h-6 text-green-600" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M5 13l4 4L19 7"></path></svg> </div> <h4 class="text-sm font-semibold text-gray-900 mb-1">Request received</h4> <p id="support-success-message" class="text-xs text-gray-500 mb-4">We'll get back to you within one business day.</p> <p id="support-ticket-id" class="text-xs text-gray-400 mb-4 hidden">Ref: <span></span></p> <button type="button" id="support-new-ticket-btn" class="text-xs text-pw-600 hover:text-pw-700 font-medium">Submit another request</button> </div> </div> <!-- Modal backdrop --><div id="auth-modal-backdrop" class="fixed inset-0 z-[200] bg-black/50 backdrop-blur-sm hidden items-center justify-center p-4" role="dialog" aria-modal="true" aria-labelledby="auth-modal-title"> <div id="auth-modal" class="relative w-full max-w-sm bg-white rounded-2xl shadow-2xl overflow-hidden"> <!-- Close --> <button id="auth-modal-close" type="button" aria-label="Close" class="absolute top-4 right-4 text-gray-400 hover:text-gray-600 transition-colors z-10"> <svg class="w-5 h-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"> <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"></path> </svg> </button> <!-- Tab bar --> <div id="auth-tabs" class="flex border-b border-gray-100"> <button type="button" id="auth-tab-login" class="auth-tab flex-1 py-4 text-sm font-semibold text-pw-700 border-b-2 border-pw-600 transition-colors">
Sign In
</button> <button type="button" id="auth-tab-register" class="auth-tab flex-1 py-4 text-sm font-semibold text-gray-400 border-b-2 border-transparent hover:text-gray-600 transition-colors">
Create Account
</button> </div> <div class="px-6 py-6"> <!-- ── Login form ──────────────────────────────────────────────────── --> <form id="auth-login-form" class="space-y-4" novalidate> <div> <label for="auth-login-email" class="block text-sm font-medium text-gray-700 mb-1">Email</label> <input type="email" id="auth-login-email" autocomplete="email" required class="w-full rounded-lg border border-gray-300 px-3 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-pw-500 focus:border-pw-500 transition-colors" placeholder="you@company.com"> </div> <div> <div class="flex items-center justify-between mb-1"> <label for="auth-login-password" class="text-sm font-medium text-gray-700">Password</label> <button type="button" id="auth-forgot-link" class="text-xs text-pw-600 hover:text-pw-800 underline underline-offset-2">
Forgot password?
</button> </div> <input type="password" id="auth-login-password" autocomplete="current-password" required class="w-full rounded-lg border border-gray-300 px-3 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-pw-500 focus:border-pw-500 transition-colors" placeholder="••••••••"> </div> <p id="auth-login-err" class="hidden text-xs text-red-600 font-medium"></p> <button type="submit" id="auth-login-btn" class="w-full py-2.5 rounded-lg bg-pw-700 text-white text-sm font-semibold hover:bg-pw-800 transition-colors disabled:opacity-50">
Sign In
</button> </form> <!-- ── Register form ──────────────────────────────────────────────── --> <form id="auth-register-form" class="space-y-4 hidden" novalidate> <div> <label for="auth-reg-name" class="block text-sm font-medium text-gray-700 mb-1">Your Name</label> <input type="text" id="auth-reg-name" autocomplete="name" class="w-full rounded-lg border border-gray-300 px-3 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-pw-500 focus:border-pw-500 transition-colors" placeholder="Full name"> </div> <div> <label for="auth-reg-email" class="block text-sm font-medium text-gray-700 mb-1">Email</label> <input type="email" id="auth-reg-email" autocomplete="email" required class="w-full rounded-lg border border-gray-300 px-3 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-pw-500 focus:border-pw-500 transition-colors" placeholder="you@company.com"> </div> <div> <label for="auth-reg-password" class="block text-sm font-medium text-gray-700 mb-1">Password</label> <input type="password" id="auth-reg-password" autocomplete="new-password" required class="w-full rounded-lg border border-gray-300 px-3 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-pw-500 focus:border-pw-500 transition-colors" placeholder="At least 8 characters"> </div> <p id="auth-reg-err" class="hidden text-xs text-red-600 font-medium"></p> <button type="submit" id="auth-reg-btn" class="w-full py-2.5 rounded-lg bg-pw-700 text-white text-sm font-semibold hover:bg-pw-800 transition-colors disabled:opacity-50">
Create Account
</button> </form> <!-- ── Forgot password form ────────────────────────────────────────── --> <div id="auth-forgot-form" class="hidden"> <button type="button" id="auth-back-to-login" class="flex items-center gap-1 text-xs text-gray-500 hover:text-gray-700 mb-4"> <svg class="w-3.5 h-3.5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M10.5 19.5L3 12m0 0l7.5-7.5M3 12h18"></path></svg>
Back to sign in
</button> <h3 class="text-base font-semibold text-gray-900 mb-1">Reset your password</h3> <p class="text-sm text-gray-500 mb-4">Enter your email and we'll send you a reset link.</p> <form id="auth-forgot-email-form" class="space-y-4" novalidate> <div> <label for="auth-forgot-email" class="block text-sm font-medium text-gray-700 mb-1">Email</label> <input type="email" id="auth-forgot-email" autocomplete="email" required class="w-full rounded-lg border border-gray-300 px-3 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-pw-500 focus:border-pw-500 transition-colors" placeholder="you@company.com"> </div> <p id="auth-forgot-err" class="hidden text-xs text-red-600 font-medium"></p> <p id="auth-forgot-ok" class="hidden text-xs text-green-700 font-medium"></p> <button type="submit" id="auth-forgot-btn" class="w-full py-2.5 rounded-lg bg-pw-700 text-white text-sm font-semibold hover:bg-pw-800 transition-colors disabled:opacity-50">
Send reset link
</button> </form> </div> </div> </div> </div> <!-- Tawk.to Live Chat --> <script>
var Tawk_API=Tawk_API||{}, Tawk_LoadStart=new Date();
(function(){
var s1=document.createElement("script"),s0=document.getElementsByTagName("script")[0];
s1.async=true;
s1.src='https://embed.tawk.to/69d5a9ca0d1c3f1c37998081/1jll9ufph';
s1.charset='UTF-8';
s1.setAttribute('crossorigin','*');
s0.parentNode.insertBefore(s1,s0);
})();
</script> </body> </html>