import { useState, useEffect } from 'react'
import { motion, AnimatePresence } from 'framer-motion'
import Navbar from './components/Navbar'
import Hero from './components/Hero'
import About from './components/About'
import Skills from './components/Skills'
import Experience from './components/Experience'
import Publications from './components/Publications'
import Projects from './components/Projects'
import Education from './components/Education'
import Achievements from './components/Achievements'
import Blog from './components/Blog'
import Contact from './components/Contact'
import Footer from './components/Footer'
import Terminal from './components/Terminal'
function Loader({ done }) {
return (
{!done && (
Parthib Karak.
)}
)
}
function ScrollTopBtn() {
const [visible, setVisible] = useState(false)
useEffect(() => {
const fn = () => setVisible(window.scrollY > 600)
window.addEventListener('scroll', fn, { passive: true })
return () => window.removeEventListener('scroll', fn)
}, [])
if (!visible) return null
return (
window.scrollTo({ top: 0, behavior: 'smooth' })}
style={{
position: 'fixed', bottom: 92, right: 28, zIndex: 50,
width: 44, height: 44, borderRadius: '50%',
background: 'linear-gradient(135deg, var(--accent-primary), var(--accent-secondary))',
border: 'none', cursor: 'pointer', color: 'white',
display: 'flex', alignItems: 'center', justifyContent: 'center',
fontSize: '1.1rem', boxShadow: '0 6px 20px rgba(99,102,241,0.4)',
}}
initial={{ opacity: 0, scale: 0.8 }}
animate={{ opacity: 1, scale: 1 }}
exit={{ opacity: 0 }}
whileHover={{ scale: 1.1 }}
whileTap={{ scale: 0.95 }}
aria-label="Scroll to top"
>
↑
)
}
export default function App() {
const [theme, setTheme] = useState('dark')
const [loaded, setLoaded] = useState(false)
useEffect(() => {
document.documentElement.setAttribute('data-theme', theme)
}, [theme])
useEffect(() => {
const t = setTimeout(() => setLoaded(true), 1300)
return () => clearTimeout(t)
}, [])
return (
<>
>
)
}