Update layout + perf

This commit is contained in:
Thomas Fransolet 2026-04-16 16:17:23 +02:00
parent 4ab07d93e9
commit bfe6bace80
3 changed files with 62 additions and 37 deletions

View File

@ -4,7 +4,7 @@
--color-primary: #0df2df;
--color-accent-violet: #8b5cf6;
--color-accent-orange: #f97316;
--font-display: "Plus Jakarta Sans", sans-serif;
--font-display: var(--font-plus-jakarta), sans-serif;
}
@layer base {

View File

@ -1,6 +1,14 @@
import type { Metadata } from "next";
import { Plus_Jakarta_Sans } from "next/font/google";
import "./globals.css";
const plusJakartaSans = Plus_Jakarta_Sans({
subsets: ["latin"],
weight: ["400", "500", "600", "700", "800"],
variable: "--font-plus-jakarta",
display: "swap",
});
export const metadata: Metadata = {
metadataBase: new URL("https://myinfomate.be"),
title: "MyInfoMate | La technologie au service de l'expérience visiteur",
@ -33,10 +41,11 @@ export default function RootLayout({
children: React.ReactNode;
}>) {
return (
<html lang="fr">
<html lang="fr" className={plusJakartaSans.variable}>
<head>
<link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap" rel="stylesheet" />
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&display=swap" rel="stylesheet" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossOrigin="anonymous" />
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0&display=block" rel="stylesheet" />
</head>
<body>
{children}

View File

@ -1,6 +1,7 @@
'use client';
import React, { useState, useEffect, useRef } from 'react';
import Image from 'next/image';
import { resolveImage } from '@/data/stitch-images';
import translations, { Language } from '@/data/translations';
@ -156,9 +157,11 @@ export default function Home() {
<header className={`fixed top-0 left-0 right-0 z-50 bg-white/80 backdrop-blur-md border-b border-slate-200 transition-transform duration-300 ${navVisible ? 'translate-y-0' : '-translate-y-full'}`}>
<div className="max-w-7xl mx-auto px-6 h-20 flex items-center justify-between">
<a className="flex items-center gap-3 shrink-0" href="#">
<img
<Image
src={resolveImage("{{DATA:IMAGE:IMAGE_14}}")}
alt="MyInfoMate Logo"
height={40}
width={42}
className="h-10 w-auto object-contain"
/>
<span className="text-xl font-extrabold tracking-tight text-slate-900 hidden lg:block">MyInfoMate</span>
@ -338,10 +341,13 @@ export default function Home() {
<div className="relative w-full aspect-[4/3] sm:aspect-video lg:aspect-[4/3] max-w-xl mx-auto">
{/* Interactive Map Tablet Preview */}
<div className="absolute top-0 left-0 w-full h-full lg:h-[85%] bg-slate-900 rounded-2xl lg:rounded-3xl overflow-hidden shadow-2xl border-4 border-slate-800 z-10 transform lg:-rotate-2">
<img
<Image
src={resolveImage("{{DATA:IMAGE:IMAGE_4}}")}
alt="Modern Interactive Map Interface"
className="w-full h-full object-cover object-top opacity-80"
fill
className="object-cover object-top opacity-80"
priority
sizes="(max-width: 1024px) 100vw, 50vw"
/>
<div className="absolute top-4 left-6 bg-white/90 backdrop-blur px-4 py-2 rounded-xl shadow-lg border border-primary/20">
<p className="text-[10px] font-bold text-slate-400 uppercase">{t.mockup.mapTitle}</p>
@ -351,13 +357,13 @@ export default function Home() {
{/* Agenda Mobile Preview - Hidden or repositioned on very small screens */}
<div className="hidden sm:block absolute -bottom-6 -left-6 lg:-bottom-10 lg:-left-10 w-1/3 aspect-[9/19] bg-white rounded-[1.5rem] lg:rounded-[2rem] shadow-2xl border-2 lg:border-4 border-slate-900 z-30 transform rotate-3 overflow-hidden">
<img src={resolveImage("{{DATA:IMAGE:IMAGE_5}}")} alt="App screenshot" className="w-full h-full object-cover object-top" />
<Image src={resolveImage("{{DATA:IMAGE:IMAGE_5}}")} alt="App screenshot" fill className="object-cover object-top" sizes="20vw" />
<div className="absolute top-1 left-1/2 -translate-x-1/2 w-6 lg:w-8 h-1 lg:h-2 bg-slate-900 rounded-full"></div>
</div>
{/* Tours Mobile Preview */}
<div className="absolute -bottom-4 -right-4 lg:-bottom-6 lg:-right-6 w-1/3 lg:w-[35%] aspect-[9/19] bg-white rounded-[1.5rem] lg:rounded-[2rem] shadow-2xl border-2 lg:border-4 border-slate-900 z-20 transform -rotate-6 overflow-hidden">
<img src={resolveImage("{{DATA:IMAGE:IMAGE_7}}")} alt="App screenshot" className="w-full h-full object-cover object-top" />
<Image src={resolveImage("{{DATA:IMAGE:IMAGE_7}}")} alt="App screenshot" fill className="object-cover object-top" sizes="20vw" />
<div className="absolute top-1 left-1/2 -translate-x-1/2 w-6 lg:w-8 h-1 lg:h-2 bg-slate-900 rounded-full"></div>
</div>
</div>
@ -367,44 +373,52 @@ export default function Home() {
{/* Strategic Points */}
<section className="py-24 bg-white" id="points">
<div className="max-w-7xl mx-auto px-6">
<Reveal className="text-center mb-20">
<div className="max-w-5xl mx-auto px-6">
<Reveal className="text-center mb-16">
<h2 className="text-accent-violet font-extrabold uppercase tracking-widest text-sm mb-4">{t.strategic.sectionLabel}</h2>
<h3 className="text-3xl lg:text-5xl font-extrabold text-slate-900 tracking-tight">{t.strategic.sectionTitle}</h3>
</Reveal>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-8">
<div className="grid grid-cols-1 md:grid-cols-2 gap-x-16 gap-y-10">
{/* Feature 1 */}
<Reveal delay={0}><div className="group p-8 rounded-3xl border border-slate-100 bg-slate-50 hover:bg-white hover:shadow-2xl hover:shadow-primary/10 transition-all duration-300">
<div className="w-14 h-14 rounded-2xl bg-primary/20 text-primary flex items-center justify-center mb-6 group-hover:scale-110 transition-transform">
<span className="material-symbols-outlined text-3xl">sync</span>
<Reveal delay={0} className="flex items-start gap-5">
<div className="shrink-0 w-12 h-12 rounded-2xl bg-primary/15 text-primary flex items-center justify-center">
<span className="material-symbols-outlined text-2xl">sync</span>
</div>
<h4 className="text-xl font-extrabold text-slate-900 mb-4">{t.strategic.feature1Title}</h4>
<p className="text-slate-600 leading-relaxed text-sm">{t.strategic.feature1Desc}</p>
</div></Reveal>
<div>
<h4 className="text-lg font-extrabold text-slate-900 mb-1">{t.strategic.feature1Title}</h4>
<p className="text-slate-500 leading-relaxed text-sm">{t.strategic.feature1Desc}</p>
</div>
</Reveal>
{/* Feature 2 */}
<Reveal delay={80}><div className="group p-8 rounded-3xl border border-slate-100 bg-slate-50 hover:bg-white hover:shadow-2xl hover:shadow-accent-violet/10 transition-all duration-300">
<div className="w-14 h-14 rounded-2xl bg-accent-violet/20 text-accent-violet flex items-center justify-center mb-6 group-hover:scale-110 transition-transform">
<span className="material-symbols-outlined text-3xl">code_off</span>
<Reveal delay={80} className="flex items-start gap-5">
<div className="shrink-0 w-12 h-12 rounded-2xl bg-accent-violet/15 text-accent-violet flex items-center justify-center">
<span className="material-symbols-outlined text-2xl">code_off</span>
</div>
<h4 className="text-xl font-extrabold text-slate-900 mb-4">{t.strategic.feature2Title}</h4>
<p className="text-slate-600 leading-relaxed text-sm">{t.strategic.feature2Desc}</p>
</div></Reveal>
<div>
<h4 className="text-lg font-extrabold text-slate-900 mb-1">{t.strategic.feature2Title}</h4>
<p className="text-slate-500 leading-relaxed text-sm">{t.strategic.feature2Desc}</p>
</div>
</Reveal>
{/* Feature 3 */}
<Reveal delay={160}><div className="group p-8 rounded-3xl border border-slate-100 bg-slate-50 hover:bg-white hover:shadow-2xl hover:shadow-accent-orange/10 transition-all duration-300">
<div className="w-14 h-14 rounded-2xl bg-accent-orange/20 text-accent-orange flex items-center justify-center mb-6 group-hover:scale-110 transition-transform">
<span className="material-symbols-outlined text-3xl">download_for_offline</span>
<Reveal delay={160} className="flex items-start gap-5">
<div className="shrink-0 w-12 h-12 rounded-2xl bg-accent-orange/15 text-accent-orange flex items-center justify-center">
<span className="material-symbols-outlined text-2xl">download_for_offline</span>
</div>
<h4 className="text-xl font-extrabold text-slate-900 mb-4">{t.strategic.feature3Title}</h4>
<p className="text-slate-600 leading-relaxed text-sm">{t.strategic.feature3Desc}</p>
</div></Reveal>
<div>
<h4 className="text-lg font-extrabold text-slate-900 mb-1">{t.strategic.feature3Title}</h4>
<p className="text-slate-500 leading-relaxed text-sm">{t.strategic.feature3Desc}</p>
</div>
</Reveal>
{/* Feature 4 */}
<Reveal delay={240}><div className="group p-8 rounded-3xl border border-slate-100 bg-slate-50 hover:bg-white hover:shadow-2xl hover:shadow-primary/10 transition-all duration-300">
<div className="w-14 h-14 rounded-2xl bg-primary/20 text-primary flex items-center justify-center mb-6 group-hover:scale-110 transition-transform">
<span className="material-symbols-outlined text-3xl">dashboard_customize</span>
<Reveal delay={240} className="flex items-start gap-5">
<div className="shrink-0 w-12 h-12 rounded-2xl bg-primary/15 text-primary flex items-center justify-center">
<span className="material-symbols-outlined text-2xl">dashboard_customize</span>
</div>
<h4 className="text-xl font-extrabold text-slate-900 mb-4">{t.strategic.feature4Title}</h4>
<p className="text-slate-600 leading-relaxed text-sm">{t.strategic.feature4Desc}</p>
</div></Reveal>
<div>
<h4 className="text-lg font-extrabold text-slate-900 mb-1">{t.strategic.feature4Title}</h4>
<p className="text-slate-500 leading-relaxed text-sm">{t.strategic.feature4Desc}</p>
</div>
</Reveal>
</div>
</div>
</section>
@ -1235,9 +1249,11 @@ export default function Home() {
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-12 mb-16">
<div className="col-span-1 lg:col-span-1">
<div className="flex items-center gap-3 mb-6">
<img
<Image
src={resolveImage("{{DATA:IMAGE:IMAGE_14}}")}
alt="MyInfoMate Logo"
height={32}
width={33}
className="h-8 w-auto object-contain"
/>
<span className="text-lg font-extrabold tracking-tight text-slate-900">MyInfoMate</span>