<!DOCTYPE html>
<html lang="en">
<head>
  <!-- Google Tag Manager -->
  <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
  new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
  j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
  'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
  })(window,document,'script','dataLayer','GTM-K83G3WLZ');</script>
  <!-- End Google Tag Manager -->
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>WebFlur — AI SEO Agency for B2B | GEO, AEO &amp; A2A Endpoints</title>
  <meta name="description" content="WebFlur is the B2B AI SEO agency. We combine GEO, AEO and A2A endpoints so ChatGPT, Perplexity, Claude and Google AI Overviews cite your brand." />
  <meta name="keywords" content="AI SEO agency, AI SEO, AI assistant SEO, Generative Engine Optimization, GEO, Answer Engine Optimization, AEO, LLM SEO, LLMO, agentic SEO, A2A protocol, agent to agent SEO, AI crawler SEO, GPTBot, ClaudeBot, PerplexityBot, ChatGPT SEO, Perplexity SEO, B2B AI SEO, machine-readable website" />
  <meta name="robots" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" />
  <meta name="author" content="WebFlur" />
    <link rel="alternate" type="application/rss+xml" title="WebFlur — Field notes on AI SEO for B2B" href="https://webflur.com/rss.xml" />
  <link rel="canonical" href="https://webflur.com/" />

  <!-- Open Graph -->
  <meta property="og:type" content="website" />
  <meta property="og:site_name" content="WebFlur" />
  <meta property="og:title" content="WebFlur — AI SEO Agency for B2B | GEO, AEO & A2A Endpoints" />
  <meta property="og:description" content="WebFlur is the B2B AI SEO agency. We combine GEO, AEO and A2A endpoints so ChatGPT, Perplexity, Claude and Google AI Overviews cite your brand." />
  <meta property="og:url" content="https://webflur.com/" />
  <meta property="og:image" content="https://webflur.com/og-default.png" />
  <meta property="og:image:width" content="1200" />
  <meta property="og:image:height" content="630" />
  <meta property="og:locale" content="en_US" />

  <!-- Twitter Card -->
  <meta name="twitter:card" content="summary_large_image" />
  <meta name="twitter:title" content="WebFlur — AI SEO Agency for B2B | GEO, AEO & A2A Endpoints" />
  <meta name="twitter:description" content="WebFlur is the B2B AI SEO agency. We combine GEO, AEO and A2A endpoints so ChatGPT, Perplexity, Claude and Google AI Overviews cite your brand." />
  <meta name="twitter:image" content="https://webflur.com/og-default.png" />
  <meta name="twitter:site" content="@webflur" />

  <!-- Favicons -->
  <link rel="icon" type="image/svg+xml" href="assets/logo/webflur-diamond-logo.svg" />
  <link rel="apple-touch-icon" href="assets/logo/webflur-diamond-logo.svg" />
  <meta name="theme-color" content="#1f3cff" />

  <link rel="preconnect" href="https://fonts.googleapis.com">
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Instrument+Serif:ital@0;1&display=swap" rel="stylesheet">

  <!-- Shared responsive system: fluid tokens, safe defaults, mobile patches -->
  <link rel="stylesheet" href="assets/css/responsive.css">

  <!-- JSON-LD: Organization + WebSite + Service -->
  <script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://webflur.com/#organization",
      "name": "WebFlur",
      "legalName": "Webflur Studio",
      "alternateName": [
        "Webflur Studio - AI SEO Agency",
        "WebFlur AI SEO",
        "WebFlur Agentic Presence"
      ],
      "url": "https://webflur.com/",
      "logo": {
        "@type": "ImageObject",
        "@id": "https://webflur.com/assets/logo/webflur-diamond-logo.svg",
        "url": "https://webflur.com/assets/logo/webflur-diamond-logo.svg",
        "contentUrl": "https://webflur.com/assets/logo/webflur-diamond-logo.svg",
        "name": "WebFlur Diamond Logo",
        "description": "WebFlur diamond gemstone logo mark",
        "width": 100,
        "height": 100
      },
      "description": "AI SEO agency specializing in Generative Engine Optimization (GEO), Answer Engine Optimization (AEO) and A2A agent-to-agent endpoints for B2B companies.",
      "founder": [
        {
          "@type": "Person",
          "name": "Pankaj",
          "jobTitle": "Founder"
        },
        {
          "@type": "Person",
          "name": "Nick Smith",
          "jobTitle": "Co-Founder"
        }
      ],
      "knowsAbout": [
        "AI SEO",
        "AI SEO Agency",
        "Generative Engine Optimization",
        "Answer Engine Optimization",
        "Large Language Model Optimization",
        "Agent2Agent Protocol",
        "A2A Protocol",
        "AI Crawler Optimization",
        "ChatGPT SEO",
        "Perplexity SEO",
        "Claude SEO",
        "Google AI Overviews",
        "B2B Marketing",
        "Agentic Search"
      ],
      "sameAs": [
        "https://share.google/daZJQfZni2DQRZrRs",
        "https://www.google.com/search?kgmid=/g/11zxj34rb2",
        "https://www.linkedin.com/in/pankaj-raghav-digital-marketing/",
        "https://twitter.com/webflur",
        "https://www.youtube.com/@webflur",
        "https://www.linkedin.com/in/webflur-studio-359566408/",
        "https://x.com/Webflur",
        "https://www.facebook.com/profile.php?id=61596372143405",
        "https://www.instagram.com/webflur/",
        "https://in.pinterest.com/webflurstudio/"
      ],
      "contactPoint": [
        {
          "@type": "ContactPoint",
          "contactType": "sales",
          "telephone": "+91-9599955465",
          "email": "talktous@webflur.com",
          "areaServed": "Worldwide",
          "availableLanguage": "English"
        }
      ]
    },
    {
      "@type": "WebSite",
      "@id": "https://webflur.com/#website",
      "url": "https://webflur.com/",
      "name": "WebFlur",
      "publisher": {
        "@id": "https://webflur.com/#organization",
        "sameAs": [
          "https://www.linkedin.com/in/pankaj-raghav-digital-marketing/"
        ],
        "contactPoint": [
          {
            "@type": "ContactPoint",
            "contactType": "sales",
            "telephone": "+91-9599955465",
            "email": "talktous@webflur.com",
            "areaServed": "Worldwide",
            "availableLanguage": "English"
          }
        ]
      },
      "inLanguage": "en-US",
      "potentialAction": {"@type": "ContactAction", "target": "https://webflur.com/talk-to-us", "name": "Talk to WebFlur"}
    },
    {
      "@type": "Service",
      "@id": "https://webflur.com/#service",
      "name": "AI SEO &amp; Generative Engine Optimization",
      "provider": {
        "@id": "https://webflur.com/#organization",
        "sameAs": [
          "https://www.linkedin.com/in/pankaj-raghav-digital-marketing/"
        ],
        "contactPoint": [
          {
            "@type": "ContactPoint",
            "contactType": "sales",
            "telephone": "+91-9599955465",
            "email": "talktous@webflur.com",
            "areaServed": "Worldwide",
            "availableLanguage": "English"
          }
        ]
      },
      "serviceType": "AI SEO, GEO, AEO, A2A Protocol Implementation",
      "description": "End-to-end AI SEO engineering: Generative Engine Optimization, Answer Engine Optimization, A2A agent endpoints, and machine-readable content architecture so B2B brands are cited by ChatGPT, Perplexity, Claude and Google AI Overviews.",
      "areaServed": "Global",
      "audience": {
        "@type": "Audience",
        "audienceType": "B2B companies"
      }
    }
  ]
}
  </script>

  <!-- JSON-LD: FAQPage — high-leverage for GEO / AEO citation capture -->
  <script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "What is an AI SEO agency?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "An AI SEO agency helps B2B brands get cited and discovered by AI assistants like ChatGPT, Perplexity, Claude, and Google AI Overviews. Unlike traditional SEO agencies that focus on Google blue-link rankings, an AI SEO agency optimises for Generative Engine Optimization (GEO), Answer Engine Optimization (AEO), Large Language Model Optimization (LLMO), and machine-readable A2A agent endpoints. WebFlur is an AI SEO agency specialising in B2B brands that need to be found and recommended by AI-powered search and procurement agents."
      }
    },
    {
      "@type": "Question",
      "name": "What is AI SEO?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "AI SEO is the practice of optimizing a brand and its content so that AI assistants — ChatGPT, Perplexity, Claude, Gemini, and Google AI Overviews — cite, recommend, and reference the brand in their generated responses. AI SEO combines Generative Engine Optimization (GEO), Answer Engine Optimization (AEO), and Large Language Model Optimization (LLMO), and increasingly requires machine-readable A2A (Agent2Agent) endpoints. WebFlur is an AI SEO agency for B2B."
      }
    },
    {
      "@type": "Question",
      "name": "What is Generative Engine Optimization (GEO)?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Generative Engine Optimization (GEO) is the discipline of earning citations inside AI-generated answers from ChatGPT, Perplexity, Claude, and Google AI Overviews — instead of chasing blue-link Google rankings. GEO emphasizes definition-first content, entity clarity, citation-worthy statistics, FAQ schema, Organization sameAs signals, and frequent freshness updates."
      }
    },
    {
      "@type": "Question",
      "name": "What is Answer Engine Optimization (AEO)?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Answer Engine Optimization (AEO) structures content to win direct answers inside AI-powered search features: featured snippets, People Also Ask boxes, knowledge panels, and AI Overviews. AEO focuses on concise, definition-first answers placed in the first paragraph of a page, supported by FAQPage schema and clean heading hierarchy."
      }
    },
    {
      "@type": "Question",
      "name": "What is the A2A protocol and why does my B2B website need it?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "The Agent2Agent (A2A) protocol is an open standard that lets AI agents communicate and delegate tasks to each other. Each A2A-compliant business publishes an Agent Card at /.well-known/agent-card.json describing what the business offers, how to query it, and how to authenticate. Without an A2A endpoint, your B2B brand is invisible to AI shopping and procurement agents — even if you rank #1 on Google."
      }
    },
    {
      "@type": "Question",
      "name": "How do I rank in ChatGPT, Perplexity, and Claude?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Each AI assistant cites differently. Perplexity is citation-heavy and prefers fresh, well-sourced content from Reddit, LinkedIn, and G2. ChatGPT cites 3–6 sources and is authority-driven, favouring established domains. Claude weighs structure and machine-readable formatting. To rank in all three you need a platform-specific GEO playbook combining FAQ schema, Organization sameAs, definition-first answers, an A2A endpoint, and monthly content refreshes."
      }
    },
    {
      "@type": "Question",
      "name": "How do I optimize my website for AI crawlers like GPTBot, ClaudeBot, and PerplexityBot?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "AI crawlers (GPTBot, ClaudeBot, PerplexityBot, OAI-SearchBot, Google-Extended, CCBot) generally do not render JavaScript — they only fetch static HTML. To optimize: serve content server-side, allow these user-agents in robots.txt, publish an llms.txt file at the root, implement Organization, WebSite, Article, and FAQPage JSON-LD schema, and keep a sitemap.xml current. WebFlur's Agentic Presence Engine handles all of this end-to-end."
      }
    },
    {
      "@type": "Question",
      "name": "What does WebFlur do?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "WebFlur is an AI SEO agency for B2B companies. We build the Agentic Presence Engine — a stack of Generative Engine Optimization (GEO), Answer Engine Optimization (AEO), Large Language Model Optimization (LLMO), and A2A agent-to-agent endpoints — so that B2B brands are cited and recommended by AI assistants instead of being invisible to them."
      }
    }
  ],
  "speakable": {
    "@type": "SpeakableSpecification",
    "cssSelector": [
      "h1",
      "h2",
      ".blog-geo-faq-q",
      ".faq-question"
    ]
  }
}
  </script>

  <style>
    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
    html { scroll-behavior: smooth; }

    :root {
      --cream:        #f3ede2;
      --cream-2:      #ebe4d6;
      --ink:          #0a0a0a;
      --ink-2:        #1a1a1a;
      --text:         #0a0a0a;
      --text-soft:    #4a4a4a;
      --text-mute:    #888;
      --line:         #d8d1c2;
      --line-dark:    rgba(255,255,255,0.18);
      --blue:         #1f3cff;
      --blue-glow:    #4d6cff;
      --white:        #ffffff;
      --x-red:        #e84e3c;
      --sans:         'Inter', system-ui, sans-serif;
      --serif:        'Instrument Serif', Georgia, serif;
      --radius:       14px;
      --radius-lg:    24px;
    }

    body {
      background: var(--cream);
      color: var(--text);
      font-family: var(--sans);
      font-size: 16px;
      line-height: 1.55;
      -webkit-font-smoothing: antialiased;
      overflow-x: hidden;
    }

    a { color: inherit; text-decoration: none; }
    img { max-width: 100%; display: block; }

    /* ─── NAV ─────────────────────────────────────────────────── */
    nav {
      position: fixed;
      top: 16px; left: 50%;
      transform: translate3d(-50%, 0, 0);
      z-index: 100;
      will-change: transform;
      backface-visibility: hidden;
      -webkit-backface-visibility: hidden;
      width: calc(100% - 32px);
      max-width: 1240px;
      display: flex;
      align-items: center;
      justify-content: space-between;
      padding: 12px 18px 12px 22px;
      background: rgba(243, 237, 226, 0.72);
      backdrop-filter: blur(20px) saturate(1.2);
      -webkit-backdrop-filter: blur(20px) saturate(1.2);
      border: 1px solid var(--line);
      border-radius: 999px;
    }

    .nav-logo {
      display: inline-flex; align-items: center; gap: 5px;
      font-size: 20px; font-weight: 700; letter-spacing: -0.04em;
      transform-origin: left center;
      transition: transform 0.25s ease;
    }
    .nav-logo:hover { transform: scale(1.08); }
    .nav-mark {
      width: 28px; height: 28px;
      display: inline-flex;
      align-items: center;
      justify-content: center;
      flex-shrink: 0;
    }
    .nav-mark img {
      width: 28px; height: 28px;
      display: block;
      filter: drop-shadow(0 1px 2px rgba(0,0,0,0.18));
    }

    .nav-links { display: flex; gap: 28px; list-style: none; }
    .nav-links a {
      position: relative;
      display: inline-block;
      font-size: 14px; font-weight: 500; color: var(--text);
      transition: transform 0.25s ease, opacity 0.2s;
      padding-bottom: 4px;
      transform-origin: center;
    }
    .nav-links a:hover {
      transform: scale(1.06);
    }
    .nav-links a::after {
      content: '';
      position: absolute;
      left: 0;
      bottom: 0;
      width: 100%;
      height: 1.5px;
      background: currentColor;
      transform: scaleX(0);
      transform-origin: left center;
      transition: transform 0.32s ease;
    }
    .nav-links a:hover::after {
      transform: scaleX(1);
      transform-origin: left center;
    }
    .nav-links a:not(:hover)::after {
      transform: scaleX(0);
      transform-origin: right center;
    }
    /* Resources dropdown */
    .nav-links > li { position: relative; }
    .nav-dropdown-wrap > a::after { content: none !important; }
    .nav-dropdown-wrap > a .arrow {
      display: inline-block; font-size: 11px; opacity: 0.5; margin-left: 4px;
      transition: transform 0.25s ease, opacity 0.2s;
    }
    .nav-dropdown-wrap:hover > a .arrow { transform: rotate(180deg); opacity: 0.9; }
    .nav-dropdown {
      position: absolute; top: calc(100% + 8px); left: 50%;
      transform: translateX(-50%) translateY(-6px);
      background: rgba(243,237,226,0.96);
      backdrop-filter: blur(24px) saturate(1.3);
      -webkit-backdrop-filter: blur(24px) saturate(1.3);
      border: 1px solid var(--line); border-radius: var(--radius);
      padding: 8px; min-width: 160px;
      opacity: 0; pointer-events: none;
      transition: opacity 0.22s ease, transform 0.22s cubic-bezier(0.22,1,0.36,1);
      box-shadow: 0 12px 40px rgba(0,0,0,0.1); z-index: 200;
    }
    /* Invisible bridge fills the gap between the link and dropdown panel */
    .nav-dropdown-wrap::after {
      content: ''; position: absolute; top: 100%; left: -20px; right: -20px;
      height: 20px; background: transparent;
    }
    .nav-dropdown-wrap:hover .nav-dropdown {
      opacity: 1; pointer-events: auto;
      transform: translateX(-50%) translateY(0);
    }
    .nav-dropdown a {
      display: flex; align-items: center; gap: 10px;
      padding: 10px 14px; border-radius: 8px;
      font-size: 13px; font-weight: 500; color: var(--text);
      transition: background 0.15s ease; white-space: nowrap;
    }
    .nav-dropdown a::after { content: none !important; }
    .nav-dropdown a:hover { background: rgba(0,0,0,0.05); transform: none; }
    .nav-dropdown-icon {
      width: 24px; height: 24px; border-radius: 6px; background: var(--ink);
      display: flex; align-items: center; justify-content: center; flex-shrink: 0;
    }
    .nav-dropdown-icon svg { width: 12px; height: 12px; fill: none; stroke: var(--white); stroke-width: 2; stroke-linecap: round; }

    .nav-cta {
      display: inline-flex; align-items: center; gap: 7px;
      padding: 9px 18px;
      background: var(--blue);
      color: var(--white);
      border-radius: 999px;
      font-size: 14px; font-weight: 600;
      transition: transform 0.2s, background 0.25s ease, color 0.25s ease;
    }
    .nav-cta::before {
      content: '+'; font-weight: 400; font-size: 16px; line-height: 0.8;
    }
    .nav-cta:hover {
      transform: translateY(-1px);
      background: var(--ink);
      color: var(--white);
    }

    /* ─── BTN ─────────────────────────────────────────────────── */
    .btn {
      display: inline-flex; align-items: center; gap: 8px;
      padding: 12px 22px;
      border-radius: 999px;
      font-size: 14px; font-weight: 600;
      transition: transform 0.2s, background 0.25s ease, color 0.25s ease;
      cursor: pointer;
      border: none;
    }
    .btn::before { content: '+'; font-weight: 400; font-size: 16px; line-height: 0.7; }
    .btn:hover { transform: translateY(-1px); }

    /* Stacked labels: reserve max(default,hover) width so box stays fixed */
    .label-swap {
      position: relative;
      display: inline-grid;
      align-items: center;
      justify-items: center;
    }
    .label-swap > span {
      grid-area: 1 / 1;
      transition: opacity 0.2s ease;
    }
    .label-swap .label-hover { opacity: 0; }
    .btn:hover .label-swap .label-default,
    .nav-cta:hover .label-swap .label-default { opacity: 0; }
    .btn:hover .label-swap .label-hover,
    .nav-cta:hover .label-swap .label-hover { opacity: 1; }
    .btn-dark { background: var(--ink); color: var(--white); }
    .btn-dark:hover { background: var(--blue); color: var(--white); }
    .btn-blue { background: var(--blue); color: var(--white); }
    .btn-blue:hover { background: var(--ink); color: var(--white); }

    /* ─── SHARED LAYOUT ───────────────────────────────────────── */
    .container { max-width: 1240px; margin: 0 auto; padding: 0 24px; }
    section { position: relative; }

    .display {
      font-size: clamp(40px, 5.6vw, 84px);
      font-weight: 700;
      line-height: 1.02;
      letter-spacing: -0.035em;
    }
    .display em, .serif {
      font-family: var(--serif);
      font-style: italic;
      font-weight: 400;
      letter-spacing: -0.02em;
    }

    /* ─── Voice → Speaker morph (jumping letters) ─────────────── */
    .voice-morph {
      position: relative;
      display: inline-block;
      vertical-align: baseline;
    }
    .voice-word { display: inline-block; }
    .vc {
      display: inline-block;
      transform-origin: 50% 100%;
      will-change: transform, opacity;
    }
    /* per-letter animations: each letter hops up, then dives toward the center
       of the word, scales down to a dot, then pops back out and lands. */
    .vc.l1 { animation: letterJump1 7s ease-in-out 2; }
    .vc.l2 { animation: letterJump2 7s ease-in-out 2; }
    .vc.l3 { animation: letterJump3 7s ease-in-out 2; }
    .vc.l4 { animation: letterJump4 7s ease-in-out 2; }
    .vc.l5 { animation: letterJump5 7s ease-in-out 2; }

    /* shared shape: 0-30% rest. 30-40% hop up. 40-48% dive to center & shrink.
       48-80% stay collapsed (icon visible). 80-90% pop back out. 90-100% settle. */
    @keyframes letterJump1 {
      0%, 30%   { transform: translate(0,0) scale(1) rotate(0); opacity: 1; }
      36%       { transform: translate(0,-22px) scale(1.05) rotate(-8deg); opacity: 1; }
      46%       { transform: translate(40px, 6px) scale(0.15) rotate(-30deg); opacity: 0; }
      48%, 80%  { transform: translate(40px, 6px) scale(0.15) rotate(-30deg); opacity: 0; }
      84%       { transform: translate(0,-18px) scale(1.05) rotate(-6deg); opacity: 1; }
      92%, 100% { transform: translate(0,0) scale(1) rotate(0); opacity: 1; }
    }
    @keyframes letterJump2 {
      0%, 30%   { transform: translate(0,0) scale(1) rotate(0); opacity: 1; }
      38%       { transform: translate(0,-26px) scale(1.05) rotate(6deg); opacity: 1; }
      46%       { transform: translate(20px, 4px) scale(0.15) rotate(20deg); opacity: 0; }
      48%, 80%  { transform: translate(20px, 4px) scale(0.15) rotate(20deg); opacity: 0; }
      85%       { transform: translate(0,-20px) scale(1.05) rotate(4deg); opacity: 1; }
      92%, 100% { transform: translate(0,0) scale(1) rotate(0); opacity: 1; }
    }
    @keyframes letterJump3 {
      0%, 30%   { transform: translate(0,0) scale(1) rotate(0); opacity: 1; }
      40%       { transform: translate(0,-30px) scale(1.1) rotate(-4deg); opacity: 1; }
      46%       { transform: translate(0, 0) scale(0.15) rotate(0); opacity: 0; }
      48%, 80%  { transform: translate(0, 0) scale(0.15) rotate(0); opacity: 0; }
      86%       { transform: translate(0,-22px) scale(1.08) rotate(-2deg); opacity: 1; }
      92%, 100% { transform: translate(0,0) scale(1) rotate(0); opacity: 1; }
    }
    @keyframes letterJump4 {
      0%, 30%   { transform: translate(0,0) scale(1) rotate(0); opacity: 1; }
      38%       { transform: translate(0,-26px) scale(1.05) rotate(8deg); opacity: 1; }
      46%       { transform: translate(-22px, 4px) scale(0.15) rotate(-15deg); opacity: 0; }
      48%, 80%  { transform: translate(-22px, 4px) scale(0.15) rotate(-15deg); opacity: 0; }
      85%       { transform: translate(0,-20px) scale(1.05) rotate(6deg); opacity: 1; }
      92%, 100% { transform: translate(0,0) scale(1) rotate(0); opacity: 1; }
    }
    @keyframes letterJump5 {
      0%, 30%   { transform: translate(0,0) scale(1) rotate(0); opacity: 1; }
      36%       { transform: translate(0,-22px) scale(1.05) rotate(-6deg); opacity: 1; }
      46%       { transform: translate(-44px, 6px) scale(0.15) rotate(28deg); opacity: 0; }
      48%, 80%  { transform: translate(-44px, 6px) scale(0.15) rotate(28deg); opacity: 0; }
      84%       { transform: translate(0,-18px) scale(1.05) rotate(-4deg); opacity: 1; }
      92%, 100% { transform: translate(0,0) scale(1) rotate(0); opacity: 1; }
    }

    .voice-speaker {
      position: absolute;
      left: 50%;
      top: 50%;
      width: 1.05em;
      height: 1.05em;
      transform: translate(-50%, -52%) scale(0.2);
      opacity: 0;
      color: var(--ink);
      animation: speakerCycle 7s ease-in-out 2;
      pointer-events: none;
    }
    .voice-speaker svg { width: 100%; height: 100%; display: block; }
    .speaker-wave {
      opacity: 0;
      transform-origin: 22px 60px;
      transform-box: fill-box;
    }
    .voice-speaker .w1 { animation: waveCycle 7s ease-in-out 2; animation-delay: 0s; }
    .voice-speaker .w2 { animation: waveCycle 7s ease-in-out 2; animation-delay: 0.18s; }
    .voice-speaker .w3 { animation: waveCycle 7s ease-in-out 2; animation-delay: 0.36s; }

    @keyframes speakerCycle {
      0%, 46%   { opacity: 0; transform: translate(-50%, -52%) scale(0.2); }
      52%, 78%  { opacity: 1; transform: translate(-50%, -52%) scale(1); }
      84%, 100% { opacity: 0; transform: translate(-50%, -52%) scale(0.2); }
    }
    @keyframes waveCycle {
      0%, 52%   { opacity: 0; transform: scale(0.85); }
      58%       { opacity: 1; transform: scale(1); }
      72%       { opacity: 1; transform: scale(1.1); }
      78%, 100% { opacity: 0; transform: scale(0.85); }
    }

    /* ─── HERO ────────────────────────────────────────────────── */
    .hero {
      min-height: 100vh;
      padding: 130px 0 60px;
      display: grid;
      grid-template-columns: 1fr 1fr;
      align-items: center;
      gap: 40px;
      border-top: 1px solid var(--line);
      border-bottom: 1px solid var(--line);
    }
    .hero-content { padding-left: 24px; max-width: 620px; margin-left: auto; margin-right: auto; }
    .hero h1 { margin-bottom: 28px; }
    .hero-sub {
      font-size: 13.5px;
      color: var(--text-soft);
      max-width: 480px;
      margin-bottom: 28px;
      line-height: 1.65;
    }
    .hero-actions { display: flex; gap: 12px; }

    .hero-visual {
      position: relative;
      height: 600px;
      display: flex;
      align-items: center;
      justify-content: center;
      isolation: isolate;
    }

    /* ── ORBIT (DIV-based, used by trust-engine + service-stack sections) ── */
    .orbit {
      position: relative;
      width: 560px;
      height: 560px;
      will-change: transform;
      backface-visibility: hidden;
      -webkit-backface-visibility: hidden;
      transition: transform 0.45s cubic-bezier(0.2, 0.8, 0.2, 1);
    }
    .orbit .orbit-ring {
      position: absolute;
      inset: 0;
      border: 1px solid var(--ink);
      border-radius: 50%;
      transform-style: preserve-3d;
    }
    .orbit .orbit-ring.r1 { inset: 70px; }
    .orbit .orbit-ring.r2 { inset: 130px; }
    .orbit .orbit-ring.r3 { inset: 200px; }
    .orbit .orbit-center {
      position: absolute;
      top: 50%; left: 50%;
      width: 36px; height: 36px;
      transform: translate(-50%, -50%);
      background: var(--ink);
      clip-path: polygon(50% 0%, 65% 50%, 50% 100%, 35% 50%);
      animation: spin-slow 18s linear infinite;
    }
    @keyframes spin-slow { to { transform: translate(-50%, -50%) rotate(360deg); } }
    .orbit .orbit-label {
      position: absolute;
      font-size: 14px;
      font-weight: 500;
      letter-spacing: -0.01em;
      display: flex;
      align-items: center;
      gap: 6px;
      transform: translate(-50%, -50%);
    }
    .orbit .orbit-label::before {
      content: '';
      width: 5px; height: 5px;
      border-radius: 50%;
      background: var(--ink);
    }

    /* ── ORBIT (SVG, wgb.agency-style: flat ellipses tilted -45°) ── */
    .orbit-svg {
      width: 100%;
      max-width: 720px;
      height: auto;
      overflow: visible;
    }
    .orbit-ring {
      fill: none;
      stroke: var(--ink);
      stroke-width: 1;
      opacity: 0.85;
    }
    .orbit-dot {
      fill: var(--ink);
    }
    .orbit-label {
      fill: var(--ink);
      font-family: inherit;
      font-size: 14px;
      font-weight: 500;
      letter-spacing: 0.01em;
      dominant-baseline: middle;
    }
    /* Counter-rotate labels +45° so they read upright despite the ring's -45° tilt */
    .label-grp { transform: rotate(45deg); transform-box: fill-box; transform-origin: center; }
    .orbit-center-svg path { fill: var(--ink); }

    /* Breathing: each ring pulses gently in/out at its own period */
    .ring-grp { transform-box: fill-box; transform-origin: center; will-change: transform; backface-visibility: hidden; -webkit-backface-visibility: hidden; }
    .r-outer { animation: breatheOuter 5.4s ease-in-out infinite -1.08s; }
    .r-mid   { animation: breatheMid   5.4s ease-in-out infinite -0.54s; }
    .r-inner { animation: breatheInner 5.4s ease-in-out infinite 0s; }
    @keyframes breathe {
      0%, 100% { transform: rotate(-45deg) scale(1); }
      35%      { transform: rotate(-45deg) scale(1.02); }
    }
    @keyframes breatheOuter {
      0%, 100% { transform: rotate(-45deg) scale(1); }
      35%      { transform: rotate(-45deg) scale(1.10); }
    }
    @keyframes breatheMid {
      0%, 100% { transform: rotate(-45deg) scale(1); }
      35%      { transform: rotate(-45deg) scale(1.09); }
    }
    @keyframes breatheInner {
      0%, 100% { transform: rotate(-45deg) scale(1); }
      35%      { transform: rotate(-45deg) scale(1.08); }
    }
    .orbit-center-svg { transform-box: fill-box; transform-origin: center; animation: centerBreathe 5.4s ease-in-out infinite 0.3s; }
    @keyframes centerBreathe {
      0%, 100% { transform: rotate(-12deg) scale(0.94); }
      35%      { transform: rotate(-12deg) scale(1.30); }
    }

    /* dark variant (used in trust-engine section) */
    .orbit.dark .orbit-ring,
    .orbit-svg.dark .orbit-ring  { stroke: rgba(255,255,255,0.8); }
    .orbit-svg.dark .orbit-dot   { fill: #fff; }
    .orbit-svg.dark .orbit-label { fill: rgba(255,255,255,0.85); }
    .orbit-svg.dark .orbit-center-svg path { fill: #fff; }

    /* dark orbit variant for trust engine section */
    .orbit.dark .orbit-ring { border-color: rgba(255,255,255,0.5); }
    .orbit.dark .orbit-center { background: var(--white); }
    .orbit.dark .orbit-label { color: var(--white); }
    .orbit.dark .orbit-label::before { background: var(--white); }

    .orbit-glow {
      position: absolute;
      inset: 0;
      border-radius: 50%;
      background: radial-gradient(ellipse at center, rgba(31,60,255,0.55) 0%, rgba(77,108,255,0.25) 35%, transparent 70%);
      opacity: 0;
      transition: opacity 0.6s ease, inset 0.6s cubic-bezier(0.4, 0, 0.2, 1);
      pointer-events: none;
      filter: blur(20px);
    }
    .orbit.dark .orbit-glow.active { opacity: 1; }

    /* ─── PROBLEM GRID ────────────────────────────────────────── */
    .problem {
      padding: 110px 0 130px;
    }
    .problem h2 { margin-bottom: 60px; max-width: 880px; }
    .problem-grid {
      display: grid;
      grid-template-columns: repeat(3, 1fr);
      gap: 1px;
      background: var(--line);
      border: 1px solid var(--line);
      border-radius: var(--radius-lg);
      overflow: hidden;
    }
    .problem-cell {
      background: var(--cream);
      padding: 36px 32px 38px;
      min-height: 260px;
    }
    .x-mark {
      width: 28px; height: 28px;
      margin-bottom: 28px;
      color: var(--x-red);
      display: flex; align-items: center; justify-content: center;
      font-size: 28px; font-weight: 300; line-height: 1;
    }
    .problem-cell h3 {
      font-size: 20px;
      font-weight: 700;
      letter-spacing: -0.02em;
      line-height: 1.25;
      margin-bottom: 14px;
    }
    .problem-cell p {
      font-size: 14px;
      color: var(--text-soft);
      line-height: 1.6;
    }
    .problem-cell.cta {
      background: var(--blue);
      color: var(--white);
      display: flex;
      flex-direction: column;
      justify-content: space-between;
      position: relative;
      overflow: hidden;
    }
    .problem-cell.cta::after {
      content: '';
      position: absolute;
      right: -80px; top: -80px;
      width: 280px; height: 280px;
      border-radius: 50%;
      border: 1px solid rgba(255,255,255,0.25);
    }
    .problem-cell.cta::before {
      content: '';
      position: absolute;
      right: -40px; top: -40px;
      width: 200px; height: 200px;
      border-radius: 50%;
      border: 1px solid rgba(255,255,255,0.18);
    }
    .cta-mark {
      width: 22px; height: 22px;
    }
    .cta-mark img {
      width: 22px; height: 22px;
      display: block;
    }
    .problem-cell.cta h3 {
      color: var(--white);
      font-size: 20px;
      margin-top: 100px;
      margin-bottom: 18px;
    }
    .problem-cell.cta .btn {
      background: rgba(0,0,0,0.25);
      color: var(--white);
      align-self: flex-start;
    }

    /* ─── CASES MARQUEE ───────────────────────────────────────── */
    .cases {
      padding: 30px 0 0;
      overflow: hidden;
    }
    .cases-row {
      overflow-x: auto;
      -webkit-overflow-scrolling: touch;
      scrollbar-width: none;
      width: 100%;
    }
    .cases-row::-webkit-scrollbar {
      display: none;
    }
    .cases-row-inner {
      position: relative;
      display: flex;
      flex-wrap: nowrap;
      width: max-content;
    }
    .cases-track {
      display: flex;
      gap: 12px;
      flex-shrink: 0;
      will-change: transform;
      backface-visibility: hidden;
      -webkit-backface-visibility: hidden;
    }
    .cases-names-track {
      display: flex;
      gap: 0;
      flex-shrink: 0;
      margin-top: 0;
      padding-bottom: 0;
      will-change: transform;
    }
    .cases-row + .cases-row {
      margin-top: 20px;
      padding-bottom: 30px;
    }
    .cases-name-item {
      font-size: 13px;
      font-weight: 600;
      letter-spacing: 0.08em;
      text-transform: uppercase;
      color: rgba(255,255,255,0.35);
      white-space: nowrap;
      padding: 0 28px;
      text-decoration: none;
    }
    .cases-name-item::after {
      content: '·';
      margin-left: 28px;
      color: rgba(255,255,255,0.15);
    }
    .case-card {
      width: 320px;
      height: 360px;
      flex-shrink: 0;
      border-radius: var(--radius);
      background: #1a1a1a;
      position: relative;
      overflow: hidden;
      display: flex;
      align-items: flex-end;
      padding: 18px;
      text-decoration: none;
      cursor: pointer;
    }
    .case-card img {
      position: absolute;
      inset: 0;
      width: 100%;
      height: 100%;
      object-fit: cover;
      transition: transform 0.6s cubic-bezier(0.2, 0.8, 0.2, 1);
      z-index: 0;
    }
    .case-card::after {
      content: '';
      position: absolute;
      inset: 0;
      background: linear-gradient(180deg, rgba(10,10,10,0) 40%, rgba(10,10,10,0.7) 100%);
      z-index: 1;
      pointer-events: none;
      transition: opacity 0.4s ease;
    }
    .case-card:hover img {
      transform: scale(1.05);
    }
    .case-pill {
      position: relative;
      z-index: 2;
      width: 100%;
      background: var(--blue);
      color: var(--white);
      padding: 12px 18px;
      border-radius: 8px;
      font-size: 13px;
      font-weight: 600;
      letter-spacing: 0.04em;
      text-transform: uppercase;
      text-align: center;
      transition: background 0.25s ease;
    }
    .case-card:hover .case-pill {
      background: var(--ink);
    }

    /* ─── LOGO STRIP ─────────────────────────────────────────── */
    .logos {
      padding: 0;
      border-top: 1px solid var(--line);
      border-bottom: 1px solid var(--line);
      display: grid;
      grid-template-columns: repeat(6, 1fr);
    }
    .logo-cell {
      padding: 32px 16px;
      display: flex;
      align-items: center;
      justify-content: center;
      border-right: 1px solid var(--line);
      font-weight: 700;
      letter-spacing: -0.02em;
      color: var(--text-soft);
      font-size: 18px;
    }
    .logo-cell:last-child { border-right: none; }
    .logo-cell .accent { color: var(--blue); }

    /* ─── DARK SECTION (TRUST ENGINE) ─────────────────────────── */
    .dark-section {
      background: var(--ink);
      color: var(--white);
      position: relative;
      overflow: hidden;
    }
    .dark-section .display { color: var(--white); }
    .dark-section .text-soft { color: rgba(255,255,255,0.62); }

    .trust-engine {
      padding: 130px 0;
      overflow: visible;
    }
    .trust-engine .container { overflow: visible; }
    .te-row {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 40px;
      align-items: center;
      min-height: 600px;
    }
    .te-content { padding-left: 24px; max-width: 560px; margin-left: auto; margin-right: auto; }
    .te-content h2 { margin-bottom: 22px; }
    .te-content p {
      font-size: 15px;
      color: rgba(255,255,255,0.62);
      margin-bottom: 28px;
    }
    .te-visual { position: relative; height: 600px; isolation: isolate; }

    /* ─── TRUST ENGINE SCROLL-ORBIT (wgb.agency replica) ─────── */
    .orbit-scroll {
      position: relative;
    }
    .orbit-scroll_container {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 40px;
      align-items: stretch;
    }
    .orbit-scroll_content-list {
      display: flex;
      flex-direction: column;
    }
    .orbit-scroll_content {
      min-height: 100vh;
      display: flex;
      flex-direction: column;
      justify-content: center;
      padding: 80px 24px;
      max-width: 560px;
    }
    .orbit-scroll_content h3 {
      font-size: clamp(36px, 4vw, 56px);
      font-weight: 700;
      line-height: 1.05;
      letter-spacing: -0.03em;
      color: var(--white);
      margin-bottom: 22px;
    }
    .orbit-scroll_content h3 em,
    .orbit-scroll_content h3 .alt-text {
      font-family: var(--serif);
      font-style: italic;
      font-weight: 400;
    }
    .orbit-scroll_content p {
      font-size: 15px;
      line-height: 1.6;
      color: rgba(255,255,255,0.75);
      margin-bottom: 28px;
      max-width: 50ch;
    }

    .orbit-sticky {
      position: relative;
      height: 100%;
    }
    .orbit-sticky-inner {
      position: sticky;
      top: 0;
      height: 100vh;
      display: flex;
      align-items: center;
      justify-content: center;
    }
    .svg-orbits {
      width: 110%;
      max-width: 920px;
      height: 100%;
      overflow: visible;
      transform: translateX(-2%);
    }
    /* Desktop breathing animations — scale each ring with staggered delays like hero */
    .svg-orbits #float-3 {
      animation: orbitBreatheOuter 5.4s ease-in-out infinite -1.08s;
      transform-box: fill-box;
      transform-origin: 390px 340px;
    }
    .svg-orbits #float-2 {
      animation: orbitBreatheMid 5.4s ease-in-out infinite -0.54s;
      transform-box: fill-box;
      transform-origin: 390px 340px;
    }
    .svg-orbits #float-1 {
      animation: orbitBreatheInner 5.4s ease-in-out infinite 0s;
      transform-box: fill-box;
      transform-origin: 390px 340px;
    }
    @keyframes orbitBreatheOuter {
      0%, 100% { transform: scale(1); }
      35%      { transform: scale(1.10); }
    }
    @keyframes orbitBreatheMid {
      0%, 100% { transform: scale(1); }
      35%      { transform: scale(1.09); }
    }
    @keyframes orbitBreatheInner {
      0%, 100% { transform: scale(1); }
      35%      { transform: scale(1.08); }
    }
    .svg-orbits .orbit-ring {
      stroke: rgba(255,255,255,0.55);
      stroke-width: 1;
      fill: none;
    }
    .svg-orbits .orbit-ring-blue {
      stroke: rgba(0,40,255,0.0);
      stroke-width: 0;
      opacity: 0;
    }
    /* Desktop blue ring glows — always on, with staggered pulse */
    .svg-orbits #orbit-3-blue {
      animation: ringGlow 5.4s ease-in-out infinite;
      animation-delay: -1.08s;
    }
    .svg-orbits #orbit-2-blue {
      animation: ringGlow 5.4s ease-in-out infinite;
      animation-delay: -0.54s;
    }
    .svg-orbits #orbit-1-blue {
      animation: ringGlow 5.4s ease-in-out infinite;
      animation-delay: 0s;
    }
    @keyframes ringGlow {
      0%, 100% { opacity: 0.25; }
      35%      { opacity: 0.80; }
    }
    .svg-orbits .orbit-dot {
      fill: var(--white);
      opacity: 1;
    }
    .svg-orbits .orbit-label {
      font-family: var(--sans);
      font-size: 14px;
      font-weight: 500;
      fill: rgba(255,255,255,0.9);
      letter-spacing: 0.01em;
      opacity: 1;
    }
    .svg-orbits .center-star path {
      fill: #1F3CFF;
      animation: starBreatheContinuous 5.4s ease-in-out infinite 0.3s;
      transform-box: fill-box;
      transform-origin: center;
    }
    @keyframes starBreatheContinuous {
      0%, 100% { transform: scale(0.94); opacity: 0.85; }
      35%      { transform: scale(1.30); opacity: 1; }
    }
    .svg-orbits #center-star {
      opacity: 1;
    }

    @media (max-width: 991px) {
      .orbit-scroll_container { grid-template-columns: 1fr; }
      .orbit-sticky-inner { height: 70vh; }
      .orbit-scroll_content { min-height: auto; padding: 40px 24px; }
    }

    /* service stack */
    .service-stack {
      overflow: hidden;
      padding: 0;
    }
    .service-stack-sticky {
      position: sticky;
      top: 0;
      height: 100vh;
      overflow: hidden;
      display: flex;
      flex-direction: column;
    }
    .service-stack-header {
      flex-shrink: 0;
      padding: 140px 60px 32px;
      border-bottom: 1px solid rgba(255,255,255,0.08);
    }
    .service-stack-header .section-label {
      font-size: 12px;
      letter-spacing: 0.2em;
      text-transform: uppercase;
      color: rgba(255,255,255,0.4);
      margin-bottom: 10px;
    }
    .service-stack-header h2 {
      font-size: clamp(28px, 3vw, 44px);
      font-weight: 700;
      letter-spacing: -0.03em;
      color: var(--white);
      margin: 0;
    }
    .service-stack-header h2 em {
      font-family: var(--serif);
      font-style: italic;
      font-weight: 400;
    }
    .service-cards-viewport {
      flex: 1;
      overflow: hidden;
      display: flex;
      align-items: stretch;
    }
    .service-track {
      display: flex;
      flex-direction: row;
      align-items: stretch;
      will-change: transform;
      /* 3 panels wide — first fills viewport, then cards accumulate */
    }
    .service-row {
      /* each card is 1/3 viewport wide so all 3 fit side-by-side */
      width: 33.333vw;
      flex-shrink: 0;
      display: flex;
      align-items: center;
      padding: 40px 36px;
      box-sizing: border-box;
    }
    .service-content { padding-left: 24px; max-width: 540px; margin-left: auto; margin-right: auto; }
    .service-eyebrow {
      font-size: 12px;
      letter-spacing: 0.16em;
      text-transform: uppercase;
      color: rgba(255,255,255,0.5);
      margin-bottom: 16px;
    }
    .service-title {
      font-size: clamp(36px, 4.4vw, 60px);
      font-weight: 700;
      line-height: 1.05;
      letter-spacing: -0.03em;
      margin-bottom: 22px;
      color: var(--white);
    }
    .service-title em {
      font-family: var(--serif);
      font-style: italic;
      font-weight: 400;
    }
    .service-body {
      font-size: 15px;
      color: rgba(255,255,255,0.62);
      margin-bottom: 28px;
      line-height: 1.65;
    }

    /* small markers around dark sections */
    /* ─── COMPARISON STRIP ─── */
    .compare-strip { padding: 80px 0; border-bottom: 1px solid var(--line); }
    .compare-strip-header { text-align: center; margin-bottom: 48px; }
    .compare-strip-header h2 { font-size: clamp(24px, 3vw, 36px); font-weight: 800; letter-spacing: -0.03em; margin-bottom: 10px; }
    .compare-strip-header p { font-size: 15px; color: var(--text-soft); }
    .compare-strip-table { width: 100%; border-collapse: collapse; }
    .compare-strip-table th { padding: 14px 20px; font-size: 11px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-soft); border-bottom: 2px solid var(--line); text-align: center; }
    .compare-strip-table th:first-child { text-align: left; }
    .compare-strip-table th:last-child { color: var(--blue); background: rgba(31,60,255,0.04); border-radius: 8px 8px 0 0; }
    .compare-strip-table td { padding: 16px 20px; border-bottom: 1px solid var(--line); font-size: 14px; color: var(--text-soft); text-align: center; }
    .compare-strip-table td:first-child { text-align: left; font-weight: 500; color: var(--ink); }
    .compare-strip-table td:last-child { background: rgba(31,60,255,0.04); }
    .compare-strip-table tr:last-child td { border-bottom: none; }
    .compare-strip-table tr:hover td { background: rgba(0,0,0,0.02); }
    .compare-strip-table tr:hover td:last-child { background: rgba(31,60,255,0.07); }
    .cs-check { color: var(--blue); font-size: 17px; font-weight: 700; }
    .cs-cross { color: #c4c4c4; font-size: 16px; }
    .cs-partial { color: #f59e0b; font-size: 14px; font-weight: 600; }
    .compare-strip-cta { text-align: center; margin-top: 32px; }
    .compare-strip-cta a { font-size: 13px; font-weight: 600; color: var(--blue); text-decoration: none; letter-spacing: 0.04em; }
    .compare-strip-cta a:hover { text-decoration: underline; }

    .dark-section .marker {
      position: absolute;
      color: rgba(255,255,255,0.35);
      font-size: 14px;
    }
    .marker.tl { top: 80px; left: 60px; }
    .marker.tr { top: 80px; right: 60px; }
    .marker.bl { bottom: 80px; left: 60px; }
    .marker.br { bottom: 80px; right: 60px; }
    .marker.ml { top: 50%; left: 8%; }
    .marker.mr { top: 50%; right: 8%; }

    /* ─── TESTIMONIALS (DUAL MARQUEE) ─────────────────────────── */
    .testimonials {
      padding: 130px 0;
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 60px;
      align-items: start;
    }
    .test-left { padding-left: 24px; max-width: 520px; position: sticky; top: 120px; }
    .test-left h2 { margin-bottom: 22px; }
    .test-left p {
      font-size: 15px;
      color: var(--text-soft);
      margin-bottom: 28px;
      max-width: 420px;
    }
    .test-actions { display: flex; gap: 12px; }

    .test-columns {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 16px;
      height: 720px;
      overflow: hidden;
      position: relative;
      mask-image: linear-gradient(to bottom, transparent 0%, black 12%, black 88%, transparent 100%);
      -webkit-mask-image: linear-gradient(to bottom, transparent 0%, black 12%, black 88%, transparent 100%);
    }
    .test-col { position: relative; }
    .test-track {
      display: flex;
      flex-direction: column;
      gap: 16px;
    }
    .test-track.up { animation: scroll-up 40s linear infinite; }
    .test-track.down { animation: scroll-down 40s linear infinite; }
    @keyframes scroll-up {
      from { transform: translateY(0); }
      to { transform: translateY(-50%); }
    }
    @keyframes scroll-down {
      from { transform: translateY(-50%); }
      to { transform: translateY(0); }
    }
    .quote-card {
      background: var(--cream);
      border: 1px solid var(--line);
      border-radius: var(--radius);
      padding: 22px;
    }
    .quote-head {
      display: flex; align-items: center; gap: 12px;
      margin-bottom: 18px;
    }
    .quote-avatar {
      width: 36px; height: 36px;
      border-radius: 50%;
      background: linear-gradient(135deg, #c9bfae, #8a8170);
      flex-shrink: 0;
    }
    .quote-name {
      font-size: 14px; font-weight: 600;
    }
    .quote-role {
      font-size: 12px; color: var(--text-mute);
    }
    .quote-body {
      font-size: 14px;
      color: var(--text);
      line-height: 1.6;
    }

    /* ─── FOOTER (DARK with diagonal blue) ────────────────────── */
    footer {
      background: var(--ink);
      color: var(--white);
      position: relative;
      overflow: hidden;
      padding: 100px 0 24px;
      min-height: 560px;
    }
    .footer-wedge {
      position: absolute;
      bottom: 0; left: 0;
      width: 60%;
      height: 100%;
      background: linear-gradient(135deg, var(--blue) 0%, #1029cc 60%, transparent 60%);
      clip-path: polygon(0 100%, 100% 100%, 0 0);
    }
    .footer-inner {
      position: relative;
      z-index: 2;
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 60px;
      align-items: center;
      min-height: 380px;
    }
    .footer-brand {
      padding-left: 24px;
      align-self: end;
      padding-bottom: 60px;
    }
    .footer-mark {
      width: 60px; height: 60px;
      margin-bottom: 14px;
    }
    .footer-mark img {
      width: 60px; height: 60px;
      display: block;
    }
    .footer-logo {
      font-size: 86px;
      font-weight: 700;
      letter-spacing: -0.05em;
      color: var(--cream);
      line-height: 0.9;
    }
    .footer-tag {
      font-size: 14px;
      color: rgba(255,255,255,0.7);
      margin-top: 6px;
    }
    .footer-powered {
      font-size: 13px;
      color: rgba(255,255,255,0.55);
      margin-top: 10px;
      letter-spacing: 0.02em;
    }
    .footer-powered a {
      background: linear-gradient(90deg, #a855f7, #3b82f6, #22c55e);
      -webkit-background-clip: text;
      -webkit-text-fill-color: transparent;
      background-clip: text;
      font-weight: 600;
      text-decoration: none;
    }

    .footer-cta {
      background: rgba(255,255,255,0.04);
      border: 1px solid rgba(255,255,255,0.12);
      border-radius: var(--radius-lg);
      padding: 28px;
      max-width: 440px;
      justify-self: end;
      margin-right: 24px;
    }
    .founder-row {
      display: flex; gap: 10px;
      margin-bottom: 22px;
    }
    .founder-card {
      flex: 1;
      aspect-ratio: 4/5;
      border-radius: 12px;
      background: var(--ink);
      position: relative;
      overflow: hidden;
      display: flex;
      align-items: flex-end;
      padding: 16px;
      border: 1px solid rgba(255,255,255,0.08);
    }
    .founder-card img {
      position: absolute;
      inset: 0;
      width: 100%;
      height: 100%;
      object-fit: cover;
      opacity: 1;
      transition: transform 0.4s ease;
    }
    .founder-card:hover img {
      transform: scale(1.05);
      opacity: 1;
    }
    .founder-card::after {
      content: '';
      position: absolute;
      inset: 0;
      background: linear-gradient(to top, rgba(0,0,0,0.8) 0%, transparent 60%);
      pointer-events: none;
    }
    .founder-card-content { position: relative; z-index: 2; }
    .founder-name {
      font-size: 13px;
      font-weight: 600;
      color: var(--white);
    }
    .founder-role {
      font-size: 11px;
      color: rgba(255,255,255,0.6);
    }
    .footer-cta h3 {
      font-size: clamp(28px, 3vw, 44px);
      font-weight: 700;
      letter-spacing: -0.03em;
      line-height: 1.05;
      margin-bottom: 18px;
      color: var(--white);
    }
    .footer-cta h3 em {
      font-family: var(--serif);
      font-style: italic;
      font-weight: 400;
    }

    .footer-bottom {
      position: relative;
      z-index: 2;
      margin-top: 80px;
      padding: 24px;
      display: flex;
      align-items: center;
      justify-content: space-between;
      flex-wrap: wrap;
      gap: 16px;
      font-size: 12px;
      color: rgba(255,255,255,0.55);
    }
    .footer-nav {
      display: flex; gap: 28px;
    }
    .footer-nav a { color: rgba(255,255,255,0.7); font-size: 13px; }
    .footer-nav a:hover { color: var(--white); }
    .footer-meta {
      display: flex; gap: 22px; font-size: 12px;
    }
    .follow-pill {
      padding: 8px 16px;
      background: rgba(255,255,255,0.08);
      border: 1px solid rgba(255,255,255,0.15);
      border-radius: 999px;
      font-size: 12px;
      color: var(--white);
    }

    /* ─── REVEAL ──────────────────────────────────────────────── */
    .reveal {
      opacity: 0;
      transform: translateY(20px);
      transition: opacity 0.7s ease, transform 0.7s ease;
    }
    .reveal.in { opacity: 1; transform: translateY(0); }

    /* ─── AMBIENT CANVAS ──────────────────────────────────────── */

    /* ─── MAGNETIC BTN ────────────────────────────────────────── */
    .btn, .nav-cta {
      will-change: transform;
      backface-visibility: hidden;
      -webkit-backface-visibility: hidden;
    }

    /* ─── STAT BAND (replaces logo strip) ────────────────────── */
    .stat-band {
      display: grid;
      grid-template-columns: repeat(4, 1fr);
      border-top: 1px solid var(--line);
      border-bottom: 1px solid var(--line);
    }
    .stat-cell {
      padding: 36px 24px;
      border-right: 1px solid var(--line);
      display: flex;
      flex-direction: column;
      gap: 6px;
    }
    .stat-cell:last-child { border-right: none; }
    .stat-number {
      font-size: clamp(36px, 4vw, 56px);
      font-weight: 700;
      letter-spacing: -0.045em;
      line-height: 1;
      color: var(--ink);
      font-variant-numeric: tabular-nums;
    }
    .stat-number em {
      font-family: var(--serif);
      font-style: italic;
      font-weight: 400;
    }
    .stat-label {
      font-size: 13px;
      color: var(--text-soft);
      max-width: 200px;
      line-height: 1.4;
    }
    @media (max-width: 980px) {
      .stat-band { grid-template-columns: repeat(2, 1fr); }
      .stat-cell:nth-child(2) { border-right: none; }
    }
    @media (max-width: 540px) {
      .stat-band { grid-template-columns: 1fr; }
      .stat-cell { border-right: none; border-bottom: 1px solid var(--line); }
    }

    /* ─── SPLIT WORD REVEAL ───────────────────────────────────── */
    .split-reveal .word {
      display: inline-block;
      opacity: 0;
      transform: translateY(22px);
      transition: opacity 0.55s ease, transform 0.55s cubic-bezier(0.16,1,0.3,1);
    }
    .split-reveal.in .word {
      opacity: 1;
      transform: translateY(0);
    }

    /* ─── MOBILE HAMBURGER NAV ───────────────────────────────── */
    .nav-hamburger {
      display: none;
      flex-direction: column;
      justify-content: center;
      align-items: center;
      width: 36px; height: 36px;
      background: none;
      border: none;
      cursor: pointer;
      padding: 4px;
      gap: 5px;
      z-index: 201;
    }
    .nav-hamburger span {
      display: block;
      width: 22px; height: 2px;
      background: var(--ink);
      border-radius: 2px;
      transition: transform 0.3s cubic-bezier(0.22,1,0.36,1), opacity 0.2s;
      transform-origin: center;
    }
    .nav-hamburger.open span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
    .nav-hamburger.open span:nth-child(2) { opacity: 0; transform: scaleX(0); }
    .nav-hamburger.open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
    .mobile-nav-overlay {
      display: none;
      position: absolute;
      top: calc(100% + 12px);
      left: 0; right: 0;
      z-index: 150;
      background: rgba(243,237,226,0.96);
      backdrop-filter: blur(40px) saturate(2);
      -webkit-backdrop-filter: blur(40px) saturate(2);
      border: 1px solid var(--line);
      border-radius: 32px;
      padding: 12px;
      opacity: 0;
      transform: translateY(-12px) scale(0.98);
      transform-origin: top center;
      transition: opacity 0.4s cubic-bezier(0.2, 0.8, 0.2, 1), transform 0.4s cubic-bezier(0.2, 0.8, 0.2, 1);
      box-shadow: 0 40px 80px rgba(0,0,0,0.15);
    }
    .mobile-nav-overlay.open {
      display: block;
      opacity: 1;
      transform: translateY(0) scale(1);
    }
    .bento-menu {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 8px;
    }
    .bento-item {
      background: rgba(255,255,255,0.45);
      border: 1px solid rgba(0,0,0,0.04);
      border-radius: 20px;
      padding: 20px;
      display: flex;
      flex-direction: column;
      gap: 12px;
      text-decoration: none;
      transition: all 0.3s cubic-bezier(0.2, 0.8, 0.2, 1);
    }
    .bento-home { grid-column: span 2; padding: 24px; background: rgba(255,255,255,0.6); }
    .bento-about { grid-column: span 2; flex-direction: row; align-items: center; justify-content: space-between; padding: 18px 24px; }
    
    .bento-icon {
      font-size: 20px;
      color: var(--blue);
      opacity: 0.8;
    }
    .bento-label {
      font-size: 15px;
      font-weight: 700;
      color: var(--ink);
      letter-spacing: -0.01em;
    }
    .bento-cta {
      grid-column: span 2;
      background: var(--ink);
      color: var(--white);
      border-radius: 20px;
      padding: 20px;
      text-align: center;
      font-weight: 700;
      font-size: 16px;
      display: flex;
      align-items: center;
      justify-content: center;
      gap: 8px;
      text-decoration: none;
      transition: background 0.3s ease, transform 0.3s ease;
    }
    .bento-cta span { transition: transform 0.3s ease; }
    .bento-cta:hover span { transform: translateX(4px); }
    
    .bento-item:hover {
      background: var(--white);
      transform: translateY(-2px);
      box-shadow: 0 8px 20px rgba(0,0,0,0.06);
    }
    .bento-cta:hover {
      background: var(--blue);
    }
    .mobile-nav-overlay .mobile-nav-cta::before { content: '+'; font-weight: 400; font-size: 18px; line-height: 0.8; margin-right: 2px; }
    .mobile-nav-overlay .mobile-nav-cta:hover { transform: translateY(-2px); background: var(--ink); }

    /* ─── RESPONSIVE ──────────────────────────────────────────── */
    @media (max-width: 980px) {
      .nav-links { display: none; }
      .nav-hamburger { display: flex; }
      .nav-cta { display: none; }
      .hero { grid-template-columns: 1fr; padding: 120px 24px 40px; justify-items: center; }
      .hero-content { padding: 0; width: 100%; max-width: 100%; margin: 0 auto; text-align: center; }
      .hero-content .hero-sub { max-width: 100%; margin: 0 auto 28px; }
      .hero-content .hero-actions { justify-content: center; }
      .hero-visual { height: 380px; }
      .te-content { padding: 0 24px; max-width: 100%; margin: 0 auto; text-align: center; }
      .service-content { padding: 0 24px; max-width: 100%; margin: 0 auto; text-align: center; }
      .orbit { width: 360px; height: 360px; }
      .orbit-ring.r1 { inset: 50px; }
      .orbit-ring.r2 { inset: 90px; }
      .orbit-ring.r3 { inset: 130px; }
      .problem { padding: 80px 0 90px; }
      .problem h2 { text-align: center; max-width: 100%; margin-left: auto; margin-right: auto; }
      .problem-grid { grid-template-columns: 1fr; }
      .problem-cell { text-align: center; }
      .problem-cell .x-mark { margin-left: auto; margin-right: auto; }
      .case-card { width: 180px; height: 200px; padding: 12px; }
      .case-card::before { font-size: 56px; }
      .case-pill { padding: 8px 12px; font-size: 11px; }
      .cases-track { gap: 8px; }
      .cases-row + .cases-row { margin-top: 12px; padding-bottom: 16px; }
      .cases-name-item { font-size: 11px; padding: 0 16px; }
      .cases-name-item::after { margin-left: 16px; }
      .logos { grid-template-columns: repeat(3, 1fr); }
      .logo-cell:nth-child(3n) { border-right: none; }
      .te-row { grid-template-columns: 1fr; min-height: auto; }
      .service-row { width: 100vw; padding: 40px 24px; }
      .service-track { width: 300vw; }
      .service-title { font-size: 32px; }
      .service-body { font-size: 14px; }
      .te-visual, .sticky-orbit-wrap { height: 380px; }
      .sticky-orbit { position: relative; top: auto; right: auto; width: 100%; transform: none; }
      .testimonials { grid-template-columns: 1fr; }
      .test-left { position: relative; top: auto; padding: 0 24px; }
      .footer-inner { grid-template-columns: 1fr; }
      .footer-cta { justify-self: stretch; margin: 0 24px; }
    }
    @media (max-width: 540px) {
      .logos { grid-template-columns: repeat(2, 1fr); }
      .logo-cell { border-right: none; }
      .test-columns { grid-template-columns: 1fr; }
    }

    /* ─── PRELOADER (wgb.agency-style) ───────────────────────── */
    .preloader {
      position: fixed;
      inset: 0;
      z-index: 9999;
      pointer-events: none;
    }
    .preloader-bg {
      position: absolute;
      inset: 0;
      background: var(--cream);
    }
    /* Positioned at runtime to overlap .hero-visual exactly */
    .preloader-orbit {
      position: absolute;
      top: 0; left: 0;
      width: 0; height: 0;
      opacity: 0;
      pointer-events: none;
    }
    .preloader-orbit svg {
      width: 100%;
      height: 100%;
      overflow: visible;
    }
    .preloader-orbit svg path {
      stroke: var(--ink);
      stroke-width: 1.4;
      fill: none;
    }
    .preloader-label {
      position: absolute;
      top: 50%; left: 50%;
      transform: translate(-50%, -50%);
      font-family: var(--serif);
      font-style: italic;
      font-size: clamp(22px, 2.4vw, 40px);
      color: var(--ink);
      letter-spacing: -0.01em;
      overflow: hidden;
      line-height: 1;
      padding: 0.1em 0.05em;
      white-space: nowrap;
    }
    .preloader-label-text {
      display: inline-block;
      transform: translateY(110%);
      will-change: transform;
    }

    /* Hide hero elements until the preloader timeline reveals them */
    .preload-armed .hero h1,
    .preload-armed .hero-sub,
    .preload-armed .hero-actions,
    .preload-armed .hero-visual,
    .preload-armed nav {
      visibility: hidden;
    }
    @media (prefers-reduced-motion: reduce) {
      .preload-armed .hero h1,
      .preload-armed .hero-sub,
      .preload-armed .hero-actions,
      .preload-armed .hero-visual,
      .preload-armed nav { visibility: visible; }
    }

    /* ─── MOBILE SAFETY PATCH ──────────────────────────────────
       Handles the recurring mobile responsiveness issues. Scoped
       carefully so it does NOT touch nav, marquees, or animations.
       ────────────────────────────────────────────────────────── */
    @media (max-width: 768px) {
      /* Center common content blocks (excluding nav, marquees, tables) */
      .hero-content,
      .te-content,
      .service-content,
      .test-left,
      .footer-brand,
      .compare-strip-header,
      .compare-strip-cta,
      .problem-cell,
      .stat-cell {
        padding-left: 0 !important;
        padding-right: 0 !important;
        margin-left: auto !important;
        margin-right: auto !important;
        max-width: 100% !important;
        text-align: center !important;
      }
      .hero-actions,
      .te-actions,
      .test-actions {
        justify-content: center !important;
      }

      /* Service stack — stack vertically on mobile, kill 300vw track */
      .service-stack { overflow: visible; }
      .service-stack-sticky {
        position: static;
        height: auto;
        min-height: 0;
        overflow: visible;
      }
      .service-stack-header { padding: 100px 24px 24px; text-align: center; }
      .service-cards-viewport { overflow: visible; }
      .service-track {
        flex-direction: column !important;
        width: 100% !important;
        transform: none !important;
      }
      .service-row {
        width: 100% !important;
        padding: 32px 24px !important;
        border-bottom: 1px solid rgba(255,255,255,0.08);
        justify-content: center;
      }
      .service-row:last-child { border-bottom: none; }

      /* Trust-engine orbit on mobile:
         Use CSS Grid with named areas so the orbit sits in row 1 (sticky)
         and the text panels stack in column 1 of row 2. Critically: the
         grid container itself must be tall (panels × 70vh each), so the
         sticky orbit stays pinned for the entire scroll through panels. */
      .orbit-scroll_container {
        display: grid !important;
        grid-template-columns: 1fr !important;
        grid-template-rows: auto auto !important;
        gap: 0 !important;
      }
      .orbit-sticky {
        order: -1;
        position: sticky;
        top: 0;
        height: 50vh;
        z-index: 5;
        background: var(--ink);
        margin-bottom: 24px;
      }
      .orbit-sticky-inner {
        position: relative !important;
        top: auto !important;
        height: 100% !important;
        width: 100%;
      }
      .svg-orbits {
        width: 100%;
        height: 100%;
        max-width: 480px;
      }
      .orbit-scroll_content {
        min-height: 70vh !important;
        padding: 24px !important;
        max-width: 100% !important;
      }

      /* Footer centering */
      .footer-inner { text-align: center; justify-items: center; }
      .footer-brand { padding-bottom: 32px; }
      .footer-cta { justify-self: center !important; margin: 0 auto !important; max-width: calc(100% - 32px); }
      .founder-row { justify-content: center; }

      /* Comparison table — horizontal scroll inside its own wrapper */
      .compare-strip-scroll {
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
        margin: 0 -24px;
        padding: 0 24px;
        scrollbar-width: thin;
      }
      .compare-strip-table { min-width: 540px; font-size: 13px; }
      .compare-strip-table th,
      .compare-strip-table td { padding: 12px 14px; }

      /* Hero orbit constrained on phones */
      .hero-visual { justify-content: center; height: auto; min-height: 360px; }
      .orbit { max-width: min(90vw, 420px); max-height: min(90vw, 420px); margin: 0 auto; }

      /* Mobile orbit adjustments kept */

      /* ─── CSS-ONLY ORBIT BREATHING + AUTO-LIGHT BLUE on mobile ─────
         The trust-engine orbit relies on GSAP ScrollTriggers to breathe
         and light blue. On mobile those triggers are unreliable due to
         the layout changes. We replace breathing with CSS keyframes and
         keep the blue rings permanently lit (~0.6 opacity) so the user
         sees the design intent. */
      /* All orbit animations share the same 4.5s period and ease curve so
         the SVG, blue rings, and center star expand and contract in sync. */
      .svg-orbits {
        animation: orbit-breathe-mobile 4.5s ease-in-out infinite;
        transform-origin: center center;
      }
      @keyframes orbit-breathe-mobile {
        0%, 100% { transform: scale(1)    translateX(-2%); }
        50%      { transform: scale(1.06) translateX(-2%); }
      }
      .svg-orbits .orbit-ring-blue {
        opacity: 0.55 !important;
        animation: ring-blue-pulse 5.4s ease-in-out infinite !important;
      }
      .svg-orbits #orbit-3-blue {
        animation-delay: -1.08s !important;
      }
      .svg-orbits #orbit-2-blue {
        animation-delay: -0.54s !important;
      }
      .svg-orbits #orbit-1-blue {
        animation-delay: 0s !important;
      }
      @keyframes ring-blue-pulse {
        0%, 100% { opacity: 0.25; }
        35%      { opacity: 0.80; }
      }
      .svg-orbits #center-star {
        opacity: 1 !important;
      }
      .svg-orbits .center-star path {
        fill: #1F3CFF !important;
        animation: star-pulse 4.5s ease-in-out infinite;
        transform-origin: center center;
      }
      @keyframes star-pulse {
        0%, 100% { transform: scale(1);    opacity: 0.85; }
        50%      { transform: scale(1.12); opacity: 1; }
      }
      /* Make the dot/label visible too (JS would otherwise leave them at opacity 0) */
      .svg-orbits .orbit-dot,
      .svg-orbits .orbit-label {
        opacity: 1 !important;
      }
    }

    /* Extra-narrow phones (≤400px) */
    @media (max-width: 400px) {
      .orbit { width: 280px !important; height: 280px !important; }
      .orbit-ring.r1 { inset: 40px; }
      .orbit-ring.r2 { inset: 70px; }
      .orbit-ring.r3 { inset: 100px; }
      .hero-visual { min-height: 320px; }
    }
   
    /* --- Quick Answer / AI Overview extraction target (2026-09-07) --- */
    .quick-answer-section { padding: 32px 0 16px; }
    .quick-answer-card { max-width: 780px; margin: 0 auto; background: linear-gradient(135deg, rgba(31,60,255,0.08), rgba(77,108,255,0.03)); border-left: 3px solid var(--blue, #1f3cff); border-radius: 14px; padding: 22px 28px; position: relative; }
    .quick-answer-card::before { content: "AI Overview"; position: absolute; top: -10px; left: 22px; background: var(--blue, #1f3cff); color: #fff; font-size: 10px; font-weight: 700; letter-spacing: 0.09em; text-transform: uppercase; padding: 3px 9px; border-radius: 999px; }
    .quick-answer-card p { font-size: 16px; line-height: 1.65; color: var(--text, #0a0a0a); margin: 0; }
    .quick-answer-card strong { color: var(--text, #0a0a0a); font-weight: 700; }
    .quick-answer-card a { color: var(--blue, #1f3cff); text-decoration: underline; text-underline-offset: 2px; }
    @media (max-width: 720px) { .quick-answer-card { margin: 0 20px; padding: 20px 22px; } .quick-answer-card p { font-size: 15px; } }

</style>

  <!-- GSAP for the load animation (matches wgb.agency stack) -->
  <script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/CustomEase.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/SplitText.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollTrigger.min.js"></script>
  <!-- SEO/a11y foundations (Sprint 1) -->
  <meta http-equiv="last-modified" content="Thu, 05 Nov 2026 12:00:00 GMT">
  <style>
    /* Skip link — WCAG bypass block */
    .skip-link {
      position: absolute;
      left: -10000px;
      top: 0;
      z-index: 9999;
      padding: 10px 16px;
      background: #000;
      color: #fff;
      text-decoration: none;
      font-weight: 700;
      border-radius: 0 0 6px 0;
    }
    .skip-link:focus { left: 0; outline: 2px solid #fff; }
    /* font-display: swap applied via Google Fonts &display=swap */
  </style>
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://webflur.com/"
    }
  ]
}
  </script>
    <!-- Geo signals — primary office (secondary NY via LocalBusiness schema) -->
  <meta name="geo.region" content="IN-HR">
  <meta name="geo.placename" content="Gurgaon">
  <meta name="geo.position" content="28.4595;77.0266">
  <meta name="ICBM" content="28.4595, 77.0266">
    <!-- Preload critical resources -->
  <link rel="preload" href="https://fonts.gstatic.com/s/inter/v13/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa1ZL7.woff2" as="font" type="font/woff2" crossorigin>
  <link rel="preload" href="/pankaj_new.webp" as="image" type="image/webp">
  <script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": [
        "ProfessionalService",
        "LocalBusiness"
      ],
      "@id": "https://webflur.com/#office-gurgaon",
      "name": "WebFlur — Gurgaon Office",
      "legalName": "Webflur Studio",
      "alternateName": ["Webflur Studio - AI SEO Agency", "Webflur Studio"],
      "url": "https://webflur.com/locations/gurgaon",
      "description": "WebFlur AI SEO agency Gurgaon office. GEO, AEO and A2A agent endpoint services for B2B brands worldwide.",
      "parentOrganization": {
        "@id": "https://webflur.com/#organization",
        "sameAs": [
          "https://www.linkedin.com/in/pankaj-raghav-digital-marketing/"
        ],
        "contactPoint": [
          {
            "@type": "ContactPoint",
            "contactType": "sales",
            "telephone": "+91-9599955465",
            "email": "talktous@webflur.com",
            "areaServed": "Worldwide",
            "availableLanguage": "English"
          }
        ]
      },
      "address": {
        "@type": "PostalAddress",
        "streetAddress": "Sector 14",
        "addressLocality": "Gurugram",
        "addressRegion": "Haryana",
        "postalCode": "122001",
        "addressCountry": "IN"
      },
      "geo": {
        "@type": "GeoCoordinates",
        "latitude": 28.4595,
        "longitude": 77.0266
      },
      "areaServed": [
        {
          "@type": "Country",
          "name": "India"
        },
        {
          "@type": "AdministrativeArea",
          "name": "Worldwide"
        }
      ],
      "email": "talktous@webflur.com",
      "priceRange": "$$$",
      "openingHoursSpecification": [
        {
          "@type": "OpeningHoursSpecification",
          "dayOfWeek": [
            "Monday",
            "Tuesday",
            "Wednesday",
            "Thursday",
            "Friday"
          ],
          "opens": "10:00",
          "closes": "19:00"
        }
      ],
      "contactPoint": [
        {
          "@type": "ContactPoint",
          "contactType": "sales",
          "telephone": "+91-9599955465",
          "email": "talktous@webflur.com",
          "areaServed": [
            "IN",
            "Worldwide"
          ],
          "availableLanguage": "English"
        }
      ],
      "sameAs": [
        "https://share.google/daZJQfZni2DQRZrRs",
        "https://www.google.com/search?kgmid=/g/11zxj34rb2",
        "https://webflur.com/locations/gurgaon"
      ],
      "hasMap": "https://share.google/daZJQfZni2DQRZrRs"
    },
    {
      "@type": [
        "ProfessionalService",
        "LocalBusiness"
      ],
      "@id": "https://webflur.com/#office-newyork",
      "name": "WebFlur — New York Office",
      "url": "https://webflur.com/",
      "description": "WebFlur AI SEO agency New York office. GEO, AEO and A2A agent endpoint services for B2B brands worldwide.",
      "parentOrganization": {
        "@id": "https://webflur.com/#organization",
        "sameAs": [
          "https://www.linkedin.com/in/pankaj-raghav-digital-marketing/"
        ],
        "contactPoint": [
          {
            "@type": "ContactPoint",
            "contactType": "sales",
            "telephone": "+91-9599955465",
            "email": "talktous@webflur.com",
            "areaServed": "Worldwide",
            "availableLanguage": "English"
          }
        ]
      },
      "address": {
        "@type": "PostalAddress",
        "addressLocality": "New York",
        "addressRegion": "NY",
        "postalCode": "10001",
        "addressCountry": "US"
      },
      "geo": {
        "@type": "GeoCoordinates",
        "latitude": 40.7128,
        "longitude": -74.006
      },
      "areaServed": [
        {
          "@type": "Country",
          "name": "United States"
        },
        {
          "@type": "AdministrativeArea",
          "name": "Worldwide"
        }
      ],
      "email": "talktous@webflur.com",
      "priceRange": "$$$",
      "openingHoursSpecification": [
        {
          "@type": "OpeningHoursSpecification",
          "dayOfWeek": [
            "Monday",
            "Tuesday",
            "Wednesday",
            "Thursday",
            "Friday"
          ],
          "opens": "09:00",
          "closes": "18:00"
        }
      ],
      "contactPoint": [
        {
          "@type": "ContactPoint",
          "contactType": "customer support",
          "telephone": "+91-9599955465",
          "email": "talktous@webflur.com",
          "areaServed": [
            "US",
            "Worldwide"
          ],
          "availableLanguage": "English"
        },
        {
          "@type": "ContactPoint",
          "contactType": "sales",
          "telephone": "+91-9599955465",
          "email": "talktous@webflur.com",
          "areaServed": [
            "US",
            "Worldwide"
          ],
          "availableLanguage": "English"
        }
      ],
      "sameAs": [
        
      ]
    }
  ]
}
  </script>
    <style>
    /* WEBFLUR FAQ section (Sprint 7) */
    .webflur-faq-section {
      max-width: 900px;
      margin: 72px auto 32px;
      padding: 0 24px;
    }
    .webflur-faq-h2 {
      font-size: clamp(24px,3vw,32px);
      font-weight: 700;
      letter-spacing: -.03em;
      margin-bottom: 28px;
      color: var(--ink, #0a0a0a);
    }
    .webflur-faq-item {
      border-top: 1px solid var(--line, #e5e5e5);
      padding: 20px 0;
    }
    .webflur-faq-item:last-child { border-bottom: 1px solid var(--line, #e5e5e5); }
    .webflur-faq-q {
      display: block;
      width: 100%;
      text-align: left;
      background: none;
      border: none;
      padding: 0;
      cursor: default;
      font: inherit;
      font-weight: 700;
      font-size: 17px;
      color: var(--ink, #0a0a0a);
      letter-spacing: -.02em;
      margin-bottom: 10px;
    }
    .webflur-faq-a {
      font-size: 15px;
      line-height: 1.65;
      color: var(--text-soft, #555);
    }
</style>
  <script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "@id": "https://webflur.com/#faq-sprint7",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "What is AI SEO?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "AI SEO is the practice of getting your brand cited inside AI-generated answers — ChatGPT, Perplexity, Claude, Google AI Overviews. Traditional SEO gets you a blue link a human clicks. AI SEO gets your name inside the sentence the AI writes when a buyer asks a question. Different mechanics, different content, different signals."
      }
    },
    {
      "@type": "Question",
      "name": "How is AI SEO different from traditional SEO?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Traditional SEO optimizes for a ranked list. AI SEO optimizes for extraction — being the source an LLM pulls a fact from. That means machine-readable content, tight positioning docs, structured schema, and increasingly an A2A endpoint the AI can call. Keywords still matter; how the answer is composed matters more."
      }
    },
    {
      "@type": "Question",
      "name": "What is Generative Engine Optimization (GEO)?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "GEO is the discipline of shaping content so generative AI systems (ChatGPT, Perplexity, Claude, Gemini) select your brand as the source for an answer. It's a specific slice of AI SEO focused on the retrieval and citation layer inside LLMs — versus AEO (Answer Engine Optimization) which is broader, and LLMO which is the write-side optimization."
      }
    },
    {
      "@type": "Question",
      "name": "What is an A2A endpoint and why does my business need one?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "An A2A (Agent-to-Agent) endpoint is a live API that responds to AI agent requests in real time — quotes, availability, spec lookups — before a human ever visits your site. As buyers delegate research to agents, the vendors with A2A endpoints get shortlisted. The ones without get skipped."
      }
    },
    {
      "@type": "Question",
      "name": "How long does AI SEO take to show results?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "First AI citations typically appear within 30–60 days once GEO content ships. Compound gains (default-answer status, agent shortlist inclusion) build over 3–6 months. It's faster than classical SEO because LLMs re-crawl and re-index far more frequently than Google, and there's less competition per query."
      }
    },
    {
      "@type": "Question",
      "name": "What kind of B2B companies do you work with?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "B2B founders and operators with a defined offer, a real point of view, and technical or high-value products. Logistics, procurement, compliance, dev tools, security, healthcare tech. If your buyers are the kind who now open ChatGPT before Google, and your competitors are winning those answers, WebFlur was built for you."
      }
    },
    {
      "@type": "Question",
      "name": "Do you work with our existing tech stack?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes. We're stack-agnostic — WordPress, Webflow, Next.js, custom stacks all work. What matters is your ability to ship HTML changes, publish structured data, and stand up an /.well-known/agent-card.json endpoint. We handle the strategy and implementation; your dev team ships the code (or ours does)."
      }
    }
  ],
  "speakable": {
    "@type": "SpeakableSpecification",
    "cssSelector": [
      ".webflur-faq-q",
      ".faq-question"
    ]
  }
}
  </script>
  </head>

<body class="preload-armed">
  <a class="skip-link" href="#main-content">Skip to main content</a>
  <!-- Google Tag Manager (noscript) -->
  <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-K83G3WLZ"
  height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
  <!-- End Google Tag Manager (noscript) -->

  <!-- ─── PRELOADER ───────────────────────────────────────────── -->
  <div class="preloader" id="preloader" aria-hidden="true">
    <div class="preloader-bg"></div>
    <div class="preloader-orbit" id="preloader-orbit">
      <svg viewBox="0 0 780 680" xmlns="http://www.w3.org/2000/svg" fill="none" aria-hidden="true">
        <g class="ring-grp r-outer" transform="rotate(-45, 390, 340)">
          <ellipse class="pre-ring" id="pre-ring-1" cx="390" cy="340" rx="380" ry="200"/>
        </g>
        <g class="ring-grp r-mid" transform="rotate(-45, 390, 340)">
          <ellipse class="pre-ring" id="pre-ring-2" cx="370" cy="340" rx="297" ry="155"/>
        </g>
        <g class="ring-grp r-inner" transform="rotate(-45, 390, 340)">
          <ellipse class="pre-ring" id="pre-ring-3" cx="345" cy="340" rx="218" ry="114"/>
        </g>
      </svg>
      <div class="preloader-label"><span class="preloader-label-text" id="preloader-label-text">WebFlur</span></div>
    </div>
  </div>

  <!-- ─── NAV ─────────────────────────────────────────────────── -->
  <header>
  <nav>
    <a href="/" class="nav-logo">
      <span class="nav-mark"><picture><img src="assets/logo/logo-diamond.svg" alt="WebFlur logo" width="28" height="28"/></picture></span>
      WebFlur
    </a>
    <ul class="nav-links">
      <li><a href="manifesto.html">Manifesto</a></li>
      <li><a href="solutions.html">Solutions</a></li>
      <li><a href="cases.html">Cases</a></li>
      <li class="nav-dropdown-wrap">
        <a href="#">Resources <span class="arrow">⌄</span></a>
        <div class="nav-dropdown">
          <a href="blog.html">
            <div class="nav-dropdown-icon">
              <svg viewBox="0 0 12 12" aria-hidden="true"><path d="M1 3h10M1 6h7M1 9h5"/></svg>
            </div>
            Blog
          </a>
                  <a href="tools/ai-readiness-score.html">
            <div class="nav-dropdown-icon">
              <svg viewBox="0 0 12 12" aria-hidden="true"><circle cx="6" cy="6" r="4.5" fill="none"/><circle cx="6" cy="6" r="2" fill="none"/><circle cx="6" cy="6" r="0.6" fill="currentColor" stroke="none"/></svg>
            </div>
            AI Readiness Score
          </a>
</div>
      </li>
      <li class="nav-dropdown-wrap">
        <a href="#">Offices <span class="arrow" aria-hidden="true">⌄</span></a>
        <div class="nav-dropdown">
          <a href="locations/gurgaon.html">
            <div class="nav-dropdown-icon" aria-hidden="true">
              <svg viewBox="0 0 12 12" aria-hidden="true"><path d="M2 11 V4 H10 V11 M5 11 V8 H7 V11 M3.5 6 h1 M7.5 6 h1"/></svg>
            </div>
            Gurgaon
          </a>
          <a href="locations/new-york.html">
            <div class="nav-dropdown-icon" aria-hidden="true">
              <svg viewBox="0 0 12 12" aria-hidden="true"><path d="M2 11 V4 H10 V11 M5 11 V8 H7 V11 M3.5 6 h1 M7.5 6 h1"/></svg>
            </div>
            New York
          </a>
        </div>
      </li>
      <li><a href="about.html">About</a></li>
    </ul>
    <a href="talk-to-us.html" class="nav-cta"><span class="label-swap"><span class="label-default">Talk to us</span><span class="label-hover">Let's chat</span></span></a>
    <button class="nav-hamburger" aria-label="Open menu"><span></span><span></span><span></span></button>

    <div class="mobile-nav-overlay" aria-label="Mobile navigation">
      <div class="bento-menu">
        <a href="/" class="bento-item bento-home">
          <span class="bento-icon">◈</span>
          <span class="bento-label">Home</span>
        </a>
        <a href="manifesto.html" class="bento-item">
          <span class="bento-icon">◎</span>
          <span class="bento-label">Manifesto</span>
        </a>
        <a href="solutions.html" class="bento-item">
          <span class="bento-icon">▤</span>
          <span class="bento-label">Solutions</span>
        </a>
        <a href="cases.html" class="bento-item">
          <span class="bento-icon">✦</span>
          <span class="bento-label">Cases</span>
        </a>
        <a href="blog.html" class="bento-item">
          <span class="bento-icon">✎</span>
          <span class="bento-label">Blog</span>
        </a>
                <a href="tools/ai-readiness-score.html" class="bento-item"><span class="bento-icon">◎</span><span class="bento-label">AI Score</span></a>
<a href="about.html" class="bento-item bento-about">
          <span class="bento-icon">ⓘ</span>
          <span class="bento-label">About</span>
        </a>
        <a href="locations/gurgaon.html" class="bento-item">
          <span class="bento-icon" aria-hidden="true">◉</span>
          <span class="bento-label">Gurgaon</span>
        </a>
        <a href="locations/new-york.html" class="bento-item">
          <span class="bento-icon" aria-hidden="true">◉</span>
          <span class="bento-label">New York</span>
        </a>
        <a href="talk-to-us.html" class="bento-cta">
          Talk to us <span>→</span>
        </a>
      </div>
    </div>
  </nav>

  </header>

  <main id="main-content">
  <article>



  <!-- ─── HERO ────────────────────────────────────────────────── -->
  <section class="hero">
    <div class="hero-content">
      <h1 class="display">
        <a href="/" style="color:inherit;text-decoration:none;">WebFlur</a> —<br/>Engineering an<br/>agentic <span class="voice-morph"><em class="voice-word"><span class="vc l1">v</span><span class="vc l2">o</span><span class="vc l3">i</span><span class="vc l4">c</span><span class="vc l5">e</span></em><span class="voice-speaker" aria-hidden="true"><svg viewBox="0 0 120 120" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path class="speaker-body" d="M22 44 L22 76 L42 76 L66 96 L66 24 L42 44 Z" fill="currentColor"/><path class="speaker-wave w1" d="M76 44 Q86 60 76 76" stroke="currentColor" stroke-width="4" stroke-linecap="round" fill="none"/><path class="speaker-wave w2" d="M88 32 Q104 60 88 88" stroke="currentColor" stroke-width="4" stroke-linecap="round" fill="none"/><path class="speaker-wave w3" d="M100 20 Q122 60 100 100" stroke="currentColor" stroke-width="4" stroke-linecap="round" fill="none"/></svg></span></span><br/>for B2B businesses
      </h1>
      <p class="hero-sub">
        <strong>WebFlur is the AI SEO agency for B2B.</strong> As the exclusive architects of GEO and A2A agentic endpoints, we bridge the gap between traditional search and the agentic web. WebFlur engineers your B2B presence to be cited and recommended by AI Crawlers, LLM Crawlers, and AI bots—ensuring you are the primary authority for ChatGPT, Claude, and Google AI Overviews, not just another link indexed by legacy web crawlers.
      </p>
      <div class="hero-actions">
        <a href="cases.html" class="btn btn-dark"><span class="label-swap"><span class="label-default">Explore cases</span><span class="label-hover">See our work</span></span></a>
        <a href="talk-to-us.html" class="btn btn-blue"><span class="label-swap"><span class="label-default">Talk to us</span><span class="label-hover">Let's chat</span></span></a>
      </div>
    </div>
    <div class="hero-visual">
      <svg id="hero-orbit-svg" class="orbit-svg" viewBox="0 0 780 680" xmlns="http://www.w3.org/2000/svg" fill="none" aria-hidden="true">
        <!-- Outer ring: rx=380, ry=200, rotate -55 -->
        <g class="ring-grp r-outer" transform="rotate(-45, 390, 340)">
          <ellipse class="orbit-ring" cx="390" cy="340" rx="380" ry="200"/>
          <g transform="translate(520, 528)">
            <g class="label-grp">
              <circle class="orbit-dot" cx="0" cy="0" r="3.5"/>
              <text class="orbit-label" x="14" y="0">Discover</text>
            </g>
          </g>
        </g>
        <!-- Middle ring: rx=297, ry=155, rotate -55 -->
        <g class="ring-grp r-mid" transform="rotate(-45, 390, 340)">
          <ellipse class="orbit-ring" cx="370" cy="340" rx="297" ry="155"/>
          <g transform="translate(396, 494)">
            <g class="label-grp">
              <circle class="orbit-dot" cx="0" cy="0" r="3.5"/>
              <text class="orbit-label" x="14" y="0">Amplify</text>
            </g>
          </g>
        </g>
        <!-- Inner ring: rx=218, ry=114, rotate -55 -->
        <g class="ring-grp r-inner" transform="rotate(-45, 390, 340)">
          <ellipse class="orbit-ring" cx="345" cy="340" rx="218" ry="114"/>
          <g transform="translate(307, 452)">
            <g class="label-grp">
              <circle class="orbit-dot" cx="0" cy="0" r="3.5"/>
              <text class="orbit-label" x="14" y="0">Idea</text>
            </g>
          </g>
        </g>
        <!-- Center sparkle (wgb-style 4-point star, tilted slightly CCW) -->
        <g transform="translate(330, 320)">
          <g class="orbit-center-svg" transform="rotate(-12)">
            <g transform="translate(-21.4, -23.5) scale(0.7)">
              <path d="M57.5268 0.794486C35.5399 18.0041 12.8418 21.2851 12.8418 21.2851C12.8418 21.2851 11.2647 21.5327 10.6771 22.1827C9.74942 23.1732 10.1514 24.2874 10.1514 24.2874C10.3679 24.9994 15.0374 40.9399 0.595954 64.0924C-0.331762 65.5781 -0.053447 66.4757 0.595954 67.1567C1.36905 67.7757 2.26584 67.9305 3.65742 66.8472C25.6443 49.6685 48.3424 46.3566 48.3424 46.3566C48.3424 46.3566 49.9195 46.1709 50.4452 45.5518C51.3729 44.4685 51.0018 43.3542 51.0018 43.3542C50.8163 42.7351 46.054 26.7636 60.5573 3.54926C61.485 2.06354 61.2067 1.16592 60.5573 0.484961C59.7842 -0.134089 58.8874 -0.288852 57.4958 0.794486H57.5268Z"/>
            </g>
          </g>
        </g>
      </svg>
    </div>
  </section>


  <!-- Quick Answer / AI Overview extraction target (WEBFLUR_BLOG_SYSTEM §10.12) -->
  <section class="quick-answer-section" aria-labelledby="quick-answer-home">
    <div class="container">
      <div class="quick-answer-card">
        <h2 id="quick-answer-home" style="position:absolute;left:-9999px;">Quick Answer</h2>
        <p>WebFlur is the <strong>Agentic Presence Engine</strong> for B2B — engineering the schema, structured content, and Agent-to-Agent (A2A) endpoints that make companies findable and cited by <strong>ChatGPT, Perplexity, Claude, Google AI Overviews, and OpenAI's GPT-6 Astra</strong>. Founder-led. Engineers only. <a href="/talk-to-us">Get your AI audit</a>.</p>
      </div>
    </div>
  </section>
  <!-- ─── PROBLEM ─────────────────────────────────────────────── -->
  <section class="problem container" id="problem">
    <h2 class="display reveal split-reveal">
      Your product is world-class.<br/>
      Your <em>AI presence</em> isn't.
    </h2>
    <div class="problem-grid" id="problem-grid">
      <div class="problem-cell reveal">
        <div class="x-mark">×</div>
        <h3>Your discovery depends on search rankings</h3>
        <p>You rely on humans clicking blue links. As AI assistants do the searching, your traffic quietly evaporates without warning.</p>
      </div>
      <div class="problem-cell reveal">
        <div class="x-mark">×</div>
        <h3>AI assistants can't read your website</h3>
        <p>Your pricing, capabilities, and inventory are buried in marketing prose. To an AI orchestrator, your business looks empty.</p>
      </div>
      <div class="problem-cell reveal">
        <div class="x-mark">×</div>
        <h3>Your unique value disappears in summaries</h3>
        <p>When an AI summarizes your category, you become a generic line item. Your differentiation never reaches the buyer.</p>
      </div>
      <div class="problem-cell reveal">
        <div class="x-mark">×</div>
        <h3>You've shipped a chatbot, but it's siloed</h3>
        <p>A widget on your site only helps visitors. The agentic web needs an endpoint other agents can call directly.</p>
      </div>
      <div class="problem-cell reveal">
        <div class="x-mark">×</div>
        <h3>You can't measure what you can't see</h3>
        <p>Agent-mediated demand never appears in GA4. Pipeline shifts before your dashboards notice anything happened.</p>
      </div>
      <div class="problem-cell cta reveal">
        <div class="cta-mark"><picture><img src="assets/logo/logo-diamond-white.svg" alt="WebFlur diamond mark"/></picture></div>
        <h3>Sounds familiar?<br/>Here's what we believe.</h3>
        <a href="manifesto.html" class="btn btn-dark"><span class="label-swap"><span class="label-default">Read our manifesto</span><span class="label-hover">Our beliefs</span></span></a>
      </div>
    </div>
  </section>

  <!-- ─── CASES MARQUEE ───────────────────────────────────────── -->
  <section class="cases" id="cases">
    <!-- Row 1: right-to-left -->
    <div class="cases-row" data-marquee data-marquee-direction="left" data-marquee-speed="30" data-marquee-scroll-speed="8">
      <div class="cases-row-inner" data-marquee-inner>
        <div class="cases-track" data-marquee-track>
          <a href="cases.html#cargoflow" class="case-card"><picture><img src="assets/img/cargoflow.jpg" alt="Cargoflow Inc."></picture><div class="case-pill">CARGOFLOW INC.</div></a>
          <a href="cases.html#farrell-dunn" class="case-card"><picture><img src="assets/img/farrell-dunn.jpg" alt="Farrell & Dunn"></picture><div class="case-pill">FARRELL &amp; DUNN</div></a>
          <a href="cases.html#redbrick-labs" class="case-card"><picture><img src="assets/img/redbrick-labs.jpg" alt="Redbrick Labs"></picture><div class="case-pill">REDBRICK LABS</div></a>
          <a href="cases.html#clarendon-medical" class="case-card"><picture><img src="assets/img/clarendon-medical.jpg" alt="Clarendon Medical"></picture><div class="case-pill">CLARENDON MEDICAL</div></a>
          <a href="cases.html#harwick-supply" class="case-card"><picture><img src="assets/img/harwick-supply.jpg" alt="Harwick Supply Co."></picture><div class="case-pill">HARWICK SUPPLY CO.</div></a>
          <a href="cases.html#last-ride-funeral" class="case-card"><picture><img src="assets/img/last-ride-funeral.webp" alt="Last Ride Funeral Services" style="object-fit:contain;padding:44px;background:#f3ede2;"></picture><div class="case-pill">LAST RIDE FUNERAL</div></a>
        </div>
      </div>
    </div>
    <!-- Row 2: left-to-right -->
    <div class="cases-row" data-marquee data-marquee-direction="right" data-marquee-speed="30" data-marquee-scroll-speed="8">
      <div class="cases-row-inner" data-marquee-inner>
        <div class="cases-names-track" data-marquee-track>
          <a href="cases.html#cargoflow" class="cases-name-item">Cargoflow Inc.</a>
          <a href="cases.html#farrell-dunn" class="cases-name-item">Farrell &amp; Dunn</a>
          <a href="cases.html#redbrick-labs" class="cases-name-item">Redbrick Labs</a>
          <a href="cases.html#clarendon-medical" class="cases-name-item">Clarendon Medical</a>
          <a href="cases.html#harwick-supply" class="cases-name-item">Harwick Supply Co.</a>
          <a href="cases.html#last-ride-funeral" class="cases-name-item">Last Ride Funeral</a>
        </div>
      </div>
    </div>
  </section>

  <!-- ─── STAT BAND ────────────────────────────────────────────── -->
  <div class="stat-band" id="stat-band">
    <div class="stat-cell">
      <div class="stat-number" data-count="340" data-suffix="+">0</div>
      <div class="stat-label">AI assistant citations tracked across client endpoints</div>
    </div>
    <div class="stat-cell">
      <div class="stat-number" data-count="4" data-suffix="×">0×</div>
      <div class="stat-label">Average inbound pipeline lift within 90 days</div>
    </div>
    <div class="stat-cell">
      <div class="stat-number" data-count="6" data-suffix="wks">0wks</div>
      <div class="stat-label">Median time to first A2A endpoint in production</div>
    </div>
    <div class="stat-cell">
      <div class="stat-number" data-count="8" data-suffix="/10"><em>8</em>/10</div>
      <div class="stat-label">AI assistants recommend our clients by name unprompted</div>
    </div>
  </div>

  <!-- ─── COMPARISON STRIP ───────────────────────────────────── -->
  <section class="compare-strip">
    <div class="container">
      <div class="compare-strip-header">
        <h2>What we do that <em>nobody else does</em></h2>
        <p>Traditional agencies optimise for search engines. We engineer for the reasoning models that now sit between your buyers and your pipeline.</p>
      </div>
      <div class="compare-strip-scroll">
      <table class="compare-strip-table">
        <thead>
          <tr>
            <th>Capability</th>
            <th>Traditional SEO</th>
            <th>Content Agency</th>
            <th>WebFlur</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>On-page Optimization</td>
            <td><span class="cs-check">✓</span></td>
            <td><span class="cs-check">✓</span></td>
            <td><span class="cs-check">✓</span></td>
          </tr>
          <tr>
            <td>Optimised for AI reasoning engines</td>
            <td><span class="cs-cross">—</span></td>
            <td><span class="cs-cross">—</span></td>
            <td><span class="cs-check">✓</span></td>
          </tr>
          <tr>
            <td>Live A2A agent endpoint</td>
            <td><span class="cs-cross">—</span></td>
            <td><span class="cs-cross">—</span></td>
            <td><span class="cs-check">✓</span></td>
          </tr>
          <tr>
            <td>Structured positioning doc for AI citation</td>
            <td><span class="cs-cross">—</span></td>
            <td><span class="cs-partial">~</span></td>
            <td><span class="cs-check">✓</span></td>
          </tr>
          <tr>
            <td>30-day deployment guarantee</td>
            <td><span class="cs-cross">—</span></td>
            <td><span class="cs-cross">—</span></td>
            <td><span class="cs-check">✓</span></td>
          </tr>
        </tbody>
      </table>
      </div>
      <div class="compare-strip-cta">
        <a href="cases.html">See full comparison and case studies →</a>
      </div>
    </div>
  </section>

  <!-- ─── TRUST ENGINE (DARK, scroll-driven orbit) ───────────── -->
  <section class="dark-section trust-engine" id="solutions" data-orbit-scroll>
    <span class="marker tl">+</span>
    <span class="marker tr">+</span>
    <span class="marker bl">+</span>
    <span class="marker br">+</span>
    <div class="container">
      <div class="orbit-scroll">
        <div class="orbit-scroll_container">
          <!-- LEFT: stacked text panels -->
          <div class="orbit-scroll_content-list">
            <div id="scroll-intro" class="orbit-scroll_content">
              <h3>Guiding your <em>growth</em> beyond search using our Agent Engine</h3>
              <p>The Agent Engine replaces the chaos of disconnected SEO and marketing tactics with a single A2A endpoint, so every AI assistant can discover, query, and transact with your business at machine speed.</p>
            </div>
            <div id="scroll-idea" class="orbit-scroll_content">
              <h3>Founder-led <em>Idea</em></h3>
              <p>Every agentic surface starts with a sharp, defensible point of view. We translate your founder's expertise and category insight into a single source of truth that every downstream agent can quote, cite, and reason with.</p>
            </div>
            <div id="scroll-amplify" class="orbit-scroll_content">
              <h3>Account-Based <em>Amplify</em></h3>
              <p>Stop leaving growth to the luck of an algorithm. We amplify your idea directly to the decision-makers and the AI assistants they delegate to — keeping you top-of-mind in every retrieval, every recommendation, every orbit a buyer enters.</p>
            </div>
            <div id="scroll-discover" class="orbit-scroll_content">
              <h3><em>Discover</em> based on real data signals</h3>
              <p>We replace cold outreach with precise, signal-driven discovery. Because the prospect — and their AI assistant — already know and trust your brand, the conversation is warm from the first message. We turn earned gravity into booked meetings.</p>
            </div>
          </div>

          <!-- RIGHT: sticky SVG orbit -->
          <div class="orbit-sticky">
            <div class="orbit-sticky-inner">
              <svg class="svg-orbits" viewBox="0 0 780 700" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
                <defs>
                  <radialGradient id="blue-fill-1" cx="50%" cy="50%" rx="50%" ry="50%">
                    <stop offset="80%"  stop-color="#0028FF" stop-opacity="0"/>
                    <stop offset="100%" stop-color="#0028FF" stop-opacity="0.5"/>
                  </radialGradient>
                  <radialGradient id="blue-fill-2" cx="50%" cy="50%" rx="50%" ry="50%">
                    <stop offset="80%"  stop-color="#0028FF" stop-opacity="0"/>
                    <stop offset="100%" stop-color="#0028FF" stop-opacity="0.5"/>
                  </radialGradient>
                  <radialGradient id="blue-fill-3" cx="50%" cy="50%" rx="50%" ry="50%">
                    <stop offset="80%"  stop-color="#0028FF" stop-opacity="0"/>
                    <stop offset="100%" stop-color="#0028FF" stop-opacity="0.5"/>
                  </radialGradient>
                </defs>

                <!-- Ring 3 — outermost (Discover) -->
                <g id="float-3">
                  <g transform="rotate(-45, 390, 340)">
                    <ellipse class="orbit-ring ring-3" id="orbit-3"      cx="390" cy="340" rx="340" ry="210"/>
                    <ellipse class="orbit-ring-blue"   id="orbit-3-blue" cx="390" cy="340" rx="340" ry="210" fill="url(#blue-fill-3)"/>
                    <g transform="translate(585, 512)">
                      <g class="label-grp">
                        <circle class="orbit-dot" id="dot-3" cx="0" cy="0" r="3.5" opacity="0"/>
                        <text class="orbit-label" id="label-3" x="14" y="0" opacity="0">Discover</text>
                      </g>
                    </g>
                  </g>
                </g>

                <!-- Ring 2 — middle (Amplify) -->
                <g id="float-2">
                  <g transform="rotate(-45, 360, 340)">
                    <ellipse class="orbit-ring ring-2" id="orbit-2"      cx="390" cy="340" rx="265" ry="163"/>
                    <ellipse class="orbit-ring-blue"   id="orbit-2-blue" cx="390" cy="340" rx="265" ry="163" fill="url(#blue-fill-2)"/>
                    <g transform="translate(614, 426)">
                      <g class="label-grp">
                        <circle class="orbit-dot" id="dot-2" cx="0" cy="0" r="3.5" opacity="0"/>
                        <text class="orbit-label" id="label-2" x="14" y="0" opacity="0">Amplify</text>
                      </g>
                    </g>
                  </g>
                </g>

                <!-- Ring 1 — innermost (Idea) -->
                <g id="float-1">
                  <g transform="rotate(-45, 320, 340)">
                    <ellipse class="orbit-ring ring-1" id="orbit-1"      cx="390" cy="340" rx="195" ry="120"/>
                    <ellipse class="orbit-ring-blue"   id="orbit-1-blue" cx="390" cy="340" rx="195" ry="120" fill="url(#blue-fill-1)"/>
                    <g transform="translate(580, 365)">
                      <g class="label-grp">
                        <circle class="orbit-dot" id="dot-1" cx="0" cy="0" r="3.5" opacity="0"/>
                        <text class="orbit-label" id="label-1" x="14" y="0" opacity="0">Idea</text>
                      </g>
                    </g>
                  </g>
                  <!-- Center star -->
                  <g class="center-star" id="center-star" transform="translate(348, 267) scale(0.7)">
                    <path d="M57.5268 0.794486C35.5399 18.0041 12.8418 21.2851 12.8418 21.2851C12.8418 21.2851 11.2647 21.5327 10.6771 22.1827C9.74942 23.1732 10.1514 24.2874 10.1514 24.2874C10.3679 24.9994 15.0374 40.9399 0.595954 64.0924C-0.331762 65.5781 -0.053447 66.4757 0.595954 67.1567C1.36905 67.7757 2.26584 67.9305 3.65742 66.8472C25.6443 49.6685 48.3424 46.3566 48.3424 46.3566C48.3424 46.3566 49.9195 46.1709 50.4452 45.5518C51.3729 44.4685 51.0018 43.3542 51.0018 43.3542C50.8163 42.7351 46.054 26.7636 60.5573 3.54926C61.485 2.06354 61.2067 1.16592 60.5573 0.484961C59.7842 -0.134089 58.8874 -0.288852 57.4958 0.794486H57.5268Z" fill="#FFF5EF"/>
                  </g>
                </g>
              </svg>
            </div>
          </div>
        </div>
      </div>
    </div>
  </section>

  <!-- ─── SERVICE STACK ───────────────────────────────────────── -->
  <section class="dark-section service-stack" id="service-stack">
    <div class="service-stack-sticky">

      <!-- Banner — stays fixed while cards scroll -->
      <div class="service-stack-header">
        <h2>Our <em>Solutions</em></h2>
      </div>

      <!-- Horizontal card viewport -->
      <div class="service-cards-viewport">
        <div class="service-track" id="service-track">

          <div class="service-row" data-service="0" id="agent-card-row">
            <div class="service-content">
              <p class="service-eyebrow">01 — Identity</p>
              <h3 class="service-title">Agent <em>Card</em></h3>
              <p class="service-body">
                A cryptographically-signed profile that registers your business inside Google, Microsoft, and OpenAI agent ecosystems. The handshake every AI assistant uses to find you.
              </p>
            </div>
          </div>

          <div class="service-row" data-service="1">
            <div class="service-content">
              <p class="service-eyebrow">02 — Capability</p>
              <h3 class="service-title">A2A <em>API</em></h3>
              <p class="service-body">
                A live endpoint that responds to agent requests in real time — quotes, availability, routing, support — before a human ever opens a tab. Sub-200ms machine-to-machine.
              </p>
            </div>
          </div>

          <div class="service-row" data-service="2">
            <div class="service-content">
              <p class="service-eyebrow">03 — Distribution</p>
              <h3 class="service-title">Intent <em>Signals</em></h3>
              <p class="service-body">
                We register your agent inside the orchestration layers of every major AI platform and instrument it so you can see exactly which queries chose you — and why.
              </p>
            </div>
          </div>

        </div>
      </div>
    </div>
  </section>

  <!-- ─── TESTIMONIALS ────────────────────────────────────────── -->
  <section class="testimonials container">
    <div class="test-left">
      <h2 class="display reveal split-reveal">
        We treat your <em>AI surface</em> like it's our own
      </h2>
      <p>
        You don't just get an agent endpoint. We engineer your discoverability with the same obsession we apply to our own positioning in the agentic web.
      </p>
      <div class="test-actions">
        <a href="cases.html" class="btn btn-dark"><span class="label-swap"><span class="label-default">Explore cases</span><span class="label-hover">See our work</span></span></a>
        <a href="talk-to-us.html" class="btn btn-blue"><span class="label-swap"><span class="label-default">Talk to us</span><span class="label-hover">Let's chat</span></span></a>
      </div>
    </div>
    <div class="test-columns">
      <div class="test-col">
        <div class="test-track up" id="track-a"></div>
      </div>
      <div class="test-col">
        <div class="test-track down" id="track-b"></div>
      </div>
    </div>
  </section>

  <!-- ─── FEATURED FROM BLOG ─────────────────────────────────── -->
  <section class="container" style="padding:64px 0 48px;text-align:center;">
    <p style="font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--text-mute);margin-bottom:12px;">From the blog</p>
    <h2 style="font-size:clamp(22px,3vw,32px);font-weight:700;letter-spacing:-.03em;margin-bottom:24px;">Start your agentic presence in 30 days</h2>
    <p style="max-width:520px;margin:0 auto 28px;color:var(--text-soft);">Our step-by-step founder playbook: build GEO-ready content, ship an A2A endpoint, and start appearing in ChatGPT, Perplexity, and Claude answers within a month.</p>
    <a href="blog/30-day-agentic-presence-sprint.html" class="btn btn-dark"><span class="label-swap"><span class="label-default">Read the playbook</span><span class="label-hover">30-day sprint →</span></span></a>
  </section>

  <!-- ─── FOOTER ──────────────────────────────────────────────── -->
  <!-- How WebFlur is different (Sprint 8) -->
  <section class="how-different-section" style="max-width:900px;margin:72px auto 32px;padding:0 24px;">
    <h2 style="font-size:clamp(24px,3vw,32px);font-weight:700;letter-spacing:-.03em;margin-bottom:20px;">How WebFlur is different</h2>
    <p style="font-size:16px;line-height:1.7;color:var(--text-soft,#555);margin-bottom:16px;">Most agencies calling themselves &ldquo;AI SEO&rdquo; are traditional SEO shops that added ChatGPT to their content pipeline and rebranded. That&rsquo;s not us. Every senior operator here shipped an A2A endpoint before we ever wrote a client blog post. Our founding thesis is engineering-first: the durable way to get cited by AI is machine-readable infrastructure, not content velocity.</p>
    <p style="font-size:16px;line-height:1.7;color:var(--text-soft,#555);margin-bottom:16px;">We own the full stack &mdash; from positioning architecture, through JSON-LD schema, through the live <code style="font-size:14px;background:rgba(0,0,0,.05);padding:2px 6px;border-radius:4px;">/.well-known/agent-card.json</code> endpoint. When ChatGPT, Perplexity, Claude, or a Google Gemini agent asks a question about your category, we control what gets returned. That&rsquo;s a different mental model than &ldquo;let&rsquo;s write more blog posts and hope Google&rsquo;s AI Overviews notice.&rdquo;</p>
    <p style="font-size:16px;line-height:1.7;color:var(--text-soft,#555);margin-bottom:0;">Small team, deliberately. You&rsquo;ll talk to Pankaj (Founder) on the first call and continue to work with him and Nick (Co-Founder) through delivery. No account-manager layer, no offshore content sweatshop, no six-figure retainer for a $10K workload. We tell you what&rsquo;s worth building, what isn&rsquo;t, and what you can do yourself. If you&rsquo;re not the right fit, we&rsquo;ll say so &mdash; that saves us both time.</p>
  </section>

  
  <!-- FAQ section (Sprint 7) -->
  <section class="webflur-faq-section" aria-labelledby="webflur-faq-heading">
    <h2 id="webflur-faq-heading" class="webflur-faq-h2">Frequently asked questions</h2>
      <div class="webflur-faq-item">
        <button type="button" class="webflur-faq-q faq-question" aria-expanded="true">What is AI SEO?</button>
        <div class="webflur-faq-a" role="region" aria-label="Answer">AI SEO is the practice of getting your brand cited inside AI-generated answers — ChatGPT, Perplexity, Claude, Google AI Overviews. Traditional SEO gets you a blue link a human clicks. AI SEO gets your name inside the sentence the AI writes when a buyer asks a question. Different mechanics, different content, different signals.</div>
      </div>
      <div class="webflur-faq-item">
        <button type="button" class="webflur-faq-q faq-question" aria-expanded="true">How is AI SEO different from traditional SEO?</button>
        <div class="webflur-faq-a" role="region" aria-label="Answer">Traditional SEO optimizes for a ranked list. AI SEO optimizes for extraction — being the source an LLM pulls a fact from. That means machine-readable content, tight positioning docs, structured schema, and increasingly an A2A endpoint the AI can call. Keywords still matter; how the answer is composed matters more.</div>
      </div>
      <div class="webflur-faq-item">
        <button type="button" class="webflur-faq-q faq-question" aria-expanded="true">What is Generative Engine Optimization (GEO)?</button>
        <div class="webflur-faq-a" role="region" aria-label="Answer">GEO is the discipline of shaping content so generative AI systems (ChatGPT, Perplexity, Claude, Gemini) select your brand as the source for an answer. It's a specific slice of AI SEO focused on the retrieval and citation layer inside LLMs — versus AEO (Answer Engine Optimization) which is broader, and LLMO which is the write-side optimization.</div>
      </div>
      <div class="webflur-faq-item">
        <button type="button" class="webflur-faq-q faq-question" aria-expanded="true">What is an A2A endpoint and why does my business need one?</button>
        <div class="webflur-faq-a" role="region" aria-label="Answer">An A2A (Agent-to-Agent) endpoint is a live API that responds to AI agent requests in real time — quotes, availability, spec lookups — before a human ever visits your site. As buyers delegate research to agents, the vendors with A2A endpoints get shortlisted. The ones without get skipped.</div>
      </div>
      <div class="webflur-faq-item">
        <button type="button" class="webflur-faq-q faq-question" aria-expanded="true">How long does AI SEO take to show results?</button>
        <div class="webflur-faq-a" role="region" aria-label="Answer">First AI citations typically appear within 30–60 days once GEO content ships. Compound gains (default-answer status, agent shortlist inclusion) build over 3–6 months. It's faster than classical SEO because LLMs re-crawl and re-index far more frequently than Google, and there's less competition per query.</div>
      </div>
      <div class="webflur-faq-item">
        <button type="button" class="webflur-faq-q faq-question" aria-expanded="true">What kind of B2B companies do you work with?</button>
        <div class="webflur-faq-a" role="region" aria-label="Answer">B2B founders and operators with a defined offer, a real point of view, and technical or high-value products. Logistics, procurement, compliance, dev tools, security, healthcare tech. If your buyers are the kind who now open ChatGPT before Google, and your competitors are winning those answers, WebFlur was built for you.</div>
      </div>
      <div class="webflur-faq-item">
        <button type="button" class="webflur-faq-q faq-question" aria-expanded="true">Do you work with our existing tech stack?</button>
        <div class="webflur-faq-a" role="region" aria-label="Answer">Yes. We're stack-agnostic — WordPress, Webflow, Next.js, custom stacks all work. What matters is your ability to ship HTML changes, publish structured data, and stand up an /.well-known/agent-card.json endpoint. We handle the strategy and implementation; your dev team ships the code (or ours does).</div>
      </div>
  </section>
  </article>
  </main>
  <footer id="cta">
    <div class="footer-wedge"></div>
    <div class="container footer-inner">
      <div class="footer-brand">
        <div class="footer-mark"><picture><img src="assets/logo/logo-diamond-white.svg" alt="WebFlur diamond mark"/></picture></div>
        <div class="footer-logo">webflur</div>
        <div class="footer-tag">we go agentic</div>
                <div class="footer-socials" aria-label="WebFlur on social media">
        <a href="https://www.linkedin.com/in/webflur-studio-359566408/" target="_blank" rel="noopener me" aria-label="WebFlur on LinkedIn" title="LinkedIn">
          <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M20.45 20.45h-3.56v-5.57c0-1.33-.03-3.04-1.85-3.04-1.85 0-2.13 1.45-2.13 2.95v5.66H9.35V9h3.42v1.56h.05c.48-.9 1.64-1.85 3.37-1.85 3.6 0 4.27 2.37 4.27 5.45v6.29ZM5.34 7.44a2.06 2.06 0 1 1 0-4.12 2.06 2.06 0 0 1 0 4.12ZM7.12 20.45H3.56V9h3.56v11.45ZM22.23 0H1.77C.79 0 0 .77 0 1.72v20.56C0 23.23.79 24 1.77 24h20.46c.98 0 1.77-.77 1.77-1.72V1.72C24 .77 23.21 0 22.23 0Z"/></svg>
        </a>
        <a href="https://x.com/Webflur" target="_blank" rel="noopener me" aria-label="WebFlur on X" title="X (Twitter)">
          <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231 5.45-6.231Zm-1.161 17.52h1.833L7.084 4.126H5.117l11.966 15.644Z"/></svg>
        </a>
        <a href="https://www.instagram.com/webflur/" target="_blank" rel="noopener me" aria-label="WebFlur on Instagram" title="Instagram">
          <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 2.16c3.2 0 3.58.01 4.85.07 1.17.05 1.8.25 2.23.41.56.22.96.48 1.38.9.42.42.68.82.9 1.38.16.42.36 1.06.41 2.23.06 1.26.07 1.65.07 4.85s-.01 3.58-.07 4.85c-.05 1.17-.25 1.8-.41 2.23-.22.56-.48.96-.9 1.38-.42.42-.82.68-1.38.9-.42.16-1.06.36-2.23.41-1.26.06-1.65.07-4.85.07s-3.58-.01-4.85-.07c-1.17-.05-1.8-.25-2.23-.41a3.7 3.7 0 0 1-1.38-.9 3.7 3.7 0 0 1-.9-1.38c-.16-.42-.36-1.06-.41-2.23-.06-1.26-.07-1.65-.07-4.85s.01-3.58.07-4.85c.05-1.17.25-1.8.41-2.23.22-.56.48-.96.9-1.38.42-.42.82-.68 1.38-.9.42-.16 1.06-.36 2.23-.41C8.42 2.17 8.8 2.16 12 2.16ZM12 0C8.74 0 8.33.01 7.05.07 5.78.13 4.9.33 4.14.63a5.86 5.86 0 0 0-2.12 1.38A5.86 5.86 0 0 0 .63 4.13c-.3.77-.5 1.65-.56 2.92C.01 8.33 0 8.74 0 12s.01 3.67.07 4.95c.06 1.27.26 2.15.56 2.92.3.8.72 1.47 1.38 2.12.65.66 1.33 1.07 2.12 1.38.77.3 1.65.5 2.92.56C8.33 23.99 8.74 24 12 24s3.67-.01 4.95-.07c1.27-.06 2.15-.26 2.92-.56a5.86 5.86 0 0 0 2.12-1.38 5.86 5.86 0 0 0 1.38-2.12c.3-.77.5-1.65.56-2.92.06-1.28.07-1.69.07-4.95s-.01-3.67-.07-4.95c-.06-1.27-.26-2.15-.56-2.92a5.86 5.86 0 0 0-1.38-2.12A5.86 5.86 0 0 0 19.86.63c-.77-.3-1.65-.5-2.92-.56C15.67.01 15.26 0 12 0Zm0 5.84A6.16 6.16 0 1 0 12 18.16 6.16 6.16 0 0 0 12 5.84Zm0 10.16A4 4 0 1 1 12 8a4 4 0 0 1 0 8Zm6.4-11.85a1.44 1.44 0 1 0 0 2.88 1.44 1.44 0 0 0 0-2.88Z"/></svg>
        </a>
        <a href="https://www.facebook.com/profile.php?id=61596372143405" target="_blank" rel="noopener me" aria-label="WebFlur on Facebook" title="Facebook">
          <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M24 12.07C24 5.4 18.63 0 12 0S0 5.4 0 12.07C0 18.1 4.39 23.1 10.13 24v-8.44H7.08v-3.49h3.05V9.41c0-3.02 1.79-4.69 4.53-4.69 1.31 0 2.69.24 2.69.24v2.97h-1.52c-1.49 0-1.96.93-1.96 1.89v2.26h3.33l-.53 3.49h-2.8V24C19.61 23.1 24 18.1 24 12.07Z"/></svg>
        </a>
        <a href="https://in.pinterest.com/webflurstudio/" target="_blank" rel="noopener me" aria-label="WebFlur on Pinterest" title="Pinterest">
          <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.08 3.16 9.42 7.62 11.17-.11-.95-.2-2.4.04-3.44.22-.93 1.4-5.95 1.4-5.95s-.36-.72-.36-1.78c0-1.67.97-2.92 2.17-2.92 1.03 0 1.52.77 1.52 1.7 0 1.03-.66 2.58-1 4.01-.29 1.2.6 2.18 1.78 2.18 2.14 0 3.78-2.26 3.78-5.51 0-2.88-2.07-4.9-5.03-4.9-3.43 0-5.44 2.57-5.44 5.23 0 1.03.4 2.15.9 2.75.1.12.11.23.08.35-.09.38-.29 1.2-.33 1.37-.05.22-.17.27-.4.16-1.5-.7-2.44-2.89-2.44-4.65 0-3.79 2.75-7.27 7.93-7.27 4.16 0 7.4 2.97 7.4 6.93 0 4.14-2.61 7.47-6.23 7.47-1.22 0-2.36-.63-2.75-1.38l-.75 2.85c-.27 1.04-1 2.35-1.49 3.14 1.12.35 2.31.53 3.55.53 6.63 0 12-5.37 12-12S18.63 0 12 0Z"/></svg>
        </a>
      </div>
        <div class="footer-powered">Powered by <a href="#">Trend Tube</a></div>
      </div>
      <aside class="footer-aside"><div class="footer-cta">
        <div class="founder-row">
          <div class="founder-card">
            <figure class="content-figure"><picture><source srcset="/pankaj_new.webp" type="image/webp"><img src="/pankaj_new.jpg" alt="Pankaj Raghav, Founder of WebFlur — AI SEO agency for B2B"></picture></figure>
            <div class="founder-card-content">
              <div class="founder-name">Pankaj</div>
              <div class="founder-role">Founder, WebFlur</div>
            </div>
          </div>
          <div class="founder-card">
            <picture><img src="nick.webp" alt="Nick Smith, Co-Founder of WebFlur — A2A protocol and AI crawler engineer"></picture>
            <div class="founder-card-content">
              <div class="founder-name">Nick Smith</div>
              <div class="founder-role">Co-Founder, WebFlur</div>
            </div>
          </div>
        </div>
        <h3>Talk to an <em>engineer</em>, not sales</h3>
        <a href="talk-to-us.html" class="btn btn-blue"><span class="label-swap"><span class="label-default">Talk to us</span><span class="label-hover">Let's chat</span></span></a>
      </div>
    </div>
    <div class="container footer-bottom">
      <div>© <time datetime="2026">2026</time> <a href="/" style="color:inherit;text-decoration:underline;text-underline-offset:2px;">WebFlur</a>. All rights reserved.</div>
      <div class="footer-nav">
        <a href="manifesto.html">Manifesto</a>
        <a href="solutions.html">Solutions</a>
        <a href="cases.html">Cases</a>
        <a href="blog.html">Blog</a>
        <a href="about.html">About</a>
        <a href="locations/gurgaon.html">Gurgaon</a>
        <a href="locations/new-york.html">New York</a>
      </div>
      <div class="footer-meta">
        <a href="/privacy">Privacy</a>
        <a href="/imprint">Imprint</a>
        <a href="#">Cookies</a>
        <a href="https://www.linkedin.com/in/webflur-studio-359566408/" target="_blank" rel="noopener me" class="follow-pill" aria-label="Follow WebFlur on LinkedIn">in &nbsp;Follow us</a>
      </div>
    </div>
  </aside>
      <address class="footer-address" style="text-align:center;font-style:normal;margin-top:12px;font-size:14px;color:var(--text-mute,#999);">
        Contact: <a href="mailto:talktous@webflur.com" style="color:inherit;">talktous@webflur.com</a> · <a href="tel:+919599955465" style="color:inherit;">+91-9599955465</a> (India)<br>
        Offices: <a href="locations/gurgaon.html" style="color:inherit;text-decoration:underline;">Gurgaon, India</a> · <a href="locations/new-york.html" style="color:inherit;text-decoration:underline;">New York, USA</a>
      </address>
  </footer>

  <!-- ─── SCRIPTS ─────────────────────────────────────────────── -->
  <script>
    /* ── Preloader timeline (wgb.agency-style) ── */
    (function runPreloader() {
      const reduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
      const preloader = document.getElementById('preloader');
      if (!preloader) return;

      // GSAP may not have loaded; if so, just hide preloader and reveal hero.
      if (typeof gsap === 'undefined') {
        document.body.classList.remove('preload-armed');
        preloader.remove();
        return;
      }

      if (typeof CustomEase !== 'undefined') {
        gsap.registerPlugin(CustomEase);
        CustomEase.create('osmo', '0.625, 0.05, 0, 1');
        gsap.defaults({ ease: 'osmo', duration: 0.6 });
      }
      if (typeof SplitText !== 'undefined') gsap.registerPlugin(SplitText);

      const orbitWrap = document.getElementById('preloader-orbit');
      const rings     = [
        document.getElementById('pre-ring-1'),
        document.getElementById('pre-ring-2'),
        document.getElementById('pre-ring-3'),
      ].filter(Boolean);
      const labelText = document.getElementById('preloader-label-text');

      const heroH1     = document.querySelector('.hero h1');
      const heroSub    = document.querySelector('.hero-sub');
      const heroBtn1   = document.querySelector('.hero-actions .btn:nth-child(1)');
      const heroBtn2   = document.querySelector('.hero-actions .btn:nth-child(2)');
      const heroVisual = document.querySelector('.hero-visual');
      const heroOrbitSvg = document.getElementById('hero-orbit-svg');
      const navEl      = document.querySelector('nav');

      // Position the preloader orbit exactly over .hero-visual
      function placeOverHeroVisual() {
        if (!heroVisual || !orbitWrap) return;
        const r = heroVisual.getBoundingClientRect();
        gsap.set(orbitWrap, {
          top:  r.top  + window.scrollY,
          left: r.left + window.scrollX,
          width:  r.width,
          height: r.height,
        });
      }
      placeOverHeroVisual();
      window.addEventListener('resize', placeOverHeroVisual);

      // Reveal hero containers (CSS hid them via .preload-armed)
      document.body.classList.remove('preload-armed');
      // Re-hide via GSAP so the timeline can drive them.
      // .hero-visual stays VISIBLE in layout (so getBoundingClientRect is right),
      // but the SVG inside it is hidden until the handoff.
      gsap.set([heroH1, heroSub, heroBtn1, heroBtn2, navEl].filter(Boolean), { autoAlpha: 0 });
      if (heroOrbitSvg) gsap.set(heroOrbitSvg, { autoAlpha: 0 });

      if (reduced) {
        gsap.set([heroH1, heroSub, heroBtn1, heroBtn2, navEl].filter(Boolean), { autoAlpha: 1, y: 0 });
        if (heroOrbitSvg) gsap.set(heroOrbitSvg, { autoAlpha: 1 });
        preloader.remove();
        return;
      }

      // Split hero copy into masked lines
      let h1Lines = null, subLines = null;
      if (typeof SplitText !== 'undefined') {
        if (heroH1)  h1Lines  = new SplitText(heroH1,  { type: 'lines', linesClass: 'gsap-line', mask: 'lines', reduceWhiteSpace: false });
        if (heroSub) subLines = new SplitText(heroSub, { type: 'lines', linesClass: 'gsap-line', mask: 'lines', reduceWhiteSpace: false });
      }

      // Initial pose
      if (h1Lines)  gsap.set(h1Lines.lines,  { yPercent: -100 });
      if (subLines) gsap.set(subLines.lines, { yPercent: -100 });
      gsap.set(heroH1,     { autoAlpha: 1 });
      gsap.set(heroSub,    { autoAlpha: 1 });
      gsap.set(heroBtn1,   { yPercent: -110, autoAlpha: 1 });
      gsap.set(heroBtn2,   { yPercent: -110, autoAlpha: 1 });
      gsap.set(navEl,      { y: -100, autoAlpha: 1 });

      // Stroke-draw setup for the three rings
      rings.forEach(r => {
        const len = r.getTotalLength();
        r.style.stroke = 'var(--ink)';
        r.style.strokeWidth = '1';
        r.style.fill = 'none';
        gsap.set(r, { strokeDasharray: len, strokeDashoffset: len, opacity: 1 });
      });
      gsap.set(orbitWrap, { autoAlpha: 1 });

      const tl = gsap.timeline();

      // 1. Three rings draw in, outer → inner
      rings.forEach((ring, i) => {
        tl.to(ring, { strokeDashoffset: 0, duration: 1.4, ease: 'power2.inOut' }, i * 0.18);
      });

      // 2. Brand label rises in the middle
      tl.to(labelText, { yPercent: 0, duration: 0.65, ease: 'power3.out' }, 0.5);

      // 3. Background dissolves (orbit stays in place)
      tl.to('.preloader-bg', { autoAlpha: 0, duration: 0.55, ease: 'power2.out' }, 1.85);

      // 4. Nav drops in
      tl.to(navEl, { y: 0, duration: 0.55, ease: 'power3.inOut' }, 2.0);

      // 5. Hero H1 lines reveal
      if (h1Lines) {
        tl.to(h1Lines.lines, { yPercent: 0, duration: 0.55, ease: 'power3.out', stagger: 0.04 }, 2.1);
      } else if (heroH1) {
        tl.to(heroH1, { autoAlpha: 1, duration: 0.5 }, 2.1);
      }

      // 6. Subhead lines reveal
      if (subLines) {
        tl.to(subLines.lines, { yPercent: 0, duration: 0.55, ease: 'power1.out', stagger: 0.03 }, 2.25);
      } else if (heroSub) {
        tl.to(heroSub, { autoAlpha: 1, duration: 0.5 }, 2.25);
      }

      // 7. Buttons slide down
      tl.to(heroBtn1, { yPercent: 0, duration: 0.55, ease: 'power3.out' }, 2.4);
      tl.to(heroBtn2, { yPercent: 0, duration: 0.55, ease: 'power3.out' }, 2.44);

      // 8. Handoff: live hero orbit fades in underneath the preloader rings,
      //    label fades out, then preloader is removed.
      if (heroOrbitSvg) tl.to(heroOrbitSvg, { autoAlpha: 1, duration: 0.6, ease: 'power2.out' }, 2.45);
      tl.to(labelText,       { yPercent: -110, duration: 0.45, ease: 'power3.in' }, 2.55);
      tl.to(orbitWrap,       { autoAlpha: 0, duration: 0.5, ease: 'power2.out' },   2.85);
      tl.to('.preloader-bg', { autoAlpha: 0, duration: 0.0 },                       2.85);

      // 9. Tear down preloader DOM
      tl.call(() => {
        preloader.remove();
        window.removeEventListener('resize', placeOverHeroVisual);
      }, null, 3.45);
    })();

    /* ── Trust Engine scroll-orbit (wgb.agency replica) ──
       Ports initOrbitScroll() from slater.app/19355/57209.js
       ───────────────────────────────────────────────────── */
    (function initOrbitScroll() {
      if (typeof gsap === 'undefined' || typeof ScrollTrigger === 'undefined') return;
      gsap.registerPlugin(ScrollTrigger);

      const root = document.querySelector('[data-orbit-scroll]');
      if (!root) return;

      // Helper — convert ellipse param angle (deg) to (x,y)
      function pointOnEllipse(cx, cy, rx, ry, angleDeg) {
        const a = angleDeg * Math.PI / 180;
        return { x: cx + rx * Math.cos(a), y: cy + ry * Math.sin(a) };
      }

      const rings   = [root.querySelector('#orbit-1'),       root.querySelector('#orbit-2'),       root.querySelector('#orbit-3')];
      const blues   = [root.querySelector('#orbit-1-blue'),  root.querySelector('#orbit-2-blue'),  root.querySelector('#orbit-3-blue')];
      const floats  = [root.querySelector('#float-1'),       root.querySelector('#float-2'),       root.querySelector('#float-3')];
      const dots    = [root.querySelector('#dot-1'),         root.querySelector('#dot-2'),         root.querySelector('#dot-3')];
      const labels  = [root.querySelector('#label-1'),       root.querySelector('#label-2'),       root.querySelector('#label-3')];
      const star    = root.querySelector('#center-star');

      // Stroke-draw setup
      rings.forEach(r => {
        if (!r) return;
        const len = r.getTotalLength();
        r.style.strokeDasharray  = len;
        r.style.strokeDashoffset = len;
      });

      // Idle loop kicks in once ignition completes
      let idleTweens = [];
      function startIdle() {
        // Reverse order — innermost float starts last (matches wgb)
        [...floats].filter(Boolean).reverse().forEach((el, i) => {
          idleTweens.push(gsap.to(el, {
            y: -32, duration: 4, delay: 0.5 * i,
            ease: 'sine.inOut', yoyo: true, repeat: -1,
          }));
        });
        if (star) {
          idleTweens.push(gsap.to(star.querySelector('path') || star, {
            scale: 1.03, transformOrigin: 'center center',
            duration: 3.5, ease: 'sine.inOut', yoyo: true, repeat: -1,
          }));
        }
      }

      // Center diamond color targets per panel:
      // Intro = warm-white, Idea = light-blue tint, Amplify = mid-blue,
      // Discover = full brand blue. Driven by ScrollTrigger onEnter/Back.
      const starPath = star ? star.querySelector('path') : null;
      const STAR_COLORS = {
        intro:    '#FFF5EF',
        idea:     '#A9B7FF',
        amplify:  '#5C73FF',
        discover: '#1F3CFF',
      };

      function setStarColor(hex) {
        if (!starPath) return;
        gsap.to(starPath, { fill: hex, duration: 0.6, ease: 'power2.out' });
      }

      // Per-panel spotlight — when a text panel enters viewport, light up the
      // matching blue overlay(s). Pass an array of indexes to light up multiple
      // rings at once (used for the final "Discover" panel — all three glow).
      // Each panel can also set the center diamond's target color, so the
      // sparkle slowly shifts from cream → blue as the user scrolls.
      function bindPanel(indexOrIndexes, panelSel, opts) {
        const panel = root.querySelector(panelSel);
        if (!panel) return;
        const idxs = Array.isArray(indexOrIndexes) ? indexOrIndexes : [indexOrIndexes];
        const targets = idxs.map(i => blues[i]).filter(Boolean);

        const tlIn  = gsap.timeline({ paused: true });
        if (targets.length) tlIn.to(targets, { opacity: 1, duration: 0.4, ease: 'power2.out', stagger: 0.08 });
        const tlOut = gsap.timeline({ paused: true });
        if (targets.length) tlOut.to(targets, { opacity: 0, duration: 0.25, ease: 'power2.in' });

        const colorIn  = opts && opts.colorIn;
        const colorOut = opts && opts.colorOut;

        ScrollTrigger.create({
          trigger: panel,
          start:   'top 60%',
          end:     'bottom 40%',
          onEnter:     () => { tlOut.pause(0); tlIn.restart(); if (colorIn)  setStarColor(colorIn); },
          onLeave:     () => { /* stay lit — next panel will take over */ },
          onEnterBack: () => { tlOut.pause(0); tlIn.restart(); if (colorIn)  setStarColor(colorIn); },
          onLeaveBack: () => { tlOut.restart();                if (colorOut) setStarColor(colorOut); },
        });
      }

      // Ignition timeline — fires once when section enters
      const ignite = gsap.timeline({
        paused: true,
        defaults: { ease: 'power2.inOut' },
        onComplete: startIdle,
      });
      ignite.to(star,     { opacity: 1, duration: 0.6, ease: 'power2.out' }, 0);
      ignite.to(rings[0], { strokeDashoffset: 0, duration: 1.6 }, 0);
      ignite.to(dots[0],  { opacity: 1, duration: 0.3 }, 0.9);
      ignite.to(labels[0],{ opacity: 1, duration: 0.5 }, 1.0);
      ignite.to(rings[1], { strokeDashoffset: 0, duration: 1.6 }, 0.25);
      ignite.to(dots[1],  { opacity: 1, duration: 0.3 }, 1.1);
      ignite.to(labels[1],{ opacity: 1, duration: 0.5 }, 1.2);
      ignite.to(rings[2], { strokeDashoffset: 0, duration: 1.6 }, 0.5);
      ignite.to(dots[2],  { opacity: 1, duration: 0.3 }, 1.3);
      ignite.to(labels[2],{ opacity: 1, duration: 0.5 }, 1.4);

      ScrollTrigger.create({
        trigger: root,
        start: 'top 65%',
        once: true,
        onEnter: () => ignite.play(),
      });

      // Bind each text panel to its matching ring's blue overlay.
      // The final "Discover" panel ignites ALL three rings AND turns the
      // center diamond fully blue — the funnel completes, the orbit ignites.
      bindPanel(0,         '#scroll-idea',     { colorIn: STAR_COLORS.idea,     colorOut: STAR_COLORS.intro });
      bindPanel(1,         '#scroll-amplify',  { colorIn: STAR_COLORS.amplify,  colorOut: STAR_COLORS.idea });

      // Special handling for Discover: rings stay lit as long as the panel is
      // in or past viewport. They only fade when user scrolls completely past it.
      const discoverPanel = root.querySelector('#scroll-discover');
      if (discoverPanel) {
        const discoverTargets = blues.filter(Boolean);
        const tlIn = gsap.timeline({ paused: true });
        tlIn.to(discoverTargets, { opacity: 1, duration: 0.4, ease: 'power2.out', stagger: 0.08 });
        const tlOut = gsap.timeline({ paused: true });
        tlOut.to(discoverTargets, { opacity: 0, duration: 0.25, ease: 'power2.in' });

        ScrollTrigger.create({
          trigger: discoverPanel,
          start: 'top 60%',
          end: 'top top',  // Fade out only when top of panel scrolls completely past top of viewport
          onEnter:     () => { tlOut.pause(0); tlIn.restart(); setStarColor(STAR_COLORS.discover); },
          onLeave:     () => { /* keep star blue as user scrolls past */ },
          onLeaveBack: () => { tlOut.restart(); setStarColor(STAR_COLORS.amplify); },
        });
      }

    })();

    /* ── Service stack: cards slide in from right, accumulate side-by-side ── */
    (function initServiceScroll() {
      const section = document.getElementById('service-stack');
      const track   = document.getElementById('service-track');
      if (!section || !track) return;

      if (typeof gsap === 'undefined' || typeof ScrollTrigger === 'undefined') return;

      const mm = gsap.matchMedia();

      mm.add("(min-width: 981px)", () => {
        const cards = gsap.utils.toArray('.service-row', track);
        gsap.set(cards, { x: '100vw' });

        const tl = gsap.timeline();
        tl.to(cards[0], { x: 0, duration: 1, ease: 'power3.out' }, 0);
        tl.to(cards[1], { x: 0, duration: 1, ease: 'power3.out' }, 0.5);
        tl.to(cards[2], { x: 0, duration: 1, ease: 'power3.out' }, 1.0);

        ScrollTrigger.create({
          trigger: section,
          start: 'top top',
          end: '+=200%',
          pin: true,
          scrub: 1,
          animation: tl,
        });
      });

      // Mobile (≤980px): CSS stacks the rows vertically, so no GSAP pin/scrub
      // is needed. Skipping prevents the section from trapping scroll.
    })();

    /* ── B: Cases marquee — wgb.agency scroll-direction technique ──
       On mobile we use a CSS-only marquee (defined in the mobile patch).
       Skip JS init entirely on touch / narrow viewports to avoid clashing
       with the CSS animation. */
    (function initCasesMarquee() {
      document.querySelectorAll('[data-marquee]').forEach(wrapper => {
        if (wrapper.dataset.marqueeReady === '1') return;
        wrapper.dataset.marqueeReady = '1';

        const inner = wrapper.querySelector('[data-marquee-inner]');
        const track = wrapper.querySelector('[data-marquee-track]');
        if (!inner || !track) return;

        // Clone track for infinite looping
        const clone = track.cloneNode(true);
        inner.appendChild(clone);

        const goLeft = wrapper.dataset.marqueeDirection !== 'right';
        const pxPerFrame = 0.8; 
        
        let scrollPos = 0;
        let isHoveredOrTouched = false;

        // Pause auto-scroll on interaction so native scroll/swipe takes over
        wrapper.addEventListener('mouseenter', () => isHoveredOrTouched = true);
        wrapper.addEventListener('mouseleave', () => isHoveredOrTouched = false);
        wrapper.addEventListener('touchstart', () => isHoveredOrTouched = true, {passive: true});
        wrapper.addEventListener('touchend', () => isHoveredOrTouched = false, {passive: true});
        wrapper.addEventListener('wheel', () => {
            isHoveredOrTouched = true;
            clearTimeout(wrapper.wheelTimeout);
            wrapper.wheelTimeout = setTimeout(() => isHoveredOrTouched = false, 500);
        }, {passive: true});

        function tick() {
          let trackW = track.offsetWidth;
          if (trackW === 0) {
            requestAnimationFrame(tick);
            return;
          }

          if (!isHoveredOrTouched) {
             scrollPos += goLeft ? pxPerFrame : -pxPerFrame;
             
             // Wrap around automatically
             if (scrollPos >= trackW) {
                scrollPos -= trackW;
             } else if (scrollPos <= 0) {
                scrollPos += trackW;
             }
             
             wrapper.scrollLeft = scrollPos;
          } else {
             // Sync internal pos with actual scrollLeft during interaction
             scrollPos = wrapper.scrollLeft;
             
             // Also wrap around if user scrolls past bounds manually
             if (scrollPos >= trackW) {
                wrapper.scrollLeft = scrollPos - trackW;
                scrollPos = wrapper.scrollLeft;
             } else if (scrollPos <= 0) {
                wrapper.scrollLeft = scrollPos + trackW;
                scrollPos = wrapper.scrollLeft;
             }
          }
          requestAnimationFrame(tick);
        }
        
        // Delay start slightly to ensure layout is measured correctly
        setTimeout(() => {
          if (!goLeft) wrapper.scrollLeft = track.offsetWidth;
          scrollPos = wrapper.scrollLeft;
          requestAnimationFrame(tick);
        }, 500);
      });
    })();

    /* ── Orbit: upright base pose + continuous breathing + cursor influence ── */
    function bindOrbitTilt(orbit, container) {
      // Base pose: strong forward tilt so rings read as flat ellipses
      // (top-down ¾ view), with a slight Z roll for character.
      const BASE_X = 62;   // strong forward tilt — rings appear as ellipses
      const BASE_Y = 0;    // face viewer
      const BASE_Z = -22;  // counter-clockwise roll matches reference
      let rx = BASE_X, ry = BASE_Y, rz = BASE_Z;
      let tx = BASE_X, ty = BASE_Y, tz = BASE_Z;
      let mx = 0, my = 0;        // cursor offset (-0.5..0.5)
      let mxT = 0, myT = 0;
      const start = performance.now();

      container.addEventListener('mousemove', (e) => {
        const r = container.getBoundingClientRect();
        mxT = (e.clientX - r.left) / r.width  - 0.5;
        myT = (e.clientY - r.top)  / r.height - 0.5;
      });
      container.addEventListener('mouseleave', () => { mxT = 0; myT = 0; });

      function loop(now) {
        // Breathing: slow sinusoidal modulation of tilt (period ~9s X, ~13s Y)
        const t = (now - start) / 1000;
        const breathX = Math.sin(t * (2 * Math.PI / 9))  * 8;   // ±8°
        const breathY = Math.sin(t * (2 * Math.PI / 13)) * 6;   // ±6°
        const breathZ = Math.sin(t * (2 * Math.PI / 17)) * 3;   // ±3°

        // Smoothly track cursor target
        mx += (mxT - mx) * 0.06;
        my += (myT - my) * 0.06;

        tx = BASE_X + breathX + my * 18;
        ty = BASE_Y + breathY + mx * 28;
        tz = BASE_Z + breathZ;

        rx += (tx - rx) * 0.12;
        ry += (ty - ry) * 0.12;
        rz += (tz - rz) * 0.12;

        orbit.style.transform = `rotateX(${rx}deg) rotateY(${ry}deg) rotateZ(${rz}deg)`;
        requestAnimationFrame(loop);
      }
      orbit.style.transform = `rotateX(${BASE_X}deg) rotateY(${BASE_Y}deg) rotateZ(${BASE_Z}deg)`;
      requestAnimationFrame(loop);
    }

    /* Hero SVG orbit: rings & center breathe via CSS keyframes — labels stay put. */

    const teOrbit = document.getElementById('te-orbit');
    const teVisual = teOrbit?.parentElement;
    if (teOrbit && teVisual) bindOrbitTilt(teOrbit, teVisual);

    /* ── Sticky service stack: switch active glow ring as user scrolls ── */
    const stackGlow = document.getElementById('stack-glow');
    const stackOrbit = document.getElementById('stack-orbit');
    const serviceRows = document.querySelectorAll('.service-row[data-service]');
    const glowInsets = [200, 130, 70];  // r3, r2, r1 — inner to outer

    if (stackOrbit) bindOrbitTilt(stackOrbit, stackOrbit.parentElement);

    if (stackGlow && serviceRows.length) {
      const obs = new IntersectionObserver((entries) => {
        entries.forEach(e => {
          if (e.isIntersecting && e.intersectionRatio > 0.4) {
            const idx = parseInt(e.target.dataset.service, 10);
            stackGlow.style.inset = glowInsets[idx] + 'px';
            stackGlow.classList.add('active');
          }
        });
      }, { threshold: [0.4, 0.6] });
      serviceRows.forEach(r => obs.observe(r));
    }

    /* ── Reveal on scroll (skip problem-grid cells — handled by stagger) ── */
    const revealObs = new IntersectionObserver((entries) => {
      entries.forEach(e => {
        if (e.isIntersecting) {
          e.target.classList.add('in');
          revealObs.unobserve(e.target);
        }
      });
    }, { threshold: 0.15 });
    document.querySelectorAll('.reveal').forEach(el => {
      if (el.closest('#problem-grid')) return;
      revealObs.observe(el);
    });

    /* ── Build dual testimonial marquees ── */
    const quotes = [
      { name: 'Sarah Okonkwo',   role: 'Founder, Cargoflow Inc.',   body: 'Within six weeks our agent endpoint was answering RFQs from three different AI assistants. Two became closed deals.' },
      { name: 'James Farrell',   role: 'CEO, Farrell & Dunn',       body: 'WebFlur extracted a decade of pricing logic into a clean A2A surface. Our quote-to-cash got pulled into Copilot conversations we never would have seen.' },
      { name: 'Tom Reidy',       role: 'CEO, Redbrick Labs',         body: 'They treat the agent layer like product, not marketing. Versioned, monitored, instrumented. That seriousness is rare.' },
      { name: 'Dr. Claire Ashton',role: 'Co-founder, Clarendon Medical', body: 'The signal data alone changed our roadmap. We can finally see which agents query us and what they ask for.' },
      { name: 'Mio Tanaka',      role: 'CEO, Optima',                body: 'Nearly 100% of our new pipeline now starts inside an AI assistant conversation. The handshake matters.' },
      { name: 'Marcus Harwick',  role: 'Founder, Harwick Supply Co.', body: 'Five-month sales cycle, and our agent stayed in front of buyers the entire time. Pipeline has never been this full.' },
      { name: 'Guido Thiemann',  role: 'MD, Pushfire',               body: 'Niklas and team understand both the spec and the pragmatics. They ship the right thing, not the impressive thing.' },
      { name: 'Anya Petrov',     role: 'CTO, Lumenly',               body: 'Our Agent Card is now the most-requested artifact on our infra. Sales hands it out before any deck.' },
    ];

    function buildTrack(track, list) {
      const items = [...list, ...list];
      track.innerHTML = items.map(q => `
        <div class="quote-card">
          <div class="quote-head">
            <div class="quote-avatar"></div>
            <div>
              <div class="quote-name">${q.name}</div>
              <div class="quote-role">${q.role}</div>
            </div>
          </div>
          <div class="quote-body">${q.body}</div>
        </div>
      `).join('');
    }

    const trackA = document.getElementById('track-a');
    const trackB = document.getElementById('track-b');
    if (trackA) buildTrack(trackA, quotes.slice(0, 4));
    if (trackB) buildTrack(trackB, quotes.slice(4, 8));



    /* ── Magnetic hover on .btn + .nav-cta ── */
    (function initMagnetic() {
      const PULL = 0.38;
      document.querySelectorAll('.btn, .nav-cta').forEach(el => {
        let ox = 0, oy = 0;
        el.addEventListener('mousemove', e => {
          const r  = el.getBoundingClientRect();
          const cx = r.left + r.width  / 2;
          const cy = r.top  + r.height / 2;
          const dx = (e.clientX - cx) * PULL;
          const dy = (e.clientY - cy) * PULL;
          ox += (dx - ox) * 0.22;
          oy += (dy - oy) * 0.22;
          el.style.transform = `translate(${ox}px, ${oy}px)`;
        });
        el.addEventListener('mouseleave', () => {
          ox = 0; oy = 0;
          el.style.transform = '';
        });
      });
    })();

    /* ── Stagger problem grid with delay ── */
    (function initGridStagger() {
      const cells = document.querySelectorAll('#problem-grid .problem-cell.reveal');
      if (!cells.length) return;
      const obs = new IntersectionObserver((entries) => {
        entries.forEach(e => {
          if (e.isIntersecting) {
            const idx = Array.from(cells).indexOf(e.target);
            setTimeout(() => {
              e.target.classList.add('in');
            }, idx * 90);
            obs.unobserve(e.target);
          }
        });
      }, { threshold: 0.1 });
      cells.forEach(c => obs.observe(c));
    })();

    /* ── Animated stat counters ── */
    (function initCounters() {
      const cells = document.querySelectorAll('[data-count]');
      if (!cells.length) return;
      const obs = new IntersectionObserver((entries) => {
        entries.forEach(e => {
          if (!e.isIntersecting) return;
          obs.unobserve(e.target);
          const el     = e.target;
          const target = parseInt(el.dataset.count, 10);
          const suffix = el.dataset.suffix || '';
          const dur    = 1400;
          const start  = performance.now();
          function step(now) {
            const t    = Math.min((now - start) / dur, 1);
            const ease = 1 - Math.pow(1 - t, 3);
            const val  = Math.round(ease * target);
            if (suffix === '/10') {
              el.innerHTML = `<em>${val}</em>/10`;
            } else {
              el.textContent = val + suffix;
            }
            if (t < 1) requestAnimationFrame(step);
          }
          requestAnimationFrame(step);
        });
      }, { threshold: 0.4 });
      cells.forEach(c => obs.observe(c));
    })();

    /* ── Hero orbit SVG parallax on scroll ── */
    (function initOrbitParallax() {
      const svg = document.getElementById('hero-orbit-svg');
      if (!svg || typeof ScrollTrigger === 'undefined') return;
      ScrollTrigger.create({
        trigger: '.hero',
        start: 'top top',
        end: 'bottom top',
        onUpdate: self => {
          const y = self.progress * 60;
          svg.style.transform = `translateY(${y}px)`;
        },
      });
    })();

    /* ── Word-split stagger reveals on .split-reveal headings ── */
    (function initSplitReveal() {
      document.querySelectorAll('.split-reveal').forEach(el => {
        const walker = document.createTreeWalker(el, NodeFilter.SHOW_TEXT);
        const textNodes = [];
        let node;
        while ((node = walker.nextNode())) textNodes.push(node);

        textNodes.forEach(tn => {
          const parent = tn.parentNode;
          const text   = tn.textContent;
          const parts  = text.split(/(\s+)/);
          const frag   = document.createDocumentFragment();
          parts.forEach(part => {
            if (/^\s+$/.test(part)) {
              frag.appendChild(document.createTextNode(part));
            } else if (part.length > 0) {
              const span = document.createElement('span');
              span.className = 'word';
              span.textContent = part;
              frag.appendChild(span);
            }
          });
          parent.replaceChild(frag, tn);
        });
      });

      const obs = new IntersectionObserver((entries) => {
        entries.forEach(e => {
          if (!e.isIntersecting) return;
          const words = e.target.querySelectorAll('.word');
          words.forEach((w, i) => {
            w.style.transitionDelay = (i * 0.04) + 's';
          });
          e.target.classList.add('in');
          obs.unobserve(e.target);
        });
      }, { threshold: 0.2 });

      document.querySelectorAll('.split-reveal').forEach(el => obs.observe(el));
    })();

  </script>

  <script>
    (function(){
      var btn = document.querySelector('.nav-hamburger');
      var overlay = document.querySelector('.mobile-nav-overlay');
      if (!btn || !overlay) return;
      var closing = false;

      function closeMenu() {
        if (closing) return;
        closing = true;
        overlay.classList.remove('open');
        btn.classList.remove('open');
        setTimeout(function(){
          overlay.style.display = 'none';
          closing = false;
        }, 300);
      }

      function openMenu() {
        closing = false;
        overlay.style.display = 'block';
        requestAnimationFrame(function(){
          requestAnimationFrame(function(){
            overlay.classList.add('open');
            btn.classList.add('open');
          });
        });
      }

      btn.addEventListener('click', function(e){
        e.stopPropagation();
        overlay.classList.contains('open') ? closeMenu() : openMenu();
      });

      /* Close on any nav link tap */
      overlay.querySelectorAll('a').forEach(function(a){
        a.addEventListener('click', closeMenu);
      });

      /* Close if clicking outside */
      document.addEventListener('click', function(e) {
        if (overlay.classList.contains('open') && !btn.contains(e.target) && !overlay.contains(e.target)) {
          closeMenu();
        }
      });
    })();
  </script>

<script src="/a2a-widget.js"></script>
</body>
</html>
