VibeCoderzVibeCoderz
Telegram
All Prompts
Interactive SaaS Pricing & Feature Showcase Section preview
pricingtailwindresponsiveanimationinteractivelanding-pagesaascardssection

Interactive SaaS Pricing & Feature Showcase Section

Интерактивный блок цен SaaS: выбор тарифа, анимация фич. Адаптивный дизайн, Tailwind CSS. Идеален для лендингов SaaS.

Prompt

<section class="z-10 sm:px-6 lg:px-8 [animation:fadeSlideIn_0.8s_ease-out_0.1s_both] animate-on-scroll max-w-7xl mr-auto ml-auto pt-20 pr-4 pb-16 pl-4 relative" id="pricing">
  <div class="relative overflow-hidden rounded-3xl ring-1 ring-white/10 bg-neutral-950 backdrop-blur">
    <!-- Subtle decor (neutral) -->
    <div class="pointer-events-none absolute -right-24 -top-24 h-72 w-72 rounded-full bg-white/6 blur-3xl"></div>
    <div class="pointer-events-none absolute -left-24 -bottom-24 h-72 w-72 rounded-full bg-white/5 blur-3xl"></div>

    <div class="grid grid-cols-1 lg:grid-cols-2 items-stretch">
      <!-- LEFT -->
      <div class="sm:p-10 flex flex-col pt-6 pr-6 pb-6 pl-6">
        <!-- Eyebrow -->
        <span class="inline-flex items-center gap-2 text-[11px] text-zinc-300/90 bg-white/5 w-fit border-white/10 border rounded-full pt-1.5 pr-3 pb-1.5 pl-3">// FEATURE</span>

        <!-- Heading -->
        <h2 class="sm:text-5xl md:text-5xl text-4xl font-semibold text-white tracking-tight mt-4">
          Everything you need<span class="block">to build smarter</span>
        </h2>

        <p class="md:text-lg text-base text-zinc-300/90 max-w-2xl mt-4">
          AI-powered tools designed to accelerate your workflow and unlock your creative potential.
        </p>

        <!-- Cards (neutral) -->
        <div class="mt-10 space-y-6">
          <!-- Card 1: AI Assistant -->
          <section class="group overflow-hidden md:p-6 ring-white/10 ring-1 rounded-3xl pt-5 pr-5 pb-5 pl-5 relative" id="card-ai">
            <div class="absolute inset-0 pointer-events-none bg-gradient-to-b from-white/5 to-transparent"></div>
            <div class="rounded-2xl bg-gradient-to-b from-white/5 to-white/[0.03] p-4 ring-1 ring-white/10 backdrop-blur">
              <div class="flex items-center gap-2 text-white/80 text-sm mb-3">
                <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" style="color: rgb(255, 255, 255); width: 16px; height: 16px" class="lucide lucide-sparkles text-white/80 w-[16px] h-[16px]" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" data-solar="star-outline" data-icon-set="solar" data-icon-replaced="true" stroke-width="1.5"><path fill="#ffffff" fill-rule="evenodd" d="M11.292 3.308c-.394.514-.838 1.308-1.484 2.466l-.327.587l-.059.106c-.3.54-.555.998-.964 1.308c-.413.314-.917.427-1.503.559l-.114.026l-.636.144c-1.255.284-2.11.479-2.694.71c-.571.224-.691.409-.737.556c-.049.156-.05.395.29.937c.347.55.932 1.236 1.786 2.236l.434.507l.075.087c.403.47.739.862.893 1.358c.153.493.102 1.01.04 1.638l-.01.117l-.066.677c-.13 1.332-.216 2.25-.187 2.91c.03.66.169.842.28.926c.098.075.28.157.873-.013c.603-.172 1.405-.539 2.58-1.08l.596-.274l.109-.05c.545-.253 1.017-.471 1.533-.471s.988.218 1.533.47q.053.026.11.05l.595.275c1.175.541 1.977.908 2.58 1.08c.593.17.775.088.873.013c.111-.084.25-.267.28-.926c.03-.66-.058-1.578-.187-2.91l-.066-.677l-.01-.117c-.062-.628-.113-1.145.04-1.638c.154-.496.49-.888.893-1.358l.075-.087l.434-.507c.854-1 1.439-1.686 1.785-2.236c.341-.542.34-.78.291-.937c-.046-.147-.166-.332-.737-.556c-.585-.231-1.439-.426-2.694-.71l-.636-.144l-.114-.026c-.586-.132-1.09-.245-1.503-.559c-.41-.31-.663-.767-.964-1.308l-.058-.106l-.328-.587c-.646-1.158-1.09-1.952-1.484-2.466S12.114 2.75 12 2.75s-.315.044-.708.558m-1.19-.912C10.577 1.774 11.166 1.25 12 1.25s1.422.524 1.899 1.146c.468.612.965 1.503 1.572 2.592l.359.643c.392.704.493.854.619.95c.12.091.277.143 1.04.316l.7.158c1.176.266 2.145.485 2.85.763c.732.289 1.373.714 1.62 1.507c.244.785-.03 1.507-.454 2.18c-.412.655-1.07 1.425-1.874 2.365l-.475.555c-.517.604-.625.752-.676.915c-.051.167-.047.36.032 1.165l.071.738c.122 1.256.221 2.28.186 3.06c-.035.795-.215 1.557-.87 2.055c-.668.506-1.445.45-2.195.234c-.727-.208-1.633-.625-2.733-1.132l-.656-.302c-.718-.33-.871-.383-1.015-.383s-.297.053-1.015.383l-.655.302c-1.101.507-2.007.924-2.734 1.132c-.75.215-1.527.272-2.194-.234c-.656-.498-.836-1.26-.871-2.054c-.035-.78.064-1.805.186-3.06l.072-.739c.078-.806.082-.998.03-1.165c-.05-.163-.158-.31-.675-.915l-.475-.555c-.803-.94-1.461-1.71-1.873-2.364c-.425-.674-.699-1.396-.455-2.181c.247-.793.888-1.218 1.62-1.507c.705-.278 1.674-.497 2.85-.763l.063-.014l.636-.144c.764-.173.92-.225 1.041-.317c.126-.095.227-.245.62-.949l.358-.643c.607-1.09 1.104-1.98 1.572-2.592" clip-rule="evenodd" class=""></path></svg>
                <span class="font-medium">AI Writing Assistant</span>
              </div>

              <div class="space-y-3">
                <div class="rounded-xl bg-white/[0.04] p-3 ring-1 ring-white/10">
                  <div class="flex items-start gap-3">
                    <div class="flex-1">
                      <p class="text-sm text-white/90 mb-2">Generate content instantly</p>
                      <div id="typing-demo" class="text-xs text-white/60 font-mono h-8">B</div>
                    </div>
                  </div>
                </div>
              </div>
            </div>

            <h3 class="mt-5 text-xl md:text-2xl font-semibold tracking-tight">Smart AI Assistant</h3>
            <p class="mt-1.5 text-sm text-white/70">
              Let AI handle the heavy lifting. Generate content, refine ideas, and boost productivity in seconds.
            </p>

            <script type="module">
              const rootAI = document.querySelector('#card-ai');
              const demoEl = rootAI.querySelector('#typing-demo');
              const textStr = "Building the future...";
              let idx = 0;
              const typeLoop = () => {
                if (idx < textStr.length) {
                  demoEl.textContent += textStr.charAt(idx++);
                  setTimeout(typeLoop, 100);
                } else {
                  setTimeout(() => { demoEl.textContent = ''; idx = 0; typeLoop(); }, 2000);
                }
              };
              typeLoop();
            </script>
          </section>

          <!-- Card 2: Analytics -->
          <section class="group overflow-hidden md:p-6 rounded-3xl ring-white/10 ring-1 pt-5 pr-5 pb-5 pl-5 relative" id="card-analytics">
            <div class="absolute inset-0 pointer-events-none bg-gradient-to-b from-white/5 to-transparent"></div>
            <div class="rounded-2xl bg-gradient-to-b from-white/5 to-white/[0.03] p-4 ring-1 ring-white/10 backdrop-blur">
              <div class="flex items-center gap-2 text-white/80 text-sm mb-3">
                <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-trending-up h-4 w-4 text-white/80">
                  <path d="M16 7h6v6" class=""></path><path d="m22 7-8.5 8.5-5-5L2 17" class=""></path>
                </svg>
                <span class="font-medium">Performance Insights</span>
              </div>

              <div class="grid grid-cols-2 gap-3">
                <div class="rounded-xl bg-white/[0.04] p-3 ring-1 ring-white/10">
                  <p class="text-xs text-white/60 mb-1">Projects</p>
                  <p class="text-2xl font-semibold text-white">142</p>
                  <p class="text-xs mt-1 text-white/70">+12% this week</p>
                </div>
                <div class="rounded-xl bg-white/[0.04] p-3 ring-1 ring-white/10">
                  <p class="text-xs text-white/60 mb-1">Efficiency</p>
                  <p class="text-2xl font-semibold text-white">94%</p>
                  <p class="text-xs mt-1 text-white/70">+8% improvement</p>
                </div>
              </div>
            </div>

            <h3 class="mt-5 text-xl md:text-2xl font-semibold tracking-tight">Advanced Analytics</h3>
            <p class="mt-1.5 text-sm text-white/70">
              Track your progress with detailed insights. Make data-driven decisions to optimize your workflow.
            </p>
          </section>
        </div>

        <div class="mt-auto"></div>
      </div>

      <!-- RIGHT (3 cards) -->
      <div class="flex flex-col gap-6 p-6 sm:p-10 lg:col-start-2">
        <!-- Card 3: Collaboration -->
        <section id="card-collab" class="group relative overflow-hidden rounded-3xl bg-white/[0.04] ring-1 ring-white/10 p-5 md:p-6">
          <div class="absolute inset-0 pointer-events-none bg-gradient-to-b from-white/5 to-transparent"></div>

          <div class="rounded-2xl bg-gradient-to-b from-white/5 to-white/[0.03] p-4 ring-1 ring-white/10 backdrop-blur">
            <div class="flex items-center gap-2 text-white/80 text-sm mb-3">
              <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-users h-4 w-4 text-white/80">
                <path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" class=""></path>
                <path d="M16 3.128a4 4 0 0 1 0 7.744" class=""></path>
                <path d="M22 21v-2a4 4 0 0 0-3-3.87" class=""></path>
                <circle cx="9" cy="7" r="4" class=""></circle>
              </svg>
              <span class="font-medium">Team Collaboration</span>
            </div>

            <div class="flex items-center gap-2">
              <img src="https://hoirqrkdgbmvpwutwuwj-all.supabase.co/storage/v1/object/public/assets/assets/4c9aa348-4474-47a8-8f1e-3fe52ac8d2b9_320w.webp" class="w-8 h-8 rounded-full ring-white/20 ring-2 object-cover" alt="user">
              <img src="https://hoirqrkdgbmvpwutwuwj-all.supabase.co/storage/v1/object/public/assets/assets/ca687bcc-f3d6-4ed6-9efe-e0fd4cbe69a9_320w.webp" class="h-8 w-8 rounded-full ring-2 ring-white/20 -ml-3 object-cover" alt="user">
              <img src="https://hoirqrkdgbmvpwutwuwj-all.supabase.co/storage/v1/object/public/assets/assets/39e15168-9f77-4837-9a4b-89c74b8bc38b_320w.webp" class="h-8 w-8 rounded-full ring-2 ring-white/20 -ml-3 object-cover" alt="user">
              <div class="flex items-center justify-center h-8 w-8 rounded-full bg-white/10 ring-2 ring-white/20 -ml-3">
                <span class="text-xs text-white/80">+5</span>
              </div>
            </div>

            <div class="mt-3 space-y-2">
              <div class="h-2 w-full rounded-full bg-white/10 overflow-hidden">
                <div class="h-full rounded-full bg-white/60" style="width: 68%"></div>
              </div>
              <p class="text-xs text-white/60">8 team members active</p>
            </div>
          </div>

          <h3 class="mt-5 text-xl md:text-2xl font-semibold tracking-tight">Real-Time Collaboration</h3>
          <p class="mt-1.5 text-sm text-white/70">Work together seamlessly with your team. Share, edit, and create in real-time from anywhere.</p>
        </section>

        <!-- Card 4: Workflow Automation -->
        <section class="group overflow-hidden md:p-6 ring-1 ring-white/10 rounded-3xl pt-5 pr-5 pb-5 pl-5 relative" id="card-automation">
          <div class="absolute inset-0 pointer-events-none bg-gradient-to-b from-white/5 to-transparent"></div>

          <div class="rounded-2xl bg-gradient-to-b from-white/5 to-white/[0.03] p-4 ring-1 ring-white/10 backdrop-blur">
            <div class="flex items-center gap-2 text-white/80 text-sm mb-3">
              <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-workflow h-4 w-4 text-white/80">
                <rect width="8" height="8" x="3" y="3" rx="2" class=""></rect>
                <path d="M7 11v4a2 2 0 0 0 2 2h4" class=""></path>
                <rect width="8" height="8" x="13" y="13" rx="2" class=""></rect>
              </svg>
              <span class="font-medium">Smart Workflows</span>
            </div>

            <div class="space-y-2">
              <div class="flex items-center gap-2 text-xs text-white/70">
                <div class="h-2 w-2 rounded-full bg-white/60"></div>
                <span class="">Auto-save enabled</span>
              </div>
              <div class="flex items-center gap-2 text-xs text-white/70">
                <div class="h-2 w-2 rounded-full bg-white/50"></div>
                <span class="">Cloud sync active</span>
              </div>
              <div class="flex items-center gap-2 text-xs text-white/70">
                <div class="h-2 w-2 rounded-full bg-white/40"></div>
                <span class="">AI backup running</span>
              </div>
            </div>
          </div>

          <h3 class="mt-5 text-xl md:text-2xl font-semibold tracking-tight">Workflow Automation</h3>
          <p class="mt-1.5 text-sm text-white/70">Automate repetitive tasks and focus on what matters. Set it once and let Runlyx handle the rest.</p>
        </section>

        <!-- Card 5: Security & Compliance (NEW) -->
        <section class="group overflow-hidden md:p-6 ring-1 ring-white/10 rounded-3xl pt-5 pr-5 pb-5 pl-5 relative" id="card-security">
          <div class="absolute inset-0 pointer-events-none bg-gradient-to-b from-white/5 to-transparent"></div>

          <div class="rounded-2xl bg-gradient-to-b from-white/5 to-white/[0.03] p-4 ring-1 ring-white/10 backdrop-blur">
            <div class="flex items-center gap-2 text-white/80 text-sm mb-3">
              <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield-check h-4 w-4 text-white/80">
                <path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10" class=""></path>
                <path d="m9 12 2 2 4-4" class=""></path>
              </svg>
              <span class="font-medium">Security &amp; Compliance</span>
            </div>

            <ul class="space-y-2 text-sm text-white/80">
              <li class="flex items-start gap-2">
                <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check mt-0.5 text-white/70"><path d="M20 6 9 17l-5-5" class=""></path></svg>
                <span>Role-based access controls</span>
              </li>
              <li class="flex items-start gap-2">
                <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check mt-0.5 text-white/70"><path d="M20 6 9 17l-5-5" class=""></path></svg>
                <span class="">Data encryption at rest &amp; in transit</span>
              </li>
              <li class="flex items-start gap-2">
                <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check mt-0.5 text-white/70"><path d="M20 6 9 17l-5-5" class=""></path></svg>
                <span class="">Audit logs &amp; export</span>
              </li>
            </ul>
          </div>

          <h3 class="mt-5 text-xl md:text-2xl font-semibold tracking-tight">Enterprise-grade Protection</h3>
          <p class="mt-1.5 text-sm text-white/70">Keep your data safe with built-in controls and transparent auditing.</p>
        </section>
      </div>
    </div>

    <!-- Behavior (unchanged core, only visuals/cards updated) -->
    <script>
      (function () {
        const root = document.getElementById('pricing');
        if (!root) return;

        const state = { plan: 'starter', billing: 'monthly' };

        const plans = {
          starter: {
            name: 'Starter',
            tagline: 'Perfect for solo/small teams validating a first pilot.',
            priceMonthly: 499,
            priceAnnual: 5490,
            cta: { label: 'Get Started', href: '#join' },
            features: [
              'ONE PILOT (AUTO/CHAT/VOICE)',
              'LIGHT WORKFLOW REVIEW',
              'UP TO 2 INTEGRATIONS',
              'KB PREP (BASIC)',
              'CORE GUARDRAILS & PROMPTS',
              'ANALYTICS LITE (USAGE/KPIS)',
              'EMAIL SUPPORT (48H) + 1 TRAINING'
            ]
          },
          pro: {
            name: 'Pro',
            tagline: 'For teams scaling pilots into production systems.',
            priceMonthly: 2499,
            priceAnnual: 26990,
            cta: { label: 'Start Pro', href: '#join' },
            features: [
              'UP TO 5 PILOTS',
              'FULL WORKFLOW REVIEW',
              'UP TO 10 INTEGRATIONS',
              'KB PREP (ADVANCED)',
              'CUSTOM GUARDRAILS & PROMPTS',
              'ANALYTICS PRO + DASHBOARDS',
              'PRIORITY SUPPORT (24H) + 2 TRAININGS'
            ]
          },
          enterprise: {
            name: 'Enterprise',
            tagline: 'Custom, secure, enterprise-grade with SLAs.',
            priceMonthly: null,
            priceAnnual: null,
            cta: { label: 'Contact Sales', href: '#contact' },
            features: [
              'UNLIMITED PILOTS',
              'DEDICATED SOLUTIONS ENGINEER',
              'UNLIMITED INTEGRATIONS',
              'SSO / SOC2 / DPA / SLAS',
              'ADVANCED ANALYTICS + CUSTOM KPIS',
              '24/7 SUPPORT & ONBOARDING',
              'CUSTOM TRAINING PROGRAMS'
            ]
          }
        };

        const els = {
          tabs: root.querySelectorAll('.billing-tab'),
          planButtons: root.querySelectorAll('[data-plan-select]'),
          planName: root.querySelector('#planName'),
          planPrice: root.querySelector('#planPrice'),
          planPriceSuffix: root.querySelector('#planPriceSuffix'),
          planTagline: root.querySelector('#planTagline'),
          featureList: root.querySelector('#featureList'),
          ctaBtn: root.querySelector('#ctaBtn')
        };

        const checkSVG =
          '<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check text-white/70 mt-0.5"><path d="M20 6 9 17l-5-5"></path></svg>';

        function formatPrice(v) {
          return (typeof v === 'number') ? `$${v.toLocaleString()}` : 'Custom';
        }

        function setSelectedPlanButton() {
          els.planButtons.forEach(btn => {
            const isActive = btn.getAttribute('data-plan-select') === state.plan;
            btn.classList.toggle('bg-white/[0.05]', isActive);
            btn.classList.toggle('ring-white/10', true);
          });
        }

        function setBillingTabs() {
          els.tabs.forEach(tab => {
            const active = tab.getAttribute('data-billing') === state.billing;
            tab.classList.toggle('text-white', active);
            tab.classList.toggle('text-zinc-300', !active);
            tab.classList.toggle('bg-white/[0.08]', active);
            tab.classList.toggle('ring-1', active);
            tab.classList.toggle('ring-white/20', active);
          });
        }

        function render() {
          const cfg = plans[state.plan];

          els.planName.textContent = cfg.name;
          els.planTagline.textContent = cfg.tagline.toUpperCase();

          const price = (state.billing === 'monthly') ? cfg.priceMonthly : cfg.priceAnnual;
          els.planPrice.textContent = formatPrice(price);
          els.planPriceSuffix.textContent =
            (typeof price === 'number')
              ? (state.billing === 'monthly' ? '/month' : '/yr')
              : '';

          els.ctaBtn.textContent = cfg.cta.label;
          els.ctaBtn.setAttribute('href', cfg.cta.href);

          els.featureList.innerHTML = cfg.features
            .map(f => `<li class="flex items-start gap-2">${checkSVG}<span>${f}</span></li>`)
            .join('');

          setSelectedPlanButton();
          setBillingTabs();
        }

        els.planButtons.forEach(btn => {
          btn.addEventListener('click', () => {
            state.plan = btn.getAttribute('data-plan-select');
            render();
          });
        });

        els.tabs.forEach(tab => {
          btn => {};
          tab.addEventListener('click', () => {
            state.billing = tab.getAttribute('data-billing');
            render();
          });
        });

        render();
      })();
    </script>
  </div>
</section>
All Prompts