---
import GlossaryLayout from "../../layouts/GlossaryLayout.astro";
import GlossaryPortalAside from "../../components/GlossaryPortalAside.astro";
import GlossaryPortalHero from "../../components/GlossaryPortalHero.astro";
import GlossaryPortalSection from "../../components/GlossaryPortalSection.astro";
import GlossaryPortalStickySync from "../../components/GlossaryPortalStickySync.astro";
import GlossaryPortalPanel from "../../components/GlossaryPortalPanel.astro";
import { getCollection } from "astro:content";
import {
  buildGlossaryBySlug,
  hrefOfGlossaryEntry,
} from "../../lib/glossary";

const entries = await getCollection("glossaire");

const collator = new Intl.Collator("fr", {
  sensitivity: "base",
  numeric: true,
});

const bySlug = buildGlossaryBySlug(entries);
const hrefOf = hrefOfGlossaryEntry;

function sortByTerm(list = []) {
  return [...list].sort((a, b) => collator.compare(a.data.term, b.data.term));
}

const tension = bySlug.get("tension");
const coViabilite = bySlug.get("co-viabilite");
const sceneDepreuve = bySlug.get("scene-depreuve");
const archicration = bySlug.get("archicration");
const archicratie = bySlug.get("archicratie");

const foundationEntries = sortByTerm(
  [tension, coViabilite, sceneDepreuve, archicration, archicratie].filter(Boolean)
);

const resonanceEntries = sortByTerm(
  [
    bySlug.get("gouvernementalite-algorithmique"),
    bySlug.get("preemption-algorithmique"),
    bySlug.get("democratie-deliberative"),
    bySlug.get("cosmopolitique"),
    bySlug.get("technodiversite-et-cosmotechnie"),
    bySlug.get("pharmacologie-technique"),
  ].filter(Boolean)
);

const irreducibleTensions = [
  {
    index: "01",
    slug: "subsistance-vivante-et-captation-capitalistique",
    title: "Subsistance vivante / captation capitalistique",
    text:
      "Lorsque les conditions matérielles de la vie — eau, sol, temps, soin, énergie — sont traitées comme variables extractibles, la reproduction du vivant entre en conflit avec les logiques de rentabilité et d’accumulation.",
  },
  {
    index: "02",
    slug: "travail-vivant-et-abstraction-de-la-valeur",
    title: "Travail vivant / abstraction de la valeur",
    text:
      "Lorsque l’activité humaine concrète est fragmentée, désintermédiée ou précarisée tandis que la valeur se financiarise, se déterritorialise et se calcule à distance, la scène politique du travail tend à se dissoudre.",
  },
  {
    index: "03",
    slug: "egalisation-normative-et-differenciation-singuliere",
    title: "Égalisation normative / différenciation singulière",
    text:
      "Lorsque l’universalité égalitaire menace d’écraser les écarts situés, ou qu’à l’inverse la singularisation radicale produit des régimes d’exception, la régulation doit chercher une équité sans homogénéisation.",
  },
  {
    index: "04",
    slug: "liberte-daction-et-regimes-de-securite-algorithmique",
    title: "Liberté d’action / régimes de sécurité algorithmique",
    text:
      "Lorsque la protection, la surveillance, la notation ou la préemption encadrent les conduites au nom de la sécurité, la liberté devient incertaine comme capacité d’agir hors-script et hors-cadre prévu.",
  },
  {
    index: "05",
    slug: "visibilite-mediatique-et-reconnaissance-symbolique",
    title: "Visibilité médiatique / reconnaissance symbolique",
    text:
      "Lorsque l’exposition publique remplace la reconnaissance politique, la visibilité n’implique plus d’être entendu, considéré ni institué comme porteur d’un différend légitime.",
  },
  {
    index: "06",
    slug: "regulation-technique-et-legitimation-democratique",
    title: "Régulation technique / légitimation démocratique",
    text:
      "Lorsque des dispositifs techniques, algorithmiques ou automatisés prennent en charge des décisions normatives sans scène de validation collective, l’origine du pouvoir régulateur tend à s’oblitérer.",
  },
  {
    index: "07",
    slug: "souverainetes-territoriales-et-interdependances-globales",
    title: "Souverainetés territoriales / interdépendances globales",
    text:
      "Lorsque les cadres politiques demeurent majoritairement étatiques alors que les crises sont réticulaires, planétaires et transversales, l’échelle de la décision se désaccorde de l’échelle des enjeux.",
  },
  {
    index: "08",
    slug: "formes-de-vie-et-cadres-dhabitabilite",
    title: "Formes de vie / cadres d’habitabilité",
    text:
      "Lorsque les normes d’urbanité, de mobilité et d’usage du territoire imposent une homogénéité fonctionnelle, elles entrent en tension avec la pluralité des manières d’habiter, humaines et non humaines.",
  },
  {
    index: "09",
    slug: "memoire-symbolique-et-instantaneite-computationnelle",
    title: "Mémoire symbolique / instantanéité computationnelle",
    text:
      "Lorsque les régimes de calcul en temps réel dissolvent les temporalités longues de transmission, de récit et d’historicisation, la continuité symbolique du commun devient fragile.",
  },
  {
    index: "10",
    slug: "coexistence-ontologique-et-necessite-regulatrice",
    title: "Co-existence ontologique / nécessité régulatrice",
    text:
      "Lorsque l’altérité culturelle, cognitive, biologique ou machinique interdit tout socle substantiel univoque, il faut pourtant instituer une scène commune de régulation sans essence préalable partagée.",
  },
].map((item) => ({
  ...item,
  entry: bySlug.get(item.slug) ?? null,
}));

