VibeCoderzVibeCoderz
Telegram
All Prompts
Interactive 3D Team Carousel preview
carouselteam3dtailwindinteractiveabout-sectionjavascript

Interactive 3D Team Carousel

Интерактивный 3D карусель команды с карточками участников. Tailwind-стиль, подсветка центральной карточки, градиенты. Для страниц 'О нас' или 'Команда'.

Prompt

<section class="sm:py-24 grid-corners pt-16 pb-16 relative" data-element-locator="html &gt; body:nth-of-type(1) &gt; section:nth-of-type(7)" id="why">
      <div class="grid-corners-bottom"></div>
      <div class="sm:px-6 lg:px-8 max-w-7xl mr-auto ml-auto pr-4 pl-4" data-element-locator="html &gt; body:nth-of-type(1) &gt; section:nth-of-type(7) &gt; div:nth-of-type(2)">
        <div class="animate-in mx-auto max-w-3xl text-center">
          <span class="inline-flex items-center gap-1 rounded-full bg-lime-400/10 px-2 py-1 text-[11px] text-lime-300 ring-1 ring-lime-300/20 uppercase tracking-tight">
            <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-lucide="users" class="lucide lucide-users h-3.5 w-3.5"><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>
            Team
          </span>
          <h2 class="sm:text-5xl text-4xl font-semibold tracking-tight mt-4 karaoke-container" data-karaoke-wrapped="true" data-karaoke-animated="true">
            <span class="karaoke-word"></span>
            <span class="karaoke-word">Meet</span>
            <span class="karaoke-word">the</span>
            <span class="karaoke-word">team</span>
            <span class="karaoke-word">that</span>
            <span class="karaoke-word">talks</span>
            <span class="karaoke-word">to</span>
            <span class="karaoke-word">AI</span>
            <span class="karaoke-word">like</span>
            <span class="karaoke-word">it's</span>
            <span class="karaoke-word">a</span>
            <span class="karaoke-word">pet</span>
            <span class="karaoke-word"></span>
          </h2>
          <p class="mx-auto mt-3 max-w-2xl text-neutral-300 text-sm sm:text-base karaoke-container" data-karaoke-wrapped="true" data-karaoke-animated="true">
            <span class="karaoke-word"></span>
            <span class="karaoke-word">The</span>
            <span class="karaoke-word">humans</span>
            <span class="karaoke-word">behind</span>
            <span class="karaoke-word">the</span>
            <span class="karaoke-word">models</span>
            <span class="karaoke-word">builders,</span>
            <span class="karaoke-word">dreamers,</span>
            <span class="karaoke-word">and</span>
            <span class="karaoke-word">delightful</span>
            <span class="karaoke-word">nerds.</span>
            <span class="karaoke-word"></span>
          </p>
        </div>

        <div class="flex mt-16 relative items-center justify-center" style="perspective: 1200px;">
          <button id="teamPrevBtn" class="absolute left-4 z-20 inline-flex h-12 w-12 items-center justify-center rounded-full bg-black/50 ring-1 ring-white/10 hover:bg-white/5 transition" aria-label="Previous">
            <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="h-5 w-5">
              <path d="m15 18-6-6 6-6" class=""></path>
            </svg>
          </button>

          <div class="relative w-full max-w-md h-[500px] flex items-center justify-center">
            <div class="flex transition-transform duration-500 ease-out absolute top-0 right-0 bottom-0 left-0 items-center justify-center" style="transform-style: preserve-3d;" id="carouselTrack">
  <div class="carousel-card absolute w-80 h-[460px] rounded-2xl overflow-hidden ring-1 ring-white/10 transition-all duration-500" data-index="0" style="transform: translateX(-360px) scale(0.85) rotateY(20deg); opacity: 0.4; filter: brightness(0.6); z-index: 2;">
    <img src="https://hoirqrkdgbmvpwutwuwj-all.supabase.co/storage/v1/object/public/assets/assets/e22892ae-580d-4f98-b6c4-47cacdd0c9d3_800w.webp" alt="Team member" class="h-full w-full object-cover">
    <div class="absolute inset-0 bg-gradient-to-t from-black/80 via-black/30 to-transparent"></div>
    <div class="absolute bottom-6 left-6 right-6">
      <div class="inline-flex items-center gap-2 rounded-full bg-white/10 px-3 py-1 text-xs ring-1 ring-white/20 mb-3">
        <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="h-3 w-3 text-lime-300">
          <path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" class=""></path>
          <circle cx="9" cy="7" r="4" class=""></circle>
          <path d="M22 21v-2a4 4 0 0 0-3-3.87" class=""></path>
          <path d="M16 3.13a4 4 0 0 1 0 7.75" class=""></path>
        </svg>
        <span class="text-white">Growth Lead</span>
      </div>
      <p class="text-xl font-semibold text-white tracking-tight">
        John Alvarez
      </p>
    </div>
  </div>

  <div class="carousel-card absolute w-80 h-[460px] rounded-2xl overflow-hidden ring-1 ring-white/10 transition-all duration-500" data-index="1" style="transform: translateX(-180px) scale(0.9) rotateY(10deg); opacity: 0.6; filter: brightness(0.75); z-index: 5;">
    <img src="https://hoirqrkdgbmvpwutwuwj-all.supabase.co/storage/v1/object/public/assets/assets/118fb7f9-cdd4-4a2a-89bd-3170e009a9a4_800w.webp" alt="Team member" class="h-full w-full object-cover">
    <div class="absolute inset-0 bg-gradient-to-t from-black/80 via-black/30 to-transparent"></div>
    <div class="absolute bottom-6 left-6 right-6">
      <div class="inline-flex items-center gap-2 rounded-full bg-white/10 px-3 py-1 text-xs ring-1 ring-white/20 mb-3">
        <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="h-3 w-3 text-lime-300">
          <path d="M12 8V4H8" class=""></path>
          <rect width="16" height="12" x="4" y="8" rx="2" class=""></rect>
          <path d="M2 14h2" class=""></path>
          <path d="M20 14h2" class=""></path>
          <path d="M15 13v2" class=""></path>
          <path d="M9 13v2" class=""></path>
        </svg>
        <span class="text-white">AI Lead</span>
      </div>
      <p class="text-xl font-semibold tracking-tight text-white">
        Jackson Mitchel
      </p>
    </div>
  </div>

  <div class="carousel-card absolute w-80 h-[460px] rounded-2xl overflow-hidden ring-2 ring-lime-300/40 bg-lime-400/10 transition-all duration-500" data-index="2" style="transform: translateX(0px) scale(1) rotateY(0deg); opacity: 1; z-index: 10; box-shadow: rgba(163, 230, 53, 0.3) 0px 20px 60px; filter: brightness(1);">
    <img src="https://hoirqrkdgbmvpwutwuwj-all.supabase.co/storage/v1/object/public/assets/assets/5e1c1b8c-f44b-4a81-abaf-0241f388c8ff_800w.jpg" alt="Team member" class="h-full w-full object-cover">
    <div class="absolute inset-0 bg-gradient-to-t from-black/85 via-black/20 to-transparent"></div>
    <div class="absolute top-6 right-6">
      <div class="inline-flex items-center gap-1 rounded-full bg-lime-400 px-3 py-1.5 text-xs font-medium text-neutral-950">
        <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="h-3 w-3">
          <path d="M12 2v20M2 12h20" class=""></path>
        </svg>
        Featured
      </div>
    </div>
    <div class="absolute bottom-8 left-8 right-8">
      <div class="inline-flex items-center gap-2 rounded-full bg-white/10 px-3 py-1.5 text-xs ring-1 ring-white/20 backdrop-blur-md mb-4">
        <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="h-3 w-3 text-lime-300">
          <path d="M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16" class=""></path>
          <rect width="20" height="14" x="2" y="6" rx="2" class=""></rect>
        </svg>
        <span class="text-white">Product Head</span>
      </div>
      <p class="text-3xl font-bold text-white tracking-tight mb-1">
        Jenny Doe
      </p>
      <p class="text-sm text-neutral-300 karaoke-container" data-karaoke-wrapped="true" data-karaoke-animated="true">
        <span class="karaoke-word"></span>
        <span class="karaoke-word">Leading</span>
        <span class="karaoke-word">product</span>
        <span class="karaoke-word">vision</span>
        <span class="karaoke-word">&amp;</span>
        <span class="karaoke-word">strategy</span>
        <span class="karaoke-word"></span>
      </p>
    </div>
  </div>

  <div class="carousel-card absolute w-80 h-[460px] rounded-2xl overflow-hidden ring-1 ring-white/10 transition-all duration-500" data-index="3" style="transform: translateX(180px) scale(0.9) rotateY(-10deg); opacity: 0.6; filter: brightness(0.75); z-index: 5;">
    <img src="https://hoirqrkdgbmvpwutwuwj-all.supabase.co/storage/v1/object/public/assets/assets/6c1697f5-cb65-4307-a9e2-c0560b4e3a68_800w.webp" alt="Team member" class="h-full w-full object-cover">
    <div class="absolute inset-0 bg-gradient-to-t from-black/80 via-black/30 to-transparent"></div>
    <div class="absolute bottom-6 left-6 right-6">
      <div class="inline-flex items-center gap-2 rounded-full bg-white/10 px-3 py-1 text-xs ring-1 ring-white/20 mb-3">
        <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="h-3 w-3 text-lime-300">
          <path d="M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z" class="">
          </path>
        </svg>
        <span class="text-white">Social Media Head</span>
      </div>
      <p class="text-xl font-semibold tracking-tight text-white">
        Armenia Sean
      </p>
    </div>
  </div>

  <div class="carousel-card absolute w-80 h-[460px] rounded-2xl overflow-hidden ring-1 ring-white/10 transition-all duration-500" data-index="4" style="transform: translateX(360px) scale(0.85) rotateY(-20deg); opacity: 0.4; filter: brightness(0.6); z-index: 2;">
    <img src="https://hoirqrkdgbmvpwutwuwj-all.supabase.co/storage/v1/object/public/assets/assets/11c70762-35c0-4a1d-bdd9-40176c7ee60b_800w.webp" alt="Team member" class="h-full w-full object-cover">
    <div class="absolute inset-0 bg-gradient-to-t from-black/80 via-black/30 to-transparent"></div>
    <div class="absolute bottom-6 left-6 right-6">
      <div class="inline-flex items-center gap-2 rounded-full bg-white/10 px-3 py-1 text-xs ring-1 ring-white/20 mb-3">
        <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="h-3 w-3 text-lime-300">
          <path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z" class="">
          </path>
          <polyline points="7.5 4.21 12 6.81 16.5 4.21" class=""></polyline>
          <polyline points="7.5 19.79 7.5 14.6 3 12" class=""></polyline>
          <polyline points="21 12 16.5 14.6 16.5 19.79" class=""></polyline>
          <polyline points="3.27 6.96 12 12.01 20.73 6.96" class=""></polyline>
          <line x1="12" x2="12" y1="22.08" y2="12" class=""></line>
        </svg>
        <span class="text-white">Design Lead</span>
      </div>
      <p class="text-xl font-semibold tracking-tight text-white">
        Maya Patel
      </p>
    </div>
  </div>

  <div class="carousel-card absolute w-80 h-[460px] rounded-2xl overflow-hidden ring-1 ring-white/10 transition-all duration-500" data-index="5" style="transform: translateX(540px) scale(0.75) rotateY(-45deg); opacity: 0; filter: brightness(0.5); z-index: 1;">
    <img src="https://hoirqrkdgbmvpwutwuwj-all.supabase.co/storage/v1/object/public/assets/assets/986db8ed-1c5d-42fb-8c1d-4b3716d2e317_3840w.jpg" alt="Team member" class="h-full w-full object-cover">
    <div class="absolute inset-0 bg-gradient-to-t from-black/80 via-black/30 to-transparent"></div>
    <div class="absolute bottom-6 left-6 right-6">
      <div class="inline-flex items-center gap-2 rounded-full bg-white/10 px-3 py-1 text-xs ring-1 ring-white/20 mb-3">
        <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="h-3 w-3 text-lime-300">
          <rect width="18" height="18" x="3" y="3" rx="2" class=""></rect>
          <path d="M9 3v18" class=""></path>
          <path d="m16 15-3-3 3-3" class=""></path>
        </svg>
        <span class="text-white">Platform Engineer</span>
      </div>
      <p class="text-xl font-semibold tracking-tight text-white">
        Liam Becker
      </p>
    </div>
  </div>
