Federated via graft
0

Configure Feed

Select the types of activity you want to include in your feed.

ci: regenerate presentation-fr.html

+363 -53
+363 -53
presentation-fr.html
··· 32 32 section.wide table { font-size: 18px; } 33 33 section.part { background-color: #1a5fb4 !important; } 34 34 section.part h1, section.part h2, section.part p { color: #fff !important; } 35 - ;background-color:#fff;background-image:none;" data-marpit-pagination-total="35"> 35 + ;background-color:#fff;background-image:none;" data-marpit-pagination-total="42"> 36 36 <h1 id="forges--web-d%C3%A9centralis%C3%A9">Forges &amp; web décentralisé</h1> 37 37 <p>État des lieux au 10 septembre 2026</p> 38 38 </section> ··· 54 54 section.wide table { font-size: 18px; } 55 55 section.part { background-color: #1a5fb4 !important; } 56 56 section.part h1, section.part h2, section.part p { color: #fff !important; } 57 - ;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="35"> 57 + ;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="42"> 58 58 <h1 id="1-cadrage">1. Cadrage</h1> 59 59 <h2 id="code-et-collaboration">code et collaboration</h2> 60 60 </section> ··· 76 76 section.wide table { font-size: 18px; } 77 77 section.part { background-color: #1a5fb4 !important; } 78 78 section.part h1, section.part h2, section.part p { color: #fff !important; } 79 - ;background-color:#fff;background-image:none;" data-marpit-pagination-total="35"> 79 + ;background-color:#fff;background-image:none;" data-marpit-pagination-total="42"> 80 80 <h2 id="automatisation-de-la-mise-en-miroir">Automatisation de la mise en miroir</h2> 81 81 <p><strong>Le transport</strong> du code est résolu depuis 2005 : git est distribué par construction, un dépôt peut exister à plusieurs endroits.</p> 82 82 <p><strong>L'orchestration</strong> n'existe pas. Chaque miroir se configure à la main, instance par instance. Chaque projet écrit elle-même l'intégration continue qui l'entretient.</p> ··· 99 99 section.wide table { font-size: 18px; } 100 100 section.part { background-color: #1a5fb4 !important; } 101 101 section.part h1, section.part h2, section.part p { color: #fff !important; } 102 - ;background-color:#fff;background-image:none;" data-marpit-pagination-total="35"> 102 + ;background-color:#fff;background-image:none;" data-marpit-pagination-total="42"> 103 103 <h2 id="%C3%A9l%C3%A9ments-non-couverts-par-git">Éléments non couverts par git</h2> 104 104 <p>Le véritable obstacle, c'est tout ce qui entoure un dépôt : tickets,<br /> 105 105 propositions de modification, relectures, identité, droits.</p> ··· 124 124 section.wide table { font-size: 18px; } 125 125 section.part { background-color: #1a5fb4 !important; } 126 126 section.part h1, section.part h2, section.part p { color: #fff !important; } 127 - ;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="35"> 127 + ;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="42"> 128 128 <h1 id="2-%C3%A9tat-de-la-f%C3%A9d%C3%A9ration-dans-forgejo">2. État de la fédération dans Forgejo</h1> 129 129 <h2 id="fonctionnalit%C3%A9s-livr%C3%A9es-et-fonctionnalit%C3%A9s-manquantes">Fonctionnalités livrées et fonctionnalités manquantes</h2> 130 130 </section> ··· 146 146 section.wide table { font-size: 18px; } 147 147 section.part { background-color: #1a5fb4 !important; } 148 148 section.part h1, section.part h2, section.part p { color: #fff !important; } 149 - ;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="35" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;img/forgejo_v16.jpg&quot;);background-size:contain;"></figure></div></section></foreignObject><foreignObject width="67%" height="720"><section id="6" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 149 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;img/forgejo_v16.jpg&quot;);background-size:contain;"></figure></div></section></foreignObject><foreignObject width="67%" height="720"><section id="6" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 150 150 h1 { color: #1a5fb4; } 151 151 h2 { color: #1a5fb4; } 152 152 h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } ··· 164 164 section.wide table { font-size: 18px; } 165 165 section.part { background-color: #1a5fb4 !important; } 166 166 section.part h1, section.part h2, section.part p { color: #fff !important; } 167 - ;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="35" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right"> 167 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right"> 168 168 <h2 id="p%C3%A9rim%C3%A8tre-fonctionnel-de-la-f%C3%A9d%C3%A9ration-forgejo">Périmètre fonctionnel de la fédération <a href="https://forgejo.org">Forgejo</a></h2> 169 169 <h3 id="fonctionne">Fonctionne</h3> 170 170 <ul> ··· 186 186 section.wide table { font-size: 18px; } 187 187 section.part { background-color: #1a5fb4 !important; } 188 188 section.part h1, section.part h2, section.part p { color: #fff !important; } 189 - " lang="fr-FR" data-marpit-pagination="6" style="" data-marpit-pagination-total="35" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="7" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 189 + " lang="fr-FR" data-marpit-pagination="6" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="7" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 190 190 h1 { color: #1a5fb4; } 191 191 h2 { color: #1a5fb4; } 192 192 h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } ··· 204 204 section.wide table { font-size: 18px; } 205 205 section.part { background-color: #1a5fb4 !important; } 206 206 section.part h1, section.part h2, section.part p { color: #fff !important; } 207 - ;background-color:#fff;background-image:none;" data-marpit-pagination-total="35"> 207 + ;background-color:#fff;background-image:none;" data-marpit-pagination-total="42"> 208 208 <h2 id="fonctionnement-du-favori-f%C3%A9d%C3%A9r%C3%A9">Fonctionnement du favori fédéré</h2> 209 209 <pre is="marp-pre" data-auto-scaling="downscale-only"><code>@alice@forgeA --(c'est quoi, ce dépôt ?)--&gt; acteur du dépôt sur forgeB 210 210 --(« aimé », signé)---------&gt; boîte de réception sur forgeB ··· 233 233 section.wide table { font-size: 18px; } 234 234 section.part { background-color: #1a5fb4 !important; } 235 235 section.part h1, section.part h2, section.part p { color: #fff !important; } 236 - ;background-color:#fff;background-image:none;" data-marpit-pagination-total="35"> 236 + ;background-color:#fff;background-image:none;" data-marpit-pagination-total="42"> 237 237 <h2 id="suivi-de-comptes-entre-forgejo-et-la-f%C3%A9diverse">Suivi de comptes entre Forgejo et la fédiverse</h2> 238 238 <p>Un compte Forgejo peut suivre un compte <a href="https://joinmastodon.org">Mastodon</a> ou <a href="https://gotosocial.org">GoToSocial</a>, et l'inverse.<br /> 239 239 Les commits et les versions apparaissent alors dans un fil social.</p> ··· 259 259 section.wide table { font-size: 18px; } 260 260 section.part { background-color: #1a5fb4 !important; } 261 261 section.part h1, section.part h2, section.part p { color: #fff !important; } 262 - ;background-color:#fff;background-image:none;" data-marpit-pagination-total="35"> 262 + ;background-color:#fff;background-image:none;" data-marpit-pagination-total="42"> 263 263 <h2 id="risque-associ%C3%A9-%C3%A0-lactivation-de-la-f%C3%A9d%C3%A9ration">Risque associé à l'activation de la fédération</h2> 264 264 <p>Le projet se réserve le droit de casser la fédération sans préavis.</p> 265 265 <p>Les autres serveurs mémorisent le domaine et les clés d'une instance dès que la fédération est active. Une rupture peut rendre ce domaine définitivement<br /> ··· 283 283 section.wide table { font-size: 18px; } 284 284 section.part { background-color: #1a5fb4 !important; } 285 285 section.part h1, section.part h2, section.part p { color: #fff !important; } 286 - ;background-color:#fff;background-image:none;--marpit-advanced-background-split:38%;" data-marpit-pagination-total="35" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;img/term404.jpg&quot;);background-size:contain;"></figure></div></section></foreignObject><foreignObject width="62%" height="720"><section id="10" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 286 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:38%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;img/term404.jpg&quot;);background-size:contain;"></figure></div></section></foreignObject><foreignObject width="62%" height="720"><section id="10" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 287 287 h1 { color: #1a5fb4; } 288 288 h2 { color: #1a5fb4; } 289 289 h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } ··· 301 301 section.wide table { font-size: 18px; } 302 302 section.part { background-color: #1a5fb4 !important; } 303 303 section.part h1, section.part h2, section.part p { color: #fff !important; } 304 - ;background-color:#fff;background-image:none;--marpit-advanced-background-split:38%;" data-marpit-pagination-total="35" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right"> 304 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:38%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right"> 305 305 <h2 id="adoption-en-production">Adoption en production</h2> 306 306 <p>La fédération est désactivée par défaut, et les grandes instances publiques ne<br /> 307 307 l'activent pas.</p> ··· 318 318 section.wide table { font-size: 18px; } 319 319 section.part { background-color: #1a5fb4 !important; } 320 320 section.part h1, section.part h2, section.part p { color: #fff !important; } 321 - " lang="fr-FR" data-marpit-pagination="10" style="" data-marpit-pagination-total="35" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="11" data-paginate="true" data-background-color="#1a5fb4" data-class="lead part" data-color="#ffffff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 321 + " lang="fr-FR" data-marpit-pagination="10" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="11" data-paginate="true" data-background-color="#1a5fb4" data-class="lead part" data-color="#ffffff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 322 322 h1 { color: #1a5fb4; } 323 323 h2 { color: #1a5fb4; } 324 324 h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } ··· 336 336 section.wide table { font-size: 18px; } 337 337 section.part { background-color: #1a5fb4 !important; } 338 338 section.part h1, section.part h2, section.part p { color: #fff !important; } 339 - ;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="35"> 339 + ;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="42"> 340 340 <h1 id="3-autres-solutions">3. Autres solutions</h1> 341 341 <h2 id="des-solutions-ind%C3%A9pendantes-dactivitypub">Des solutions indépendantes d'ActivityPub</h2> 342 342 </section> ··· 358 358 section.wide table { font-size: 18px; } 359 359 section.part { background-color: #1a5fb4 !important; } 360 360 section.part h1, section.part h2, section.part p { color: #fff !important; } 361 - ;background-color:#fff;background-image:none;" data-marpit-pagination-total="35"> 361 + ;background-color:#fff;background-image:none;" data-marpit-pagination-total="42"> 362 362 <h2 id="mise-en-relation-de-deux-forges-par-miroir">Mise en relation de deux forges par miroir</h2> 363 363 <p>Forgejo push ou pull déjà un dépôt vers une autre instance. Le code passe,<br /> 364 364 les tickets non.</p> ··· 387 387 section.wide table { font-size: 18px; } 388 388 section.part { background-color: #1a5fb4 !important; } 389 389 section.part h1, section.part h2, section.part p { color: #fff !important; } 390 - ;background-color:#fff;background-image:none;" data-marpit-pagination-total="35"> 390 + ;background-color:#fff;background-image:none;" data-marpit-pagination-total="42"> 391 391 <h2 id="f3--migrer-un-projet-pas-le-f%C3%A9d%C3%A9rer"><a href="https://code.forgejo.org/f3/f3-documentation">F3</a> : migrer un projet, pas le fédérer</h2> 392 392 <p>F3 est un format d'export qui contient tout un projet : dépôt, tickets,<br /> 393 393 propositions, commentaires, comptes.</p> ··· 411 411 section.wide table { font-size: 18px; } 412 412 section.part { background-color: #1a5fb4 !important; } 413 413 section.part h1, section.part h2, section.part p { color: #fff !important; } 414 - ;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="35" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;img/authint.jpg&quot;);background-size:contain;"></figure></div></section></foreignObject><foreignObject width="67%" height="720"><section id="14" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 414 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;img/authint.jpg&quot;);background-size:contain;"></figure></div></section></foreignObject><foreignObject width="67%" height="720"><section id="14" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 415 415 h1 { color: #1a5fb4; } 416 416 h2 { color: #1a5fb4; } 417 417 h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } ··· 429 429 section.wide table { font-size: 18px; } 430 430 section.part { background-color: #1a5fb4 !important; } 431 431 section.part h1, section.part h2, section.part p { color: #fff !important; } 432 - ;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="35" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right"> 432 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right"> 433 433 <h2 id="authorized-integrations--authentification-entre-serveurs"><a href="https://forgejo.org/docs/latest/user/api/authorized-integrations/">Authorized Integrations</a> : authentification entre serveurs</h2> 434 434 <p>Forgejo v16, juillet 2026 : <strong>Authorized Integrations</strong>. La CI d'une instance<br /> 435 435 peut désormais s'authentifier sur les dépôts d'une autre, sans secret partagé<br /> ··· 446 446 section.wide table { font-size: 18px; } 447 447 section.part { background-color: #1a5fb4 !important; } 448 448 section.part h1, section.part h2, section.part p { color: #fff !important; } 449 - " lang="fr-FR" data-marpit-pagination="14" style="" data-marpit-pagination-total="35" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="15" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 449 + " lang="fr-FR" data-marpit-pagination="14" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="15" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 450 450 h1 { color: #1a5fb4; } 451 451 h2 { color: #1a5fb4; } 452 452 h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } ··· 464 464 section.wide table { font-size: 18px; } 465 465 section.part { background-color: #1a5fb4 !important; } 466 466 section.part h1, section.part h2, section.part p { color: #fff !important; } 467 - ;background-color:#fff;background-image:none;" data-marpit-pagination-total="35"> 467 + ;background-color:#fff;background-image:none;" data-marpit-pagination-total="42"> 468 468 <h2 id="mise-en-place--ex%C3%A9cuteur-et-confiance">Mise en place : exécuteur et confiance</h2> 469 469 <p>Un runner Forgejo (<code>forgejo-runner</code>), en mode host et sans Docker, est<br /> 470 470 enregistré sur f1. Côté f2, une intégration autorisée fait confiance aux JWT<br /> ··· 495 495 section.wide table { font-size: 18px; } 496 496 section.part { background-color: #1a5fb4 !important; } 497 497 section.part h1, section.part h2, section.part p { color: #fff !important; } 498 - ;background-color:#fff;background-image:none;" data-marpit-pagination-total="35"> 498 + ;background-color:#fff;background-image:none;" data-marpit-pagination-total="42"> 499 499 <h2 id="le-ci-de-f1-demande-un-jeton-oidc-%C3%A0-sa-propre-instance">Le CI de f1 demande un jeton OIDC à sa propre instance</h2> 500 500 <pre is="marp-pre" data-auto-scaling="downscale-only"><code>jobs: 501 501 inspect: ··· 528 528 section.wide table { font-size: 18px; } 529 529 section.part { background-color: #1a5fb4 !important; } 530 530 section.part h1, section.part h2, section.part p { color: #fff !important; } 531 - ;background-color:#fff;background-image:none;" data-marpit-pagination-total="35"> 531 + ;background-color:#fff;background-image:none;" data-marpit-pagination-total="42"> 532 532 <h2 id="le-jeton-sert-directement-%C3%A0-sauthentifier-sur-f2">Le jeton sert directement à s'authentifier sur f2</h2> 533 533 <pre is="marp-pre" data-auto-scaling="downscale-only"><code>curl -X POST \ 534 534 -H &quot;Authorization: Bearer $JWT&quot; \ ··· 558 558 section.wide table { font-size: 18px; } 559 559 section.part { background-color: #1a5fb4 !important; } 560 560 section.part h1, section.part h2, section.part p { color: #fff !important; } 561 - ;background-color:#fff;background-image:none;" data-marpit-pagination-total="35"> 561 + ;background-color:#fff;background-image:none;" data-marpit-pagination-total="42"> 562 562 <h2 id="r%C3%A9sultat--trois-actions-inter-instances-r%C3%A9ussies">Résultat : trois actions inter-instances réussies</h2> 563 563 <table> 564 564 <thead> ··· 601 601 section.wide table { font-size: 18px; } 602 602 section.part { background-color: #1a5fb4 !important; } 603 603 section.part h1, section.part h2, section.part p { color: #fff !important; } 604 - ;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="35"> 604 + ;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="42"> 605 605 <h1 id="4-comparaison-avec-dautres-syst%C3%A8mes-d%C3%A9centralis%C3%A9s">4. Comparaison avec d&quot;autres systèmes décentralisés</h1> 606 606 <h2 id="panorama-des-syst%C3%A8mes-compar%C3%A9s">Panorama des systèmes comparés</h2> 607 607 </section> ··· 623 623 section.wide table { font-size: 18px; } 624 624 section.part { background-color: #1a5fb4 !important; } 625 625 section.part h1, section.part h2, section.part p { color: #fff !important; } 626 - ;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="35" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;img/forgefed.jpg&quot;);background-size:contain;"></figure></div></section></foreignObject><foreignObject width="67%" height="720"><section id="20" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 626 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;img/forgefed.jpg&quot;);background-size:contain;"></figure></div></section></foreignObject><foreignObject width="67%" height="720"><section id="20" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 627 627 h1 { color: #1a5fb4; } 628 628 h2 { color: #1a5fb4; } 629 629 h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } ··· 641 641 section.wide table { font-size: 18px; } 642 642 section.part { background-color: #1a5fb4 !important; } 643 643 section.part h1, section.part h2, section.part p { color: #fff !important; } 644 - ;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="35" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right"> 644 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right"> 645 645 <h2 id="forgefed--une-sp%C3%A9cification-distincte-de-forgejo"><a href="https://forgefed.org">ForgeFed</a> : une spécification distincte de Forgejo</h2> 646 646 <p><strong>ForgeFed</strong> est une extension d'ActivityPub pensée pour les forges : dépôts,<br /> 647 647 tickets, propositions, versions.</p> ··· 658 658 section.wide table { font-size: 18px; } 659 659 section.part { background-color: #1a5fb4 !important; } 660 660 section.part h1, section.part h2, section.part p { color: #fff !important; } 661 - " lang="fr-FR" data-marpit-pagination="20" style="" data-marpit-pagination-total="35" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="21" data-paginate="true" data-background-color="#fff" data-class="wide" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 661 + " lang="fr-FR" data-marpit-pagination="20" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="21" data-paginate="true" data-background-color="#fff" data-class="wide" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 662 662 h1 { color: #1a5fb4; } 663 663 h2 { color: #1a5fb4; } 664 664 h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } ··· 676 676 section.wide table { font-size: 18px; } 677 677 section.part { background-color: #1a5fb4 !important; } 678 678 section.part h1, section.part h2, section.part p { color: #fff !important; } 679 - ;background-color:#fff;background-image:none;" data-marpit-pagination-total="35"> 679 + ;background-color:#fff;background-image:none;" data-marpit-pagination-total="42"> 680 680 <h2 id="comparaison-des-mod%C3%A8les-techniques">Comparaison des modèles techniques</h2> 681 681 <table> 682 682 <thead> ··· 746 746 section.wide table { font-size: 18px; } 747 747 section.part { background-color: #1a5fb4 !important; } 748 748 section.part h1, section.part h2, section.part p { color: #fff !important; } 749 - ;background-color:#fff;background-image:none;--marpit-advanced-background-split:26%;" data-marpit-pagination-total="35" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;img/shipyard.jpg&quot;);background-size:contain;"></figure></div></section></foreignObject><foreignObject width="74%" height="720"><section id="22" data-paginate="true" data-background-color="#fff" data-class="wide" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 749 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:26%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;img/shipyard.jpg&quot;);background-size:contain;"></figure></div></section></foreignObject><foreignObject width="74%" height="720"><section id="22" data-paginate="true" data-background-color="#fff" data-class="wide" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 750 750 h1 { color: #1a5fb4; } 751 751 h2 { color: #1a5fb4; } 752 752 h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } ··· 764 764 section.wide table { font-size: 18px; } 765 765 section.part { background-color: #1a5fb4 !important; } 766 766 section.part h1, section.part h2, section.part p { color: #fff !important; } 767 - ;background-color:#fff;background-image:none;--marpit-advanced-background-split:26%;" data-marpit-pagination-total="35" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right"> 767 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:26%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right"> 768 768 <h2 id="comparaison-des-mod%C3%A8les-de-gouvernance">Comparaison des modèles de gouvernance</h2> 769 769 <table> 770 770 <thead> ··· 808 808 section.wide table { font-size: 18px; } 809 809 section.part { background-color: #1a5fb4 !important; } 810 810 section.part h1, section.part h2, section.part p { color: #fff !important; } 811 - " lang="fr-FR" class="wide" data-marpit-pagination="22" style="" data-marpit-pagination-total="35" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 811 + " lang="fr-FR" class="wide" data-marpit-pagination="22" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 812 812 h1 { color: #1a5fb4; } 813 813 h2 { color: #1a5fb4; } 814 814 h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } ··· 826 826 section.wide table { font-size: 18px; } 827 827 section.part { background-color: #1a5fb4 !important; } 828 828 section.part h1, section.part h2, section.part p { color: #fff !important; } 829 - ;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="35" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;img/bridgy.jpg&quot;);background-size:contain;"></figure></div></section></foreignObject><foreignObject width="67%" height="720"><section id="23" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 829 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;img/bridgy.jpg&quot;);background-size:contain;"></figure></div></section></foreignObject><foreignObject width="67%" height="720"><section id="23" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 830 830 h1 { color: #1a5fb4; } 831 831 h2 { color: #1a5fb4; } 832 832 h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } ··· 844 844 section.wide table { font-size: 18px; } 845 845 section.part { background-color: #1a5fb4 !important; } 846 846 section.part h1, section.part h2, section.part p { color: #fff !important; } 847 - ;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="35" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right"> 847 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right"> 848 848 <h2 id="ponts-entre-r%C3%A9seaux-sociaux-d%C3%A9centralis%C3%A9s">Ponts entre réseaux sociaux décentralisés</h2> 849 849 <p><strong><a href="https://fed.brid.gy">Bridgy Fed</a></strong> relie la fédiverse, Bluesky et le web<br /> 850 850 ouvert dans les deux sens. <strong><a href="https://github.com/snarfed/granary">granary</a></strong>, en dessous traduit entre les formats.</p> ··· 859 859 section.wide table { font-size: 18px; } 860 860 section.part { background-color: #1a5fb4 !important; } 861 861 section.part h1, section.part h2, section.part p { color: #fff !important; } 862 - " lang="fr-FR" data-marpit-pagination="23" style="" data-marpit-pagination-total="35" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="24" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 862 + " lang="fr-FR" data-marpit-pagination="23" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="24" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 863 863 h1 { color: #1a5fb4; } 864 864 h2 { color: #1a5fb4; } 865 865 h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } ··· 877 877 section.wide table { font-size: 18px; } 878 878 section.part { background-color: #1a5fb4 !important; } 879 879 section.part h1, section.part h2, section.part p { color: #fff !important; } 880 - ;background-color:#fff;background-image:none;" data-marpit-pagination-total="35"> 880 + ;background-color:#fff;background-image:none;" data-marpit-pagination-total="42"> 881 881 <h2 id="tentatives-dh%C3%A9bergement-de-git-sur-ipfs">Tentatives d'hébergement de git sur IPFS</h2> 882 882 <table> 883 883 <thead> ··· 920 920 section.wide table { font-size: 18px; } 921 921 section.part { background-color: #1a5fb4 !important; } 922 922 section.part h1, section.part h2, section.part p { color: #fff !important; } 923 - ;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="35" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;img/keyoxide.jpg&quot;);background-size:contain;"></figure></div></section></foreignObject><foreignObject width="67%" height="720"><section id="25" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 923 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;img/keyoxide.jpg&quot;);background-size:contain;"></figure></div></section></foreignObject><foreignObject width="67%" height="720"><section id="25" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 924 924 h1 { color: #1a5fb4; } 925 925 h2 { color: #1a5fb4; } 926 926 h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } ··· 938 938 section.wide table { font-size: 18px; } 939 939 section.part { background-color: #1a5fb4 !important; } 940 940 section.part h1, section.part h2, section.part p { color: #fff !important; } 941 - ;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="35" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right"> 941 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right"> 942 942 <h2 id="portabilit%C3%A9-de-lidentit%C3%A9">Portabilité de l'identité</h2> 943 943 <p><strong><a href="https://keyoxide.org">Keyoxide</a></strong> produit des preuves d'identité<br /> 944 944 décentralisées, déjà utilisées par Forgejo pour ses propres contacts.<br /> ··· 956 956 section.wide table { font-size: 18px; } 957 957 section.part { background-color: #1a5fb4 !important; } 958 958 section.part h1, section.part h2, section.part p { color: #fff !important; } 959 - " lang="fr-FR" data-marpit-pagination="25" style="" data-marpit-pagination-total="35" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="26" data-paginate="true" data-background-color="#1a5fb4" data-class="lead part" data-color="#ffffff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 959 + " lang="fr-FR" data-marpit-pagination="25" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="26" data-paginate="true" data-background-color="#1a5fb4" data-class="lead part" data-color="#ffffff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 960 960 h1 { color: #1a5fb4; } 961 961 h2 { color: #1a5fb4; } 962 962 h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } ··· 974 974 section.wide table { font-size: 18px; } 975 975 section.part { background-color: #1a5fb4 !important; } 976 976 section.part h1, section.part h2, section.part p { color: #fff !important; } 977 - ;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="35"> 977 + ;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="42"> 978 978 <h1 id="5-d%C3%A9monstration-pratique">5. Démonstration pratique</h1> 979 979 <h2 id="radicle-test%C3%A9-entre-r1-et-r2cyberwildorg">Radicle testé entre r1 et r2.cyberwild.org</h2> 980 980 </section> ··· 996 996 section.wide table { font-size: 18px; } 997 997 section.part { background-color: #1a5fb4 !important; } 998 998 section.part h1, section.part h2, section.part p { color: #fff !important; } 999 - ;background-color:#fff;background-image:none;" data-marpit-pagination-total="35"> 999 + ;background-color:#fff;background-image:none;" data-marpit-pagination-total="42"> 1000 1000 <h2 id="mise-en-place--identit%C3%A9s-et-connexion-directe-entre-pairs">Mise en place : identités et connexion directe entre pairs</h2> 1001 1001 <p>Radicle 1.10.3 est installé sur les deux nœuds. Pas de serveur central :<br /> 1002 1002 chaque nœud a sa propre identité (clé Ed25519) et écoute en pair-à-pair.<br /> ··· 1027 1027 section.wide table { font-size: 18px; } 1028 1028 section.part { background-color: #1a5fb4 !important; } 1029 1029 section.part h1, section.part h2, section.part p { color: #fff !important; } 1030 - ;background-color:#fff;background-image:none;" data-marpit-pagination-total="35"> 1030 + ;background-color:#fff;background-image:none;" data-marpit-pagination-total="42"> 1031 1031 <h2 id="un-d%C3%A9p%C3%B4t-partag%C3%A9-sans-serveur">Un dépôt partagé, sans serveur</h2> 1032 1032 <pre is="marp-pre" data-auto-scaling="downscale-only"><code># sur r1 : publier un dépôt existant sur le réseau 1033 1033 rad init --name testrepo --default-branch master --public ··· 1057 1057 section.wide table { font-size: 18px; } 1058 1058 section.part { background-color: #1a5fb4 !important; } 1059 1059 section.part h1, section.part h2, section.part p { color: #fff !important; } 1060 - ;background-color:#fff;background-image:none;" data-marpit-pagination-total="35"> 1060 + ;background-color:#fff;background-image:none;" data-marpit-pagination-total="42"> 1061 1061 <h2 id="un-patch-l%C3%A9quivalent-radicle-dune-proposition-de-modification">Un patch (l'équivalent Radicle d'une proposition de modification)</h2> 1062 1062 <pre is="marp-pre" data-auto-scaling="downscale-only"><code># sur r2 : proposer un changement 1063 1063 git checkout -b feature-dummy4 ··· 1089 1089 section.wide table { font-size: 18px; } 1090 1090 section.part { background-color: #1a5fb4 !important; } 1091 1091 section.part h1, section.part h2, section.part p { color: #fff !important; } 1092 - ;background-color:#fff;background-image:none;" data-marpit-pagination-total="35"> 1092 + ;background-color:#fff;background-image:none;" data-marpit-pagination-total="42"> 1093 1093 <h2 id="r%C3%A9sultat--f%C3%A9d%C3%A9ration-pair-%C3%A0-pair-sans-passerelle-http-obligatoire">Résultat : fédération pair-à-pair, sans passerelle HTTP obligatoire</h2> 1094 1094 <table> 1095 1095 <thead> ··· 1137 1137 section.wide table { font-size: 18px; } 1138 1138 section.part { background-color: #1a5fb4 !important; } 1139 1139 section.part h1, section.part h2, section.part p { color: #fff !important; } 1140 - ;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="35"> 1140 + ;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="42"> 1141 1141 <h1 id="6-faire-dialoguer-forgejo-et-radicle">6. Faire dialoguer Forgejo et Radicle</h1> 1142 1142 <h2 id="graft--un-miroir-entre-les-deux-mondes-d%C3%A9j%C3%A0-test%C3%A9s">graft : un miroir entre les deux mondes déjà testés</h2> 1143 1143 </section> ··· 1159 1159 section.wide table { font-size: 18px; } 1160 1160 section.part { background-color: #1a5fb4 !important; } 1161 1161 section.part h1, section.part h2, section.part p { color: #fff !important; } 1162 - ;background-color:#fff;background-image:none;" data-marpit-pagination-total="35"> 1162 + ;background-color:#fff;background-image:none;" data-marpit-pagination-total="42"> 1163 1163 <h2 id="ce-que-fait-graft">Ce que fait <a href="https://github.com/jeanbaptiste/graft">graft</a></h2> 1164 1164 <p>Un démon qui synchronise, entre une instance Forgejo et un nœud Radicle : le code, les tickets, et les propositions de modification dans les deux sens.</p> 1165 1165 <p>Il tourne à intervalle régulier, garde son état dans une base SQLite locale, et<br /> ··· 1186 1186 section.wide table { font-size: 18px; } 1187 1187 section.part { background-color: #1a5fb4 !important; } 1188 1188 section.part h1, section.part h2, section.part p { color: #fff !important; } 1189 - ;background-color:#fff;background-image:none;" data-marpit-pagination-total="35"> 1189 + ;background-color:#fff;background-image:none;" data-marpit-pagination-total="42"> 1190 1190 <h2 id="relier-f1-et-r1">Relier f1 et r1</h2> 1191 1191 <pre is="marp-pre" data-auto-scaling="downscale-only"><code class="language-yaml"><span class="hljs-attr">sync_interval:</span> <span class="hljs-string">5m</span> 1192 1192 <span class="hljs-attr">state_db:</span> <span class="hljs-string">/var/lib/graft/state.db</span> ··· 1228 1228 section.wide table { font-size: 18px; } 1229 1229 section.part { background-color: #1a5fb4 !important; } 1230 1230 section.part h1, section.part h2, section.part p { color: #fff !important; } 1231 - ;background-color:#fff;background-image:none;" data-marpit-pagination-total="35"> 1231 + ;background-color:#fff;background-image:none;" data-marpit-pagination-total="42"> 1232 1232 <h2 id="ce-qui-se-synchronise-et-limites-actuelles">Ce qui se synchronise et limites actuelles</h2> 1233 1233 <ul> 1234 1234 <li><strong>Code</strong> : la branche par défaut, uniquement en avance rapide.</li> ··· 1243 1243 <p>Ce que ça ne résout pas : l'identité reste double, un compte Forgejo d'un<br /> 1244 1244 côté, une clé Radicle de l'autre.</p> 1245 1245 </section> 1246 + </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="35" data-paginate="true" data-background-color="#1a5fb4" data-class="lead part" data-color="#ffffff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 1247 + h1 { color: #1a5fb4; } 1248 + h2 { color: #1a5fb4; } 1249 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1250 + table { font-size: 21px; } 1251 + code { font-size: 18px; } 1252 + section.wide table { font-size: 18px; } 1253 + section.part { background-color: #1a5fb4 !important; } 1254 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1255 + " lang="fr-FR" class="lead part" data-marpit-pagination="35" style="--paginate:true;--background-color:#1a5fb4;--class:lead part;--color:#ffffff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; } 1256 + h1 { color: #1a5fb4; } 1257 + h2 { color: #1a5fb4; } 1258 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1259 + table { font-size: 21px; } 1260 + code { font-size: 18px; } 1261 + section.wide table { font-size: 18px; } 1262 + section.part { background-color: #1a5fb4 !important; } 1263 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1264 + ;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="42"> 1265 + <h1 id="7-fonctions-sociales-de-graft">7. Fonctions sociales de graft</h1> 1266 + <h2 id="un-tableau-de-bord-et-des-ponts-vers-discourse-zulip-tangled">Un tableau de bord, et des ponts vers Discourse, Zulip, Tangled</h2> 1267 + </section> 1246 1268 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 1247 1269 h1 { color: #1a5fb4; } 1248 1270 h2 { color: #1a5fb4; } ··· 1252 1274 section.wide table { font-size: 18px; } 1253 1275 section.part { background-color: #1a5fb4 !important; } 1254 1276 section.part h1, section.part h2, section.part p { color: #fff !important; } 1255 - " lang="fr-FR" data-marpit-pagination="35" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; } 1277 + " lang="fr-FR" data-marpit-pagination="36" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; } 1256 1278 h1 { color: #1a5fb4; } 1257 1279 h2 { color: #1a5fb4; } 1258 1280 h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } ··· 1261 1283 section.wide table { font-size: 18px; } 1262 1284 section.part { background-color: #1a5fb4 !important; } 1263 1285 section.part h1, section.part h2, section.part p { color: #fff !important; } 1264 - ;background-color:#fff;background-image:none;--marpit-advanced-background-split:28%;" data-marpit-pagination-total="35" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;img/radicle.jpg&quot;);background-size:contain;"></figure></div></section></foreignObject><foreignObject width="72%" height="720"><section id="35" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 1286 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:40%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;img/graft_dashboard.png&quot;);background-size:contain;"></figure></div></section></foreignObject><foreignObject width="60%" height="720"><section id="36" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 1265 1287 h1 { color: #1a5fb4; } 1266 1288 h2 { color: #1a5fb4; } 1267 1289 h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } ··· 1270 1292 section.wide table { font-size: 18px; } 1271 1293 section.part { background-color: #1a5fb4 !important; } 1272 1294 section.part h1, section.part h2, section.part p { color: #fff !important; } 1273 - " lang="fr-FR" data-marpit-pagination="35" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; } 1295 + " lang="fr-FR" data-marpit-pagination="36" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; } 1274 1296 h1 { color: #1a5fb4; } 1275 1297 h2 { color: #1a5fb4; } 1276 1298 h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } ··· 1279 1301 section.wide table { font-size: 18px; } 1280 1302 section.part { background-color: #1a5fb4 !important; } 1281 1303 section.part h1, section.part h2, section.part p { color: #fff !important; } 1282 - ;background-color:#fff;background-image:none;--marpit-advanced-background-split:28%;" data-marpit-pagination-total="35" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right"> 1304 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:40%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right"> 1305 + <h2 id="le-tableau-de-bord-graft">Le tableau de bord graft</h2> 1306 + <p>Une page HTML unique, régénérée à chaque cycle de synchronisation : la liste<br /> 1307 + des dépôts, leur nombre de miroirs, et un flux d'activité récente (les 10<br /> 1308 + derniers commits, tickets, patches et commentaires).</p> 1309 + <p>Volontairement plat : pas de base de données à interroger, pas<br /> 1310 + d'authentification, juste un fichier HTML servi par le démon lui-même.</p> 1311 + </section> 1312 + </foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 1313 + h1 { color: #1a5fb4; } 1314 + h2 { color: #1a5fb4; } 1315 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1316 + table { font-size: 21px; } 1317 + code { font-size: 18px; } 1318 + section.wide table { font-size: 18px; } 1319 + section.part { background-color: #1a5fb4 !important; } 1320 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1321 + " lang="fr-FR" data-marpit-pagination="36" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 1322 + h1 { color: #1a5fb4; } 1323 + h2 { color: #1a5fb4; } 1324 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1325 + table { font-size: 21px; } 1326 + code { font-size: 18px; } 1327 + section.wide table { font-size: 18px; } 1328 + section.part { background-color: #1a5fb4 !important; } 1329 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1330 + " lang="fr-FR" data-marpit-pagination="37" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; } 1331 + h1 { color: #1a5fb4; } 1332 + h2 { color: #1a5fb4; } 1333 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1334 + table { font-size: 21px; } 1335 + code { font-size: 18px; } 1336 + section.wide table { font-size: 18px; } 1337 + section.part { background-color: #1a5fb4 !important; } 1338 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1339 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:38%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;img/graft_social.png&quot;);background-size:contain;"></figure></div></section></foreignObject><foreignObject width="62%" height="720"><section id="37" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 1340 + h1 { color: #1a5fb4; } 1341 + h2 { color: #1a5fb4; } 1342 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1343 + table { font-size: 21px; } 1344 + code { font-size: 18px; } 1345 + section.wide table { font-size: 18px; } 1346 + section.part { background-color: #1a5fb4 !important; } 1347 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1348 + " lang="fr-FR" data-marpit-pagination="37" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; } 1349 + h1 { color: #1a5fb4; } 1350 + h2 { color: #1a5fb4; } 1351 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1352 + table { font-size: 21px; } 1353 + code { font-size: 18px; } 1354 + section.wide table { font-size: 18px; } 1355 + section.part { background-color: #1a5fb4 !important; } 1356 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1357 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:38%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right"> 1358 + <h2 id="une-identit%C3%A9-f%C3%A9diverse-par-d%C3%A9p%C3%B4t">Une identité fédiverse par dépôt</h2> 1359 + <p>Chaque série synchronisée (<code>constitution</code>, <code>federation-x</code>, <code>graft-source</code>...)<br /> 1360 + obtient sa propre identité ActivityPub : <code>@série@graft.cyberwild.org</code>, avec<br /> 1361 + WebFinger, Actor et Outbox interrogeables.</p> 1362 + <p>Une entrée AT Proto / Bluesky par série existe aussi dans le modèle, prête à<br /> 1363 + être activée dès qu'une clé d'app y est associée — « not configured » pour<br /> 1364 + l'instant.</p> 1365 + </section> 1366 + </foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 1367 + h1 { color: #1a5fb4; } 1368 + h2 { color: #1a5fb4; } 1369 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1370 + table { font-size: 21px; } 1371 + code { font-size: 18px; } 1372 + section.wide table { font-size: 18px; } 1373 + section.part { background-color: #1a5fb4 !important; } 1374 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1375 + " lang="fr-FR" data-marpit-pagination="37" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="38" data-paginate="true" data-background-color="#1a5fb4" data-class="lead part" data-color="#ffffff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 1376 + h1 { color: #1a5fb4; } 1377 + h2 { color: #1a5fb4; } 1378 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1379 + table { font-size: 21px; } 1380 + code { font-size: 18px; } 1381 + section.wide table { font-size: 18px; } 1382 + section.part { background-color: #1a5fb4 !important; } 1383 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1384 + " lang="fr-FR" class="lead part" data-marpit-pagination="38" style="--paginate:true;--background-color:#1a5fb4;--class:lead part;--color:#ffffff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; } 1385 + h1 { color: #1a5fb4; } 1386 + h2 { color: #1a5fb4; } 1387 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1388 + table { font-size: 21px; } 1389 + code { font-size: 18px; } 1390 + section.wide table { font-size: 18px; } 1391 + section.part { background-color: #1a5fb4 !important; } 1392 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1393 + ;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="42"> 1394 + <h1 id="ponts-vers-discourse-zulip-et-tangled">Ponts vers Discourse, Zulip et Tangled</h1> 1395 + <h2 id="faire-vivre-lactivit%C3%A9-de-graft-ailleurs-que-sur-une-forge">Faire vivre l'activité de graft ailleurs que sur une forge</h2> 1396 + </section> 1397 + </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 1398 + h1 { color: #1a5fb4; } 1399 + h2 { color: #1a5fb4; } 1400 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1401 + table { font-size: 21px; } 1402 + code { font-size: 18px; } 1403 + section.wide table { font-size: 18px; } 1404 + section.part { background-color: #1a5fb4 !important; } 1405 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1406 + " lang="fr-FR" data-marpit-pagination="39" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; } 1407 + h1 { color: #1a5fb4; } 1408 + h2 { color: #1a5fb4; } 1409 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1410 + table { font-size: 21px; } 1411 + code { font-size: 18px; } 1412 + section.wide table { font-size: 18px; } 1413 + section.part { background-color: #1a5fb4 !important; } 1414 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1415 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:35%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;img/discourse_bridge.png&quot;);background-size:contain;"></figure></div></section></foreignObject><foreignObject width="65%" height="720"><section id="39" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 1416 + h1 { color: #1a5fb4; } 1417 + h2 { color: #1a5fb4; } 1418 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1419 + table { font-size: 21px; } 1420 + code { font-size: 18px; } 1421 + section.wide table { font-size: 18px; } 1422 + section.part { background-color: #1a5fb4 !important; } 1423 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1424 + " lang="fr-FR" data-marpit-pagination="39" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; } 1425 + h1 { color: #1a5fb4; } 1426 + h2 { color: #1a5fb4; } 1427 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1428 + table { font-size: 21px; } 1429 + code { font-size: 18px; } 1430 + section.wide table { font-size: 18px; } 1431 + section.part { background-color: #1a5fb4 !important; } 1432 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1433 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:35%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right"> 1434 + <h2 id="pont-vers-discourse">Pont vers Discourse</h2> 1435 + <p>Un démon séparé (<code>graft-discourse</code>), branché sur le flux ActivityPub de<br /> 1436 + graft : chaque série synchronisée devient une catégorie Discourse<br /> 1437 + (« Federated Repos »), chaque ticket ou patch un sujet.</p> 1438 + <p>Les réponses sur Discourse repartent en commentaire vers le ticket<br /> 1439 + Forgejo/Radicle d'origine, marquées « via Fediverse ». Le pont ignore ses<br /> 1440 + propres messages pour ne pas boucler.</p> 1441 + </section> 1442 + </foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 1443 + h1 { color: #1a5fb4; } 1444 + h2 { color: #1a5fb4; } 1445 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1446 + table { font-size: 21px; } 1447 + code { font-size: 18px; } 1448 + section.wide table { font-size: 18px; } 1449 + section.part { background-color: #1a5fb4 !important; } 1450 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1451 + " lang="fr-FR" data-marpit-pagination="39" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 1452 + h1 { color: #1a5fb4; } 1453 + h2 { color: #1a5fb4; } 1454 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1455 + table { font-size: 21px; } 1456 + code { font-size: 18px; } 1457 + section.wide table { font-size: 18px; } 1458 + section.part { background-color: #1a5fb4 !important; } 1459 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1460 + " lang="fr-FR" data-marpit-pagination="40" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; } 1461 + h1 { color: #1a5fb4; } 1462 + h2 { color: #1a5fb4; } 1463 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1464 + table { font-size: 21px; } 1465 + code { font-size: 18px; } 1466 + section.wide table { font-size: 18px; } 1467 + section.part { background-color: #1a5fb4 !important; } 1468 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1469 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:35%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;img/zulip_bridge.png&quot;);background-size:contain;"></figure></div></section></foreignObject><foreignObject width="65%" height="720"><section id="40" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 1470 + h1 { color: #1a5fb4; } 1471 + h2 { color: #1a5fb4; } 1472 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1473 + table { font-size: 21px; } 1474 + code { font-size: 18px; } 1475 + section.wide table { font-size: 18px; } 1476 + section.part { background-color: #1a5fb4 !important; } 1477 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1478 + " lang="fr-FR" data-marpit-pagination="40" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; } 1479 + h1 { color: #1a5fb4; } 1480 + h2 { color: #1a5fb4; } 1481 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1482 + table { font-size: 21px; } 1483 + code { font-size: 18px; } 1484 + section.wide table { font-size: 18px; } 1485 + section.part { background-color: #1a5fb4 !important; } 1486 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1487 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:35%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right"> 1488 + <h2 id="pont-vers-zulip">Pont vers Zulip</h2> 1489 + <p>Même principe, décliné pour Zulip (<code>graft-zulip</code>) : un canal par série<br /> 1490 + (ici <code>constitution</code>), un fil (<em>topic</em>) par ticket. Zulip distingue le canal<br /> 1491 + et le sujet là où Discourse n'a qu'une catégorie et un sujet — les deux<br /> 1492 + démons partagent l'essentiel de leur code, seule la couche protocole change.</p> 1493 + </section> 1494 + </foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 1495 + h1 { color: #1a5fb4; } 1496 + h2 { color: #1a5fb4; } 1497 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1498 + table { font-size: 21px; } 1499 + code { font-size: 18px; } 1500 + section.wide table { font-size: 18px; } 1501 + section.part { background-color: #1a5fb4 !important; } 1502 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1503 + " lang="fr-FR" data-marpit-pagination="40" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 1504 + h1 { color: #1a5fb4; } 1505 + h2 { color: #1a5fb4; } 1506 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1507 + table { font-size: 21px; } 1508 + code { font-size: 18px; } 1509 + section.wide table { font-size: 18px; } 1510 + section.part { background-color: #1a5fb4 !important; } 1511 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1512 + " lang="fr-FR" data-marpit-pagination="41" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; } 1513 + h1 { color: #1a5fb4; } 1514 + h2 { color: #1a5fb4; } 1515 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1516 + table { font-size: 21px; } 1517 + code { font-size: 18px; } 1518 + section.wide table { font-size: 18px; } 1519 + section.part { background-color: #1a5fb4 !important; } 1520 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1521 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:35%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;img/tangled_bridge.png&quot;);background-size:contain;"></figure></div></section></foreignObject><foreignObject width="65%" height="720"><section id="41" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 1522 + h1 { color: #1a5fb4; } 1523 + h2 { color: #1a5fb4; } 1524 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1525 + table { font-size: 21px; } 1526 + code { font-size: 18px; } 1527 + section.wide table { font-size: 18px; } 1528 + section.part { background-color: #1a5fb4 !important; } 1529 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1530 + " lang="fr-FR" data-marpit-pagination="41" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; } 1531 + h1 { color: #1a5fb4; } 1532 + h2 { color: #1a5fb4; } 1533 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1534 + table { font-size: 21px; } 1535 + code { font-size: 18px; } 1536 + section.wide table { font-size: 18px; } 1537 + section.part { background-color: #1a5fb4 !important; } 1538 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1539 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:35%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right"> 1540 + <h2 id="vers-tangled-et-at-proto">Vers Tangled et AT Proto</h2> 1541 + <p>Tangled (une forge Git construite sur AT Proto/Bluesky) demande une identité<br /> 1542 + signée par un PDS pour enregistrer un serveur Git (<em>knot</em>). Un PDS a été<br /> 1543 + installé pour produire ce DID, <code>tangled.cyberwild.org</code> a été enregistré et<br /> 1544 + vérifié : la prochaine étape naturelle est d'y raccrocher les mêmes séries<br /> 1545 + que sur Forgejo et Radicle.</p> 1546 + </section> 1547 + </foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 1548 + h1 { color: #1a5fb4; } 1549 + h2 { color: #1a5fb4; } 1550 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1551 + table { font-size: 21px; } 1552 + code { font-size: 18px; } 1553 + section.wide table { font-size: 18px; } 1554 + section.part { background-color: #1a5fb4 !important; } 1555 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1556 + " lang="fr-FR" data-marpit-pagination="41" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 1557 + h1 { color: #1a5fb4; } 1558 + h2 { color: #1a5fb4; } 1559 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1560 + table { font-size: 21px; } 1561 + code { font-size: 18px; } 1562 + section.wide table { font-size: 18px; } 1563 + section.part { background-color: #1a5fb4 !important; } 1564 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1565 + " lang="fr-FR" data-marpit-pagination="42" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; } 1566 + h1 { color: #1a5fb4; } 1567 + h2 { color: #1a5fb4; } 1568 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1569 + table { font-size: 21px; } 1570 + code { font-size: 18px; } 1571 + section.wide table { font-size: 18px; } 1572 + section.part { background-color: #1a5fb4 !important; } 1573 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1574 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:28%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;img/radicle.jpg&quot;);background-size:contain;"></figure></div></section></foreignObject><foreignObject width="72%" height="720"><section id="42" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; } 1575 + h1 { color: #1a5fb4; } 1576 + h2 { color: #1a5fb4; } 1577 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1578 + table { font-size: 21px; } 1579 + code { font-size: 18px; } 1580 + section.wide table { font-size: 18px; } 1581 + section.part { background-color: #1a5fb4 !important; } 1582 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1583 + " lang="fr-FR" data-marpit-pagination="42" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; } 1584 + h1 { color: #1a5fb4; } 1585 + h2 { color: #1a5fb4; } 1586 + h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; } 1587 + table { font-size: 21px; } 1588 + code { font-size: 18px; } 1589 + section.wide table { font-size: 18px; } 1590 + section.part { background-color: #1a5fb4 !important; } 1591 + section.part h1, section.part h2, section.part p { color: #fff !important; } 1592 + ;background-color:#fff;background-image:none;--marpit-advanced-background-split:28%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right"> 1283 1593 <h2 id="synth%C3%A8se-et-questions">Synthèse et questions</h2> 1284 1594 <p><strong>Discussion :</strong></p> 1285 1595 <ul> ··· 1299 1609 section.wide table { font-size: 18px; } 1300 1610 section.part { background-color: #1a5fb4 !important; } 1301 1611 section.part h1, section.part h2, section.part p { color: #fff !important; } 1302 - " lang="fr-FR" data-marpit-pagination="35" style="" data-marpit-pagination-total="35" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg></div><script>/*!! License: https://unpkg.com/@marp-team/marp-cli@4.5.1/lib/bespoke.js.LICENSE.txt */ 1612 + " lang="fr-FR" data-marpit-pagination="42" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg></div><script>/*!! License: https://unpkg.com/@marp-team/marp-cli@4.5.1/lib/bespoke.js.LICENSE.txt */ 1303 1613 !function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var t,n,r=(n||(n=1,t={from:function(e,t){var n,r=1===(e.parent||e).nodeType?e.parent||e:document.querySelector(e.parent||e),o=[].filter.call("string"==typeof e.slides?r.querySelectorAll(e.slides):e.slides||r.children,function(e){return"SCRIPT"!==e.nodeName}),i={},a=function(e,t){return(t=t||{}).index=o.indexOf(e),t.slide=e,t},s=function(e,t){i[e]=(i[e]||[]).filter(function(e){return e!==t})},l=function(e,t){return(i[e]||[]).reduce(function(e,n){return e&&!1!==n(t)},!0)},c=function(e,t){o[e]&&(n&&l("deactivate",a(n,t)),n=o[e],l("activate",a(n,t)))},d=function(e,t){var r=o.indexOf(n)+e;l(e>0?"next":"prev",a(n,t))&&c(r,t)},u={off:s,on:function(e,t){return(i[e]||(i[e]=[])).push(t),s.bind(null,e,t)},fire:l,slide:function(e,t){if(!arguments.length)return o.indexOf(n);l("slide",a(o[e],t))&&c(e,t)},next:d.bind(null,1),prev:d.bind(null,-1),parent:r,slides:o,destroy:function(e){l("destroy",a(n,e)),i={}}};return(t||[]).forEach(function(e){e(u)}),n||c(0),u}}),t),o=e(r);const i=document.body,a=(...e)=>history.replaceState(...e),s="",l="presenter",c="next",d="overview",u=["",l,d,c],f="bespoke-marp-",m=`data-${f}`,g=(e,{protocol:t,host:n,pathname:r,hash:o}=location)=>{const i=e.toString();return`${t}//${n}${r}${i?"?":""}${i}${o}`},p=()=>i.dataset.bespokeView,v=e=>new URLSearchParams(location.search).get(e),h=(e,t={})=>{const n={location,setter:a,...t},r=new URLSearchParams(n.location.search);for(const t of Object.keys(e)){const n=e[t];"string"==typeof n?r.set(t,n):r.delete(t)}try{n.setter({...window.history.state??{}},"",g(r,n.location))}catch(e){console.error(e)}},w=(()=>{const e="bespoke-marp";try{return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch{return!1}})(),y=e=>{try{return localStorage.getItem(e)}catch{return null}},b=(e,t)=>{try{return localStorage.setItem(e,t),!0}catch{return!1}},k=e=>{try{return localStorage.removeItem(e),!0}catch{return!1}},x=(e,t)=>{const n="aria-hidden";t?e.setAttribute(n,"true"):e.removeAttribute(n)},E=e=>{e.parent.classList.add(`${f}parent`),e.slides.forEach(e=>e.classList.add(`${f}slide`)),e.on("activate",t=>{const n=`${f}active`,r=t.slide,o=r.classList,i=!o.contains(n);if(e.slides.forEach(e=>{e.classList.remove(n),x(e,!0)}),o.add(n),x(r,!1),i){const e=`${n}-ready`;o.add(e),document.body.clientHeight,o.remove(e)}})},$=e=>{let t=0,n=0;Object.defineProperty(e,"fragments",{enumerable:!0,value:e.slides.map(e=>[null,...e.querySelectorAll("[data-marpit-fragment]")])});const r=r=>void 0!==e.fragments[t][n+r],o=(r,o)=>{t=r,n=o,e.fragments.forEach((e,t)=>{e.forEach((e,n)=>{if(null==e)return;const i=t<r||t===r&&n<=o;e.setAttribute(`${m}fragment`,(i?"":"in")+"active");const a=`${m}current-fragment`;t===r&&n===o?e.setAttribute(a,"current"):e.removeAttribute(a)})}),e.fragmentIndex=o;const i={slide:e.slides[r],index:r,fragments:e.fragments[r],fragmentIndex:o};e.fire("fragment",i)};e.on("next",({fragment:i=!0})=>{if(i){if(r(1))return o(t,n+1),!1;const i=t+1;e.fragments[i]&&o(i,0)}else{const r=e.fragments[t].length;if(n+1<r)return o(t,r-1),!1;const i=e.fragments[t+1];i&&o(t+1,i.length-1)}}),e.on("prev",({fragment:i=!0})=>{if(r(-1)&&i)return o(t,n-1),!1;const a=t-1;e.fragments[a]&&o(a,e.fragments[a].length-1)}),e.on("slide",({index:t,fragment:n})=>{let r=0;if(void 0!==n){const o=e.fragments[t];if(o){const{length:e}=o;r=-1===n?e-1:Math.min(Math.max(n,0),e-1)}}o(t,r)}),o(0,0)},L=document,S=()=>!(!L.fullscreenEnabled&&!L.webkitFullscreenEnabled),P=()=>!(!L.fullscreenElement&&!L.webkitFullscreenElement),_=e=>{e.fullscreen=()=>{S()&&(async()=>{P()?(L.exitFullscreen||L.webkitExitFullscreen)?.call(L):((e=L.body)=>{(e.requestFullscreen||e.webkitRequestFullscreen)?.call(e)})()})()},document.addEventListener("keydown",t=>{"f"!==t.key&&"F11"!==t.key||t.altKey||t.ctrlKey||t.metaKey||!S()||(e.fullscreen(),t.preventDefault())})},O=`${f}inactive`,T=(e=2e3)=>({parent:t,fire:n})=>{const r=t.classList,o=e=>n(`marp-${e?"":"in"}active`);let i;const a=()=>{i&&clearTimeout(i),i=setTimeout(()=>{r.add(O),o()},e),r.contains(O)&&(r.remove(O),o(!0))};for(const e of["mousedown","mousemove","touchend"])document.addEventListener(e,a);setTimeout(a,0)},I=["AUDIO","BUTTON","INPUT","SELECT","TEXTAREA","VIDEO"],M=e=>{e.parent.addEventListener("keydown",e=>{if(!e.target)return;const t=e.target;(I.includes(t.nodeName)||"true"===t.contentEditable)&&e.stopPropagation()})},A=e=>{window.addEventListener("load",()=>{for(const t of e.slides){const e=t.querySelector("marp-auto-scaling, [data-auto-scaling], [data-marp-fitting]");t.setAttribute(`${m}load`,e?"":"hideable")}})},C=({interval:e=250}={})=>t=>{document.addEventListener("keydown",e=>{if(" "===e.key&&e.shiftKey)t.prev();else if("ArrowLeft"===e.key||"ArrowUp"===e.key||"PageUp"===e.key)t.prev({fragment:!e.shiftKey});else if(" "!==e.key||e.shiftKey)if("ArrowRight"===e.key||"ArrowDown"===e.key||"PageDown"===e.key)t.next({fragment:!e.shiftKey});else if("End"===e.key)t.slide(t.slides.length-1,{fragment:-1});else{if("Home"!==e.key)return;t.slide(0)}else t.next();e.preventDefault()});let n,r,o=0;t.parent.addEventListener("wheel",i=>{let a=!1;const s=(e,t)=>{e&&(a=a||((e,t)=>((e,t)=>{const n="X"===t?"Width":"Height";return e[`client${n}`]<e[`scroll${n}`]})(e,t)&&((e,t)=>{const{overflow:n}=e,r=e[`overflow${t}`];return"auto"===n||"scroll"===n||"auto"===r||"scroll"===r})(getComputedStyle(e),t))(e,t)),e?.parentElement&&s(e.parentElement,t)};if(0!==i.deltaX&&s(i.target,"X"),0!==i.deltaY&&s(i.target,"Y"),a)return;i.preventDefault();const l=Math.sqrt(i.deltaX**2+i.deltaY**2);if(void 0!==i.wheelDelta){if(void 0===i.webkitForce&&Math.abs(i.wheelDelta)<40)return;if(i.deltaMode===i.DOM_DELTA_PIXEL&&l<4)return}else if(i.deltaMode===i.DOM_DELTA_PIXEL&&l<12)return;r&&clearTimeout(r),r=setTimeout(()=>{n=0},e);const c=Date.now()-o<e,d=l<=n;if(n=l,c||d)return;let u;(i.deltaX>0||i.deltaY>0)&&(u="next"),(i.deltaX<0||i.deltaY<0)&&(u="prev"),u&&(t[u](),o=Date.now())})},D=(e=`.${f}osc`)=>{const t=document.querySelector(e);if(!t)return()=>{};const n=(e,n)=>{t.querySelectorAll(`[${m}osc=${JSON.stringify(e)}]`).forEach(n)};if(S()||n("fullscreen",e=>e.style.display="none"),!w){const e=(e,t)=>{e.disabled=!0,e.title=`${t} is disabled due to restricted localStorage.`};n("presenter",t=>e(t,"Presenter view")),n("overview",t=>e(t,"Overview view"))}return e=>{t.addEventListener("click",t=>{if(t.target instanceof HTMLElement){const{bespokeMarpOsc:n}=t.target.dataset;n&&t.target.blur();const r={fragment:!t.shiftKey};"next"===n?e.next(r):"prev"===n?e.prev(r):"fullscreen"===n?e?.fullscreen():"presenter"===n?e.openPresenterView():"overview"===n&&e.toggleOverviewView()}}),e.parent.appendChild(t),e.on("activate",({index:t})=>{n("page",n=>n.textContent=`Page ${t+1} of ${e.slides.length}`)}),e.on("fragment",({index:t,fragments:r,fragmentIndex:o})=>{n("prev",e=>e.disabled=0===t&&0===o),n("next",n=>n.disabled=t===e.slides.length-1&&o===r.length-1)}),e.on("marp-active",()=>x(t,!1)),e.on("marp-inactive",()=>x(t,!0)),S()&&(e=>{for(const t of["","webkit"])L.addEventListener(t+"fullscreenchange",e)})(()=>n("fullscreen",e=>e.classList.toggle("exit",S()&&P())))}},N=e=>{if(e.syncKey&&"string"==typeof e.syncKey)return!0;throw new Error("The current instance of Bespoke.js is incompatible with Marp bespoke sync plugin.")},B=(e={})=>{const t=e.key||window.history.state?.marpBespokeSyncKey||Math.random().toString(36).slice(2),n=`bespoke-marp-sync-${t}`;var r;r={marpBespokeSyncKey:t},h({},{setter:(e,...t)=>a({...e,...r},...t)});const o=()=>{const e=y(n);return e?JSON.parse(e):Object.create(null)},i=e=>{const t=o(),r={...t,...e(t)};return b(n,JSON.stringify(r)),r},s=()=>{window.removeEventListener("pageshow",s),i(e=>({reference:(e.reference||0)+1}))};return e=>{s(),Object.defineProperty(e,"syncKey",{value:t,enumerable:!0});let r=!0;setTimeout(()=>{e.on("fragment",e=>{r&&i(()=>({index:e.index,fragmentIndex:e.fragmentIndex}))})},0),window.addEventListener("storage",t=>{if(t.key===n&&t.oldValue&&t.newValue){const n=JSON.parse(t.oldValue),o=JSON.parse(t.newValue);if(n.index!==o.index||n.fragmentIndex!==o.fragmentIndex)try{r=!1,e.slide(o.index,{fragment:o.fragmentIndex,forSync:!0})}finally{r=!0}}});const a=()=>{const{reference:e}=o();void 0===e||e<=1?k(n):i(()=>({reference:e-1}))};window.addEventListener("pagehide",e=>{e.persisted&&window.addEventListener("pageshow",s),a()}),e.on("destroy",a)}},K=e=>{w&&document.addEventListener("keydown",t=>{("o"!==t.key||t.altKey||t.ctrlKey||t.metaKey)&&"Escape"!==t.key||(t.preventDefault(),e())})};let q=null;const V=({closeOnSelect:e=!0}={})=>t=>{N(t);const n=n=>{const r=(()=>{if(!q||!q.isConnected){q=document.createElement("div"),q.className=`${f}overview`,q.inert=!0;const n=document.createElement("iframe");n.src=(()=>{const n=new URLSearchParams(location.search);return n.set("view","overview"),n.set("sync",t.syncKey),e&&n.set("closeOnSelect","1"),g(n)})(),q.append(n),document.body.append(q)}return q})(),o=n??!r.dataset.open;setTimeout(()=>{if(r.dataset.open=o?"1":"",r.inert=!o,t.skipTransition=o,o){const e=r.querySelector("iframe");try{e?.contentWindow?.focus()}catch{e?.focus()}}else window.focus()},0)};Object.defineProperties(t,{toggleOverviewView:{enumerable:!0,value:n}}),window.addEventListener("message",e=>{e.origin===window.origin&&"closeOverview"===e.data&&n(!1)}),K(n)},j=e=>{const{title:t}=document;document.title="[Overview]"+(t?` - ${t}`:"");const n=!!v("closeOnSelect"),r=()=>{window.parent.postMessage("closeOverview","null"===window.origin?"*":window.origin)};if(e.slides.forEach((t,o)=>{t.tabIndex=0;const i=()=>{e.slide(o,{fragment:-1}),n&&r()};t.addEventListener("click",i),t.addEventListener("keydown",e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),i())})}),window.addEventListener("keydown",t=>{const n=e.slide(),r=t=>{const r=t=>{const n=e.slides[t].getBoundingClientRect();return[Math.round((n.left+n.right)/2),Math.round((n.top+n.bottom)/2)]};let o=null,i=n;do{const e=r(i);if(o){if(Math.abs(e[0]-o[0])<2)return i}else o=e;i+=t}while(i>=0&&i<e.slides.length);return n};if("ArrowLeft"===t.key)e.slide(Math.max(n-1,0),{fragment:-1});else if("ArrowRight"===t.key)e.slide(Math.min(n+1,e.slides.length-1),{fragment:-1});else if("ArrowUp"===t.key)e.slide(r(-1),{fragment:-1});else if("ArrowDown"===t.key)e.slide(r(1),{fragment:-1});else if("End"===t.key)e.slide(e.slides.length-1,{fragment:-1});else{if("Home"!==t.key)return;e.slide(0,{fragment:-1})}t.preventDefault();const o=e.slide();e.slides[o]?.focus?.(),e.slides[o]?.scrollIntoView?.({behavior:"smooth",block:"nearest"})}),e.on("slide",({index:t})=>{e.slides[t]?.scrollIntoView?.({behavior:"smooth",block:"nearest"})}),window.parent!==window){K(r);const e=document.createElement("header");e.className=`${f}overview-header`;const t=document.createElement("button");t.className=`${f}overview-close`,t.type="button",t.title="Close overview",t.textContent=t.title,t.addEventListener("click",r),e.append(t),document.body.prepend(e)}},F=()=>{const e=p();return{[s]:V(),[l]:V({closeOnSelect:!1}),[d]:j}[e]},U=e=>{window.addEventListener("message",t=>{if(t.origin!==window.origin)return;const[n,r]=t.data.split(":");if("navigate"===n){const[t,n]=r.split(",");let o=Number.parseInt(t,10),i=Number.parseInt(n,10)+1;i>=e.fragments[o].length&&(o+=1,i=0),e.slide(o,{fragment:i})}})};var R,X,H,W,J,Y,z,G={exports:{}},Q=(R||(R=1,G.exports=(X=["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"],H=function(e){return String(e).replace(/[&<>"']/g,function(e){return"&"+W[e]+";"})},W={"&":"amp","<":"lt",">":"gt",'"':"quot","'":"apos"},J="dangerouslySetInnerHTML",Y={className:"class",htmlFor:"for"},z={},function(e,t){var n=[],r="";t=t||{};for(var o=arguments.length;o-- >2;)n.push(arguments[o]);if("function"==typeof e)return t.children=n.reverse(),e(t);if(e){if(r+="<"+e,t)for(var i in t)!1!==t[i]&&null!=t[i]&&i!==J&&(r+=" "+(Y[i]?Y[i]:H(i))+'="'+H(t[i])+'"');r+=">"}if(-1===X.indexOf(e)){if(t[J])r+=t[J].__html;else for(;n.length;){var a=n.pop();if(a)if(a.pop)for(var s=a.length;s--;)n.push(a[s]);else r+=!0===z[a]?a:H(a)}r+=e?"</"+e+">":""}return z[r]=!0,r})),G.exports),Z=e(Q);const ee=({children:e})=>Z(null,null,...e),te=`${f}presenter-`,ne={container:`${te}container`,dragbar:`${te}dragbar-container`,next:`${te}next`,nextContainer:`${te}next-container`,noteContainer:`${te}note-container`,noteWrapper:`${te}note-wrapper`,noteButtons:`${te}note-buttons`,infoContainer:`${te}info-container`,infoPageArea:`${te}info-page-area`,infoPage:`${te}info-page`,infoPagePrev:`${te}info-page-prev`,infoPageNext:`${te}info-page-next`,noteButtonsBigger:`${te}note-bigger`,noteButtonsSmaller:`${te}note-smaller`,infoTime:`${te}info-time`,infoTimer:`${te}info-timer`},re=e=>{const{title:t}=document;document.title="[Presenter view]"+(t?` - ${t}`:"");const n={},r=e=>(n[e]=n[e]||document.querySelector(`.${e}`),n[e]);document.body.appendChild((e=>{const t=document.createElement("div");return t.className=ne.container,t.appendChild(e),t.insertAdjacentHTML("beforeend",Z(ee,null,Z("div",{class:ne.nextContainer},Z("iframe",{class:ne.next,src:"?view=next"})),Z("div",{class:ne.dragbar}),Z("div",{class:ne.noteContainer},Z("div",{class:ne.noteWrapper}),Z("div",{class:ne.noteButtons},Z("button",{class:ne.noteButtonsSmaller,tabindex:"-1",title:"Smaller notes font size"},"Smaller notes font size"),Z("button",{class:ne.noteButtonsBigger,tabindex:"-1",title:"Bigger notes font size"},"Bigger notes font size"))),Z("div",{class:ne.infoContainer},Z("div",{class:ne.infoPageArea},Z("button",{class:ne.infoPagePrev,tabindex:"-1",title:"Previous"},"Previous"),Z("button",{class:ne.infoPage}),Z("button",{class:ne.infoPageNext,tabindex:"-1",title:"Next"},"Next")),Z("time",{class:ne.infoTime,title:"Current time"}),Z("time",{class:ne.infoTimer,title:"Timer"})))),t})(e.parent)),(e=>{let t=!1;r(ne.dragbar).addEventListener("mousedown",()=>{t=!0,r(ne.dragbar).classList.add("active")}),window.addEventListener("mouseup",()=>{t=!1,r(ne.dragbar).classList.remove("active")}),window.addEventListener("mousemove",e=>{if(!t)return;const n=e.clientX/document.documentElement.clientWidth*100;r(ne.container).style.setProperty("--bespoke-marp-presenter-split-ratio",`${Math.max(0,Math.min(100,n))}%`)}),r(ne.nextContainer).addEventListener("click",()=>e.next());const n=r(ne.next),o=(i=n,(e,t)=>i.contentWindow?.postMessage(`navigate:${e},${t}`,"null"===window.origin?"*":window.origin));var i;n.addEventListener("load",()=>{r(ne.nextContainer).classList.add("active"),o(e.slide(),e.fragmentIndex),e.on("fragment",({index:e,fragmentIndex:t})=>o(e,t))});const a=document.querySelectorAll(".bespoke-marp-note");a.forEach(e=>{e.addEventListener("keydown",e=>e.stopPropagation()),r(ne.noteWrapper).appendChild(e)}),e.on("activate",()=>a.forEach(t=>t.classList.toggle("active",t.dataset.index==e.slide())));let s=0;const l=e=>{s=Math.max(-5,s+e),r(ne.noteContainer).style.setProperty("--bespoke-marp-note-font-scale",(1.2**s).toFixed(4))},c=()=>l(1),d=()=>l(-1),u=r(ne.noteButtonsBigger),f=r(ne.noteButtonsSmaller);u.addEventListener("click",()=>{u.blur(),c()}),f.addEventListener("click",()=>{f.blur(),d()}),document.addEventListener("keydown",e=>{"+"===e.key&&c(),"-"===e.key&&d()},!0);const m=r(ne.infoPage);e.on("activate",({index:t})=>{m.textContent=`${t+1} / ${e.slides.length}`}),m.addEventListener("click",()=>{m.blur(),e.toggleOverviewView()});const g=r(ne.infoPagePrev),p=r(ne.infoPageNext);g.addEventListener("click",t=>{g.blur(),e.prev({fragment:!t.shiftKey})}),p.addEventListener("click",t=>{p.blur(),e.next({fragment:!t.shiftKey})}),e.on("fragment",({index:t,fragments:n,fragmentIndex:r})=>{g.disabled=0===t&&0===r,p.disabled=t===e.slides.length-1&&r===n.length-1});let v=new Date;const h=()=>{const e=new Date,t=e=>`${Math.floor(e)}`.padStart(2,"0"),n=e.getTime()-v.getTime(),o=t(n/1e3%60),i=t(n/1e3/60%60),a=t(n/36e5%24);r(ne.infoTime).textContent=e.toLocaleTimeString(),r(ne.infoTimer).textContent=`${a}:${i}:${o}`};h(),setInterval(h,250),r(ne.infoTimer).addEventListener("click",()=>{v=new Date})})(e)},oe=e=>{N(e),Object.defineProperties(e,{openPresenterView:{enumerable:!0,value:ie},presenterUrl:{enumerable:!0,get:ae}}),w&&document.addEventListener("keydown",t=>{"p"!==t.key||t.altKey||t.ctrlKey||t.metaKey||(t.preventDefault(),e.openPresenterView())})};function ie(){const{max:e,floor:t}=Math,n=e(t(.85*window.innerWidth),640),r=e(t(.85*window.innerHeight),360);return window.open(this.presenterUrl,te+this.syncKey,`width=${n},height=${r},menubar=no,toolbar=no`)}function ae(){const e=new URLSearchParams(location.search);return e.set("view","presenter"),e.set("sync",this.syncKey),g(e)}const se=e=>{const t=p();return t===c&&e.appendChild(document.createElement("span")),{[s]:oe,[l]:re,[c]:U}[t]},le=e=>{e.on("activate",t=>{document.querySelectorAll(".bespoke-progress-parent > .bespoke-progress-bar").forEach(n=>{n.style.flexBasis=100*t.index/(e.slides.length-1)+"%"})})},ce=e=>{const t=Number.parseInt(e,10);return Number.isNaN(t)?null:t},de=(e={})=>{const t={history:!0,...e};return e=>{let n=!0;const r=e=>{const t=n;try{return n=!0,e()}finally{n=t}},o=(t={fragment:!0})=>{let n=t.fragment?ce(v("f")||""):null;((t,n)=>{const{min:r,max:o}=Math,{fragments:i,slides:a}=e,s=o(0,r(t,a.length-1)),l=o(0,r(n||0,i[s].length-1));s===e.slide()&&l===e.fragmentIndex||e.slide(s,{fragment:l})})((()=>{if(location.hash){const[t]=location.hash.slice(1).split(":~:");if(/^\d+$/.test(t))return(ce(t)??1)-1;const r=document.getElementById(t)||document.querySelector(`a[name="${CSS.escape(t)}"]`);if(r){const{length:t}=e.slides;for(let o=0;o<t;o+=1)if(e.slides[o].contains(r)){const t=e.fragments?.[o],i=r.closest("[data-marpit-fragment]");if(t&&i){const e=t.indexOf(i);e>=0&&(n=e)}return o}}}return 0})(),n)};e.on("fragment",({index:e,fragmentIndex:r})=>{n||h({f:0===r||r.toString()},{location:{...location,hash:`#${e+1}`},setter:(...e)=>t.history?history.pushState(...e):history.replaceState(...e)})}),setTimeout(()=>{o(),window.addEventListener("hashchange",()=>r(()=>{o({fragment:!1}),h({f:void 0})})),window.addEventListener("popstate",()=>{n||r(()=>o())}),n=!1},0)}},{PI:ue,abs:fe,sqrt:me,atan2:ge}=Math,pe={passive:!0},ve=({slope:e=-.7,swipeThreshold:t=30}={})=>n=>{let r;const o=n.parent,i=e=>{const t=o.getBoundingClientRect();return{x:e.pageX-(t.left+t.right)/2,y:e.pageY-(t.top+t.bottom)/2}};o.addEventListener("touchstart",({touches:e})=>{r=1===e.length?i(e[0]):void 0},pe),o.addEventListener("touchmove",e=>{if(r)if(1===e.touches.length){e.preventDefault();const t=i(e.touches[0]),n=t.x-r.x,o=t.y-r.y;r.delta=me(fe(n)**2+fe(o)**2),r.radian=ge(n,o)}else r=void 0}),o.addEventListener("touchend",o=>{if(r){if(r.delta&&r.delta>=t&&r.radian){const t=(r.radian-e+ue)%(2*ue)-ue;n[t<0?"next":"prev"](),o.stopPropagation()}r=void 0}},pe)},he=new Map;he.clear(),he.set("none",{backward:{both:void 0,incoming:void 0,outgoing:void 0},forward:{both:void 0,incoming:void 0,outgoing:void 0}});const we={both:"",outgoing:"outgoing-",incoming:"incoming-"},ye={forward:"",backward:"-backward"},be=e=>`--marp-bespoke-transition-animation-${e}`,ke=e=>`--marp-transition-${e}`,xe=be("name"),Ee=be("duration"),$e=e=>new Promise(t=>{const n={},r=document.createElement("div"),o=e=>{r.remove(),t(e)};r.addEventListener("animationstart",()=>o(n)),Object.assign(r.style,{animationName:e,animationDuration:"1s",animationFillMode:"both",animationPlayState:"paused",position:"absolute",pointerEvents:"none"}),document.body.appendChild(r);const i=getComputedStyle(r).getPropertyValue(ke("duration"));i&&Number.parseFloat(i)>=0&&(n.defaultDuration=i),((e,t)=>{requestAnimationFrame(()=>{e.style.animationPlayState="running",requestAnimationFrame(()=>t(void 0))})})(r,o)}),Le=async e=>he.has(e)?he.get(e):(e=>{const t={},n=[];for(const[r,o]of Object.entries(we))for(const[i,a]of Object.entries(ye)){const s=`marp-${o}transition${a}-${e}`;n.push($e(s).then(e=>{t[i]=t[i]||{},t[i][r]=e?{...e,name:s}:void 0}))}return Promise.all(n).then(()=>t)})(e).then(t=>(he.set(e,t),t)),Se=e=>Object.values(e).flatMap(Object.values).every(e=>!e),Pe=(e,{type:t,backward:n})=>{const r=e[n?"backward":"forward"],o=(()=>{const e=r[t],n=e=>({[xe]:e.name});if(e)return n(e);if(r.both){const e=n(r.both);return"incoming"===t&&(e[be("direction")]="reverse"),e}})();return!o&&n?Pe(e,{type:t,backward:!1}):o||{[xe]:"__bespoke_marp_transition_no_animation__"}},_e=e=>{if(e)try{const t=JSON.parse(e);if((e=>{if("object"!=typeof e)return!1;const t=e;return"string"==typeof t.name&&(void 0===t.duration||"string"==typeof t.duration)})(t))return t}catch{}},Oe="_tSId",Te="_tA",Ie="bespoke-marp-transition-warming-up",Me=window.matchMedia("(prefers-reduced-motion: reduce)"),Ae="__bespoke_marp_transition_reduced_outgoing__",Ce="__bespoke_marp_transition_reduced_incoming__",De={forward:{both:void 0,incoming:{name:Ce},outgoing:{name:Ae}},backward:{both:void 0,incoming:{name:Ce},outgoing:{name:Ae}}},Ne=e=>{if(!document.startViewTransition)return;const t=t=>(void 0!==t&&(e._tD=t),e._tD);let n;t(!1),((...e)=>{CSS.registerProperty({name:ke("duration"),syntax:"<time>",inherits:!0,initialValue:"-1s"});const t=[...new Set(e).values()];return Promise.all(t.map(e=>Le(e))).then()})(...Array.from(document.querySelectorAll("section[data-transition], section[data-transition-back]")).flatMap(e=>[e.dataset.transition,e.dataset.transitionBack].flatMap(e=>{const t=_e(e);return[t?.name,t?.builtinFallback?`__builtin__${t.name}`:void 0]}).filter(e=>!!e))).then(()=>{document.querySelectorAll("style").forEach(e=>{e.innerHTML=e.innerHTML.replace(/--marp-transition-duration:[^;}]*[;}]/g,e=>e.slice(0,-1)+"!important"+e.slice(-1))})});const r=(n,{back:r,cond:o})=>i=>{const a=t();if(a)return!!i[Te]||!("object"!=typeof a||(a.skipTransition(),!i.forSync));if(e.skipTransition)return!0;if(!o(i))return!0;const s=e.slides[e.slide()],l=()=>i.back??r,c="data-transition"+(l()?"-back":""),d=s.querySelector(`section[${c}]`);if(!d)return!0;const u=_e(d.getAttribute(c)??void 0);return!u||((async(e,{builtinFallback:t=!0}={})=>{let n=await Le(e);if(Se(n)){if(!t)return;return n=await Le(`__builtin__${e}`),Se(n)?void 0:n}return n})(u.name,{builtinFallback:u.builtinFallback}).then(e=>{if(!e){t(!0);try{n(i)}finally{t(!1)}return}let r=e;Me.matches&&(console.warn("Use a constant animation to transition because preferring reduced motion by viewer has detected."),r=De);const o=document.getElementById(Oe);o&&o.remove();const a=document.createElement("style");a.id=Oe,document.head.appendChild(a),((e,t)=>{const n=[`:root{${ke("direction")}:${t.backward?-1:1};}`,":root:has(.bespoke-marp-inactive){cursor:none;}"],r=t=>{const n=e[t].both?.defaultDuration||e[t].outgoing?.defaultDuration||e[t].incoming?.defaultDuration;return"forward"===t?n:n||r("forward")},o=t.duration||r(t.backward?"backward":"forward");void 0!==o&&n.push(`::view-transition-group(*){${Ee}:${o};}`);const i=e=>Object.entries(e).map(([e,t])=>`${e}:${t};`).join("");return n.push(`::view-transition-old(root){${i(Pe(e,{...t,type:"outgoing"}))}}`,`::view-transition-new(root){${i(Pe(e,{...t,type:"incoming"}))}}`),n})(r,{backward:l(),duration:u.duration}).forEach(e=>a.sheet?.insertRule(e));const s=document.documentElement.classList;s.add(Ie);let c=!1;const d=()=>{c||(n(i),c=!0,s.remove(Ie))},f=()=>{t(!1),a.remove(),s.remove(Ie)};try{t(!0);const e=document.startViewTransition(d);t(e),e.finished.finally(f)}catch(e){console.error(e),d(),f()}}),!1)};e.on("prev",r(t=>e.prev({...t,[Te]:!0}),{back:!0,cond:e=>e.index>0&&!((e.fragment??1)&&n.fragmentIndex>0)})),e.on("next",r(t=>e.next({...t,[Te]:!0}),{cond:t=>t.index+1<e.slides.length&&!(n.fragmentIndex+1<n.fragments.length)})),setTimeout(()=>{e.on("slide",r(t=>e.slide(t.index,{...t,[Te]:!0}),{cond:t=>{const n=e.slide();return t.index!==n&&(t.back=t.index<n,!0)}}))},0),e.on("fragment",e=>{n=e})};let Be;const Ke=()=>(void 0===Be&&(Be="wakeLock"in navigator&&navigator.wakeLock),Be),qe=async()=>{const e=Ke();if(e)try{return await e.request("screen")}catch(e){console.warn(e)}return null},Ve=async()=>{if(!Ke())return;let e;const t=()=>{e&&"visible"===document.visibilityState&&qe()};for(const e of["visibilitychange","fullscreenchange"])document.addEventListener(e,t);return e=await qe(),e};((e=document.getElementById(":$p"))=>{(()=>{const e=v("view");i.dataset.bespokeView=u.some(t=>t&&t===e)?e:""})();const t=(e=>{const t=v(e);return h({[e]:void 0}),t})("sync")||void 0;o.from(e,((...e)=>{const t=u.findIndex(e=>p()===e);return e.map(([e,n])=>e[t]&&n).filter(e=>e)})([[1,1,1,0],B({key:t})],[[1,1,0,1],se(e)],[[1,1,0,0],M],[[1,1,1,1],E],[[1,0,0,0],T()],[[1,1,1,1],A],[[1,1,1,1],de({history:!1})],[[1,1,0,0],C()],[[1,1,1,0],_],[[1,0,0,0],le],[[1,1,0,0],ve()],[[1,0,0,0],D()],[[1,1,1,0],F()],[[1,0,0,0],Ne],[[1,1,1,1],$],[[1,1,1,0],Ve]))})()}();</script></body></html>