VibeCoderzVibeCoderz
Telegram
All Prompts
Animated Real Estate Hero with Search Filter preview
herosectiontailwindanimatedresponsivereal-estatelanding

Animated Real Estate Hero with Search Filter

Полноэкранный анимированный блок недвижимости с фильтром поиска. Идеально для лендингов отелей, аренды и продажи жилья. Адаптивный дизайн.

Prompt

<!DOCTYPE html>
<html lang="en" class="scroll-smooth">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>NOVERA — Hero</title>

  <!-- Fonts (optional): original file preconnects only, no explicit family import.
       Keep as-is unless you want a specific font import. -->
  <link rel="preconnect" href="https://fonts.googleapis.com">
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>

  <!-- Tailwind (Required) -->
  <script src="https://cdn.tailwindcss.com"></script>

  <!-- Iconify (Required for dropdown icons) -->
  <script src="https://code.iconify.design/iconify-icon/1.0.7/iconify-icon.min.js"></script>

  <!-- GSAP (Required for hero animation) -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/gsap.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/ScrollTrigger.min.js"></script>

  <style>
    body {
      background-color: #f9f8f6;
      color: #1c1917;
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
    }

    .fade-in-up {
      opacity: 0;
      transform: translateY(8px);
      animation: fadeInUp 1s cubic-bezier(0.16, 1, 0.3, 1) forwards;
    }

    @keyframes fadeInUp {
      to {
        opacity: 1;
        transform: translateY(0);
      }
    }

    @media (prefers-reduced-motion: reduce) {
      .fade-in-up {
        opacity: 1 !important;
        transform: none !important;
        animation: none !important;
      }
    }
  </style>
</head>

