diff --git a/TODO.md b/TODO.md
index 6b4d02f..1c42196 100644
--- a/TODO.md
+++ b/TODO.md
@@ -1,24 +1,10 @@
# TODO
-## Completed
-
-- [x] Apply correct fonts site-wide
- - Registered `Combined` and all 4 weights of `BBBDMSans` via `@font-face` in `common.css`
- - Added `--font-body` and `--font-display` CSS variables in `variables.css`
- - All font usages across `common.css`, `tfe.css`, `apropos.css` use `var(--font-body)` / `var(--font-display)`
- - Code blocks keep `Courier New` monospace (intentional)
-
-- [x] Répertoire: rename search.php → repertoire.php, 6-column layout (AP + Orientations split, Finalité du Master added), HTMX server-side intersection filter, faded entries disabled, URL-shareable state
-- [x] Match Accueil.png mockup
- - Nav: brand → "Xamxam", add Répertoire left, Licences/À Propos right
- - Search bar: full-width below nav (not inline)
- - Section label: "Publication récente" replacing "DÉCOUVREZ LES TFE" label
- - CSS: nav-left/nav-right layout, full-width search form
-
-- [x] Fix homepage card grid styling
- - Added `gap: 1.25rem` and padding to `.cards-container` (was `gap: 0`, no padding)
- - Added `border`, `border-radius: 8px`, hover shadow + lift to `.card`
- - Added `border-radius` to `.home-body figure` and `.card__media--gradient`
- - Fixed `.card__media--gradient` to use `aspect-ratio: 4/3` (was `height: 100%` which broke without explicit parent height)
- - Added `border-top` separator between card media and caption
- - Restyled `.home-latest-label` as uppercase section heading with border-bottom
+## Done
+- [x] Improve À propos page layout
+ - [x] Replace two-column (prose + aside) with sticky-TOC-nav + main-content layout
+ - [x] Sticky left nav with section anchors (À propos, Contacts, Crédits + erg link)
+ - [x] Contacts rendered as bordered rows instead of loose address blocks
+ - [x] Credits rendered as `
` grid with label/value rows
+ - [x] Section dividers (border-bottom) between sections
+ - [x] Responsive: TOC collapses to horizontal bar on mobile
diff --git a/public/apropos.php b/public/apropos.php
index 0d14dac..7cf1279 100644
--- a/public/apropos.php
+++ b/public/apropos.php
@@ -44,46 +44,67 @@ $bodyClass = 'apropos-body';
-
-
- = $aboutHtml ?>
-
+
+
-
-
diff --git a/public/assets/css/apropos.css b/public/assets/css/apropos.css
index 51d4146..49c6498 100644
--- a/public/assets/css/apropos.css
+++ b/public/assets/css/apropos.css
@@ -1,9 +1,13 @@
/* ============================================================
- À PROPOS PAGE (apropos.php) + LICENCE PAGE (licence.php)
+ À PROPOS PAGE (apropos.php)
============================================================ */
@import url("./variables.css");
+/* ------------------------------------------------------------------ */
+/* Page shell */
+/* ------------------------------------------------------------------ */
+
.apropos-body {
display: flex;
flex-direction: column;
@@ -13,38 +17,136 @@
.apropos-main {
flex: 1;
- overflow-y: auto;
- padding: 2.5rem 1.5rem 4rem;
-}
-
-/* Two-column layout */
-.apropos-layout {
- display: grid;
- grid-template-columns: 1.4fr 1fr;
- gap: 4rem;
- max-width: 1200px;
-}
-
-/* Single-column layout — used by licence.php (no right column) */
-.apropos-single {
- max-width: 720px;
+ padding: 3rem 2rem 5rem;
}
/* ------------------------------------------------------------------ */
-/* Main prose column — Markdown-rendered content */
+/* Two-column layout: sticky TOC nav | content */
+/* ------------------------------------------------------------------ */
+
+.apropos-layout {
+ display: grid;
+ grid-template-columns: 180px 1fr;
+ gap: 4rem;
+ max-width: 860px;
+ margin: 0 auto;
+ align-items: start;
+}
+
+/* ------------------------------------------------------------------ */
+/* Left — sticky table of contents */
+/* ------------------------------------------------------------------ */
+
+.apropos-toc {
+ position: sticky;
+ top: 2.5rem;
+}
+
+.apropos-toc-label {
+ font-family: var(--font-body);
+ font-size: 0.72rem;
+ font-weight: 600;
+ letter-spacing: 0.12em;
+ text-transform: uppercase;
+ color: var(--text-tertiary);
+ margin: 0 0 0.6rem 0;
+}
+
+.apropos-toc ul {
+ list-style: none;
+ margin: 0 0 1.5rem 0;
+ padding: 0;
+ display: flex;
+ flex-direction: column;
+ gap: 0.25rem;
+}
+
+.apropos-toc ul a {
+ font-family: var(--font-body);
+ font-size: 0.875rem;
+ color: var(--text-secondary);
+ text-decoration: none;
+ display: block;
+ padding: 0.2rem 0;
+ transition: color 0.15s;
+ border-left: 2px solid transparent;
+ padding-left: 0.6rem;
+}
+
+.apropos-toc ul a:hover {
+ color: var(--text-primary);
+ border-left-color: var(--accent-primary);
+}
+
+.apropos-toc-erg {
+ padding-top: 1rem;
+ border-top: 1px solid var(--border-primary);
+}
+
+.apropos-toc-erg a {
+ font-size: 0.8rem;
+ color: var(--accent-primary);
+ text-decoration: none;
+ transition: opacity 0.15s;
+}
+
+.apropos-toc-erg a:hover {
+ opacity: 0.75;
+}
+
+/* ------------------------------------------------------------------ */
+/* Right — main content area */
+/* ------------------------------------------------------------------ */
+
+.apropos-content {
+ display: flex;
+ flex-direction: column;
+ gap: 0;
+}
+
+.apropos-section {
+ padding-bottom: 3.5rem;
+ border-bottom: 1px solid var(--border-primary);
+ margin-bottom: 3.5rem;
+}
+
+.apropos-section:last-child {
+ border-bottom: none;
+ margin-bottom: 0;
+ padding-bottom: 0;
+}
+
+/* ------------------------------------------------------------------ */
+/* Section titles */
+/* ------------------------------------------------------------------ */
+
+.apropos-section-title {
+ font-family: var(--font-display);
+ font-size: 2rem;
+ font-weight: 400;
+ color: var(--text-primary);
+ margin: 0 0 1.75rem 0;
+ line-height: 1.1;
+}
+
+/* ------------------------------------------------------------------ */
+/* Intro prose — Markdown-rendered content */
/* ------------------------------------------------------------------ */
.prose {
font-family: var(--font-body);
- font-size: 1.55rem;
- line-height: 1.45;
+ font-size: 1.45rem;
+ line-height: 1.5;
color: var(--text-primary);
font-weight: 400;
- margin: 0 0 2rem 0;
}
.prose p {
- margin: 0 0 1.2em 0;
+ margin: 0 0 1em 0;
+}
+
+.prose p:last-child {
+ margin-bottom: 0;
}
.prose h1,
@@ -55,12 +157,13 @@
margin: 1.5em 0 0.5em 0;
}
-.prose h1 { font-size: 1.55rem; }
-.prose h2 { font-size: 1.3rem; }
-.prose h3 { font-size: 1.1rem; }
+.prose h1 { font-size: 2rem; }
+.prose h2 { font-size: 1.5rem; }
+.prose h3 { font-size: 1.2rem; }
.prose a {
color: var(--accent-primary);
+ text-decoration: underline;
text-underline-offset: 2px;
}
@@ -71,110 +174,163 @@
}
.prose li {
- margin-bottom: .3em;
+ margin-bottom: 0.3em;
}
.prose strong { font-weight: 700; }
.prose em { font-style: italic; }
.prose code {
- font-family: "Courier New", Courier, monospace; /* keep monospace for code */
- font-size: 0.9em;
+ font-family: "Courier New", Courier, monospace;
+ font-size: 0.88em;
background: var(--bg-tertiary);
- padding: .1em .3em;
+ padding: 0.1em 0.3em;
border-radius: 2px;
}
/* ------------------------------------------------------------------ */
-/* Right aside — links, contacts, credits */
+/* Contacts grid */
/* ------------------------------------------------------------------ */
-.apropos-aside {
+.apropos-contacts-grid {
display: flex;
flex-direction: column;
- gap: 2rem;
+ gap: 0;
}
-.apropos-section-title {
- font-family: var(--font-display);
- font-size: 1.55rem;
- font-weight: 400;
- color: var(--text-primary);
- margin: 0 0 0.5rem 0;
- line-height: 1.2;
+.apropos-contact-card {
+ font-style: normal;
+ padding: 1.1rem 0;
+ border-bottom: 1px solid var(--border-primary);
}
-.apropos-section-title a {
- color: inherit;
- text-decoration: underline;
- text-underline-offset: 3px;
+.apropos-contact-card:first-child {
+ border-top: 1px solid var(--border-primary);
}
-/* Contact entries — elements */
-.apropos-aside address {
- margin-bottom: 1rem;
- font-style: normal; /* override browser italic default for */
-}
-
-.apropos-aside address strong {
- font-weight: 700;
+.apropos-contact-card strong {
+ display: block;
font-size: 0.95rem;
+ font-weight: 600;
color: var(--text-primary);
- display: block;
- margin-bottom: 0.15rem;
+ margin-bottom: 0.2rem;
}
-.apropos-aside address span,
-.apropos-aside address a {
- font-size: 0.9rem;
- color: var(--text-primary);
+.apropos-contact-card span {
+ display: block;
+ font-size: 0.85rem;
+ color: var(--text-secondary);
line-height: 1.4;
- display: block;
+ margin-bottom: 0.25rem;
}
-.apropos-aside address a {
+.apropos-contact-card a {
+ font-size: 0.85rem;
+ color: var(--accent-primary);
text-decoration: underline;
text-underline-offset: 2px;
+ transition: opacity 0.15s;
}
-.apropos-credits-text {
+.apropos-contact-card a:hover {
+ opacity: 0.75;
+}
+
+/* ------------------------------------------------------------------ */
+/* Credits list */
+/* ------------------------------------------------------------------ */
+
+.apropos-credits-list {
+ margin: 0;
+ padding: 0;
+ display: flex;
+ flex-direction: column;
+ gap: 0;
+}
+
+.apropos-credit-row {
+ display: grid;
+ grid-template-columns: 1fr 1.6fr;
+ gap: 1rem;
+ padding: 1rem 0;
+ border-bottom: 1px solid var(--border-primary);
+ align-items: baseline;
+}
+
+.apropos-credit-row:first-child {
+ border-top: 1px solid var(--border-primary);
+}
+
+.apropos-credits-list dt {
+ font-size: 0.8rem;
+ font-weight: 600;
+ letter-spacing: 0.04em;
+ text-transform: uppercase;
+ color: var(--text-tertiary);
+}
+
+.apropos-credits-list dd {
font-size: 0.9rem;
color: var(--text-primary);
- line-height: 1.6;
+ margin: 0;
+ line-height: 1.5;
}
-/* Licences section (legacy) */
-.apropos-licences {
- margin-top: 2rem;
+/* ------------------------------------------------------------------ */
+/* Single-column layout — used by licence.php (no sidebar) */
+/* ------------------------------------------------------------------ */
+
+.apropos-single {
+ max-width: 720px;
}
-.apropos-licences h2 {
- font-family: var(--font-display);
- font-size: 1.55rem;
- font-weight: 400;
- margin: 0 0 0.75rem 0;
-}
+/* ------------------------------------------------------------------ */
+/* Responsive */
+/* ------------------------------------------------------------------ */
-.apropos-licences p {
- font-size: 0.9rem;
- color: var(--text-primary);
- line-height: 1.6;
- margin: 0 0 0.75rem 0;
-}
-
-/* Responsive */
@media (max-width: 900px) {
.apropos-layout {
grid-template-columns: 1fr;
gap: 2rem;
}
+ .apropos-toc {
+ position: static;
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ gap: 1rem;
+ padding-bottom: 1rem;
+ border-bottom: 1px solid var(--border-primary);
+ }
+
+ .apropos-toc-label {
+ margin: 0;
+ }
+
+ .apropos-toc ul {
+ flex-direction: row;
+ margin: 0;
+ gap: 0.75rem;
+ }
+
+ .apropos-toc ul a {
+ border-left: none;
+ padding-left: 0;
+ }
+
+ .apropos-toc-erg {
+ border-top: none;
+ padding-top: 0;
+ margin-left: auto;
+ }
+
.prose {
font-size: 1.2rem;
}
.apropos-section-title {
- font-size: 1.2rem;
+ font-size: 1.6rem;
}
}
@@ -186,4 +342,9 @@
.prose {
font-size: 1rem;
}
+
+ .apropos-credit-row {
+ grid-template-columns: 1fr;
+ gap: 0.25rem;
+ }
}