Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

index.html 21KB

10ヶ月前
10ヶ月前
8ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
9ヶ月前
10ヶ月前
10ヶ月前
9ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
9ヶ月前
9ヶ月前
9ヶ月前
8ヶ月前
8ヶ月前
8ヶ月前
8ヶ月前
8ヶ月前
8ヶ月前
8ヶ月前
9ヶ月前
10ヶ月前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428
  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. Vocabulaire
  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="Les tensions et processer les tensions. Essayez de remplacer les termes « problèmes » et « solutions » par « tensions » et « processer ». Les êtres humains semblent être enclins de manière innée à attendre la dernière minute pour gérer ce qu’ils perçoivent comme des problèmes. Par conséquent, l’emploi de ce langage « négatif » dans le monde de l’entreprise peut donner naissance à une culture de l’évitement ou de l’inquiétude inutile. Le terme « tension », comme employé en Holacracy, est neutre et signifie simplement la perception d’un écart entre la réalité et ce qu’elle pourrait être.">
  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>Vocabulaire</h1>
  136. <p>Le <time datetime="2024-01-05">5 janvier 2024</time></p>
  137. </hgroup>
  138. </header>
  139. <nav>
  140. <p>
  141. <a rel="prev"
  142. href="/david/2024/01/04/"
  143. title="Publication précédente : Repos">← 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/06/"
  150. title="Publication suivante : Objectif">Suivant →</a>
  151. </p>
  152. </nav>
  153. <blockquote>
  154. <p>Les tensions et processer les tensions. Essayez de remplacer les termes «&nbsp;problèmes&nbsp;» et «&nbsp;solutions&nbsp;» par «&nbsp;tensions&nbsp;» et «&nbsp;processer&nbsp;». Les êtres humains semblent être enclins de manière innée à attendre la dernière minute pour gérer ce qu’ils perçoivent comme des problèmes. Par conséquent, l’emploi de ce langage «&nbsp;négatif&nbsp;» dans le monde de l’entreprise peut donner naissance à une culture de l’évitement ou de l’inquiétude inutile. Le terme «&nbsp;tension&nbsp;», comme employé en <em>Holacracy</em>, est neutre et signifie simplement <em>la perception d’un écart entre la réalité et ce qu’elle pourrait&nbsp;être.</em></p>
  155. <p>Une tension n’est pas un «&nbsp;problème&nbsp;» et n’induit pas nécessairement une «&nbsp;solution&nbsp;». Elle met en lumière une occasion de rapprocher la situation actuelle de ce qu’elle pourrait être — ce qui sous-entend généralement une amélioration. <mark>Holacracy emploie le terme «&nbsp;processer&nbsp;» pour décrire ce phénomène, qui évite la notion de résultat fixe et définitif et illustre un cheminement fait d’une adaptation et de progrès&nbsp;permanents.</mark></p>
  156. <p>Des propositions plutôt que des problèmes. Le changement qui va de pair avec celui que je viens de décrire est de prendre l’habitude de faire des «&nbsp;propositions&nbsp;» au lieu de se contenter de se lamenter. Lorsque vous ressentez une tension, demandez-vous&nbsp;: «&nbsp;Qu’est-ce qui pourrait améliorer la situation&#8239;? Que pourrais-je proposer&#8239;?&nbsp;» Encouragez votre équipe à en faire de même. La proposition ne se doit pas d’être une «&nbsp;solution&nbsp;» parfaite — c’est un moyen d’entamer la conversation de manière proactive et créative, et non&nbsp;négative.</p>
  157. <p><cite><em>La révolution Holacracy</em>, Brian J. Robertson, chapitre «&nbsp;Changez votre langage, changez votre&nbsp;culture&nbsp;»</cite></p>
  158. </blockquote>
  159. <p>On pourrait y voir de la <a data-link-domain="fr.wikipedia.org" href="https://fr.wikipedia.org/wiki/Novlangue">novlangue</a> de <em>manager</em> mais il y a cette idée derrière qu’on ne tente pas de résoudre un problème mais de libérer —&nbsp;peut-être temporairement&nbsp;— une tension qui me plait bien. Ce que l’on aborde alors ensemble ce sont les actions qui nous semblent aller vers <em>un</em> mieux parmi l’arbre des possibles. L’enjeu d’un collectif qui se respecte est de trouver la légitimité individuelle nécessaire pour continuer à explorer des pistes ne faisant pas forcément l’unanimité lors d’une première itération. <em>Holacratie</em> semble mettre des règles explicites sur ces&nbsp;pratiques.</p>
  160. <p>J’apprécie particulièrement le couple proposition / objections. Difficile de sortir d’une forme de confort une fois celui-ci établi. Peut-être que le <em>refus de confort</em> pourrait être une notion au même titre que le <a href="/david/2020/10/08/"><em>refus de parvenir</em></a>&#8239;? Accepter le risque de l’inconnu pour ne pas se perdre dans un hier déjà expérimenté, déjà&nbsp;dé·fini.</p>
  161. <blockquote>
  162. <p>Des objections&#8239;? La prochaine fois que vous recherchez l’adhésion de votre équipe à une décision, modifiez votre mode de communication. Ne demandez pas&nbsp;: «&nbsp;Est-ce que tout le monde est d’accord&#8239;?&nbsp;» ou «&nbsp;Ma proposition plaît-elle à tout le monde&#8239;?&nbsp;». Ces questions débouchent sur une discussion longue et pénible. Demandez-leur plutôt&nbsp;: <mark>«&nbsp;Y a-t-il des objections à l’adoption de cette proposition&#8239;?&nbsp;»</mark> Et définissez une objection comme «&nbsp;une raison pour laquelle l’adoption de cette proposition causerait du tort ou nous ferait&nbsp;régresser&#8239;?&nbsp;»</p>
  163. <p>Voici une autre formulation&nbsp;: «&nbsp;Est-ce que quelqu’un considère la mise en œuvre de cette proposition comme pas assez sûre, sachant que nous pourrons revoir cette décision si elle ne porte pas ses fruits&#8239;?&nbsp;» Ce simple changement de langage peut vous faire gagner beaucoup de temps et alléger considérablement le processus&nbsp;décisionnel.</p>
  164. <p><cite><em>Ibid.</em></cite></p>
  165. </blockquote>
  166. <a href="#hr-7" title="Lien vers cette section de la page"><hr id="hr-7" /></a>
  167. <p><a data-link-domain="piaille.fr" href="https://piaille.fr/@nicosomb/111696724396676161">Nicolas L.</a> et <a data-link-domain="mamot.fr" href="https://mamot.fr/@nhoizey/111697128068526484">Nicolas H.</a> me font des retours sur le nouveau design en passant par Mastodon. Les choix respectifs de chacun·e de rendre les réponses publiques ou non enlèvent une partie des échanges mais c’est vraiment chouette d’entamer un processus d’amélioration (de libération de tensions&#8239;?) en commun à ce&nbsp;sujet.</p>
  168. <p>J’essaye de rendre l’épaisseur du soulignement des liens dynamique, lié à la fluidité de la taille du texte&nbsp;🧑‍🔬, peut-être que je devrais rendre la taille des bordures dynamiques aussi&#8239;? Parfois la contrainte technique peut devenir une contrainte éditoriale acceptable. <strong>Cet espace est suffisamment sur-pensé comme&nbsp;ça.</strong></p>
  169. <p>Je commence un thème sombre qui réagit à celui du système d’exploitation par défaut. Surtout pour un besoin personnel pour l’instant, mes yeux en ont besoin. Cela me pousse à ajouter des variables CSS pour les&nbsp;couleurs.</p>
  170. <p>Plus tard, <a data-link-domain="mamot.fr" href="https://mamot.fr/@emmanuelc/111700432836997597">Emmanuel</a> m’enlève une épine du pied sur une formule de grille que je ne comprenais pas totalement. J’apprends des choses au passage. Le copier-coller&#8239;? Oui, mais il faudra toujours finir par le&nbsp;décortiquer.</p>
  171. <p>La CSS progresse, 426&nbsp;lignes ce soir… et un seul <code>breakpoint</code> défini pour forcer une variable maximale sur les grands écrans. J’aime bien cette&nbsp;idée.</p>
  172. <a href="#hr-8" title="Lien vers cette section de la page"><hr id="hr-8" /></a>
  173. <p>Randonnée de 8&#8239;km en famille aujourd’hui, parfois je ne me rends plus trop compte des distances —&nbsp;qui plus est sur un sol difficile. Je voulais surtout savoir jusqu’à quels refuges je pouvais envisager des aventures avec l’enfant dans des conditions hivernales. Chaque année, de nouveaux horizons&nbsp;s’ouvrent.</p>
  174. <a href="#hr-9" title="Lien vers cette section de la page"><hr id="hr-9" /></a>
  175. <blockquote>
  176. <p>— Comment appelle-t-on un groupe de faisans&#8239;? demande Anna.<br />
  177. — Un bouquet, répond Isobel. Un groupe d’étourneaux&#8239;?<br />
  178. — Un murmure.<br />
  179. — De flamants&#8239;?<br />
  180. — Une flamboyance de flamants. De hiboux&#8239;?<br />
  181. Isobel hésite. Sans lever les yeux de son livre, Emily répond à sa place&nbsp;:<br />
  182. — On dit un parlement de hiboux.<br />
  183. — Très bien. Plus difficile alors. Comment appelle-t-on un groupe d’alouettes&#8239;?<br />
  184. — Une exaltation.<br />
  185. — Et de papillons&#8239;?<br />
  186. — Un kaléidoscope de&nbsp;papillons.</p>
  187. <p><cite><em>Alors nous irons trouver la beauté ailleurs</em>, Corinne Morel Darleux citant Dominique Fortier sur Emily Dickinson, <em>Les Villes de&nbsp;papiers</em></cite></p>
  188. </blockquote>
  189. <p>💚 Quand l’ornithologie fait de la&nbsp;poésie.</p>
  190. <nav>
  191. <p>
  192. <a href="/david/2024/apprentissage/"
  193. title="Liste de tous les articles 2024 associés à cette étiquette"
  194. rel="tag">#apprentissage</a>
  195. <a href="/david/2024/decision/"
  196. title="Liste de tous les articles 2024 associés à cette étiquette"
  197. rel="tag">#décision</a>
  198. <a href="/david/2024/equipe/"
  199. title="Liste de tous les articles 2024 associés à cette étiquette"
  200. rel="tag">#équipe</a>
  201. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  202. </p>
  203. </nav>
  204. <nav>
  205. <p>
  206. <a rel="prev"
  207. href="/david/2024/01/04/"
  208. title="Publication précédente : Repos">← Précédent</a> •
  209. <a href="/david/2024/" title="Liste des publications récentes">↑ En 2024</a>
  210. • <a rel="next"
  211. href="/david/2024/01/06/"
  212. title="Publication suivante : Objectif">Suivant →</a>
  213. </p>
  214. </nav>
  215. <form action="/david/recherche/" method="get">
  216. <fieldset>
  217. <legend>Recherche</legend>
  218. <label for="input-search">Termes de votre recherche :</label>
  219. <input id="input-search" type="search" name="s" aria-describedby="indexation-infos" required>
  220. <input type="submit" value="Chercher">
  221. <p id="indexation-infos">
  222. <small>
  223. Seuls les contenus de ces 8 dernières années sont indexés.
  224. </small>
  225. </p>
  226. </fieldset>
  227. </form>
  228. <aside>
  229. <theme-toggle></theme-toggle>
  230. </aside>
  231. </article>
  232. <hr>
  233. <footer>
  234. <p>
  235. <a href="/david/" title="Aller à l’accueil">Accueil</a>
  236. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  237. <a href="http://larlet.com"
  238. title="Go to my English profile"
  239. data-instant>Pro</a>
  240. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">Email</a>
  241. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">Légal</abbr>
  242. </p>
  243. <template id="theme-selector">
  244. <form>
  245. <style type="text/css">
  246. fieldset div {
  247. text-align: center;
  248. }
  249. </style>
  250. <fieldset>
  251. <legend>Thème</legend>
  252. <div>
  253. <label>
  254. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  255. Auto
  256. </label>
  257. <label>
  258. <input type="radio" value="dark" name="chosen-color-scheme">
  259. Foncé
  260. </label>
  261. <label>
  262. <input type="radio" value="light" name="chosen-color-scheme">
  263. Clair
  264. </label>
  265. </div>
  266. </fieldset>
  267. </form>
  268. </template>
  269. </footer>
  270. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  271. <script>
  272. class ThemeToggle extends HTMLElement {
  273. constructor() {
  274. super()
  275. const themeSelectorTemplate = document.querySelector('#theme-selector')
  276. const form = themeSelectorTemplate.content.firstElementChild
  277. this.attachShadow({ mode: 'open' })
  278. this.shadowRoot.appendChild(form.cloneNode(true))
  279. }
  280. connectedCallback() {
  281. const form = this.shadowRoot.querySelector('form')
  282. form.addEventListener('change', (e) => {
  283. const chosenColorScheme = e.target.value
  284. localStorage.setItem('theme', chosenColorScheme)
  285. toggleTheme(chosenColorScheme)
  286. })
  287. const selectedTheme = localStorage.getItem('theme')
  288. if (selectedTheme && selectedTheme !== 'undefined') {
  289. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  290. }
  291. }
  292. }
  293. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  294. window.addEventListener('load', () => {
  295. let colorsLayer = undefined
  296. let hasDarkRules = false
  297. for (const styleSheet of Array.from(document.styleSheets)) {
  298. let mediaRules = []
  299. for (const layerRule of styleSheet.cssRules) {
  300. if (!(layerRule instanceof CSSLayerBlockRule)) {
  301. continue
  302. }
  303. if (layerRule.name === 'colors') {
  304. colorsLayer = layerRule
  305. }
  306. for (const cssRule of layerRule.cssRules) {
  307. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  308. continue
  309. }
  310. // WARNING: Safari does not have/supports `conditionText`.
  311. if (cssRule.conditionText) {
  312. if (cssRule.conditionText !== prefersColorSchemeDark) {
  313. continue
  314. }
  315. } else {
  316. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  317. continue
  318. }
  319. }
  320. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  321. }
  322. }
  323. // WARNING: do not try to insert a Rule to a styleSheet you are
  324. // currently iterating on, otherwise the browser will be stuck
  325. // in a infinite loop…
  326. for (const mediaRule of mediaRules) {
  327. // Safari requires the `0` second parameter (even if default).
  328. colorsLayer.insertRule(mediaRule.cssText, 0)
  329. hasDarkRules = true
  330. }
  331. }
  332. if (hasDarkRules) {
  333. if ('customElements' in window && !customElements.get('theme-toggle')) {
  334. customElements.define('theme-toggle', ThemeToggle)
  335. }
  336. }
  337. })
  338. </script>
  339. <script src="/static/david/js/popper-2.11.8.min.js"></script>
  340. <script src="/static/david/js/tippy-bundle-6.3.7.umd.min.js"></script>
  341. <script>
  342. tippy('[data-tippy]', {
  343. content(reference) {
  344. reference.addEventListener('click', (e) => e.preventDefault())
  345. return `
  346. <h3 lang="fr">
  347. <img src="${reference.dataset.favicon}" loading="lazy">
  348. <a href="${reference.dataset.source}"
  349. >Article sur ${reference.dataset.domain}</a></h3>
  350. <p lang="${reference.hreflang}"><em>${reference.dataset.description}</em></p>
  351. <div class="tippy-links" lang="fr">
  352. <a href="${reference.href}">Archive au ${reference.dataset.date}</a>
  353. </div>
  354. `
  355. },
  356. allowHTML: true,
  357. interactive: true,
  358. delay: [150, 700],
  359. hideOnClick: false
  360. })
  361. </script>
  362. <script type="module">
  363. import { annotate } from '/static/david/js/rough-notation-0.5.1.esm.min.js'
  364. const markObserver = new IntersectionObserver((entries, observer) => {
  365. const computedStyle = getComputedStyle(document.documentElement)
  366. const markBackground = computedStyle.getPropertyValue('--mark-background')
  367. for (const entry of entries) {
  368. if (entry.intersectionRatio === 0) continue
  369. const markElement = entry.target
  370. markElement.style.backgroundColor = 'inherit'
  371. const annotation = annotate(
  372. markElement, {
  373. type: 'highlight',
  374. multiline: true,
  375. color: markBackground,
  376. // animate: !window.matchMedia('(prefers-reduced-motion: reduce)').matches
  377. animate: false
  378. }
  379. )
  380. annotation.show()
  381. observer.unobserve(markElement)
  382. }
  383. }, {threshold: 1.0})
  384. for (const markElement of document.querySelectorAll('mark')) {
  385. markObserver.observe(markElement)
  386. }
  387. </script>
  388. </body>
  389. </html>