<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="/rss.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
    <title>chriskirknielsen</title>
    <subtitle>A creative developer</subtitle>
    <link href="https://chriskirknielsen.com/rss.xml" rel="self"/>
    <link href="https://chriskirknielsen.com"/>
    <updated>2026-06-22T00:00:00Z</updated>
    <id>https://chriskirknielsen.com/</id>
    <author>
        <name>Christopher Kirk-Nielsen</name>
        <email>chriskirknielsen@gmail.com</email>
    </author>
        
        
        <entry>
            <title>Indie games are worth your time</title>
            <link href="https://chriskirknielsen.com/blog/indie-games-are-worth-your-time/"/>
            <updated>2026-06-22T05:23:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/indie-games-are-worth-your-time/</id>
            <content type="html">
                
                    &lt;p&gt;I don’t know if you play video games, but it’s likely you enjoy games in one form or another. Maybe you play a cozy game on your phone, a card game on your work computer (definitely only during breaks), or a cute adventure game on your gaming console. And table top games count, too, of course!&lt;/p&gt;
&lt;section class=&quot;callout &quot; aria-labelledby=&quot;co-21ejvp0clrt&quot;&gt;&lt;p id=&quot;co-21ejvp0clrt&quot; class=&quot;callout-label | h3&quot;&gt;Note&lt;/p&gt;&lt;p&gt;There is no such thing as a real gamer or not, only gamers and gatekeepers.&lt;/p&gt;&lt;/section&gt;
&lt;p&gt;I mostly play on PlayStation, and a bit on PC, but also play a lot of sudoku on my phone (yes I am 400 years old), and the occasional word puzzle on my work computer. I’d like to focus on indie video games, though, for this post in particular. Or at least, indie in how they feel, since the term has lost a bit of its meaning, much like indie music, in my mind’s ear.&lt;/p&gt;
&lt;p&gt;I’ve played through a handful of few smaller games recently. &lt;strong&gt;Stray&lt;/strong&gt;, where I wandered a post-human world as a cat. &lt;strong&gt;Cocoon&lt;/strong&gt;, where I jumped in and out of worlds to solve puzzles. Or &lt;strong&gt;Herdling&lt;/strong&gt;, where I found, named, and led gentle creatures through a dangerous land and over a mountain. And I’ve got &lt;strong&gt;Mixtape&lt;/strong&gt; installed for next time I sit down to play. These are not the biggest, most successful games in the world. But what they are is deeply authentic. They are poetic. They are stirring. They are beautiful.&lt;/p&gt;
&lt;div class=&quot;image-gallery&quot;&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/indie-games-are-worth-your-time/herdling-bridge.jpg&quot;&gt;&lt;img src=&quot;https://chriskirknielsen.com/.netlify/images?w=800&amp;url=%2Fblog%2Findie-games-are-worth-your-time%2Fherdling-bridge.jpg&quot; alt=&quot;A still from the game Herdling, where a group of fantastical creatures are crossing a narrow icy bridge to a glacier. In the background, a huge, challenging mountain, covered by clouds, looms.&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot; srcset=&quot;https://chriskirknielsen.com/.netlify/images?w=480&amp;url=%2Fblog%2Findie-games-are-worth-your-time%2Fherdling-bridge.jpg 480w, https://chriskirknielsen.com/.netlify/images?w=800&amp;url=%2Fblog%2Findie-games-are-worth-your-time%2Fherdling-bridge.jpg 800w, https://chriskirknielsen.com/.netlify/images?w=1200&amp;url=%2Fblog%2Findie-games-are-worth-your-time%2Fherdling-bridge.jpg 1200w&quot; sizes=&quot;100vw, (min-width: 50rem) 50rem&quot; width=&quot;1777&quot; height=&quot;1000&quot; style=&quot;aspect-ratio: 1.7778; max-width: 100%;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Sometimes, games with a big-to-absurdly-large budget can be those things, don’t get me wrong, but in my experience, those impactful games are most likely indie games. It’s a team of anything from one person to a few dozen people who poured their souls into making the best game they could, and you can tell. As you move through the world they’ve built, their world might just move you, too. (yes that’s cheesy, but this is my blog and I can say what I want) Every major studio is trying to one-up one another with the most realistic-looking games, and that’s impressive! But sometimes the indie game made with a &amp;quot;here in my garage” look, with a few rough edges visible, has so much charm, a unique personality, that makes it a delight to play through.&lt;/p&gt;
&lt;p&gt;This isn’t to say big games aren’t made with love (I mean have you seen how well-made games like &lt;strong&gt;Control&lt;/strong&gt;, or &lt;strong&gt;Clair Obscur: Expedition 33&lt;/strong&gt; are?), but they tend to have a sense of cinematography, spectacle, and scale that you don’t usually experience in indie games. Sure, I sometimes I want to load up an action-adventure blockbuster game, but indie games? They have vastly different vibes… the vibes are way cozier.&lt;/p&gt;
&lt;div class=&quot;image-gallery&quot;&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/indie-games-are-worth-your-time/firewatch-sunset.jpg&quot;&gt;&lt;img src=&quot;https://chriskirknielsen.com/.netlify/images?w=800&amp;url=%2Fblog%2Findie-games-are-worth-your-time%2Ffirewatch-sunset.jpg&quot; alt=&quot;A still from the game Firewatch, where the sun is setting on a narrow rocky canyon, tinting everything in a dreamy crimson colour.&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot; srcset=&quot;https://chriskirknielsen.com/.netlify/images?w=480&amp;url=%2Fblog%2Findie-games-are-worth-your-time%2Ffirewatch-sunset.jpg 480w, https://chriskirknielsen.com/.netlify/images?w=800&amp;url=%2Fblog%2Findie-games-are-worth-your-time%2Ffirewatch-sunset.jpg 800w, https://chriskirknielsen.com/.netlify/images?w=1200&amp;url=%2Fblog%2Findie-games-are-worth-your-time%2Ffirewatch-sunset.jpg 1200w&quot; sizes=&quot;100vw, (min-width: 50rem) 50rem&quot; width=&quot;1777&quot; height=&quot;1000&quot; style=&quot;aspect-ratio: 1.7778; max-width: 100%;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;All of this is to say that indie games are important for the ecosystem of video games, as they bring a much-needed touch of humanity to the otherwise giant, sanded-down products of the entertainment industry. While I know it’s easier to only look out for the big names out there (trust me &lt;a href=&quot;https://chriskirknielsen.com/games/library/&quot;&gt;I play those&lt;/a&gt;, too), next time you’re looking for a new game, try to seek out the smaller titles out there. It might just make your heart feel a little fuller. &lt;em&gt;(something something, commentary about the indie web)&lt;/em&gt;&lt;/p&gt;
&lt;details class=&quot;expander&quot;&gt;
			&lt;summary class=&quot;expander-button | button | inline-size-100pc&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 10 10&quot; class=&quot;expander-button-arrow&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M9 5 3 1.54v6.92z&quot;&gt;&lt;/path&gt;&lt;/svg&gt; In need of a few recommendations?&lt;/summary&gt;
			&lt;div class=&quot;expander-content | flow&quot;&gt;
&lt;p&gt;In addition to those I mentioned, here’s a list of indie and indie-adjacent games, in no particular order*, that I can heartily recommend:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Return of the Obra-Dinn&lt;/li&gt;
&lt;li&gt;Kena: Bridge of Spirits&lt;/li&gt;
&lt;li&gt;Monument Valley&lt;/li&gt;
&lt;li&gt;Outer Wilds&lt;/li&gt;
&lt;li&gt;Firewatch&lt;/li&gt;
&lt;li&gt;Jusant&lt;/li&gt;
&lt;li&gt;Neva&lt;/li&gt;
&lt;li&gt;Journey&lt;/li&gt;
&lt;li&gt;Blue Prince&lt;/li&gt;
&lt;li&gt;A Short Hike&lt;/li&gt;
&lt;li&gt;Chants of Sennaar&lt;/li&gt;
&lt;li&gt;Brothers: A Tale of Two Sons&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;* actually I lied, I ordered them to make the list look like a crescent. It’s my blog I can do what I want.&lt;/p&gt;
&lt;/div&gt;
		&lt;/details&gt;
&lt;p&gt;PS: Indy games are also good, from what I hear, but I have not played &lt;strong&gt;The Great Circle&lt;/strong&gt; or &lt;strong&gt;The Fate of Atlantis&lt;/strong&gt;. Forgive me, Doctor Jones!&lt;/p&gt;

                    
                
            </content>
        </entry>
        
        
        <entry>
            <title>Going Full Circle on CSS Toggle Transitions</title>
            <link href="https://chriskirknielsen.com/blog/going-full-circle-css-toggle-transitions/"/>
            <updated>2026-06-04T04:04:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/going-full-circle-css-toggle-transitions/</id>
            <content type="html">
                
                    &lt;p&gt;I recently worked on some “accordion” component with a custom marker to indicate open and closed states. I had it set up so the marker, a chevron, would rotate by 180 degrees when the component was in its open state. Add a CSS transition (when motion preferences allow it), job done.&lt;/p&gt;
&lt;p&gt;But… it would animate backwards upon closing, “rewind” so to speak, which is exactly how CSS should work, but I wanted it to “complete” the rotation, so:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;idle: start at 0 degrees&lt;/li&gt;
&lt;li&gt;expanded: go to 180 degrees&lt;/li&gt;
&lt;li&gt;closed again: go to 360 degrees&lt;/li&gt;
&lt;li&gt;idle: start at 0 degrees&lt;/li&gt;
&lt;li&gt;… and so on.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Let’s take a look at what I tried, and which solution I landed on.&lt;/p&gt;
&lt;section class=&quot;callout &quot; aria-labelledby=&quot;co-1x8o72qjh65&quot;&gt;&lt;p id=&quot;co-1x8o72qjh65&quot; class=&quot;callout-label | h3&quot;&gt;No Gecko, amigo&lt;/p&gt;&lt;p&gt;This works in two browser engines, Chromium and WebKit, and my assumption is that they both are working as the specification has been, well… specified. Firefox, however, skips the closing transition. If you have any idea why, please let me know!&lt;/p&gt;&lt;/section&gt;
&lt;p&gt;First, here is the base markup and styles for all the demos:&lt;/p&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;use xlink:href=&quot;#svg__html-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; HTML&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-html codeblock-pre&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;details&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;summary&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Learn more about this!&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;svg&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;xmlns&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;http://www.w3.org/2000/svg&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;24&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;24&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;viewBox&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;0 0 24 24&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;details-marker&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;path&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;M6 9l6 6 6-6&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;fill&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;none&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;stroke&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;currentColor&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;stroke-width&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;2&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;svg&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;summary&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;details-content&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;I have important things to say!&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;details&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;use xlink:href=&quot;#svg__css-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; CSS&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-css codeblock-pre&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;details&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;--DET-transition-duration&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 300ms&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;--DET-transition-easing&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; ease-in-out&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;/* Rewinds upon closing */&lt;/span&gt;
&lt;span class=&quot;token selector&quot;&gt;.details-marker&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@media&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;prefers-reduced-motion&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; no-preference&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token property&quot;&gt;transition&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; transform &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--DET-transition-easing&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--DET-transition-duration&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;token selector&quot;&gt;details[open] &amp;amp;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token property&quot;&gt;transform&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;rotate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;180deg&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;/* Aesthetics skipped for brevity but available in the CodePen demos */&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;p&gt;And here’s what that looks like: it works everywhere but the marker “rewinds” — keep an eye on that chevron at the end of the line there when opening and closing the details/expander/accordion/stretchyboi:&lt;/p&gt;
&lt;div class=&quot;cp_embed_wrapper codepen | cellstack cellstack--center&quot; data-height=&quot;300&quot; data-default-tab=&quot;result&quot; data-slug-hash=&quot;vEyjvrb&quot; data-version=&quot;1&quot;&gt;
			&lt;div class=&quot;single-media&quot;&gt;
				&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/https://shots.codepen.io/username/pen/vEyjvrb-512.webp?version=1782268123173&quot; alt=&quot;&quot; class=&quot;codepen-thumbnail&quot; width=&quot;512&quot; height=&quot;288&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; style=&quot;height: 300px;&quot; /&gt;
			&lt;/div&gt;
			&lt;a href=&quot;https://codepen.io/chriskirknielsen/pen/vEyjvrb&quot; class=&quot;button&quot;&gt;View on CodePen&lt;/a&gt;
		&lt;/div&gt;&lt;script async=&quot;&quot; src=&quot;https://public.codepenassets.com/embed/index.js&quot;&gt;&lt;/script&gt;
&lt;p&gt;I managed to get most of the way using a &lt;em&gt;registered&lt;/em&gt; custom property to hold the “opened” state until everything was closed, using a transition on this property with a &lt;code&gt;step-end&lt;/code&gt; timing function, which holds a value at its initial state until the duration has passed (e.g. from &lt;code&gt;0&lt;/code&gt; to &lt;code&gt;1&lt;/code&gt; over a second, it’ll stay at &lt;code&gt;0&lt;/code&gt; for a second, then immediately flip to &lt;code&gt;1&lt;/code&gt; without any interpolation). My original (and promising) result looked like this:&lt;/p&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;use xlink:href=&quot;#svg__css-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; CSS&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-css codeblock-pre&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@property&lt;/span&gt; --DET-state&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;syntax&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;&amp;lt;number&gt;&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;initial-value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;inherits&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; true&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;details&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;--DET-state&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;--DET-transition-duration&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 300ms&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;--DET-transition-easing&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; ease-in-out&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	
	&lt;span class=&quot;token property&quot;&gt;transition&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; --DET-state &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--DET-transition-duration&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; step-end&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

	&lt;span class=&quot;token selector&quot;&gt;&amp;amp;[open]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token property&quot;&gt;--DET-state&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;/* &quot;Works&quot; in Chrome and Safari, but unwinds after closing */&lt;/span&gt;
&lt;span class=&quot;token selector&quot;&gt;.details-marker&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@media&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;prefers-reduced-motion&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; no-preference&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token property&quot;&gt;transform&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;rotate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;calc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;360deg * &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--DET-state&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token property&quot;&gt;transition&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; transform &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--DET-transition-easing&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--DET-transition-duration&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;token selector&quot;&gt;details[open] &amp;amp;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token property&quot;&gt;transform&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;rotate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;180deg&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;div class=&quot;cp_embed_wrapper codepen | cellstack cellstack--center&quot; data-height=&quot;300&quot; data-default-tab=&quot;result&quot; data-slug-hash=&quot;OPbZdOb&quot; data-version=&quot;1&quot;&gt;
			&lt;div class=&quot;single-media&quot;&gt;
				&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/https://shots.codepen.io/username/pen/OPbZdOb-512.webp?version=1782268123173&quot; alt=&quot;&quot; class=&quot;codepen-thumbnail&quot; width=&quot;512&quot; height=&quot;288&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; style=&quot;height: 300px;&quot; /&gt;
			&lt;/div&gt;
			&lt;a href=&quot;https://codepen.io/chriskirknielsen/pen/OPbZdOb&quot; class=&quot;button&quot;&gt;View on CodePen&lt;/a&gt;
		&lt;/div&gt;
&lt;p&gt;It did almost everything I wanted (in Chrome and Safari…), going from 0 degrees, to 180, and to 360 on close, except… when the rotation was completed, and &lt;code&gt;--DET-state&lt;/code&gt; returned to &lt;code&gt;0&lt;/code&gt;, the marker would also transition from 360 degrees to 0 degrees, so it looked kind of loopy (pun intended, thank you very much, I’ll be here all week).&lt;/p&gt;
&lt;p&gt;I tried a few things, like adjusting the timing function between open and closed states. Ultimately, I came to the conclusion that I needed the closing transition to run normally while &lt;code&gt;--DET-state&lt;/code&gt; was held at &lt;code&gt;1&lt;/code&gt;, but the second transition due to &lt;code&gt;--DET-state&lt;/code&gt; flipping back to &lt;code&gt;0&lt;/code&gt; should be skipped. I could achieve this by adjusting the &lt;code&gt;transition-duration&lt;/code&gt; itself, but this doesn’t work in Firefox &lt;em&gt;and&lt;/em&gt; Chrome — Safari does what I expect of it, in version 18.6 as well as Technology Preview:&lt;/p&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;use xlink:href=&quot;#svg__css-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; CSS&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-css codeblock-pre&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;/* This does not work in Firefox and Chrome! */&lt;/span&gt;
&lt;span class=&quot;token selector&quot;&gt;.details-marker&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@media&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;prefers-reduced-motion&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; no-preference&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token property&quot;&gt;transform&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;rotate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;calc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;360deg * &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--DET-state&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token property&quot;&gt;transition-property&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; transform&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token property&quot;&gt;transition-timing-function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--DET-transition-easing&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token property&quot;&gt;transition-duration&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;calc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--DET-state&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; * &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--DET-transition-duration&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

		&lt;span class=&quot;token selector&quot;&gt;details[open] &amp;amp;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token property&quot;&gt;transition-duration&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--DET-transition-duration&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;token selector&quot;&gt;details[open] &amp;amp;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token property&quot;&gt;transform&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;rotate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;180deg&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;div class=&quot;cp_embed_wrapper codepen | cellstack cellstack--center&quot; data-height=&quot;300&quot; data-default-tab=&quot;result&quot; data-slug-hash=&quot;XJNqGbL&quot; data-version=&quot;1&quot;&gt;
			&lt;div class=&quot;single-media&quot;&gt;
				&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/https://shots.codepen.io/username/pen/XJNqGbL-512.webp?version=1782268123173&quot; alt=&quot;&quot; class=&quot;codepen-thumbnail&quot; width=&quot;512&quot; height=&quot;288&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; style=&quot;height: 300px;&quot; /&gt;
			&lt;/div&gt;
			&lt;a href=&quot;https://codepen.io/chriskirknielsen/pen/XJNqGbL&quot; class=&quot;button&quot;&gt;View on CodePen&lt;/a&gt;
		&lt;/div&gt;
&lt;p&gt;Instead of quashing the duration, I tried using a negative &lt;code&gt;transition-delay&lt;/code&gt;, and I clicked in disbelief several times to see the marker animate exactly as I wanted. My final result is as follows:&lt;/p&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;use xlink:href=&quot;#svg__css-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; CSS&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-css codeblock-pre&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;/* This does not work in Firefox! */&lt;/span&gt;
&lt;span class=&quot;token selector&quot;&gt;.details-marker&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@media&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;prefers-reduced-motion&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; no-preference&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token property&quot;&gt;transform&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;rotate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;calc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;360deg * &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--DET-state&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token property&quot;&gt;transition&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; transform &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--DET-transition-easing&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--DET-transition-duration&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token property&quot;&gt;transition-delay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;calc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--DET-state&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; - 1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; * &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--DET-transition-duration&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token comment&quot;&gt;/*
			The delay above could also be expressed like so, if you find it easier to read:
			transition-delay: calc(-1 * (1 - var(--DET-state)) * var(--DET-transition-duration));
		*/&lt;/span&gt;

		&lt;span class=&quot;token selector&quot;&gt;details[open] &amp;amp;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token property&quot;&gt;transition-delay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0s&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
		
		&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@-moz-document&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;url-prefix&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token property&quot;&gt;transition&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; transform &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--DET-transition-easing&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--DET-transition-duration&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* Standard look in Firefox */&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;token selector&quot;&gt;details[open] &amp;amp;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token property&quot;&gt;transform&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;rotate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;180deg&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;div class=&quot;cp_embed_wrapper codepen | cellstack cellstack--center&quot; data-height=&quot;300&quot; data-default-tab=&quot;result&quot; data-slug-hash=&quot;NPbMJdB&quot; data-version=&quot;1&quot;&gt;
			&lt;div class=&quot;single-media&quot;&gt;
				&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/https://shots.codepen.io/username/pen/NPbMJdB-512.webp?version=1782268123173&quot; alt=&quot;&quot; class=&quot;codepen-thumbnail&quot; width=&quot;512&quot; height=&quot;288&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; style=&quot;height: 300px;&quot; /&gt;
			&lt;/div&gt;
			&lt;a href=&quot;https://codepen.io/chriskirknielsen/pen/NPbMJdB&quot; class=&quot;button&quot;&gt;View on CodePen&lt;/a&gt;
		&lt;/div&gt;
