@layer reset,tokens,base,layout,components,utilities;@layer reset{*,*::before,*::after{box-sizing:border-box}*{margin:0}body{min-height:100dvh}img,picture,video{display:block;max-width:100%;height:auto}input,button{font:inherit}p,h1,h2,h3,h4{overflow-wrap:break-word}h1,h2,h3,h4{text-wrap:balance}p{text-wrap:pretty}}@layer tokens{:root{color-scheme:dark;--colour-background:#000;--colour-surface:#0c0c0e;--colour-surface-raised:#161619;--colour-surface-hover:#1f1f23;--colour-border:rgb(255 255 255 / 9%);--colour-border-strong:rgb(255 255 255 / 18%);--colour-text:#f5f5f7;--colour-text-secondary:#a1a1a6;--colour-text-tertiary:#8e8e93;--colour-accent:#2997ff;--colour-accent-strong:#0071e3;--colour-on-accent:#fff;--colour-glow:rgb(41 151 255 / 22%);--colour-glow-soft:rgb(41 151 255 / 0%);--colour-header:rgb(0 0 0 / 72%);--colour-code:#e6edf3;--colour-shadow:rgb(0 0 0 / 60%);--colour-key:#26262a;--colour-key-border:rgb(255 255 255 / 14%);--colour-key-shadow:rgb(0 0 0 / 80%);--font-sans:-apple-system, blinkmacsystemfont, "SF Pro Text", "Segoe UI", system-ui, sans-serif;--font-display:-apple-system, blinkmacsystemfont, "SF Pro Display", "Segoe UI", system-ui, sans-serif;--font-mono:ui-monospace, "SF Mono", menlo, consolas, monospace;--text-key:0.8em;--text-xs:0.8125rem;--text-s:0.9375rem;--text-m:1.0625rem;--text-l:1.25rem;--text-xl:clamp(1.375rem, 1.2rem + 0.8vw, 1.75rem);--text-2xl:clamp(1.75rem, 1.35rem + 2vw, 2.75rem);--text-3xl:clamp(2.25rem, 1.5rem + 3.6vw, 4.25rem);--leading-none:1;--leading-tight:1.08;--leading-snug:1.3;--leading-body:1.65;--weight-regular:400;--weight-medium:500;--weight-semibold:600;--weight-bold:700;--tracking-tight:-0.022em;--tracking-wide:0.08em;--space-3xs:0.125rem;--space-2xs:0.25rem;--space-xs:0.5rem;--space-s:0.75rem;--space-m:1rem;--space-l:1.5rem;--space-xl:2rem;--space-2xl:3rem;--space-3xl:4.5rem;--space-4xl:clamp(4.5rem, 3rem + 6vw, 8rem);--gutter:clamp(1rem, 0.6rem + 2.4vw, 2rem);--radius-s:6px;--radius-m:12px;--radius-l:20px;--radius-icon:22.5%;--radius-full:999px;--border-hairline:1px;--border-focus:2px;--width-prose:42rem;--width-page:72rem;--width-feature-text:30rem;--height-header:3.5rem;--size-icon-s:3.5rem;--size-icon-m:4.5rem;--size-icon-l:clamp(5.5rem, 4.5rem + 4vw, 8rem);--size-avatar:2.5rem;--shadow-icon:0 1.5rem 3.5rem var(--colour-shadow);--shadow-glow:0 0 6rem var(--colour-glow);--blur-header:20px;--transition:160ms ease}@media(prefers-reduced-motion:reduce){:root{--transition:0ms}}}@layer base{html{background:var(--colour-background);color:var(--colour-text);font-family:var(--font-sans);line-height:var(--leading-body);-webkit-font-smoothing:antialiased;scroll-padding-top:calc(var(--height-header) + var(--space-l))}body{display:flex;flex-direction:column;background:var(--colour-background);font-size:var(--text-m)}main{flex:1}h1,h2,h3,h4{font-family:var(--font-display);font-weight:var(--weight-semibold);letter-spacing:var(--tracking-tight);line-height:var(--leading-snug)}a{color:var(--colour-accent);text-decoration:none;text-underline-offset:.2em}a:hover{text-decoration:underline}a:focus-visible,button:focus-visible,summary:focus-visible{outline:var(--border-focus)solid var(--colour-accent);outline-offset:var(--space-2xs);border-radius:var(--radius-s)}code,pre{font-family:var(--font-mono)}hr{border:0;border-top:var(--border-hairline)solid var(--colour-border)}}@layer layout{.container{width:100%;max-width:calc(var(--width-page) + 2 * var(--gutter));margin-inline:auto;padding-inline:var(--gutter)}.container-prose{max-width:calc(var(--width-prose) + 2 * var(--gutter))}.skip-link{position:absolute;top:var(--space-xs);left:var(--space-xs);z-index:2;padding:var(--space-xs)var(--space-m);border-radius:var(--radius-s);background:var(--colour-accent-strong);color:var(--colour-on-accent);transform:translateY(-200%)}.skip-link:focus-visible{transform:none}.site-header{position:sticky;top:0;z-index:1;border-bottom:var(--border-hairline)solid var(--colour-border);background:var(--colour-header);backdrop-filter:saturate(180%)blur(var(--blur-header))}.site-header .container{display:flex;align-items:center;justify-content:space-between;gap:var(--space-m);min-height:var(--height-header)}.site-title{color:var(--colour-text);font-size:var(--text-s);font-weight:var(--weight-semibold);white-space:nowrap}.site-title:hover{text-decoration:none}.site-nav ul{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--space-2xs)var(--space-m);padding:0;list-style:none}.site-nav a{color:var(--colour-text-secondary);font-size:var(--text-s)}.site-nav a:hover,.site-nav a[aria-current=page]{color:var(--colour-text);text-decoration:none}.site-footer{margin-top:var(--space-4xl);padding-block:var(--space-2xl);border-top:var(--border-hairline)solid var(--colour-border);color:var(--colour-text-tertiary);font-size:var(--text-xs)}.site-footer .container{display:flex;flex-wrap:wrap;justify-content:space-between;gap:var(--space-m)var(--space-xl)}.site-footer ul{display:flex;flex-wrap:wrap;gap:var(--space-xs)var(--space-l);padding:0;list-style:none}.site-footer a:any-link{color:var(--colour-text-secondary)}.section{padding-block:var(--space-3xl)}.section-title{margin-bottom:var(--space-xl);font-size:var(--text-2xl)}.eyebrow{color:var(--colour-accent);font-family:var(--font-mono);font-size:var(--text-xs);font-weight:var(--weight-medium);letter-spacing:var(--tracking-wide);text-transform:uppercase}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}}@layer components{.hero{position:relative;padding-block:var(--space-3xl)var(--space-2xl);text-align:center;isolation:isolate}.hero::before{position:absolute;inset:0 0 auto;z-index:-1;height:100%;background:radial-gradient(ellipse 60% 50% at 50% 0%,var(--colour-glow),var(--colour-glow-soft));content:""}.hero-icon{width:var(--size-icon-l);margin-inline:auto;border-radius:var(--radius-icon);box-shadow:var(--shadow-icon)}.hero-title{margin-top:var(--space-l);font-size:var(--text-3xl);line-height:var(--leading-tight)}.hero-tagline{max-width:36rem;margin:var(--space-s)auto 0;color:var(--colour-text-secondary);font-size:var(--text-xl);line-height:var(--leading-snug)}.hero-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:var(--space-s)var(--space-l);margin-top:var(--space-xl)}.hero-requirement{margin-top:var(--space-s);color:var(--colour-text-tertiary);font-size:var(--text-xs)}.hero-links{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--space-xs)var(--space-l);margin-top:var(--space-l);padding:0;font-size:var(--text-s);list-style:none}.hero-media{margin-top:var(--space-2xl)}.hero-media img{width:100%;border:var(--border-hairline)solid var(--colour-border);border-radius:var(--radius-l);box-shadow:var(--shadow-glow)}.button{display:inline-flex;align-items:center;justify-content:center;min-height:2.75rem;padding:var(--space-xs)var(--space-l);border:var(--border-hairline)solid transparent;border-radius:var(--radius-full);background:var(--colour-accent-strong);color:var(--colour-on-accent);font-size:var(--text-m);font-weight:var(--weight-medium);transition:background-color var(--transition)}.button:hover{background:var(--colour-accent);text-decoration:none}.button[aria-disabled=true]{border-color:var(--colour-border-strong);background:0 0;color:var(--colour-text-secondary);cursor:default}}@layer components{.features{display:grid;gap:var(--space-3xl);padding-block:var(--space-2xl)}.feature{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-l);align-items:center}.feature-text{max-width:var(--width-feature-text)}.feature-title{margin-top:var(--space-xs);font-size:var(--text-2xl);line-height:var(--leading-tight)}.feature-summary{margin-top:var(--space-s);color:var(--colour-text-secondary);font-size:var(--text-l);line-height:var(--leading-snug)}.feature-body{margin-top:var(--space-m);color:var(--colour-text-secondary)}.feature-body>*+*{margin-top:var(--space-s)}.feature-body pre{overflow-x:auto;padding:var(--space-m);border:var(--border-hairline)solid var(--colour-border);border-radius:var(--radius-m);font-size:var(--text-s);line-height:var(--leading-snug)}.feature-summary code,.shortcut-list code,.feature-body p code,.feature-body li code{padding:var(--space-3xs)var(--space-2xs);border:var(--border-hairline)solid var(--colour-border);border-radius:var(--radius-s);background:var(--colour-surface-raised);color:var(--colour-text);font-size:.9em}.feature-body ul{padding-left:var(--space-l)}.feature-body strong{color:var(--colour-text);font-weight:var(--weight-semibold)}.feature-media img{width:100%;border:var(--border-hairline)solid var(--colour-border);border-radius:var(--radius-l)}@media(width < 56rem){.feature-media{margin-inline:calc(var(--gutter) * -1)}}@media(width >= 56rem){.feature{grid-template-columns:minmax(0,5fr)minmax(0,7fr);gap:var(--space-3xl)}.feature:nth-child(even){grid-template-columns:minmax(0,7fr)minmax(0,5fr)}.feature:nth-child(even) .feature-text{order:2}.feature.feature-text-only{grid-template-columns:minmax(0,1fr)}.feature.feature-text-only .feature-text{max-width:var(--width-prose)}}}@layer components{.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,18rem),1fr));gap:var(--space-m);padding:0;list-style:none}.card{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-l);border:var(--border-hairline)solid var(--colour-border);border-radius:var(--radius-l);background:var(--colour-surface)}.card-link{color:var(--colour-text);transition:background-color var(--transition),border-color var(--transition)}.card-link:hover{border-color:var(--colour-border-strong);background:var(--colour-surface-hover);text-decoration:none}.app-card{flex-direction:row;align-items:center;gap:var(--space-m)}.app-card img{flex:none;width:var(--size-icon-s);border-radius:var(--radius-icon)}.app-card-placeholder{flex:none;width:var(--size-icon-s);aspect-ratio:1;border:var(--border-hairline)dashed var(--colour-border-strong);border-radius:var(--radius-icon)}.app-card-name{display:block;color:var(--colour-text);font-size:var(--text-l);font-weight:var(--weight-semibold)}.app-card-tagline{display:block;color:var(--colour-text-secondary);font-size:var(--text-s)}}@layer components{.prose{color:var(--colour-text-secondary)}.prose>*+*{margin-top:var(--space-m)}.prose h1,.prose h2,.prose h3,.prose h4,.prose strong{color:var(--colour-text)}.prose h1{font-size:var(--text-2xl)}.prose h2{margin-top:var(--space-2xl);font-size:var(--text-xl)}.prose h3,.prose h4{margin-top:var(--space-xl);font-size:var(--text-l)}.prose ul,.prose ol{padding-left:var(--space-l)}.prose li+li{margin-top:var(--space-2xs)}.prose img{border-radius:var(--radius-m)}.prose blockquote{padding-left:var(--space-m);border-left:var(--border-focus)solid var(--colour-border-strong);font-style:italic}.prose :not(pre)>code{padding:var(--space-3xs)var(--space-2xs);border:var(--border-hairline)solid var(--colour-border);border-radius:var(--radius-s);background:var(--colour-surface-raised);color:var(--colour-text);font-size:.9em}.prose pre{overflow-x:auto;padding:var(--space-m);border:var(--border-hairline)solid var(--colour-border);border-radius:var(--radius-m);font-size:var(--text-s);line-height:var(--leading-snug)}.prose table{display:block;overflow-x:auto;border-collapse:collapse}.prose th,.prose td{padding:var(--space-xs)var(--space-s);border-bottom:var(--border-hairline)solid var(--colour-border);text-align:left}.prose .footnote{color:var(--colour-text-tertiary);font-size:var(--text-s)}.page-header{padding-block:var(--space-3xl)var(--space-xl)}.page-title{font-size:var(--text-3xl);line-height:var(--leading-tight)}.page-meta{margin-top:var(--space-s);color:var(--colour-text-tertiary);font-size:var(--text-s)}.page-lead{margin-top:var(--space-m);color:var(--colour-text-secondary);font-size:var(--text-l)}.back-link{display:inline-block;margin-bottom:var(--space-m);font-size:var(--text-s)}.post-nav{display:flex;flex-wrap:wrap;justify-content:space-between;gap:var(--space-m);margin-top:var(--space-3xl);padding-top:var(--space-l);border-top:var(--border-hairline)solid var(--colour-border);font-size:var(--text-s)}.post-nav a{max-width:20rem}.post-nav-next{margin-left:auto;text-align:right}.post-list{padding:0;list-style:none}.post-list-item{display:grid;gap:var(--space-3xs);padding-block:var(--space-s);border-bottom:var(--border-hairline)solid var(--colour-border)}.post-list a{color:var(--colour-text);font-weight:var(--weight-medium)}.post-list time{color:var(--colour-text-tertiary);font-family:var(--font-mono);font-size:var(--text-xs)}@media(width >= 40rem){.post-list-item{grid-template-columns:8rem minmax(0,1fr);gap:var(--space-l);align-items:baseline}}.prose a,.page-lead a,.feature-body a{text-decoration-line:underline;text-decoration-color:var(--colour-border-strong)}.prose a:hover,.page-lead a:hover,.feature-body a:hover{text-decoration-color:initial}}@layer components{.faq details{border-bottom:var(--border-hairline)solid var(--colour-border)}.faq summary{display:flex;justify-content:space-between;gap:var(--space-m);padding-block:var(--space-m);color:var(--colour-text);font-weight:var(--weight-semibold);list-style:none;cursor:pointer}.faq summary::-webkit-details-marker{display:none}.faq summary::after{flex:none;color:var(--colour-text-tertiary);font-weight:var(--weight-regular);content:"+"}.faq details[open] summary::after{content:"\2212"}.faq details>div{padding-bottom:var(--space-m);color:var(--colour-text-secondary)}.callout{padding:var(--space-m)var(--space-l);border:var(--border-hairline)solid var(--colour-border);border-left:var(--border-focus)solid var(--colour-accent);border-radius:var(--radius-m);background:var(--colour-surface)}.callout-title{color:var(--colour-text);font-size:var(--text-s);font-weight:var(--weight-semibold)}.callout-body>*+*{margin-top:var(--space-xs)}.intro{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-l)}.intro img{width:var(--size-avatar);border-radius:var(--radius-full)}}@layer components{.bg{color:#e6edf3;background-color:#0d1117}.chroma{color:#e6edf3;background-color:#0d1117;-webkit-text-size-adjust:none}.chroma .err{color:#f85149}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#6e7681}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#737679}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#6e7681}.chroma .line{display:flex}.chroma .k{color:#ff7b72}.chroma .kc{color:#79c0ff}.chroma .kd{color:#ff7b72}.chroma .kn{color:#ff7b72}.chroma .kp{color:#79c0ff}.chroma .kr{color:#ff7b72}.chroma .kt{color:#ff7b72}.chroma .nc{color:#f0883e;font-weight:700}.chroma .no{color:#79c0ff;font-weight:700}.chroma .nd{color:#d2a8ff;font-weight:700}.chroma .ni{color:#ffa657}.chroma .ne{color:#f0883e;font-weight:700}.chroma .nl{color:#79c0ff;font-weight:700}.chroma .nn{color:#ff7b72}.chroma .nx{color:#e6edf3}.chroma .py{color:#79c0ff}.chroma .nt{color:#7ee787}.chroma .nv{color:#79c0ff}.chroma .vc{color:#79c0ff}.chroma .vg{color:#79c0ff}.chroma .vi{color:#79c0ff}.chroma .vm{color:#79c0ff}.chroma .nf{color:#d2a8ff;font-weight:700}.chroma .fm{color:#d2a8ff;font-weight:700}.chroma .l{color:#a5d6ff}.chroma .ld{color:#79c0ff}.chroma .s{color:#a5d6ff}.chroma .sa{color:#79c0ff}.chroma .sb{color:#a5d6ff}.chroma .sc{color:#a5d6ff}.chroma .dl{color:#79c0ff}.chroma .sd{color:#a5d6ff}.chroma .s2{color:#a5d6ff}.chroma .se{color:#79c0ff}.chroma .sh{color:#79c0ff}.chroma .si{color:#a5d6ff}.chroma .sx{color:#a5d6ff}.chroma .sr{color:#79c0ff}.chroma .s1{color:#a5d6ff}.chroma .ss{color:#a5d6ff}.chroma .m{color:#a5d6ff}.chroma .mb{color:#a5d6ff}.chroma .mf{color:#a5d6ff}.chroma .mh{color:#a5d6ff}.chroma .mi{color:#a5d6ff}.chroma .il{color:#a5d6ff}.chroma .mo{color:#a5d6ff}.chroma .o{color:#ff7b72;font-weight:700}.chroma .ow{color:#ff7b72;font-weight:700}.chroma .or{color:#ff7b72;font-weight:700}.chroma .c{color:#8b949e;font-style:italic}.chroma .ch{color:#8b949e;font-style:italic}.chroma .cm{color:#8b949e;font-style:italic}.chroma .c1{color:#8b949e;font-style:italic}.chroma .cs{color:#8b949e;font-weight:700;font-style:italic}.chroma .cp{color:#8b949e;font-weight:700;font-style:italic}.chroma .cpf{color:#8b949e;font-weight:700;font-style:italic}.chroma .gd{color:#ffa198;background-color:#490202}.chroma .ge{font-style:italic}.chroma .gr{color:#ffa198}.chroma .gh{color:#79c0ff;font-weight:700}.chroma .gi{color:#56d364;background-color:#0f5323}.chroma .go{color:#8b949e}.chroma .gp{color:#8b949e}.chroma .gs{font-weight:700}.chroma .gu{color:#79c0ff}.chroma .gt{color:#ff7b72}.chroma .gl{text-decoration:underline}.chroma .w{color:#6e7681}}@layer components{.keys{display:inline-flex;gap:var(--space-3xs);vertical-align:baseline}kbd{display:inline-flex;align-items:center;justify-content:center;min-width:1.75em;height:1.75em;padding:0 var(--space-2xs);border:var(--border-hairline)solid var(--colour-key-border);border-radius:var(--radius-s);background:var(--colour-key);box-shadow:0 var(--border-hairline)0 var(--colour-key-shadow);color:var(--colour-text);font-family:var(--font-sans);font-size:var(--text-key);font-weight:var(--weight-medium);line-height:var(--leading-none)}.key-wide{min-width:3.5em}.sf{display:inline-block;width:auto;height:1em;vertical-align:-.125em;filter:invert(1);opacity:.85}.browsers{display:grid;grid-template-columns:repeat(auto-fill,minmax(5.5rem,1fr));gap:var(--space-m);margin-top:var(--space-l);padding:0;list-style:none}.browsers li{display:flex;flex-direction:column;align-items:center;gap:var(--space-xs);color:var(--colour-text-secondary);font-size:var(--text-s);text-align:center}.browsers img{width:var(--size-icon-s)}.shortcut-list{display:grid;margin-top:var(--space-l);border-top:var(--border-hairline)solid var(--colour-border)}.shortcut-list dt,.shortcut-list dd{padding-block:var(--space-s)}.shortcut-list dd{color:var(--colour-text-secondary)}.shortcut-group{margin-top:var(--space-xl);color:var(--colour-text);font-size:var(--text-l)}@media(width >= 40rem){.shortcut-list{grid-template-columns:11rem minmax(0,1fr)}.shortcut-list dt,.shortcut-list dd{border-bottom:var(--border-hairline)solid var(--colour-border)}}@media(width < 40rem){.shortcut-list dd{padding-top:0;border-bottom:var(--border-hairline)solid var(--colour-border)}}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,14rem),1fr));gap:var(--space-m);padding:0;list-style:none}.stat-value{display:block;color:var(--colour-text);font-family:var(--font-display);font-size:var(--text-2xl);font-weight:var(--weight-semibold);line-height:var(--leading-tight)}.stat-label{display:block;margin-top:var(--space-xs);color:var(--colour-text-secondary)}}