<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kai Kubasta</title>
    <description>The latest articles on DEV Community by Kai Kubasta (@kaikubasta).</description>
    <link>https://dev.to/kaikubasta</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F878588%2F35b80010-9e46-4242-9e0a-b4c6993ca1bf.jpg</url>
      <title>DEV Community: Kai Kubasta</title>
      <link>https://dev.to/kaikubasta</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kaikubasta"/>
    <language>en</language>
    <item>
      <title>Independent Type Foundries</title>
      <dc:creator>Kai Kubasta</dc:creator>
      <pubDate>Sun, 04 Feb 2024 14:50:46 +0000</pubDate>
      <link>https://dev.to/kaikubasta/list-independent-type-foundries-96b</link>
      <guid>https://dev.to/kaikubasta/list-independent-type-foundries-96b</guid>
      <description>&lt;p&gt;The following (incomplete) list consists of independent type foundries or individuals who offer commercial web fonts. I have manually checked that their fonts can be purchased through their own web shop or one that is not affiliated with Monotype or Adobe. Instead of MyFonts, I encourage you to take a look at &lt;a href="https://www.fontspring.com" rel="noopener noreferrer"&gt;Fontspring&lt;/a&gt;, &lt;a href="https://www.fontbros.com" rel="noopener noreferrer"&gt;Font Bros&lt;/a&gt;, or &lt;a href="https://type.today/en" rel="noopener noreferrer"&gt;type.today&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Please support more independent type foundries!&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.205.tf" rel="noopener noreferrer"&gt;205TF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://26a1.xyz" rel="noopener noreferrer"&gt;26A1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ladd-design.com" rel="noopener noreferrer"&gt;Adam Ladd Design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.a2-type.co.uk/fonts" rel="noopener noreferrer"&gt;A2-TYPE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://store.artlebedev.com/type/" rel="noopener noreferrer"&gt;Art. Lebedev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.boldmonday.com/typefaces" rel="noopener noreferrer"&gt;Bold Monday&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://carterandcone.com" rel="noopener noreferrer"&gt;Carter &amp;amp; Cone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.colophon-foundry.org/typefaces/" rel="noopener noreferrer"&gt;Colophon Foundry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://commercialtype.com/catalog" rel="noopener noreferrer"&gt;Commercial Type&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://connary.com" rel="noopener noreferrer"&gt;Connary Fagen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.daltonmaag.com/library" rel="noopener noreferrer"&gt;Dalton Maag&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.dardenstudio.com" rel="noopener noreferrer"&gt;Darden Studio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://degarism.com" rel="noopener noreferrer"&gt;Degarism&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thedesignersfoundry.com/typefaces/" rel="noopener noreferrer"&gt;The Designers Foundry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://djr.com" rel="noopener noreferrer"&gt;David Jonathan Ross&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://abcdinamo.com" rel="noopener noreferrer"&gt;DINAMO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://displaay.net/typeface/" rel="noopener noreferrer"&gt;Displaay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.dstype.com/fonts" rel="noopener noreferrer"&gt;DSType Foundry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ellenlufftype.com" rel="noopener noreferrer"&gt;Ellen Luff&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.emigre.com" rel="noopener noreferrer"&gt;Emigre&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.exljbris.com" rel="noopener noreferrer"&gt;exljbris Font Foundry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fercozzi.com" rel="noopener noreferrer"&gt;FerCozzi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://store.typenetwork.com/foundry/fontbureau/fonts/" rel="noopener noreferrer"&gt;Font Bureau&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://freightcollection.com" rel="noopener noreferrer"&gt;The Freight Collection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.goodtypefoundry.com" rel="noopener noreferrer"&gt;Good Type Foundry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.grillitype.com" rel="noopener noreferrer"&gt;Grilli Type&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hex.xyz" rel="noopener noreferrer"&gt;HEX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.typography.com" rel="noopener noreferrer"&gt;Hoefler&amp;amp;Co.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.hvdfonts.com/fonts" rel="noopener noreferrer"&gt;HvD Fonts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://justanotherfoundry.com" rel="noopener noreferrer"&gt;Just Another Foundry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://klim.co.nz/retail-fonts/" rel="noopener noreferrer"&gt;Klim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.kontour.com" rel="noopener noreferrer"&gt;Kontour&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lineto.com/typefaces" rel="noopener noreferrer"&gt;Lineto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.ludwigtype.de" rel="noopener noreferrer"&gt;LudwigType&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.marksimonson.com/fonts" rel="noopener noreferrer"&gt;Mark Simonson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.neue.shop/" rel="noopener noreferrer"&gt;neue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://okaytype.com/" rel="noopener noreferrer"&gt;Okay Type&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.optimo.ch/typefaces.html" rel="noopener noreferrer"&gt;Optimo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://originaltype.com/collection/" rel="noopener noreferrer"&gt;Original Type&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pampatype.com" rel="noopener noreferrer"&gt;PampaType&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.plau.design" rel="noopener noreferrer"&gt;Plau&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://processtypefoundry.com/fonts/" rel="noopener noreferrer"&gt;Process&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.r41.it/en/aldo-novarese-font-collection" rel="noopener noreferrer"&gt;R41&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.re-type.com" rel="noopener noreferrer"&gt;ReType Foundry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.revolvertype.com/typefaces/" rel="noopener noreferrer"&gt;Revolver Type Foundry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.stormtype.com" rel="noopener noreferrer"&gt;Storm Type Foundry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://supertype.de/fonts" rel="noopener noreferrer"&gt;Supertype&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://teelinefonts.com" rel="noopener noreferrer"&gt;Teeline Fonts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tipofili.com" rel="noopener noreferrer"&gt;Tipofili&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.typeby.com" rel="noopener noreferrer"&gt;TYPE BY&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.typesupply.com/fonts" rel="noopener noreferrer"&gt;Type Supply&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.typotheque.com/fonts" rel="noopener noreferrer"&gt;Typotheque&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.type-together.com/font-catalogue" rel="noopener noreferrer"&gt;TypeTogether&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://typetrust.com/fonts" rel="noopener noreferrer"&gt;TypeTrust&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vllg.com/fonts" rel="noopener noreferrer"&gt;Village&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://velvetyne.fr" rel="noopener noreferrer"&gt;Velvetyne Type Foundry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.zetafonts.com" rel="noopener noreferrer"&gt;zetafonts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Let me know if you know more independant type foundries you’d like to share.&lt;/p&gt;