<body class="font-sans font-light text-primary selection:bg-primary selection:text-white">

  <!-- Hero Section -->
  <header
    class="relative w-full h-screen min-h-[700px] flex flex-col justify-end pb-24 md:pb-32 px-6 md:px-12 overflow-hidden">
    <!-- Background -->
    <div class="absolute inset-0 z-0">
      <img
        src="https://hoirqrkdgbmvpwutwuwj.supabase.co/storage/v1/object/public/assets/assets/46011e44-1f9d-4c5e-b716-300b8ce1381e_3840w.jpg"
        alt="Luxury Interior"
        class="w-full h-full object-cover hero-bg-img"
      />
      <div class="absolute inset-0 bg-black/10"></div>
      <div class="absolute inset-0 bg-gradient-to-t from-black/40 to-transparent"></div>
    </div>

    <!-- Content -->
    <div class="relative z-10 w-full max-w-[1400px] mx-auto fade-in-up">
      <div class="max-w-4xl">
        <span class="block text-[10px] uppercase tracking-widest text-white/60 font-sans mb-6">
          Montreal, Quebec
        </span>

        <h1 class="text-4xl md:text-6xl lg:text-7xl text-white font-serif tracking-tight leading-[1.1] mb-6 opacity-0">
          <span class="block overflow-hidden">
            <span class="inline-block overflow-hidden align-top">
              <span class="inline-block hero-word transform translate-y-full">Sanctuary</span>
          </span>
          <span class="inline-block overflow-hidden align-top">
              <span class="inline-block hero-word transform translate-y-full">in</span>
          </span>
          <span class="inline-block overflow-hidden align-top">
              <span class="inline-block hero-word transform translate-y-full">the</span>
          </span>
          </span>
          <span class="block overflow-hidden">
            <span class="inline-block overflow-hidden align-top">
              <span class="inline-block hero-word transform translate-y-full">Heart</span>
          </span>
          <span class="inline-block overflow-hidden align-top">
              <span class="inline-block hero-word transform translate-y-full">of</span>
          </span>
          <span class="inline-block overflow-hidden align-top">
              <span class="inline-block hero-word transform translate-y-full">Montreal.</span>
          </span>
          </span>
        </h1>

        <p class="text-white/90 text-sm md:text-base font-sans font-light mb-12 max-w-lg">
          Premium rental residences designed for refined urban living.
        </p>

        <!-- Minimal Search Bar -->
        <div
          class="mt-16 bg-white/10 backdrop-blur-md border border-white/20 rounded-[2px] px-8 py-6 flex flex-col md:flex-row items-center gap-6 max-w-5xl hero-search-bar opacity-0 translate-y-10 scale-95 origin-center">
          <div class="w-full md:flex-1 group cursor-pointer">
            <span class="block text-white/50 text-[10px] uppercase tracking-widest mb-2 group-hover:text-white transition-colors duration-300">
              Neighbourhood
            </span>
            <div
              class="flex items-center justify-between border-b border-white/20 pb-2 group-hover:border-white transition-colors duration-300">
              <span class="text-white text-sm font-light">Neighbourhoods</span>
              <iconify-icon icon="solar:alt-arrow-down-linear"
                class="text-white/70 group-hover:text-white"></iconify-icon>
            </div>
          </div>

          <div class="w-full md:flex-1 group cursor-pointer">
            <span class="block text-white/50 text-[10px] uppercase tracking-widest mb-2 group-hover:text-white transition-colors duration-300">
              Bedrooms
            </span>
            <div
              class="flex items-center justify-between border-b border-white/20 pb-2 group-hover:border-white transition-colors duration-300">
              <span class="text-white text-sm font-light">2 Bedrooms</span>
              <iconify-icon icon="solar:alt-arrow-down-linear"
                class="text-white/70 group-hover:text-white"></iconify-icon>
            </div>
          </div>

          <div class="w-full md:flex-1 group cursor-pointer">
            <span class="block text-white/50 text-[10px] uppercase tracking-widest mb-2 group-hover:text-white transition-colors duration-300">
              Price Range
            </span>
            <div
              class="flex items-center justify-between border-b border-white/20 pb-2 group-hover:border-white transition-colors duration-300">
              <span class="text-white text-sm font-light">Any Price</span>
              <iconify-icon icon="solar:alt-arrow-down-linear"
                class="text-white/70 group-hover:text-white"></iconify-icon>
            </div>
          </div>

          <div class="w-full md:flex-1 group cursor-pointer">
            <span class="block text-white/50 text-[10px] uppercase tracking-widest mb-2 group-hover:text-white transition-colors duration-300">
              Availability
            </span>
            <div
              class="flex items-center justify-between border-b border-white/20 pb-2 group-hover:border-white transition-colors duration-300">
              <span class="text-white text-sm font-light">Immediate</span>
              <iconify-icon icon="solar:alt-arrow-down-linear"
                class="text-white/70 group-hover:text-white"></iconify-icon>
            </div>
          </div>

          <div class="w-full md:w-auto mt-4 md:mt-0">
            <button class="w-full text-[10px] uppercase tracking-widest bg-white text-primary px-6 py-3 rounded-[2px] font-medium hover:bg-primary hover:text-white transition-all duration-400">
              View Available Residences
            </button>
          </div>
        </div>
      </div>
    </div>
  </header>

  <script>
    document.addEventListener("DOMContentLoaded", () => {
      const reduceMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
      if (reduceMotion) {
        // Make sure hero content is visible with no animations.
        const h1 = document.querySelector("h1");
        const searchBar = document.querySelector(".hero-search-bar");
        if (h1) h1.style.opacity = "1";
        document.querySelectorAll(".hero-word").forEach(w => (w.style.transform = "translateY(0)"));
        if (searchBar) {
          searchBar.style.opacity = "1";
          searchBar.style.transform = "translateY(0) scale(1)";
        }
        return;
      }

      gsap.registerPlugin(ScrollTrigger);

      // 1) Hero Headline Reveal
      gsap.to("h1", { opacity: 1, duration: 0.2 });
      gsap.to(".hero-word", {
        y: "0%",
        duration: 1.4,
        ease: "power4.out",
        stagger: 0.06,
        delay: 0.2
      });

      // 2) Hero Image Parallax
      gsap.to(".hero-bg-img", {
        yPercent: 15,
        ease: "none",
        scrollTrigger: {
          trigger: "header",
          start: "top top",
          end: "bottom top",
          scrub: true
        }
      });

      // 3) Search Bar Intro
      gsap.to(".hero-search-bar", {
        y: 0,
        opacity: 1,
        scale: 1,
        duration: 1.2,
        delay: 0.8,
        ease: "power3.out"
      });
    });
  </script>

</body>

</html>
All Prompts