// ===================== Skills, Companies, Projects, Education, Contact, Footer ===================== // ---------- SKILLS ---------- function Skills(){ const C = window.useC(); const s = C.skills; const Reveal = window.Reveal; const H = window.H; return ( {s.num} · {s.kicker} / {s.num} {s.stack_label} {window.STACK.map((t,i)=>( {t.trio ? t.trio.map((ic,k)=>()) : { e.target.style.display='none'; e.target.parentNode.classList.add('noimg'); e.target.parentNode.dataset.l=t.n[0]; }} />} {t.n} ))} {[...window.STACK,...window.STACK,...window.STACK].map((t,i)=>( {t.trio ? t.trio.map((ic,k)=>()) : { e.target.style.display='none'; e.target.parentNode.classList.add('noimg'); e.target.parentNode.dataset.l=t.n[0]; }} />} {t.n} ))} {s.expertise.map((g,i)=>( {g.ico} {g.h} {g.d} ))} ); } // ---------- COMPANIES ---------- function Companies(){ const C = window.useC(); const c = C.companies; const Reveal = window.Reveal; const H = window.H; const all = [...c.list, ...c.list, ...c.list]; return ( {c.num} · {c.kicker} / {c.num} {c.list.map((co,i)=>( ))} {all.map((co,i)=>( ))} ); } // ---------- PROJECTS ---------- function Projects(){ const C = window.useC(); const p = C.projects; const Reveal = window.Reveal; const H = window.H; const f = p.featured; const sp = p.soundpaper; return ( {p.num} · {p.kicker} / {p.num} {f.tag} {f.client} {f.desc} {f.tags.map((t,k)=>({t}))} {f.cta} → {sp.tag} {sp.personal} {sp.desc} {sp.tags.map((t,k)=>({t}))} Ver o projeto → SoundPaper {p.ach_title} {p.achievements.map((a,i)=>( {a.badge} {a.sub} {a.desc} ))} ); } // ---------- EDUCATION (simple card) ---------- function Education(){ const C = window.useC(); const e = C.edu; const Reveal = window.Reveal; const H = window.H; return ( {e.num} · {e.kicker} / {e.num} ev.target.parentNode.classList.add('has-img')} onError={(ev)=>{ ev.target.style.display='none'; }} /> IFCE {e.degLabel} {e.status} {e.deg} {e.school} {e.when} ); } // ---------- CONTACT + FOOTER ---------- function Contact(){ const C = window.useC(); const c = C.contact; const f = C.footer; const H = window.H; return ( {c.eyebrow} {c.lead} ✉ {c.mail} {window.SOCIALS.map((s,i)=>({s.k} ↗))} ); } Object.assign(window, { Skills, Companies, Projects, Education, Contact });
{g.d}
{f.desc}
{sp.desc}
{a.desc}
{c.lead}