new-site/site/public/order/dot-compliance/index.html
justin f481a1d13c analytics: filter email-scanner / headless traffic out of Umami stats
Email security gateways (Microsoft Defender Safe Links / ATP, Proofpoint,
Mimecast, Barracuda, etc.) auto-fetch and often render every link in a
campaign email to scan for malware. The advanced ones drive a real headless
browser, execute JS, and fire Umami pageviews/clicks that masquerade as human
visits -- inflating campaign click-through.

New site/public/js/pw-bot-filter.js queries multiple real-browser signals and
gates Umami via its official data-before-send hook (umamiBeforeSend), dropping
all events when the visitor is a bot. Signals (from empirical chromium probing):
  decisive: navigator.webdriver, HeadlessChrome UA, known scanner UAs, zero/
            collapsed screen|viewport|outer geometry, window LARGER than the
            physical screen (impossible on real HW; uses outerW/H so page zoom
            does not false-positive), software GPU rasterizer (SwiftShader/
            llvmpipe/swrast via WebGL UNMASKED_RENDERER), zero logical CPUs.
  soft (>=2 to trip): tiny screen, inner>screen, low color depth, empty
            navigator.languages, no input device (no fine/coarse pointer + no
            hover + 0 touch), no WebGL on a desktop UA.
Designed to FAIL OPEN: only strong/corroborated evidence suppresses, so real
visitors (incl. zoomed, privacy-tooled, remote-desktop, kiosk) still count.

Wired before the Umami tag in Base.astro (Astro pages) and all 86 static
public/**/*.html pages; both load with defer so order is guaranteed and the
hook is defined before Umami reads it.

Tested end-to-end with chromium (site/tests/bot-filter.test.sh, 4/4):
default headless-new, spoofed-Windows-UA + normal 1366x768 window, and
spoofed-UA + 1x1 window are all caught; hook returns null to drop the event.
2026-06-18 02:02:34 -05:00

