feat(nav): restructure header + add footer for council portal
Nav now reads Pulse · Roadmap · Members · Events · [Admin]. Old links (Home / Vision / Product / Updates / Contribute) are dropped from the header; Vision moves to the footer alongside a Council manifesto stub. Header keeps the name + Sign out on the right exactly as before — Sign out is NOT duplicated in the footer. Footer: small Fenja icon mark + © year + two text links. Uses the existing ghost-border, no shadows, matches editorial flatness. /council-manifesto added as a one-screen stub so the link doesn't 404. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
20209db2d8
commit
267ba34747
2 changed files with 120 additions and 6 deletions
|
|
@ -10,15 +10,19 @@ interface Props {
|
||||||
const { title, user } = Astro.props;
|
const { title, user } = Astro.props;
|
||||||
|
|
||||||
const navLinks = [
|
const navLinks = [
|
||||||
{ href: '/', label: 'Home' },
|
{ href: '/pulse', label: 'Pulse' },
|
||||||
{ href: '/vision', label: 'Vision' },
|
|
||||||
{ href: '/product', label: 'Product' },
|
|
||||||
{ href: '/updates', label: 'Updates' },
|
|
||||||
{ href: '/roadmap', label: 'Roadmap' },
|
{ href: '/roadmap', label: 'Roadmap' },
|
||||||
{ href: '/contribute', label: 'Contribute'},
|
{ href: '/members', label: 'Members' },
|
||||||
|
{ href: '/events', label: 'Events' },
|
||||||
|
];
|
||||||
|
|
||||||
|
const footerLinks = [
|
||||||
|
{ href: '/vision', label: 'Vision' },
|
||||||
|
{ href: '/council-manifesto', label: 'Council manifesto' },
|
||||||
];
|
];
|
||||||
|
|
||||||
const currentPath = Astro.url.pathname;
|
const currentPath = Astro.url.pathname;
|
||||||
|
const year = new Date().getFullYear();
|
||||||
---
|
---
|
||||||
<BaseLayout title={title}>
|
<BaseLayout title={title}>
|
||||||
<div class="app">
|
<div class="app">
|
||||||
|
|
@ -59,6 +63,20 @@ const currentPath = Astro.url.pathname;
|
||||||
<main class="main-content">
|
<main class="main-content">
|
||||||
<slot />
|
<slot />
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
<footer class="footer" role="contentinfo">
|
||||||
|
<div class="footer-inner">
|
||||||
|
<div class="footer-left">
|
||||||
|
<img src="/logo-icon.svg" alt="" class="footer-mark" />
|
||||||
|
<span class="footer-copy label-sm">© {year} Fenja AI</span>
|
||||||
|
</div>
|
||||||
|
<nav class="footer-links" aria-label="Secondary">
|
||||||
|
{footerLinks.map(({ href, label }) => (
|
||||||
|
<a href={href} class="footer-link label-sm">{label}</a>
|
||||||
|
))}
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
</BaseLayout>
|
</BaseLayout>
|
||||||
|
|
||||||
|
|
@ -181,4 +199,59 @@ const currentPath = Astro.url.pathname;
|
||||||
.main-content {
|
.main-content {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ── Footer ─────────────────────────────────────────────────────── */
|
||||||
|
.footer {
|
||||||
|
margin-top: var(--space-16);
|
||||||
|
padding: var(--space-6) 0;
|
||||||
|
border-top: var(--ghost-border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-inner {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
gap: var(--space-6);
|
||||||
|
padding: 0 var(--space-10);
|
||||||
|
max-width: var(--content-max);
|
||||||
|
margin: 0 auto;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-left {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: var(--space-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-mark {
|
||||||
|
height: 16px;
|
||||||
|
width: auto;
|
||||||
|
display: block;
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-copy {
|
||||||
|
color: var(--on-surface-muted);
|
||||||
|
letter-spacing: var(--tracking-wide);
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-links {
|
||||||
|
display: flex;
|
||||||
|
gap: var(--space-5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-link {
|
||||||
|
color: var(--on-surface-muted);
|
||||||
|
text-decoration: none;
|
||||||
|
border-bottom: none;
|
||||||
|
letter-spacing: var(--tracking-wide);
|
||||||
|
text-transform: uppercase;
|
||||||
|
transition: color var(--duration-fast) var(--ease-standard);
|
||||||
|
}
|
||||||
|
.footer-link:hover {
|
||||||
|
color: var(--on-surface-variant);
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
41
src/pages/council-manifesto.astro
Normal file
41
src/pages/council-manifesto.astro
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
---
|
||||||
|
import AppLayout from '../layouts/AppLayout.astro';
|
||||||
|
|
||||||
|
const user = Astro.locals.user;
|
||||||
|
---
|
||||||
|
<AppLayout title="Council manifesto" user={user}>
|
||||||
|
<div class="page">
|
||||||
|
<header class="page-header">
|
||||||
|
<p class="label-sm eyebrow">Council manifesto</p>
|
||||||
|
<h1 class="display-md page-title">A document, in draft.</h1>
|
||||||
|
</header>
|
||||||
|
<div class="reading-col">
|
||||||
|
<p class="lead">
|
||||||
|
The Council manifesto is being written together with the founding members.
|
||||||
|
A first draft will land here before the kickoff session — followed by a window
|
||||||
|
for council members to mark it up directly.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</AppLayout>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.page {
|
||||||
|
padding: var(--space-12) var(--space-20) var(--space-16);
|
||||||
|
max-width: var(--content-max);
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
.page-header {
|
||||||
|
max-width: 44rem;
|
||||||
|
margin-bottom: var(--space-8);
|
||||||
|
}
|
||||||
|
.eyebrow {
|
||||||
|
letter-spacing: var(--tracking-wider);
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: var(--on-surface-muted);
|
||||||
|
margin-bottom: var(--space-3);
|
||||||
|
}
|
||||||
|
.page-title { margin: 0; }
|
||||||
|
.reading-col { max-width: var(--reading-max); }
|
||||||
|
.lead { color: var(--on-surface-variant); }
|
||||||
|
</style>
|
||||||
Loading…
Add table
Reference in a new issue