const tensionsCount = irreducibleTensions.length;

const pageItems = [
  { href: "#orientation", label: "Orientation" },
  { href: "#dix-tensions", label: "Les dix tensions" },
  ...(foundationEntries.length > 0
    ? [{ href: "#articulations-fondamentales", label: "Articulations fondamentales" }]
    : []),
  ...(resonanceEntries.length > 0
    ? [{ href: "#resonances-theoriques", label: "Résonances théoriques" }]
    : []),
  { href: "#prolonger-la-lecture", label: "Prolonger la lecture" },
];

const usefulLinks = [
  { href: "/glossaire/tension/", label: "Tension" },
  { href: "/glossaire/scene-depreuve/", label: "Scène d’épreuve" },
  { href: "/glossaire/archicration/", label: "Archicration" },
  { href: "/glossaire/co-viabilite/", label: "Co-viabilité" },
  { href: "/glossaire/dynamiques-archicratiques/", label: "Dynamiques archicratiques" },
];

const prolongerLinks = [
  {
    href: "/glossaire/dynamiques-archicratiques/",
    title: "Dynamiques archicratiques",
    text:
      "Revenir aux processus de fermeture, d’oblitération et de dérive de la régulation.",
  },
  {
    href: "/glossaire/archicrations/",
    title: "Méta-régimes archicratiques",
    text:
      "Parcourir les grandes formes de co-viabilité qui stabilisent les tensions sans les abolir.",
  },
  {
    href: "/glossaire/paradigmes/",
    title: "Paradigmes et doctrines",
    text:
      "Situer ces tensions dans un paysage théorique plus large.",
  },
  {
    href: "/glossaire/index-complet/",
    title: "Index complet",
    text:
      "Retrouver l’ensemble des entrées du glossaire dans une navigation alphabétique intégrale.",
  },
];
---

<GlossaryLayout
  title="Tensions irréductibles"
  version="1.0"
  stickyMode="glossary-portal"
