all repos — home @ bd894e307ed2df0ee74cd7e1ef74ef7b52a84246

🎉 Init site
Tim Izzo tim@octree.ch
Thu, 20 Oct 2022 10:17:59 +0200
commit

bd894e307ed2df0ee74cd7e1ef74ef7b52a84246

A .gitignore

@@ -0,0 +1,1 @@

+node_modules/
A README.md

@@ -0,0 +1,3 @@

+## Inspiration + +https://www.ecliptik.com/
A bin/build.js

@@ -0,0 +1,60 @@

+const fs = require("fs"); +const path = require("path"); +const marked = require("marked"); + +const SITE_TITLE = "Tim Izzo @5ika.ch"; +const INPUT_PATH = "./pages"; +const OUTPUT_PATH = "./build"; + +const template = fs.readFileSync("src/template.html", "utf-8"); + +marked.use({ + renderer: { + link(href, title, text) { + const isExternal = href?.startsWith("http"); + return `<a href='${href}' target='${ + isExternal ? "_blank" : "" + }' title='${title}'>${text}</a>`; + }, + }, +}); + +const convertItem = path => { + const item = fs.lstatSync(path); + + if (item.isDirectory()) { + const subItems = fs.readdirSync(path); + subItems.forEach(subPath => convertItem(`${path}/${subPath}`)); + } else { + convertFile(path); + } +}; + +const convertFile = filePath => { + const mdContent = fs.readFileSync(filePath, "utf-8"); + const htmlContent = applyTemplate(marked.parse(mdContent)); + const outputPath = filePath + .replace(INPUT_PATH, OUTPUT_PATH) + .replace(".md", ".html"); + console.log(`Convert file ${filePath} to ${outputPath}`); + ensureDirectoryExistence(outputPath); + fs.writeFileSync(outputPath, htmlContent); +}; + +const ensureDirectoryExistence = filePath => { + const dirname = path.dirname(filePath); + if (fs.existsSync(dirname)) return true; + ensureDirectoryExistence(dirname); + fs.mkdirSync(dirname); +}; + +const applyTemplate = content => { + const firstH1 = getFirstH1(content); + const title = firstH1 ? `${firstH1} - ${SITE_TITLE}` : SITE_TITLE; + return template.replace("$CONTENT", content).replace("$TITLE", title); +}; + +const getFirstH1 = htmlContent => + htmlContent.match(/\<h1 .*\>(.*)\<\/h1\>/)?.[1]; + +convertItem(INPUT_PATH);
A build/index.html

@@ -0,0 +1,45 @@

+<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <link + rel="icon" + href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🩌</text></svg>" + /> + <link href="/style.css" rel="stylesheet" /> + <title>Tim Izzo @5ika.ch</title> + </head> + <body> + <main> + <h1 class="mb-8">Tim Izzo @<a href="/">5ika.ch</a></h1> + <blockquote> +<p>Dev &amp; Ops đŸ§‘â€đŸ’» Open-Source 👐 Écologie đŸŒ± SobriĂ©tĂ© numĂ©rique ✹</p> +</blockquote> +<p>Partisan d&#39;un Internet ouvert, sobre et distribuĂ©, je dĂ©veloppe et met en place des outils digitaux par mon activitĂ© d&#39;indĂ©pendant ainsi qu&#39;au travers de l&#39;entreprise auto-gouvernĂ©e <a href='https://octree.ch' target='_blank' title='null'>Octree</a>. En parallĂšle, j&#39;enseigne le mĂ©tier de dĂ©veloppeur/euse Ă  <a href='https://www.creageneve.com/bachelor/developpement-web-et-applications/' target='_blank' title='null'>CREA GenĂšve</a>.</p> +<h2 id="blog">Blog</h2> +<ul> +<li><a href='./posts/confort-et-stabilite.html' target='' title='null'>19.09.2022 - Confort et stabilitĂ©</a></li> +<li><a href='./posts/deconnexion.html' target='' title='null'>18.05.2022 - DĂ©connexion</a></li> +<li><a href='./posts/pour-un-web-sain.html' target='' title='null'>19.03.2022 - Pour un Web sain</a></li> +<li><a href='./posts/vers-l-internet-de-demain.html' target='' title='null'>13.11.2021 - Vers l&#39;Internet de demain</a></li> +</ul> +<h2 id="projets">Projets</h2> +<ul> +<li>🚗 <a href='https://caroster.io/' target='_blank' title='null'>Caroster</a> <small>[Octree]</small></li> +<li>♻ <a href='https://r-21.ch' target='_blank' title='null'>R-21</a> <small>[Octree]</small></li> +<li>🏱 <a href='https://evospe.ch' target='_blank' title='null'>EVOSPE</a> <small>[Octree]</small></li> +<li>đŸ—łïž <a href='https://www.demaincestaujourdhui.online/' target='_blank' title='null'>Civic Echo</a> <small>[Octree]</small></li> +<li>👐 <a href='https://open-ge.ch/' target='_blank' title='null'>GenĂšve Open-Source</a></li> +<li>🔓 <a href='https://github.com/5ika/denotion' target='_blank' title='null'>Denotion</a></li> +<li>🚋 <a href='https://github.com/5ika/tipigee' target='_blank' title='null'>tipigee</a> <small><em>inactif</em></small></li> +</ul> +<h2 id="contact">Contact</h2> +<ul> +<li>✉ <a href='mailto:tim@5ika.ch' target='' title='null'>tim@5ika.ch</a></li> +<li>🩣 <a href='https://fosstodon.org/web/@5ika' target='_blank' title='null'>Mastodon</a></li> +</ul> + + </main> + </body> +</html>
A build/posts/confort-et-stabilite.html

@@ -0,0 +1,53 @@

+<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <link + rel="icon" + href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🩌</text></svg>" + /> + <link href="/style.css" rel="stylesheet" /> + <title>Confort et stabilitĂ© - Tim Izzo @5ika.ch</title> + </head> + <body> + <main> + <h1 class="mb-8">Tim Izzo @<a href="/">5ika.ch</a></h1> + <h1 id="confort-et-stabilitĂ©">Confort et stabilitĂ©</h1> +<blockquote> +<p>19.09.22</p> +</blockquote> +<p>À 25 ans, j’ai eu la chance de rejoindre une Ă©quipe de 5 personnes avec qui j’ai montĂ© une entreprise de dĂ©veloppement informatique. En se basant sur une courte expĂ©rience de lancement d’application ratĂ©, nous avons dĂ©cidĂ© que nous voulions profiter du caractĂšre multi-compĂ©tent de notre Ă©quipe pour gagner nos vies. C’est donc en aoĂ»t 2016 que nous avons lancĂ© <a href='https://octree.ch' target='_blank' title='null'>Octree</a>, Ă  l’origine une boĂźte de dĂ©veloppement de sites Web sur mesure.</p> +<p>Étant toujours en Master, j’ai vu lĂ  une maniĂšre douce d’attaquer le monde du travail. Le fait de travailler dans ma propre entreprise m’a toujours sĂ©duit sans trop savoir pourquoi, probablement Ă  cause du semblant de facilitĂ© que cela montre: pas de patron, pas besoin de chercher un job, grande libertĂ©, possibilitĂ© de s’enrichir rapidement sans trop d’effort si les choses marchent. Évidemment, a posteriori, j’ai bien eu le temps de me rendre compte que tout ça n’était que des apparences.</p> +<p>AprĂšs 3 ans de recherche de croissance et de stabilitĂ©, Octree a subi une grosse crise et perdu beaucoup de plumes. Nous sommes passĂ©s de 10 personnes Ă  4, tous Ă  des taux de travail partiels pour pouvoir maintenir la boĂźte sous assistance respiratoire.</p> +<p>De mon cĂŽtĂ©, j’ai dĂ©butĂ© mon activitĂ© d’indĂ©pendant dĂ©but 2020, en plein Covid. L’idĂ©e Ă©tait de pouvoir appliquer l’ensemble de mes compĂ©tences techniques. MĂȘme si je peux dire aujourd’hui que cela fonctionne, j’ai clairement nĂ©gligĂ© les capacitĂ©s nĂ©cessaires en matiĂšre de prospection.</p> +<p>CĂŽtĂ© Octree, la crise a Ă©tĂ© rĂ©vĂ©latrice et a lancĂ© beaucoup de questions: avec qui nous voulons collaborer ? Pour quels clients ? Que dĂ©fendons-nous ? Qui sommes-nous ? Quel avenir pour la boĂźte ?</p> +<p>Notre gouvernance en <a href='https://fr.wikipedia.org/wiki/Holacratie' target='_blank' title='null'>Holacracy</a>, fraĂźchement instaurĂ©e juste avant la crise, nous a apportĂ© les clĂ©s pour avancer sur ces questions. Le passage Ă  l’Holacracy nous a amenĂ© Ă  nous fixer une <em>raison d’ĂȘtre</em>, c’est-Ă -dire une formulation concrĂšte de ce que nous souhaitons atteindre, le pourquoi de notre travail. À quatre, nous avons pris cela plus au sĂ©rieux qu’alors et avons Ă©tabli la raison d’ĂȘtre suivante, qui nous guide toujours: <em>CrĂ©er un cercle vertueux entre la sociĂ©tĂ© et la technologie au profit de l’Humain</em>.</p> +<p>PoussĂ©s par cette raison d’ĂȘtre, nous avons ainsi passĂ© 3 ans Ă  reconstruire Octree pas aprĂšs pas. Lentement mais sĂ»rement. Nous avons engagĂ© des personnes en phase avec notre culture d’entreprise de plus en plus affirmĂ©e et nous avons embrassĂ© pleinement l’Holacracy et son potentiel.</p> +<p>Aujourd’hui, les projets que nous dĂ©veloppons n’ont rien Ă  voir avec ceux des dĂ©buts. Nous travaillons avec des entitĂ©s publiques comme l’<a href='https://participer.ge.ch/' target='_blank' title='null'>État de GenĂšve</a>, la <a href='https://participer.lausanne.ch/' target='_blank' title='null'>ville de Lausanne</a>. Nous accompagnons des communes et des entreprises genevoises vers la transition numĂ©rique avec <a href='https://r-21.ch/' target='_blank' title='null'>R-21</a> et poussons nos propres applications comme <a href='https://caroster.io/' target='_blank' title='null'>Caroster</a>.</p> +<p>Nous sommes fiers de ce que nous faisons et de part les choix que l’équipe d’Octree a fait ces derniĂšres annĂ©es, nous nous sommes distinguĂ©s des entreprises conventionnelles:</p> +<ul> +<li>Tout le monde touche le mĂȘme salaire (proportionnellement au taux de travail de chacun). Ce salaire est augmentĂ© progressivement avec le dĂ©veloppement de l’entreprise.</li> +<li>Nous sommes une sĂ rl Ă  but non lucratif. Octree fait notamment partie du <a href='https://www.apres-ge.ch/' target='_blank' title='null'>rĂ©seau de l’économie sociale et solidaire</a>.</li> +<li>Personne ne travail Ă  100%. On a donc tous du temps Ă  cĂŽtĂ© pour faire autre chose ou vivre, tout simplement.</li> +<li>Nous ne souhaitons pas devenir une grosse entreprise. 15 personnes semblent ĂȘtre un maximum avant de scinder la boĂźte.</li> +<li>La confiance et la communication plutĂŽt que la peur et l’autoritĂ©.</li> +</ul> +<p>Mais cela n’est pas “tout facile” comme le jeune moi pouvait le penser 6 ans plus tĂŽt. Ces choix entraĂźnent des renoncements:</p> +<ul> +<li>Avec un Master HES dans le domaine de l’IT, le salaire moyen en Suisse est deux fois plus grand que ce que je touche aujourd’hui en prenant en compte mon activitĂ© chez Octree, mes projets indĂ©pendants et les cours que je donne chez CREA.</li> +<li>Il y a toujours une partie de mon cerveau dans un ou plusieurs projets en cours. La sĂ©paration entre le privĂ©e et le pro est fine, voire inexistante sur certaines pĂ©riodes. Pour quelqu’un qui peine Ă  gĂ©rer son stress comme moi, cela demande une autre forme de travail plus personnel.</li> +<li>Le fait d’ĂȘtre une trĂšs petite entreprise implique de l’instabilitĂ©. Par exemple, un gros projet annulĂ© peut avoir un impact fort sur la santĂ© de la boĂźte.</li> +<li>Il n’est pas possible de gĂ©rer “juste son p’tit cul”. En plus de son travail quotidien propre au mĂ©tier, il faut parfois prendre la casquette de facilitateur, de secrĂ©taire, de RH, de mĂ©diateur, d’administrateur, d&#39;accompagnateur. Personne ne peux imposer de dĂ©cision aux autres et personne ne peut ĂȘtre virĂ©.</li> +</ul> +<p>Ainsi, rĂ©guliĂšrement j’en reviens Ă  me poser ces questions: Est-ce que c’est ce que je veux ? Est-ce que je n’aspire pas Ă  plus de stabilitĂ© et de confort financier ? Est-ce que le choix de la facilitĂ© n’est pas finalement le bon choix ?</p> +<p>À chaque fois, la rĂ©ponse est aisĂ©e: Non.</p> +<p>Non car le salaire n’est qu’une partie de ce que l’entreprise offre Ă  ses employĂ©-e-s. Octree, comme les autres boĂźtes auto-gouvernĂ©es, offre tout un panel de choses qui ne seraient pas possibles dans une entreprise conventionnelle: je fais un travail qui a du sens, je prends moi-mĂȘme les dĂ©cisions qui concernent mon travail, j’ai la possibilitĂ© d’adapter ma place au sein de l’entreprise, je peux voir les effets de mon travail et j’en rĂ©cupĂšre les fruits de maniĂšre Ă©quitable. Je travail avec des personnes passionnĂ©es, qui veulent s’impliquer et en qui j’ai confiance.</p> +<p>Non car mĂȘme si je cogite continuellement sur des projets, c’est avant tout parce que je suis passionnĂ© par ce que je fais et j’ai du plaisir Ă  rĂ©flĂ©chir quand mes pensĂ©es sont maĂźtrisĂ©es. Je cherche constamment comment amĂ©liorer les choses, les processus, le code, la qualitĂ© du produit, etc..</p> +<p>Non car nous dĂ©veloppons des projets qui ont du sens et qui rĂ©pondent Ă  un besoin rĂ©el plutĂŽt qu’à vendre et faire du chiffre. Si un produit est pertinent et est dĂ©veloppĂ© correctement, il peut devenir un vrai outil et a peu de chance d’ĂȘtre avortĂ©.</p> +<p>Non car je crois Ă  la puissance de la communication et de la confiance. Dans les entreprises conventionnelles, si vous ne faites pas du bon travail ou si vous ne faites pas vos 8h par jour, vous pouvez ĂȘtre virĂ©. Quand votre supĂ©rieur-e vous demande quelque chose, vous devez le faire, mĂȘme si vous trouvez cela stupide ou n’ĂȘtes pas d’accord. On vous engage pour un job fixe correspondant Ă  un cahier des charges et vous ĂȘtes cadrĂ©s dans ce que vous pouvez apporter Ă  l’entreprise et ce qu’elle peut vous donner en retour. Vous voulez faire plus ? Vous voulez faire mieux ? Non, vous remplissez votre cahier des charges ou vous partez.</p> +<p>Renoncer aux quatre points Ă©voquĂ©s plus haut n’est pas un problĂšme car il y a bien plus Ă  gagner. Les obligations de la vie et la pression sociale me ramĂšnent toujours Ă  ce choix et c’est avec fiertĂ© que je continue Ă  crĂ©er les choses plutĂŽt qu’à les subir.</p> + + </main> + </body> +</html>
A build/posts/deconnexion.html

