<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Thème - Louis Fortin</title><link>https://beta.lfortin.ovh/etiquettes/theme/</link><description>Le site personnel de Louis Fortin : des billets, des projets, et un thème construit pour être lisible par tout le monde.</description><language>fr-ca</language><copyright>2026-2026 Louis Fortin</copyright><generator>Hugo 0.164.0</generator><lastBuildDate>Sun, 02 Aug 2026 10:00:00 -0400</lastBuildDate><atom:link href="https://beta.lfortin.ovh/etiquettes/theme/flux.xml" rel="self" type="application/rss+xml"/><item><title>Banc d'essai du thème</title><link>https://beta.lfortin.ovh/blog/banc-d-essai/</link><guid isPermaLink="true">https://beta.lfortin.ovh/blog/banc-d-essai/</guid><pubDate>Sun, 02 Aug 2026 10:00:00 -0400</pubDate><dc:creator>Louis Fortin</dc:creator><category>Accessibilité</category><category>Hugo</category><category>CSS</category><category>Thème</category><description>Un billet qui emploie tous les éléments que le thème sait rendre, pour que rien ne se casse en silence.</description><content:encoded><![CDATA[<p>Ce billet n&rsquo;a pas grand-chose à dire. Son travail est ailleurs : il emploie
<strong>tous</strong> les éléments que le thème sait rendre, dans un seul document. Quand
une modification casse quelque chose, elle le casse ici, visiblement, plutôt
que trois mois plus tard sur un vrai billet.</p>
<p>Gardez-le. C&rsquo;est le banc d&rsquo;essai permanent du site.</p>
<div class="titre-avec-ancre">
  <h2 id="le-texte-courant">Le texte courant</h2>
  
</div>
<p>Du texte ordinaire, avec du <strong>gras</strong>, de l&rsaquo;<em>italique</em>, du <code>code court</code>, et une
abréviation expliquée : les règles du
<abbr title="World Wide Web Consortium">W3C</abbr>
 servent de base au
standard québécois.</p>
<p>Un terme anglais reçoit son propre attribut de langue, pour que la synthèse
vocale change de règles de prononciation :
<span lang="en">screen reader</span>
.</p>
<p>Un lien interne vers la <a href="https://beta.lfortin.ovh/a-propos/">page À propos</a>
, et un lien externe vers
le <a href="https://www.quebec.ca/gouvernement/ministeres-organismes/cybersecurite-numerique/publications/standard-accessibilite-sites-web" rel="noopener noreferrer">standard SGQRI 008 3.0<svg class="lien-externe__icone" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M15 3h6v6"/>
<path d="M10 14 21 3"/>
<path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/>
</svg><span class="lecteur-seul"> (site externe)</span></a>
,
qui reçoit son icône et sa mention réservée au lecteur d&rsquo;écran.</p>
<div class="titre-avec-ancre">
  <h3 id="un-titre-de-troisième-niveau">Un titre de troisième niveau</h3>
  
</div>
<p>Pour vérifier que le plan de titres ne saute aucun niveau et que la table des
matières s&rsquo;arrête bien à h3.</p>
<div class="titre-avec-ancre">
  <h2 id="les-listes">Les listes</h2>
  
</div>
<p>Une liste à puces :</p>
<ul>
<li>Un premier élément.</li>
<li>Un deuxième, avec une sous-liste :
<ul>
<li>un élément imbriqué,</li>
<li>un autre.</li>
</ul>
</li>
<li>Un troisième.</li>
</ul>
<p>Une liste numérotée :</p>
<ol>
<li>D&rsquo;abord ceci.</li>
<li>Ensuite cela.</li>
<li>Enfin le reste.</li>
</ol>
<p>Une liste de définitions :</p>
<dl>
<dt>Point de repère</dt>
<dd>Une région de la page qu&rsquo;un lecteur d&rsquo;écran peut atteindre directement.</dd>
<dt>Région live</dt>
<dd>Une zone dont les changements sont annoncés sans déplacer le focus.</dd>
</dl>
<div class="titre-avec-ancre">
  <h2 id="les-encadrés">Les encadrés</h2>
  
</div>
<div class="encadre encadre--note" role="note">
    <p class="encadre__titre"><svg class="icone" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><circle cx="12" cy="12" r="9.5"/>
<path d="M12 16.5v-5"/>
<path d="M12 7.9h.01"/>
</svg>Note
    </p>
    <p>Un encadré d&rsquo;information. Le mot « Note » est écrit, l&rsquo;icône le double, et la
barre latérale le triple. Retirez la couleur : le sens tient encore.</p>
  </div><div class="encadre encadre--astuce" role="note">
    <p class="encadre__titre"><svg class="icone" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M9.5 18.5h5"/>