</description>
      <category>typography</category>
      <category>webfonts</category>
      <category>fonts</category>
    </item>
    <item>
      <title>Exploring Accessible Inline Spoilers</title>
      <dc:creator>Kai Kubasta</dc:creator>
      <pubDate>Sun, 28 Jan 2024 15:56:02 +0000</pubDate>
      <link>https://dev.to/kaikubasta/exploring-accessible-inline-spoilers-2kl9</link>
      <guid>https://dev.to/kaikubasta/exploring-accessible-inline-spoilers-2kl9</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Everybody loves to talk about narrative media like books or movies, especially on the internet. But nobody wants to get spoiled by a plot twist before actually consuming the respective medium. That’s why many online communities have a spoiler feature that hides text passages until the user interacts with them. However, hiding text in an accessible way is sometimes not as trivial as you might think.&lt;/p&gt;




&lt;h2&gt;
  
  
  The situation
&lt;/h2&gt;

&lt;p&gt;Let’s say we want to write about a film we recently saw, at the end of which it is revealed that Gandalf was actually Harry Potter’s father. (What a twist, huh?)&lt;/p&gt;

&lt;p&gt;There is already a native HTML element for hiding/showing content: &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details" rel="noopener noreferrer"&gt;&lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt;&lt;/a&gt;. We can use it like this:&lt;/p&gt;

&lt;p&gt;
  Movie spoiler
  &lt;p&gt;Gandalf is Harry Potter’s father. &lt;/p&gt;

&lt;/p&gt;

&lt;p&gt;Looks great. And it’s already accessible, too.&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;If you ever participated in an online discussion, you know that watching out for spoilers while structuring your post can be difficult and may even disrupt the flow of text. Sometimes you want to write away and mark spoilers afterwards. In this case, &lt;em&gt;inline&lt;/em&gt; spoilers might be a better idea, and unfortunately there’s no native browser element for those.&lt;/p&gt;

&lt;p&gt;So how to do this on websites? Join me in exploring &lt;em&gt;accessible inline spoilers&lt;/em&gt;!&lt;/p&gt;




&lt;h2&gt;
  
  
  A first approach
&lt;/h2&gt;

