init: project setup

This commit is contained in:
cojocaru-david
2025-04-22 13:53:47 +03:00
commit eb9b1a88be
370 changed files with 33387 additions and 0 deletions

65
src/layouts/Layout.astro Normal file
View File

@@ -0,0 +1,65 @@
---
import '@/styles/global.css'
import '@/styles/typography.css'
import Footer from '@/components/Footer.astro'
import Head from '@/components/Head.astro'
import Navbar from '@/components/react/navbar'
import { SITE } from '@/consts'
import { cn } from '@/lib/utils'
const { isWide = false } = Astro.props
---
<!doctype html>
<html lang={SITE.locale}>
<Head>
<slot name="head" />
<link rel="preload" href="/fonts/ClashDisplay-Semibold.woff2" as="font" crossorigin="anonymous" />
<link rel="preload" href="/fonts/ClashDisplay-Semibold.woff" as="font" crossorigin="anonymous" />
<link rel="preload" href="/fonts/ClashDisplay-Semibold.ttf" as="font" crossorigin="anonymous" />
<link rel="preload" href="/fonts/ClashDisplay-Semibold.eot" as="font" crossorigin="anonymous" />
<link rel="preload" href="/fonts/GeistMonoVF.woff2" as="font" crossorigin="anonymous" />
<link rel="preload" href="/fonts/GeistVF.woff2" as="font" crossorigin="anonymous" />
<link rel="preload" href="/fonts/_montserrat_bold.ttf" as="font" crossorigin="anonymous" />
<link rel="preload" href="/fonts/_montserrat_regular.ttf" as="font" crossorigin="anonymous" />
<script is:inline data-astro-rerun>
(function() {
try {
const localStorageTheme = localStorage.getItem('theme');
const isDark =
(localStorageTheme === 'dark') ||
(!localStorageTheme && window.matchMedia('(prefers-color-scheme: dark)').matches);
document.documentElement.classList.toggle('dark', isDark);
localStorage.setItem('theme', isDark ? 'dark' : 'light');
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', e => {
if (!localStorage.getItem('theme')) {
document.documentElement.classList.toggle('dark', e.matches);
localStorage.setItem('theme', e.matches ? 'dark' : 'light');
}
});
} catch (error) {
console.warn('Theme setting failed:', error);
}
})();
</script>
</Head>
<body>
<div class="flex h-fit min-h-screen w-full flex-col gap-y-4 sm:gap-y-6 font-sans">
<Navbar client:load />
<main class="flex grow flex-col bg-background" aria-label="Main content" role="main">
<div
class={cn(
'mx-auto flex grow flex-col gap-y-4 sm:gap-y-6 px-3 py-10 sm:py-16 md:py-20 lg:py-24 sm:px-6 lg:px-8',
!isWide && 'max-w-5xl'
)}
>
<slot />
</div>
</main>
<Footer />
</div>
</body>
</html>