<path d="M10.5 21.5h3"/>
<path d="M15.1 14c.2-1 .7-1.7 1.4-2.5A4.65 4.65 0 0 0 18 8 6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.8 1.2 1.5 1.4 2.5"/>
</svg>Astuce
    </p>
    <p>Une astuce, en sarcelle.</p>
  </div><div class="encadre encadre--important" role="note">
    <p class="encadre__titre"><svg class="icone" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M20.5 4.5v10a1 1 0 0 1-1 1H8l-4 4v-15a1 1 0 0 1 1-1h14.5a1 1 0 0 1 1 1z"/>
<path d="M12.25 6.5v3.5"/>
<path d="M12.25 12.6h.01"/>
</svg>Important
    </p>
    <p>Quelque chose à ne pas manquer.</p>
  </div><div class="encadre encadre--avertissement" role="note">
    <p class="encadre__titre"><svg class="icone" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="m10.3 3.9-8.5 14.2A2 2 0 0 0 3.5 21h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0z"/>
<path d="M12 9.5v4"/>
<path d="M12 17.2h.01"/>
</svg>Avertissement
    </p>
    <p>Un avertissement. Sa barre latérale est plus épaisse, parce que la hiérarchie
ne doit pas reposer sur la seule teinte.</p>
  </div><div class="encadre encadre--attention" role="note">
    <p class="encadre__titre"><svg class="icone" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M7.86 2.5h8.28L22 8.36v8.28L16.14 22.5H7.86L2 16.64V8.36z"/>
<path d="M12 8v4.5"/>
<path d="M12 16.2h.01"/>
</svg>Attention
    </p>
    <p>Une mise en garde, le niveau le plus haut.</p>
  </div><p>Et une citation ordinaire, sans type :</p>
<blockquote>
    <p>Le focus est la position du lecteur dans l&rsquo;interface. Un anneau caché est un
chemin caché.</p>

  </blockquote><div class="titre-avec-ancre">
  <h2 id="un-tableau">Un tableau</h2>
  
</div>
<table caption="Quatre critères que ce thème applique">
	<thead>
			<tr>
					<th>Critère</th>
					<th>Niveau</th>
					<th>Ce qu&rsquo;il demande</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>1.1.1</td>
					<td>A</td>
					<td>Un texte de remplacement pour tout contenu non textuel</td>
			</tr>
			<tr>
					<td>1.4.3</td>
					<td>AA</td>
					<td>Un contraste de 4,5:1 pour le texte courant</td>
			</tr>
			<tr>
					<td>2.4.11</td>
					<td>AA</td>
					<td>Le focus n&rsquo;est pas masqué</td>
			</tr>
			<tr>
					<td>2.4.13</td>
					<td>AAA</td>
					<td>Un anneau de focus d&rsquo;au moins 2 px à 3:1</td>
			</tr>
	</tbody>
</table>
<div class="titre-avec-ancre">
  <h2 id="du-code">Du code</h2>
  
</div>
<p>Un bloc en CSS :</p>
<div class="bloc-code"
  data-copier="Copier le code"
  data-copie="Code copié."
  data-copie-impossible="La copie n&#39;a pas fonctionné. Sélectionnez le texte du bloc et copiez-le avec le clavier."
  data-icone-copier="

"
  data-icone-coche="
">

  <div class="bloc-code__barre">
    <span class="bloc-code__langage">CSS</span>
  </div><pre tabindex="0" role="region" aria-label="Bloc de code en CSS"><code class="langage-css"><span class="line"><span class="cl"><span class="p">:</span><span class="nd">focus-visible</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="k">outline</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">focus</span><span class="o">-</span><span class="n">epaisseur</span><span class="p">)</span> <span class="kc">solid</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">couleur</span><span class="o">-</span><span class="n">focus</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="k">outline-offset</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">focus</span><span class="o">-</span><span class="n">decalage</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div>
<p>Un bloc en gabarit Go, avec un commentaire, une chaîne et un nombre :</p>
<div class="bloc-code"
  data-copier="Copier le code"
  data-copie="Code copié."
  data-copie-impossible="La copie n&#39;a pas fonctionné. Sélectionnez le texte du bloc et copiez-le avec le clavier."
  data-icone-copier="

"
  data-icone-coche="
">

  <div class="bloc-code__barre">
    <span class="bloc-code__langage">Go</span>
  </div><pre tabindex="0" role="region" aria-label="Bloc de code en Go"><code class="langage-go"><span class="line"><span class="cl"><span class="c1">// Vérifie le contraste avant de rendre.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="kd">func</span><span class="w"> </span><span class="nf">rapport</span><span class="p">(</span><span class="nx">avant</span><span class="p">,</span><span class="w"> </span><span class="nx">fond</span><span class="w"> </span><span class="nx">Couleur</span><span class="p">)</span><span class="w"> </span><span class="kt">float64</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="kd">const</span><span class="w"> </span><span class="nx">decalage</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mf">0.05</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="k">return</span><span class="w"> </span><span class="p">(</span><span class="nf">luminance</span><span class="p">(</span><span class="nx">avant</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">decalage</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="p">(</span><span class="nf">luminance</span><span class="p">(</span><span class="nx">fond</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">decalage</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div>
