/* global React, CharMark */ /* PHASE 3b (Brand Kit V2) — JOIN THE LAND. Replaces the old "Another World" cracks concept with a bright, Pixar-tone "monsters live here" social hub. Each card is a window frame with a monster peeking in and a mocked feed inside. Per BRIEF V2 §6-8: - Row 1: Instagram + TikTok (large cards) — ハピモン① / オイモン - Row 2: Official LINE (medium card) — シーパーズ右版 - Row 3: X / YouTube / note (small, COMING SOON) */ // ---------- Mocked feed contents (reused from old AnotherWorld, on-tone) ---------- const IG_TILES = [ { kind: 'photo', src: 'assets/product-ase-transparent.png', bg: '#CC0000' }, { kind: 'text', bg: '#F2B845', color: '#0A0A0A', text: 'EAT\nYOUR\nPAIN.' }, { kind: 'photo', src: 'assets/product-cho-transparent.png', bg: '#F5F0EB' }, { kind: 'text', bg: '#0A0A0A', color: '#FFFFFF', text: '150,000+\nPAINS\nEATEN.' }, { kind: 'photo', src: 'assets/product-cho-akari-collab.png', bg: '#7C3AED' }, { kind: 'text', bg: '#CC0000', color: '#FFFFFF', text: '★ AMAZON\nNo. 1\nCAPSAICIN' }, ]; const TT_TILES = [ { bg: '#CC0000', hash: '#オイモン', cap: 'カプサイシン、暴力的。' }, { bg: '#7C3AED', hash: '#コラボ予告', cap: '白瀬あかり × CHO' }, { bg: '#F2B845', hash: '#腸活', cap: '31種類の菌。' }, { bg: '#0A0A0A', hash: '#WORLD', cap: 'NO PLACEBO. JUST VIOLENCE.' }, ]; const LINE_MSGS = [ { side: 'them', text: 'おはよう!今日のモンスターレポート、届いた?' }, { side: 'me', text: 'うん、見たよ' }, { side: 'them', text: '今夜から、シーパーズの新メニュー始まる🌙' }, { side: 'them', text: '友だち追加で限定クーポン配布中。' }, ]; // ===================================================================== // Big window card — Instagram / TikTok // ===================================================================== function WindowCardBig({ kind, handle, charId, charPhoto, charLabel, url, frameColor }) { return (
{/* Window content — feed mock */} {kind === 'instagram' ? (
{IG_TILES.map((t, i) => (
{t.kind === 'photo' ? :
{t.text}
}
))}
) : (
{TT_TILES.map((t, i) => (
{t.hash}
{t.cap}
))}
)}
{/* Monster peeking from the window edge */}
{kind === 'instagram' ? 'INSTAGRAM' : 'TIKTOK'} {handle} FOLLOW ME
); } // Scattered pop deco for the LINE promo card — random-ish size + rotation. const PROMO_DECO = [ { ch: '💬', size: 50, rot: -16, top: '6%', right: '9%' }, { ch: '✨', size: 30, rot: 8, top: '11%', right: '38%' }, { ch: '❤️', size: 34, rot: 14, top: '26%', right: '23%' }, { ch: '👍', size: 44, rot: -10, top: '44%', right: '7%' }, { ch: '🌙', size: 30, rot: 20, top: '63%', right: '32%' }, { ch: '🍪', size: 42, rot: -14, bottom: '12%', right: '11%' }, ]; // ===================================================================== // Official LINE — 2-column renewal: // LEFT : existing chat-preview window (frame switched to black so it // doesn't read green-on-green against the promo) // RIGHT : pop LINE-green promo card (halftone dots, big headline, // scattered icons, sticker CTA) // ===================================================================== function WindowCardLine() { return (
{/* LEFT — chat preview (existing wording kept verbatim) */}
M
MY MONSTERS
公式アカウント
{LINE_MSGS.map((m, i) => (
{m.text}
))}
OFFICIAL LINE @mymonsters
{/* RIGHT — pop promo card */}

— OFFICIAL LINE / 公式アカウント

友だち追加で、
限定クーポン
配布中。

Add friend, get exclusive monster reports & coupons.

友だち追加 @mymonsters
); } // Official platform marks — wordmarks ARE the brand; use the SVG paths // verbatim (no simplification). fill="currentColor" so CSS color picks // the per-platform brand color via the data-platform attribute below. const SNS_ICONS = { X: ( ), YOUTUBE: ( ), NOTE: ( ), }; // ===================================================================== // Small placeholder — X / YouTube / note // ===================================================================== function SmallSoonCard({ label }) { return (
{SNS_ICONS[label] || null}
{label}
COMING SOON
); } // ===================================================================== // JOIN THE LAND. section // ===================================================================== function JoinTheLand() { return (

JOIN THE LAND.

モンスター達は、ここに住んでいる。

); } Object.assign(window, { JoinTheLand });