body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}:root{--maxw:1200px;--fg:#1f2328;--muted:#6b7280;--link:#2563eb;--bg:linear-gradient(180deg,#f8fafc,#f1f5f9);--card:#fff;--border:#e5e7eb}*{box-sizing:border-box}#root,body,html{height:100%}body{background:linear-gradient(180deg,#f8fafc,#f1f5f9);background:var(--bg);color:#1f2328;color:var(--fg);font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;line-height:1.65;margin:0}body:before{background:radial-gradient(1200px 600px at 50% -10%,#0000000f,#0000 60%),radial-gradient(1200px 600px at 50% 110%,#0000000f,#0000 60%);content:"";inset:0;pointer-events:none;position:fixed}.container{background:#fff;background:var(--card);border:1px solid #00000008;border-radius:1rem;box-shadow:0 8px 32px #0000000f;margin:2rem auto;max-width:1200px;max-width:var(--maxw);padding:2rem 2.5rem}.site-header{border-bottom:1px solid #e5e7eb;border-bottom:1px solid var(--border);margin-bottom:2rem;padding-bottom:1rem}.site-header .brand{align-items:baseline;display:flex;gap:.75rem}.site-header .brand:before{content:"";opacity:.7}.site-header .title{color:inherit;font-size:1.25rem;font-weight:700;letter-spacing:-.01em;text-decoration:none}.site-header .tagline{color:#6b7280;color:var(--muted);font-size:.95rem}.site-header .back{color:#2563eb;color:var(--link);margin-right:.5rem;text-decoration:none}.post-list{grid-gap:1.5rem;display:grid;gap:1.5rem;list-style:none;margin:2rem 0;padding:0}.post-item h2{font-size:1.3rem;letter-spacing:-.01em;margin:0}.post-item a{color:#2563eb;color:var(--link);text-decoration:none}.post-item a:hover{text-decoration:underline}.post-item time{color:#6b7280;color:var(--muted);display:block;font-size:.95rem;margin-top:.25rem}.excerpt{color:#374151;margin:.5rem 0 0}.post{margin-top:1.5rem}.post h1{letter-spacing:-.02em;margin-bottom:.25rem}.post time{color:#6b7280;color:var(--muted);display:block;margin-bottom:1rem}.post-body pre{background-color:#f6f8fa;border:1px solid #d0d7de;border-radius:6px;margin:1em 0;overflow-x:auto;padding:16px}.post-body pre code{background:none;border:none;color:inherit;font-size:.9em;line-height:1.5;padding:0}.post-body code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace}.post-body a{color:#2563eb;color:var(--link)}.post-body h2,.post-body h3,.post-body h4,.post-body h5,.post-body h6{font-weight:600;letter-spacing:-.01em;line-height:1.3;margin-bottom:1rem;margin-top:2rem}.post-body h2{border-bottom:1px solid #e5e7eb;border-bottom:1px solid var(--border);font-size:1.8rem;padding-bottom:.5rem}.post-body h3{font-size:1.4rem}.post-body h4{font-size:1.2rem}.post-body h5{font-size:1.1rem}.post-body h6{font-size:1rem}.post-body p{margin:1rem 0}.site-footer{border-top:1px solid #e5e7eb;border-top:1px solid var(--border);color:#6b7280;color:var(--muted);font-size:.95rem;margin-top:3rem;padding-top:1rem}@media (prefers-color-scheme:dark){:root{--fg:#f1f5f9;--muted:#94a3b8;--link:#60a5fa;--bg:linear-gradient(180deg,#0f172a,#1e293b);--card:#1f2937;--border:#334155}.excerpt{color:#cbd5e1}.container{box-shadow:0 8px 32px #0006}body:before{background:radial-gradient(1200px 600px at 50% -10%,#ffffff0f,#0000 60%),radial-gradient(1200px 600px at 50% 110%,#ffffff0f,#0000 60%)}}.hero-bleed{background:radial-gradient(1200px 600px at 20% -10%,#2563eb2e,#0000 50%),radial-gradient(1200px 600px at 80% 110%,#22d3ee2e,#0000 55%),linear-gradient(180deg,#f1f5f9,#e2e8f0);border-bottom:1px solid #0000000f;padding:4.5rem 1rem 3.25rem;width:100%}.hero-inner{margin:0 auto;max-width:920px;text-align:left}.hero-kicker{background:#2563eb1a;border:1px solid #2563eb26;border-radius:999px;color:#2563eb;display:inline-block;font-size:.85rem;letter-spacing:.12em;margin-bottom:.75rem;padding:.25rem .6rem;text-transform:uppercase}.hero-bleed h1{background:linear-gradient(90deg,#111827,#1f2937 40%,#2563eb 90%);-webkit-background-clip:text;background-clip:text;color:#0000;font-size:clamp(1.8rem,4vw,2.6rem);font-weight:800;letter-spacing:-.02em;margin:0 0 .5rem}.hero-bleed p{color:#475569;font-size:1.05rem;margin:0}@media (prefers-color-scheme:dark){.hero-bleed{background:radial-gradient(1200px 600px at 20% -10%,#93c5fd2e,#0000 50%),radial-gradient(1200px 600px at 80% 110%,#22d3ee2e,#0000 55%),linear-gradient(180deg,#0f172a,#0b1220);border-bottom-color:#ffffff0f}.hero-bleed p{color:#94a3b8}}.post-layout{grid-gap:3rem;align-items:start;display:grid;gap:3rem;grid-template-columns:240px 1fr}.toc{max-height:calc(100vh - 4rem);overflow-y:auto;position:-webkit-sticky;position:sticky;top:2rem}.toc-title{color:#6b7280;color:var(--muted);font-size:.875rem;font-weight:600;letter-spacing:.05em;margin:0 0 1rem;text-transform:uppercase}.toc ul{list-style:none;padding:0}.toc ul,.toc-item{margin:0}.toc-item a{border-left:2px solid #0000;color:#6b7280;color:var(--muted);display:block;font-size:.875rem;padding:.4rem 0 .4rem .75rem;text-decoration:none;transition:all .2s}.toc-item a.active,.toc-item a:hover{border-left-color:#2563eb;border-left-color:var(--link);color:#2563eb;color:var(--link)}.toc-item a.active{font-weight:500}.toc-level-3 a{padding-left:1.5rem}.toc-level-4 a{font-size:.8125rem;padding-left:2.25rem}.post-body img{border-radius:.5rem;box-shadow:0 2px 8px #0000001a;display:block;height:auto;margin:1.5rem 0;max-width:100%}.lightbox-overlay{animation:fadeIn .2s ease-in-out;background:#000000e6;bottom:0;cursor:zoom-out;left:0;position:fixed;right:0;top:0;z-index:9999}.lightbox-content,.lightbox-overlay{align-items:center;display:flex;justify-content:center}.lightbox-content{max-height:95vh;max-width:95vw;position:relative}.lightbox-content img{border-radius:0;box-shadow:0 10px 50px #00000080;height:auto;margin:0;max-height:95vh;max-width:100%;object-fit:contain;width:auto}.lightbox-close{align-items:center;background:none;border:none;color:#fff;cursor:pointer;display:flex;font-size:3rem;height:40px;justify-content:center;line-height:1;padding:0;position:absolute;right:0;top:-40px;transition:opacity .2s;width:40px}.lightbox-close:hover{opacity:.7}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@media (max-width:1100px){.post-layout{grid-template-columns:1fr}.toc{display:none}}@media (max-width:768px){.container{border-radius:.5rem;margin:1rem;padding:1.5rem 1rem}.post-body{overflow-x:hidden}.post-body pre{border-radius:0;margin-left:-1rem;margin-right:-1rem;max-width:calc(100vw - 2rem);padding:1rem}.post h1{word-wrap:break-word;font-size:1.75rem;line-height:1.2}.post-item h2{font-size:1.1rem}.post-body li,.post-body p{word-wrap:break-word;overflow-wrap:break-word}.post-body code{word-break:break-word}.post-body img{border-radius:0;margin-left:-1rem;margin-right:-1rem;max-width:calc(100% + 2rem);width:calc(100% + 2rem)}.lightbox-close{background:#00000080;border-radius:50%;font-size:2rem;right:10px;top:10px}}@media (max-width:480px){.container{margin:.5rem;padding:1rem .75rem}.site-header .brand{flex-direction:column;gap:.25rem}.post h1{font-size:1.5rem}}pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}
/*!
  Theme: GitHub
  Description: Light theme as seen on github.com
  Author: github.com
  Maintainer: @Hirse
  Updated: 2021-05-15

  Outdated base version: https://github.com/primer/github-syntax-light
  Current colors taken from GitHub's CSS
*/.hljs{background:#fff;color:#24292e}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#005cc5}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-code,.hljs-comment,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{background-color:#f0fff4;color:#22863a}.hljs-deletion{background-color:#ffeef0;color:#b31d28}
/*# sourceMappingURL=main.19a4d88d.css.map*/