>
  <Fragment slot="aside">
    <GlossaryPortalAside
      ariaLabel="Navigation des tensions irréductibles"
      title="Tensions irréductibles"
      meta={`${tensionsCount} tension${tensionsCount > 1 ? "s" : ""} structurale${tensionsCount > 1 ? "s" : ""}`}
      pageItems={pageItems}
      usefulLinks={usefulLinks}
    />
  </Fragment>

  <section class="tir-page">
    <GlossaryPortalHero
      prefix="tir"
      kicker="Parcours du glossaire"
      title="Tensions irréductibles"
      intro="Cette page rassemble les dix tensions que le chapitre 5 présente comme ontologiquement irréductibles et politiquement fondatrices. Elles ne se confondent pas avec des tensions simplement sectorielles : elles désignent des lignes de conflictualité plus profondes, à partir desquelles une scène archicratique doit organiser la co-viabilité."
      moreParagraphs={[
        "Le point décisif n’est donc pas de dresser un inventaire conjoncturel des crises, mais d’identifier des foyers structuraux suffisamment fondamentaux pour traverser durablement les régulations collectives.",
      ]}
      introMaxWidth="72ch"
      followIntroMaxWidth="68ch"
      moreMaxHeight="18rem"
    />

    <GlossaryPortalSection
      id="orientation"
      title="Orientation"
      intro="Dans cette perspective, une archicration ne supprime pas les tensions : elle les met en scène, les distribue, les hiérarchise, les arbitre ou les rend révisables. Les tensions irréductibles désignent ainsi le plan à partir duquel devient pensable l’exigence même de régulation."
    >
      <div class="tir-note-card">
        <strong>Point de méthode</strong>
        <p>
          Les tensions irréductibles relèvent ici d’un <em>plan structural</em>.
          Elles traversent ensuite des secteurs multiples — économiques,
          écologiques, sociaux, médiatiques, technologiques, géopolitiques ou
          culturels — sans se réduire à aucun d’entre eux pris isolément.
        </p>
      </div>
    </GlossaryPortalSection>

    <GlossaryPortalSection
      id="dix-tensions"
      title="Les dix tensions irréductibles"
      count={`${tensionsCount} tension${tensionsCount > 1 ? "s" : ""}`}
      intro="Le chapitre 5 les présente comme les foyers majeurs de conflictualité auxquels une pensée archicratique doit se confronter."
    >
      <div class="tir-cards">
        {irreducibleTensions.map((item) =>
          item.entry ? (
            <a class="tir-card tir-card--link" href={hrefOf(item.entry)}>
              <div class="tir-card__index">{item.index}</div>
              <h3>{item.title}</h3>
              <p>{item.text}</p>
            </a>
          ) : (
            <article class="tir-card">
              <div class="tir-card__index">{item.index}</div>
              <h3>{item.title}</h3>
              <p>{item.text}</p>
            </article>
          )
        )}
      </div>
    </GlossaryPortalSection>

    {foundationEntries.length > 0 && (
      <GlossaryPortalSection
        id="articulations-fondamentales"
        title="Articulations fondamentales"
        count={`${foundationEntries.length} notion${foundationEntries.length > 1 ? "s" : ""}`}
        intro="Ces tensions ne prennent sens, dans le glossaire, qu’en relation avec quelques notions cardinales : la tension elle-même, la scène d’épreuve, l’archicration, la co-viabilité et l’archicratie."
      >
        <GlossaryPortalPanel
          id="notions-cardinales"
          title="Notions cardinales"
          count={`${foundationEntries.length} repère${foundationEntries.length > 1 ? "s" : ""}`}
          surface={true}
          className="tir-block"
        >
          <div class="tir-link-cards">
            {foundationEntries.map((entry) => (
              <a class="tir-link-card" href={hrefOf(entry)}>
                <strong>{entry.data.term}</strong>
                <span>{entry.data.definitionShort}</span>

                {(entry.data.comparisonTraditions?.length ?? 0) > 0 && (
                  <small>
                    Traditions de comparaison : {entry.data.comparisonTraditions.join(" / ")}
                  </small>
                )}
              </a>
            ))}
          </div>
        </GlossaryPortalPanel>
      </GlossaryPortalSection>
    )}

    {resonanceEntries.length > 0 && (
      <GlossaryPortalSection
        id="resonances-theoriques"
        title="Résonances théoriques"
        count={`${resonanceEntries.length} entrée${resonanceEntries.length > 1 ? "s" : ""}`}
        intro="Plusieurs paradigmes déjà présents dans le glossaire permettent d’éclairer certains versants de ces tensions : gouvernementalité algorithmique, préemption, cosmopolitique, technodiversité, pharmacologie technique ou légitimation démocratique."
      >
        <GlossaryPortalPanel
          id="paradigmes-et-resonances"
          title="Paradigmes et résonances"
          count={`${resonanceEntries.length} entrée${resonanceEntries.length > 1 ? "s" : ""}`}
          surface={true}
          className="tir-block"
        >
          <div class="tir-link-cards">
            {resonanceEntries.map((entry) => (
              <a class="tir-link-card" href={hrefOf(entry)}>
                <strong>{entry.data.term}</strong>
                <span>{entry.data.definitionShort}</span>

                {(entry.data.mobilizedAuthors?.length ?? 0) > 0 && (
                  <small>
                    Auteurs mobilisés : {entry.data.mobilizedAuthors.join(" / ")}
                  </small>
                )}
              </a>
            ))}
          </div>
        </GlossaryPortalPanel>
      </GlossaryPortalSection>
    )}

    <GlossaryPortalSection
      id="prolonger-la-lecture"
      title="Prolonger la lecture"
      intro="Cette page fixe le socle conceptuel des tensions irréductibles. Elle pourra ensuite servir de base à un approfondissement plus détaillé, sans alourdir l’accueil général du glossaire."
    >
      <div class="tir-link-cards">
        {prolongerLinks.map((item) => (
          <a class="tir-link-card" href={item.href}>
            <strong>{item.title}</strong>
            <span>{item.text}</span>
          </a>
        ))}
      </div>
    </GlossaryPortalSection>

    <GlossaryPortalSection
      id="portee-densemble"
      title="Portée d’ensemble"
      final={true}
    >
      <p>
        Les tensions irréductibles ne décrivent pas des accidents secondaires de
        la vie collective, mais les lignes de fracture à partir desquelles toute
        régulation devient nécessaire. Elles indiquent pourquoi aucune
        co-viabilité ne peut être pensée comme simple équilibre, et pourquoi une
        archicration digne de ce nom doit toujours affronter, mettre en forme et
        rouvrir ce qui ne peut être définitivement résorbé.
      </p>
    </GlossaryPortalSection>
  </section>

  <GlossaryPortalStickySync
    heroMoreId="tir-hero-more"
    heroToggleId="tir-hero-toggle"
  />
