From e2468be522083f0ec0a173a2e0ded492221166dc Mon Sep 17 00:00:00 2001 From: Archicratia Date: Thu, 19 Feb 2026 23:00:58 +0100 Subject: [PATCH] fix(etape8): resync hotfix edition depuis NAS (2026-02-19) --- .../archicratie/archicrat-ia/prologue.yml | 59 + src/components/LevelToggle.astro | 135 +- src/components/SidePanel.astro | 1064 +++++++++++ src/layouts/EditionLayout.astro | 1578 ++++++++++++----- src/styles/global.css | 121 +- 5 files changed, 2432 insertions(+), 525 deletions(-) create mode 100644 src/annotations/archicratie/archicrat-ia/prologue.yml create mode 100644 src/components/SidePanel.astro diff --git a/src/annotations/archicratie/archicrat-ia/prologue.yml b/src/annotations/archicratie/archicrat-ia/prologue.yml new file mode 100644 index 0000000..ec3c301 --- /dev/null +++ b/src/annotations/archicratie/archicrat-ia/prologue.yml @@ -0,0 +1,59 @@ +schema: 1 + +# optionnel (si présent, doit matcher le chemin du fichier) +page: archicratie/archicrat-ia/prologue + +paras: + p-0-d7974f88: + refs: + - label: "Happycratie — (Cabanas & Illouz) via Cairn" + url: "https://shs.cairn.info/revue-ethnologie-francaise-2019-4-page-813?lang=fr" + kind: "article" + - label: "Techno-féodalisme — Variations (OpenEdition)" + url: "https://journals.openedition.org/variations/2290" + kind: "article" + + authors: + - "Eva Illouz" + - "Yanis Varoufakis" + + quotes: + - text: "Dans Happycratie, Edgar Cabanas et Eva Illouz..." + source: "Happycratie, p.1" + - text: "En eux-mêmes, les actifs ne sont ni féodaux ni capitalistes..." + source: "Entretien Morozov/Varoufakis — techno-féodalisme" + + media: + - type: "image" + src: "/public/media/archicratie/archicrat-ia/prologue/p-0-d7974f88/schema-1.svg" + caption: "Tableau explicatif" + credit: "ChatGPT" + - type: "image" + src: "/public/media/archicratie/archicrat-ia/prologue/p-0-d7974f88/schema-2.svg" + caption: "Diagramme d’évolution" + credit: "Yanis Varoufakis" + + comments_editorial: + - text: "TODO: nuancer / préciser — commentaire éditorial versionné (pas public)." + status: "draft" + + p-1-2ef25f29: + refs: + - label: "Kafka et le pouvoir — Bernard Lahire (Cairn)" + url: "https://shs.cairn.info/franz-kafka--9782707159410-page-475?lang=fr" + kind: "book" + + authors: + - "Bernard Lahire" + + quotes: + - text: "Si l’on voulait chercher quelque chose comme une vision du monde chez Kafka..." + source: "Bernard Lahire, Franz Kafka, p.475+" + + media: + - type: "video" + src: "/media/prologue/p-1-2ef25f29/bien_commun.mp4" + caption: "Entretien avec Bernard Lahire" + credit: "Cairn.info" + + comments_editorial: [] diff --git a/src/components/LevelToggle.astro b/src/components/LevelToggle.astro index 18cbf92..212acb4 100644 --- a/src/components/LevelToggle.astro +++ b/src/components/LevelToggle.astro @@ -1,35 +1,128 @@ --- +// src/components/LevelToggle.astro const { initialLevel = 1 } = Astro.props; --- -
- - - + +
+ + + +
- + + diff --git a/src/components/SidePanel.astro b/src/components/SidePanel.astro new file mode 100644 index 0000000..0eba9fd --- /dev/null +++ b/src/components/SidePanel.astro @@ -0,0 +1,1064 @@ +--- +// src/components/SidePanel.astro +--- + + + + + diff --git a/src/layouts/EditionLayout.astro b/src/layouts/EditionLayout.astro index a6ab57f..3c66d5f 100644 --- a/src/layouts/EditionLayout.astro +++ b/src/layouts/EditionLayout.astro @@ -3,6 +3,7 @@ import ProposeModal from "../components/ProposeModal.astro"; import SiteNav from "../components/SiteNav.astro"; import LevelToggle from "../components/LevelToggle.astro"; import BuildStamp from "../components/BuildStamp.astro"; +import SidePanel from "../components/SidePanel.astro"; import "../styles/global.css"; const { @@ -21,10 +22,14 @@ const canonical = Astro.site ? new URL(Astro.url.pathname, Astro.site).href : Astro.url.href; -// Cible Gitea (injectée au build) +const IS_DEV = import.meta.env.DEV; + const GITEA_BASE = import.meta.env.PUBLIC_GITEA_BASE ?? ""; const GITEA_OWNER = import.meta.env.PUBLIC_GITEA_OWNER ?? ""; const GITEA_REPO = import.meta.env.PUBLIC_GITEA_REPO ?? ""; + +// ✅ OPTIONNEL : bridge serveur (proxy same-origin) +const ISSUE_BRIDGE_PATH = import.meta.env.PUBLIC_ISSUE_BRIDGE_PATH ?? ""; --- @@ -45,19 +50,115 @@ const GITEA_REPO = import.meta.env.PUBLIC_GITEA_REPO ?? ""; + + {/* ✅ BOOT EARLY : SidePanel dépend de ces globals. */} + - +
- Édition : {editionLabel} - Statut : {statusLabel} - Niveau : {lvl} - Version : {version} + Édition : {editionLabel} + Statut : {statusLabel} + Version : {version} + +
@@ -74,35 +175,20 @@ const GITEA_REPO = import.meta.env.PUBLIC_GITEA_REPO ?? ""; + +
- @@ -117,67 +203,124 @@ const GITEA_REPO = import.meta.env.PUBLIC_GITEA_REPO ?? ""; .page-shell{ --aside-w: 320px; --reading-w: 78ch; + --panel-w: 380px; --gap: 18px; + max-width: calc(var(--aside-w) + var(--reading-w) + var(--panel-w) + (var(--gap) * 2)); + margin: 0 auto; + display: grid; - grid-template-columns: 1fr var(--aside-w) minmax(0, var(--reading-w)) 1fr; + grid-template-columns: var(--aside-w) minmax(0, var(--reading-w)) var(--panel-w); column-gap: var(--gap); align-items: start; } .page-aside{ - grid-column: 2; + grid-column: 1; position: sticky; - - /* colle sous header + padding haut */ top: calc(var(--sticky-header-h) + var(--page-gap)); - - /* ⛔️ plus de scroll ici */ overflow: visible; max-height: none; } .page-aside__scroll{ - /* ✅ le scroll est ici, donc englobe TOC global + local */ max-height: calc(100vh - (var(--sticky-header-h) + var(--page-gap) + 12px)); overflow: auto; - padding-right: 8px; padding-top: 6px; - scrollbar-gutter: stable; } + /* ✅ Mode “lecture continue” : + - on garde
pour les ancres / JS + - mais on supprime l’UX accordéon (summary) et on montre le vrai H2 + */ + :global(.reading details.details-section){ + border: 0 !important; + padding: 0 !important; + margin: 22px 0 !important; + background: transparent !important; + } + + /* summary invisible (plus de “Ouvrir la section…”) */ + :global(.reading details.details-section > summary.details-summary){ + position: absolute !important; + left: -9999px !important; + width: 1px !important; + height: 1px !important; + overflow: hidden !important; + white-space: nowrap !important; + border: 0 !important; + padding: 0 !important; + margin: 0 !important; + } + + /* pas de “gap” artificiel ajouté après le summary */ + :global(.reading details .details-body){ + margin-top: 0 !important; + } + + /* le vrai H2 redevient visible */ + :global(.reading details .details-body > h2:first-child){ + position: static !important; + left: auto !important; + width: auto !important; + height: auto !important; + overflow: visible !important; + white-space: normal !important; + } + + .reading{ - grid-column: 3; + grid-column: 2; max-width: none; margin: 0; } - @media (max-width: 1100px){ + /* Niveau 1 : panel OFF + lecture large */ + :global(body[data-reading-level="1"]) .page-shell{ + --panel-w: 0px; + max-width: min(1560px, calc(100vw - 32px)); + grid-template-columns: var(--aside-w) minmax(0, 1fr); + } + :global(body[data-reading-level="1"]) .page-panel{ display: none !important; } + + /* Niveau 3 : lecture plus étroite + panel large ; TOC masqué */ + :global(body[data-reading-level="3"]) .page-shell{ + --reading-w: 62ch; + --panel-w: 560px; + max-width: calc(var(--reading-w) + var(--panel-w) + (var(--gap) * 1)); + grid-template-columns: minmax(0, var(--reading-w)) var(--panel-w); + } + :global(body[data-reading-level="3"]) .page-aside{ display: none; } + :global(body[data-reading-level="3"]) .reading{ grid-column: 1; } + + /* Niveau 4 : TOC à gauche + panel */ + :global(body[data-reading-level="4"]) .page-shell{ + --aside-w: 320px; + --reading-w: 64ch; + --panel-w: 520px; + max-width: calc(var(--aside-w) + var(--reading-w) + var(--panel-w) + (var(--gap) * 2)); + grid-template-columns: var(--aside-w) minmax(0, var(--reading-w)) var(--panel-w); + } + :global(body[data-reading-level="4"]) .page-aside{ display: block; } + :global(body[data-reading-level="4"]) .reading{ grid-column: 2; } + + @media (max-width: 1260px){ .page-shell{ max-width: 1180px; - margin: 0 auto; grid-template-columns: var(--aside-w) minmax(0, 1fr); } - .page-aside{ grid-column: 1; } - .reading{ - grid-column: 2; - max-width: 78ch; - margin: 0 auto; - } + .reading{ max-width: 78ch; margin: 0 auto; } } @media (max-width: 860px){ .page-shell{ max-width: 78ch; - margin: 0 auto; grid-template-columns: 1fr; } .page-aside{ - grid-column: 1; position: static; - overflow: visible; margin-bottom: 12px; } .page-aside__scroll{ @@ -186,411 +329,592 @@ const GITEA_REPO = import.meta.env.PUBLIC_GITEA_REPO ?? ""; padding-right: 0; padding-top: 0; } - .reading{ - grid-column: 1; - max-width: 78ch; - margin: 0 auto; - } + .reading{ max-width: 78ch; margin: 0 auto; } + } + + /* ===== para-tools layout (non destructif, surcouche) ===== */ + :global(.reading p[id^="p-"]){ + position: relative; + padding-right: 132px; + } + :global(.para-tools){ + position: absolute; + right: 0; + top: -2px; + display: flex; + flex-direction: column; + align-items: flex-end; + gap: 6px; + z-index: 2; + } + :global(.para-id){ + border: 1px solid rgba(127,127,127,0.45); + background: rgba(127,127,127,0.08); + border-radius: 999px; + padding: 2px 8px; + font-size: 12px; + font-weight: 750; + cursor: pointer; + user-select: none; + } + :global(.para-tools-actions){ + display: flex; + gap: 6px; + } + :global(.para-bookmark){ + align-self: flex-end; + } + + /* ✅ repère visuel du para "pilotant" le SidePanel */ + :global(.reading p.is-panel-current){ + background: rgba(140,140,255,0.07); + border-radius: 12px; } - diff --git a/src/styles/global.css b/src/styles/global.css index 4a943aa..8ca3ba7 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -80,6 +80,12 @@ main { padding: 0; } border-top: 1px dashed rgba(127,127,127,0.35); font-size: 14px; } +/* Edition-bar: cacher des badges (non destructif) */ +.edition-bar [data-badge="edition"], +.edition-bar [data-badge="status"], +.edition-bar [data-badge="version"]{ + display: none; +} .badge { padding: 2px 8px; @@ -95,7 +101,34 @@ main { padding: 0; } padding: 5px 12px; } -/* Toggle niveaux */ +/* Jump by paragraph id */ +.jump-form{ + display: inline-flex; + gap: 6px; + align-items: center; +} +.jump-input{ + border: 1px solid rgba(127,127,127,0.55); + background: transparent; + padding: 4px 10px; + border-radius: 999px; + font-size: 13px; + width: 320px; +} +.jump-input.is-error{ + outline: 2px solid rgba(127,127,127,0.55); + outline-offset: 2px; +} +.jump-btn{ + border: 1px solid rgba(127,127,127,0.55); + background: transparent; + padding: 4px 10px; + border-radius: 999px; + cursor: pointer; + font-size: 13px; +} + +/* Toggle niveaux (legacy, non bloquant) */ .level-toggle { display: inline-flex; gap: 6px; } .lvl-btn { border: 1px solid rgba(127,127,127,0.55); @@ -112,14 +145,22 @@ main { padding: 0; } /* Règles niveaux */ body[data-reading-level="1"] .level-2, -body[data-reading-level="1"] .level-3 { display: none; } -body[data-reading-level="2"] .level-3 { display: none; } +body[data-reading-level="1"] .level-3, +body[data-reading-level="1"] .level-4 { display: none; } + +body[data-reading-level="2"] .level-3, +body[data-reading-level="2"] .level-4 { display: none; } + +body[data-reading-level="3"] .level-2, +body[data-reading-level="3"] .level-4 { display: none; } + +body[data-reading-level="4"] .level-2, +body[data-reading-level="4"] .level-3 { display: none; } /* ========================== Scroll offset (anchors / headings / paras) ========================== */ -/* Paragraph tools + bookmark */ .reading p[id]{ position: relative; padding-right: 14rem; @@ -183,6 +224,14 @@ body[data-reading-level="2"] .level-3 { display: none; } } .para-bookmark:hover{ text-decoration: underline; } +/* Highlight (jump / resume / arrivée hash) */ +.para-highlight{ + background: rgba(127,127,127,0.10); + border-radius: 10px; + box-shadow: 0 0 0 2px rgba(127,127,127,0.35); + transition: box-shadow 160ms ease; +} + .build-stamp { margin-top: 28px; padding-top: 14px; @@ -196,15 +245,51 @@ body[data-reading-level="2"] .level-3 { display: none; } border-radius: 16px; padding: 10px 12px; margin: 14px 0; + position: relative; } -.details-summary { - cursor: pointer; - font-weight: 650; + +/* ✅ Handle minimal pour sections fermées : pas de titre visible, mais ouvrable */ +.details-summary{ list-style: none; + cursor: pointer; + user-select: none; + + border: 1px dashed rgba(127,127,127,.25); + border-radius: 999px; + padding: 6px 10px; + margin: 10px 0; + + background: rgba(127,127,127,0.06); + position: relative; + + /* cache le texte réel (souvent le titre), sans casser l’accessibilité */ + color: transparent; } .details-summary::-webkit-details-marker { display: none; } -.details-summary a { text-decoration: none; } -.details-summary a:hover { text-decoration: underline; } + +.details-summary::before{ + content: "▸ Ouvrir la section"; + color: rgba(127,127,127,0.85); + font-size: 12px; + font-weight: 850; +} +@media (prefers-color-scheme: dark){ + .details-summary::before{ color: rgba(220,220,220,0.82); } +} + +details[open] > .details-summary{ + /* une fois ouvert, on le rend “SR-only” pour éviter le doublon visuel */ + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + .details-body { margin-top: 10px; } /* Smooth scroll */ @@ -224,7 +309,6 @@ html{ scroll-behavior: smooth; } width: var(--reading-width); right: auto; - /* colle au header */ top: var(--sticky-header-h); z-index: 60; @@ -247,7 +331,7 @@ html{ scroll-behavior: smooth; } box-sizing: border-box; padding: 8px 12px; - padding-right: 84px; /* réserve pour les boutons */ + padding-right: 84px; border: 1px solid rgba(127,127,127,.20); border-top: 0; @@ -259,7 +343,7 @@ html{ scroll-behavior: smooth; } box-shadow: 0 10px 22px rgba(0,0,0,.06); - position: relative; /* pour rf-actions */ + position: relative; } @media (prefers-color-scheme: dark){ @@ -278,7 +362,6 @@ html{ scroll-behavior: smooth; } cursor: pointer; margin: 0; } - .rf-line[hidden]{ display: none !important; } .rf-h1{ @@ -298,7 +381,6 @@ html{ scroll-behavior: smooth; } font-weight: var(--rf-h3-fw); opacity: .92; } - .rf-line:hover{ text-decoration: underline; } /* Actions */ @@ -327,3 +409,14 @@ html{ scroll-behavior: smooth; } background: rgba(127,127,127,0.16); transform: translateY(-1px); } + +/* ========================== + PATCH CRUCIAL : éviter les “rectangles vides” + (details fermés + summary handle minimal) + ========================== */ + +.reading details.details-section:not([open]){ + border: 0; + padding: 0; + background: transparent; +} -- 2.49.1