// Home page sections + job card/list
const { useState: useStateH } = React;
function Hero({ onNav, lang = "ja", tw = {} }) {
const en = lang === "en";
const style = tw.heroStyle || "split";
const dim = tw.photoDim != null ? tw.photoDim : 32; // overlay darkness %
const shift = tw.textShift != null ? tw.textShift : 0; // px text nudge
const hl = tw.accent || "#F7B731"; // highlight color
const motion = tw.motion !== false;
const Kick = (
{en ? "RECRUIT 2026 · Join the cast" : "採用サイト · RECRUIT 2026"}
);
const Title = (lt) => (
{en
? <>Life can be a lot hotter.
Here, you are the main character.>
: <>人生は、もっと熱くていい。
ここは、君が主役になれる場所。>}
);
const Sub = (lt) => (
{en ? "A drama that began at a tiny Nagoya takoyaki izakaya. Deliver the five-sense “live experience” — with your own hands."
: "名古屋のたこ焼き居酒屋から始まったドラマ。五感を揺さぶる「ライブ体験」を、君の手で。"}
);
const Buttons = (
onNav("apply")}>{en ? "Apply in 30 sec" : "簡単!30秒応募"}
onNav("jobs")}>{en ? "See jobs" : "求人を見る"}
);
// ---- SPLIT: emphasize the team photo (no dark overlay); text in its own panel ----
if (style === "split") {
return (
{Kick}{Title(true)}{Sub(true)}{Buttons}
{en ? "Our team" : "たこスタの仲間たち"}
);
}
// ---- HALF: text over a darkened left half, photo emphasized on the right ----
if (style === "half") {
const ah = 0.2 + (dim/100) * 0.72;
return (
{Kick}{Title(false)}{Sub(false)}{Buttons}
);
}
// ---- OVERLAY: text over photo (dimmable) ----
const a = 0.18 + (dim/100) * 0.78;
return (
{Kick}{Title(false)}{Sub(false)}{Buttons}
);
}
function Story() {
return (
{window.YNNY.story.map((s, i) => {
const left = i % 2 === 0;
return (
);
})}
);
}
function JobCard({ job, onNav }) {
const [h, setH] = useStateH(false);
return (
setH(true)} onMouseLeave={()=>setH(false)}
style={{ background:"var(--surface)", borderRadius:16, overflow:"hidden", cursor:"pointer",
boxShadow: h ? "var(--shadow-hover)" : "var(--shadow-card)", transform: h?"translateY(-3px)":"none",
transition:"all .2s ease", display:"flex", flexDirection:"column" }} onClick={()=>onNav("detail", job)}>
{job.urgent &&
急募}
{job.type}
{job.title}
{job.loc}
{job.pay}
{job.tags.slice(0,3).map(t=>(
{t}
))}
{e.stopPropagation();onNav("detail",job);}}>詳しく見る
{e.stopPropagation();onNav("apply",job);}}>30秒応募
);
}
function JobSearch() {
return (
);
}
const inStyle = { width:"100%", boxSizing:"border-box", fontFamily:"var(--font-body)", fontSize:15,
padding:"13px 16px", border:"1.5px solid #3a332f", borderRadius:12, background:"#211c19", color:"#FBEFE2" };
function JobList({ onNav, limit }) {
const jobs = limit ? window.YNNY.jobs.slice(0,limit) : window.YNNY.jobs;
return (
);
}
Object.assign(window, { Hero, Story, JobSearch, JobList, JobCard });