A place to cache linked articles (think custom and personal wayback machine)
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

index.html 23KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  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>Coremuneration - Movilab.org (archive) — David Larlet</title>
  13. <meta name="description" content="Publication mise en cache pour en conserver une trace.">
  14. <!-- That good ol' feed, subscribe :). -->
  15. <link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
  16. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  17. <link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
  18. <link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
  19. <link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
  20. <link rel="manifest" href="/static/david/icons2/site.webmanifest">
  21. <link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
  22. <link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
  23. <meta name="msapplication-TileColor" content="#f7f7f7">
  24. <meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
  25. <meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
  26. <meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
  27. <!-- Documented, feel free to shoot an email. -->
  28. <link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
  29. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  30. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  31. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  32. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  33. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  34. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  35. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  36. <script>
  37. function toggleTheme(themeName) {
  38. document.documentElement.classList.toggle(
  39. 'forced-dark',
  40. themeName === 'dark'
  41. )
  42. document.documentElement.classList.toggle(
  43. 'forced-light',
  44. themeName === 'light'
  45. )
  46. }
  47. const selectedTheme = localStorage.getItem('theme')
  48. if (selectedTheme !== 'undefined') {
  49. toggleTheme(selectedTheme)
  50. }
  51. </script>
  52. <meta name="robots" content="noindex, nofollow">
  53. <meta content="origin-when-cross-origin" name="referrer">
  54. <!-- Canonical URL for SEO purposes -->
  55. <link rel="canonical" href="https://movilab.org/wiki/Coremuneration">
  56. <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">
  57. <article>
  58. <header>
  59. <h1>Coremuneration - Movilab.org</h1>
  60. </header>
  61. <nav>
  62. <p class="center">
  63. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  64. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  65. </svg> Accueil</a> •
  66. <a href="https://movilab.org/wiki/Coremuneration" title="Lien vers le contenu original">Source originale</a>
  67. </p>
  68. </nav>
  69. <hr>
  70. <h2><span class="mw-headline" id="Un_budget_contributif.2C_c.E2.80.99est_quoi_.3F.C2.A0">Un budget contributif, c’est quoi ? </span></h2>
  71. <p>Un budget contributif est un outil qui permet à un collectif d'organiser la rémunération des membres de manière transparente.
  72. </p>
  73. <p>Le collectif dispose d’un budget et va permettre à ses membres de se rétribuer dans ce budget pour le travail qu'ils effectuent. Chaque membre peut demander une rémunération à hauteur de ce qu’il estime juste, et ce en l’affichant en toute transparence au reste du collectif, qui peut en cas d’abus ou d'incompréhension, remettre en question sa demande. Le montant de la rémunération se définit selon le budget disponible, le temps passé, ses besoins financiers, ses compétences, la difficulté ou l'exigence de la réalisation, ce que prennent les autres. En ce sens, seul nous même pouvons vraiment évaluer la rétribution.
  74. </p>
  75. <p>La rémunération se fait à posteriori ; nous "donnons" d'abord le meilleur de nous même, puis "nous nous donnons" une rétribution.
  76. </p>
  77. <p>Nous appelons cette modalité "rétribution libre" ou "rémunération libre".
  78. </p>
  79. <h2><span class="mw-headline" id="Pourquoi_c.E2.80.99est_utile_.3F.C2.A0">Pourquoi c’est utile  ? </span></h2>
  80. <ul><li> Ce budget contributif permet aux personnes de se partager une enveloppe budgétaire sans avoir à planifier la répartition en amont. Il s'agit d'une troisième voie salutaire entre la tentation de concentrer les ressources financière sur un poste salarié qui deviendra omniprésent et parfois omnipotent et la tentation de rester dans un fonctionnement sans rémunération qui risque d'épuiser les membres ou de ne jamais bénéficier pleinement de l'énergie disponible. Ce modèle favorise le maintien d'un investissement et de la contribution sur le long terme pour certaines personnes, voir pour développer un nouveau modèle, <a href="/wiki/Fichier:Statut_travailleurs_contributeur.png" title="Fichier:Statut travailleurs contributeur.png">le "contributeur salarié"</a> (le salariat passe dès lors par une structure de type CAE, Coopérative d'Activite et d'Emploi qui permet d'agréger les différents revenus contributifs sous un CDI).</li></ul>
  81. <ul><li> Ce budget contributif permet d'incarner des principes collaboratifs et d'horizontalité managériale. On fait l'économie d'une gestion des finances et des rémunérations par un membre en particulier, un chef ou une cheffe qui disposerait d'un pouvoir de répartition de valeur. Le fait que chaque membre peut à tout moment non seulement voir ce que les autres membres prélèvent, mais également s’y opposer, en fait un outil démocratique intéressant. </li></ul>
  82. <h2><span class="mw-headline" id="De_o.C3.B9_.C3.A7a_vient_.3F">De où ça vient ?</span></h2>
  83. <p>C'est une longue histoire, mais un certain <a rel="nofollow" class="external text" href="https://mako.cc/writing/funding_volunteers/funding_volunteers.html">Benjamin Mako Hill</a> disait "<i>Il est plus facile pour un projet de logiciel libre à succès de recevoir de l'argent que de décider de comment le redistribuer</i>".
  84. </p>
  85. <p>Cette remarque s'applique aussi aux communs ou aux projets autogérés. Des endroits où la contribution est assez libre, où elle se veut ouverte à tous, sur ce que chacun souhaite fournir comme effort au moment voulu. Des espaces où rémunérer les personnes peut vite devenir un sujet épineux. Avez-vous déjà envisager que l'on puisse rémunérer les contributeurs à Wikipédia ? Ce mode de production et de travail très particulier mérite un mode de rémunération lui aussi particulier.
  86. </p>
  87. <p>Un autre, pour justifier un refus de donner une subvention, nous disait aussi "<i>Si je vous donne de l'argent dans votre projet cogéré, votre collectif va rentrer en conflit et disparaître</i>". Celui préférait dès lors financer une seule personne dans un projet non collectif et non ouvert.
  88. </p>
  89. <p>D'autres, au moment où de l'argent arrive enfin dans un projet qui a du succès, préféraient payer des prestataires extérieurs novices sur le projet à 1000€ la journée plutôt que de rémunérer les centaines de contributeurs actifs depuis 10 ans, motivés pourtant pour continuer à alimenter le projet. Ils disaient : <i>"Si vous vous payez, il y a conflit d'intérêt, car vous participez à la gouvernance du projet à but non lucratif. Il faut payer des gens qui ne participent pas au projet et sa gouvernance".</i>
  90. </p>
  91. <p>Il a donc fallu trouver des solutions pour résoudre ces principes de plus en plus inacceptables à l'ère des communs comme Wikipédia ou le logiciel libre, véritables entreprises créatrices de valeur pour tous.
  92. </p>
  93. <h2></h2>
  94. <h3><span class="mw-headline" id=".C3.89tape_0_:.C2.A0_Partager_un_Document">Étape 0 :  Partager un Document</span></h3>
  95. <p>Un logiciel est en phase de test pour faciliter les déclarations de contributions et les demandes de rétributions : https://loot-project.gitlab.io/userguide/
  96. </p>
  97. <p>En attendant, nous utilisons encore des tableaux partagés en ligne : <a rel="nofollow" class="external text" href="https://docs.google.com/spreadsheets/d/1_chs0k7y39idaNHiC7UvU41_Cqw1d2sknuAwCxj-O6k/edit#gid=0">Voici un modèle à adapter</a>
  98. </p>
  99. <h3><span class="mw-headline" id=".C3.89tape_1_:_Disposer_d.E2.80.99un_budget">Étape 1 : Disposer d’un budget</span></h3>
  100. <p>Pour bien commencer, mieux vaut disposer d’un budget, qui sera l’enveloppe dans laquelle les contributeurs vont prélever selon leurs interventions. 
  101. </p>
  102. <p>Par souci de transparence, il faut donner la provenance de ce budget ; les montants et l'origine des financements récoltés. 
  103. </p>
  104. <p>Il faut préparer une case “Budget restant” pour évaluer en temps réel l’évolution du budget. 
  105. </p>
  106. <h3><span class="mw-headline" id=".C3.89tape_2_:_Se_mettre_d.E2.80.99accord_sur_un_tarif_horaire_maximum.">Étape 2 : Se mettre d’accord sur un tarif horaire maximum.</span></h3>
  107. <p>Pour éviter que certains se sous-payent et d’autres se sur-payent, il est bon d’avoir un référentiel plébiscité par le collectif. 
  108. </p>
  109. <p>Nous définissons néanmoins notre rémunération librement selon le nombre d'heures passées, nos besoins financiers, nos compétences, la difficulté ou l'exigence de la réalisation et l’intérêt individuel de la réalisation. Il faut prendre en compte l'ensemble du temps passé ( ce que l'on ne fait pas toujours en prestation). Et bien sûr libre à chacun de suivre le taux horaire indiqué ou de se rétribuer plus, moins ou même pas du tout. Par exemple, si notre contribution au collectif apporte un intérêt individuel fort, il peut être justifié de se rémunérer moins que si ce n’était pas le cas. Par exemple, si j'améliore mon tiers lieu que j'utilise tous les jours, je bénéficie donc directement de l'amélioration. C’est ce qui explique d’ailleurs d’un projet comme Wikipedia n’a pas besoin de rémunérer ses contributeurs pour fonctionner. 
  110. </p>
  111. <p>Ce tarif horaire maximum ou de référence est complexe à déterminer mais peut-être creusé par rapport aux coûts d'un salarié au régime général.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1">[1]</a></sup>
  112. </p>
  113. <p>C'est au fil du temps que les choses vont s'ajuster et que les personnes vont trouver leur équilibre. Au départ, certains osent pas, d'autres osent trop. En discutant ensemble et en faisant des points réguliers, le collectif va apprendre à se positionner et chacun trouvera son équilibre. Attention à ne pas reproduire des écarts hérités des dominations sociales et culturelles ; par exemple, ce n'est pas parce que les femmes trouvent un équilibre satisfaisant plus bas que celui des hommes que votre collectif doit tolérer cette situation. Une fois bien mis en place, la gestion du budget devient moins chronophage pour le collectif et contribue à apaiser certaines tensions (par exemple, chez les bénévoles, cela permet d'arrêter de reprocher aux autres de ne pas faire les choses, si l'on est frustré, on peut au moins compenser avec plus de rétribution financière).
  114. </p>
  115. <h3><span class="mw-headline" id=".C3.89tape_3_:_Lister_les_noms_des_contributeurs">Étape 3 : Lister les noms des contributeurs</span></h3>
  116. <p>Ils sont le cœur du budget contributif, ils doivent tous avoir un accès modifiable au document.
  117. </p>
  118. <p>Assurez-vous que l'ensemble des contributeurs et contributrices potentielles à vos projets disposent des informations nécessaires.
  119. </p>
  120. <p>Dans la notice de votre outil n'oubliez pas d'indiquer si les demandes de rétributions sont déclarées Hors Taxes ou TTC.
  121. </p>
  122. <h3><span class="mw-headline" id=".C3.89tape_4_:_Contribuer_.E2.80.9C.C3.A0_la_carte.E2.80.9D">Étape 4 : Contribuer “à la carte”</span></h3>
  123. <p>Dans la “partie contribution”, on dispose d’un tableau hebdomadaire (on le rythme une colonne par dimanche, pour permettre aux contributeurs de travailler le week-end) et annuel. 
  124. </p>
  125. <p>Le contributeur va alors pouvoir indiquer les montants qu’il prélève, et les justifier en insérant une “remarque” sur la cellule correspondante. 
  126. </p>
  127. <p>Pour ce faire, pas besoin d’écrire un roman, mais mieux vaut être précis. 
  128. </p>
  129. <p>Astuce : pour chaque contribution, vous pouvez indiquer la somme prélevée correspondante et au choix, indiquer :
  130. </p>
  131. <ul><li> le jour </li>
  132. <li> le temps passé approximatif (possible de le laisser facultatif)</li>
  133. <li> l’activité horaire et/ou l menée à bien</li></ul>
  134. <p>N’oubliez pas que tous les autres membres voient et peuvent s’opposer à l’évaluation que vous faites de votre contribution !
  135. </p>
  136. <p>Avec cette partie contribution, on peut ainsi suivre les dépenses hebdomadaires, voire limiter son budget hebdomadaire en divisant son enveloppe par 52 semaines. 
  137. </p>
  138. <h3><span class="mw-headline" id=".C3.89tape_5_:_Facturer_ses_contributions">Étape 5 : Facturer ses contributions</span></h3>
  139. <p>A force de contribuer, un certain montant s’accumule dans la “partie facturation”. Ce montant reste virtuel, il faut le récupérer en émettant une facture à la structure porteuse du dispositif. 
  140. </p>
  141. <p>On indique alors dans la cellule “1ere facture” le montant qu’on a facturé, et on ajoute en “remarque” la date d’envoi de cette facture à la structure porteuse. 
  142. </p>
  143. <p>Astuce : insérer dans le document un lien ou un e-mail pour faciliter l’envoi de cette facture par le contributeur. 
  144. </p>
  145. <p>Rien ne nous oblige à facturer le montant total de la contribution accumulée, mais il est préférable de facturer rond, c’est-à-dire en ne coupant pas les mois. 
  146. </p>
  147. <p>Par ex : je facture du 1er juin au 30 septembre, et je l’indique sur ma facture à la structure porteuse. 
  148. </p>
  149. <p>En général, on émet une facture à partir du moment où on a accumulé une somme assez conséquente (mais à moins de 5000€, car les virements des comptes courants ne dépassent pas 5000€ par jour, ça va embêter le comptable de votre structure porteuse si c’est une association).
  150. </p>
  151. <p>Pensez à facturer avant la fin de l’année comptable !!!
  152. </p>
  153. <h3><span class="mw-headline" id=".C3.89tape_6_:_Veiller_au_suivi_des_d.C3.A9penses.C2.A0">Étape 6 : Veiller au suivi des dépenses </span></h3>
  154. <p>Avec ce budget contributif, le coordinateur ou le comptable de votre dispositif pourra suivre les dépenses en temps réel pour ajuster au mieux les activités à l’enveloppe restante (“dois-je aller chercher davantage de subventions ?”)
  155. </p>
  156. <p>En y insérant un tableau de suivi des notes de frais, ainsi qu’un tableau des dépenses directes par carte bleue depuis le compte-courant du dispositif, le budget contributif peut devenir un outil incontournable pour gérer efficacement son dispositif … à condition d’avoir bien veillé à ce que tous les contributeurs remplissent régulièrement le tableau !
  157. </p>
  158. <p>Attention, dans les règles, vous pouvez par exemple établir le fait que tout le monde puisse émettre un droit de blocage sur une rémunération, pour limiter une dérive par exemple.
  159. </p>
  160. <h2><span class="mw-headline" id="Exemples_d.27applications_de_la_cor.C3.A9mun.C3.A9ration.">Exemples d'applications de la corémunération.</span></h2>
  161. <h2><span class="mw-headline" id="R.C3.A9mun.C3.A9ration_dirigeant_dans_une_association">Rémunération dirigeant dans une association</span></h2>
  162. <p><a rel="nofollow" class="external free" href="https://www.service-public.fr/associations/vosdroits/F1927">https://www.service-public.fr/associations/vosdroits/F1927</a>
  163. </p>
  164. <p>Pour qu'un dirigeant puisse être rémunéré, cela doit être prévu par les statuts de l'association et voté en assemblée générale. Toute association peut décider de rémunérer tout ou partie de ses dirigeants. La rémunération de chaque dirigeant ne doit pas dépasser les ¾ du <abbr>Smic</abbr>, soit 1 154,56 € brut par mois. (La facturation est considérée comme une forme de rémunération, le montant précisé ci-contre est à transformer en montant HT). https://www.service-public.fr/associations/vosdroits/F1927
  165. </p>
  166. <p><b>Voici un article ajouté dans les statuts de certaines asso le pratiquant :</b>
  167. </p>
  168. <p>"ARTICLE 8 bis : RÉTRIBUTIONS CONTRIBUTIVES Sans remettre en cause le caractère désintéressé de l’association, les membres contributeurs peuvent bénéficier de rétributions en tant que dirigeants. Dans les limites légales, l’association peut également faire appel à ses membres en tant que prestataires ou dans le cadre d’un contrat de travail salarié. Ces différents aspects seront encadrés par le CA"
  169. </p>
  170. <h2><span class="mw-headline" id="Autres_ressources_et_pages_li.C3.A9es">Autres ressources et pages liées</span></h2>
  171. <div class="mw-references-wrap"><ol class="references">
  172. <li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text">Ainsi, nous pouvons réfléchir à ce que nous coûterait un salarié avec l'ensemble des cotisations et imaginer comment pourrait être partagé ce revenu entre plusieurs personnes<b>.</b> Pour donner à titre indicatif un taux horaire pas très éloigné de celui d'un salarié. Par exemple, une moyenne de 22,5 € par heure correspond à une rémunération net de 1760€ ( si 35h par semaine et avec prise en compte de la mutuelle/prévoyance et congés payés et jours fériés, soit 134h/mois). 13€ correspond à un SMIC, du fait des aides Fillon, CICE et autre, les réductions de cotisations étant très fortes. Il faut que la rétribution intègre le coût de gestion administratif et comptable, les frais, la possible TVA payée par le contributeur selon son statut, la précarité du modèle si toutefois les espaces de contributions ne sont pas abondants dans l'environnement proche....</span>
  173. </li>
  174. </ol></div>
  175. </article>
  176. <hr>
  177. <footer>
  178. <p>
  179. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  180. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  181. </svg> Accueil</a> •
  182. <a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
  183. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
  184. </svg> Suivre</a> •
  185. <a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
  186. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
  187. </svg> Pro</a> •
  188. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
  189. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
  190. </svg> Email</a> •
  191. <abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
  192. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
  193. </svg> Légal</abbr>
  194. </p>
  195. <template id="theme-selector">
  196. <form>
  197. <fieldset>
  198. <legend><svg class="icon icon-brightness-contrast">
  199. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
  200. </svg> Thème</legend>
  201. <label>
  202. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  203. </label>
  204. <label>
  205. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  206. </label>
  207. <label>
  208. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  209. </label>
  210. </fieldset>
  211. </form>
  212. </template>
  213. </footer>
  214. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  215. <script>
  216. function loadThemeForm(templateName) {
  217. const themeSelectorTemplate = document.querySelector(templateName)
  218. const form = themeSelectorTemplate.content.firstElementChild
  219. themeSelectorTemplate.replaceWith(form)
  220. form.addEventListener('change', (e) => {
  221. const chosenColorScheme = e.target.value
  222. localStorage.setItem('theme', chosenColorScheme)
  223. toggleTheme(chosenColorScheme)
  224. })
  225. const selectedTheme = localStorage.getItem('theme')
  226. if (selectedTheme && selectedTheme !== 'undefined') {
  227. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  228. }
  229. }
  230. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  231. window.addEventListener('load', () => {
  232. let hasDarkRules = false
  233. for (const styleSheet of Array.from(document.styleSheets)) {
  234. let mediaRules = []
  235. for (const cssRule of styleSheet.cssRules) {
  236. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  237. continue
  238. }
  239. // WARNING: Safari does not have/supports `conditionText`.
  240. if (cssRule.conditionText) {
  241. if (cssRule.conditionText !== prefersColorSchemeDark) {
  242. continue
  243. }
  244. } else {
  245. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  246. continue
  247. }
  248. }
  249. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  250. }
  251. // WARNING: do not try to insert a Rule to a styleSheet you are
  252. // currently iterating on, otherwise the browser will be stuck
  253. // in a infinite loop…
  254. for (const mediaRule of mediaRules) {
  255. styleSheet.insertRule(mediaRule.cssText)
  256. hasDarkRules = true
  257. }
  258. }
  259. if (hasDarkRules) {
  260. loadThemeForm('#theme-selector')
  261. }
  262. })
  263. </script>
  264. </body>
  265. </html>