feat(landing): pixel design ported to static Astro + en/es/eu i18n
Adopt the "Carved from stone" pixel design (landing/design/) as the apex onboarding page, ported from its React/Babel-via-CDN prototype to static Astro so it works on an offline LAN. Real modded-LAN content replaces the prototype's fictional public-SMP copy. - Vendor web fonts locally (tooling/fetch-fonts.sh -> public/fonts/) so the page renders without the Google Fonts CDN at party time. - Port the design system (main.css: mood/hero/bevels) and split markup into Astro components (Creeper, PixelIcon, CopyChip, ServerListPanel). - site.ts holds language-neutral config + theme knobs (mood/hero/headFont/ dust) that replace the design's in-browser TweaksPanel; LITERALS holds never-translated product/in-game terms. - i18n: English (/), Spanish (/es/), Euskera (/eu/) generated from one [...lang].astro via getStaticPaths; copy lives in src/i18n/ui.ts. Nav has an EN/ES/EU switcher; html lang + hreflang set per page. - Status panel shows a static server-list row + honest stat tiles (no fake live count). Copy + scroll-reveal are the only client JS. Build emits to ../www (gitignored). Euskera strings pending a native review. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
5cec2993d7
commit
3d52951355
60 files changed
+3388
-228
No files matched your search
@@ -0,0 +1,20 @@
|
||||
---
|
||||
// 7x7 feature glyphs — styled by .picon in main.css.
|
||||
interface Props {
|
||||
glyph: "shield" | "diamond" | "orb" | "heart";
|
||||
gold?: boolean;
|
||||
}
|
||||
const { glyph, gold = false } = Astro.props;
|
||||
|
||||
const GLYPHS: Record<Props["glyph"], string[]> = {
|
||||
shield: ["0111110", "1111111", "1111111", "1111111", "0111110", "0011100", "0001000"],
|
||||
diamond: ["0001000", "0011100", "0111110", "1111111", "0111110", "0011100", "0001000"],
|
||||
orb: ["0011100", "0111110", "1111111", "1111111", "1111111", "0111110", "0011100"],
|
||||
heart: ["0110110", "1111111", "1111111", "1111111", "0111110", "0011100", "0001000"],
|
||||
};
|
||||
const cells = GLYPHS[glyph].join("").split("");
|
||||
const onClass = gold ? "go" : "on";
|
||||
---
|
||||
<div class="picon" aria-hidden="true">
|
||||
{cells.map((c) => <i class={c === "1" ? onClass : undefined} />)}
|
||||
</div>
|
||||
Reference in new issue
Block a user