--- import { site, HEAD_FONTS } from "../data/site"; import { ui, LANGS, LANG_LABEL, LANG_PATH, LANG_REGISTER_PATH, LANG_ACCOUNT_PATH, type Lang } from "../i18n/ui"; import PixelIcon from "../components/PixelIcon.astro"; import ServerCard from "../components/ServerCard.astro"; import PlayerRoster from "../components/PlayerRoster.astro"; import ModList from "../components/ModList.astro"; import "../styles/main.css"; // One static page per locale: en at "/", es at "/es/", eu at "/eu/". export function getStaticPaths() { return [ { params: { lang: undefined }, props: { locale: "es" as Lang } }, { params: { lang: "en" }, props: { locale: "en" as Lang } }, { params: { lang: "eu" }, props: { locale: "eu" as Lang } }, ]; } const { locale } = Astro.props; const t = ui[locale]; const { theme, launcherManifest } = site; const headFont = HEAD_FONTS[theme.headFont] ?? HEAD_FONTS.pixelify; const launcherName = launcherManifest.product; const registerPath = LANG_REGISTER_PATH[locale]; const accountPath = LANG_ACCOUNT_PATH[locale]; // Per-OS download buttons (join step 2) are fetched client-side from the live // launcher.json on page load (no build-time baking, no polling) — see the // script below. We only pass the URL; buttons render into the #launcher-dl // skeleton. URL derives from the distribution subdomain. const launcherJsonUrl = `https://distribution.${site.baseDomain}/launcher/launcher.json`; // Build-time floating dust bits (index-derived, no runtime RNG). const dustBits = Array.from({ length: 16 }, (_, i) => { const size = 3 + (i % 3) * 2; return { left: `${(i * 61) % 100}%`, size: `${size}px`, bg: i % 4 === 0 ? "var(--gold)" : "var(--accent)", opacity: 0.18 + (i % 3) * 0.06, anim: `rise ${13 + (i % 7) * 3}s linear ${i * 0.7}s infinite`, }; }); --- {site.name} — {t.hero.howToJoin} {LANGS.map((l) => )}
{theme.dust && ( )}
{t.hero.eyebrow} {site.mcVersion}

{t.hero.tagline}

{t.hero.sub}

Java {site.mcVersion} {t.hero.metaModpack}
{t.join.eyebrow}

{t.join.title}

{t.join.lead}

1
{t.join.s1.kicker}

{t.join.s1.h}

{t.join.s1.pa} {t.join.s1.registerLink} {t.join.s1.pb}

2
{t.join.s2.kicker}

{t.join.s2.h.replace("{name}", launcherName)}

{t.join.s2.p.replace(/\{name\}/g, launcherName)}

{t.status.eyebrow}

{t.status.title}

{t.status.lead}

{t.members.eyebrow}

{t.members.title}

{t.members.lead}

{t.mods.eyebrow}

{t.mods.title}

{t.mods.lead}

{t.features.eyebrow}

{t.features.title}

{t.features.lead}

{site.features.map((f, i) => (

{t.features.items[i].h}

{t.features.items[i].p}

))}