Files
highland_games_website/app/page.tsx
T
Mathew 1d2c48cb93
Deploy / deploy (push) Successful in 1m3s
Renomme le jeu en Emberwild + déploiement Gitea Actions
- Jeu « Project One » → « Emberwild » (slug `emberwild`) dans lib/games.ts
  et toutes les références (accueil, devblog, README)
- Photo d'équipe (CEO/dev) câblée sur /image/teams/CEO_Dev.jpg
- CI/CD porté de GitHub Actions vers Gitea Actions
  (.gitea/workflows/deploy.yml) : build + déploiement auto au push sur master
- deploy.sh : déploiement manuel de secours

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 20:48:41 +02:00

249 lines
9.7 KiB
TypeScript

"use client";
import Image from "next/image";
import Link from "next/link";
import { motion } from "framer-motion";
export default function Home() {
return (
<>
{/* HERO */}
<section className="relative isolate min-h-screen flex items-center justify-center overflow-hidden">
{/* Background video */}
<video
autoPlay
muted
loop
playsInline
preload="auto"
aria-hidden
className="absolute inset-0 z-0 w-full h-full object-cover"
>
<source src="/Video/Header_Video.mp4" type="video/mp4" />
</video>
{/* Dark overlay for text readability */}
<div
aria-hidden
className="absolute inset-0 z-10 bg-background/60"
/>
{/* Vignette / radial fade to deepen the edges */}
<div
aria-hidden
className="absolute inset-0 z-10"
style={{
background:
"radial-gradient(ellipse at 50% 50%, rgba(10,10,10,0) 30%, rgba(10,10,10,0.85) 100%)",
}}
/>
{/* Grain / noise overlay via CSS gradient */}
<div
aria-hidden
className="absolute inset-0 z-10 opacity-[0.03]"
style={{
backgroundImage:
"repeating-linear-gradient(0deg, #fff 0, #fff 1px, transparent 1px, transparent 3px)",
}}
/>
<div className="relative z-20 max-w-5xl w-full px-6 lg:px-10 flex flex-col items-center text-center pt-20">
<motion.div
initial={{ opacity: 0, scale: 0.92, y: 20 }}
animate={{ opacity: 1, scale: 1, y: 0 }}
transition={{ duration: 1.1, ease: [0.22, 1, 0.36, 1] }}
className="mb-10"
>
<Image
src="/image/Studio/Logo Flat.png"
alt="Highland Games Studio"
width={180}
height={120}
priority
className="drop-shadow-[0_0_40px_rgba(196,184,150,0.15)]"
/>
</motion.div>
<motion.h1
initial={{ opacity: 0, y: 30 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.9, delay: 0.3, ease: "easeOut" }}
className="font-display text-6xl sm:text-7xl lg:text-8xl tracking-wider leading-[0.95] text-balance"
>
HIGHLAND GAMES
<br />
<span className="text-accent">STUDIO</span>
</motion.h1>
<motion.p
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.9, delay: 0.6, ease: "easeOut" }}
className="mt-8 text-lg sm:text-xl text-foreground-muted tracking-wide max-w-xl text-balance"
>
Where summits become worlds.
</motion.p>
<motion.div
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.9, delay: 0.9, ease: "easeOut" }}
className="mt-12 flex flex-col sm:flex-row gap-4"
>
<Link
href="/games"
className="px-8 py-3 bg-accent text-background font-display tracking-widest text-sm hover:bg-foreground hover:scale-[1.03] transition duration-200"
>
EXPLORE OUR GAMES
</Link>
<Link
href="/studio"
className="px-8 py-3 border border-border text-foreground font-display tracking-widest text-sm hover:border-accent hover:text-accent hover:scale-[1.03] transition duration-200"
>
MEET THE STUDIO
</Link>
</motion.div>
</div>
{/* Scroll indicator - positioned relative to the section */}
<motion.div
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
transition={{ delay: 1.5, duration: 1 }}
className="absolute z-20 bottom-10 left-1/2 -translate-x-1/2 flex flex-col items-center gap-2 text-foreground-muted text-xs tracking-widest"
>
<span className="font-display">SCROLL</span>
<motion.div
animate={{ y: [0, 8, 0] }}
transition={{ duration: 1.8, repeat: Infinity, ease: "easeInOut" }}
className="w-px h-8 bg-foreground-muted"
/>
</motion.div>
</section>
{/* STUDIO INTRO */}
<section className="py-24 px-6 lg:px-10">
<div className="max-w-6xl mx-auto">
<motion.div
initial={{ opacity: 0, y: 30 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, margin: "-100px" }}
transition={{ duration: 0.8 }}
>
<p className="font-display text-sm tracking-[0.3em] text-accent mb-4">
THE STUDIO
</p>
<h2 className="font-display text-4xl sm:text-5xl lg:text-6xl tracking-wider leading-tight mb-8">
Worlds beyond
<br />
the summit.
</h2>
<p className="text-lg text-foreground-muted leading-relaxed max-w-2xl">
We build worlds where every horizon hides a story. Hand-crafted
games made to be lived in, not just played through. Each one a
different summit, a different climb.
</p>
<Link
href="/studio"
className="inline-block mt-8 font-display text-sm tracking-widest text-accent hover:text-foreground transition-colors"
>
LEARN MORE
</Link>
</motion.div>
</div>
</section>
{/* FEATURED GAME */}
<section className="py-24 px-6 lg:px-10 border-t border-border">
<div className="max-w-6xl mx-auto">
<motion.div
initial={{ opacity: 0, y: 30 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, margin: "-100px" }}
transition={{ duration: 0.8 }}
>
<p className="font-display text-sm tracking-[0.3em] text-accent mb-4">
IN DEVELOPMENT
</p>
<h2 className="font-display text-4xl sm:text-5xl lg:text-6xl tracking-wider mb-12">
OUR FIRST WORLD
</h2>
</motion.div>
<motion.div
initial={{ opacity: 0, y: 40 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, margin: "-100px" }}
transition={{ duration: 0.9, delay: 0.1 }}
>
<Link
href="/games/emberwild"
className="group relative aspect-[16/9] bg-surface border border-border overflow-hidden block hover:border-accent transition-colors duration-500"
>
<div className="absolute inset-0 flex items-center justify-center">
<Image
src="/image/Studio/Logo Flat.png"
alt="Game placeholder"
width={120}
height={80}
className="opacity-20 group-hover:opacity-30 group-hover:scale-105 transition-all duration-700 ease-out"
/>
</div>
<div
aria-hidden
className="absolute inset-0 bg-accent/0 group-hover:bg-accent/[0.03] transition-colors duration-500"
/>
<div className="absolute bottom-0 left-0 right-0 p-8 bg-gradient-to-t from-background via-background/70 to-transparent">
<p className="font-display text-xs tracking-[0.3em] text-accent mb-2">
SURVIVAL · CRAFTING · EXPLORATION
</p>
<h3 className="font-display text-3xl sm:text-4xl tracking-wider mb-4 group-hover:text-accent transition-colors duration-300">
PROJECT ONE
</h3>
<p className="text-foreground-muted max-w-xl mb-6">
Inspired by Raft and Aloft. Build, explore, and survive across
shifting horizons. A new survival adventure, currently in early
development.
</p>
<span className="inline-flex items-center gap-2 font-display text-sm tracking-widest text-foreground group-hover:text-accent transition-colors">
LEARN MORE
<span className="inline-block transition-transform duration-300 group-hover:translate-x-1">
</span>
</span>
</div>
</Link>
</motion.div>
</div>
</section>
{/* DEVBLOG TEASER */}
<section className="py-24 px-6 lg:px-10 border-t border-border">
<div className="max-w-4xl mx-auto text-center">
<motion.div
initial={{ opacity: 0, y: 30 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, margin: "-100px" }}
transition={{ duration: 0.8 }}
>
<p className="font-display text-sm tracking-[0.3em] text-accent mb-4">
DEVBLOG
</p>
<h2 className="font-display text-4xl sm:text-5xl tracking-wider mb-6">
FOLLOW THE JOURNEY
</h2>
<p className="text-lg text-foreground-muted leading-relaxed max-w-2xl mx-auto mb-8">
Behind-the-scenes updates, design decisions, and milestones from
the studio. Every step of the climb, documented.
</p>
<Link
href="/devblog"
className="inline-block px-8 py-3 border border-border text-foreground font-display tracking-widest text-sm hover:border-accent hover:text-accent hover:scale-[1.03] transition duration-200"
>
READ THE DEVBLOG
</Link>
</motion.div>
</div>
</section>
</>
);
}