@@ -0,0 +1,36 @@

+<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <link + rel="icon" + href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🩌</text></svg>" + /> + <link href="/style.css" rel="stylesheet" /> + <title>DĂ©connexion - Tim Izzo @5ika.ch</title> + </head> + <body> + <main> + <h1 class="mb-8">Tim Izzo @<a href="/">5ika.ch</a></h1> + <h1 id="dĂ©connexion">DĂ©connexion</h1> +<blockquote> +<p>18.05.2022</p> +</blockquote> +<p>Il y a 3 ans, j’ai dĂ©cidĂ© de me couper des rĂ©seaux sociaux alors que j’en Ă©tait totalement addict.</p> +<p>Je me suis inscrit sur Facebook en 2007 quand le rĂ©seau commençait tout juste Ă  devenir hype. AprĂšs MSN oĂč je retrouvais mes potes le soir pour discuter de tout et surtout de rien, j’étais content d’avoir une plateforme pour partager des publications d’ado mystĂ©rieux et profond Ă  de plus en plus de gens depuis un bureau chez mes parents. Est ensuite arrivĂ© Instagram oĂč, comme les autres de mon Ăąge, j’ai pu laisser exprimer ma fibre artistique en publiant des photos pour montrer comment ma vie elle est bien.</p> +<p>Avec mon premier smartphone, j’ai pu emmener mon rĂ©seau de “potes” n’importe oĂč. Toujours dans la poche, je n’avais plus besoin d’attendre aprĂšs l’école pour me tenir aux courants des derniĂšres news trĂ©pignantes des autres. Du bout de mes doigts, je pouvais contacter n’importe qui pour lui dire n’importe quoi, depuis n’importe oĂč. C’était beau !</p> +<p>Les annĂ©es passantes et la maturitĂ© grandissante, j’ai peu Ă  peu pris du recul sur mon utilisation des rĂ©seaux sociaux. MalgrĂ© une constante connexion avec mes pairs, nos conversations n’avaient pas vraiment de substance. Les quelques fois oĂč j’ai vraiment utilisĂ© Facebook les derniĂšres annĂ©es, c’était pour ĂȘtre tenu aux courants de certains Ă©vĂ©nements et de qui y allait.</p> +<p>Pourtant, comme beaucoup d’autres, je me suis cachĂ© derriĂšre la grande excuse “Oui mais ça me permet de rester en contact avec d’anciens potes ou personnes que je ne vois pas souvent”. Il faut arrĂȘter de se mentir: Non, ce n’est pas vrai. Je n’ai pas besoin d’avoir un canal de discussion constant avec des gens avec qui je parle une fois tous les 10 ans. Si je veux vraiment les contacter et maintenir une relation avec eux, je les appelle et je les vois.</p> +<p>Avec le temps, j’ai rĂ©alisĂ© que je n’avais pas besoin d’avoir 500 amis potentiels car je n’aurais de toute façon pas assez de temps pour tous. Une vraie relation entre deux personnes s’entretient, prend du temps et change avec le temps. D’aprĂšs l’anthropologue Robin Dunbar, nous sommes incapables de tenir une relation humaine stable avec plus de 150 personnes (en moyenne). C’est une limite de notre cerveau ! Dans ce cas, pas besoin d’un outil pour gĂ©rer ses relations comme un troupeau.</p> +<p>En aoĂ»t 2018, j’ai donc sautĂ© le pas: j’ai supprimĂ© mes comptes Facebook, Instagram et Twitter. Et franchement, ça a Ă©tĂ© horrible.</p> +<p>Du jour au lendemain, je me suis senti totalement dĂ©connectĂ©. Non pas d’Internet mais de mes amis et des diffĂ©rents groupes auxquelles j’appartenais. HabituĂ© Ă  ĂȘtre toujours un peu au courant de tout grĂące aux plateformes en ligne, j’ai dĂ©couvert que je devais maintenant aller Ă  la rencontre de mes amis pour savoir s’il se passait des choses, s’il y avait un anniversaire, si un tel allait Ă  un concert ou si tel groupe d’amis se retrouvait pour un barbecue. Pour un introverti comme moi, cela demande beaucoup d’effort et d’inconfort. Du jour au lendemain, j’ai coupĂ© court Ă  des centaines de “relations” que j’avais alors sur Facebook et Instagram.</p> +<p>Puis, de semaine en semaine, j’ai repris contact avec certains amis en les contactant directement. En ayant des discussions avec un dĂ©but et une fin, j’ai redĂ©couvert certaines personnes et j’ai construit des relations un peu plus fortes avec un nombre plus restreint d’amis. J’ai aujourd’hui 23 personnes que je contacte rĂ©guliĂšrement, que j’apprĂ©cie et avec qui je passe des moments vrais et sincĂšres (en dehors de la famille bien sĂ»r).</p> +<p>Cela reste difficile d’ĂȘtre dĂ©connectĂ© des diffĂ©rentes plateformes. En arrĂȘtant les rĂ©seaux d’”amis”, j’ai un peu compensĂ© avec LinkedIn pendant quelque temps. MĂȘme si je suis encore un peu prĂ©sent sur ce rĂ©seau professionnel, j’ai remarquĂ© que je n’ai rien Ă  y partager (je ne fais que repartager ce que postent les entitĂ©s dont je fais partie mais le monde peut s’en passer) et que les quelques rares informations intĂ©ressantes sont perdues dans un ocĂ©an d’information inutile et de marketing.</p> +<p>Finalement, tout ce que je peux trouver d’intĂ©ressant sur ces rĂ©seaux se trouve aussi ailleurs sur le Web et je prĂ©fĂšre dĂ©sormais utiliser un agrĂ©gateur qui me condense les publications des sites que je suis sans le superflu autour.</p> +<p>Je ne passe plus mes journĂ©es Ă  scroller dans la vie des autres mais j’ai dĂ©sormais tout le temps de rĂ©flĂ©chir et de me concentrer sur des choses qui valent la peine, les choses de la vraie vie, celle qui est palpable.</p> +<p>La dĂ©connexion n’a pas Ă©tĂ© simple et la tentation de revenir sur les plateformes sociales, les anciennes comme les nouvelles, ne part pas vraiment. Mais quand on rĂ©ussit Ă  construire de vraies relations, il devient Ă©vident qu’on n’a pas besoin de Facebook, Instagram, TikTok et leurs compĂšres.</p> + + </main> + </body> +</html>
A build/posts/pour-un-web-sain.html

@@ -0,0 +1,36 @@

+<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <link + rel="icon" + href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🩌</text></svg>" + /> + <link href="/style.css" rel="stylesheet" /> + <title>Pour un Web sain - Tim Izzo @5ika.ch</title> + </head> + <body> + <main> + <h1 class="mb-8">Tim Izzo @<a href="/">5ika.ch</a></h1> + <h1 id="pour-un-web-sain">Pour un Web sain</h1> +<blockquote> +<p>19.03.2022</p> +</blockquote> +<p>Le Web que nous utilisons aujourd’hui a dĂ©viĂ©. Il est trĂšs loin du projet que son crĂ©ateur avait en tĂȘte lors de sa mise en place au dĂ©but des annĂ©es ‘90. À l’origine, le Web devait ĂȘtre un rĂ©seau pleinement ouvert, dĂ©centralisĂ© et accessibles Ă  toutes et tous sans distinction.</p> +<p>Son objectif premier Ă©tait de faciliter le partage d’information. Pas de froufrous, de cookies, de pubs, de pop-ups, de banniĂšres ou de scroll infini.</p> +<p>Juste de l’information pure, du texte et quelques images.</p> +<p>Pas un systĂšme omniprĂ©sent et addictif se nourrissant de notre temps, de notre argent et de notre esprit.</p> +<p>Juste un outil interconnectant les humains du monde et leurs idĂ©es.</p> +<p>En 30 ans, nous avons voulu toujours en demander plus au Web en lui donnant une place et des moyens toujours plus importants jusqu’à arriver Ă  une situation malsaine.</p> +<p>De par mon mĂ©tier et ma passion, je “vis” sur le Web chaque jour. C’est en agissant sur le Web que je gagne de l’argent et que j’aime passer du temps. Je devrais donc ĂȘtre un ambassadeur du “tout digital”, dĂ©fenseur de l’accroissement de la connexion et du dĂ©bit.</p> +<p>MalgrĂ© 15 annĂ©es dĂ©diĂ©es Ă  l’informatique, j’ai peur du Web d’aujourd’hui. Dans mon expĂ©rience de vie et dans mon entourage, je peux observer chaque jour ce que la sur-connexion peut crĂ©er en nous. La dĂ©pendance qui nous attache Ă  un Ă©cran, toujours dans l’attente d’avoir une petite pastille rouge qui “pop” avec l’espoir d’avoir Ă©tĂ© considĂ©rĂ© par d’autres. Le sentiment d’apathie qui nous envahit quand le moindre moment oĂč notre cerveau n’a rien Ă  faire nous sortons notre tĂ©lĂ©phone pour scroller bĂȘtement en recherche de “quelque chose permettant de donner ou recevoir de l’attention”. Et surtout, le sentiment de solitude viscĂ©rale qui nous prend alors que nous sommes liĂ©s au monde entier grĂące au truc dans notre poche.</p> +<p>J’ai eu la chance d’avoir passĂ© mon enfance avant que les chaĂźnes ne se mettent en place. Sur l’ordinateur familial, nous devions partager le temps d’écran et surtout, le temps de connexion au rĂ©seau de tĂ©lĂ©com car Ă  cette Ă©poque, pas si lointaine, nous ne pouvions pas encore utiliser le tĂ©lĂ©phone et Internet en mĂȘme temps.</p> +<p>C’était une Ăšre oĂč le Web Ă©tait simple. On voyait quelques sites extravagants pleins de couleurs mais les informations qu’on trouvait Ă©taient rĂ©flĂ©chies et facile d’accĂšs. Il n’était pas nĂ©cessaire d’en mettre plein la vue avec des animations et des contenus de remplissage optimisĂ©s pour le SEO.</p> +<p>Pourtant, ce qui faisait le Web d’hier n’a pas disparu. Les technologies sont toujours lĂ  et ont peu voir pas changĂ©es (HTML, HTTP,...). Nous avons juste rajoutĂ© des couches de merdes dessus pour mieux sucer les esprits et faire du business.</p> +<p>Car oui, quand nous utilisons le Web moderne, nous permettons Ă  des entreprises de s’enrichir. Et cela mĂȘme si nous ne dĂ©boursons pas un sou. <em>Si c’est gratuit, c’est toi le produit.</em> Ce n’est pas grĂące Ă  des dons que Facebook et Google font partie des boites les plus riches et puissantes de la planĂšte.</p> +<p>Je ne crois pas qu’il soit envisageable de retourner au Web des dĂ©buts mais il est possible nĂ©anmoins, de maniĂšre individuelle, de changer la maniĂšre dont on s’en sert pour revenir Ă  une utilisation saine, respectueuse de soi-mĂȘme et des autres humains. C’est le chemin que je souhaite raconter Ă  travers ce blog.</p> + + </main> + </body> +</html>
A build/posts/vers-l-internet-de-demain.html

