feat: core layout, UI atoms, homepage + behaviour modules

- UI atoms: Chip, Button, SplitCvButton, LangSwitch, ThemeToggle, Card,
  SectionLabel, TraceMotif, FramedImage
- core: Base/Seo/Header/MobileNav/Footer/HintBar/SkipLink/ThemeScript
- homepage sections: Hero, ProofStrip, SkillsGrid, ProjectCards,
  ExperienceTimeline, AboutTeaser, ContactBand + Homepage composition (EN/NO)
- behaviour modules: theme, nav (overlay/hint/copy/header), observer (reveal/spy),
  lightbox, form — progressive enhancement, fail-silent
- SEO head component: meta, hreflang from slug map, JSON-LD, OG references
- move content data to src/data (avoid Astro reserved content-collection folder)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
cesnimda
2026-07-04 01:20:46 +02:00
parent 2184a1892f
commit 1fce1b3cec
45 changed files with 1891 additions and 27 deletions
+23
View File
@@ -0,0 +1,23 @@
---
import type { ProfileVM } from '@lib/content';
interface Props {
profile: ProfileVM;
}
const { profile } = Astro.props;
---
<section class="mx-auto max-w-[--content-max] px-6" data-reveal>
<ul class="grid grid-cols-2 gap-4 lg:grid-cols-4">
{
profile.proof.map((tile) => (
<li class="rounded-md border border-line bg-surface-1 p-5">
<p class="font-display text-[22px] font-semibold leading-tight text-ink">{tile.stat}</p>
<p class="mt-2 font-mono text-mono-label font-medium uppercase tracking-[0.08em] text-ink-faint">
{tile.label}
</p>
</li>
))
}
</ul>
</section>