Files
highland_games_website/app/contact/page.tsx
T
Mathew 9b6638eb00
Deploy / deploy (push) Successful in 1m13s
Ajoute une couche de micro-animations sur tout le site
Deux courbes partagées dans lib/motion.ts, pour que le CSS et Framer
aient le même feeling, et quatre primitives que Tailwind ne sait pas
exprimer : reflet de bouton, halo qui suit le curseur, soulignement qui
se dessine, secousse d'erreur.

Nouveaux composants : Stagger (les collections se distribuent une par
une), Spotlight (trouve son parent tout seul, donc les cartes restent
des composants serveur), ScrollProgress, BackToTop, Parallax, Spinner,
CheckMark. Reveal accepte maintenant une direction.

Côté rendu : le trait de nav glisse d'un onglet à l'autre, les cartes
se soulèvent, le hero réagit au scroll, les piliers entrent en zig-zag,
la lightbox glisse dans le sens demandé et les formulaires répondent.

prefers-reduced-motion est respecté partout : Framer coupe via
useReducedMotion, le CSS via la media query déjà en place.

Le commit embarque aussi la réorganisation des composants par domaine
qui était en cours dans l'arbre de travail — les deux étaient trop
imbriquées pour être séparées proprement.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-02 16:04:41 +02:00

102 lines
4.0 KiB
TypeScript

import type { Metadata } from "next";
import { PageHeader } from "../components/ui/PageHeader";
import { Section } from "../components/ui/Section";
import { ButtonLink } from "../components/ui/ButtonLink";
import { ContactForm } from "../components/forms/ContactForm";
import { SocialLinks } from "../components/layout/SocialLinks";
import { CONTACT_CHANNELS } from "@/lib/site";
export const metadata: Metadata = {
title: "Contact",
description: "Get in touch with Highland Games Studio.",
};
const pressEmail =
CONTACT_CHANNELS.find((channel) => channel.label === "PRESS")?.email ??
CONTACT_CHANNELS[0].email;
/**
* Contact.
*
* The page used to stack three sections of identical weight — three mailto
* cards, then the form, then a press-kit block — which offered four ways to do
* one thing and ranked none of them. Now the form is the page, and every
* alternative sits in a column beside it: same information, one obvious
* default.
*/
export default function ContactPage() {
return (
<>
<PageHeader
eyebrow="GET IN TOUCH"
title="SAY HELLO."
lead="Press inquiries, business opportunities, fan messages. All are welcome. We're three people, so answers take a few days, but they always come."
/>
<Section top="none">
<div className="grid gap-12 lg:grid-cols-[1.35fr_0.65fr] lg:gap-16">
<div>
<h2 className="mb-8 font-display text-2xl tracking-wider sm:text-3xl">
SEND US A MESSAGE
</h2>
<ContactForm />
</div>
<aside className="flex flex-col gap-6">
{/* Direct addresses, for anyone who would rather use their own mail
client than a form. Secondary by placement, not hidden. */}
<div className="rounded-2xl border border-border bg-surface p-8 transition-colors duration-300 hover:border-accent/40">
<h2 className="font-display text-sm tracking-[0.25em] text-foreground-muted">
DIRECT EMAIL
</h2>
<ul className="mt-6 space-y-6">
{CONTACT_CHANNELS.map((channel) => (
<li key={channel.label}>
<p className="font-display text-xs tracking-[0.3em] text-accent">
{channel.label}
</p>
<p className="mt-2 text-sm leading-relaxed text-foreground-muted">
{channel.description}
</p>
<a
href={`mailto:${channel.email}`}
className="underline-grow mt-2 inline-block break-words text-sm text-foreground transition-colors hover:text-accent"
>
{channel.email}
</a>
</li>
))}
</ul>
</div>
<div className="rounded-2xl border border-border bg-surface p-8 transition-colors duration-300 hover:border-accent/40">
<h2 className="font-display text-sm tracking-[0.25em] text-foreground-muted">
PRESS KIT
</h2>
<p className="mt-4 text-sm leading-relaxed text-foreground-muted">
Logos, screenshots and fact sheets will live here soon. Until
then, ask and we send the assets directly.
</p>
<div className="mt-6">
<ButtonLink
href={`mailto:${pressEmail}?subject=Press%20Kit%20Request`}
variant="outline"
>
REQUEST PRESS KIT
</ButtonLink>
</div>
</div>
<div className="rounded-2xl border border-border bg-surface p-8 transition-colors duration-300 hover:border-accent/40">
<h2 className="mb-6 font-display text-sm tracking-[0.25em] text-foreground-muted">
FOLLOW
</h2>
<SocialLinks />
</div>
</aside>
</div>
</Section>
</>
);
}