Help
RSS
API
Feed
Maltego
Contact
Domain > brmwch.co.uk
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2025-12-14
172.67.187.81
(
ClassC
)
Port 443
HTTP/1.1 200 OKDate: Sun, 14 Dec 2025 19:45:37 GMTContent-Type: text/html; charsetutf-8Transfer-Encoding: chunkedConnection: keep-aliveaccess-control-allow-origin: *Age: 615122Cache-Control: public, max-age0, must-revalidatecontent-disposition: inlineReport-To: {group:cf-nel,max_age:604800,endpoints:{url:https://a.nel.cloudflare.com/report/v4?suBVvHw01owSLFj1JYffhaulipWHQNxDSNTZvlw4GSKJphA54nHWMELhgI5qufyu2UjEytX1f6JiCIHSCkxab4vDIeZIbUpW9ou0%3D}}Nel: {report_to:cf-nel,success_fraction:0.0,max_age:604800}Server: cloudflarestrict-transport-security: max-age63072000vary: RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Router-Segment-Prefetchvary: accept-encodingx-matched-path: /x-nextjs-prerender: 1x-nextjs-stale-time: 300x-vercel-cache: HITx-vercel-id: pdx1::9bvqm-1765741537402-bec0dc86d337cf-cache-status: DYNAMICCF-RAY: 9ae033e07a50efac-PDXalt-svc: h3:443; ma86400 !DOCTYPE html>!--j_Fgbmnal8F2V6AC4QeAn-->html langen classdark scroll-smooth stylecolor-scheme:dark>head>meta charSetutf-8/>meta nameviewport contentwidthdevice-width, initial-scale1.0/>meta nameviewport contentwidthdevice-width, initial-scale1/>link relpreload href/_next/static/media/93f479601ee12b01-s.p.woff2 asfont crossorigin typefont/woff2/>link relpreload href/_next/static/media/e4af272ccee01ff0-s.p.woff2 asfont crossorigin typefont/woff2/>link relstylesheet href/_next/static/css/23bd3abf1853b218.css data-precedencenext/>link relstylesheet href/_next/static/css/8b8ac3e59d6eda20.css data-precedencenext/>link relpreload asscript fetchPrioritylow href/_next/static/chunks/webpack-2b1f7bb23764a9db.js/>script src/_next/static/chunks/4bd1b696-b8480a5056ad6aef.js async>/script>script src/_next/static/chunks/5964-740ce711b34d651a.js async>/script>script src/_next/static/chunks/main-app-b6051349a61871d8.js async>/script>script src/_next/static/chunks/4987-c6e546000afc06f9.js async>/script>script src/_next/static/chunks/5206-1426d15457828cb8.js async>/script>script src/_next/static/chunks/7288-fb86b25ccad6f8b5.js async>/script>script src/_next/static/chunks/app/layout-c38f5ecec94027c5.js async>/script>script src/_next/static/chunks/app/error-bd827308612dc1ad.js async>/script>script src/_next/static/chunks/4524-832801bc32e9c677.js async>/script>script src/_next/static/chunks/9752-26e3837ceb9edee9.js async>/script>script src/_next/static/chunks/app/page-c0844842542ec19f.js async>/script>script src/_next/static/chunks/app/not-found-d480c2a396202fd2.js async>/script>meta namenext-size-adjust content/>link relmanifest href/manifest.json/>meta nametheme-color content#e5512e/>link relapple-touch-icon href/icon-192x192.png/>link relalternate typeapplication/rss+xml titleRSS Feed href/feed.xml/>title>Ian Bromwich - Sheffield based web developer - brmwch/title>meta namedescription contentPassionate web developer with over a decade of experience. Blog about code, web development, and tech./>meta namekeywords contentWeb developer,Software Engineer,Ian Bromwich,Front-end,Full-stack,React,TypeScript,PHP,MySQL,CSS,WordPress,Tailwind,Next.js,Sheffield/>meta propertyog:title contentIan Bromwich - Sheffield based web developer/>meta propertyog:description contentPassionate web developer with over a decade of experience. Blog about code, web development, and tech./>meta propertyog:url contenthttps://brmwch.com/>meta propertyog:site_name contentIan Bromwich/>meta propertyog:image contenthttps://brmwch.com/og-image.png/>meta propertyog:image:width content1200/>meta propertyog:image:height content630/>meta propertyog:image:alt contentIan Bromwich - Sheffield based web developer/>meta propertyog:type contentwebsite/>meta nametwitter:card contentsummary_large_image/>meta nametwitter:title contentIan Bromwich - Sheffield based web developer/>meta nametwitter:description contentPassionate web developer with over a decade of experience. Blog about code, web development, and tech./>meta nametwitter:image contenthttps://brmwch.com/og-image.png/>script src/_next/static/chunks/polyfills-42372ed130431b0a.js noModule>/script>/head>body class__className_3eb911>div hidden>!--$-->!--/$-->/div>a classbg-primary text-primary-content absolute left-0 top-0 z-50 m-3 -translate-y-full p-3 transition focus:translate-y-0 href#content>Skip Navigation/a>div classouter-wrapper w-full border-wireframe xl:mx-auto>header classsticky w-full top-0 z-50 border-b border-wireframe md:px-4 backdrop-blur bg-body-background/50>div classrelative mx-auto grid max-w-7xl grid-cols-12>div classcol-start-2 col-end-12 flex flex-row content-center items-center justify-between px-2 py-6 styleopacity:0>div classflex flex-wrap content-center>a aria-labelGoto homepage classflex flex-row items-center text-3xl href/>svg xmlnshttp://www.w3.org/2000/svg width65 height65 fillnone>title>brmwch/title>circle cx32.5 cy32.5 r32.5 stylefill:var(--main-accent)>/circle>path fill#fff dM9.62 18.8h1.68v5c.6-1.06 1.68-1.64 3.26-1.64 3.06 0 4.46 2.62 4.46 5.54s-1.4 5.54-4.46 5.54c-1.64 0-2.78-.66-3.36-1.76L11.14 33H9.62V18.8Zm1.52 8.9c0 1.98.88 3.94 3.06 3.94 2.2 0 3.06-1.92 3.06-3.94 0-2.1-.86-4.02-3.06-4.02-2.18 0-3.06 1.96-3.06 4.02Zm14.67-5.3.14 2c.38-1.36 1.24-2 2.64-2h2.12v1.48H28.6c-1.62 0-2.38.98-2.38 2.8v4.84h3.46V33h-7.9v-1.48h2.76v-7.64h-2.76V22.4h4.04Zm7.11 0h1.54l.06 1.46c.4-1.1 1.12-1.7 2.18-1.7.92 0 1.48.6 1.8 1.98.38-1.22 1.24-1.98 2.34-1.98 1.62 0 2.32 1.36 2.32 4.48V33h-1.68v-6.36c0-2.16-.32-3-1.14-3-.92 0-1.46 1.08-1.46 3V33H37.2v-6.36c0-2.14-.34-3-1.26-3-.82 0-1.32 1.08-1.32 3V33h-1.7V22.4ZM27.1 37.8l1.54 6.94 1.44-8.34h1.76L29.67 47h-2.04l-1.44-6.48L24.75 47h-2.04l-2.16-10.6h1.76l1.44 8.34 1.54-6.94h1.8Zm14.01 2.16a2.62 2.62 0 0 0-2.66-2.2c-1.96 0-3.08 1.48-3.08 3.94s1.12 3.94 3.08 3.94c1.34 0 2.48-.88 2.74-2.4l1.78.12a4.45 4.45 0 0 1-4.52 3.88c-2.94 0-4.84-2.18-4.84-5.54s1.9-5.54 4.84-5.54c2.16 0 4.12 1.4 4.42 3.68l-1.76.12Zm5.1-7.16h1.68v5.02c.62-1.14 1.86-1.66 3.16-1.66 2.4 0 3.56 1.78 3.56 4.02V47h-1.68v-6.22c0-1.96-.64-3.02-2.24-3.02-1.7 0-2.8 1.06-2.8 3.02V47H46.2V32.8Z>/path>/svg>/a>/div>div classnav-wrapper absolute left-0 top-full z-50 w-full grid-cols-12 bg-black bg-opacity-95 md:relative md:top-0 md:mb-0 md:mt-0 md:flex md:w-auto md:bg-transparent hidden idnavigation-menu styleopacity:1;transform:none>nav classcol-start-2 col-end-12 px-2 >ul classnav-links relative col-start-2 col-end-12 flex w-full flex-col items-end gap-1 overflow-hidden overflow-x-auto md:ml-auto md:flex-row md:items-center>li classrelative>div classsc-d0ad4bf8-0 jledaI rounded-full md:text-left>/div>div classflex justify-end md:inline-flex md:justify-center>a classactive navigation-link relative z-10 block rounded-full py-2 text-sm font-medium leading-tight focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-white md:px-4 href/>Home/a>/div>/li>li classrelative>div classflex justify-end md:inline-flex md:justify-center>a classnavigation-link relative z-10 block rounded-full py-2 text-sm font-medium leading-tight focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-white md:px-4 href/blog>Blog/a>/div>/li>li classrelative>div classflex justify-end md:inline-flex md:justify-center>a classnavigation-link relative z-10 block rounded-full py-2 text-sm font-medium leading-tight focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-white md:px-4 href/bookmarks>Bookmarks/a>/div>/li>li classrelative>div classflex justify-end md:inline-flex md:justify-center>a classnavigation-link relative z-10 block rounded-full py-2 text-sm font-medium leading-tight focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-white md:px-4 href/snippets>Snippets/a>/div>/li>li classrelative>div classflex justify-end md:inline-flex md:justify-center>a classnavigation-link relative z-10 block rounded-full py-2 text-sm font-medium leading-tight focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-white md:px-4 href/about>About/a>/div>/li>/ul>/nav>/div>button aria-expandedfalse aria-controlsnavigation-menu classnavigation-button flex items-center justify-center gap-2 bg-white bg-opacity-10 px-4 py-3 md:hidden>span classuppercase>Menu/span>span classburgerLayers>/span>/button>/div>/div>/header>main idcontent>div styleopacity:0.1>script typeapplication/ld+json>{@context:https://schema.org,@type:Person,name:Ian Bromwich,url:https://brmwch.com,jobTitle:Web Developer,description:Sheffield based web developer - Blog, code snippets, and bookmarks,address:{@type:PostalAddress,addressLocality:Sheffield,addressCountry:UK}}/script>section classmd:sticky welcome-hero inner-hero>div classhp-hero container mx-auto grid max-w-7xl grid-cols-12 border-wireframe>div classorder-2 sm:order-1 col-start-2 col-end-12 sm:col-start-2 max-h-192 px-2 pb-16 pt-16 sm:col-end-10 sm:pb-24 sm:pt-24>h1 classtext-5xl leading-none __className_5f926d >Ian Bromwichbr/>Web Developer/h1>p classmt-6 text-base text-neutral-300 text-balance>Passionate web developer with over a decades worth of experience. Also; Boy dad, tinkerer, gamer, software engineer and animal lover./p>p classmt-6 text-base text-neutral-300 text-balance>Most recently Software Developer at the University of Sheffield. I’m not a writer but am hoping that blogging a little often will improve my writing skills./p>/div>/div>/section>div classbg-body-background relative>div classborder-t border-wireframe>section classcontainer mx-auto grid max-w-7xl grid-cols-12>div classcol-start-2 col-end-12 px-2 py-12>div classpb-3>h2 classsc-b0d7c6fb-0 jbvBtc text-4xl font-medium __className_5f926d>Posts!-- --> span rolepresentation classanimate-pulse>_/span>/h2>/div>section>ul classgrid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-3>li>div styletransform:translateY(1rem);opacity:0;transition:all 0.35s cubic-bezier(0.17, 0.55, 0.55, 1) 0.2s;transition-delay:0s classh-full>article classsmart-card_smart-card__jbBUK relative flex h-full flex-col bg-white/5>div classsmart-card_background__U7bru aria-hiddentrue>/div>div classsmart-card_content__tA6Cr>div classrelative aspect-3/2 bg-#84849c>div class flex h-full w-full items-center justify-center>img altIcon of a hiker using a pole and wearing a backpack loadinglazy width120 height120 decodingasync data-nimg1 stylecolor:transparent srchttps://cdn.sanity.io/images/v6w7d5ry/production/d34c549846d72cbd5dd20fdcf309aff434319e24-32x32.svg/>/div>/div>a classflex w-full px-6 pt-6 text-xl font-medium leading-tight text-card-title ${monospaceFont.className} after:absolute after:inset-0 href/blog/roque-nublo-hiking-guide-2025>Roque Nublo Hiking Guide 2025/a>div classmt-auto flex items-center px-6 pb-6 pt-4 text-xs text-neutral-400>div classflex items-center mr-4>svg width20 height20 fillnone viewBox0 0 24 24 aria-hiddentrue classmr-1>title>Clock Icon/title>circle cx12 cy12 r7.25 strokecurrentColor stroke-width1.5>/circle>path strokecurrentColor stroke-width1.5 dM12 8V12L14 14>/path>/svg>span>5!-- --> min/span>/div>div classflex items-center>svg width20 height20 fillnone viewBox0 0 24 24 aria-hiddentrue classmr-1>title>Calendar Icon/title>path strokecurrentColor stroke-linecapround stroke-linejoinround stroke-width1.5 dM4.75 8.75C4.75 7.64543 5.64543 6.75 6.75 6.75H17.25C18.3546 6.75 19.25 7.64543 19.25 8.75V17.25C19.25 18.3546 18.3546 19.25 17.25 19.25H6.75C5.64543 19.25 4.75 18.3546 4.75 17.25V8.75Z>/path>path strokecurrentColor stroke-linecapround stroke-linejoinround stroke-width1.5 dM8 4.75V8.25>/path>path strokecurrentColor stroke-linecapround stroke-linejoinround stroke-width1.5 dM16 4.75V8.25>/path>path strokecurrentColor stroke-linecapround stroke-linejoinround stroke-width1.5 dM7.75 10.75H16.25>/path>/svg>span>7th December 2025/span>/div>/div>/div>/article>/div>/li>li>div styletransform:translateY(1rem);opacity:0;transition:all 0.35s cubic-bezier(0.17, 0.55, 0.55, 1) 0.2s;transition-delay:0.2s classh-full>article classsmart-card_smart-card__jbBUK relative flex h-full flex-col bg-white/5>div classsmart-card_background__U7bru aria-hiddentrue>/div>div classsmart-card_content__tA6Cr>div classrelative aspect-3/2 bg-#84849c>div class flex h-full w-full items-center justify-center>img altSticky header loadinglazy width120 height120 decodingasync data-nimg1 stylecolor:transparent srchttps://cdn.sanity.io/images/v6w7d5ry/production/2ee6d371b5ff0519f339d4fe16c4355b6e5d34ea-140x140.svg/>/div>/div>a classflex w-full px-6 pt-6 text-xl font-medium leading-tight text-card-title ${monospaceFont.className} after:absolute after:inset-0 href/blog/making-a-sticky-header-meet-wcag-2-2>Making a sticky header meet WCAG 2.2 guidelines/a>div classmt-2 px-6 text-neutral-300>Building a sticky header that complies with WCAG 2.2 2.4.1 success criterion/div>div classmt-auto flex items-center px-6 pb-6 pt-4 text-xs text-neutral-400>div classflex items-center mr-4>svg width20 height20 fillnone viewBox0 0 24 24 aria-hiddentrue classmr-1>title>Clock Icon/title>circle cx12 cy12 r7.25 strokecurrentColor stroke-width1.5>/circle>path strokecurrentColor stroke-width1.5 dM12 8V12L14 14>/path>/svg>span>3!-- --> min/span>/div>div classflex items-center>svg width20 height20 fillnone viewBox0 0 24 24 aria-hiddentrue classmr-1>title>Calendar Icon/title>path strokecurrentColor stroke-linecapround stroke-linejoinround stroke-width1.5 dM4.75 8.75C4.75 7.64543 5.64543 6.75 6.75 6.75H17.25C18.3546 6.75 19.25 7.64543 19.25 8.75V17.25C19.25 18.3546 18.3546 19.25 17.25 19.25H6.75C5.64543 19.25 4.75 18.3546 4.75 17.25V8.75Z>/path>path strokecurrentColor stroke-linecapround stroke-linejoinround stroke-width1.5 dM8 4.75V8.25>/path>path strokecurrentColor stroke-linecapround stroke-linejoinround stroke-width1.5 dM16 4.75V8.25>/path>path strokecurrentColor stroke-linecapround stroke-linejoinround stroke-width1.5 dM7.75 10.75H16.25>/path>/svg>span>21st February 2024/span>/div>/div>/div>/article>/div>/li>li>div styletransform:translateY(1rem);opacity:0;transition:all 0.35s cubic-bezier(0.17, 0.55, 0.55, 1) 0.2s;transition-delay:0.4s classh-full>article classsmart-card_smart-card__jbBUK relative flex h-full flex-col bg-white/5>div classsmart-card_background__U7bru aria-hiddentrue>/div>div classsmart-card_content__tA6Cr>div classrelative aspect-3/2 bg-#84849c>div class flex h-full w-full items-center justify-center>img altMagnifying glass with eye in the middle loadinglazy width120 height120 decodingasync data-nimg1 stylecolor:transparent srchttps://cdn.sanity.io/images/v6w7d5ry/production/83621882ba39b458152b42de0383c2b7399af3d6-24x24.svg/>/div>/div>a classflex w-full px-6 pt-6 text-xl font-medium leading-tight text-card-title ${monospaceFont.className} after:absolute after:inset-0 href/blog/why-do-visually-hidden-classes-have-1px-width-and-height>Why do visually hidden classes have 1px width and height?/a>div classmt-2 px-6 text-neutral-300>Hint, 🧭/div>div classmt-auto flex items-center px-6 pb-6 pt-4 text-xs text-neutral-400>div classflex items-center mr-4>svg width20 height20 fillnone viewBox0 0 24 24 aria-hiddentrue classmr-1>title>Clock Icon/title>circle cx12 cy12 r7.25 strokecurrentColor stroke-width1.5>/circle>path strokecurrentColor stroke-width1.5 dM12 8V12L14 14>/path>/svg>span>1!-- --> min/span>/div>div classflex items-center>svg width20 height20 fillnone viewBox0 0 24 24 aria-hiddentrue classmr-1>title>Calendar Icon/title>path strokecurrentColor stroke-linecapround stroke-linejoinround stroke-width1.5 dM4.75 8.75C4.75 7.64543 5.64543 6.75 6.75 6.75H17.25C18.3546 6.75 19.25 7.64543 19.25 8.75V17.25C19.25 18.3546 18.3546 19.25 17.25 19.25H6.75C5.64543 19.25 4.75 18.3546 4.75 17.25V8.75Z>/path>path strokecurrentColor stroke-linecapround stroke-linejoinround stroke-width1.5 dM8 4.75V8.25>/path>path strokecurrentColor stroke-linecapround stroke-linejoinround stroke-width1.5 dM16 4.75V8.25>/path>path strokecurrentColor stroke-linecapround stroke-linejoinround stroke-width1.5 dM7.75 10.75H16.25>/path>/svg>span>21st February 2024/span>/div>/div>/div>/article>/div>/li>/ul>/section>/div>/section>/div>div classborder-t border-wireframe>section classcontainer mx-auto grid max-w-7xl grid-cols-12>div classcol-start-2 col-end-12 px-2 py-12>div classpb-3>h2 classsc-b0d7c6fb-0 jbvBtc text-4xl font-medium __className_5f926d>Snippets!-- --> span rolepresentation classanimate-pulse>_/span>/h2>/div>section>ul classgrid grid-cols-1 gap-6 md:grid-cols-2 xl:grid-cols-3>li classflex h-full flex-col>div classh-full styletransform:translateY(1.5rem);opacity:0;transition:all 0.6s cubic-bezier(0.17, 0.55, 0.55, 1) 0.2s>article classsmart-card_smart-card__jbBUK relative flex h-full flex-col bg-white/5 p-6>div classsmart-card_background__U7bru aria-hiddentrue>/div>div classsmart-card_content__tA6Cr>h2 classtext-xl font-medium leading-tight text-card-title __className_5f926d>a classafter:absolute after:inset-0 href/snippets/whm-php-list-versions>Generate a list of PHP versions being used by accounts on a WHM server./a>/h2>p classtext mt-2 text-neutral-300>Simple script to output comma separated account name and PHP version/p>/div>/article>/div>/li>li classflex h-full flex-col>div classh-full styletransform:translateY(1.5rem);opacity:0;transition:all 0.6s cubic-bezier(0.17, 0.55, 0.55, 1) 0.33s>article classsmart-card_smart-card__jbBUK relative flex h-full flex-col bg-white/5 p-6>div classsmart-card_background__U7bru aria-hiddentrue>/div>div classsmart-card_content__tA6Cr>h2 classtext-xl font-medium leading-tight text-card-title __className_5f926d>a classafter:absolute after:inset-0 href/snippets/using-tolocaletimestring-without-displaying-seconds>Using toLocaleTimeString without displaying seconds/a>/h2>p classtext mt-2 text-neutral-300>Using toLocaleTimeString without displaying seconds/p>/div>/article>/div>/li>li classflex h-full flex-col>div classh-full styletransform:translateY(1.5rem);opacity:0;transition:all 0.6s cubic-bezier(0.17, 0.55, 0.55, 1) 0.66s>article classsmart-card_smart-card__jbBUK relative flex h-full flex-col bg-white/5 p-6>div classsmart-card_background__U7bru aria-hiddentrue>/div>div classsmart-card_content__tA6Cr>h2 classtext-xl font-medium leading-tight text-card-title __className_5f926d>a classafter:absolute after:inset-0 href/snippets/output-focused-elements-to-console>Output focused elements to console/a>/h2>p classtext mt-2 text-neutral-300>Really useful script for outputting focused element into developer console/p>div classmt-auto flex items-center pt-6>ul>li>span classsc-c66f1526-0 chmygx inline-flex rounded-full bg-white/.1 px-3 py-1 text-xs> !-- -->Javascript/span>/li>/ul>/div>/div>/article>/div>/li>/ul>/section>/div>/section>/div>div classborder-t border-wireframe>section classcontainer mx-auto grid max-w-7xl grid-cols-12>div classcol-start-2 col-end-12 px-2 py-12>div classpb-3>h2 classsc-b0d7c6fb-0 jbvBtc text-4xl font-medium __className_5f926d>Bookmarks!-- --> span rolepresentation classanimate-pulse>_/span>/h2>/div>ul classgrid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3>li classflex h-full flex-col>div class styletransform:translateY(1.5rem);opacity:0;transition:all 0.6s cubic-bezier(0.17, 0.55, 0.55, 1) 0.2s>article classsmart-card_smart-card__jbBUK relative flex h-full flex-col bg-white/5 p-6>div classsmart-card_background__U7bru aria-hiddentrue>/div>div classsmart-card_content__tA6Cr>figure>blockquote titleOn the uses of a legendary past classmb-2 w-full overflow-hidden text-ellipsis whitespace-nowrap text-sm font-medium text-card-title __className_5f926d>On the uses of a legendary past/blockquote>div classmt-auto flex items-center>img altFavicon for On the uses of a legendary past loadinglazy width30 height30 decodingasync data-nimg1 classmr-2 stylecolor:transparent srchttps://t1.gstatic.com/faviconV2?clientSOCIAL&typeFAVICON&fallback_optsTYPE,SIZE,URL&urlhttps://engelsbergideas.com/essays/on-the-uses-of-a-legendary-past&size64/>a classbreak-all text-sm text-neutral-300 after:absolute after:inset-0 hrefhttps://engelsbergideas.com/essays/on-the-uses-of-a-legendary-past>engelsbergideas.com/a>/div>/figure>/div>/article>/div>/li>li classflex h-full flex-col>div class styletransform:translateY(1.5rem);opacity:0;transition:all 0.6s cubic-bezier(0.17, 0.55, 0.55, 1) 0.3s>article classsmart-card_smart-card__jbBUK relative flex h-full flex-col bg-white/5 p-6>div classsmart-card_background__U7bru aria-hiddentrue>/div>div classsmart-card_content__tA6Cr>figure>blockquote titleA comprehensive guide to error handling In Node.js classmb-2 w-full overflow-hidden text-ellipsis whitespace-nowrap text-sm font-medium text-card-title __className_5f926d>A comprehensive guide to error handling In Node.js/blockquote>div classmt-auto flex items-center>img altFavicon for A comprehensive guide to error handling In Node.js loadinglazy width30 height30 decodingasync data-nimg1 classmr-2 stylecolor:transparent srchttps://t1.gstatic.com/faviconV2?clientSOCIAL&typeFAVICON&fallback_optsTYPE,SIZE,URL&urlhttps://www.honeybadger.io/blog/errors-nodejs/&size64/>a classbreak-all text-sm text-neutral-300 after:absolute after:inset-0 hrefhttps://www.honeybadger.io/blog/errors-nodejs/>honeybadger.io/a>/div>/figure>/div>/article>/div>/li>li classflex h-full flex-col>div class styletransform:translateY(1.5rem);opacity:0;transition:all 0.6s cubic-bezier(0.17, 0.55, 0.55, 1) 0.6s>article classsmart-card_smart-card__jbBUK relative flex h-full flex-col bg-white/5 p-6>div classsmart-card_background__U7bru aria-hiddentrue>/div>div classsmart-card_content__tA6Cr>figure>blockquote titleMigrating 6000 React tests using AI Agents and ASTs classmb-2 w-full overflow-hidden text-ellipsis whitespace-nowrap text-sm font-medium text-card-title __className_5f926d>Migrating 6000 React tests using AI Agents and ASTs/blockquote>div classmt-auto flex items-center>img altFavicon for Migrating 6000 React tests using AI Agents and ASTs loadinglazy width30 height30 decodingasync data-nimg1 classmr-2 stylecolor:transparent srchttps://t1.gstatic.com/faviconV2?clientSOCIAL&typeFAVICON&fallback_optsTYPE,SIZE,URL&urlhttps://eliocapella.com/blog/ai-library-migration-guide/?utm_sourcecassidoo&utm_mediumemail&utm_campaignwe-all-have-our-down-days-but-its-not-hard-to&size64/>a classbreak-all text-sm text-neutral-300 after:absolute after:inset-0 hrefhttps://eliocapella.com/blog/ai-library-migration-guide/?utm_sourcecassidoo&utm_mediumemail&utm_campaignwe-all-have-our-down-days-but-its-not-hard-to>eliocapella.com/a>/div>/figure>/div>/article>/div>/li>li classflex h-full flex-col>div class styletransform:translateY(1.5rem);opacity:0;transition:all 0.6s cubic-bezier(0.17, 0.55, 0.55, 1) 0.8999999999999999s>article classsmart-card_smart-card__jbBUK relative flex h-full flex-col bg-white/5 p-6>div classsmart-card_background__U7bru aria-hiddentrue>/div>div classsmart-card_content__tA6Cr>figure>blockquote titleThe Web Animation Performance Tier List classmb-2 w-full overflow-hidden text-ellipsis whitespace-nowrap text-sm font-medium text-card-title __className_5f926d>The Web Animation Performance Tier List/blockquote>div classmt-auto flex items-center>img altFavicon for The Web Animation Performance Tier List loadinglazy width30 height30 decodingasync data-nimg1 classmr-2 stylecolor:transparent srchttps://t1.gstatic.com/faviconV2?clientSOCIAL&typeFAVICON&fallback_optsTYPE,SIZE,URL&urlhttps://motion.dev/blog/web-animation-performance-tier-list&size64/>a classbreak-all text-sm text-neutral-300 after:absolute after:inset-0 hrefhttps://motion.dev/blog/web-animation-performance-tier-list>motion.dev/a>/div>/figure>/div>/article>/div>/li>li classflex h-full flex-col>div class styletransform:translateY(1.5rem);opacity:0;transition:all 0.6s cubic-bezier(0.17, 0.55, 0.55, 1) 1.2s>article classsmart-card_smart-card__jbBUK relative flex h-full flex-col bg-white/5 p-6>div classsmart-card_background__U7bru aria-hiddentrue>/div>div classsmart-card_content__tA6Cr>figure>blockquote titleMost Technical Problems Are Really People Problems classmb-2 w-full overflow-hidden text-ellipsis whitespace-nowrap text-sm font-medium text-card-title __className_5f926d>Most Technical Problems Are Really People Problems/blockquote>div classmt-auto flex items-center>img altFavicon for Most Technical Problems Are Really People Problems loadinglazy width30 height30 decodingasync data-nimg1 classmr-2 stylecolor:transparent srchttps://t1.gstatic.com/faviconV2?clientSOCIAL&typeFAVICON&fallback_optsTYPE,SIZE,URL&urlhttps://blog.joeschrag.com/202311/most-technical-problems-are-really.html&size64/>a classbreak-all text-sm text-neutral-300 after:absolute after:inset-0 hrefhttps://blog.joeschrag.com/202311/most-technical-problems-are-really.html>blog.joeschrag.com/a>/div>/figure>/div>/article>/div>/li>li classflex h-full flex-col>div class styletransform:translateY(1.5rem);opacity:0;transition:all 0.6s cubic-bezier(0.17, 0.55, 0.55, 1) 1.5s>article classsmart-card_smart-card__jbBUK relative flex h-full flex-col bg-white/5 p-6>div classsmart-card_background__U7bru aria-hiddentrue>/div>div classsmart-card_content__tA6Cr>figure>blockquote titleCommon misconceptions about screen readers classmb-2 w-full overflow-hidden text-ellipsis whitespace-nowrap text-sm font-medium text-card-title __className_5f926d>Common misconceptions about screen readers/blockquote>div classmt-auto flex items-center>img altFavicon for Common misconceptions about screen readers loadinglazy width30 height30 decodingasync data-nimg1 classmr-2 stylecolor:transparent srchttps://t1.gstatic.com/faviconV2?clientSOCIAL&typeFAVICON&fallback_optsTYPE,SIZE,URL&urlhttps://tetralogical.com/blog/2025/10/14/common-misconceptions-about-screen-readers/&size64/>a classbreak-all text-sm text-neutral-300 after:absolute after:inset-0 hrefhttps://tetralogical.com/blog/2025/10/14/common-misconceptions-about-screen-readers/>tetralogical.com/a>/div>/figure>/div>/article>/div>/li>/ul>/div>/section>/div>/div>/div>!--$-->!--/$-->/main>footer classcontainer mx-auto grid max-w-7xl grid-cols-12 border-t border-wireframe>div classcol-start-2 col-end-12 px-2 py-12>div class styletransform:translateY(1.5rem);opacity:0;transition:all 0.6s cubic-bezier(0.17, 0.55, 0.55, 1) 0.2s>div classrow flex justify-between>div class__className_5f926d text-lg>© Ian Bromwich/div>div>ul classrow flex gap-4>li>a target_blank aria-labelIan Bromwich on LinkedIn hrefhttps://www.linkedin.com/in/ibromwich/>svg xmlnshttp://www.w3.org/2000/svg viewBox0 0 448 512 width24px height24px>path fillcurrentColor dM416 32H32C14 32 0 47 0 64v384c0 18 14 32 32 32h384c18 0 32-14 32-32V64c0-17-14-32-32-32zM135 416H69V202h67v214zm-33-243a39 39 0 1 1 0-77 39 39 0 0 1 0 77zm282 243h-66V312c0-25-1-57-35-57s-40 27-40 55v106h-66V202h64v29h1c9-16 30-34 63-34 67 0 79 44 79 102v117z>/path>/svg>/a>/li>li>a target_blank aria-labelIan Bromwich on X hrefhttps://x.com/ianbromwich>svg xmlnshttp://www.w3.org/2000/svg viewBox0 0 448 512 width24px height24px>path fillcurrentColor dM64 32C29 32 0 61 0 96v320c0 35 29 64 64 64h320c35 0 64-29 64-64V96c0-35-29-64-64-64H64zm297 84L257 235l122 161h-95l-75-98-86 98H76l111-127L70 116h98l67 90 79-90h47zm-38 252L153 143h-28l172 225h26z>/path>/svg>/a>/li>/ul>/div>/div>/div>/div>/footer>/div>div classcontainer max-w-7xl grid-cols-12 flex-col pointer-events-none fixed inset-x-0 left-0 top-0 z-50 mx-auto h-screen border-x border-wireframe rolepresentation>/div>script src/_next/static/chunks/webpack-2b1f7bb23764a9db.js id_R_ async>/script>script>(self.__next_fself.__next_f||).push(0)/script>script>self.__next_f.push(1,1:\$Sreact.fragment\\n4:I9665,,\OutletBoundary\\n6:I4911,,\AsyncMetadataOutlet\\n8:I9665,,\ViewportBoundary\\na:I9665,,\MetadataBoundary\\nb:\$Sreact.suspense\\nd:I8393,,\\\n:HL\/_next/static/media/93f479601ee12b01-s.p.woff2\,\font\,{\crossOrigin\:\\,\type\:\font/woff2\}\n:HL\/_next/static/media/e4af272ccee01ff0-s.p.woff2\,\font\,{\crossOrigin\:\\,\type\:\font/woff2\}\n:HL\/_next/static/css/23bd3abf1853b218.css\,\style\\n:HL\/_next/static/css/8b8ac3e59d6eda20.css\,\style\\n)/script>script>self.__next_f.push(1,0:{\P\:null,\b\:\j_Fgbmnal8F2V6AC4QeAn\,\p\:\\,\c\:\\,\\,\i\:false,\f\:\\,{\children\:\__PAGE__\,{}},\$undefined\,\$undefined\,true,\\,\$\,\$1\,\c\,{\children\:\$\,\link\,\0\,{\rel\:\stylesheet\,\href\:\/_next/static/css/23bd3abf1853b218.css\,\precedence\:\next\,\crossOrigin\:\$undefined\,\nonce\:\$undefined\},\$\,\link\,\1\,{\rel\:\stylesheet\,\href\:\/_next/static/css/8b8ac3e59d6eda20.css\,\precedence\:\next\,\crossOrigin\:\$undefined\,\nonce\:\$undefined\},\$L2\},{\children\:\__PAGE__\,\$\,\$1\,\c\,{\children\:\$L3\,null,\$\,\$L4\,null,{\children\:\$L5\,\$\,\$L6\,null,{\promise\:\$@7\}}},{},null,false},null,false,\$\,\$1\,\h\,{\children\:null,\$\,\$L8\,null,{\children\:\$L9\},\$\,\meta\,null,{\name\:\next-size-adjust\,\content\:\\},\$\,\$La\,null,{\children\:\$\,\div\,null,{\hidden\:true,\children\:\$\,\$b\,null,{\fallback\:null,\children\:\$Lc\}}}},false,\m\:\$undefined\,\G\:\$d\,,\s\:false,\S\:true}\n)/script>script>self.__next_f.push(1,e:I8388,\4987\,\static/chunks/4987-c6e546000afc06f9.js\,\5206\,\static/chunks/5206-1426d15457828cb8.js\,\7288\,\static/chunks/7288-fb86b25ccad6f8b5.js\,\7177\,\static/chunks/app/layout-c38f5ecec94027c5.js\,\default\\nf:I4821,\4987\,\static/chunks/4987-c6e546000afc06f9.js\,\5206\,\static/chunks/5206-1426d15457828cb8.js\,\7288\,\static/chunks/7288-fb86b25ccad6f8b5.js\,\7177\,\static/chunks/app/layout-c38f5ecec94027c5.js\,\default\\n10:I7555,,\\\n11:I6678,\8039\,\static/chunks/app/error-bd827308612dc1ad.js\,\default\\n12:I1295,,\\\n13:I8114,\4987\,\static/chunks/4987-c6e546000afc06f9.js\,\5206\,\static/chunks/5206-1426d15457828cb8.js\,\7288\,\static/chunks/7288-fb86b25ccad6f8b5.js\,\4524\,\static/chunks/4524-832801bc32e9c677.js\,\9752\,\static/chunks/9752-26e3837ceb9edee9.js\,\8974\,\static/chunks/app/page-c0844842542ec19f.js\,\AnimatePage\\n14:I6440,\4987\,\static/chunks/4987-c6e546000afc06f9.js\,\5206\,\static/chunks/5206-1426d15457828cb8.js\,\7288\,\static/chunks/7288-fb86b25ccad6f8b5.js\,\4345\,\static/chunks/app/not-found-d480c2a396202fd2.js\,\PageHeadingTitle\\n15:I6874,\4987\,\static/chunks/4987-c6e546000afc06f9.js\,\5206\,\static/chunks/5206-1426d15457828cb8.js\,\7288\,\static/chunks/7288-fb86b25ccad6f8b5.js\,\4524\,\static/chunks/4524-832801bc32e9c677.js\,\9752\,\static/chunks/9752-26e3837ceb9edee9.js\,\8974\,\static/chunks/app/page-c0844842542ec19f.js\,\\\n16:I8531,\4987\,\static/chunks/4987-c6e546000afc06f9.js\,\5206\,\static/chunks/5206-1426d15457828cb8.js\,\7288\,\static/chunks/7288-fb86b25ccad6f8b5.js\,\4524\,\static/chunks/4524-832801bc32e9c677.js\,\9752\,\static/chunks/9752-26e3837ceb9edee9.js\,\8974\,\static/chunks/app/page-c0844842542ec19f.js\,\default\\n18:I1610,\4987\,\static/chunks/4987-c6e546000afc06f9.js\,\5206\,\static/chunks/5206-1426d15457828cb8.js\,\7288\,\static/chunks/7288-fb86b25ccad6f8b5.js\,\4524\,\static/chunks/4524-832801bc32e9c677.js\,\9752\,\static/chunks/9752-26e3837ceb9edee9.js\,\8974\,\static/chunks/app/page-c0844842542ec19f.js\,\default\\n)/script>script>self.__next_f.push(1,2:\$\,\html\,null,{\lang\:\en\,\className\:\dark scroll-smooth\,\style\:{\colorScheme\:\dark\},\children\:\$\,\head\,null,{\children\:\$\,\meta\,null,{\name\:\viewport\,\content\:\widthdevice-width, initial-scale1.0\},\$\,\link\,null,{\rel\:\manifest\,\href\:\/manifest.json\},\$\,\meta\,null,{\name\:\theme-color\,\content\:\#e5512e\},\$\,\link\,null,{\rel\:\apple-touch-icon\,\href\:\/icon-192x192.png\},\$\,\link\,null,{\rel\:\alternate\,\type\:\application/rss+xml\,\title\:\RSS Feed\,\href\:\/feed.xml\}},\$\,\body\,null,{\className\:\__className_3eb911\,\children\:\$\,\a\,null,{\className\:\bg-primary text-primary-content absolute left-0 top-0 z-50 m-3 -translate-y-full p-3 transition focus:translate-y-0\,\href\:\#content\,\children\:\Skip Navigation\},\$\,\div\,null,{\className\:\outer-wrapper w-full border-wireframe xl:mx-auto\,\children\:\$\,\$Le\,null,{},\$\,\$Lf\,null,{\children\:\$\,\main\,null,{\id\:\content\,\children\:\$\,\$L10\,null,{\parallelRouterKey\:\children\,\error\:\$11\,\errorStyles\:,\errorScripts\:,\template\:\$\,\$L12\,null,{},\templateStyles\:\$undefined\,\templateScripts\:\$undefined\,\notFound\:\$\,\$L13\,null,{\children\:\$\,\div\,null,{\className\:\px-4\,\children\:\$\,\div\,null,{\className\:\container mx-auto flex max-w-7xl grid-cols-12 flex-col border-b border-wireframe\,\children\:\$\,\div\,null,{\className\:\grid grid-cols-12\,\children\:\$\,\div\,null,{\className\:\col-start-2 col-end-12 border-wireframe px-2 py-12\,\children\:\$\,\$L14\,null,{\description\:\Booo, this page could not be found.\,\link\:\$\,\$L15\,null,{\href\:\/\,\children\:\Return Home\},\children\:\404 - Page not found\}}}}}},,\forbidden\:\$undefined\,\unauthorized\:\$undefined\}}},\$\,\footer\,null,{\className\:\container mx-auto grid max-w-7xl grid-cols-12 border-t border-wireframe\,\children\:\$\,\div\,null,{\className\:\col-start-2 col-end-12 px-2 py-12\,\children\:\$\,\$L16\,null,{\children\:\$\,\div\,null,{\className\:\row flex justify-between\,\children\:\$\,\div\,null,{\className\:\__className_5f926d text-lg\,\children\:\© Ian Bromwich\},\$\,\div\,null,{\children\:\$\,\ul\,null,{\className\:\row flex gap-4\,\children\:\$\,\li\,null,{\children\:\$\,\$L15\,null,{\href\:\https://www.linkedin.com/in/ibromwich/\,\target\:\_blank\,\aria-label\:\Ian Bromwich on LinkedIn\,\children\:\$\,\svg\,null,{\xmlns\:\http://www.w3.org/2000/svg\,\viewBox\:\0 0 448 512\,\width\:\24px\,\height\:\24px\,\children\:\$\,\path\,null,{\fill\:\currentColor\,\d\:\M416 32H32C14 32 0 47 0 64v384c0 18 14 32 32 32h384c18 0 32-14 32-32V64c0-17-14-32-32-32zM135 416H69V202h67v214zm-33-243a39 39 0 1 1 0-77 39 39 0 0 1 0 77zm282 243h-66V312c0-25-1-57-35-57s-40 27-40 55v106h-66V202h64v29h1c9-16 30-34 63-34 67 0 79 44 79 102v117z\}}}},\$\,\li\,null,{\children\:\$\,\$L15\,null,{\href\:\https://x.com/ianbromwich\,\target\:\_blank\,\aria-label\:\Ian Bromwich on X\,\children\:\$\,\svg\,null,{\xmlns\:\http://www.w3.org/2000/svg\,\viewBox\:\0 0 448 512\,\width\:\24px\,\height\:\24px\,\children\:\$\,\path\,null,{\fill\:\currentColor\,\d\:\M64 32C29 32 0 61 0 96v320c0 35 29 64 64 64h320c35 0 64-29 64-64V96c0-35-29-64-64-64H64zm297 84L257 235l122 161h-95l-75-98-86 98H76l111-127L70 116h98l67 90 79-90h47zm-38 252L153 143h-28l172 225h26z\}}}}}}}}}}},\$\,\div\,null,{\className\:\container max-w-7xl grid-cols-12 flex-col pointer-events-none fixed inset-x-0 left-0 top-0 z-50 mx-auto h-screen border-x border-wireframe\,\role\:\presentation\}}}\n)/script>script>self.__next_f.push(1,3:\$\,\$L13\,null,{\children\:\$\,\script\,null,{\type\:\application/ld+json\,\dangerouslySetInnerHTML\:{\__html\:\{\\\@context\\\:\\\https://schema.org\\\,\\\@type\\\:\\\Person\\\,\\\name\\\:\\\Ian Bromwich\\\,\\\url\\\:\\\https://brmwch.com\\\,\\\jobTitle\\\:\\\Web Developer\\\,\\\description\\\:\\\Sheffield based web developer - Blog, code snippets, and bookmarks\\\,\\\address\\\:{\\\@type\\\:\\\PostalAddress\\\,\\\addressLocality\\\:\\\Sheffield\\\,\\\addressCountry\\\:\\\UK\\\}}\}},\$\,\section\,null,{\className\:\md:sticky welcome-hero inner-hero\,\children\:\$L17\},\$\,\div\,null,{\className\:\bg-body-background relative\,\children\:\$\,\div\,null,{\className\:\border-t border-wireframe\,\children\:\$\,\section\,null,{\className\:\container mx-auto grid max-w-7xl grid-cols-12\,\children\:\$\,\div\,null,{\className\:\col-start-2 col-end-12 px-2 py-12\,\children\:\$\,\div\,null,{\className\:\pb-3\,\children\:\$\,\$L18\,null,{\text\:\Posts\,\headingLevel\:2}},\$L19\}}},\$\,\div\,null,{\className\:\border-t border-wireframe\,\children\:\$\,\section\,null,{\className\:\container mx-auto grid max-w-7xl grid-cols-12\,\children\:\$\,\div\,null,{\className\:\col-start-2 col-end-12 px-2 py-12\,\children\:\$\,\div\,null,{\className\:\pb-3\,\children\:\$\,\$L18\,null,{\text\:\Snippets\,\headingLevel\:2}},\$L1a\}}},\$\,\div\,null,{\className\:\border-t border-wireframe\,\children\:\$\,\section\,null,{\className\:\container mx-auto grid max-w-7xl grid-cols-12\,\children\:\$\,\div\,null,{\className\:\col-start-2 col-end-12 px-2 py-12\,\children\:\$\,\div\,null,{\className\:\pb-3\,\children\:\$\,\$L18\,null,{\text\:\Bookmarks\,\headingLevel\:2}},\$L1b\}}}}}\n)/script>script>self.__next_f.push(1,1c:I1872,\4987\,\static/chunks/4987-c6e546000afc06f9.js\,\5206\,\static/chunks/5206-1426d15457828cb8.js\,\7288\,\static/chunks/7288-fb86b25ccad6f8b5.js\,\4524\,\static/chunks/4524-832801bc32e9c677.js\,\9752\,\static/chunks/9752-26e3837ceb9edee9.js\,\8974\,\static/chunks/app/page-c0844842542ec19f.js\,\default\\n)/script>script>self.__next_f.push(1,17:\$\,\div\,null,{\className\:\hp-hero container mx-auto grid max-w-7xl grid-cols-12 border-wireframe\,\children\:\$\,\div\,null,{\className\:\order-2 sm:order-1 col-start-2 col-end-12 sm:col-start-2 max-h-192 px-2 pb-16 pt-16 sm:col-end-10 sm:pb-24 sm:pt-24\,\children\:\$\,\$L1c\,null,{\children\:\Ian Bromwich\,\$\,\br\,null,{},\Web Developer\},\$\,\p\,null,{\className\:\mt-6 text-base text-neutral-300 text-balance\,\children\:\Passionate web developer with over a decades worth of experience. Also; Boy dad, tinkerer, gamer, software engineer and animal lover.\},\$\,\p\,null,{\className\:\mt-6 text-base text-neutral-300 text-balance\,\children\:\Most recently Software Developer at the University of Sheffield. I’m not a writer but am hoping that blogging a little often will improve my writing skills.\}}}\n)/script>script>self.__next_f.push(1,9:\$\,\meta\,\0\,{\charSet\:\utf-8\},\$\,\meta\,\1\,{\name\:\viewport\,\content\:\widthdevice-width, initial-scale1\}\n5:null\n)/script>script>self.__next_f.push(1,7:{\metadata\:\$\,\title\,\0\,{\children\:\Ian Bromwich - Sheffield based web developer - brmwch\},\$\,\meta\,\1\,{\name\:\description\,\content\:\Passionate web developer with over a decade of experience. Blog about code, web development, and tech.\},\$\,\meta\,\2\,{\name\:\keywords\,\content\:\Web developer,Software Engineer,Ian Bromwich,Front-end,Full-stack,React,TypeScript,PHP,MySQL,CSS,WordPress,Tailwind,Next.js,Sheffield\},\$\,\meta\,\3\,{\property\:\og:title\,\content\:\Ian Bromwich - Sheffield based web developer\},\$\,\meta\,\4\,{\property\:\og:description\,\content\:\Passionate web developer with over a decade of experience. Blog about code, web development, and tech.\},\$\,\meta\,\5\,{\property\:\og:url\,\content\:\https://brmwch.com\},\$\,\meta\,\6\,{\property\:\og:site_name\,\content\:\Ian Bromwich\},\$\,\meta\,\7\,{\property\:\og:image\,\content\:\https://brmwch.com/og-image.png\},\$\,\meta\,\8\,{\property\:\og:image:width\,\content\:\1200\},\$\,\meta\,\9\,{\property\:\og:image:height\,\content\:\630\},\$\,\meta\,\10\,{\property\:\og:image:alt\,\content\:\Ian Bromwich - Sheffield based web developer\},\$\,\meta\,\11\,{\property\:\og:type\,\content\:\website\},\$\,\meta\,\12\,{\name\:\twitter:card\,\content\:\summary_large_image\},\$\,\meta\,\13\,{\name\:\twitter:title\,\content\:\Ian Bromwich - Sheffield based web developer\},\$\,\meta\,\14\,{\name\:\twitter:description\,\content\:\Passionate web developer with over a decade of experience. Blog about code, web development, and tech.\},\$\,\meta\,\15\,{\name\:\twitter:image\,\content\:\https://brmwch.com/og-image.png\},\error\:null,\digest\:\$undefined\}\n)/script>script>self.__next_f.push(1,c:\$7:metadata\\n)/script>script>self.__next_f.push(1,1d:I1678,\4987\,\static/chunks/4987-c6e546000afc06f9.js\,\5206\,\static/chunks/5206-1426d15457828cb8.js\,\7288\,\static/chunks/7288-fb86b25ccad6f8b5.js\,\4524\,\static/chunks/4524-832801bc32e9c677.js\,\9752\,\static/chunks/9752-26e3837ceb9edee9.js\,\8974\,\static/chunks/app/page-c0844842542ec19f.js\,\default\\n)/script>script>self.__next_f.push(1,1a:\$\,\section\,null,{\children\:\$\,\ul\,null,{\className\:\grid grid-cols-1 gap-6 md:grid-cols-2 xl:grid-cols-3\,\children\:\$\,\li\,\edadfbe8-95c3-445f-8f7e-8328725944ed\,{\className\:\flex h-full flex-col\,\children\:\$\,\$L16\,null,{\className\:\h-full\,\delay\:0,\children\:\$\,\article\,null,{\className\:\smart-card_smart-card__jbBUK relative flex h-full flex-col bg-white/5 p-6\,\children\:\$undefined\,\$\,\div\,null,{\className\:\smart-card_background__U7bru\,\aria-hidden\:\true\},\$\,\div\,null,{\className\:\smart-card_content__tA6Cr\,\children\:\$\,\h2\,null,{\className\:\text-xl font-medium leading-tight text-card-title __className_5f926d\,\children\:\$\,\$L15\,null,{\href\:\/snippets/whm-php-list-versions\,\className\:\after:absolute after:inset-0\,\children\:\Generate a list of PHP versions being used by accounts on a WHM server.\}},\$\,\p\,null,{\className\:\text mt-2 text-neutral-300\,\children\:\Simple script to output comma separated account name and PHP version\},null}}}},\$\,\li\,\8558c5d0-6760-4169-8f3c-03a0eac419ad\,{\className\:\flex h-full flex-col\,\children\:\$\,\$L16\,null,{\className\:\h-full\,\delay\:0.33,\children\:\$\,\article\,null,{\className\:\smart-card_smart-card__jbBUK relative flex h-full flex-col bg-white/5 p-6\,\children\:\$undefined\,\$\,\div\,null,{\className\:\smart-card_background__U7bru\,\aria-hidden\:\true\},\$\,\div\,null,{\className\:\smart-card_content__tA6Cr\,\children\:\$\,\h2\,null,{\className\:\text-xl font-medium leading-tight text-card-title __className_5f926d\,\children\:\$\,\$L15\,null,{\href\:\/snippets/using-tolocaletimestring-without-displaying-seconds\,\className\:\after:absolute after:inset-0\,\children\:\Using toLocaleTimeString without displaying seconds\}},\$\,\p\,null,{\className\:\text mt-2 text-neutral-300\,\children\:\Using toLocaleTimeString without displaying seconds\},null}}}},\$\,\li\,\a376117a-695d-4fc0-9da1-cddb7a26d6e0\,{\className\:\flex h-full flex-col\,\children\:\$\,\$L16\,null,{\className\:\h-full\,\delay\:0.66,\children\:\$\,\article\,null,{\className\:\smart-card_smart-card__jbBUK relative flex h-full flex-col bg-white/5 p-6\,\children\:\$undefined\,\$\,\div\,null,{\className\:\smart-card_background__U7bru\,\aria-hidden\:\true\},\$\,\div\,null,{\className\:\smart-card_content__tA6Cr\,\children\:\$\,\h2\,null,{\className\:\text-xl font-medium leading-tight text-card-title __className_5f926d\,\children\:\$\,\$L15\,null,{\href\:\/snippets/output-focused-elements-to-console\,\className\:\after:absolute after:inset-0\,\children\:\Output focused elements to console\}},\$\,\p\,null,{\className\:\text mt-2 text-neutral-300\,\children\:\Really useful script for outputting focused element into developer console\},\$\,\div\,null,{\className\:\mt-auto flex items-center pt-6\,\children\:\$\,\ul\,null,{\children\:\$\,\li\,\0\,{\children\:\$\,\$L1d\,null,{\children\:\ \,\Javascript\}}}}}}}}}}\n)/script>script>self.__next_f.push(1,1e:I5724,\4987\,\static/chunks/4987-c6e546000afc06f9.js\,\5206\,\static/chunks/5206-1426d15457828cb8.js\,\7288\,\static/chunks/7288-fb86b25ccad6f8b5.js\,\4524\,\static/chunks/4524-832801bc32e9c677.js\,\9752\,\static/chunks/9752-26e3837ceb9edee9.js\,\8974\,\static/chunks/app/page-c0844842542ec19f.js\,\default\\n)/script>script>self.__next_f.push(1,1b:\$\,\ul\,null,{\className\:\grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3\,\children\:\$\,\li\,\7d94e444-bad3-4d1d-bfae-07d4ede6ca48\,{\className\:\flex h-full flex-col\,\children\:\$\,\$L16\,null,{\delay\:0,\children\:\$\,\$L1e\,null,{\title\:\On the uses of a legendary past\,\src\:\https://engelsbergideas.com/essays/on-the-uses-of-a-legendary-past\,\icon\:{\src\:null,\title\:\favicon\}}}},\$\,\li\,\19347c87-29e3-4bcc-9d0e-bed941c52039\,{\className\:\flex h-full flex-col\,\children\:\$\,\$L16\,null,{\delay\:0.3,\children\:\$\,\$L1e\,null,{\title\:\A comprehensive guide to error handling In Node.js\,\src\:\https://www.honeybadger.io/blog/errors-nodejs/\,\icon\:{\src\:null,\title\:\favicon\}}}},\$\,\li\,\c011bba4-983f-462f-834e-cf9fd3738b17\,{\className\:\flex h-full flex-col\,\children\:\$\,\$L16\,null,{\delay\:0.6,\children\:\$\,\$L1e\,null,{\title\:\Migrating 6000 React tests using AI Agents and ASTs\,\src\:\https://eliocapella.com/blog/ai-library-migration-guide/?utm_sourcecassidoo\u0026utm_mediumemail\u0026utm_campaignwe-all-have-our-down-days-but-its-not-hard-to\,\icon\:{\src\:null,\title\:\favicon\}}}},\$\,\li\,\23e1898b-db03-4e13-9775-fe4fee81d987\,{\className\:\flex h-full flex-col\,\children\:\$\,\$L16\,null,{\delay\:0.8999999999999999,\children\:\$\,\$L1e\,null,{\title\:\The Web Animation Performance Tier List\,\src\:\https://motion.dev/blog/web-animation-performance-tier-list\,\icon\:{\src\:null,\title\:\favicon\}}}},\$\,\li\,\eb8eb973-3258-4b37-a70e-a5c6990701ab\,{\className\:\flex h-full flex-col\,\children\:\$\,\$L16\,null,{\delay\:1.2,\children\:\$\,\$L1e\,null,{\title\:\Most Technical Problems Are Really People Problems\,\src\:\https://blog.joeschrag.com/202311/most-technical-problems-are-really.html\,\icon\:{\src\:null,\title\:\favicon\}}}},\$\,\li\,\5bf50e9e-799b-4a36-8e24-bc45824b6df6\,{\className\:\flex h-full flex-col\,\children\:\$\,\$L16\,null,{\delay\:1.5,\children\:\$\,\$L1e\,null,{\title\:\Common misconceptions about screen readers\,\src\:\https://tetralogical.com/blog/2025/10/14/common-misconceptions-about-screen-readers/\,\icon\:{\src\:null,\title\:\favicon\}}}}}\n)/script>script>self.__next_f.push(1,1f:I7375,\4987\,\static/chunks/4987-c6e546000afc06f9.js\,\5206\,\static/chunks/5206-1426d15457828cb8.js\,\7288\,\static/chunks/7288-fb86b25ccad6f8b5.js\,\4524\,\static/chunks/4524-832801bc32e9c677.js\,\9752\,\static/chunks/9752-26e3837ceb9edee9.js\,\8974\,\static/chunks/app/page-c0844842542ec19f.js\,\default\\n)/script>script>self.__next_f.push(1,19:\$\,\section\,null,{\children\:\$\,\ul\,null,{\className\:\grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-3\,\children\:\$\,\li\,\0\,{\children\:\$\,\$L1f\,null,{\_createdAt\:\2025-03-16T17:47:48Z\,\_id\:\e25bdce2-697f-4bfb-b818-dbc06ad34aa5\,\_rev\:\EGEIIvDX7Y6RrmK2rzaH7E\,\_type\:\post\,\_updatedAt\:\2025-12-07T16:46:13Z\,\body\:{\_key\:\eca713d1c958\,\_type\:\block\,\children\:{\_key\:\7ba2372a8fa30\,\_type\:\span\,\marks\:\strong\,\text\:\Quick Facts\},\markDefs\:,\style\:\h2\},{\_key\:\e64a2d14fd6e\,\_type\:\block\,\children\:{\_key\:\1d89f1afd2ae\,\_type\:\span\,\marks\:\strong\,\text\:\Location: \},{\_key\:\902c09a0642d\,\_type\:\span\,\marks\:,\text\:\Center of Gran Canaria\},\level\:1,\listItem\:\bullet\,\markDefs\:,\style\:\normal\},{\_key\:\5432dc34b094\,\_type\:\block\,\children\:{\_key\:\71d49e36b2cf0\,\_type\:\span\,\marks\:\strong\,\text\:\Difficulty: \},{\_key\:\8e77054c28bb\,\_type\:\span\,\marks\:,\text\:\Moderate, manageable for casual hikers\},\level\:1,\listItem\:\bullet\,\markDefs\:,\style\:\normal\},{\_key\:\11ac0a407521\,\_type\:\block\,\children\:{\_key\:\1524692f98e50\,\_type\:\span\,\marks\:\strong\,\text\:\Time: \},{\_key\:\d6d29464cb2d\,\_type\:\span\,\marks\:,\text\:\~1 hour each way\},\level\:1,\listItem\:\bullet\,\markDefs\:,\style\:\normal\},{\_key\:\b07917a37d94\,\_type\:\block\,\children\:{\_key\:\b6acc24ab3b20\,\_type\:\span\,\marks\:\strong\,\text\:\Reservation: \},{\_key\:\7f3ffda9b414\,\_type\:\span\,\marks\:,\text\:\Required between 9am-5pm, free\},\level\:1,\listItem\:\bullet\,\markDefs\:,\style\:\normal\},{\_key\:\3d027a7fdb40\,\_type\:\block\,\children\:{\_key\:\e6fd9af41a870\,\_type\:\span\,\marks\:\strong\,\text\:\Transport:\},{\_key\:\59dc005250f5\,\_type\:\span\,\marks\:,\text\:\ Car to Tejeda + Bus 18 (€9 return)\},\level\:1,\listItem\:\bullet\,\markDefs\:,\style\:\normal\},{\_key\:\3ac413b13d0c\,\_type\:\block\,\children\:{\_key\:\dfae527c39570\,\_type\:\span\,\marks\:\strong\,\text\:\Trail conditions:\},{\_key\:\0812fb3260c6\,\_type\:\span\,\marks\:,\text\:\ Rocky, some paved sections\},\level\:1,\listItem\:\bullet\,\markDefs\:,\style\:\normal\},{\_key\:\c1a5d6557b78\,\_type\:\block\,\children\:{\_key\:\010b66f7e4060\,\_type\:\span\,\marks\:\strong\,\text\:\Our plan\},\markDefs\:,\style\:\h2\},{\_key\:\0da29d42b605\,\_type\:\block\,\children\:{\_key\:\0c9a62dffaff0\,\_type\:\span\,\marks\:\em\,\text\:\Writing this up in the hope that it will help someone planning a Roque Nublo trip in 2025.\},{\_key\:\a484788edc8c0\,\_type\:\span\,\marks\:,\text\:\\\n\},\markDefs\:,\style\:\normal\},{\_key\:\c039878addbe\,\_type\:\block\,\children\:{\_key\:\f42b46b3914d0\,\_type\:\span\,\marks\:,\text\:\Me and my partner are expecting a child in July this year and decided to have a “babymoon” trip to somewhere sunny to escape the freezing cold UK weather during February.\\n\},\markDefs\:,\style\:\normal\},{\_key\:\e12c647912cf\,\_type\:\block\,\children\:{\_key\:\3c3924c204b70\,\_type\:\span\,\marks\:,\text\:\After some research Gran Canarias emerged as a perfect location, though I’ll admit I had my reservations about it having a reputation for package holidays and crowded beaches, which is really not my thing. Because of this we rented a car and watched a few videos on getting the most out of our trip.\},\markDefs\:,\style\:\normal\},{\_key\:\c3cae4077e34\,\_type\:\block\,\children\:{\_key\:\2fb09faf6d8c0\,\_type\:\span\,\marks\:\strong\,\text\:\Planning\},\markDefs\:,\style\:\h2\},{\_key\:\58d9c7bf9c0b\,\_type\:\block\,\children\:{\_key\:\b8bf31746e1d0\,\_type\:\span\,\marks\:,\text\:\One particular trip that we wanted to do was the Roque Nublo hike / viewpoint, this is a beautiful volcanic rock formation located in the center of the Gran Canaria. We found this great video showing off the wonderful views \},{\_key\:\b8bf31746e1d1\,\_type\:\span\,\marks\:\6c2476b8d81d\,\text\:\https://www.youtube.com/watch?vKZ5qLdl6Gnc\u0026\},{\_key\:\b8bf31746e1d2\,\_type\:\span\,\marks\:,\text\:\ which sealed the deal and got us planning.\\n\},\markDefs\:{\_key\:\6c2476b8d81d\,\_type\:\link\,\href\:\https://www.youtube.com/watch?vKZ5qLdl6Gnc\u0026t114s\},\style\:\normal\},{\_key\:\a1a71f934b9e\,\_type\:\block\,\children\:{\_key\:\8cfe0001fe650\,\_type\:\span\,\marks\:,\text\:\Upon doing some more research we found that not long before we arrived in Gran Canaria a\},{\_key\:\8cfe0001fe651\,\_type\:\span\,\marks\:\strong\,\text\:\ \},{\_key\:\4a762321a9bd\,\_type\:\span\,\marks\:\strong\,\underline\,\text\:\free reservation was required to visit the formation between 9am and 5pm\},{\_key\:\8cfe0001fe652\,\_type\:\span\,\marks\:,\text\:\. I assume this is to protect the natural beauty of the area which makes sense.\\n\},\markDefs\:,\style\:\normal\},{\_key\:\91399f4330d2\,\_type\:\block\,\children\:{\_key\:\0e64aad19a190\,\_type\:\span\,\marks\:,\text\:\The website to we made our reservation on was \},{\_key\:\0e64aad19a191\,\_type\:\span\,\marks\:\e477f7198cb2\,\text\:\https://reservasroquenublo.com/reservar\},\markDefs\:{\_key\:\e477f7198cb2\,\_type\:\link\,\href\:\https://reservasroquenublo.com/reservar\},\style\:\normal\},{\_key\:\88aa1a19638c\,\_type\:\block\,\children\:{\_key\:\e663e1f8ad280\,\_type\:\span\,\marks\:,\text\:\\},\markDefs\:,\style\:\normal\},{\_key\:\a25352b43664\,\_type\:\block\,\children\:{\_key\:\2b9d299435030\,\_type\:\span\,\marks\:,\text\:\And fill the form in with:\},\markDefs\:,\style\:\normal\},{\_key\:\e8757d0be996\,\_type\:\block\,\children\:{\_key\:\c959ff7f5aca0\,\_type\:\span\,\marks\:,\text\:\Click Particular\},\level\:1,\listItem\:\bullet\,\markDefs\:,\style\:\normal\},{\_key\:\46a31c1fbf94\,\_type\:\block\,\children\:{\_key\:\7e5e41e82d150\,\_type\:\span\,\marks\:,\text\:\Input the date of travel “Fencha”\},\level\:1,\listItem\:\bullet\,\markDefs\:,\style\:\normal\},{\_key\:\f26a3699e07d\,\_type\:\block\,\children\:{\_key\:\23c86dc42ca60\,\_type\:\span\,\marks\:,\text\:\Input number of people “Nº de personas”\},\level\:1,\listItem\:\bullet\,\markDefs\:,\style\:\normal\},{\_key\:\232942449c65\,\_type\:\block\,\children\:{\_key\:\16988bb523130\,\_type\:\span\,\marks\:,\text\:\We made our booking 2 days before our hike, so we either got lucky or the Rock isn’t busy during February. There were plenty of available slots on that day but we decided to start at 3pm in order to not miss the last bus from Roque Nublo to Tejeda.\},\markDefs\:,\style\:\normal\},{\_key\:\17b68221018f\,\_type\:\block\,\children\:{\_key\:\df30064586bc0\,\_type\:\span\,\marks\:,\text\:\Once submitted you’ll get an email, keep it handy as you’ll need it on your visit.\},\markDefs\:,\style\:\normal\},{\_key\:\09f16be9c579\,\_type\:\block\,\children\:{\_key\:\cb7f423bbbe80\,\_type\:\span\,\marks\:\strong\,\text\:\Getting there\},\markDefs\:,\style\:\h2\},{\_key\:\4b538a853c41\,\_type\:\block\,\children\:{\_key\:\3bb801b80efe0\,\_type\:\span\,\marks\:,\text\:\I can only comment on travelling straight from “Tejeda” as we rented a car and parked there. I’ve attached a map view of where we parked (in blue), this car park was pretty packed, and there was only a single space available when we arrived (this was at 2pm on a Tuesday)\},\markDefs\:,\style\:\normal\},{\_key\:\142d41d9b133\,\_type\:\block\,\children\:{\_key\:\217e128b1e040\,\_type\:\span\,\marks\:,\text\:\The parking area marked in red is apparently free, however there was a ramshackle A4 paper sign saying 2 Euro (without anywhere to pay)\},\markDefs\:,\style\:\normal\},{\_key\:\07cc3b85ced4\,\_type\:\block\,\children\:{\_key\:\69b7b0ab1e540\,\_type\:\span\,\marks\:,\text\:\Once parked there we headed down to the bus stop outlined in blue and waited for the 18 bus to arrive here \},{\_key\:\69b7b0ab1e541\,\_type\:\span\,\marks\:\5294843b9d51\,\text\:\https://maps.app.goo.gl/WkxNHU871yT5NKyQA\},{\_key\:\69b7b0ab1e542\,\_type\:\span\,\marks\:,\text\:\ the bus parks in the bay so don’t worry about being on the wrong side of the road. Here is the bus timetable for reference \},{\_key\:\69b7b0ab1e543\,\_type\:\span\,\marks\:\31c569baf462\,\text\:\https://reservasroquenublo.com/assets/docs/guaguas.pdf\},{\_key\:\69b7b0ab1e544\,\_type\:\span\,\marks\:,\text\:\. In total the cost of the bus was about 9 euros return.\\n\},\markDefs\:{\_key\:\5294843b9d51\,\_type\:\link\,\href\:\https://maps.app.goo.gl/WkxNHU871yT5NKyQA\},{\_key\:\31c569baf462\,\_type\:\link\,\href\:\https://reservasroquenublo.com/assets/docs/guaguas.pdf\},\style\:\normal\},{\_key\:\45971f4a1935\,\_type\:\block\,\children\:{\_key\:\704c1e29536c0\,\_type\:\span\,\marks\:,\text\:\When the bus reached Roque Nublo the driver let us know that we were at Roque Nublo and so our hike started.\},\markDefs\:,\style\:\normal\},{\_key\:\4520a9e61115\,\_type\:\block\,\children\:{\_key\:\27d09937165e0\,\_type\:\span\,\marks\:\strong\,\text\:\The Hike Experience\},\markDefs\:,\style\:\h2\},{\_key\:\9f1c642a5952\,\_type\:\block\,\children\:{\_key\:\1482275eb4fb0\,\_type\:\span\,\marks\:,\text\:\My partner read online that the hike might be a little difficult, and that you require lots of gear to do the walk, however this was far from the case. (Even for my 18 week pregnant partner)\},\markDefs\:,\style\:\normal\},{\_key\:\c570ac44e308\,\_type\:\block\,\children\:{\_key\:\5785a74e24010\,\_type\:\span\,\marks\:,\text\:\For reference I’m a semi fit developer in his mid thirties who sits in front of a desk from 9-5 and my partner is mid thirties and 18 weeks pregnant. We both managed in about an hour with some stops in between to enjoy the views.\},\markDefs\:,\style\:\normal\},{\_key\:\13c8fa9e232d\,\_type\:\block\,\children\:{\_key\:\42322a637ca10\,\_type\:\span\,\marks\:,\text\:\Upon starting the walk (location here), there was an official waiting to scan our reservation QR code, so have that handy. From there the paths were quite obvious to follow with some areas where we needed to use our hands to support ourselves, and this was mainly at the peak.\},\markDefs\:,\style\:\normal\},{\_key\:\c5e60ea0d197\,\_type\:\block\,\children\:{\_key\:\aca0ace1352d0\,\_type\:\span\,\marks\:,\text\:\There are tonnes of photo opportunities on route, here are a few:\},\markDefs\:,\style\:\normal\},{\_key\:\15c5d1da75b8\,\_type\:\block\,\children\:{\_key\:\05a9a52425040\,\_type\:\span\,\marks\:\strong\,\text\:\Tips \u0026 Recommendations\},\markDefs\:,\style\:\h2\},{\_key\:\cb081642e869\,\_type\:\block\,\children\:{\_key\:\d6a16757841a0\,\_type\:\span\,\marks\:,\text\:\Other things worth mentioning:\},\markDefs\:,\style\:\normal\},{\_key\:\0be108438606\,\_type\:\block\,\children\:{\_key\:\c41c4f7161790\,\_type\:\span\,\marks\:,\text\:\There’s various places in Tejeda to get food and drink, including restaurants, a supermarket (SPAR) and a mini market in the petrol station next to the bus stop.\},\level\:1,\listItem\:\bullet\,\markDefs\:,\style\:\normal\},{\_key\:\d405ea01ab5f\,\_type\:\block\,\children\:{\_key\:\633de1fda6230\,\_type\:\span\,\marks\:,\text\:\Once you take the bus from Tejeda there are no toilets.\},\level\:1,\listItem\:\bullet\,\markDefs\:,\style\:\normal\},{\_key\:\58f171302342\,\_type\:\block\,\children\:{\_key\:\5700d2cc4a0f0\,\_type\:\span\,\marks\:,\text\:\There’s a mini van selling food, drink and ice cream in the location you arrive in after the bus from Tejeda.\},\level\:1,\listItem\:\bullet\,\markDefs\:,\style\:\normal\},{\_key\:\e6de4ce4addf\,\_type\:\block\,\children\:{\_key\:\7bc82f23fd220\,\_type\:\span\,\marks\:,\text\:\Things to bring:\},\markDefs\:,\style\:\h3\},{\_key\:\e2103b58a2e9\,\_type\:\block\,\children\:{\_key\:\cbdefc461a040\,\_type\:\span\,\marks\:,\text\:\Water \u0026 Snacks\},\level\:1,\listItem\:\bullet\,\markDefs\:,\style\:\normal\},{\_key\:\7cb23ca2a99a\,\_type\:\block\,\children\:{\_key\:\3f1b3ead3b520\,\_type\:\span\,\marks\:,\text\:\Comfortable Shoes\},\level\:1,\listItem\:\bullet\,\markDefs\:,\style\:\normal\},{\_key\:\2fe3ba015ad8\,\_type\:\block\,\children\:{\_key\:\8999d5ef54360\,\_type\:\span\,\marks\:,\text\:\Cash / Credit Card for the bus\},\level\:1,\listItem\:\bullet\,\markDefs\:,\style\:\normal\},{\_key\:\8e00c20bdb78\,\_type\:\block\,\children\:{\_key\:\132b8c4a159d0\,\_type\:\span\,\marks\:,\text\:\Phone / Print out of reservation (QR Code)\},\level\:1,\listItem\:\bullet\,\markDefs\:,\style\:\normal\},{\_key\:\c91a0821e14b\,\_type\:\block\,\children\:{\_key\:\6a4cd4baf77a0\,\_type\:\span\,\marks\:,\text\:\\\n\},\markDefs\:,\style\:\normal\},\categories\:{\_key\:\43d618127d39\,\_ref\:\18be5663-7383-4591-9e40-0b6fd1310666\,\_type\:\reference\},\estimatedReadingTime\:5,\mainImage\:{\_type\:\image\,\alt\:\Icon of a hiker using a pole and wearing a backpack\,\asset\:{\_ref\:\image-d34c549846d72cbd5dd20fdcf309aff434319e24-32x32-svg\,\_type\:\reference\},\lqip\:\data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAABvElEQVR4nKXUS4iOcRQG8J9b7t8MoUySy5gxosYXjVyKZKGEMk3KLCxmQpNLsSAKSclmXIoFEgtCQlkYuRWzsCKXjbCxoCyVjUs6ddQszHhnvmf3vvV/zjnP85xDMYxADaahGkNUgKFowHYcxhqMr4SwhGY8xDucQH0lhGOwDnfxAscwq+jjwRiHOZiLSaldjHkEB7A8uy6EElbjDE4m0UZcxDW0YUoWLoTpOIoPeIytOIVP+IxLWIZR6fzoNK1XlHEdX3EH23Ab3/ET71PDIF2IxZjYG1lUWoEn+ILz2IFn+IVv6fJTXMBpHEy9/4nhWIUuvM5O9uMVfuNNRuZcyhGOX86p+gzwHhxHe5J+xA88wloswi7cyk7LfWk4ElNRhyU4m+OHhs+xGZNzzOi+83+EfzEIC3AjO3yJt7iClZiJjpykXIRwWA89uzLQV9GNnWjsL2EJrXiQbi7NTN5LZ5v6S1iDvbiP3ZiBDZnJQwMhrMsNiY5acqcrImzMjN3McePirM/v0DO2JLYoYjW/CGHkMTrZh9o0KdYsDuymPF+RyS1FT1kV5mF2HoKI0YT8FzmNoxA6R7GxPV/+ATmnXFbU6+lDAAAAAElFTkSuQmCC\,\palette\:{\_type\:\sanity.imagePalette\,\darkMuted\:{\_type\:\sanity.imagePaletteSwatch\,\background\:\#040404\,\foreground\:\#fff\,\population\:100,\title\:\#fff\},\darkVibrant\:{\_type\:\sanity.imagePaletteSwatch\,\background\:\#424242\,\foreground\:\#fff\,\population\:0,\title\:\#fff\},\dominant\:{\_type\:\sanity.imagePaletteSwatch\,\background\:\#040404\,\foreground\:\#fff\,\population\:100,\title\:\#fff\},\lightMuted\:{\_type\:\sanity.imagePaletteSwatch\,\background\:\#4c4c4c\,\foreground\:\#fff\,\population\:0,\title\:\#fff\},\lightVibrant\:{\_type\:\sanity.imagePaletteSwatch\,\background\:\#bcbcbc\,\foreground\:\#000\,\population\:0,\title\:\#fff\},\muted\:{\_type\:\sanity.imagePaletteSwatch\,\background\:\#4c4c4c\,\foreground\:\#fff\,\population\:0,\title\:\#fff\},\vibrant\:{\_type\:\sanity.imagePaletteSwatch\,\background\:\#7f7f7f\,\foreground\:\#fff\,\population\:0,\title\:\#fff\}},\url\:\https://cdn.sanity.io/images/v6w7d5ry/production/d34c549846d72cbd5dd20fdcf309aff434319e24-32x32.svg\},\permalink\:\roque-nublo-hiking-guide-2025\,\publishedAt\:\2025-03-16T18:14:00.000Z\,\slug\:{\_type\:\slug\,\current\:\roque-nublo-hiking-guide-2025\},\title\:\Roque Nublo Hiking Guide 2025\,\index\:0}},\$L20\,\$L21\}}\n)/script>script>self.__next_f.push(1,20:\$\,\li\,\1\,{\children\:\$\,\$L1f\,null,{\_createdAt\:\2024-02-21T17:29:52Z\,\_id\:\104d7706-4166-4952-8b5b-5b6edb048e3c\,\_rev\:\WqUwQeO3Vnw72AdcR3QVaN\,\_type\:\post\,\_updatedAt\:\2024-02-21T21:24:38Z\,\body\:{\_key\:\066252523460\,\_type\:\block\,\children\:{\_key\:\949ac74289180\,\_type\:\span\,\marks\:,\text\:\As part of my recent work I’ve had the opportunity to investigate and work on making a website adhere to the latest WCAG 2.2 standard.\},\markDefs\:,\style\:\normal\},{\_key\:\0c7dcbf9f460\,\_type\:\block\,\children\:{\_key\:\0f9a0cdd9d2e0\,\_type\:\span\,\marks\:,\text\:\In this post I will \},{\_key\:\0f9a0cdd9d2e1\,\_type\:\span\,\marks\:\strong\,\text\:\focus \},{\_key\:\0f9a0cdd9d2e2\,\_type\:\span\,\marks\:,\text\:\on the \},{\_key\:\0f9a0cdd9d2e3\,\_type\:\span\,\marks\:\strong\,\text\:\focus not obscured\},{\_key\:\0f9a0cdd9d2e4\,\_type\:\span\,\marks\:,\text\:\ criterion (2.4.11) particularly with regards to a sticky navigation obscuring the users focus.\},\markDefs\:,\style\:\normal\},{\_key\:\ef9a0b496675\,\_type\:\block\,\children\:{\_key\:\38a3832505bc0\,\_type\:\span\,\marks\:,\text\:\What’s the issue\},\markDefs\:,\style\:\h2\},{\_key\:\23e91b8148d2\,\_type\:\block\,\children\:{\_key\:\f1d81780bb600\,\_type\:\span\,\marks\:,\text\:\When navigating a website with a mouse we use the mouse cursor as an indicator of where we are on the page.\},\markDefs\:,\style\:\normal\},{\_key\:\8ce5c8f87c1d\,\_type\:\block\,\children\:{\_key\:\123c3adea0190\,\_type\:\span\,\marks\:,\text\:\However, there are tonnes of people that use other methods, such as keyboard, switch devices or voice control, with this method of navigating a webpage a focus indicator such as; colour, outline or shading are used to indicate where a user is on the page.\},\markDefs\:,\style\:\normal\},{\_key\:\1c5a1753cde8\,\_type\:\block\,\children\:{\_key\:\71f15b8b3ed80\,\_type\:\span\,\marks\:,\text\:\This new WCAG 2.2 criterion (2.4.11) has been introduced to ensure when a component has focus, part or all of it is visible, this is depending on whether you are aiming for AA or AAA. Makes total sense really.\},\markDefs\:,\style\:\normal\},{\_key\:\03feb1200ab2\,\_type\:\block\,\children\:{\_key\:\d0ea389a80df0\,\_type\:\span\,\marks\:,\text\:\\},\markDefs\:,\style\:\normal\},{\_key\:\0101dc52b4a4\,\_type\:\block\,\children\:{\_key\:\a725b37c68ba0\,\_type\:\span\,\marks\:,\text\:\WCAG Criterion 2.4.11 has a minimum (AA) and maximum (AAA)\},\markDefs\:,\style\:\normal\},{\_key\:\a0cbc97aa38a\,\_type\:\block\,\children\:{\_key\:\e6895565eeee0\,\_type\:\span\,\marks\:,\text\:\AA - When a \},{\_key\:\e6895565eeee1\,\_type\:\span\,\marks\:\strong\,\text\:\component \},{\_key\:\e6895565eeee2\,\_type\:\span\,\marks\:,\text\:\has \},{\_key\:\e6895565eeee3\,\_type\:\span\,\marks\:\strong\,\text\:\focus\},{\_key\:\e6895565eeee4\,\_type\:\span\,\marks\:,\text\:\, part of it is \},{\_key\:\e6895565eeee5\,\_type\:\span\,\marks\:\strong\,\text\:\visible\},{\_key\:\e6895565eeee6\,\_type\:\span\,\marks\:,\text\:\.\},\level\:1,\listItem\:\bullet\,\markDefs\:,\style\:\normal\},{\_key\:\69363943185f\,\_type\:\block\,\children\:{\_key\:\2fa679679b7a\,\_type\:\span\,\marks\:,\text\:\AAA - When a \},{\_key\:\42284fcdcb07\,\_type\:\span\,\marks\:\strong\,\text\:\component \},{\_key\:\977a39bb7541\,\_type\:\span\,\marks\:,\text\:\has \},{\_key\:\12680a5f74d5\,\_type\:\span\,\marks\:\strong\,\text\:\focus\},{\_key\:\d8eefc073a2b\,\_type\:\span\,\marks\:,\text\:\, it is \},{\_key\:\30ce63112487\,\_type\:\span\,\marks\:\strong\,\text\:\fully visible\},\level\:1,\listItem\:\bullet\,\markDefs\:,\style\:\normal\},{\_key\:\ed8d4fc0ac70\,\_type\:\block\,\children\:{\_key\:\2198d9abed44\,\_type\:\span\,\marks\:\strong\,\text\:\A sticky heading component\},\markDefs\:,\style\:\h2\},{\_key\:\512bebc473a5\,\_type\:\block\,\children\:{\_key\:\a366730efa5c\,\_type\:\span\,\marks\:,\text\:\A common design pattern on lots of sites is to have a sticky header for ease of navigation. However, this may cause issues with accessibility associated with \},{\_key\:\32bc55b09056\,\_type\:\span\,\marks\:\strong\,\text\:\2.4.11\},{\_key\:\56d9b529e1b6\,\_type\:\span\,\marks\:,\text\:\. In the following examples I will show why.\},\markDefs\:,\style\:\normal\},{\_key\:\c23460f0ea1f\,\_type\:\block\,\children\:{\_key\:\e6fdeba352e90\,\_type\:\span\,\marks\:,\text\:\First lets use this wireframe as an example of a site with a sticky header, the page has several links and buttons which all have accessible focus states coded onto them.\},\markDefs\:,\style\:\normal\},{\_key\:\403aa1d4fbf1\,\_type\:\image\,\alt\:\Image of a website with a sticky header navigation, with lorem ipsum content which has embedded links and buttons\,\asset\:{\_ref\:\image-4ad94e8db106ad364af471e804f6b4b3cd30d39d-594x656-png\,\_type\:\reference\}},{\_key\:\cb6324dde488\,\_type\:\block\,\children\:{\_key\:\541c0fa079730\,\_type\:\span\,\marks\:,\text\:\The user has navigated through all the content and has decided to go back up the page (shift + tab) to go back up the page. However, they now can’t see their focus indicator? This is because the sticky header is obscuring the visibility of the focussed link. This now fails to indicate to the user where their current focus is on the website.\},\markDefs\:,\style\:\normal\},{\_key\:\e6d0b0bfe9d6\,\_type\:\image\,\alt\:\Wireframe on webpage where the user has tabbed to focus on a link, however the link is obscurred by the sticky header.\,\asset\:{\_ref\:\image-f0513b7c641b8e04f1438af46f0386c2fc291468-594x656-png\,\_type\:\reference\}},{\_key\:\04f4638fc5e2\,\_type\:\block\,\children\:{\_key\:\f600bc6682100\,\_type\:\span\,\marks\:\strong\,\text\:\How can we fix this issue?\},\markDefs\:,\style\:\h2\},{\_key\:\fed2affcc9f9\,\_type\:\block\,\children\:{\_key\:\758e787075de0\,\_type\:\span\,\marks\:,\text\:\A nice fix for this would be to utilise the css scroll-padding property. We can use this to offset the position on the screen of the focused element.\},\markDefs\:,\style\:\normal\},{\_key\:\5b91b3205214\,\_type\:\block\,\children\:{\_key\:\6517ce5931d1\,\_type\:\span\,\marks\:,\text\:\\\nPlease check out this \},{\_key\:\b5aa050f3403\,\_type\:\span\,\marks\:\545c059fc0a7\,\text\:\codepen\},{\_key\:\9af9a3080b55\,\_type\:\span\,\marks\:,\text\:\ to see how I resolved the issue. I basically store the fixed header height as a CSS var, and offset the scroll-padding-top property by it when a link is focused.\},\markDefs\:{\_key\:\545c059fc0a7\,\_type\:\link\,\href\:\https://codepen.io/brumgb/pen/yLwxdqz\},\style\:\normal\},{\_key\:\f8ab6e423058\,\_type\:\block\,\children\:{\_key\:\f452df3add58\,\_type\:\span\,\marks\:,\text\:\This ensures that the focused link is always visible when the header is stuck.\},\markDefs\:,\style\:\normal\},{\_key\:\c8abcbb0d0d1\,\_type\:\block\,\children\:{\_key\:\f6bcdb36ee69\,\_type\:\span\,\marks\:,\text\:\Outside of the demo where I’m adding a class to the body to enable it you could simply add it to your css with a HTML selector similar to:\\n\},\markDefs\:,\style\:\normal\},{\_key\:\67852b7e2c51\,\_type\:\block\,\children\:{\_key\:\22cfca1118810\,\_type\:\span\,\marks\:,\text\:\html { scroll-padding-bottom:var(--scroll-padding) }\},\markDefs\:,\style\:\blockquote\},{\_key\:\a42c91677a50\,\_type\:\block\,\children\:{\_key\:\28f63e2ddd1f0\,\_type\:\span\,\marks\:\strong\,\text\:\Things worth mentioning\},\markDefs\:,\style\:\h2\},{\_key\:\8b5f9722ea19\,\_type\:\block\,\children\:{\_key\:\a4da213b6bfa0\,\_type\:\span\,\marks\:,\text\:\If your sticky header has a level of opacity and you can see the focus indicator, you would test the visual contrast ratio. Ideally the focus indicator would have a contrast ratio of at least 3:1. https://www.w3.org/TR/WCAG22/#focus-appearance\\n\},\markDefs\:,\style\:\normal\},\categories\:{\_key\:\6800845392ba\,\_ref\:\6caee42f-3692-40c5-bff6-4fa69716931b\,\_type\:\reference\},{\_key\:\0311e16a50c4\,\_ref\:\a00ef0df-8384-4ebf-a372-49086bf07df4\,\_type\:\reference\},\estimatedReadingTime\:3,\excerpt\:\Building a sticky header that complies with WCAG 2.2 2.4.1 success criterion\,\mainImage\:{\_type\:\image\,\alt\:\Sticky header\,\asset\:{\_ref\:\image-2ee6d371b5ff0519f339d4fe16c4355b6e5d34ea-140x140-svg\,\_type\:\reference\},\lqip\:\data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAACFklEQVQ4jY2UyW5TQRBFD84AGDKYxMaYQXFIHBvbGGxCmKIQhXnYIJbM4wIJRFgwiS3fwOeiik6HVpTItHRV3f3eu+9W1e0G+AzcB9aAdeD6LlgfgjXgEfAb4B5wHCgDc8Ap1zX3poGJITgEzANvkb0ELKg0sOGfB8As/zdmgSf4YdXUvgE/gC/Ad+ATcA2YBPbtgYKEwfEsKawAl4EPwKZEQfgTeGz6w0Y5Kbwpex1YBW4Bd6xtpH/V5+PA2C4YB0aBE8DLIHwOLANd4wpwSay41wM6vtN13gZaYsnSfA3Cd6a9qrLA7UzlXdcRHwAP3d9Q/TJwHrgB/Eq2OWnbQ9FFoG+8smOdK+9ZpqM2bRF4n5oyBcwATeWfNraNDednRE+blYD91nAx+XDdB5WsTh1xVnSNbed91R3UNodVHu7Y8l9JawysycCP+lmjBtmPWnZ+TMtM2IPNnDBeOGeBk7KO6V1wv+HxrHrcChIWrfHHlPKUqFu/+exc1yVa0LxFvRenJI0Rn79JhJO+dMTmzDgvOS8bi6Y5soMQu/00V1h0syqOZbHms4oxKS3wb1RywunsxlkSTVNtaZWGaGqRms0YlXBbYfgwUg6VyX+B+CiQvBdksZ+OWtQ5SA5IuH05xE0bH8YL0dGwSrJNdDZsE0g2io4na4ULommRbng0bqutazvOc1wSr0V0K5/vtX4FvFBZkP35C7LMRUyxiphPAAAAAElFTkSuQmCC\,\palette\:{\_type\:\sanity.imagePalette\,\darkMuted\:{\_type\:\sanity.imagePaletteSwatch\,\background\:\#040404\,\foreground\:\#fff\,\population\:100,\title\:\#fff\},\darkVibrant\:{\_type\:\sanity.imagePaletteSwatch\,\background\:\#424242\,\foreground\:\#fff\,\population\:0,\title\:\#fff\},\dominant\:{\_type\:\sanity.imagePaletteSwatch\,\background\:\#040404\,\foreground\:\#fff\,\population\:100,\title\:\#fff\},\lightMuted\:{\_type\:\sanity.imagePaletteSwatch\,\background\:\#4c4c4c\,\foreground\:\#fff\,\population\:0,\title\:\#fff\},\lightVibrant\:{\_type\:\sanity.imagePaletteSwatch\,\background\:\#bcbcbc\,\foreground\:\#000\,\population\:0,\title\:\#fff\},\muted\:{\_type\:\sanity.imagePaletteSwatch\,\background\:\#4c4c4c\,\foreground\:\#fff\,\population\:0,\title\:\#fff\},\vibrant\:{\_type\:\sanity.imagePaletteSwatch\,\background\:\#7f7f7f\,\foreground\:\#fff\,\population\:0,\title\:\#fff\}},\url\:\https://cdn.sanity.io/images/v6w7d5ry/production/2ee6d371b5ff0519f339d4fe16c4355b6e5d34ea-140x140.svg\},\permalink\:\making-a-sticky-header-meet-wcag-2-2\,\publishedAt\:\2024-02-21T21:14:20.509Z\,\slug\:{\_type\:\slug\,\current\:\making-a-sticky-header-meet-wcag-2-2\},\title\:\Making a sticky header meet WCAG 2.2 guidelines\,\index\:1}}\n)/script>script>self.__next_f.push(1,21:\$\,\li\,\2\,{\children\:\$\,\$L1f\,null,{\_createdAt\:\2023-07-20T08:17:59Z\,\_id\:\385bf08d-9097-44a0-863c-ffdb6acf08e4\,\_rev\:\WqUwQeO3Vnw72AdcR3Dufb\,\_type\:\post\,\_updatedAt\:\2024-02-21T20:45:55Z\,\body\:{\_key\:\fadb72bd8a55\,\_type\:\block\,\children\:{\_key\:\2c00f99e5879\,\_type\:\span\,\marks\:,\text\:\Like so many other utilities that you just use because they just \\\work\\\ Ive used the \},{\_key\:\69f77b118dc7\,\_type\:\span\,\marks\:\strong\,\text\:\sr-only\},{\_key\:\aeeb180f9f63\,\_type\:\span\,\marks\:,\text\:\ class (in bootstrap and tailwind) religiously over the years. Ive also tried to sometimes write my own, without any knowledge of the heuristics. However, one question Ive always wondered however is why this class has a 1px width and height? Why not a 0 by 0 element with no overflow and none of that svg clip path hackery?\},\markDefs\:,\style\:\normal\},{\_key\:\f88256e2a0ef\,\_type\:\block\,\children\:{\_key\:\05c841d20c96\,\_type\:\span\,\marks\:,\text\:\I recently discovered \},{\_key\:\38cca80c995e\,\_type\:\span\,\marks\:\32f4192b0b1b\,\text\:\this\},{\_key\:\501cb1ed3e86\,\_type\:\span\,\marks\:,\text\:\ interesting blog post recently which addresses this..\},\markDefs\:{\_key\:\32f4192b0b1b\,\_type\:\link\,\href\:\https://www.matuzo.at/blog/2023/zero-width-height-skip/\},\style\:\normal\},{\_key\:\2d668ebd8c60\,\_type\:\block\,\children\:{\_key\:\d25463e7b264\,\_type\:\span\,\marks\:,\text\:\It turns out that \},{\_key\:\57cdeb64c4f0\,\_type\:\span\,\marks\:\strong\,\text\:\Safari doesnt focus on links that dont have a width or height!\},{\_key\:\a70347386798\,\_type\:\span\,\marks\:,\text\:\ so even with your best intentions if the focus elements dont have a width and height then safari users are going to have a less accessible experience 💩 You can fix this by:\},\markDefs\:,\style\:\normal\},{\_key\:\95ffbb1901e2\,\_type\:\block\,\children\:{\_key\:\ac143d4360bb0\,\_type\:\span\,\marks\:,\text\:\Adding 1px padding, border, or width and height\},\markDefs\:,\style\:\blockquote\},{\_key\:\23a884acf691\,\_type\:\block\,\children\:{\_key\:\172150c68704\,\_type\:\span\,\marks\:,\text\:\\},\markDefs\:,\style\:\normal\},{\_key\:\94249c37f3b1\,\_type\:\block\,\children\:{\_key\:\2597da2eb41b\,\_type\:\span\,\marks\:,\text\:\Here are some great resources to learn more about the \\\sr-only\\\ \\\visually-hidden\\\ etc classes:\},\markDefs\:,\style\:\normal\},{\_key\:\66e903686308\,\_type\:\block\,\children\:{\_key\:\db506797ead0\,\_type\:\span\,\marks\:\f4844254cafc\,\text\:\Visually hidden links with 0 dimensions\},\level\:1,\listItem\:\bullet\,\markDefs\:{\_key\:\f4844254cafc\,\_type\:\link\,\href\:\https://www.matuzo.at/blog/2023/zero-width-height-skip/\},\style\:\normal\},{\_key\:\9f1e6d08cf3f\,\_type\:\block\,\children\:{\_key\:\640ec4f37652\,\_type\:\span\,\marks\:\f0319d9671fe\,\text\:\a11y project - How to hide content\},\level\:1,\listItem\:\bullet\,\markDefs\:{\_key\:\f0319d9671fe\,\_type\:\link\,\href\:\https://www.a11yproject.com/posts/how-to-hide-content/\},\style\:\normal\},{\_key\:\0e4c6d784f97\,\_type\:\block\,\children\:{\_key\:\a2ab9f084ab6\,\_type\:\span\,\marks\:\d958d9e5664c\,\text\:\The anatomy of visually-hidden\},\level\:1,\listItem\:\bullet\,\markDefs\:{\_key\:\d958d9e5664c\,\_type\:\link\,\href\:\https://www.tpgi.com/the-anatomy-of-visually-hidden/\},\style\:\normal\},\categories\:{\_key\:\b21d0c193a06\,\_ref\:\6caee42f-3692-40c5-bff6-4fa69716931b\,\_type\:\reference\},{\_key\:\a4ce37a82773\,\_ref\:\a00ef0df-8384-4ebf-a372-49086bf07df4\,\_type\:\reference\},\estimatedReadingTime\:1,\excerpt\:\Hint, 🧭\,\mainImage\:{\_type\:\image\,\alt\:\Magnifying glass with eye in the middle\,\asset\:{\_ref\:\image-83621882ba39b458152b42de0383c2b7399af3d6-24x24-svg\,\_type\:\reference\},\lqip\:\data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAABRElEQVQ4je3UvU9UQRQF8B8BAgklkQrZsJUQLJAClbWSv4HVTfjQBRqpoFAXYqwwEZeCgq+/lrzkPEOezwUpDTe5eTPn3Xvmztwzw6PdshFMoon5eDPYqH+wYTxBCzv4huN4Md7FG0wldqCN4Rk+oo+zEH2PHwc7xXaqHvsb2The4DMu0MN7bOEg/gEdfMVlvkvJ/eO8FhJwkdVfoo2TJF+l6mKRZXQTe4jn4fhtT/EJ59jI/HXIfoa4JP+Vf9NYT84eZkqyIbzFNY7QyBbawdYwES+xdmJmUmGBrYbrTsL2AMJGHWF1y5tZuZUzOwnBu4wLbCU563VbrmtKob9XaUDZlMuQddKwbsh6dU0pNbhYkU0nstmvyKaXmC+R2vhDhf0jWD8Vzg0SdvXqrUSP1au3k/O919WrexxmU8ncQx8H/7fdAJ+oROC8EcIbAAAAAElFTkSuQmCC\,\palette\:{\_type\:\sanity.imagePalette\,\darkMuted\:{\_type\:\sanity.imagePaletteSwatch\,\background\:\#040404\,\foreground\:\#fff\,\population\:100,\title\:\#fff\},\darkVibrant\:{\_type\:\sanity.imagePaletteSwatch\,\background\:\#424242\,\foreground\:\#fff\,\population\:0,\title\:\#fff\},\dominant\:{\_type\:\sanity.imagePaletteSwatch\,\background\:\#040404\,\foreground\:\#fff\,\population\:100,\title\:\#fff\},\lightMuted\:{\_type\:\sanity.imagePaletteSwatch\,\background\:\#4c4c4c\,\foreground\:\#fff\,\population\:0,\title\:\#fff\},\lightVibrant\:{\_type\:\sanity.imagePaletteSwatch\,\background\:\#bcbcbc\,\foreground\:\#000\,\population\:0,\title\:\#fff\},\muted\:{\_type\:\sanity.imagePaletteSwatch\,\background\:\#4c4c4c\,\foreground\:\#fff\,\population\:0,\title\:\#fff\},\vibrant\:{\_type\:\sanity.imagePaletteSwatch\,\background\:\#7f7f7f\,\foreground\:\#fff\,\population\:0,\title\:\#fff\}},\url\:\https://cdn.sanity.io/images/v6w7d5ry/production/83621882ba39b458152b42de0383c2b7399af3d6-24x24.svg\},\permalink\:\why-do-visually-hidden-classes-have-1px-width-and-height\,\slug\:{\_type\:\slug\,\current\:\why-do-visually-hidden-classes-have-1px-width-and-height\},\title\:\Why do visually hidden classes have 1px width and height?\,\index\:2}}\n)/script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]