feat(glossaire): harmonize portal pages and sticky reading ux
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 54s
CI / build-and-anchors (pull_request) Successful in 43s

This commit is contained in:
2026-03-26 12:58:17 +01:00
parent 0cba8f868e
commit a9f2a5bbd4
9 changed files with 714 additions and 625 deletions

View File

@@ -4,6 +4,7 @@ import GlossaryPortalAside from "../../components/GlossaryPortalAside.astro";
import GlossaryPortalHero from "../../components/GlossaryPortalHero.astro";
import GlossaryPortalSection from "../../components/GlossaryPortalSection.astro";
import GlossaryPortalStickySync from "../../components/GlossaryPortalStickySync.astro";
import GlossaryPortalPanel from "../../components/GlossaryPortalPanel.astro";
import { getCollection } from "astro:content";
import {
buildGlossaryBySlug,
@@ -246,20 +247,14 @@ const prolongerLinks = [
intro="Ces diagnostics entrent en résonance avec dautres notions et paradigmes qui permettent de préciser les mécanismes de fermeture, de capture, dopacification ou de désajustement de la régulation."
>
{otherEntries.length > 0 && (
<div class="dyna-block dyna-block--panel">
<div class="dyna-block__head">
<h3 id="notions-et-diagnostics-lies">Notions et diagnostics liés</h3>
<span class="dyna-block__count">
{otherCount} entrée{otherCount > 1 ? "s" : ""}
</span>
</div>
<p class="dyna-block__intro">
Ces entrées prolongent lanalyse des dérives archicratiques vers
des questions dempêchement, dinvisibilisation, de fermeture ou
de capture de la scène régulatrice.
</p>
<GlossaryPortalPanel
id="notions-et-diagnostics-lies"
title="Notions et diagnostics liés"
count={`${otherCount} entrée${otherCount > 1 ? "s" : ""}`}
intro="Ces entrées prolongent lanalyse des dérives archicratiques vers des questions dempêchement, dinvisibilisation, de fermeture ou de capture de la scène régulatrice."
surface={true}
className="dyna-block"
>
<div class="dyna-cards">
{otherEntries.map((entry) => (
<a class="dyna-card" href={hrefOf(entry)}>
@@ -274,24 +269,18 @@ const prolongerLinks = [
</a>
))}
</div>
</div>
</GlossaryPortalPanel>
)}
{paradigmEntries.length > 0 && (
<div class="dyna-block dyna-block--panel">
<div class="dyna-block__head">
<h3 id="paradigmes-mobilises">Paradigmes mobilisés</h3>
<span class="dyna-block__count">
{paradigmCount} paradigme{paradigmCount > 1 ? "s" : ""}
</span>
</div>
<p class="dyna-block__intro">
Ces paradigmes servent de ressources comparatives pour penser les
processus de rigidification, dautonomisation et dopacification
des régimes de régulation.
</p>
<GlossaryPortalPanel
id="paradigmes-mobilises"
title="Paradigmes mobilisés"
count={`${paradigmCount} paradigme${paradigmCount > 1 ? "s" : ""}`}
intro="Ces paradigmes servent de ressources comparatives pour penser les processus de rigidification, dautonomisation et dopacification des régimes de régulation."
surface={true}
className="dyna-block"
>
<div class="dyna-cards">
{paradigmEntries.map((entry) => (
<a class="dyna-card" href={hrefOf(entry)}>
@@ -306,7 +295,7 @@ const prolongerLinks = [
</a>
))}
</div>
</div>
</GlossaryPortalPanel>
)}
</GlossaryPortalSection>
)}
@@ -419,52 +408,6 @@ const prolongerLinks = [
margin-top: 22px;
}
.dyna-block--panel{
padding: 18px 18px 16px;
border: 1px solid rgba(127,127,127,0.18);
border-radius: 18px;
background:
linear-gradient(180deg, rgba(255,255,255,0.02), rgba(255,255,255,0.01)),
rgba(127,127,127,0.035);
}
.dyna-block__head{
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 12px;
flex-wrap: wrap;
margin-bottom: 8px;
}
.dyna-block h3{
margin: 0;
font-size: 15px;
line-height: 1.3;
scroll-margin-top: calc(var(--sticky-offset-px, 96px) + 36px);
}
.dyna-block__count{
display: inline-flex;
align-items: center;
min-height: 24px;
padding: 0 10px;
border: 1px solid rgba(127,127,127,0.22);
border-radius: 999px;
font-size: 12px;
line-height: 1.2;
opacity: .78;
white-space: nowrap;
}
.dyna-block__intro{
max-width: 78ch;
margin: 0 0 12px;
font-size: 14px;
line-height: 1.5;
opacity: .9;
}
.dyna-cards{
display: grid;
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));