</GlossaryLayout>

<style>
  .tir-page{
    padding: 8px 0 24px;
  }

  .tir-note-card{
    margin-top: 14px;
    padding: 16px 18px;
    border: 1px solid rgba(127,127,127,0.22);
    border-radius: 16px;
    background: rgba(127,127,127,0.05);
  }

  .tir-note-card strong{
    display: block;
    margin-bottom: 8px;
    font-size: 15px;
    line-height: 1.3;
  }

  .tir-note-card p{
    margin: 0;
    font-size: 14px;
    line-height: 1.5;
    opacity: .92;
  }

  .tir-block{
    margin-top: 18px;
  }

  .tir-cards{
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: 12px;
    margin-top: 14px;
  }

  .tir-card{
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding: 16px 18px;
    border: 1px solid rgba(127,127,127,0.22);
    border-radius: 16px;
    background: rgba(127,127,127,0.05);
    color: inherit;
  }

  .tir-card--link{
    text-decoration: none;
    transition: transform 120ms ease, background 120ms ease, border-color 120ms ease;
  }

  .tir-card--link:hover{
    transform: translateY(-1px);
    background: rgba(127,127,127,0.08);
    border-color: rgba(0,217,255,0.16);
    text-decoration: none;
  }

  .tir-card__index{
    font-size: 12px;
    font-weight: 800;
    letter-spacing: .12em;
    opacity: .72;
  }

  .tir-card h3{
    margin: 0;
    font-size: 16px;
    line-height: 1.32;
  }

  .tir-card p{
    margin: 0;
    font-size: 14px;
    line-height: 1.5;
    opacity: .92;
  }

  .tir-link-cards{
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
    gap: 12px;
    margin-top: 14px;
  }

  .tir-link-card{
    display: flex;
    flex-direction: column;
    gap: 8px;
    padding: 14px 16px;
    border: 1px solid rgba(127,127,127,0.22);
    border-radius: 16px;
    background: rgba(127,127,127,0.05);
    text-decoration: none;
    transition: transform 120ms ease, background 120ms ease, border-color 120ms ease;
  }

  .tir-link-card:hover{
    transform: translateY(-1px);
    background: rgba(127,127,127,0.08);
    border-color: rgba(0,217,255,0.16);
    text-decoration: none;
  }

  .tir-link-card strong{
    font-size: 15px;
    line-height: 1.3;
  }

  .tir-link-card span{
    font-size: 14px;
    line-height: 1.45;
    opacity: .92;
  }

  .tir-link-card small{
    font-size: 12px;
    line-height: 1.4;
    opacity: .72;
  }

  @media (prefers-color-scheme: dark){
    .tir-note-card,
    .tir-card,
    .tir-link-card{
      background: rgba(255,255,255,0.04);
    }

    .tir-card--link:hover,
    .tir-link-card:hover{
      background: rgba(255,255,255,0.07);
    }
  }
</style>