@@ -0,0 +1,45 @@

+<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <link + rel="icon" + href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🩌</text></svg>" + /> + <link href="/style.css" rel="stylesheet" /> + <title>Vers l&#39;Internet de demain - Tim Izzo @5ika.ch</title> + </head> + <body> + <main> + <h1 class="mb-8">Tim Izzo @<a href="/">5ika.ch</a></h1> + <h1 id="vers-linternet-de-demain">Vers l&#39;Internet de demain</h1> +<blockquote> +<p>13.11.2021</p> +</blockquote> +<p>Commençons avec une vĂ©ritĂ© Ă©tablie: notre utilisation actuelle de l&#39;informatique et d&#39;Internet engendre une consommation Ă©nergĂ©tique dĂ©mentielle et bien supĂ©rieure Ă  ce que les ressources de notre planĂšte peuvent satisfaire.</p> +<p>Dans ce domaine, l&#39;Histoire rĂ©cente nous montre deux choses :</p> +<ul> +<li>Notre sociĂ©tĂ© globalisĂ©e et interconnectĂ©e peut ĂȘtre mise Ă  mal par des impacts survenant trĂšs loin de chez nous.</li> +<li>Nous sommes aujourd&#39;hui totalement dĂ©pendant d&#39;Internet, dans nos vies privĂ©es comme professionnelles.</li> +</ul> +<p>D&#39;un point de vue un peu fataliste, nous ne pouvons lutter contre cela car Internet fait Ă©cho Ă  notre besoin humain primitif de lien social. Pire que cela, les rĂ©seaux sociaux sont devenus le moyen principal de rĂ©pondre Ă  ce besoin pour une bonne partie de la planĂšte. Essayez de vous dĂ©brancher pendant quelques semaines de toutes les plateformes sociales en ligne et vous verrez que cela donne un sentiment de solitude, de mise Ă  l&#39;Ă©cart. L&#39;impression de lutter contre son instinct.</p> +<p>ParallĂšlement Ă  cela, Internet (et l&#39;informatique de maniĂšre gĂ©nĂ©rale) repose sur l&#39;Ă©lectronique elle mĂȘme nĂ©cessitant l&#39;usage de l&#39;Ă©lectricitĂ©, une source d&#39;Ă©nergie artificielle (dans la maniĂšre dont on s&#39;en sert). Ainsi, il est absolument impossible d&#39;obtenir un Internet avec une empreinte Ă©cologique nulle, quoique l&#39;on fasse.</p> +<p>ConsidĂ©rant cela, comment peut-on utiliser Internet sans accentuer les pressions Ă©cologiques que nous faisons peser sur notre planĂšte ? Est-ce que la seule solution n&#39;est-elle pas de cesser d&#39;utiliser Internet et de repenser nos vies en profondeur au plus vite ?</p> +<p>Je ne pense pas qu&#39;il faille, ni mĂȘme que ce soit possible, que l&#39;on se passe aujourd&#39;hui d&#39;Internet. Nous en avons besoin. C&#39;est devenu une nĂ©cessitĂ© pour nos vies et on ne peut revenir en arriĂšre. Mais je pense que l&#39;on peut changer notre conception et notre utilisation d&#39;Internet vers plus de sobriĂ©tĂ© Ă©nergĂ©tique.</p> +<p>Nous avons tendance Ă  l&#39;oublier, pris entre les milliers d&#39;applications que l&#39;on utilise, mais Internet est avant tout un <strong>outil</strong>. Il existe parce que l&#39;on a besoin de lui, il nous est <em>utile</em>. On ne vit pas pour crĂ©er Internet, on crĂ©e Internet pour pouvoir faciliter nos vies. Et son utilitĂ© est qu&#39;il nous permet de communiquer entre humains, d&#39;Ă©changer de l&#39;information.</p> +<p>Aujourd&#39;hui, cet notion d&#39;outil a mutĂ© vers une utilitĂ© qui serait plutĂŽt &quot;faire en sorte que des entreprises puissent se faire de l&#39;argent en atteignant chaque humain&quot;. Mais Ă  titre individuel, en tant qu&#39;<em>humain</em>, a-t-on vraiment besoin que l&#39;on nous indique ce que l&#39;on veut acheter? ce que l&#39;on doit <em>liker?</em> avec qui l&#39;on doit communiquer? comment les personnes cĂ©lĂšbres vivent leur vie? comment les chats sont trop mignons ?</p> +<p>Dans la rĂ©alitĂ© des choses, plutĂŽt non. Une majoritĂ© de ce que l&#39;on Ă©change sur le Web est destinĂ© Ă  des humains qui sont gĂ©ographiquement proches de nous: communiquer avec ses proches ou ses amis, chercher des informations sur une manifestation, rĂ©server un restaurant ou une place de cinĂ©, partager des photos, des articles...</p> +<p>Pourtant, avec les applications et services en ligne que nous utilisons chaque jour, les donnĂ©es transitent Ă  travers des macro-noeuds Ă  l&#39;autre bout du globe qui concentrent tout le trafic et le redistribue (Google, Facebook,...). Quand vous envoyez un message Ă  votre voisin par Whatsapp, le message passent par un certains nombre de routeurs jusqu&#39;Ă  atteindre un serveur aux États-unis pour ĂȘtre traitĂ© puis refais le chemin en sens inverse jusqu&#39;Ă  l&#39;ordinateur de votre voisin. Au passage, le message s&#39;alourdit d&#39;un peu de publicitĂ© et de scripts analysant votre utilisation du service.</p> +<p>Pourquoi ne pas lui envoyer directement ? Pourquoi consommer une grande quantitĂ© d&#39;Ă©nergie pour faire un aller-retour Ă  travers le monde plutĂŽt que de prendre le chemin le plus court sur le rĂ©seau vers votre voisin ?</p> +<p>Si on considĂšre qu&#39;Internet est un outil pour Ă©changer essentiellement des donnĂ©es avec des gens gĂ©ographiquement proches de nous et de temps en temps des gens plus Ă©loignĂ©s, nous pourrions considĂ©rer un Internet diffĂ©rent:</p> +<ul> +<li>Un rĂ©seau plus lent mais plus sĂ»rs, favorisant la confidentialitĂ©, l&#39;authenticitĂ© et l&#39;intĂ©gritĂ© des donnĂ©es Ă©changĂ©es plutĂŽt que la vitesse. Techniquement, cela nous permettrait de mettre en place des rĂ©seaux longues distances, plus universellement accessibles.</li> +<li>Un rĂ©seau pas disponible 100% du temps mais peu consommateur en Ă©nergie. Techniquement, on pourrait ainsi envisager de l&#39;alimenter avec de l&#39;Ă©nergie solaires, Ă©olienne, voir produite par la force humaine.</li> +</ul> +<p>Depuis maintenant 30 ans, dans la quasi-totalitĂ© des pays du monde, nous avons des Ă©quipements de tĂ©lĂ©communication puissants capables de relayer des messages efficacement. Une connexion WiFi ou Bluetooth peut transmettre des messages entre deux systĂšmes distants d&#39;une centaine de mĂštres et on a dĂ©jĂ  ce qu&#39;il faut dans nos tĂ©lĂ©phones. Il y a Ă©galement les rĂ©seaux LoRaWAN, maintenant prĂ©sents un peu partout et dĂ©diĂ©s Ă  l&#39;Internet des Objets, qui permettent de transmettre des (petits) messages sur des dizaines de kilomĂštres. Les rĂ©seaux cellulaires (2G, 3G, 4G,...) correspondent aussi Ă  des systĂšmes de tĂ©lĂ©communications omniprĂ©sents et dĂ©jĂ  compatibles avec ce que l&#39;on a dans la poche.</p> +<p>En se basant sur les rĂ©seaux dĂ©jĂ  existants proposĂ©s par nos fournisseurs d&#39;accĂšs Internet, il existe aujourd&#39;hui un nombre croissants de technologies et de protocoles nous permettant de nous affranchir des macro-noeuds et retrouver le fonctionnement d&#39;Internet tel qu&#39;il a Ă©tĂ© pensĂ© il y a plus de 30 ans. La condition pour que cet Internet neutre et dĂ©centralisĂ© puisse prendre sa place dĂ©pend de chaque utilisateur: si vous utilisez un service centralisĂ© comme Facebook ou Google, alors ce service (et l&#39;entreprise derriĂšre) gagne en puissance. Mais si vous utilisez des technologies dĂ©centralisĂ©es voir distribuĂ©es alors vous donner de la puissance Ă  ces alternatives et vous participez Ă  la mise en place de l&#39;Internet de demain.</p> + + </main> + </body> +</html>
A build/style.css

@@ -0,0 +1,2404 @@