<p>Un bloc sans langage déclaré :</p>
<div class="bloc-code"
  data-copier="Copier le code"
  data-copie="Code copié."
  data-copie-impossible="La copie n&#39;a pas fonctionné. Sélectionnez le texte du bloc et copiez-le avec le clavier."
  data-icone-copier="

"
  data-icone-coche="
">

  <div class="bloc-code__barre">
    <span class="bloc-code__langage">Bloc de code</span>
  </div><pre tabindex="0" role="region" aria-label="Bloc de code"><code>Aucune coloration ici. Le texte reste lisible,
et le bloc défile toujours au clavier.</code></pre></div>
<div class="titre-avec-ancre">
  <h2 id="un-bloc-quon-ouvre">Un bloc qu&rsquo;on ouvre</h2>
  
</div>
<details>
  <summary>Pourquoi la table des matières n&#39;est pas dans une colonne latérale</summary>
  <p>Parce qu&rsquo;une colonne latérale ferait diverger l&rsquo;ordre visuel de l&rsquo;ordre du
document. Ce qu&rsquo;on voit à droite du billet arrive, dans le code, soit avant
soit après le contenu, jamais à côté. Une personne qui écoute la page reçoit
donc un ordre que la mise en page dément.</p>
<p>Au-dessus du billet, les deux ordres coïncident à toutes les largeurs.</p>

</details>

<div class="titre-avec-ancre">
  <h2 id="une-note-de-bas-de-page">Une note de bas de page</h2>
  
</div>
<p>Le thème gère aussi les notes de bas de page<sup id="fnref:1"><a href="https://beta.lfortin.ovh/blog/banc-d-essai/#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, qui produisent des liens
aller-retour corrects.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Comme celle-ci. Le lien de retour ramène exactement à l&rsquo;endroit quitté.&#160;<a href="https://beta.lfortin.ovh/blog/banc-d-essai/#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>Ce site et son thème</title><link>https://beta.lfortin.ovh/projets/ce-site/</link><guid isPermaLink="true">https://beta.lfortin.ovh/projets/ce-site/</guid><pubDate>Sun, 02 Aug 2026 08:00:00 -0400</pubDate><dc:creator>Louis Fortin</dc:creator><category>Accessibilité</category><category>Hugo</category><category>CSS</category><category>Thème</category><description>Un site Hugo et un thème maison qui visent le niveau AA du W3C, plus les critères supplémentaires du standard québécois.</description><content:encoded><![CDATA[<!-- TEXTE DE DÉPART, à remplacer ou à garder, comme vous voulez. -->
<p>Le site que vous lisez, et le thème qui le rend.</p>
<div class="titre-avec-ancre">
  <h2 id="ce-quil-vise">Ce qu&rsquo;il vise</h2>
  
</div>
<p>Le niveau AA des règles du W3C, plus les critères supplémentaires que le
standard québécois rend obligatoires, dont deux de niveau AAA : l&rsquo;apparence du
focus et les abréviations expliquées.</p>
<p>La page <a href="https://beta.lfortin.ovh/accessibilite/">Accessibilité</a>
 dit précisément ce qui a été vérifié
et avec quoi.</p>
<div class="titre-avec-ancre">
  <h2 id="ce-quil-na-pas">Ce qu&rsquo;il n&rsquo;a pas</h2>
  
</div>
<p>Aucune dépendance. Ni Sass, ni Node, ni bibliothèque JavaScript, ni police
chargée depuis un serveur tiers, ni service d&rsquo;analyse. La construction complète
tient en deux binaires, et la configuration interdit à Hugo toute requête
sortante : une ressource distante fait échouer le build au lieu de créer une
dépendance silencieuse.</p>
<div class="titre-avec-ancre">
  <h2 id="ce-quil-fait-de-particulier">Ce qu&rsquo;il fait de particulier</h2>
  
</div>
<ul>
<li>Une image sans texte de remplacement <strong>arrête la construction</strong>.</li>
<li>Un lien dont le texte est « cliquez ici » ou une URL nue déclenche un
avertissement nommé, avec le fichier fautif.</li>
<li>Un nom d&rsquo;icône inconnu arrête la construction, et le fichier qui déclare les
icônes alimente aussi le tableau descriptif que le standard québécois exige.</li>
<li>Les contrastes des deux thèmes sont mesurés par un script, pas estimés à
l&rsquo;œil.</li>
</ul>
]]></content:encoded></item></channel></rss>