"use client"; import { useEffect, useRef } from "react"; interface SkillsProps { skills: string[]; languages: { name: string; level: string }[]; interests: string[]; } export default function Skills({ skills, languages, interests }: SkillsProps) { const headingRef = useRef(null); const skillsRef = useRef(null); useEffect(() => { const els = [headingRef.current, skillsRef.current].filter(Boolean); const obs = new IntersectionObserver( (entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { entry.target.classList.add("visible"); } }); }, { threshold: 0.1 } ); els.forEach((el) => el && obs.observe(el)); return () => obs.disconnect(); }, []); // Give skills a pseudo-random "weight" based on their index for visual variety const weights = [1.3, 1, 1.5, 1, 1.2, 0.9, 1.4, 1, 1.1, 0.95, 1.3, 1, 1.2, 0.9, 1.4, 1, 1.1, 1.3]; const levelColor = (level: string) => { if (level === "Native") return "#c8a96e"; if (level === "C2") return "#3a7a5a"; if (level === "C1") return "#6b7a50"; return "#4a5060"; }; return (
Expertise

Skills & Profile

{/* Tech skills */}
Technical Stack
{skills.map((skill, i) => ( { const el = e.currentTarget as HTMLElement; el.style.borderColor = "#c8a96e"; el.style.color = "#c8a96e"; el.style.background = "rgba(200,169,110,0.05)"; }} onMouseLeave={(e) => { const el = e.currentTarget as HTMLElement; el.style.borderColor = "#1c1f26"; el.style.color = "#6b7280"; el.style.background = "#0e1014"; }} > {skill} ))}
{/* Languages + Interests stacked */}
{/* Languages */}
Languages
{languages.map((lang) => (
{lang.name} {lang.level}
))}
{/* Interests */}
Interests
{interests.map((interest) => ( { const el = e.currentTarget as HTMLElement; el.style.borderColor = "#6b5730"; el.style.color = "#c8a96e"; }} onMouseLeave={(e) => { const el = e.currentTarget as HTMLElement; el.style.borderColor = "#1c1f26"; el.style.color = "#6b7280"; }} > {interest} ))}
); }