+/* +! tailwindcss v3.2.0 | MIT License | https://tailwindcss.com +*/ + +/* +1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) +2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) +*/ + +*, +::before, +::after { + box-sizing: border-box; + /* 1 */ + border-width: 0; + /* 2 */ + border-style: solid; + /* 2 */ + border-color: #e5e7eb; + /* 2 */ +} + +::before, +::after { + --tw-content: ''; +} + +/* +1. Use a consistent sensible line-height in all browsers. +2. Prevent adjustments of font size after orientation changes in iOS. +3. Use a more readable tab size. +4. Use the user's configured `sans` font-family by default. +*/ + +html { + line-height: 1.5; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ + -moz-tab-size: 4; + /* 3 */ + -o-tab-size: 4; + tab-size: 4; + /* 3 */ + font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + /* 4 */ +} + +/* +1. Remove the margin in all browsers. +2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. +*/ + +body { + margin: 0; + /* 1 */ + line-height: inherit; + /* 2 */ +} + +/* +1. Add the correct height in Firefox. +2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) +3. Ensure horizontal rules are visible by default. +*/ + +hr { + height: 0; + /* 1 */ + color: inherit; + /* 2 */ + border-top-width: 1px; + /* 3 */ +} + +/* +Add the correct text decoration in Chrome, Edge, and Safari. +*/ + +abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} + +/* +Remove the default font size and weight for headings. +*/ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; +} + +/* +Reset links to optimize for opt-in styling instead of opt-out. +*/ + +a { + color: inherit; + text-decoration: inherit; +} + +/* +Add the correct font weight in Edge and Safari. +*/ + +b, +strong { + font-weight: bolder; +} + +/* +1. Use the user's configured `mono` font family by default. +2. Correct the odd `em` font sizing in all browsers. +*/ + +code, +kbd, +samp, +pre { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/* +Add the correct font size in all browsers. +*/ + +small { + font-size: 80%; +} + +/* +Prevent `sub` and `sup` elements from affecting the line height in all browsers. +*/ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* +1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) +2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) +3. Remove gaps between table borders by default. +*/ + +table { + text-indent: 0; + /* 1 */ + border-color: inherit; + /* 2 */ + border-collapse: collapse; + /* 3 */ +} + +/* +1. Change the font styles in all browsers. +2. Remove the margin in Firefox and Safari. +3. Remove default padding in all browsers. +*/ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + font-weight: inherit; + /* 1 */ + line-height: inherit; + /* 1 */ + color: inherit; + /* 1 */ + margin: 0; + /* 2 */ + padding: 0; + /* 3 */ +} + +/* +Remove the inheritance of text transform in Edge and Firefox. +*/ + +button, +select { + text-transform: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Remove default button styles. +*/ + +button, +[type='button'], +[type='reset'], +[type='submit'] { + -webkit-appearance: button; + /* 1 */ + background-color: transparent; + /* 2 */ + background-image: none; + /* 2 */ +} + +/* +Use the modern Firefox focus style for all focusable elements. +*/ + +:-moz-focusring { + outline: auto; +} + +/* +Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) +*/ + +:-moz-ui-invalid { + box-shadow: none; +} + +/* +Add the correct vertical alignment in Chrome and Firefox. +*/ + +progress { + vertical-align: baseline; +} + +/* +Correct the cursor style of increment and decrement buttons in Safari. +*/ + +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto; +} + +/* +1. Correct the odd appearance in Chrome and Safari. +2. Correct the outline style in Safari. +*/ + +[type='search'] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/* +Remove the inner padding in Chrome and Safari on macOS. +*/ + +::-webkit-search-decoration { + -webkit-appearance: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Change font properties to `inherit` in Safari. +*/ + +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* +Add the correct display in Chrome and Safari. +*/ + +summary { + display: list-item; +} + +/* +Removes the default spacing and border for appropriate elements. +*/ + +blockquote, +dl, +dd, +h1, +h2, +h3, +h4, +h5, +h6, +hr, +figure, +p, +pre { + margin: 0; +} + +fieldset { + margin: 0; + padding: 0; +} + +legend { + padding: 0; +} + +ol, +ul, +menu { + list-style: none; + margin: 0; + padding: 0; +} + +/* +Prevent resizing textareas horizontally by default. +*/ + +textarea { + resize: vertical; +} + +/* +1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) +2. Set the default placeholder color to the user's configured gray 400 color. +*/ + +input::-moz-placeholder, textarea::-moz-placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +input::placeholder, +textarea::placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +/* +Set the default cursor for buttons. +*/ + +button, +[role="button"] { + cursor: pointer; +} + +/* +Make sure disabled buttons don't get the pointer cursor. +*/ + +:disabled { + cursor: default; +} + +/* +1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) +2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) + This can trigger a poorly considered lint error in some tools but is included by design. +*/ + +img, +svg, +video, +canvas, +audio, +iframe, +embed, +object { + display: block; + /* 1 */ + vertical-align: middle; + /* 2 */ +} + +/* +Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) +*/ + +img, +video { + max-width: 100%; + height: auto; +} + +/* Make elements with the HTML hidden attribute stay hidden by default */ + +[hidden] { + display: none; +} + +body { + --tw-bg-opacity: 1; + background-color: rgb(241 245 249 / var(--tw-bg-opacity)); +} + +main { + width: 100%; +} + +@media (min-width: 640px) { + main { + max-width: 640px; + } +} + +@media (min-width: 768px) { + main { + max-width: 768px; + } +} + +@media (min-width: 1024px) { + main { + max-width: 1024px; + } +} + +@media (min-width: 1280px) { + main { + max-width: 1280px; + } +} + +@media (min-width: 1536px) { + main { + max-width: 1536px; + } +} + +main { + max-width: 48rem; + margin-left: auto; + margin-right: auto; + padding-left: 1rem; + padding-right: 1rem; + padding-top: 3rem; + padding-bottom: 3rem; + font-family: Menlo, Monaco, Lucida Console, Liberation Mono, + DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif; +} + +h1 { + font-size: 1.5rem; + line-height: 2rem; + font-weight: 700; +} + +h2 { + font-size: 1.25rem; + line-height: 1.75rem; + font-weight: 700; + margin-top: 2rem; + margin-bottom: 1rem; +} + +p { + margin-top: 2rem; +} + +blockquote { + --tw-text-opacity: 1; + color: rgb(55 65 81 / var(--tw-text-opacity)); +} + +a { + --tw-text-opacity: 1; + color: rgb(79 70 229 / var(--tw-text-opacity)); +} + +a:hover { + --tw-text-opacity: 1; + color: rgb(129 140 248 / var(--tw-text-opacity)); +} + +a { + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +*, ::before, ::after { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; +} + +::-webkit-backdrop { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; +} + +::backdrop { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; +} + +.container { + width: 100%; +} + +@media (min-width: 640px) { + .container { + max-width: 640px; + } +} + +@media (min-width: 768px) { + .container { + max-width: 768px; + } +} + +@media (min-width: 1024px) { + .container { + max-width: 1024px; + } +} + +@media (min-width: 1280px) { + .container { + max-width: 1280px; + } +} + +@media (min-width: 1536px) { + .container { + max-width: 1536px; + } +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; +} + +.not-sr-only { + position: static; + width: auto; + height: auto; + padding: 0; + margin: 0; + overflow: visible; + clip: auto; + white-space: normal; +} + +.pointer-events-none { + pointer-events: none; +} + +.pointer-events-auto { + pointer-events: auto; +} + +.visible { + visibility: visible; +} + +.invisible { + visibility: hidden; +} + +.collapse { + visibility: collapse; +} + +.static { + position: static; +} + +.fixed { + position: fixed; +} + +.absolute { + position: absolute; +} + +.relative { + position: relative; +} + +.sticky { + position: sticky; +} + +.-inset-1 { + top: -0.25rem; + right: -0.25rem; + bottom: -0.25rem; + left: -0.25rem; +} + +.isolate { + isolation: isolate; +} + +.isolation-auto { + isolation: auto; +} + +.float-right { + float: right; +} + +.float-left { + float: left; +} + +.float-none { + float: none; +} + +.clear-left { + clear: left; +} + +.clear-right { + clear: right; +} + +.clear-both { + clear: both; +} + +.clear-none { + clear: none; +} + +.mt-2 { + margin-top: 0.5rem; +} + +.mb-4 { + margin-bottom: 1rem; +} + +.mb-8 { + margin-bottom: 2rem; +} + +.box-border { + box-sizing: border-box; +} + +.box-content { + box-sizing: content-box; +} + +.block { + display: block; +} + +.inline-block { + display: inline-block; +} + +.inline { + display: inline; +} + +.flex { + display: flex; +} + +.inline-flex { + display: inline-flex; +} + +.table { + display: table; +} + +.inline-table { + display: inline-table; +} + +.table-caption { + display: table-caption; +} + +.table-cell { + display: table-cell; +} + +.table-column { + display: table-column; +} + +.table-column-group { + display: table-column-group; +} + +.table-footer-group { + display: table-footer-group; +} + +.table-header-group { + display: table-header-group; +} + +.table-row-group { + display: table-row-group; +} + +.table-row { + display: table-row; +} + +.flow-root { + display: flow-root; +} + +.grid { + display: grid; +} + +.inline-grid { + display: inline-grid; +} + +.contents { + display: contents; +} + +.list-item { + display: list-item; +} + +.hidden { + display: none; +} + +.flex-shrink { + flex-shrink: 1; +} + +.shrink { + flex-shrink: 1; +} + +.flex-grow { + flex-grow: 1; +} + +.grow { + flex-grow: 1; +} + +.table-auto { + table-layout: auto; +} + +.table-fixed { + table-layout: fixed; +} + +.border-collapse { + border-collapse: collapse; +} + +.border-separate { + border-collapse: separate; +} + +.transform { + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.\!transform { + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)) !important; +} + +.transform-cpu { + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.transform-gpu { + transform: translate3d(var(--tw-translate-x), var(--tw-translate-y), 0) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.transform-none { + transform: none; +} + +.touch-auto { + touch-action: auto; +} + +.touch-none { + touch-action: none; +} + +.touch-pan-x { + --tw-pan-x: pan-x; + touch-action: var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom); +} + +.touch-pan-left { + --tw-pan-x: pan-left; + touch-action: var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom); +} + +.touch-pan-right { + --tw-pan-x: pan-right; + touch-action: var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom); +} + +.touch-pan-y { + --tw-pan-y: pan-y; + touch-action: var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom); +} + +.touch-pan-up { + --tw-pan-y: pan-up; + touch-action: var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom); +} + +.touch-pan-down { + --tw-pan-y: pan-down; + touch-action: var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom); +} + +.touch-pinch-zoom { + --tw-pinch-zoom: pinch-zoom; + touch-action: var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom); +} + +.touch-manipulation { + touch-action: manipulation; +} + +.select-none { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.select-text { + -webkit-user-select: text; + -moz-user-select: text; + user-select: text; +} + +.select-all { + -webkit-user-select: all; + -moz-user-select: all; + user-select: all; +} + +.select-auto { + -webkit-user-select: auto; + -moz-user-select: auto; + user-select: auto; +} + +.resize-none { + resize: none; +} + +.resize-y { + resize: vertical; +} + +.resize-x { + resize: horizontal; +} + +.resize { + resize: both; +} + +.snap-none { + scroll-snap-type: none; +} + +.snap-x { + scroll-snap-type: x var(--tw-scroll-snap-strictness); +} + +.snap-y { + scroll-snap-type: y var(--tw-scroll-snap-strictness); +} + +.snap-both { + scroll-snap-type: both var(--tw-scroll-snap-strictness); +} + +.snap-mandatory { + --tw-scroll-snap-strictness: mandatory; +} + +.snap-proximity { + --tw-scroll-snap-strictness: proximity; +} + +.snap-start { + scroll-snap-align: start; +} + +.snap-end { + scroll-snap-align: end; +} + +.snap-center { + scroll-snap-align: center; +} + +.snap-align-none { + scroll-snap-align: none; +} + +.snap-normal { + scroll-snap-stop: normal; +} + +.snap-always { + scroll-snap-stop: always; +} + +.list-inside { + list-style-position: inside; +} + +.list-outside { + list-style-position: outside; +} + +.appearance-none { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.break-before-auto { + -moz-column-break-before: auto; + break-before: auto; +} + +.break-before-avoid { + -moz-column-break-before: avoid; + break-before: avoid; +} + +.break-before-all { + -moz-column-break-before: all; + break-before: all; +} + +.break-before-avoid-page { + -moz-column-break-before: avoid; + break-before: avoid-page; +} + +.break-before-page { + -moz-column-break-before: page; + break-before: page; +} + +.break-before-left { + -moz-column-break-before: left; + break-before: left; +} + +.break-before-right { + -moz-column-break-before: right; + break-before: right; +} + +.break-before-column { + -moz-column-break-before: column; + break-before: column; +} + +.break-inside-auto { + -moz-column-break-inside: auto; + break-inside: auto; +} + +.break-inside-avoid { + -moz-column-break-inside: avoid; + break-inside: avoid; +} + +.break-inside-avoid-page { + break-inside: avoid-page; +} + +.break-inside-avoid-column { + -moz-column-break-inside: avoid; + break-inside: avoid-column; +} + +.break-after-auto { + -moz-column-break-after: auto; + break-after: auto; +} + +.break-after-avoid { + -moz-column-break-after: avoid; + break-after: avoid; +} + +.break-after-all { + -moz-column-break-after: all; + break-after: all; +} + +.break-after-avoid-page { + -moz-column-break-after: avoid; + break-after: avoid-page; +} + +.break-after-page { + -moz-column-break-after: page; + break-after: page; +} + +.break-after-left { + -moz-column-break-after: left; + break-after: left; +} + +.break-after-right { + -moz-column-break-after: right; + break-after: right; +} + +.break-after-column { + -moz-column-break-after: column; + break-after: column; +} + +.grid-flow-row { + grid-auto-flow: row; +} + +.grid-flow-col { + grid-auto-flow: column; +} + +.grid-flow-dense { + grid-auto-flow: dense; +} + +.grid-flow-row-dense { + grid-auto-flow: row dense; +} + +.grid-flow-col-dense { + grid-auto-flow: column dense; +} + +.flex-row { + flex-direction: row; +} + +.flex-row-reverse { + flex-direction: row-reverse; +} + +.flex-col { + flex-direction: column; +} + +.flex-col-reverse { + flex-direction: column-reverse; +} + +.flex-wrap { + flex-wrap: wrap; +} + +.flex-wrap-reverse { + flex-wrap: wrap-reverse; +} + +.flex-nowrap { + flex-wrap: nowrap; +} + +.place-content-center { + place-content: center; +} + +.place-content-start { + place-content: start; +} + +.place-content-end { + place-content: end; +} + +.place-content-between { + place-content: space-between; +} + +.place-content-around { + place-content: space-around; +} + +.place-content-evenly { + place-content: space-evenly; +} + +.place-content-baseline { + place-content: baseline; +} + +.place-content-stretch { + place-content: stretch; +} + +.place-items-start { + place-items: start; +} + +.place-items-end { + place-items: end; +} + +.place-items-center { + place-items: center; +} + +.place-items-baseline { + place-items: baseline; +} + +.place-items-stretch { + place-items: stretch; +} + +.content-center { + align-content: center; +} + +.content-start { + align-content: flex-start; +} + +.content-end { + align-content: flex-end; +} + +.content-between { + align-content: space-between; +} + +.content-around { + align-content: space-around; +} + +.content-evenly { + align-content: space-evenly; +} + +.content-baseline { + align-content: baseline; +} + +.items-start { + align-items: flex-start; +} + +.items-end { + align-items: flex-end; +} + +.items-center { + align-items: center; +} + +.items-baseline { + align-items: baseline; +} + +.items-stretch { + align-items: stretch; +} + +.justify-start { + justify-content: flex-start; +} + +.justify-end { + justify-content: flex-end; +} + +.justify-center { + justify-content: center; +} + +.justify-between { + justify-content: space-between; +} + +.justify-around { + justify-content: space-around; +} + +.justify-evenly { + justify-content: space-evenly; +} + +.justify-items-start { + justify-items: start; +} + +.justify-items-end { + justify-items: end; +} + +.justify-items-center { + justify-items: center; +} + +.justify-items-stretch { + justify-items: stretch; +} + +.space-x-2 > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 0; + margin-right: calc(0.5rem * var(--tw-space-x-reverse)); + margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse))); +} + +.space-y-reverse > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 1; +} + +.space-x-reverse > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 1; +} + +.divide-x > :not([hidden]) ~ :not([hidden]) { + --tw-divide-x-reverse: 0; + border-right-width: calc(1px * var(--tw-divide-x-reverse)); + border-left-width: calc(1px * calc(1 - var(--tw-divide-x-reverse))); +} + +.divide-y > :not([hidden]) ~ :not([hidden]) { + --tw-divide-y-reverse: 0; + border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))); + border-bottom-width: calc(1px * var(--tw-divide-y-reverse)); +} + +.divide-y-reverse > :not([hidden]) ~ :not([hidden]) { + --tw-divide-y-reverse: 1; +} + +.divide-x-reverse > :not([hidden]) ~ :not([hidden]) { + --tw-divide-x-reverse: 1; +} + +.divide-solid > :not([hidden]) ~ :not([hidden]) { + border-style: solid; +} + +.divide-dashed > :not([hidden]) ~ :not([hidden]) { + border-style: dashed; +} + +.divide-dotted > :not([hidden]) ~ :not([hidden]) { + border-style: dotted; +} + +.divide-double > :not([hidden]) ~ :not([hidden]) { + border-style: double; +} + +.divide-none > :not([hidden]) ~ :not([hidden]) { + border-style: none; +} + +.place-self-auto { + place-self: auto; +} + +.place-self-start { + place-self: start; +} + +.place-self-end { + place-self: end; +} + +.place-self-center { + place-self: center; +} + +.place-self-stretch { + place-self: stretch; +} + +.self-auto { + align-self: auto; +} + +.self-start { + align-self: flex-start; +} + +.self-end { + align-self: flex-end; +} + +.self-center { + align-self: center; +} + +.self-stretch { + align-self: stretch; +} + +.self-baseline { + align-self: baseline; +} + +.justify-self-auto { + justify-self: auto; +} + +.justify-self-start { + justify-self: start; +} + +.justify-self-end { + justify-self: end; +} + +.justify-self-center { + justify-self: center; +} + +.justify-self-stretch { + justify-self: stretch; +} + +.overflow-auto { + overflow: auto; +} + +.overflow-hidden { + overflow: hidden; +} + +.overflow-clip { + overflow: clip; +} + +.overflow-visible { + overflow: visible; +} + +.overflow-scroll { + overflow: scroll; +} + +.overflow-x-auto { + overflow-x: auto; +} + +.overflow-y-auto { + overflow-y: auto; +} + +.overflow-x-hidden { + overflow-x: hidden; +} + +.overflow-y-hidden { + overflow-y: hidden; +} + +.overflow-x-clip { + overflow-x: clip; +} + +.overflow-y-clip { + overflow-y: clip; +} + +.overflow-x-visible { + overflow-x: visible; +} + +.overflow-y-visible { + overflow-y: visible; +} + +.overflow-x-scroll { + overflow-x: scroll; +} + +.overflow-y-scroll { + overflow-y: scroll; +} + +.overscroll-auto { + overscroll-behavior: auto; +} + +.overscroll-contain { + overscroll-behavior: contain; +} + +.overscroll-none { + overscroll-behavior: none; +} + +.overscroll-y-auto { + overscroll-behavior-y: auto; +} + +.overscroll-y-contain { + overscroll-behavior-y: contain; +} + +.overscroll-y-none { + overscroll-behavior-y: none; +} + +.overscroll-x-auto { + overscroll-behavior-x: auto; +} + +.overscroll-x-contain { + overscroll-behavior-x: contain; +} + +.overscroll-x-none { + overscroll-behavior-x: none; +} + +.scroll-auto { + scroll-behavior: auto; +} + +.scroll-smooth { + scroll-behavior: smooth; +} + +.truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.overflow-ellipsis { + text-overflow: ellipsis; +} + +.text-ellipsis { + text-overflow: ellipsis; +} + +.text-clip { + text-overflow: clip; +} + +.whitespace-normal { + white-space: normal; +} + +.whitespace-nowrap { + white-space: nowrap; +} + +.whitespace-pre { + white-space: pre; +} + +.whitespace-pre-line { + white-space: pre-line; +} + +.whitespace-pre-wrap { + white-space: pre-wrap; +} + +.break-normal { + overflow-wrap: normal; + word-break: normal; +} + +.break-words { + overflow-wrap: break-word; +} + +.break-all { + word-break: break-all; +} + +.break-keep { + word-break: keep-all; +} + +.rounded { + border-radius: 0.25rem; +} + +.rounded-t { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} + +.rounded-r { + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; +} + +.rounded-b { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.rounded-l { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.rounded-tl { + border-top-left-radius: 0.25rem; +} + +.rounded-tr { + border-top-right-radius: 0.25rem; +} + +.rounded-br { + border-bottom-right-radius: 0.25rem; +} + +.rounded-bl { + border-bottom-left-radius: 0.25rem; +} + +.border { + border-width: 1px; +} + +.border-x { + border-left-width: 1px; + border-right-width: 1px; +} + +.border-y { + border-top-width: 1px; + border-bottom-width: 1px; +} + +.border-t { + border-top-width: 1px; +} + +.border-r { + border-right-width: 1px; +} + +.border-b { + border-bottom-width: 1px; +} + +.border-l { + border-left-width: 1px; +} + +.border-solid { + border-style: solid; +} + +.border-dashed { + border-style: dashed; +} + +.border-dotted { + border-style: dotted; +} + +.border-double { + border-style: double; +} + +.border-hidden { + border-style: hidden; +} + +.border-none { + border-style: none; +} + +.bg-\[rgb\(255\2c 0\2c 0\)\] { + --tw-bg-opacity: 1; + background-color: rgb(255 0 0 / var(--tw-bg-opacity)); +} + +.decoration-slice { + -webkit-box-decoration-break: slice; + box-decoration-break: slice; +} + +.decoration-clone { + -webkit-box-decoration-break: clone; + box-decoration-break: clone; +} + +.box-decoration-slice { + -webkit-box-decoration-break: slice; + box-decoration-break: slice; +} + +.box-decoration-clone { + -webkit-box-decoration-break: clone; + box-decoration-break: clone; +} + +.bg-fixed { + background-attachment: fixed; +} + +.bg-local { + background-attachment: local; +} + +.bg-scroll { + background-attachment: scroll; +} + +.bg-clip-border { + background-clip: border-box; +} + +.bg-clip-padding { + background-clip: padding-box; +} + +.bg-clip-content { + background-clip: content-box; +} + +.bg-clip-text { + -webkit-background-clip: text; + background-clip: text; +} + +.bg-repeat { + background-repeat: repeat; +} + +.bg-no-repeat { + background-repeat: no-repeat; +} + +.bg-repeat-x { + background-repeat: repeat-x; +} + +.bg-repeat-y { + background-repeat: repeat-y; +} + +.bg-repeat-round { + background-repeat: round; +} + +.bg-repeat-space { + background-repeat: space; +} + +.bg-origin-border { + background-origin: border-box; +} + +.bg-origin-padding { + background-origin: padding-box; +} + +.bg-origin-content { + background-origin: content-box; +} + +.object-contain { + -o-object-fit: contain; + object-fit: contain; +} + +.object-cover { + -o-object-fit: cover; + object-fit: cover; +} + +.object-fill { + -o-object-fit: fill; + object-fit: fill; +} + +.object-none { + -o-object-fit: none; + object-fit: none; +} + +.object-scale-down { + -o-object-fit: scale-down; + object-fit: scale-down; +} + +.text-left { + text-align: left; +} + +.text-center { + text-align: center; +} + +.text-right { + text-align: right; +} + +.text-justify { + text-align: justify; +} + +.text-start { + text-align: start; +} + +.text-end { + text-align: end; +} + +.align-baseline { + vertical-align: baseline; +} + +.align-top { + vertical-align: top; +} + +.align-middle { + vertical-align: middle; +} + +.align-bottom { + vertical-align: bottom; +} + +.align-text-top { + vertical-align: text-top; +} + +.align-text-bottom { + vertical-align: text-bottom; +} + +.align-sub { + vertical-align: sub; +} + +.align-super { + vertical-align: super; +} + +.text-xl { + font-size: 1.25rem; + line-height: 1.75rem; +} + +.font-bold { + font-weight: 700; +} + +.uppercase { + text-transform: uppercase; +} + +.lowercase { + text-transform: lowercase; +} + +.capitalize { + text-transform: capitalize; +} + +.normal-case { + text-transform: none; +} + +.italic { + font-style: italic; +} + +.not-italic { + font-style: normal; +} + +.normal-nums { + font-variant-numeric: normal; +} + +.ordinal { + --tw-ordinal: ordinal; + font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction); +} + +.slashed-zero { + --tw-slashed-zero: slashed-zero; + font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction); +} + +.lining-nums { + --tw-numeric-figure: lining-nums; + font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction); +} + +.oldstyle-nums { + --tw-numeric-figure: oldstyle-nums; + font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction); +} + +.proportional-nums { + --tw-numeric-spacing: proportional-nums; + font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction); +} + +.tabular-nums { + --tw-numeric-spacing: tabular-nums; + font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction); +} + +.diagonal-fractions { + --tw-numeric-fraction: diagonal-fractions; + font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction); +} + +.stacked-fractions { + --tw-numeric-fraction: stacked-fractions; + font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction); +} + +.text-\[\#336699\]\/\[\.35\] { + color: rgb(51 102 153 / .35); +} + +.text-blue-500 { + --tw-text-opacity: 1; + color: rgb(59 130 246 / var(--tw-text-opacity)); +} + +.underline { + text-decoration-line: underline; +} + +.overline { + text-decoration-line: overline; +} + +.line-through { + text-decoration-line: line-through; +} + +.no-underline { + text-decoration-line: none; +} + +.decoration-solid { + text-decoration-style: solid; +} + +.decoration-double { + text-decoration-style: double; +} + +.decoration-dotted { + text-decoration-style: dotted; +} + +.decoration-dashed { + text-decoration-style: dashed; +} + +.decoration-wavy { + text-decoration-style: wavy; +} + +.antialiased { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.subpixel-antialiased { + -webkit-font-smoothing: auto; + -moz-osx-font-smoothing: auto; +} + +.bg-blend-normal { + background-blend-mode: normal; +} + +.bg-blend-multiply { + background-blend-mode: multiply; +} + +.bg-blend-screen { + background-blend-mode: screen; +} + +.bg-blend-overlay { + background-blend-mode: overlay; +} + +.bg-blend-darken { + background-blend-mode: darken; +} + +.bg-blend-lighten { + background-blend-mode: lighten; +} + +.bg-blend-color-dodge { + background-blend-mode: color-dodge; +} + +.bg-blend-color-burn { + background-blend-mode: color-burn; +} + +.bg-blend-hard-light { + background-blend-mode: hard-light; +} + +.bg-blend-soft-light { + background-blend-mode: soft-light; +} + +.bg-blend-difference { + background-blend-mode: difference; +} + +.bg-blend-exclusion { + background-blend-mode: exclusion; +} + +.bg-blend-hue { + background-blend-mode: hue; +} + +.bg-blend-saturation { + background-blend-mode: saturation; +} + +.bg-blend-color { + background-blend-mode: color; +} + +.bg-blend-luminosity { + background-blend-mode: luminosity; +} + +.mix-blend-normal { + mix-blend-mode: normal; +} + +.mix-blend-multiply { + mix-blend-mode: multiply; +} + +.mix-blend-screen { + mix-blend-mode: screen; +} + +.mix-blend-overlay { + mix-blend-mode: overlay; +} + +.mix-blend-darken { + mix-blend-mode: darken; +} + +.mix-blend-lighten { + mix-blend-mode: lighten; +} + +.mix-blend-color-dodge { + mix-blend-mode: color-dodge; +} + +.mix-blend-color-burn { + mix-blend-mode: color-burn; +} + +.mix-blend-hard-light { + mix-blend-mode: hard-light; +} + +.mix-blend-soft-light { + mix-blend-mode: soft-light; +} + +.mix-blend-difference { + mix-blend-mode: difference; +} + +.mix-blend-exclusion { + mix-blend-mode: exclusion; +} + +.mix-blend-hue { + mix-blend-mode: hue; +} + +.mix-blend-saturation { + mix-blend-mode: saturation; +} + +.mix-blend-color { + mix-blend-mode: color; +} + +.mix-blend-luminosity { + mix-blend-mode: luminosity; +} + +.mix-blend-plus-lighter { + mix-blend-mode: plus-lighter; +} + +.shadow { + --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.\!shadow { + --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1) !important; + --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color) !important; + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow) !important; +} + +.outline-none { + outline: 2px solid transparent; + outline-offset: 2px; +} + +.outline { + outline-style: solid; +} + +.outline-dashed { + outline-style: dashed; +} + +.outline-dotted { + outline-style: dotted; +} + +.outline-double { + outline-style: double; +} + +.ring { + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); +} + +.ring-inset { + --tw-ring-inset: inset; +} + +.blur { + --tw-blur: blur(8px); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} + +.drop-shadow { + --tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 1px rgb(0 0 0 / 0.06)); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} + +.grayscale { + --tw-grayscale: grayscale(100%); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} + +.invert { + --tw-invert: invert(100%); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} + +.\!invert { + --tw-invert: invert(100%) !important; + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow) !important; +} + +.sepia { + --tw-sepia: sepia(100%); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} + +.filter { + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} + +.\!filter { + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow) !important; +} + +.filter-none { + filter: none; +} + +.backdrop-blur { + --tw-backdrop-blur: blur(8px); + -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); + backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); +} + +.backdrop-grayscale { + --tw-backdrop-grayscale: grayscale(100%); + -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); + backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); +} + +.backdrop-invert { + --tw-backdrop-invert: invert(100%); + -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); + backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); +} + +.backdrop-sepia { + --tw-backdrop-sepia: sepia(100%); + -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); + backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); +} + +.backdrop-filter { + -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); + backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); +} + +.backdrop-filter-none { + -webkit-backdrop-filter: none; + backdrop-filter: none; +} + +.transition { + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.ease-in { + transition-timing-function: cubic-bezier(0.4, 0, 1, 1); +} + +.ease-out { + transition-timing-function: cubic-bezier(0, 0, 0.2, 1); +} + +.ease-in-out { + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); +} + +.content-\[\'this-is-also-valid\]-weirdly-enough\'\] { + --tw-content: 'this-is-also-valid]-weirdly-enough'; + content: var(--tw-content); +} + +.\[a-zA-Z\:_\] { + a-z-a--z: ; +} + +.hover\:font-bold:hover { + font-weight: 700; +} + +.before\:hover\:text-center:hover::before { + content: var(--tw-content); + text-align: center; +} + +.hover\:before\:text-center:hover::before { + content: var(--tw-content); + text-align: center; +} + +.hover\:focus\:text-center:focus:hover { + text-align: center; +} + +.focus\:hover\:text-center:hover:focus { + text-align: center; +} + +@media (min-width: 640px) { + .sm\:container { + width: 100%; + } + + @media (min-width: 640px) { + .sm\:container { + max-width: 640px; + } + } + + @media (min-width: 768px) { + .sm\:container { + max-width: 768px; + } + } + + @media (min-width: 1024px) { + .sm\:container { + max-width: 1024px; + } + } + + @media (min-width: 1280px) { + .sm\:container { + max-width: 1280px; + } + } + + @media (min-width: 1536px) { + .sm\:container { + max-width: 1536px; + } + } + + .sm\:underline { + text-decoration-line: underline; + } +} + +@media (prefers-color-scheme: dark) { + @media (min-width: 1024px) { + .dark\:lg\:hover\:\[paint-order\:markers\]:hover { + paint-order: markers; + } + } +}
A package.json

@@ -0,0 +1,16 @@

+{ + "name": "5ika-home", + "version": "1.0.0", + "main": "index.js", + "author": "Tim Izzo - 5ika", + "license": "MIT", + "private": true, + "scripts": { + "twd": "tailwindcss -i ./src/style.css -o ./build/style.css", + "build": "node bin/build" + }, + "dependencies": { + "marked": "^4.1.1", + "tailwindcss": "^3.1.8" + } +}
A pages/index.md

@@ -0,0 +1,25 @@

+> Dev & Ops đŸ§‘â€đŸ’» Open-Source 👐 Écologie đŸŒ± SobriĂ©tĂ© numĂ©rique ✹ + +Partisan d'un Internet ouvert, sobre et distribuĂ©, je dĂ©veloppe et met en place des outils digitaux par mon activitĂ© d'indĂ©pendant ainsi qu'au travers de l'entreprise auto-gouvernĂ©e [Octree](https://octree.ch). En parallĂšle, j'enseigne le mĂ©tier de dĂ©veloppeur/euse Ă  [CREA GenĂšve](https://www.creageneve.com/bachelor/developpement-web-et-applications/). + +## Blog + +- [19.09.2022 - Confort et stabilitĂ©](./posts/confort-et-stabilite.html) +- [18.05.2022 - DĂ©connexion](./posts/deconnexion.html) +- [19.03.2022 - Pour un Web sain](./posts/pour-un-web-sain.html) +- [13.11.2021 - Vers l'Internet de demain](./posts/vers-l-internet-de-demain.html) + +## Projets + +- 🚗 [Caroster](https://caroster.io/) <small>[Octree]</small> +- ♻ [R-21](https://r-21.ch) <small>[Octree]</small> +- 🏱 [EVOSPE](https://evospe.ch) <small>[Octree]</small> +- đŸ—łïž [Civic Echo](https://www.demaincestaujourdhui.online/) <small>[Octree]</small> +- 👐 [GenĂšve Open-Source](https://open-ge.ch/) +- 🔓 [Denotion](https://github.com/5ika/denotion) +- 🚋 [tipigee](https://github.com/5ika/tipigee) <small>_inactif_</small> + +## Contact + +- ✉ [tim@5ika.ch](mailto:tim@5ika.ch) +- 🩣 [Mastodon](https://fosstodon.org/web/@5ika)
A pages/posts/confort-et-stabilite.md

@@ -0,0 +1,48 @@

+# Confort et stabilitĂ© + +> 19.09.22 + +À 25 ans, j’ai eu la chance de rejoindre une Ă©quipe de 5 personnes avec qui j’ai montĂ© une entreprise de dĂ©veloppement informatique. En se basant sur une courte expĂ©rience de lancement d’application ratĂ©, nous avons dĂ©cidĂ© que nous voulions profiter du caractĂšre multi-compĂ©tent de notre Ă©quipe pour gagner nos vies. C’est donc en aoĂ»t 2016 que nous avons lancĂ© [Octree](https://octree.ch), Ă  l’origine une boĂźte de dĂ©veloppement de sites Web sur mesure. + +Étant toujours en Master, j’ai vu lĂ  une maniĂšre douce d’attaquer le monde du travail. Le fait de travailler dans ma propre entreprise m’a toujours sĂ©duit sans trop savoir pourquoi, probablement Ă  cause du semblant de facilitĂ© que cela montre: pas de patron, pas besoin de chercher un job, grande libertĂ©, possibilitĂ© de s’enrichir rapidement sans trop d’effort si les choses marchent. Évidemment, a posteriori, j’ai bien eu le temps de me rendre compte que tout ça n’était que des apparences. + +AprĂšs 3 ans de recherche de croissance et de stabilitĂ©, Octree a subi une grosse crise et perdu beaucoup de plumes. Nous sommes passĂ©s de 10 personnes Ă  4, tous Ă  des taux de travail partiels pour pouvoir maintenir la boĂźte sous assistance respiratoire. + +De mon cĂŽtĂ©, j’ai dĂ©butĂ© mon activitĂ© d’indĂ©pendant dĂ©but 2020, en plein Covid. L’idĂ©e Ă©tait de pouvoir appliquer l’ensemble de mes compĂ©tences techniques. MĂȘme si je peux dire aujourd’hui que cela fonctionne, j’ai clairement nĂ©gligĂ© les capacitĂ©s nĂ©cessaires en matiĂšre de prospection. + +CĂŽtĂ© Octree, la crise a Ă©tĂ© rĂ©vĂ©latrice et a lancĂ© beaucoup de questions: avec qui nous voulons collaborer ? Pour quels clients ? Que dĂ©fendons-nous ? Qui sommes-nous ? Quel avenir pour la boĂźte ? + +Notre gouvernance en [Holacracy](https://fr.wikipedia.org/wiki/Holacratie), fraĂźchement instaurĂ©e juste avant la crise, nous a apportĂ© les clĂ©s pour avancer sur ces questions. Le passage Ă  l’Holacracy nous a amenĂ© Ă  nous fixer une _raison d’ĂȘtre_, c’est-Ă -dire une formulation concrĂšte de ce que nous souhaitons atteindre, le pourquoi de notre travail. À quatre, nous avons pris cela plus au sĂ©rieux qu’alors et avons Ă©tabli la raison d’ĂȘtre suivante, qui nous guide toujours: _CrĂ©er un cercle vertueux entre la sociĂ©tĂ© et la technologie au profit de l’Humain_. + +PoussĂ©s par cette raison d’ĂȘtre, nous avons ainsi passĂ© 3 ans Ă  reconstruire Octree pas aprĂšs pas. Lentement mais sĂ»rement. Nous avons engagĂ© des personnes en phase avec notre culture d’entreprise de plus en plus affirmĂ©e et nous avons embrassĂ© pleinement l’Holacracy et son potentiel. + +Aujourd’hui, les projets que nous dĂ©veloppons n’ont rien Ă  voir avec ceux des dĂ©buts. Nous travaillons avec des entitĂ©s publiques comme l’[État de GenĂšve](https://participer.ge.ch/), la [ville de Lausanne](https://participer.lausanne.ch/). Nous accompagnons des communes et des entreprises genevoises vers la transition numĂ©rique avec [R-21](https://r-21.ch/) et poussons nos propres applications comme [Caroster](https://caroster.io/). + +Nous sommes fiers de ce que nous faisons et de part les choix que l’équipe d’Octree a fait ces derniĂšres annĂ©es, nous nous sommes distinguĂ©s des entreprises conventionnelles: + +- Tout le monde touche le mĂȘme salaire (proportionnellement au taux de travail de chacun). Ce salaire est augmentĂ© progressivement avec le dĂ©veloppement de l’entreprise. +- Nous sommes une sĂ rl Ă  but non lucratif. Octree fait notamment partie du [rĂ©seau de l’économie sociale et solidaire](https://www.apres-ge.ch/). +- Personne ne travail Ă  100%. On a donc tous du temps Ă  cĂŽtĂ© pour faire autre chose ou vivre, tout simplement. +- Nous ne souhaitons pas devenir une grosse entreprise. 15 personnes semblent ĂȘtre un maximum avant de scinder la boĂźte. +- La confiance et la communication plutĂŽt que la peur et l’autoritĂ©. + +Mais cela n’est pas “tout facile” comme le jeune moi pouvait le penser 6 ans plus tĂŽt. Ces choix entraĂźnent des renoncements: + +- Avec un Master HES dans le domaine de l’IT, le salaire moyen en Suisse est deux fois plus grand que ce que je touche aujourd’hui en prenant en compte mon activitĂ© chez Octree, mes projets indĂ©pendants et les cours que je donne chez CREA. +- Il y a toujours une partie de mon cerveau dans un ou plusieurs projets en cours. La sĂ©paration entre le privĂ©e et le pro est fine, voire inexistante sur certaines pĂ©riodes. Pour quelqu’un qui peine Ă  gĂ©rer son stress comme moi, cela demande une autre forme de travail plus personnel. +- Le fait d’ĂȘtre une trĂšs petite entreprise implique de l’instabilitĂ©. Par exemple, un gros projet annulĂ© peut avoir un impact fort sur la santĂ© de la boĂźte. +- Il n’est pas possible de gĂ©rer “juste son p’tit cul”. En plus de son travail quotidien propre au mĂ©tier, il faut parfois prendre la casquette de facilitateur, de secrĂ©taire, de RH, de mĂ©diateur, d’administrateur, d'accompagnateur. Personne ne peux imposer de dĂ©cision aux autres et personne ne peut ĂȘtre virĂ©. + +Ainsi, rĂ©guliĂšrement j’en reviens Ă  me poser ces questions: Est-ce que c’est ce que je veux ? Est-ce que je n’aspire pas Ă  plus de stabilitĂ© et de confort financier ? Est-ce que le choix de la facilitĂ© n’est pas finalement le bon choix ? + +À chaque fois, la rĂ©ponse est aisĂ©e: Non. + +Non car le salaire n’est qu’une partie de ce que l’entreprise offre Ă  ses employĂ©-e-s. Octree, comme les autres boĂźtes auto-gouvernĂ©es, offre tout un panel de choses qui ne seraient pas possibles dans une entreprise conventionnelle: je fais un travail qui a du sens, je prends moi-mĂȘme les dĂ©cisions qui concernent mon travail, j’ai la possibilitĂ© d’adapter ma place au sein de l’entreprise, je peux voir les effets de mon travail et j’en rĂ©cupĂšre les fruits de maniĂšre Ă©quitable. Je travail avec des personnes passionnĂ©es, qui veulent s’impliquer et en qui j’ai confiance. + +Non car mĂȘme si je cogite continuellement sur des projets, c’est avant tout parce que je suis passionnĂ© par ce que je fais et j’ai du plaisir Ă  rĂ©flĂ©chir quand mes pensĂ©es sont maĂźtrisĂ©es. Je cherche constamment comment amĂ©liorer les choses, les processus, le code, la qualitĂ© du produit, etc.. + +Non car nous dĂ©veloppons des projets qui ont du sens et qui rĂ©pondent Ă  un besoin rĂ©el plutĂŽt qu’à vendre et faire du chiffre. Si un produit est pertinent et est dĂ©veloppĂ© correctement, il peut devenir un vrai outil et a peu de chance d’ĂȘtre avortĂ©. + +Non car je crois Ă  la puissance de la communication et de la confiance. Dans les entreprises conventionnelles, si vous ne faites pas du bon travail ou si vous ne faites pas vos 8h par jour, vous pouvez ĂȘtre virĂ©. Quand votre supĂ©rieur-e vous demande quelque chose, vous devez le faire, mĂȘme si vous trouvez cela stupide ou n’ĂȘtes pas d’accord. On vous engage pour un job fixe correspondant Ă  un cahier des charges et vous ĂȘtes cadrĂ©s dans ce que vous pouvez apporter Ă  l’entreprise et ce qu’elle peut vous donner en retour. Vous voulez faire plus ? Vous voulez faire mieux ? Non, vous remplissez votre cahier des charges ou vous partez. + +Renoncer aux quatre points Ă©voquĂ©s plus haut n’est pas un problĂšme car il y a bien plus Ă  gagner. Les obligations de la vie et la pression sociale me ramĂšnent toujours Ă  ce choix et c’est avec fiertĂ© que je continue Ă  crĂ©er les choses plutĂŽt qu’à les subir.
A pages/posts/deconnexion.md

@@ -0,0 +1,29 @@

+# DĂ©connexion + +> 18.05.2022 + +Il y a 3 ans, j’ai dĂ©cidĂ© de me couper des rĂ©seaux sociaux alors que j’en Ă©tait totalement addict. + +Je me suis inscrit sur Facebook en 2007 quand le rĂ©seau commençait tout juste Ă  devenir hype. AprĂšs MSN oĂč je retrouvais mes potes le soir pour discuter de tout et surtout de rien, j’étais content d’avoir une plateforme pour partager des publications d’ado mystĂ©rieux et profond Ă  de plus en plus de gens depuis un bureau chez mes parents. Est ensuite arrivĂ© Instagram oĂč, comme les autres de mon Ăąge, j’ai pu laisser exprimer ma fibre artistique en publiant des photos pour montrer comment ma vie elle est bien. + +Avec mon premier smartphone, j’ai pu emmener mon rĂ©seau de “potes” n’importe oĂč. Toujours dans la poche, je n’avais plus besoin d’attendre aprĂšs l’école pour me tenir aux courants des derniĂšres news trĂ©pignantes des autres. Du bout de mes doigts, je pouvais contacter n’importe qui pour lui dire n’importe quoi, depuis n’importe oĂč. C’était beau ! + +Les annĂ©es passantes et la maturitĂ© grandissante, j’ai peu Ă  peu pris du recul sur mon utilisation des rĂ©seaux sociaux. MalgrĂ© une constante connexion avec mes pairs, nos conversations n’avaient pas vraiment de substance. Les quelques fois oĂč j’ai vraiment utilisĂ© Facebook les derniĂšres annĂ©es, c’était pour ĂȘtre tenu aux courants de certains Ă©vĂ©nements et de qui y allait. + +Pourtant, comme beaucoup d’autres, je me suis cachĂ© derriĂšre la grande excuse “Oui mais ça me permet de rester en contact avec d’anciens potes ou personnes que je ne vois pas souvent”. Il faut arrĂȘter de se mentir: Non, ce n’est pas vrai. Je n’ai pas besoin d’avoir un canal de discussion constant avec des gens avec qui je parle une fois tous les 10 ans. Si je veux vraiment les contacter et maintenir une relation avec eux, je les appelle et je les vois. + +Avec le temps, j’ai rĂ©alisĂ© que je n’avais pas besoin d’avoir 500 amis potentiels car je n’aurais de toute façon pas assez de temps pour tous. Une vraie relation entre deux personnes s’entretient, prend du temps et change avec le temps. D’aprĂšs l’anthropologue Robin Dunbar, nous sommes incapables de tenir une relation humaine stable avec plus de 150 personnes (en moyenne). C’est une limite de notre cerveau ! Dans ce cas, pas besoin d’un outil pour gĂ©rer ses relations comme un troupeau. + +En aoĂ»t 2018, j’ai donc sautĂ© le pas: j’ai supprimĂ© mes comptes Facebook, Instagram et Twitter. Et franchement, ça a Ă©tĂ© horrible. + +Du jour au lendemain, je me suis senti totalement dĂ©connectĂ©. Non pas d’Internet mais de mes amis et des diffĂ©rents groupes auxquelles j’appartenais. HabituĂ© Ă  ĂȘtre toujours un peu au courant de tout grĂące aux plateformes en ligne, j’ai dĂ©couvert que je devais maintenant aller Ă  la rencontre de mes amis pour savoir s’il se passait des choses, s’il y avait un anniversaire, si un tel allait Ă  un concert ou si tel groupe d’amis se retrouvait pour un barbecue. Pour un introverti comme moi, cela demande beaucoup d’effort et d’inconfort. Du jour au lendemain, j’ai coupĂ© court Ă  des centaines de “relations” que j’avais alors sur Facebook et Instagram. + +Puis, de semaine en semaine, j’ai repris contact avec certains amis en les contactant directement. En ayant des discussions avec un dĂ©but et une fin, j’ai redĂ©couvert certaines personnes et j’ai construit des relations un peu plus fortes avec un nombre plus restreint d’amis. J’ai aujourd’hui 23 personnes que je contacte rĂ©guliĂšrement, que j’apprĂ©cie et avec qui je passe des moments vrais et sincĂšres (en dehors de la famille bien sĂ»r). + +Cela reste difficile d’ĂȘtre dĂ©connectĂ© des diffĂ©rentes plateformes. En arrĂȘtant les rĂ©seaux d’”amis”, j’ai un peu compensĂ© avec LinkedIn pendant quelque temps. MĂȘme si je suis encore un peu prĂ©sent sur ce rĂ©seau professionnel, j’ai remarquĂ© que je n’ai rien Ă  y partager (je ne fais que repartager ce que postent les entitĂ©s dont je fais partie mais le monde peut s’en passer) et que les quelques rares informations intĂ©ressantes sont perdues dans un ocĂ©an d’information inutile et de marketing. + +Finalement, tout ce que je peux trouver d’intĂ©ressant sur ces rĂ©seaux se trouve aussi ailleurs sur le Web et je prĂ©fĂšre dĂ©sormais utiliser un agrĂ©gateur qui me condense les publications des sites que je suis sans le superflu autour. + +Je ne passe plus mes journĂ©es Ă  scroller dans la vie des autres mais j’ai dĂ©sormais tout le temps de rĂ©flĂ©chir et de me concentrer sur des choses qui valent la peine, les choses de la vraie vie, celle qui est palpable. + +La dĂ©connexion n’a pas Ă©tĂ© simple et la tentation de revenir sur les plateformes sociales, les anciennes comme les nouvelles, ne part pas vraiment. Mais quand on rĂ©ussit Ă  construire de vraies relations, il devient Ă©vident qu’on n’a pas besoin de Facebook, Instagram, TikTok et leurs compĂšres.
A pages/posts/pour-un-web-sain.md

@@ -0,0 +1,29 @@

+# Pour un Web sain + +> 19.03.2022 + +Le Web que nous utilisons aujourd’hui a dĂ©viĂ©. Il est trĂšs loin du projet que son crĂ©ateur avait en tĂȘte lors de sa mise en place au dĂ©but des annĂ©es ‘90. À l’origine, le Web devait ĂȘtre un rĂ©seau pleinement ouvert, dĂ©centralisĂ© et accessibles Ă  toutes et tous sans distinction. + +Son objectif premier Ă©tait de faciliter le partage d’information. Pas de froufrous, de cookies, de pubs, de pop-ups, de banniĂšres ou de scroll infini. + +Juste de l’information pure, du texte et quelques images. + +Pas un systĂšme omniprĂ©sent et addictif se nourrissant de notre temps, de notre argent et de notre esprit. + +Juste un outil interconnectant les humains du monde et leurs idĂ©es. + +En 30 ans, nous avons voulu toujours en demander plus au Web en lui donnant une place et des moyens toujours plus importants jusqu’à arriver Ă  une situation malsaine. + +De par mon mĂ©tier et ma passion, je “vis” sur le Web chaque jour. C’est en agissant sur le Web que je gagne de l’argent et que j’aime passer du temps. Je devrais donc ĂȘtre un ambassadeur du “tout digital”, dĂ©fenseur de l’accroissement de la connexion et du dĂ©bit. + +MalgrĂ© 15 annĂ©es dĂ©diĂ©es Ă  l’informatique, j’ai peur du Web d’aujourd’hui. Dans mon expĂ©rience de vie et dans mon entourage, je peux observer chaque jour ce que la sur-connexion peut crĂ©er en nous. La dĂ©pendance qui nous attache Ă  un Ă©cran, toujours dans l’attente d’avoir une petite pastille rouge qui “pop” avec l’espoir d’avoir Ă©tĂ© considĂ©rĂ© par d’autres. Le sentiment d’apathie qui nous envahit quand le moindre moment oĂč notre cerveau n’a rien Ă  faire nous sortons notre tĂ©lĂ©phone pour scroller bĂȘtement en recherche de “quelque chose permettant de donner ou recevoir de l’attention”. Et surtout, le sentiment de solitude viscĂ©rale qui nous prend alors que nous sommes liĂ©s au monde entier grĂące au truc dans notre poche. + +J’ai eu la chance d’avoir passĂ© mon enfance avant que les chaĂźnes ne se mettent en place. Sur l’ordinateur familial, nous devions partager le temps d’écran et surtout, le temps de connexion au rĂ©seau de tĂ©lĂ©com car Ă  cette Ă©poque, pas si lointaine, nous ne pouvions pas encore utiliser le tĂ©lĂ©phone et Internet en mĂȘme temps. + +C’était une Ăšre oĂč le Web Ă©tait simple. On voyait quelques sites extravagants pleins de couleurs mais les informations qu’on trouvait Ă©taient rĂ©flĂ©chies et facile d’accĂšs. Il n’était pas nĂ©cessaire d’en mettre plein la vue avec des animations et des contenus de remplissage optimisĂ©s pour le SEO. + +Pourtant, ce qui faisait le Web d’hier n’a pas disparu. Les technologies sont toujours lĂ  et ont peu voir pas changĂ©es (HTML, HTTP,...). Nous avons juste rajoutĂ© des couches de merdes dessus pour mieux sucer les esprits et faire du business. + +Car oui, quand nous utilisons le Web moderne, nous permettons Ă  des entreprises de s’enrichir. Et cela mĂȘme si nous ne dĂ©boursons pas un sou. _Si c’est gratuit, c’est toi le produit._ Ce n’est pas grĂące Ă  des dons que Facebook et Google font partie des boites les plus riches et puissantes de la planĂšte. + +Je ne crois pas qu’il soit envisageable de retourner au Web des dĂ©buts mais il est possible nĂ©anmoins, de maniĂšre individuelle, de changer la maniĂšre dont on s’en sert pour revenir Ă  une utilisation saine, respectueuse de soi-mĂȘme et des autres humains. C’est le chemin que je souhaite raconter Ă  travers ce blog.
A pages/posts/vers-l-internet-de-demain.md

@@ -0,0 +1,37 @@

+# Vers l'Internet de demain + +> 13.11.2021 + +Commençons avec une vĂ©ritĂ© Ă©tablie: notre utilisation actuelle de l'informatique et d'Internet engendre une consommation Ă©nergĂ©tique dĂ©mentielle et bien supĂ©rieure Ă  ce que les ressources de notre planĂšte peuvent satisfaire. + +Dans ce domaine, l'Histoire rĂ©cente nous montre deux choses : + +- Notre sociĂ©tĂ© globalisĂ©e et interconnectĂ©e peut ĂȘtre mise Ă  mal par des impacts survenant trĂšs loin de chez nous. +- Nous sommes aujourd'hui totalement dĂ©pendant d'Internet, dans nos vies privĂ©es comme professionnelles. + +D'un point de vue un peu fataliste, nous ne pouvons lutter contre cela car Internet fait Ă©cho Ă  notre besoin humain primitif de lien social. Pire que cela, les rĂ©seaux sociaux sont devenus le moyen principal de rĂ©pondre Ă  ce besoin pour une bonne partie de la planĂšte. Essayez de vous dĂ©brancher pendant quelques semaines de toutes les plateformes sociales en ligne et vous verrez que cela donne un sentiment de solitude, de mise Ă  l'Ă©cart. L'impression de lutter contre son instinct. + +ParallĂšlement Ă  cela, Internet (et l'informatique de maniĂšre gĂ©nĂ©rale) repose sur l'Ă©lectronique elle mĂȘme nĂ©cessitant l'usage de l'Ă©lectricitĂ©, une source d'Ă©nergie artificielle (dans la maniĂšre dont on s'en sert). Ainsi, il est absolument impossible d'obtenir un Internet avec une empreinte Ă©cologique nulle, quoique l'on fasse. + +ConsidĂ©rant cela, comment peut-on utiliser Internet sans accentuer les pressions Ă©cologiques que nous faisons peser sur notre planĂšte ? Est-ce que la seule solution n'est-elle pas de cesser d'utiliser Internet et de repenser nos vies en profondeur au plus vite ? + +Je ne pense pas qu'il faille, ni mĂȘme que ce soit possible, que l'on se passe aujourd'hui d'Internet. Nous en avons besoin. C'est devenu une nĂ©cessitĂ© pour nos vies et on ne peut revenir en arriĂšre. Mais je pense que l'on peut changer notre conception et notre utilisation d'Internet vers plus de sobriĂ©tĂ© Ă©nergĂ©tique. + +Nous avons tendance Ă  l'oublier, pris entre les milliers d'applications que l'on utilise, mais Internet est avant tout un **outil**. Il existe parce que l'on a besoin de lui, il nous est _utile_. On ne vit pas pour crĂ©er Internet, on crĂ©e Internet pour pouvoir faciliter nos vies. Et son utilitĂ© est qu'il nous permet de communiquer entre humains, d'Ă©changer de l'information. + +Aujourd'hui, cet notion d'outil a mutĂ© vers une utilitĂ© qui serait plutĂŽt "faire en sorte que des entreprises puissent se faire de l'argent en atteignant chaque humain". Mais Ă  titre individuel, en tant qu'_humain_, a-t-on vraiment besoin que l'on nous indique ce que l'on veut acheter? ce que l'on doit _liker?_ avec qui l'on doit communiquer? comment les personnes cĂ©lĂšbres vivent leur vie? comment les chats sont trop mignons ? + +Dans la rĂ©alitĂ© des choses, plutĂŽt non. Une majoritĂ© de ce que l'on Ă©change sur le Web est destinĂ© Ă  des humains qui sont gĂ©ographiquement proches de nous: communiquer avec ses proches ou ses amis, chercher des informations sur une manifestation, rĂ©server un restaurant ou une place de cinĂ©, partager des photos, des articles... + +Pourtant, avec les applications et services en ligne que nous utilisons chaque jour, les donnĂ©es transitent Ă  travers des macro-noeuds Ă  l'autre bout du globe qui concentrent tout le trafic et le redistribue (Google, Facebook,...). Quand vous envoyez un message Ă  votre voisin par Whatsapp, le message passent par un certains nombre de routeurs jusqu'Ă  atteindre un serveur aux États-unis pour ĂȘtre traitĂ© puis refais le chemin en sens inverse jusqu'Ă  l'ordinateur de votre voisin. Au passage, le message s'alourdit d'un peu de publicitĂ© et de scripts analysant votre utilisation du service. + +Pourquoi ne pas lui envoyer directement ? Pourquoi consommer une grande quantitĂ© d'Ă©nergie pour faire un aller-retour Ă  travers le monde plutĂŽt que de prendre le chemin le plus court sur le rĂ©seau vers votre voisin ? + +Si on considĂšre qu'Internet est un outil pour Ă©changer essentiellement des donnĂ©es avec des gens gĂ©ographiquement proches de nous et de temps en temps des gens plus Ă©loignĂ©s, nous pourrions considĂ©rer un Internet diffĂ©rent: + +- Un rĂ©seau plus lent mais plus sĂ»rs, favorisant la confidentialitĂ©, l'authenticitĂ© et l'intĂ©gritĂ© des donnĂ©es Ă©changĂ©es plutĂŽt que la vitesse. Techniquement, cela nous permettrait de mettre en place des rĂ©seaux longues distances, plus universellement accessibles. +- Un rĂ©seau pas disponible 100% du temps mais peu consommateur en Ă©nergie. Techniquement, on pourrait ainsi envisager de l'alimenter avec de l'Ă©nergie solaires, Ă©olienne, voir produite par la force humaine. + +Depuis maintenant 30 ans, dans la quasi-totalitĂ© des pays du monde, nous avons des Ă©quipements de tĂ©lĂ©communication puissants capables de relayer des messages efficacement. Une connexion WiFi ou Bluetooth peut transmettre des messages entre deux systĂšmes distants d'une centaine de mĂštres et on a dĂ©jĂ  ce qu'il faut dans nos tĂ©lĂ©phones. Il y a Ă©galement les rĂ©seaux LoRaWAN, maintenant prĂ©sents un peu partout et dĂ©diĂ©s Ă  l'Internet des Objets, qui permettent de transmettre des (petits) messages sur des dizaines de kilomĂštres. Les rĂ©seaux cellulaires (2G, 3G, 4G,...) correspondent aussi Ă  des systĂšmes de tĂ©lĂ©communications omniprĂ©sents et dĂ©jĂ  compatibles avec ce que l'on a dans la poche. + +En se basant sur les rĂ©seaux dĂ©jĂ  existants proposĂ©s par nos fournisseurs d'accĂšs Internet, il existe aujourd'hui un nombre croissants de technologies et de protocoles nous permettant de nous affranchir des macro-noeuds et retrouver le fonctionnement d'Internet tel qu'il a Ă©tĂ© pensĂ© il y a plus de 30 ans. La condition pour que cet Internet neutre et dĂ©centralisĂ© puisse prendre sa place dĂ©pend de chaque utilisateur: si vous utilisez un service centralisĂ© comme Facebook ou Google, alors ce service (et l'entreprise derriĂšre) gagne en puissance. Mais si vous utilisez des technologies dĂ©centralisĂ©es voir distribuĂ©es alors vous donner de la puissance Ă  ces alternatives et vous participez Ă  la mise en place de l'Internet de demain.
A src/style.css

@@ -0,0 +1,46 @@

+@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + body { + @apply bg-slate-100; + } + + main { + @apply container; + @apply max-w-3xl; + @apply mx-auto; + @apply px-4; + @apply py-12; + + font-family: Menlo, Monaco, Lucida Console, Liberation Mono, + DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif; + } + + h1 { + @apply text-2xl; + @apply font-bold; + } + + h2 { + @apply text-xl; + @apply font-bold; + @apply mt-8; + @apply mb-4; + } + + p { + @apply mt-8; + } + + blockquote { + @apply text-gray-700; + } + + a { + @apply text-indigo-600; + @apply hover:text-indigo-400; + @apply transition-all; + } +}
A src/template.html

@@ -0,0 +1,19 @@

+<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <link + rel="icon" + href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🩌</text></svg>" + /> + <link href="/style.css" rel="stylesheet" /> + <title>$TITLE</title> + </head> + <body> + <main> + <h1 class="mb-8">Tim Izzo @<a href="/">5ika.ch</a></h1> + $CONTENT + </main> + </body> +</html>
A tailwind.config.js

@@ -0,0 +1,8 @@

+/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ["./**/*.{html,js}"], + theme: { + extend: {}, + }, + plugins: [], +};
A yarn.lock

