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>
This commit is contained in:
+108
-9
@@ -1,16 +1,71 @@
|
||||
export type GameStatus = "in-development" | "released" | "coming-soon";
|
||||
|
||||
export type Screenshot = {
|
||||
src: string;
|
||||
/** Short caption. Also used as the image alt text. */
|
||||
caption: string;
|
||||
};
|
||||
|
||||
/**
|
||||
* A gameplay pillar: what the player actually *does*.
|
||||
*
|
||||
* Copy rules, borrowed from the EmberWild site so both properties describe the
|
||||
* game the same way:
|
||||
* 1. No story. No lore, no factions, no twists. A visitor should arrive
|
||||
* knowing what they will do, not what they will find out.
|
||||
* 2. The title is one word. The body is one sentence.
|
||||
* 3. If the screenshot already says it, do not write it.
|
||||
*/
|
||||
export type Pillar = {
|
||||
title: string;
|
||||
body: string;
|
||||
/** The capture that illustrates it. */
|
||||
shot: string;
|
||||
};
|
||||
|
||||
export type Game = {
|
||||
slug: string;
|
||||
title: string;
|
||||
status: "in-development" | "released" | "coming-soon";
|
||||
status: GameStatus;
|
||||
/** One readable line. Shown under the title on cards and on the game page. */
|
||||
tagline: string;
|
||||
/** Full pitch. Shown in the "About" block of the game page. */
|
||||
description: string;
|
||||
genres: string[];
|
||||
releaseWindow?: string;
|
||||
steamUrl?: string;
|
||||
// Image de couverture affichée sur les cards (home, liste, page projet).
|
||||
// Dépose l'image dans /public/image/Emberwild/ puis renseigne le chemin,
|
||||
// ex: "/image/Emberwild/cover.jpg". Laisse vide pour un placeholder.
|
||||
cover?: string;
|
||||
/** Player count, e.g. "1-6". Drives the co-op block on the game page. */
|
||||
players?: string;
|
||||
platform?: string;
|
||||
|
||||
/** What the player does, one band each on the game page. */
|
||||
pillars: Pillar[];
|
||||
|
||||
/**
|
||||
* Illustrated key art / cover (portrait or square-ish artwork).
|
||||
* Rendered on its own panel — never used as a background behind text,
|
||||
* because the artwork is light and text would become unreadable.
|
||||
*/
|
||||
keyArt?: string;
|
||||
|
||||
/**
|
||||
* Wide in-game capture used as the page banner. Prefer a 16:9 screenshot.
|
||||
* Text is never laid over it either; the title block sits underneath.
|
||||
*/
|
||||
banner?: string;
|
||||
|
||||
/**
|
||||
* Gallery. This is the ONLY place screenshots are declared: the game page
|
||||
* shows them all, the home page shows the first few of the featured game.
|
||||
* Drop new files in /public/image/Games/<Game>/ and add them here.
|
||||
*/
|
||||
screenshots: Screenshot[];
|
||||
};
|
||||
|
||||
export const STATUS_LABEL: Record<GameStatus, string> = {
|
||||
"in-development": "IN DEVELOPMENT",
|
||||
released: "RELEASED",
|
||||
"coming-soon": "COMING SOON",
|
||||
};
|
||||
|
||||
export const games: Game[] = [
|
||||
@@ -18,15 +73,59 @@ export const games: Game[] = [
|
||||
slug: "emberwild",
|
||||
title: "Emberwild",
|
||||
status: "in-development",
|
||||
tagline: "A survival adventure across shifting horizons.",
|
||||
tagline: "Co-op survival in a world gone wild.",
|
||||
description:
|
||||
"Inspired by Raft and Aloft. Build, explore, and survive across drifting worlds. A new survival adventure currently in early development. The first world from Highland Games Studio.",
|
||||
genres: ["Survival", "Crafting", "Exploration"],
|
||||
"Emberwild is a 1-6 player co-op survival craft game. Drive the blight out of a handcrafted world, farm and build on the ground you take back, and watch the colour return with you. Five regions, nothing generated, nothing repeated.",
|
||||
genres: ["Survival", "Crafting", "Co-op", "Exploration"],
|
||||
releaseWindow: "TBA",
|
||||
cover: "/image/Games/Emberwild/Cover.png",
|
||||
players: "1-6",
|
||||
platform: "PC",
|
||||
keyArt: "/image/Games/Emberwild/Cover.png",
|
||||
banner: "/image/Games/Emberwild/Capture_1.png",
|
||||
// Only three captures exist so far, so "Build" borrows the key art. Swap
|
||||
// it for a real in-game shot of a base as soon as there is one.
|
||||
pillars: [
|
||||
{
|
||||
title: "Restore",
|
||||
body: "Drive the blight out and the colour comes back with it. What you clear stays clear.",
|
||||
shot: "/image/Games/Emberwild/Capture_1.png",
|
||||
},
|
||||
{
|
||||
title: "Survive",
|
||||
body: "Farm, cook, fish, hunt. Clean ground grows more and sleeps quieter.",
|
||||
shot: "/image/Games/Emberwild/Capture_2.png",
|
||||
},
|
||||
{
|
||||
title: "Explore",
|
||||
body: "One handcrafted world, five regions. Nothing generated, nothing repeated.",
|
||||
shot: "/image/Games/Emberwild/Capture_3.png",
|
||||
},
|
||||
{
|
||||
title: "Build",
|
||||
body: "Raise a home. Push outposts into everything you take back.",
|
||||
shot: "/image/Games/Emberwild/Cover.png",
|
||||
},
|
||||
],
|
||||
screenshots: [
|
||||
{
|
||||
src: "/image/Games/Emberwild/Capture_1.png",
|
||||
caption: "First light over the clearing",
|
||||
},
|
||||
{
|
||||
src: "/image/Games/Emberwild/Capture_2.png",
|
||||
caption: "Autumn treeline",
|
||||
},
|
||||
{
|
||||
src: "/image/Games/Emberwild/Capture_3.png",
|
||||
caption: "The path through the meadow",
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
/** The game showcased on the home page. */
|
||||
export const featuredGame: Game | undefined = games[0];
|
||||
|
||||
export function getGame(slug: string): Game | undefined {
|
||||
return games.find((g) => g.slug === slug);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user