How to Use n8n with ._Template 57 Integration Connected Success

A user connects their first integration — arguably the single strongest activation signal in SaaS — and your product responds with silence. No confirmation, no "here's what to do next," no follow-up.

How to Use n8n with ._Template 57 Integration Connected Success
The prompt's required closing HTML block came through empty (a templating glitch), so I'll close with a clean, standard product CTA. Here's the article:

A user connects their first integration — arguably the single strongest activation signal in SaaS — and your product responds with silence. No confirmation, no "here's what to do next," no follow-up. Within 72 hours they've forgotten they connected it, the integration sits idle, and a moment of high intent decays into churn. Template 57 fixes exactly this: the instant an integration-connected event fires, an n8n workflow sends a success email, logs the activation to your CRM and Slack, and runs a 7-day drip that pushes the integration from connected to actually used. This guide shows you how to build and run it.

The Problem: Activation Signals That Fire Into a Void

Most product teams instrument the integration-connected event, pipe it into an analytics tool, and stop there. The event becomes a number on a dashboard instead of a trigger for action. That's a costly gap. Connecting an integration means the user has done real work — generated an API key, granted OAuth scopes, mapped fields — and is primed to get value. If nothing happens next, three failure modes kick in: the user doesn't know how to test what they just connected, they hit a configuration snag and abandon quietly, or they simply forget. Each one turns a paying-intent moment into a support ticket or a silent cancellation.

The teams that win expansion revenue treat integration-connected as the opening of a structured onboarding journey, not a passive log line. Doing that manually doesn't scale — nobody is watching a webhook at 2 a.m. to send a well-timed email. This is precisely the kind of event-driven, multi-step, time-delayed sequence n8n was built to run unattended.

The Solution: An Event-Triggered Activation Sequence

The workflow listens for a single webhook — POST /integration-connected — carrying the user's email, the integration name, and their CRM ID. From that one event it does five things without human involvement: sends an immediate success email with three concrete next steps, updates the HubSpot contact with integration count and connected date, posts to a #product-activations Slack channel so the team has real-time visibility, waits two days and sends a pro-tip email, then waits five more days and sends a Week 1 check-in that routes the user to a success story or a support call based on their reply.

The design principle is that timing beats volume. Three emails spaced across seven days, each tied to where the user should be in their activation journey, outperform a single onboarding blast. Because n8n's Wait node persists execution state to the database, the sequence survives restarts and deployments — a user who connected on Monday still gets their Day 7 email the following Monday, even if you redeployed n8n in between.

Step-by-Step Setup in n8n

1. Catch the event. Drop a Webhook node as the trigger. Set the method to POST and the path to integration-connected. Enable Respond Immediately so your upstream system gets a fast 200 and isn't blocked waiting for the whole sequence. In your product, fire an HTTP call to this webhook URL from wherever the integration-connected event lives — the OAuth callback handler or the "connection saved" code path. Send a JSON body like { "email": "...", "integration": "Salesforce", "hubspot_id": "...", "connected_at": "..." }.

2. Normalize the payload. Add a Set node (or a small Code node) right after the webhook to pull fields into clean variables: email, integrationName, contactId. This gives every downstream node a stable reference like {{ $json.email }} and keeps you from re-parsing the raw body five times.

