@@ -7752,6 +7752,28 @@ ${paragraphs.join("\n")}
77527752 <li>Payment, tax, bank, phone, and private identity details stay outside this form.</li>
77537753 </ul>
77547754 </div>
7755+ <form class="panel form-grid sponsor-quick-form" data-sponsor-quick-form>
7756+ <input class="sr-only" type="text" name="websiteTrap" tabindex="-1" autocomplete="off" aria-hidden="true">
7757+ <input type="hidden" name="dealId">
7758+ <h3>Fast pilot invoice review</h3>
7759+ <p class="help">Three business-safe fields. This requests manual fit review only; any invoice or agreement is sent later through an external provider. Do not send private payment, tax, phone, identity, password, or customer-file details.</p>
7760+ <label class="field">
7761+ <span>Company or project</span>
7762+ <input name="company" maxlength="90" autocomplete="organization" required>
7763+ </label>
7764+ <label class="field">
7765+ <span>Business email</span>
7766+ <input name="contactEmail" type="email" maxlength="140" autocomplete="email" required>
7767+ </label>
7768+ <label class="field">
7769+ <span>Website</span>
7770+ <input name="website" type="url" maxlength="220" placeholder="https://example.com" autocomplete="url" required>
7771+ </label>
7772+ <div class="actions">
7773+ <button class="button" type="submit" data-track-event="sponsor_request_intent" data-track-tool="sponsor">Request pilot invoice review</button>
7774+ </div>
7775+ <p class="help sponsor-lead-status" data-sponsor-lead-status role="status" aria-live="polite">No payment is collected here.</p>
7776+ </form>
77557777 <form class="panel form-grid sponsor-lead-form" data-sponsor-lead-form>
77567778 <input class="sr-only" type="text" name="websiteTrap" tabindex="-1" autocomplete="off" aria-hidden="true">
77577779 <input type="hidden" name="dealId">
@@ -12571,6 +12593,15 @@ ${paragraphs.join("\n")}
1257112593 await submitSponsorLeadForm(form);
1257212594 });
1257312595 });
12596+ root.querySelectorAll("[data-sponsor-quick-form]").forEach((form) => {
12597+ if (form.dataset.boundSponsorQuickLead === "true") return;
12598+ form.dataset.boundSponsorQuickLead = "true";
12599+ applySponsorDealPrefill(form, sponsorDealPrefillFromUrl() || loadSponsorDealPrefill() || sponsorDealPrefillFromDeal(sponsorDeals.find((deal) => deal.id === "guide-sponsor-pilot") || sponsorDeals[0]));
12600+ form.addEventListener("submit", async (event) => {
12601+ event.preventDefault();
12602+ await submitSponsorQuickLeadForm(form);
12603+ });
12604+ });
1257412605 }
1257512606
1257612607 function sponsorDealPrefillFromUrl() {
@@ -12681,6 +12712,50 @@ ${paragraphs.join("\n")}
1268112712 }
1268212713 }
1268312714
12715+ async function submitSponsorQuickLeadForm(form) {
12716+ const values = getFormValues(form);
12717+ const deal = sponsorDeals.find((item) => item.id === values.dealId) || sponsorDeals.find((item) => item.id === "guide-sponsor-pilot") || sponsorDeals[0];
12718+ const status = form.querySelector("[data-sponsor-lead-status]");
12719+ const submit = form.querySelector("button[type='submit']");
12720+ const setStatus = (message, kind = "") => {
12721+ if (!status) return;
12722+ status.textContent = message;
12723+ status.dataset.status = kind;
12724+ };
12725+ const payload = {
12726+ ...values,
12727+ dealId: deal.id,
12728+ placement: deal.placement,
12729+ budgetRange: deal.budgetRange,
12730+ timeline: deal.timeline,
12731+ commitment: sponsorDealCommitment(deal),
12732+ audienceFit: `Fast invoice review request for ${deal.title}; sponsor says their website may fit PrintableTools Lab's free PDF, image, QR, career, classroom, or small-business workflows.`,
12733+ notes: `${deal.title} (${deal.price}). ${deal.deliverable} Needed: ${deal.proofNeeded}`,
12734+ consent: true,
12735+ path: getCurrentRoutePath(),
12736+ source: getTrafficSource(),
12737+ ...getSponsorAttribution(),
12738+ };
12739+ setStatus("Sending fast invoice review request...", "pending");
12740+ if (submit) submit.disabled = true;
12741+ try {
12742+ const response = await fetch("/api/sponsor-lead", {
12743+ method: "POST",
12744+ headers: { "Content-Type": "application/json" },
12745+ body: JSON.stringify(payload),
12746+ });
12747+ const data = await response.json().catch(() => ({}));
12748+ if (!response.ok || !data.ok) throw new Error(data.error || "Could not send request.");
12749+ track("sponsor_request_intent", { tool: "sponsor" });
12750+ setStatus("Invoice review request received. Fit will be checked manually before any external invoice or agreement is sent.", "success");
12751+ form.reset();
12752+ } catch (error) {
12753+ setStatus(error.message || "Could not send request. Please use the full inquiry form.", "error");
12754+ } finally {
12755+ if (submit) submit.disabled = false;
12756+ }
12757+ }
12758+
1268412759 function getSessionSource() {
1268512760 try {
1268612761 return sessionStorage.getItem("ptl_source");
0 commit comments