Compare commits
2 Commits
feat/harmo
...
feat/gloss
| Author | SHA1 | Date | |
|---|---|---|---|
| 9f88112aca | |||
| 689619d14d |
@@ -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 {
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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{
|
||||
|
||||
@@ -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){
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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);
|
||||
|
||||
225
src/components/GlossarySmartNav.astro
Normal file
225
src/components/GlossarySmartNav.astro
Normal 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>
|
||||
@@ -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>
|
||||
@@ -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()
|
||||
})
|
||||
});
|
||||
|
||||
|
||||
@@ -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 l’intuition 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"]
|
||||
---
|
||||
|
||||
L’agencement 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.
|
||||
|
||||
@@ -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"]
|
||||
---
|
||||
|
||||
L’arcalité désigne le vecteur fondationnel et structurant de toute régulation.
|
||||
|
||||
@@ -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 l’arcalité permet d’entrer 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"]
|
||||
---
|
||||
|
||||
L’archicratie 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.
|
||||
|
||||
@@ -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: "L’oblitération de la scène ouvre à une domination pure où la cratialité se déchaîne sans régulation."
|
||||
---
|
||||
|
||||
L’archicration oblitérée désigne la situation dans laquelle l’archicration continue d’exister et de produire des effets, mais sous une forme devenue partiellement invisible, introuvable ou difficilement disputable.
|
||||
|
||||
@@ -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."
|
||||
---
|
||||
|
||||
L’archidiagnostic désigne un diagnostic portant non sur les seuls symptômes visibles d’une crise, mais sur les architectures de régulation, les scènes et les figures qui la produisent, l’encadrent, la déplacent ou l’aggravent.
|
||||
|
||||
@@ -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: "L’audit identifie l’architecture 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: "L’audit 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"]
|
||||
---
|
||||
|
||||
L’audit archicratique désigne une méthode d’évaluation d’un système d’IA qui ne se limite ni à la seule mesure de performance, ni à la seule vérification de conformité réglementaire.
|
||||
|
||||
@@ -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: "L’autarchicratie se prolonge dans des formes d’archicration capturées où la scène est biaisée."
|
||||
---
|
||||
|
||||
L’autarchicratie désigne une dérive d’un méta-régime archicratique dans laquelle les architectures régulatrices continuent d’opérer tout en devenant de plus en plus autonomes, opaques et soustraites à la scène d’épreuve.
|
||||
|
||||
@@ -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."
|
||||
---
|
||||
|
||||
L’autarchicration désigne un mode dégradé d’archicration 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.
|
||||
|
||||
@@ -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: "L’allocation des ressources se concrétise dans des décisions d’affectation."
|
||||
---
|
||||
|
||||
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 d’archicration.
|
||||
|
||||
@@ -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 d’IA 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.
|
||||
|
||||
@@ -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 qu’elle 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 d’une 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é d’un système social à maintenir la continuité de son organisation collective en rendant compatibles, sans les abolir, une pluralité de tensions, d’arcalités et de cratialités.
|
||||
|
||||
@@ -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 l’effectuation cratiale, l’archicration permet de comprendre comment les tensions produites par l’action 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.
|
||||
|
||||
@@ -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: "L’exception souveraine permet de préciser le point où la doctrine décisionniste concentre la fondation politique dans l’acte 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 l’ordre politique se constitue ultimement dans la capacité souveraine à décider de l’exception, à suspendre la norme et à imposer un cadre sans médiation dialogique.
|
||||
|
||||
@@ -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 qu’il demeure encore régulé.
|
||||
|
||||
@@ -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: "L’effondrement 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.
|
||||
|
||||
@@ -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 d’interroger 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, l’impersonnalité des règles et l’organisation bureaucratique de l’autorité.
|
||||
|
||||
@@ -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 d’un 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 qu’existent un délai, un accès au dossier et un format permettant sa contestation argumentée par les personnes affectées.
|
||||
|
||||
@@ -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 l’archicration."
|
||||
---
|
||||
|
||||
L’hyperarcalité désigne l’hypertrophie de l’arcalité, c’est-à-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.
|
||||
|
||||
@@ -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: "L’excès de pouvoir appelle un excès symétrique de normativité, conduisant à une hyperarcalité."
|
||||
---
|
||||
|
||||
L’hypercratialité désigne l’hypertrophie de la cratialité, c’est-à-dire la situation dans laquelle la capacité d’effectuation, d’intervention, de pilotage, d’automatisation ou de transformation croît plus vite que les scènes capables de l’exposer, de la qualifier et de la réviser.
|
||||
|
||||
@@ -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 l’institution invisible permet de réouvrir une scène d’épreuve et de relancer l’archicration."
|
||||
---
|
||||
|
||||
L’institution invisible désigne l’architecture 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.
|
||||
|
||||
@@ -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é d’un contradictoire différé."
|
||||
---
|
||||
|
||||
Le journal de justification désigne un dispositif documentaire qui conserve la trace des justifications effectivement mobilisées dans la production d’une décision, d’une politique ou d’un déploiement algorithmique.
|
||||
|
||||
@@ -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 l’ordre agit.
|
||||
|
||||
@@ -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 d’archicration désigne le lieu, le format et la temporalité dans lesquels un ordre doit comparaître, justifier ses fondements, exposer ses dispositifs et accepter qu’une épreuve puisse en modifier les formes.
|
||||
|
||||
@@ -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 d’archicration, où la co-viabilité devient effectivement instituante."
|
||||
---
|
||||
|
||||
La scène d’épreuve désigne l’espace de comparution, d’exposition et de révision dans lequel des architectures régulatrices peuvent être rendues visibles, discutées, contestées et transformées.
|
||||
|
||||
@@ -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 d’analyser les structures invisibles qui empêchent son émergence."
|
||||
---
|
||||
|
||||
La scène empêchée désigne une situation dans laquelle les enjeux exigeraient l’existence d’une scène d’archicration, mais où des obstacles concrets en rendent l’instauration impossible ou quasi impossible.
|
||||
|
||||
@@ -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: "L’absence de scène peut résulter d’un empêchement actif des conditions d’archicration."
|
||||
---
|
||||
|
||||
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 qu’aucune scène d’archicration ne soit prévue pour les mettre en cause comme telles.
|
||||
|
||||
@@ -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 l’algorithme désigne une scène d’archicration spécifique aux systèmes d’IA.
|
||||
|
||||
@@ -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 d’affectation permettent la réouverture effective de scènes d’épreuve."
|
||||
---
|
||||
|
||||
Le visa d’affectation désigne le dispositif par lequel l’affectation d’une décision, d’une recommandation ou d’un score algorithmique à une personne, à un dossier ou à une situation doit être explicitement validée comme imputable, située, conditionnelle et requalifiable.
|
||||
|
||||
@@ -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)));
|
||||
|
||||
99
src/lib/glossary-navigation-defaults.ts
Normal file
99
src/lib/glossary-navigation-defaults.ts
Normal 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"],
|
||||
},
|
||||
};
|
||||
@@ -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[] = [],
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -82,7 +82,7 @@ const readingSteps = [
|
||||
num: "05",
|
||||
title: "Revenir à l’archicratie",
|
||||
text:
|
||||
"L’archicratie nomme alors le régime général dans lequel cette composition devient lisible comme structure de régulation.",
|
||||
"L’archicratie 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.",
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user