410 lines
11 KiB
Plaintext
410 lines
11 KiB
Plaintext
---
|
||
import SiteLayout from "../../layouts/SiteLayout.astro";
|
||
import { getCollection } from "astro:content";
|
||
|
||
const entries = await getCollection("glossaire");
|
||
|
||
const slugOf = (entry) => String(entry.id).replace(/\.(md|mdx)$/i, "");
|
||
const hrefOf = (entry) => `/glossaire/${slugOf(entry)}/`;
|
||
|
||
const collator = new Intl.Collator("fr", { sensitivity: "base", numeric: true });
|
||
|
||
const sorted = [...entries].sort((a, b) => collator.compare(a.data.term, b.data.term));
|
||
|
||
function groupByInitial(list) {
|
||
const map = new Map();
|
||
|
||
for (const entry of list) {
|
||
const letter = (entry.data.term || "").trim().charAt(0).toUpperCase() || "#";
|
||
if (!map.has(letter)) map.set(letter, []);
|
||
map.get(letter).push(entry);
|
||
}
|
||
|
||
return [...map.entries()].sort((a, b) => collator.compare(a[0], b[0]));
|
||
}
|
||
|
||
const groupedAlpha = groupByInitial(sorted);
|
||
|
||
const byPredicate = (fn) => sorted.filter(fn);
|
||
|
||
const fondamentaux = byPredicate(
|
||
(e) => e.data.kind === "concept" && e.data.level === "fondamental"
|
||
);
|
||
|
||
const intermediaires = byPredicate(
|
||
(e) => e.data.kind === "concept" && e.data.level === "intermediaire"
|
||
);
|
||
|
||
const avances = byPredicate(
|
||
(e) => e.data.kind === "concept" && e.data.level === "avance"
|
||
);
|
||
|
||
const diagnostics = byPredicate((e) => e.data.kind === "diagnostic");
|
||
const topologies = byPredicate((e) => e.data.kind === "topologie");
|
||
const verbes = byPredicate((e) => e.data.kind === "verbe");
|
||
const paradigmes = byPredicate((e) => e.data.kind === "paradigme");
|
||
const doctrines = byPredicate((e) => e.data.kind === "doctrine");
|
||
|
||
const paradigmesPreview = paradigmes.slice(0, 8);
|
||
const doctrinesPreview = doctrines.slice(0, 4);
|
||
---
|
||
|
||
<SiteLayout title="Glossaire archicratique">
|
||
<section class="glossary-home">
|
||
<header class="glossary-hero">
|
||
<p class="glossary-kicker">Référentiel terminologique</p>
|
||
<h1>Glossaire archicratique</h1>
|
||
<p class="glossary-intro">
|
||
Ce glossaire rassemble les concepts, diagnostics, topologies, doctrines
|
||
et paradigmes utiles à la lecture du paradigme archicratique. Il ne se
|
||
contente pas d’aligner des définitions : il organise une cartographie
|
||
des prises théoriques, des régimes de régulation et des fondations
|
||
doctrinales mobilisés dans l’essai-thèse.
|
||
</p>
|
||
</header>
|
||
|
||
<nav class="glossary-toc" aria-label="Sommaire du glossaire">
|
||
<a href="#reperes">Repères</a>
|
||
<a href="/glossaire/archicrations/">Page archicrations</a>
|
||
<a href="#cartographie">Cartographie théorique</a>
|
||
<a href="/glossaire/paradigmes/">Page paradigmes et doctrines</a>
|
||
<a href="#alphabetique">Index alphabétique</a>
|
||
</nav>
|
||
|
||
<section id="reperes" class="glossary-section">
|
||
<h2>Repères</h2>
|
||
|
||
{fondamentaux.length > 0 && (
|
||
<section class="glossary-block">
|
||
<h3>Repères fondamentaux</h3>
|
||
<div class="glossary-cards">
|
||
{fondamentaux.map((e) => (
|
||
<a class="glossary-card" href={hrefOf(e)}>
|
||
<strong>{e.data.term}</strong>
|
||
<span>{e.data.definitionShort}</span>
|
||
</a>
|
||
))}
|
||
</div>
|
||
</section>
|
||
)}
|
||
|
||
{intermediaires.length > 0 && (
|
||
<section class="glossary-block">
|
||
<h3>Concepts intermédiaires</h3>
|
||
<div class="glossary-cards">
|
||
{intermediaires.map((e) => (
|
||
<a class="glossary-card" href={hrefOf(e)}>
|
||
<strong>{e.data.term}</strong>
|
||
<span>{e.data.definitionShort}</span>
|
||
</a>
|
||
))}
|
||
</div>
|
||
</section>
|
||
)}
|
||
|
||
{avances.length > 0 && (
|
||
<section class="glossary-block">
|
||
<h3>Concepts avancés</h3>
|
||
<div class="glossary-cards">
|
||
{avances.map((e) => (
|
||
<a class="glossary-card" href={hrefOf(e)}>
|
||
<strong>{e.data.term}</strong>
|
||
<span>{e.data.definitionShort}</span>
|
||
</a>
|
||
))}
|
||
</div>
|
||
</section>
|
||
)}
|
||
|
||
{diagnostics.length > 0 && (
|
||
<section class="glossary-block">
|
||
<h3>Diagnostics</h3>
|
||
<div class="glossary-cards">
|
||
{diagnostics.map((e) => (
|
||
<a class="glossary-card" href={hrefOf(e)}>
|
||
<strong>{e.data.term}</strong>
|
||
<span>{e.data.definitionShort}</span>
|
||
</a>
|
||
))}
|
||
</div>
|
||
</section>
|
||
)}
|
||
|
||
{topologies.length > 0 && (
|
||
<section class="glossary-block">
|
||
<h3>Topologies</h3>
|
||
<div class="glossary-cards">
|
||
{topologies.map((e) => (
|
||
<a class="glossary-card" href={hrefOf(e)}>
|
||
<strong>{e.data.term}</strong>
|
||
<span>{e.data.definitionShort}</span>
|
||
</a>
|
||
))}
|
||
</div>
|
||
</section>
|
||
)}
|
||
|
||
{verbes.length > 0 && (
|
||
<section class="glossary-block">
|
||
<h3>Verbes de la scène archicratique</h3>
|
||
<div class="glossary-cards">
|
||
{verbes.map((e) => (
|
||
<a class="glossary-card" href={hrefOf(e)}>
|
||
<strong>{e.data.term}</strong>
|
||
<span>{e.data.definitionShort}</span>
|
||
</a>
|
||
))}
|
||
</div>
|
||
</section>
|
||
)}
|
||
</section>
|
||
|
||
<section class="glossary-block">
|
||
<h3>Archicrations du chapitre 2</h3>
|
||
<div class="glossary-cards">
|
||
<a class="glossary-card" href="/glossaire/archicrations/">
|
||
<strong>Cartographie des archicrations</strong>
|
||
<span>
|
||
Vue d’ensemble des 13 types d’archicrations élaborés dans le chapitre 2,
|
||
regroupés par blocs conceptuels.
|
||
</span>
|
||
</a>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="cartographie" class="glossary-section">
|
||
<div class="glossary-section__head">
|
||
<div>
|
||
<h2>Cartographie théorique</h2>
|
||
<p class="glossary-intro">
|
||
L’archicratie dialogue avec deux grands ensembles : d’une part des
|
||
<strong> doctrines fondatrices</strong>, qui posent un principe premier
|
||
de légitimité ou d’ordre ; d’autre part des <strong>paradigmes de
|
||
régulation</strong>, qui décrivent des modes de tenue, de conflictualité,
|
||
d’administration ou de transformation des collectifs.
|
||
</p>
|
||
</div>
|
||
|
||
<a class="glossary-cta" href="/glossaire/paradigmes/">
|
||
Explorer la page dédiée
|
||
</a>
|
||
</div>
|
||
|
||
{doctrines.length > 0 && (
|
||
<section class="glossary-block">
|
||
<h3>Doctrines fondatrices</h3>
|
||
<div class="glossary-cards">
|
||
{doctrinesPreview.map((e) => (
|
||
<a class="glossary-card" href={hrefOf(e)}>
|
||
<strong>{e.data.term}</strong>
|
||
<span>{e.data.definitionShort}</span>
|
||
</a>
|
||
))}
|
||
</div>
|
||
</section>
|
||
)}
|
||
|
||
{paradigmes.length > 0 && (
|
||
<section class="glossary-block">
|
||
<h3>Paradigmes régulateurs</h3>
|
||
<div class="glossary-cards">
|
||
{paradigmesPreview.map((e) => (
|
||
<a class="glossary-card" href={hrefOf(e)}>
|
||
<strong>{e.data.term}</strong>
|
||
<span>{e.data.definitionShort}</span>
|
||
</a>
|
||
))}
|
||
</div>
|
||
</section>
|
||
)}
|
||
</section>
|
||
|
||
<section id="alphabetique" class="glossary-section">
|
||
<h2>Index alphabétique</h2>
|
||
|
||
<nav class="glossary-alpha-nav" aria-label="Lettres du glossaire">
|
||
{groupedAlpha.map(([letter]) => (
|
||
<a href={`#letter-${letter}`}>{letter}</a>
|
||
))}
|
||
</nav>
|
||
|
||
<div class="glossary-alpha-groups">
|
||
{groupedAlpha.map(([letter, items]) => (
|
||
<section class="glossary-letter-group" id={`letter-${letter}`}>
|
||
<h3>{letter}</h3>
|
||
<ul class="glossary-list">
|
||
{items.map((e) => (
|
||
<li>
|
||
<a href={hrefOf(e)}>{e.data.term}</a>
|
||
<span> — {e.data.definitionShort}</span>
|
||
</li>
|
||
))}
|
||
</ul>
|
||
</section>
|
||
))}
|
||
</div>
|
||
</section>
|
||
</section>
|
||
</SiteLayout>
|
||
|
||
<style>
|
||
.glossary-empty{
|
||
opacity: .82;
|
||
font-style: italic;
|
||
}
|
||
|
||
.glossary-home{
|
||
padding: 8px 0 32px;
|
||
}
|
||
|
||
.glossary-hero{
|
||
margin-bottom: 24px;
|
||
}
|
||
|
||
.glossary-kicker{
|
||
font-size: 12px;
|
||
letter-spacing: .08em;
|
||
text-transform: uppercase;
|
||
opacity: .72;
|
||
margin-bottom: 8px;
|
||
}
|
||
|
||
.glossary-intro{
|
||
max-width: 72ch;
|
||
opacity: .92;
|
||
}
|
||
|
||
.glossary-toc{
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 10px;
|
||
margin: 18px 0 30px;
|
||
}
|
||
|
||
.glossary-toc a{
|
||
border: 1px solid rgba(127,127,127,0.28);
|
||
border-radius: 999px;
|
||
padding: 6px 12px;
|
||
text-decoration: none;
|
||
}
|
||
|
||
.glossary-section{
|
||
margin-top: 40px;
|
||
scroll-margin-top: calc(var(--sticky-offset) + 75px);
|
||
}
|
||
|
||
.glossary-section__head{
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: start;
|
||
gap: 16px;
|
||
flex-wrap: wrap;
|
||
}
|
||
|
||
.glossary-cta{
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
min-height: 38px;
|
||
border: 1px solid rgba(127,127,127,0.28);
|
||
border-radius: 999px;
|
||
padding: 6px 14px;
|
||
text-decoration: none;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.glossary-block{
|
||
margin-top: 18px;
|
||
}
|
||
|
||
.glossary-cards{
|
||
display: grid;
|
||
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
|
||
gap: 12px;
|
||
margin-top: 12px;
|
||
}
|
||
|
||
.glossary-card{
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 8px;
|
||
padding: 14px 16px;
|
||
border: 1px solid rgba(127,127,127,0.22);
|
||
border-radius: 16px;
|
||
background: rgba(127,127,127,0.05);
|
||
text-decoration: none;
|
||
transition: transform 120ms ease, background 120ms ease;
|
||
}
|
||
|
||
.glossary-card:hover{
|
||
transform: translateY(-1px);
|
||
background: rgba(127,127,127,0.08);
|
||
text-decoration: none;
|
||
}
|
||
|
||
.glossary-card strong{
|
||
font-size: 15px;
|
||
}
|
||
|
||
.glossary-card span{
|
||
font-size: 14px;
|
||
line-height: 1.45;
|
||
opacity: .92;
|
||
}
|
||
|
||
.glossary-alpha-nav{
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 8px;
|
||
margin: 12px 0 20px;
|
||
}
|
||
|
||
.glossary-alpha-nav a{
|
||
min-width: 32px;
|
||
text-align: center;
|
||
border: 1px solid rgba(127,127,127,0.22);
|
||
border-radius: 10px;
|
||
padding: 5px 8px;
|
||
text-decoration: none;
|
||
}
|
||
|
||
.glossary-alpha-groups{
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 24px;
|
||
}
|
||
|
||
.glossary-letter-group h3{
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
.glossary-list{
|
||
margin: 0;
|
||
padding-left: 18px;
|
||
}
|
||
|
||
.glossary-list li{
|
||
margin-bottom: 8px;
|
||
}
|
||
|
||
@media (max-width: 720px){
|
||
.glossary-section__head{
|
||
flex-direction: column;
|
||
align-items: stretch;
|
||
}
|
||
|
||
.glossary-cta{
|
||
width: fit-content;
|
||
}
|
||
}
|
||
|
||
@media (prefers-color-scheme: dark){
|
||
.glossary-card{
|
||
background: rgba(255,255,255,0.04);
|
||
}
|
||
|
||
.glossary-card:hover{
|
||
background: rgba(255,255,255,0.07);
|
||
}
|
||
}
|
||
</style> |