&lt;p&gt;Let's take the following sentence as an example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I never thought that Gandalf was Harry Potter’s father.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Since the last part of this sentence spoils the end of our make-believe film, it should be in somehow marked in HTML.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;I never thought that &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"spoiler"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Gandalf was Harry Potter’s father&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Great! So if we want to hide and show the text inside the &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; element, we could simply…&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.spoiler&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.spoiler&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;…right? Well, no. The problem here is that the &lt;code&gt;:hover&lt;/code&gt; selector does not work for sighted users who rely on their keyboard to navigate – they would never be able to see the text.&lt;/p&gt;

&lt;p&gt;Your next guess might be the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.spoiler&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nc"&gt;.spoiler&lt;/span&gt;&lt;span class="nd"&gt;:focus&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which is not a bad idea at all, &lt;code&gt;:focus&lt;/code&gt; does in fact work when navigating with a keyboard. But our &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; element needs to &lt;a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/Understanding_WCAG/Keyboard#interactive_elements_must_be_focusable" rel="noopener noreferrer"&gt;get focusable&lt;/a&gt; in the first place, which is simple enough using &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex" rel="noopener noreferrer"&gt;&lt;code&gt;tabindex&lt;/code&gt;&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"spoiler"&lt;/span&gt; &lt;span class="na"&gt;tabindex=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Gandalf was Harry Potter's father&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we have it: An inline spoiler that is perceivable by users with different input devices like mice and keyboards.&lt;/p&gt;

&lt;p&gt;But &lt;em&gt;perceivability&lt;/em&gt; and &lt;em&gt;accessibility&lt;/em&gt; are different things. Think about the experience users with screen readers will have with this implementation: They navigate to the spoiler element, and it is read directly to them without any warning. We did not build a &lt;em&gt;spoiler&lt;/em&gt; element, but a &lt;em&gt;get instantly spoiled&lt;/em&gt; one.&lt;/p&gt;




&lt;h2&gt;
  
  
  Interim conclusion
&lt;/h2&gt;

&lt;p&gt;We have to keep in mind that there are very different people with very different impairments out there. First of all, we should define our scope:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inline usability&lt;/li&gt;
&lt;li&gt;Sighted and visually impaired users&lt;/li&gt;
&lt;li&gt;Various input devices and assistive technology like screen readers&lt;/li&gt;
&lt;li&gt;Proper spoiler warning&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How do others do it?
&lt;/h2&gt;

&lt;p&gt;Before continuing, it is worth to take a step back and research how others have implemented inline spoilers.&lt;/p&gt;

&lt;p&gt;On &lt;a href="https://www.reddit.com/r/help/comments/e0pobn/how_do_i_make_text_hidden_spoiler_text/" rel="noopener noreferrer"&gt;Reddit&lt;/a&gt;, there are two different technical implementations: When creating a new thread, you are able to mark your whole text as a spoiler. This will hide your post as a block behind a button. When writing answer posts into a thread, you will only be able to use inline spoilers, which aren’t accessible by keyboard. In both cases, the spoiler text can’t be hidden again without refreshing the site.&lt;/p&gt;

&lt;p&gt;On &lt;a href="https://meta.stackexchange.com/questions/72877/whats-the-exact-syntax-for-spoiler-markup" rel="noopener noreferrer"&gt;Stack Exchange&lt;/a&gt; platforms, spoilers are rendered within &lt;code&gt;&amp;lt;blockquote&amp;gt;&lt;/code&gt; elements, which is questionable in terms of semantics – why should every spoiler be a quote at the same time? Their implementation is also not accessible by keyboard. Inline spoilers are missing.&lt;/p&gt;

&lt;p&gt;In &lt;a href="https://meta.discourse.org/t/spoiler-blur-not-compatible-with-screen-readers/219001" rel="noopener noreferrer"&gt;Discourse&lt;/a&gt;, spoiler text gets blurred and visible on click – but it’s not accessible. Co-founder Sam Saffron &lt;a href="https://codepen.io/abcretrograde/pen/MGzqLr" rel="noopener noreferrer"&gt;came up with a solution&lt;/a&gt; by actually using &lt;code&gt;details&lt;/code&gt; inline and some clever CSS hacks. However, getting it to work with valid HTML won’t be possible in my opinion. Using &lt;code&gt;:before&lt;/code&gt; pseudo-elements for non-decorative purposes also &lt;a href="https://www.w3.org/WAI/WCAG22/Techniques/failures/F87" rel="noopener noreferrer"&gt;is not recommended&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://joinmastodon.org" rel="noopener noreferrer"&gt;Mastodon&lt;/a&gt; communities do not feature inline spoilers, but the possibility to write your own spoiler warning is a nice touch. Their toggle button implementation is also not ideal, using &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; would have been a better idea.&lt;/p&gt;

