<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[DevTools & Donuts]]></title><description><![CDATA[DevTools insights, tasty bites, no need for forks or knives. #webdevelopment #tooling]]></description><link>https://dd.jec.fish</link><image><url>https://substackcdn.com/image/fetch/$s_!qKg6!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3e5071c-e58f-4951-a082-1570fb1dfb0d_1280x1280.png</url><title>DevTools &amp; Donuts</title><link>https://dd.jec.fish</link></image><generator>Substack</generator><lastBuildDate>Fri, 24 Apr 2026 13:00:33 GMT</lastBuildDate><atom:link href="https://dd.jec.fish/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Jecelyn Yeen]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[jecfish@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[jecfish@substack.com]]></itunes:email><itunes:name><![CDATA[Jecelyn Yeen]]></itunes:name></itunes:owner><itunes:author><![CDATA[Jecelyn Yeen]]></itunes:author><googleplay:owner><![CDATA[jecfish@substack.com]]></googleplay:owner><googleplay:email><![CDATA[jecfish@substack.com]]></googleplay:email><googleplay:author><![CDATA[Jecelyn Yeen]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[How to prevent unload handlers from slowing down your websites]]></title><description><![CDATA[Use the permissions-policy header, also Chrome is deprecating the unload events.]]></description><link>https://dd.jec.fish/p/how-to-prevent-unload-handlers-from</link><guid isPermaLink="false">https://dd.jec.fish/p/how-to-prevent-unload-handlers-from</guid><dc:creator><![CDATA[Jecelyn Yeen]]></dc:creator><pubDate>Tue, 20 Feb 2024 07:30:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Yz6s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea21d491-3b6b-4d49-bdec-81b540f2d892_1202x646.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>I&#8217;m <a href="https://www.linkedin.com/in/jecfish/">Jecelyn Yeen</a>, currently working on Chrome Tooling - Chrome DevTools, Puppeteer and more at Google. I tend to talk about web development, debugging &amp; testing.</em></p><p>Prefer video over text? Head to the end for the video version.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dd.jec.fish/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading DevTools &amp; Donuts! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Unload handlers can be immensely helpful for tasks like saving user data or cleaning up resources before a page is closed. However, it is not reliable and <a href="https://developer.chrome.com/docs/web-platform/deprecating-unload">Chrome is deprecating gradually</a>.</p><p>When an unload handler is present on a page, the <a href="https://web.dev/articles/bfcache">back and forward cache (bfcache)</a> is disabled, preventing the page from being cached and instantly loaded upon back navigation.</p><p>To accurately test the impact of unload handlers on your site, it's best to <strong>use a guest profile or incognito mode, as extensions can also inject unload handlers</strong> and other APIs that hinder bfcache usage.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Yz6s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea21d491-3b6b-4d49-bdec-81b540f2d892_1202x646.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Yz6s!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea21d491-3b6b-4d49-bdec-81b540f2d892_1202x646.png 424w, https://substackcdn.com/image/fetch/$s_!Yz6s!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea21d491-3b6b-4d49-bdec-81b540f2d892_1202x646.png 848w, https://substackcdn.com/image/fetch/$s_!Yz6s!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea21d491-3b6b-4d49-bdec-81b540f2d892_1202x646.png 1272w, https://substackcdn.com/image/fetch/$s_!Yz6s!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea21d491-3b6b-4d49-bdec-81b540f2d892_1202x646.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Yz6s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea21d491-3b6b-4d49-bdec-81b540f2d892_1202x646.png" width="1202" height="646" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ea21d491-3b6b-4d49-bdec-81b540f2d892_1202x646.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:646,&quot;width&quot;:1202,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:339135,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Yz6s!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea21d491-3b6b-4d49-bdec-81b540f2d892_1202x646.png 424w, https://substackcdn.com/image/fetch/$s_!Yz6s!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea21d491-3b6b-4d49-bdec-81b540f2d892_1202x646.png 848w, https://substackcdn.com/image/fetch/$s_!Yz6s!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea21d491-3b6b-4d49-bdec-81b540f2d892_1202x646.png 1272w, https://substackcdn.com/image/fetch/$s_!Yz6s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea21d491-3b6b-4d49-bdec-81b540f2d892_1202x646.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Use the permissions-policy header to block extensions or 3rd party libraries adding unload handlers to your page. </figcaption></figure></div><p></p><p>For websites that don't use unload handlers, there's a powerful tool at your disposal &#8211; the <code>permissions-policy</code>. This HTTP response header, sent with the document response, allows you to enforce restrictions on specific web features, including unload handlers.</p><p>By setting the <code>permissions-policy</code> to disallow unload handlers, you effectively prevent their use on your site. This not only guarantees consistent performance by enabling bfcache, but also ensures that <strong>no extensions and 3rd-party libraries can inject unload handlers</strong> and slow down your site.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JGQn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082edf02-5c32-47a9-b3ed-15cfcc55c72e_1836x480.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JGQn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082edf02-5c32-47a9-b3ed-15cfcc55c72e_1836x480.png 424w, https://substackcdn.com/image/fetch/$s_!JGQn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082edf02-5c32-47a9-b3ed-15cfcc55c72e_1836x480.png 848w, https://substackcdn.com/image/fetch/$s_!JGQn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082edf02-5c32-47a9-b3ed-15cfcc55c72e_1836x480.png 1272w, https://substackcdn.com/image/fetch/$s_!JGQn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082edf02-5c32-47a9-b3ed-15cfcc55c72e_1836x480.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JGQn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082edf02-5c32-47a9-b3ed-15cfcc55c72e_1836x480.png" width="1456" height="381" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/082edf02-5c32-47a9-b3ed-15cfcc55c72e_1836x480.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:381,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:367522,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JGQn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082edf02-5c32-47a9-b3ed-15cfcc55c72e_1836x480.png 424w, https://substackcdn.com/image/fetch/$s_!JGQn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082edf02-5c32-47a9-b3ed-15cfcc55c72e_1836x480.png 848w, https://substackcdn.com/image/fetch/$s_!JGQn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082edf02-5c32-47a9-b3ed-15cfcc55c72e_1836x480.png 1272w, https://substackcdn.com/image/fetch/$s_!JGQn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082edf02-5c32-47a9-b3ed-15cfcc55c72e_1836x480.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Error in the Console when you try to add an unload handler to the page.</figcaption></figure></div><p></p><p>Here's a quick tip:</p><p>You can actually test this out by <strong>overriding HTTP response headers</strong>! Simply add a <code>permissions-policy</code> header to your site that prevents the use of unload handlers. Now, even when you try to add an unload handler in the Console, it will be blocked, confirming the effectiveness of this method.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rAdY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffce71b45-0b42-4983-bb06-237fcfa98ef5_1272x660.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rAdY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffce71b45-0b42-4983-bb06-237fcfa98ef5_1272x660.png 424w, https://substackcdn.com/image/fetch/$s_!rAdY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffce71b45-0b42-4983-bb06-237fcfa98ef5_1272x660.png 848w, https://substackcdn.com/image/fetch/$s_!rAdY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffce71b45-0b42-4983-bb06-237fcfa98ef5_1272x660.png 1272w, https://substackcdn.com/image/fetch/$s_!rAdY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffce71b45-0b42-4983-bb06-237fcfa98ef5_1272x660.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rAdY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffce71b45-0b42-4983-bb06-237fcfa98ef5_1272x660.png" width="1272" height="660" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fce71b45-0b42-4983-bb06-237fcfa98ef5_1272x660.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:660,&quot;width&quot;:1272,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:633948,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rAdY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffce71b45-0b42-4983-bb06-237fcfa98ef5_1272x660.png 424w, https://substackcdn.com/image/fetch/$s_!rAdY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffce71b45-0b42-4983-bb06-237fcfa98ef5_1272x660.png 848w, https://substackcdn.com/image/fetch/$s_!rAdY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffce71b45-0b42-4983-bb06-237fcfa98ef5_1272x660.png 1272w, https://substackcdn.com/image/fetch/$s_!rAdY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffce71b45-0b42-4983-bb06-237fcfa98ef5_1272x660.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The &#8220;Override headers&#8221; context menu for a network resource.</figcaption></figure></div><p></p><p>Remember, by taking a proactive approach and leveraging the power of the <code>permissions-policy</code>, you can ensure a smooth and fast browsing experience for your users, free from the performance hit of unnecessary unload handlers.</p><p></p><h2>Video</h2><p></p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;0c7068b9-0603-4b9f-b0f7-82008b8c6317&quot;,&quot;duration&quot;:null}"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dd.jec.fish/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading DevTools &amp; Donuts! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Chrome DevTools: JSON-LD & auto-prettify]]></title><description><![CDATA[Detect & pretty print all the JSON subtypes everywhere.]]></description><link>https://dd.jec.fish/p/chrome-devtools-json-ld-and-auto</link><guid isPermaLink="false">https://dd.jec.fish/p/chrome-devtools-json-ld-and-auto</guid><dc:creator><![CDATA[Jecelyn Yeen]]></dc:creator><pubDate>Fri, 09 Feb 2024 11:31:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Rfot!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75c6bc0-d553-4a31-9b1a-82327a518d54_2006x1122.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>I&#8217;m <a href="https://www.linkedin.com/in/jecfish/">Jecelyn Yeen</a>, currently working on Chrome Tooling - Chrome DevTools, Puppeteer and more at Google. I tend to talk about web development, debugging &amp; testing.</em></p><p>Prefer video over text? Head to the end for the video version.</p><p>Working with JSON data in DevTools was a bit annoying before, but it&#8217;s better now! Two paper cuts have been fixed:</p><ol><li><p><strong>Different types of JSON</strong>: For example, Google Search uses a special kind of JSON named <strong><a href="https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data">JSON-LD</a></strong>. DevTools didn't understand it before, but now it does! You can even see it in a nice, clear format.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Rfot!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75c6bc0-d553-4a31-9b1a-82327a518d54_2006x1122.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Rfot!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75c6bc0-d553-4a31-9b1a-82327a518d54_2006x1122.png 424w, https://substackcdn.com/image/fetch/$s_!Rfot!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75c6bc0-d553-4a31-9b1a-82327a518d54_2006x1122.png 848w, https://substackcdn.com/image/fetch/$s_!Rfot!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75c6bc0-d553-4a31-9b1a-82327a518d54_2006x1122.png 1272w, https://substackcdn.com/image/fetch/$s_!Rfot!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75c6bc0-d553-4a31-9b1a-82327a518d54_2006x1122.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Rfot!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75c6bc0-d553-4a31-9b1a-82327a518d54_2006x1122.png" width="1456" height="814" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f75c6bc0-d553-4a31-9b1a-82327a518d54_2006x1122.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:814,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1347737,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Rfot!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75c6bc0-d553-4a31-9b1a-82327a518d54_2006x1122.png 424w, https://substackcdn.com/image/fetch/$s_!Rfot!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75c6bc0-d553-4a31-9b1a-82327a518d54_2006x1122.png 848w, https://substackcdn.com/image/fetch/$s_!Rfot!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75c6bc0-d553-4a31-9b1a-82327a518d54_2006x1122.png 1272w, https://substackcdn.com/image/fetch/$s_!Rfot!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75c6bc0-d553-4a31-9b1a-82327a518d54_2006x1122.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">JSON-LD data is nicely formatted in the <strong>Network</strong> panel &gt; <strong>Response</strong> tab</figcaption></figure></div></li><li><p><strong>Format minified JSON</strong>: Sometimes, JSON is hidden inside HTML pages and looks all squished up due to the build (minified) process. Now, the <strong>Sources</strong> panel automatically makes it look neat and tidy for you.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NmCC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe60e8775-178b-42c6-8067-868163ef40b3_2094x1310.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NmCC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe60e8775-178b-42c6-8067-868163ef40b3_2094x1310.png 424w, https://substackcdn.com/image/fetch/$s_!NmCC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe60e8775-178b-42c6-8067-868163ef40b3_2094x1310.png 848w, https://substackcdn.com/image/fetch/$s_!NmCC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe60e8775-178b-42c6-8067-868163ef40b3_2094x1310.png 1272w, https://substackcdn.com/image/fetch/$s_!NmCC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe60e8775-178b-42c6-8067-868163ef40b3_2094x1310.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NmCC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe60e8775-178b-42c6-8067-868163ef40b3_2094x1310.png" width="1456" height="911" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e60e8775-178b-42c6-8067-868163ef40b3_2094x1310.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:911,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:664372,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NmCC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe60e8775-178b-42c6-8067-868163ef40b3_2094x1310.png 424w, https://substackcdn.com/image/fetch/$s_!NmCC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe60e8775-178b-42c6-8067-868163ef40b3_2094x1310.png 848w, https://substackcdn.com/image/fetch/$s_!NmCC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe60e8775-178b-42c6-8067-868163ef40b3_2094x1310.png 1272w, https://substackcdn.com/image/fetch/$s_!NmCC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe60e8775-178b-42c6-8067-868163ef40b3_2094x1310.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>These changes might seem small, but they'll make a big difference if you work with JSON a lot! Now you can inspect JSON data easier than before.</p><h1>Video</h1><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;1e739870-7e83-47d6-8d31-dcfa054c1ae8&quot;,&quot;duration&quot;:null}"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dd.jec.fish/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading DevTools &amp; Donuts! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[What's a "Paper Cut" bug? ]]></title><description><![CDATA[The tiny itch that drives developers crazy]]></description><link>https://dd.jec.fish/p/whats-a-paper-cut-bug</link><guid isPermaLink="false">https://dd.jec.fish/p/whats-a-paper-cut-bug</guid><dc:creator><![CDATA[Jecelyn Yeen]]></dc:creator><pubDate>Tue, 06 Feb 2024 07:00:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!GSed!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4448f10-d400-4b9d-8bb9-be63e2bd88c6_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>I&#8217;m <a href="https://www.linkedin.com/in/jecfish/">Jecelyn Yeen</a>, currently working on Chrome Tooling - Chrome DevTools, Puppeteer and more at Google. I tend to talk about web development, debugging &amp; testing.</em></p><p>Prefer video over text? Head to the end for the video version.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GSed!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4448f10-d400-4b9d-8bb9-be63e2bd88c6_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GSed!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4448f10-d400-4b9d-8bb9-be63e2bd88c6_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!GSed!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4448f10-d400-4b9d-8bb9-be63e2bd88c6_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!GSed!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4448f10-d400-4b9d-8bb9-be63e2bd88c6_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!GSed!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4448f10-d400-4b9d-8bb9-be63e2bd88c6_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GSed!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4448f10-d400-4b9d-8bb9-be63e2bd88c6_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d4448f10-d400-4b9d-8bb9-be63e2bd88c6_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1769090,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GSed!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4448f10-d400-4b9d-8bb9-be63e2bd88c6_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!GSed!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4448f10-d400-4b9d-8bb9-be63e2bd88c6_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!GSed!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4448f10-d400-4b9d-8bb9-be63e2bd88c6_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!GSed!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4448f10-d400-4b9d-8bb9-be63e2bd88c6_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated with DALL-E. Draw an image that depicts website usability bugs. You should draw like a 10 years old.</figcaption></figure></div><p>Ever encountered a small annoyance in your coding workflow, like a menu that's just out of reach or a button that requires one too many clicks? That's what we call a <strong><a href="https://bit.ly/paper-cut-bug">paper cut bug</a></strong>&#8212;a seemingly minor usability issue that can surprisingly sting and disrupt your focus.</p><p>These tiny frustrations might seem insignificant compared to showstopping bugs, but they can add up to significant time wasted and frustration over time.</p><p><strong>Do you have any paper cut bug that you'd love to see fixed in Chrome DevTools?</strong> Share them in the comments below and let's see if we can smooth out those rough edges!</p><p></p><h1>Video</h1><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;c15536eb-ac0c-4cb7-884b-de5e46924e1e&quot;,&quot;duration&quot;:null}"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dd.jec.fish/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading DevTools &amp; Donuts! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Debugging videos with the Media badge in Chrome DevTools]]></title><description><![CDATA[It works for audio too, but first you need to enable it.]]></description><link>https://dd.jec.fish/p/debugging-videos-with-the-media-badge</link><guid isPermaLink="false">https://dd.jec.fish/p/debugging-videos-with-the-media-badge</guid><dc:creator><![CDATA[Jecelyn Yeen]]></dc:creator><pubDate>Fri, 02 Feb 2024 11:30:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!LVMm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43e884f-cd11-44dc-ba27-afbd1cbd58b2_2006x1126.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>I&#8217;m <a href="https://www.linkedin.com/in/jecfish/">Jecelyn Yeen</a>, currently working on Chrome Tooling - Chrome DevTools, Puppeteer and more at Google. I tend to talk about web development, debugging &amp; testing.</em></p><p>Prefer video over text? Head to the end for the video version.</p><p><strong>Attention video and audio debuggers!</strong> Tired of digging through code to troubleshoot media issues? Say hello to the <strong>Media badge</strong>, your new best friend.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LVMm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43e884f-cd11-44dc-ba27-afbd1cbd58b2_2006x1126.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LVMm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43e884f-cd11-44dc-ba27-afbd1cbd58b2_2006x1126.jpeg 424w, https://substackcdn.com/image/fetch/$s_!LVMm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43e884f-cd11-44dc-ba27-afbd1cbd58b2_2006x1126.jpeg 848w, https://substackcdn.com/image/fetch/$s_!LVMm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43e884f-cd11-44dc-ba27-afbd1cbd58b2_2006x1126.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!LVMm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43e884f-cd11-44dc-ba27-afbd1cbd58b2_2006x1126.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LVMm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43e884f-cd11-44dc-ba27-afbd1cbd58b2_2006x1126.jpeg" width="1456" height="817" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b43e884f-cd11-44dc-ba27-afbd1cbd58b2_2006x1126.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:817,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:212559,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LVMm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43e884f-cd11-44dc-ba27-afbd1cbd58b2_2006x1126.jpeg 424w, https://substackcdn.com/image/fetch/$s_!LVMm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43e884f-cd11-44dc-ba27-afbd1cbd58b2_2006x1126.jpeg 848w, https://substackcdn.com/image/fetch/$s_!LVMm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43e884f-cd11-44dc-ba27-afbd1cbd58b2_2006x1126.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!LVMm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43e884f-cd11-44dc-ba27-afbd1cbd58b2_2006x1126.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Media badge next to video or audio elements</figcaption></figure></div><p><strong>Here's how to enable it:</strong></p><ol><li><p>Head to the <strong>Elements</strong> panel.</p></li><li><p>Right-click on any node and select <strong>Badge settings</strong>.</p></li><li><p>Check the box <strong>Media</strong>.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NL0K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ce3abd-8fa1-418a-bcbd-4e0d4356fd91_2010x1130.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NL0K!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ce3abd-8fa1-418a-bcbd-4e0d4356fd91_2010x1130.png 424w, https://substackcdn.com/image/fetch/$s_!NL0K!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ce3abd-8fa1-418a-bcbd-4e0d4356fd91_2010x1130.png 848w, https://substackcdn.com/image/fetch/$s_!NL0K!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ce3abd-8fa1-418a-bcbd-4e0d4356fd91_2010x1130.png 1272w, https://substackcdn.com/image/fetch/$s_!NL0K!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ce3abd-8fa1-418a-bcbd-4e0d4356fd91_2010x1130.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NL0K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ce3abd-8fa1-418a-bcbd-4e0d4356fd91_2010x1130.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/80ce3abd-8fa1-418a-bcbd-4e0d4356fd91_2010x1130.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1882251,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NL0K!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ce3abd-8fa1-418a-bcbd-4e0d4356fd91_2010x1130.png 424w, https://substackcdn.com/image/fetch/$s_!NL0K!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ce3abd-8fa1-418a-bcbd-4e0d4356fd91_2010x1130.png 848w, https://substackcdn.com/image/fetch/$s_!NL0K!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ce3abd-8fa1-418a-bcbd-4e0d4356fd91_2010x1130.png 1272w, https://substackcdn.com/image/fetch/$s_!NL0K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ce3abd-8fa1-418a-bcbd-4e0d4356fd91_2010x1130.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The <strong>Badge settings&#8230;</strong> context menu</figcaption></figure></div><p><strong>That's it!</strong> Now, when you inspect a video element, a nifty media badge pops up next to it.</p><p><strong>Click the badge to unlock the power of the Media panel.</strong> This dedicated space lets you dive deeper into playback details, analyze buffer states, and even control playback right from DevTools!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!O-WB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F377452b7-a7f6-4778-b832-359c51206655_2002x1130.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!O-WB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F377452b7-a7f6-4778-b832-359c51206655_2002x1130.png 424w, https://substackcdn.com/image/fetch/$s_!O-WB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F377452b7-a7f6-4778-b832-359c51206655_2002x1130.png 848w, https://substackcdn.com/image/fetch/$s_!O-WB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F377452b7-a7f6-4778-b832-359c51206655_2002x1130.png 1272w, https://substackcdn.com/image/fetch/$s_!O-WB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F377452b7-a7f6-4778-b832-359c51206655_2002x1130.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!O-WB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F377452b7-a7f6-4778-b832-359c51206655_2002x1130.png" width="1456" height="822" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/377452b7-a7f6-4778-b832-359c51206655_2002x1130.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:822,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1372309,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!O-WB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F377452b7-a7f6-4778-b832-359c51206655_2002x1130.png 424w, https://substackcdn.com/image/fetch/$s_!O-WB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F377452b7-a7f6-4778-b832-359c51206655_2002x1130.png 848w, https://substackcdn.com/image/fetch/$s_!O-WB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F377452b7-a7f6-4778-b832-359c51206655_2002x1130.png 1272w, https://substackcdn.com/image/fetch/$s_!O-WB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F377452b7-a7f6-4778-b832-359c51206655_2002x1130.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The <strong>Media</strong> panel</figcaption></figure></div><p><strong>Want to level up your media debugging skills?</strong> Check out this link for more information: <a href="https://goo.gle/devtools-media">goo.gle/devtools-media</a>.</p><p></p><h1>Video</h1><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;c456507b-fe68-4604-ad4c-af6cee6ff491&quot;,&quot;duration&quot;:null}"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dd.jec.fish/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading DevTools &amp; Donuts! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Animations panel: Click for time, resize for names 🎉]]></title><description><![CDATA[Two tiny tweaks, big boost for your animation scrubbing workflow.]]></description><link>https://dd.jec.fish/p/animations-panel-click-for-time-resize</link><guid isPermaLink="false">https://dd.jec.fish/p/animations-panel-click-for-time-resize</guid><dc:creator><![CDATA[Jecelyn Yeen]]></dc:creator><pubDate>Tue, 30 Jan 2024 07:00:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!tU4n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43ef027b-028b-4ae5-8c59-c762b72c5177_2006x1128.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>I&#8217;m <a href="https://www.linkedin.com/in/jecfish/">Jecelyn Yeen</a>, currently working on Chrome Tooling - Chrome DevTools, Puppeteer and more at Google. I tend to talk about web development, debugging &amp; testing.</em></p><p>Prefer video over text? Head to the end for the video version.</p><p>Scrub through animations like a pro with these two new additions to the Animations panel in Chrome DevTools:</p><p><strong>Click to seek:</strong> No more hunting for the tiny playhead! Simply click anywhere on the timeline header to instantly jump to that point in the animation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tU4n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43ef027b-028b-4ae5-8c59-c762b72c5177_2006x1128.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tU4n!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43ef027b-028b-4ae5-8c59-c762b72c5177_2006x1128.png 424w, https://substackcdn.com/image/fetch/$s_!tU4n!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43ef027b-028b-4ae5-8c59-c762b72c5177_2006x1128.png 848w, https://substackcdn.com/image/fetch/$s_!tU4n!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43ef027b-028b-4ae5-8c59-c762b72c5177_2006x1128.png 1272w, https://substackcdn.com/image/fetch/$s_!tU4n!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43ef027b-028b-4ae5-8c59-c762b72c5177_2006x1128.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tU4n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43ef027b-028b-4ae5-8c59-c762b72c5177_2006x1128.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/43ef027b-028b-4ae5-8c59-c762b72c5177_2006x1128.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:877686,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tU4n!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43ef027b-028b-4ae5-8c59-c762b72c5177_2006x1128.png 424w, https://substackcdn.com/image/fetch/$s_!tU4n!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43ef027b-028b-4ae5-8c59-c762b72c5177_2006x1128.png 848w, https://substackcdn.com/image/fetch/$s_!tU4n!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43ef027b-028b-4ae5-8c59-c762b72c5177_2006x1128.png 1272w, https://substackcdn.com/image/fetch/$s_!tU4n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43ef027b-028b-4ae5-8c59-c762b72c5177_2006x1128.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Click anywhere on the timeline header to play</figcaption></figure></div><p><strong>Name unveiler:</strong> Tired of truncated selector names? Now you can resize the name column to reveal the full name in all its glory, making it easier to identify specific animations.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GcJ8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2cb2bd2-5c6a-4e25-a8eb-3a3c2093355e_2004x1126.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GcJ8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2cb2bd2-5c6a-4e25-a8eb-3a3c2093355e_2004x1126.png 424w, https://substackcdn.com/image/fetch/$s_!GcJ8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2cb2bd2-5c6a-4e25-a8eb-3a3c2093355e_2004x1126.png 848w, https://substackcdn.com/image/fetch/$s_!GcJ8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2cb2bd2-5c6a-4e25-a8eb-3a3c2093355e_2004x1126.png 1272w, https://substackcdn.com/image/fetch/$s_!GcJ8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2cb2bd2-5c6a-4e25-a8eb-3a3c2093355e_2004x1126.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GcJ8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2cb2bd2-5c6a-4e25-a8eb-3a3c2093355e_2004x1126.png" width="1456" height="818" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c2cb2bd2-5c6a-4e25-a8eb-3a3c2093355e_2004x1126.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:818,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1037683,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GcJ8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2cb2bd2-5c6a-4e25-a8eb-3a3c2093355e_2004x1126.png 424w, https://substackcdn.com/image/fetch/$s_!GcJ8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2cb2bd2-5c6a-4e25-a8eb-3a3c2093355e_2004x1126.png 848w, https://substackcdn.com/image/fetch/$s_!GcJ8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2cb2bd2-5c6a-4e25-a8eb-3a3c2093355e_2004x1126.png 1272w, https://substackcdn.com/image/fetch/$s_!GcJ8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2cb2bd2-5c6a-4e25-a8eb-3a3c2093355e_2004x1126.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Drag to resize name column</figcaption></figure></div><p>These might seem like small tweaks, but they make a big difference in your animation debugging workflow. Previously, dragging the playhead and dealing with hidden names could be a bit of a hassle.</p><p>Want to learn more about the Animations panel? Check out this handy link: <a href="http://goo.gle/devtools-animation">goo.gle/devtools-animation</a>.</p><p></p><h1>Video</h1><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;136f7e88-3702-42e5-8bd1-787392ded9a2&quot;,&quot;duration&quot;:null}"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dd.jec.fish/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading DevTools &amp; Donuts! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Think before you paste: DevTools warns against self-XSS risks ]]></title><description><![CDATA[Adding new "Allow pasting" dialog to defend against self-XSS attacks.]]></description><link>https://dd.jec.fish/p/think-before-you-paste-devtools-warns</link><guid isPermaLink="false">https://dd.jec.fish/p/think-before-you-paste-devtools-warns</guid><dc:creator><![CDATA[Jecelyn Yeen]]></dc:creator><pubDate>Fri, 26 Jan 2024 08:30:10 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!VPVb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fbb2c3d-b796-4ff8-bc73-3bf68b9dd7e8_2006x1132.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>I&#8217;m <a href="https://www.linkedin.com/in/jecfish/">Jecelyn Yeen</a>, currently working on Chrome Tooling - Chrome DevTools, Puppeteer and more at Google. I tend to talk about web development, debugging &amp; testing.</em></p><p>Prefer video over text? Head to the end for the video version.</p><p><strong>Think before you paste!</strong> That unfamiliar code snippet could be a trap set by hackers. Don't let them use DevTools as a gateway to your sensitive data.</p><p><strong>Beware of self-XSS attacks:</strong> Hackers might trick you into pasting malicious scripts into DevTools, potentially stealing your bank details or causing other harm.</p><p><strong>New warning to the rescue:</strong> When you attempt to paste code in the <strong>Sources</strong> or <strong>Console</strong> panels, DevTools now displays a clear warning for new users.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VPVb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fbb2c3d-b796-4ff8-bc73-3bf68b9dd7e8_2006x1132.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VPVb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fbb2c3d-b796-4ff8-bc73-3bf68b9dd7e8_2006x1132.jpeg 424w, https://substackcdn.com/image/fetch/$s_!VPVb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fbb2c3d-b796-4ff8-bc73-3bf68b9dd7e8_2006x1132.jpeg 848w, https://substackcdn.com/image/fetch/$s_!VPVb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fbb2c3d-b796-4ff8-bc73-3bf68b9dd7e8_2006x1132.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!VPVb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fbb2c3d-b796-4ff8-bc73-3bf68b9dd7e8_2006x1132.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VPVb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fbb2c3d-b796-4ff8-bc73-3bf68b9dd7e8_2006x1132.jpeg" width="1456" height="822" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2fbb2c3d-b796-4ff8-bc73-3bf68b9dd7e8_2006x1132.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:822,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:98015,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VPVb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fbb2c3d-b796-4ff8-bc73-3bf68b9dd7e8_2006x1132.jpeg 424w, https://substackcdn.com/image/fetch/$s_!VPVb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fbb2c3d-b796-4ff8-bc73-3bf68b9dd7e8_2006x1132.jpeg 848w, https://substackcdn.com/image/fetch/$s_!VPVb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fbb2c3d-b796-4ff8-bc73-3bf68b9dd7e8_2006x1132.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!VPVb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fbb2c3d-b796-4ff8-bc73-3bf68b9dd7e8_2006x1132.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Think twice, paste once:</strong> This one-time warning prompts you to confirm your understanding of the potential risks involved. To proceed, you need to deliberately type "allow pasting."</p><p><strong>Stay vigilant and protect yourself:</strong> By taking a moment to verify the source and purpose of the code before pasting, you can safeguard your browsing experience and keep hackers at bay.</p><p>Learn more about this topic: <a href="https://developer.chrome.com/blog/self-xss">developer.chrome.com/blog/self-xss</a></p><h1>Video</h1><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;a6e2abc7-bd09-4224-88cf-6fa934e0ea30&quot;,&quot;duration&quot;:null}"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dd.jec.fish/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading DevTools &amp; Donuts! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[No more debugging detours: Chrome DevTools ignore node_modules by default]]></title><description><![CDATA[Stay focused on your own code]]></description><link>https://dd.jec.fish/p/no-more-debugging-detours-chrome</link><guid isPermaLink="false">https://dd.jec.fish/p/no-more-debugging-detours-chrome</guid><dc:creator><![CDATA[Jecelyn Yeen]]></dc:creator><pubDate>Tue, 23 Jan 2024 04:00:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Wrmx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47857a0f-0bfa-4e1b-9a55-fd3552c184ba_2004x1128.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>I&#8217;m <a href="https://www.linkedin.com/in/jecfish/">Jecelyn Yeen</a>, currently working on Chrome Tooling - Chrome DevTools, Puppeteer and more at Google. I tend to talk about web development, debugging &amp; testing.</em></p><p>Prefer video over text? Head to the end for the video version.</p><p><strong>Hooray!</strong> No more unwanted detours into the depths of <code>node_modules</code> during debugging. Stay focused on your code and boost your productivity!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Wrmx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47857a0f-0bfa-4e1b-9a55-fd3552c184ba_2004x1128.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Wrmx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47857a0f-0bfa-4e1b-9a55-fd3552c184ba_2004x1128.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Wrmx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47857a0f-0bfa-4e1b-9a55-fd3552c184ba_2004x1128.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Wrmx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47857a0f-0bfa-4e1b-9a55-fd3552c184ba_2004x1128.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Wrmx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47857a0f-0bfa-4e1b-9a55-fd3552c184ba_2004x1128.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Wrmx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47857a0f-0bfa-4e1b-9a55-fd3552c184ba_2004x1128.jpeg" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/47857a0f-0bfa-4e1b-9a55-fd3552c184ba_2004x1128.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:107840,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Wrmx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47857a0f-0bfa-4e1b-9a55-fd3552c184ba_2004x1128.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Wrmx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47857a0f-0bfa-4e1b-9a55-fd3552c184ba_2004x1128.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Wrmx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47857a0f-0bfa-4e1b-9a55-fd3552c184ba_2004x1128.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Wrmx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47857a0f-0bfa-4e1b-9a55-fd3552c184ba_2004x1128.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Settings &gt; Ignore list &gt; DevTools ignore node_modules and bower components  by default.</figcaption></figure></div><p><strong>Imagine this:</strong> You're debugging a <a href="https://react.dev/">React</a> application and set a breakpoint to catch a button click event. With the new <strong>ignore node_modules by default</strong> feature, DevTools will instantly jump to your code, bypassing the code from all third-party libraries.</p><p><strong>Without this feature:</strong> You might be surprised to land in the React code (or library code) first,  you have to press a few more clicks to navigate to your own files. Talk about a time-waster!</p><p><strong>Stay in control:</strong> With the new setting, you can still customize the ignore list anytime in the settings or by right-clicking on specific files and folders to ignore/unignore them.</p><p><strong>Further exploration:</strong> Want to learn more about the ignore list settings and tweak them to your liking? Check out this link for detailed information: <a href="https://goo.gle/ignore-list">goo.gle/ignore-list</a>.</p><h1>Video</h1><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;5a43b392-d1c1-47e6-8596-c2b662103bff&quot;,&quot;duration&quot;:null}"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dd.jec.fish/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading DevTools &amp; Donuts! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Debug private minified production CSS easier ]]></title><description><![CDATA[Load private CSS source maps manually in Chrome DevTools to un-minify them.]]></description><link>https://dd.jec.fish/p/debug-private-minified-production</link><guid isPermaLink="false">https://dd.jec.fish/p/debug-private-minified-production</guid><dc:creator><![CDATA[Jecelyn Yeen]]></dc:creator><pubDate>Fri, 19 Jan 2024 11:30:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97dee1c4-8dd5-40e5-bd08-65d8f39099fa_2004x1130.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>I&#8217;m <a href="https://www.linkedin.com/in/jecfish/">Jecelyn Yeen</a>, currently working on Chrome Tooling - Chrome DevTools, Puppeteer and more at Google. I tend to talk about web development, debugging &amp; testing.</em></p><p>Prefer video over text? Head to the end for the video version.</p><p>Got private CSS source maps tucked away? You can now use them in Chrome DevTools to debug even in production environments!</p><p><strong>Here's the scenario:</strong> You've built a web page using TypeScript and SCSS. They get compiled into JavaScript and CSS, along with two helpful source map files (e.g. <code>a.js.map</code>, <code>b.css.map</code>).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YCuo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd3d71c-432a-4832-9a64-8fdda4478820_2004x1126.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YCuo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd3d71c-432a-4832-9a64-8fdda4478820_2004x1126.png 424w, https://substackcdn.com/image/fetch/$s_!YCuo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd3d71c-432a-4832-9a64-8fdda4478820_2004x1126.png 848w, https://substackcdn.com/image/fetch/$s_!YCuo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd3d71c-432a-4832-9a64-8fdda4478820_2004x1126.png 1272w, https://substackcdn.com/image/fetch/$s_!YCuo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd3d71c-432a-4832-9a64-8fdda4478820_2004x1126.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YCuo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd3d71c-432a-4832-9a64-8fdda4478820_2004x1126.png" width="1456" height="818" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1cd3d71c-432a-4832-9a64-8fdda4478820_2004x1126.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:818,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:767699,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YCuo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd3d71c-432a-4832-9a64-8fdda4478820_2004x1126.png 424w, https://substackcdn.com/image/fetch/$s_!YCuo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd3d71c-432a-4832-9a64-8fdda4478820_2004x1126.png 848w, https://substackcdn.com/image/fetch/$s_!YCuo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd3d71c-432a-4832-9a64-8fdda4478820_2004x1126.png 1272w, https://substackcdn.com/image/fetch/$s_!YCuo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd3d71c-432a-4832-9a64-8fdda4478820_2004x1126.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">TS and SCSS are compiled into minified JS and CSS.</figcaption></figure></div><p><strong>Production woes:</strong> It's common to skip deploying source maps in production for security reasons. However, this makes debugging a headache as you're stuck deciphering minified code.</p><p><strong>The secret weapon:</strong> Now, you can right-click and manually add your source map to DevTools! This instantly transforms the messy code into its original, readable format, making CSS debugging a breeze.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wJEJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97dee1c4-8dd5-40e5-bd08-65d8f39099fa_2004x1130.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wJEJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97dee1c4-8dd5-40e5-bd08-65d8f39099fa_2004x1130.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wJEJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97dee1c4-8dd5-40e5-bd08-65d8f39099fa_2004x1130.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wJEJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97dee1c4-8dd5-40e5-bd08-65d8f39099fa_2004x1130.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wJEJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97dee1c4-8dd5-40e5-bd08-65d8f39099fa_2004x1130.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wJEJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97dee1c4-8dd5-40e5-bd08-65d8f39099fa_2004x1130.jpeg" width="1456" height="821" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/97dee1c4-8dd5-40e5-bd08-65d8f39099fa_2004x1130.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:821,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:104059,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wJEJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97dee1c4-8dd5-40e5-bd08-65d8f39099fa_2004x1130.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wJEJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97dee1c4-8dd5-40e5-bd08-65d8f39099fa_2004x1130.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wJEJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97dee1c4-8dd5-40e5-bd08-65d8f39099fa_2004x1130.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wJEJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97dee1c4-8dd5-40e5-bd08-65d8f39099fa_2004x1130.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Right click on a CSS file &gt; Select Add source maps&#8230; in the <strong>Sources</strong> panel</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rZyZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e397eb5-e072-44b8-8530-ee78352fcf15_2004x1130.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rZyZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e397eb5-e072-44b8-8530-ee78352fcf15_2004x1130.jpeg 424w, https://substackcdn.com/image/fetch/$s_!rZyZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e397eb5-e072-44b8-8530-ee78352fcf15_2004x1130.jpeg 848w, https://substackcdn.com/image/fetch/$s_!rZyZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e397eb5-e072-44b8-8530-ee78352fcf15_2004x1130.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!rZyZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e397eb5-e072-44b8-8530-ee78352fcf15_2004x1130.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rZyZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e397eb5-e072-44b8-8530-ee78352fcf15_2004x1130.jpeg" width="1456" height="821" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6e397eb5-e072-44b8-8530-ee78352fcf15_2004x1130.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:821,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:95895,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rZyZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e397eb5-e072-44b8-8530-ee78352fcf15_2004x1130.jpeg 424w, https://substackcdn.com/image/fetch/$s_!rZyZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e397eb5-e072-44b8-8530-ee78352fcf15_2004x1130.jpeg 848w, https://substackcdn.com/image/fetch/$s_!rZyZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e397eb5-e072-44b8-8530-ee78352fcf15_2004x1130.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!rZyZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e397eb5-e072-44b8-8530-ee78352fcf15_2004x1130.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">SCSS file is now available, you can select it from the <strong>Page</strong> tree</figcaption></figure></div><p><strong>Fun fact:</strong> Did you know this handy feature <a href="https://developer.chrome.com/docs/devtools/developer-resources#load">has been around for JavaScript</a> for ages?</p><p><strong>Share your thoughts:</strong> Have you used this trick to debug CSS in production? Let us know in the comments below!</p><h1>Video</h1><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;86dd1a8b-2b72-4463-ac8a-115e00385093&quot;,&quot;duration&quot;:null}"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dd.jec.fish/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading DevTools &amp; Donuts! Subscribe for DevTools insights, tasty bites, no need for forks or knives.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Which selector wins? CSS specificity explained]]></title><description><![CDATA[It boils down to 3 numbers and 2 rules...]]></description><link>https://dd.jec.fish/p/which-selector-wins-css-specificity</link><guid isPermaLink="false">https://dd.jec.fish/p/which-selector-wins-css-specificity</guid><dc:creator><![CDATA[Jecelyn Yeen]]></dc:creator><pubDate>Tue, 16 Jan 2024 07:00:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!8XYW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b5cc4b7-6699-4b50-82e5-53eab45db8ab_2000x1124.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>I&#8217;m <a href="https://www.linkedin.com/in/jecfish/">Jecelyn Yeen</a>, currently working on Chrome Tooling - Chrome DevTools, Puppeteer and more at Google. I tend to talk about web development, debugging &amp; testing.</em></p><p>Prefer video over text? Head to the end for the video version.</p><p>Ever confused about which CSS style wins out when there are multiple rules? Understanding how to calculate the weight of a CSS selector is crucial for determining which style reigns supreme. </p><p>This weight, known as <strong><a href="https://developer.mozilla.org/docs/Web/CSS/Specificity">specificity</a></strong>, boils down to three key numbers: <strong>ID, class, and type</strong>. It's like a scorecard for each selector, telling us who gets to be the boss of your element's style.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8XYW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b5cc4b7-6699-4b50-82e5-53eab45db8ab_2000x1124.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8XYW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b5cc4b7-6699-4b50-82e5-53eab45db8ab_2000x1124.png 424w, https://substackcdn.com/image/fetch/$s_!8XYW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b5cc4b7-6699-4b50-82e5-53eab45db8ab_2000x1124.png 848w, https://substackcdn.com/image/fetch/$s_!8XYW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b5cc4b7-6699-4b50-82e5-53eab45db8ab_2000x1124.png 1272w, https://substackcdn.com/image/fetch/$s_!8XYW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b5cc4b7-6699-4b50-82e5-53eab45db8ab_2000x1124.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8XYW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b5cc4b7-6699-4b50-82e5-53eab45db8ab_2000x1124.png" width="1456" height="818" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2b5cc4b7-6699-4b50-82e5-53eab45db8ab_2000x1124.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:818,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:553329,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8XYW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b5cc4b7-6699-4b50-82e5-53eab45db8ab_2000x1124.png 424w, https://substackcdn.com/image/fetch/$s_!8XYW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b5cc4b7-6699-4b50-82e5-53eab45db8ab_2000x1124.png 848w, https://substackcdn.com/image/fetch/$s_!8XYW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b5cc4b7-6699-4b50-82e5-53eab45db8ab_2000x1124.png 1272w, https://substackcdn.com/image/fetch/$s_!8XYW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b5cc4b7-6699-4b50-82e5-53eab45db8ab_2000x1124.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Let's break down each selector.</p><h2>div &gt; a.primary:hover</h2><p>Take <code>div a.primary:hover</code> as an example. It has a score of <strong>0, 2, 2</strong>.</p><ul><li><p>0 - No IDs</p></li><li><p>2 - Two classes - <code>.primary</code> and the <code>:hover</code></p></li><li><p>2 - Two types - <code>&lt;div&gt;</code> and <code>&lt;a&gt;</code> </p></li></ul><h2>div &gt; a[role=&#8221;button&#8221;]:hover</h2><p>Remember, attribute selectors like <code>[role="button"]</code> count as classes as well! So, replacing <code>.primary</code> with <code>[role="button"]</code> doesn't change the score.</p><ul><li><p>0 - No IDs</p></li><li><p>2 - Two classes - <code>[role="button"]</code> and the <code>:hover</code></p></li><li><p>2 - Two types - <code>&lt;div&gt;</code> and <code>&lt;a&gt;</code> </p></li></ul><h2>#home-link</h2><p>Now, look at <code>#home-link</code>. That one ID gives it a score of <strong>1, 0, 0</strong>.</p><ul><li><p>1 - ID - <code>#home-link</code></p></li><li><p>0 - No classes</p></li><li><p>0 - No types</p></li></ul><p></p><h2>The rules</h2><p></p><ol><li><p><strong>The higher the score on the left, the stronger the selector:</strong> So, even if you have lots of classes and types, an ID will always win. It's like having the royal flush in a poker game! </p></li><li><p><strong>The position matters too, last one wins</strong>: Given two selectors with same scores across 3 numbers, then whichever come last wins.</p></li></ol><p>Let&#8217;s put practice with a few examples.</p><p></p><h2>Is the border dash, double or solid?</h2><p>Given the following CSS,  is the border dash, double or solid?</p><pre><code>&lt;style&gt;
  #home-link { border: solid; }

  div &gt; a.primary:hover { border: dashed; }

  div &gt; a[role="button"]:hover { border: double; }
&lt;/style&gt;</code></pre><p>The border is <strong>solid</strong> because rule  #1 applies - The higher the score on the left, the stronger the selector.</p><p></p><h2>Is the color blue or red?</h2><p>How about the following CSS? Is the hyperlink red or blue?</p><pre><code>&lt;style&gt;
  div &gt; a.primary:hover { color: red; }

  div &gt; a[role="button"]:hover { color: blue; }
&lt;/style&gt;</code></pre><p>The color is <strong>blue.</strong> Both selectors have the same score <strong>0, 2, 2</strong>. However, remember our rule #2 - The position matters too, last one wins. Since <code>div &gt; a[role="button"]:hover</code> comes last, so it wins.</p><p></p><h2>Do I need to calculate manually? &#128561;</h2><p>No worries, you don&#8217;t have to. You can view the score in the Chrome DevTools <strong>Styles</strong> tab! Find out more in my previous blog post.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;4bca5035-6a61-4778-9d47-0acdc5521184&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;View CSS specificity in Chrome DevTools&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:112266367,&quot;name&quot;:&quot;Jecelyn Yeen&quot;,&quot;bio&quot;:&quot;I am a Senior DevRel Engineer at Google working on Chrome DevTools, Puppeteer and more. \n\nI tend to talk about web development, tooling and testing.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/fb44f74e-ca6d-486e-bef8-8b6930d487d1_1024x1024.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-01-09T07:00:51.758Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05295a00-4a7b-4bca-a6d6-1bfea4ffbad5_932x530.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://dd.jec.fish/p/view-css-specificity-in-chrome-devtools&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:140465141,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;DevTools &amp; Donuts&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3e5071c-e58f-4951-a082-1570fb1dfb0d_1280x1280.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><h2>By the way, there are more rules if&#8230;</h2><p>If you use the new <a href="https://developer.chrome.com/blog/cascade-layers">CSS Cascade Layers</a> a.k.a the <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@layer">@layer CSS rule</a>. It&#8217;s something advanced. We&#8217;ll discuss that in the future, you can check out the links in the meantime.</p><h1>Video</h1><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;ba349099-c76d-43b1-a77a-8af2ff7121e1&quot;,&quot;duration&quot;:null}"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dd.jec.fish/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading DevTools &amp; Donuts! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Debug WebAssembly with Chrome DevTools]]></title><description><![CDATA[Yes but you need an extension for that.]]></description><link>https://dd.jec.fish/p/debug-webassembly-with-chrome-devtools</link><guid isPermaLink="false">https://dd.jec.fish/p/debug-webassembly-with-chrome-devtools</guid><dc:creator><![CDATA[Jecelyn Yeen]]></dc:creator><pubDate>Fri, 12 Jan 2024 11:30:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3eea300d-c635-4b55-8234-2dc937ebdb63_2002x1122.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>I&#8217;m <a href="https://www.linkedin.com/in/jecfish/">Jecelyn Yeen</a>, currently working on Chrome Tooling - Chrome DevTools, Puppeteer and more at Google. I tend to talk about web development, debugging &amp; testing.</em></p><p>Prefer video over text? Head to the end for the video version.</p><p><strong>Awesome news!</strong> DevTools now lets you debug C and C++ code in your WebAssembly (wasm) applications. This means you can easily explore and fix issues in your code, just like you do with JavaScript.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hgEO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F955e0503-d1b9-4bba-8390-8caaa4938e6e_2004x1126.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hgEO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F955e0503-d1b9-4bba-8390-8caaa4938e6e_2004x1126.png 424w, https://substackcdn.com/image/fetch/$s_!hgEO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F955e0503-d1b9-4bba-8390-8caaa4938e6e_2004x1126.png 848w, https://substackcdn.com/image/fetch/$s_!hgEO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F955e0503-d1b9-4bba-8390-8caaa4938e6e_2004x1126.png 1272w, https://substackcdn.com/image/fetch/$s_!hgEO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F955e0503-d1b9-4bba-8390-8caaa4938e6e_2004x1126.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hgEO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F955e0503-d1b9-4bba-8390-8caaa4938e6e_2004x1126.png" width="1456" height="818" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/955e0503-d1b9-4bba-8390-8caaa4938e6e_2004x1126.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:818,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1847377,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hgEO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F955e0503-d1b9-4bba-8390-8caaa4938e6e_2004x1126.png 424w, https://substackcdn.com/image/fetch/$s_!hgEO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F955e0503-d1b9-4bba-8390-8caaa4938e6e_2004x1126.png 848w, https://substackcdn.com/image/fetch/$s_!hgEO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F955e0503-d1b9-4bba-8390-8caaa4938e6e_2004x1126.png 1272w, https://substackcdn.com/image/fetch/$s_!hgEO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F955e0503-d1b9-4bba-8390-8caaa4938e6e_2004x1126.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Before installing wasm debugging extension, you can only view the disassembly file.</figcaption></figure></div><p>You need to install the <strong><a href="https://goo.gle/wasm-debugging-extension">WebAssembly Debugging extension</a></strong>. This helps DevTools understand the debugging information stored in your wasm files.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Uv2Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3eea300d-c635-4b55-8234-2dc937ebdb63_2002x1122.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Uv2Z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3eea300d-c635-4b55-8234-2dc937ebdb63_2002x1122.png 424w, https://substackcdn.com/image/fetch/$s_!Uv2Z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3eea300d-c635-4b55-8234-2dc937ebdb63_2002x1122.png 848w, https://substackcdn.com/image/fetch/$s_!Uv2Z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3eea300d-c635-4b55-8234-2dc937ebdb63_2002x1122.png 1272w, https://substackcdn.com/image/fetch/$s_!Uv2Z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3eea300d-c635-4b55-8234-2dc937ebdb63_2002x1122.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Uv2Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3eea300d-c635-4b55-8234-2dc937ebdb63_2002x1122.png" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3eea300d-c635-4b55-8234-2dc937ebdb63_2002x1122.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:934578,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Uv2Z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3eea300d-c635-4b55-8234-2dc937ebdb63_2002x1122.png 424w, https://substackcdn.com/image/fetch/$s_!Uv2Z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3eea300d-c635-4b55-8234-2dc937ebdb63_2002x1122.png 848w, https://substackcdn.com/image/fetch/$s_!Uv2Z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3eea300d-c635-4b55-8234-2dc937ebdb63_2002x1122.png 1272w, https://substackcdn.com/image/fetch/$s_!Uv2Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3eea300d-c635-4b55-8234-2dc937ebdb63_2002x1122.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">After installing the wasm debugging extension, you can view the cc file.</figcaption></figure></div><p><strong>Once installed:</strong></p><ul><li><p>You'll see your C++ source files right inside your application.</p></li><li><p>Open them to view the code, set breakpoints (stopping points), and start debugging!</p></li><li><p>We've also made "stepping over" code smoother so you can navigate easily.</p></li></ul><p><strong>Bonus:</strong> We've also improved how the debugger works with WebAssembly disassembly files, making your debugging experience even better!</p><p><strong>Want to learn more?</strong> Check out this link for more information on debugging WebAssembly: <a href="https://goo.gle/devtools-wasm">goo.gle/devtools-wasm</a>.</p><h1>Video</h1><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;8ab6c21b-85d0-4e6d-a8e6-c94d2c8f8b4c&quot;,&quot;duration&quot;:null}"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dd.jec.fish/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading <strong>DevTools &amp; Donuts</strong>! Subscribe for DevTools insights, tasty bites, no need for forks or knives. </p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[View CSS specificity in Chrome DevTools]]></title><description><![CDATA[Which CSS selectors have higher priority? No need to guess, look at their specificity in DevTools!]]></description><link>https://dd.jec.fish/p/view-css-specificity-in-chrome-devtools</link><guid isPermaLink="false">https://dd.jec.fish/p/view-css-specificity-in-chrome-devtools</guid><dc:creator><![CDATA[Jecelyn Yeen]]></dc:creator><pubDate>Tue, 09 Jan 2024 07:00:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05295a00-4a7b-4bca-a6d6-1bfea4ffbad5_932x530.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>I&#8217;m <a href="https://www.linkedin.com/in/jecfish/">Jecelyn Yeen</a>, currently working on Chrome Tooling - Chrome DevTools, Puppeteer and more at Google. I tend to talk about web development, debugging &amp; testing.</em></p><p>Prefer video over text? Head to the end for the video version.</p><p>Have you ever wondered why certain styles in your web page seem to override others? Don't worry, you're not alone! Understanding <a href="https://developer.mozilla.org/docs/Web/CSS/Specificity">how CSS determines which rules to apply can be tricky</a>. But guess what? DevTools can help you unravel the mystery!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mv9S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74e89d2a-6e00-4307-9e70-3f60a2dbfd42_2002x1126.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mv9S!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74e89d2a-6e00-4307-9e70-3f60a2dbfd42_2002x1126.png 424w, https://substackcdn.com/image/fetch/$s_!mv9S!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74e89d2a-6e00-4307-9e70-3f60a2dbfd42_2002x1126.png 848w, https://substackcdn.com/image/fetch/$s_!mv9S!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74e89d2a-6e00-4307-9e70-3f60a2dbfd42_2002x1126.png 1272w, https://substackcdn.com/image/fetch/$s_!mv9S!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74e89d2a-6e00-4307-9e70-3f60a2dbfd42_2002x1126.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mv9S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74e89d2a-6e00-4307-9e70-3f60a2dbfd42_2002x1126.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/74e89d2a-6e00-4307-9e70-3f60a2dbfd42_2002x1126.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:745322,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mv9S!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74e89d2a-6e00-4307-9e70-3f60a2dbfd42_2002x1126.png 424w, https://substackcdn.com/image/fetch/$s_!mv9S!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74e89d2a-6e00-4307-9e70-3f60a2dbfd42_2002x1126.png 848w, https://substackcdn.com/image/fetch/$s_!mv9S!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74e89d2a-6e00-4307-9e70-3f60a2dbfd42_2002x1126.png 1272w, https://substackcdn.com/image/fetch/$s_!mv9S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74e89d2a-6e00-4307-9e70-3f60a2dbfd42_2002x1126.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Let's look at the example above:</strong> We begin by inspecting a hyperlink in the DevTools <strong>Styles</strong> pane. Hovering over the <code>&lt;a&gt;</code> selector reveals its specificity score of "0, 0, 1". This score acts as a measure of how specific a selector is, determining its dominance in the battle of styles. </p><p>The 3 score represents the <a href="https://developer.mozilla.org/docs/Web/CSS/Specificity#selector_weight_categories">total of ID, CLASS, TYPE</a> in the selected selector.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GW0V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05295a00-4a7b-4bca-a6d6-1bfea4ffbad5_932x530.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GW0V!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05295a00-4a7b-4bca-a6d6-1bfea4ffbad5_932x530.png 424w, https://substackcdn.com/image/fetch/$s_!GW0V!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05295a00-4a7b-4bca-a6d6-1bfea4ffbad5_932x530.png 848w, https://substackcdn.com/image/fetch/$s_!GW0V!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05295a00-4a7b-4bca-a6d6-1bfea4ffbad5_932x530.png 1272w, https://substackcdn.com/image/fetch/$s_!GW0V!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05295a00-4a7b-4bca-a6d6-1bfea4ffbad5_932x530.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GW0V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05295a00-4a7b-4bca-a6d6-1bfea4ffbad5_932x530.png" width="932" height="530" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/05295a00-4a7b-4bca-a6d6-1bfea4ffbad5_932x530.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:530,&quot;width&quot;:932,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:197877,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GW0V!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05295a00-4a7b-4bca-a6d6-1bfea4ffbad5_932x530.png 424w, https://substackcdn.com/image/fetch/$s_!GW0V!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05295a00-4a7b-4bca-a6d6-1bfea4ffbad5_932x530.png 848w, https://substackcdn.com/image/fetch/$s_!GW0V!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05295a00-4a7b-4bca-a6d6-1bfea4ffbad5_932x530.png 1272w, https://substackcdn.com/image/fetch/$s_!GW0V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05295a00-4a7b-4bca-a6d6-1bfea4ffbad5_932x530.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Think of it like a game:</strong> The higher the score on the left, the more likely that rule wins and decides the final color. </p><p>In our case, we see that the color pink has a higher score than yellow because it uses an <strong>ID selector (</strong>thus scores 1, 0, 0<strong>)</strong>, which is a stronger type of selector.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vRNQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4828ebce-5b2e-49fb-b9f9-e42d888fb7f3_932x524.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vRNQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4828ebce-5b2e-49fb-b9f9-e42d888fb7f3_932x524.png 424w, https://substackcdn.com/image/fetch/$s_!vRNQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4828ebce-5b2e-49fb-b9f9-e42d888fb7f3_932x524.png 848w, https://substackcdn.com/image/fetch/$s_!vRNQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4828ebce-5b2e-49fb-b9f9-e42d888fb7f3_932x524.png 1272w, https://substackcdn.com/image/fetch/$s_!vRNQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4828ebce-5b2e-49fb-b9f9-e42d888fb7f3_932x524.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vRNQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4828ebce-5b2e-49fb-b9f9-e42d888fb7f3_932x524.png" width="932" height="524" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4828ebce-5b2e-49fb-b9f9-e42d888fb7f3_932x524.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:524,&quot;width&quot;:932,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:204203,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vRNQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4828ebce-5b2e-49fb-b9f9-e42d888fb7f3_932x524.png 424w, https://substackcdn.com/image/fetch/$s_!vRNQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4828ebce-5b2e-49fb-b9f9-e42d888fb7f3_932x524.png 848w, https://substackcdn.com/image/fetch/$s_!vRNQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4828ebce-5b2e-49fb-b9f9-e42d888fb7f3_932x524.png 1272w, https://substackcdn.com/image/fetch/$s_!vRNQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4828ebce-5b2e-49fb-b9f9-e42d888fb7f3_932x524.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Now, the fun part:</strong> Let's predict what happens with the following CSS, we hover over the hyperlink. <strong>Which color will the text and background turn into?</strong> We can use our knowledge of selector specificity to make an educated guess.</p><pre><code>&lt;style&gt;

a { color: yellow; &#65373;

#home-link { color: hotpink; }

div &gt; a.primary: hover { color: rebeccapurple; background: black; &#65373;

div &gt; a[role="button"] :hover { background: blue; &#65373;

&lt;/style&gt;</code></pre><p><strong>DevTools to the rescue!</strong> We can use DevTools to confirm our prediction. We see that the <strong>text remains pink</strong> thanks to its high specificity score. However, the <strong>background becomes blue</strong> because the two hover rules have the same score, and the last rule written in the code wins.</p><ol><li><p>Specificity 1, 0, 0: <code>#home-link</code> (winning because its ID score on the left is the highest)</p></li><li><p>Specificity 0, 2, 2: <code>div &gt; a[role="button"] :hover</code> (same score as the next one, winning because of its position, it is the last rule)</p></li><li><p>Specificity 0, 2, 2: <code>div &gt; a.primary: hover</code></p></li><li><p>Specificity 0, 0, 1: <code>a </code></p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!snZI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b68f85-5601-45a2-9fbb-5bb5ae4ca0bf_2002x1124.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!snZI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b68f85-5601-45a2-9fbb-5bb5ae4ca0bf_2002x1124.png 424w, https://substackcdn.com/image/fetch/$s_!snZI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b68f85-5601-45a2-9fbb-5bb5ae4ca0bf_2002x1124.png 848w, https://substackcdn.com/image/fetch/$s_!snZI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b68f85-5601-45a2-9fbb-5bb5ae4ca0bf_2002x1124.png 1272w, https://substackcdn.com/image/fetch/$s_!snZI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b68f85-5601-45a2-9fbb-5bb5ae4ca0bf_2002x1124.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!snZI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b68f85-5601-45a2-9fbb-5bb5ae4ca0bf_2002x1124.png" width="1456" height="817" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/28b68f85-5601-45a2-9fbb-5bb5ae4ca0bf_2002x1124.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:817,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:777757,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!snZI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b68f85-5601-45a2-9fbb-5bb5ae4ca0bf_2002x1124.png 424w, https://substackcdn.com/image/fetch/$s_!snZI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b68f85-5601-45a2-9fbb-5bb5ae4ca0bf_2002x1124.png 848w, https://substackcdn.com/image/fetch/$s_!snZI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b68f85-5601-45a2-9fbb-5bb5ae4ca0bf_2002x1124.png 1272w, https://substackcdn.com/image/fetch/$s_!snZI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b68f85-5601-45a2-9fbb-5bb5ae4ca0bf_2002x1124.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>See? It's not so complicated after all!</strong> With DevTools by your side, you can figure out why your styles behave the way they do. You'll be able to predict how different rules interact and create amazing layouts with confidence.</p><p>So next time you're struggling with CSS, remember that DevTools is your superpower to crack the code!</p><h1>Video</h1><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;e6bc2f64-6fc8-4b05-bd6d-1f48bba3993d&quot;,&quot;duration&quot;:null}"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dd.jec.fish/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading DevTools &amp; Donuts! Subscribe for DevTools insights, tasty bites, no need for forks or knives.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[👋🏽 Coming soon]]></title><description><![CDATA[Subscribe for bite-sized news on web development tooling.]]></description><link>https://dd.jec.fish/p/coming-soon</link><guid isPermaLink="false">https://dd.jec.fish/p/coming-soon</guid><dc:creator><![CDATA[Jecelyn Yeen]]></dc:creator><pubDate>Sun, 20 Nov 2022 18:13:21 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1611288865035-d953889ce0aa?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHwxMTF8fHRvb2xzfGVufDB8fHx8MTY2ODk2OTQxNg&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Subscribe this space for bite-sized news on web development tooling.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1611288865035-d953889ce0aa?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHwxMTF8fHRvb2xzfGVufDB8fHx8MTY2ODk2OTQxNg&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1611288865035-d953889ce0aa?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHwxMTF8fHRvb2xzfGVufDB8fHx8MTY2ODk2OTQxNg&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1611288865035-d953889ce0aa?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHwxMTF8fHRvb2xzfGVufDB8fHx8MTY2ODk2OTQxNg&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1611288865035-d953889ce0aa?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHwxMTF8fHRvb2xzfGVufDB8fHx8MTY2ODk2OTQxNg&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1611288865035-d953889ce0aa?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHwxMTF8fHRvb2xzfGVufDB8fHx8MTY2ODk2OTQxNg&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1611288865035-d953889ce0aa?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHwxMTF8fHRvb2xzfGVufDB8fHx8MTY2ODk2OTQxNg&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" width="1080" height="1620" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1611288865035-d953889ce0aa?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHwxMTF8fHRvb2xzfGVufDB8fHx8MTY2ODk2OTQxNg&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1620,&quot;width&quot;:1080,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;person holding gray metal tool&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="person holding gray metal tool" title="person holding gray metal tool" srcset="https://images.unsplash.com/photo-1611288865035-d953889ce0aa?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHwxMTF8fHRvb2xzfGVufDB8fHx8MTY2ODk2OTQxNg&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1611288865035-d953889ce0aa?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHwxMTF8fHRvb2xzfGVufDB8fHx8MTY2ODk2OTQxNg&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1611288865035-d953889ce0aa?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHwxMTF8fHRvb2xzfGVufDB8fHx8MTY2ODk2OTQxNg&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1611288865035-d953889ce0aa?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHwxMTF8fHRvb2xzfGVufDB8fHx8MTY2ODk2OTQxNg&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@rechaoktaviani">Recha Oktaviani</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dd.jec.fish/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://dd.jec.fish/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item></channel></rss>