@@ -0,0 +1,430 @@

+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +acorn-node@^1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" + integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== + dependencies: + acorn "^7.0.0" + acorn-walk "^7.0.0" + xtend "^4.0.2" + +acorn-walk@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^7.0.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +camelcase-css@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +color-name@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +defined@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.1.tgz#c0b9db27bfaffd95d6f61399419b893df0f91ebf" + integrity sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q== + +detective@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.1.tgz#6af01eeda11015acb0e73f933242b70f24f91034" + integrity sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw== + dependencies: + acorn-node "^1.8.2" + defined "^1.0.0" + minimist "^1.2.6" + +didyoumean@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" + integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== + +dlv@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" + integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== + +fast-glob@^3.2.12: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +lilconfig@^2.0.5, lilconfig@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4" + integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== + +marked@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.1.1.tgz#2f709a4462abf65a283f2453dc1c42ab177d302e" + integrity sha512-0cNMnTcUJPxbA6uWmCmjWz4NJRe/0Xfk2NhXCUHjew9qJzFN20krFnsUe7QynwqOwa5m1fZ4UDg0ycKFVC0ccw== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +minimist@^1.2.6: + version "1.2.7" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +object-hash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +postcss-import@^14.1.0: + version "14.1.0" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.1.0.tgz#a7333ffe32f0b8795303ee9e40215dac922781f0" + integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-js@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.0.tgz#31db79889531b80dc7bc9b0ad283e418dce0ac00" + integrity sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ== + dependencies: + camelcase-css "^2.0.1" + +postcss-load-config@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" + integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== + dependencies: + lilconfig "^2.0.5" + yaml "^1.10.2" + +postcss-nested@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.0.tgz#1572f1984736578f360cffc7eb7dca69e30d1735" + integrity sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w== + dependencies: + postcss-selector-parser "^6.0.10" + +postcss-selector-parser@^6.0.10: + version "6.0.10" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" + integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@^8.4.17: + version "8.4.18" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.18.tgz#6d50046ea7d3d66a85e0e782074e7203bc7fbca2" + integrity sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== + dependencies: + pify "^2.3.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +resolve@^1.1.7, resolve@^1.22.1: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +tailwindcss@^3.1.8: + version "3.2.0" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.2.0.tgz#0164a930645e7e1df301df1e9d434a52602c918d" + integrity sha512-ARh/W0uH5UlWIC2nn02V0+5fyF0k6qZliyt4QYic2upOhPUE/Spu1EURNc9txJ3+4j8OEmdigqfDpw4d2tA4vA== + dependencies: + arg "^5.0.2" + chokidar "^3.5.3" + color-name "^1.1.4" + detective "^5.2.1" + didyoumean "^1.2.2" + dlv "^1.1.3" + fast-glob "^3.2.12" + glob-parent "^6.0.2" + is-glob "^4.0.3" + lilconfig "^2.0.6" + normalize-path "^3.0.0" + object-hash "^3.0.0" + picocolors "^1.0.0" + postcss "^8.4.17" + postcss-import "^14.1.0" + postcss-js "^4.0.0" + postcss-load-config "^3.1.4" + postcss-nested "6.0.0" + postcss-selector-parser "^6.0.10" + postcss-value-parser "^4.2.0" + quick-lru "^5.1.1" + resolve "^1.22.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +util-deprecate@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +xtend@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +yaml@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==