.theme-badge[data-astro-cid-5jxeu2yn]{z-index:50;letter-spacing:.04em;color:#fff;background:#111;border-top-left-radius:3px;align-items:baseline;gap:.5rem;padding:.4rem .7rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.68rem;line-height:1;display:flex;position:fixed;bottom:0;right:0}.theme-badge-name[data-astro-cid-5jxeu2yn]{text-transform:uppercase;font-weight:600}.theme-badge-shell[data-astro-cid-5jxeu2yn]{opacity:.6}@media print{.theme-badge[data-astro-cid-5jxeu2yn]{display:none}}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scrollbar-gutter:stable}body{margin:0}img,video{max-width:100%;height:auto}.table-scroll{overflow-x:auto}table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%}pre{overflow-x:auto}.skip-link{z-index:100;padding:.6rem 1rem;position:absolute;left:-9999px}.skip-link:focus{top:.75rem;left:.75rem}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;font-stretch:75% 100%;src:url(/_astro/bricolage-grotesque-vietnamese-standard-normal.Br4FGdAc.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;font-stretch:75% 100%;src:url(/_astro/bricolage-grotesque-latin-ext-standard-normal.qp-RdZgh.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;font-stretch:75% 100%;src:url(/_astro/bricolage-grotesque-latin-standard-normal.C5Lc8Qmc.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff)format("woff")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff)format("woff")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-sans-latin-400-normal.CDDApCn2.woff2)format("woff2"),url(/_astro/ibm-plex-sans-latin-400-normal.CYLoc0-x.woff)format("woff")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/ibm-plex-sans-latin-600-normal.CuJfVYMP.woff2)format("woff2"),url(/_astro/ibm-plex-sans-latin-600-normal.Cu4Hd6ag.woff)format("woff")}:root{--paper:#fff8e7;--ink:#141414;--muted:#3d3a35;--faint:#6b665e;--pink:#ff2d55;--blue:#2b3ff5;--rule:#141414;--display:"Bricolage Grotesque Variable", Impact, sans-serif;--sans:"IBM Plex Sans", system-ui, sans-serif;--mono:"IBM Plex Mono", ui-monospace, Menlo, monospace;color-scheme:light}body{background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:16px;line-height:1.55}::selection{background:var(--pink);color:var(--paper)}.skip-link{background:var(--pink);color:#fff;border:3px solid var(--ink)}.shell-magazine{max-width:54rem;margin:0 auto;padding:0 1.25rem}.m-masthead{text-align:center;padding:2.5rem 0 1rem}.m-kicker{font-family:var(--mono);text-transform:uppercase;letter-spacing:.2em;background:var(--blue);color:var(--paper);margin:0 0 1rem;padding:.2rem .6rem;font-size:.7rem;display:inline-block;transform:rotate(-2deg)}.m-title{font-family:var(--display);letter-spacing:-.03em;text-transform:uppercase;color:var(--ink);text-shadow:4px 4px 0 var(--pink);font-size:clamp(3rem,1.5rem + 8vw,6rem);font-weight:800;font-stretch:62%;line-height:.85;text-decoration:none;display:block}.m-strap{font-family:var(--mono);color:var(--muted);margin:.9rem 0 0;font-size:.82rem}.m-nav{border-top:3px solid var(--rule);border-bottom:3px solid var(--rule);font-family:var(--mono);text-transform:uppercase;flex-wrap:wrap;justify-content:center;align-items:center;gap:1rem;padding:.75rem 0;font-size:.78rem;display:flex}.m-issue{color:var(--faint)}.m-nav-links{flex-wrap:wrap;gap:.5rem;margin:0 auto;display:flex}.m-nav a,.m-feed{color:var(--ink);border:2px solid #0000;padding:.1rem .45rem;text-decoration:none}.m-nav a:hover{background:var(--blue);color:var(--paper)}.m-nav a[aria-current=page]{background:var(--pink);color:var(--paper);transform:rotate(-1.5deg)}.m-main{margin-top:2.5rem}.m-foot{border-top:3px solid var(--rule);font-family:var(--mono);text-transform:uppercase;flex-wrap:wrap;justify-content:space-between;gap:1rem;margin:4rem 0 2.5rem;padding-top:1rem;font-size:.74rem;display:flex}.m-foot-links{gap:1rem;display:flex}.m-foot a{color:var(--blue)}a{color:var(--blue);text-underline-offset:.15em;text-decoration:underline 2px}a:hover{background:var(--pink);color:var(--paper);text-decoration:none}a:focus-visible{outline:3px solid var(--blue);outline-offset:2px}h1,h2,h3{font-family:var(--display);letter-spacing:-.025em;text-transform:uppercase;margin:0;font-weight:800;font-stretch:70%;line-height:.95}h1{font-size:clamp(2.4rem,1.4rem + 5vw,4rem)}h2{font-size:1.7rem}h3{font-size:1.2rem}p,ul,ol,blockquote,pre,table{margin:0 0 1.15rem}ul,ol{padding-left:1.3rem}li{margin-bottom:.3rem}li::marker{color:var(--pink)}hr{border:none;border-top:3px dashed var(--rule);margin:2rem 0}blockquote{background:var(--paper);border:3px solid var(--rule);box-shadow:6px 6px 0 var(--blue);margin:1.5rem 0;padding:1rem 1.1rem;font-size:1.05rem;font-weight:600}strong{background:linear-gradient(transparent 62%, var(--pink) 62%);font-weight:600}.muted{color:var(--muted)}.faint{color:var(--faint)}.label{font-family:var(--mono);text-transform:uppercase;letter-spacing:.12em;background:var(--ink);color:var(--paper);margin:0;padding:.15rem .5rem;font-size:.72rem;font-weight:500;display:inline-block;transform:rotate(-1deg)}.page-head{margin-bottom:2.25rem}.lede{max-width:34rem;margin:1rem 0 0;font-size:1.15rem;font-weight:600;line-height:1.4}.stats{font-family:var(--mono);text-transform:uppercase;flex-wrap:wrap;gap:.4rem 1.2rem;margin:1.4rem 0 0;font-size:.8rem;display:flex}.stats b{background:var(--pink);color:var(--paper);padding:0 .3rem;font-weight:500}.section{margin-top:2.5rem}.section-head{border-bottom:3px solid var(--rule);justify-content:space-between;align-items:center;gap:1rem;padding-bottom:.4rem;display:flex}.section-head a{font-family:var(--mono);text-transform:uppercase;color:var(--blue);font-size:.76rem;text-decoration:none}.rows{flex-direction:column;gap:.5rem;display:flex}.row{border:3px solid var(--rule);background:var(--paper);color:inherit;grid-template-columns:6rem minmax(0,1fr);gap:0 1rem;padding:.7rem .8rem;text-decoration:none;display:grid}.row:hover{box-shadow:6px 6px 0 var(--pink);transform:translate(-2px,-2px)}.row-key{font-family:var(--mono);text-transform:uppercase;color:var(--faint);font-size:.72rem}.row-key[data-status=active]{color:var(--pink);font-weight:500}.row-title{font-family:var(--display);text-transform:uppercase;flex-wrap:wrap;align-items:baseline;gap:.5rem;font-size:1.15rem;font-weight:700;font-stretch:80%;display:flex}.row-desc{color:var(--muted);grid-column:2;margin-top:.15rem;font-size:.88rem}@media (width<=34rem){.row{grid-template-columns:minmax(0,1fr)}.row-desc{grid-column:1}}.project,.note{border:3px solid var(--rule);box-shadow:5px 5px 0 var(--ink);margin-bottom:1.25rem;padding:1.2rem}.project-head{flex-wrap:wrap;align-items:baseline;gap:.7rem;display:flex}.project-name{font-family:var(--display);text-transform:uppercase;font-size:1.5rem;font-weight:800;font-stretch:72%}.status{font-family:var(--mono);text-transform:uppercase;letter-spacing:.1em;border:2px solid var(--ink);padding:0 .35rem;font-size:.66rem}.status[data-status=active]{background:var(--pink);color:var(--paper);border-color:var(--pink)}.project-desc{margin:.5rem 0 0;font-weight:600}.project-body{color:var(--muted);margin-top:.5rem;font-size:.9rem}.project-body>:last-child{margin-bottom:0}.project-meta{flex-wrap:wrap;justify-content:space-between;gap:1rem;margin-top:.9rem;display:flex}.tech{font-family:var(--mono);text-transform:uppercase;color:var(--faint);font-size:.74rem}.links{font-family:var(--mono);text-transform:uppercase;gap:1rem;font-size:.78rem;display:flex}.note h2{margin-bottom:.35rem;font-size:1.35rem}.note h2 a{color:inherit;text-decoration:none}.note-body{color:var(--muted)}.note-body>:last-child{margin-bottom:0}.post-head{border:3px solid var(--rule);box-shadow:6px 6px 0 var(--blue);margin-bottom:2rem;padding:1.1rem}.post-meta{font-family:var(--mono);text-transform:uppercase;color:var(--faint);flex-wrap:wrap;gap:.4rem 1rem;margin-top:.8rem;font-size:.74rem;display:flex}.post-body{font-size:1rem}.post-body h2{margin:2.1rem 0 .6rem}.post-body h3{margin:1.6rem 0 .4rem}.post-nav{grid-template-columns:1fr 1fr;gap:1rem;margin-top:3rem;display:grid}.post-nav-item{border:3px solid var(--rule);color:inherit;flex-direction:column;gap:.2rem;padding:.8rem;text-decoration:none;display:flex}.post-nav-item:hover{box-shadow:5px 5px 0 var(--pink);background:0 0}.post-nav-item:nth-child(2){text-align:right}.post-nav-item span{font-weight:600}code,kbd,samp{font-family:var(--mono);font-size:.87em}:not(pre)>code{background:var(--blue);color:var(--paper);padding:.05em .3em}pre{border:3px solid var(--rule);box-shadow:5px 5px 0 var(--ink);padding:.9rem 1rem;font-size:.82rem;background:var(--paper)!important}pre code{color:inherit;background:0 0;padding:0}th,td{text-align:left;border-bottom:2px solid var(--rule);padding:.45rem .7rem .45rem 0}th{font-family:var(--mono);text-transform:uppercase;letter-spacing:.1em;font-size:.7rem}.empty{font-family:var(--mono);text-transform:uppercase;padding:.9rem 0;font-size:.85rem}.notice{border:3px solid var(--pink);box-shadow:5px 5px 0 var(--pink);padding:.9rem 1rem;font-size:.9rem}.notice>:last-child{margin-bottom:0}
