Retour au catalogue

About Numbers

Section a propos centree sur les chiffres cles avec grands nombres en accent.

aboutsimple Both Responsive a11y
boldcorporateuniversalagencysaassplit
Theme
"use client";

import { motion } from "framer-motion";

interface Stat {
  value: string;
  label: string;
}

interface AboutNumbersProps {
  title?: string;
  description?: string;
  stats?: Stat[];
}

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

export default function AboutNumbers({
  title = "Nos chiffres parlent d'eux-memes",
  description = "Depuis notre creation, nous accompagnons des entreprises ambitieuses.",
  stats = [],
}: AboutNumbersProps) {
  return (
    <section
      style={{
        paddingTop: "var(--section-padding-y)",
        paddingBottom: "var(--section-padding-y)",
        background: "var(--color-background)",
      }}
    >
      <div
        className="mx-auto"
        style={{
          maxWidth: "var(--container-max-width)",
          paddingLeft: "var(--container-padding-x)",
          paddingRight: "var(--container-padding-x)",
        }}
      >
        <div className="grid grid-cols-1 lg:grid-cols-2 gap-12 items-center">
          <motion.div
            initial={{ opacity: 0, y: 16 }}
            whileInView={{ opacity: 1, y: 0 }}
            viewport={{ once: true }}
            transition={{ duration: 0.5, ease: EASE }}
          >
            <h2
              className="text-2xl md:text-3xl lg:text-4xl font-bold tracking-tight mb-4"
              style={{ color: "var(--color-foreground)" }}
            >
              {title}
            </h2>
            <p className="text-sm leading-relaxed" style={{ color: "var(--color-foreground-muted)" }}>
              {description}
            </p>
          </motion.div>

          <div className="grid grid-cols-2 gap-6">
            {stats.map((stat, i) => (
              <motion.div
                key={stat.label}
                initial={{ opacity: 0, y: 20 }}
                whileInView={{ opacity: 1, y: 0 }}
                viewport={{ once: true }}
                transition={{ duration: 0.45, delay: i * 0.1, ease: EASE }}
                className="p-6 rounded-xl text-center"
                style={{
                  background: "var(--color-background-alt)",
                  border: "1px solid var(--color-border)",
                  borderRadius: "var(--radius-lg)",
                }}
              >
                <span
                  className="block text-3xl md:text-4xl font-bold mb-1"
                  style={{ color: "var(--color-accent)" }}
                >
                  {stat.value}
                </span>
                <span className="text-xs font-medium uppercase tracking-wider" style={{ color: "var(--color-foreground-muted)" }}>
                  {stat.label}
                </span>
              </motion.div>
            ))}
          </div>
        </div>
      </div>
    </section>
  );
}

Avis