// share-card.jsx — Offscreen-rendered shareable image, captured via html2canvas const ShareCard = React.forwardRef(({ reading, dateStr }, ref) => { const dreamCard = window.getDreamCardByRoman ? window.getDreamCardByRoman(reading.roman) : null; const primary = window.STICKERS.find(s => s.id === reading.primary_symbol) || window.STICKERS.find(s => s.id === "moon-crescent"); const secondary = reading.secondary_symbol ? window.STICKERS.find(s => s.id === reading.secondary_symbol) : null; const hasImage = !!reading._image; const aura = reading.aura_color || { hex: "#C89255", name: "蜜色" }; return (
{[ [10,12],[88,8],[6,42],[92,38],[14,70],[90,76],[20,90],[80,92], [50,6],[30,30],[68,28],[40,86],[60,84],[24,52],[78,60], ].map(([x,y], i) => ( ))}
{dateStr}
DREAM DIAGNOSIS · 夢診断書
{reading.type_code}
夢 診 断
YUMESHINDAN · MORNING ANALYSIS
{dreamCard?.image && }
DREAM TYPE {reading.type_code}
{reading.roman}
{hasImage ? ( <> {secondary &&
{secondary.render()}
}
{primary.render()}
) : ( <> {secondary &&
{secondary.render()}
}
{primary.render()}
)} ·
{reading.card_name_en}
{reading.dream_type_jp || reading.card_name_jp}
MATCH {reading.match_score}%
{/* aura + diagnosis */}
TODAY'S AURA {aura.name}
DREAM ANALYSIS
{reading.main_message}
今 日 の ア ド バ イ ス
{reading.advice}
✦    YUMESHINDAN · A MORNING DREAM ANALYSIS    ✦
); }); window.ShareCard = ShareCard;