Retour au catalogue

About Founder

Section fondateur : photo placeholder, citation serif, bio courte et role.

aboutsimple Both Responsive a11y
eleganteditorialuniversalagencyportfoliosplit
Theme
"use client";

import { motion } from "framer-motion";
import { Quote, ImageIcon } from "lucide-react";

interface AboutFounderProps {
  name?: string;
  role?: string;
  quote?: string;
  bio?: string;
  imageColor?: string;
}

const EASE = [0.16, 1, 0.3, 1] as const;

export default function AboutFounder({
  name = "Nom du fondateur",
  role = "Fondateur & CEO",
  quote = "Citation inspirante.",
  bio = "Bio courte du fondateur.",
  imageColor = "var(--color-accent)",
}: AboutFounderProps) {
  return (
    <section
      style={{
        paddingTop: "var(--section-padding-y)",
        paddingBottom: "var(--section-padding-y)",
        background: "var(--color-background)",
      }}
    >
      <div
        style={{
          maxWidth: "var(--container-max-width)",
          margin: "0 auto",
          padding: "0 var(--container-padding-x)",
          display: "grid",
          gridTemplateColumns: "320px 1fr",
          gap: "4rem",
          alignItems: "center",
        }}
      >
        {/* Photo placeholder */}
        <motion.div
          initial={{ opacity: 0, scale: 0.95 }}
          whileInView={{ opacity: 1, scale: 1 }}
          viewport={{ once: true }}
          transition={{ duration: 0.6, ease: EASE }}
          style={{
            position: "relative",
            aspectRatio: "3/4",
            borderRadius: "var(--radius-lg)",
            overflow: "hidden",
            display: "flex",
            alignItems: "center",
            justifyContent: "center",
          }}
        >
          <div style={{ position: "absolute", inset: 0, background: imageColor, opacity: 0.12 }} />
          <ImageIcon style={{ width: 48, height: 48, color: "var(--color-foreground-muted)", opacity: 0.25 }} />
        </motion.div>

        {/* Content */}
        <motion.div
          initial={{ opacity: 0, y: 20 }}
          whileInView={{ opacity: 1, y: 0 }}
          viewport={{ once: true }}
          transition={{ duration: 0.6, delay: 0.1, ease: EASE }}
        >
          {/* Quote */}
          <div style={{ position: "relative", marginBottom: "2rem" }}>
            <Quote
              style={{
                width: 32,
                height: 32,
                color: "var(--color-accent)",
                opacity: 0.3,
                marginBottom: "0.75rem",
              }}
            />
            <blockquote
              style={{
                fontFamily: "var(--font-serif)",
                fontSize: "clamp(1.25rem, 2.5vw, 1.75rem)",
                fontStyle: "italic",
                lineHeight: 1.5,
                color: "var(--color-foreground)",
                margin: 0,
                padding: 0,
                border: "none",
              }}
            >
              {quote}
            </blockquote>
          </div>

          {/* Name and role */}
          <div
            style={{
              display: "flex",
              alignItems: "center",
              gap: "1rem",
              marginBottom: "1.5rem",
              paddingBottom: "1.5rem",
              borderBottom: "1px solid var(--color-border)",
            }}
          >
            <div>
              <p
                style={{
                  fontFamily: "var(--font-sans)",
                  fontSize: "1.125rem",
                  fontWeight: 600,
                  color: "var(--color-foreground)",
                  marginBottom: "0.125rem",
                }}
              >
                {name}
              </p>
              <p
                style={{
                  fontSize: "0.875rem",
                  color: "var(--color-accent)",
                  fontWeight: 500,
                }}
              >
                {role}
              </p>
            </div>
          </div>

          {/* Bio */}
          <p
            style={{
              fontSize: "1rem",
              lineHeight: 1.7,
              color: "var(--color-foreground-muted)",
            }}
          >
            {bio}
          </p>
        </motion.div>
      </div>
    </section>
  );
}

Avis