Some checks failed
Main Confidence / confidence (push) Failing after 43s
## Summary - implement the website-only core IA for Spec 215 with canonical Home, Product, Trust, Changelog, Contact, Privacy, and Imprint routes - reduce primary navigation to the core buyer journey, retain legal/supporting pages as secondary surfaces, and redirect `/security-trust` to `/trust` - add route metadata, sitemap/canonical handling, changelog publishing, and updated smoke coverage for the new IA contract ## Testing - `corepack pnpm build:website` - `cd apps/website && corepack pnpm exec playwright test` - integrated browser smoke validation for core routes, secondary routes, `/security-trust -> /trust`, hidden optional routes, mobile nav, and Trust/Changelog to Contact paths ## Notes - keeps all changes local to `apps/website` and the Spec 215 artifacts - preserves the website working contract with no `apps/platform` runtime coupling Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #252
62 lines
2.7 KiB
Plaintext
62 lines
2.7 KiB
Plaintext
---
|
|
import PrimaryCTA from '@/components/content/PrimaryCTA.astro';
|
|
import Container from '@/components/primitives/Container.astro';
|
|
import { getFooterLead, getFooterNavigationGroups, siteMetadata } from '@/lib/site';
|
|
|
|
interface Props {
|
|
currentPath: string;
|
|
}
|
|
|
|
const { currentPath: _currentPath } = Astro.props;
|
|
const currentYear = new Date().getFullYear();
|
|
const footerLead = getFooterLead(_currentPath);
|
|
const footerNavigationGroups = await getFooterNavigationGroups();
|
|
---
|
|
|
|
<footer class="section-divider px-[var(--space-page-x)] pt-10 sm:pt-12" data-footer-intent={footerLead.intent}>
|
|
<Container width="wide">
|
|
<div class="surface-card-muted grid gap-8 rounded-[var(--radius-panel)] p-6 lg:grid-cols-[1.3fr,1fr] lg:p-8">
|
|
<div class="space-y-5">
|
|
<p class="m-0 text-sm font-semibold uppercase tracking-[0.16em] text-[var(--color-brand)]">
|
|
{footerLead.eyebrow}
|
|
</p>
|
|
<h2 class="m-0 max-w-xl font-[var(--font-display)] text-3xl leading-[0.98] text-[var(--color-ink-900)] sm:text-4xl">
|
|
{footerLead.title}
|
|
</h2>
|
|
<p class="m-0 max-w-xl text-base leading-7 text-[var(--color-copy)]">
|
|
{footerLead.description}
|
|
</p>
|
|
<PrimaryCTA cta={footerLead.primaryCta} size="sm" />
|
|
</div>
|
|
|
|
<div class="grid gap-6 sm:grid-cols-2 xl:grid-cols-4">
|
|
{
|
|
footerNavigationGroups.map((group) => (
|
|
<div>
|
|
<p class="m-0 text-sm font-semibold uppercase tracking-[0.14em] text-[var(--color-ink-900)]">
|
|
{group.title}
|
|
</p>
|
|
<ul class="mt-4 space-y-3 p-0 text-sm text-[var(--color-copy)]">
|
|
{group.items.map((item) => (
|
|
<li class="list-none">
|
|
<a class="transition hover:text-[var(--color-brand)]" href={item.href}>
|
|
{item.label}
|
|
</a>
|
|
</li>
|
|
))}
|
|
</ul>
|
|
</div>
|
|
))
|
|
}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="flex flex-col gap-3 py-6 text-sm text-[var(--color-copy)] sm:flex-row sm:items-center sm:justify-between">
|
|
<p class="m-0">© {currentYear} {siteMetadata.siteName}. Core public route foundation.</p>
|
|
<p class="m-0">
|
|
Built as a static Astro track with no platform auth, session, or API coupling.
|
|
</p>
|
|
</div>
|
|
</Container>
|
|
</footer>
|