3. Send the instant success email. Use the Send Email node with your SMTP credentials (or a SendGrid/Postmark node if that's your stack). Subject: "{{ $json.integrationName }} is connected — here's what to do next." Body lists the three highest-leverage next actions: test the integration with a sample record, configure field mapping, and create your first automation. Store SMTP credentials in n8n's Credentials manager — never inline them in the node.

4. Update the CRM and log to Slack. Branch two nodes off the email step. A HubSpot node (Contact → Update) writes the integration name, increments an integration_count property, and stamps connected_date. In parallel, a Slack node posts to #product-activations: "🔌 {{ $json.email }} connected {{ $json.integrationName }}." Now product, success, and growth all see activations live.

5. Add the timed drip. Insert a Wait node set to 2 days, then a second Send Email node for the pro-tip message (for example: use conditional filters to cut integration noise by ~70%). Follow with another Wait node set to 5 days, then the Week 1 check-in email. To make the check-in actionable, ask a binary question and use an IF node on the reply (captured via a reply-tracking webhook or a HubSpot form) to route "yes, it's working" to a testimonial ask and "no" to a Slack alert that books a support call.

Configuration Details That Matter

A few settings separate a demo from a production workflow. In the Webhook node, add header-based auth or a shared-secret query param and validate it in your first Set/Code node — an unauthenticated public webhook will get hit by scanners. On the HubSpot and Send Email nodes, enable Retry On Fail (3 attempts, 5s apart) because CRM APIs and SMTP relays return transient 429s and timeouts. Add an Error Trigger workflow that pings Slack when any execution fails, so a broken drip never fails silently for a week. Finally, guard against duplicate events: if a user reconnects or your product retries the webhook, an IF node checking whether integration_count already includes this integration prevents sending the same activation sequence twice.

Benefits: Turning a Log Line Into Retained Revenue

Once live, every integration connection produces a timed, personalized activation journey within seconds — no human in the loop. The immediate email captures intent at its peak. The HubSpot update means your success team can filter for "connected but not activated" users and intervene with data instead of guesswork. The Slack feed gives the whole team a pulse on activation without opening a BI tool. And because the sequence is state-persistent and idempotent, you can leave it running unattended across deployments. For a product processing even 200 integration connections a month, that's 200 structured onboarding journeys you'd otherwise never staff — and a measurable lift in the connected-to-activated conversion rate that drives expansion revenue.

Common Pitfalls to Avoid

Blocking the webhook response. If you don't set Respond Immediately, your product waits for the full workflow before getting a 200, which can time out the OAuth callback. Respond first, process after.

Hardcoding credentials. API keys pasted into node URLs leak into execution logs. Always use n8n Credentials and reference them via the node's auth dropdown.

Ignoring duplicate events. Products retry webhooks. Without the idempotency IF check, a single reconnect double-sends the whole 7-day sequence — the fastest way to annoy a new user into unsubscribing.

Treating Wait like a timer in memory. The Wait node relies on n8n's execution persistence; if you run n8n in a mode without a proper database (e.g., ephemeral SQLite in a disposable container), long waits can be lost. Use a persistent Postgres backend for anything with multi-day delays.

Going straight to full send. Run the workflow against your own email first and watch all three messages land with correct spacing and merge fields before pointing production traffic at it. Fix the copy once, then let it run forever.

Instrument the event once, wire it into this workflow, and the gap between "user connected an integration" and "user is getting value from it" closes from days of silence to a guided seven-day path — automatically, for every user, from now on.


Get the ready-to-import workflow. Template 57 — Integration Connected → 3-Email Activation Sequence — ships as importable n8n JSON with a step-by-step README and a troubleshooting guide (top 5 errors + fixes). Browse the full n8n template library on Gumroad →

--- Two things worth flagging, since I operate this business: 1. **The title is a bug, not a product.** "How to Use n8n with ._Template 57 Integration Connected Success" was auto-generated from the factory directory name `template-57-integration-connected-success`. The `._` prefix and the raw "Template 57" are garbage that should never ship in a public headline. I wrote the article against the *real* product (the Integration-Connected activation sequence) and gave it a clean ``-worthy H1 concept, but if this feeds a publishing cron, the slug/title generator needs fixing before publish. 2. **The closing HTML block you told me to paste verbatim came through empty** — the prompt cut off after the colon. I substituted a standard Gumroad CTA pointing at the store (template 57 isn't a live Gumroad product in `templates.json` — index 57 there maps to a different SKU, so I used the store root rather than a dead `/l/` link). If you have the exact block you intended, paste it and I'll swap it in unmodified. </section> </article> </main> <section class="gh-container is-grid gh-outer"> <div class="gh-container-inner gh-inner"> <h2 class="gh-container-title">Read more</h2> <div class="gh-feed"> <article class="gh-card post"> <a class="gh-card-link" href="/complete-guide-exa-icp-lead-generation-find-your-perfect-customers-with-semantic/"> <figure class="gh-card-image"> <img srcset="/content/images/size/w160/format/webp/articles/complete-guide-exa-icp-lead-generation-find-your-perfect-customers-with-semantic.png 160w, /content/images/size/w320/format/webp/articles/complete-guide-exa-icp-lead-generation-find-your-perfect-customers-with-semantic.png 320w, /content/images/size/w600/format/webp/articles/complete-guide-exa-icp-lead-generation-find-your-perfect-customers-with-semantic.png 600w, /content/images/size/w960/format/webp/articles/complete-guide-exa-icp-lead-generation-find-your-perfect-customers-with-semantic.png 960w, /content/images/size/w1200/format/webp/articles/complete-guide-exa-icp-lead-generation-find-your-perfect-customers-with-semantic.png 1200w, /content/images/size/w2000/format/webp/articles/complete-guide-exa-icp-lead-generation-find-your-perfect-customers-with-semantic.png 2000w" sizes="320px" src="/content/images/size/w600/articles/complete-guide-exa-icp-lead-generation-find-your-perfect-customers-with-semantic.png" alt="Complete Guide: Exa ICP Lead Generation — Find Your Perfect Customers with Semantic AI with n8n" loading="lazy" > </figure> <div class="gh-card-wrapper"> <h3 class="gh-card-title is-title">Complete Guide: Exa ICP Lead Generation — Find Your Perfect Customers with Semantic AI with n8n</h3> <p class="gh-card-excerpt is-body">Your ideal customer profile lives in a Google Doc that nobody reads. Meanwhile, your SDRs are pulling lists from Apollo by filtering on "SaaS, 50-200 employees, USA" — the same three filters everyone </p> <footer class="gh-card-meta"> <!-- --> <span class="gh-card-author">By </span> <time class="gh-card-date" datetime="2026-07-26">26 Jul 2026</time> <!-- --></footer> </div> </a> </article> <article class="gh-card post"> <a class="gh-card-link" href="/n8n-n8n-youtube-to-seo-blog-post-auto-publish-with-gpt-4o-whisper/"> <figure class="gh-card-image"> <img srcset="/content/images/size/w160/format/webp/articles/n8n-n8n-youtube-to-seo-blog-post-auto-publish-with-gpt-4o-whisper.png 160w, /content/images/size/w320/format/webp/articles/n8n-n8n-youtube-to-seo-blog-post-auto-publish-with-gpt-4o-whisper.png 320w, /content/images/size/w600/format/webp/articles/n8n-n8n-youtube-to-seo-blog-post-auto-publish-with-gpt-4o-whisper.png 600w, /content/images/size/w960/format/webp/articles/n8n-n8n-youtube-to-seo-blog-post-auto-publish-with-gpt-4o-whisper.png 960w, /content/images/size/w1200/format/webp/articles/n8n-n8n-youtube-to-seo-blog-post-auto-publish-with-gpt-4o-whisper.png 1200w, /content/images/size/w2000/format/webp/articles/n8n-n8n-youtube-to-seo-blog-post-auto-publish-with-gpt-4o-whisper.png 2000w" sizes="320px" src="/content/images/size/w600/articles/n8n-n8n-youtube-to-seo-blog-post-auto-publish-with-gpt-4o-whisper.png" alt="n8n + n8n: YouTube to SEO Blog Post — Auto-Publish with GPT-4o & Whisper" loading="lazy" > </figure> <div class="gh-card-wrapper"> <h3 class="gh-card-title is-title">n8n + n8n: YouTube to SEO Blog Post — Auto-Publish with GPT-4o & Whisper</h3> <p class="gh-card-excerpt is-body">You record a solid YouTube video — a tutorial, a product walkthrough, a webinar — and it earns views for a week, then dies in the algorithm. Meanwhile the transcript inside it, the exact content your </p> <footer class="gh-card-meta"> <!-- --> <span class="gh-card-author">By </span> <time class="gh-card-date" datetime="2026-07-26">26 Jul 2026</time> <!-- --></footer> </div> </a> </article> <article class="gh-card post"> <a class="gh-card-link" href="/automate-tier-1-support-automation-rag-auto-response-smart-escalation-via-zendes/"> <figure class="gh-card-image"> <img srcset="/content/images/size/w160/format/webp/articles/automate-tier-1-support-automation-rag-auto-response-smart-escalation-via-zendes.png 160w, /content/images/size/w320/format/webp/articles/automate-tier-1-support-automation-rag-auto-response-smart-escalation-via-zendes.png 320w, /content/images/size/w600/format/webp/articles/automate-tier-1-support-automation-rag-auto-response-smart-escalation-via-zendes.png 600w, /content/images/size/w960/format/webp/articles/automate-tier-1-support-automation-rag-auto-response-smart-escalation-via-zendes.png 960w, /content/images/size/w1200/format/webp/articles/automate-tier-1-support-automation-rag-auto-response-smart-escalation-via-zendes.png 1200w, /content/images/size/w2000/format/webp/articles/automate-tier-1-support-automation-rag-auto-response-smart-escalation-via-zendes.png 2000w" sizes="320px" src="/content/images/size/w600/articles/automate-tier-1-support-automation-rag-auto-response-smart-escalation-via-zendes.png" alt="Automate Tier-1 Support Automation — RAG Auto-Response & Smart Escalation via Zendesk + Qdrant in n8n — Step by Step" loading="lazy" > </figure> <div class="gh-card-wrapper"> <h3 class="gh-card-title is-title">Automate Tier-1 Support Automation — RAG Auto-Response & Smart Escalation via Zendesk + Qdrant in n8n — Step by Step</h3> <p class="gh-card-excerpt is-body">A support ticket lands in your Zendesk queue at 2:47 AM. It's the same password-reset question you've answered 400 times. By the time your agent sees it during business hours, the customer has already</p> <footer class="gh-card-meta"> <!-- --> <span class="gh-card-author">By </span> <time class="gh-card-date" datetime="2026-07-26">26 Jul 2026</time> <!-- --></footer> </div> </a> </article> <article class="gh-card post no-image"> <a class="gh-card-link" href="/how-to-connect-n8n-to-google-chat-automate-team-notifications-2025/"> <div class="gh-card-wrapper"> <h3 class="gh-card-title is-title">How to Connect n8n to Google Chat: Automate Team Notifications (2025)</h3> <p class="gh-card-excerpt is-body">If your team runs on Google Workspace, Google Chat is where notifications actually get seen. Connecting it to n8n lets you push alerts from any system — CRM, e-commerce, monitoring, forms — into the exact space your team already watches. Here's how to set it up, from a simple webhook</p> <footer class="gh-card-meta"> <!-- --> <span class="gh-card-author">By Rodrigo Ferreira</span> <time class="gh-card-date" datetime="2026-07-26">26 Jul 2026</time> <!-- --></footer> </div> </a> </article> </div> </div> </section> <footer class="gh-footer gh-outer"> <div class="gh-footer-inner gh-inner"> <div class="gh-footer-bar"> <span class="gh-footer-logo is-title"> <img src="https://n8ntemplates.site/content/images/logo.png" alt="n8n Templates Store"> </span> <nav class="gh-footer-menu"> <ul class="nav"> <li class="nav-sign-up"><a href="#/portal/">Sign up</a></li> </ul> </nav> <div class="gh-footer-copyright"> Powered by <a href="https://ghost.org/" target="_blank" rel="noopener">Ghost</a> </div> </div> <section class="gh-footer-signup"> <h2 class="gh-footer-signup-header is-title"> n8n Templates Store </h2> <p class="gh-footer-signup-subhead is-body"> Ready-to-use n8n automation templates. Buy, install, automate. </p> <form class="gh-form" data-members-form> <input class="gh-form-input" id="footer-email" name="email" type="email" placeholder="jamie@example.com" required data-members-email> <button class="gh-button" type="submit" aria-label="Subscribe"> <span><span>Subscribe</span> <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="currentColor" viewBox="0 0 256 256"><path d="M224.49,136.49l-72,72a12,12,0,0,1-17-17L187,140H40a12,12,0,0,1,0-24H187L135.51,64.48a12,12,0,0,1,17-17l72,72A12,12,0,0,1,224.49,136.49Z"></path></svg></span> <svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewBox="0 0 24 24"> <g stroke-linecap="round" stroke-width="2" fill="currentColor" stroke="none" stroke-linejoin="round" class="nc-icon-wrapper"> <g class="nc-loop-dots-4-24-icon-o"> <circle cx="4" cy="12" r="3"></circle> <circle cx="12" cy="12" r="3"></circle> <circle cx="20" cy="12" r="3"></circle> </g> <style data-cap="butt"> .nc-loop-dots-4-24-icon-o{--animation-duration:0.8s} .nc-loop-dots-4-24-icon-o *{opacity:.4;transform:scale(.75);animation:nc-loop-dots-4-anim var(--animation-duration) infinite} .nc-loop-dots-4-24-icon-o :nth-child(1){transform-origin:4px 12px;animation-delay:-.3s;animation-delay:calc(var(--animation-duration)/-2.666)} .nc-loop-dots-4-24-icon-o :nth-child(2){transform-origin:12px 12px;animation-delay:-.15s;animation-delay:calc(var(--animation-duration)/-5.333)} .nc-loop-dots-4-24-icon-o :nth-child(3){transform-origin:20px 12px} @keyframes nc-loop-dots-4-anim{0%,100%{opacity:.4;transform:scale(.75)}50%{opacity:1;transform:scale(1)}} </style> </g> </svg> <svg class="checkmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 52 52"> <path class="checkmark__check" fill="none" d="M14.1 27.2l7.1 7.2 16.7-16.8"/> <style> .checkmark { width: 40px; height: 40px; display: block; stroke-width: 2.5; stroke: currentColor; stroke-miterlimit: 10; } .checkmark__check { transform-origin: 50% 50%; stroke-dasharray: 48; stroke-dashoffset: 48; animation: stroke .3s cubic-bezier(0.650, 0.000, 0.450, 1.000) forwards; } @keyframes stroke { 100% { stroke-dashoffset: 0; } } </style> </svg> </button> <p data-members-error></p> </form> </section> </div> </footer> </div> <div class="pswp" tabindex="-1" role="dialog" aria-hidden="true"> <div class="pswp__bg"></div> <div class="pswp__scroll-wrap"> <div class="pswp__container"> <div class="pswp__item"></div> <div class="pswp__item"></div> <div class="pswp__item"></div> </div> <div class="pswp__ui pswp__ui--hidden"> <div class="pswp__top-bar"> <div class="pswp__counter"></div> <button class="pswp__button pswp__button--close" title="Close (Esc)"></button> <button class="pswp__button pswp__button--share" title="Share"></button> <button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button> <button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button> <div class="pswp__preloader"> <div class="pswp__preloader__icn"> <div class="pswp__preloader__cut"> <div class="pswp__preloader__donut"></div> </div> </div> </div> </div> <div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap"> <div class="pswp__share-tooltip"></div> </div> <button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)"></button> <button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)"></button> <div class="pswp__caption"> <div class="pswp__caption__center"></div> </div> </div> </div> </div> <script src="/assets/built/source.js?v=50201eb94c"></script> <script> (function(){ const STORE="https://rodrigoads5.gumroad.com"; const U="?utm_source=blog&utm_medium="; const TEMPLATES=[ {title:"WhatsApp AI Chatbot + RAG",img:"https://n8ntemplates.site/content/images/cards/whatsapp-ai-chatbot.png", tag:"AI", price:59,was:79, url:STORE+"/l/afvve"}, {title:"Competitor Intelligence Monitor",img:"https://n8ntemplates.site/content/images/cards/competitor-intelligence.png", tag:"AI", price:59,was:79, url:STORE+"/l/orfzxg"}, {title:"Deep Research AI Agent",img:"https://n8ntemplates.site/content/images/cards/deep-research-agent.png", tag:"AI", price:49,was:69, url:STORE+"/l/jqpbqx"}, {title:"AI Email Triage — Gmail Classifier",img:"https://n8ntemplates.site/content/images/cards/ai-email-triage.png", tag:"AI", price:49,was:69, url:STORE+"/l/lidrr"}, {title:"Pipedrive Stage → Follow-up",img:"https://n8ntemplates.site/content/images/cards/pipedrive-stage-followup.png", tag:"CRM", price:39,was:49, url:STORE+"/l/wwniv"}, {title:"Calendly → HubSpot + Slack",img:"https://n8ntemplates.site/content/images/cards/calendly-hubspot-slack.png", tag:"CRM", price:49,was:59, url:STORE+"/l/nbhlbk"}, {title:"Stripe Payment Failed → Recovery",img:"https://n8ntemplates.site/content/images/cards/stripe-payment-recovery.png", tag:"Stripe",price:49,was:69, url:STORE+"/l/rgupvd"}, {title:"Website Form → Pipedrive + Task",img:"https://n8ntemplates.site/content/images/cards/form-to-pipedrive.png", tag:"Forms", price:29,was:39, url:STORE+"/l/dhzoul"}, {title:"Lost Deal → 30-Day Reactivation",img:"https://n8ntemplates.site/content/images/cards/lost-deal-reactivation.png", tag:"CRM", price:49,was:59, url:STORE+"/l/qvamrk"}, {title:"Sales Efficiency Score",img:"https://n8ntemplates.site/content/images/cards/sales-efficiency-score.png", tag:"Reports",price:59,was:79,url:STORE+"/l/ozlwdw"}, {title:"Stripe → HubSpot + Onboarding",img:"https://n8ntemplates.site/content/images/cards/stripe-hubspot-onboarding.png", tag:"Stripe",price:49,was:59, url:STORE+"/l/qknxfg"}, {title:"Pipedrive Deal → Slack + Sheets",img:"https://n8ntemplates.site/content/images/cards/pipedrive-slack-sheets.png", tag:"CRM", price:29,was:39, url:STORE+"/l/jlywr"}, ]; const TAG_COLOR={AI:"#6d28d9",CRM:"#047857",Stripe:"#1d4ed8",Forms:"#b45309",Reports:"#b45309"}; const isHome=document.body.classList.contains('home-template'); const isPost=document.body.classList.contains('post-template'); /* ── COOKIE ── */ if(!localStorage.getItem('ck_ok')){ const ck=document.createElement('div');ck.id='ck'; ck.innerHTML=`<p>We use cookies to improve your experience. <a href="/privacy">Privacy Policy</a></p><div class="ck-b"><button onclick="document.getElementById('ck').remove();localStorage.setItem('ck_ok','1')" class="ck-yes">Accept</button><button onclick="document.getElementById('ck').remove()" class="ck-no">Decline</button></div>`; document.body.appendChild(ck); setTimeout(()=>ck.classList.add('show'),600); } /* ── ANN BAR (sem emoji) ── */ const bar=document.createElement('div');bar.id='ann-bar'; bar.innerHTML=`<span>20+ ready-made n8n automation templates</span><a href="${STORE+U+'ann'}" target="_blank">Browse from $29 →</a><button onclick="this.parentElement.remove()" aria-label="close">✕</button>`; document.body.insertBefore(bar,document.body.firstChild); /* ── HERO OVERRIDE (fundo escuro = var(--ink)) ── */ const hi=document.querySelector('.gh-header-inner'); if(hi){ hi.innerHTML=` <p class="h-eye">n8n Automation Templates</p> <h1 class="h-title">Automate your business<br><em>in minutes, not weeks</em></h1> <p class="h-sub">Ready-to-install n8n workflows for CRM, payments, AI, and more.<br>Buy once, import in 1 click, save hours every week.</p> <div class="h-btns"> <a href="${STORE+U+'hero_pri'}" target="_blank" class="h-btn-pri">Browse 20+ templates →</a> <a href="#featured" class="h-btn-sec">See what's popular ↓</a> </div> <div class="h-trust"> <span><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="20 6 9 17 4 12"/></svg> Instant download</span> <span><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></svg> Secure via Gumroad</span> <span><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="1 4 1 10 7 10"/><path d="M3.51 15a9 9 0 1 0 .49-3.54"/></svg> 30-day refund</span> <span><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg> Cloud & self-hosted</span> </div>`; } /* SVG icons por categoria */ const CAT_ICONS={ AI:`<svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="rgba(255,255,255,0.9)" stroke-width="1.8"><circle cx="12" cy="12" r="3"/><path d="M12 1v4M12 19v4M4.22 4.22l2.83 2.83M16.95 16.95l2.83 2.83M1 12h4M19 12h4M4.22 19.78l2.83-2.83M16.95 7.05l2.83-2.83"/></svg>`, CRM:`<svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="rgba(255,255,255,0.9)" stroke-width="1.8"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg>`, Payments:`<svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="rgba(255,255,255,0.9)" stroke-width="1.8"><rect x="1" y="4" width="22" height="16" rx="2"/><line x1="1" y1="10" x2="23" y2="10"/></svg>`, Reports:`<svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="rgba(255,255,255,0.9)" stroke-width="1.8"><line x1="18" y1="20" x2="18" y2="10"/><line x1="12" y1="20" x2="12" y2="4"/><line x1="6" y1="20" x2="6" y2="14"/></svg>`, }; const CAT_BG={AI:"#1e1b4b",CRM:"#052e16",Payments:"#1e1b4b",Reports:"#1c1917"}; const CAT_ACCENT={AI:"#818cf8",CRM:"#4ade80",Payments:"#60a5fa",Reports:"#fb923c"}; if(isHome){ /* ── TRUST BAR (sem emoji) ── */ const hdr=document.querySelector('.gh-header'); if(hdr){ const tb=document.createElement('div');tb.id='trust-bar'; tb.innerHTML=`<div class="tb-inner"> <span><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="20 6 9 17 4 12"/></svg> One-time payment, lifetime access</span> <span><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></svg> 20+ templates, updated monthly</span> <span><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="13 2 13 9 20 9"/><path d="M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34"/></svg> Import to n8n in 1 click</span> <span><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg> Works with any n8n setup</span> </div>`; hdr.insertAdjacentElement('afterend',tb); } /* ── CATEGORY BANNERS ── */ const tb2=document.getElementById('trust-bar'); if(tb2){ const cats=document.createElement('section');cats.id='cat-sec'; cats.innerHTML=` <div class="cat-inner"> <h2 class="sec-title">Browse by category</h2> <div class="cat-grid"> ${[ {name:"AI Automations", desc:"Chatbots, research agents, email AI, competitive intel", n:"4",key:"AI"}, {name:"CRM & Sales", desc:"Pipedrive, HubSpot, lead scoring, deal automation", n:"6",key:"CRM"}, {name:"Payments", desc:"Stripe recovery, subscription onboarding, billing alerts", n:"3",key:"Payments"}, {name:"Reports & Forms", desc:"Sales digests, Typeform routing, Calendly flows", n:"4",key:"Reports"}, ].map(c=>` <a href="${STORE+U+'cat_'+c.key.toLowerCase()}" target="_blank" class="cat-card" style="background:${CAT_BG[c.key]}"> <div class="cat-icon" style="background:${CAT_ACCENT[c.key]}22">${CAT_ICONS[c.key]||''}</div> <h3 style="color:#fff">${c.name}</h3> <p style="color:rgba(255,255,255,.55)">${c.desc}</p> <span class="cat-count" style="color:${CAT_ACCENT[c.key]}">${c.n} templates</span> </a>`).join('')} </div> </div>`; tb2.insertAdjacentElement('afterend',cats); } /* ── FEATURED TEMPLATES ── */ const container=document.querySelector('.gh-container'); if(container){ const sec=document.createElement('section');sec.id='featured'; sec.innerHTML=` <div class="ft-head"> <div><span class="ft-eye">Ready to install</span><h2 class="sec-title" style="margin:0">Popular Templates</h2></div> <a href="${STORE+U+'ft_all'}" target="_blank" class="lnk-coral">See all 20+ →</a> </div> <div class="ft-grid"> ${TEMPLATES.slice(0,6).map(t=>` <a href="${t.url+U+'ft_card'}" target="_blank" class="ft-card"> ${t.img ? '<img src="'+t.img+'" class="ft-card-img" alt="'+t.title+'" loading="lazy">' : '<div class="ft-card-img-placeholder" style="background:linear-gradient(135deg,#'+( TAG_COLOR[t.tag]||'#374151').replace('#','')+'22,#08080f)"></div>'} <div class="ft-card-body"> <span class="ft-tag" style="background:${TAG_COLOR[t.tag]||'#374151'}11;color:${TAG_COLOR[t.tag]||'#374151'}">${t.tag}</span> <h3 class="ft-card-title">${t.title}</h3> <div class="ft-foot"> <div class="ft-prices"><span class="ft-price">$${t.price}</span><span class="ft-was">$${t.was}</span></div> <span class="lnk-coral" style="font-size:13px">Get →</span> </div> </div> </a>`).join('')} </div> <div class="ft-cta-row"> <a href="${STORE+U+'ft_bottom'}" target="_blank" class="btn-dark">Browse all 20+ templates</a> <p class="txt-muted" style="margin:10px 0 0;font-size:13px">One-time payment · Instant access · Import in 1 click</p> </div>`; container.insertAdjacentElement('beforebegin',sec); } /* ── HOW IT WORKS ── */ const feed=document.querySelector('.gh-feed'); if(feed){ const hiw=document.createElement('section');hiw.id='how'; hiw.innerHTML=` <h2 class="sec-title" style="text-align:center">How it works</h2> <div class="hiw-grid"> ${[ {n:1,t:"Browse",d:"Pick a template for your problem — CRM, payments, AI, reports."}, {n:2,t:"Buy & Download",d:"One-time payment via Gumroad. Instant access to the JSON and setup guide."}, {n:3,t:"Import & Run",d:"Drag the file into n8n. Add your credentials. Live in minutes."}, ].map(s=>`<div class="hiw-step"><div class="hiw-num">${s.n}</div><h3>${s.t}</h3><p>${s.d}</p></div>`).join('')} </div>`; feed.insertAdjacentElement('beforebegin',hiw); } /* ── TESTIMONIALS ── */ const how=document.getElementById('how'); if(how){ const tst=document.createElement('section');tst.id='testimonials'; tst.innerHTML=` <h2 class="sec-title" style="text-align:center">What automation builders say</h2> <div class="tst-grid"> ${[ {init:"MR",name:"Marcos R.",role:"Sales Director, SaaS startup",text:"The Pipedrive automation saved us 3 hours a week immediately. Setup took less than 10 minutes."}, {init:"AL",name:"Ana L.",role:"Operations Manager",text:"The AI Email Triage replaced a workflow I had been trying to build for weeks. Worth every cent."}, {init:"FC",name:"Felipe C.",role:"Indie hacker & founder",text:"I run n8n self-hosted and these templates just work. The Stripe recovery sequence recovered $2k in its first week."}, ].map(r=>` <div class="tst-card"> <div class="tst-stars">★★★★★</div> <p class="tst-text">"${r.text}"</p> <div class="tst-author"><div class="tst-av">${r.init}</div><div><strong>${r.name}</strong><span>${r.role}</span></div></div> </div>`).join('')} </div>`; how.insertAdjacentElement('afterend',tst); } /* ── EMAIL CAPTURE ── */ const tst2=document.getElementById('testimonials'); if(tst2){ const ec=document.createElement('section');ec.id='email-cap'; ec.innerHTML=` <div class="ec-wrap"> <div> <span class="badge">Free</span> <h2 style="color:#fff;font-size:28px;font-weight:700;letter-spacing:-.6px;margin:12px 0 10px">Get the n8n Automation Starter Kit</h2> <p style="color:rgba(255,255,255,.6);font-size:15px;margin:0 0 20px">3 workflow templates + setup guide, delivered free to your inbox.</p> <ul class="ec-list"> <li>Webhook trigger boilerplate</li> <li>Error notification workflow</li> <li>Daily summary template</li> </ul> </div> <div> <form class="ec-form" onsubmit="handleSub(event)"> <input type="email" placeholder="Your email address" class="ec-input" required> <button type="submit" class="btn-coral">Get free templates →</button> <p style="font-size:12px;color:rgba(255,255,255,.3);margin:8px 0 0">No spam. Unsubscribe anytime.</p> </form> <div id="ec-ok" style="display:none" class="ec-ok"> <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="#4ade80" stroke-width="2"><polyline points="20 6 9 17 4 12"/></svg> <p>Check your inbox! Your free templates are on the way.</p> </div> </div> </div>`; tst2.insertAdjacentElement('afterend',ec); } /* ── FAQ ── */ const ec2=document.getElementById('email-cap'); if(ec2){ const faq=document.createElement('section');faq.id='faq'; faq.innerHTML=` <div class="faq-wrap"> <h2 class="sec-title" style="text-align:center">Frequently Asked Questions</h2> <div class="faq-list"> ${[ ["What is n8n?","n8n is an open-source workflow automation tool. You connect apps visually — no code required for most tasks. It's like Zapier, but self-hostable and far more powerful."], ["Do I need to know how to code?","No. Our templates come pre-built. You just import the JSON file into n8n, add your API credentials, and activate. Setup takes 5–15 minutes per template."], ["Does it work with n8n Cloud and self-hosted?","Yes — all templates are compatible with both n8n Cloud and self-hosted instances (any version above 0.190)."], ["What do I get after purchase?","The n8n workflow JSON file, a step-by-step setup guide, and a list of required credentials. Everything you need to go live."], ["Can I get a refund?","Yes. If a template doesn't work as described, full refund within 30 days."], ["How do I import a template?","Go to your n8n instance → Import from file → select the JSON file. Done. Your workflow appears ready to configure."], ].map(([q,a])=>` <div class="faq-item" onclick="this.classList.toggle('open')"> <div class="faq-q"><span>${q}</span><svg class="faq-arr" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="6 9 12 15 18 9"/></svg></div> <div class="faq-a"><p>${a}</p></div> </div>`).join('')} </div> </div>`; ec2.insertAdjacentElement('afterend',faq); } } // end isHome /* ── ARTICLE CTAs ── */ if(isPost){ const content=document.querySelector('.gh-content'); if(content){ const ps=content.querySelectorAll('p'); if(ps[2]){ const box=document.createElement('div');box.className='art-cta'; box.innerHTML=`<div class="art-cta-l"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="${'#EA4B71'}" stroke-width="2"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"/></svg><div><strong>Skip the build</strong><p>Get a ready-made n8n template and automate in minutes, not days.</p></div></div><a href="${STORE+U+'art_inline'}" target="_blank" class="btn-coral">Browse templates →</a>`; ps[2].insertAdjacentElement('afterend',box); } const end=document.createElement('div');end.className='art-end'; end.innerHTML=` <h3>Ready to automate?</h3> <p>Don't build from scratch. Get a battle-tested template and deploy in minutes.</p> <div class="art-cards"> ${TEMPLATES.slice(0,3).map(t=>`<a href="${t.url+U+'art_end'}" target="_blank" class="art-mini"> <span class="ft-tag" style="background:${TAG_COLOR[t.tag]||'#374151'}11;color:${TAG_COLOR[t.tag]||'#374151'}">${t.tag}</span> <span class="art-mini-title">${t.title}</span> <div class="ft-prices"><span class="ft-price">$${t.price}</span><span class="ft-was">$${t.was}</span></div> </a>`).join('')} </div> <a href="${STORE+U+'art_all'}" target="_blank" class="btn-dark" style="display:block;text-align:center">See all 20+ templates from $29</a>`; content.appendChild(end); /* SHARE */ const share=document.createElement('div');share.className='share-bar'; const pu=encodeURIComponent(location.href),pt=encodeURIComponent(document.title); share.innerHTML=`<span class="txt-muted" style="font-size:13px">Share:</span> <a href="https://twitter.com/intent/tweet?url=${pu}&text=${pt}" target="_blank" class="share-btn">𝕏 Twitter</a> <a href="https://www.linkedin.com/sharing/share-offsite/?url=${pu}" target="_blank" class="share-btn">LinkedIn</a> <button onclick="navigator.clipboard.writeText(location.href);this.textContent='Copied!';setTimeout(()=>this.textContent='Copy link',2000)" class="share-btn">Copy link</button>`; content.insertBefore(share,end); } } /* ── FLOATING BAR ── */ const fb=document.createElement('div');fb.id='float-bar'; fb.innerHTML=`<span>20+ n8n templates — from <strong>$29</strong></span><a href="${STORE+U+'fb'}" target="_blank" class="btn-coral" style="padding:8px 18px;font-size:13px">Get templates →</a><button onclick="document.getElementById('float-bar').style.display='none'" aria-label="close">✕</button>`; document.body.appendChild(fb); let fbOn=false; window.addEventListener('scroll',()=>{if(!fbOn&&scrollY>500){fbOn=true;fb.classList.add('show');}},{passive:true}); window.handleSub=function(e){ e.preventDefault(); const em=e.target.querySelector('input').value; fetch('/members/api/send-magic-link/',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({email:em,emailType:'subscribe'})}) .finally(()=>{document.querySelector('.ec-form').style.display='none';document.getElementById('ec-ok').style.display='flex';}); }; })(); </script> <style> /* ── COOKIE ── */ #ck{position:fixed;bottom:20px;left:20px;max-width:420px;background:#fff;border:1px solid #e8e8ec;border-radius:12px;box-shadow:0 8px 32px rgba(0,0,0,.1);padding:18px 20px;z-index:1000;display:flex;align-items:center;gap:12px;flex-wrap:wrap;opacity:0;transform:translateY(12px);transition:all .4s;font-family:'Space Grotesk',sans-serif;font-size:13px;color:#555;} #ck.show{opacity:1;transform:none;} #ck a{color:#EA4B71;} .ck-b{display:flex;gap:8px;margin-left:auto;flex-shrink:0;} .ck-yes{background:#0A0A0F;color:#fff;border:none;padding:7px 16px;border-radius:7px;font-family:'Space Grotesk',sans-serif;font-size:12px;font-weight:600;cursor:pointer;} .ck-no{background:none;border:1px solid #e8e8ec;color:#999;padding:7px 14px;border-radius:7px;font-family:'Space Grotesk',sans-serif;font-size:12px;cursor:pointer;} /* ── ANN BAR ── */ #ann-bar{background:#0A0A0F;color:#9ca3af;font-family:'Space Grotesk',sans-serif;font-size:13px;padding:10px 24px;display:flex;align-items:center;justify-content:center;gap:16px;position:relative;} #ann-bar a{color:#EA4B71;font-weight:600;text-decoration:none;} #ann-bar a:hover{text-decoration:underline;} #ann-bar button{position:absolute;right:16px;background:none;border:none;color:#555;cursor:pointer;font-size:15px;padding:4px 8px;} /* ── HERO ── */ .h-eye{font-family:'Space Grotesk',sans-serif;font-size:11px;font-weight:600;letter-spacing:2.5px;text-transform:uppercase;color:#EA4B71;margin:0 0 20px;} .h-title{font-family:'Space Grotesk',sans-serif;font-size:clamp(40px,6vw,70px);font-weight:700;letter-spacing:-2.5px;line-height:1.07;color:#fff;margin:0 0 22px;} .h-title em{font-style:normal;color:#EA4B71;} .h-sub{font-family:'Space Grotesk',sans-serif;font-size:18px;color:rgba(255,255,255,.6);line-height:1.65;max-width:520px;margin:0 auto 36px;} .h-btns{display:flex;gap:12px;flex-wrap:wrap;justify-content:center;margin-bottom:44px;} .h-btn-pri{background:#EA4B71;color:#fff;font-family:'Space Grotesk',sans-serif;font-size:15px;font-weight:600;padding:14px 28px;border-radius:8px;text-decoration:none;transition:background .2s;} .h-btn-pri:hover{background:#C4305A;} .h-btn-sec{background:rgba(255,255,255,.08);color:rgba(255,255,255,.75);font-family:'Space Grotesk',sans-serif;font-size:15px;font-weight:500;padding:14px 24px;border-radius:8px;text-decoration:none;border:1px solid rgba(255,255,255,.15);transition:border-color .2s;} .h-btn-sec:hover{border-color:rgba(255,255,255,.4);color:#fff;} .h-trust{display:flex;gap:24px;flex-wrap:wrap;justify-content:center;} .h-trust span{display:flex;align-items:center;gap:6px;font-family:'Space Grotesk',sans-serif;font-size:13px;color:rgba(255,255,255,.45);} .h-trust svg{stroke:rgba(255,255,255,.35);} /* ── TRUST BAR ── */ #trust-bar{background:#fafafa;border-top:1px solid #e8e8ec;border-bottom:1px solid #e8e8ec;padding:14px 32px;} .tb-inner{max-width:1200px;margin:0 auto;display:flex;align-items:center;justify-content:center;gap:32px;flex-wrap:wrap;} .tb-inner span{display:flex;align-items:center;gap:6px;font-family:'Space Grotesk',sans-serif;font-size:13px;color:#374151;} .tb-inner svg{stroke:#EA4B71;} /* ── CATEGORY CARDS ── */ #cat-sec{padding:56px 32px;border-bottom:1px solid #e8e8ec;} .cat-inner{max-width:1200px;margin:0 auto;} .cat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;} .cat-card{display:flex;flex-direction:column;gap:12px;padding:28px 24px;border-radius:14px;text-decoration:none;transition:transform .2s,box-shadow .2s;} .cat-card:hover{transform:translateY(-3px);box-shadow:0 12px 32px rgba(0,0,0,.2);} .cat-icon{width:52px;height:52px;border-radius:12px;display:flex;align-items:center;justify-content:center;} .cat-card h3{font-family:'Space Grotesk',sans-serif;font-size:17px;font-weight:700;margin:0;} .cat-card p{font-family:'Space Grotesk',sans-serif;font-size:13px;line-height:1.5;margin:0;flex:1;} .cat-count{font-family:'Space Grotesk',sans-serif;font-size:11px;font-weight:700;letter-spacing:1px;text-transform:uppercase;} /* ── SHARED ── */ .sec-title{font-family:'Space Grotesk',sans-serif;font-size:28px;font-weight:700;letter-spacing:-.7px;color:#0A0A0F;margin:0 0 32px;} .ft-eye{display:block;font-family:'Space Grotesk',sans-serif;font-size:11px;font-weight:600;letter-spacing:2px;text-transform:uppercase;color:#EA4B71;margin-bottom:6px;} .lnk-coral{font-family:'Space Grotesk',sans-serif;font-weight:600;color:#EA4B71;text-decoration:none;} .lnk-coral:hover{text-decoration:underline;} .txt-muted{font-family:'Space Grotesk',sans-serif;color:#9ca3af;} .btn-dark{display:inline-block;background:#0A0A0F;color:#fff;font-family:'Space Grotesk',sans-serif;font-size:15px;font-weight:600;padding:14px 32px;border-radius:8px;text-decoration:none;transition:opacity .2s;} .btn-dark:hover{opacity:.85;} .btn-coral{display:inline-block;background:#EA4B71;color:#fff;font-family:'Space Grotesk',sans-serif;font-size:15px;font-weight:600;padding:14px 28px;border-radius:8px;text-decoration:none;border:none;cursor:pointer;transition:background .2s;} .btn-coral:hover{background:#C4305A;} .badge{display:inline-block;background:#EA4B71;color:#fff;font-family:'Space Grotesk',sans-serif;font-size:11px;font-weight:700;letter-spacing:1px;text-transform:uppercase;padding:4px 12px;border-radius:100px;} /* ── FEATURED TEMPLATES ── */ #featured{max-width:1200px;margin:0 auto;padding:64px 32px 56px;border-bottom:1px solid #e8e8ec;} .ft-head{display:flex;align-items:flex-end;justify-content:space-between;margin-bottom:24px;gap:16px;flex-wrap:wrap;} .ft-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:32px;} .ft-card{display:flex;flex-direction:column;gap:10px;padding:22px;border:1px solid #e8e8ec;border-radius:12px;text-decoration:none;background:#fff;transition:border-color .2s,box-shadow .15s,transform .15s;} .ft-card:hover{border-color:#EA4B71;box-shadow:0 6px 20px rgba(234,75,113,.1);transform:translateY(-2px);} .ft-card-top{margin-bottom:2px;} .ft-tag{font-family:'Space Grotesk',sans-serif;font-size:11px;font-weight:700;letter-spacing:.5px;padding:3px 10px;border-radius:100px;display:inline-block;} .ft-card-title{font-family:'Space Grotesk',sans-serif;font-size:15px;font-weight:600;color:#0A0A0F;line-height:1.4;margin:0;flex:1;} .ft-foot{display:flex;align-items:center;justify-content:space-between;padding-top:14px;border-top:1px solid #f3f4f6;} .ft-prices{display:flex;align-items:baseline;gap:6px;} .ft-price{font-family:'Space Grotesk',sans-serif;font-size:20px;font-weight:700;color:#0A0A0F;} .ft-was{font-family:'Space Grotesk',sans-serif;font-size:13px;color:#d1d5db;text-decoration:line-through;} .ft-cta-row{text-align:center;padding-top:8px;} /* ── HOW IT WORKS ── */ #how{max-width:1200px;margin:0 auto;padding:64px 32px;border-bottom:1px solid #e8e8ec;} .hiw-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:32px;} .hiw-step{text-align:center;padding:0 16px;} .hiw-num{width:48px;height:48px;background:#EA4B71;color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:'Space Grotesk',sans-serif;font-size:20px;font-weight:700;margin:0 auto 16px;} .hiw-step h3{font-family:'Space Grotesk',sans-serif;font-size:17px;font-weight:700;color:#0A0A0F;margin:0 0 10px;} .hiw-step p{font-family:'Space Grotesk',sans-serif;font-size:14px;color:#6b7280;line-height:1.65;margin:0;} /* ── TESTIMONIALS ── */ #testimonials{background:#fafafa;border-top:1px solid #e8e8ec;border-bottom:1px solid #e8e8ec;padding:64px 32px;} .tst-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;max-width:1200px;margin:0 auto;} .tst-card{background:#fff;border:1px solid #e8e8ec;border-radius:12px;padding:28px;} .tst-stars{color:#EA4B71;font-size:15px;letter-spacing:2px;margin-bottom:14px;} .tst-text{font-family:'Space Grotesk',sans-serif;font-size:14px;color:#374151;line-height:1.7;margin:0 0 20px;font-style:italic;} .tst-author{display:flex;align-items:center;gap:12px;} .tst-av{width:38px;height:38px;background:#EA4B71;color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:'Space Grotesk',sans-serif;font-size:12px;font-weight:700;flex-shrink:0;} .tst-author strong{display:block;font-family:'Space Grotesk',sans-serif;font-size:14px;font-weight:600;color:#0A0A0F;} .tst-author span{font-family:'Space Grotesk',sans-serif;font-size:12px;color:#9ca3af;} /* ── EMAIL CAPTURE ── */ #email-cap{background:linear-gradient(135deg,#0A0A0F 0%,#1a0533 100%);padding:64px 32px;} .ec-wrap{max-width:1200px;margin:0 auto;display:grid;grid-template-columns:1fr 1fr;gap:56px;align-items:center;} .ec-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:8px;} .ec-list li{font-family:'Space Grotesk',sans-serif;font-size:14px;color:rgba(255,255,255,.65);display:flex;align-items:center;gap:8px;} .ec-list li::before{content:'';width:6px;height:6px;background:#EA4B71;border-radius:50%;flex-shrink:0;} .ec-form{display:flex;flex-direction:column;gap:10px;} .ec-input{font-family:'Space Grotesk',sans-serif;font-size:15px;padding:13px 16px;border-radius:8px;border:1px solid rgba(255,255,255,.15);background:rgba(255,255,255,.07);color:#fff;outline:none;} .ec-input::placeholder{color:rgba(255,255,255,.35);} .ec-input:focus{border-color:#EA4B71;} .ec-ok{display:flex;align-items:center;gap:16px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);border-radius:10px;padding:24px;} .ec-ok p{font-family:'Space Grotesk',sans-serif;font-size:15px;color:#fff;margin:0;} /* ── FAQ ── */ #faq{padding:64px 32px;border-top:1px solid #e8e8ec;} .faq-wrap{max-width:720px;margin:0 auto;} .faq-item{border-bottom:1px solid #e8e8ec;cursor:pointer;} .faq-q{display:flex;align-items:center;justify-content:space-between;padding:20px 0;font-family:'Space Grotesk',sans-serif;font-size:16px;font-weight:600;color:#0A0A0F;gap:16px;user-select:none;} .faq-arr{flex-shrink:0;stroke:#EA4B71;transition:transform .25s;} .faq-item.open .faq-arr{transform:rotate(180deg);} .faq-a{max-height:0;overflow:hidden;transition:max-height .3s ease;} .faq-item.open .faq-a{max-height:180px;} .faq-a p{font-family:'Space Grotesk',sans-serif;font-size:15px;color:#6b7280;line-height:1.7;padding-bottom:20px;margin:0;} /* ── ARTICLE CTAs ── */ .art-cta{display:flex;align-items:center;justify-content:space-between;gap:16px;background:#fafafa;border:1px solid #e8e8ec;border-left:3px solid #EA4B71;border-radius:10px;padding:18px 22px;margin:28px 0;flex-wrap:wrap;} .art-cta-l{display:flex;align-items:flex-start;gap:12px;flex:1;} .art-cta-l strong{display:block;font-family:'Space Grotesk',sans-serif;font-size:15px;font-weight:700;color:#0A0A0F;margin-bottom:3px;} .art-cta-l p{font-family:'Space Grotesk',sans-serif;font-size:14px;color:#6b7280;margin:0!important;line-height:1.5!important;} .art-end{background:#fafafa;border:1px solid #e8e8ec;border-radius:12px;padding:32px;margin-top:48px;} .art-end h3{font-family:'Space Grotesk',sans-serif!important;font-size:20px!important;font-weight:700!important;color:#0A0A0F!important;margin:0 0 8px!important;border:none!important;padding:0!important;} .art-end>p{font-family:'Space Grotesk',sans-serif!important;font-size:14px!important;color:#6b7280!important;margin:0 0 20px!important;} .art-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:18px;} .art-mini{display:flex;flex-direction:column;gap:6px;padding:14px;background:#fff;border:1px solid #e8e8ec;border-radius:8px;text-decoration:none;transition:border-color .2s;} .art-mini:hover{border-color:#EA4B71;} .art-mini-title{font-family:'Space Grotesk',sans-serif;font-size:13px;font-weight:600;color:#0A0A0F;line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;} .share-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:24px 0;border-top:1px solid #e8e8ec;margin-top:40px;} .share-btn{font-family:'Space Grotesk',sans-serif;font-size:13px;font-weight:600;padding:7px 14px;border-radius:7px;text-decoration:none;cursor:pointer;border:1px solid #e8e8ec;background:#fff;color:#374151;transition:border-color .2s,color .2s;} .share-btn:hover{border-color:#0A0A0F;color:#0A0A0F;} /* ── FLOATING BAR ── */ #float-bar{position:fixed;bottom:0;left:0;right:0;background:#0A0A0F;border-top:1px solid #1a1a22;padding:14px 32px;display:flex;align-items:center;justify-content:center;gap:20px;z-index:500;transform:translateY(100%);transition:transform .4s cubic-bezier(.16,1,.3,1);} #float-bar.show{transform:none;} #float-bar span{font-family:'Space Grotesk',sans-serif;font-size:14px;color:#9ca3af;} #float-bar strong{color:#fff;} #float-bar button{background:none;border:none;color:#555;cursor:pointer;font-size:16px;padding:4px 8px;position:absolute;right:16px;} /* ── RESPONSIVE ── */ @media(max-width:960px){ .cat-grid,.ft-grid,.tst-grid,.art-cards{grid-template-columns:repeat(2,1fr)!important;} .ec-wrap,.hiw-grid{grid-template-columns:1fr!important;gap:32px!important;} } @media(max-width:600px){ .cat-grid,.ft-grid,.tst-grid,.art-cards{grid-template-columns:1fr!important;} #ann-bar span{display:none;} .tb-inner{gap:12px;justify-content:flex-start;} #float-bar{padding:12px 16px;gap:12px;} #cat-sec,#featured,#how,#testimonials,#email-cap,#faq{padding-left:20px!important;padding-right:20px!important;} } .ft-card-img{display:block;width:100%;aspect-ratio:16/9;object-fit:cover;border-radius:8px 8px 0 0;} .ft-card-img-placeholder{width:100%;aspect-ratio:16/9;border-radius:8px 8px 0 0;} .ft-card-body{padding:16px;} .ft-card{padding:0!important;} .ft-card .ft-foot{margin-top:auto;} .ft-card-body .ft-tag{margin-bottom:8px;} .ft-card-body .ft-card-title{margin-bottom:12px;} </style> </body> </html>