788 lines
82 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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="DOT/FMCSA motor carrier compliance services. MCS-150 updates, BOC-3 filing, UCR registration, operating authority, and more.">
<title>DOT Compliance Services — Motor Carrier Filings | Performance West Inc.</title>
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
<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&display=swap" rel="stylesheet">
<script defer src="/js/pw-bot-filter.js"></script><script defer src="https://analytics.performancewest.net/script.js" data-website-id="55250014-ee15-44ac-a1f6-81dabad3fe0f" data-before-send="umamiBeforeSend"></script>
<link rel="stylesheet" href="/_astro/about.DhmoKVOS.css">
<script type="module" src="/_astro/hoisted.yFz1BYXO.js"></script>
<style>
.svc-card{transition:all 0.15s}
.svc-card:has(input:checked){border-color:#f97316;background:#fff7ed}
</style>
</head>
<body class="min-h-screen flex flex-col bg-gray-50">
<!-- Minimal nav for order page -->
<!-- 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">FCC Carrier / 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> <p class="text-[11px] font-semibold uppercase tracking-wider text-orange-500 mb-2 mt-4">Trucking / DOT</p> <a href="/services/trucking" class="block py-1.5 text-sm text-gray-700 hover:text-pw-700">DOT Compliance Services</a> <a href="/order/dot-compliance" class="block py-1.5 text-sm text-gray-700 hover:text-pw-700">MCS-150 / BOC-3 / UCR</a> <a href="/order/trucking-new-carrier" class="block py-1.5 text-sm font-medium text-orange-600 hover:text-orange-800">New Carrier Setup</a> <a href="/tools/dot-compliance-check" class="block py-1.5 text-sm font-medium text-orange-600 hover:text-orange-800">DOT Compliance Check <span class="inline-flex items-center px-1.5 py-0.5 rounded-full text-[9px] font-bold bg-orange-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/dexit-reincorporation" class="block py-1.5 text-sm font-medium text-blue-600 hover:text-blue-800">DEXIT: Leave Delaware <span class="inline-flex items-center px-1.5 py-0.5 rounded-full text-[9px] font-bold bg-blue-500 text-white ml-1">NEW</span></a> <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> <p class="text-[11px] font-semibold uppercase tracking-wider text-teal-500 mb-2 mt-4">Healthcare</p> <a href="/services/healthcare/npi-revalidation" class="block py-1.5 text-sm text-gray-700 hover:text-pw-700">Medicare Revalidation</a> <a href="/services/healthcare/medicare-enrollment" class="block py-1.5 text-sm text-gray-700 hover:text-pw-700">Medicare Enrollment (PECOS)</a> <a href="/services/healthcare" class="block py-1.5 text-sm text-gray-700 hover:text-pw-700">NPI / NPPES Services</a> <a href="/tools/npi-compliance-check" class="block py-1.5 text-sm font-medium text-teal-600 hover:text-teal-800">NPI Compliance Check <span class="inline-flex items-center px-1.5 py-0.5 rounded-full text-[9px] font-bold bg-teal-500 text-white ml-1">FREE</span></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"> <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">FCC Carrier / 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-orange-500 uppercase tracking-wider px-2 pt-3">Trucking / DOT</p> <a href="/services/trucking" class="block px-2 py-2 text-sm text-gray-700 hover:bg-gray-50 rounded">DOT Compliance Services</a> <a href="/order/dot-compliance" class="block px-2 py-2 text-sm text-gray-700 hover:bg-gray-50 rounded">MCS-150 / BOC-3 / UCR</a> <a href="/order/trucking-new-carrier" class="block px-2 py-2 text-sm font-medium text-orange-600 hover:bg-orange-50 rounded">New Carrier Setup</a> <a href="/tools/dot-compliance-check" class="block px-2 py-2 text-sm font-medium text-orange-600 hover:bg-orange-50 rounded">DOT Compliance Check <span class="inline-flex items-center px-1.5 py-0.5 rounded-full text-[9px] font-bold bg-orange-500 text-white ml-1">FREE</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-teal-500 uppercase tracking-wider px-2 pt-3">Healthcare</p> <a href="/services/healthcare/npi-revalidation" class="block px-2 py-2 text-sm text-gray-700 hover:bg-gray-50 rounded">Medicare Revalidation</a> <a href="/services/healthcare/medicare-enrollment" class="block px-2 py-2 text-sm text-gray-700 hover:bg-gray-50 rounded">Medicare Enrollment (PECOS)</a> <a href="/services/healthcare" class="block px-2 py-2 text-sm text-gray-700 hover:bg-gray-50 rounded">NPI / NPPES Services</a> <a href="/tools/npi-compliance-check" class="block px-2 py-2 text-sm font-medium text-teal-600 hover:bg-teal-50 rounded">NPI Compliance Check <span class="inline-flex items-center px-1.5 py-0.5 rounded-full text-[9px] font-bold bg-teal-500 text-white ml-1">FREE</span></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 class="flex-1">
<section class="bg-pw-950 py-12">
<div class="max-w-4xl mx-auto px-4 text-center">
<div style="display:inline-flex;align-items:center;gap:6px;background:rgba(249,115,22,0.15);border:1px solid rgba(249,115,22,0.3);border-radius:999px;padding:4px 14px;font-size:12px;font-weight:600;color:#fb923c;margin-bottom:14px">
DOT / FMCSA Compliance Specialists
</div>
<h1 class="text-2xl sm:text-3xl font-bold text-white mb-4">We handle your FMCSA filings so you can focus on the road.</h1>
<p class="text-gray-300 text-sm leading-relaxed max-w-2xl mx-auto mb-8">Performance West is a dedicated transportation compliance firm serving thousands of motor carriers nationwide. We combine deep regulatory expertise with purpose-built filing technology so your paperwork is done right, done fast, and tracked every step of the way.</p>
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;max-width:920px;margin:0 auto;text-align:left">
<div style="background:rgba(255,255,255,0.06);border:1px solid rgba(255,255,255,0.1);border-radius:10px;padding:16px">
<div style="font-size:22px;margin-bottom:6px">&#128203;</div>
<div style="font-size:13px;font-weight:700;color:#fff;margin-bottom:4px">Specialized in trucking compliance</div>
<div style="font-size:12px;color:#94a3b8;line-height:1.5">MCS-150, BOC-3, UCR, IFTA/IRP, operating authority and more &mdash; filed correctly the first time.</div>
</div>
<div style="background:rgba(255,255,255,0.06);border:1px solid rgba(255,255,255,0.1);border-radius:10px;padding:16px">
<div style="font-size:22px;margin-bottom:6px">&#9889;</div>
<div style="font-size:13px;font-weight:700;color:#fff;margin-bottom:4px">Fast turnaround</div>
<div style="font-size:12px;color:#94a3b8;line-height:1.5">Our automated filing systems submit most updates within 1-2 business days of receiving your information.</div>
</div>
<div style="background:rgba(255,255,255,0.06);border:1px solid rgba(255,255,255,0.1);border-radius:10px;padding:16px">
<div style="font-size:22px;margin-bottom:6px">&#128269;</div>
<div style="font-size:13px;font-weight:700;color:#fff;margin-bottom:4px">Attention to detail</div>
<div style="font-size:12px;color:#94a3b8;line-height:1.5">Every filing is verified against current FMCSA requirements. We catch errors before they become problems.</div>
</div>
<div style="background:rgba(255,255,255,0.06);border:1px solid rgba(255,255,255,0.1);border-radius:10px;padding:16px">
<div style="font-size:22px;margin-bottom:6px">&#128222;</div>
<div style="font-size:13px;font-weight:700;color:#fff;margin-bottom:4px">Real support, real people</div>
<div style="font-size:12px;color:#94a3b8;line-height:1.5">Questions? Call (888) 411-0383 or reply to any email. We respond same business day.</div>
</div>
</div>
</div>
</section>
<!-- Trust bar -->
<div style="background:#f8fafc;border-bottom:1px solid #e2e8f0;padding:14px 0">
<div style="max-width:48rem;margin:0 auto;padding:0 16px;display:flex;flex-wrap:wrap;justify-content:center;gap:24px;align-items:center;font-size:12px;color:#64748b">
<span style="display:flex;align-items:center;gap:6px"><svg style="width:16px;height:16px;color:#059669" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><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> No Login.gov required</span>
<span style="display:flex;align-items:center;gap:6px"><svg style="width:16px;height:16px;color:#059669" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M12 6v6h4.5m4.5 0a9 9 0 11-18 0 9 9 0 0118 0z"/></svg> Most filings in 1-2 business days</span>
<span style="display:flex;align-items:center;gap:6px"><svg style="width:16px;height:16px;color:#059669" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M2.25 8.25h19.5M2.25 9h19.5m-16.5 5.25h6m-6 2.25h3m-3.75 3h15a2.25 2.25 0 002.25-2.25V6.75A2.25 2.25 0 0019.5 4.5h-15a2.25 2.25 0 00-2.25 2.25v10.5A2.25 2.25 0 004.5 19.5z"/></svg> Secure payments via Stripe &amp; Klarna</span>
<span style="display:flex;align-items:center;gap:6px"><svg style="width:16px;height:16px;color:#059669" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M15 19.128a9.38 9.38 0 002.625.372 9.337 9.337 0 004.121-.952 4.125 4.125 0 00-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 018.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0111.964-3.07M12 6.375a3.375 3.375 0 11-6.75 0 3.375 3.375 0 016.75 0zm8.25 2.25a2.625 2.625 0 11-5.25 0 2.625 2.625 0 015.25 0z"/></svg> 5,000+ carriers served</span>
</div>
</div>
<section class="py-8">
<div class="max-w-3xl mx-auto px-4">
<!-- Entity info bar -->
<div id="pw-entity-bar" class="bg-white border border-gray-200 rounded-lg p-4 mb-6 flex items-center gap-3" hidden>
<svg class="w-5 h-5 text-orange-500 shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M8.25 18.75a1.5 1.5 0 01-3 0m3 0a1.5 1.5 0 00-3 0m3 0h6m-9 0H3.375a1.125 1.125 0 01-1.125-1.125V14.25m17.25 4.5a1.5 1.5 0 01-3 0m3 0a1.5 1.5 0 00-3 0m3 0h1.125c.621 0 1.129-.504 1.09-1.124a17.902 17.902 0 00-3.213-9.193 2.056 2.056 0 00-1.58-.86H14.25M16.5 18.75h-2.25m0-11.177v-.958c0-.568-.422-1.048-.987-1.106a48.554 48.554 0 00-10.026 0 1.106 1.106 0 00-.987 1.106v7.635m12-6.677v6.677m0 4.5v-4.5m0 0h-12"/></svg>
<div>
<span id="pw-entity-name" class="font-semibold text-gray-900"></span>
<span id="pw-entity-dot" class="font-mono text-sm text-gray-500 ml-2"></span>
</div>
</div>
<!-- Service selection -->
<div id="pw-svc-list" class="space-y-3">
<div id="closeout-group">
<h3 class="text-xs font-bold text-green-600 uppercase tracking-wider mt-4 mb-2">Closing / Winding Down</h3>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-green-300">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="carrier-closeout" data-price="19900" class="mt-1 accent-green-600">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">Trucking Wrap-Up (USDOT Shutdown)</span>
<span class="text-sm font-bold text-green-600">$199</span>
</div>
<p class="text-xs text-gray-500 mt-1">We file everything to close you down: final MCS-150 (out of business), MC authority revocation, UCR cancellation, IFTA/IRP and state account closures.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-green-300">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="entity-dissolution" data-price="4900" class="mt-1 accent-green-600">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">Business Entity Dissolution (LLC/Corp)</span>
<span class="text-sm font-bold text-green-600">$49 <span class="text-xs font-normal text-gray-400">+ state filing fee</span></span>
</div>
<p class="text-xs text-gray-500 mt-1">Dissolve your LLC/corporation and file the final report. Skip this if you have outstanding lawsuits, liens, or judgments.</p>
</div>
</div>
</label>
</div>
<h3 class="text-xs font-bold text-orange-600 uppercase tracking-wider mt-4 mb-2">Core Filings</h3>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="mcs150-update" data-price="3900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">MCS-150 Biennial Update</span>
<span class="text-sm font-bold text-orange-600">$39</span>
</div>
<p class="text-xs text-gray-500 mt-1">Required every 2 years. Failure to update results in USDOT deactivation + fines up to $1,000/day.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="boc3-filing" data-price="8900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">BOC-3 Process Agent Filing</span>
<span class="text-sm font-bold text-orange-600">$89</span>
</div>
<p class="text-xs text-gray-500 mt-1">Designates a process agent in all 48 states + DC. Required for all for-hire carriers, brokers, freight forwarders.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="ucr-registration" data-price="3900" data-govfee="4600" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">UCR Annual Registration</span>
<span class="text-sm font-bold text-orange-600">$39 <span class="text-xs font-normal text-gray-400">+ gov fee from $46</span></span>
</div>
<p class="text-xs text-gray-500 mt-1">Annual requirement for interstate carriers. Gov fee based on fleet size ($59$7,511). Failure = out-of-service at roadside.</p>
</div>
</div>
</label>
<h3 class="text-xs font-bold text-red-600 uppercase tracking-wider mt-6 mb-2">Emergency / Urgent</h3>
<label class="svc-card block rounded-xl border-2 border-red-200 bg-red-50 p-4 cursor-pointer hover:border-red-400">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="emergency-temporary-authority" data-price="49900" class="mt-1 accent-red-600">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">Emergency Temporary Authority (ETA)</span>
<span class="text-sm font-bold text-red-600">$499</span>
</div>
<p class="text-xs text-gray-500 mt-1">Out of service or authority revoked? We file an Emergency Temporary Authority request with FMCSA to get you operating within 48 hours.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-orange-200 bg-orange-50 p-4 cursor-pointer hover:border-orange-400">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="usdot-reactivation" data-price="14900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">USDOT Reactivation</span>
<span class="text-sm font-bold text-orange-600">$149</span>
</div>
<p class="text-xs text-gray-500 mt-1">USDOT number gone inactive? We handle the full reactivation with FMCSA — no Login.gov account needed.</p>
</div>
</div>
</label>
<h3 class="text-xs font-bold text-orange-600 uppercase tracking-wider mt-6 mb-2">New Authority</h3>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="dot-registration" data-price="8900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">New USDOT Number</span>
<span class="text-sm font-bold text-orange-600">$89</span>
</div>
<p class="text-xs text-gray-500 mt-1">Register a new USDOT number for your motor carrier, broker, or freight forwarder operation.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="mc-authority" data-price="19900" data-govfee="30000" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">MC Operating Authority</span>
<span class="text-sm font-bold text-orange-600">$199 <span class="text-xs font-normal text-gray-400">+ $300 FMCSA fee</span></span>
</div>
<p class="text-xs text-gray-500 mt-1">Apply for common or contract authority to operate as a for-hire carrier.</p>
</div>
</div>
</label>
<h3 class="text-xs font-bold text-orange-600 uppercase tracking-wider mt-6 mb-2">Safety & Compliance</h3>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="dot-drug-alcohol" data-price="14900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">DOT Drug & Alcohol Program</span>
<span class="text-sm font-bold text-orange-600">$149/yr</span>
</div>
<p class="text-xs text-gray-500 mt-1">Consortium enrollment, written policy, DER designation. Required for all carriers with CDL drivers.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="dot-audit-prep" data-price="39900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">New Entrant Safety Audit Prep</span>
<span class="text-sm font-bold text-orange-600">$399</span>
</div>
<p class="text-xs text-gray-500 mt-1">Prepare for your 18-month FMCSA safety audit. Includes mock audit, DQ files, maintenance program, and compliance binder.</p>
</div>
</div>
</label>
<h3 class="text-xs font-bold text-orange-600 uppercase tracking-wider mt-6 mb-2">Bundle & Save</h3>
<label class="svc-card block rounded-xl border-2 border-orange-200 bg-orange-50 p-4 cursor-pointer hover:border-orange-400">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="dot-full-compliance" data-price="39900" data-bundle="mcs150-update,boc3-filing,ucr-registration,dot-drug-alcohol,dot-audit-prep" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">DOT Full Compliance Bundle</span>
<span class="text-sm font-bold text-orange-600">$399 <span class="text-xs font-normal text-green-600 ml-1">Save $376</span></span>
</div>
<p class="text-xs text-gray-500 mt-1">MCS-150 + BOC-3 + UCR + Drug & Alcohol Program + Safety Audit Prep — everything you need. Best value.</p>
</div>
</div>
</label>
<div id="pw-state-services" style="display:none">
<h3 style="font-size:11px;font-weight:700;color:#ea580c;text-transform:uppercase;letter-spacing:0.05em;margin:24px 0 8px">State Compliance</h3>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300" data-state-svc="irp">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="irp-registration" data-price="10900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">IRP Registration Assistance</span>
<span class="text-sm font-bold text-orange-600">$109</span>
</div>
<p class="text-xs text-gray-500 mt-1">International Registration Plan — apportioned vehicle registration for interstate carriers. Filed through your base state.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300" data-state-svc="ifta">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="ifta-application" data-price="10900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">IFTA Application + Decals</span>
<span class="text-sm font-bold text-orange-600">$109</span>
</div>
<p class="text-xs text-gray-500 mt-1">International Fuel Tax Agreement — get your IFTA license and decals for interstate fuel tax reporting.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300" data-state-svc="ca-mcp">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="ca-mcp-carb" data-price="22900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">California MCP + CARB Compliance</span>
<span class="text-sm font-bold text-orange-600">$229</span>
</div>
<p class="text-xs text-gray-500 mt-1">Motor Carrier Permit (MCP) + CARB Truck & Bus Rule compliance. Required for all carriers operating in California.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300" data-state-svc="weight-tax-or">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="or-weight-mile-tax" data-price="10900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">Oregon Weight-Mile Tax Setup</span>
<span class="text-sm font-bold text-orange-600">$109</span>
</div>
<p class="text-xs text-gray-500 mt-1">Account setup and first filing for Oregon's Weight-Mile Tax. Required for vehicles over 26,001 lbs.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300" data-state-svc="weight-tax-ny">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="ny-hut-registration" data-price="10900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">NY Highway Use Tax (HUT)</span>
<span class="text-sm font-bold text-orange-600">$109</span>
</div>
<p class="text-xs text-gray-500 mt-1">Registration and first filing for New York's Highway Use Tax. Required for vehicles over 18,000 lbs.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300" data-state-svc="weight-tax-ky">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="ky-kyu-registration" data-price="10900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">KY Weight-Distance Tax (KYU)</span>
<span class="text-sm font-bold text-orange-600">$109</span>
</div>
<p class="text-xs text-gray-500 mt-1">KYU number and account setup for Kentucky's Weight-Distance Tax. Required for vehicles over 59,999 lbs.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300" data-state-svc="weight-tax-nm">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="nm-weight-distance" data-price="10900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">NM Weight-Distance Tax</span>
<span class="text-sm font-bold text-orange-600">$109</span>
</div>
<p class="text-xs text-gray-500 mt-1">E-permit and account setup for New Mexico's Weight-Distance Tax. Required for vehicles over 26,001 lbs.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300" data-state-svc="weight-tax-ct">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="ct-highway-use-fee" data-price="10900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">CT Highway Use Fee</span>
<span class="text-sm font-bold text-orange-600">$109</span>
</div>
<p class="text-xs text-gray-500 mt-1">Registration and first filing for Connecticut's Highway Use Fee. Required for vehicles over 26,000 lbs.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300" data-state-svc="intrastate">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="intrastate-authority" data-price="10900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">Intrastate Operating Authority</span>
<span class="text-sm font-bold text-orange-600">$109</span>
</div>
<p class="text-xs text-gray-500 mt-1">State-level operating authority (Certificate of Authority / CPCN) for for-hire intrastate carriers.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-orange-200 bg-orange-50 p-4 cursor-pointer hover:border-orange-400" data-state-svc="bundle">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="state-trucking-bundle" data-price="49900" data-bundle="irp-registration,ifta-application,or-weight-mile-tax,ny-hut-registration,ky-kyu-registration,nm-weight-distance,ct-highway-use-fee,intrastate-authority" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">State Compliance Bundle</span>
<span class="text-sm font-bold text-orange-600">$499 <span class="text-xs font-normal text-green-600 ml-1">Save vs. individual</span></span>
</div>
<p class="text-xs text-gray-500 mt-1">IRP + IFTA + weight-distance tax + state permits — everything your state requires. We identify and file all obligations.</p>
</div>
</div>
</label>
</div>
</div>
<!-- Insurance referral (shown if carrier has insurance issue and didn't submit on checker page) -->
<div id="pw-ins-referral" class="mt-4" hidden>
<div style="background:#eff6ff;border:2px solid #93c5fd;border-radius:12px;padding:16px">
<label style="display:flex;align-items:flex-start;gap:12px;cursor:pointer">
<input type="checkbox" id="ins-referral-check" checked style="margin-top:4px;width:18px;height:18px;accent-color:#2563eb">
<div>
<span style="font-weight:700;color:#1e3a5f;font-size:14px">Also get a free trucking insurance quote</span>
<p style="font-size:12px;color:#1d4ed8;margin-top:4px">We noticed your FMCSA insurance filing has a gap. Check this box and we'll connect you with a licensed trucking insurance agent — no extra charge, no obligation.</p>
</div>
</label>
</div>
</div>
<!-- Total + checkout -->
<div id="pw-total-section" class="mt-6 bg-white border border-gray-200 rounded-xl p-6 shadow-sm" hidden>
<div id="pw-total-rows"></div>
<div class="mt-4 pt-4 border-t border-gray-200">
<form id="pw-batch-form" class="space-y-4">
<div class="grid sm:grid-cols-2 gap-3">
<div>
<label class="block text-xs font-medium text-gray-600 mb-1">Your first and last name</label>
<input type="text" id="pw-name" required placeholder="e.g. John Smith" 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="john@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>
<div id="pw-payment-section">
<h4 class="text-sm font-semibold text-gray-900 mb-2">Payment Method</h4>
<div style="display:grid;grid-template-columns:1fr 1fr;gap:8px">
<label class="flex items-center gap-2 p-3 rounded-lg border border-gray-200 cursor-pointer hover:border-orange-300 has-[:checked]:border-orange-500 has-[:checked]:bg-orange-50"><input type="radio" name="pw_pay" value="card" checked><span class="text-sm">Card</span></label>
<label class="flex items-center gap-2 p-3 rounded-lg border border-gray-200 cursor-pointer hover:border-orange-300 has-[:checked]:border-orange-500 has-[:checked]:bg-orange-50"><input type="radio" name="pw_pay" value="paypal"><span class="text-sm">PayPal</span></label>
<label class="flex items-center gap-2 p-3 rounded-lg border border-gray-200 cursor-pointer hover:border-orange-300 has-[:checked]:border-orange-500 has-[:checked]:bg-orange-50"><input type="radio" name="pw_pay" value="ach"><span class="text-sm">ACH</span></label>
<label class="flex items-center gap-2 p-3 rounded-lg border border-gray-200 cursor-pointer hover:border-orange-300 has-[:checked]:border-orange-500 has-[:checked]:bg-orange-50"><input type="radio" name="pw_pay" value="klarna"><span class="text-sm">Klarna <span style="font-size:10px;color:#e74c99">4 payments</span></span></label>
</div>
</div>
<label class="flex items-start gap-2 p-3 rounded-lg border border-gray-200 text-xs text-gray-600"><input type="checkbox" id="pw-engage" required class="mt-0.5"><span>I authorize Performance West to prepare and file on my behalf. <a href="/terms" target="_blank" class="text-orange-600 underline">Terms</a></span></label>
<button type="submit" id="pw-submit" style="width:100%;padding:14px;border-radius:8px;background:#f97316;color:#fff;font-weight:700;font-size:16px;border:none;cursor:pointer;box-shadow:0 4px 14px rgba(249,115,22,0.4)">Continue to Secure Payment →</button>
<p id="pw-err" class="text-sm text-red-700 mt-1" hidden></p>
<!-- Security badges -->
<div style="display:flex;align-items:center;justify-content:center;gap:16px;margin-top:14px;padding:10px 0;border-top:1px solid #f1f5f9">
<svg style="height:20px;color:#6366f1" viewBox="0 0 60 25" fill="currentColor"><text x="0" y="18" font-size="16" font-weight="700" font-family="Arial">stripe</text></svg>
<span style="font-size:11px;color:#94a3b8">|</span>
<span style="font-size:12px;font-weight:700;color:#003087">Pay<span style="color:#009cde">Pal</span></span>
<span style="font-size:11px;color:#94a3b8">|</span>
<span style="display:flex;align-items:center;gap:4px;font-size:11px;color:#64748b"><svg style="width:14px;height:14px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><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"/></svg>256-bit SSL</span>
<span style="font-size:11px;color:#94a3b8">|</span>
<span style="display:flex;align-items:center;gap:4px;font-size:11px;color:#64748b"><svg style="width:14px;height:14px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><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>PCI Compliant</span>
</div>
</form>
</div>
</div>
<!-- Closing reassurance -->
<div style="max-width:36rem;margin:24px auto 0;text-align:center">
<div style="background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;padding:20px 24px">
<h3 style="font-size:15px;font-weight:700;color:#1a2744;margin:0 0 10px">About Performance West</h3>
<p style="font-size:13px;color:#475569;line-height:1.7;margin:0 0 12px">Performance West Inc. is a professional compliance consulting firm based in Cheyenne, Wyoming. We specialize in DOT/FMCSA regulatory filings for motor carriers, brokers, and freight forwarders nationwide. Our team handles the paperwork so you can stay on the road.</p>
<div style="display:flex;flex-wrap:wrap;justify-content:center;gap:16px;font-size:12px;color:#64748b;margin-bottom:12px">
<span>Wyoming-registered corporation</span>
<span>·</span>
<span>Serving all 50 states</span>
<span>·</span>
<span>Toll free: (888) 411-0383</span>
</div>
<p style="font-size:12px;color:#94a3b8;margin:0">Your payment information is processed securely by Stripe. We never store your card number. All filings are prepared by our compliance team and submitted directly to the appropriate federal or state agency on your behalf.</p>
</div>
</div>
<!-- Help -->
<div class="mt-6 text-center">
<p class="text-sm text-gray-500">Questions? <a href="mailto:info@performancewest.net" class="text-orange-600 underline">info@performancewest.net</a> or call <strong>(888) 411-0383</strong></p>
</div>
</div>
</section>
</main>
<footer class="border-t border-gray-200 bg-gray-50 mt-auto py-8">
<div class="max-w-4xl mx-auto px-4 text-center text-xs text-gray-400">
<img src="/images/logo.png" alt="Performance West" class="h-10 mx-auto mb-3">
<p>Performance West Inc. · 525 Randall Ave Ste 100-1195, Cheyenne, WY 82001 · <a href="https://performancewest.net" class="text-gray-500">performancewest.net</a> · (888) 411-0383</p>
<p class="mt-2"><a href="/privacy" class="text-gray-500 hover:text-gray-700">Privacy Policy</a> · <a href="/terms" class="text-gray-500 hover:text-gray-700">Terms of Service</a> · <a href="/security" class="text-gray-500 hover:text-gray-700">Security &amp; Trust</a> · <a href="/accessibility" class="text-gray-500 hover:text-gray-700">Accessibility</a></p>
<p class="mt-2">Performance West is a regulatory compliance consulting firm, not a law firm. This does not constitute legal advice.</p>
</div>
</footer>
<script>
var API = window.__PW_API || "https://api.performancewest.net";
var params = new URLSearchParams(window.location.search);
var dot = params.get("dot") || "";
var emailFromUrl = params.get("email") || "";
var promoFromUrl = params.get("code") || params.get("promo") || "";
function usd(cents) { return "$" + (cents / 100).toLocaleString("en-US", {minimumFractionDigits: 2}); }
// Show insurance referral if ?ins=1 from checker page
var showInsReferral = params.get("ins") === "1";
if (showInsReferral) {
document.getElementById("pw-ins-referral").hidden = false;
}
// Pre-fill entity info
if (dot) {
fetch(API + "/api/v1/dot/lookup?dot=" + dot).then(function(r) { return r.json(); }).then(function(d) {
if (d.legal_name) {
document.getElementById("pw-entity-name").textContent = d.legal_name;
document.getElementById("pw-entity-dot").textContent = "DOT# " + dot;
document.getElementById("pw-entity-bar").hidden = false;
}
// Also show insurance referral if carrier has insurance issues
if (!showInsReferral && d.checks) {
var hasInsIssue = d.checks.some(function(c) { return c.id && c.id.indexOf("insurance") === 0 && c.status === "red"; });
if (hasInsIssue) {
document.getElementById("pw-ins-referral").hidden = false;
}
}
}).catch(function() {});
}
if (emailFromUrl) { var e = document.getElementById("pw-email"); if (e) e.value = emailFromUrl; }
if (promoFromUrl) { var p = document.getElementById("pw-promo"); if (p) { p.value = promoFromUrl.toUpperCase(); p.readOnly = true; p.style.background = "#fff7ed"; p.style.borderColor = "#f97316"; } }
// Show state compliance services section — always visible so users can add them
var stateSection = document.getElementById("pw-state-services");
if (stateSection) stateSection.style.display = "block";
// If ?state=XX, highlight relevant state services
var stateParam = (params.get("state") || "").toUpperCase();
if (stateParam && dot) {
fetch(API + "/api/v1/dot/state-requirements?base_state=" + stateParam).then(function(r) { return r.json(); }).then(function(d) {
if (d.recommended_services) {
d.recommended_services.forEach(function(svc) {
var cb = document.querySelector('input[data-slug="' + svc.slug + '"]');
if (cb) { cb.checked = true; cb.dispatchEvent(new Event("change", { bubbles: true })); }
});
}
}).catch(function() {});
}
// Bundle logic: checking a bundle unchecks its individual components
document.querySelectorAll("input[data-bundle]").forEach(function(bundleCb) {
bundleCb.addEventListener("change", function() {
if (!bundleCb.checked) return;
var components = (bundleCb.dataset.bundle || "").split(",");
components.forEach(function(slug) {
var cb = document.querySelector('input[data-slug="' + slug + '"]');
if (cb && cb.checked) { cb.checked = false; }
});
});
});
// ── Mutual-exclusion: auto-uncheck conflicting services ──────────────────
// Closing-down services can't coexist with services that keep you operating.
var CLOSEOUT_SLUGS = ["carrier-closeout", "entity-dissolution"];
// Directly contradictory pairs — pick one, not both.
var EXCLUSIVE_PAIRS = [
["dot-registration", "usdot-reactivation"], // brand-new USDOT vs reactivating an existing one
["dot-registration", "mcs150-update"], // a new registration IS the first MCS-150; updates are for existing carriers
];
function applyConflicts(changedCb) {
if (!changedCb.checked) return;
var slug = changedCb.dataset.slug;
var isCloseout = CLOSEOUT_SLUGS.indexOf(slug) >= 0;
document.querySelectorAll("input[data-slug]:checked").forEach(function(other) {
if (other === changedCb) return;
var os = other.dataset.slug;
// 1) closing-down vs staying-in-business are mutually exclusive
if (isCloseout !== (CLOSEOUT_SLUGS.indexOf(os) >= 0)) { other.checked = false; return; }
// 2) explicit contradictory pairs
for (var i = 0; i < EXCLUSIVE_PAIRS.length; i++) {
var p = EXCLUSIVE_PAIRS[i];
if ((p[0] === slug && p[1] === os) || (p[1] === slug && p[0] === os)) { other.checked = false; return; }
}
});
}
document.querySelectorAll("input[data-slug]").forEach(function(cb) {
cb.addEventListener("change", function() { applyConflicts(cb); updateTotal(); });
});
// Checkbox change → update total
var totalSection = document.getElementById("pw-total-section");
var totalRows = document.getElementById("pw-total-rows");
// Non-discountable slugs (passthrough costs)
var nonDiscountable = {"dot-drug-alcohol": true, "boc3-filing": true, "mc-authority": true};
// Re-query checkboxes each time (state services added dynamically)
function getCheckboxes() { return document.querySelectorAll("input[data-slug]"); }
// Cached discount info
var activeDiscount = null;
function fetchDiscount() {
var code = (document.getElementById("pw-promo").value || "").trim().toUpperCase();
if (!code) { activeDiscount = null; updateTotal(); return; }
fetch(API + "/api/v1/discount/" + encodeURIComponent(code)).then(function(r) { return r.json(); }).then(function(d) {
if (d.valid) { activeDiscount = d; } else { activeDiscount = null; }
updateTotal();
}).catch(function() { activeDiscount = null; updateTotal(); });
}
// Fetch on load if promo field has any value
var promoField = document.getElementById("pw-promo");
if (promoField.value.trim()) { setTimeout(fetchDiscount, 300); }
// Fetch on blur and input of promo field
promoField.addEventListener("blur", fetchDiscount);
promoField.addEventListener("input", function() { clearTimeout(promoField._debounce); promoField._debounce = setTimeout(fetchDiscount, 600); });
function updateTotal() {
var selected = [];
var svcTotal = 0;
var govTotal = 0;
var discountable = 0;
getCheckboxes().forEach(function(cb) {
if (cb.checked) {
var price = parseInt(cb.dataset.price) || 0;
var gov = parseInt(cb.dataset.govfee) || 0;
svcTotal += price;
govTotal += gov;
if (!nonDiscountable[cb.dataset.slug]) { discountable += price; }
selected.push(cb.dataset.slug);
}
});
if (selected.length === 0) { totalSection.hidden = true; return; }
totalSection.hidden = false;
var discountAmt = 0;
if (activeDiscount && activeDiscount.discount_type === "percent") {
discountAmt = Math.round(discountable * activeDiscount.discount_value / 100);
} else if (activeDiscount && activeDiscount.discount_type === "flat") {
discountAmt = Math.min(activeDiscount.discount_value * 100, discountable);
}
// Build itemized list
var html = '';
getCheckboxes().forEach(function(cb) {
if (!cb.checked) return;
var price = parseInt(cb.dataset.price) || 0;
var gov = parseInt(cb.dataset.govfee) || 0;
var slug = cb.dataset.slug;
var label = cb.closest("label");
var name = label ? (label.querySelector(".font-semibold.text-gray-900") || {}).textContent || slug : slug;
var canDiscount = !nonDiscountable[slug] && activeDiscount;
var itemDiscount = 0;
if (canDiscount && activeDiscount.discount_type === "percent") {
itemDiscount = Math.round(price * activeDiscount.discount_value / 100);
}
html += '<div class="flex justify-between text-sm mb-1"><span>' + name + '</span>';
if (itemDiscount > 0) {
html += '<span>' + usd(price) + ' <span style="color:#059669;font-size:12px;font-weight:600">-' + usd(itemDiscount) + '</span></span>';
} else {
html += '<span>' + usd(price) + '</span>';
}
html += '</div>';
if (gov > 0) html += '<div class="flex justify-between text-xs text-gray-400 mb-1 pl-2"><span>Gov fee</span><span>' + usd(gov) + '</span></div>';
});
if (govTotal > 0) html += '<div class="flex justify-between text-sm text-gray-500 mb-1 border-t border-gray-100 pt-1 mt-1"><span>Government fees</span><span>' + usd(govTotal) + '</span></div>';
if (discountAmt > 0) {
html += '<div class="flex justify-between text-sm text-green-600 font-semibold mb-1"><span>' + activeDiscount.code + ' (' + activeDiscount.discount_value + '% off)</span><span>-' + usd(discountAmt) + '</span></div>';
}
var finalTotal = svcTotal + govTotal - discountAmt;
html += '<div class="flex justify-between font-bold text-lg border-t border-gray-300 pt-2 mt-2"><span>Total</span><span>' + usd(finalTotal) + '</span></div>';
if (discountAmt > 0) { html += '<div class="text-xs text-green-600 text-right mt-1">You save ' + usd(discountAmt) + '!</div>'; }
totalRows.innerHTML = html;
}
getCheckboxes().forEach(function(cb) { cb.addEventListener("change", updateTotal); });
// Also listen for changes on dynamically shown state services
document.addEventListener("change", function(e) { if (e.target.matches && e.target.matches("input[data-slug]")) updateTotal(); });
// Pre-check services from URL
var preSelect = (params.get("services") || "").split(",").filter(Boolean);
preSelect.forEach(function(slug) {
var cb = document.querySelector('input[data-slug="' + slug + '"]');
if (cb) cb.checked = true;
});
// Smart bundle promotion: if 3+ individual federal services are selected,
// replace them with the bundle (better value)
if (preSelect.length >= 3) {
var bundleCb = document.querySelector('input[data-slug="dot-full-compliance"]');
if (bundleCb) {
var bundleComponents = (bundleCb.dataset.bundle || "").split(",");
var selectedInBundle = preSelect.filter(function(s) { return bundleComponents.indexOf(s) >= 0; });
if (selectedInBundle.length >= 2) {
bundleCb.checked = true;
// Uncheck the individual components the bundle covers
bundleComponents.forEach(function(slug) {
var cb = document.querySelector('input[data-slug="' + slug + '"]');
if (cb) cb.checked = false;
});
}
}
}
// After pre-selection, trigger bundle uncheck logic for any checked bundles
document.querySelectorAll("input[data-bundle]:checked").forEach(function(bundleCb) {
var components = (bundleCb.dataset.bundle || "").split(",");
components.forEach(function(slug) {
var cb = document.querySelector('input[data-slug="' + slug + '"]');
if (cb && cb.checked) cb.checked = false;
});
});
if (preSelect.length) updateTotal();
// Submit
document.getElementById("pw-batch-form").addEventListener("submit", function(e) {
e.preventDefault();
var selected = [];
getCheckboxes().forEach(function(cb) { if (cb.checked) selected.push(cb.dataset.slug); });
if (selected.length === 0) { alert("Please select at least one service."); return; }
if (!document.getElementById("pw-engage").checked) { alert("Please accept the authorization terms."); return; }
var btn = document.getElementById("pw-submit");
btn.disabled = true; btn.textContent = "Creating order...";
var errEl = document.getElementById("pw-err"); errEl.hidden = true;
var body = {
services: selected,
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: {
dot_number: dot,
source: "dot-compliance-remediation",
insurance_referral_requested: document.getElementById("ins-referral-check")?.checked || false,
},
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) {
var payMethod = document.querySelector("input[name=pw_pay]:checked").value;
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(d) {
if (d.checkout_url) window.location.href = d.checkout_url;
else throw new Error("No checkout URL returned");
})
.catch(function(err) {
errEl.textContent = err.message; errEl.hidden = false;
btn.disabled = false; btn.textContent = "Continue to Secure Payment →";
});
});
</script>
<!-- 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>
<script defer src="/js/pw-cookie-consent.js"></script><!-- 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>
</body>
</html>