&lt;p&gt;However, as mentioned at the start of this article, &lt;strong&gt;this does not work in Firefox&lt;/strong&gt;. Which sucks! These properties are not exactly bleeding edge… I know I’m manipulating time in weird ways here, but this doesn’t require a flux capacitor… it feels like it should work.&lt;/p&gt;
&lt;p&gt;In any case, in Firefox, with a little browser-specific hack, the transition is reverted and the chevron rewinds back to 0 degrees instead, which means it’s still absolutely usable, and I consider this a nice little progressive enhancement.&lt;/p&gt;
&lt;p&gt;I am certain there are ways to make this work: maybe some trick using &lt;code&gt;mod()&lt;/code&gt; off by &lt;code&gt;0.01deg&lt;/code&gt;, or adding in a CSS keyframe animation (I specifically avoided keyframes as you cannot smoothly reverse the transition if you interrupt it midway). Definitely easy with some JavaScript (either Web Animation API or an event listener), but that’s no fun!&lt;/p&gt;
&lt;p&gt;If you have ideas, I’d be happy to hear some details and expand this article accordingly (&lt;em&gt;eehhh?&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;PS: As a bonus, we can totally have the chevron face to the right when closed, down when open, and still do a full rotation!&lt;/p&gt;
&lt;div class=&quot;cp_embed_wrapper codepen | cellstack cellstack--center&quot; data-height=&quot;300&quot; data-default-tab=&quot;result&quot; data-slug-hash=&quot;gbLKbLZ&quot; data-version=&quot;1&quot;&gt;
			&lt;div class=&quot;single-media&quot;&gt;
				&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/https://shots.codepen.io/username/pen/gbLKbLZ-512.webp?version=1782268123173&quot; alt=&quot;&quot; class=&quot;codepen-thumbnail&quot; width=&quot;512&quot; height=&quot;288&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; style=&quot;height: 300px;&quot; /&gt;
			&lt;/div&gt;
			&lt;a href=&quot;https://codepen.io/chriskirknielsen/pen/gbLKbLZ&quot; class=&quot;button&quot;&gt;View on CodePen&lt;/a&gt;
		&lt;/div&gt;
&lt;h2 id=&quot;update&quot; tabindex=&quot;-1&quot;&gt;
&lt;a class=&quot;heading-anchor&quot; href=&quot;https://chriskirknielsen.com/blog/going-full-circle-css-toggle-transitions/#update&quot;&gt;Update&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;vrugtehagel and Temani Afif chimed in on Mastodon with different solutions, which work cross-browser! Not only that but they both require less code, so I’m all for it.&lt;/p&gt;
&lt;p&gt;vrugtehagel suggested using &lt;code&gt;linear()&lt;/code&gt; to create a negative version of the easing, and it works! A little bit of a pain to maintain if you want to adjust the easing but I wouldn’t imagine you’d change that often, so this is really neat!&lt;/p&gt;
&lt;div class=&quot;cp_embed_wrapper codepen | cellstack cellstack--center&quot; data-height=&quot;300&quot; data-default-tab=&quot;result&quot; data-slug-hash=&quot;PwbaEZy&quot; data-version=&quot;2&quot;&gt;
			&lt;div class=&quot;single-media&quot;&gt;
				&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/https://shots.codepen.io/username/pen/PwbaEZy-512.webp?version=1782268123173&quot; alt=&quot;&quot; class=&quot;codepen-thumbnail&quot; width=&quot;512&quot; height=&quot;288&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; style=&quot;height: 300px;&quot; /&gt;
			&lt;/div&gt;
			&lt;a href=&quot;https://codepen.io/vrugtehagel/pen/PwbaEZy&quot; class=&quot;button&quot;&gt;View on CodePen&lt;/a&gt;
		&lt;/div&gt;
&lt;p&gt;Temani suggested something even simpler, that kind of resonates with my negated duration approach, but applied to a different property. Because the chevron is symmetrical, mirroring it allows to get the same effect: rotate then mirror.&lt;/p&gt;
&lt;div class=&quot;cp_embed_wrapper codepen | cellstack cellstack--center&quot; data-height=&quot;300&quot; data-default-tab=&quot;result&quot; data-slug-hash=&quot;VYmdBpj&quot; data-version=&quot;1&quot;&gt;
			&lt;div class=&quot;single-media&quot;&gt;
				&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/https://shots.codepen.io/username/pen/VYmdBpj-512.webp?version=1782268123173&quot; alt=&quot;&quot; class=&quot;codepen-thumbnail&quot; width=&quot;512&quot; height=&quot;288&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; style=&quot;height: 300px;&quot; /&gt;
			&lt;/div&gt;
			&lt;a href=&quot;https://codepen.io/t_afif/pen/VYmdBpj&quot; class=&quot;button&quot;&gt;View on CodePen&lt;/a&gt;
		&lt;/div&gt;
                    
                
            </content>
        </entry>
        
        
        <entry>
            <title>Snippet: git ketchup</title>
            <link href="https://chriskirknielsen.com/blog/git-ketchup/"/>
            <updated>2026-04-06T05:12:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/git-ketchup/</id>
            <content type="html">
                
                    &lt;p&gt;Another git snippet I use frequently, &lt;code&gt;git ketchup {BRANCH_NAME}&lt;/code&gt;. It’s not &lt;code&gt;catchup&lt;/code&gt; because that may be a real command. Like &lt;a href=&quot;https://chriskirknielsen.com/blog/git-switcheroo/&quot;&gt;&lt;code&gt;switcheroo&lt;/code&gt;&lt;/a&gt;, using a silly name (nearly) guarantees there won’t be naming collisions with real git commands.&lt;/p&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;title&gt;.gitconfig&lt;/title&gt;&lt;use xlink:href=&quot;#svg__code-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; .gitconfig&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-bash codeblock-pre&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;alias&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
	ketchup &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;!f(){ git fetch origin &lt;span class=&quot;token variable&quot;&gt;${1}&lt;/span&gt;:&lt;span class=&quot;token variable&quot;&gt;${1}&lt;/span&gt;; }; f&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;p&gt;I use a graphical user interface (a.k.a. a GUI, mine is &lt;a href=&quot;https://git-fork.com/&quot;&gt;Fork&lt;/a&gt;) and there’s no right-click option to pull the latest commits from a remote branch into its local equivalent unless it’s already the active branch — as far as I know, anyways. Sometimes I just want to catch up a coworker’s changes to deal with later, without exiting my current branch, you know?&lt;/p&gt;
&lt;p&gt;There’s probably a dozen (better) ways to do this but this one works fine for me. 🤷&lt;/p&gt;

                    
                
            </content>
        </entry>
        
        
        <entry>
            <title>How I nerd-sniped myself into importing Nike Running Club data via the Strava API</title>
            <link href="https://chriskirknielsen.com/blog/nerd-snipped-into-importing-nike-running-club-into-strava-api/"/>
            <updated>2026-03-30T13:37:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/nerd-snipped-into-importing-nike-running-club-into-strava-api/</id>
            <content type="html">
                
                    &lt;section class=&quot;callout &quot; aria-labelledby=&quot;co-25wemwqwfdh&quot;&gt;&lt;p id=&quot;co-25wemwqwfdh&quot; class=&quot;callout-label | h3&quot;&gt;Heads up&lt;/p&gt;&lt;p&gt;This is a long post, but I share all my code in the &lt;a href=&quot;https://chriskirknielsen.com/blog/nerd-snipped-into-importing-nike-running-club-into-strava-api/#tl-dr&quot;&gt;tl;dr&lt;/a&gt; at the end!&lt;/p&gt;&lt;/section&gt;
&lt;p&gt;Last week, I played with the idea of showing statistics related to my running below the other &lt;a href=&quot;https://chriskirknielsen.com/stats/&quot;&gt;site-related stats&lt;/a&gt;. I’ve only been running since some time in 2022, which wouldn’t be such a big thing if it weren’t for the fact I had never been athletic in my life before (except when forced to, i.e. in P.E class, and to avoid missing a bus or subway).&lt;/p&gt;
&lt;p&gt;At first, I went to my app, Nike Running Club (a.k.a. NRC) and wrote down in a JSON file each year’s aggregated stats: count, distance, time, and a few other bits and bobs. I figured I’d periodically update this manually, but when I found out Strava had an API, I had done it and needed to make it better: I nerd-sniped myself.&lt;/p&gt;
&lt;p&gt;I’ve been on Strava since late December 2024, meaning about 2 years of data was missing. Not great to get a full picture (which is important to one person and one person only: me). And while Strava allows you to connect with NRC, it only captures activities moving forward, not from the past.&lt;/p&gt;
&lt;p&gt;I stumbled upon &lt;a href=&quot;https://www.reddit.com/r/Strava/comments/1c9xkly/comment/l63dh0y/&quot;&gt;a helpful reddit comment&lt;/a&gt; where somebody explained how they migrated data. Basically: &lt;a href=&quot;https://www.nike.com/help/privacy&quot;&gt;ask Nike to send an archive of your data&lt;/a&gt;, specifically TCX files (spoiler alert: it’s just XML), and that’s it. The comment mentions GDPR and such, but on my end, I asked Friday around 3pm, and had the download link around 9pm. They do ask you to confirm your request, but they didn’t seem combative.&lt;/p&gt;
&lt;p&gt;The TCX files are named with UUIDs, so not very easy to explore, and in my case, to filter the 2+ years I wanted to import, to avoid duplicates. Luckily, &lt;a href=&quot;https://www.reddit.com/r/Strava/comments/1c9xkly/comment/mibyutb/&quot;&gt;another comment provides a bash script&lt;/a&gt; to rename all the files prefixed with the date information within. I don’t know what all these commands do, but it works, so thank you, Efficient_Soft773! For Mac/Linux, save this into a file like &lt;code&gt;rename.sh&lt;/code&gt;, place it in the same folder as your TCX files, and run &lt;code&gt;sh rename.sh&lt;/code&gt;. Sharing it below in case the Reddit comment vanishes:&lt;/p&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;use xlink:href=&quot;#svg__code-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; &lt;span class=&quot;visually-hidden&quot;&gt;Code block&lt;/span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-bash codeblock-pre&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# goal: append filenames with time&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token for-or-select variable&quot;&gt;filename&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; *.tcx&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;token assign-left variable&quot;&gt;T0&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sed&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;7q;d&#39;&lt;/span&gt; $&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;filename&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;awk&lt;/span&gt; -F&lt;span class=&quot;token string&quot;&gt;&#39;&quot;&#39;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;{print $2}&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;awk&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-F&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;T&#39;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;{print $1}&#39;&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token assign-left variable&quot;&gt;T0_str&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-j&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;%Y-%m-%d&#39;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$T0&lt;/span&gt;&quot;&lt;/span&gt; +&lt;span class=&quot;token string&quot;&gt;&#39;%Y%m%d&#39;&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt; 
  &lt;span class=&quot;token assign-left variable&quot;&gt;fileheader&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; $filename &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;awk&lt;/span&gt; -F&lt;span class=&quot;token string&quot;&gt;&#39;.&#39;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;{print $1}&#39;&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token assign-left variable&quot;&gt;newfilename&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;nrc_&lt;span class=&quot;token variable&quot;&gt;${T0_str}&lt;/span&gt;_&lt;span class=&quot;token variable&quot;&gt;${fileheader}&lt;/span&gt;.tcx&quot;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$filename&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; *&lt;span class=&quot;token string&quot;&gt;&quot;nrc_&quot;&lt;/span&gt;* &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;then&lt;/span&gt;
    &lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Already renamed this file.&quot;&lt;/span&gt; 
  &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt;   
    &lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Renaming &lt;span class=&quot;token variable&quot;&gt;${filename}&lt;/span&gt;&quot;&lt;/span&gt; 
    &lt;span class=&quot;token function&quot;&gt;mv&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$filename&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$newfilename&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;fi&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;done&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;p&gt;Strava has an &lt;a href=&quot;https://www.strava.com/upload/select&quot;&gt;import feature&lt;/a&gt; which accepts TCX files, so I figured I would be set from here. However, after uploading those file, I noticed major discrepancies. Some runs were recorded as being about 3 seconds long, or with a total distance of 30 meters. I know I started small but I did run a &lt;em&gt;little&lt;/em&gt; more than that! Strava does have a “Correct Distance” option in each imported activity, and it helped, but was still off, like a 6.5 Km run that came up as 5.9 Km, presumably because it doesn’t take elevation into account — not a huge difference, but with 151 runs, the drift would be noticeable. Maybe it’s more accurate than NRC, since it’s based on each GPS point, but I’d rather keep it consistent with the Nike tracking.&lt;/p&gt;
&lt;p&gt;Also, Strava has rate limiting: 30 files per 24 hours (I think), so after uploading two batches of 15 files (the max per upload), I was stuck. You’re only told an error occurred and to please try later, nothing about the cooldown period — I found that number on reddit. But… the API allows you to upload TCX files directly. Back in the game! Well, kind of: Friday night the API server was down, so it had officially become a weekend project.&lt;/p&gt;
&lt;p&gt;After creating a new “app” in the &lt;a href=&quot;https://www.strava.com/settings/api&quot;&gt;unlisted API section&lt;/a&gt; of my Strava settings, and providing the callback domain matching my local Eleventy development environment (localhost with the hardcoded port, &lt;code&gt;2024&lt;/code&gt; in my case), I started creating a local app to do all of the communicating with the API to get/refresh auth codes and tokens, read my data, and eventually upload my data, as well. It needs to behave like a website to do these initial callbacks, so you can allow your app to call Strava data on your behalf. You could likely do all this in Postman but it was fun to create a simple app anyways. HTML! CSS! And JavaScript of course.&lt;/p&gt;
&lt;p&gt;Uploading a TCX file via the API yielded the same result (shocker), so I tried finding other posts of people affected by these inconsistencies, but the only real fix I read about was to use a GPX file. I tried exporting a “good” run’s GPX file from Strava but it wasn’t very similar to TCX, so my idea of using a good run as a template to convert the bad ones fell apart. Plus, I didn’t want to convert all the files. While The GPS data in those files is supposedly good, I didn’t want to spend a lot of time trying to fix something when I couldn’t even tell where the issue was.&lt;/p&gt;
&lt;p&gt;I saw in the API documentation there was a way to insert an activity as a plain object: date, distance, time… no GPS data, but at this point, I didn’t care. It’s kind of fun to have, yes, but not essential: accurate activity logs are more important than showing the same three paths I take most of the time. So I’d need a list of all the activities to log, exported as JSON, without any other data.&lt;/p&gt;
&lt;p&gt;I ended up creating a simple Node script that parses the XML files via &lt;a href=&quot;https://www.npmjs.com/package/fast-xml-parser&quot;&gt;fast-xml-parser&lt;/a&gt; (120 MB of data took a couple seconds, it is true to its name!), collects basic data for each file as an object, and spits out an array as a JSON file. I wanted to load the file into my app buy it’s all local, and it’s a one-time import operation, so I just copy-pasted the contents into the app as a variable, who cares? Work smarter, not harder!&lt;/p&gt;
&lt;p&gt;So the next part is to import each activity: it’s a single one per API call, so I looped over the array, and imported the data, with a few tweaks to make sure it was saved as a run. Once one file was done (using &lt;code&gt;await&lt;/code&gt;), I moved on to the next. I didn’t want to run into rate-limiting issues, and 151 files is relatively fast to go through.&lt;/p&gt;
&lt;p&gt;I then refreshed my Strava activity page, and sure enough: a bunch of new activities appeared! All the distances seemed correct, so I am pretty happy with this. It’s historical, basic data, but it is more than enough to track my stats for running.&lt;/p&gt;
&lt;p&gt;Okay, then only one thing remains: query the data to use on my stats page. Strava offers an aggregated stats endpoint, and a list of activities endpoint. I am using both, so I call the stats, then loop over paginated data for activities. Though I only have 185 runs, and Strava limits this to 200 activities per page, I made sure to have the loop for future-proofing this little app. I extract only the date, distance and duration for each activity. No point in making this more bloated than needed (he says, over a thousand words into a post about running data).&lt;/p&gt;
&lt;p&gt;I can now copy the contents of the stats and all activities, merged into a single object, which I paste into &lt;code&gt;strava.js&lt;/code&gt; in my Eleventy &lt;code&gt;_data&lt;/code&gt; folder (prefixing with &lt;code&gt;export default&lt;/code&gt;). I could likely use a Node package to handle Strava tokens and pull everything automatically in every build, but that means one more third-party API to call during a build, and one more point of failure for said build if the API goes down for any reason. This will do for the time being. It’s still a little manual, but a lot less than copying data by hand from NRC.&lt;/p&gt;
&lt;p&gt;And with that: my stats page now contains some basic &lt;a href=&quot;https://chriskirknielsen.com/stats/#running&quot;&gt;running stats&lt;/a&gt;. All in a weekend’s work!&lt;/p&gt;
&lt;p&gt;A couple drawbacks that I’ve noticed is that my total running distance is off by about 4 Kilometers, (which is about a quarter of a percent over the total, I’m sure you’ll agree that’s negligible), and the aforementioned lack of GPS data, but I honestly don’t care about earlier data all that much. Beyond that, all the numbers match up between NRC and Strava. Neat!&lt;/p&gt;
&lt;p&gt;That’s it for the long explanation, the code and basic steps are provided below. Let me know if I messed something up or if you have questions!&lt;/p&gt;
&lt;h2 id=&quot;tl-dr&quot; tabindex=&quot;-1&quot;&gt;
&lt;a class=&quot;heading-anchor&quot; href=&quot;https://chriskirknielsen.com/blog/nerd-snipped-into-importing-nike-running-club-into-strava-api/#tl-dr&quot;&gt;tl;dr&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.nike.com/help/privacy&quot;&gt;Ask Nike for your data&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Rename the TCX files to contain the activity date by running this script in the folder with all TCX files (optional).&lt;/p&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;use xlink:href=&quot;#svg__code-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; &lt;span class=&quot;visually-hidden&quot;&gt;Code block&lt;/span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-bash codeblock-pre&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# goal: append filenames with time&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token for-or-select variable&quot;&gt;filename&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; *.tcx&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;token assign-left variable&quot;&gt;T0&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sed&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;7q;d&#39;&lt;/span&gt; $&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;filename&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;awk&lt;/span&gt; -F&lt;span class=&quot;token string&quot;&gt;&#39;&quot;&#39;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;{print $2}&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;awk&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-F&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;T&#39;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;{print $1}&#39;&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token assign-left variable&quot;&gt;T0_str&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-j&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;%Y-%m-%d&#39;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$T0&lt;/span&gt;&quot;&lt;/span&gt; +&lt;span class=&quot;token string&quot;&gt;&#39;%Y%m%d&#39;&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt; 
  &lt;span class=&quot;token assign-left variable&quot;&gt;fileheader&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; $filename &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;awk&lt;/span&gt; -F&lt;span class=&quot;token string&quot;&gt;&#39;.&#39;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;{print $1}&#39;&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token assign-left variable&quot;&gt;newfilename&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;nrc_&lt;span class=&quot;token variable&quot;&gt;${T0_str}&lt;/span&gt;_&lt;span class=&quot;token variable&quot;&gt;${fileheader}&lt;/span&gt;.tcx&quot;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$filename&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; *&lt;span class=&quot;token string&quot;&gt;&quot;nrc_&quot;&lt;/span&gt;* &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;then&lt;/span&gt;
    &lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Already renamed this file.&quot;&lt;/span&gt; 
  &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt;   
    &lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Renaming &lt;span class=&quot;token variable&quot;&gt;${filename}&lt;/span&gt;&quot;&lt;/span&gt; 
    &lt;span class=&quot;token function&quot;&gt;mv&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$filename&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$newfilename&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;fi&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;done&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;p&gt;Create a new npm project in the folder containing all your TCX files, install &lt;code&gt;fast-xml-parser&lt;/code&gt;, create an &lt;code&gt;index.js&lt;/code&gt; file, and open it:&lt;/p&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;use xlink:href=&quot;#svg__code-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; &lt;span class=&quot;visually-hidden&quot;&gt;Code block&lt;/span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;npm init -y &amp;amp;&amp;amp; npm i fast-xml-parser &amp;amp;&amp;amp; touch index.js &amp;amp;&amp;amp; open index.js
&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;section class=&quot;callout &quot; aria-labelledby=&quot;co-22mnbbc1tyz&quot;&gt;&lt;p id=&quot;co-22mnbbc1tyz&quot; class=&quot;callout-label | h3&quot;&gt;Note&lt;/p&gt;&lt;p&gt;If you copy all this verbatim, you’ll likely need to add &lt;code&gt;&amp;quot;type&amp;quot;: &amp;quot;module&amp;quot;&lt;/code&gt; in your &lt;code&gt;package.json&lt;/code&gt; file.&lt;/p&gt;&lt;/section&gt;
&lt;p&gt;Run a script to parse all the TCX files and save all the data as JSON:&lt;/p&gt;
&lt;details class=&quot;expander&quot;&gt;
			&lt;summary class=&quot;expander-button | button | inline-size-100pc&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 10 10&quot; class=&quot;expander-button-arrow&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M9 5 3 1.54v6.92z&quot;&gt;&lt;/path&gt;&lt;/svg&gt; xml-to-json.js&lt;/summary&gt;
			&lt;div class=&quot;expander-content | flow&quot;&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;title&gt;JavaScript&lt;/title&gt;&lt;use xlink:href=&quot;#svg__js-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; xml-to-json.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-js codeblock-pre&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; XMLParser &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;fast-xml-parser&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; fs &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;node:fs&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; path &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;node:path&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; inputDir &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;./&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; outputDir &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;./json/&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; collected &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// An array of every activity&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;try&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; files &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; fs&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;promises&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;readdir&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;inputDir&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Finds all files in the folder&lt;/span&gt;

	&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; file &lt;span class=&quot;token keyword&quot;&gt;of&lt;/span&gt; files&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; inputPath &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;inputDir&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; file&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; stat &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; fs&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;promises&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;stat&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;inputPath&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Get some file into&lt;/span&gt;

		&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;stat&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;isFile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;file&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;endsWith&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;.tcx&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;continue&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Skip anything that isn&#39;t a TCX file&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

		&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; XMLdata &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Promise&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;res&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; rej&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt;
			fs&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;readFile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;inputPath&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;utf8&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;err&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			  &lt;span class=&quot;token comment&quot;&gt;// Yes I&#39;m sure node:fs/promises has a this as a promise, whatever&lt;/span&gt;
				&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;err&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
					&lt;span class=&quot;token function&quot;&gt;rej&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;err&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
				&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
				&lt;span class=&quot;token function&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

		&lt;span class=&quot;token comment&quot;&gt;// Parse the XML and remove outer wrappers on the data we want&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; parser &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;XMLParser&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; jObj &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; parser&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;XMLdata&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		jObj &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; jObj&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;TrainingCenterDatabase&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		jObj &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; jObj&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Activities&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		jObj &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; jObj&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Activity&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; date &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; jObj&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Id&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Grab the date before lifting the hierarchy&lt;/span&gt;
		jObj &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; jObj&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Lap&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

		&lt;span class=&quot;token comment&quot;&gt;// Create an object matching Strava&#39;s accepted payload&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; stravaData &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token literal-property property&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Imported Run - TCX&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// You could use a dynamic name, but me? Lazy.&lt;/span&gt;
			&lt;span class=&quot;token literal-property property&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Run&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			&lt;span class=&quot;token literal-property property&quot;&gt;sport_type&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Run&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			&lt;span class=&quot;token literal-property property&quot;&gt;start_date_local&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; date&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			&lt;span class=&quot;token literal-property property&quot;&gt;elapsed_time&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; jObj&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;TotalTimeSeconds&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			&lt;span class=&quot;token literal-property property&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Legacy NRC Import&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			&lt;span class=&quot;token literal-property property&quot;&gt;distance&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; jObj&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;DistanceMeters&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			&lt;span class=&quot;token literal-property property&quot;&gt;trainer&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			&lt;span class=&quot;token literal-property property&quot;&gt;commute&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

		collected&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;stravaData&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;token comment&quot;&gt;// Save the JSON file in the provided folder&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; outputPath &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;outputDir&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;strava.json&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; content &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;collected&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; fs&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;writeFile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;outputPath&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; content&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;err&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;err&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;err&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Saved&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; toPath&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;err&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Uh-oh. Bad times.&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; err&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;/div&gt;
		&lt;/details&gt;
&lt;p&gt;Create a new Strava “app” on &lt;a href=&quot;https://www.strava.com/settings/api&quot;&gt;the API page&lt;/a&gt; and keep an eye on those ID and secret values.&lt;/p&gt;
&lt;p&gt;Create or update &lt;code&gt;.env&lt;/code&gt; to include &lt;code&gt;STRAVA_CLIENT_ID&lt;/code&gt; and &lt;code&gt;STRAVA_CLIENT_SECRET&lt;/code&gt;, which you just kept an eye on (you &lt;em&gt;did&lt;/em&gt; do that… right?).&lt;/p&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;title&gt;.env&lt;/title&gt;&lt;use xlink:href=&quot;#svg__code-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; .env&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;STRAVA_CLIENT_ID=######
STRAVA_CLIENT_SECRET=########################################
&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;p&gt;Create a small “app” to log into Strava via API and import files, which injects the secrets above into the page’s data cascade via &lt;code&gt;eleventyComputed&lt;/code&gt;. I am providing HTML (in Nunjucks flavour but it should work exactly the same with Liquid or Vento), CSS, and JavaScript separately as the latter is over 300 lines.&lt;/p&gt;
&lt;details class=&quot;expander&quot;&gt;
			&lt;summary class=&quot;expander-button | button | inline-size-100pc&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 10 10&quot; class=&quot;expander-button-arrow&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M9 5 3 1.54v6.92z&quot;&gt;&lt;/path&gt;&lt;/svg&gt; strava-app.njk&lt;/summary&gt;
			&lt;div class=&quot;expander-content | flow&quot;&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;title&gt;Nunjucks&lt;/title&gt;&lt;use xlink:href=&quot;#svg__nunjucks-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; strava-app.njk&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-njk codeblock-pre&quot;&gt;&lt;code class=&quot;language-njk&quot;&gt;
---js
{
	permalink: &#39;/strava/&#39;,
	layout: false,
	tags: [],
	eleventyComputed: {
		stravaEnv: function () {
			return {
				id: process.env.STRAVA_CLIENT_ID || null,
				secret: process.env.STRAVA_CLIENT_SECRET || null
			};
		}
	}
}
---

&lt;span class=&quot;token doctype&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;!&lt;/span&gt;&lt;span class=&quot;token doctype-tag&quot;&gt;DOCTYPE&lt;/span&gt; &lt;span class=&quot;token name&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;html&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;lang&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;en&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;charset&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;UTF-8&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;viewport&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;width=device-width, initial-scale=1.0&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Strava Retriever&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;link&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;stylesheet&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;./strava-app.css&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Strava Mini-App&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;select&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;scope&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;hidden&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;option&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;write&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;selected&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;write&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;option&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;option&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;vale&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;read_all&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;read_all&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;option&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;select&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;button&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;auth&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;hidden&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Authorize Strava&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;button&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;button&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;clear&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Clear local storage&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;button&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;button&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;stats&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;hidden&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Get stats&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;button&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;button&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;copy&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;hidden&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Copy relevant stats&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;form&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;importer&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;POST&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;enctype&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;multipart/form-data&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://www.strava.com/api/v3/activities&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token special-attr&quot;&gt;&lt;span class=&quot;token attr-name&quot;&gt;onsubmit&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token value javascript language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;hidden&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;submit&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;button&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;import&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Import Hardcoded Activities List&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;form&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;form&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;uploader&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;POST&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;enctype&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;multipart/form-data&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://www.strava.com/api/v3/uploads&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token special-attr&quot;&gt;&lt;span class=&quot;token attr-name&quot;&gt;onsubmit&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token value javascript language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;hidden&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;input&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;button&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;file&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;file&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;file&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;submit&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;button&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;upload&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Upload&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;form&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;pre&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;log&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;pre&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;span class=&quot;token language-javascript&quot;&gt;
			&lt;span class=&quot;token comment&quot;&gt;// Note the first two values below are injected from our eleventyComputed value&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; client_id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token njk language-njk&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{{&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;stravaEnv&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; client_secret &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&lt;span class=&quot;token njk language-njk&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{{&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;stravaEnv&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;secret&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;./strava-app.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;/div&gt;
		&lt;/details&gt;
&lt;details class=&quot;expander&quot;&gt;
			&lt;summary class=&quot;expander-button | button | inline-size-100pc&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 10 10&quot; class=&quot;expander-button-arrow&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M9 5 3 1.54v6.92z&quot;&gt;&lt;/path&gt;&lt;/svg&gt; strava-app.css&lt;/summary&gt;
			&lt;div class=&quot;expander-content | flow&quot;&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;title&gt;CSS&lt;/title&gt;&lt;use xlink:href=&quot;#svg__css-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; strava-app.css&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-css codeblock-pre&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;box-sizing&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; border-box&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;margin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;html&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;block-size&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 100%&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	
	&lt;span class=&quot;token property&quot;&gt;color-scheme&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; light dark&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;font-family&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; system-ui&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; sans-serif&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;body&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; flex&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;flex-wrap&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; wrap&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;gap&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0.5rem&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;align-items&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; flex-start&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;margin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;padding&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1rem&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;.button:where(:not([type=&#39;file&#39;])),
.button:where(input[type=&#39;file&#39;])::file-selector-button&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;padding&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0.125em 0.5em&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

	&lt;span class=&quot;token property&quot;&gt;font-size&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1rem&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;font-weight&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; bold&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;text-decoration&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; none&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;border&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1px solid currentColor&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;border-radius&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0.25em&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; white&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;background-color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; #fc5200&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token selector&quot;&gt;.button:where(:not([type=&#39;file&#39;])):is(:hover, :focus),
.button:where(input[type=&#39;file&#39;]):is(:hover, :focus)::file-selector-button&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;background-color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; #e34a00&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;text-decoration&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; underline&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;[hidden]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; none &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;h1,
pre&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;inline-size&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 100%&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;flex&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0 0 auto&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;/div&gt;
		&lt;/details&gt;
&lt;details class=&quot;expander&quot;&gt;
			&lt;summary class=&quot;expander-button | button | inline-size-100pc&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 10 10&quot; class=&quot;expander-button-arrow&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M9 5 3 1.54v6.92z&quot;&gt;&lt;/path&gt;&lt;/svg&gt; strava-app.js&lt;/summary&gt;
			&lt;div class=&quot;expander-content | flow&quot;&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;title&gt;JavaScript&lt;/title&gt;&lt;use xlink:href=&quot;#svg__js-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; strava-app.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-js codeblock-pre&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;STRAVA_CODE_STORE&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;strava_code&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;STRAVA_TOKEN_STORE&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;strava_token&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;STRAVA_ATHLETE_STORE&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;strava_athlete&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; logEl &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;log&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; stats&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// If redirected from the login page&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; response &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;URLSearchParams&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;window&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;location&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;search&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; code &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; response&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;code&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;code &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;sessionStorage&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getItem&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;STRAVA_CODE_STORE&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	sessionStorage&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setItem&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;STRAVA_CODE_STORE&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; code&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;code &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sessionStorage&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getItem&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;STRAVA_CODE_STORE&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	code &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; sessionStorage&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getItem&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;STRAVA_CODE_STORE&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// If already logged in&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; tokens &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;sessionStorage&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getItem&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;STRAVA_TOKEN_STORE&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; athlete &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;sessionStorage&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getItem&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;STRAVA_ATHLETE_STORE&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;buildAccessUrl&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;scope &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;read_all&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;scope &lt;span class=&quot;token operator&quot;&gt;!==&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;write&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		scope &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;read_all&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// All that&#39;s needed, at least for me&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; params &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;URLSearchParams&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		client_id&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;redirect_uri&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;http://localhost:2024/strava/&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Remember to update this to match your port&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;response_type&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;code&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;approval_prompt&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;auto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;scope&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;activity:&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;scope&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;URL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;https://www.strava.com/oauth/authorize?&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;params&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getToken&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; params &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;client_id&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; client_id&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;client_secret&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; client_secret&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

	&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;type &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;refresh&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; tokens &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; tokens&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;refresh_token&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		params&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;grant_type &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;refresh_token&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		params&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;refresh_token &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; tokens&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;refresh_token&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;type &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;authorize&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; code&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		params&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;grant_type &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;authorization_code&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		params&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;code &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; code&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		logEl&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;innerHTML &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;! Unable to get a token: missing refresh token or auth code.&#92;n&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;fetch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;https://www.strava.com/oauth/token?&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;URLSearchParams&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;params&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;POST&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;mode&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;cors&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; res&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ok &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; res&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Failed to fetch.&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Error&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;isError&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;res&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
				tokens &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;token_type&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; res&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;token_type&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;expires_at&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; res&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;expires_at &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;access_token&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; res&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;access_token&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;refresh_token&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; res&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;refresh_token &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
				athlete &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; res&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;athlete&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
				document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;stats&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;hidden &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
				document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;uploader&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;hidden &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
				document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;importer&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;hidden &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

				sessionStorage&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setItem&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;STRAVA_TOKEN_STORE&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;tokens&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
				sessionStorage&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setItem&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;STRAVA_ATHLETE_STORE&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;res&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;athlete&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

				logEl&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;innerHTML &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;&gt; Token has been fetched.&#92;n&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

				&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; tokens&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
				logEl&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;innerHTML &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;! Unable to get a token.&#92;n&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
				&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;consumeToken&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; tokensData &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;tokens&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getToken&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;authorize&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

		&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;tokens&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;expires_at &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; Date&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getToken&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;refresh&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; tokens&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;tokensData&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;token_type&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;tokensData&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;access_token&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;refreshStravaData&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;fetch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;https://www.strava.com/api/v3/athlete&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;GET&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;mode&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;cors&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;Authorization&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;consumeToken&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; res&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getActivities&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;expectedCount&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; pageSize &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; pageCount &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ceil&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;expectedCount &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; pageSize&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; activities &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; currPage &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; resolver&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; rejector&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; promise &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Promise&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;res&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; rej&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		resolver &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; res&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Or use new Promise.withResolvers(), I won&#39;t stop you&lt;/span&gt;
		rejector &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; rej&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

	&lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;currPage &lt;span class=&quot;token operator&quot;&gt;&amp;lt;=&lt;/span&gt; pageCount&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;fetch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;https://www.strava.com/api/v3/athlete/activities?page=&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;currPage&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;amp;per_page=&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;pageSize&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token literal-property property&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;GET&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			&lt;span class=&quot;token literal-property property&quot;&gt;mode&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;cors&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			&lt;span class=&quot;token literal-property property&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;Authorization&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;consumeToken&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; res&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
				logEl&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;innerHTML &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&gt; Activities (page &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;currPage&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;res&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt; items) have been fetched.&#92;n&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
				&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; simpleActivities &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; res&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;activity&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
					&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
						&lt;span class=&quot;token literal-property property&quot;&gt;year&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Date&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;activity&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;start_date_local&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getUTCFullYear&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
						&lt;span class=&quot;token literal-property property&quot;&gt;date&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; activity&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;start_date_local&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
						&lt;span class=&quot;token literal-property property&quot;&gt;distance&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; activity&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;distance&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
						&lt;span class=&quot;token literal-property property&quot;&gt;duration&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; activity&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;elapsed_time&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
					&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
				&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
				currPage&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
				activities&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;simpleActivities&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;err&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
				logEl&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;innerHTML &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;! Somethind bad happened.&#92;n&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
				&lt;span class=&quot;token function&quot;&gt;rejector&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;err&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;currPage &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; pageCount&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token function&quot;&gt;resolver&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;activities&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; promise&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; activities&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getStats&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;fetch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;https://www.strava.com/api/v3/athletes/&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;athlete&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;/stats&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;GET&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;mode&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;cors&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;Authorization&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;consumeToken&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; res&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			stats &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;res&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;all_run_totals &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
			logEl&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;innerHTML &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;&gt; Stats have been fetched. Processing...&#92;n&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
			document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;copy&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;hidden &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

			&lt;span class=&quot;token function&quot;&gt;getActivities&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;res&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;all_run_totals&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;count&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;activities&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
				Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;assign&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;stats&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; activities &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
				logEl&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;innerHTML &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;stats&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#92;n&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;err&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			logEl&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;innerHTML &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;! Somethind bad happened.&#92;n&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;uploadFile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;formData&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;fetch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;https://www.strava.com/api/v3/uploads&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;POST&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;mode&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;cors&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;Authorization&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;consumeToken&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; formData&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			logEl&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;innerHTML &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;&gt; Activity has been uploaded.&#92;n&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; res&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			logEl&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;innerHTML &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;res&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#92;n&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;err&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			logEl&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;innerHTML &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;! Somethind bad happened.&#92;n&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;importActivity&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;payload&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; activity&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;fetch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;https://www.strava.com/api/v3/activities&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;POST&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;mode&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;cors&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;Authorization&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;consumeToken&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; payload&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; res&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			logEl&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;innerHTML &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&gt; Activity from &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;activity&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;start_date_local&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt; has been imported (&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;res&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;NOID&#39;&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;).&#92;n&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;err&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			logEl&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;innerHTML &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;! Unable to import (&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;activity&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;start_date_local&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;).&#92;n&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; err&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// Paste all the activities that need to be imported &quot;manually&quot;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; allActivities &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Imported Run - TCX&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Run&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;sport_type&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Run&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;start_date_local&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;YYYY-MM-DDThh:mm:ss.msZ&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;elapsed_time&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;999&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Legacy NRC Import&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;distance&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;9999&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;trainer&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;commute&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;// and lots more!&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;act&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;assign&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; act&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;Run &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;act&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;start_date_local&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;T&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt; - NRC TCX&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;code&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; link &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;auth&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; scope &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;scope&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;updateUrl&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; scopeVal &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;scope&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;value &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;read_all&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		link&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;href &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;buildAccessUrl&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;scopeVal&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;scope&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addEventListener&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;change&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token function&quot;&gt;updateUrl&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token function&quot;&gt;updateUrl&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	link&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;hidden &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	scope&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;hidden &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;tokens&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token function&quot;&gt;getToken&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;authorize&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;stats&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;hidden &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;uploader&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;hidden &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;importer&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;hidden &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addEventListener&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;click&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;e&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;target&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;closest&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;#clear&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;STRAVA_CODE_STORE&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;STRAVA_TOKEN_STORE&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;STRAVA_ATHLETE_STORE&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; sessionStorage&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;removeItem&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;k&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		window&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;location&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;href &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; window&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;location&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;href&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;?&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;shift&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Remove any query string&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;e&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;target&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;closest&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;#stats&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token function&quot;&gt;getStats&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;e&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;target&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;closest&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;#copy&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;stats&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token function&quot;&gt;alert&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;wtf&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; copyAction &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; navigator&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;clipboard&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;writeText&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;stats&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		copyAction
			&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
				&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; prevText &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; e&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;target&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;innerText&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
				e&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;target&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;innerText &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Copied!&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
				&lt;span class=&quot;token function&quot;&gt;setTimeout&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
					e&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;target&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;innerText &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; prevText&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
				&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;err&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
				console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;err&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
				&lt;span class=&quot;token function&quot;&gt;alert&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;wtf!&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;e&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;target&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;closest&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;#import&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; form &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;importer&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; activity &lt;span class=&quot;token keyword&quot;&gt;of&lt;/span&gt; allActivities&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
				&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; payload &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;FormData&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;form&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
				&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;key&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; value&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;of&lt;/span&gt; Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;entries&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;activity&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
					payload&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;key&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; value&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
				&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
				&lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;importActivity&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;payload&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; activity&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Import one file at a time thanks to await&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;e&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;target&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;closest&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;#upload&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; form &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;uploader&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; file &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;file&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; payload &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;FormData&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;form&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		payload&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;file&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; file&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;files&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		payload&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;name&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Morning Run TCX&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		payload&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;description&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Nike Running Club TCX file upload&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		payload&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;trainer&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		payload&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;commute&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		payload&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;data_type&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;tcx&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		payload&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;external_id&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;uploadFile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;payload&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; form&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;reset&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;/div&gt;
		&lt;/details&gt;
&lt;p&gt;Run Eleventy and open &lt;code&gt;localhost:####/strava&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Click “Authorize Strava”, selecting either &lt;code&gt;read_all&lt;/code&gt; or &lt;code&gt;write&lt;/code&gt; permissions (if you’re uploading or fetching multiple activities, &lt;code&gt;write&lt;/code&gt; will be needed).&lt;/p&gt;
&lt;p&gt;If you need to upload anything, copy the contents of your &lt;code&gt;strava.json&lt;/code&gt; file which contains your converted TCX data, and paste it as the value for &lt;code&gt;allActivities&lt;/code&gt;; save to refresh. Click “Import” and watch every file get imported.&lt;/p&gt;
&lt;p&gt;Click Get Stats button, and watch every single piece of data appear.&lt;/p&gt;
&lt;p&gt;You can now copy this output into &lt;code&gt;_data/strava.json&lt;/code&gt; and use it however you like. (note: the “Copy relevant stats” didn’t work for me in Firefox despite being user-activated, so manually copy-pasting was needed… ah well)&lt;/p&gt;
&lt;p&gt;This is not amazingly well-written code (&lt;code&gt;onsubmit&lt;/code&gt; Chris, really?), but it is, except for the bash script from &lt;em&gt;Efficient_Soft773&lt;/em&gt;, code I have written myself, and for a weekend project, it ain’t too bad. It works and does what it should. It’s probably not very accessible, but this was mainly built for myself.&lt;/p&gt;
&lt;p&gt;Oh and because this app to fetch my stats only runs locally, I have added &lt;code&gt;app-strava&lt;/code&gt; files to &lt;code&gt;.gitignore&lt;/code&gt; (initially to hide my hardcoded client secret, but with &lt;code&gt;.env&lt;/code&gt; that’s no problem). The callback URL will most likely not work on the production URL, though, so it’s not really needed to keep around.&lt;/p&gt;

                    
                
            </content>
        </entry>
        
        
        <entry>
            <title>Cheff mpeg</title>
            <link href="https://chriskirknielsen.com/blog/cheff-mpeg/"/>
            <updated>2026-03-11T03:45:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/cheff-mpeg/</id>
            <content type="html">
                
                    

&lt;div class=&quot;image-gallery&quot;&gt;&lt;a href=&quot;https://cheffmpeg.chriskirknielsen.com/&quot;&gt;&lt;img src=&quot;https://chriskirknielsen.com/.netlify/images?w=800&amp;url=%2Fblog%2Fcheff-mpeg%2Fcheffmpeg.jpg&quot; alt=&quot;Cheff mpeg&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot; srcset=&quot;https://chriskirknielsen.com/.netlify/images?w=480&amp;url=%2Fblog%2Fcheff-mpeg%2Fcheffmpeg.jpg 480w, https://chriskirknielsen.com/.netlify/images?w=800&amp;url=%2Fblog%2Fcheff-mpeg%2Fcheffmpeg.jpg 800w, https://chriskirknielsen.com/.netlify/images?w=1200&amp;url=%2Fblog%2Fcheff-mpeg%2Fcheffmpeg.jpg 1200w&quot; sizes=&quot;100vw, (min-width: 50rem) 50rem&quot; width=&quot;1904&quot; height=&quot;1000&quot; style=&quot;aspect-ratio: 1.9048; max-width: 100%;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;I built a tool to prepare FFmpeg commands because despite using it nearly every day, I still forget syntax details. If I were really invested, I’d create some app with a file picker that does this and runs the command for you, but 1) that probably exists, and 2) I do not have the knowledge to build such an app!&lt;/p&gt;

&lt;p&gt;FFmpeg is a beast and can do so many cool things, but I am keeping it simple, in that &lt;strong&gt;Cheff mpeg&lt;/strong&gt; only has basic options for the conversions I use the most. I am open to small suggestions, though!&lt;/p&gt;

&lt;p&gt;Go forth and cook:  
 






&lt;a href=&quot;https://cheffmpeg.chriskirknielsen.com/&quot; class=&quot;button&quot;&gt;
	
		
			&lt;img src=&quot;https://cheffmpeg.chriskirknielsen.com/icon.svg&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; class=&quot;inline-icon&quot; /&gt;
		
	
	
		
		
		&lt;span&gt;Cheff mpeg&lt;/span&gt;
	

	
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;PS: I don’t know if it’s “chef-ef em-peg” or just “chef em-peg” with a heavy emphasis on the F. You get to decide how you prefer to pronounce it.&lt;/p&gt;
                    
                
            </content>
        </entry>
        
        
        <entry>
            <title>Auto-scroll overflowing table cells with CSS container queries</title>
            <link href="https://chriskirknielsen.com/blog/scrolling-overflow-cells-with-css-container-query/"/>
            <updated>2026-02-07T22:18:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/scrolling-overflow-cells-with-css-container-query/</id>
            <content type="html">
                
                    &lt;p&gt;I saw an exchange over on Mastodon about a small bit of the State of JS results interface. &lt;a href=&quot;https://mastodon.social/@pawelgrzybek/116012940430514020&quot;&gt;Paweł noticed&lt;/a&gt; a little movement on a table cell label that seemed glitchy. &lt;a href=&quot;https://front-end.social/@sachagreif/116015431570354780&quot;&gt;Sacha described it as an issue&lt;/a&gt; due to a reveal effect: when a label would be longer than the table cell it was in, hovering it would scroll it so you could read the whole thing, but short labels were also affected. So &lt;a href=&quot;https://front-end.social/@chriskirknielsen/116015469645917424&quot;&gt;I inserted myself into the conversation&lt;/a&gt;, of course.&lt;/p&gt;
&lt;p&gt;With CSS container query units, we can know the size of the cell (&lt;code&gt;100cqi&lt;/code&gt;), and with a child element, the size of the full line of text (&lt;code&gt;100%&lt;/code&gt;). Well, a pinch of maths should tell us how much text is hidden: &lt;code&gt;100% - 100cqi&lt;/code&gt;. Check out the result below, and keep on reading for the full breakdown.&lt;/p&gt;
&lt;h2 id=&quot;result&quot; tabindex=&quot;-1&quot;&gt;
&lt;a class=&quot;heading-anchor&quot; href=&quot;https://chriskirknielsen.com/blog/scrolling-overflow-cells-with-css-container-query/#result&quot;&gt;Result&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;cp_embed_wrapper codepen | cellstack cellstack--center&quot; data-height=&quot;480&quot; data-default-tab=&quot;result&quot; data-slug-hash=&quot;YPWjpmZ&quot; data-version=&quot;1&quot;&gt;
			&lt;div class=&quot;single-media&quot;&gt;
				&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/https://shots.codepen.io/username/pen/YPWjpmZ-512.webp?version=1782268123136&quot; alt=&quot;&quot; class=&quot;codepen-thumbnail&quot; width=&quot;512&quot; height=&quot;288&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; style=&quot;height: 480px;&quot; /&gt;
			&lt;/div&gt;
			&lt;a href=&quot;https://codepen.io/chriskirknielsen/pen/YPWjpmZ&quot; class=&quot;button&quot;&gt;View on CodePen&lt;/a&gt;
		&lt;/div&gt;&lt;script async=&quot;&quot; src=&quot;https://public.codepenassets.com/embed/index.js&quot;&gt;&lt;/script&gt;
&lt;h2 id=&quot;the-idea&quot; tabindex=&quot;-1&quot;&gt;
&lt;a class=&quot;heading-anchor&quot; href=&quot;https://chriskirknielsen.com/blog/scrolling-overflow-cells-with-css-container-query/#the-idea&quot;&gt;The idea&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In this example, we are working with a table, and to make this effect work, I had to ensure the container was set to &lt;code&gt;display: block&lt;/code&gt;. Table cells have a bespoke &lt;code&gt;display&lt;/code&gt; value of &lt;code&gt;table-cell&lt;/code&gt; (shocker!), so to avoid breaking the table layout, the text (&lt;code&gt;span&lt;/code&gt;) must be wrapped in a container element (&lt;code&gt;div&lt;/code&gt;), which will be inside the cell (&lt;code&gt;td&lt;/code&gt;). Maybe there’s a way to remove one layer, but I’m just playing around — optimise at your own leisure!&lt;/p&gt;
&lt;p&gt;So, to get all of this right, we need:&lt;/p&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;use xlink:href=&quot;#svg__html-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; HTML&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-html codeblock-pre&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;table&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- For brevity, I am skipping the thead section and the tbody wrapper --&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;tr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;td&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;cell&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;container&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;text&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
					Here is a longer piece of text that will overflow
				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;td&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;td&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;I am a regular piece of content that will just take up space in the table like a normal cell&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;td&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;tr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;table&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;use xlink:href=&quot;#svg__css-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; CSS&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-css codeblock-pre&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.cell&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;inline-size&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 20ch&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* Optional, nice to have for this demo */&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token selector&quot;&gt;.container&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;container-type&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; inline-size&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* Essential for our trick */&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;overflow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; hidden&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* Prevents text in the next cells */&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token selector&quot;&gt;.text&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;--offset&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;calc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;100% - 100cqi&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* Returns the overflow length, if any */&lt;/span&gt;
	
	&lt;span class=&quot;token property&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; block&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* Only needed because this element is a &amp;lt;span&gt; */&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;inline-size&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; max-content&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* Allows the element grow past the container limit */&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;text-wrap&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; nowrap&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* `max-content` actually triggers this already but I like being explicit */&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;h2 id=&quot;animate&quot; tabindex=&quot;-1&quot;&gt;
&lt;a class=&quot;heading-anchor&quot; href=&quot;https://chriskirknielsen.com/blog/scrolling-overflow-cells-with-css-container-query/#animate&quot;&gt;Animate&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The last piece of the puzzle is to animate this on hover (or focus! — sorry I am not diving into the accessibility of tables in this short-ish post, but it’s good to consider how that’d work).&lt;/p&gt;
&lt;p&gt;We do not, however, want the shorter labels which &lt;em&gt;do&lt;/em&gt; fit in the cell to animate, so we can add a &lt;code&gt;max()&lt;/code&gt; to give the offset a minimum value of &lt;code&gt;0px&lt;/code&gt;: &lt;code&gt;--offset: max(0px, 100% - 100cqi)&lt;/code&gt; (FYI: a &lt;code&gt;calc&lt;/code&gt; wrapper is not required inside math functions like &lt;code&gt;min&lt;/code&gt;, &lt;code&gt;max&lt;/code&gt;, &lt;code&gt;clamp&lt;/code&gt;, etc.). That will make the animation scroll from &lt;code&gt;0px&lt;/code&gt; to &lt;code&gt;0px&lt;/code&gt; for small labels instead of a negative length, and longer labels will compute to a positive length.&lt;/p&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;use xlink:href=&quot;#svg__css-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; CSS&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-css codeblock-pre&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.container:hover .text&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;/* Animation names don&#39;t need double-dash prefixes but I like doing so for clarity,
    I believe I picked that habit up from Roma Komarov (a.k.a. kizu) */&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;animation&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; --pingpong 4s ease-in-out alternate infinite&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@keyframes&lt;/span&gt; --pingpong&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;/* In left-to-right contexts, we want the label to go left, so we need a negative number */&lt;/span&gt;
	&lt;span class=&quot;token selector&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;translate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;calc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--offset&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; * -1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;p&gt;We can “simplify” our &lt;code&gt;translate&lt;/code&gt; by flipping the &lt;code&gt;--offset&lt;/code&gt; expression since &lt;code&gt;(A-B) = -1 * (B-A)&lt;/code&gt; — and since we’re flipping it, our &lt;code&gt;max()&lt;/code&gt; becomes &lt;code&gt;min()&lt;/code&gt;:&lt;/p&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;use xlink:href=&quot;#svg__css-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; CSS&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-css codeblock-pre&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.text&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;--offset&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;min&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;0px&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 100cqi - 100%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* Essentially clamps from -Infinity to 0px */&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@keyframes&lt;/span&gt; --pingpong&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token selector&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;translate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--offset&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;p&gt;If you find other way around more readable, use that! Shorter code for the sake of saving a handful of bytes is ridiculous — use what makes sense &lt;em&gt;to you&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;If you have right-to-left content, then having a &lt;code&gt;calc&lt;/code&gt; could be needed to change the direction of the &lt;code&gt;translate&lt;/code&gt; because we don’t have anything like &lt;code&gt;transform-mapping: logical&lt;/code&gt; (from my &lt;a href=&quot;https://chriskirknielsen.com/blog/css-wishlist-2024/#logical-everything&quot;&gt;2024 wishlist&lt;/a&gt;!). Sad boop.&lt;/p&gt;
&lt;p&gt;I’d use a &lt;code&gt;--factor&lt;/code&gt; variable that flips from &lt;code&gt;1&lt;/code&gt; to &lt;code&gt;-1&lt;/code&gt; in RTL, but you could use the flipped math, too:&lt;/p&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;use xlink:href=&quot;#svg__css-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; CSS&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-css codeblock-pre&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;/* EITHER */&lt;/span&gt;
&lt;span class=&quot;token selector&quot;&gt;.text:dir(rtl)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;--factor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; -1&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@keyframes&lt;/span&gt; --pingpong&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token selector&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;translate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;calc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--offset&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; * &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--factor&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;/* OR */&lt;/span&gt;
&lt;span class=&quot;token selector&quot;&gt;.text:dir(rtl)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;--offset&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;0px&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 100% - 100cqi&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* In RTL contexts, move in the other direction */&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@keyframes&lt;/span&gt; --pingpong&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token selector&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;translate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--offset&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;h2 id=&quot;faded-affordance&quot; tabindex=&quot;-1&quot;&gt;
&lt;a class=&quot;heading-anchor&quot; href=&quot;https://chriskirknielsen.com/blog/scrolling-overflow-cells-with-css-container-query/#faded-affordance&quot;&gt;Faded affordance&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;One last consideration is affordance. I think a cut-off letter is a pretty clear indicator that something is missing. But what if the cell cuts off right after a word? To account for this, we can use a mask on the container’s inline edges, which is just like scroll shadows. With some padding and a mask matching the padding size, it’s a breeze. You could likely also use scroll-driven animations to progressively mask either side, but I’m keeping it simple for now… Here are some more styles we can use to achieve this:&lt;/p&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;use xlink:href=&quot;#svg__css-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; CSS&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-css codeblock-pre&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;table&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;--padding&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1rem&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;th,
td:not(:has(.container)),
.container&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;/* We could just pad all th/td and use a negative margin on the .container but that&#39;s hacky */&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;padding-block&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;calc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--padding&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; / 2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;padding-inline&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--padding&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;.container&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;linear-gradient&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;to right&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		transparent&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		tan &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--padding&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;calc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;100% - &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--padding&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token comment&quot;&gt;/* This is a 2-position color stop, any solid color will do, but `tan` is short — `red` or `deeppink` work too! */&lt;/span&gt;
		transparent
	&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;p&gt;Now, the edges of the text are faded: a little affordance, just like that!&lt;/p&gt;
&lt;h2 id=&quot;cleanup&quot; tabindex=&quot;-1&quot;&gt;
&lt;a class=&quot;heading-anchor&quot; href=&quot;https://chriskirknielsen.com/blog/scrolling-overflow-cells-with-css-container-query/#cleanup&quot;&gt;Cleanup&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I added &lt;code&gt;.text { translate: 0; }&lt;/code&gt; as well because on a 72 DPI monitor with Firefox, I got a little flicker on hover for text labels that didn’t need the scroll. A flicker was the initial problem, so we definitely don’t want that! My gut tells me it’s a GPU thing, so this addition keeps it static by making it GPU-accelerated at all times.&lt;/p&gt;
&lt;h2 id=&quot;alternatives&quot; tabindex=&quot;-1&quot;&gt;
&lt;a class=&quot;heading-anchor&quot; href=&quot;https://chriskirknielsen.com/blog/scrolling-overflow-cells-with-css-container-query/#alternatives&quot;&gt;Alternatives&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Using &lt;code&gt;animation&lt;/code&gt; allows for a continuous ping-pong effect. If we wanted to just scroll to the end and stay there, a &lt;code&gt;transition&lt;/code&gt; would work (and would smoothly revert when unhovered).&lt;/li&gt;
&lt;li&gt;Scroll-driven animations could likely achieve a similar result, but their support across browsers isn’t as wide.&lt;/li&gt;
&lt;li&gt;Using an actual horizontal scrollbar, but that’s not quite as compact.&lt;/li&gt;
&lt;li&gt;Removing the &lt;code&gt;overflow: hidden&lt;/code&gt; style on the container on hover, and adding a background colour to let it overlap the next cell.&lt;/li&gt;
&lt;li&gt;Letting the text wrap!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;relative-duration&quot; tabindex=&quot;-1&quot;&gt;
&lt;a class=&quot;heading-anchor&quot; href=&quot;https://chriskirknielsen.com/blog/scrolling-overflow-cells-with-css-container-query/#relative-duration&quot;&gt;Relative duration?&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you wanted to over-engineer the crap out of it, maybe you could use &lt;a href=&quot;https://dev.to/janeori/css-type-casting-to-numeric-tanatan2-scalars-582j&quot;&gt;Jane Ori’s scalar trick&lt;/a&gt; to compute a relative animation time based on the distance to “travel”, so you’d have an animation that goes about 30 pixels per second, instead of a static duration? I hit a roadblock though: while &lt;code&gt;100% - 100cqi&lt;/code&gt; makes sense in a &lt;code&gt;translate&lt;/code&gt; context, if you’re creating a variable that ultimately is consumed as a &lt;code&gt;animation-duration&lt;/code&gt;, that &lt;code&gt;100%&lt;/code&gt; value doesn’t really make sense. This is definitely &lt;a href=&quot;https://css-tip.com/element-dimension/&quot;&gt;solvable with scroll-driven animations&lt;/a&gt; (again!), but I have rambled enough. Still, if you want to push this further, here’s how far I got before realising it wouldn’t work with the existing setup:&lt;/p&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;use xlink:href=&quot;#svg__css-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; CSS&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-css codeblock-pre&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.text&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;--travel&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tan&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;atan2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;abs&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--offset&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 1px&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* Whether it goes left or right, we just want the difference */&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;--pps&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 30&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* PPS = pixels per second */&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;--duration&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;calc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--travel&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; / &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--pps&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; * 1s&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

	&lt;span class=&quot;token selector&quot;&gt;.container:hover &amp;amp;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token property&quot;&gt;animation-duration&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--duration&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;h2 id=&quot;final-code&quot; tabindex=&quot;-1&quot;&gt;
&lt;a class=&quot;heading-anchor&quot; href=&quot;https://chriskirknielsen.com/blog/scrolling-overflow-cells-with-css-container-query/#final-code&quot;&gt;Final code&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You can pull the &lt;a href=&quot;https://codepen.io/chriskirknielsen/pen/YPWjpmZ?editors=0100&quot;&gt;code from the CodePen&lt;/a&gt; but here’s the full CSS from this post:&lt;/p&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;use xlink:href=&quot;#svg__css-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; CSS&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-css codeblock-pre&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;table&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;--padding&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1rem&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;th,
td:not(:has(.container)),
.container&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;/* We could just pad all th/td and use a negative margin on the .container but that&#39;s hacky */&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;padding-block&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;calc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--padding&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; / 2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;padding-inline&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--padding&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;.cell&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;inline-size&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 20ch&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* Optional, nice to have for this demo */&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token selector&quot;&gt;.container&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;container-type&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; inline-size&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* Essential for our trick */&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;overflow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; hidden&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* Prevents text in the next cells */&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token selector&quot;&gt;.text&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;/* Returns the overflow length, if any — essentially clamps from -Infinity to 0px */&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;--offset&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;min&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;0px&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 100cqi - 100%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	
	&lt;span class=&quot;token property&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; block&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* Only needed because this element is a &amp;lt;span&gt; */&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;inline-size&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; max-content&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* Allows the element grow past the container limit */&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;text-wrap&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; nowrap&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* `max-content` actually triggers this already but I like being explicit */&lt;/span&gt;

	&lt;span class=&quot;token property&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;linear-gradient&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;to right&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		transparent&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		tan &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--padding&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;calc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;100% - &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--padding&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token comment&quot;&gt;/* This is a 2-position color stop, any solid color will do, but `tan` is short — `red` or `deeppink` work too! */&lt;/span&gt;
		transparent
	&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token selector&quot;&gt;.text:dir(rtl)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;/* In RTL contexts, move in the other direction: 0px to Infinity */&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;--offset&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;0px&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 100% - 100cqi&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token selector&quot;&gt;.container:hover .text&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;/* Animation names don&#39;t need double-dash prefixes but I like doing so for clarity,
    I believe I picked that habit up from Roma Komarov (a.k.a. kizu) */&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;animation&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; --pingpong 4s ease-in-out alternate infinite&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@keyframes&lt;/span&gt; --pingpong&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token selector&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;translate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--offset&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;
                    
                
            </content>
        </entry>
        
        
        <entry>
            <title>A no-AI icon for humans to use</title>
            <link href="https://chriskirknielsen.com/blog/no-ai-icon-for-humans/"/>
            <updated>2026-01-19T19:56:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/no-ai-icon-for-humans/</id>
            <content type="html">
                
                    &lt;p&gt;I have added a tiny &lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;title&gt;no A.I.&lt;/title&gt;&lt;use xlink:href=&quot;#svg__no-ai&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; symbol in the footer of my website. It’s supposed to be as unremarkable as a © symbol (though I think we can all agree it basically holds no value whatsoever these days), but communicates that A.I. — the buzzword encompassing large language models, machine-learning, or neural networks, which are speeding up climate change, devaluating labour, decaying critical thinking, eroding creative expression, accelerating misinformation, and exploding consumer product prices, all while being aptly symbolised by a &lt;a href=&quot;https://velvetshark.com/ai-company-logos-that-look-like-buttholes&quot;&gt;chocolate starfish&lt;/a&gt; — will not be found anywhere on here. I already had “100% human-made” for a while but decided a little icon would be nice to have. (I now also have &lt;a href=&quot;https://chriskirknielsen.com/ai-policy/&quot;&gt;a dedicated A.I. policy page&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;I have recently seen articles that tackle fascinating topics, only to notice a caption along the lines of “image of Mars generated with ChatGPT” (when &lt;a href=&quot;https://images.nasa.gov/&quot;&gt;NASA has a whole website of real, gorgeous photos&lt;/a&gt; that can be used), or an illustration that is 100% A.I.-generated which was 100% not necessary to illustrate the point the article is trying to make. It cheapens the end-result, and I am very tired of it. Is the technology impressive in its own right? Sure! Is it ethical and/or useful at the current scale it is being shoved down our throats? No! Keep the web creative, expressive, diverse. Keep it human and interesting — use fucking em-dashes.&lt;/p&gt;
&lt;div class=&quot;image-gallery&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; width=&quot;320&quot; height=&quot;320&quot;&gt;&lt;title&gt;no A.I.&lt;/title&gt;&lt;use xlink:href=&quot;#svg__no-ai&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;p&gt;It goes without saying I made it myself (ironically enough, in a programme whose initials are… A.I.). And if you want to use it? Feel free to do so! I made the 88×31 “No-A.I.” button in the footer into a link so you can download it with a simple click, or you can use &lt;a href=&quot;https://chriskirknielsen.com/assets/img/no-ai.svg&quot;&gt;this link to the symbol’s SVG file&lt;/a&gt; as well.&lt;/p&gt;
&lt;h2 id=&quot;other-icons-and-badges&quot; tabindex=&quot;-1&quot;&gt;
&lt;a class=&quot;heading-anchor&quot; href=&quot;https://chriskirknielsen.com/blog/no-ai-icon-for-humans/#other-icons-and-badges&quot;&gt;Other icons and badges&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You can find other icons and badges around the internet, here are a few:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ko-fi.com/s/4662b19f61&quot;&gt;Human made content&lt;/a&gt;, badge pack by &lt;a href=&quot;https://www.andycarolan.com/&quot;&gt;Andy Carolan&lt;/a&gt; (free/pay what you want)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://linguacelta.com/aint/&quot;&gt;AIn’t&lt;/a&gt; icon&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hinokodo.itch.io/human-made&quot;&gt;Human-Made&lt;/a&gt; icons&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://thehumanmade.org/&quot;&gt;The Human Made Project&lt;/a&gt; icon&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://godforsaken.website/@Shrigglepuss/116251985836578143&quot;&gt;No AI&lt;/a&gt; icon by Shrig&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://notbyai.fyi/&quot;&gt;Not By AI&lt;/a&gt; badge pack (paid verification, or one-time fee to access)&lt;/li&gt;
&lt;/ul&gt;

                    
                
            </content>
        </entry>
        
        
        <entry>
            <title>Yearnotes 2025</title>
            <link href="https://chriskirknielsen.com/blog/yearnotes-2025/"/>
            <updated>2025-12-26T23:55:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/yearnotes-2025/</id>
            <content type="html">
                
                    



&lt;p&gt;Another year has gone by. I guess Smash Mouth was right: the years start comin’ and they don’t stop comin’. We can make quick eye contact and nod in understanding instead of discussing how messy the world’s goings-on have been, or how life has been tiring, so I’ll skip over all that stuff and keep it light-hearted.&lt;/p&gt;

&lt;p&gt;For the most part, this is a media diet rather than a weeknote-formatted retrospective, as it’s more interesting to read given the wide timeframe — I am also skipping re-watches/re-plays: this is long enough as it is. A couple of things: you can click very discrete parts of some of the section illustrations (lil’ easter eggs for ya…), and a 👍 emoji indicates a highly recommended piece of media. Alright, here we go.&lt;/p&gt;

&lt;div class=&quot;legendary | hide-when-nojs&quot;&gt;
	&lt;div class=&quot;legendary-label | h3&quot;&gt;Content customisation&lt;/div&gt;
	&lt;div class=&quot;legendary-content | flow | fontSize-smaller&quot; data-flow-space=&quot;s&quot;&gt;
		&lt;p&gt;
			I tried to keep it short, but the media diet part (which is most of this post with… 61 items!) is still a hefty read. You can toggle the commentary off with the button below.
		&lt;/p&gt;

		 
 






&lt;button type=&quot;button&quot; class=&quot;button  linecap-auto&quot; data-persist-pressed-style=&quot;&quot; data-toggle-pressed=&quot;&quot; aria-pressed=&quot;false&quot; id=&quot;nodesc&quot;&gt;
	
		&lt;div class=&quot;cellstack&quot;&gt;
			&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;button-icon button-content button-content--idle&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;use xlink:href=&quot;#svg__visible&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt;
			&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;button-icon button-content button-content--pressed&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;use xlink:href=&quot;#svg__hidden&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt;
		&lt;/div&gt;
	
	
		&lt;span class=&quot;visually-hidden&quot;&gt;Toggle media diet commentary&lt;/span&gt;
		
			
			
			&lt;span aria-hidden=&quot;true&quot;&gt;View media diet commentary:
				&lt;span class=&quot;cellstack cellstack--inline | fontFamily-monospace&quot;&gt;
					&lt;span class=&quot;button-content--idle&quot;&gt;ON&lt;/span&gt;
					&lt;span class=&quot;button-content--pressed&quot;&gt;OFF&lt;/span&gt;
				&lt;/span&gt;&lt;/span&gt;
		
	

	
&lt;/button&gt;
	&lt;/div&gt;
&lt;/div&gt;

&lt;section class=&quot;fullsection&quot; aria-labelledby=&quot;fullsection-books&quot; style=&quot;--FS-bg: #757a33; --FS-fill: #ffffeb;&quot; id=&quot;books&quot;&gt;
	&lt;div class=&quot;fullsection-head&quot;&gt;
		&lt;div class=&quot;fullsection-count&quot; aria-hidden=&quot;true&quot;&gt;4 entries&lt;/div&gt;
		&lt;h2 class=&quot;fullsection-title-wrapper&quot;&gt;
			&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 1280 380&quot; width=&quot;1280&quot; height=&quot;380&quot; class=&quot;fullsection-title&quot;&gt;
				&lt;title id=&quot;fullsection-books&quot;&gt;Books&lt;/title&gt;
				&lt;path fill=&quot;var(--FS-fill)&quot; d=&quot;M183.4624,280.4322l.291-5.251-.291-17.2109.291-16.9199v-17.2109l-.583-16.9199.292-17.2109.291-16.3369v-17.2109l-.583-16.9199.583-17.5029v-16.3359l-.291-5.835c-.292-7.876,4.084-11.668,11.6689-11.668h4.959l17.2109-.292h17.5029l16.9199.292,17.5029-.292h16.9199l34.7139.583,7.293.584c5.543.583,9.335,1.75,13.7109,4.667s7.001,6.126,8.46,10.7939c1.458,4.959,2.042,8.46,2.042,14.002l-.292,8.752-.292,14.5859.292,8.168c0,5.543-.583,9.335-2.042,14.2939l-.292.584c-1.458,5.251-3.208,8.751-7.293,12.5439-3.5,2.917-4.084,6.126-1.75,7.876,4.376,3.209,7.293,6.126,9.043,11.0859,1.751,4.959,2.334,8.459,2.334,14.002l.292,8.752v16.3359l-.292,16.3359.292,9.627c0,5.542-.584,9.335-2.042,14.002-1.75,4.668-4.084,7.877-8.168,10.502-4.376,2.917-8.46,4.376-13.7109,5.251l-7.001.875h-34.4229l-17.5029.584-17.5029-.584-33.8398.584h-23.0449c-7.585,0-11.9609-4.084-11.6689-11.9609ZM291.3979,251.5524c3.209-1.167,4.959-2.917,5.834-7.001s1.167-7.001.875-11.377l-.292-5.835.292-5.251c.292-4.375,0-7.292-.583-11.377-.875-4.084-2.626-6.417-5.835-7.584-3.792-1.459-6.709-1.751-10.793-1.751h-23.0459c-6.126,0-9.043,3.209-9.043,9.335v25.3799l-.292,8.168c-.292,6.126,3.209,9.627,9.335,9.627h9.918l12.8359-.292c4.084,0,7.293-.875,10.7939-2.042ZM291.1059,165.2037c2.917-.875,5.251-2.625,6.418-5.251,1.167-2.625,2.042-5.542,2.042-9.918v-8.168c0-4.668-.292-7.293-1.751-10.2109-1.458-2.917-3.5-4.375-6.709-5.25-3.209-.584-5.834-.876-9.918-.876h-21.8789c-6.126,0-9.627,2.918-9.335,9.335l.291,10.7939-.291,11.085c0,5.835,3.5,9.627,9.335,9.627h21.5869c4.084,0,7.001-.292,10.21-1.167ZM399.3315,291.5182c-5.543-.292-9.335-1.751-14.0029-4.668-4.376-2.625-7.001-6.126-8.168-11.085v-.292c-1.167-4.959-1.75-8.752-1.75-14.002v-27.7139l-.292-17.5029.583-17.5029v-17.2109l-.583-18.0869v-17.2119l.583-17.5029-.291-10.793c0-5.251.291-9.0439,1.458-14.0029s3.793-8.168,8.168-10.793c4.376-2.626,8.46-3.793,13.7109-4.376l7.877-.875,16.9189.291h17.5029l17.5039-.583h16.6279l17.2109.583h17.5029l7.001.584c5.543.292,9.335,1.75,14.0029,4.667,4.376,2.917,7.001,5.835,8.46,11.0859,1.167,4.959,1.75,8.751,1.75,14.2939v9.918l-.292,17.7949.292,16.9199v53.0928l-.292,17.2109v28.0049c0,5.251-.583,9.0439-1.75,14.0029-1.167,5.542-3.501,8.751-7.876,11.377-4.668,2.917-8.752,4.084-14.0029,4.667l-7.293.584h-17.7949l-16.9189-.584-17.2119.584-16.9199-.292h-17.2109l-16.9199-.292-7.584-.291ZM442.7973,247.7604c.875,2.625,2.625,4.084,5.542,4.667,3.209.584,5.835.875,9.9189.875l8.46-.291,7.876.291c4.084,0,7.001-.583,9.627-1.166,2.625-.584,4.667-2.334,5.834-4.668,1.167-2.625,1.751-5.251,1.751-9.627v-11.668l-.584-17.7949.292-18.3789.292-17.5029-.292-18.3779-.292-12.252c0-4.084-.292-7.002-1.167-9.335-.875-2.334-2.625-3.793-5.251-4.376l-4.084-.584h-14.5859l-7.876.292c-4.084,0-6.71.292-9.627.875-2.625.584-4.667,2.042-5.543,4.084-.875,2.334-1.75,4.668-1.75,9.0439l-.292,12.835.584,17.7949v17.5029l-.584,18.3789v17.7949l.292,12.252c0,4.084.584,6.418,1.459,9.335ZM588.3647,291.5182c-5.543-.292-9.335-1.751-14.0029-4.668-4.376-2.625-7.001-6.126-8.168-11.085v-.292c-1.167-4.959-1.75-8.752-1.75-14.002v-27.7139l-.292-17.5029.583-17.5029v-17.2109l-.583-18.0869v-17.2119l.583-17.5029-.291-10.793c0-5.251.291-9.0439,1.458-14.0029s3.793-8.168,8.168-10.793c4.376-2.626,8.46-3.793,13.7109-4.376l7.877-.875,16.9189.291h17.5029l17.5039-.583h16.6279l17.2109.583h17.5029l7.001.584c5.543.292,9.335,1.75,14.0029,4.667,4.376,2.917,7.001,5.835,8.46,11.0859,1.167,4.959,1.75,8.751,1.75,14.2939v9.918l-.292,17.7949.292,16.9199v53.0928l-.292,17.2109v28.0049c0,5.251-.583,9.0439-1.75,14.0029-1.167,5.542-3.501,8.751-7.876,11.377-4.668,2.917-8.752,4.084-14.0029,4.667l-7.293.584h-17.7949l-16.9189-.584-17.2119.584-16.9199-.292h-17.2109l-16.9199-.292-7.584-.291ZM631.8305,247.7604c.875,2.625,2.625,4.084,5.542,4.667,3.209.584,5.835.875,9.9189.875l8.46-.291,7.876.291c4.084,0,7.001-.583,9.627-1.166,2.625-.584,4.667-2.334,5.834-4.668,1.167-2.625,1.751-5.251,1.751-9.627v-11.668l-.584-17.7949.292-18.3789.292-17.5029-.292-18.3779-.292-12.252c0-4.084-.292-7.002-1.167-9.335-.875-2.334-2.625-3.793-5.251-4.376l-4.084-.584h-14.5859l-7.876.292c-4.084,0-6.71.292-9.627.875-2.625.584-4.667,2.042-5.543,4.084-.875,2.334-1.75,4.668-1.75,9.0439l-.292,12.835.584,17.7949v17.5029l-.584,18.3789v17.7949l.292,12.252c0,4.084.584,6.418,1.459,9.335ZM753.185,280.4322v-5.251l.292-17.2109-.292-16.9199.292-16.6279.291-17.5029v-16.6279l-.291-16.9199.291-17.2109v-50.7588l-.291-5.543c-.292-7.876,4.084-11.6689,11.668-11.6689h42.5908c7.585,0,11.6689,4.084,11.6689,11.6689v7.585l.292,18.9619-.292,18.9609.292,18.3789-.292,10.21c0,6.126.292,9.335.584,9.335h.583c1.75-.584,3.792-1.75,7.293-4.084l4.668-3.501c3.5-2.625,5.834-4.376,8.459-7.585l4.376-5.251c2.626-3.209,4.376-5.834,6.418-9.335l3.501-6.709c1.75-3.501,2.917-6.71,4.084-10.502l1.75-6.126c1.167-3.792,2.042-6.71,2.334-11.085l.875-12.8359-.292-6.418c-.292-7.876,3.793-11.96,11.377-11.96l25.6709.291h7.293c7.293,0,11.9609,4.376,11.9609,11.6689v4.084l-1.459,17.5029-2.917,18.3789-5.251,16.9189-4.959,10.502c-2.042,4.668-4.084,8.1689-7.001,12.2529l-6.126,9.043-6.418,7.585c-3.209,4.084-3.793,8.168-1.751,12.835l3.793,8.168,7.001,15.1699,7.001,14.5859,7.585,15.752,7.585,14.2949.583,1.458c3.501,8.168.292,13.7109-8.46,14.0029h-4.959l-20.4199-.292-10.21.292c-6.71,0-11.0859-2.626-13.7109-9.0439l-10.21-25.3789-7.002-16.6279-3.209-8.168c-2.333-5.543-7.001-7.293-12.543-4.668l-1.459.875c-4.084,2.626-6.126,5.835-6.418,11.0859l-.292,11.96.584,19.8369v8.46c0,7.293-4.668,11.6689-11.9609,11.6689h-46.3828c-5.251,0-8.168-4.376-8.168-11.9609ZM960.8891,291.2262h-.583c-5.251-.875-9.335-2.334-13.7109-5.543l-.292-.292c-4.667-3.5-7.293-7.001-8.46-11.96v-.292c-1.167-4.959-1.75-9.043-1.75-14.2939l.292-12.5439v-7.876c0-7.585,4.376-11.9609,11.668-11.9609l21.8789-.291h4.96c7.584,0,11.668,3.5,11.377,9.335v2.333c0,4.376.583,6.71,1.75,9.335.875,2.334,2.917,3.501,5.543,4.084,2.625.584,5.542.876,9.626.876h16.0449c4.084,0,7.001-.292,10.21-1.167,2.917-.584,4.668-2.334,5.543-5.835.875-3.209,1.167-6.126,1.167-10.502v-2.333c-.292-4.084-.876-7.293-2.042-10.502-1.167-2.917-3.209-4.959-6.71-6.126-3.792-1.459-6.418-2.042-10.502-2.626l-10.21-1.75-16.9199-2.626-15.4609-2.917-9.335-2.042c-4.959-1.167-8.168-2.042-13.127-4.084l-.875-.292c-5.543-2.042-8.752-4.959-11.0859-10.21v-.291c-2.333-4.96-3.5-8.752-3.5-14.2949l-.292-9.627v-35.8809l.292-10.502c0-5.251.291-8.751,1.458-14.002,1.167-4.96,3.793-8.46,8.168-11.0859,4.668-2.917,8.46-4.084,13.7109-4.667l1.751-.292c4.959-.583,9.043-.875,14.002-.875l9.043.292h15.7529l16.0449-.292,16.0439.583,16.3359-.291,16.0449.291,7.293.584c5.251.583,9.335,1.75,14.002,4.667,4.376,2.917,7.293,5.835,8.752,10.7939s1.75,8.751,1.75,14.002l-.291,14.5859.291,8.752c.292,7.585-3.792,11.6689-11.377,11.96l-5.251.292h-21.5869c-7.584,0-11.6689-2.917-11.377-8.46l-.292-3.5c-.291-4.084-.583-6.71-1.75-9.335-.875-2.334-2.917-3.501-5.543-4.084l-4.084-.584h-14.002l-7.876-.292c-4.085,0-6.71.292-9.627.876-2.626.583-4.376,1.75-5.543,4.375-1.167,2.626-1.75,5.251-1.75,9.627v5.543c0,4.375.583,7.001,1.75,10.21,1.167,3.5,4.084,5.251,8.752,6.418l2.625.875,16.6279,3.5,15.7529,2.918,17.2109,2.334,15.1699,4.084,7.293,2.625c3.5,1.167,6.126,2.917,8.168,5.251,2.917,3.209,3.209,4.668,3.5,4.959,2.334,4.96,3.209,9.0439,3.209,14.5859l-.291,9.9189.291,17.7949.292,17.5029-.292,10.502c-.291,5.25-.875,9.043-2.042,14.002-1.458,5.834-3.792,9.043-7.876,11.377-4.376,2.626-8.168,3.792-13.4189,4.376l-8.752,1.167h-32.0889l-16.0439-.584-16.3369.292-15.752-.292-9.335.292c-4.96.292-9.0439,0-14.0029-.875Z&quot;&gt;&lt;/path&gt;
			&lt;/svg&gt;
		&lt;/h2&gt;

		&lt;svg id=&quot;illustration-books&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; viewBox=&quot;0 0 740 680&quot; width=&quot;740&quot; height=&quot;680&quot; class=&quot;fullsection-illustration&quot; role=&quot;img&quot; aria-label=&quot;A hot cup of coffee on top of a stack of books.&quot;&gt;
			&lt;defs&gt;
				&lt;filter id=&quot;turb&quot;&gt;
					&lt;feTurbulence type=&quot;turbulence&quot; baseFrequency=&quot;0.05 0.1&quot; numOctaves=&quot;3&quot; seed=&quot;1&quot; stitchTiles=&quot;stitch&quot; result=&quot;feTurb&quot;&gt;&lt;/feTurbulence&gt;
					&lt;feDisplacementMap in=&quot;SourceGraphic&quot; id=&quot;feTurb2&quot; in2=&quot;feTurb&quot; scale=&quot;15&quot; xChannelSelector=&quot;A&quot; yChannelSelector=&quot;A&quot;&gt;&lt;/feDisplacementMap&gt;
				&lt;/filter&gt;
			&lt;/defs&gt;
			&lt;rect width=&quot;698.61&quot; height=&quot;86.49&quot; x=&quot;21.19&quot; y=&quot;553&quot; stroke=&quot;var(--FS-palette-1)&quot; stroke-width=&quot;2&quot; fill=&quot;var(--FS-palette-2)&quot; rx=&quot;5.82&quot; ry=&quot;5.82&quot;&gt;&lt;/rect&gt;
			&lt;path fill=&quot;var(--FS-palette-3)&quot; stroke=&quot;var(--FS-palette-1)&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;2&quot; d=&quot;M581.98 510.23H159.02L26.32 553h688.16z&quot;&gt;&lt;/path&gt;
			&lt;g stroke=&quot;var(--FS-palette-1)&quot; stroke-width=&quot;4&quot; fill=&quot;none&quot; filter=&quot;url(#turb)&quot;&gt;
				&lt;path class=&quot;fullsection-illustration-steam-anim&quot; style=&quot;--i: 0&quot; d=&quot;M350 159.2s-27.35-16.4-8.81-54.9 7.77-49.9 0-67&quot; pathLength=&quot;1&quot;&gt;&lt;/path&gt;
				&lt;path class=&quot;fullsection-illustration-steam-anim&quot; style=&quot;--i: 1&quot; d=&quot;M381.17 161.42s-19-20.91-12.83-51.33 28.52-36.11 24.72-92.2&quot; pathLength=&quot;1&quot;&gt;&lt;/path&gt;
				&lt;path class=&quot;fullsection-illustration-steam-anim&quot; style=&quot;--i: 2&quot; d=&quot;M420.56 159.04s11.39-15.68 11.39-36.35-18.54-29.23-17.11-47.76&quot; pathLength=&quot;1&quot;&gt;&lt;/path&gt;
			&lt;/g&gt;
			&lt;g fill=&quot;var(--FS-palette-1)&quot; stroke=&quot;var(--FS-palette-2)&quot; stroke-width=&quot;2&quot;&gt;
				&lt;path d=&quot;M473.29 190.42c0-14.74-40.4-30.9-93.49-30.9s-93.48 16.16-93.48 30.9-1.42 179.18 15.2 195.81h156.56c16.63-16.63 15.2-181.08 15.2-195.81Z&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M471.27 216.65c.02 6.55 1.01 13.3 1.96 11.41 2.6-5.2 16.02-13.43 19.53-2.75 5.72 17.44 1.36 86.94-3.42 96.43-6.5 12.89-17.13 13.67-20.05 11.08-3.67-3.27-7.16 20.89-2.23 21.09 11.72.48 45.03-8.7 48.66-76.15 4.6-85.65-36.67-75.46-42.4-71.76-1.52.98-2.06 5.76-2.05 10.65&quot;&gt;&lt;/path&gt;
			&lt;/g&gt;
			&lt;path fill=&quot;var(--FS-palette-2)&quot; stroke=&quot;var(--FS-palette-1)&quot; stroke-width=&quot;2&quot; d=&quot;M661.95 386.23H89.73a5.7 5.7 0 0 0-5.56 4.66 254 254 0 0 0 0 92.76 5.7 5.7 0 0 0 5.56 4.66h572.22a5.7 5.7 0 0 0 5.56-4.66q8.54-46.38 0-92.76a5.7 5.7 0 0 0-5.56-4.66Z&quot;&gt;&lt;/path&gt;
			&lt;rect width=&quot;563.82&quot; height=&quot;52.19&quot; x=&quot;93.93&quot; y=&quot;488.31&quot; stroke=&quot;var(--FS-palette-1)&quot; stroke-width=&quot;2&quot; fill=&quot;var(--FS-palette-3)&quot; rx=&quot;4&quot; ry=&quot;4&quot;&gt;&lt;/rect&gt;
			&lt;g fill=&quot;var(--FS-palette-2)&quot;&gt;
				&lt;rect x=&quot;129.0439&quot; y=&quot;501.7842&quot; width=&quot;218.6211&quot; height=&quot;24.2379&quot;&gt;&lt;/rect&gt;
				&lt;rect x=&quot;527.6171&quot; y=&quot;499.5664&quot; width=&quot;104.8142&quot; height=&quot;11.4924&quot;&gt;&lt;/rect&gt;
				&lt;rect x=&quot;540.0105&quot; y=&quot;516.6572&quot; width=&quot;80.0276&quot; height=&quot;11.4924&quot;&gt;&lt;/rect&gt;
			&lt;/g&gt;
			&lt;g fill=&quot;var(--FS-palette-3)&quot;&gt;
				&lt;rect x=&quot;51.3612&quot; y=&quot;585.3613&quot; width=&quot;167.5381&quot; height=&quot;20.7734&quot;&gt;&lt;/rect&gt;
				&lt;rect x=&quot;304.3085&quot; y=&quot;575.6402&quot; width=&quot;369.3965&quot; height=&quot;40.2158&quot;&gt;&lt;/rect&gt;
				&lt;rect x=&quot;120.7082&quot; y=&quot;411.4761&quot; width=&quot;275.1889&quot; height=&quot;50.0677&quot;&gt;&lt;/rect&gt;
				&lt;rect x=&quot;574.8164&quot; y=&quot;411.4761&quot; width=&quot;11.1378&quot; height=&quot;50.5889&quot;&gt;&lt;/rect&gt;
				&lt;rect x=&quot;593.1576&quot; y=&quot;401.436&quot; width=&quot;11.1378&quot; height=&quot;70.6689&quot;&gt;&lt;/rect&gt;
				&lt;rect x=&quot;611.4989&quot; y=&quot;404.5151&quot; width=&quot;11.1378&quot; height=&quot;64.5107&quot;&gt;&lt;/rect&gt;
			&lt;/g&gt;
		&lt;/svg&gt;
	&lt;/div&gt;
	&lt;div class=&quot;fullsection-content | container | flow&quot;&gt;
		&lt;p&gt;
			I started off so, so well. Three months, three books! Then I lost steam and didn’t read a book from April through October… (unless you count half of a friend’s book draft) Given I read nearly twice as many last year, this is bad even by my standards (admittedly, though, I am a slow reader — if you read fast, you have my admiration). Hoping to read more in 2026, so if you have recommendations, please send them my way!
		&lt;/p&gt;
		
	

 
&lt;div class=&quot;floatster&quot; style=&quot;--FL-img-ratio: calc(530 / 800); --FL-seed: 156;&quot;&gt;
	&lt;ul class=&quot;floatster-list | flow&quot; data-flow-space=&quot;xl&quot;&gt;
	
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 1&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/upload/c_pad,w_250/v1734812322/20170404_iuinop.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					&lt;span class=&quot;floatster-praise&quot; aria-hidden=&quot;true&quot; title=&quot;Highly Recommended&quot;&gt;👍&lt;/span&gt;
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
				&lt;hgroup&gt;
					&lt;p class=&quot;eyebrow | fontWeight-bold fontSize-small color-heading&quot;&gt;Emily St. John Mandel&lt;/p&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Station Eleven
						&lt;span class=&quot;visually-hidden&quot;&gt;(Highly Recommended)&lt;/span&gt;
					&lt;/h3&gt;
				
				&lt;/hgroup&gt;
				
				
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					&lt;em&gt;(started reading this one in late 2024)&lt;/em&gt; I liked this one a lot, it had reasonably believable characters and situations, and it was a good post-apocalypse story (or rather, woven stories). Seems this books sheds light on a common myth in media: gasoline goes bad after a couple years, so post-apocalyptic movies/games where they go for a drive? Lies! Also this book is eerie to read given it has a disease which sounds all too similar to COVID-19, yet was written years before…
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 2&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://images-na.ssl-images-amazon.com/images/S/compressed.photo.goodreads.com/books/1505590203i/36223860.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
				&lt;hgroup&gt;
					&lt;p class=&quot;eyebrow | fontWeight-bold fontSize-small color-heading&quot;&gt;Martha Wells&lt;/p&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Artificial Condition (Murderbot Diaries #2)
						
					&lt;/h3&gt;
				
				&lt;/hgroup&gt;
				
				
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					I read the first one in 2019 or something, and I noticed a few “Year in review 2024” posts had this series mentioned. I knew I had the &lt;code&gt;.mobi&lt;/code&gt; file for the second book somewhere (it was given out for free when the third book came out I believe?), so back in I went. The story is pretty light and short but I still enjoyed it.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 3&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://images-na.ssl-images-amazon.com/images/S/compressed.photo.goodreads.com/books/1668181003i/62703226.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					&lt;span class=&quot;floatster-praise&quot; aria-hidden=&quot;true&quot; title=&quot;Highly Recommended&quot;&gt;👍&lt;/span&gt;
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
				&lt;hgroup&gt;
					&lt;p class=&quot;eyebrow | fontWeight-bold fontSize-small color-heading&quot;&gt;Riley Sager&lt;/p&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						The Only One Left
						&lt;span class=&quot;visually-hidden&quot;&gt;(Highly Recommended)&lt;/span&gt;
					&lt;/h3&gt;
				
				&lt;/hgroup&gt;
				
				
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					It’s a bit of a murder mystery, and it kept me guessing a lot. There’s a bunch of characters and plot points to connect by the time you reach the end, so overall quite a good read. I was on a train for 10 hours, so I read 3/4 of the book, and finished it the same day at home — first (and last?) time I read a full book in twenty-four hours!
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 4&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://images-na.ssl-images-amazon.com/images/S/compressed.photo.goodreads.com/books/1760090510i/242601852.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
				&lt;hgroup&gt;
					&lt;p class=&quot;eyebrow | fontWeight-bold fontSize-small color-heading&quot;&gt;Robert A. Heinlein&lt;/p&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Stranger in a Strange Land
						
					&lt;/h3&gt;
				
				&lt;/hgroup&gt;
				
				
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					I got intrigued when hearing of this book via &lt;a href=&quot;https://cloudfour.com/thinks/that-time-some-rando-turned-me-into-a-meme-coin/&quot;&gt;Jason Grigsby’s article&lt;/a&gt;. The cover sealed the deal for me because I love the dark teal and crimson combo. It’s a retro sci-fi book from the ’60s (the fiction part is way more prevalent than the science one), so beware it is a product of its time (while not a main thread, it does have some sexist undertones). I can say one thing: it went in a direction I certainly did not expect!
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;

	&lt;/div&gt;
&lt;/section&gt;

&lt;section class=&quot;fullsection&quot; aria-labelledby=&quot;fullsection-shows&quot; style=&quot;--FS-bg: #58788d; --FS-fill: #effff4;&quot; id=&quot;shows&quot;&gt;
	&lt;div class=&quot;fullsection-head&quot;&gt;
		&lt;div class=&quot;fullsection-count&quot; aria-hidden=&quot;true&quot;&gt;10 entries&lt;/div&gt;
		&lt;h2 class=&quot;fullsection-title-wrapper&quot;&gt;
			&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 1280 380&quot; width=&quot;1280&quot; height=&quot;380&quot; class=&quot;fullsection-title&quot;&gt;
				&lt;title id=&quot;fullsection-shows&quot;&gt;Shows&lt;/title&gt;
				&lt;path fill=&quot;var(--FS-fill)&quot; d=&quot;M151.4417,158.2452v-12.5318c0-36.4546,19.9359-56.3905,57.2431-56.3905h93.695c3.7021,0,5.6955,1.9934,5.6955,5.6955v29.9048c0,3.7021-1.9934,5.6955-5.6955,5.6955h-66.3558c-33.3203,0-39.0158,2.8486-39.0158,19.9368,0,14.8091,8.5432,17.6577,39.0158,17.6577h17.6569c39.5853,0,57.2422,19.3664,57.2422,49.555v15.0948c0,36.4546-19.9351,56.3905-57.2422,56.3905h-93.695c-3.7021,0-5.6955-1.9934-5.6955-5.6964v-29.9039c0-3.7021,1.9934-5.6964,5.6955-5.6964h66.3558c30.4717,0,39.0158-2.8477,39.0158-19.9359,0-16.8034-5.6964-19.6512-39.0158-19.6512h-17.6569c-37.3071,0-57.2431-19.3664-57.2431-50.1246ZM330.6037,89.8924h31.3269c3.7021,0,5.6955,1.9934,5.6955,5.6964v66.6432c0,2.563,1.4239,3.9868,3.9868,3.9868h77.7468c2.5638,0,3.9877-1.4239,3.9877-3.9868v-66.6432c0-3.7029,1.9934-5.6964,5.6955-5.6964h31.3269c3.7021,0,5.6955,1.9934,5.6955,5.6964v187.9683c0,3.7029-1.9934,5.6964-5.6955,5.6964h-31.3269c-3.7021,0-5.6955-1.9934-5.6955-5.6964v-74.0482c0-2.563-1.4239-3.9868-3.9877-3.9868h-77.7468c-2.563,0-3.9868,1.4239-3.9868,3.9868v74.0482c0,3.7029-1.9934,5.6964-5.6955,5.6964h-31.3269c-3.7021,0-5.6955-1.9934-5.6955-5.6964V95.5888c0-3.7029,1.9934-5.6964,5.6955-5.6964ZM614.5114,290.9621h-32.466c-50.6915,0-70.6275-19.9359-70.6275-74.6178v-53.8275c0-54.6818,19.9359-74.6178,70.6275-74.6178h32.466c51.2619,0,71.197,19.9359,71.197,68.9214v65.2202c0,48.9855-19.9351,68.9214-71.197,68.9214ZM598.8479,251.375c46.136,0,44.1426-11.9614,44.1426-47.5616v-28.7657c0-35.6002,1.9934-47.5616-44.1426-47.5616-43.5722,0-44.7113,11.9614-44.7113,47.5616v28.7657c0,35.6002,1.1391,47.5616,44.7113,47.5616ZM828.362,112.9609c40.7244,0,52.6858,19.9368,52.6858,57.2457v35.0307c0,32.7516,1.7086,41.2957,14.2387,41.2957,14.8091,0,14.8091-5.6955,14.8091-41.2957v-109.3637c0-3.7029,1.9934-5.6964,5.6955-5.6964h33.6051c3.7021,0,5.6964,1.9934,5.4116,5.6964-.2848,23.638-.2848,99.9653-.2848,121.3251v17.6577c0,39.5871-19.9359,57.2448-47.5599,57.2448h-21.3589c-31.8964,0-44.1426-19.9359-44.1426-57.2448v-49.2703c-.2848-20.5063-2.563-27.0561-13.0996-27.0561-15.9482,0-14.2396,12.2462-14.2396,58.6687v17.6577c0,39.5871-19.9351,57.2448-47.5599,57.2448h-16.233c-31.8956,0-49.5524-19.9359-49.5524-57.2448V95.8736c0-3.7029,1.9934-5.6964,5.6955-5.6964h33.6051c3.7021,0,5.6955,1.9934,5.6955,5.6964v109.3637c0,32.7516,2.2782,41.2957,14.2396,41.2957,14.8091,0,14.8091-5.6955,14.8091-41.2957v-35.0307c0-37.3089,12.5301-57.2457,53.5401-57.2457ZM969.0769,158.2452v-12.5318c0-36.4546,19.9359-56.3905,57.2431-56.3905h93.695c3.7021,0,5.6955,1.9934,5.6955,5.6955v29.9048c0,3.7021-1.9934,5.6955-5.6955,5.6955h-66.3558c-33.3203,0-39.0158,2.8486-39.0158,19.9368,0,14.8091,8.5432,17.6577,39.0158,17.6577h17.6569c39.5853,0,57.2422,19.3664,57.2422,49.555v15.0948c0,36.4546-19.9351,56.3905-57.2422,56.3905h-93.695c-3.7021,0-5.6955-1.9934-5.6955-5.6964v-29.9039c0-3.7021,1.9934-5.6964,5.6955-5.6964h66.3558c30.4717,0,39.0158-2.8477,39.0158-19.9359,0-16.8034-5.6964-19.6512-39.0158-19.6512h-17.6569c-37.3071,0-57.2431-19.3664-57.2431-50.1246Z&quot;&gt;&lt;/path&gt;
			&lt;/svg&gt;
		&lt;/h2&gt;

		&lt;svg data-interacted=&quot;tv-power&quot; data-power=&quot;on&quot; id=&quot;illustration-television&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; viewBox=&quot;0 0 740 680&quot; width=&quot;740&quot; height=&quot;680&quot; class=&quot;fullsection-illustration&quot; role=&quot;img&quot; aria-label=&quot;A small CRT television&quot;&gt;
			&lt;defs&gt;
				&lt;pattern id=&quot;static&quot; patternUnits=&quot;userSpaceOnUse&quot; width=&quot;256&quot; height=&quot;256&quot;&gt;
					&lt;image href=&quot;./noise.png&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;256&quot; height=&quot;256&quot;&gt;&lt;/image&gt;
				&lt;/pattern&gt;
				&lt;linearGradient id=&quot;static-bg&quot; gradientTransform=&quot;rotate(-30)&quot;&gt;
					&lt;stop offset=&quot;0&quot; stop-color=&quot;var(--FS-palette-2)&quot;&gt;&lt;/stop&gt;
					&lt;stop offset=&quot;1&quot; stop-color=&quot;var(--FS-palette-3)&quot;&gt;&lt;/stop&gt;
				&lt;/linearGradient&gt;

				&lt;clipPath id=&quot;tv-power-icon-path&quot;&gt;
					&lt;polygon clip-rule=&quot;evenodd&quot; points=&quot;227.9409 575.7609 219.9502 575.7609 219.9502 588.7627 214.6632 588.7627 214.6632 575.7609 206.7528 575.7609 206.7528 596.7082 227.9409 596.7082 227.9409 575.7609&quot;&gt;&lt;/polygon&gt;
				&lt;/clipPath&gt;

				&lt;path id=&quot;tv-screen&quot; d=&quot;M593.65 458.64a7.5 7.5 0 0 1-6.92 6.76c-17.3 1.26-74.43 4.31-219.46 4.31s-202.15-3.05-219.46-4.3a7.5 7.5 0 0 1-6.92-6.77c-1.62-17.07-5.75-69.7-5.75-163.97s4.13-146.89 5.75-163.96a7.5 7.5 0 0 1 6.92-6.77c17.3-1.25 74.44-4.3 219.46-4.3s202.16 3.05 219.46 4.3a7.5 7.5 0 0 1 6.92 6.77c1.63 17.07 5.76 69.7 5.76 163.96s-4.13 146.9-5.76 163.97&quot;&gt;&lt;/path&gt;
			&lt;/defs&gt;

			&lt;g stroke=&quot;var(--FS-palette-1)&quot; stroke-width=&quot;2&quot;&gt;
				&lt;path fill=&quot;var(--FS-palette-3)&quot; d=&quot;M632.1 637.99a4396 4396 0 0 1-524.39 0l1.75-11.39h520.9z&quot;&gt;&lt;/path&gt;
				&lt;path fill=&quot;var(--FS-palette-3)&quot; d=&quot;M635.87 78.01H104.13c-5.54 0-10.03 4.5-10.03 10.03v469.29q278.1 36.29 551.8 0V88.04c0-5.54-4.5-10.03-10.03-10.03Z&quot;&gt;&lt;/path&gt;
				&lt;path fill=&quot;var(--FS-palette-3)&quot; d=&quot;M94.1 557.33v24.15c0 5.05 3.76 9.33 8.77 9.96q269.2 34.04 534.28.02c5-.64 8.75-4.92 8.75-9.96v-24.17q-273.7 36.28-551.8 0Z&quot;&gt;&lt;/path&gt;
				&lt;path fill=&quot;var(--FS-palette-2)&quot; d=&quot;M109.46 592.26h520.91v34.34H109.46z&quot;&gt;&lt;/path&gt;
			&lt;/g&gt;
			
			&lt;use xlink:href=&quot;#tv-screen&quot; fill=&quot;url(#static-bg)&quot;&gt;&lt;/use&gt;
			&lt;g data-illu-part=&quot;tv-screen&quot;&gt;
				&lt;use xlink:href=&quot;#tv-screen&quot; fill=&quot;url(#static)&quot;&gt;&lt;/use&gt;

				&lt;text fill=&quot;#0f0&quot; font-family=&quot;Courier New, monospace&quot; letter-spacing=&quot;3.14&quot; font-size=&quot;44.92&quot; font-weight=&quot;700&quot; x=&quot;567&quot; y=&quot;172&quot; text-anchor=&quot;end&quot;&gt;
					AUX
				&lt;/text&gt;
			&lt;/g&gt;
			&lt;path fill=&quot;none&quot; stroke=&quot;#fff&quot; stroke-width=&quot;2&quot; d=&quot;M593.65 458.64a7.5 7.5 0 0 1-6.92 6.76c-17.3 1.26-74.43 4.31-219.46 4.31s-202.15-3.05-219.46-4.3a7.5 7.5 0 0 1-6.92-6.77c-1.62-17.07-5.75-69.7-5.75-163.97s4.13-146.89 5.75-163.96a7.5 7.5 0 0 1 6.92-6.77c17.3-1.25 74.44-4.3 219.46-4.3s202.16 3.05 219.46 4.3a7.5 7.5 0 0 1 6.92 6.77c1.63 17.07 5.76 69.7 5.76 163.96s-4.13 146.9-5.76 163.97Z&quot;&gt;&lt;/path&gt;
			
			&lt;g stroke=&quot;var(--FS-palette-1)&quot; stroke-width=&quot;2&quot;&gt;
				&lt;g fill=&quot;var(--FS-palette-3)&quot;&gt;
					&lt;circle cx=&quot;540.03&quot; cy=&quot;614.36&quot; r=&quot;4&quot;&gt;&lt;/circle&gt;
					&lt;circle cx=&quot;563.78&quot; cy=&quot;614.36&quot; r=&quot;4&quot;&gt;&lt;/circle&gt;
				&lt;/g&gt;
				&lt;circle cx=&quot;322.08&quot; cy=&quot;592.26&quot; r=&quot;5.34&quot;&gt;&lt;/circle&gt;
				&lt;circle cx=&quot;346.04&quot; cy=&quot;592.26&quot; r=&quot;5.34&quot;&gt;&lt;/circle&gt;
				&lt;circle cx=&quot;370&quot; cy=&quot;592.26&quot; r=&quot;5.34&quot;&gt;&lt;/circle&gt;
				&lt;circle cx=&quot;393.96&quot; cy=&quot;592.26&quot; r=&quot;5.34&quot;&gt;&lt;/circle&gt;
				&lt;circle cx=&quot;417.92&quot; cy=&quot;592.26&quot; r=&quot;5.34&quot;&gt;&lt;/circle&gt;
			&lt;/g&gt;
			&lt;g fill=&quot;var(--FS-palette-1)&quot;&gt;
				&lt;path d=&quot;M326.1477,545.5718c0,.2695.0449.5088.1201.7041.2393.6436.958.7783,1.5713.7783.5391,0,1.3623-.1797,1.3623-.9736,0-.5537-.4639-.7031-2.3047-1.2275-1.6924-.4785-3.623-.9424-3.623-3.0977,0-2.4707,2.1104-3.5332,4.3115-3.5332,2.3193,0,4.3701.8828,4.46,3.4883h-3.1133c.0596-.4043-.1191-.6738-.3887-.8535-.2695-.1943-.6436-.2695-.9736-.2695-.4492,0-1.1826.1201-1.1826.7188.0605.7627,1.5869.9277,3.0986,1.3467s3.0088,1.123,3.0088,3.084c0,2.7842-2.5596,3.6826-4.9395,3.6826-1.2129,0-4.6699-.4346-4.7002-3.8477h3.293ZM337.1702,541.396h1.5869v1.8262h-1.5869v2.709c0,.7188.1641,1.0332.9131,1.0332.2246,0,.4492-.0156.6738-.0449v2.2451c-.5996,0-1.2725.0898-1.9014.0898-1.2578,0-2.6494-.1943-2.6494-2.3203v-3.7119h-1.3174v-1.8262h1.3174v-2.3652h2.9639v2.3652ZM342.2727,545.9458c.0742.8838.583,1.5127,1.5117,1.5127.4785,0,1.0029-.1797,1.2422-.5547h2.7695c-.5996,1.6768-2.2305,2.4551-3.9971,2.4551-2.4844,0-4.3555-1.4668-4.3555-4.0566,0-2.2598,1.6465-4.1016,4.1006-4.1016,3.084,0,4.416,1.7217,4.416,4.7451h-5.6875ZM345.1165,544.4048c0-.7188-.5391-1.3027-1.3027-1.3027-.8828,0-1.3916.4639-1.5264,1.3027h2.8291ZM349.2297,541.396h2.8438v1.2422h.0303c.4785-.9277,1.1074-1.4375,2.1855-1.4375.2988,0,.583.0449.8682.1201v2.6191c-.2998-.1045-.5693-.1943-1.168-.1943-1.168,0-1.7959.6885-1.7959,2.3506v3.0684h-2.9639v-7.7686ZM358.5588,545.9458c.0742.8838.583,1.5127,1.5117,1.5127.4785,0,1.0029-.1797,1.2422-.5547h2.7695c-.5996,1.6768-2.2305,2.4551-3.9971,2.4551-2.4844,0-4.3564-1.4668-4.3564-4.0566,0-2.2598,1.6475-4.1016,4.1016-4.1016,3.084,0,4.416,1.7217,4.416,4.7451h-5.6875ZM361.4026,544.4048c0-.7188-.5391-1.3027-1.3027-1.3027-.8828,0-1.3916.4639-1.5264,1.3027h2.8291ZM369.4055,549.3589c-2.9189,0-4.2354-1.9307-4.2354-4.0859s1.3164-4.0723,4.2354-4.0723,4.2363,1.916,4.2363,4.0723-1.3174,4.0859-4.2363,4.0859ZM369.4055,543.3569c-1.1221,0-1.2725,1.0928-1.2725,1.916s.1504,1.9307,1.2725,1.9307c1.123,0,1.2725-1.1074,1.2725-1.9307s-.1494-1.916-1.2725-1.916ZM379.8625,549.1646h-3.5029l-2.5439-7.7686h3.1279l1.2129,4.7295h.0303l1.2266-4.7295h3.0244l-2.5752,7.7686ZM386.2268,540.5571h-2.9639v-2.0801h2.9639v2.0801ZM383.2629,541.396h2.9639v7.7686h-2.9639v-7.7686ZM392.4192,543.6558c-.0146-.2539-.1494-.4492-.3438-.584-.1797-.1494-.4199-.2236-.6592-.2236-.4189,0-.8984.0889-.8984.5986,0,.2246.1797.3291.3447.4043.4941.209,1.6162.2686,2.6045.5986.9883.3145,1.8564.8975,1.8564,2.1699,0,2.1553-2.0654,2.7393-3.9521,2.7393-1.8262,0-3.832-.7334-3.877-2.7393h2.8291c.0156.2695.1348.4941.3594.6885.1494.1348.4346.2246.793.2246.3896,0,1.0029-.1494,1.0029-.5986s-.2539-.584-1.6309-.8232c-2.2607-.3887-3.1738-1.1074-3.1738-2.4395,0-1.9609,2.1104-2.4707,3.668-2.4707,1.6758,0,3.6973.4648,3.7715,2.4551h-2.6943ZM399.5969,540.5571h-2.9639v-2.0801h2.9639v2.0801ZM396.6331,541.396h2.9639v7.7686h-2.9639v-7.7686ZM405.1526,549.3589c-2.9189,0-4.2363-1.9307-4.2363-4.0859s1.3174-4.0723,4.2363-4.0723,4.2363,1.916,4.2363,4.0723-1.3174,4.0859-4.2363,4.0859ZM405.1526,543.3569c-1.1221,0-1.2725,1.0928-1.2725,1.916s.1504,1.9307,1.2725,1.9307c1.123,0,1.2725-1.1074,1.2725-1.9307s-.1494-1.916-1.2725-1.916ZM410.678,541.396h2.8584v.9873h.0303c.5537-.7783,1.3477-1.1826,2.5293-1.1826,1.3926,0,2.665.8535,2.665,2.6348v5.3291h-2.9639v-4.0713c0-.8984-.1045-1.5273-.9727-1.5273-.5098,0-1.1826.2549-1.1826,1.4971v4.1016h-2.9639v-7.7686Z&quot;&gt;&lt;/path&gt;
			&lt;/g&gt;
			&lt;path fill=&quot;var(--FS-palette-2)&quot; d=&quot;M286.48 567.76c-62-2.51-124.39-7.76-186.39-15.7v-53.82c62 7.94 124.4 13.19 186.4 15.7zm166.85-53.74v53.82a2094 2094 0 0 0 186.58-15.77v-53.82a2094 2094 0 0 1-186.58 15.77&quot;&gt;&lt;/path&gt;
			&lt;path fill=&quot;var(--FS-palette-2)&quot; stroke=&quot;var(--FS-palette-1)&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;2&quot; d=&quot;m240.03 604.38-45.36-3.3v-32.99l45.36 3.3z&quot;&gt;&lt;/path&gt;
			&lt;g stroke=&quot;var(--FS-palette-1)&quot; stroke-width=&quot;2.5&quot;&gt;
				&lt;line x1=&quot;217.3067&quot; y1=&quot;576.3027&quot; x2=&quot;217.3067&quot; y2=&quot;586.054&quot;&gt;&lt;/line&gt;
				&lt;g clip-path=&quot;url(#tv-power-icon-path)&quot;&gt;
					&lt;circle cx=&quot;217.3067&quot; cy=&quot;586.8967&quot; r=&quot;7.1885&quot;&gt;&lt;/circle&gt;
				&lt;/g&gt;
			&lt;/g&gt;
			&lt;foreignObject x=&quot;194.6667&quot; y=&quot;568.0886&quot; width=&quot;45.3601&quot; height=&quot;36.292&quot;&gt;
				&lt;button type=&quot;button&quot; class=&quot;button-reset | fullsection-illustration-button&quot; data-interaction=&quot;tv-power&quot;&gt;
					&lt;span class=&quot;visually-hidden&quot;&gt;Toggle TV power&lt;/span&gt;
				&lt;/button&gt;
			&lt;/foreignObject&gt;
		&lt;/svg&gt;
	&lt;/div&gt;
	&lt;div class=&quot;fullsection-content | container | flow&quot;&gt;
		&lt;p&gt;
			I watched a decent amount of TV shows, and I like to think it was varied. I did not get to &lt;strong&gt;White Lotus&lt;/strong&gt; or &lt;strong&gt;Fallout&lt;/strong&gt; — I guess I really want to watch Walton Goggins, eh? I haven’t seen the final &lt;strong&gt;Stranger Things&lt;/strong&gt; season yet, but plan to in 2026, along with a rewatch of &lt;strong&gt;Parks and Recreation&lt;/strong&gt;… it just needs to happen.
		&lt;/p&gt;
		
	

 
&lt;div class=&quot;floatster&quot; style=&quot;--FL-img-ratio: calc(530 / 800); --FL-seed: 65;&quot;&gt;
	&lt;ul class=&quot;floatster-list | flow&quot; data-flow-space=&quot;xl&quot;&gt;
	
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 1&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/shows/000/113/377/posters/thumb/51d0f62f12.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Detroiters
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 Seasons 1–2
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					I enjoyed I Think You Should Leave, and some co-workers recommended Detroiters, with ITYSL’s Tim Robinson and Sam Richardson. I watched a couple episodes last year but got through it all earlier this year. It’s walking the line between wholesome and unhinged. The characters are total goofs who have so many flaws, but you still can’t help but love ’em.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 2&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter.trakt.tv/images/shows/000/032/585/posters/thumb/807ea4f2e3.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Bob’s Burgers
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 Seasons 9–13
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					More Bob’s Burgers! The main cast is endearing despite being, sometimes, terrible, and I can’t help but feel for Bob — the rest of the family gets a little too selfish at times, and then right at the end, sometimes, they kinda redeem themselves… Still, it is a mostly a wholesome show, and a particularly Christmas episode hit me right in the feels… a dang good show.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 3&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://serializd-tmdb-images.b-cdn.net/t/p/w500/pPHpeI2X1qEd1CS1SeyrdhZ4qnT.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					&lt;span class=&quot;floatster-praise&quot; aria-hidden=&quot;true&quot; title=&quot;Highly Recommended&quot;&gt;👍&lt;/span&gt;
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Severance
						&lt;span class=&quot;visually-hidden&quot;&gt;(Highly Recommended)&lt;/span&gt;
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 Season 2
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					This second season starts up slow but boy oh boy are things getting weird on the severed floor. This answered a few questions but left me with many more. It’s so fucking weird and I love it. The cast is pretty fantastic, and I love seeing the tiny cracks in this cult-like company, but still so much left in the dark. I need to know!
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 4&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/shows/000/100/820/posters/thumb/ebe976e4aa.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					&lt;span class=&quot;floatster-praise&quot; aria-hidden=&quot;true&quot; title=&quot;Highly Recommended&quot;&gt;👍&lt;/span&gt;
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Taskmaster
						&lt;span class=&quot;visually-hidden&quot;&gt;(Highly Recommended)&lt;/span&gt;
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 Series 6, 17, 18, 19, 20
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					More shenanigans with Greg Davies and his lovely assistant, little Alex Horne, as they judge the performances of 5 comedians carrying out the most random tasks. It’s hard not to feel a little sad when a series ends, as they change cast every time, but that’s also what keeps things fresh. Caught up on series 6, and the four latest! Without a doubt the best game show out there — so happy it’s still going strong.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 5&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/shows/000/170/649/posters/thumb/39eb828a7a.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Andor
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 Season 2
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					Similar beats to season 1, I found, but that’s not always a bad thing. This show has a lot of great material — surprising for a Disney show. It actually feels like mature and of high quality — despite a couple easy tropes — written by adults and for adults (and then you’re reminded it’s a Star Wars show when a character’s name is like Greebii Booboog). The visual settings were beautiful, and there were more than one non-human character this season, if you can believe it!
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 6&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/shows/000/187/026/posters/thumb/8ee67fdf05.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Dexter: New Blood
						
					&lt;/h3&gt;
				
				
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					I liked the original series (err, we can ignore the ending), and the books, so with new Dexter-verse content, I gave this a shot. It started off slow, then got quite gripping, but fizzled up with some dubious behaviours. I liked that it was supposed to end, but, well, there’s a sequel to this show: Dexter Resurrections. (trailer seems… iffy at best) I do like Michael C. Hall’s performance though…
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 7&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/shows/000/173/996/posters/thumb/a71bc3d9f0.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Wednesday
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 Season 2
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					The first season was pretty good, though I wasn’t necessarily expecting another. I almost didn’t keep watching due to Pugsley’s vibes being very off-putting. It didn’t get worse, so I powered through it. Characters not communicating as a plot device is frustrating but what can you do… This felt a little lacking at times, but Thing? He killed it.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 8&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/shows/000/220/499/posters/thumb/dc0312867b.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Ludwig
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 Series 1
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					This is a show where David Mitchell plays an anti-social, puzzle-solving mind who has to impersonate his missing police detective twin brother, to secretly investigate his disappearance. It’s a British crime mystery dramedy… I think? A little formulaic but very enjoyable all the same. Only 6 episodes, but a second series is planned!
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 9&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/shows/000/145/186/posters/thumb/8aefeb9e42.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					&lt;span class=&quot;floatster-praise&quot; aria-hidden=&quot;true&quot; title=&quot;Highly Recommended&quot;&gt;👍&lt;/span&gt;
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Chernobyl
						&lt;span class=&quot;visually-hidden&quot;&gt;(Highly Recommended)&lt;/span&gt;
					&lt;/h3&gt;
				
				
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					This miniseries is absolutely riveting, equally fascinating and harrowing (episode 4 broke me). Given the mess it was, it is incredible to see how much worse it could have been, yet also how terrible it did end up being. Also, props for not giving everybody heavy, fake soviet accents.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 10&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/shows/000/142/927/posters/thumb/90fb8367aa.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						What We Do in the Shadows
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 Seasons 1–3
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					I have wanted to watch this for a while (I saw and enjoyed the movie, a long time ago). Let me get it out of the way: gosh I adore Matt Berry. I love how Laszlo, Nadja, and Nandor all have weird ways to say some words, Guillermo is very precious, and Colin is perfectly boring. I enjoyed these first few seasons, despite all the main cast of vampires being absolutely horrible people. I also find myself saying &lt;em&gt;“Baaat!”&lt;/em&gt; and &lt;em&gt;“&lt;a href=&quot;https://chriskirknielsen.com/designs/nandor-fucking-guy/&quot;&gt;Fu-cking guyyyy…&lt;/a&gt;”&lt;/em&gt; randomly, so, you know… I am enthralled.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;

	&lt;/div&gt;
&lt;/section&gt;

&lt;section class=&quot;fullsection&quot; aria-labelledby=&quot;fullsection-movies&quot; style=&quot;--FS-bg: #230063; --FS-palette-4: #ff981d; --FS-fill: #fff7d8;&quot; id=&quot;movies&quot;&gt;
	&lt;div class=&quot;fullsection-head&quot;&gt;
		&lt;div class=&quot;fullsection-count&quot; aria-hidden=&quot;true&quot;&gt;18 entries&lt;/div&gt;
		&lt;h2 class=&quot;fullsection-title-wrapper&quot;&gt;
			&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 1280 380&quot; width=&quot;1280&quot; height=&quot;380&quot; class=&quot;fullsection-title&quot;&gt;
				&lt;title id=&quot;fullsection-movies&quot;&gt;Movies&lt;/title&gt;
				&lt;path fill=&quot;var(--FS-fill)&quot; d=&quot;M337.2031,50.1447h29.2349v280.4992h-44.6424v-150.9149l-32.3969,69.531-33.5795-69.531v150.9149h-45.0383V50.1447h29.2349l48.9887,112.199,48.1986-112.199ZM471.2091,48.5646c19.7538,0,36.3457,7.9009,49.3829,23.3101,13.0373,15.4075,19.7522,54.5193,19.7522,117.3354,0,65.1863-6.3207,105.4824-19.358,120.8916-13.0373,15.4058-29.6291,23.3101-49.7771,23.3101-19.7538,0-36.3473-7.9042-49.7805-23.3101-13.4315-15.4092-20.148-55.7053-20.148-120.8916,0-62.8161,6.7166-101.9279,19.7538-117.3354,13.0373-15.4092,29.6291-23.3101,49.7788-23.3101h.3959ZM470.8133,289.1635c4.7405,0,9.481-3.1603,13.8274-9.8769s6.7166-36.7432,6.7166-90.0766c0-50.9648-1.9761-79.8038-5.9265-86.1245-3.9504-6.3207-8.6926-9.4827-14.2216-9.4827-5.9265,0-11.0629,3.162-15.0133,9.4827-3.9521,6.3207-5.9265,35.1597-5.9265,86.1245,0,53.3334,1.9744,83.36,5.9265,90.0766,3.9504,6.7166,9.0868,9.8769,15.0133,9.8769h-.3959ZM616.7528,330.6439c-15.8017-36.7399-27.2588-74.6674-34.3713-113.7792-7.1108-39.1118-12.2455-94.8171-15.8017-166.72h46.2226c1.186,81.3839,8.691,147.7579,20.9398,199.5111,12.6414-51.7532,17.7778-118.1272,19.7522-199.5111h46.2226c-3.1603,72.6947-8.2967,128.3966-15.4058,167.1159-7.1125,38.7159-18.5695,76.6434-33.9771,113.3833h-33.5812ZM731.7968,330.6439V50.1447h45.0366v280.4992h-45.0366ZM815.0326,330.6439V50.1447h106.2742v44.6441h-61.6301v59.2615h40.2961v44.6407h-40.2961v87.3121h61.6301v44.6407h-106.2742ZM1022.6023,46.5902c17.3819,0,33.1853,5.5306,37.9258,7.1108v49.3846c-9.0868-4.7405-22.1241-10.2728-38.7176-10.2728-12.6414,0-21.334,9.0868-21.334,21.7299,0,13.8257,15.8051,35.5556,33.187,62.026,26.0745,37.9242,35.5556,58.4698,35.5556,89.6807,0,39.1118-23.3084,67.5549-69.9268,67.5549-19.7538,0-32.3952-4.7405-42.2721-9.8769v-46.6168c9.0868,4.7405,22.1241,11.4571,37.5316,11.4571,17.3819,0,25.6786-6.3207,25.6786-23.3101,0-17.3819-4.7405-24.8902-26.8629-60.8383-24.4944-39.1152-41.4837-60.0533-41.4837-89.6824,0-43.4581,26.4704-68.7409,70.3227-68.7409l.3959.3942Z&quot;&gt;&lt;/path&gt;
			&lt;/svg&gt;
		&lt;/h2&gt;

		&lt;svg data-interacted=&quot;projector-power&quot; data-power=&quot;on&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; viewBox=&quot;0 0 740 680&quot; width=&quot;740&quot; height=&quot;680&quot; class=&quot;fullsection-illustration&quot; role=&quot;img&quot; aria-label=&quot;A movie projector using reels&quot;&gt;
			&lt;defs&gt;
				&lt;linearGradient id=&quot;projector-light&quot; x1=&quot;590.56&quot; x2=&quot;732.9&quot; y1=&quot;473.35&quot; y2=&quot;473.35&quot; gradientUnits=&quot;userSpaceOnUse&quot;&gt;
					&lt;stop offset=&quot;0&quot; stop-color=&quot;#fff&quot;&gt;&lt;/stop&gt;
					&lt;stop offset=&quot;1&quot; stop-color=&quot;#fff&quot; stop-opacity=&quot;0&quot;&gt;&lt;/stop&gt;
				&lt;/linearGradient&gt;
			&lt;/defs&gt;

			&lt;path d=&quot;M596.04 564.99h-399.2c-12.28-116.86-14.35-227.28 0-327.36h399.2c10.24 100.08 8.77 210.5 0 327.36Z&quot; fill=&quot;var(--FS-palette-3)&quot; stroke=&quot;var(--FS-palette-1)&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;
			&lt;path data-illu-part=&quot;light&quot; fill=&quot;url(#projector-light)&quot; d=&quot;M590.56 453.23v40.25l129.42 79.45s12.92-36.44 12.92-99.58-12.92-99.57-12.92-99.57z&quot;&gt;&lt;/path&gt;
			&lt;g fill=&quot;none&quot; stroke=&quot;var(--FS-palette-2)&quot; stroke-width=&quot;3&quot;&gt;
				&lt;path d=&quot;M227.77 481.77 84.5 325.43&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;m574.26 345.39-140.82 43.09a4.63 4.63 0 0 0-3.07 5.74l7.02 23.53&quot;&gt;&lt;/path&gt;
			&lt;/g&gt;

			&lt;g stroke=&quot;var(--FS-palette-1)&quot; stroke-width=&quot;2&quot;&gt;
				&lt;g fill=&quot;var(--FS-palette-2)&quot;&gt;
					&lt;path d=&quot;M542.19 555.99H249.91l-17.56-55.55h320.33z&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;M548.54 417.9H233.48l-7.66 15.2v67.34H556.2v-67.33z&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;M556.2 433.11H225.82&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;M589.47 497.12H556.2v-47.53h33.27c3.79 0 3.79 47.53 0 47.53Z&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;M471.68 461h84.51v24.71h-84.51z&quot;&gt;&lt;/path&gt;
				&lt;/g&gt;
				
				&lt;circle cx=&quot;302.95&quot; cy=&quot;465.9&quot; r=&quot;18.29&quot;&gt;&lt;/circle&gt;
				&lt;circle cx=&quot;261.76&quot; cy=&quot;466.18&quot; r=&quot;9.27&quot;&gt;&lt;/circle&gt;
				&lt;path fill=&quot;var(--FS-palette-1)&quot; d=&quot;m285.79 454.8 6.05-6.05 28.27 28.27-6.05 6.05z&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M437.39 417.75v138.24&quot;&gt;&lt;/path&gt;
			&lt;/g&gt;

			&lt;g fill=&quot;var(--FS-palette-3)&quot;&gt;
				&lt;path d=&quot;M432.58 528.22H246.37l7.2 22.77h179.01z&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M442.2 528.22v22.77h95.84l4.3-22.77z&quot;&gt;&lt;/path&gt;
			&lt;/g&gt;

			&lt;g fill=&quot;none&quot; stroke=&quot;var(--FS-palette-4)&quot; stroke-width=&quot;4&quot;&gt;
				&lt;path d=&quot;M365.01 535.87h30.5&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M365.01 543.34h38.7&quot;&gt;&lt;/path&gt;
			&lt;/g&gt;
			&lt;path fill=&quot;none&quot; stroke=&quot;var(--FS-palette-1)&quot; d=&quot;M265.65 530.84h46.57v18.77h-46.57z&quot;&gt;&lt;/path&gt;
			&lt;g fill=&quot;var(--FS-palette-1)&quot;&gt;
				&lt;circle cx=&quot;434.8&quot; cy=&quot;392.89&quot; r=&quot;2.5&quot;&gt;&lt;/circle&gt;
				&lt;path d=&quot;M269.02 540.06h9.53v.68h-7.22v2.87h6.2v.68h-6.2v4.17h-2.3z&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M280.27 540.06h2.31v8.4h-2.3z&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M285.43 540.06h2.3v7.71h6.76v.69h-9.06z&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M308.84 540.06v8.4h-2.32v-6.3l-3.6 6.3h-1.36L297.3 542v6.45H296v-8.4h2.42l4.26 6.51 3.76-6.51z&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M527.28 521.75q.57.75.57 1.94 0 1.29-.65 2.14-.77 1-2.19 1-1.33 0-2.08-.87a3.3 3.3 0 0 1-.68-2.14q0-1.16.58-1.99a2.5 2.5 0 0 1 2.2-1.06q1.51 0 2.25.98m-.69 3.65q.45-.73.46-1.7 0-1-.53-1.62a1.8 1.8 0 0 0-1.45-.62q-.88 0-1.45.61-.56.62-.56 1.8 0 .96.48 1.61c.48.65.84.66 1.57.66q1.02 0 1.48-.74&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M529.65 520.93h3.98v.7h-3.2v1.74h2.81v.68h-2.81v2.61h-.78z&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M535.33 520.93h3.98v.7h-3.2v1.74h2.82v.68h-2.82v2.61h-.78z&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M518.5 543.6h3.97v.7h-3.2v1.74h2.82v.69h-2.82v2.6h-.78z&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;m524.49 543.6 1.08 4.66 1.3-4.66h.84l1.3 4.67 1.08-4.67h.85l-1.5 5.74h-.82l-1.33-4.76-1.33 4.76h-.82l-1.5-5.74z&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M532.5 543.6h2.29q1.16 0 1.8.84.58.75.58 1.94 0 .9-.34 1.65a2.1 2.1 0 0 1-2.05 1.3h-2.29zm2.13 5.07q.39 0 .64-.08.44-.15.72-.59.22-.35.33-.89a3.5 3.5 0 0 0-.36-2.25q-.42-.6-1.33-.6h-1.35v4.41z&quot;&gt;&lt;/path&gt;
			&lt;/g&gt;

			&lt;g class=&quot;fullsection-illustration-spin-anim&quot; data-illu-part=&quot;reel&quot;&gt;
				&lt;circle cx=&quot;559.73&quot; cy=&quot;271.41&quot; r=&quot;76.88&quot; fill=&quot;var(--FS-palette-2)&quot;&gt;&lt;/circle&gt;
				&lt;path fill=&quot;var(--FS-palette-1)&quot; d=&quot;M559.73 169.95c-56.03 0-101.45 45.42-101.45 101.45s45.42 101.45 101.45 101.45 101.45-45.42 101.45-101.45-45.42-101.45-101.45-101.45m-93.3 101.46c0-15.6 3.84-30.3 10.6-43.21l36.2 24.64a22.46 22.46 0 0 1-.01 37.14l-36.19 24.64a93 93 0 0 1-10.6-43.21m14.53 50.01 39.44-19.01a22.46 22.46 0 0 1 32.16 18.56l3.24 43.64a93.2 93.2 0 0 1-74.84-43.19m71.6-99.57a22.46 22.46 0 0 1-32.16 18.57l-39.44-19.02a93.2 93.2 0 0 1 74.84-43.2zm85.94-.45-39.43 19.01a22.46 22.46 0 0 1-32.16-18.56l-3.25-43.65a93.2 93.2 0 0 1 74.84 43.2m-74.84 143.2 3.25-43.64a22.46 22.46 0 0 1 32.16-18.56l39.43 19a93.2 93.2 0 0 1-74.84 43.2m42.58-74.63a22.46 22.46 0 0 1 0-37.14l36.19-24.64c6.76 12.92 10.6 27.61 10.6 43.2s-3.84 30.3-10.6 43.22z&quot;&gt;&lt;/path&gt;
			&lt;/g&gt;
			&lt;g class=&quot;fullsection-illustration-spin-anim&quot; style=&quot;--FS-factor: 1.5&quot; data-illu-part=&quot;reel&quot;&gt;
				&lt;circle cx=&quot;210.23&quot; cy=&quot;271.29&quot; r=&quot;141.84&quot; fill=&quot;var(--FS-palette-1)&quot;&gt;&lt;/circle&gt;
				&lt;g stroke=&quot;var(--FS-palette-3)&quot; fill=&quot;none&quot;&gt;
					&lt;circle cx=&quot;210.23&quot; cy=&quot;271.29&quot; r=&quot;26.12&quot;&gt;&lt;/circle&gt;
					&lt;path d=&quot;M205.15 145.1h10.18v80.47h-10.18z&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;m98.4 212.6 5.09-8.82 69.69 40.24-5.1 8.81z&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;m103.5 338.8-5.1-8.82 69.69-40.23 5.09 8.81z&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;M215.32 397.49h-10.18v-80.47h10.18z&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;m322.07 329.98-5.1 8.82-69.68-40.24 5.09-8.81z&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;m316.98 203.79 5.1 8.81-69.7 40.24-5.09-8.82z&quot;&gt;&lt;/path&gt;
				&lt;/g&gt;
			&lt;/g&gt;
			&lt;g fill=&quot;var(--FS-palette-3)&quot;&gt;
				&lt;circle cx=&quot;559.73&quot; cy=&quot;271.41&quot; r=&quot;5.09&quot;&gt;&lt;/circle&gt;
				&lt;circle cx=&quot;210.23&quot; cy=&quot;271.29&quot; r=&quot;5.09&quot;&gt;&lt;/circle&gt;
			&lt;/g&gt;
			&lt;g data-illu-part=&quot;dial&quot;&gt;
				&lt;circle cx=&quot;495.11&quot; cy=&quot;528.22&quot; r=&quot;21.12&quot; fill=&quot;var(--FS-palette-3)&quot; stroke=&quot;var(--FS-palette-1)&quot; stroke-width=&quot;2&quot;&gt;&lt;/circle&gt;
				&lt;path d=&quot;M469.84 533.63v-10.82l50.52 4.13v2.57z&quot; fill=&quot;var(--FS-palette-1)&quot;&gt;&lt;/path&gt;
			&lt;/g&gt;

			&lt;foreignObject x=&quot;472.844&quot; y=&quot;500.4418&quot; width=&quot;50.5123&quot; height=&quot;50.5123&quot;&gt;
				&lt;button type=&quot;button&quot; class=&quot;button-reset | fullsection-illustration-button&quot; data-interaction=&quot;projector-power&quot;&gt;
					&lt;span class=&quot;visually-hidden&quot;&gt;Toggle projector power&lt;/span&gt;
				&lt;/button&gt;
			&lt;/foreignObject&gt;
		&lt;/svg&gt;
	&lt;/div&gt;
	&lt;div class=&quot;fullsection-content | container | flow&quot;&gt;
		&lt;p&gt;
			It’s weird how I’m fine binging 3 TV show episodes in a row for nearly 2 hours, but sitting down to watch one movie in the same amount of time is nearly impossible. Go figure! I would have more to say about most of these movies but I’ll keep it spoiler-free.
		&lt;/p&gt;
		
	

 
&lt;div class=&quot;floatster&quot; style=&quot;--FL-img-ratio: calc(530 / 800); --FL-seed: 325;&quot;&gt;
	&lt;ul class=&quot;floatster-list | flow&quot; data-flow-space=&quot;xl&quot;&gt;
	
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 1&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/movies/000/763/780/posters/thumb/93b62a8f24.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						The Gorge
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 Scott Derrickson (2025)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					It was pretty good, the characters (both elite snipers) had compelling chemistry, and while some plot points (and camera angles) were odd, I did (Anya-Taylor)-en-Joy it and it made me throw a few s-Miles-(Teller). (sorry) It managed to blend multiple genres (action/horror/romance?), with cool/creepy visuals, and totally unrealistic scope/binocular magnification.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 2&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/movies/000/655/031/posters/thumb/9eadd9bc48.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Captain America: Brave New World
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 Julius Onah (2025)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					The MCU is fatigued, but I don’t mind putting my brain on auto-pilot for those movies. This was just okay, and I may be missing context from previous shows, but I don’t have the patience. The villain is a little too on the nose, and Harrison Ford angrily points at people.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 3&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/movies/000/997/581/posters/thumb/1a79db0747.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					&lt;span class=&quot;floatster-praise&quot; aria-hidden=&quot;true&quot; title=&quot;Highly Recommended&quot;&gt;👍&lt;/span&gt;
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Sinners
						&lt;span class=&quot;visually-hidden&quot;&gt;(Highly Recommended)&lt;/span&gt;
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 Ryan Coogler (2025)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					I can’t say I knew much about this going in but maybe it was for the best. This was a wild ride. Incredible performances all around, with Michael B. Jordan giving us 200%. Very impressed with how this one turned out.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 4&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/movies/000/734/869/posters/thumb/03504312e9.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Beetlejuice Beetlejuice
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 Tim Burton (2024)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					Listen, I know the power of nostalgia can have, but I don’t think we needed this movie. High stakes, you ask? Nah, danger is dealt with in a flash. While Catherine O’Hara and Willem Dafoe are fantastic, Jenna Ortega seemed to reprise the Wednesday role. And Monica Bellucci’s character was completely underused. Visually good, eh for the rest.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 5&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/movies/000/792/299/posters/thumb/36d0bdcb38.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					&lt;span class=&quot;floatster-praise&quot; aria-hidden=&quot;true&quot; title=&quot;Highly Recommended&quot;&gt;👍&lt;/span&gt;
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Thunderbolts
						&lt;span class=&quot;visually-hidden&quot;&gt;(Highly Recommended)&lt;/span&gt;
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 Jake Schreier (2025)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					I didn’t expect much out of this one, but Florence Pugh was fantastic. Her character has layers that work well with the over-arching theme of mental health affecting all of the team. Yeah, you get some silliness, but, dang, for once, it felt… earned? And David Harbour’s loud Alexei character is goofy, sure, but also has some heart, so it seemed balanced. It’s not perfect, but not being mono-dimensional for a Marvel movie is rare these days, so I’ll take it.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 6&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/movies/000/001/457/posters/thumb/d6a44a93cb.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						The Breakfast Club
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 John Hughes (1985)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					I had never seen this movie and figured, on a slow Saturday afternoon, I’d give it a whirl. I certainly enjoyed most of it, though some parts (and lingo…) are a product of their time for sure, while other things are glossed over (the sushi at room temperature, what?). In any case, it was pretty fun to see what the fuss was about, and to enjoy the soundtrack. I am but a simple mind. 
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 7&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/movies/000/426/078/posters/thumb/1d96ff3121.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Mission: Impossible - The Final Reckoning
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 Christopher McQuarrie (2025)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					Wow this movie is long. So long it felt the need to repeat some plot points multiple times, with &lt;em&gt;flashbacks&lt;/em&gt;. Some sequences were dead quiet, which can be a nice contrast, mind you, but not too much? Other scenes: quite drawn out. Tom Cruise still loves sprinting. And there’s a French character who only replies in French despite it being an English conversation. Why? Why?! (I’m French, I am allowed to complain about this!)
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 8&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/movies/000/000/210/posters/thumb/9b700552c7.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Willy Wonka and the Chocolate Factory
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 Mel Stuart (1971)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					Another classic I knew of and never saw. Gene Wilder is absolutely fantastic, and his unhinged yet surgical sass is wonderful. It’s incredible how well this 55 year-old movie holds up. Fun fact: I knew without knowing of this movie via &lt;a href=&quot;https://www.youtube.com/watch?v=x8QJboBTfzA&quot;&gt;Pendulum’s Through the Loop song&lt;/a&gt;, which samples Wonka’s mad scene on the riverboat in the tunnel of terrors.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 9&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/movies/000/000/699/posters/thumb/a1bdbcb5f4.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					&lt;span class=&quot;floatster-praise&quot; aria-hidden=&quot;true&quot; title=&quot;Highly Recommended&quot;&gt;👍&lt;/span&gt;
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Who Framed Roger Rabbit?
						&lt;span class=&quot;visually-hidden&quot;&gt;(Highly Recommended)&lt;/span&gt;
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 Robert Zemeckis (1988)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					Yet another classic I’d never watched. I don’t know if this was a kid’s movie but seeing it now I can certainly see it wouldn’t be today. The performances were great, and visually it was quite incredible how they mixed both live action and animated styles. What a technical marvel! (also it’s funny how easy it is to recognise a Zemeckis movie just by the music)
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 10&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/movies/000/006/761/posters/thumb/14a615adc0.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						The Emperor’s New Groove
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 Mark Dindal (2000)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					Sensing a theme? Yeah another classic I missed. It was pretty decent, though I am a little late to the party. Definitely felt like a kind of weaker &lt;em&gt;Hercules&lt;/em&gt;, but still enjoyable. John Goodman’s voice certainly carries a lot of this movie.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 11&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/movies/001/002/828/posters/thumb/b1b6386d1a.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Friendship
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 Andrew DeYoung (2025)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					The premise of “mid-life crisis man tries to make friends” is appealing, and I thought “okay this is going to be like &lt;em&gt;I Love You, Man&lt;/em&gt;” (also with Paul Rudd) mixed into an extended &lt;em&gt;ITYSL&lt;/em&gt; sketch, for better or worse: it has plenty of Tim Robinson’s signature cringe and/or over-the-top acting but I would not call this a comedy (though I did laugh at times!), as it is a little darker/weirder than just that. It’s not going to be for everyone!
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 12&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/movies/000/005/887/posters/thumb/a93d7979c1.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Elf
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 Jon Favreau (2003)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					I had wanted to see this for a while because of “You sit on a throne of lies” &lt;em&gt;dot gif&lt;/em&gt;, and, well, Will Farrell being a man-child is what he does best. For what this movie is (a family movie), it’s cute and funny, and that works.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 13&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/movies/000/646/497/posters/thumb/cdf37965e2.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Wake Up Dead Man: A Knives Out Mystery
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 Rian Johnson (2025)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					I was torn on this one. On the one hand, it was a compelling mystery with some really funny moments and comments on modern society, but on the other, the pacing made it feel a little too long. Don’t get me wrong, the story was good and the cast is excellent. I could certainly watch more Benoit Blanc mysteries.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 14&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/movies/000/853/702/posters/thumb/a69dbb1e7e.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Superman
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 James Gunn (2025)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					I liked it and didn’t. We’re thrown into the middle of a story and lots of relationships/tensions come out of nowhere. I get not wanting to reintroduce Superman again but we could have been eased into the universe a little better.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 15&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/movies/000/832/642/posters/thumb/f9a252e32e.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						The Naked Gun
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 Akiva Schaffer (2025)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					This was a whole lot of fun. Silly, full of ridiculous puns (good luck, translation teams!) and visual gags: it was good!
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 16&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/movies/000/205/401/posters/thumb/1387310d4b.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Despicable Me 3
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 Kyle Balda, Pierre Coffin (2017)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					Watched this while preparing Christmas dinner, it was pretty cute. Trey Parker’s voice is unmistakable.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 17&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/movies/000/721/339/posters/thumb/2a82533988.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Violent Night
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 Tommy Wirkola (2022)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					A little more gory than I expected but it’s a simple movie that was doing its violence/comedy thing well. I would have loved more backstory on Santa, the glimpses we saw were an interesting idea.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 18&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://walter-r2.trakt.tv/images/movies/000/460/087/posters/thumb/9c44badbf6.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;530&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						The Fantastic 4: First Steps
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 Matt Shakman (2025)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					I loved the atompunk/retrofuturist aesthetic, and some of the space scenes, but I didn‘t feel super invested, despite the tightly-knit family they managed to depict. Though I haven’t seen it, I am sure this is better than &lt;em&gt;F4ntastic&lt;/em&gt;.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;

	&lt;/div&gt;
&lt;/section&gt;

&lt;section class=&quot;fullsection&quot; aria-labelledby=&quot;fullsection-music&quot; style=&quot;--FS-bg: #ad6300; --FS-palette-4: #ff4d6b; --FS-fill: #faffe9;&quot; id=&quot;music&quot;&gt;
	&lt;div class=&quot;fullsection-head&quot;&gt;
		&lt;div class=&quot;fullsection-count&quot; aria-hidden=&quot;true&quot;&gt;15 entries&lt;/div&gt;
		&lt;h2 class=&quot;fullsection-title-wrapper&quot;&gt;
			&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 1280 380&quot; width=&quot;1280&quot; height=&quot;380&quot; class=&quot;fullsection-title&quot;&gt;
				&lt;title id=&quot;fullsection-music&quot;&gt;Music&lt;/title&gt;
				&lt;path fill=&quot;var(--FS-fill)&quot; d=&quot;M439.17 278h-75.31V126.85H338.5v151.13h-75.31V126.86h-25.36v88.12l-30.49 63.01H112.3l87.87-175.98h239v175.98Zm209.8-50.47c0 30.74-19.98 50.46-50.21 50.46h-88.38c-30.22 0-50.46-19.72-50.46-50.46V102h83.25v150.88h25.1V102h80.7v125.52Zm156.77 50.46h-88.12c-30.49 0-50.47-19.72-50.47-50.46v-5.13h80.44v30.49h25.36V201.9h-55.33c-32.28 0-50.47-18.19-50.47-49.7 0-30.48 19.98-50.2 50.47-50.2h86.58c30.23 0 50.47 19.72 50.47 50.2v3.85h-81.72v-29.2h-25.36v49.7h58.15c32.02 0 50.2 19.46 50.2 50.97 0 30.74-19.97 50.46-50.2 50.46Zm148.06 0h-75.57V102.01h75.57v175.98Zm213.9-50.46c0 30.74-19.73 50.46-50.21 50.46h-88.12c-30.49 0-50.47-19.72-50.47-50.46v-75.31c0-30.49 19.98-50.21 50.47-50.21h88.12c30.48 0 50.2 19.72 50.2 50.2v25.11H1087v-50.46h-24.84v126.03H1087v-50.21h80.7v24.85Z&quot;&gt;&lt;/path&gt;
			&lt;/svg&gt;
		&lt;/h2&gt;

		&lt;svg data-interacted=&quot;hikepal-power&quot; data-power=&quot;on&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; viewBox=&quot;0 0 740 680&quot; width=&quot;740&quot; height=&quot;680&quot; class=&quot;fullsection-illustration&quot; role=&quot;img&quot; aria-label=&quot;An old-school portable cassette tape player.&quot;&gt;
			&lt;defs&gt;
				&lt;rect id=&quot;cassette-window&quot; width=&quot;100&quot; x=&quot;315&quot; y=&quot;352.24&quot; height=&quot;50&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;
				&lt;clipPath id=&quot;cassette-window-clip&quot;&gt;&lt;use xlink:href=&quot;#cassette-window&quot;&gt;&lt;/use&gt;&lt;/clipPath&gt;
			&lt;/defs&gt;
			&lt;g fill=&quot;var(--FS-palette-3)&quot; stroke=&quot;var(--FS-palette-1)&quot; stroke-width=&quot;2&quot;&gt;
				&lt;path data-illu-part=&quot;play&quot; d=&quot;M320.82 124.72h119.86a6.36 6.36 0 0 1 6.36 6.36v23.42H314.46v-23.42c0-3.5 2.85-6.36 6.36-6.36Z&quot;&gt;&lt;/path&gt;
				&lt;path data-illu-part=&quot;stop&quot; d=&quot;M459.07 124.72h48.33a6.36 6.36 0 0 1 6.36 6.36v23.42h-61.05v-23.42c0-3.5 2.85-6.36 6.36-6.36Z&quot;&gt;&lt;/path&gt;
			&lt;/g&gt;
			&lt;g stroke=&quot;var(--FS-palette-1)&quot; stroke-width=&quot;2&quot; fill=&quot;none&quot;&gt;
				&lt;rect fill=&quot;var(--FS-palette-3)&quot; width=&quot;551.48&quot; height=&quot;400.78&quot; x=&quot;94.26&quot; y=&quot;154.5&quot; rx=&quot;41.06&quot; ry=&quot;41.06&quot;&gt;&lt;/rect&gt;
				&lt;path d=&quot;M218.42 296.34h300.14a23.14 23.14 0 0 1 23.12 23.12v235.82H195.3V319.46a23.14 23.14 0 0 1 23.12-23.12Z&quot; fill=&quot;var(--FS-palette-2)&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M209.09 418.99h318.8v106.72h-318.8z&quot;&gt;&lt;/path&gt;
				&lt;path fill=&quot;var(--FS-palette-3)&quot; d=&quot;M223.85 335.5h289.28c8.14 0 14.76 6.6 14.76 14.76v68.73H209.1v-68.73c0-8.15 6.61-14.77 14.76-14.77Z&quot;&gt;&lt;/path&gt;
			&lt;/g&gt;
			&lt;use xlink:href=&quot;#cassette-window&quot; fill=&quot;var(--FS-palette-2)&quot;&gt;&lt;/use&gt;
			&lt;g clip-path=&quot;url(#cassette-window-clip)&quot;&gt;
				&lt;g fill=&quot;var(--FS-palette-3)&quot;&gt;
					&lt;circle cx=&quot;277.46&quot; cy=&quot;377.24&quot; r=&quot;85&quot;&gt;&lt;/circle&gt;
					&lt;circle cx=&quot;459.52&quot; cy=&quot;377.24&quot; r=&quot;55&quot;&gt;&lt;/circle&gt;
				&lt;/g&gt;
				&lt;g fill=&quot;var(--FS-palette-2)&quot;&gt;
					&lt;circle cx=&quot;277.46&quot; cy=&quot;377.24&quot; r=&quot;35&quot;&gt;&lt;/circle&gt;
					&lt;circle cx=&quot;459.52&quot; cy=&quot;377.24&quot; r=&quot;35&quot;&gt;&lt;/circle&gt;
				&lt;/g&gt;
			&lt;/g&gt;
			&lt;use xlink:href=&quot;#cassette-window&quot; stroke=&quot;var(--FS-palette-1)&quot; stroke-width=&quot;2&quot; fill=&quot;none&quot;&gt;&lt;/use&gt;
			&lt;g class=&quot;fullsection-illustration-spin-anim&quot; data-illu-part=&quot;spool&quot;&gt;
				&lt;circle cx=&quot;277.46&quot; cy=&quot;377.24&quot; r=&quot;23.89&quot; stroke=&quot;var(--FS-palette-1)&quot; stroke-width=&quot;4&quot; fill=&quot;var(--FS-palette-3)&quot;&gt;&lt;/circle&gt;
				&lt;g fill=&quot;var(--FS-palette-1)&quot;&gt;
					&lt;path d=&quot;M277.46 362.85a3.8 3.8 0 0 1-3.78-3.77v-4.91l3.78-.82 3.77.82v4.9c0 2.1-1.69 3.78-3.77 3.78&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;M265 370.05a3.8 3.8 0 0 1-5.16 1.38l-4.25-2.46 1.18-3.67 2.6-2.87 4.25 2.46a3.8 3.8 0 0 1 1.38 5.16&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;M265 384.43a3.8 3.8 0 0 1-1.38 5.16l-4.26 2.46-2.59-2.87-1.18-3.68 4.25-2.45a3.8 3.8 0 0 1 5.16 1.38&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;M277.46 391.62c2.08 0 3.77 1.7 3.77 3.78v4.91l-3.77.82-3.78-.82v-4.9c0-2.1 1.69-3.79 3.78-3.79&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;M289.91 384.43a3.8 3.8 0 0 1 5.16-1.38l4.26 2.45-1.19 3.68-2.59 2.87-4.25-2.46a3.8 3.8 0 0 1-1.39-5.16&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;M289.91 370.05a3.8 3.8 0 0 1 1.39-5.16l4.25-2.46 2.6 2.87 1.18 3.67-4.26 2.46a3.8 3.8 0 0 1-5.16-1.38&quot;&gt;&lt;/path&gt;
				&lt;/g&gt;
				&lt;circle cx=&quot;277.46&quot; cy=&quot;377.24&quot; r=&quot;12.98&quot; fill=&quot;var(--FS-palette-3)&quot;&gt;&lt;/circle&gt;
				&lt;g stroke=&quot;var(--FS-palette-1)&quot; stroke-width=&quot;0.5&quot; fill=&quot;none&quot;&gt;
					&lt;path d=&quot;M277.46 377.24h11.68&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;m277.46 377.24-5.85 10.12&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;m271.61 367.12 5.85 10.12&quot;&gt;&lt;/path&gt;
					&lt;circle cx=&quot;277.46&quot; cy=&quot;377.24&quot; r=&quot;4.46&quot; fill=&quot;var(--FS-palette-3)&quot;&gt;&lt;/circle&gt;
				&lt;/g&gt;
			&lt;/g&gt;
			&lt;g class=&quot;fullsection-illustration-spin-anim&quot; data-illu-part=&quot;spool&quot;&gt;
				&lt;circle cx=&quot;459.52&quot; cy=&quot;377.24&quot; r=&quot;23.89&quot; stroke=&quot;var(--FS-palette-1)&quot; stroke-width=&quot;4&quot; fill=&quot;var(--FS-palette-3)&quot;&gt;&lt;/circle&gt;
				&lt;g fill=&quot;var(--FS-palette-1)&quot;&gt;
					&lt;path d=&quot;M459.52 362.85a3.8 3.8 0 0 1-3.78-3.77v-4.91l3.78-.82 3.78.82v4.9c0 2.1-1.7 3.78-3.78 3.78&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;M447.06 370.05a3.8 3.8 0 0 1-5.16 1.38l-4.25-2.46 1.19-3.67 2.59-2.87 4.25 2.46a3.8 3.8 0 0 1 1.38 5.16&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;M447.06 384.43a3.8 3.8 0 0 1-1.38 5.16l-4.25 2.46-2.6-2.87-1.18-3.68 4.25-2.45a3.8 3.8 0 0 1 5.16 1.38&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;M459.52 391.62c2.09 0 3.78 1.7 3.78 3.78v4.91l-3.78.82-3.78-.82v-4.9c0-2.1 1.7-3.79 3.78-3.79&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;M471.98 384.43a3.8 3.8 0 0 1 5.16-1.38l4.25 2.45-1.18 3.68-2.6 2.87-4.25-2.46a3.8 3.8 0 0 1-1.38-5.16&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;M471.98 370.05a3.8 3.8 0 0 1 1.38-5.16l4.25-2.46 2.6 2.87 1.18 3.67-4.25 2.46a3.8 3.8 0 0 1-5.16-1.38&quot;&gt;&lt;/path&gt;
				&lt;/g&gt;
				&lt;circle cx=&quot;459.52&quot; cy=&quot;377.24&quot; r=&quot;12.98&quot; fill=&quot;var(--FS-palette-3)&quot;&gt;&lt;/circle&gt;
				&lt;g stroke=&quot;var(--FS-palette-1)&quot; stroke-width=&quot;0.5&quot; fill=&quot;none&quot;&gt;
					&lt;path d=&quot;M459.52 377.24h-11.68&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;m459.52 377.24 5.84-10.12&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;m465.36 387.36-5.84-10.12&quot;&gt;&lt;/path&gt;
					&lt;circle cx=&quot;459.52&quot; cy=&quot;377.24&quot; r=&quot;4.46&quot; fill=&quot;var(--FS-palette-3)&quot;&gt;&lt;/circle&gt;
				&lt;/g&gt;
			&lt;/g&gt;
			&lt;g fill=&quot;var(--FS-palette-1)&quot;&gt;
				&lt;path d=&quot;m617.07 230.09-.13-3.18q3.45-.42 3.45-4.08v-7.23h-6.18v3.1q0 1.81 3.13 2.16V224l-8.97-.57v-3.06q3.24-.43 3.24-1.93v-2.84h-5.08q-1.24 0-1.24 4.24h-2.22v-15.29h2.22q0 3.37 1.24 3.37h13.16q1.24 0 1.24-3.37h2.22v25.54zm6.51 17.36q0 3.07-.52 5.66a13 13 0 0 1-1.75 4.46 8.4 8.4 0 0 1-3.23 2.92q-2.02 1.05-4.95 1.04-2.45 0-4.38-.9-1.95-.88-3.3-2.7-1.36-1.8-2.08-4.56a21 21 0 0 1-.73-6.48q0-3.08.51-5.64.51-2.58 1.7-4.45a8 8 0 0 1 3.1-2.9 10 10 0 0 1 4.74-1.05q2.55 0 4.57.81t3.43 2.58c1.4 1.76 1.65 2.68 2.15 4.52q.75 2.76.74 6.7m-2.86.2q0-3.64-1.6-5.4-1.62-1.76-5.18-1.76-2.6 0-4.23.46c-1.63.46-1.95.73-2.56 1.28s-1.03 1.23-1.25 2.03a10 10 0 0 0-.34 2.63q0 1.9.39 3.23.4 1.35 1.27 2.2.88.84 2.28 1.24 1.41.4 3.44.4 2.35 0 3.85-.45t2.38-1.29a4.4 4.4 0 0 0 1.21-2q.34-1.18.34-2.58m.21 48.46q.01-3.37-1.24-3.37h-16.62v-9.16l15.14-11.84h-11.68q-1.24 0-1.24 3.37h-2.22v-10.78h2.22q0 3.36 1.24 3.36h13.16q1.24 0 1.24-3.36h2.22v12.3l-15.51 12.1h12.05q1.24 0 1.24-3.37h2.22v10.75zm-.02 31.02q0-1.13-.2-1.95-.2-.8-.56-1.12l-8.2-7.83h-5.42q-1.24 0-1.24 3.79h-2.22v-15.25h2.22q0 3.78 1.24 3.78h5.42l8.18-7.53q.45-.41.63-1.15.17-.75.17-1.72h2.22v15.32h-2.22v-2.23q0-1.14-.54-1.14a.7.7 0 0 0-.43.2l-5.65 4.57 5.6 4.92q.18.15.38.15.64 0 .64-1.36v-1.14h2.22v9.69z&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M270.84 453.24h9.3v14.5h10.94v-14.5h9.3v37.73h-9.3v-14.49h-10.94v14.5h-9.3zm36.05 0h9.3v37.73h-9.3zm42.27 5.06v-5.06h-9.3v5.06c0 5.47-2.58 9.12-7.89 9.12l-.03-14.18h-9.3v37.73h9.3l.03-14.18c5.3 0 7.9 3.66 7.9 9.12v5.06h9.29v-5.06c0-5.79-1.78-10.93-6.15-13.8 4.37-2.87 6.15-8.02 6.15-13.8m5.57-5.06h23.84v9.03h-14.54v5.46h9.84v8.75h-9.84v5.47h14.54v9.02h-23.84zm29.96 0h6.02c4.48 0 5.68.11 6.83.22 7.38.82 12.85 6.07 12.85 13.73 0 8.3-6.5 13.61-16.3 13.67h-.1v10.11h-9.3zm9.4 18.87c3.78 0 7-1.26 7-5.03s-3.22-5.09-7-5.09h-.1v10.12zm55.02-18.87h9.3v28.71h9.3v9.02h-18.6zm-20.51-.43c-8.37 0-15.7 6.23-15.7 15.3v22.86h9.3v-22.85c0-4 2.87-6.3 6.4-6.3s6.4 2.3 6.4 6.3v22.85h9.3v-22.85c0-9.08-7.34-15.31-15.7-15.31m0 28.42a5.07 5.07 0 1 0 0-10.15 5.07 5.07 0 0 0 0 10.15&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M368.08 161.78h4.08q1.2 0 1.95.69c.75.69.75 1.1.75 1.93a2.8 2.8 0 0 1-.67 1.86q-.66.8-2.03.79h-2.85v3.86h-1.23zm4.8 1.26q-.42-.2-1.12-.2h-2.45v3.17h2.45q.83 0 1.34-.36.51-.35.51-1.24 0-1.02-.74-1.37m4.83-1.26h1.24v8.04h4.58v1.09h-5.82zm11 0h1.4l3.3 9.13h-1.35l-.92-2.74h-3.61l-.99 2.74h-1.26zm2.03 5.39-1.39-4.03-1.47 4.03zm3.43-5.39h1.44l2.62 4.39 2.63-4.39h1.45l-3.46 5.45v3.68h-1.23v-3.68z&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M467.22 167.96q.05.78.35 1.26.6.9 2.09.9.67.01 1.22-.19 1.07-.39 1.07-1.38 0-.75-.46-1.06-.45-.3-1.43-.54l-1.2-.28a5 5 0 0 1-1.65-.6 2 2 0 0 1-.85-1.7q0-1.24.83-2.03.82-.78 2.35-.79a4 4 0 0 1 2.37.7q.97.7.97 2.21h-1.16a2.4 2.4 0 0 0-.38-1.12q-.54-.72-1.84-.72-1.05 0-1.5.46-.46.45-.46 1.07 0 .67.54.98.36.2 1.6.5l1.24.29q.9.2 1.39.58.84.63.84 1.85 0 1.52-1.07 2.17a3.8 3.8 0 0 1-2.5.65q-1.65 0-2.6-.87a3 3 0 0 1-.92-2.34zm15.58-6.18v1.1h-3.08v8.03h-1.24v-8.04h-3.08v-1.09zm9.7 1.3q.9 1.23.9 3.1 0 2.05-1.03 3.4a4.1 4.1 0 0 1-3.47 1.6q-2.1 0-3.31-1.4a5.3 5.3 0 0 1-1.08-3.39q0-1.85.92-3.16a4 4 0 0 1 3.49-1.7q2.41 0 3.58 1.56m-1.1 5.82q.75-1.17.74-2.7 0-1.6-.84-2.58a2.9 2.9 0 0 0-2.3-.98 3 3 0 0 0-2.32.97q-.9.97-.89 2.87 0 1.5.77 2.55.76 1.04 2.48 1.04 1.64 0 2.37-1.17m4.86-7.12h4.09q1.2 0 1.95.69c.75.69.75 1.1.75 1.93a2.8 2.8 0 0 1-.67 1.86q-.66.8-2.03.79h-2.85v3.86h-1.24zm4.8 1.26q-.41-.2-1.12-.2h-2.44v3.17h2.44q.83 0 1.34-.36.52-.35.52-1.24 0-1.02-.74-1.37&quot;&gt;&lt;/path&gt;
			&lt;/g&gt;

			&lt;foreignObject x=&quot;313.4581&quot; y=&quot;124.7219&quot; width=&quot;201.3052&quot; height=&quot;29.7796&quot;&gt;
				&lt;button type=&quot;button&quot; class=&quot;button-reset | fullsection-illustration-button&quot; data-interaction=&quot;hikepal-power&quot;&gt;
					&lt;span class=&quot;visually-hidden&quot;&gt;Toggle cassette player power&lt;/span&gt;
				&lt;/button&gt;
			&lt;/foreignObject&gt;
		&lt;/svg&gt;
	&lt;/div&gt;
	&lt;div class=&quot;fullsection-content | container | flow&quot;&gt;
		&lt;p&gt;
			There’s a lot in here, so I’ll only list new stuff (if you click the covers, you’ll get the playlist on BandCamp or YouTube) that I’ve played several times. A few special mentions:
		&lt;/p&gt;
		&lt;ul&gt;
			&lt;li&gt;&lt;strong&gt;Low Roar&lt;/strong&gt;’s &lt;a href=&quot;https://www.youtube.com/watch?v=IB1URcYIaOE&quot;&gt;Don’t Be So Serious&lt;/a&gt; (via Death Stranding 2). Sadly the creative mind behind the project, Ryan Karazija, has passed away, but their beautiful music lives on.&lt;/li&gt;
			&lt;li&gt;&lt;strong&gt;Muse&lt;/strong&gt;’s &lt;a href=&quot;https://www.youtube.com/watch?v=jXmUJvNSSm0&quot;&gt;Unravelling&lt;/a&gt; is pretty dope, I’m here for it.&lt;/li&gt;
			&lt;li&gt;&lt;strong&gt;Venjent&lt;/strong&gt; creates DnB songs from random video clips (as well as their own tracks). They are &lt;em&gt;ridiculously&lt;/em&gt; talented, hear for yourself: &lt;a href=&quot;https://www.youtube.com/watch?v=hHCTTa8UP9U&quot;&gt;Bike Alarm&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=or76qIUqeVo&quot;&gt;Sunken&lt;/a&gt;.&lt;/li&gt;
			&lt;li&gt;&lt;strong&gt;Pat’s Soundhouse&lt;/strong&gt; made a glorious khaen performance that starts off as a &lt;a href=&quot;https://www.youtube.com/watch?v=jcutNFPwXPE&quot;&gt;car alarm&lt;/a&gt; but ends up being so much more than that.&lt;/li&gt;
		&lt;/ul&gt;
		
	

 
&lt;div class=&quot;floatster&quot; style=&quot;--FL-img-ratio: calc(500 / 500); --FL-seed: 78;&quot;&gt;
	&lt;ul class=&quot;floatster-list | flow&quot; data-flow-space=&quot;xl&quot;&gt;
	
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 1&quot;&gt;
			
				
				&lt;a href=&quot;https://architects.bandcamp.com/album/the-sky-the-earth-all-between&quot; class=&quot;floatster-media&quot; aria-label=&quot;The Sky, The Earth &amp;amp; All Between on architects.bandcamp.com&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://lastfm.freetls.fastly.net/i/u/770x0/4162988f8299d2bd7314ac97bc8fabb4.jpg#4162988f8299d2bd7314ac97bc8fabb4&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;500&quot; height=&quot;500&quot; loading=&quot;lazy&quot; /&gt;
					&lt;span class=&quot;floatster-praise&quot; aria-hidden=&quot;true&quot; title=&quot;Highly Recommended&quot;&gt;👍&lt;/span&gt;
				&lt;/a&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
				&lt;hgroup&gt;
					&lt;p class=&quot;eyebrow | fontWeight-bold fontSize-small color-heading&quot;&gt;Architects&lt;/p&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						The Sky, The Earth &amp; All Between
						&lt;span class=&quot;visually-hidden&quot;&gt;(Highly Recommended)&lt;/span&gt;
					&lt;/h3&gt;
				
				&lt;/hgroup&gt;
				
				
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					Architects have a pretty consistent style, and as far as metalcore goes, they check all the boxes for me. Melodies are good, screaming and singing are balanced, and all round enjoyable to listen to. This new album follows the trend, and I’ll say it: is better than the last. They seem to keep evolving their sound little by little, which is always nice.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 2&quot;&gt;
			
				
				&lt;a href=&quot;https://underoath.bandcamp.com/album/the-place-after-this-one&quot; class=&quot;floatster-media&quot; aria-label=&quot;The Place After This One on underoath.bandcamp.com&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://lastfm.freetls.fastly.net/i/u/770x0/d2149f0a1f71c1ef2a3a4c5828006974.jpg#d2149f0a1f71c1ef2a3a4c5828006974&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;500&quot; height=&quot;500&quot; loading=&quot;lazy&quot; /&gt;
					&lt;span class=&quot;floatster-praise&quot; aria-hidden=&quot;true&quot; title=&quot;Highly Recommended&quot;&gt;👍&lt;/span&gt;
				&lt;/a&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
				&lt;hgroup&gt;
					&lt;p class=&quot;eyebrow | fontWeight-bold fontSize-small color-heading&quot;&gt;Underoath&lt;/p&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						The Place After This One
						&lt;span class=&quot;visually-hidden&quot;&gt;(Highly Recommended)&lt;/span&gt;
					&lt;/h3&gt;
				
				&lt;/hgroup&gt;
				
				
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					Didn’t know this band was still writing music, but it was a nice surprise. It’s a good album, pretty consistent with what I’d expect from Underoath. I’ve listened to this album quite a bit and that’s a good gauge of how much I like it. It’s got some decent variety in my opinion, so it’s an all-around solid release.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 3&quot;&gt;
			
				
				&lt;a href=&quot;https://thornhillmelb.bandcamp.com/album/bodies&quot; class=&quot;floatster-media&quot; aria-label=&quot;Bodies on thornhillmelb.bandcamp.com&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://lastfm.freetls.fastly.net/i/u/770x0/f95467f40fa9d1acf03644edde32ecf0.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;500&quot; height=&quot;500&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/a&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
				&lt;hgroup&gt;
					&lt;p class=&quot;eyebrow | fontWeight-bold fontSize-small color-heading&quot;&gt;Thornhill&lt;/p&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Bodies
						
					&lt;/h3&gt;
				
				&lt;/hgroup&gt;
				
				
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					I accidentally discovered this band and their debut album The Dark Pool a few years ago: immediately a favourite. Then they released Heroine in 2022 and… I really didn’t like it. This new one feels like a step in the right direction to me. It’s got some Deftones vibes here and there, too, which I certainly enjoy.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 4&quot;&gt;
			
				
				&lt;a href=&quot;https://www.youtube.com/watch?v=0A0IZFa1cnk&amp;list=OLAK5uy_l_AB0hNbkYRvgxt0i7wRwIyzEQ25KftGM&quot; class=&quot;floatster-media&quot; aria-label=&quot;Even in Arcadia on youtube.com&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://lastfm.freetls.fastly.net/i/u/770x0/ca59461ca9b6b14cfc9c1183dbd82a8b.jpg#ca59461ca9b6b14cfc9c1183dbd82a8b&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;500&quot; height=&quot;500&quot; loading=&quot;lazy&quot; /&gt;
					&lt;span class=&quot;floatster-praise&quot; aria-hidden=&quot;true&quot; title=&quot;Highly Recommended&quot;&gt;👍&lt;/span&gt;
				&lt;/a&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
				&lt;hgroup&gt;
					&lt;p class=&quot;eyebrow | fontWeight-bold fontSize-small color-heading&quot;&gt;Sleep Token&lt;/p&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Even in Arcadia
						&lt;span class=&quot;visually-hidden&quot;&gt;(Highly Recommended)&lt;/span&gt;
					&lt;/h3&gt;
				
				&lt;/hgroup&gt;
				
				
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					I discovered Sleep Token, an anonymous masked band, a little before their previous album, Take Me Back to Eden, came out, and have been pretty obsessed ever since. Their new album, Even in Arcadia, keeps us guessing on what genre will be injected into the song, and the lyrics have so many metaphors, it’s always stimulating to parse out. Many, many replays for this one.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 5&quot;&gt;
			
				
				&lt;a href=&quot;https://www.youtube.com/watch?v=S_MijiGiQNI&amp;list=OLAK5uy_m7xWn2ZSsfU3HtMQENAXD8pIa-mekfyYo&quot; class=&quot;floatster-media&quot; aria-label=&quot;King of Terrors on youtube.com&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://lastfm.freetls.fastly.net/i/u/500x500/5773a3ce834b0d79cddb8074385e4fb6.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;500&quot; height=&quot;500&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/a&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
				&lt;hgroup&gt;
					&lt;p class=&quot;eyebrow | fontWeight-bold fontSize-small color-heading&quot;&gt;President&lt;/p&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						King of Terrors
						
					&lt;/h3&gt;
				
				&lt;/hgroup&gt;
				
				
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					Like Sleep Token, this is an anonymous band, though there is no doubt to me who the singer is. Their first single, In The Name of the Father, was, as the kids say, a fucking banger. I played that song on repeat (YouTube seems to say it is my most played song this year). The follow-up tracks on the EP were progressively less bangers, but I still think this is a band I will be following very closely. Eager to see what’s in store for them.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 6&quot;&gt;
			
				
				&lt;a href=&quot;https://20buckspin.bandcamp.com/album/bleed&quot; class=&quot;floatster-media&quot; aria-label=&quot;(self-titled) on 20buckspin.bandcamp.com&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://lastfm.freetls.fastly.net/i/u/500x500/0da44d0c7f3180fa5aa29b35100b6cb9.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;500&quot; height=&quot;500&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/a&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
				&lt;hgroup&gt;
					&lt;p class=&quot;eyebrow | fontWeight-bold fontSize-small color-heading&quot;&gt;BLEED&lt;/p&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						(self-titled)
						
					&lt;/h3&gt;
				
				&lt;/hgroup&gt;
				
				
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					Shared by Cory Dransfeldt on Mastodon, the description caught my attention, and I’m glad I bookmarked their post. This is some late ’90s/early 2000s rock that has that industrial/ethereal vibe to it.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 7&quot;&gt;
			
				
				&lt;a href=&quot;https://movingmountains.bandcamp.com/album/pruning-of-the-lower-limbs&quot; class=&quot;floatster-media&quot; aria-label=&quot;Pruning of the Lower Limbs on movingmountains.bandcamp.com&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://lastfm.freetls.fastly.net/i/u/500x500/9469ac449980bebf679c323814a0030d.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;500&quot; height=&quot;500&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/a&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
				&lt;hgroup&gt;
					&lt;p class=&quot;eyebrow | fontWeight-bold fontSize-small color-heading&quot;&gt;Moving Mountains&lt;/p&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Pruning of the Lower Limbs
						
					&lt;/h3&gt;
				
				&lt;/hgroup&gt;
				
				
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					Didn’t know they were making music again but they sound just like I remember, rock and ambient as ever. To be honest the entire album feels almost too cohesive, as I sincerely cannot, from a few listens, remember individual tracks, but maybe I need to try harder. They also re-recorded &lt;a href=&quot;https://movingmountains.bandcamp.com/album/cover-the-roots-8105&quot;&gt;Cover the Roots and 8105&lt;/a&gt;, and wow, some 20 years later, those songs still &lt;em&gt;slap&lt;/em&gt;.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 8&quot;&gt;
			
				
				&lt;a href=&quot;https://www.youtube.com/watch?v=aLjJ8iwG8UU&amp;list=OLAK5uy_nPFHTIXHILspAeO0420XRCMK2UrEFyc58&quot; class=&quot;floatster-media&quot; aria-label=&quot;private music on youtube.com&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://lastfm.freetls.fastly.net/i/u/500x500/c63c84a5baf41e94717f5dfc2741cb4c.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;500&quot; height=&quot;500&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/a&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
				&lt;hgroup&gt;
					&lt;p class=&quot;eyebrow | fontWeight-bold fontSize-small color-heading&quot;&gt;Deftones&lt;/p&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						private music
						
					&lt;/h3&gt;
				
				&lt;/hgroup&gt;
				
				
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					I love me some Deftones, Chino’s floaty voice on one end and screams on the other are a perfect blend. I’m glad they’re still going, for a while the only Deftones-y fix I could get was Chino’s side-project Crosses.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 9&quot;&gt;
			
				
				&lt;a href=&quot;https://www.youtube.com/watch?v=hti1iGMYlsw&amp;list=OLAK5uy_nivLEn_VIhDt8zKRyruEYWIEar5DtX0oE&quot; class=&quot;floatster-media&quot; aria-label=&quot;Inertia on youtube.com&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://lastfm.freetls.fastly.net/i/u/500x500/3afb71cfdec204ba4ec07cfd839d8d2f.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;500&quot; height=&quot;500&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/a&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
				&lt;hgroup&gt;
					&lt;p class=&quot;eyebrow | fontWeight-bold fontSize-small color-heading&quot;&gt;Pendulum&lt;/p&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Inertia
						
					&lt;/h3&gt;
				
				&lt;/hgroup&gt;
				
				
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					While I enjoy drum’n’bass, Pendulum seems to be more my rhythm with them being closer to a “traditional” band playing live instruments (not exclusively, I know!), so they’re usually mixing it up a little, which I find works great. Inertia seems to be a good return to form in my book, with a good mix between their older and newer stuff.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 10&quot;&gt;
			
				
				&lt;a href=&quot;https://www.youtube.com/watch?v=8oFbRWzVdp4&amp;list=OLAK5uy_kW8K7pO-UK7s0ZHYmbt4_Gj11JDQb-P44&quot; class=&quot;floatster-media&quot; aria-label=&quot;Futique on youtube.com&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://lastfm.freetls.fastly.net/i/u/500x500/20cc0c46e66201ef0982c873400027f3.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;500&quot; height=&quot;500&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/a&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
				&lt;hgroup&gt;
					&lt;p class=&quot;eyebrow | fontWeight-bold fontSize-small color-heading&quot;&gt;Biffy Clyro&lt;/p&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Futique
						
					&lt;/h3&gt;
				
				&lt;/hgroup&gt;
				
				
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					I did not know this was coming out but this is good! I particularly liked True Believer and Two People In Love. This was a solid album, that sounds like exactly like them yet remains new and refreshing. Also, the singer’s Scottish accent shines through on certain syllables, and that’s particularly enjoyable.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 11&quot;&gt;
			
				
				&lt;a href=&quot;https://www.youtube.com/watch?v=jAys2t7NkPI&amp;list=OLAK5uy_lyskZjqUDRUJEN9GgRGMVum6Mq9zsLGfs&quot; class=&quot;floatster-media&quot; aria-label=&quot;Come of Age on youtube.com&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://lastfm.freetls.fastly.net/i/u/500x500/1762c6f6757957b1d8f75872d42bff66.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;500&quot; height=&quot;500&quot; loading=&quot;lazy&quot; /&gt;
					&lt;span class=&quot;floatster-praise&quot; aria-hidden=&quot;true&quot; title=&quot;Highly Recommended&quot;&gt;👍&lt;/span&gt;
				&lt;/a&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
				&lt;hgroup&gt;
					&lt;p class=&quot;eyebrow | fontWeight-bold fontSize-small color-heading&quot;&gt;Princess Goes (to the Butterfly Museum)&lt;/p&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Come of Age
						&lt;span class=&quot;visually-hidden&quot;&gt;(Highly Recommended)&lt;/span&gt;
					&lt;/h3&gt;
				
				&lt;/hgroup&gt;
				
				
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					After watching Dexter: New Blood, I guess the YouTube algorithm figured me out? It suggested a video with Michael C. Hall, and… the man can sing! With his bandmates Peter and Matt, they make some psychedelic-flavoured synth-rock I did not know I needed. Hall sounds very much like David Bowie, which is surprising given I mostly know him for the stone cold serial killer in Dexter, but I remember he did that Skittle musical once upon a time… Listen to &amp;quot;Blur&amp;quot;, I adore it.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 12&quot;&gt;
			
				
				&lt;a href=&quot;https://www.youtube.com/watch?v=SnMyroAH0rg&amp;list=PLVhjwEM59tQRlOFYqn5ZffkChnlXtP3DO&quot; class=&quot;floatster-media&quot; aria-label=&quot;TRON: Ares (Original Motion Picture Soundtrack) on youtube.com&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://lastfm.freetls.fastly.net/i/u/770x0/b5f8571028bc5789311a73d05bab36a0.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;500&quot; height=&quot;500&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/a&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
				&lt;hgroup&gt;
					&lt;p class=&quot;eyebrow | fontWeight-bold fontSize-small color-heading&quot;&gt;Nine Inch Nails&lt;/p&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						TRON: Ares (Original Motion Picture Soundtrack)
						
					&lt;/h3&gt;
				
				&lt;/hgroup&gt;
				
				
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					I love me some Nine Inch Nails. This soundtrack is pretty good and varied, but unsurprisingly, I am mostly into the main single: As Alive As You Need Me to Be, which feels like a proper NIN song, whereas the rest are more atmospheric and score-like than a standalone song, but still enjoyable. Bonus point for the TRON-ified NIN logo, very rad. (Unlike the movie, apparently… blame Jared Leto? &lt;code&gt;&amp;gt;Y/N&lt;/code&gt;)
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 13&quot;&gt;
			
				
				&lt;a href=&quot;https://officialthrice.bandcamp.com/album/horizons-west&quot; class=&quot;floatster-media&quot; aria-label=&quot;Horizons/West on officialthrice.bandcamp.com&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://lastfm.freetls.fastly.net/i/u/770x0/8ff79bc2e50fc5600db0c078883c88b7.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;500&quot; height=&quot;500&quot; loading=&quot;lazy&quot; /&gt;
					&lt;span class=&quot;floatster-praise&quot; aria-hidden=&quot;true&quot; title=&quot;Highly Recommended&quot;&gt;👍&lt;/span&gt;
				&lt;/a&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
				&lt;hgroup&gt;
					&lt;p class=&quot;eyebrow | fontWeight-bold fontSize-small color-heading&quot;&gt;Thrice&lt;/p&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Horizons/West
						&lt;span class=&quot;visually-hidden&quot;&gt;(Highly Recommended)&lt;/span&gt;
					&lt;/h3&gt;
				
				&lt;/hgroup&gt;
				
				
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					After a long wait, Horizons/West is here! East came out in 2021, and the title obviously teased at this “sequel”, and while waiting is never fun, it was worth it. East felt kind of gritty, rooted, while West feels smoother and aerial, for the most part, but without losing that raw sound. They’re my favourite band, and their sound evolves, aging like fine (dandelion) wine.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 14&quot;&gt;
			
				
				&lt;a href=&quot;https://khruangbin.bandcamp.com/album/the-universe-smiles-upon-you-ii&quot; class=&quot;floatster-media&quot; aria-label=&quot;The Universe Smiles Upon You ii on khruangbin.bandcamp.com&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://lastfm.freetls.fastly.net/i/u/500x500/65f59af10b59cd26654b8e167780327b.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;500&quot; height=&quot;500&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/a&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
				&lt;hgroup&gt;
					&lt;p class=&quot;eyebrow | fontWeight-bold fontSize-small color-heading&quot;&gt;Khruangbin&lt;/p&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						The Universe Smiles Upon You ii
						
					&lt;/h3&gt;
				
				&lt;/hgroup&gt;
				
				
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					I don’t listen to Khruangbin often, but when I do, I certainly enjoy the heck out of it. Their music is a lot more mellow compared to what I usually listen to, so it’s a good way for me to chill out and feel the music, and, maybe, just maybe, relax a little bit. This surprise album dropped right as I was heading into an extended weekend — perfect timing (just like their drummer — seeing live recordings, the guy keeps time like a machine!). The last song is just so calming… ☺️
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 15&quot;&gt;
			
				
				&lt;a href=&quot;https://www.youtube.com/watch?v=O0Zso2zx6Tk&amp;list=PLWnwFAnZO1AHnVyPqRMvJ2QWgXOqRs0Sn&amp;index=1&amp;pp=iAQB8AUB&quot; class=&quot;floatster-media&quot; aria-label=&quot;(self-titled) on youtube.com&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://lastfm.freetls.fastly.net/i/u/500x500/e155dd7e6dd5471fc7958b96b6e2c218.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;500&quot; height=&quot;500&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/a&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
				&lt;hgroup&gt;
					&lt;p class=&quot;eyebrow | fontWeight-bold fontSize-small color-heading&quot;&gt;Genesis&lt;/p&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						(self-titled)
						
					&lt;/h3&gt;
				
				&lt;/hgroup&gt;
				
				
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					Do not judge me too harshly: I had never listened to this album in full (or much of Genesis, despite loving their sound… and their Phil Collins, perhaps, a little, too). I regret that. What a great album this is… and what an opener! They perfectly represent the sound of the eighties with those roomy snares, synths, and effects.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;

	&lt;/div&gt;
&lt;/section&gt;

&lt;section class=&quot;fullsection&quot; aria-labelledby=&quot;fullsection-games&quot; style=&quot;--FS-bg: #de3329; --FS-palette-4: #ff4d6b; --FS-fill: #fdfff5;&quot; id=&quot;video-games&quot;&gt;
	&lt;div class=&quot;fullsection-head&quot;&gt;
		&lt;div class=&quot;fullsection-count&quot; aria-hidden=&quot;true&quot;&gt;14 entries&lt;/div&gt;
		&lt;h2 class=&quot;fullsection-title-wrapper&quot;&gt;
			&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 1280 380&quot; width=&quot;1280&quot; height=&quot;380&quot; class=&quot;fullsection-title&quot;&gt;
				&lt;title id=&quot;fullsection-games&quot;&gt;Video Games&lt;/title&gt;
				&lt;path fill=&quot;var(--FS-fill)&quot; d=&quot;M673.2138,170.4698c-1.0295-2.3997-1.5449-4.9043-1.5449-7.5134V60.8506c0-2.7434.5154-5.3164,1.5449-7.7188,1.0293-2.3997,2.4346-4.4587,4.2195-6.1765,1.7827-1.7139,3.8762-3.0881,6.2788-4.1162,2.3997-1.0295,4.9053-1.5449,7.5132-1.5449h102.106c5.488,0,10.1196,1.8884,13.895,5.6611,3.7729,3.7769,5.6611,8.4084,5.6611,13.8953v31.7026c0,.8228-.3435,1.7849-1.0293,2.8816l-33.1428,32.9375c-.8228.824-1.7178,1.2346-2.6763,1.2346h-47.5532c-2.6077,0-3.9111-1.302-3.9111-3.9109v-27.585c0-2.6052,1.3035-3.9111,3.9111-3.9111h49.2v-17.7041h-70.6084v70.6099h101.8992c1.0964,0,2.0227.4106,2.7795,1.2349.7517.8228,1.1313,1.7849,1.1313,2.8816v27.3796c0,2.6077-1.3057,3.9109-3.9109,3.9109h-117.7512c-2.6079,0-5.1135-.5139-7.5132-1.5435-2.4026-1.0295-4.4961-2.436-6.2788-4.2209-1.7849-1.7812-3.1902-3.875-4.2195-6.2786ZM471.0246,182.5127h27.585c2.6052,0,3.9111-1.3032,3.9111-3.9109V45.2054c0-2.6052-1.3059-3.9111-3.9111-3.9111h-27.585c-2.6089,0-3.9124,1.3059-3.9124,3.9111v133.3965c0,2.6077,1.3035,3.9109,3.9124,3.9109ZM828.3662,170.4698c-1.0293-2.3997-1.5447-4.9043-1.5447-7.5134V60.8506c0-2.7434.5154-5.3164,1.5447-7.7188,1.0295-2.3997,2.4348-4.4587,4.2197-6.1765,1.7825-1.7139,3.8762-3.0881,6.2786-4.1162,2.3999-1.0295,4.9055-1.5449,7.5132-1.5449h102.106c5.488,0,10.1199,1.8884,13.8953,5.6611,3.7727,3.7769,5.6611,8.4084,5.6611,13.8953v102.1057c0,2.6091-.5142,5.1138-1.5435,7.5134-1.0295,2.4036-2.4026,4.4973-4.1177,6.2786-1.718,1.7849-3.7754,3.1914-6.1753,4.2209-2.4023,1.0295-4.9766,1.5435-7.72,1.5435h-102.106c-2.6077,0-5.1133-.5139-7.5132-1.5435-2.4023-1.0295-4.4961-2.436-6.2786-4.2209-1.7849-1.7812-3.1902-3.875-4.2197-6.2786ZM862.2297,147.1058h70.6086v-70.6099h-70.6086v70.6099ZM872.8442,197.4877h-102.106c-2.6077,0-5.1135.5151-7.5132,1.5447-2.4026,1.0281-4.4961,2.4023-6.2786,4.1165-1.7852,1.7178-3.1904,3.7766-4.2197,6.1763-1.0293,2.4026-1.5449,4.9753-1.5449,7.7188v102.106c0,2.6091.5156,5.1135,1.5449,7.5132,1.0293,2.4038,2.4346,4.4976,4.2197,6.2786,1.7825,1.7852,3.876,3.1917,6.2786,4.2209,2.3997,1.0295,4.9055,1.5435,7.5132,1.5435h117.7512c2.6052,0,3.9111-1.3032,3.9111-3.9109v-27.3796c0-1.0964-.3799-2.0588-1.1316-2.8816-.7568-.824-1.6829-1.2346-2.7795-1.2346h-101.8992v-70.6099h70.6086v17.7041h-49.2002c-2.6077,0-3.9111,1.3057-3.9111,3.9109v27.585c0,2.6091,1.3035,3.9109,3.9111,3.9109h47.5532c.9585,0,1.8535-.4106,2.6763-1.2346l33.1428-32.9375c.6858-1.0964,1.0295-2.0588,1.0295-2.8816v-31.7026c0-5.4868-1.8884-10.1184-5.6611-13.895-3.7754-3.7729-8.4072-5.6611-13.8953-5.6611ZM1043.6418,232.6894c2.6052,0,3.9111-1.302,3.9111-3.9111v-27.3796c0-2.6052-1.3059-3.9109-3.9111-3.9109h-117.751c-2.6079,0-5.1135.5151-7.5134,1.5447-2.4023,1.0281-4.4961,2.4023-6.2786,4.1165-1.7849,1.7178-3.1902,3.7766-4.2197,6.1763-1.0293,2.4026-1.5447,4.9753-1.5447,7.7188v31.7026c0,1.1006.4119,2.0588,1.2361,2.8816l32.936,32.9375c.8242.824,1.7153,1.2346,2.6763,1.2346h69.1685v17.499h-102.1045c-1.1006,0-2.0266.4106-2.7795,1.2346-.7556.8228-1.1328,1.7852-1.1328,2.8816v27.3796c0,2.6077,1.3032,3.9109,3.9124,3.9109h117.7498c2.7434,0,5.3176-.5139,7.72-1.5435,2.3999-1.0293,4.4575-2.4358,6.1753-4.2209,1.7153-1.781,3.0884-3.8748,4.1177-6.2786,1.0293-2.3997,1.5435-4.9041,1.5435-7.5132v-31.7026c0-.8228-.3435-1.7812-1.0293-2.8816l-33.1428-32.9375c-.8228-.8228-1.718-1.2346-2.6763-1.2346h-68.9619v-17.7041h101.8992ZM717.4026,197.4877h-48.9949c-5.4907,0-10.1223,1.8882-13.8953,5.6611-3.7766,3.7766-5.6611,8.4082-5.6611,13.895v86.2554h-17.7041v-86.2554c0-2.7434-.5142-5.3162-1.5435-7.7188-1.0293-2.3997-2.4385-4.4585-4.2197-6.1763-1.7849-1.7141-3.8438-3.0884-6.1765-4.1165-2.3352-1.0295-4.8718-1.5447-7.6165-1.5447h-49.2002c-2.6079,0-5.1135.5151-7.5134,1.5447-2.4023,1.0281-4.4961,2.4023-6.2786,4.1165-1.7849,1.7178-3.1902,3.7766-4.2197,6.1763-1.0293,2.4026-1.5447,4.9753-1.5447,7.7188v117.7512c0,2.6077,1.3032,3.9109,3.9124,3.9109h27.585c2.6052,0,3.9111-1.3032,3.9111-3.9109v-102.1057h17.4973v86.4604c0,2.6091.5154,5.1135,1.5435,7.5132,1.0295,2.4038,2.436,4.4976,4.2209,6.2786,1.7812,1.7852,3.8762,3.1917,6.2786,4.2209,2.3999,1.0295,4.9729,1.5435,7.72,1.5435h48.9937c2.7432,0,5.3174-.5139,7.7197-1.5435,2.3999-1.0293,4.4575-2.4358,6.1753-4.2209,1.7153-1.781,3.0884-3.8748,4.1177-6.2786,1.0293-2.3997,1.5435-4.9041,1.5435-7.5132v-86.4604h17.7041v102.1057c0,2.6077,1.302,3.9109,3.9111,3.9109h27.585c2.6052,0,3.9109-1.3032,3.9109-3.9109v-117.7512c0-5.4868-1.9231-10.1184-5.7632-13.895-3.8438-3.7729-8.5117-5.6611-13.9983-5.6611ZM369.7544,197.4877h-117.7512c-2.6077,0-5.1133.5151-7.5132,1.5447-2.4023,1.0281-4.4961,2.4023-6.2786,4.1165-1.7849,1.7178-3.1902,3.7766-4.2197,6.1763-1.0295,2.4026-1.5447,4.9753-1.5447,7.7188v102.106c0,2.6091.5151,5.1135,1.5447,7.5132,1.0295,2.4038,2.4348,4.4976,4.2197,6.2786,1.7825,1.7852,3.8762,3.1917,6.2786,4.2209,2.3999,1.0295,4.9055,1.5435,7.5132,1.5435h117.7512c2.6052,0,3.9111-1.3032,3.9111-3.9109v-47.3479c0-.8228-.3435-1.7812-1.0295-2.8816l-33.1426-32.9375c-.8228-.8228-1.718-1.2346-2.6763-1.2346h-47.5535c-2.6077,0-3.9109,1.3057-3.9109,3.9109v27.585c0,2.6091,1.3032,3.9109,3.9109,3.9109h49.2002v17.499h-70.6086v-70.6099h101.8992c2.6052,0,3.9111-1.302,3.9111-3.9111v-27.3796c0-2.6052-1.3059-3.9109-3.9111-3.9109ZM509.2614,197.4877h-117.7498c-2.6091,0-3.9124,1.3057-3.9124,3.9109v27.3796c0,2.6091,1.3032,3.9111,3.9124,3.9111h102.1045v70.6099h-70.6086v-17.499h48.9937c2.605,0,3.9109-1.3018,3.9109-3.9109v-27.585c0-2.6052-1.3059-3.9109-3.9109-3.9109h-47.5535c-.9609,0-1.8521.4119-2.676,1.2346l-32.9363,32.9375c-.824.824-1.2361,1.7849-1.2361,2.8816v31.7026c0,2.6091.5154,5.1135,1.5449,7.5132,1.0293,2.4038,2.4346,4.4976,4.2197,6.2786,1.7822,1.7852,3.876,3.1917,6.2783,4.2209,2.3999,1.0295,4.9055,1.5435,7.5134,1.5435h102.1057c2.7437,0,5.3176-.5139,7.7202-1.5435,2.3997-1.0293,4.4573-2.4358,6.175-4.2209,1.7153-1.781,3.0881-3.8748,4.1177-6.2786,1.0295-2.3997,1.5435-4.9041,1.5435-7.5132v-102.106c0-5.4868-1.8884-10.1184-5.6611-13.895-3.7754-3.7729-8.407-5.6611-13.8953-5.6611ZM315.8723,182.5127h100.4578c.9583,0,1.8535-.4119,2.6763-1.2346l33.1428-32.9375c.6858-1.0967,1.0293-1.9878,1.0293-2.6763V45.2054c0-2.6052-1.3059-3.9111-3.9111-3.9111h-27.3794c-2.6079,0-3.9111,1.3059-3.9111,3.9111v101.9004h-70.6086V45.2054c0-2.6052-1.3057-3.9111-3.9109-3.9111h-27.585c-2.6091,0-3.9124,1.3059-3.9124,3.9111v133.3965c0,2.6077,1.3032,3.9109,3.9124,3.9109ZM656.7058,75.4664l-33.1428-32.9375c-.8228-.8228-1.718-1.2346-2.6763-1.2346h-100.4578c-2.6091,0-3.9124,1.3032-3.9124,3.9109v133.3965c0,2.6052,1.3032,3.9111,3.9124,3.9111h27.585c2.6052,0,3.9109-1.3059,3.9109-3.9111v-101.9004h70.6086v70.4045h-49.2002c-1.0991,0-2.0264.4106-2.7781,1.2349-.7571.8228-1.1328,1.7849-1.1328,2.8816v27.3796c0,2.6077,1.3032,3.9109,3.9109,3.9109h64.8455c2.7434,0,5.3176-.5139,7.72-1.5435,2.3999-1.0295,4.4575-2.436,6.1753-4.2209,1.7153-1.7812,3.0884-3.875,4.1177-6.2786,1.0293-2.3997,1.5435-4.9043,1.5435-7.5134v-84.8137c0-.6885-.3435-1.5796-1.0293-2.6763Z&quot;&gt;&lt;/path&gt;
			&lt;/svg&gt;
		&lt;/h2&gt;

		&lt;svg data-interacted=&quot;controller&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 740 680&quot; width=&quot;740&quot; height=&quot;680&quot; class=&quot;fullsection-illustration&quot; role=&quot;img&quot; aria-label=&quot;An old-school video game controller.&quot;&gt;
			&lt;g data-illu-part=&quot;health&quot; transform=&quot;translate(0 200)&quot; fill=&quot;var(--FS-palette-1)&quot;&gt;
				&lt;path d=&quot;M465.02 64.71V45.69H350.89v19.02h-19.02v57.07h19.02v19.02h19.02v19.02h19.02v19.02h38.05v-19.02H446V140.8h19.02v-19.02h19.02V64.71z&quot;&gt;&lt;/path&gt;
				&lt;path fill=&quot;var(--FS-palette-4)&quot; d=&quot;M455.51 74.22V55.2h-38.04v19.02h-19.02V55.2h-38.04v19.02h-19.03v38.04h19.03v19.02h19.02v19.02h19.02v19.02h19.02V150.3h19.02v-19.02h19.02v-19.02h19.02V74.22z&quot;&gt;&lt;/path&gt;
				&lt;polygon points=&quot;380.2062 84.0323 358.7731 84.0323 358.7731 94.7488 369.4896 94.7488 369.4896 73.3158 380.2062 73.3158 380.2062 84.0323&quot;&gt;&lt;/polygon&gt;
				&lt;path d=&quot;M518.02 99.45H507.3V78.02h10.72zm0 0v10.72h10.71V99.45zm10.71 21.44h10.72v-10.72h-10.72zm-10.71 21.43h10.71v-21.43h-10.71zm-10.72 21.43h10.72v-21.43H507.3zm42.87-85.73v21.43h10.71V78.02zm-10.72 32.15h10.72V99.45h-10.72zm0 32.15h10.72v-21.43h-10.72zm10.72 21.43h10.71v-21.43h-10.71zm42.86-32.15h-10.71v21.44h10.71zm0 21.44v10.71h21.44v-10.71zm0-96.45h-10.71v53.58h10.71zm21.44 0V45.87h-21.44V56.6zm0 0v53.58h-21.44v10.72h21.44v32.15h10.71V56.59zm42.86 75.01h-10.71v21.44h10.71zm0 21.44v10.71h21.44v-10.71zm0-96.45h-10.71v53.58h10.71zm21.44 0V45.87h-21.44V56.6zm0 0v53.58h-21.44v10.72h21.44v32.15h10.71V56.59z&quot;&gt;&lt;/path&gt;
			&lt;/g&gt;

			&lt;rect width=&quot;711.54&quot; height=&quot;307.51&quot; x=&quot;14.23&quot; y=&quot;208.16&quot; fill=&quot;var(--FS-palette-2)&quot; stroke=&quot;var(--FS-palette-1)&quot; stroke-width=&quot;2&quot; rx=&quot;9.92&quot; ry=&quot;9.92&quot;&gt;&lt;/rect&gt;
			&lt;rect width=&quot;667.74&quot; height=&quot;234.17&quot; x=&quot;36.13&quot; y=&quot;258.7&quot; fill=&quot;var(--FS-palette-3)&quot; rx=&quot;3.04&quot; ry=&quot;3.04&quot;&gt;&lt;/rect&gt;
			&lt;g stroke=&quot;var(--FS-palette-1)&quot;&gt;
				&lt;rect width=&quot;196.01&quot; height=&quot;67.51&quot; x=&quot;245.5&quot; y=&quot;391.2&quot; fill=&quot;var(--FS-palette-2)&quot; stroke-width=&quot;2&quot; rx=&quot;11.68&quot; ry=&quot;11.68&quot;&gt;&lt;/rect&gt;
				&lt;g fill=&quot;var(--FS-palette-3)&quot; stroke-width=&quot;2&quot;&gt;
					&lt;rect width=&quot;57.86&quot; height=&quot;23.72&quot; x=&quot;268.58&quot; y=&quot;412.15&quot; rx=&quot;11.86&quot; ry=&quot;11.86&quot;&gt;&lt;/rect&gt;
					&lt;rect width=&quot;57.86&quot; height=&quot;23.72&quot; x=&quot;360.58&quot; y=&quot;412.15&quot; rx=&quot;11.86&quot; ry=&quot;11.86&quot;&gt;&lt;/rect&gt;
				&lt;/g&gt;
			&lt;/g&gt;
			
			&lt;path fill=&quot;var(--FS-palette-2)&quot; stroke=&quot;var(--FS-palette-1)&quot; stroke-width=&quot;2&quot; d=&quot;M201.22 361.83H172.8a4 4 0 0 1-4.02-4.01V329.4a8.36 8.36 0 0 0-8.36-8.36h-41.95a8.36 8.36 0 0 0-8.36 8.36v28.42c0 2.22-1.8 4.01-4.01 4.01H77.68a8.36 8.36 0 0 0-8.36 8.36v41.96a8.36 8.36 0 0 0 8.36 8.35h28.42c2.21 0 4.01 1.8 4.01 4.02v28.42a8.36 8.36 0 0 0 8.36 8.36h41.95a8.36 8.36 0 0 0 8.36-8.36v-28.42c0-2.22 1.8-4.02 4.02-4.02h28.42a8.36 8.36 0 0 0 8.35-8.35v-41.96a8.36 8.36 0 0 0-8.35-8.36Z&quot;&gt;&lt;/path&gt;
			&lt;path fill=&quot;var(--FS-palette-3)&quot; stroke=&quot;var(--FS-palette-1)&quot; d=&quot;M118.47 454.71c-.98 0-1.78-.8-1.78-1.77v-33.75c0-2.9-2.36-5.27-5.26-5.27H77.68c-.98 0-1.78-.8-1.78-1.77v-41.96c0-.98.8-1.77 1.78-1.77h33.75c2.9 0 5.26-2.36 5.26-5.27V329.4c0-.98.8-1.78 1.78-1.78h41.96c.98 0 1.77.8 1.77 1.78v33.75c0 2.9 2.36 5.27 5.27 5.27h33.75c.98 0 1.77.8 1.77 1.77v41.96c0 .98-.8 1.77-1.77 1.77h-33.75a5.27 5.27 0 0 0-5.27 5.27v33.75c0 .98-.8 1.78-1.78 1.78z&quot;&gt;&lt;/path&gt;

			&lt;g stroke=&quot;var(--FS-palette-1)&quot;&gt;
				&lt;circle cx=&quot;139.45&quot; cy=&quot;391.17&quot; r=&quot;14.15&quot; fill=&quot;none&quot;&gt;&lt;/circle&gt;
				&lt;g fill=&quot;var(--FS-palette-2)&quot;&gt;
					&lt;path d=&quot;M153.7422,351.2985l-14.1308-14.0176c-.0907-.0899-.2369-.0899-.3275,0l-14.1313,14.0176c-.1474.1462-.0439.3976.1638.3976h3.604c.1284,0,.2325.1041.2325.2325v10.6683c0,.1284.1041.2325.2325.2325h20.124c.1284,0,.2325-.1041.2325-.2325v-10.6683c0-.1284.1041-.2325.2325-.2325h3.604c.2076,0,.3111-.2514.1638-.3976Z&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;M99.5764,376.8746l-14.0176,14.1308c-.0899.0907-.0899.2369,0,.3275l14.0176,14.1313c.1462.1474.3976.0439.3976-.1638v-3.604c0-.1284.1041-.2325.2325-.2325h10.6683c.1284,0,.2325-.1041.2325-.2325v-20.124c0-.1284-.1041-.2325-.2325-.2325h-10.6683c-.1284,0-.2325-.1041-.2325-.2325v-3.604c0-.2076-.2514-.3111-.3976-.1638Z&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;M125.1525,431.0404l14.1308,14.0176c.0907.0899.2369.0899.3275,0l14.1313-14.0176c.1474-.1462.0439-.3976-.1638-.3976h-3.604c-.1284,0-.2325-.1041-.2325-.2325v-10.6683c0-.1284-.1041-.2325-.2325-.2325h-20.124c-.1284,0-.2325.1041-.2325.2325v10.6683c0,.1284-.1041.2325-.2325.2325h-3.604c-.2076,0-.3111.2514-.1638&quot;&gt;&lt;/path&gt;
					&lt;path d=&quot;M179.3183,405.4643l14.0176-14.1308c.0899-.0907.0899-.2369,0-.3275l-14.0176-14.1313c-.1462-.1474-.3976-.0439-.3976.1638v3.604c0,.1284-.1041.2325-.2325.2325h-10.6683c-.1284,0-.2325.1041-.2325.2325v20.124c0,.1284.1041.2325.2325.2325h10.6683c.1284,0,.2325.1041.2325.2325v3.604c0,.2076.2514.3111.3976.1638Z&quot;&gt;&lt;/path&gt;
				&lt;/g&gt;
			&lt;/g&gt;
			&lt;g stroke=&quot;var(--FS-palette-1)&quot; stroke-width=&quot;2&quot;&gt;
				&lt;g fill=&quot;var(--FS-palette-2)&quot;&gt;
					&lt;rect width=&quot;77.84&quot; height=&quot;77.84&quot; x=&quot;474.35&quot; y=&quot;386.75&quot; rx=&quot;5.86&quot; ry=&quot;5.86&quot;&gt;&lt;/rect&gt;
					&lt;rect width=&quot;77.84&quot; height=&quot;77.84&quot; x=&quot;567.48&quot; y=&quot;386.75&quot; rx=&quot;5.86&quot; ry=&quot;5.86&quot;&gt;&lt;/rect&gt;
				&lt;/g&gt;

				&lt;g fill=&quot;var(--FS-palette-3)&quot;&gt;
					&lt;circle cx=&quot;513.27&quot; cy=&quot;425.67&quot; r=&quot;30.08&quot;&gt;&lt;/circle&gt;
					&lt;circle cx=&quot;606.4&quot; cy=&quot;425.67&quot; r=&quot;30.08&quot;&gt;&lt;/circle&gt;
				&lt;/g&gt;
			&lt;/g&gt;
			&lt;g fill=&quot;var(--FS-palette-2)&quot;&gt;
				&lt;path d=&quot;M242.31 258.7h199.2v24.08a8.75 8.75 0 0 1-8.74 8.75h-181.7a8.75 8.75 0 0 1-8.76-8.75z&quot;&gt;&lt;/path&gt;
				&lt;rect width=&quot;199.2&quot; height=&quot;32.83&quot; x=&quot;242.31&quot; y=&quot;302.49&quot; rx=&quot;8.75&quot; ry=&quot;8.75&quot;&gt;&lt;/rect&gt;
				&lt;rect width=&quot;199.2&quot; height=&quot;32.83&quot; x=&quot;242.31&quot; y=&quot;346.27&quot; rx=&quot;8.75&quot; ry=&quot;8.75&quot;&gt;&lt;/rect&gt;
				&lt;path d=&quot;M251.06 475.01h181.7a8.75 8.75 0 0 1 8.76 8.75v9.47h-199.2v-9.47a8.75 8.75 0 0 1 8.74-8.75&quot;&gt;&lt;/path&gt;
			&lt;/g&gt;
			&lt;rect width=&quot;667.74&quot; height=&quot;234.17&quot; x=&quot;36.13&quot; y=&quot;258.7&quot; fill=&quot;none&quot; stroke=&quot;var(--FS-palette-1)&quot; stroke-width=&quot;2&quot; rx=&quot;3.04&quot; ry=&quot;3.04&quot;&gt;&lt;/rect&gt;
			&lt;g fill=&quot;var(--FS-palette-4)&quot;&gt;
				&lt;path d=&quot;M491.84 305.18h6.03l8.45 12.59v-12.59h6v18.05h-6l-8.47-12.59v12.59h-6.01zm39.53 11.96c0 3.73-3.84 6.73-8.57 6.73s-8.57-3-8.57-6.73 3.83-6.73 8.57-6.73 8.57 3 8.57 6.73m-8.61 5.24c1.17 0 2.4-.8 2.4-2.7v-5.1c0-1.9-1.23-2.68-2.4-2.68s-2.39.77-2.4 2.68l-.01 5.1c0 1.9 1.24 2.7 2.4 2.7m18.45 1.51c-3.6 0-7.94-1.51-7.94-4.2h5.49v.9c0 1.02 1.08 1.83 2.41 1.83s2.42-.81 2.42-1.82c0-2.72-10.32-1.34-10.32-6 0-3.5 4.35-4.2 7.94-4.2s7.94 1.5 7.94 4.2h-5.5v-.9c0-1-1.07-1.82-2.4-1.82-1.34 0-2.42.81-2.42 1.82 0 2.72 10.32 1.34 10.32 6 0 3.5-4.35 4.2-7.94 4.2m10.27-12.68h-3.17v-1.78h3.17V307h5.87v2.43h3.15v1.78h-3.15v11.98h-5.87zm18.95.62v-.67h5.81v12.07h-5.81v-.7a7.7 7.7 0 0 1-6.75.44c-.53-.23-4.02-1.76-4.02-5.94 0-3.02 2.93-6.3 6.88-6.3a8 8 0 0 1 3.89 1.1m.03 3.19c0-1.86-1.36-2.33-2.28-2.33-.94 0-2.3.47-2.3 2.33v4.28c0 1.85 1.36 2.34 2.3 2.34.92 0 2.3-.49 2.3-2.34zm9.14 8.2V303.4h5.87v19.83zm18.54-11.4v-.66h5.82v11.3c0 3.74-3.46 6.74-8.23 6.74-3.96 0-8.25-1.91-8.25-4.91h5.86s-.02.05-.02.72c0 2.2 1.55 2.68 2.41 2.68s2.41-.49 2.41-2.68v-2.49a7.7 7.7 0 0 1-6.75.45c-.52-.23-4.01-1.76-4.01-5.94 0-3.02 2.93-6.3 6.87-6.3a8 8 0 0 1 3.9 1.1m.04 3.2c0-1.86-1.37-2.33-2.29-2.33-.93 0-2.3.47-2.3 2.33v4.28c0 1.85 1.37 2.34 2.3 2.34s2.3-.49 2.3-2.34zm9.14-9.84h5.87v3.68h-5.87zm.02 6.05h5.85v12h-5.85zm24.9 5.91c0 3.73-3.84 6.73-8.58 6.73s-8.57-3-8.57-6.73 3.84-6.73 8.57-6.73 8.57 3 8.57 6.73m-8.61 5.24c1.17 0 2.4-.8 2.4-2.7v-5.1c0-1.9-1.23-2.68-2.4-2.68s-2.4.77-2.4 2.68l-.02 5.1c0 1.9 1.25 2.7 2.42 2.7&quot;&gt;&lt;/path&gt;

				&lt;path d=&quot;M255.24 366h9.86v-1.85h-6.16q-3.7 0-3.7-3.34 0-3.43 3.7-3.43h8.62v2.46h-9.85v1.85h6.15q3.7 0 3.7 3.39c0 3.39-1.23 3.38-3.7 3.38h-8.62z&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M281.75 368.46h-8.62q-3.7 0-3.7-3.7v-7.38h12.32v2.46h-9.85v1.85h9.85v2.46h-9.85v.62q0 1.23 1.23 1.23h8.62z&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M286.14 357.38v7.39q0 1.23 1.23 1.23h8.62v2.46h-8.62q-3.7 0-3.7-3.7v-7.38z&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M310.16 368.46h-8.62q-3.7 0-3.7-3.7v-7.38h12.32v2.46h-9.86v1.85h9.86v2.46h-9.86v.62q0 1.23 1.24 1.23h8.62z&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M324.35 368.46h-8.62q-3.7 0-3.7-3.7v-3.69q0-3.7 3.7-3.7h8.62v2.47h-8.62q-1.23 0-1.23 1.23v3.7q0 1.23 1.23 1.23h8.62z&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M326.23 357.38h12.31v2.46h-4.92v8.62h-2.47v-8.62h-4.92z&quot;&gt;&lt;/path&gt;

				&lt;path d=&quot;M351.7 366h9.85v-1.85h-6.16q-3.7 0-3.7-3.34 0-3.43 3.7-3.43h8.62v2.46h-9.85v1.85h6.16q3.7 0 3.7 3.39c0 3.39-1.24 3.38-3.7 3.38h-8.62z&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M367.2 357.38h12.32v2.46h-4.93v8.62h-2.46v-8.62h-4.93z&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M385.14 365.38v3.08h-2.46v-7.39q0-3.7 3.7-3.7h4.92q3.7 0 3.7 3.7v7.4h-2.47v-3.09zm7.4-2.46v-1.85q0-1.23-1.24-1.23h-4.92q-1.24 0-1.24 1.23v1.85z&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M400.76 364.15v4.31h-2.47v-11.08h8.63q3.7 0 3.7 3.37 0 1.6-.54 2.36.53.87.53 2.27v3.08h-2.46v-3.08q0-1.23-1.23-1.23zm0-2.46h7.39v-1.85h-7.4z&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M413.77 357.38h12.32v2.46h-4.93v8.62h-2.46v-8.62h-4.93z&quot;&gt;&lt;/path&gt;
				
				&lt;path d=&quot;M534.52 486.07v-14.46h11.25q4.82 0 4.82 4.37a5 5 0 0 1-.77 2.87q.77 1.05.77 2.84 0 4.38-4.82 4.38zm3.21-8.83h9.64v-2.41h-9.64zm0 5.62h9.64v-2.4h-9.64z&quot;&gt;&lt;/path&gt;
				&lt;path d=&quot;M630.86 482.06v4.01h-3.21v-9.63q0-4.83 4.82-4.83h6.43q4.82 0 4.82 4.83v9.63h-3.22v-4.01zm9.64-3.21v-2.42q0-1.6-1.6-1.6h-6.43q-1.6 0-1.6 1.6v2.42z&quot;&gt;&lt;/path&gt;
			&lt;/g&gt;

			&lt;foreignObject x=&quot;266.8092&quot; y=&quot;409.4669&quot; width=&quot;61.4012&quot; height=&quot;29.0767&quot;&gt;
				&lt;button type=&quot;button&quot; class=&quot;button-reset | fullsection-illustration-button&quot; data-interaction=&quot;controller-select&quot; data-input=&quot;select&quot;&gt;
					&lt;span class=&quot;visually-hidden&quot;&gt;Select&lt;/span&gt;
				&lt;/button&gt;
			&lt;/foreignObject&gt;
			&lt;foreignObject x=&quot;358.8096&quot; y=&quot;409.4669&quot; width=&quot;61.4012&quot; height=&quot;29.0767&quot;&gt;
				&lt;button type=&quot;button&quot; class=&quot;button-reset | fullsection-illustration-button&quot; data-interaction=&quot;controller-start&quot; data-input=&quot;start&quot;&gt;
					&lt;span class=&quot;visually-hidden&quot;&gt;Start&lt;/span&gt;
				&lt;/button&gt;
			&lt;/foreignObject&gt;
			&lt;foreignObject x=&quot;123.448&quot; y=&quot;334.0222&quot; width=&quot;31.9987&quot; height=&quot;31.9987&quot;&gt;
				&lt;button type=&quot;button&quot; class=&quot;button-reset | fullsection-illustration-button&quot; data-interaction=&quot;controller-up&quot; data-input=&quot;u&quot;&gt;
					&lt;span class=&quot;visually-hidden&quot;&gt;D-pad Up&lt;/span&gt;
				&lt;/button&gt;
			&lt;/foreignObject&gt;
			&lt;foreignObject x=&quot;164.596&quot; y=&quot;375.1701&quot; width=&quot;31.9987&quot; height=&quot;31.9987&quot;&gt;
				&lt;button type=&quot;button&quot; class=&quot;button-reset | fullsection-illustration-button&quot; data-interaction=&quot;controller-right&quot; data-input=&quot;r&quot;&gt;
					&lt;span class=&quot;visually-hidden&quot;&gt;D-pad Right&lt;/span&gt;
				&lt;/button&gt;
			&lt;/foreignObject&gt;
			&lt;foreignObject x=&quot;123.448&quot; y=&quot;416.3181&quot; width=&quot;31.9987&quot; height=&quot;31.9987&quot;&gt;
				&lt;button type=&quot;button&quot; class=&quot;button-reset | fullsection-illustration-button&quot; data-interaction=&quot;controller-down&quot; data-input=&quot;d&quot;&gt;
					&lt;span class=&quot;visually-hidden&quot;&gt;D-pad Down&lt;/span&gt;
				&lt;/button&gt;
			&lt;/foreignObject&gt;
			&lt;foreignObject x=&quot;82.3001&quot; y=&quot;375.1701&quot; width=&quot;31.9987&quot; height=&quot;31.9987&quot;&gt;
				&lt;button type=&quot;button&quot; class=&quot;button-reset | fullsection-illustration-button&quot; data-interaction=&quot;controller-left&quot; data-input=&quot;l&quot;&gt;
					&lt;span class=&quot;visually-hidden&quot;&gt;D-pad Left&lt;/span&gt;
				&lt;/button&gt;
			&lt;/foreignObject&gt;
			&lt;foreignObject x=&quot;479.5746&quot; y=&quot;391.9678&quot; width=&quot;67.3979&quot; height=&quot;67.3979&quot;&gt;
				&lt;button type=&quot;button&quot; class=&quot;button-reset | fullsection-illustration-button&quot; data-interaction=&quot;controller-b&quot; data-input=&quot;b&quot;&gt;
					&lt;span class=&quot;visually-hidden&quot;&gt;B&lt;/span&gt;
				&lt;/button&gt;
			&lt;/foreignObject&gt;
			&lt;foreignObject x=&quot;572.7044&quot; y=&quot;391.9678&quot; width=&quot;67.3979&quot; height=&quot;67.3979&quot;&gt;
				&lt;button type=&quot;button&quot; class=&quot;button-reset | fullsection-illustration-button&quot; data-interaction=&quot;controller-a&quot; data-input=&quot;a&quot;&gt;
					&lt;span class=&quot;visually-hidden&quot;&gt;A&lt;/span&gt;
				&lt;/button&gt;
			&lt;/foreignObject&gt;
		&lt;/svg&gt;
	&lt;/div&gt;
	&lt;div class=&quot;fullsection-content | container | flow&quot;&gt;
		&lt;p&gt;
			I made some time for some gaming here and there (which, compared to all other media, is a lot, when I think about it…), and it is good to see it’s been pretty diverse for me this year between adventure, puzzle, and… wheeled sports? Not included below are my (mostly) daily puzzles like &lt;a href=&quot;https://tiledwords.com/puzzles/daily&quot;&gt;Tiled Words&lt;/a&gt;, &lt;a href=&quot;https://www.morningbrew.com/games/&quot;&gt;(mini) crosswords&lt;/a&gt;, and &lt;a href=&quot;https://sudoku.com/killer/expert/&quot;&gt;expert killer sudoku&lt;/a&gt;. I’m also really looking forward to 2026 with a few specific games like &lt;strong&gt;Control: Resonant&lt;/strong&gt;, and &lt;strong&gt;Star Wars: Galactic Racer&lt;/strong&gt; (and yes, &lt;strong&gt;GTA VI&lt;/strong&gt;, too), in addition to my backlog, such as &lt;strong&gt;A Plague Tale: Requiem&lt;/strong&gt; and &lt;strong&gt;Stray&lt;/strong&gt;, and maybe &lt;strong&gt;Disco Elysium&lt;/strong&gt;.
		&lt;/p&gt;
		
	

 
&lt;div class=&quot;floatster&quot; style=&quot;--FL-img-ratio: calc(600 / 800); --FL-seed: 234;&quot;&gt;
	&lt;ul class=&quot;floatster-list | flow&quot; data-flow-space=&quot;xl&quot;&gt;
	
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 1&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://images.igdb.com/igdb/image/upload/t_cover_big_2x/co5uzk.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;600&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Star Wars Jedi: Survivor
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 
	
	&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;icon-badge inline-icon inline-icon--center&quot; width=&quot;32&quot; height=&quot;16&quot;&gt;&lt;title&gt;PS5&lt;/title&gt;&lt;use xlink:href=&quot;#svg__gaming-ps5&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt;
 Respawn Entertainment (2023)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					I like a good value for my money but this game has so dang much to explore, it’s almost overwhelming but also well crafted. The story manages to stay interesting throughout (one gripe? the good-guy-turned-bad-guy trope which, in this universe, also means they absolutely &lt;em&gt;need&lt;/em&gt; to have a red light saber or something — &lt;em&gt;whyyyy&lt;/em&gt;), and gameplay remains fresh, though my main move was throwing enemies into chasms. Hell yeah.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 2&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://images.igdb.com/igdb/image/upload/t_cover_big_2x/co9brt.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;600&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Sniper Elite: Resistance
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 
	
	&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;icon-badge inline-icon inline-icon--center&quot; width=&quot;32&quot; height=&quot;16&quot;&gt;&lt;title&gt;PS5&lt;/title&gt;&lt;use xlink:href=&quot;#svg__gaming-ps5&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt;
 Rebellion Developments (2025)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					A little clunky in some parts, but I sniped nazis in the balls, killing them &lt;em&gt;instantly&lt;/em&gt;, so I had a lot of fun. I also saved after every risky action and reloaded when I got detected, so a 20-minute mission usually ended up being 3 hours for me. Absolutely appalling time management, but I love my stealth. This game has a section in my hometown and looks nothing like it, but that’s creative liberty, baby.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 3&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://images.igdb.com/igdb/image/upload/t_cover_big_2x/co54yu.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;600&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						BioShock Remastered
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 
	
	&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;icon-badge inline-icon inline-icon--center&quot; width=&quot;32&quot; height=&quot;16&quot;&gt;&lt;title&gt;PS4&lt;/title&gt;&lt;use xlink:href=&quot;#svg__gaming-ps4&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt;
 Blind Squirrel Games / 2K Games (2016)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					I watched my brother play this a bit, back when it came out on PS3 and I played the sequel (eh…) and BioShock Infinite (very nice), but never the original. I figured I would kindly like to see what this was all about. The game has aged a little but the atmosphere is still rich and expressive, despite controls which can be a little iffy, at times.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 4&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://images.igdb.com/igdb/image/upload/t_cover_big_2x/co7svw.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;600&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Epigraph
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 
	
	&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;icon-badge inline-icon inline-icon--center&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;title&gt;PC&lt;/title&gt;&lt;use xlink:href=&quot;#svg__gaming-pc&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt;
 Matthew Brown (2024)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					This is a linguistic puzzle game; that’s my jam. I’ll admit getting started was tough; I was at a total loss. Some help from a “quick start” guide in the Steam community forums really helped me shift my perspective and start understanding the game’s language system. I had picked up a few clues but remained unsure until this guide basically held my hand. Despite my not-totally-independent playthrough, it was a very enjoyable, minimalist game.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 5&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://images.igdb.com/igdb/image/upload/t_cover_big_2x/co26hb.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;600&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Yoku’s Island Express
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 
	
	&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;icon-badge inline-icon inline-icon--center&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;title&gt;PC&lt;/title&gt;&lt;use xlink:href=&quot;#svg__gaming-pc&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt;
 Villa Gorilla (2018)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					This is a cute little 2D platformer in which you play… a dung beetle. Carrying around its ball of… erm. Yoku cannot jump, but the game has jumping pads as well as pinball-like sections to move around and complete puzzles. Aside from a couple awkward controls to go exactly where you aim, it was an adorable little adventure which even had some side quests.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 6&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://images.igdb.com/igdb/image/upload/t_cover_big_2x/co9mzd.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;600&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					&lt;span class=&quot;floatster-praise&quot; aria-hidden=&quot;true&quot; title=&quot;Highly Recommended&quot;&gt;👍&lt;/span&gt;
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Blue Prince
						&lt;span class=&quot;visually-hidden&quot;&gt;(Highly Recommended)&lt;/span&gt;
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 
	
	&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;icon-badge inline-icon inline-icon--center&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;title&gt;PC&lt;/title&gt;&lt;use xlink:href=&quot;#svg__gaming-pc&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt;
 Dogubomb (2025)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					This is a rogue-puzzle game… what? We inherit our great-uncle’s 45-room mansion, but only get to keep it if we find room 46. This is a challenge due to getting tired, and having to restart every day, because the rooms change based on what you choose to “draw”. There’s a ton of strategy (and special items/effects), and surprisingly deep lore. Cool music, to boot!
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 7&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://images.igdb.com/igdb/image/upload/t_cover_big_2x/co6118.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;600&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Portal: Revolution
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 
	
	&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;icon-badge inline-icon inline-icon--center&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;title&gt;PC&lt;/title&gt;&lt;use xlink:href=&quot;#svg__gaming-pc&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt;
 Second Face Software (2024)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					This is a Portal 2 community-made mod (free, but requires the base game) that has its own integrated storyline, and includes original voice acting, as well as gameplay mechanics that feel familiar yet fresh, namely the pneumatic vents. It really feels like a genuine Portal 2 extension, and being a puzzle-game fiend, I had a great time (plus a couple of frustrating moments).
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 8&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://images.igdb.com/igdb/image/upload/t_cover_big_2x/co6yyq.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;600&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Thank Goodness You’re Here!
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 
	
	&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;icon-badge inline-icon inline-icon--center&quot; width=&quot;32&quot; height=&quot;16&quot;&gt;&lt;title&gt;PS5&lt;/title&gt;&lt;use xlink:href=&quot;#svg__gaming-ps5&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt;
 Coal Supper (2024)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					This had me laughing within a minute of starting, and the characters you meet are just so fucking weird, I loved it. There’s &lt;em&gt;a lot&lt;/em&gt; of strange stuff, and also the gardener is voiced by a man whose voice I’d recognise anywhere, &lt;em&gt;what a treat&lt;/em&gt;. TGYH is pretty short but jam packed with fun. And the in-game TV ads are wonderfully ridiculous. Peans!
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 9&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://images.igdb.com/igdb/image/upload/t_cover_big_2x/coac6d.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;600&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						skate.
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 
	
	&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;icon-badge inline-icon inline-icon--center&quot; width=&quot;32&quot; height=&quot;16&quot;&gt;&lt;title&gt;PS5&lt;/title&gt;&lt;use xlink:href=&quot;#svg__gaming-ps5&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt;
 Full Circle (2025)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					I got to alpha-test the game in early access, and while the feel was there for controls, everything else was just… dull, and soulless (the final release barely looks different). There’s even an AI kind of robot talking to you throughout — &lt;em&gt;yay&lt;/em&gt;. I like how it played, but the map feels way too small, and it did not capture my attention. It is free to play, for what it’s worth.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 10&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://images.igdb.com/igdb/image/upload/t_cover_big_2x/co9ipx.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;600&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					&lt;span class=&quot;floatster-praise&quot; aria-hidden=&quot;true&quot; title=&quot;Highly Recommended&quot;&gt;👍&lt;/span&gt;
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Death Stranding 2: On the Beach
						&lt;span class=&quot;visually-hidden&quot;&gt;(Highly Recommended)&lt;/span&gt;
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 
	
	&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;icon-badge inline-icon inline-icon--center&quot; width=&quot;32&quot; height=&quot;16&quot;&gt;&lt;title&gt;PS5&lt;/title&gt;&lt;use xlink:href=&quot;#svg__gaming-ps5&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt;
 Kojima Productions (2025)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					Yep, it’s time to get weird. The story is, once again, a wild ride, and a lot of pain points of the original game were addressed without making things too easy. There were still a fair share of challenges and I did get all the achievements, so I guess you could say I enjoyed it, despite the bonkers story you’d expect from Kojima. The soundtrack is also an absolute treat, particularly Low Roar.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 11&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://images.igdb.com/igdb/image/upload/t_cover_big_2x/co8ycw.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;600&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Wheel World
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 
	
	&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;icon-badge inline-icon inline-icon--center&quot; width=&quot;32&quot; height=&quot;16&quot;&gt;&lt;title&gt;PS5&lt;/title&gt;&lt;use xlink:href=&quot;#svg__gaming-ps5&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt;
 Messhof (2025)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					This is a indy-ish game where you play as a bike rider, earning reputation to win back stolen parts from a legendary bike, all to… save the world. The story is a little wacky but fits nicely given how the game presents bikes and races as something created by actual gods. There were some frustrating glitches and performance issues, but overall I had a lot of fun; it was a nice change of pace, and the music was surprisingly catchy!
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 12&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://images.igdb.com/igdb/image/upload/t_cover_big_2x/co9hou.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;600&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Tony Hawk’s Pro Skater 3+4
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 
	
	&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;icon-badge inline-icon inline-icon--center&quot; width=&quot;32&quot; height=&quot;16&quot;&gt;&lt;title&gt;PS5&lt;/title&gt;&lt;use xlink:href=&quot;#svg__gaming-ps5&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt;
 Iron Galaxy (2025)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					I played the absolute crap out of THPS3 on the PS2 back in the day, and I was very happy with the THPS1+2 remake, so this additional remake was a welcome release. I never played the 4th entry so I got a nice mix of nostalgia and new levels to explore. Some scores are still really tough to get but that’s part of the challenge. Really fun to (re)discover this!
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 13&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://images.igdb.com/igdb/image/upload/t_cover_big_2x/co9coo.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;600&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					&lt;span class=&quot;floatster-praise&quot; aria-hidden=&quot;true&quot; title=&quot;Highly Recommended&quot;&gt;👍&lt;/span&gt;
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Ghost of Yōtei
						&lt;span class=&quot;visually-hidden&quot;&gt;(Highly Recommended)&lt;/span&gt;
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 
	
	&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;icon-badge inline-icon inline-icon--center&quot; width=&quot;32&quot; height=&quot;16&quot;&gt;&lt;title&gt;PS5&lt;/title&gt;&lt;use xlink:href=&quot;#svg__gaming-ps5&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt;
 Sucker Punch Productions (2025)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					The follow-up to Ghost of Tsushima, which means: Japan, samurais, and cute foxes. The atmosphere is &lt;em&gt;on point&lt;/em&gt;. The game plays very nicely but gosh fucking dang it I suck at parrying. I got drawn in by Atsu’s story; a sequel done right that doesn’t stray too far from the original formula, and which improves here and there where needed. Oh and you can kick enemies off of cliffs, 10/10.
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		
		
		&lt;li class=&quot;floatster-item&quot; style=&quot;--i: 14&quot;&gt;
			
				
				&lt;div class=&quot;floatster-media&quot;&gt;
					&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/c_pad,w_250/https://images.igdb.com/igdb/image/upload/t_cover_big_2x/co9gam.jpg&quot; alt=&quot;&quot; class=&quot;floatster-image&quot; width=&quot;600&quot; height=&quot;800&quot; loading=&quot;lazy&quot; /&gt;
					
				&lt;/div&gt;
			
			&lt;div class=&quot;floatster-contents | flow&quot; style=&quot;--flow-space: var(--size-s);&quot;&gt;
				
					&lt;h3 data-toc=&quot;false&quot;&gt;
						Clair Obscur: Expedition 33
						
					&lt;/h3&gt;
				
				
				
					&lt;p class=&quot;eyeline | fontSize-small color-heading &quot;&gt;
						 
	
	&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;icon-badge inline-icon inline-icon--center&quot; width=&quot;32&quot; height=&quot;16&quot;&gt;&lt;title&gt;PS5&lt;/title&gt;&lt;use xlink:href=&quot;#svg__gaming-ps5&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt;
 Sandfall Interactive (2025)
					&lt;/p&gt;
				
				&lt;p class=&quot;fontSize-small&quot;&gt;
					I heard many good things so I jumped in. The game has a lot of cool ideas, and the story is pulls you in with ease, though there is a lot of strategy I’m likely missing out on. I had to switch to Easy mode pretty quickly: the dodge/parry timing was sucking all the joy out it combats (it wasn’t just Ghost of Yōtei!). I’ve been alternating between French and English languages, both are excellent performances all around. &lt;strong&gt;(not yet completed at time of writing)&lt;/strong&gt;
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;

	&lt;/div&gt;
&lt;/section&gt;

&lt;h2 id=&quot;personal&quot; tabindex=&quot;-1&quot;&gt;
&lt;a class=&quot;heading-anchor&quot; href=&quot;https://chriskirknielsen.com/blog/yearnotes-2025/#personal&quot;&gt;Personal&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;🩸 As I had mentioned in &lt;a href=&quot;https://chriskirknielsen.com/blog/2024-as-bullet-points/&quot;&gt;last year’s post&lt;/a&gt;, my yearly resolution would be to give blood again. And I did — twice — without fainting: great success! In the coming year, I’ll try to keep that trendline going up, or at least flat — I think I can handle it, so long as I eat enough prior!&lt;/p&gt;
&lt;p&gt;🏃‍♂️ I completed my second half-marathon in May, in slightly rainy conditions this time, with half-assed training after a long break in the winter. I immediately took a 3-month break after the race as it was getting too hot out, and I was absolutely shattered. But hey, I did it! Now I must consider if I can repeat the feat in 2026…&lt;/p&gt;
&lt;p&gt;🚄 Needing to get my passport renewed (I am a permanent United States resident, very fun these days), I planned a visit to the closest city with a consular office: Chicago! Having never been there, I got some recommendations over on Mastodon (thanks!), and proceeded to check out a few coffee spots, as well as the Art Institute and the 360 observation deck. The Art Deco architecture everywhere was also a real treat. I only stayed about a day due to hectic train schedules (2–10am one way, 6pm–4am the other) but really loved it, plus the weather was gorgeous.&lt;/p&gt;
&lt;h2 id=&quot;work&quot; tabindex=&quot;-1&quot;&gt;
&lt;a class=&quot;heading-anchor&quot; href=&quot;https://chriskirknielsen.com/blog/yearnotes-2025/#work&quot;&gt;Work&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;👨‍💻 I probably worked too much, didn’t take many days off (I had too many left so they didn’t all carry over…), and that’s not good, I get whiffs of burnout here and there. I’m glad I have teammates who are good, talented humans, to make the work more fun (and who put up with my terrible puns day in and day out). I gotta learn to take a break sometimes, eh?&lt;/p&gt;
&lt;p&gt;👕 I worked on a few designs this year: a couple of stickers (and a &lt;a href=&quot;https://cottonbureau.com/people/christopher-kirk-nielsen&quot;&gt;new CottonBureau shop&lt;/a&gt; with some existing designs), and commissioned work! A huge thanks to Mat Marquis for their trust on this &lt;a href=&quot;https://chriskirknielsen.com/designs/javascript-for-everyone/&quot;&gt;JavaScript for Everyone&lt;/a&gt; shirt, I loved working on it. I don’t do much design work any more, so I thoroughly enjoy these kinds of projects, especially because I get to design with aesthetics I like, about themes I hold dear: a perfect mix. More work to be announced…&lt;/p&gt;
&lt;h2 id=&quot;web-dev-things&quot; tabindex=&quot;-1&quot;&gt;
&lt;a class=&quot;heading-anchor&quot; href=&quot;https://chriskirknielsen.com/blog/yearnotes-2025/#web-dev-things&quot;&gt;Web Dev Things&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;🐛 I found a few browser bugs! &lt;em&gt;Most&lt;/em&gt; were fixed relatively quickly, too – remember to file ’em when you see ’em! As for spec stuff, I opened a proposal as I was playing with noise textures — &lt;a href=&quot;https://github.com/w3c/csswg-drafts/issues/13035&quot;&gt;background-rendering&lt;/a&gt;, anyone? — but turns out the &lt;code&gt;image-rendering&lt;/code&gt; does it fine, just… not in Safari. More like &lt;em&gt;Sigh-fari&lt;/em&gt;, am I right? I’ve also been frustrated with the state of styling alt text. Firefox has pretty decent options with &lt;code&gt;img::before&lt;/code&gt; (see &lt;a href=&quot;https://codepen.io/chriskirknielsen/pen/QwWBxoM&quot;&gt;CodePen demo&lt;/a&gt;), but Chrome is limited (&lt;a href=&quot;https://issues.chromium.org/issues/406271689&quot;&gt;issue #406271689&lt;/a&gt;), and Safari is even more limited, but to make things worse, hides the text if it wraps (&lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=290433&quot;&gt;my bug #290433&lt;/a&gt; was marked as a duplicate of &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=62774&quot;&gt;bug #62774&lt;/a&gt; from… 2011 🫠). I don’t expect much movement there, though I heard something about &lt;a href=&quot;https://toot.cafe/@bkardell/115498354712127686&quot;&gt;a &lt;code&gt;:broken&lt;/code&gt; pseudo-class&lt;/a&gt;…? I also have a spec proposal stuck in purgatory — definitely not a pressing matter, but I could sometimes make use of &lt;a href=&quot;https://github.com/w3c/csswg-drafts/issues/5273&quot;&gt;absolute values in a CSS &lt;code&gt;scale&lt;/code&gt; transformation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;🎨 I made a few fun CodePen demos, like &lt;a href=&quot;https://codepen.io/chriskirknielsen/pen/QwbZpaa&quot;&gt;skew-based rotation&lt;/a&gt; and &lt;a href=&quot;https://codepen.io/chriskirknielsen/pen/xbbbRKZ&quot;&gt;frosted glass filter&lt;/a&gt;. The &lt;a href=&quot;https://codepen.io/chriskirknielsen/pen/WbQZKeR&quot;&gt;&lt;code&gt;&amp;lt;dashing-button&amp;gt;&lt;/code&gt; component&lt;/a&gt; is one of those things I had to build after seeing bad (i.e. non-existing) transitions on dashed buttons. I also riffed off of Chris Coyier’s &lt;a href=&quot;https://codepen.io/chriskirknielsen/pen/QwyxPdq&quot;&gt;old school rounded tabs with fewer pseudo elements&lt;/a&gt;. Finally, I made &lt;a href=&quot;https://codepen.io/chriskirknielsen/pen/MYKwjNd&quot;&gt;&lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; expanding content below on a grid&lt;/a&gt; (hey that’s like, tabs or something), which was initially going to be the layout for this very post, but ultimately, I abandoned it due to accessibility and cross-browser issues.&lt;/p&gt;


&lt;div class=&quot;cp_embed_wrapper codepen | cellstack cellstack--center&quot; data-height=&quot;480&quot; data-default-tab=&quot;result&quot; data-slug-hash=&quot;WbQZKeR&quot; data-version=&quot;1&quot;&gt;
			&lt;div class=&quot;single-media&quot;&gt;
				&lt;img src=&quot;https://res.cloudinary.com/chriskirknielsen/image/fetch/https://shots.codepen.io/username/pen/WbQZKeR-512.webp?version=1782268123197&quot; alt=&quot;&quot; class=&quot;codepen-thumbnail&quot; width=&quot;512&quot; height=&quot;288&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; style=&quot;height: 480px;&quot; /&gt;
			&lt;/div&gt;
			&lt;a href=&quot;https://codepen.io/chriskirknielsen/pen/WbQZKeR&quot; class=&quot;button&quot;&gt;View on CodePen&lt;/a&gt;
		&lt;/div&gt;&lt;script async=&quot;&quot; src=&quot;https://public.codepenassets.com/embed/index.js&quot;&gt;&lt;/script&gt;

&lt;h2 id=&quot;thats-all-folks&quot; tabindex=&quot;-1&quot;&gt;
&lt;a class=&quot;heading-anchor&quot; href=&quot;https://chriskirknielsen.com/blog/yearnotes-2025/#thats-all-folks&quot;&gt;That’s All Folks!&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I might need to split these up to once every few months because this post is a little bit of a slog to read through — over 5,500 words, yikes, how did I have that much to write about? Either way, thanks for stopping by, remember to be kind, wash your behind, and hey: happy new year! 🎉&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;bonus-details-for-dorks&quot; tabindex=&quot;-1&quot;&gt;
&lt;a class=&quot;heading-anchor&quot; href=&quot;https://chriskirknielsen.com/blog/yearnotes-2025/#bonus-details-for-dorks&quot;&gt;Bonus: Details for Dorks&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you are a dork like me, here are the fonts (yay, fonts!), and inspiration for the illustrations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Books:&lt;/strong&gt; font is &lt;a href=&quot;https://simplebits.shop/products/parkly&quot;&gt;Parkly&lt;/a&gt;, illustration is based on a &lt;a href=&quot;https://unsplash.com/photos/stack-of-books-with-a-mug-on-top-JRhgwviZbqY&quot;&gt;photo by Ilinca Roman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shows:&lt;/strong&gt; font is &lt;a href=&quot;https://simplebits.shop/products/turbeau&quot;&gt;Turbeau&lt;/a&gt;, illustration is based on a cheap TV whose brand I cannot find&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Music:&lt;/strong&gt; font is &lt;a href=&quot;https://www.dafont.com/contour-generator.font&quot;&gt;Contour Generator&lt;/a&gt;, illustration is based on a Sony Walkman&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Movies:&lt;/strong&gt; font is &lt;a href=&quot;https://wehtt.am/fonts/#graph&quot;&gt;Graph (Paris)&lt;/a&gt;, illustration is based on a AnscoVision Dual 8MM/Super 8MM film projector&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Video Games:&lt;/strong&gt; font is &lt;a href=&quot;https://rostype.com/lkdown/&quot;&gt;Lkdown&lt;/a&gt;, illustration is based on a Nintendo Entertainment System controller&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I also had lots of fun with CSS/SVG/JS but I think that, besides thanking &lt;a href=&quot;https://social.lol/@tylersticka/115696450792695179&quot;&gt;Tyler Sticka for a way better solution&lt;/a&gt; for that &quot;Content customisation&quot; block’s legend-like style near the top (&lt;a href=&quot;https://cloudfour.com/thinks/faking-a-fieldset-legend/&quot;&gt;he even wrote all about it!&lt;/a&gt;), I am kind of done writing for the year. If you’re really curious about something, let me know &lt;a href=&quot;https://front-end.social/@chriskirknielsen&quot;&gt;on Mastodon&lt;/a&gt;. Toodeloo!&lt;/p&gt;


&lt;style&gt;.fullsection{--FS-palette-1:#fff;--FS-palette-2:#4c4c4c;--FS-palette-3:#303030;--FS-color:var(--FS-palette-1);--FS-max:1280px;--FS-radius:clamp(0px, (100vi - var(--FS-max))/2, var(--size-l));--FS-gap:var(--size-l);isolation:isolate;grid-column:--fullbleed;padding-block-start:var(--size-2xl)}.fullsection-head{--FS-head-inset:calc(var(--size-l) / 2);--FS-head-pad-y:var(--size-2xl);z-index:1;row-gap:var(--size-l);max-inline-size:var(--FS-max);padding-block:var(--FS-head-pad-y);color:var(--FS-color);border-radius:var(--FS-radius) var(--FS-radius) 0 0;background-color:var(--FS-bg,deeppink);background-image:linear-gradient(in oklch 0deg, #0003, #fff3);grid-template:&quot;.--title --illu.&quot;min(300px,67svb)&quot;. . . .&quot;1fr/minmax(0,1fr) min(750px,55%) min(550px,45%) minmax(0,1fr);margin-inline:auto;display:grid;position:relative;overflow:clip}.fullsection-head:before,.fullsection-head:after{content:&quot;&quot;;pointer-events:none;position:absolute}.fullsection-head:before{image-rendering:pixelated;mix-blend-mode:soft-light;opacity:.5;background-image:url(./noise.png);background-size:192px;inset:0}.fullsection-head:after{inset:var(--FS-head-inset) var(--FS-head-inset) auto;block-size:calc(100% - var(--FS-head-pad-y));border-radius:calc(var(--FS-radius) / 2) calc(var(--FS-radius) / 2) 0 0;background:linear-gradient(0deg, #000, #000) content-box no-repeat, radial-gradient(75% 75% at 100% 0, var(--FS-fill,var(--FS-color)), #000);mix-blend-mode:screen;opacity:.5;transform-origin:100% 0;padding:1px;transform:skew(-10deg)skewY(-5deg)}.fullsection-head&gt;*{z-index:2;position:relative}.fullsection-count{box-sizing:content-box;inset:var(--FS-head-inset) auto auto var(--FS-head-inset);min-inline-size:1em;font-size:.75em;font-family:var(--fontStack-monospace);text-align:center;text-shadow:0 1px 1px hsl(from var(--FS-bg) h s 25%);color:var(--FS-fill);border-radius:calc(var(--FS-radius) - var(--FS-head-inset));background:var(--FS-bg);box-shadow:inset 0 -1px 0 color-mix(in oklab, var(--FS-fill), var(--FS-bg));padding:.5em;line-height:1;position:absolute}.fullsection-title-wrapper,.fullsection-illustration{align-self:center;max-block-size:100%;max-inline-size:100%}.fullsection-title-wrapper{grid-area:--title}.fullsection-title{color:var(--FS-color);filter:drop-shadow(0 1px 0 hsl(from var(--FS-bg) h s calc(l / 2)))}.fullsection-illustration{-webkit-user-select:none;user-select:none;grid-area:--illu}.fullsection-content{z-index:3;background-color:var(--color-canvas);box-shadow:0 1px 0 var(--color-canvas);padding-block-start:var(--size-2xl);position:relative}.fullsection-content:before{content:&quot;&quot;;pointer-events:none;z-index:3;block-size:var(--FS-radius);inline-size:min(100%, var(--FS-max));border-radius:0 0 var(--FS-radius) var(--FS-radius);box-shadow:0 var(--FS-radius) 0 var(--FS-radius) var(--color-canvas);margin-inline:auto;display:block;position:absolute;inset-block-end:100%;inset-inline:0}.floatster-list{z-index:4;position:relative}html[data-js=false] .fullsection-illustration-button{display:none}html[data-js=true] .fullsection-illustration-button{block-size:100%;inline-size:100%;display:block;position:fixed}.fullsection-illustration foreignObject{overflow:visible}.fullsection-illustration-button:focus-visible[class]{outline:var(--_focus-outline);outline-offset:var(--_focus-outline-offset);outline-color:var(--FS-palette-1)}#video-games .fullsection-illustration-button:active:after{content:&quot;&quot;;pointer-events:none;background:repeating-conic-gradient(from 16deg, var(--FS-palette-1) 0deg 8deg, transparent 0 52deg);position:absolute;inset:-20px;mask:radial-gradient(closest-side,#0000,#fff8,#0000)}.fullsection-illustration *{transform-box:fill-box;transform-origin:50%}@media screen and (prefers-reduced-motion:no-preference){.fullsection-illustration-steam-anim{stroke-dasharray:1 1;animation:--line-anim 10s cubic-bezier(.5,.5,.5,1) calc(var(--i) * -3.7s) infinite}@keyframes --line-anim{0%{stroke-dasharray:1 1;stroke-dashoffset:1px;stroke-width:16px;stroke-opacity:.5;filter:blur()}99%,to{stroke-dasharray:.5 1;stroke-dashoffset:-1px;stroke-width:0;stroke-opacity:1;filter:blur(8px)}}.fullsection-illustration-spin-anim{animation:--spin-anim calc(10s * var(--FS-factor,1)) linear infinite}@keyframes --spin-anim{to{transform:rotate(360deg)}}}@media screen and (prefers-reduced-motion:no-preference) and (height&gt;32em) and (width&gt;36rem){.fullsection-head{position:sticky;inset-block-start:var(--FS-gap)}}@media screen and (width&lt;=36rem){.fullsection-head{padding-block:var(--size-l);grid-template:&quot;--title&quot;min(150px,20svb)&quot;--illu&quot;min(300px,40svb)&quot;.&quot;/100%}.fullsection-title-wrapper,.fullsection-illustration{align-self:center}.fullsection-illustration-button{scale:1.5}}@media screen and (prefers-reduced-motion:no-preference){[data-interacted=tv-power][data-power] [data-illu-part=tv-screen]{transition-property:opacity,filter,transform;transition-duration:.25s;transition-timing-function:ease-out,ease-out,cubic-bezier(.25,1,0,1)}}[data-interacted=tv-power][data-power=off] [data-illu-part=tv-screen]{opacity:0;filter:brightness(500%);transform:scaleY(.01)}[data-interacted=projector-power][data-power=off] [data-illu-part=reel]{animation-play-state:paused}[data-interacted=projector-power] [data-illu-part=light]{transition:opacity .25s ease-out}[data-interacted=projector-power][data-power=off] [data-illu-part=light]{opacity:0;transition-timing-function:cubic-bezier(.5,1.8,.2,.5)}[data-interacted=projector-power] [data-illu-part=dial]{transition:transform .25s cubic-bezier(.67,1.5,.8,1)}[data-interacted=projector-power]:not([data-power=off]) [data-illu-part=dial]{transform:rotate(42deg)}@media screen and (prefers-reduced-motion:no-preference){[data-interacted=projector-power]:not([data-power=off]) [data-illu-part=light]{animation:.12s infinite --flicker}}@keyframes --flicker{to{filter:opacity(.85)}}[data-interacted=hikepal-power] [data-illu-part=play],[data-interacted=hikepal-power] [data-illu-part=stop]{transition:transform .15s cubic-bezier(.67,2,.8,1);transform:translateY(20%)}[data-interacted=hikepal-power][data-power=off] [data-illu-part=stop],[data-interacted=hikepal-power][data-power=on] [data-illu-part=play]{transform:translateY(67%)}[data-interacted=hikepal-power][data-power=off] [data-illu-part=spool]{animation-play-state:paused}@media screen and (prefers-reduced-motion:no-preference){[data-illu-part=health]{transition:transform .3s ease-out}}@supports (view-timeline-name:--x) and (animation-timeline:--y) and (animation-range-start:exit calc(var(--z) - 1px)){@media screen and (prefers-reduced-motion:no-preference) and (height&gt;50em) and (width&gt;1280px){@property --FS-frame-scale{syntax:&quot;&lt;number&gt;&quot;;inherits:true;initial-value:1}@keyframes --FS-frame-scaler{0%{--FS-frame-scale:1}to{--FS-frame-scale:0}}html[data-js=true] .fullsection{--FS-dynamic-radius:calc(var(--FS-radius) * var(--FS-frame-scale));animation-name:--FS-frame-scaler;animation-timeline:--FS-timeline;animation-range:exit-crossing calc(-1 * (var(--FS-radius) * 2 + var(--FS-gap))) exit-crossing calc(-1 * var(--FS-gap));timeline-scope:--FS-timeline;animation-duration:1ms;animation-timing-function:linear;animation-fill-mode:both}html[data-js=true] .fullsection-head{border-radius:var(--FS-dynamic-radius) var(--FS-dynamic-radius) 0 0;will-change:border-radius}html[data-js=true] .fullsection-content{view-timeline-name:--FS-timeline;view-timeline-axis:block}html[data-js=true] .fullsection-content:before{border-radius:0 0 var(--FS-dynamic-radius) var(--FS-dynamic-radius);will-change:border-radius}}}.floatster[data-image-only] .floatster-list{text-align:center;text-wrap:balance;display:block}.floatster[data-image-only] .floatster-item{margin:calc(var(--size-l) / 2);inline-size:min(100%,12rem);display:inline-flex}.floatster[data-image-only] .floatster-media{float:none;inline-size:100%;max-inline-size:16rem;margin:0 auto}.floatster[data-image-only] .floatster-contents{display:none}
&lt;/style&gt;

&lt;script&gt;document.addEventListener(&quot;DOMContentLoaded&quot;,()=&gt;{if(document.querySelector(&#39;[data-interaction=&quot;projector-power&quot;]&#39;).addEventListener(&quot;click&quot;,()=&gt;{const e=document.querySelector(&#39;[data-interacted=&quot;projector-power&quot;]&#39;);e&amp;&amp;e.setAttribute(&quot;data-power&quot;,e.getAttribute(&quot;data-power&quot;)!==&quot;off&quot;?&quot;off&quot;:&quot;on&quot;)}),window.matchMedia(&quot;(prefers-reduced-motion: no-preference)&quot;).matches){const e=document.getElementById(&quot;illustration-television&quot;),t=document.getElementById(&quot;illustration-books&quot;);e.querySelector(&quot;defs&quot;).innerHTML+=`&lt;animate 
				xlink:href=&quot;#static&quot;
				attributeName=&quot;x&quot;
				values=&quot;0;-85;127;-12;199;-73&quot;
				dur=&quot;0.25s&quot;
				repeatCount=&quot;indefinite&quot;
			/&gt;
			&lt;animate 
				xlink:href=&quot;#static&quot;
				attributeName=&quot;y&quot;
				values=&quot;0;231;63;-97;56;157;-201&quot;
				dur=&quot;0.33s&quot;
				repeatCount=&quot;indefinite&quot;
			/&gt;`,t.querySelector(&quot;defs&quot;).innerHTML+=`&lt;animate 
				xlink:href=&quot;#feTurb2&quot;
				attributeName=&quot;scale&quot;
				values=&quot;15;25;15&quot;
				dur=&quot;2s&quot;
				repeatCount=&quot;indefinite&quot;
			/&gt;`}document.querySelector(&#39;[data-interaction=&quot;tv-power&quot;]&#39;).addEventListener(&quot;click&quot;,()=&gt;{const e=document.querySelector(&#39;[data-interacted=&quot;tv-power&quot;]&#39;);e&amp;&amp;e.setAttribute(&quot;data-power&quot;,e.getAttribute(&quot;data-power&quot;)!==&quot;off&quot;?&quot;off&quot;:&quot;on&quot;)}),document.querySelector(&#39;[data-interaction=&quot;hikepal-power&quot;]&#39;).addEventListener(&quot;click&quot;,()=&gt;{const e=document.querySelector(&#39;[data-interacted=&quot;hikepal-power&quot;]&#39;);e&amp;&amp;e.setAttribute(&quot;data-power&quot;,e.getAttribute(&quot;data-power&quot;)!==&quot;off&quot;?&quot;off&quot;:&quot;on&quot;)});const i=[&quot;u&quot;,&quot;u&quot;,&quot;d&quot;,&quot;d&quot;,&quot;l&quot;,&quot;r&quot;,&quot;l&quot;,&quot;r&quot;,&quot;b&quot;,&quot;a&quot;];let r=[],c=!1;document.querySelector(&#39;[data-interacted=&quot;controller&quot;]&#39;).addEventListener(&quot;click&quot;,e=&gt;{if(c)return;const t=e.target.closest(&quot;[data-interaction]&quot;);if(!t)return;const n=t.getAttribute(&quot;data-input&quot;),a=i[r.length];if(n!==a){r=[];return}else r.push(n);r.join(&quot;.&quot;)===i.join(&quot;.&quot;)&amp;&amp;(document.querySelector(&#39;[data-illu-part=&quot;health&quot;]&#39;).removeAttribute(&quot;transform&quot;),c=!0)}),document.getElementById(&quot;nodesc&quot;).addEventListener(&quot;click&quot;,function(e){const a=!(e.currentTarget.getAttribute(&quot;aria-pressed&quot;)===&quot;true&quot;),d=Array.from(document.querySelectorAll(&quot;.fullsection-content .floatster&quot;));a?d.forEach(o=&gt;o.setAttribute(&quot;data-image-only&quot;,&quot;&quot;)):d.forEach(o=&gt;o.removeAttribute(&quot;data-image-only&quot;))})});
&lt;/script&gt;

                    
                
            </content>
        </entry>
        
        
        <entry>
            <title>Keeping link underline styles around inline code with padding</title>
            <link href="https://chriskirknielsen.com/blog/keep-link-underline-styling-around-inline-code-padding/"/>
            <updated>2025-12-02T04:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/keep-link-underline-styling-around-inline-code-padding/</id>
            <content type="html">
                
                    &lt;p&gt;Recently, &lt;del&gt;&lt;code&gt;text-decoration-trim&lt;/code&gt;&lt;/del&gt; &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/text-decoration-inset&quot;&gt;&lt;code&gt;text-decoration-inset&lt;/code&gt;&lt;/a&gt; was added to Firefox behind a flag, and I was hoping it could fix a little visual thing that has bugged me on my website: the gap in underlines for inline code when it’s part of a link (e.g.: &lt;code&gt;&amp;lt;a href=&amp;quot;...&amp;quot;&amp;gt;A &amp;lt;code&amp;gt;special&amp;lt;/code&amp;gt; link&amp;lt;/a&amp;gt;&lt;/code&gt;). You can see this happen on popular sites like GitHub or Notion, to name a couple.&lt;/p&gt;
&lt;div class=&quot;image-gallery&quot;&gt;&lt;figure&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/keep-link-underline-styling-around-inline-code-padding/underline-gap-examples.jpg&quot;&gt;&lt;img src=&quot;https://chriskirknielsen.com/.netlify/images?w=800&amp;url=%2Fblog%2Fkeep-link-underline-styling-around-inline-code-padding%2Funderline-gap-examples.jpg&quot; alt=&quot;Some blocks of text with an underlined link, and within the text of each, a small code element with a slightly different background colour is visible, and around which the link underline is interrupted.&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot; srcset=&quot;https://chriskirknielsen.com/.netlify/images?w=480&amp;url=%2Fblog%2Fkeep-link-underline-styling-around-inline-code-padding%2Funderline-gap-examples.jpg 480w, https://chriskirknielsen.com/.netlify/images?w=800&amp;url=%2Fblog%2Fkeep-link-underline-styling-around-inline-code-padding%2Funderline-gap-examples.jpg 800w, https://chriskirknielsen.com/.netlify/images?w=1200&amp;url=%2Fblog%2Fkeep-link-underline-styling-around-inline-code-padding%2Funderline-gap-examples.jpg 1200w&quot; sizes=&quot;100vw, (min-width: 50rem) 50rem&quot; width=&quot;1421&quot; height=&quot;1000&quot; style=&quot;aspect-ratio: 1.4213; max-width: 100%;&quot; /&gt;&lt;/a&gt;&lt;figcaption&gt;GitHub, Notion, and this very website (previously)&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;It’s not unusual for inline code to have a slightly different background colour, and in turn, padding to give the code some breathing room in the rectangle, preventing the text from being stuck against the edge of the box. But that’s the issue: the padding will separate the inline element a little, causing the underline in the parent link to break around the code element. What can we do?&lt;/p&gt;
&lt;section class=&quot;callout &quot; aria-labelledby=&quot;co-1n7x7r86ycg&quot;&gt;&lt;p id=&quot;co-1n7x7r86ycg&quot; class=&quot;callout-label | h3&quot;&gt;Seem familiar?&lt;/p&gt;&lt;p&gt;This problem is kind of the opposite from my post from last year, &lt;a href=&quot;https://chriskirknielsen.com/blog/remove-link-underline-styling-between-icon-and-text/&quot;&gt;Removing link underline styles between icons and text&lt;/a&gt;.&lt;/p&gt;&lt;/section&gt;
&lt;h2 id=&quot;new-css-to-the-rescue&quot; tabindex=&quot;-1&quot;&gt;
&lt;a class=&quot;heading-anchor&quot; href=&quot;https://chriskirknielsen.com/blog/keep-link-underline-styling-around-inline-code-padding/#new-css-to-the-rescue&quot;&gt;New CSS to the rescue?&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I tried using the new CSS property &lt;code&gt;text-decoration-trim&lt;/code&gt; (at the time of writing, Firefox has not updated to the new name) with a value of &lt;code&gt;calc(var(--p) * -1)&lt;/code&gt; (with &lt;code&gt;--p&lt;/code&gt; being my inline padding amount of &lt;code&gt;0.125em&lt;/code&gt;). Sadly, the padding still causes the underline to be skipped. I then tried adding &lt;code&gt;text-decoration: inherit;&lt;/code&gt; alongside with the negative inset, but that gave the same result. Okay, bummer, but my understanding is that the padding is basically a non-inline thing, so it’s not underline-able, or something — fair enough.&lt;/p&gt;
&lt;p&gt;Back to the drawing board.&lt;/p&gt;
&lt;h2 id=&quot;old-css-to-the-rescue&quot; tabindex=&quot;-1&quot;&gt;
&lt;a class=&quot;heading-anchor&quot; href=&quot;https://chriskirknielsen.com/blog/keep-link-underline-styling-around-inline-code-padding/#old-css-to-the-rescue&quot;&gt;Old CSS to the rescue!&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Sometimes you gotta go back to move forwards. Instead of trying to fix this with brand new CSS, I used… some old-ass CSS. Instead of &lt;code&gt;padding-inline&lt;/code&gt;, I added some &lt;code&gt;::before&lt;/code&gt; and &lt;code&gt;::after&lt;/code&gt; pseudo-elements with a &lt;code&gt;content&lt;/code&gt; set to a hairspace (Unicode sequence &lt;code&gt;U+200A&lt;/code&gt;):&lt;/p&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;use xlink:href=&quot;#svg__css-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; CSS&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-css codeblock-pre&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;:not(pre) &gt; code&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;/* All of the other styles like font-family, color, background, border-radius… */&lt;/span&gt;

	&lt;span class=&quot;token selector&quot;&gt;&amp;amp;::before,
	&amp;amp;::after&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token property&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;&#92;200a&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token property&quot;&gt;font-size&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0.5em&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* I need to split hairs: it was still too wide */&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;p&gt;Job done! Right? &lt;em&gt;Weeeeeell…&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;If that hairspace lands right at the end of a line but the actual code cannot fit, then it can be a lone hairspace on one line, and the code on the next: not great. The fix is to use a word joiner (&lt;code&gt;U+2060&lt;/code&gt;). That will ensure the two hairspaces are connected to their respective first and last characters in the &lt;code&gt;code&lt;/code&gt; element. More magic unicode incantations and there we go: &lt;code&gt;content: &#39;&#92;2060&#92;200a&#92;2060&#39;;&lt;/code&gt; The word joiners are not necessary on both sides, but this makes the code more concise, and does no harm, I think? Feel free to split up the two.&lt;/p&gt;
&lt;section class=&quot;callout &quot; aria-labelledby=&quot;co-9vdo2fmdkcs&quot;&gt;&lt;p id=&quot;co-9vdo2fmdkcs&quot; class=&quot;callout-label | h3&quot;&gt;Note&lt;/p&gt;&lt;p&gt;I’m not sure assistive technology is going to bother with these whitespace characters, so setting alternative text with the newer &lt;code&gt;content: &#39;&#92;2060&#92;200a&#92;2060&#39; / &#39;&#39;;&lt;/code&gt; syntax seems irrelevant here but if I’m wrong, let me know!&lt;/p&gt;&lt;/section&gt;
&lt;p&gt;The only downside here is that if your code takes up two lines, the padding cannot be repeated at the end of the first line and start of the second with &lt;code&gt;box-decoration-break: clone&lt;/code&gt;, but that is something I am willing to live with.&lt;/p&gt;
&lt;p&gt;And with that yes, now we are done. Ship it, turn off the computer, and take a long walk.&lt;/p&gt;
&lt;p&gt;PS: no, this is not even the worst post title I could think of, why do you ask?&lt;/p&gt;

                    
                
            </content>
        </entry>
        
        
        <entry>
            <title>Adding a custom filename to a code block in Eleventy with markdown-it</title>
            <link href="https://chriskirknielsen.com/blog/custom-filename-in-code-blocks-in-eleventy-in-markdown-it/"/>
            <updated>2025-09-19T03:30:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/custom-filename-in-code-blocks-in-eleventy-in-markdown-it/</id>
            <content type="html">
                
                    &lt;p&gt;I made a plugin to have more control over my code blocks (&lt;a href=&quot;https://chriskirknielsen.com/projects/markdown-it-codewrap/&quot;&gt;CodeWrap&lt;/a&gt;, &lt;a href=&quot;https://chriskirknielsen.com/blog/markdown-it-codewrap/&quot;&gt;I wrote about it&lt;/a&gt;), and I liked the idea of giving a filename to a code block (for example, &lt;code&gt;.eleventy.js&lt;/code&gt;) instead of just showing “JavaScript”. With my CodeWrap plugin, I can hook into &lt;code&gt;markdown-it&lt;/code&gt;’s rendering logic and process a value like &lt;code&gt;​```js:.eleventy.js&lt;/code&gt;. I then save the filename in a private &lt;code&gt;_filename&lt;/code&gt; property, and restore the “natural” value of &lt;code&gt;js&lt;/code&gt; for the code block’s programming language. This works very well! I described this in my aforementioned written entry about the plugin if you want to learn more.&lt;/p&gt;
&lt;p&gt;However, this also means I have backed myself into a corner of proprietary syntax, and I must admit that I am not quite fond of this. Plus, while I don’t use it (yet), there is a Markdown standard (extension?) for line highlighting that’d likely be in conflict, so… not great! To “fix” this, my idea was that, instead of adding the filename right next to the language separated by a colon (once again: a custom syntax of mine), I would add it in square brackets, on the line right before the “fence” (the name for triple-backtick-wrapped code), so it looks like:&lt;/p&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;use xlink:href=&quot;#svg__markdown-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; Markdown&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-md codeblock-pre&quot;&gt;&lt;code class=&quot;language-md&quot;&gt;[eleventy.js]
&lt;span class=&quot;token code&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;span class=&quot;token code-language&quot;&gt;js&lt;/span&gt;
&lt;span class=&quot;token code-block language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// Some interesting code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;p&gt;It was easy within my CodeWrap plugin to find the previous paragraph and get its contents (the &lt;code&gt;markdown-it&lt;/code&gt; renderer provides the full list of tokens, and loops through them, with their index, so going back a couple indices was fine), but sadly, I could not toggle the &lt;code&gt;hidden&lt;/code&gt; flag, as I believe it renders tokens in sequence, not all at once, so by the time the code block was being processed, the previous paragraph was already rendered.&lt;/p&gt;
&lt;p&gt;Makes sense, but that means this approach won’t work. So… what can I do to get the same result, but catch my square-bracket line before it’s rendered? Well of course: another plugin!&lt;/p&gt;
&lt;p&gt;Before you say “boo!”, I mean plugin in functionality only — anything passed to the &lt;code&gt;use&lt;/code&gt; method is considered a plugin to &lt;code&gt;markdown-it&lt;/code&gt;. I didn’t release anything on npm, I swear, I didn’t over-complicate it this time! I added a new handler in my configuration with the same structure as a plugin, but inline, instead of a reference to a third-party import. So much power!&lt;/p&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;use xlink:href=&quot;#svg__js-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; JavaScript&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-js codeblock-pre&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// Configure the MarkdownIt instance&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; mdit &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;markdownIt&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;markdownItOptions&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;disable&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;code&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;markdownItAttrs&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; markdownItAttrsOptions&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;markdownItAnchor&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; markdownItAnchorOptions&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;md&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* A new inline plugin! */&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;markdownItCodeWrap&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; markdownItCodeWrapOptions&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* My existing plugin! */&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// Configure the markdown-it library to use&lt;/span&gt;
eleventyConfig&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setLibrary&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;md&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; mdit&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;p&gt;I think the square brackets, by themselves and without any following parentheses (as you’d see on a Markdown link), won’t trigger any Markdown behaviour, and should, as such, be safe from wonky parsing. If you think this is bad for some reason, please let me know!&lt;/p&gt;
&lt;p&gt;The idea is to process the tokens so that instead of looking back from the code block token for an open paragraph token, the opening paragraph token will look ahead for a code block token: this way, the paragraph can be manipulated before it renders, and that includes its &lt;code&gt;hidden&lt;/code&gt; property. I also found out &lt;code&gt;markdown-it&lt;/code&gt; has a useful &lt;code&gt;meta&lt;/code&gt; property attached to every token, allowing us to add any bit of data we want. A filename sure seems like a good fit.&lt;/p&gt;
&lt;p&gt;For this purpose, we’re only interested in finding paragraphs right before code blocks, so looking at the token’s &lt;code&gt;type&lt;/code&gt; will help: &lt;code&gt;paragraph_open&lt;/code&gt; for the current token (at position of &lt;code&gt;idx&lt;/code&gt;), &lt;code&gt;paragraph_close&lt;/code&gt; for the token after the next (&lt;code&gt;idx + 2&lt;/code&gt;), and &lt;code&gt;fence&lt;/code&gt; following that (&lt;code&gt;idx + 3&lt;/code&gt;). The inner contents of the paragraph are also provided (at &lt;code&gt;idx + 1&lt;/code&gt;) and that’s what will be — take a deep breath — matched against a &lt;em&gt;regular expression&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Like me, you might have long-ish posts with lots of code blocks and paragraphs, so looping through all of them might be a little much to add like 3 filenames here and there. I can’t promise it’s a million time faster, but I tried to ensure the regular expression only ran when it a code block was indeed right after a paragraph.&lt;/p&gt;
&lt;p&gt;Okay, I think I’ve explained enough, let’s see some code!&lt;/p&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;use xlink:href=&quot;#svg__js-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; JavaScript&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-js codeblock-pre&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; mdit &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;markdownIt&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;markdownItOptions&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;disable&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;code&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;markdownItAttrs&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; markdownItAttrsOptions&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;markdownItAnchor&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; markdownItAnchorOptions&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;md&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token comment&quot;&gt;// This handles the non-filename scenario: using the default renderer&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;proxy&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;tokens&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; idx&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; options&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; env&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; self&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; self&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;renderToken&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;tokens&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; idx&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; options&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; defaultRenderer &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; md&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;renderer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;rules&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;paragraph_open &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; proxy&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token comment&quot;&gt;// Captures everything between square brackets so long as it&#39;s the only content and has a dot and extension&lt;/span&gt;
		&lt;span class=&quot;token comment&quot;&gt;//? e.g.: `logo.svg`, `darude/sandstorm.js`, `.gitignore`, etc.&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; filenameRegex &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token regex&quot;&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token regex-source language-regex&quot;&gt;^&#92;[(([/.a-zA-Z0-9_-]+)?&#92;.[a-zA-Z0-9_-]+)&#92;]$&lt;/span&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

		&lt;span class=&quot;token comment&quot;&gt;// The markdown rendering function that handles extracting filenames if found&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;customRenderer&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;tokens&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; idx&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; options&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; env&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; self&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;tokens&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
				&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; currentToken &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; tokens&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;idx&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// The opening paragraph token (definitely)&lt;/span&gt;
				&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; nextToken1 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; tokens&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;idx &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// The paragraph child contents token (likely)&lt;/span&gt;
				&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; nextToken2 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; tokens&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;idx &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// The closing paragraph token (probably)&lt;/span&gt;
				&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; nextToken3 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; tokens&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;idx &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// The code fence token (hopefully)&lt;/span&gt;

				&lt;span class=&quot;token comment&quot;&gt;// If all the conditions are met via simple string operations, we can run the more intensive regular expression to find a filename&lt;/span&gt;
				&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
					currentToken&lt;span class=&quot;token operator&quot;&gt;?.&lt;/span&gt;type &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;paragraph_open&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
					nextToken1&lt;span class=&quot;token operator&quot;&gt;?.&lt;/span&gt;content&lt;span class=&quot;token operator&quot;&gt;?.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;startsWith&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;[&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
					nextToken1&lt;span class=&quot;token operator&quot;&gt;?.&lt;/span&gt;content&lt;span class=&quot;token operator&quot;&gt;?.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;endsWith&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;]&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
					nextToken2&lt;span class=&quot;token operator&quot;&gt;?.&lt;/span&gt;type &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;paragraph_close&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
					nextToken3&lt;span class=&quot;token operator&quot;&gt;?.&lt;/span&gt;type &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;fence&#39;&lt;/span&gt;
				&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
					&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; previousParagraphFilenameMatch &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; nextToken1&lt;span class=&quot;token operator&quot;&gt;?.&lt;/span&gt;content&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;match&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;filenameRegex&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
					&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;previousParagraphFilenameMatch&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
						nextToken3&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;meta &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; nextToken3&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;meta &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
						nextToken3&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;meta&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;filename &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; previousParagraphFilenameMatch&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Use everything captured between the square brackets (group 1)&lt;/span&gt;

						&lt;span class=&quot;token comment&quot;&gt;// The paragraph&#39;s contents have been extracted, and it can now be hidden&lt;/span&gt;
						currentToken&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;hidden &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Not required but it just feels cleaner to have both opening and closing tokens hidden&lt;/span&gt;
						nextToken1&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;children &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// If left as-is, this will render raw text, without the wrapping paragraph tag&lt;/span&gt;
						nextToken2&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;hidden &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Required on the closing token!&lt;/span&gt;

						&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
					&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
				&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

			&lt;span class=&quot;token comment&quot;&gt;// If the paragraph was not a filename, just return a normal render&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;defaultRenderer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;tokens&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; idx&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; options&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; env&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; self&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

		&lt;span class=&quot;token comment&quot;&gt;// Apply the custom renderer just to opening paragraph tokens&lt;/span&gt;
		md&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;renderer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;rules&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;paragraph_open &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; customRenderer&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;markdownItCodeWrap&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; markdownItCodeWrapOptions&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	
&lt;span class=&quot;token comment&quot;&gt;// Configure the markdown-it library to use&lt;/span&gt;
eleventyConfig&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setLibrary&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;md&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; mdit&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;p&gt;I know these 50-ish lines of code aren’t the most fun to look at, but I hope the comments make it clear what’s going on: we make nearly-sure we have a filename paragraph, extract the filename via a regular expression (if any), then pass the found filename to the following code block’s &lt;code&gt;meta&lt;/code&gt; property, and finally hide the paragraph we got the filename from. Phew!&lt;/p&gt;
&lt;p&gt;As for how to make use of the &lt;code&gt;meta&lt;/code&gt; property, if you happen to use my CodeWrap plugin, you’d add a &lt;code&gt;toolbarLabel&lt;/code&gt; callback. In the code above, that’d be part of &lt;code&gt;markdownItCodeWrapOptions&lt;/code&gt; — here’s a very simplified version of what I use:&lt;/p&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;use xlink:href=&quot;#svg__js-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; JavaScript&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-js codeblock-pre&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; markdownItCodeWrapOptions &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token function-variable function&quot;&gt;toolbarLabel&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;tokens&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; idx&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; options&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; env&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; self&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; token &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; tokens&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;idx&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token comment&quot;&gt;// This will display the filename or the language, e.g.: &quot;.eleventy.js&quot; or &quot;JS&quot;&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; toolbarLabel &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; token&lt;span class=&quot;token operator&quot;&gt;?.&lt;/span&gt;meta&lt;span class=&quot;token operator&quot;&gt;?.&lt;/span&gt;_filename &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; token&lt;span class=&quot;token operator&quot;&gt;?.&lt;/span&gt;info&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toUpperCase&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Code&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;toolbarLabel&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// ...and then more options&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;p&gt;And there you have it. A custom filename on custom code blocks — neat!&lt;/p&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;title&gt;JavaScript&lt;/title&gt;&lt;use xlink:href=&quot;#svg__js-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; chris-bot.js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-js codeblock-pre&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Chris&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Please clap.&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;p&gt;At first I thought it’d be pretty cool to use the comment syntax of each language (so the first line in the code block would just be &lt;code&gt;&amp;lt;!-- index.html --&amp;gt;&lt;/code&gt; or &lt;code&gt;/* style.css */&lt;/code&gt;), as that makes it 100% compatible everywhere, and it remains mostly clear what’s going on, but I’d have to then pull it out of the contents, and properly parse comments in various languages… I think what I came up with is a little easier, consistent, and reliable, with the same syntax regardless of the language. And if I ever drop all my plugins, it still makes enough sense to see the filename right before a code block, all without breaking basic Markdown rendering.&lt;/p&gt;
&lt;p&gt;I don’t know if this is great, or if most of my readers (all three of you!) even care to see a filename, but it’s fun to play around with!&lt;/p&gt;

                    
                
            </content>
        </entry>
        
        
        <entry>
            <title>Preventing jank on focused overflow-causing elements</title>
            <link href="https://chriskirknielsen.com/blog/prevent-jank-on-focused-elements-in-an-overflow-container/"/>
            <updated>2025-09-11T14:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/prevent-jank-on-focused-elements-in-an-overflow-container/</id>
            <content type="html">&lt;p&gt;Making sure the focused element doesn’t trigger janky scroll.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/prevent-jank-on-focused-elements-in-an-overflow-container/&quot;&gt;Read full article: Preventing jank on focused overflow-causing elements&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Conditional favicon in Eleventy using passthrough copy</title>
            <link href="https://chriskirknielsen.com/blog/conditional-favicon-with-eleventy-passthrough-copy/"/>
            <updated>2025-09-01T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/conditional-favicon-with-eleventy-passthrough-copy/</id>
            <content type="html">&lt;p&gt;Never mix up dev and prod again! (due to identical icons, at least)&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/conditional-favicon-with-eleventy-passthrough-copy/&quot;&gt;Read full article: Conditional favicon in Eleventy using passthrough copy&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>From Nunjucks to Vento in Eleventy: a migration guide (kinda)</title>
            <link href="https://chriskirknielsen.com/blog/from-nunjucks-to-vento-in-eleventy-migration-guide/"/>
            <updated>2025-06-05T04:51:23.000Z</updated>
            <id>https://chriskirknielsen.com/blog/from-nunjucks-to-vento-in-eleventy-migration-guide/</id>
            <content type="html">&lt;p&gt;A few tips to refactor your njk into vto.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/from-nunjucks-to-vento-in-eleventy-migration-guide/&quot;&gt;Read full article: From Nunjucks to Vento in Eleventy: a migration guide (kinda)&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Taking VentoJS for a spin in Eleventy</title>
            <link href="https://chriskirknielsen.com/blog/taking-vento-js-for-a-spin-in-eleventy/"/>
            <updated>2025-04-26T03:51:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/taking-vento-js-for-a-spin-in-eleventy/</id>
            <content type="html">&lt;p&gt;There’s a new kid on the templating block.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/taking-vento-js-for-a-spin-in-eleventy/&quot;&gt;Read full article: Taking VentoJS for a spin in Eleventy&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Double-Pagination in Eleventy</title>
            <link href="https://chriskirknielsen.com/blog/double-pagination-in-eleventy/"/>
            <updated>2025-04-23T05:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/double-pagination-in-eleventy/</id>
            <content type="html">&lt;p&gt;Yo dawg, I heard you liked pagination, so I added pagination inside your paginated pages, so you can paginate while you paginate.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/double-pagination-in-eleventy/&quot;&gt;Read full article: Double-Pagination in Eleventy&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Some thoughts on the item-flow proposal</title>
            <link href="https://chriskirknielsen.com/blog/thoughts-on-item-flow-proposal/"/>
            <updated>2025-03-29T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/thoughts-on-item-flow-proposal/</id>
            <content type="html">&lt;p&gt;Solving for masonry could have beneficial side effects for other layout methods.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/thoughts-on-item-flow-proposal/&quot;&gt;Read full article: Some thoughts on the item-flow proposal&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>A Future of Themes with CSS Inline if() Conditions</title>
            <link href="https://chriskirknielsen.com/blog/future-theme-with-inline-if-style-conditions/"/>
            <updated>2025-02-20T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/future-theme-with-inline-if-style-conditions/</id>
            <content type="html">&lt;p&gt;Another way to implement themes on a website with style conditions.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/future-theme-with-inline-if-style-conditions/&quot;&gt;Read full article: A Future of Themes with CSS Inline if() Conditions&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Relative Temperature Conversion</title>
            <link href="https://chriskirknielsen.com/blog/relative-temperature-conversion/"/>
            <updated>2025-01-18T01:45:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/relative-temperature-conversion/</id>
            <content type="html">&lt;p&gt;So this is how I can explain temperature fluctuations outside the US!&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/relative-temperature-conversion/&quot;&gt;Read full article: Relative Temperature Conversion&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>“Simple” Table of Contents Highlighter</title>
            <link href="https://chriskirknielsen.com/blog/simple-table-of-contents-highlighter/"/>
            <updated>2025-01-03T19:19:19.000Z</updated>
            <id>https://chriskirknielsen.com/blog/simple-table-of-contents-highlighter/</id>
            <content type="html">&lt;p&gt;Highlight your TOC in a tick.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/simple-table-of-contents-highlighter/&quot;&gt;Read full article: “Simple” Table of Contents Highlighter&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>2024 as bullet points</title>
            <link href="https://chriskirknielsen.com/blog/2024-as-bullet-points/"/>
            <updated>2024-12-30T00:04:04.000Z</updated>
            <id>https://chriskirknielsen.com/blog/2024-as-bullet-points/</id>
            <content type="html">&lt;p&gt;Kind of a year in review.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/2024-as-bullet-points/&quot;&gt;Read full article: 2024 as bullet points&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Vertical slider fitting the tallest element in pure CSS</title>
            <link href="https://chriskirknielsen.com/blog/vertical-slider-fitting-the-tallest-element-in-pure-css/"/>
            <updated>2024-12-13T00:25:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/vertical-slider-fitting-the-tallest-element-in-pure-css/</id>
            <content type="html">&lt;p&gt;Using transforms to create overflow.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/vertical-slider-fitting-the-tallest-element-in-pure-css/&quot;&gt;Read full article: Vertical slider fitting the tallest element in pure CSS&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>The Multi-Directional Nature of position: sticky</title>
            <link href="https://chriskirknielsen.com/blog/multi-directional-nature-of-position-sticky/"/>
            <updated>2024-11-01T19:20:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/multi-directional-nature-of-position-sticky/</id>
            <content type="html">&lt;p&gt;You can use it any way you’d like.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/multi-directional-nature-of-position-sticky/&quot;&gt;Read full article: The Multi-Directional Nature of position: sticky&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Removing link underline styles between icons and text</title>
            <link href="https://chriskirknielsen.com/blog/remove-link-underline-styling-between-icon-and-text/"/>
            <updated>2024-09-21T19:10:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/remove-link-underline-styling-between-icon-and-text/</id>
            <content type="html">&lt;p&gt;Fixing the tiny underline is nearly effortless with CSS variables.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/remove-link-underline-styling-between-icon-and-text/&quot;&gt;Read full article: Removing link underline styles between icons and text&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>:nth-next-sibling? No need.</title>
            <link href="https://chriskirknielsen.com/blog/nth-next-sibling-no-need/"/>
            <updated>2024-09-15T19:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/nth-next-sibling-no-need/</id>
            <content type="html">&lt;p&gt;Target N elements after an arbitrary element in CSS.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/nth-next-sibling-no-need/&quot;&gt;Read full article: :nth-next-sibling? No need.&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>My under-engineered way to avoid a Flash of inAccurate coloR Theme (FART)</title>
            <link href="https://chriskirknielsen.com/blog/my-under-engineered-way-to-avoid-a-flash-of-inaccurate-color-theme/"/>
            <updated>2024-09-01T20:55:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/my-under-engineered-way-to-avoid-a-flash-of-inaccurate-color-theme/</id>
            <content type="html">&lt;p&gt;It all boils down to a single line of JS.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/my-under-engineered-way-to-avoid-a-flash-of-inaccurate-color-theme/&quot;&gt;Read full article: My under-engineered way to avoid a Flash of inAccurate coloR Theme (FART)&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Leveraging APIs like Notion with a nice caching system</title>
            <link href="https://chriskirknielsen.com/blog/leverage-api-like-notion-with-cache/"/>
            <updated>2024-05-03T03:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/leverage-api-like-notion-with-cache/</id>
            <content type="html">&lt;p&gt;How I implemented Notion and PSN APIs in my Eleventy build for my Now and Gaming pages.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/leverage-api-like-notion-with-cache/&quot;&gt;Read full article: Leveraging APIs like Notion with a nice caching system&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>2024 redesign</title>
            <link href="https://chriskirknielsen.com/blog/2024-redesign/"/>
            <updated>2024-04-04T16:04:24.000Z</updated>
            <id>https://chriskirknielsen.com/blog/2024-redesign/</id>
            <content type="html">&lt;p&gt;Some notes about this 2024 redesign.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/2024-redesign/&quot;&gt;Read full article: 2024 redesign&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Snippet: git switcheroo</title>
            <link href="https://chriskirknielsen.com/blog/git-switcheroo/"/>
            <updated>2024-01-25T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/git-switcheroo/</id>
            <content type="html">&lt;p&gt;Move a commit from one branch to another.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/git-switcheroo/&quot;&gt;Read full article: Snippet: git switcheroo&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>CSS Wishlist 2024</title>
            <link href="https://chriskirknielsen.com/blog/css-wishlist-2024/"/>
            <updated>2024-01-11T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/css-wishlist-2024/</id>
            <content type="html">&lt;p&gt;My Wishlist for CSS in 2024.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/css-wishlist-2024/&quot;&gt;Read full article: CSS Wishlist 2024&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Grouping posts by year with Nunjucks in Eleventy</title>
            <link href="https://chriskirknielsen.com/blog/group-posts-by-year-with-nunjucks-in-eleventy/"/>
            <updated>2023-11-24T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/group-posts-by-year-with-nunjucks-in-eleventy/</id>
            <content type="html">&lt;p&gt;Group by year in a clear and readable manner.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/group-posts-by-year-with-nunjucks-in-eleventy/&quot;&gt;Read full article: Grouping posts by year with Nunjucks in Eleventy&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Select an element which doesn’t descend from another in CSS</title>
            <link href="https://chriskirknielsen.com/blog/select-an-element-which-doesnt-descend-from-another-in-css/"/>
            <updated>2023-10-25T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/select-an-element-which-doesnt-descend-from-another-in-css/</id>
            <content type="html">&lt;p&gt;Avoid false positives when using :not() to exclude ancestors from a scope.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/select-an-element-which-doesnt-descend-from-another-in-css/&quot;&gt;Read full article: Select an element which doesn’t descend from another in CSS&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>A Future of Themes with CSS Container Style Queries</title>
            <link href="https://chriskirknielsen.com/blog/future-themes-with-container-style-queries/"/>
            <updated>2023-07-29T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/future-themes-with-container-style-queries/</id>
            <content type="html">&lt;p&gt;One way to implement themes on a website with style queries.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/future-themes-with-container-style-queries/&quot;&gt;Read full article: A Future of Themes with CSS Container Style Queries&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>My plugin for Markdown-It: CodeWrap</title>
            <link href="https://chriskirknielsen.com/blog/markdown-it-codewrap/"/>
            <updated>2023-05-28T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/markdown-it-codewrap/</id>
            <content type="html">&lt;p&gt;My solution to adding &quot;Copy&quot; to markdown code blocks (and other things).&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/markdown-it-codewrap/&quot;&gt;Read full article: My plugin for Markdown-It: CodeWrap&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Animate an SVG shape’s inner stroke</title>
            <link href="https://chriskirknielsen.com/blog/animate-an-svg-inner-stroke/"/>
            <updated>2023-02-25T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/animate-an-svg-inner-stroke/</id>
            <content type="html">&lt;p&gt;Grow a stroke on an SVG shape but only covering the inner part.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/animate-an-svg-inner-stroke/&quot;&gt;Read full article: Animate an SVG shape’s inner stroke&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Plucking a nested property from an object</title>
            <link href="https://chriskirknielsen.com/blog/pluck-a-nested-property-from-an-object/"/>
            <updated>2023-02-24T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/pluck-a-nested-property-from-an-object/</id>
            <content type="html">&lt;p&gt;Retrieving a property of an object which is also in an object in JavaScript.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/pluck-a-nested-property-from-an-object/&quot;&gt;Read full article: Plucking a nested property from an object&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Eleventy Asset Pipeline: Precompiled Assets without Gulp</title>
            <link href="https://chriskirknielsen.com/blog/eleventy-asset-pipeline-precompiled-assets/"/>
            <updated>2022-11-27T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/eleventy-asset-pipeline-precompiled-assets/</id>
            <content type="html">&lt;p&gt;Precompiled Sass and JS files that become part of the source folder.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/eleventy-asset-pipeline-precompiled-assets/&quot;&gt;Read full article: Eleventy Asset Pipeline: Precompiled Assets without Gulp&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>CSS Grid with a preferred column count</title>
            <link href="https://chriskirknielsen.com/blog/css-grid-with-a-preferred-column-count/"/>
            <updated>2022-09-13T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/css-grid-with-a-preferred-column-count/</id>
            <content type="html">&lt;p&gt;Set up a CSS grid with a specific ideal number of columns.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/css-grid-with-a-preferred-column-count/&quot;&gt;Read full article: CSS Grid with a preferred column count&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Eleventy within Eleventy to compile when you compile: precompiling reused assets</title>
            <link href="https://chriskirknielsen.com/blog/eleventy-within-eleventy-precompiling-reused-assets/"/>
            <updated>2022-08-25T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/eleventy-within-eleventy-precompiling-reused-assets/</id>
            <content type="html">&lt;p&gt;Pre-compile some reused assets to avoid repeating the same operation.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/eleventy-within-eleventy-precompiling-reused-assets/&quot;&gt;Read full article: Eleventy within Eleventy to compile when you compile: precompiling reused assets&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Manage your SVG files with Eleventy’s Render plugin</title>
            <link href="https://chriskirknielsen.com/blog/manage-your-svg-files-with-eleventys-render-plugin/"/>
            <updated>2022-08-10T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/manage-your-svg-files-with-eleventys-render-plugin/</id>
            <content type="html">&lt;p&gt;Using renderFile to keep things tidy.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/manage-your-svg-files-with-eleventys-render-plugin/&quot;&gt;Read full article: Manage your SVG files with Eleventy’s Render plugin&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Fine, types in JS aren’t the worst</title>
            <link href="https://chriskirknielsen.com/blog/fine-types-arent-the-worst/"/>
            <updated>2022-05-01T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/fine-types-arent-the-worst/</id>
            <content type="html">&lt;p&gt;I’m not on the TypeScript train, but I like a couple of things…&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/fine-types-arent-the-worst/&quot;&gt;Read full article: Fine, types in JS aren’t the worst&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Animate your z-index for cleaner hover effects</title>
            <link href="https://chriskirknielsen.com/blog/animate-z-index-hover-effects/"/>
            <updated>2022-04-16T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/animate-z-index-hover-effects/</id>
            <content type="html">&lt;p&gt;Clean up overlap animations on hovered elements.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/animate-z-index-hover-effects/&quot;&gt;Read full article: Animate your z-index for cleaner hover effects&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Le petit guide sur var, let et const</title>
            <link href="https://chriskirknielsen.com/blog/le-petit-guide-sur-var-let-et-const/"/>
            <updated>2021-08-07T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/le-petit-guide-sur-var-let-et-const/</id>
            <content type="html">&lt;p&gt;Comment distinguer ces mots-clés JavaScript.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/le-petit-guide-sur-var-let-et-const/&quot;&gt;Read full article: Le petit guide sur var, let et const&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Rotating floating animation with chained transforms</title>
            <link href="https://chriskirknielsen.com/blog/rotating-floating-animation-with-chained-transforms/"/>
            <updated>2021-06-12T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/rotating-floating-animation-with-chained-transforms/</id>
            <content type="html">&lt;p&gt;Using chained CSS transforms to get a rotation without rotating the element itself.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/rotating-floating-animation-with-chained-transforms/&quot;&gt;Read full article: Rotating floating animation with chained transforms&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>A DRY Approach to Color Themes in CSS</title>
            <link href="https://chriskirknielsen.com/blog/a-dry-approach-to-color-themes-in-css/"/>
            <updated>2021-02-24T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/a-dry-approach-to-color-themes-in-css/</id>
            <content type="html">
                
                    &lt;p&gt;I wrote an article on CSS-Tricks about using a &lt;code&gt;--var: ;&lt;/code&gt; &lt;a href=&quot;https://lea.verou.me/2020/10/the-var-space-hack-to-toggle-multiple-values-with-one-custom-property/&quot;&gt;trick from Lea Verou&lt;/a&gt; to define theme variables only once, when you need to respect a user-preference media query as well as CSS classes. Since you can’t do both in a single declaration block, you usually repeat these theme variables… but with this little hack, no need!&lt;/p&gt;
&lt;code-wrap class=&quot;codeblock&quot; copy-label=&quot;📋 Copy&quot; copy-class=&quot;button&quot; copy-done-label=&quot;Copied!&quot; actionwrap-class=&quot;codewrap-action cellstack cellstack--center&quot;&gt;&lt;figure&gt;&lt;figcaption class=&quot;codeblock-toolbar&quot;&gt;&lt;span class=&quot;codeblock-toolbar-label&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;inline-icon inline-icon--center&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;use xlink:href=&quot;#svg__css-icon&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;/use&gt;&lt;/svg&gt; CSS&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&quot;0&quot; class=&quot;language-css codeblock-pre&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token property&quot;&gt;--color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--light&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; orchid&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--dark&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; rebeccapurple&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;/code-wrap&gt;&lt;p&gt;The article details the trick and how to set it up (because it &lt;em&gt;does&lt;/em&gt; look weird at first glance), maybe you’ll find another use case for it!&lt;/p&gt;

                    &lt;p&gt;&lt;a href=&quot;https://css-tricks.com/a-dry-approach-to-color-themes-in-css/&quot;&gt;Read full article on CSS-Tricks&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Inline lists with conditional separators</title>
            <link href="https://chriskirknielsen.com/blog/inline-lists-with-conditional-separators/"/>
            <updated>2020-07-18T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/inline-lists-with-conditional-separators/</id>
            <content type="html">&lt;p&gt;Only show a separator when two items are next to each other, and skip for new lines.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/inline-lists-with-conditional-separators/&quot;&gt;Read full article: Inline lists with conditional separators&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Building and maintaining components from utility classes in Eleventy</title>
            <link href="https://chriskirknielsen.com/blog/building-and-maintaning-components-from-utility-classes-in-eleventy/"/>
            <updated>2020-06-29T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/building-and-maintaning-components-from-utility-classes-in-eleventy/</id>
            <content type="html">&lt;p&gt;Use a collection of utilities to form components without additional CSS.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/building-and-maintaning-components-from-utility-classes-in-eleventy/&quot;&gt;Read full article: Building and maintaining components from utility classes in Eleventy&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Modern Fluid Typography with clamp()</title>
            <link href="https://chriskirknielsen.com/blog/modern-fluid-typography-with-clamp/"/>
            <updated>2020-05-20T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/modern-fluid-typography-with-clamp/</id>
            <content type="html">&lt;p&gt;Get a more consistent sizing with viewport-based font sizing.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/modern-fluid-typography-with-clamp/&quot;&gt;Read full article: Modern Fluid Typography with clamp()&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Breakout Container</title>
            <link href="https://chriskirknielsen.com/blog/breakout-container/"/>
            <updated>2019-11-23T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/breakout-container/</id>
            <content type="html">&lt;p&gt;Make a contained element span the entire horizontal space.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/breakout-container/&quot;&gt;Read full article: Breakout Container&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Une réinitialisation CSS moderne</title>
            <link href="https://chriskirknielsen.com/blog/une-reinitialition-css-moderne/"/>
            <updated>2019-10-30T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/une-reinitialition-css-moderne/</id>
            <content type="html">&lt;p&gt;Andy Bell propose un reset CSS adapté aux navigateurs modernes.&lt;/p&gt;
                
                    &lt;p&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/une-reinitialition-css-moderne/&quot;&gt;Read full article: Une réinitialisation CSS moderne&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Contextual Utility Classes for Color with Custom Properties</title>
            <link href="https://chriskirknielsen.com/blog/contextual-utility-classes-for-color-with-custom-properties/"/>
            <updated>2019-08-14T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/contextual-utility-classes-for-color-with-custom-properties/</id>
            <content type="html">
                
                    &lt;p&gt;I wrote an article on CSS-Tricks about using the power of the cascade to style links within their context, with custom properties!&lt;/p&gt;
&lt;p&gt;Here’s an example: you have a block with a dark-blue background and light gray text. Say that block has link, and you want that link to invert the background and the text colour when it becomes hovered/focused. You can do that easily if you apply utility classes (&lt;code&gt;.bg--dark-blue&lt;/code&gt; and &lt;code&gt;.color--light-gray&lt;/code&gt;) that pass along custom properties, that you can then levarage in your link styles.&lt;/p&gt;
&lt;p&gt;Simple, when you boil it down, but very powerful, because if the block’s colours change, you don’t need to worry about updating your link styles.&lt;/p&gt;

                    &lt;p&gt;&lt;a href=&quot;https://css-tricks.com/contextual-utility-classes-for-color-with-custom-properties/&quot;&gt;Read full article on CSS-Tricks&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
        
        
        <entry>
            <title>Switching From WordPress To Hugo</title>
            <link href="https://chriskirknielsen.com/blog/switching-from-wordpress-to-hugo/"/>
            <updated>2019-05-22T00:00:00.000Z</updated>
            <id>https://chriskirknielsen.com/blog/switching-from-wordpress-to-hugo/</id>
            <content type="html">
                
                    &lt;p&gt;When I converted &lt;a href=&quot;https://geekometric.com/&quot;&gt;my blog, Geekometric&lt;/a&gt;, from a WordPress-based site to a Hugo-built static site, I felt I needed to go through a lot of different pages to achieve a simple blog.&lt;/p&gt;
&lt;p&gt;This tutorial is the result of my compilation of all the knowledge I gathered, or needed to gather, to achieve my goal of a Hugo blog, hosted on Netlify. There are a lot of steps but at the end, you’ll have all the information you need to make it work, including hosting, domain handling, and even a CMS to edit your content via an online user interface!&lt;/p&gt;

                    &lt;p&gt;&lt;a href=&quot;https://www.smashingmagazine.com/2019/05/switch-wordpress-hugo/&quot;&gt;Read full article on Smashing Magazine&lt;/a&gt;.&lt;/p&gt;
                
            </content>
        </entry>
</feed>