1<!doctype html><html lang=en><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=color-scheme content="dark light"><title>ð Courses | Alex Hyett</title><meta name=description content="Alex Hyett is a Software Developer, YouTuber and Writer focussed on helping people transform their lives by learning how to code."><link rel=alternate href=/feed/feed.rss.xml type=application/rss+xml title="Alex Hyett"><link rel=alternate href=/feed/feed.atom.xml type=application/atom+xml title="Alex Hyett"><link rel=alternate href=/feed/feed.json type=application/json title="Alex Hyett"><link rel=webmention href=https://webmention.io/www.alexhyett.com/webmention><link rel=preconnect href=https://fonts.googleapis.com/><link rel=preconnect href=https://fonts.gstatic.com/ crossorigin><link href="https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible:wght@400;700&family=Fira+Code:[email protected]&display=swap" rel=stylesheet><link rel=preload href=/pagefind/pagefind-component-ui.css as=style onload='this.onload=null,this.rel="stylesheet"'><noscript><link rel=stylesheet href=/pagefind/pagefind-component-ui.css></noscript>
1<script type=module src=/pagefind/pagefind-component-ui.js defer></script>
1<style>/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */ 2@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-scroll-snap-strictness:proximity;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-serif:var(--font-family-serif);--font-mono:var(--font-family-mono);--color-green-100:oklch(96.2% .044 156.743);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-900:oklch(35.9% .144 278.697);--color-violet-600:oklch(54.1% .281 293.009);--color-violet-900:oklch(38% .189 293.745);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-zinc-300:oklch(87.1% .006 286.286);--color-zinc-800:oklch(27.4% .006 286.033);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-2xs:18rem;--container-sm:24rem;--container-2xl:42rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--text-8xl:6rem;--text-8xl--line-height:1;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-widest:.1em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--blur-sm:8px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);
2--color-accent:var(--accent-color);--color-charcoal:#1e1e1e;--color-tertiary:var(--tertiary-color);--color-highlight:var(--highlight-color);--color-light:var(--text-color-light);--color-background:var(--bg-color);--color-secondary:var(--secondary-color)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.top-1{top:calc(var(--spacing)*1)}.top-1\.5{top:calc(var(--spacing)*1.5)}.top-10{top:calc(var(--spacing)*10)}.top-\[-1px\]{top:-1px}
2.top-\[31px\]{top:31px}.top-full{top:100%}.-right-1{right:calc(var(--spacing)*-1)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.bottom-1\.5{bottom:calc(var(--spacing)*1.5)}.left-1\/2{left:50%}.left-\[-31px\]{left:-31px}.left-\[7px\]{left:7px}.isolate{isolation:isolate}.z-10{z-index:10}.z-50{z-index:50}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.m-0\!{margin:calc(var(--spacing)*0)!important}.-mx-\(--gutter\){margin-inline:calc(var(--gutter)*-1)}.-mx-8{margin-inline:calc(var(--spacing)*-8)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-auto{margin-inline:auto}.my-2{margin-block:calc(var(--spacing)*2)}.my-6{margin-block:calc(var(--spacing)*6)}.my-8{margin-block:calc(var(--spacing)*8)}.my-12{margin-block:calc(var(--spacing)*12)}.\!mt-0,.mt-0\!{margin-top:calc(var(--spacing)*0)!important}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\!{margin-top:calc(var(--spacing)*1)!important}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-2\!{margin-top:calc(var(--spacing)*2)!important}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-3\!{margin-top:calc(var(--spacing)*3)!important}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-4\!{margin-top:calc(var(--spacing)*4)!important}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-7{margin-top:calc(var(--spacing)*7)}.mt-8{margin-top:calc(var(--spacing)*8)}.mt-10{margin-top:calc(var(--spacing)*10)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-14{margin-top:calc(var(--spacing)*14)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-20{margin-top:calc(var(--spacing)*20)}.mt-auto{margin-top:auto}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-5{margin-right:calc(var(--spacing)*5)}.\!mb-0{margin-bottom:calc(var(--spacing)*0)!important}.\!mb-3{margin-bottom:calc(var(--spacing)*3)!important}.\!mb-5{margin-bottom:calc(var(--spacing)*5)!important}.\!mb-6{margin-bottom:calc(var(--spacing)*6)!important}.mb-0{margin-bottom:calc(var(--spacing)*0)}.mb-0\!{margin-bottom:calc(var(--spacing)*0)!important}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\!{margin-bottom:calc(var(--spacing)*1)!important}.mb-1\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-2\!{margin-bottom:calc(var(--spacing)*2)!important}.mb-2\.5{margin-bottom:calc(var(--spacing)*2.5)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-3\!{margin-bottom:calc(var(--spacing)*3)!important}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-5{margin-bottom:calc(var(--spacing)*5)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.mb-8\!{margin-bottom:calc(var(--spacing)*8)!important}.mb-9{margin-bottom:calc(var(--spacing)*9)}.mb-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-14{margin-bottom:calc(var(--spacing)*14)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.mb-20{margin-bottom:calc(var(--spacing)*20)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\!flex{display:flex!important}.\!hidden{display:none!important}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.aspect-\[2\/3\]{aspect-ratio:2/3}.aspect-video{aspect-ratio:var(--aspect-video)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-15{height:calc(var(--spacing)*15)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-60{height:calc(var(--spacing)*60)}.h-full{height:100%}.h-px{height:1px}.max-h-0{max-height:calc(var(--spacing)*0)}.max-h-\[90vh\]{max-height:90vh}.min-h-56{min-height:calc(var(--spacing)*56)}
2.min-h-\[280px\]{min-height:280px}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-15{width:calc(var(--spacing)*15)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-40{width:calc(var(--spacing)*40)}.w-64{width:calc(var(--spacing)*64)}.w-\[2px\]{width:2px}.w-\[150px\]{width:150px}.w-\[min\(22rem\,calc\(100vw-4rem\)\)\]{width:min(22rem,100vw - 4rem)}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-\[48ch\]{max-width:48ch}.max-w-\[60ch\]{max-width:60ch}.max-w-\[68ch\]{max-width:68ch}.max-w-\[1024px\]{max-width:1024px}.max-w-\[1282px\]{max-width:1282px}.max-w-full{max-width:100%}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-2xs{min-width:var(--container-2xs)}.min-w-\[200px\]{min-width:200px}.min-w-\[960px\]{min-width:960px}.flex-1{flex:1}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow{flex-grow:1}.grow-2{flex-grow:2}.-translate-x-1\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.resize{resize:both}.snap-x{scroll-snap-type:x var(--tw-scroll-snap-strictness)}.snap-mandatory{--tw-scroll-snap-strictness:mandatory}.snap-start{scroll-snap-align:start}.list-none{list-style-type:none}.list-none\!{list-style-type:none!important}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[1fr_1\.4fr\]{grid-template-columns:1fr 1.4fr}.grid-cols-\[6\.25rem_1fr\]{grid-template-columns:6.25rem 1fr}.grid-cols-\[64px_110px_1fr\]{grid-template-columns:64px 110px 1fr}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.content-between{align-content:space-between}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-3\.5{gap:calc(var(--spacing)*3.5)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}.gap-x-2{column-gap:calc(var(--spacing)*2)}.gap-x-4{column-gap:calc(var(--spacing)*4)}.gap-x-5{column-gap:calc(var(--spacing)*5)}.gap-x-8{column-gap:calc(var(--spacing)*8)}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-2{row-gap:calc(var(--spacing)*2)}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:.25rem}.rounded-\(--radius\),.rounded-\[var\(--radius\)\]{border-radius:var(--radius)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-solid{--tw-border-style:solid;border-style:solid}.border-\(--bg-color\){border-color:var(--bg-color)}.border-\(--border-color\){border-color:var(--border-color)}.border-\[var\(--accent-color\)\]{border-color:var(--accent-color)}.border-\[var\(--border-color\)\]{border-color:var(--border-color)}.border-transparent{border-color:#0000}.bg-\(--accent-color\)\!{background-color:var(--accent-color)!important}.bg-\(--accent-color-alt\){background-color:var(--accent-color-alt)}.bg-\(--border-color\){background-color:var(--border-color)}.bg-\(--secondary-color\){background-color:var(--secondary-color)}.bg-\(--tertiary-color\){background-color:var(--tertiary-color)}.bg-\[var\(--bg-color\)\]{background-color:var(--bg-color)}.bg-\[var\(--secondary-color\)\]{background-color:var(--secondary-color)}.bg-\[var\(--tertiary-color\)\]{background-color:var(--tertiary-color)}.bg-accent{background-color:var(--color-accent)}.bg-background{background-color:var(--color-background)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-charcoal{background-color:var(--color-charcoal)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-green-100{background-color:var(--color-green-100)}.bg-secondary{background-color:var(--color-secondary)}.bg-tertiary{background-color:var(--color-tertiary)}.bg-transparent{background-color:#0000}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[\#1a1030\]{--tw-gradient-from:#1a1030;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var
2(--tw-gradient-to-position))}.from-\[var\(--accent-color\)\]{--tw-gradient-from:var(--accent-color);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.via-\[\#2d1b4e\]{--tw-gradient-via:#2d1b4e;--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-\[\#48cab1\]{--tw-gradient-to:#48cab1;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-\[var\(--accent-color-alt\)\]{--tw-gradient-to:var(--accent-color-alt);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.bg-cover{background-size:cover}.fill-black{fill:var(--color-black)}.fill-current{fill:currentColor}.stroke-black{stroke:var(--color-black)}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing)*0)}.p-0\!{padding:calc(var(--spacing)*0)!important}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3\.5{padding:calc(var(--spacing)*3.5)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-9{padding:calc(var(--spacing)*9)}.px-\(--gutter\){padding-inline:var(--gutter)}.px-0{padding-inline:calc(var(--spacing)*0)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\!{padding-inline:calc(var(--spacing)*2)!important}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-3\!{padding-inline:calc(var(--spacing)*3)!important}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\!{padding-block:calc(var(--spacing)*1)!important}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-6{padding-block:calc(var(--spacing)*6)}.py-12{padding-block:calc(var(--spacing)*12)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pr-6{padding-right:calc(var(--spacing)*6)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-10{padding-bottom:calc(var(--spacing)*10)}.pl-0\!{padding-left:calc(var(--spacing)*0)!important}.pl-1\!{padding-left:calc(var(--spacing)*1)!important}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-8{padding-left:calc(var(--spacing)*8)}.pl-10{padding-left:calc(var(--spacing)*10)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.font-serif{font-family:var(--font-serif)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-2xl\!{font-size:var(--text-2xl)!important;line-height:var(--tw-leading,var(--text-2xl--line-height))!important}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-6xl\!{font-size:var(--text-6xl)!important;line-height:var(--tw-leading,var(--text-6xl--line-height))!important}.text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.text-base{font-size:var(--text-base);
2line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-sm\!{font-size:var(--text-sm)!important;line-height:var(--tw-leading,var(--text-sm--line-height))!important}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xl\!{font-size:var(--text-xl)!important;line-height:var(--tw-leading,var(--text-xl--line-height))!important}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[1\.125rem\]{font-size:1.125rem}.text-\[1\.125rem\]\!{font-size:1.125rem!important}.text-\[1\.875rem\]{font-size:1.875rem}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.leading-7{--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.leading-8{--tw-leading:calc(var(--spacing)*8);line-height:calc(var(--spacing)*8)}.leading-8\!{--tw-leading:calc(var(--spacing)*8)!important;line-height:calc(var(--spacing)*8)!important}.leading-none{--tw-leading:1;line-height:1}.leading-none\!{--tw-leading:1!important;line-height:1!important}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.leading-tight\!{--tw-leading:var(--leading-tight)!important;line-height:var(--leading-tight)!important}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.1em\]{--tw-tracking:.1em;letter-spacing:.1em}.tracking-\[0\.08em\]{--tw-tracking:.08em;letter-spacing:.08em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-\[2px\]{--tw-tracking:2px;letter-spacing:2px}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-nowrap{text-wrap:nowrap}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.text-\(--accent-color\){color:var(--accent-color)}.text-\(--accent-color-alt\){color:var(--accent-color-alt)}.text-\(--header-color\){color:var(--header-color)}.text-\(--text-color\){color:var(--text-color)}.text-\(--text-color\)\!{color:var(--text-color)!important}.text-\(--text-color-light\){color:var(--text-color-light)}.text-\(--text-color-light\)\!{color:var(--text-color-light)!important}.text-\[\#141414\]{color:#141414}.text-\[\#141414\]\!{color:#141414!important}.text-\[\#e5484d\]{color:#e5484d}.text-\[var\(--accent-color\)\]{color:var(--accent-color)}.text-\[var\(--header-color\)\]{color:var(--header-color)}.text-\[var\(--text-color\)\]{color:var(--text-color)}.text-\[var\(--text-color-light\)\]{color:var(--text-color-light)}.text-black{color:var(--color-black)}.text-gray-400{color:var(--color-gray-400)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-light{color:var(--color-light)}.text-light\!{color:var(--color-light)!important}.text-white{color:var(--color-white)}.text-white\/40{color:#fff6}@supports (color:color-mix(in lab, red, red)){.text-white\/40{color:color-mix(in oklab,var(--color-white)40%,transparent)}}.text-white\/65{color:#ffffffa6}@supports (color:color-mix(in lab, red, red)){.text-white\/65{color:color-mix(in oklab,var(--color-white)65%,transparent)}}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.no-underline\!{text-decoration-line:none!important}.decoration-\[\#141414\]\!{text-decoration-color:#141414!important}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-70{opacity:.7}
2.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_4px_oklch\(from_var\(--accent-color\)_l_c_h_\/_0\.2\)\]{--tw-shadow:0 0 0 4px var(--tw-shadow-color,oklch(from var(--accent-color)l c h/.2));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-sha
2dow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-filter{backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,visibility,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300,.duration-\[0\.3s\]{--tw-duration:.3s;transition-duration:.3s}.ease-\[ease\]{--tw-ease:ease;transition-timing-function:ease}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.select-none{-webkit-user-select:none;user-select:none}.group-open\:block:is(:where(.group):is([open],:popover-open,:open) *){display:block}.group-open\:rotate-180:is(:where(.group):is([open],:popover-open,:open) *){rotate:180deg}@media (hover:hover){.group-hover\:fill-\[\#ff0000\]:is(:where(.group):hover *){fill:red}.group-hover\:stroke-\[\#d40000\]:is(:where(.group):hover *){stroke:#d40000}.group-hover\:stroke-\[\#ff0000\]:is(:where(.group):hover *){stroke:red}.group-hover\:stroke-\[\#ff6600\]:is(:where(.group):hover *){stroke:#f60}}.peer-checked\:max-h-\[48rem\]:is(:where(.peer):checked~*){max-height:48rem}.first\:pt-0:first-child{padding-top:calc(var(--spacing)*0)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:pb-0:last-child{padding-bottom:calc(var(--spacing)*0)}.visited\:text-\(--header-color\):visited{color:var(--header-color)}.visited\:text-\(--text-color\)\!:visited{color:var(--text-color)!important}.visited\:no-underline\!:visited{text-decoration-line:none!important}@media (hover:hover){.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;
2--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:border-\(--accent-color\):hover{border-color:var(--accent-color)}.hover\:border-\(--accent-color\)\!:hover{border-color:var(--accent-color)!important}.hover\:border-\(--text-color\):hover{border-color:var(--text-color)}.hover\:border-accent\!:hover{border-color:var(--color-accent)!important}.hover\:bg-\(--tertiary-color\):hover{background-color:var(--tertiary-color)}.hover\:bg-highlight:hover{background-color:var(--color-highlight)}.hover\:bg-secondary:hover{background-color:var(--color-secondary)}.hover\:fill-\[\#6e5494\]:hover{fill:#6e5494}.hover\:fill-\[\#0077b5\]:hover{fill:#0077b5}.hover\:fill-\[\#6364ff\]:hover{fill:#6364ff}.hover\:fill-\[var\(--highlight-color\)\]:hover{fill:var(--highlight-color)}.hover\:stroke-\[\#f1680d\]:hover{stroke:#f1680d}.hover\:text-\(--header-color\):hover{color:var(--header-color)}.hover\:text-\(--header-color\)\!:hover{color:var(--header-color)!important}.hover\:no-underline\!:hover{text-decoration-line:none!important}.hover\:underline:hover{text-decoration-line:underline}.hover\:underline\!:hover{text-decoration-line:underline!important}.hover\:\!decoration-transparent:hover{text-decoration-color:#0000!important}.hover\:opacity-90:hover{opacity:.9}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-sha
2dow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:duration-500:hover{--tw-duration:.5s;transition-duration:.5s}}@media not all and (width>=520px){.max-\[520px\]\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}}@media not all and (width>=48rem){.max-md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}}@media not all and (width>=40rem){.max-sm\:row-span-2{grid-row:span 2/span 2}.max-sm\:grid-cols-\[56px_1fr\]{grid-template-columns:56px 1fr}.max-sm\:gap-y-1{row-gap:calc(var(--spacing)*1)}}@media (width>=40rem){.sm\:block{display:block}.sm\:h-16{height:calc(var(--spacing)*16)}.sm\:w-16{width:calc(var(--spacing)*16)}.sm\:w-\[calc\(50\%-1rem\)\]{width:calc(50% - 1rem)}.sm\:w-\[min\(42rem\,92vw\)\]{width:min(42rem,92vw)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-3{gap:calc(var(--spacing)*3)}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:py-5{padding-block:calc(var(--spacing)*5)}.sm\:pt-0{padding-top:calc(var(--spacing)*0)}.sm\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.sm\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}@media (width>=48rem){.md\:absolute{position:absolute}.md\:top-4{top:calc(var(--spacing)*4)}.md\:right-4{right:calc(var(--spacing)*4)}.md\:-mx-16{margin-inline:calc(var(--spacing)*-16)}.md\:mx-0{margin-inline:calc(var(--spacing)*0)}.md\:mt-0{margin-top:calc(var(--spacing)*0)}.md\:ml-auto{margin-left:auto}.md\:\!block{display:block!important}.md\:\!hidden{display:none!important}.md\:flex{display:flex}.md\:hidden{display:none}.md\:aspect-auto{aspect-ratio:auto}.md\:h-20{height:calc(var(--spacing)*20)}.md\:w-4\/5{width:80%}.md\:w-20{width:calc(var(--spacing)*20)}.md\:w-72{width:calc(var(--spacing)*72)}.md\:flex-shrink-0,.md\:shrink-0{flex-shrink:0}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-\[1fr_auto\]{grid-template-columns:1fr auto}.md\:grid-cols-\[4\.5rem_minmax\(0\,1fr\)_auto\]{grid-template-columns:4.5rem minmax(0,1fr) auto}.md\:grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.md\:flex-col{flex-direction:column}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:items-end{align-items:flex-end}.md\:justify-between{justify-content:space-between}.md\:self-center{align-self:center}.md\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.md\:border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.md\:px-8{padding-inline:calc(var(--spacing)*8)}.md\:pt-6{padding-top:calc(var(--spacing)*6)}.md\:pr-28{padding-right:calc(var(--spacing)*28)}.md\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}}@media (width>=64rem){.lg\:w-\[calc\(33\.333\%-1\.333rem\)\]{width:calc(33.333% - 1.333rem)}.lg\:max-w-\[45\%\]{max-width:45%}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.lg\:object-contain{object-fit:contain}}@media (width>=80rem){.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}@media (prefers-color-scheme:dark){.dark\:fill-white{fill:var(--color-white)}.dark\:stroke-white{stroke:var(--color-white)}.dark\:text-black{color:var(--color-black)}.dark\:text-gray-400{color:var(--color-gray-400)}.dark\:text-white{color:var(--color-white)}@media (hover:hover){.dark\:hover\:fill-\[\#6e5494\]:hover{fill:#6e5494}.dark\:hover\:fill-\[\#0077b5\]:hover{fill:#0077b5}.dark\:hover\:fill-\[\#6364ff\]:hover{fill:#6364ff}.dark\:hover\:stroke-\[\#f1680d\]:hover{stroke:#f1680d}}}.\[\&_img\]\:w-full img{width:100%}.\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker{display:none}}:root{--radius:.5rem;--syntax-tab-size:2;--font-family-serif:"Atkinson Hyperlegible",ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";--font-family-mono:"Fira Code",Consolas,Courier New,Courier,monospace;--accent-color:#481cab;--accent-color-shadow:#32127a;--accent-color-alt:#48cab1;--highlight-color:#481cab;--border-color:#333;--text-color:#dddcdc;--text-color-light:#9d9d9d;--text-color-shadow:#aeadad;--bg-color:#141414;--secondary-color:#1e1e1e;--tertiary-color:#2d2d30;--tertiary-color-shadow:#333;--input-color-shadow:#333;--header-color:#fff;--roadmap-line-color:#fdf5fd}@media (prefers-color-scheme:light){:root{--highlight-color:#481cab;--border-color:#e0e0e0;--text-color:#333;--text-color-light:#6e6e6e;--text-color-shadow:#242424;--bg-color:#fff;--secondary-color:#f5f5f5;--tertiary-color:#e4e4e4;--tertiary-color-shadow:#c4c4c4;--header-color:#000;--roadmap-line-color:#1f1926}}.text-color{color:var(--text-color)}.text-color-light{color:var(--text-color-light)}.border-color{border-color:var(--border-color)}.card{border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:solid;border-style:solid;border-width:1px;border-color:var(--border-color);background-color:var(--secondary-color);padding:calc(var(--spacing)*4)}.webmentions-replies{position:relative}.webmentions-replies--fade:after{content:"";pointer-events:none;background:linear-gradient(to bottom,transparent,var(--bg-color));
2height:4rem;position:absolute;bottom:0;left:0;right:0}.webmentions-replies-hint{z-index:1;pointer-events:none;color:var(--text-color-light);font-family:var(--font-family-mono);text-align:center;font-size:.75rem;position:absolute;bottom:.75rem;left:0;right:0}.webmentions-replies-list{max-height:400px;overflow-y:auto}.webmentions-replies--fade .webmentions-replies-list{padding-bottom:4rem}.nav-subscribe-cta{font-family:var(--font-family-mono);white-space:nowrap;padding:.7rem .9rem;font-size:.875rem;line-height:1}body{font-feature-settings:"liga","calt","kern","onum"}.iframe-view body{max-width:none;padding:0 1.25rem 1.25rem}.iframe-view header,.iframe-view footer{display:none}.iframe-view main{margin-top:0}.iframe-view main>h1{font-size:2rem;margin-top:1rem!important;margin-bottom:1.5rem!important}.iframe-view .roadmap-not-iframe{display:none}.roadmap-panel-booting [data-roadmap-panel]{display:block}.roadmap-panel-booting [data-roadmap-drawer]{transform:translate(0)}[data-roadmap-backdrop]{background:var(--bg-color)}@supports (color:color-mix(in lab, red, red)){[data-roadmap-backdrop]{background:color-mix(in oklch,var(--bg-color)72%,transparent)}}[data-roadmap-frame]{opacity:0;transition:opacity .14s ease-out}[data-roadmap-frame].is-loaded{opacity:1!important}[data-roadmap-close]{justify-content:center;align-items:center;line-height:1;display:flex!important}[data-roadmap-close] svg{flex:none;display:block}[data-roadmap-svg],[data-roadmap-svg] svg{background:0 0}[data-roadmap-svg] path,[data-roadmap-svg] a:hover rect{stroke:var(--roadmap-line-color)}h1,h2,h3,h4,h5,h6{--tw-leading:calc(var(--spacing)*8);line-height:calc(var(--spacing)*8);--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);color:var(--header-color)}h1{margin-top:calc(var(--spacing)*4);margin-bottom:calc(var(--spacing)*12);font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height));--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}h2{margin-top:calc(var(--spacing)*10);margin-bottom:calc(var(--spacing)*5);font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}h3,h4,h5,h6{margin-top:calc(var(--spacing)*8);margin-bottom:calc(var(--spacing)*4);font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}p{margin-top:calc(var(--spacing)*4);margin-bottom:calc(var(--spacing)*4);line-height:1.5}a{color:var(--header-color);text-decoration-line:underline}a:visited,a:active{color:var(--header-color)}a{-webkit-text-decoration-color:var(--highlight-color);-webkit-text-decoration-color:var(--highlight-color);text-decoration-color:var(--highlight-color);text-decoration-thickness:3px}@media (hover:hover){a:hover{-webkit-text-decoration-color:var(--color-violet-600)!important;-webkit-text-decoration-color:var(--color-violet-600)!important;text-decoration-color:var(--color-violet-600)!important}}@media (prefers-color-scheme:dark){@media (hover:hover){a:hover{-webkit-text-decoration-color:var(--color-violet-900)!important;-webkit-text-decoration-color:var(--color-violet-900)!important;text-decoration-color:var(--color-violet-900)!important}}}a:active{-webkit-text-decoration-color:var(--color-indigo-600);-webkit-text-decoration-color:var(--color-indigo-600);text-decoration-color:var(--color-indigo-600)}@media (prefers-color-scheme:dark){a:active{-webkit-text-decoration-color:var(--color-indigo-900);-webkit-text-decoration-color:var(--color-indigo-900);text-decoration-color:var(--color-indigo-900)}}a:visited{-webkit-text-decoration-color:var(--color-indigo-600);-webkit-text-decoration-color:var(--color-indigo-600);text-decoration-color:var(--color-indigo-600)}@media (prefers-color-scheme:dark){a:visited{-webkit-text-decoration-color:var(--color-indigo-900);-webkit-text-decoration-color:var(--color-indigo-900);text-decoration-color:var(--color-indigo-900)}}a{-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}main ul,main ol{padding-left:calc(var(--spacing)*8)}ul li{list-style-type:disc}ol li{list-style-type:decimal}hr{margin-inline:auto;margin-top:calc(var(--spacing)*8);margin-bottom:calc(var(--spacing)*8);color:var(--border-color)}main blockquote{color:var(--text-color);background-color:var(--secondary-color);border-radius:var(--radius);border-left-width:0;margin:1.5em .5em;padding:1rem 1.5rem;font-size:1rem;font-style:italic;position:relative}main blockquote:before{content:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' width='30' fill='%233f3f46'%3E%3Cpath d='M4
264 256h-80v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8c-88.4 0-160 71.6-160 160v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zm-288 0H96v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8C71.6 32 0 103.6 0 192v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z'/%3E%3C/svg%3E");margin-top:-20px;margin-left:-40px;position:absolute}section blockquote{background-color:var(--tertiary-color);margin-bottom:0}input{border-radius:var(--radius);border:none;padding:.6rem .8rem;font-size:16px}input[type=text],input[type=email]{color:var(--text-color);caret-color:var(--accent-color);border:1px solid var(--border-color);box-shadow:2px 4px 0px var(--input-color-shadow);background-color:#0000}input[type=text]:focus,input[type=email]:focus,input[type=text]:focus-visible,input[type=email]:focus-visible,input[type=text]:target,input[type=email]:target{border-color:var(--accent-color);outline:none}input[type=submit],button,a.button,label.button{background-color:var(--text-color);border:1px solid var(--text-color);border-radius:var(--radius);box-shadow:2px 4px 0px var(--input-color-shadow);z-index:0;-o-transition:All .25s ease;padding:.6rem .8rem;font-size:16px;font-weight:700;transition:all .25s;display:inline-block;position:relative;overflow:hidden;color:var(--bg-color)!important;text-decoration:none!important}input[type=submit]:active,button:active,button.button:active,a.button:active,label.button:active{-o-transition:All .25s ease;transition:all .25s;position:relative;top:2px;-webkit-box-shadow:none!important;-moz-box-shadow:none!important;-ms-box-shadow:none!important;-o-box-shadow:none!important;box-shadow:none!important}input[type=submit]:hover,button:hover,a.button:hover,label.button:hover{cursor:pointer;filter:brightness(.8);color:var(--secondary-color)!important;text-decoration:none!important}.button.secondary,button.secondary,input[type=submit].secondary{background-color:var(--tertiary-color);box-shadow:2px 4px 0px var(--tertiary-color-shadow);font-weight:400;color:var(--text-color-light)!important;border:1px solid var(--tertiary-color)!important}button.secondary:hover,input[type=submit].secondary:hover,.button.secondary:hover{color:var(--text-color)!important}.button.cta,button.cta{background-color:var(--accent-color)!important;color:#fff!important;border:1px solid var(--accent-color)!important;box-shadow:2px 4px 0px var(--accent-color-shadow)!important}.button.cta:hover,button.cta:hover{color:var(--text-color-light)!important}.contact li:before{content:"";width:1.25rem;max-width:1.25rem;height:1.25rem;color:var(--color-zinc-800);display:block;-webkit-mask-size:1.25rem;mask-size:1.25rem}@media (prefers-color-scheme:dark){.contact li:before{color:var(--color-zinc-300)}}.list-counter:before{pointer-events:none;counter-increment:start-from -1;font-family:var(--font-mono);color:var(--text-color-light);content:"#" counter(start-from,decimal-leading-zero)"";text-align:right;word-spacing:-.2rem;align-self:center;min-width:2.5rem;margin-left:-1.5rem;line-height:100%;display:inline-block}.header-anchor{margin-left:.1em!important;font-style:normal!important;text-decoration:none!important}a[href].header-anchor,a[href].header-anchor:visited{color:#0000!important;text-decoration:none!important}a[href].header-anchor:focus,a[href].header-anchor:hover{text-decoration:none!important}a[href].header-anchor:focus,:hover>a[href].header-anchor{color:#aaa!important}h2+.header-anchor{font-size:1.5rem!important}@keyframes live-pulse{0%{box-shadow:0 0 0 0 oklch(from var(--accent-color-alt)l c h/.6)}70%{box-shadow:0 0 0 8px oklch(from var(--accent-color-alt)l c h/0)}to{box-shadow:0 0 0 0 oklch(from var(--accent-color-alt)l c h/0)}}.gradient-heading{background:linear-gradient(90deg,var(--accent-color)0%,var(--accent-color-alt)100%);color:#0000;-webkit-background-clip:text;background-clip:text;padding:.1em 0;display:inline-block}.contribution-chart-wrapper svg{color:var(--text-color-light)}.contribution-chart-wrapper .contribution-rect{cursor:pointer;transition:transform .1s,opacity .1s}.contribution-chart-wrapper .contribution-rect:hover{stroke:var(--text-color-light);stroke-width:1px;opacity:1!important}code{background-color:var(--tertiary-color);border-radius:.3em;padding:.1rem .2rem;font-size:.9rem}pre code{padding:0}.project-screens{gap:calc(var(--spacing)*4);display:grid}@media (width>=40rem){.project-screens{grid-template-columns:repeat(3,minmax(0,1fr))}}.project-screens figure{margin-block:calc(var(--spacing)*0);border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:solid;border-style:solid;border-width:1px;border-color:var(--border-color);background-color:var(--color-secondary);overflow:hidden}.project-screens img{aspect-ratio:4/5;object-fit:cover;object-position:top;width:100%}.project-screens figcaption{border-top-style:var(--tw-border-style);--tw-border-style:solid;border-style:solid;border-top-width:1px;border-color:var(--border-color);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-family:var(--font-mono);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--text-color-light)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-scroll-snap-strictness{syntax:"*";inherits:false;initial-value:proximity}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}
2@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}:root{--pf-text:var(--text-color);--pf-text-secondary:var(--text-color-light);--pf-text-muted:var(--text-color-light);--pf-background:var(--bg-color);--pf-border:var(--border-color);--pf-border-focus:var(--accent-color);--pf-hover:var(--secondary-color);--pf-mark:var(--text-color);--pf-font:var(--font-family-serif);--pf-border-radius:var(--radius);--pf-outline-focus:var(--accent-color);--pf-skeleton:var(--secondary-color);--pf-skeleton-shine:var(--tertiary-color);--pf-searchbox-max-width:100%;--pf-input-height:42px}pagefind-searchbox,pagefind-searchbox .pf-searchbox{width:100%;max-width:100%}</style><link rel=icon href=/favicon.ico sizes=32x32><link rel=icon href=/icon.svg type=image/svg+xml><link rel=apple-touch-icon href=/apple-touch-icon.png><link rel=manifest href=/manifest.webmanifest><meta name=twitter:card content=summary_large_image><meta property=og:title content="ð Courses | Alex Hyett"><meta property=og:description content='{% from "components/course/course-grid.njk" import courseGrid %} There's only so much I can cover in a 10-minute video or a blog post.'><meta property=og:type content=website><meta property=og:url content=https://www.alexhyett.com/courses/><meta property=og:image content=https://www.alexhyett.com/img/og/courses.jpg><meta property=og:image:width content=1200><meta property=og:image:height content=630><meta name=fediverse:creator content=@[email protected]><link rel=canonical href=https://www.alexhyett.com/courses/>
2<script defer data-domain=alexhyett.com src=https://analytics.alexhyett.com/js/script.outbound-links.tagged-events.js></script>
2<script>window.plausible=window.plausible||function(){(window.plausible.q=window.plausible.q||[]).push(arguments)}</script>
2<body class="font-serif leading-6 max-w-[1024px] mx-auto bg-background text-color pt-2 px-8 text-lg"><a href=#skip class=hidden>Skip to main content</a>
2<script>document.addEventListener("DOMContentLoaded",function(){const e=document.getElementById("mobile-menu"),n=document.getElementById("hamburger-icon"),t=document.getElementById("close-icon");e.addEventListener("change",function(){n.classList.toggle("hidden",e.checked),t.classList.toggle("hidden",!e.checked)})})</script>
2<header><input type=checkbox id=mobile-menu class="peer hidden"><div class=pt-8><div class="flex flex-wrap items-center gap-4 justify-between"><a href=/ class="font-mono font-bold no-underline! uppercase text-(--header-color) visited:text-(--header-color)">Alex Hyett</a> <label for=mobile-menu class="md:!hidden cursor-pointer p-2 button secondary rounded-(--radius)"><svg fill="none" stroke="currentColor" class="w-6 h-6" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"/></svg> <svg fill="none" stroke="currentColor" class="w-6 h-6 hidden" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/></svg></label><div class="hidden md:flex items-center gap-6 ml-auto"><nav class="flex items-center gap-6"><h2 class=hidden>Top level navigation menu</h2><a class="no-underline! hover:underline! text-(--text-color)! visited:text-(--text-color)! uppercase font-semibold" href=/start-here/>Start Here</a> <a class="no-underline! hover:underline! text-(--text-color)! visited:text-(--text-color)! uppercase font-semibold" href=/courses/ aria-current=page>Courses</a> <a class="no-underline! hover:underline! text-(--text-color)! visited:text-(--text-color)! uppercase font-semibold" href=/projects/>Projects</a><details class="group relative"><summary class="cursor-pointer list-none flex items-center gap-1 no-underline! text-(--text-color)! uppercase font-semibold hover:underline! [&::-webkit-details-marker]:hidden"><span>Resources</span> <svg fill="none" stroke="currentColor" aria-hidden="true" class="w-4 h-4 transition-transform group-open:rotate-180" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m6 9 6 6 6-6"/></svg></summary><div class="hidden group-open:block absolute left-1/2 top-full z-50 mt-4 w-[min(22rem,calc(100vw-4rem))] -translate-x-1/2 rounded-(--radius) border border-solid border-(--border-color) bg-(--secondary-color) p-4 shadow-lg"><ul class="grid gap-2"><li class=list-none!><a href=/newsletter/ class="flex items-center gap-3 rounded-(--radius) px-3 py-2 no-underline! text-(--text-color)! hover:bg-(--tertiary-color) hover:text-(--header-color)!"><span class="w-6 text-center" aria-hidden=true>ð¨</span> <span>Newsletter</span></a><li class=list-none!><a href=/videos/ class="flex items-center gap-3 rounded-(--radius) px-3 py-2 no-underline! text-(--text-color)! hover:bg-(--tertiary-color) hover:text-(--header-color)!"><span class="w-6 text-center" aria-hidden=true>ð¬</span> <span>Videos</span></a><li class=list-none!><a href=/blog/ class="flex items-center gap-3 rounded-(--radius) px-3 py-2 no-underline! text-(--text-color)! hover:bg-(--tertiary-color) hover:text-(--header-color)!"><span class="w-6 text-center" aria-hidden=true>ð</span> <span>Blog</span></a><li class=list-none!><a href=/roadmaps/ class="flex items-center gap-3 rounded-(--radius) px-3 py-2 no-underline! text-(--text-color)! hover:bg-(--tertiary-color) hover:text-(--header-color)!"><span class="w-6 text-center" aria-hidden=true>ðºï¸</span> <span>Developer Roadmaps</span></a><li class=list-none!><a href=/books/ class="flex items-center gap-3 rounded-(--radius) px-3 py-2 no-underline! text-(--text-color)! hover:bg-(--tertiary-color) hover:text-(--header-color)!"><span class="w-6 text-center" aria-hidden=true>ð</span> <span>Reading List</span></a><li class=list-none!><a href=/book-notes/ class="flex items-center gap-3 rounded-(--radius) px-3 py-2 no-underline! text-(--text-color)! hover:bg-(--tertiary-color) hover:text-(--header-color)!"><span class="w-6 text-center" aria-hidden=true>ð</span> <span>Book Notes</span></a><li class=list-none!><a href=/notes/ class="flex items-center gap-3 rounded-(--radius) px-3 py-2 no-underline! text-(--text-color)! hover:bg-(--tertiary-color) hover:text-(--header-color)!"><span class="w-6 text-center" aria-hidden=true>ðï¸</span> <span>Notes</span></a></ul></div></details></nav><a href=/newsletter/ class="button cta nav-subscribe-cta inline-flex items-center justify-center">Join 3k+ Subscribers</a></div></div></div><nav class="md:hidden mt-4 overflow-hidden max-h-0 peer-checked:max-h-[48rem] transition-all"><ul class="flex flex-col gap-2 mb-4"><li class=list-none!><a class="block py-2 no-underline! hover:underline! text-(--text-color)! visited:text-(--text-color)! uppercase font-semibold" href=/start-here/>Start Here</a><li class=list-none!><a class="block py-2 no-underline! hover:underline! text-(--text-color)! visited:text-(--text-color)! uppercase font-semibold" href=/courses/ aria-current=page>Courses</a><li class=list-none!><a class="block py-2 no-underline! hover:underline! text-(--text-color)! visited:text-(--text-color)! uppercase font-semibold" href=/projects/>Projects</a><li class=list-none!>
2<details class=group><summary class="cursor-pointer list-none flex items-center justify-between py-2 text-(--text-color)! uppercase font-semibold [&::-webkit-details-marker]:hidden"><span>Resources</span> <svg fill="none" stroke="currentColor" aria-hidden="true" class="w-4 h-4 transition-transform group-open:rotate-180" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m6 9 6 6 6-6"/></svg></summary><ul class="mt-1 mb-3 grid gap-1 rounded-(--radius) border border-solid border-(--border-color) bg-(--secondary-color) p-2"><li class=list-none!><a href=/newsletter/ class="flex items-center gap-3 rounded-(--radius) px-3 py-2 no-underline! text-(--text-color-light)! hover:bg-(--tertiary-color) hover:text-(--header-color)!"><span class="w-6 text-center" aria-hidden=true>ð¨</span> <span>Newsletter</span></a><li class=list-none!><a href=/videos/ class="flex items-center gap-3 rounded-(--radius) px-3 py-2 no-underline! text-(--text-color-light)! hover:bg-(--tertiary-color) hover:text-(--header-color)!"><span class="w-6 text-center" aria-hidden=true>ð¬</span> <span>Videos</span></a><li class=list-none!><a href=/blog/ class="flex items-center gap-3 rounded-(--radius) px-3 py-2 no-underline! text-(--text-color-light)! hover:bg-(--tertiary-color) hover:text-(--header-color)!"><span class="w-6 text-center" aria-hidden=true>ð</span> <span>Blog</span></a><li class=list-none!><a href=/roadmaps/ class="flex items-center gap-3 rounded-(--radius) px-3 py-2 no-underline! text-(--text-color-light)! hover:bg-(--tertiary-color) hover:text-(--header-color)!"><span class="w-6 text-center" aria-hidden=true>ðºï¸</span> <span>Developer Roadmaps</span></a><li class=list-none!><a href=/books/ class="flex items-center gap-3 rounded-(--radius) px-3 py-2 no-underline! text-(--text-color-light)! hover:bg-(--tertiary-color) hover:text-(--header-color)!"><span class="w-6 text-center" aria-hidden=true>ð</span> <span>Reading List</span></a><li class=list-none!><a href=/book-notes/ class="flex items-center gap-3 rounded-(--radius) px-3 py-2 no-underline! text-(--text-color-light)! hover:bg-(--tertiary-color) hover:text-(--header-color)!"><span class="w-6 text-center" aria-hidden=true>ð</span> <span>Book Notes</span></a><li class=list-none!><a href=/notes/ class="flex items-center gap-3 rounded-(--radius) px-3 py-2 no-underline! text-(--text-color-light)! hover:bg-(--tertiary-color) hover:text-(--header-color)!"><span class="w-6 text-center" aria-hidden=true>ðï¸</span> <span>Notes</span></a></ul></details></ul><a href=/newsletter/ class="button cta nav-subscribe-cta mt-4 inline-flex items-center justify-center">Join 3k+ Subscribers</a></nav><div class=mt-4><pagefind-config excerpt-length=30 hidden></pagefind-config><pagefind-searchbox show-sub-results="" placeholder="Search posts, newsletter, notes..."></pagefind-searchbox></div></header><main id=skip class=mt-16><h1>ð Courses</h1><p class="text-lg leading-7 text-color-light mt-0!">There's only so much I can cover in a 10-minute video or a blog post. When I want to go deep on a topic, and really take my time, I make a course. If you like my videos, you'll like these too.</p>
2<script src=https://f.convertkit.com/ckjs/ck.5.js></script>
2<div class="border border-solid border-color rounded-(--radius) bg-secondary p-6 mt-8 mb-8 grid grid-cols-1 md:grid-cols-[1fr_auto] gap-6 items-center"><div><h3 class="mt-0! mb-0! mb-1.5 text-[1.125rem]!">Be the first to know</h3><p class="text-sm text-color-light m-0!">A short note when a new course goes live. No drip campaigns, no upsells.</div><form action=https://app.kit.com/forms/9668437/subscriptions class="seva-form formkit-form" method=post data-sv-form=9668437 data-uid=5ca1642f47 data-format=inline data-version=5 data-options='{"settings":{"after_subscribe":{"action":"message","success_message":"Success! Now check your email to confirm your subscription.","redirect_url":""},"analytics":{"google":null,"fathom":null,"facebook":null,"segment":null,"pinterest":null,"sparkloop":null,"googletagmanager":null},"modal":{"trigger":"timer","scroll_percentage":null,"timer":5,"devices":"all","show_once_every":15},"powered_by":{"show":true,"url":"https://kit.com/features/forms?utm_campaign=poweredby&utm_content=form&utm_medium=referral&utm_source=dynamic"},"recaptcha":{"enabled":false},"return_visitor":{"action":"show","custom_content":""},"slide_in":{"display_in":"bottom_right","trigger":"timer","scroll_percentage":null,"timer":5,"devices":"all","show_once_every":15},"sticky_bar":{"display_in":"top","trigger":"timer","scroll_percentage":null,"timer":5,"devices":"all","show_once_every":15}},"version":"5"}' min-width="400 500 600 700 800"><div data-style="clean p-0!"><ul class="formkit-alert formkit-alert-error" data-element=errors data-group=alert></ul><div data-element=fields data-stacked=false class="seva-fields formkit-fields flex gap-2 flex-wrap"><input class="flex-1 min-w-[200px]" name=email_address aria-label="Email Address" placeholder="Email Address" required type=email> <button data-element=submit><div class=formkit-spinner><div></div><div></div><div></div></div><span>Notify me</span></button></div></div><style>.formkit-form[data-uid="5ca1642f47"] *{box-sizing:border-box}.formkit-form[data-uid="5ca1642f47"]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.formkit-form[data-uid="5ca1642f47"] legend{font-size:inherit;border:none;margin-bottom:10px;padding:0;display:table;position:relative}.formkit-form[data-uid="5ca1642f47"] fieldset{border:0;min-width:0;margin:0;padding:.01em 0 0}.formkit-form[data-uid="5ca1642f47"] body:not(:-moz-handler-blocked) fieldset{display:table-cell}.formkit-form[data-uid="5ca1642f47"] h1,.formkit-form[data-uid="5ca1642f47"] h2,.formkit-form[data-uid="5ca1642f47"] h3,.formkit-form[data-uid="5ca1642f47"] h4,.formkit-form[data-uid="5ca1642f47"] h5,.formkit-form[data-uid="5ca1642f47"] h6{color:inherit;font-size:inherit;font-weight:inherit}.formkit-form[data-uid="5ca1642f47"] h2{margin:1em 0;font-size:1.5em}.formkit-form[data-uid="5ca1642f47"] h3{margin:1em 0;font-size:1.17em}.formkit-form[data-uid="5ca1642f47"] p{color:inherit;font-size:inherit;font-weight:inherit}.formkit-form[data-uid="5ca1642f47"] ol:not([template-default]),.formkit-form[data-uid="5ca1642f47"] ul:not([template-default]),.formkit-form[data-uid="5ca1642f47"] blockquote:not([template-default]){text-align:left}.formkit-form[data-uid="5ca1642f47"] p:not([template-default]),.formkit-form[data-uid="5ca1642f47"] hr:not([template-default]),.formkit-form[data-uid="5ca1642f47"] blockquote:not([template-default]),.formkit-form[data-uid="5ca1642f47"] ol:not([template-default]),.formkit-form[data-uid="5ca1642f47"] ul:not([template-default]){color:inherit;font-style:initial}.formkit-form[data-uid="5ca1642f47"] .ordered-list,.formkit-form[data-uid="5ca1642f47"] .unordered-list{padding-left:1em;list-style-position:outside!important}.formkit-form[data-uid="5ca1642f47"] .list-item{padding-left:0}.formkit-form[data-uid="5ca1642f47"] .formkit-alert{text-align:center;background:#f9fafb;border:1px solid #e3e3e3;border-radius:5px;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;width:100%;padding:12px;list-style:none}.formkit-form[data-uid="5ca1642f47"] .formkit-alert:empty{display:none}.formkit-form[data-uid="5ca1642f47"] .formkit-alert-success{color:#0c905c;background:#d3fbeb;border-color:#10bf7a}.formkit-form[data-uid="5ca1642f47"] .formkit-alert-error{color:#ea4110;background:#fde8e2;border-color:#f2643b}.formkit-form[data-uid="5ca1642f47"] .formkit-spinner{text-align:center;width:0;height:0;margin:0 auto;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:absolute;top:0;left:0;right:0;overflow:hidden}.formkit-form[data-uid="5ca1642f47"] .formkit-spinner>div{opacity:.3;background-color:#fff;border-radius:100%;width:12px;height:12px;margin:auto;-webkit-animation:1.4s ease-in-out infinite both formkit-bouncedelay-formkit-form-data-uid-5ca1642f47-;animation:1.4s ease-in-out infinite both formkit-bouncedelay-formkit-form-data-uid-5ca1642f47-;display:inline-block}.formkit-form[data-uid="5ca1642f47"] .formkit-spinner>div:first-child{-webkit-animation-delay:-.32s;animation-delay:-.32s}.formkit-form[data-uid="5ca1642f47"] .formkit-spinner>div:nth-child(2){-webkit-animation-delay:-.16s;animation-delay:-.16s}.formkit-form[data-uid="5ca1642f47"] .formkit-submit[data-active] .formkit-spinner{opacity:1;width:50px;height:100%}.formkit-form[data-uid="5ca1642f47"] .formkit-submit[data-active] .formkit-spinner~span{opacity:0}
2@-webkit-keyframes formkit-bouncedelay-formkit-form-data-uid-5ca1642f47-{0%,80%,to{-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}@keyframes formkit-bouncedelay-formkit-form-data-uid-5ca1642f47-{0%,80%,to{-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.formkit-form[data-uid="5ca1642f47"] blockquote{border-left:5px solid #e1e1e1;margin:0 0 20px;padding:10px 20px}.formkit-form[data-uid="5ca1642f47"] .seva-custom-content{color:#fff;mix-blend-mode:difference;padding:15px;font-size:16px}.formkit-form[data-uid="5ca1642f47"] .formkit-modal.guard{width:100%;max-width:420px}.formkit-form[data-uid="5ca1642f47"]{max-width:700px}.formkit-form[data-uid="5ca1642f47"] [data-style=clean]{width:100%}.formkit-form[data-uid="5ca1642f47"] .formkit-fields{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0 auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.formkit-form[data-uid="5ca1642f47"] .formkit-field,.formkit-form[data-uid="5ca1642f47"] .formkit-submit{-webkit-flex:1 0 100%;-ms-flex:1 0 100%;flex:1 0 100%;margin:0 0 15px}.formkit-form[data-uid="5ca1642f47"] .formkit-powered-by-convertkit-container{margin:0}.formkit-form[data-uid="5ca1642f47"] .formkit-submit{position:static}.formkit-form[data-uid="5ca1642f47"][min-width~="700"] [data-style=clean],.formkit-form[data-uid="5ca1642f47"][min-width~="800"] [data-style=clean]{padding:56px 10px 10px}.formkit-form[data-uid="5ca1642f47"][min-width~="700"] .formkit-fields[data-stacked=false],.formkit-form[data-uid="5ca1642f47"][min-width~="800"] .formkit-fields[data-stacked=false]{margin-left:-5px;margin-right:-5px}.formkit-form[data-uid="5ca1642f47"][min-width~="700"] .formkit-fields[data-stacked=false] .formkit-field,.formkit-form[data-uid="5ca1642f47"][min-width~="800"] .formkit-fields[data-stacked=false] .formkit-field,.formkit-form[data-uid="5ca1642f47"][min-width~="700"] .formkit-fields[data-stacked=false] .formkit-submit,.formkit-form[data-uid="5ca1642f47"][min-width~="800"] .formkit-fields[data-stacked=false] .formkit-submit{margin:0 5px 15px}.formkit-form[data-uid="5ca1642f47"][min-width~="700"] .formkit-fields[data-stacked=false] .formkit-field,.formkit-form[data-uid="5ca1642f47"][min-width~="800"] .formkit-fields[data-stacked=false] .formkit-field{-webkit-flex:100 auto;-ms-flex:100 auto;flex:100 auto}.formkit-form[data-uid="5ca1642f47"][min-width~="700"] .formkit-fields[data-stacked=false] .formkit-submit,.formkit-form[data-uid="5ca1642f47"][min-width~="800"] .formkit-fields[data-stacked=false] .formkit-submit{-webkit-flex:auto;-ms-flex:auto;flex:auto}</style></form></div><section><h2>Available now</h2><ul class="grid grid-cols-1 md:grid-cols-2 gap-6 pl-0!"><li class="border border-solid border-color rounded-(--radius) bg-secondary list-none! overflow-hidden transition duration-200 hover:border-accent! flex flex-col relative"><a href=/courses/solid-principles-course/ class="absolute inset-0 z-10 no-underline!"></a><div class="w-full aspect-video relative"><img src=/img/og/courses-solid-principles-course.jpg alt="SOLID Principles for C# Developers" class="w-full h-full object-cover"></div><div class="p-5 flex flex-col gap-2.5 flex-1"><div class="flex justify-between items-start gap-3"><h2 class="m-0! text-[1.125rem]">SOLID Principles for C# Developers</h2><span class="shrink-0 font-mono text-[11px] py-1 px-2.5 rounded font-bold bg-accent text-white">2h</span></div><p class="m-0! text-sm text-color-light leading-6">Learn one of the core fundamentals of modern software engineering, with worked examples in C#.<div class="flex gap-3 font-mono text-[11px] text-color-light flex-wrap"><span>37 lessons</span><span>·</span><span>Fundamentals</span><span>·</span><span>C#</span></div></div></ul></section><section class=mt-14><h2>Coming soon</h2><ul class="grid grid-cols-1 md:grid-cols-2 gap-6 pl-0!"><li class="border border-solid border-color rounded-(--radius) bg-secondary list-none! overflow-hidden transition duration-200 flex flex-col"><div class="w-full aspect-video relative"><img src=/img/og/courses-localhost-to-prod-course.jpg alt="From Localhost to Production" class="w-full h-full object-cover"></div><div class="p-5 flex flex-col gap-2.5 flex-1"><div class="flex justify-between items-start gap-3"><h2 class="m-0! text-[1.125rem]">From Localhost to Production</h2><span class="shrink-0 font-mono text-[11px] py-1 px-2.5 rounded font-bold bg-tertiary text-color">~5h</span></div><p class="m-0! text-sm text-color-light leading-6">You can build it. Now learn how to ship it. A practical guide to taking your app from localhost to a production system that handles real users, real traffic, and real failures.<div class="flex gap-3 font-mono text-[11px] text-color-light flex-wrap"><span>System Design</span><span>·</span><span>DevOps</span></div></div></ul></section></main><span id=copy-icon-template class=hidden aria-hidden=true><svg aria-hidden="true"><use href="#fas-fa-copy" xlink:href="#fas-fa-copy"></use></svg></span><svg style="display: none;"><symbol data-prefix="fas" data-icon="copy" class="svg-inline--fa fa-copy" role="img" viewBox="0 0 448 512" aria-hidden="true" id="fas-fa-copy">
2<path fill="currentColor" d="M192 0c-35.3 0-64 28.7-64 64l0 256c0 35.3 28.7 64 64 64l192 0c35.3 0 64-28.7 64-64l0-200.6c0-17.4-7.1-34.1-19.7-46.2L370.6 17.8C358.7 6.4 342.8 0 326.3 0L192 0zM64 128c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l192 0c35.3 0 64-28.7 64-64l0-16-64 0 0 16-192 0 0-256 16 0 0-64-16 0z"></path></symbol></svg> <a href=#skip class=hidden>Skip back to main content</a><footer class="mt-20 text-sm font-mono"><h2 class=hidden>Footer navigation menu</h2><ul class="flex flex-wrap items-center justify-center gap-4"><li class=list-none!><a href=/about/>About</a><li class=list-none!><a href=/supporters/>â¤ï¸ Support Me</a><li class=list-none!><a href=/subscribe/>Subscribe</a><li class=list-none!><a href=/til/>TIL</a><li class=list-none!><a href=/blogroll/>Blogroll</a></ul><ul class="flex flex-wrap items-center justify-center gap-4"><li class=list-none!><a href=/privacy-policy/>Privacy Policy</a><li class=list-none!><a href=/affiliate-disclaimer/>Affiliate Disclaimer</a><li class=list-none!><a href=/deals/>Deals</a></ul><div class="flex justify-center"><ul class="flex flex-wrap items-center gap-4 mt-4 pl-0!"><li class=list-none!><a href=/feed/feed.atom.xml title=Feed class=hover:!decoration-transparent><svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" class="w-6 h-6 dark:fill-white fill-black transition-colors hover:fill-[var(--highlight-color)]" viewBox="0 0 100 100"><path d="M26.258 64.949a8.78 8.78 0 0 0-8.78 8.784 8.782 8.782 0 1 0 17.564 0 8.78 8.78 0 0 0-8.784-8.784"/><path d="M23.536 40.801c-.046 0-.09.006-.135.007v-.007h-3.464v.039a3.44 3.44 0 0 0-3.056 3.344h-.007v6.159h.041a3.43 3.43 0 0 0 3.021 3.002v.039H23.4v-.048c.045.001.09.007.135.007 12.772 0 23.173 10.321 23.311 23.061h-.033v3.464h.039a3.44 3.44 0 0 0 3.344 3.056v.007h6.158v-.041a3.43 3.43 0 0 0 3.002-3.021h.039v-3.464h-.006c-.137-19.657-16.166-35.604-35.853-35.604"/><path d="M83.119 76.403C82.98 43.664 56.308 17.07 23.536 17.07c-.046 0-.09.006-.135.007v-.007h-3.464v.039a3.44 3.44 0 0 0-3.056 3.344h-.007v6.159h.041a3.43 3.43 0 0 0 3.021 3.002v.039H23.4v-.048c.045.001.09.007.135.007 25.857 0 46.902 20.967 47.041 46.792h-.035v3.464h.039a3.44 3.44 0 0 0 3.344 3.056v.007h6.159v-.041a3.43 3.43 0 0 0 3.002-3.021h.039v-3.464h-.005z"/></svg></a><li class=list-none!><a href=https://social.alexhyett.com/@alex rel=me title=Mastodon/Fediverse><svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6 dark:fill-white fill-black transition-colors hover:fill-[#6364ff] dark:hover:fill-[#6364ff]" viewBox="0 0 24 24"><path d="M20.94 14c-.28 1.41-2.44 2.96-4.97 3.26-1.31.15-2.6.3-3.97.24-2.25-.11-4-.54-4-.54v.62c.32 2.22 2.22 2.35 4.03 2.42 1.82.05 3.44-.46 3.44-.46l.08 1.65s-1.28.68-3.55.81c-1.25.07-2.81-.03-4.62-.5-3.92-1.05-4.6-5.24-4.7-9.5l-.01-3.43c0-4.34 2.83-5.61 2.83-5.61C6.95 2.3 9.41 2 11.97 2h.06c2.56 0 5.02.3 6.47.96 0 0 2.83 1.27 2.83 5.61 0 0 .04 3.21-.39 5.43M18 8.91c0-1.08-.3-1.91-.85-2.56-.56-.63-1.3-.96-2.23-.96-1.06 0-1.87.41-2.42 1.23l-.5.88-.5-.88c-.56-.82-1.36-1.23-2.43-1.23-.92 0-1.66.33-2.23.96C6.29 7 6 7.83 6 8.91v5.26h2.1V9.06c0-1.06.45-1.62 1.36-1.62 1 0 1.5.65 1.5 1.93v2.79h2.07V9.37c0-1.28.5-1.93 1.51-1.93.9 0 1.35.56 1.35 1.62v5.11H18z"/></svg></a><li class=list-none!><a href=https://videos.alexhyett.com/ rel=me title=PeerTube><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="w-6 h-6 dark:stroke-white stroke-black transition-colors hover:stroke-[#f1680d] dark:hover:stroke-[#f1680d]" viewBox="0 0 24 24"><path d="M3 0v12l9-6zm0 12v12l9-6zm9-6v12l9-6z"/></svg></a><li class=list-none!><a href=https://youtube.com/@alexhyettdev rel=me title=YouTube class="group hover:!decoration-transparent"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="w-6 h-6 transition-colors" viewBox="0 0 24 24"><path d="M2 12.708v-1.416c0-2.895 0-4.343.905-5.274.906-.932 2.332-.972 5.183-1.053C9.438 4.927 10.818 4.9 12 4.9s2.561.027 3.912.065c2.851.081 4.277.121 5.182 1.053S22 8.398 22 11.292v1.415c0 2.896 0 4.343-.905 5.275-.906.931-2.331.972-5.183 1.052-1.35.039-2.73.066-3.912.066s-2.561-.027-3.912-.066c-2.851-.08-4.277-.12-5.183-1.052C2 17.05 2 15.602 2
212.708" class="dark:stroke-white stroke-black group-hover:stroke-[#ff0000]"/><path d="m14 12-3.5 2v-4z" class="dark:fill-white fill-black group-hover:fill-[#ff0000]"/></svg></a><li class=list-none!><a href=https://git.alexhyett.com/ rel=me title=ForgeJo class="group hover:!decoration-transparent"><svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6 transition-colors" viewBox="0 0 212 212"><g fill="none" stroke="currentColor" stroke-width="15" transform="translate(6 6)"><path d="M58 168V70a50 50 0 0 1 50-50h20" class="dark:stroke-white stroke-black group-hover:stroke-[#ff6600]"/><path d="M58 168v-30a50 50 0 0 1 50-50h20" class="dark:stroke-white stroke-black group-hover:stroke-[#d40000]"/><circle cx="142" cy="20" r="18" class="dark:stroke-white stroke-black group-hover:stroke-[#ff6600]"/><circle cx="142" cy="88" r="18" class="dark:stroke-white stroke-black group-hover:stroke-[#d40000]"/><circle cx="58" cy="180" r="18" class="dark:stroke-white stroke-black group-hover:stroke-[#d40000]"/></g></svg></a><li class=list-none!><a href=https://github.com/alexhyett rel=me title=GitHub><svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6 dark:fill-white fill-black transition-colors hover:fill-[#6e5494] dark:hover:fill-[#6e5494]" viewBox="0 0 24 24"><path d="M12 1A10.89 10.89 0 0 0 1 11.77 10.79 10.79 0 0 0 8.52 22c.55.1.75-.23.75-.52v-1.83c-3.06.65-3.71-1.44-3.71-1.44a2.86 2.86 0 0 0-1.22-1.58c-1-.66.08-.65.08-.65a2.31 2.31 0 0 1 1.68 1.11 2.37 2.37 0 0 0 3.2.89 2.33 2.33 0 0 1 .7-1.44c-2.44-.27-5-1.19-5-5.32a4.15 4.15 0 0 1 1.11-2.91 3.78 3.78 0 0 1 .11-2.84s.93-.29 3 1.1a10.7 10.7 0 0 1 5.5 0c2.1-1.39 3-1.1 3-1.1a3.78 3.78 0 0 1 .11 2.84A4.15 4.15 0 0 1 19 11.2c0 4.14-2.58 5.05-5 5.32a2.5 2.5 0 0 1 .75 2v2.95s.2.63.75.52A10.8 10.8 0 0 0 23 11.77 10.89 10.89 0 0 0 12 1"/></svg></a><li class=list-none!><a href=https://www.linkedin.com/in/alexhyett/ rel=me title=LinkedIn><svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6 dark:fill-white fill-black transition-colors hover:fill-[#0077b5] dark:hover:fill-[#0077b5]" viewBox="0 0 100 100"><path d="M80.667 14H19.315C16.381 14 14 16.325 14 19.188v61.617C14 83.672 16.381 86 19.315 86h61.352C83.603 86 86 83.672 86 80.805V19.188C86 16.325 83.603 14 80.667 14M35.354 75.354H24.67V40.995h10.684zm-5.342-39.057a6.19 6.19 0 0 1-6.19-6.194 6.189 6.189 0 1 1 12.379 0 6.194 6.194 0 0 1-6.189 6.194M75.35 75.354H64.683V58.646c0-3.986-.078-9.111-5.551-9.111-5.558 0-6.405 4.341-6.405 8.822v16.998H42.052v-34.36h10.245v4.692h.146c1.426-2.7 4.91-5.549 10.106-5.549 10.806 0 12.802 7.114 12.802 16.369v18.847z"/></svg></a><li class=list-none!><a href=mailto:[email protected] rel=me title=Email class=hover:!decoration-transparent><svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6 dark:fill-white fill-black transition-colors hover:fill-[var(--highlight-color)]" viewBox="796 720.582 200 200"><path d="m996 730.447-196.455 82.151a5.771 5.771 0 0 0-.421 10.455l49.678 25.639 6.244 54.77a8.15 8.15 0 0 0 5.98 6.969 8.3 8.3 0 0 0 2.153.287 8.23 8.23 0 0 0 6.537-3.258l26.032-34.537 61.196 31.582a5.774 5.774 0 0 0 8.327-4.103zm-142.185 107.11-36.861-19.024 131.591-55.027zm12.208 54.545-5.088-44.635 94.289-73.707zm37.171-29.059 74.251-98.507-22.628 125.152z"/></svg></a></ul></div><p class="text-center text-color-light">© 2026 Alex Hyett</footer>
2<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"54577080d0c3417da143dee9d3a82cb8","r":1,"spa":2}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 2
2
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.