Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

index.html 21KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460
  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. Intendant
  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="In Why We Can’t Have Nice Software, I point out this pattern of needless software churn in the mindless quest for profit. This is a perfect example occurring right now. Redict has already reached its peak; it does not need any more serious software development to occur. It does not need to pivot to AI. It can be maintained for decades to come with minimal effort. It can continue to provide a high amount of value for a low amount of labor. That’s the entire point of software!">
  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. <!-- To get attribution when linking on mastodon. -->
  106. <meta name="fediverse:creator" content="@david@larlet.fr">
  107. <style type="text/css">
  108. .tippy-content {
  109. min-width: 280px;
  110. padding: .5rem;
  111. font-size: calc(var(--fluid-0) * 0.8);
  112. font-family: var(--labor-font);
  113. letter-spacing: initial;
  114. text-align: left;
  115. }
  116. .tippy-content h3 {
  117. margin-top: 0;
  118. }
  119. .tippy-content h3 img {
  120. max-width: 2rem;
  121. max-height: 2rem;
  122. display: inline-block;
  123. }
  124. .tippy-content .tippy-links {
  125. display: flex;
  126. justify-content: space-around;
  127. }
  128. .tippy-content a {
  129. padding: .4rem;
  130. color: #F06048;
  131. }
  132. </style>
  133. <body data-instant-intensity="viewport-all">
  134. <article>
  135. <header>
  136. <hgroup>
  137. <h1>Intendant</h1>
  138. <p>Le <time datetime="2024-03-23">23 mars 2024</time></p>
  139. </hgroup>
  140. </header>
  141. <nav>
  142. <p>
  143. <a rel="prev"
  144. href="/david/2024/03/21/"
  145. title="Publication précédente : Fourchette">← Précédent</a> •
  146. <a href="/david/" title="Aller à l’accueil" rel="up">Accueil</a>
  147. <a href="/david/recherche/"
  148. title="Aller à la page de recherche"
  149. rel="search" data-no-instant>Recherche</a>
  150. • <a rel="next"
  151. href="/david/2024/03/24/"
  152. title="Publication suivante : Cage">Suivant →</a>
  153. </p>
  154. </nav>
  155. <blockquote lang="en">
  156. <p>In <a data-link-domain="andrewkelley.me" href="https://andrewkelley.me/post/why-we-cant-have-nice-software.html">Why We Can’t Have Nice Software</a>, I point out this pattern of needless software churn in the mindless quest for profit. This is a perfect example occurring right now. Redict has already reached its peak; it does not need any more serious software development to occur. It does not need to <a data-link-domain="redis.com" href="https://redis.com/blog/the-future-of-redis/">pivot to AI</a>. It can be maintained for decades to come with minimal effort. It can continue to provide a high amount of value for a low amount of labor. That’s the entire point of&nbsp;software!</p>
  157. <p>Redict does not have any profit left to offer. It no longer needs a fund-raising entity behind it anymore. <mark>It just needs a good project&nbsp;steward.</mark></p>
  158. <p><cite><em><a data-link-domain="andrewkelley.me" href="https://andrewkelley.me/post/redis-renamed-to-redict.html" hreflang="en"
  159. title="Consultation de l’article (anglais)">Redis Renamed to Redict</a>
  160. <a href="/david/cache/2024/d58c7619eec894c5c069244114ea1df5/" hreflang="en"
  161. data-tippy data-description="In other words, Redict is the true spiritual successor to what was once Redis."
  162. data-source="https://andrewkelley.me/post/redis-renamed-to-redict.html"
  163. data-date="2024-03-23"
  164. data-favicon=""
  165. data-domain="andrewkelley.me"
  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></em></cite></p>
  174. </blockquote>
  175. <p>Je me pose beaucoup de questions sur cette notion de finitude logicielle. Et sur le fait de parfois créer ma propre nécessité, sans en avoir forcément conscience ou&nbsp;l’intention.</p>
  176. <p>J’y vois un parallèle avec une frugalité que je n’arrive pas à atteindre, les deux étant probablement&nbsp;liés.</p>
  177. <p>Il me reste encore tellement de choses à&nbsp;démêler…</p>
  178. <a href="#hr-130" title="Lien vers cette section de la page"><hr id="hr-130" /></a>
  179. <blockquote lang="en">
  180. <p>So, yeah, I’ve been at this for a while, and this is the answer: Write CSS. Not too much. Mostly&nbsp;scoped.</p>
  181. <p>I’m sure we’ll never argue about how to manage CSS ever&nbsp;again.</p>
  182. <p><cite><em><a data-link-domain="leereamsnyder.com" href="https://www.leereamsnyder.com/write-css-not-too-much-mostly-scoped" hreflang="en"
  183. title="Consultation de l’article (anglais)">Write CSS. Not too much. Mostly scoped.</a>
  184. <a href="/david/cache/2024/4e116948ed4d26daa981a6c4ea9e4282/" hreflang="en"
  185. data-tippy data-description="Let’s talk about Tailwind and appease no one"
  186. data-source="https://www.leereamsnyder.com/write-css-not-too-much-mostly-scoped"
  187. data-date="2024-03-23"
  188. data-favicon="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='64'%20height='64'%3e%3cstyle%3e%20@media%20(prefers-color-scheme:%20dark)%20{%20.lee%20{%20fill:%20%23FF4640;%20}%20.ream%20{%20fill:%20%23EC7F00;%20}%20.sny%20{%20fill:%20%23FFB258;%20}%20.der%20{%20fill:%20%23FFDFC6;%20}%20.letters%20{%20fill:%20%23373948;%20}%20}%20%3c/style%3e%3cpath%20class='lee'%20fill='%239B70FF'%20d='M0%203.066A3.066%203.066%200%200%201%203.066%200h57.868A3.066%203.066%200%200%201%2064%203.066v14.946H0V3.066Z'/%3e%3cpath%20class='ream'%20fill='%2300749D'%20d='M64%2034.108H0V15.713h64z'/%3e%3cpath%20class='sny'%20fill='%230092C5'%20d='M64%2031.808v20.695H0V31.808z'/%3e%3cpath%20class='der'%20fill='%238BCFFC'%20d='M64%2047.904v13.03A3.066%203.066%200%200%201%2060.934%2064H3.066A3.066%203.066%200%200%201%200%2060.934v-13.03h64Z'/%3e%3cg%20class='letters'%20fill='%23fff'%20fill-rule='nonzero'%3e%3cpath%20d='M13.275%2040.809c0-4.277%207.379-14.523%207.379-20.304%200-3.102-1.927-4.7-5.17-4.7-4.089%200-8.554%202.021-13.865%206.063a20.491%2020.491%200%200%201%202.726%204.277c3.807-3.055%206.016-4.559%207.849-4.559%201.081%200%201.457.517%201.457%201.363%200%203.76-6.956%2012.643-6.956%2019.458%200%204.136%202.444%206.063%207.144%206.063%205.687%200%2010.481-2.679%2016.215-9.494-1.175-.893-2.303-1.739-3.854-3.384-3.854%205.405-7.332%207.52-10.199%207.52-1.927%200-2.726-.846-2.726-2.303ZM50.286%2048c.33-1.692%201.128-3.431%201.833-5.17-.987.047-3.384.141-5.875.141-1.692%200-1.88-1.128-1.41-2.444%202.444-6.58%206.44-10.81%2010.575-10.81%201.363%200%202.491.423%203.243%201.41-.235-.047-.517-.047-.799-.047-2.538%200-3.9%201.739-3.9%203.76s1.268%203.29%203.336%203.29c3.29%200%204.935-3.431%204.935-7.332%200-3.619-1.692-6.627-5.687-6.627-4.183%200-7.52%203.055-10.763%209.87h-.423c.423-2.021.658-3.572.658-4.559%200-3.525-2.115-5.264-5.499-5.264-2.96%200-5.78%201.363-8.883%203.854.893.987%201.645%202.256%202.491%203.807%202.021-1.833%203.478-2.679%204.935-2.679%201.081%200%201.551.705%201.551%201.88%200%201.645-.94%205.311-2.726%209.776-.705%201.739-1.363%202.115-2.679%202.115-2.02%200-3.572-.141-4.324-.141-.329%201.692-1.08%203.431-1.786%205.17%202.632-.141%2018.33-.141%2021.197%200Z'/%3e%3c/g%3e%3c/svg%3e"
  189. data-domain="leereamsnyder.com"
  190. ><svg xmlns="http://www.w3.org/2000/svg"
  191. width="24" height="24" viewBox="0 0 24 24" fill="none"
  192. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  193. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  194. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  195. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  196. </svg>
  197. <span class="sr-only">[archive]</span></a></em></cite></p>
  198. </blockquote>
  199. <p>Ça commence par le classique «&nbsp;pour ou contre Tailwind&nbsp;» mais après il y a des choses&nbsp;inspirantes.</p>
  200. <a href="#hr-131" title="Lien vers cette section de la page"><hr id="hr-131" /></a>
  201. <blockquote lang="en">
  202. <p>quick q, however: how do they get off the worm when they’ve arrived at their&nbsp;destination</p>
  203. <p>keep noticing that the movie cuts before they get off, Denis my friend you can’t fool me, how do you stop riding the worm, answer&nbsp;us</p>
  204. <p><cite><em><a data-link-domain="youngvulgarian.substack.com" href="https://youngvulgarian.substack.com/p/sydney-sweeney-if-youre-free-on-thursday" hreflang="en"
  205. title="Consultation de l’article (anglais)">Sydney Sweeney, if you’re free on Thursday,</a>
  206. <a href="/david/cache/2024/0e3d54128711421c0878723dafed66e8/" hreflang="en"
  207. data-tippy data-description="Behold! I have had a thought."
  208. data-source="https://youngvulgarian.substack.com/p/sydney-sweeney-if-youre-free-on-thursday"
  209. data-date="2024-03-23"
  210. data-favicon="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaf53371-1861-41b7-8e48-82787a877e62%2Ffavicon-16x16.png"
  211. data-domain="youngvulgarian.substack.com"
  212. ><svg xmlns="http://www.w3.org/2000/svg"
  213. width="24" height="24" viewBox="0 0 24 24" fill="none"
  214. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  215. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  216. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  217. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  218. </svg>
  219. <span class="sr-only">[archive]</span></a></em></cite></p>
  220. </blockquote>
  221. <p>Tiens c’est vrai ça&#8239;! 🤔🤯</p>
  222. <nav>
  223. <p>
  224. <a href="/david/2024/dependance/"
  225. title="Liste de tous les articles 2024 associés à cette étiquette"
  226. rel="tag">#dépendance</a>
  227. <a href="/david/2024/psychologie/"
  228. title="Liste de tous les articles 2024 associés à cette étiquette"
  229. rel="tag">#psychologie</a>
  230. <a href="/david/2024/technique/"
  231. title="Liste de tous les articles 2024 associés à cette étiquette"
  232. rel="tag">#technique</a>
  233. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  234. </p>
  235. </nav>
  236. <nav>
  237. <p>
  238. <a rel="prev"
  239. href="/david/2024/03/21/"
  240. title="Publication précédente : Fourchette">← Précédent</a> •
  241. <a href="/david/2024/" title="Liste des publications récentes">↑ En 2024</a>
  242. • <a rel="next"
  243. href="/david/2024/03/24/"
  244. title="Publication suivante : Cage">Suivant →</a>
  245. </p>
  246. </nav>
  247. <form action="/david/recherche/" method="get">
  248. <fieldset>
  249. <legend>Recherche</legend>
  250. <label for="input-search">Termes de votre recherche :</label>
  251. <input id="input-search" type="search" name="s" aria-describedby="indexation-infos" required>
  252. <input type="submit" value="Chercher">
  253. <p id="indexation-infos">
  254. <small>
  255. Seuls les contenus de ces 8 dernières années sont indexés.
  256. </small>
  257. </p>
  258. </fieldset>
  259. </form>
  260. <aside>
  261. <theme-toggle></theme-toggle>
  262. </aside>
  263. </article>
  264. <hr>
  265. <footer>
  266. <p>
  267. <a href="/david/" title="Aller à l’accueil">Accueil</a>
  268. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  269. <a href="http://larlet.com"
  270. title="Go to my English profile"
  271. data-instant>Pro</a>
  272. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">Email</a>
  273. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">Légal</abbr>
  274. </p>
  275. <template id="theme-selector">
  276. <form>
  277. <style type="text/css">
  278. fieldset div {
  279. text-align: center;
  280. }
  281. </style>
  282. <fieldset>
  283. <legend>Thème</legend>
  284. <div>
  285. <label>
  286. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  287. Auto
  288. </label>
  289. <label>
  290. <input type="radio" value="dark" name="chosen-color-scheme">
  291. Foncé
  292. </label>
  293. <label>
  294. <input type="radio" value="light" name="chosen-color-scheme">
  295. Clair
  296. </label>
  297. </div>
  298. </fieldset>
  299. </form>
  300. </template>
  301. </footer>
  302. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  303. <script>
  304. class ThemeToggle extends HTMLElement {
  305. constructor() {
  306. super()
  307. const themeSelectorTemplate = document.querySelector('#theme-selector')
  308. const form = themeSelectorTemplate.content.firstElementChild
  309. this.attachShadow({ mode: 'open' })
  310. this.shadowRoot.appendChild(form.cloneNode(true))
  311. }
  312. connectedCallback() {
  313. const form = this.shadowRoot.querySelector('form')
  314. form.addEventListener('change', (e) => {
  315. const chosenColorScheme = e.target.value
  316. localStorage.setItem('theme', chosenColorScheme)
  317. toggleTheme(chosenColorScheme)
  318. })
  319. const selectedTheme = localStorage.getItem('theme')
  320. if (selectedTheme && selectedTheme !== 'undefined') {
  321. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  322. }
  323. }
  324. }
  325. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  326. window.addEventListener('load', () => {
  327. let colorsLayer = undefined
  328. let hasDarkRules = false
  329. for (const styleSheet of Array.from(document.styleSheets)) {
  330. let mediaRules = []
  331. for (const layerRule of styleSheet.cssRules) {
  332. if (!(layerRule instanceof CSSLayerBlockRule)) {
  333. continue
  334. }
  335. if (layerRule.name === 'colors') {
  336. colorsLayer = layerRule
  337. }
  338. for (const cssRule of layerRule.cssRules) {
  339. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  340. continue
  341. }
  342. // WARNING: Safari does not have/supports `conditionText`.
  343. if (cssRule.conditionText) {
  344. if (cssRule.conditionText !== prefersColorSchemeDark) {
  345. continue
  346. }
  347. } else {
  348. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  349. continue
  350. }
  351. }
  352. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  353. }
  354. }
  355. // WARNING: do not try to insert a Rule to a styleSheet you are
  356. // currently iterating on, otherwise the browser will be stuck
  357. // in a infinite loop…
  358. for (const mediaRule of mediaRules) {
  359. // Safari requires the `0` second parameter (even if default).
  360. colorsLayer.insertRule(mediaRule.cssText, 0)
  361. hasDarkRules = true
  362. }
  363. }
  364. if (hasDarkRules) {
  365. if ('customElements' in window && !customElements.get('theme-toggle')) {
  366. customElements.define('theme-toggle', ThemeToggle)
  367. }
  368. }
  369. })
  370. </script>
  371. <script src="/static/david/js/popper-2.11.8.min.js"></script>
  372. <script src="/static/david/js/tippy-bundle-6.3.7.umd.min.js"></script>
  373. <script>
  374. tippy('[data-tippy]', {
  375. content(reference) {
  376. reference.addEventListener('click', (e) => e.preventDefault())
  377. return `
  378. <h3 lang="fr">
  379. <img src="${reference.dataset.favicon}" loading="lazy">
  380. <a href="${reference.dataset.source}"
  381. >Article sur ${reference.dataset.domain}</a></h3>
  382. <p lang="${reference.hreflang}"><em>${reference.dataset.description}</em></p>
  383. <div class="tippy-links" lang="fr">
  384. <a href="${reference.href}">Archive au ${reference.dataset.date}</a>
  385. </div>
  386. `
  387. },
  388. allowHTML: true,
  389. interactive: true,
  390. delay: [150, 700],
  391. hideOnClick: false
  392. })
  393. </script>
  394. <script type="module">
  395. import { annotate } from '/static/david/js/rough-notation-0.5.1.esm.min.js'
  396. const markObserver = new IntersectionObserver((entries, observer) => {
  397. const computedStyle = getComputedStyle(document.documentElement)
  398. const markBackground = computedStyle.getPropertyValue('--mark-background')
  399. for (const entry of entries) {
  400. if (entry.intersectionRatio === 0) continue
  401. const markElement = entry.target
  402. markElement.style.backgroundColor = 'inherit'
  403. const annotation = annotate(
  404. markElement, {
  405. type: 'highlight',
  406. multiline: true,
  407. color: markBackground,
  408. // animate: !window.matchMedia('(prefers-reduced-motion: reduce)').matches
  409. animate: false
  410. }
  411. )
  412. annotation.show()
  413. observer.unobserve(markElement)
  414. }
  415. }, {threshold: 1.0})
  416. for (const markElement of document.querySelectorAll('mark')) {
  417. markObserver.observe(markElement)
  418. }
  419. </script>
  420. </body>
  421. </html>