// site-courses.jsx — Course catalog const COURSES = [ { cat: 'EXTENSION', title: 'シールエクステ講習', en: 'Tape-in Extension', desc: '自然な馴染ませ方、装着位置、毛量調整、デザイン提案まで学ぶ実践講習。', target: '美容師 / アシスタント / エクステ強化', skills: ['装着技術', '馴染ませ', 'デザイン構成', 'カウンセリング'], duration: '1日 · 6h', href: 'course.html?course=seal', }, { cat: 'EXTENSION', title: '羽エクステ講習', en: 'Feather Extension', desc: '羽根素材を使った繊細な装着技術。質感とデザインの両面から指導。', target: '美容師 / 装飾デザイン志向', skills: ['素材選定', '装着技術', '配置設計', '質感調整'], duration: '1日 · 5h', href: 'course.html?course=feather', }, { cat: 'CUT', title: 'カット講習', en: 'Precision Cut', desc: '骨格・毛流を読み解き、サロンワークに直結するカット理論と実践。', target: '美容師 / カット技術を磨きたい方', skills: ['骨格補正', 'セニング設計', 'メンズ/レディース', '再現性'], duration: '2日 · 12h', href: 'course.html?course=cut', }, { cat: 'COLOR', title: 'カラー講習', en: 'Color Design', desc: 'ベーシックカラーからハイトーンまで。薬剤理論と現場の感覚を統合。', target: '美容師 / カラリスト志望', skills: ['薬剤選定', 'ハイライト', 'ハイトーン', 'カウンセリング'], duration: '2日 · 10h', href: 'course.html?course=color', }, ]; function CourseCard({ course, idx }) { const [hov, setHov] = useState(false); const num = String(idx + 1).padStart(2, '0'); return ( setHov(true)} onMouseLeave={() => setHov(false)} style={{ background: BRAND.white, border: `1px solid ${hov ? BRAND.black : BRAND.hair}`, transition: 'border-color .4s ease, transform .4s ease', display: 'flex', flexDirection: 'column', textDecoration: 'none', color: 'inherit', transform: hov ? 'translateY(-4px)' : 'none', }}> {/* Photo */}
{/* Body */}
{course.cat} COURSE · {num}
{course.en}

{course.title}

{course.desc}

{/* Spec table */}
For
{course.target}
Skills
{course.skills.join(' / ')}
Time
{course.duration}
詳細を見る
); } function Courses() { return (
Courses — 05
{['All', 'Cut', 'Color', 'Extension', 'Black Hair'].map((t, i) => ( {t} ))}
{COURSES.map((c, i) => )}
全ての講習を見る
); } window.Courses = Courses; window.COURSES = COURSES;