&lt;p&gt;There are some &lt;a href="https://github.com/openui/open-ui/issues/772#issuecomment-1858638230" rel="noopener noreferrer"&gt;ideas including shadow DOM&lt;/a&gt; circulating, the most sophisticated in my opinion being described in &lt;a href="https://dev.to/ndesmic/how-to-make-a-spoiler-component-with-web-components-3hp9"&gt;an article by ndesmic&lt;/a&gt;: Their implementation is &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_components" rel="noopener noreferrer"&gt;web components&lt;/a&gt;-based and uses an &lt;a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Live_Regions" rel="noopener noreferrer"&gt;ARIA live region&lt;/a&gt; to make sure the previously hidden spoiler text will directly get read after clicking on the toggle.&lt;/p&gt;




&lt;h2&gt;
  
  
  Yet another setback?
&lt;/h2&gt;

&lt;p&gt;Testing ndesmic’s implementation &lt;a href="https://jsfiddle.net/kaikubasta/2pom0zxw/" rel="noopener noreferrer"&gt;inside a paragraph&lt;/a&gt; with VoiceOver on Safari revealed a strange behaviour: If you focus an entire paragraph with the screen reader, the &lt;em&gt;entire content is read aloud&lt;/em&gt;, including the spoiler. To further investigate this topic, I created another test case:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;I never thought that
  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;aria-label=&lt;/span&gt;&lt;span class="s"&gt;"Spoiler"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;aria-hidden=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Gandalf is Harry Potter's father&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;.
&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Believe it or not, VoiceOver will read all visible text out when focussing the paragraph – &lt;em&gt;despite&lt;/em&gt; using both &lt;code&gt;aria-label&lt;/code&gt; and &lt;code&gt;aria-hidden&lt;/code&gt;. Unfortunately, inline spoilers visually require the length of the actual text, so we can’t simply leave it out completely.&lt;/p&gt;

&lt;p&gt;After some further experimentation, I came up with the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;I never thought that
  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;aria-label=&lt;/span&gt;&lt;span class="s"&gt;"Spoiler"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;data-text=&lt;/span&gt;&lt;span class="s"&gt;"Gandalf is Harry Potter's father"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;.
&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="nd"&gt;::before&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data-text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the only way I found which made it possible to use the actual text length while not getting read out automatically with the screen reader. Finally, something we can work with.&lt;/p&gt;

&lt;p&gt;(&lt;strong&gt;Update:&lt;/strong&gt; As &lt;a href="https://dev.to/matuzo/comment/2cfpo"&gt;Manuel pointed out&lt;/a&gt;, &lt;code&gt;visibility: hidden&lt;/code&gt; also works. I thought I had tested that too.)&lt;/p&gt;




&lt;h2&gt;
  
  
  A better approach
&lt;/h2&gt;

&lt;p&gt;So let’s take away what we have learned so far and start over. This is how an accessible implementation could look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;I never thought that
  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt;
    &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"spoiler"&lt;/span&gt;
    &lt;span class="na"&gt;aria-role=&lt;/span&gt;&lt;span class="s"&gt;"switch"&lt;/span&gt;
    &lt;span class="na"&gt;aria-pressed=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt;
    &lt;span class="na"&gt;aria-live=&lt;/span&gt;&lt;span class="s"&gt;"polite"&lt;/span&gt;
    &lt;span class="na"&gt;aria-label=&lt;/span&gt;&lt;span class="s"&gt;"Spoiler"&lt;/span&gt;
    &lt;span class="na"&gt;data-showText=&lt;/span&gt;&lt;span class="s"&gt;"Click to reveal text"&lt;/span&gt;
    &lt;span class="na"&gt;data-hideText=&lt;/span&gt;&lt;span class="s"&gt;"Click to hide text"&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt;
      &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"spoiler__text"&lt;/span&gt;
      &lt;span class="na"&gt;data-text=&lt;/span&gt;&lt;span class="s"&gt;"Gandalf is Harry Potter's father"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;.
