Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.html 22KB

10 ay önce
10 ay önce
8 ay önce
10 ay önce
10 ay önce
9 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
9 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
10 ay önce
9 ay önce
9 ay önce
9 ay önce
8 ay önce
8 ay önce
8 ay önce
8 ay önce
8 ay önce
8 ay önce
8 ay önce
9 ay önce
10 ay önce
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451
  1. <!DOCTYPE html><!-- This is a valid HTML5 document. -->
  2. <!-- Screen readers, SEO, extensions and so on. -->
  3. <html lang="fr">
  4. <!-- Has to be within the first 1024 bytes, hence before the `title` element
  5. See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
  6. <meta charset="utf-8">
  7. <!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
  8. <!-- The viewport meta is quite crowded and we are responsible for that.
  9. See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
  10. <meta name="viewport" content="width=device-width,initial-scale=1">
  11. <!-- Required to make a valid HTML5 document. -->
  12. <title>
  13. Wuwei
  14. — David Larlet</title>
  15. <script>
  16. function toggleTheme(themeName) {
  17. document.documentElement.classList.toggle(
  18. 'forced-dark',
  19. themeName === 'dark'
  20. )
  21. document.documentElement.classList.toggle(
  22. 'forced-light',
  23. themeName === 'light'
  24. )
  25. }
  26. const selectedTheme = localStorage.getItem('theme')
  27. if (selectedTheme !== 'undefined') {
  28. toggleTheme(selectedTheme)
  29. }
  30. </script>
  31. <!-- Documented, feel free to shoot an email. -->
  32. <link rel="stylesheet" href="/static/david/css/style_2024-03-09.css">
  33. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  34. <link rel="preload"
  35. href="/static/david/css/fonts/century_supra_ot_a_regular.woff2"
  36. as="font"
  37. type="font/woff2"
  38. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  39. crossorigin>
  40. <link rel="preload"
  41. href="/static/david/css/fonts/century_supra_ot_a_bold.woff2"
  42. as="font"
  43. type="font/woff2"
  44. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  45. crossorigin>
  46. <link rel="preload"
  47. href="/static/david/css/fonts/century_supra_ot_a_italic.woff2"
  48. as="font"
  49. type="font/woff2"
  50. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  51. crossorigin>
  52. <link rel="preload"
  53. href="/static/david/css/fonts/century_supra_ot_b_regular.woff2"
  54. as="font"
  55. type="font/woff2"
  56. media="(prefers-color-scheme: dark)"
  57. crossorigin>
  58. <link rel="preload"
  59. href="/static/david/css/fonts/century_supra_ot_b_bold.woff2"
  60. as="font"
  61. type="font/woff2"
  62. media="(prefers-color-scheme: dark)"
  63. crossorigin>
  64. <link rel="preload"
  65. href="/static/david/css/fonts/century_supra_ot_b_italic.woff2"
  66. as="font"
  67. type="font/woff2"
  68. media="(prefers-color-scheme: dark)"
  69. crossorigin>
  70. <meta name="description" content="Le wuwei, dans le taoïsme, est d’ailleurs composé de deux idéogrammes : le rien et la volonté. Et on sait à quel point il faut beaucoup de volonté pour revendiquer davantage de rien. Il se traduit généralement par non-agir ou non-intervention, mais cela ne signifie pas pour autant rester les bras croisés en rejetant toute nouveauté, simplement de faire des choix éclairés et de ne pas forcer le cours des choses. Se fixer des limites, distinguer ce qui relève du progrès vers une vie bonne et décente de ce qui nous aliène, savoir ne pas est un art de vivre au quotidien. Et je ne peux m’empêcher de penser que Bartleby devait être chinois.">
  71. <!-- That good ol' feed, subscribe :). -->
  72. <link rel="alternate"
  73. type="application/atom+xml"
  74. title="Feed"
  75. href="/david/log/">
  76. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  77. <link rel="apple-touch-icon"
  78. sizes="180x180"
  79. href="/static/david/icons2/apple-touch-icon.png">
  80. <link rel="icon"
  81. type="image/png"
  82. sizes="32x32"
  83. href="/static/david/icons2/favicon-32x32.png">
  84. <link rel="icon"
  85. type="image/png"
  86. sizes="16x16"
  87. href="/static/david/icons2/favicon-16x16.png">
  88. <link rel="manifest" href="/static/david/icons2/site.webmanifest">
  89. <link rel="mask-icon"
  90. href="/static/david/icons2/safari-pinned-tab.svg"
  91. color="#07486c">
  92. <link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
  93. <meta name="msapplication-TileColor" content="#f7f7f7">
  94. <meta name="msapplication-config"
  95. content="/static/david/icons2/browserconfig.xml">
  96. <meta name="theme-color"
  97. content="#f7f7f7"
  98. media="(prefers-color-scheme: light)">
  99. <meta name="theme-color"
  100. content="#272727"
  101. media="(prefers-color-scheme: dark)">
  102. <!-- Is that even respected? Retrospectively? What a shAItshow…
  103. https://neil-clarke.com/block-the-bots-that-feed-ai-models-by-scraping-your-website/ -->
  104. <meta name="robots" content="noai, noimageai">
  105. <style type="text/css">
  106. .tippy-content {
  107. min-width: 280px;
  108. padding: .5rem;
  109. font-size: calc(var(--fluid-0) * 0.8);
  110. font-family: var(--labor-font);
  111. letter-spacing: initial;
  112. text-align: left;
  113. }
  114. .tippy-content h3 {
  115. margin-top: 0;
  116. }
  117. .tippy-content h3 img {
  118. max-width: 2rem;
  119. max-height: 2rem;
  120. display: inline-block;
  121. }
  122. .tippy-content .tippy-links {
  123. display: flex;
  124. justify-content: space-around;
  125. }
  126. .tippy-content a {
  127. padding: .4rem;
  128. color: #F06048;
  129. }
  130. </style>
  131. <body data-instant-intensity="viewport-all">
  132. <article>
  133. <header>
  134. <hgroup>
  135. <h1>Wuwei</h1>
  136. <p>Le <time datetime="2024-01-13">13 janvier 2024</time></p>
  137. </hgroup>
  138. </header>
  139. <nav>
  140. <p>
  141. <a rel="prev"
  142. href="/david/2024/01/12/"
  143. title="Publication précédente : Personnel">← Précédent</a> •
  144. <a href="/david/" title="Aller à l’accueil" rel="up">Accueil</a>
  145. <a href="/david/recherche/"
  146. title="Aller à la page de recherche"
  147. rel="search" data-no-instant>Recherche</a>
  148. • <a rel="next"
  149. href="/david/2024/01/14/"
  150. title="Publication suivante : Fiction">Suivant →</a>
  151. </p>
  152. </nav>
  153. <blockquote>
  154. <p>Le <em>wuwei</em>, dans le taoïsme, est d’ailleurs composé de deux idéogrammes&nbsp;: le rien et la volonté. Et on sait à quel point il faut beaucoup de volonté pour revendiquer davantage de rien. Il se traduit généralement par <em>non-agir</em> ou <em>non-intervention</em>, mais cela ne signifie pas pour autant rester les bras croisés en rejetant toute nouveauté, simplement de faire des choix éclairés et de ne pas forcer le cours des choses. Se fixer des limites, distinguer ce qui relève du progrès vers une vie bonne et décente de ce qui nous aliène, savoir <em>ne pas</em> est un art de vivre au quotidien. Et je ne peux m’empêcher de penser que Bartleby devait être&nbsp;chinois.</p>
  155. <p>Décliner l’usage de ce dont on n’a pas besoin, <mark>discerner parmi les technologies celles qui risquent de faire plus de mal que de bien,</mark> voilà qui manque cruellement à notre époque où l’on a oublié que parfois ne pas nuire vaut mieux qu’agir. Il y aurait pourtant un nombre incalculable d’applications pratiques du <em>wuwei</em>, de la géo-ingénierie à l’intelligence artificielle, tant de cas où il serait bon que l’espèce humaine sache se&nbsp;retenir.</p>
  156. <p><cite><em>Alors nous irons trouver la beauté ailleurs</em>, Corinne Morel&nbsp;Darleux</cite></p>
  157. </blockquote>
  158. <p>Cette année encore, ce sera pour moi le <em>non-usage</em> de l’<a data-link-domain="simonwillison.net" href="https://simonwillison.net/2024/Jan/7/call-it-ai/" hreflang="en"
  159. title="Consultation de l’article (anglais)">intelligence artificielle</a>
  160. <a href="/david/cache/2024/3ea27fca4fabb81676fc1b98264f3bd8/" hreflang="en"
  161. data-tippy data-description="Update 9th January 2024: This post was clumsily written and failed to make the point I wanted it to make. I’ve published a follow-up, What I should have said about …"
  162. data-source="https://simonwillison.net/2024/Jan/7/call-it-ai/"
  163. data-date="2024-01-13"
  164. data-favicon="https://simonwillison.net/favicon.ico"
  165. data-domain="simonwillison.net"
  166. ><svg xmlns="http://www.w3.org/2000/svg"
  167. width="24" height="24" viewBox="0 0 24 24" fill="none"
  168. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  169. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  170. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  171. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  172. </svg>
  173. <span class="sr-only">[archive]</span></a> explicite qui sera mon <em>wuwei</em>. Je précise le <q lang="fr">explicite</q> car il y en a déjà plein partout dans mon téléphone et ailleurs. J’ai peut-être une des dernières générations d’appareil photo qui ne va pas adapter l’image à une norme / culture apprise. Je suis curieux d’observer le nivellement (au sens moyenne, pas forcément par le bas) que vont provoquer les <abbr title="Large Language Model">LLM</abbr> dans le domaine, peut-être deviendra-t-il plus imperceptible qu’une <a data-link-domain="theverge.com" href="https://www.theverge.com/2023/3/13/23637401/samsung-fake-moon-photos-ai-galaxy-s21-s23-ultra" hreflang="en"
  174. title="Consultation de l’article (anglais)">lune</a>
  175. <a href="/david/cache/2024/e990536ed88823f047296ea25a6b7933/" hreflang="en"
  176. data-tippy data-description="A Reddit post has revealed just how much post-processing the Galaxy S23’s camera applies when it detects it’s taking a photo of the Moon, inserting extra detail that isn’t present in reality."
  177. data-source="https://www.theverge.com/2023/3/13/23637401/samsung-fake-moon-photos-ai-galaxy-s21-s23-ultra"
  178. data-date="2024-01-13"
  179. data-favicon="https://www.theverge.com/icons/favicon_32x32.png"
  180. data-domain="theverge.com"
  181. ><svg xmlns="http://www.w3.org/2000/svg"
  182. width="24" height="24" viewBox="0 0 24 24" fill="none"
  183. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  184. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  185. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  186. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  187. </svg>
  188. <span class="sr-only">[archive]</span></a> ou une <a data-link-domain="theverge.com" href="https://www.theverge.com/2023/12/2/23985299/iphone-bridal-photo-three-poses-explanation-panorama-photoshop-generative-ai" hreflang="en"
  189. title="Consultation de l’article (anglais)">mariée</a>
  190. <a href="/david/cache/2024/668d0f82ae65b0e94ea76145057759a7/" hreflang="en"
  191. data-tippy data-description="Tessa Coates’ picture of one moment showing her in three different poses isn’t an iPhone Live Photo glitch or Photoshop; it’s multiple pictures stitched in “pano” mode."
  192. data-source="https://www.theverge.com/2023/12/2/23985299/iphone-bridal-photo-three-poses-explanation-panorama-photoshop-generative-ai"
  193. data-date="2024-01-13"
  194. data-favicon="https://www.theverge.com/icons/favicon_32x32.png"
  195. data-domain="theverge.com"
  196. ><svg xmlns="http://www.w3.org/2000/svg"
  197. width="24" height="24" viewBox="0 0 24 24" fill="none"
  198. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  199. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  200. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  201. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  202. </svg>
  203. <span class="sr-only">[archive]</span></a> mais il sera toujours&nbsp;là.</p>
  204. <p>Ce <strong>explicite</strong> correspond principalement pour moi à des <em>prompts</em> qui m’aideraient à coder. Je regarde ce qui se fait dans le domaine et j’en vois l’intérêt mais je vois aussi au détriment de tout ce que cela est rendu possible. Des humains-esclaves qui modèrent ce qui est généré d’un côté, des sources d’apprentissage non consenties —&nbsp;voire privées&nbsp;— et des ressources pharaoniques pour réussir à aligner 3&nbsp;fonctions qu’il faut ensuite comprendre et adapter de toute&nbsp;façon.</p>
  205. <p>Et puis il y a toute cette zone grise, je me sers par exemple de la reconnaissance de caractère intégrée à Photos.app de macOS pour retranscrire les citations depuis des photos de passages de livres. Auparavant, je les recopiais à la main. Est-ce que cela changeait ma manière de les&nbsp;ré-interpréter&#8239;?</p>
  206. <a href="#hr-29" title="Lien vers cette section de la page"><hr id="hr-29" /></a>
  207. <blockquote>
  208. <p>Il nous faut trouver de nouvelles manières littéraires susceptibles de percuter sans chercher à convaincre, et déjouer le didactisme qui veut à tout prix expliquer et instruire. Peut-être faudrait-il aller jusqu’à s’imposer comme contrainte de proscrire l’usage de certains mots afin de renouveler le&nbsp;genre.</p>
  209. <p>Écologie, capitalisme, croissance, nature, social, climat, peuple, vert, environnement, progrès, révolution, biodiversité, démocratie&nbsp;: la plupart d’entre eux ne manquerait à personne tant ils ont été dévoyés et usés jusqu’à la lie. Mais notre meilleure botte est sans doute de miser sur la capacité du sensible à <em>affecter</em>.</p>
  210. <p><mark>En littérature, c’est l’empathie qui amène à la réflexion et non l’inverse.</mark> Vous pouvez développer l’argumentaire le plus serré qui soit dans un livre, je doute fort que cela fasse changer quiconque d’avis. En revanche, donnez-nous un personnage à chérir, faites-nous partager son intimité, ses émois, ses douleurs et ses joies, et il nous sera bien plus aisé de prendre en compte son point de vue, à défaut de le&nbsp;partager.</p>
  211. <p><cite><em>Ibid.</em></cite></p>
  212. </blockquote>
  213. <p>De plus en plus tenté d’explorer cette piste. Je me <a href="/david/stream/2018/11/13/">souviens</a> <a href="/david/stream/2018/11/25/">avec</a> <a href="/david/stream/2018/11/27/">émotion</a> de ma lecture de <em>Professeur cherche élève ayant désir de sauver le monde</em> par Daniel&nbsp;Quinn.</p>
  214. <nav>
  215. <p>
  216. <a href="/david/2024/ecriture/"
  217. title="Liste de tous les articles 2024 associés à cette étiquette"
  218. rel="tag">#écriture</a>
  219. <a href="/david/2024/ia/"
  220. title="Liste de tous les articles 2024 associés à cette étiquette"
  221. rel="tag">#IA</a>
  222. <a href="/david/2024/parvenir/"
  223. title="Liste de tous les articles 2024 associés à cette étiquette"
  224. rel="tag">#parvenir</a>
  225. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  226. </p>
  227. </nav>
  228. <nav>
  229. <p>
  230. <a rel="prev"
  231. href="/david/2024/01/12/"
  232. title="Publication précédente : Personnel">← Précédent</a> •
  233. <a href="/david/2024/" title="Liste des publications récentes">↑ En 2024</a>
  234. • <a rel="next"
  235. href="/david/2024/01/14/"
  236. title="Publication suivante : Fiction">Suivant →</a>
  237. </p>
  238. </nav>
  239. <form action="/david/recherche/" method="get">
  240. <fieldset>
  241. <legend>Recherche</legend>
  242. <label for="input-search">Termes de votre recherche :</label>
  243. <input id="input-search" type="search" name="s" aria-describedby="indexation-infos" required>
  244. <input type="submit" value="Chercher">
  245. <p id="indexation-infos">
  246. <small>
  247. Seuls les contenus de ces 8 dernières années sont indexés.
  248. </small>
  249. </p>
  250. </fieldset>
  251. </form>
  252. <aside>
  253. <theme-toggle></theme-toggle>
  254. </aside>
  255. </article>
  256. <hr>
  257. <footer>
  258. <p>
  259. <a href="/david/" title="Aller à l’accueil">Accueil</a>
  260. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  261. <a href="http://larlet.com"
  262. title="Go to my English profile"
  263. data-instant>Pro</a>
  264. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">Email</a>
  265. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">Légal</abbr>
  266. </p>
  267. <template id="theme-selector">
  268. <form>
  269. <style type="text/css">
  270. fieldset div {
  271. text-align: center;
  272. }
  273. </style>
  274. <fieldset>
  275. <legend>Thème</legend>
  276. <div>
  277. <label>
  278. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  279. Auto
  280. </label>
  281. <label>
  282. <input type="radio" value="dark" name="chosen-color-scheme">
  283. Foncé
  284. </label>
  285. <label>
  286. <input type="radio" value="light" name="chosen-color-scheme">
  287. Clair
  288. </label>
  289. </div>
  290. </fieldset>
  291. </form>
  292. </template>
  293. </footer>
  294. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  295. <script>
  296. class ThemeToggle extends HTMLElement {
  297. constructor() {
  298. super()
  299. const themeSelectorTemplate = document.querySelector('#theme-selector')
  300. const form = themeSelectorTemplate.content.firstElementChild
  301. this.attachShadow({ mode: 'open' })
  302. this.shadowRoot.appendChild(form.cloneNode(true))
  303. }
  304. connectedCallback() {
  305. const form = this.shadowRoot.querySelector('form')
  306. form.addEventListener('change', (e) => {
  307. const chosenColorScheme = e.target.value
  308. localStorage.setItem('theme', chosenColorScheme)
  309. toggleTheme(chosenColorScheme)
  310. })
  311. const selectedTheme = localStorage.getItem('theme')
  312. if (selectedTheme && selectedTheme !== 'undefined') {
  313. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  314. }
  315. }
  316. }
  317. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  318. window.addEventListener('load', () => {
  319. let colorsLayer = undefined
  320. let hasDarkRules = false
  321. for (const styleSheet of Array.from(document.styleSheets)) {
  322. let mediaRules = []
  323. for (const layerRule of styleSheet.cssRules) {
  324. if (!(layerRule instanceof CSSLayerBlockRule)) {
  325. continue
  326. }
  327. if (layerRule.name === 'colors') {
  328. colorsLayer = layerRule
  329. }
  330. for (const cssRule of layerRule.cssRules) {
  331. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  332. continue
  333. }
  334. // WARNING: Safari does not have/supports `conditionText`.
  335. if (cssRule.conditionText) {
  336. if (cssRule.conditionText !== prefersColorSchemeDark) {
  337. continue
  338. }
  339. } else {
  340. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  341. continue
  342. }
  343. }
  344. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  345. }
  346. }
  347. // WARNING: do not try to insert a Rule to a styleSheet you are
  348. // currently iterating on, otherwise the browser will be stuck
  349. // in a infinite loop…
  350. for (const mediaRule of mediaRules) {
  351. // Safari requires the `0` second parameter (even if default).
  352. colorsLayer.insertRule(mediaRule.cssText, 0)
  353. hasDarkRules = true
  354. }
  355. }
  356. if (hasDarkRules) {
  357. if ('customElements' in window && !customElements.get('theme-toggle')) {
  358. customElements.define('theme-toggle', ThemeToggle)
  359. }
  360. }
  361. })
  362. </script>
  363. <script src="/static/david/js/popper-2.11.8.min.js"></script>
  364. <script src="/static/david/js/tippy-bundle-6.3.7.umd.min.js"></script>
  365. <script>
  366. tippy('[data-tippy]', {
  367. content(reference) {
  368. reference.addEventListener('click', (e) => e.preventDefault())
  369. return `
  370. <h3 lang="fr">
  371. <img src="${reference.dataset.favicon}" loading="lazy">
  372. <a href="${reference.dataset.source}"
  373. >Article sur ${reference.dataset.domain}</a></h3>
  374. <p lang="${reference.hreflang}"><em>${reference.dataset.description}</em></p>
  375. <div class="tippy-links" lang="fr">
  376. <a href="${reference.href}">Archive au ${reference.dataset.date}</a>
  377. </div>
  378. `
  379. },
  380. allowHTML: true,
  381. interactive: true,
  382. delay: [150, 700],
  383. hideOnClick: false
  384. })
  385. </script>
  386. <script type="module">
  387. import { annotate } from '/static/david/js/rough-notation-0.5.1.esm.min.js'
  388. const markObserver = new IntersectionObserver((entries, observer) => {
  389. const computedStyle = getComputedStyle(document.documentElement)
  390. const markBackground = computedStyle.getPropertyValue('--mark-background')
  391. for (const entry of entries) {
  392. if (entry.intersectionRatio === 0) continue
  393. const markElement = entry.target
  394. markElement.style.backgroundColor = 'inherit'
  395. const annotation = annotate(
  396. markElement, {
  397. type: 'highlight',
  398. multiline: true,
  399. color: markBackground,
  400. // animate: !window.matchMedia('(prefers-reduced-motion: reduce)').matches
  401. animate: false
  402. }
  403. )
  404. annotation.show()
  405. observer.unobserve(markElement)
  406. }
  407. }, {threshold: 1.0})
  408. for (const markElement of document.querySelectorAll('mark')) {
  409. markObserver.observe(markElement)
  410. }
  411. </script>
  412. </body>
  413. </html>