534e0f16e5
Implemented dual-state skeleton system as specified in prompt: - Each component has actual-content + skeleton-content structure - CSS toggles visibility via .loading class on component-wrapper - Individual skeleton boxes (name, photo, intro, etc.) with shimmer animation - Hyperscript triggers loading state during language switch Changes: - skeleton.css: Complete component-level skeleton CSS system with shimmer - language-selector.html: Hyperscript to add/remove .loading class - header.html: Dual-state structure with skeleton placeholders Behavior: - Click language button → .loading class added to components - Actual content fades out (opacity → 0) in 250ms - Skeleton boxes appear and shimmer - After HTMX swap + 100ms delay → .loading class removed - New content fades in (opacity → 1) in 250ms Test Results: ✅ Component wrapper structure verified ✅ Dual-state toggle working correctly ✅ Skeleton elements present and animated ✅ Shimmer animation active (1.8s infinite loop) ✅ Accessibility: respects prefers-reduced-motion ✅ Print: skeletons hidden, content always visible Next: Add skeleton structure to remaining components (experience, education, skills, projects)