TenantAtlas/apps/website/src/pages/legal.astro
ahmido 0da1b38764
Some checks failed
Main Confidence / confidence (push) Failing after 43s
feat: implement website core pages IA (#252)
## 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
2026-04-19 10:20:05 +00:00

94 lines
5.1 KiB
Plaintext

---
import RichText from '@/components/content/RichText.astro';
import PageShell from '@/components/layout/PageShell.astro';
import Card from '@/components/primitives/Card.astro';
import Container from '@/components/primitives/Container.astro';
import Grid from '@/components/primitives/Grid.astro';
import Section from '@/components/primitives/Section.astro';
import SectionHeader from '@/components/primitives/SectionHeader.astro';
import CTASection from '@/components/sections/CTASection.astro';
import PageHero from '@/components/sections/PageHero.astro';
import { legalHero, legalNoticeSections, legalSeo } from '@/content/pages/legal';
---
<PageShell currentPath="/legal" title={legalSeo.title} description={legalSeo.description}>
<PageHero
hero={legalHero}
calloutTitle="The legal baseline should stay explicit without taking over the route hierarchy."
calloutDescription="The retained legal hub helps visitors find the privacy, terms, and notice baseline quickly while Trust and Contact remain easier to discover."
/>
<Section tone="muted" density="base" layer="2">
<Container width="wide">
<div class="space-y-8">
<SectionHeader
eyebrow="Available now"
title="Keep the legal baseline explicit without promoting it into the main navigation."
description="The retained legal hub should work as an index for Trust, Privacy, Terms, and Imprint while staying secondary to the core buyer journey."
/>
<Grid cols="2">
<Card>
<h3 class="m-0 text-2xl font-semibold text-[var(--color-ink-900)]">Trust</h3>
<p class="mt-3 text-base leading-7 text-[var(--color-copy)]">
Review the canonical public trust surface for tenant isolation, access boundaries, and operating discipline.
</p>
<a class="mt-5 inline-flex text-sm font-semibold text-[var(--color-brand)]" href="/trust">
Trust
</a>
</Card>
<Card>
<h3 class="m-0 text-2xl font-semibold text-[var(--color-ink-900)]">Privacy</h3>
<p class="mt-3 text-base leading-7 text-[var(--color-copy)]">
Review how the public contact path handles inquiry information and what this static website does not claim to process.
</p>
<a class="mt-5 inline-flex text-sm font-semibold text-[var(--color-brand)]" href="/privacy">
Privacy
</a>
</Card>
<Card>
<h3 class="m-0 text-2xl font-semibold text-[var(--color-ink-900)]">Terms</h3>
<p class="mt-3 text-base leading-7 text-[var(--color-copy)]">
Read the website terms that explain the public-site scope and why marketing pages do not replace signed agreements.
</p>
<a class="mt-5 inline-flex text-sm font-semibold text-[var(--color-brand)]" href="/terms">
Terms
</a>
</Card>
<Card variant="accent">
<h3 class="m-0 text-2xl font-semibold text-[var(--color-ink-900)]">Imprint</h3>
<p class="mt-3 text-base leading-7 text-[var(--color-copy)]">
Review the canonical notice baseline for publisher identity and jurisdiction-specific disclosure details.
</p>
<a class="mt-5 inline-flex text-sm font-semibold text-[var(--color-brand)]" href="/imprint">
Imprint
</a>
</Card>
<Card>
<h3 class="m-0 text-2xl font-semibold text-[var(--color-ink-900)]">Terms</h3>
<p class="mt-3 text-base leading-7 text-[var(--color-copy)]">
Read the website terms that explain the public-site scope and why marketing pages do not replace signed agreements.
</p>
<a class="mt-5 inline-flex text-sm font-semibold text-[var(--color-brand)]" href="/terms">
Terms
</a>
</Card>
</Grid>
</div>
</Container>
</Section>
<Section density="compact" layer="3">
<Container width="measure">
<RichText sections={legalNoticeSections} />
</Container>
</Section>
<CTASection
eyebrow="Continue"
title="Return to trust or contact once the legal baseline is clear."
description="The legal surface should support a qualified conversation, not interrupt it."
primary={{ href: '/contact', label: 'Return to contact' }}
secondary={{ href: '/trust', label: 'Review the trust posture', variant: 'secondary' }}
/>
</PageShell>