feat(glossary): add step 21 smart navigation
All checks were successful
SMOKE / smoke (push) Successful in 13s
CI / build-and-anchors (push) Successful in 1m4s
CI / build-and-anchors (pull_request) Successful in 35s

This commit is contained in:
2026-04-26 13:03:45 +02:00
parent 689619d14d
commit 9f88112aca
45 changed files with 1020 additions and 112 deletions

View File

@@ -49,7 +49,7 @@ const portalLinks = getGlossaryPortalLinks();
</div>
</div>
<details class="glossary-aside__block glossary-aside__disclosure" open>
<details class="glossary-aside__block glossary-aside__disclosure">
<summary class="glossary-aside__summary">
<span class="glossary-aside__heading">Portails</span>
<span class="glossary-aside__chevron" aria-hidden="true">▾</span>
@@ -65,7 +65,7 @@ const portalLinks = getGlossaryPortalLinks();
</details>
{showNoyau && (
<details class="glossary-aside__block glossary-aside__disclosure" open>
<details class="glossary-aside__block glossary-aside__disclosure">
<summary class="glossary-aside__summary">
<span class="glossary-aside__heading">Noyau archicratique</span>
<span class="glossary-aside__chevron" aria-hidden="true">▾</span>
@@ -93,7 +93,7 @@ const portalLinks = getGlossaryPortalLinks();
)}
{showSameFamily && (
<details class="glossary-aside__block glossary-aside__disclosure" open>
<details class="glossary-aside__block glossary-aside__disclosure">
<summary class="glossary-aside__summary">
<span class="glossary-aside__heading">{sameFamilyTitle}</span>
<span class="glossary-aside__chevron" aria-hidden="true">▾</span>
@@ -121,7 +121,7 @@ const portalLinks = getGlossaryPortalLinks();
)}
{relationSections.length > 0 && (
<details class="glossary-aside__block glossary-aside__disclosure" open>
<details class="glossary-aside__block glossary-aside__disclosure">
<summary class="glossary-aside__summary">
<span class="glossary-aside__heading">Autour de cette fiche</span>
<span class="glossary-aside__chevron" aria-hidden="true">▾</span>
@@ -143,7 +143,7 @@ const portalLinks = getGlossaryPortalLinks();
)}
{contextualTheory.length > 0 && (
<details class="glossary-aside__block glossary-aside__disclosure" open>
<details class="glossary-aside__block glossary-aside__disclosure">
<summary class="glossary-aside__summary">
<span class="glossary-aside__heading">Paysage théorique</span>
<span class="glossary-aside__chevron" aria-hidden="true">▾</span>
@@ -445,7 +445,29 @@ const portalLinks = getGlossaryPortalLinks();
}
}
@media (min-width: 861px){
@media (orientation: portrait) and (max-width: 1024px) and (pointer: coarse){
.glossary-aside{
gap: 10px;
}
.glossary-aside__disclosure{
background: rgba(127,127,127,0.045);
}
.glossary-aside__disclosure:not([open]) .glossary-aside__panel{
display: none;
}
.glossary-aside__summary{
cursor: pointer;
}
.glossary-aside__chevron{
display: inline;
}
}
@media (min-width: 861px) and (hover: hover) and (pointer: fine){
.glossary-aside__summary{
cursor: default;
}
@@ -470,7 +492,9 @@ const portalLinks = getGlossaryPortalLinks();
<script is:inline>
(() => {
const syncMobileDisclosure = () => {
const mobile = window.matchMedia("(max-width: 860px)").matches;
const mobile = window.matchMedia(
"(max-width: 860px), ((orientation: portrait) and (max-width: 1024px) and (pointer: coarse))"
).matches;
const smallLandscape = window.matchMedia(
"(orientation: landscape) and (max-width: 920px) and (max-height: 520px)"
).matches;
@@ -484,7 +508,7 @@ const portalLinks = getGlossaryPortalLinks();
if (compact) {
if (!el.dataset.mobileInit) {
el.open = index === 0;
el.open = false;
el.dataset.mobileInit = "true";
}
} else {

View File

@@ -4,7 +4,17 @@
<style>
.glossary-entry-body{
margin-bottom: 28px;
margin-bottom: 16px;
}
.glossary-entry-body > :last-child{
margin-bottom: 0;
}
@media (max-width: 760px){
.glossary-entry-body{
margin-bottom: 12px;
}
}
:global(.glossary-entry-body h2),

View File

@@ -73,7 +73,7 @@ const hasScholarlyMeta =
<style>
.glossary-entry-head{
position: sticky;
top: calc(var(--sticky-header-h, 0px) + var(--page-gap, 12px));
top: var(--sticky-header-h, 0px);
z-index: 11;
margin: 0 0 22px;
border: 1px solid rgba(127,127,127,0.18);
@@ -234,12 +234,16 @@ const hasScholarlyMeta =
}
.glossary-entry-summary{
gap: 8px;
padding: 9px 10px 10px;
gap: 9px;
padding: 9px 10px 11px;
}
.glossary-entry-dek{
-webkit-line-clamp: 2;
display: block;
max-width: none;
overflow: visible;
-webkit-line-clamp: unset;
-webkit-box-orient: unset;
}
.glossary-pill{

View File

@@ -24,8 +24,10 @@
const isCompactViewport = () =>
mqMobile.matches || mqSmallLandscape.matches;
const heroHeight = () =>
Math.max(0, Math.round(hero.getBoundingClientRect().height || 0));
const heroHeight = () => {
const rect = hero.getBoundingClientRect();
return Math.max(0, Math.round(rect.height || 0));
};
const neutralizeGlobalFollowIfCompact = () => {
if (!isCompactViewport()) {
@@ -45,6 +47,21 @@
follow.style.display !== "none" &&
follow.getAttribute("aria-hidden") !== "true";
const syncFollowState = () => {
const on = computeFollowOn();
if (on) {
if (lastFollowOn === true) return;
lastFollowOn = true;
body.classList.add(FOLLOW_ON_CLASS);
return;
}
if (lastFollowOn === false) return;
lastFollowOn = false;
body.classList.remove(FOLLOW_ON_CLASS);
};
const stripLocalSticky = () => {
document
.querySelectorAll(
@@ -68,13 +85,6 @@
}
};
const syncFollowState = () => {
const on = computeFollowOn();
if (on === lastFollowOn) return;
lastFollowOn = on;
body.classList.toggle(FOLLOW_ON_CLASS, on);
};
const syncAll = () => {
neutralizeGlobalFollowIfCompact();
stripLocalSticky();
@@ -139,13 +149,6 @@
z-index: 10;
}
:global(body.is-glossary-entry-page.glossary-entry-follow-on .glossary-entry-head){
margin-bottom: 0;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
box-shadow: 0 8px 20px rgba(0,0,0,0.10);
}
:global(body.is-glossary-entry-page.glossary-entry-follow-on .glossary-entry-head h1){
letter-spacing: -.03em;
}
@@ -158,10 +161,9 @@
}
:global(body.is-glossary-entry-page.glossary-entry-follow-on .glossary-entry-dek){
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
overflow: hidden;
display: block;
-webkit-line-clamp: unset;
overflow: visible;
}
:global(body.is-glossary-entry-page.glossary-entry-follow-on .glossary-entry-signals){
@@ -183,11 +185,11 @@
}
:global(body.is-glossary-entry-page.glossary-entry-follow-on #reading-follow){
transform: translateY(-1px);
transform: none;
}
:global(body.is-glossary-entry-page.glossary-entry-follow-on #reading-follow .reading-follow__inner){
margin-top: -1px;
margin-top: 0;
border-top-left-radius: 0;
border-top-right-radius: 0;
}
@@ -238,7 +240,7 @@
}
:global(body.is-glossary-entry-page.glossary-entry-follow-on .glossary-entry-dek){
display: none;
display: block;
}
:global(body.is-glossary-entry-page.glossary-entry-follow-on .glossary-entry-signals){

View File

@@ -110,6 +110,11 @@ const {
opacity 180ms ease;
}
:global(body[data-edition-key="glossaire"] .glossary-hero p#glossary-hero-intro){
padding-right: 0;
scroll-margin-top: 0;
}
.glossary-hero__toggle{
display: inline-flex;
align-items: center;
@@ -361,4 +366,95 @@ const {
filter: none !important;
}
}
/* Neutralisation mobile/tablette : le hero n'est plus sticky, donc aucun état condensé. */
@media (max-width: 860px){
.glossary-hero{
position: static !important;
top: auto !important;
z-index: auto !important;
margin-bottom: 18px !important;
padding: 12px 14px 16px !important;
border-radius: 22px !important;
row-gap: 8px !important;
}
.glossary-hero h1,
:global(body.glossary-home-follow-on) .glossary-hero h1{
font-size: clamp(2rem, 6.2vw, 2.75rem) !important;
line-height: 1.04 !important;
letter-spacing: -.035em !important;
max-width: 100%;
overflow-wrap: normal;
word-break: normal;
hyphens: none;
text-wrap: balance;
}
.glossary-intro,
:global(body.glossary-home-follow-on:not(.glossary-home-hero-expanded)) .glossary-intro{
max-width: 100% !important;
width: 100% !important;
max-height: none !important;
overflow: visible !important;
display: block !important;
-webkit-line-clamp: unset !important;
-webkit-box-orient: unset !important;
font-size: .94rem !important;
line-height: 1.4 !important;
opacity: .94 !important;
padding-right: 0 !important;
scroll-margin-top: 0 !important;
}
.glossary-hero__toggle,
.glossary-hero-follow{
display: none !important;
}
}
/* Mobile paysage compact : même logique, mais plus dense. */
@media (orientation: landscape) and (max-width: 920px) and (max-height: 520px){
.glossary-hero{
padding: 8px 10px 9px !important;
border-radius: 14px !important;
row-gap: 5px !important;
margin-bottom: 10px !important;
}
.glossary-kicker{
font-size: 9px !important;
letter-spacing: .11em !important;
}
.glossary-hero h1,
:global(body.glossary-home-follow-on) .glossary-hero h1{
font-size: clamp(1.55rem, 4.2vw, 1.9rem) !important;
line-height: 1.03 !important;
letter-spacing: -.025em !important;
}
.glossary-intro,
:global(body.glossary-home-follow-on:not(.glossary-home-hero-expanded)) .glossary-intro{
font-size: .72rem !important;
line-height: 1.18 !important;
}
}
/* Tablette large / iPad landscape : le follow reste lisible, jamais tronqué brutalement. */
@media (min-width: 861px) and (max-width: 1240px){
.glossary-hero h1{
font-size: clamp(2.35rem, 4.2vw, 3.05rem) !important;
line-height: 1.03 !important;
}
.glossary-hero-follow{
max-width: 100% !important;
white-space: normal !important;
overflow: visible !important;
text-overflow: clip !important;
font-size: clamp(1.55rem, 3.1vw, 2.05rem) !important;
line-height: 1.08 !important;
}
}
</style>

View File

@@ -33,25 +33,37 @@ const {
</div>
{pageItems.length > 0 && (
<div class="glossary-portal-aside__block">
<h2 class="glossary-portal-aside__heading">Dans cette page</h2>
<ul class="glossary-portal-aside__list">
{pageItems.map((item) => (
<li><a href={item.href}>{item.label}</a></li>
))}
</ul>
</div>
<details class="glossary-portal-aside__block glossary-portal-aside__disclosure">
<summary class="glossary-portal-aside__summary">
<span class="glossary-portal-aside__heading">Dans cette page</span>
<span class="glossary-portal-aside__chevron" aria-hidden="true">▾</span>
</summary>
<div class="glossary-portal-aside__panel">
<ul class="glossary-portal-aside__list">
{pageItems.map((item) => (
<li><a href={item.href}>{item.label}</a></li>
))}
</ul>
</div>
</details>
)}
{usefulLinks.length > 0 && (
<div class="glossary-portal-aside__block">
<h2 class="glossary-portal-aside__heading">Renvois utiles</h2>
<ul class="glossary-portal-aside__list">
{usefulLinks.map((item) => (
<li><a href={item.href}>{item.label}</a></li>
))}
</ul>
</div>
<details class="glossary-portal-aside__block glossary-portal-aside__disclosure">
<summary class="glossary-portal-aside__summary">
<span class="glossary-portal-aside__heading">Renvois utiles</span>
<span class="glossary-portal-aside__chevron" aria-hidden="true">▾</span>
</summary>
<div class="glossary-portal-aside__panel">
<ul class="glossary-portal-aside__list">
{usefulLinks.map((item) => (
<li><a href={item.href}>{item.label}</a></li>
))}
</ul>
</div>
</details>
)}
</nav>
@@ -216,4 +228,59 @@ const {
background: rgba(255,255,255,0.04);
}
}
.glossary-portal-aside__disclosure{
padding: 0;
overflow: hidden;
}
.glossary-portal-aside__summary{
list-style: none;
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
padding: 14px;
cursor: pointer;
user-select: none;
}
.glossary-portal-aside__summary::-webkit-details-marker{
display: none;
}
.glossary-portal-aside__summary .glossary-portal-aside__heading{
margin: 0;
}
.glossary-portal-aside__disclosure:not([open]) .glossary-portal-aside__panel{
display: none;
}
.glossary-portal-aside__chevron{
flex: 0 0 auto;
font-size: 14px;
line-height: 1;
opacity: .72;
transition: transform 160ms ease, opacity 160ms ease;
}
.glossary-portal-aside__disclosure[open] .glossary-portal-aside__chevron{
transform: rotate(180deg);
opacity: .96;
}
.glossary-portal-aside__panel{
padding: 0 14px 14px;
}
@media (max-width: 980px){
.glossary-portal-aside__summary{
padding: 12px;
}
.glossary-portal-aside__panel{
padding: 0 12px 12px;
}
}
</style>

View File

@@ -36,11 +36,18 @@ const relationsHeadingId = "relations-conceptuelles";
<style>
.glossary-relations{
margin-top: 22px;
margin-top: 14px;
padding-top: 14px;
border-top: 1px solid rgba(127,127,127,0.18);
}
@media (max-width: 760px){
.glossary-relations{
margin-top: 12px;
padding-top: 12px;
}
}
.glossary-relations h2{
margin: 0 0 12px;
font-size: clamp(1.35rem, 3vw, 1.8rem);

View File

@@ -0,0 +1,225 @@
---
import type { GlossarySmartNavigation } from "../lib/glossary";
import { hrefOfGlossaryEntry } from "../lib/glossary";
interface Props {
smartNavigation?: GlossarySmartNavigation;
}
const { smartNavigation } = Astro.props;
const hasPrimary = Boolean(smartNavigation?.primaryNext);
const paths = smartNavigation?.paths ?? [];
const hasPaths = paths.length > 0;
---
{(hasPrimary || hasPaths) && (
<section class="glossary-smart-nav" aria-label="Navigation guidée du glossaire">
<div class="glossary-smart-nav__eyebrow">Continuer dans le système</div>
{smartNavigation?.primaryNext && (
<div class="glossary-smart-nav__primary">
<span class="glossary-smart-nav__label">Étape suivante</span>
<a href={hrefOfGlossaryEntry(smartNavigation.primaryNext)}>
{smartNavigation.primaryNext.data.term}
</a>
{smartNavigation.primaryReason && (
<p>{smartNavigation.primaryReason}</p>
)}
</div>
)}
{hasPaths && (
<div class="glossary-smart-nav__paths" aria-label="Parcours de lecture">
{paths.map((path) => {
const panelId = `smart-nav-${path.key}`;
return (
<div class="glossary-smart-nav__path">
<button
class="glossary-smart-nav__path-button"
type="button"
aria-expanded="false"
aria-controls={panelId}
>
<span>{path.label}</span>
<span class="glossary-smart-nav__chevron" aria-hidden="true">▾</span>
</button>
<ul id={panelId} class="glossary-smart-nav__path-panel" hidden>
{path.entries.map((entry) => (
<li>
<a href={hrefOfGlossaryEntry(entry)}>{entry.data.term}</a>
</li>
))}
</ul>
</div>
);
})}
</div>
)}
</section>
)}
<style>
.glossary-smart-nav{
margin: 14px 0 18px;
padding: 14px;
border: 1px solid rgba(127,127,127,0.20);
border-radius: 18px;
background: rgba(127,127,127,0.045);
}
.glossary-smart-nav__eyebrow{
margin-bottom: 8px;
font-size: 12px;
font-weight: 850;
letter-spacing: .06em;
text-transform: uppercase;
opacity: .72;
}
.glossary-smart-nav__primary{
display: grid;
gap: 5px;
}
.glossary-smart-nav__label{
font-size: 13px;
font-weight: 800;
opacity: .76;
}
.glossary-smart-nav__primary a{
width: fit-content;
font-size: clamp(1.05rem, 2vw, 1.22rem);
font-weight: 900;
line-height: 1.18;
text-decoration: none;
}
.glossary-smart-nav__primary p{
max-width: 72ch;
margin: 0;
font-size: 14px;
line-height: 1.45;
opacity: .88;
}
.glossary-smart-nav__paths{
display: flex;
flex-wrap: wrap;
align-items: flex-start;
gap: 8px;
margin-top: 12px;
}
.glossary-smart-nav__path{
align-self: flex-start;
min-width: min(180px, 100%);
border: 1px solid rgba(127,127,127,0.18);
border-radius: 14px;
background: rgba(127,127,127,0.035);
overflow: hidden;
}
.glossary-smart-nav__path-button{
width: 100%;
border: 0;
background: transparent;
color: inherit;
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
padding: 9px 11px;
cursor: pointer;
font: inherit;
font-size: 13px;
font-weight: 850;
line-height: 1.25;
text-align: left;
user-select: none;
}
.glossary-smart-nav__chevron{
flex: 0 0 auto;
font-size: 13px;
line-height: 1;
opacity: .72;
transform: rotate(0deg);
transition: transform 160ms ease, opacity 160ms ease;
}
.glossary-smart-nav__path-button[aria-expanded="true"] .glossary-smart-nav__chevron{
transform: rotate(180deg);
opacity: .96;
}
.glossary-smart-nav__path-panel{
margin: 0;
padding: 0 11px 10px 24px;
}
.glossary-smart-nav__path-panel[hidden]{
display: none;
}
.glossary-smart-nav__path-panel li{
margin: 5px 0;
font-size: 13px;
line-height: 1.32;
}
.glossary-smart-nav__path-panel a{
text-decoration: none;
}
@media (max-width: 760px){
.glossary-smart-nav{
margin: 12px 0 16px;
padding: 12px;
border-radius: 16px;
}
.glossary-smart-nav__paths{
display: grid;
grid-template-columns: 1fr;
gap: 7px;
}
.glossary-smart-nav__path{
width: 100%;
}
}
@media (prefers-color-scheme: dark){
.glossary-smart-nav{
background: rgba(255,255,255,0.04);
}
.glossary-smart-nav__path{
background: rgba(255,255,255,0.035);
}
}
</style>
<script is:inline>
(() => {
document
.querySelectorAll(".glossary-smart-nav__path-button")
.forEach((button) => {
button.addEventListener("click", () => {
const panelId = button.getAttribute("aria-controls");
const panel = panelId ? document.getElementById(panelId) : null;
if (!panel) return;
const expanded = button.getAttribute("aria-expanded") === "true";
button.setAttribute("aria-expanded", expanded ? "false" : "true");
panel.hidden = expanded;
});
});
})();
</script>

View File

@@ -1,15 +1,24 @@
---
const path = Astro.url.pathname;
const isActive = (href: string) => {
if (href === "/") return path === "/";
return path === href || path.startsWith(href);
};
---
<nav class="site-nav" aria-label="Navigation principale">
<a href="/">Accueil</a>
<a href="/" aria-current={isActive("/") ? "page" : undefined}>Accueil</a>
<span aria-hidden="true"> · </span>
<a href="/archicrat-ia/">Essai-thèse — ArchiCraT-IA</a>
<a href="/archicrat-ia/" aria-current={isActive("/archicrat-ia/") ? "page" : undefined}>Essai-thèse — ArchiCraT-IA</a>
<span aria-hidden="true"> · </span>
<a href="/cas-ia/">Cas pratique — Gouvernance IA</a>
<a href="/cas-ia/" aria-current={isActive("/cas-ia/") ? "page" : undefined}>Cas pratique — Gouvernance IA</a>
<span aria-hidden="true"> · </span>
<a href="/glossaire/">Glossaire</a>
<a href="/glossaire/" aria-current={isActive("/glossaire/") ? "page" : undefined}>Glossaire</a>
<span aria-hidden="true"> · </span>
<a href="/recherche/">Recherche</a>
<a href="/recherche/" aria-current={isActive("/recherche/") ? "page" : undefined}>Recherche</a>
</nav>

View File

@@ -47,6 +47,36 @@ const archicratIa = defineCollection({
})
});
const glossaryNavigationFlowSchema = z.object({
label: z.string().min(1),
primaryNext: z.string().min(1).optional(),
primaryReason: z.string().min(1).optional(),
});
const glossaryNavigationSchema = z.object({
primaryNext: z.string().min(1).optional(),
primaryReason: z.string().min(1).optional(),
paths: z
.object({
understand: z.array(z.string().min(1)).default([]),
deepen: z.array(z.string().min(1)).default([]),
compare: z.array(z.string().min(1)).default([]),
apply: z.array(z.string().min(1)).default([]),
})
.default({
understand: [],
deepen: [],
compare: [],
apply: [],
}),
flows: z
.record(z.string(), glossaryNavigationFlowSchema)
.default({}),
relationWeights: z
.record(z.string(), z.number().int().nonnegative())
.default({}),
});
// Glossaire (référentiel terminologique)
const glossaire = defineCollection({
type: "content",
@@ -100,7 +130,8 @@ const glossaire = defineCollection({
level: z.enum(["fondamental", "intermediaire", "avance"]),
related: z.array(z.string().min(1)).default([]),
opposedTo: z.array(z.string().min(1)).default([]),
seeAlso: z.array(z.string().min(1)).default([])
seeAlso: z.array(z.string().min(1)).default([]),
navigation: glossaryNavigationSchema.optional()
})
});

View File

@@ -18,6 +18,14 @@ level: "avance"
related: ["archicratie", "cratialite", "archicration", "tension", "co-viabilite", "theorie-de-lacteur-reseau", "transduction-et-individuation", "configuration-et-interdependance"]
opposedTo: ["decisionnisme-souverain", "domination-legale-rationnelle"]
seeAlso: ["pharmacologie-technique", "preemption-algorithmique", "technodiversite-et-cosmotechnie"]
navigation:
primaryNext: "cratialite"
primaryReason: "La cratialité permet de traduire lintuition des agencements en termes de chaînes opératoires, de prises effectives et de transformations régulatrices."
paths:
understand: ["cratialite", "archicration", "co-viabilite"]
deepen: ["theorie-de-lacteur-reseau", "transduction-et-individuation", "configuration-et-interdependance"]
compare: ["decisionnisme-souverain", "domination-legale-rationnelle", "cybernetique"]
apply: ["audit-archicratique", "gouvernementalite-algorithmique"]
---
Lagencement machinique désigne un paradigme de régulation fondé sur des agencements hétérogènes de flux, de machines, de signes, de corps et de dispositifs, sans centre souverain unique ni forme close préalable.

View File

@@ -15,6 +15,14 @@ level: "fondamental"
related: ["archicratie", "cratialite", "archicration", "co-viabilite", "tension", "domination-legale-rationnelle", "fait-social-total"]
opposedTo: ["autarchicratie"]
seeAlso: ["obliteration-archicratique", "hyperarcalite", "archicrations-scripturo-normatives"]
navigation:
primaryNext: "cratialite"
primaryReason: "Après le vecteur fondationnel, la cratialité permet de comprendre comment une régulation devient effective, opératoire et transformatrice."
paths:
understand: ["cratialite", "archicration", "co-viabilite"]
deepen: ["hyperarcalite", "archicrations-scripturo-normatives", "domination-legale-rationnelle"]
compare: ["autarchicratie", "fait-social-total", "cratialite"]
apply: ["audit-archicratique", "cartographie-des-scenes-manquantes"]
---
Larcalité désigne le vecteur fondationnel et structurant de toute régulation.

View File

@@ -15,6 +15,14 @@ level: "fondamental"
related: ["arcalite", "cratialite", "archicration", "co-viabilite", "tension"]
opposedTo: ["autarchicratie"]
seeAlso: ["scene-depreuve", "obliteration-archicratique", "coexistence-ontologique-et-necessite-regulatrice", "formes-de-vie-et-cadres-dhabitabilite", "egalisation-normative-et-differenciation-singuliere"]
navigation:
primaryNext: "arcalite"
primaryReason: "Commencer par larcalité permet dentrer dans le premier vecteur constitutif de toute architecture régulatrice."
paths:
understand: ["arcalite", "cratialite", "archicration", "co-viabilite", "tension"]
deepen: ["scene-depreuve", "regime-de-co-viabilite", "meta-regime-archicratique"]
compare: ["decisionnisme-souverain", "domination-legale-rationnelle", "gouvernance-des-communs"]
apply: ["audit-archicratique", "cartographie-des-scenes-manquantes", "journal-de-justification"]
---
Larchicratie désigne le méta-régime de régulation par lequel les sociétés humaines organisent la co-viabilité de leurs dynamiques internes.

View File

@@ -15,6 +15,9 @@ level: "avance"
related: ["archicration", "obliteration-archicratique", "autarchicration", "autarchicratie", "scene-empechee", "scene-manquante", "hypotopie", "atopie", "desarchicration", "institution-invisible"]
opposedTo: ["scene-darchicration", "monde-instituable"]
seeAlso: ["hypercratialite", "hyperarcalite", "desarchicratisation"]
navigation:
primaryNext: "hypercratialite"
primaryReason: "Loblitération de la scène ouvre à une domination pure où la cratialité se déchaîne sans régulation."
---
Larchicration oblitérée désigne la situation dans laquelle larchicration continue dexister et de produire des effets, mais sous une forme devenue partiellement invisible, introuvable ou difficilement disputable.

View File

@@ -15,6 +15,9 @@ level: "intermediaire"
related: ["archicratistique", "archicratie", "institution-invisible", "figures-archicratiques", "tension", "scene-darchicration", "scene-manquante", "scene-empechee", "cartographie-des-scenes-manquantes", "audit-archicratique"]
opposedTo: []
seeAlso: ["autarchicratie", "obliteration-archicratique", "desarchicratisation", "hypotopie"]
navigation:
primaryNext: "cartographie-des-scenes-manquantes"
primaryReason: "Le diagnostic ouvre sur une cartographie des scènes manquantes à reconstruire."
---
Larchidiagnostic désigne un diagnostic portant non sur les seuls symptômes visibles dune crise, mais sur les architectures de régulation, les scènes et les figures qui la produisent, lencadrent, la déplacent ou laggravent.

View File

@@ -16,6 +16,19 @@ level: "avance"
related: ["archicratie", "arcalite", "cratialite", "archicration", "scene-depreuve", "journal-de-justification", "cartographie-des-scenes-manquantes", "tribunal-de-lalgorithme", "archidiagnostic", "institution-invisible"]
opposedTo: ["autarchicratie"]
seeAlso: ["gouvernementalite-algorithmique", "preemption-algorithmique", "budget-scenique", "visa-daffectation"]
navigation:
primaryNext: "cartographie-des-scenes-manquantes"
primaryReason: "Laudit identifie larchitecture régulatrice ; la cartographie des scènes manquantes permet ensuite de localiser les lieux où la régulation ne comparaît pas."
flows:
repair:
label: "Parcours réparation"
primaryNext: "journal-de-justification"
primaryReason: "Laudit se prolonge par un journal rendant explicites les décisions et leurs justifications."
paths:
understand: ["archidiagnostic", "scene-depreuve", "archicration"]
deepen: ["journal-de-justification", "tribunal-de-lalgorithme", "visa-daffectation"]
compare: ["gouvernementalite-algorithmique", "preemption-algorithmique", "institution-invisible"]
apply: ["cartographie-des-scenes-manquantes", "droit-au-differe-contradictoire", "coupe-circuit-citoyen"]
---
Laudit archicratique désigne une méthode dévaluation dun système dIA qui ne se limite ni à la seule mesure de performance, ni à la seule vérification de conformité réglementaire.

View File

@@ -15,6 +15,9 @@ level: "fondamental"
related: ["archicratie", "archicration", "obliteration-archicratique", "scene-depreuve", "co-viabilite", "autarchicration", "archicration-obliteree", "desarchicratisation", "institution-invisible"]
opposedTo: ["archicratie"]
seeAlso: ["tension", "hyperarcalite", "hypercratialite", "figures-archicratiques"]
navigation:
primaryNext: "autarchicration"
primaryReason: "Lautarchicratie se prolonge dans des formes darchicration capturées où la scène est biaisée."
---
Lautarchicratie désigne une dérive dun méta-régime archicratique dans laquelle les architectures régulatrices continuent dopérer tout en devenant de plus en plus autonomes, opaques et soustraites à la scène dépreuve.

View File

@@ -15,6 +15,9 @@ level: "avance"
related: ["archicration", "autarchicratie", "archicration-obliteree", "scene-depreuve", "scene-darchicration", "obliteration-archicratique", "desarchicration", "hyperarcalite", "hypercratialite"]
opposedTo: ["monde-instituable", "scene-depreuve"]
seeAlso: ["institution-invisible"]
navigation:
primaryNext: "archicration-obliteree"
primaryReason: "Une archicration capturée tend à devenir illisible et à perdre ses conditions de reconnaissance."
---
Lautarchicration désigne un mode dégradé darchicration dans lequel lépreuve régulatrice continue de fonctionner, mais principalement pour reproduire et protéger le dispositif plutôt que pour le rendre effectivement révisable.

View File

@@ -16,6 +16,9 @@ level: "avance"
related: ["scene-depreuve", "archicration", "tribunal-de-lalgorithme", "cartographie-des-scenes-manquantes", "co-viabilite", "visa-daffectation", "audit-archicratique"]
opposedTo: ["archicration-obliteree"]
seeAlso: ["democratie-deliberative", "gouvernance-des-communs", "coupe-circuit-citoyen"]
navigation:
primaryNext: "visa-daffectation"
primaryReason: "Lallocation des ressources se concrétise dans des décisions daffectation."
---
Le budget scénique désigne le principe selon lequel une gouvernance archicratique doit réserver explicitement des ressources pour faire exister des scènes darchicration.

View File

@@ -16,6 +16,9 @@ level: "avance"
related: ["scene-depreuve", "scene-manquante", "scene-empechee", "hypertopie", "hypotopie", "atopie", "budget-scenique", "audit-archicratique", "tribunal-de-lalgorithme", "archidiagnostic"]
opposedTo: ["obliteration-archicratique"]
seeAlso: ["synchrotopie", "archicration-obliteree", "journal-de-justification"]
navigation:
primaryNext: "audit-archicratique"
primaryReason: "La cartographie appelle un audit permettant de réintroduire des conditions de scène."
---
La cartographie des scènes manquantes désigne le travail systématique qui consiste à repérer, dans un système dIA ou dans une architecture décisionnelle, les lieux où se prennent réellement les décisions, les lieux où la parole existe sans prise réelle, et les lieux où de nouvelles scènes devraient être instituées.

View File

@@ -15,6 +15,19 @@ level: "fondamental"
related: ["archicratie", "arcalite", "cratialite", "archicration", "tension"]
opposedTo: ["autarchicratie"]
seeAlso: ["scene-depreuve", "obliteration-archicratique", "coexistence-ontologique-et-necessite-regulatrice", "formes-de-vie-et-cadres-dhabitabilite", "subsistance-vivante-et-captation-capitalistique"]
navigation:
primaryNext: "tension"
primaryReason: "La co-viabilité se comprend pleinement à partir des tensions quelle ne supprime pas, mais rend traitables dans une architecture de régulation."
flows:
systemic:
label: "Intégration archicratique"
primaryNext: "archicration"
primaryReason: "La co-viabilité constitue le socle dune archicration effective."
paths:
understand: ["tension", "archicration", "scene-depreuve"]
deepen: ["regime-de-co-viabilite", "coexistence-ontologique-et-necessite-regulatrice", "formes-de-vie-et-cadres-dhabitabilite"]
compare: ["autarchicratie", "archicrations-differentielles-et-formes-hybrides"]
apply: ["audit-archicratique", "cartographie-des-scenes-manquantes"]
---
La co-viabilité désigne la capacité dun système social à maintenir la continuité de son organisation collective en rendant compatibles, sans les abolir, une pluralité de tensions, darcalités et de cratialités.

View File

@@ -15,6 +15,14 @@ level: "fondamental"
related: ["archicratie", "arcalite", "archicration", "tension", "co-viabilite", "agencement-machinique", "cybernetique", "gouvernementalite-algorithmique"]
opposedTo: ["autarchicratie"]
seeAlso: ["obliteration-archicratique", "hypercratialite"]
navigation:
primaryNext: "archicration"
primaryReason: "Après leffectuation cratiale, larchicration permet de comprendre comment les tensions produites par laction deviennent exposables, régulables et révisables."
paths:
understand: ["archicration", "co-viabilite", "tension"]
deepen: ["hypercratialite", "gouvernementalite-algorithmique", "agencement-machinique"]
compare: ["arcalite", "autarchicratie", "cybernetique"]
apply: ["audit-archicratique", "journal-de-justification", "tribunal-de-lalgorithme"]
---
La cratialité désigne le vecteur opératoire et transformateur de toute régulation.

View File

@@ -18,6 +18,14 @@ level: "fondamental"
related: ["exception-souveraine", "contractualisme-hobbesien", "archicratie", "archicration", "tension", "preemption-algorithmique"]
opposedTo: ["democratie-deliberative", "dissensus-politique", "gouvernance-des-communs", "lieu-vide-du-pouvoir"]
seeAlso: ["domination-legale-rationnelle", "volonte-generale", "autarchicratie"]
navigation:
primaryNext: "exception-souveraine"
primaryReason: "Lexception souveraine permet de préciser le point où la doctrine décisionniste concentre la fondation politique dans lacte de suspension de la norme."
paths:
understand: ["exception-souveraine", "contractualisme-hobbesien", "domination-legale-rationnelle"]
deepen: ["autarchicratie", "preemption-algorithmique", "archicration"]
compare: ["democratie-deliberative", "dissensus-politique", "gouvernance-des-communs"]
apply: ["audit-archicratique", "scene-depreuve"]
---
Le décisionnisme souverain désigne la doctrine fondatrice selon laquelle lordre politique se constitue ultimement dans la capacité souveraine à décider de lexception, à suspendre la norme et à imposer un cadre sans médiation dialogique.

View File

@@ -15,6 +15,9 @@ level: "avance"
related: ["archicration", "archicration-obliteree", "scene-manquante", "scene-empechee", "autarchicration", "autarchicratie", "obliteration-archicratique", "desarchicratisation", "institution-invisible"]
opposedTo: ["archicratisation", "monde-instituable"]
seeAlso: ["atopie"]
navigation:
primaryNext: "desarchicratisation"
primaryReason: "La désagrégation de la scène se prolonge en désarchicratisation, où les structures elles-mêmes se délitent."
---
La désarchicration désigne le processus local par lequel une scène, un dispositif, une institution ou un domaine cesse dêtre effectivement archicraté, alors même quil demeure encore régulé.

View File

@@ -15,6 +15,9 @@ level: "avance"
related: ["desarchicration", "autarchicratie", "institution-invisible", "scene-manquante", "archicration-obliteree", "co-viabilite", "obliteration-archicratique", "monde-instituable", "scene-empechee", "archidiagnostic"]
opposedTo: ["archicratisation"]
seeAlso: ["autarchicration", "atopie", "scene-depreuve"]
navigation:
primaryNext: "autarchicratie"
primaryReason: "Leffondrement des structures ouvre la voie à une réinstauration autarchique du pouvoir."
---
La désarchicratisation désigne le processus historique ou systémique par lequel un monde social perd sa capacité à rendre comparables, disputables et révisables ses propres architectures de régulation.

View File

@@ -18,6 +18,14 @@ level: "fondamental"
related: ["archicratie", "arcalite", "cratialite", "archicration", "democratie-deliberative", "gouvernance-des-communs"]
opposedTo: ["agencement-machinique", "dissensus-politique", "decisionnisme-souverain"]
seeAlso: ["gouvernementalite", "cybernetique", "exception-souveraine", "contractualisme-hobbesien"]
navigation:
primaryNext: "democratie-deliberative"
primaryReason: "La démocratie délibérative permet dinterroger ce que la domination légale-rationnelle laisse souvent en retrait : la publicité de la justification et la réversibilité de la règle."
paths:
understand: ["gouvernementalite", "cybernetique", "archicration"]
deepen: ["democratie-deliberative", "gouvernance-des-communs", "theorie-de-la-justification"]
compare: ["decisionnisme-souverain", "agencement-machinique", "dissensus-politique"]
apply: ["journal-de-justification", "audit-archicratique"]
---
La domination légale-rationnelle désigne le paradigme de régulation fondé sur la légalité formelle, la compétence fonctionnelle, limpersonnalité des règles et lorganisation bureaucratique de lautorité.

View File

@@ -16,6 +16,9 @@ level: "avance"
related: ["archicration", "scene-depreuve", "journal-de-justification", "tribunal-de-lalgorithme", "co-viabilite", "visa-daffectation", "coupe-circuit-citoyen"]
opposedTo: ["preemption-algorithmique"]
seeAlso: ["gouvernementalite-algorithmique", "autarchicratie", "cartographie-des-scenes-manquantes"]
navigation:
primaryNext: "tribunal-de-lalgorithme"
primaryReason: "Le contradictoire permet lémergence dun espace de jugement structuré."
---
Le droit au différé contradictoire désigne le principe selon lequel aucune décision automatisée substantielle ne doit devenir pleinement définitive sans quexistent un délai, un accès au dossier et un format permettant sa contestation argumentée par les personnes affectées.

View File

@@ -15,6 +15,9 @@ level: "avance"
related: ["arcalite", "hypercratialite", "archicration", "autarchicratie", "scene-manquante", "archicration-obliteree", "archicrate", "autarchicration", "institution-invisible"]
opposedTo: ["co-viabilite", "archicratisation"]
seeAlso: ["scene-depreuve", "obliteration-archicratique"]
navigation:
primaryNext: "desarchicration"
primaryReason: "Lécrasement normatif conduit à la dissolution des conditions mêmes de larchicration."
---
Lhyperarcalité désigne lhypertrophie de larcalité, cest-à-dire la situation dans laquelle les fondements, les cadres, les principes de légitimation ou les structures de cadrage deviennent excessivement massifs, saturants ou immunisés contre lépreuve.

View File

@@ -15,6 +15,9 @@ level: "avance"
related: ["cratialite", "hyperarcalite", "archicration", "autarchicratie", "archicrate", "archicration-obliteree", "preemption-algorithmique", "gouvernementalite-algorithmique", "autarchicration", "institution-invisible"]
opposedTo: ["co-viabilite", "archicratisation"]
seeAlso: ["tension", "scene-depreuve", "obliteration-archicratique"]
navigation:
primaryNext: "hyperarcalite"
primaryReason: "Lexcès de pouvoir appelle un excès symétrique de normativité, conduisant à une hyperarcalité."
---
Lhypercratialité désigne lhypertrophie de la cratialité, cest-à-dire la situation dans laquelle la capacité deffectuation, dintervention, de pilotage, dautomatisation ou de transformation croît plus vite que les scènes capables de lexposer, de la qualifier et de la réviser.

View File

@@ -15,6 +15,9 @@ level: "avance"
related: ["archicratie", "cratialite", "arcalite", "scene-manquante", "obliteration-archicratique", "autarchicratie", "hypotopie", "atopie", "figures-archicratiques", "archidiagnostic"]
opposedTo: ["monde-instituable"]
seeAlso: ["scene-darchicration", "scene-empechee", "archicrate", "cartographie-des-scenes-manquantes", "autarchicration", "archicration-obliteree"]
navigation:
primaryNext: "scene-depreuve"
primaryReason: "La mise au jour de linstitution invisible permet de réouvrir une scène dépreuve et de relancer larchicration."
---
Linstitution invisible désigne larchitecture diffuse de pouvoir qui résulte de la composition de multiples dispositifs hétérogènes — infrastructures, normes, procédures, algorithmes, flux financiers, routines administratives, plateformes, indicateurs — sans apparaître comme une institution clairement identifiable.

View File

@@ -16,6 +16,9 @@ level: "avance"
related: ["archicration", "scene-depreuve", "audit-archicratique", "droit-au-differe-contradictoire", "tribunal-de-lalgorithme", "visa-daffectation", "cartographie-des-scenes-manquantes"]
opposedTo: ["obliteration-archicratique"]
seeAlso: ["theorie-de-la-justification", "gouvernementalite-algorithmique", "budget-scenique"]
navigation:
primaryNext: "droit-au-differe-contradictoire"
primaryReason: "La traçabilité ouvre la possibilité dun contradictoire différé."
---
Le journal de justification désigne un dispositif documentaire qui conserve la trace des justifications effectivement mobilisées dans la production dune décision, dune politique ou dun déploiement algorithmique.

View File

@@ -15,6 +15,9 @@ level: "avance"
related: ["scene-darchicration", "scene-depreuve", "co-viabilite", "archicration", "archicratie", "desarchicratisation", "archicratisation", "scene-empechee", "institution-invisible"]
opposedTo: ["autarchicratie", "scene-manquante", "atopie"]
seeAlso: ["obliteration-archicratique", "budget-scenique", "cartographie-des-scenes-manquantes", "audit-archicratique", "archidiagnostic"]
navigation:
primaryNext: "scene-manquante"
primaryReason: "Même un monde instituable peut se dégrader lorsque les conditions de la scène cessent dêtre réunies."
---
Le monde instituable désigne une configuration dans laquelle il demeure possible de rouvrir des scènes, de faire comparaître des architectures de régulation, de reconfigurer des dispositifs et de réarticuler les fondements au nom desquels lordre agit.

View File

@@ -15,6 +15,9 @@ level: "fondamental"
related: ["archicration", "scene-depreuve", "archicratie", "arcalite", "cratialite", "co-viabilite"]
opposedTo: ["scene-manquante", "autarchicratie"]
seeAlso: ["scene-empechee", "archicration-obliteree", "institution-invisible", "monde-instituable", "archidiagnostic", "cartographie-des-scenes-manquantes"]
navigation:
primaryNext: "co-viabilite"
primaryReason: "Une scène stabilisée permet lémergence de conditions de co-viabilité."
---
La scène darchicration désigne le lieu, le format et la temporalité dans lesquels un ordre doit comparaître, justifier ses fondements, exposer ses dispositifs et accepter quune épreuve puisse en modifier les formes.

View File

@@ -15,6 +15,9 @@ level: "fondamental"
related: ["archicration", "archicratie", "tension", "co-viabilite", "obliteration-archicratique", "scene-darchicration"]
opposedTo: ["autarchicratie"]
seeAlso: ["obliteration-archicratique", "institution-invisible", "scene-manquante", "regulation-technique-et-legitimation-democratique", "visibilite-mediatique-et-reconnaissance-symbolique", "liberte-daction-et-regimes-de-securite-algorithmique"]
navigation:
primaryNext: "scene-darchicration"
primaryReason: "La scène dépreuve trouve son accomplissement dans la scène darchicration, où la co-viabilité devient effectivement instituante."
---
La scène dépreuve désigne lespace de comparution, dexposition et de révision dans lequel des architectures régulatrices peuvent être rendues visibles, discutées, contestées et transformées.

View File

@@ -15,6 +15,9 @@ level: "avance"
related: ["scene-darchicration", "scene-depreuve", "archicration", "co-viabilite", "institution-invisible", "archicration-obliteree", "scene-manquante", "monde-instituable"]
opposedTo: ["monde-instituable"]
seeAlso: ["budget-scenique", "cartographie-des-scenes-manquantes", "droit-au-differe-contradictoire", "audit-archicratique", "hypotopie", "autarchicratie"]
navigation:
primaryNext: "institution-invisible"
primaryReason: "Comprendre une scène empêchée exige danalyser les structures invisibles qui empêchent son émergence."
---
La scène empêchée désigne une situation dans laquelle les enjeux exigeraient lexistence dune scène darchicration, mais où des obstacles concrets en rendent linstauration impossible ou quasi impossible.

View File

@@ -15,6 +15,9 @@ level: "avance"
related: ["scene-darchicration", "scene-depreuve", "archicration", "institution-invisible", "archicratie", "obliteration-archicratique", "atopie"]
opposedTo: ["monde-instituable"]
seeAlso: ["scene-empechee", "archicration-obliteree", "cartographie-des-scenes-manquantes", "audit-archicratique", "hypotopie"]
navigation:
primaryNext: "scene-empechee"
primaryReason: "Labsence de scène peut résulter dun empêchement actif des conditions darchicration."
---
La scène manquante désigne une configuration dans laquelle des opérations de régulation ont bien lieu — classement, exclusion, allocation, décision, optimisation, hiérarchisation — mais sans quaucune scène darchicration ne soit prévue pour les mettre en cause comme telles.

View File

@@ -16,6 +16,9 @@ level: "avance"
related: ["archicration", "scene-depreuve", "droit-au-differe-contradictoire", "journal-de-justification", "budget-scenique", "cartographie-des-scenes-manquantes", "visa-daffectation", "coupe-circuit-citoyen", "audit-archicratique"]
opposedTo: ["autarchicratie"]
seeAlso: ["gouvernementalite-algorithmique", "preemption-algorithmique", "democratie-deliberative", "archidiagnostic"]
navigation:
primaryNext: "budget-scenique"
primaryReason: "Le jugement nécessite des moyens et une allocation de ressources scéniques."
---
Le tribunal de lalgorithme désigne une scène darchicration spécifique aux systèmes dIA.

View File

@@ -16,6 +16,9 @@ level: "avance"
related: ["archicration", "scene-depreuve", "journal-de-justification", "droit-au-differe-contradictoire", "audit-archicratique", "tribunal-de-lalgorithme", "budget-scenique"]
opposedTo: ["preemption-algorithmique", "desarchicratique"]
seeAlso: ["cartographie-des-scenes-manquantes", "gouvernementalite-algorithmique", "coupe-circuit-citoyen"]
navigation:
primaryNext: "scene-depreuve"
primaryReason: "Les décisions daffectation permettent la réouverture effective de scènes dépreuve."
---
Le visa daffectation désigne le dispositif par lequel laffectation dune décision, dune recommandation ou dun score algorithmique à une personne, à un dossier ou à une situation doit être explicitement validée comme imputable, située, conditionnelle et requalifiable.

View File

@@ -100,7 +100,15 @@ const WHOAMI_FORCE_LOCALHOST = (import.meta.env.PUBLIC_WHOAMI_FORCE_LOCALHOST ??
var __WHOAMI_PATH__ = String(WHOAMI_PATH || "/_auth/whoami");
var __WHOAMI_IN_DEV__ = Boolean(WHOAMI_IN_DEV);
var __WHOAMI_FORCE_LOCALHOST__ = Boolean(WHOAMI_FORCE_LOCALHOST);
var SHOULD_FETCH_WHOAMI = (!__DEV__) || __WHOAMI_IN_DEV__;
var IS_LOCAL_HOST =
location.hostname === "localhost" ||
location.hostname === "127.0.0.1" ||
location.hostname === "::1";
var SHOULD_FETCH_WHOAMI =
((!__DEV__) && !IS_LOCAL_HOST) ||
__WHOAMI_IN_DEV__ ||
__WHOAMI_FORCE_LOCALHOST__;
window.__archiFlags = Object.assign({}, window.__archiFlags, {
dev: __DEV__,
@@ -950,6 +958,23 @@ const WHOAMI_FORCE_LOCALHOST = (import.meta.env.PUBLIC_WHOAMI_FORCE_LOCALHOST ??
}
}
@media (min-width: 761px) and (max-width: 980px){
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-entry"]) .page,
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-portal"]) .page{
padding-top: 0 !important;
}
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-entry"]) .page-aside,
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-portal"]) .page-aside{
margin-top: 0 !important;
}
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-entry"]) .reading,
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-portal"]) .reading{
padding-top: 0 !important;
}
}
@media (max-width: 430px){
.page{
padding: var(--page-gap) 10px 12px 16px;
@@ -1073,7 +1098,7 @@ const WHOAMI_FORCE_LOCALHOST = (import.meta.env.PUBLIC_WHOAMI_FORCE_LOCALHOST ??
}
}
@media (min-width: 981px){
@media (min-width: 981px) and (hover: hover) and (pointer: fine){
.mobile-para-menu{
display: none !important;
}
@@ -1173,14 +1198,23 @@ const WHOAMI_FORCE_LOCALHOST = (import.meta.env.PUBLIC_WHOAMI_FORCE_LOCALHOST ??
return 0;
}
function glossaryEntryHeroBottom() {
const head = document.querySelector(".glossary-entry-head");
if (!head) return headerH();
const bottom = head.getBoundingClientRect().bottom;
return Math.max(headerH(), Math.round(bottom));
}
function syncFollowTop() {
if (!followEl) return;
const localH =
(isGlossaryEntryMode || isGlossaryPortalMode)
? getLocalStickyHeight()
: 0;
if (isGlossaryEntryMode) {
followEl.style.top = px(glossaryEntryHeroBottom());
return;
}
const localH = isGlossaryPortalMode ? getLocalStickyHeight() : 0;
followEl.style.top = px(headerH() + stickyGap() + localH);
}
@@ -2715,6 +2749,12 @@ const WHOAMI_FORCE_LOCALHOST = (import.meta.env.PUBLIC_WHOAMI_FORCE_LOCALHOST ??
return;
}
if (isGlossaryEntryMode) {
reading.querySelectorAll("details.details-section").forEach((details) => {
details.open = true;
});
}
const h1 = reading.querySelector("h1");
const topChapterLabel =
@@ -2802,15 +2842,17 @@ const WHOAMI_FORCE_LOCALHOST = (import.meta.env.PUBLIC_WHOAMI_FORCE_LOCALHOST ??
let curH2 = null;
let curH3 = null;
let lastVisibleH2 = null;
let lastVisibleH3 = null;
let lastY = window.scrollY || 0;
let lastOpenedH2 = "";
function computeLineY(followH) {
const localH =
(isGlossaryEntryMode || isGlossaryPortalMode)
? getLocalStickyHeight()
: 0;
if (isGlossaryEntryMode) {
return glossaryEntryHeroBottom() + (followH || 0);
}
const localH = isGlossaryPortalMode ? getLocalStickyHeight() : 0;
return headerH() + stickyGap() + localH + (followH || 0) + HYST;
}
@@ -2839,13 +2881,17 @@ const WHOAMI_FORCE_LOCALHOST = (import.meta.env.PUBLIC_WHOAMI_FORCE_LOCALHOST ??
const box = getH2DisplayEl(t);
if (!box) continue;
if (box.getBoundingClientRect().top <= lineY + HYST) {
if (box.getBoundingClientRect().top <= lineY) {
cand = t;
} else {
break;
}
}
if (isGlossaryEntryMode) {
return cand;
}
return cand || H2[0] || null;
}
@@ -2897,6 +2943,7 @@ const WHOAMI_FORCE_LOCALHOST = (import.meta.env.PUBLIC_WHOAMI_FORCE_LOCALHOST ??
}
function maybeOpenActiveSection(activeH2, lineY) {
if (isGlossaryEntryMode) return;
if (!activeH2 || !activeH2.id) return;
const triggerEl = activeH2.triggerEl || activeH2.anchor || null;
@@ -2914,6 +2961,7 @@ const WHOAMI_FORCE_LOCALHOST = (import.meta.env.PUBLIC_WHOAMI_FORCE_LOCALHOST ??
}
function maybePreopenNextSection(activeH2) {
if (isGlossaryEntryMode) return;
if (!activeH2) return;
const i = H2.findIndex((t) => t.id === activeH2.id);
@@ -2954,15 +3002,19 @@ const WHOAMI_FORCE_LOCALHOST = (import.meta.env.PUBLIC_WHOAMI_FORCE_LOCALHOST ??
curH3 = nextH3;
if (rfH2) {
const show = Boolean(curH2 && hasCrossedBottom(getH2DisplayEl(curH2), lineY));
rfH2.hidden = !show;
if (show) rfH2.textContent = curH2.title;
rfH2.hidden = !curH2;
if (curH2) {
rfH2.textContent = curH2.title;
}
}
if (rfH3) {
const show = Boolean(curH3 && hasCrossedBottom(getH3DisplayEl(curH3), lineY));
rfH3.hidden = !show;
if (show) rfH3.textContent = curH3.title;
rfH3.hidden = !curH3;
if (curH3) {
rfH3.textContent = curH3.title;
}
}
const any =
@@ -3011,12 +3063,9 @@ const WHOAMI_FORCE_LOCALHOST = (import.meta.env.PUBLIC_WHOAMI_FORCE_LOCALHOST ??
? inner2.getBoundingClientRect().height
: 0;
const localH =
(isGlossaryEntryMode || isGlossaryPortalMode)
? getLocalStickyHeight()
: 0;
const occupiedTop = headerH() + stickyGap() + localH + followH;
const occupiedTop = isGlossaryEntryMode
? glossaryEntryHeroBottom() + followH
: headerH() + stickyGap() + (isGlossaryPortalMode ? getLocalStickyHeight() : 0) + followH;
setRootVar("--followbar-h", px(followH));
setRootVar("--sticky-offset-px", String(Math.round(occupiedTop)));

View File

@@ -0,0 +1,99 @@
export type GlossaryDefaultNavigation = {
understand?: string[];
deepen?: string[];
compare?: string[];
apply?: string[];
};
export const GLOSSARY_NAV_DEFAULTS: Record<string, GlossaryDefaultNavigation> = {
"concept-fondamental": {
understand: ["archicratie", "arcalite", "cratialite", "archicration", "co-viabilite", "tension"],
deepen: ["scene-depreuve", "regime-de-co-viabilite", "meta-regime-archicratique"],
compare: ["autarchicratie", "domination-legale-rationnelle", "decisionnisme-souverain"],
apply: ["audit-archicratique", "cartographie-des-scenes-manquantes", "journal-de-justification"],
},
scene: {
understand: ["scene-depreuve", "scene-darchicration", "archicration"],
deepen: ["scene-manquante", "scene-empechee", "institution-invisible", "monde-instituable"],
compare: ["autarchicratie", "obliteration-archicratique", "hypotopie", "atopie"],
apply: ["cartographie-des-scenes-manquantes", "budget-scenique", "tribunal-de-lalgorithme"],
},
dynamique: {
understand: ["archicratisation", "desarchicration", "co-viabilisation"],
deepen: ["archeogenese", "obliteration-archicratique", "regime-de-co-viabilite"],
compare: ["desarchicratisation", "autarchicratie", "archicration-obliteree"],
apply: ["archidiagnostic", "audit-archicratique", "cartographie-des-scenes-manquantes"],
},
pathologie: {
understand: ["autarchicratie", "autarchicration", "archicration-obliteree"],
deepen: ["hyperarcalite", "hypercratialite", "obliteration-archicratique", "desarchicration"],
compare: ["archicration", "scene-depreuve", "monde-instituable", "co-viabilite"],
apply: ["archidiagnostic", "cartographie-des-scenes-manquantes", "coupe-circuit-citoyen"],
},
topologie: {
understand: ["meta-regime", "regime-de-co-viabilite", "synchrotopie"],
deepen: ["hypotopie", "hypertopie", "atopie", "archicrations-differentielles-et-formes-hybrides"],
compare: ["scene-depreuve", "institution-invisible", "monde-instituable"],
apply: ["cartographie-des-scenes-manquantes", "archidiagnostic", "audit-archicratique"],
},
"meta-regime": {
understand: ["meta-regime-archicratique", "archeogenese", "regime-de-co-viabilite"],
deepen: ["archicrations-proto-symboliques", "archicrations-scripturo-normatives", "archicrations-techno-logistiques"],
compare: ["archicrations-marchandes", "archicrations-guerrieres", "archicrations-epistemiques"],
apply: ["archicrations-differentielles-et-formes-hybrides", "archidiagnostic"],
},
paradigme: {
understand: ["archicratie", "co-viabilite", "tension"],
deepen: ["configuration-et-interdependance", "pensee-complexe", "theorie-de-la-justification"],
compare: ["decisionnisme-souverain", "domination-legale-rationnelle", "agencement-machinique", "democratie-deliberative"],
apply: ["audit-archicratique", "cartographie-des-scenes-manquantes"],
},
doctrine: {
understand: ["decisionnisme-souverain", "contractualisme-hobbesien", "volonte-generale"],
deepen: ["exception-souveraine", "droit-naturel-et-propriete", "domination-legale-rationnelle"],
compare: ["democratie-deliberative", "dissensus-politique", "gouvernance-des-communs", "lieu-vide-du-pouvoir"],
apply: ["scene-depreuve", "archicration", "audit-archicratique"],
},
"dispositif-ia": {
understand: ["audit-archicratique", "cartographie-des-scenes-manquantes", "journal-de-justification"],
deepen: ["tribunal-de-lalgorithme", "visa-daffectation", "budget-scenique"],
compare: ["gouvernementalite-algorithmique", "preemption-algorithmique", "institution-invisible"],
apply: ["droit-au-differe-contradictoire", "coupe-circuit-citoyen", "tribunal-de-lalgorithme"],
},
"tension-irreductible": {
understand: ["tension", "co-viabilite", "archicration"],
deepen: ["coexistence-ontologique-et-necessite-regulatrice", "formes-de-vie-et-cadres-dhabitabilite", "souverainetes-territoriales-et-interdependances-globales"],
compare: ["regulation-technique-et-legitimation-democratique", "memoire-symbolique-et-instantaneite-computationnelle", "travail-vivant-et-abstraction-de-la-valeur"],
apply: ["scene-depreuve", "audit-archicratique", "cartographie-des-scenes-manquantes"],
},
figure: {
understand: ["figures-archicratiques", "archicrate", "institution-invisible"],
deepen: ["hyperarcalite", "hypercratialite", "autarchicration"],
compare: ["scene-darchicration", "monde-instituable", "autarchicratie"],
apply: ["archidiagnostic", "cartographie-des-scenes-manquantes"],
},
qualification: {
understand: ["archicratique", "desarchicratique", "archicration"],
deepen: ["archicratisation", "desarchicratisation", "scene-darchicration"],
compare: ["autarchicratie", "archicration-obliteree", "monde-instituable"],
apply: ["archidiagnostic", "audit-archicratique"],
},
epistemologie: {
understand: ["archicratistique", "archidiagnostic", "pensee-complexe"],
deepen: ["archeogenese", "meta-regime-archicratique", "figures-archicratiques"],
compare: ["theorie-de-la-justification", "configuration-et-interdependance", "transduction-et-individuation"],
apply: ["audit-archicratique", "cartographie-des-scenes-manquantes", "journal-de-justification"],
},
};

View File

@@ -1,4 +1,5 @@
import type { CollectionEntry } from "astro:content";
import { GLOSSARY_NAV_DEFAULTS } from "./glossary-navigation-defaults";
export type GlossaryEntry = CollectionEntry<"glossaire">;
@@ -16,6 +17,32 @@ export type GlossaryRelationBlock = GlossaryRelationSection & {
className: string;
};
export type GlossarySmartNavigationPathKey =
| "understand"
| "deepen"
| "compare"
| "apply";
export type GlossarySmartNavigationPath = {
key: GlossarySmartNavigationPathKey;
label: string;
entries: GlossaryEntry[];
};
export type GlossarySmartNavigationFlow = {
key: string;
label: string;
primaryNext?: GlossaryEntry;
primaryReason?: string;
};
export type GlossarySmartNavigation = {
primaryNext?: GlossaryEntry;
primaryReason?: string;
paths: GlossarySmartNavigationPath[];
flows: GlossarySmartNavigationFlow[];
};
export type GlossaryHomeStats = {
totalEntries: number;
paradigmesCount: number;
@@ -122,6 +149,16 @@ export const FAMILY_SECTION_TITLES: Record<string, string> = {
epistemologie: "Outillage épistémologique",
};
export const SMART_NAV_PATH_LABELS: Record<
GlossarySmartNavigationPathKey,
string
> = {
understand: "Comprendre",
deepen: "Approfondir",
compare: "Comparer",
apply: "Appliquer",
};
const PREFERRED_PARADIGME_SLUGS = [
"gouvernementalite",
"gouvernementalite-algorithmique",
@@ -202,35 +239,35 @@ export function uniqueGlossaryEntries(
}
export function slugsOfGlossaryEntries(
entries: GlossaryEntry[] = [],
): Set<string> {
const slugs = new Set<string>();
for (const entry of entries) {
const slug = slugOfGlossaryEntry(entry);
if (!slug) continue;
slugs.add(slug);
}
return slugs;
}
export function excludeGlossaryEntries(
entries: GlossaryEntry[] = [],
excluded: Iterable<string> = [],
): GlossaryEntry[] {
const excludedSlugs = new Set(
Array.from(excluded)
.map((value) => normalizeGlossarySlug(value))
.filter(Boolean),
);
return entries.filter((entry) => {
const slug = slugOfGlossaryEntry(entry);
return Boolean(slug) && !excludedSlugs.has(slug);
});
entries: GlossaryEntry[] = [],
): Set<string> {
const slugs = new Set<string>();
for (const entry of entries) {
const slug = slugOfGlossaryEntry(entry);
if (!slug) continue;
slugs.add(slug);
}
return slugs;
}
export function excludeGlossaryEntries(
entries: GlossaryEntry[] = [],
excluded: Iterable<string> = [],
): GlossaryEntry[] {
const excludedSlugs = new Set(
Array.from(excluded)
.map((value) => normalizeGlossarySlug(value))
.filter(Boolean),
);
return entries.filter((entry) => {
const slug = slugOfGlossaryEntry(entry);
return Boolean(slug) && !excludedSlugs.has(slug);
});
}
export function resolveGlossaryEntriesInSourceOrder(
slugs: string[] = [],
allEntries: GlossaryEntry[] = [],
@@ -467,6 +504,96 @@ export function getRelationBlocks(
].filter((block) => block.items.length > 0);
}
export function getGlossarySmartNavigation(
currentEntry: GlossaryEntry,
allEntries: GlossaryEntry[] = [],
): GlossarySmartNavigation {
const currentSlug = slugOfGlossaryEntry(currentEntry);
const rawNavigation = currentEntry.data.navigation;
const defaultNavigation = GLOSSARY_NAV_DEFAULTS[familyOf(currentEntry)];
const navigationSource = rawNavigation ?? {
primaryNext: undefined,
primaryReason: undefined,
paths: defaultNavigation ?? {},
flows: {},
};
const primaryNext = resolveGlossaryEntriesInSourceOrder(
navigationSource.primaryNext ? [navigationSource.primaryNext] : [],
allEntries,
).find((entry) => slugOfGlossaryEntry(entry) !== currentSlug);
const pathKeys: GlossarySmartNavigationPathKey[] = [
"understand",
"deepen",
"compare",
"apply",
];
const paths = pathKeys
.map((key) => {
const entries = resolveGlossaryEntriesInSourceOrder(
navigationSource.paths?.[key] ?? [],
allEntries,
).filter((entry) => slugOfGlossaryEntry(entry) !== currentSlug);
return {
key,
label: SMART_NAV_PATH_LABELS[key],
entries,
};
})
.filter((path) => path.entries.length > 0);
const flows = Object.entries(navigationSource.flows ?? {})
.map(([key, flow]) => {
const primaryNext = resolveGlossaryEntriesInSourceOrder(
flow.primaryNext ? [flow.primaryNext] : [],
allEntries,
).find((entry) => slugOfGlossaryEntry(entry) !== currentSlug);
return {
key,
label: flow.label,
primaryNext,
primaryReason: flow.primaryReason,
};
})
.filter((flow) => flow.primaryNext);
if (primaryNext || paths.length > 0 || flows.length > 0) {
return {
primaryNext,
primaryReason: navigationSource.primaryReason,
paths,
flows,
};
}
const fallbackEntries = uniqueGlossaryEntries([
...resolveGlossaryEntriesInSourceOrder(
currentEntry.data.related ?? [],
allEntries,
),
...resolveGlossaryEntriesInSourceOrder(
currentEntry.data.seeAlso ?? [],
allEntries,
),
]).filter((entry) => slugOfGlossaryEntry(entry) !== currentSlug);
const fallbackPrimary = fallbackEntries[0];
return {
primaryNext: fallbackPrimary,
primaryReason: fallbackPrimary
? "Ce lien prolonge directement les relations conceptuelles de cette fiche."
: undefined,
paths: [],
flows: [],
};
}
export function getRelationSections(
entry: GlossaryEntry,
allEntries: GlossaryEntry[] = [],

View File

@@ -6,12 +6,14 @@ import GlossaryEntryLegacyNote from "../../components/GlossaryEntryLegacyNote.as
import GlossaryEntryHero from "../../components/GlossaryEntryHero.astro";
import GlossaryEntryBody from "../../components/GlossaryEntryBody.astro";
import GlossaryEntryStickySync from "../../components/GlossaryEntryStickySync.astro";
import GlossarySmartNav from "../../components/GlossarySmartNav.astro";
import { getCollection, render } from "astro:content";
import {
getDisplayDomain,
getDisplayFamily,
getDisplayLevel,
getRelationBlocks,
getGlossarySmartNavigation,
normalizeGlossarySlug,
} from "../../lib/glossary";
@@ -61,6 +63,7 @@ const isAliasRoute = requestedSlug !== canonicalSlug;
const canonicalHref = `/glossaire/${canonicalSlug}/`;
const relationBlocks = getRelationBlocks(entry, allEntries);
const smartNavigation = getGlossarySmartNavigation(entry, allEntries);
const displayFamily = getDisplayFamily(entry);
const displayDomain = getDisplayDomain(entry);
@@ -93,6 +96,8 @@ const displayLevel = getDisplayLevel(entry);
comparisonTraditions={entry.data.comparisonTraditions ?? []}
/>
<GlossarySmartNav smartNavigation={smartNavigation} />
<GlossaryEntryBody>
<Content />
</GlossaryEntryBody>

View File

@@ -82,7 +82,7 @@ const readingSteps = [
num: "05",
title: "Revenir à larchicratie",
text:
"Larchicratie nomme alors le régime général dans lequel cette composition devient lisible comme structure de régulation.",
"Larchicratie nomme alors le méta-régime général dans lequel cette composition devient lisible comme structure de régulation, d'agrégation et d'évolution.",
},
];

View File

@@ -730,8 +730,9 @@ const approfondirPortalItems = [
.glossary-map-block__head h2,
.glossary-section h2{
font-size: clamp(1.2rem, 3.8vw, 1.55rem);
line-height: 1.02;
font-size: clamp(1.18rem, 3.2vw, 1.42rem);
line-height: 1.04;
letter-spacing: -.02em;
text-wrap: pretty;
}

View File

@@ -117,6 +117,24 @@ header{
opacity 120ms var(--ease-out);
}
/* ===== SiteNav : lien actif ===== */
/* ===== SiteNav : lien actif ===== */
.site-nav a[aria-current="page"],
.site-nav a.is-active,
.site-nav a[data-active="true"]{
position: relative;
color: #00d9ff;
border-color: rgba(0,217,255,0.42);
background:
radial-gradient(circle at 50% 50%, rgba(0,217,255,0.16), transparent 68%),
rgba(0,217,255,0.075);
box-shadow:
0 0 0 1px rgba(0,217,255,0.12),
0 0 14px rgba(0,217,255,0.18),
inset 0 0 14px rgba(0,217,255,0.045);
opacity: 1;
}
.site-nav a:hover{
transform: translateY(-1px);
background: rgba(0,217,255,.08);