shadimage

Hero 1

A split-screen hero section with branding, theme toggle, video, work, and contact cards.

registry/designali/blocks/hero/hero-1.tsx

"use client";

import Link from "next/link";

import {
  ArrowDown,
  ArrowRight,
  Moon,
  Sun,
} from "lucide-react";

import { Button } from "@workspace/ui/components/button";
import { Card } from "@workspace/ui/components/card";
import { useTheme } from "next-themes";
import { useEffect, useState } from "react";
import { Logo } from "@/src/components/logo";

export function HeroSection() {
  const { theme, setTheme } = useTheme();
  const [mounted, setMounted] = useState(false);

  useEffect(() => {
    setMounted(true);
  }, []);

  return (
    <section className="min-h-screen w-full bg-background text-foreground">
      <div className="grid min-h-screen grid-cols-1 lg:grid-cols-2">

        <div className="relative flex min-h-screen flex-col border-r border-border">

          <div className="relative flex h-[150px] items-center overflow-hidden border-b border-border px-8 sm:px-12 lg:px-16">

            <div
              className="
                pointer-events-none
                absolute
                inset-0
                opacity-40
                dark:opacity-20
              "
              style={{
                backgroundImage:
                  "radial-gradient(circle, currentColor 1.5px, transparent 1.5px)",
                backgroundSize: "22px 22px",
              }}
            />


            <div className="pointer-events-none absolute inset-0 bg-gradient-to-r from-background/90 via-background/80 to-background" />

            {/* Logo */}
            <div className="relative z-10">
              <Link
                href="/"
                className="uppercase
                  text-4xl 
                  font-medium
                  flex gap-4
                  items-center
                "
              >
                <Logo className="h-8 w-full" />
                designali
              </Link>
            </div>

            {/* Theme Button */}
            <div className="relative z-10 ml-auto">
              {mounted && (
                <Button
                  variant="outline"
                  size="icon"
                  className="rounded-full"
                  onClick={() =>
                    setTheme(theme === "dark" ? "light" : "dark")
                  }
                >
                  {theme === "dark" ? (
                    <Sun className="size-4" />
                  ) : (
                    <Moon className="size-4" />
                  )}

                  <span className="sr-only">
                    Toggle theme
                  </span>
                </Button>
              )}
            </div>
          </div>

          {/* --------------------------------------------- */}
          {/* CONTENT */}
          {/* --------------------------------------------- */}

          <div className="flex flex-1 flex-col justify-end px-8 py-12 sm:px-12 lg:px-16 lg:pb-14">

            <div className="max-w-[760px]">

              {/* Heading */}
              <h1
                className="
                  text-3xl
                  md:text-4xl
                  xl:text-5xl
                  font-medium  
                "
              >
                We are a study of production creative
                for CGI, 3D, motion and development web.
              </h1>

              {/* Description */}
              <p
                className="
                  mt-8  
                  text-muted-foreground 
                "
              >
                Designali combines art direction, CGI, motion
                design, web development, and integrated AI
                workflows with ongoing R&D, experimentation,
                and production-ready execution for brands
                and agencies.
              </p>

              {/* Scroll */}
              <Button
                variant="outline"
                className="
                  mt-7 
                  gap-3  
                  text-xs
                  uppercase  
                "
              >
                Scroll to explore
                <ArrowDown className="size-4" />
              </Button>
            </div>
          </div>
        </div>


        <div className="grid min-h-screen grid-rows-[1fr_auto]">

          <div className="relative min-h-[500px] overflow-hidden bg-muted">
            <video
              className="absolute inset-0 h-full w-full object-cover"
              src="/vid/colorful-spheres.mp4"
              autoPlay
              muted
              loop
              playsInline
            />
          </div>

          <div className="grid grid-cols-2">

            {/* WORK */}
            <Card
              className="
                group
                min-h-[280px]
                rounded-none
                border-0
                border-t 
                p-7 
                bg-background  
                text-foreground
              "
            >
              <Link
                href="/work"
                className="
                  flex
                  h-full
                  flex-col
                  justify-between
                "
              >

                <div className="flex justify-end">
                  <ArrowRight
                    className="
                      size-5
                      text-muted-foreground
                      transition-transform
                      duration-300
                      group-hover:translate-x-2
                      group-hover:text-foreground
                    "
                  />
                </div>

                <div>
                  <h2
                    className="
                       text-xl
                      md:text-3xl
                    "
                  >
                    Work
                  </h2>

                  <p className="mt-2 text-sm text-muted-foreground sm:text-base">
                    Explore the portfolio
                  </p>
                </div>

              </Link>
            </Card>

            {/* CONTACT */}
            <Card
              className="
                group
                min-h-[280px]
                rounded-none
                border-0
                border-l
                border-t
                border-border
                bg-foreground
                p-7
                text-background 
              "
            >
              <Link
                href="/contact"
                className="
                  flex
                  h-full
                  flex-col
                  justify-between
                "
              >

                <div className="flex justify-end">
                  <ArrowRight
                    className="
                      size-5
                      opacity-60
                      transition-transform
                      duration-300
                      group-hover:translate-x-2
                    "
                  />
                </div>

                <div>
                  <h2
                    className="
                    text-xl
                      md:text-3xl
                      font-medium
                    "
                  >
                    Contact us
                  </h2>

                  <p className="mt-2 text-sm opacity-60 sm:text-base">
                    Start your project
                  </p>
                </div>

              </Link>
            </Card>

          </div>
        </div>
      </div>
    </section>
  );
}
Where it goes
herologo-cloudcontact