&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;The &lt;a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/switch_role" rel="noopener noreferrer"&gt;&lt;code&gt;switch&lt;/code&gt; role&lt;/a&gt; and &lt;a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-pressed" rel="noopener noreferrer"&gt;&lt;code&gt;aria-pressed&lt;/code&gt;&lt;/a&gt; represent the hidden and visible states of the spoiler.&lt;/li&gt;
&lt;li&gt;As explained above, &lt;code&gt;aria-live&lt;/code&gt; is used to directly read the text when revealing it.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" rel="noopener noreferrer"&gt;&lt;code&gt;aria-label&lt;/code&gt;&lt;/a&gt; will get read by screen readers when focussing the spoiler in its hidden state.&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes" rel="noopener noreferrer"&gt;&lt;code&gt;data&lt;/code&gt; attributes&lt;/a&gt; are used to set the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/title" rel="noopener noreferrer"&gt;&lt;code&gt;title&lt;/code&gt;&lt;/a&gt; with JavaScript. It provides additional context for mouse users and screen readers.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;aria-pressed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"false"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="nc"&gt;.spoiler__text&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;currentColor&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;aria-pressed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"false"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="nc"&gt;.spoiler__text&lt;/span&gt;&lt;span class="nd"&gt;::before&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data-text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;aria-pressed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"true"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="nc"&gt;.spoiler__text&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;underline&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;text-decoration-style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dotted&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;text-decoration-thickness&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;text-decoration-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;gray&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;I contemplated using the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/blur" rel="noopener noreferrer"&gt;blur filter&lt;/a&gt;, but blurry text may irritate users with a visual impairment. A solid background color is perfectly fine to hide the text.&lt;/li&gt;
&lt;li&gt;I added a dotted underline to mark revealed spoilers. If you use other elements using a similar style (e.g. &lt;code&gt;abbr&lt;/code&gt;), consider adjusting one of those.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;label&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$spoiler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aria-label&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;showText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$spoiler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;showtext&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hideText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$spoiler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hidetext&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;$text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$spoiler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.spoiler__text&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;spoiler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;$spoiler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;showText&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;$spoiler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;$spoiler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aria-pressed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;false&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;$spoiler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aria-pressed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;true&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;$spoiler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;removeAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aria-label&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;$spoiler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;hideText&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;$text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;spoiler&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;$spoiler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aria-pressed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;false&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;$spoiler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aria-label&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;$spoiler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;showText&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;$text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;The value of &lt;code&gt;aria-pressed&lt;/code&gt; and &lt;code&gt;title&lt;/code&gt; will switch every time you click.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;aria-label&lt;/code&gt; gets removed when the spoiler text is visible.&lt;/li&gt;
&lt;li&gt;The text set in &lt;code&gt;data-text&lt;/code&gt; will be put into the spoiler text node as soon as the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements" rel="noopener noreferrer"&gt;pseudo-element&lt;/a&gt; text gets removed.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  See it in action
&lt;/h2&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/kaikubasta/szx4h7bj/171//embedded//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  Technical Disclaimers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;As you have probably already noticed, my implementation is not production-ready.

&lt;ul&gt;
&lt;li&gt;Due to &lt;code&gt;innerText&lt;/code&gt;, only plain text is currently supported.&lt;/li&gt;
&lt;li&gt;It would be easier to work with a web component in a real scenario.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;You may want to put research into screen reader support, since I only tested it with VoiceOver on Safari (macOS).&lt;/li&gt;

&lt;li&gt;Keep in mind that for people with sufficient vision, the spoiler length itself can involuntarily disclose information. In critical cases, using &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; like mentioned at the beginning of this article is the best solution.&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Creating accessible inline spoilers is not trivial, but certainly possible. &lt;/li&gt;
&lt;li&gt;It’s better to use &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; instead of inaccessible inline spoilers when in doubt.&lt;/li&gt;
&lt;li&gt;There should be a &lt;a href="https://web.archive.org/web/20220711111558/https://discourse.wicg.io/t/standardized-spoiler-tag/5814" rel="noopener noreferrer"&gt;standardized &lt;code&gt;&amp;lt;spoiler&amp;gt;&lt;/code&gt; tag&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;Please let me know what you think. I’m eager to see others’ approaches!&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>html</category>
      <category>css</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