</div>
          </div>

          <button id="teamNextBtn" class="absolute right-4 z-20 inline-flex h-12 w-12 items-center justify-center rounded-full bg-black/50 ring-1 ring-white/10 hover:bg-white/5 transition" aria-label="Next">
            <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="h-5 w-5">
              <path d="m9 18 6-6-6-6" class=""></path>
            </svg>
          </button>
        </div>
      </div>

      <script>
        (function () {
          const cards = [
            { name: 'Sofia Alvarez', role: 'Growth Lead', img: 'https://images.unsplash.com/photo-1547425260-76bcadfb4f2c?w=1200&q=80&auto=format&fit=crop' },
            { name: 'Jackson Mitchel', role: 'AI Lead', img: 'https://images.unsplash.com/photo-1527980965255-d3b416303d12?w=1200&q=80&auto=format&fit=crop' },
            { name: 'John Doe', role: 'Product Head', img: 'https://images.unsplash.com/photo-1544723795-3fb6469f5b39?w=1200&q=80&auto=format&fit=crop' },
            { name: 'Armenia Sean', role: 'Social Media Head', img: 'https://images.unsplash.com/photo-1544005313-94ddf0286df2?w=1200&q=80&auto=format&fit=crop' },
            { name: 'Maya Patel', role: 'Design Lead', img: 'https://images.unsplash.com/photo-1541534401786-2077eed87a2d?w=1200&q=80&auto=format&fit=crop' },
            { name: 'Liam Becker', role: 'Platform Engineer', img: 'https://images.unsplash.com/photo-1544005316-04d7f94c1d27?w=1200&q=80&auto=format&fit=crop' }
          ];

          let currentIndex = 2;
          const prevBtn = document.getElementById('teamPrevBtn');
          const nextBtn = document.getElementById('teamNextBtn');
          const carouselCards = document.querySelectorAll('.carousel-card');

          function updateCarousel() {
            carouselCards.forEach((card, i) => {
              const relativePos = i - currentIndex;
              let transform = '';
              let opacity = 1;
              let filter = 'brightness(1)';
              let zIndex = 1;
              let ringClass = 'ring-1 ring-white/10';
              let shadow = '';

              if (relativePos === 0) {
                transform = 'translateX(0) scale(1) rotateY(0deg)';
                opacity = 1;
                zIndex = 10;
                ringClass = 'ring-2 ring-lime-300/40';
                shadow = '0 20px 60px rgba(163,230,53,0.3)';
              } else if (relativePos === -1) {
                transform = 'translateX(-180px) scale(0.9) rotateY(10deg)';
                opacity = 0.6;
                filter = 'brightness(0.75)';
                zIndex = 5;
              } else if (relativePos === 1) {
                transform = 'translateX(180px) scale(0.9) rotateY(-10deg)';
                opacity = 0.6;
                filter = 'brightness(0.75)';
                zIndex = 5;
              } else if (relativePos === -2) {
                transform = 'translateX(-360px) scale(0.85) rotateY(20deg)';
                opacity = 0.4;
                filter = 'brightness(0.6)';
                zIndex = 2;
              } else if (relativePos === 2) {
                transform = 'translateX(360px) scale(0.85) rotateY(-20deg)';
                opacity = 0.4;
                filter = 'brightness(0.6)';
                zIndex = 2;
              } else {
                transform = `translateX(${relativePos * 180}px) scale(0.75) rotateY(${-relativePos * 15}deg)`;
                opacity = 0;
                filter = 'brightness(0.5)';
                zIndex = 1;
              }

              card.style.transform = transform;
              card.style.opacity = opacity;
              card.style.filter = filter;
              card.style.zIndex = zIndex;
              card.style.boxShadow = shadow;
              card.className = `carousel-card absolute w-80 h-[460px] rounded-2xl overflow-hidden ${ringClass} ${relativePos === 0 ? 'bg-lime-400/10' : ''} transition-all duration-500`;
            });
          }

          if (prevBtn) {
            prevBtn.addEventListener('click', () => {
              currentIndex = (currentIndex - 1 + cards.length) % cards.length;
              updateCarousel();
            });
          }

          if (nextBtn) {
            nextBtn.addEventListener('click', () => {
              currentIndex = (currentIndex + 1) % cards.length;
              updateCarousel();
            });
          }

          updateCarousel();
        })();
      </script>
    </section>
All Prompts