diff --git a/src/components/GlossaryAside.astro b/src/components/GlossaryAside.astro index 8e9485c..1616770 100644 --- a/src/components/GlossaryAside.astro +++ b/src/components/GlossaryAside.astro @@ -49,7 +49,7 @@ const portalLinks = getGlossaryPortalLinks(); -
+
Portails @@ -65,7 +65,7 @@ const portalLinks = getGlossaryPortalLinks();
{showNoyau && ( -
+
Noyau archicratique @@ -93,7 +93,7 @@ const portalLinks = getGlossaryPortalLinks(); )} {showSameFamily && ( -
+
{sameFamilyTitle} @@ -121,7 +121,7 @@ const portalLinks = getGlossaryPortalLinks(); )} {relationSections.length > 0 && ( -
+
Autour de cette fiche @@ -143,7 +143,7 @@ const portalLinks = getGlossaryPortalLinks(); )} {contextualTheory.length > 0 && ( -
+
Paysage théorique @@ -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(); \ No newline at end of file diff --git a/src/components/SiteNav.astro b/src/components/SiteNav.astro index 9a38977..3e6ce7d 100644 --- a/src/components/SiteNav.astro +++ b/src/components/SiteNav.astro @@ -1,15 +1,24 @@ +--- +const path = Astro.url.pathname; + +const isActive = (href: string) => { + if (href === "/") return path === "/"; + return path === href || path.startsWith(href); +}; +--- + \ No newline at end of file diff --git a/src/content.config.ts b/src/content.config.ts index cb109ff..941775f 100644 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -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() }) }); diff --git a/src/content/glossaire/agencement-machinique.md b/src/content/glossaire/agencement-machinique.md index ee42eb6..a1e1d08 100644 --- a/src/content/glossaire/agencement-machinique.md +++ b/src/content/glossaire/agencement-machinique.md @@ -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. diff --git a/src/content/glossaire/arcalite.md b/src/content/glossaire/arcalite.md index 0360072..37cc988 100644 --- a/src/content/glossaire/arcalite.md +++ b/src/content/glossaire/arcalite.md @@ -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. diff --git a/src/content/glossaire/archicratie.md b/src/content/glossaire/archicratie.md index d4e81ce..40ab825 100644 --- a/src/content/glossaire/archicratie.md +++ b/src/content/glossaire/archicratie.md @@ -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. diff --git a/src/content/glossaire/archicration-obliteree.md b/src/content/glossaire/archicration-obliteree.md index dc586be..ea86144 100644 --- a/src/content/glossaire/archicration-obliteree.md +++ b/src/content/glossaire/archicration-obliteree.md @@ -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. diff --git a/src/content/glossaire/archidiagnostic.md b/src/content/glossaire/archidiagnostic.md index 8cbcabf..1a1a385 100644 --- a/src/content/glossaire/archidiagnostic.md +++ b/src/content/glossaire/archidiagnostic.md @@ -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. diff --git a/src/content/glossaire/audit-archicratique.md b/src/content/glossaire/audit-archicratique.md index 4f215f6..08294da 100644 --- a/src/content/glossaire/audit-archicratique.md +++ b/src/content/glossaire/audit-archicratique.md @@ -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. diff --git a/src/content/glossaire/autarchicratie.md b/src/content/glossaire/autarchicratie.md index 8f133e6..74fbc0c 100644 --- a/src/content/glossaire/autarchicratie.md +++ b/src/content/glossaire/autarchicratie.md @@ -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. diff --git a/src/content/glossaire/autarchicration.md b/src/content/glossaire/autarchicration.md index 126406b..8f1492e 100644 --- a/src/content/glossaire/autarchicration.md +++ b/src/content/glossaire/autarchicration.md @@ -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. diff --git a/src/content/glossaire/budget-scenique.md b/src/content/glossaire/budget-scenique.md index 7f00d1e..f655fe2 100644 --- a/src/content/glossaire/budget-scenique.md +++ b/src/content/glossaire/budget-scenique.md @@ -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. diff --git a/src/content/glossaire/cartographie-des-scenes-manquantes.md b/src/content/glossaire/cartographie-des-scenes-manquantes.md index 23b95e8..79e0b1a 100644 --- a/src/content/glossaire/cartographie-des-scenes-manquantes.md +++ b/src/content/glossaire/cartographie-des-scenes-manquantes.md @@ -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. diff --git a/src/content/glossaire/co-viabilite.md b/src/content/glossaire/co-viabilite.md index a57d083..2e2f0c8 100644 --- a/src/content/glossaire/co-viabilite.md +++ b/src/content/glossaire/co-viabilite.md @@ -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. diff --git a/src/content/glossaire/cratialite.md b/src/content/glossaire/cratialite.md index a6f63d8..0261252 100644 --- a/src/content/glossaire/cratialite.md +++ b/src/content/glossaire/cratialite.md @@ -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. diff --git a/src/content/glossaire/decisionnisme-souverain.md b/src/content/glossaire/decisionnisme-souverain.md index 9fa6a1d..26201f0 100644 --- a/src/content/glossaire/decisionnisme-souverain.md +++ b/src/content/glossaire/decisionnisme-souverain.md @@ -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. diff --git a/src/content/glossaire/desarchicration.md b/src/content/glossaire/desarchicration.md index 503565b..3c665d8 100644 --- a/src/content/glossaire/desarchicration.md +++ b/src/content/glossaire/desarchicration.md @@ -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é. diff --git a/src/content/glossaire/desarchicratisation.md b/src/content/glossaire/desarchicratisation.md index 9068876..04ea1cc 100644 --- a/src/content/glossaire/desarchicratisation.md +++ b/src/content/glossaire/desarchicratisation.md @@ -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. diff --git a/src/content/glossaire/domination-legale-rationnelle.md b/src/content/glossaire/domination-legale-rationnelle.md index 42c9717..b8d1f80 100644 --- a/src/content/glossaire/domination-legale-rationnelle.md +++ b/src/content/glossaire/domination-legale-rationnelle.md @@ -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é. diff --git a/src/content/glossaire/droit-au-differe-contradictoire.md b/src/content/glossaire/droit-au-differe-contradictoire.md index 0d8deb3..b09c95e 100644 --- a/src/content/glossaire/droit-au-differe-contradictoire.md +++ b/src/content/glossaire/droit-au-differe-contradictoire.md @@ -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. diff --git a/src/content/glossaire/hyperarcalite.md b/src/content/glossaire/hyperarcalite.md index 63d87af..645e9d2 100644 --- a/src/content/glossaire/hyperarcalite.md +++ b/src/content/glossaire/hyperarcalite.md @@ -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. diff --git a/src/content/glossaire/hypercratialite.md b/src/content/glossaire/hypercratialite.md index b401c0b..4603a2e 100644 --- a/src/content/glossaire/hypercratialite.md +++ b/src/content/glossaire/hypercratialite.md @@ -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. diff --git a/src/content/glossaire/institution-invisible.md b/src/content/glossaire/institution-invisible.md index b166a82..b609011 100644 --- a/src/content/glossaire/institution-invisible.md +++ b/src/content/glossaire/institution-invisible.md @@ -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. diff --git a/src/content/glossaire/journal-de-justification.md b/src/content/glossaire/journal-de-justification.md index f91ea48..dfad245 100644 --- a/src/content/glossaire/journal-de-justification.md +++ b/src/content/glossaire/journal-de-justification.md @@ -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. diff --git a/src/content/glossaire/monde-instituable.md b/src/content/glossaire/monde-instituable.md index 6679d04..b2000f5 100644 --- a/src/content/glossaire/monde-instituable.md +++ b/src/content/glossaire/monde-instituable.md @@ -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. diff --git a/src/content/glossaire/scene-darchicration.md b/src/content/glossaire/scene-darchicration.md index 217fe59..0d5748a 100644 --- a/src/content/glossaire/scene-darchicration.md +++ b/src/content/glossaire/scene-darchicration.md @@ -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. diff --git a/src/content/glossaire/scene-depreuve.md b/src/content/glossaire/scene-depreuve.md index 91c0127..e5fc1d7 100644 --- a/src/content/glossaire/scene-depreuve.md +++ b/src/content/glossaire/scene-depreuve.md @@ -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. diff --git a/src/content/glossaire/scene-empechee.md b/src/content/glossaire/scene-empechee.md index a9f1d6d..fb0907c 100644 --- a/src/content/glossaire/scene-empechee.md +++ b/src/content/glossaire/scene-empechee.md @@ -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. diff --git a/src/content/glossaire/scene-manquante.md b/src/content/glossaire/scene-manquante.md index 7423c7a..c6e394d 100644 --- a/src/content/glossaire/scene-manquante.md +++ b/src/content/glossaire/scene-manquante.md @@ -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. diff --git a/src/content/glossaire/tribunal-de-lalgorithme.md b/src/content/glossaire/tribunal-de-lalgorithme.md index d92aa1a..333bae5 100644 --- a/src/content/glossaire/tribunal-de-lalgorithme.md +++ b/src/content/glossaire/tribunal-de-lalgorithme.md @@ -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. diff --git a/src/content/glossaire/visa-daffectation.md b/src/content/glossaire/visa-daffectation.md index 9ebf7c1..23a58f9 100644 --- a/src/content/glossaire/visa-daffectation.md +++ b/src/content/glossaire/visa-daffectation.md @@ -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. diff --git a/src/layouts/EditionLayout.astro b/src/layouts/EditionLayout.astro index 57beaed..401a273 100644 --- a/src/layouts/EditionLayout.astro +++ b/src/layouts/EditionLayout.astro @@ -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))); diff --git a/src/lib/glossary-navigation-defaults.ts b/src/lib/glossary-navigation-defaults.ts new file mode 100644 index 0000000..353dae4 --- /dev/null +++ b/src/lib/glossary-navigation-defaults.ts @@ -0,0 +1,99 @@ +export type GlossaryDefaultNavigation = { + understand?: string[]; + deepen?: string[]; + compare?: string[]; + apply?: string[]; + }; + + export const GLOSSARY_NAV_DEFAULTS: Record = { + "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"], + }, + }; \ No newline at end of file diff --git a/src/lib/glossary.ts b/src/lib/glossary.ts index 31932be..72796d1 100644 --- a/src/lib/glossary.ts +++ b/src/lib/glossary.ts @@ -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 = { 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 { - const slugs = new Set(); - - for (const entry of entries) { - const slug = slugOfGlossaryEntry(entry); - if (!slug) continue; - slugs.add(slug); - } - - return slugs; - } - - export function excludeGlossaryEntries( - entries: GlossaryEntry[] = [], - excluded: Iterable = [], - ): 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 { + const slugs = new Set(); + + for (const entry of entries) { + const slug = slugOfGlossaryEntry(entry); + if (!slug) continue; + slugs.add(slug); } + return slugs; +} + +export function excludeGlossaryEntries( + entries: GlossaryEntry[] = [], + excluded: Iterable = [], +): 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[] = [], diff --git a/src/pages/glossaire/[...slug].astro b/src/pages/glossaire/[...slug].astro index da1e32b..ec48c5a 100644 --- a/src/pages/glossaire/[...slug].astro +++ b/src/pages/glossaire/[...slug].astro @@ -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 ?? []} /> + + diff --git a/src/pages/glossaire/concepts-fondamentaux.astro b/src/pages/glossaire/concepts-fondamentaux.astro index 756376d..2b512ea 100644 --- a/src/pages/glossaire/concepts-fondamentaux.astro +++ b/src/pages/glossaire/concepts-fondamentaux.astro @@ -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.", }, ]; diff --git a/src/pages/glossaire/index.astro b/src/pages/glossaire/index.astro index a18f6e9..3d8f5a0 100644 --- a/src/pages/glossaire/index.astro +++ b/src/pages/glossaire/index.astro @@ -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; } diff --git a/src/styles/global.css b/src/styles/global.css index b78185a..51b4e9c 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -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);