diff --git a/app/globals.css b/app/globals.css index 8fd3c99..8e8bdfa 100644 --- a/app/globals.css +++ b/app/globals.css @@ -15,10 +15,15 @@ --color-progress: #6b5730; } -* { box-sizing: border-box; } +* { + box-sizing: border-box; +} /* All page sections sit above the fixed GridCanvas (z-index 0) */ -main > section { position: relative; z-index: 5; } +main>section { + position: relative; + z-index: 5; +} html { scroll-behavior: smooth; @@ -32,66 +37,117 @@ body { overflow-x: hidden; } -body::before { - content: ""; - position: fixed; - inset: 0; - background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.04'/%3E%3C/svg%3E"); - pointer-events: none; - z-index: 1; - opacity: 0.35; + +::-webkit-scrollbar { + width: 4px; } -::-webkit-scrollbar { width: 4px; } -::-webkit-scrollbar-track { background: #07080a; } -::-webkit-scrollbar-thumb { background: #1c1f26; border-radius: 2px; } +::-webkit-scrollbar-track { + background: #07080a; +} + +::-webkit-scrollbar-thumb { + background: #1c1f26; + border-radius: 2px; +} @keyframes fadeUp { - from { opacity: 0; transform: translateY(32px); } - to { opacity: 1; transform: translateY(0); } + from { + opacity: 0; + transform: translateY(32px); + } + + to { + opacity: 1; + transform: translateY(0); + } } + @keyframes fadeIn { - from { opacity: 0; } - to { opacity: 1; } + from { + opacity: 0; + } + + to { + opacity: 1; + } } + @keyframes slideRight { - from { transform: scaleX(0); } - to { transform: scaleX(1); } + from { + transform: scaleX(0); + } + + to { + transform: scaleX(1); + } } + @keyframes pulse-glow { - 0%, 100% { box-shadow: 0 0 0 0 rgba(200, 169, 110, 0); } - 50% { box-shadow: 0 0 20px 4px rgba(200, 169, 110, 0.12); } + + 0%, + 100% { + box-shadow: 0 0 0 0 rgba(200, 169, 110, 0); + } + + 50% { + box-shadow: 0 0 20px 4px rgba(200, 169, 110, 0.12); + } } + @keyframes blink { - 0%, 100% { opacity: 1; } - 50% { opacity: 0; } + + 0%, + 100% { + opacity: 1; + } + + 50% { + opacity: 0; + } } + @keyframes scroll-bounce { - 0%, 100% { transform: translateY(0); } - 50% { transform: translateY(6px); } + + 0%, + 100% { + transform: translateY(0); + } + + 50% { + transform: translateY(6px); + } } .animate-fade-up { animation: fadeUp 0.75s ease both; } -.delay-1 { animation-delay: 0.15s; } -.delay-2 { animation-delay: 0.3s; } -.delay-3 { animation-delay: 0.45s; } -.delay-4 { animation-delay: 0.6s; } -.delay-5 { animation-delay: 0.75s; } -.delay-6 { animation-delay: 0.9s; } +.delay-1 { + animation-delay: 0.15s; +} -.reveal { - opacity: 0; - transform: translateY(24px); - transition: opacity 0.7s ease, transform 0.7s ease; +.delay-2 { + animation-delay: 0.3s; } -.reveal.visible { - opacity: 1; - transform: translateY(0); + +.delay-3 { + animation-delay: 0.45s; } +.delay-4 { + animation-delay: 0.6s; +} + +.delay-5 { + animation-delay: 0.75s; +} + +.delay-6 { + animation-delay: 0.9s; +} + + /* grid-bg: static CSS grid removed — replaced by GridCanvas (canvas-based distortion) */ .grid-bg {} @@ -102,21 +158,26 @@ body::before { position: relative; overflow: hidden; } + .project-card::before { content: ''; position: absolute; inset: 0; - background: linear-gradient(135deg, rgba(200,169,110,0.05) 0%, transparent 60%); + background: linear-gradient(135deg, rgba(200, 169, 110, 0.05) 0%, transparent 60%); opacity: 0; transition: opacity 0.3s ease; pointer-events: none; } + .project-card:hover { border-color: #6b5730; transform: translateY(-3px); - box-shadow: 0 16px 48px rgba(0,0,0,0.5); + box-shadow: 0 16px 48px rgba(0, 0, 0, 0.5); +} + +.project-card:hover::before { + opacity: 1; } -.project-card:hover::before { opacity: 1; } .tech-tag { font-family: var(--font-jetbrains), monospace; @@ -129,6 +190,7 @@ body::before { display: inline-block; transition: border-color 0.2s, color 0.2s; } + .tech-tag:hover { border-color: #6b5730; color: #c8a96e; @@ -143,6 +205,7 @@ body::before { transition: color 0.2s; position: relative; } + .nav-link::after { content: ''; position: absolute; @@ -153,8 +216,14 @@ body::before { background: #c8a96e; transition: width 0.25s ease; } -.nav-link:hover { color: #c8a96e; } -.nav-link:hover::after { width: 100%; } + +.nav-link:hover { + color: #c8a96e; +} + +.nav-link:hover::after { + width: 100%; +} .status-done { font-family: var(--font-jetbrains), monospace; @@ -165,6 +234,7 @@ body::before { color: #3a7a5a; text-transform: uppercase; } + .status-progress { font-family: var(--font-jetbrains), monospace; font-size: 0.58rem; @@ -209,11 +279,17 @@ body::before { background: #1c1f26; border: 1px solid #1c1f26; } + @media (max-width: 1023px) { - .hero-bento-grid { grid-template-columns: repeat(2, 1fr); } + .hero-bento-grid { + grid-template-columns: repeat(2, 1fr); + } } + @media (max-width: 599px) { - .hero-bento-grid { grid-template-columns: 1fr; } + .hero-bento-grid { + grid-template-columns: 1fr; + } } /* ── Hero header responsive ──────────────────────────────────── */ @@ -225,8 +301,12 @@ body::before { gap: 1.5rem; margin-bottom: 2.5rem; } + @media (max-width: 599px) { - .hero-header-strip { flex-direction: column; align-items: flex-start; } + .hero-header-strip { + flex-direction: column; + align-items: flex-start; + } } /* ── Hero section padding ────────────────────────────────────── */ @@ -236,6 +316,7 @@ body::before { padding-left: 2rem; padding-right: 2rem; } + @media (max-width: 599px) { .hero-section { padding-top: 76px; @@ -245,10 +326,31 @@ body::before { } /* ── Headline cursor blink ───────────────────────────────────── */ -@keyframes cursor-blink { - 0%, 100% { opacity: 1; } - 50% { opacity: 0; } + +.mobile-menu-btn { + display: flex !important; } + +@media (min-width: 768px) { + .mobile-menu-btn { + display: none !important; + } +} + +@keyframes cursor-blink { + + 0%, + 100% { + opacity: 1; + } + + 50% { + opacity: 0; + } +} + +nav a:hover .nav-underline { transform: scaleX(1) !important; } + .headline-cursor { display: inline-block; width: 3px; @@ -256,4 +358,4 @@ body::before { margin-left: 4px; animation: cursor-blink 1.1s step-end infinite; vertical-align: baseline; -} +} \ No newline at end of file diff --git a/app/layout.tsx b/app/layout.tsx index ff90441..8085e2c 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -37,7 +37,19 @@ export default function RootLayout({ >