// components-modules.jsx — Belt (三块碑文) + Modules Bento grid.
// All hand-drawn module art removed; replaced with PicSlot placeholders.
/* ─────────── BELT · 三块碑文 ─────────── */
const ROMAN = ["I", "II", "III"];
function Belt({ items }) {
return (
{items.map((it, i) => (
{it.num}
{ROMAN[i] || (i + 1)}
{it.h}
{it.p}
))}
);
}
/* ─────────── MODULES · Bento Grid ───────────
Layout (12-col):
[ Atlas (big · 8) ][ Cast (4) ]
[ Outline 4 ][ Codex 4 ][ Library 4 ]
[ Agent (12 · wide bottom) ]
*/
const BENTO_SPAN = {
atlas: { cols: 8, tall: true },
characters: { cols: 4, tall: true },
outline: { cols: 4, tall: false },
rules: { cols: 4, tall: false },
library: { cols: 4, tall: false },
agent: { cols: 12, tall: false, wide: true },
};
function ModuleCard({ card, lang }) {
const span = BENTO_SPAN[card.kind] || { cols: 4 };
const cls = [
"feature-card",
`feature-card--cols-${span.cols}`,
span.tall ? "feature-card--tall" : "",
span.wide ? "feature-card--wide-row" : "",
].join(" ");
return (
{card.tag}
{card.h}
{card.p}
);
}
function ModulesSection({ copy, lang }) {
// Reorder cards to fit the Bento layout: atlas, characters, outline, rules, library, agent
const orderKey = ["atlas", "characters", "outline", "rules", "library", "agent"];
const cards = [...copy.moduleCards].sort(
(a, b) => orderKey.indexOf(a.kind) - orderKey.indexOf(b.kind)
);
return (
{copy.modules.eyebrow}
{copy.modules.title}
{copy.modules.kicker}
{cards.map((c, i) => )}
);
}
Object.assign(window, { Belt, ModuleCard, ModulesSection });