mirror of
https://codeberg.org/PostERG/xamxam.git
synced 2026-06-26 08:39:18 +02:00
Refactor apropos/charte/licence pages: shared layout, TOC anchors, and UI polish
Unify the three public pages (à propos, charte, licence) onto a single grid layout (.page-content) with sticky TOC sidebar, replacing the old separate / / markup. - Merge about.php, charte.php, licence.php templates into shared .page-content / .content-section structure - Add CommonMark HeadingPermalinkExtension for stable heading anchors - Use SlugNormalizer for TOC links so they match rendered heading IDs - Standardize link styling across content blocks: bold black, accent on hover (consistent with global link style) - Fix code block wrapping: use pre-wrap instead of pre, constrain grid columns with min-width:0, auto scrollbar - Fix apropos page grid placement: force content-section into column 2 so contacts and credits stay in the content area, not the sidebar Also includes accumulated WIP changes: - Header gradient: hardcoded purple-to-green (replaces CSS variables) - Search placeholder font - Duration field: replace minutes/sec/heures with h:m:s time inputs - TFE file optional for formats 1,4,6 with client-side JS toggle - Licence form: em-dash to hyphen, details/summary classes - Pill search: block Enter key form submission when no results - Draft autosave: remove CSRF rotation (broke concurrent FilePond uploads) - Language pill: clear hints for excluded main languages - Search results: gradient placeholder cards for items without covers - TFE display: format durée values as XhYm instead of decimal
This commit is contained in:
@@ -1,28 +1,22 @@
|
||||
/* ============================================================
|
||||
À PROPOS PAGE (apropos.php)
|
||||
Root class: .apropos-main
|
||||
À PROPOS / CHARTE / LICENCE pages
|
||||
Root class: .page-content
|
||||
============================================================ */
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Page shell */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
.apropos-main {
|
||||
flex: 1;
|
||||
min-height: 0;
|
||||
overflow-y: auto;
|
||||
padding: var(--space-xl) var(--space-l) var(--space-2xl);
|
||||
/* Override body overflow:hidden — these pages use the viewport scrollbar
|
||||
so that anchor navigation (#fragment) works natively. */
|
||||
.apropos-body {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Two-column layout: sticky TOC nav | content */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
.apropos-layout {
|
||||
.page-content {
|
||||
flex: 1;
|
||||
min-height: 0;
|
||||
scroll-behavior: smooth;
|
||||
padding: var(--space-xl) var(--space-l) var(--space-2xl);
|
||||
display: grid;
|
||||
grid-template-columns: 180px 1fr;
|
||||
gap: var(--space-2xl);
|
||||
width: 100%;
|
||||
align-items: start;
|
||||
}
|
||||
|
||||
@@ -36,13 +30,13 @@
|
||||
}
|
||||
|
||||
.apropos-toc-label {
|
||||
font-family: var(--font-body);
|
||||
font-family: var(--font-display);
|
||||
font-size: var(--step--2);
|
||||
font-weight: 600;
|
||||
letter-spacing: 0.12em;
|
||||
text-transform: uppercase;
|
||||
color: var(--text-tertiary);
|
||||
font-weight: 400;
|
||||
color: var(--text-primary);
|
||||
margin: 0 0 var(--space-2xs) 0;
|
||||
padding-bottom: var(--space-2xs);
|
||||
border-bottom: 1px solid var(--text-primary);
|
||||
}
|
||||
|
||||
.apropos-toc ul {
|
||||
@@ -62,13 +56,10 @@
|
||||
display: block;
|
||||
padding: var(--space-3xs) 0;
|
||||
transition: color 0.15s;
|
||||
border-left: 2px solid transparent;
|
||||
padding-left: var(--space-2xs);
|
||||
}
|
||||
|
||||
.apropos-toc ul a:hover {
|
||||
color: var(--accent-primary);
|
||||
border-left-color: var(--accent-primary);
|
||||
}
|
||||
|
||||
.apropos-toc-link:first-of-type {
|
||||
@@ -96,19 +87,115 @@
|
||||
/* Right — main content area */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
.apropos-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0;
|
||||
.page-content > .content,
|
||||
.page-content > .content-section {
|
||||
grid-column: 2;
|
||||
min-width: 0;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.apropos-section {
|
||||
/* Shared typography for about-page sections and charte/licence content */
|
||||
.content,
|
||||
.content-section {
|
||||
display: block;
|
||||
max-width: 100%;
|
||||
font-family: var(--font-body);
|
||||
font-size: var(--step-0);
|
||||
line-height: 1.6;
|
||||
color: var(--text-primary);
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.content *,
|
||||
.content-section * {
|
||||
max-width: 100%;
|
||||
overflow-wrap: anywhere;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
.content p,
|
||||
.content-section p {
|
||||
margin: 0 0 1em 0;
|
||||
}
|
||||
|
||||
.content p:last-child,
|
||||
.content-section p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.content :where(h1, h2, h3),
|
||||
.content-section :where(h1, h2, h3) {
|
||||
margin: 1.5em 0 0.5em 0;
|
||||
}
|
||||
|
||||
.content a,
|
||||
.content-section a {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.content a:hover,
|
||||
.content-section a:hover {
|
||||
color: var(--accent-primary);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.content ul,
|
||||
.content ol,
|
||||
.content-section ul,
|
||||
.content-section ol {
|
||||
padding-left: var(--space-m);
|
||||
margin-bottom: var(--space-s);
|
||||
}
|
||||
|
||||
.content li,
|
||||
.content-section li {
|
||||
margin-bottom: 0.3em;
|
||||
}
|
||||
|
||||
.content strong,
|
||||
.content-section strong {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.content em,
|
||||
.content-section em {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.content :where(pre, pre code, code),
|
||||
.content-section :where(pre, pre code, code) {
|
||||
display: block;
|
||||
max-width: 100%;
|
||||
overflow-x: auto;
|
||||
overflow-wrap: normal;
|
||||
word-break: normal;
|
||||
font-family: "Courier New", Courier, monospace;
|
||||
font-size: 0.88em;
|
||||
background: var(--bg-tertiary);
|
||||
padding: 0.5em 0.75em;
|
||||
border-radius: var(--radius);
|
||||
white-space: pre-wrap;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
#apropos-intro *,
|
||||
#apropos-contacts *,
|
||||
#apropos-credits * {
|
||||
overflow-wrap: anywhere;
|
||||
word-break: break-word;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
/* Section separators (about page only — .content-section adds dividers) */
|
||||
.page-content > .content-section {
|
||||
padding-bottom: var(--space-xl);
|
||||
border-bottom: 1px solid var(--border-primary);
|
||||
margin-bottom: var(--space-xl);
|
||||
}
|
||||
|
||||
.apropos-section:last-child {
|
||||
.page-content > .content-section:last-child {
|
||||
border-bottom: none;
|
||||
margin-bottom: 0;
|
||||
padding-bottom: 0;
|
||||
@@ -118,7 +205,7 @@
|
||||
/* Section titles */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
.apropos-section-title {
|
||||
.content-section-title {
|
||||
font-family: var(--font-display);
|
||||
font-size: var(--step-3);
|
||||
font-weight: 400;
|
||||
@@ -127,59 +214,9 @@
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Intro prose — Markdown-rendered content */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
.prose {
|
||||
font-family: var(--font-body);
|
||||
font-size: var(--step-0);
|
||||
line-height: 1.6;
|
||||
color: var(--text-primary);
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.prose p {
|
||||
margin: 0 0 1em 0;
|
||||
}
|
||||
|
||||
.prose p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.prose :where(h1, h2, h3) {
|
||||
margin: 1.5em 0 0.5em 0;
|
||||
}
|
||||
|
||||
.prose a {
|
||||
color: var(--accent-primary);
|
||||
text-decoration: underline;
|
||||
text-underline-offset: 2px;
|
||||
}
|
||||
|
||||
.prose ul,
|
||||
.prose ol {
|
||||
padding-left: var(--space-m);
|
||||
margin-bottom: var(--space-s);
|
||||
}
|
||||
|
||||
.prose li {
|
||||
margin-bottom: 0.3em;
|
||||
}
|
||||
|
||||
.prose strong {
|
||||
font-weight: 700;
|
||||
}
|
||||
.prose em {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.prose code {
|
||||
font-family: "Courier New", Courier, monospace;
|
||||
font-size: 0.88em;
|
||||
background: var(--bg-tertiary);
|
||||
padding: 0.1em 0.3em;
|
||||
border-radius: var(--radius);
|
||||
/* Hide CommonMark heading permalink anchors (needed only for their id attr) */
|
||||
.heading-permalink {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
@@ -220,15 +257,15 @@
|
||||
|
||||
.apropos-contact-card a {
|
||||
font-size: var(--step--1);
|
||||
color: var(--accent-primary);
|
||||
text-decoration: underline;
|
||||
text-underline-offset: 2px;
|
||||
transition: opacity 0.15s;
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
font-weight: 700;
|
||||
transition: color 0.15s;
|
||||
}
|
||||
|
||||
.apropos-contact-card a:hover {
|
||||
color: var(--accent-primary);
|
||||
opacity: 1;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
@@ -284,7 +321,7 @@
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
@media (max-width: 900px) {
|
||||
.apropos-layout {
|
||||
.page-content {
|
||||
grid-template-columns: 1fr;
|
||||
gap: var(--space-l);
|
||||
}
|
||||
@@ -309,32 +346,27 @@
|
||||
gap: var(--space-xs);
|
||||
}
|
||||
|
||||
.apropos-toc ul a {
|
||||
border-left: none;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.apropos-toc-link {
|
||||
border-top: none;
|
||||
padding-top: 0;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.prose {
|
||||
.content-section {
|
||||
font-size: var(--step-0);
|
||||
}
|
||||
|
||||
.apropos-section-title {
|
||||
.content-section-title {
|
||||
font-size: var(--step-2);
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
.apropos-main {
|
||||
.page-content {
|
||||
padding: var(--space-m) var(--space-s) var(--space-xl);
|
||||
}
|
||||
|
||||
.prose {
|
||||
.content-section {
|
||||
font-size: var(--step-0);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user