.astro-route-announcer{position:absolute;left:0;top:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap;width:1px;height:1px}:root{--primary-a0: #ea5a0c;--primary-a10: #ce510f;--primary-a20: #b24711;--primary-a30: #973e11;--primary-a40: #7d3511;--primary-a50: #632c10;--bg-surface-a0: #ffefe6;--bg-surface-a10: #f0e2da;--bg-surface-a20: #e2d5ce;--bg-surface-a30: #d3c9c3;--bg-surface-a40: #c5bcb7;--bg-surface-a50: #b7b0ac;--bg: var(--bg-surface-a0);--fg: var(--primary-a50);--dim: color-mix(in srgb, var(--fg) 68%, var(--bg));--rule: var(--bg-surface-a30);--link: color-mix(in srgb, var(--primary-a20) 78%, var(--primary-a50) 22%);--glow: color-mix(in srgb, var(--primary-a10) 8%, transparent);--dot: color-mix(in srgb, var(--bg-surface-a50) 18%, transparent);--hover: color-mix(in srgb, var(--primary-a10) 7%, var(--bg))}@media(prefers-color-scheme:dark){:root{--primary-a0: #ea5a0c;--primary-a10: #f06e2e;--primary-a20: #f68148;--primary-a30: #fb9462;--primary-a40: #ffa67b;--primary-a50: #ffb894;--bg-surface-a0: #1f130a;--bg-surface-a10: #3a2e28;--bg-surface-a20: #50453f;--bg-surface-a30: #675c57;--bg-surface-a40: #7e7571;--bg-surface-a50: #978f8b;--fg-light-a0: #ffffff;--bg: var(--bg-surface-a0);--fg: var(--fg-light-a0);--dim: color-mix(in srgb, var(--fg) 76%, var(--bg));--rule: var(--bg-surface-a20);--link: color-mix(in srgb, var(--primary-a10) 80%, transparent);--glow: color-mix(in srgb, var(--primary-a0) 8%, transparent);--dot: color-mix(in srgb, var(--bg-surface-a30) 8%, transparent);--hover: color-mix(in srgb, var(--primary-a10) 8%, transparent)}}*,*:before,*:after{box-sizing:border-box;margin:0}body{font:1.25rem/1.7 Georgia,Times New Roman,serif;color:var(--fg);max-width:55rem;margin:0 auto;padding:0 1.25rem;background:radial-gradient(circle,var(--dot) 1px,transparent 1px) 0 0 / 24px 24px,var(--bg)}a{color:var(--link);text-decoration-thickness:1px;text-underline-offset:.15em;transition:color .15s}a:hover{text-decoration:none}body.center{min-height:100dvh;display:flex;flex-direction:column;max-width:38rem;background:radial-gradient(ellipse 35% 45% at 75% 85%,var(--glow),transparent) no-repeat fixed,radial-gradient(circle,var(--dot) 1.5px,transparent 1.5px) 0 0 / 24px 24px,var(--bg)}body.center main{margin:auto 0;padding:2.5rem 0}main{padding:2.5rem 0 1rem}@keyframes appear{0%{opacity:0;transform:translateY(.75rem)}to{opacity:1;transform:none}}main>*{animation:appear .4s ease-out both;animation-delay:.1s}main>:nth-child(2){animation-delay:.17s}main>:nth-child(3){animation-delay:.24s}main>:nth-child(4){animation-delay:.31s}main>:nth-child(5){animation-delay:.38s}main>:nth-child(6){animation-delay:.45s}main>:nth-child(7){animation-delay:.52s}main>:nth-child(8){animation-delay:.59s}main>:nth-child(n+9){animation-delay:.63s}@media(prefers-reduced-motion:reduce){main>*{animation:none}}h1{font:700 clamp(1.75rem,5vw,2.25rem) / 1.15 Georgia,"Times New Roman",serif;letter-spacing:-.015em}body:not(.center) h1{position:sticky;top:0;background:var(--bg);padding:.75rem 0;z-index:1}.post-title{color:color-mix(in srgb,var(--primary-a30) 75%,var(--fg) 25%)}body.article-page main{padding-bottom:0}body.article-page h1.post-title{position:static;top:auto;background:none;padding:0;z-index:auto}.post-shell{max-width:45rem;margin:0 auto;padding-bottom:min(18vh,8rem)}.post-header{margin-bottom:.75rem}.post-header .back{margin-bottom:1rem}.post-date{margin-top:.6rem}.article-footer{margin-top:3rem}.article-nav-list{list-style:none;display:flex;flex-wrap:wrap;gap:.5rem 1rem;padding:0}.article-nav a{color:var(--dim);text-decoration:none;font-size:1rem;transition:color .2s}.article-nav a:hover{color:var(--link)}h2{font:600 1.75rem/1.3 Georgia,Times New Roman,serif}h3{font:600 1.4rem/1.35 Georgia,Times New Roman,serif}h4{font-size:1.25rem;font-weight:600}.sub{color:var(--dim);margin:1rem 0 0}.back{display:inline-block;text-decoration:none;color:var(--dim);font-size:1rem;margin-bottom:1.5rem;transition:color .15s}.back:hover{color:var(--fg)}hr{border:0;border-top:1px solid var(--rule);margin:2rem 0}.muted{color:var(--fg)}.hub{list-style:none;padding:1.5rem 0 0;display:flex;flex-direction:column;gap:.15rem;align-items:center}.hub li{width:90%}.hub a{text-decoration:none;color:var(--fg);position:relative;display:block;width:100%;padding:.3rem .5rem;margin:0 -.5rem;border-radius:4px;transition:color .2s}.hub a:before{content:">";position:absolute;right:.5rem;top:50%;font-weight:1000;opacity:0;transform:translate(-.25rem,-50%);transition:opacity .2s,transform .2s}.hub a[target=_blank]:before{content:"↗";font-weight:400}.hub a:after{content:"";position:absolute;left:.5rem;bottom:.2rem;width:calc(100% - 1rem);height:1.5px;background:var(--link);transform:scaleX(0);transform-origin:left;transition:transform .25s cubic-bezier(.4,0,.2,1)}.hub a:hover{color:var(--link)}.hub a:hover:before{opacity:1;transform:translateY(-50%)}.hub a:hover:after{transform:scaleX(1)}.label{font-size:1rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--dim);margin-bottom:1.25rem}.proj{display:block;text-decoration:none;padding:.75rem;border-radius:4px;transition:background .2s;margin-bottom:.5rem}.proj:last-child{margin-bottom:0}.proj:hover{background:var(--hover)}.proj strong{display:inline-block;position:relative;transition:color .2s}.proj strong:after{content:"";position:absolute;left:0;bottom:0;width:100%;height:1.5px;background:var(--link);transform:scaleX(0);transform-origin:left;transition:transform .25s cubic-bezier(.4,0,.2,1)}.proj:hover strong{color:var(--link)}.proj:hover strong:after{transform:scaleX(1)}.proj span{display:block;color:var(--dim);font-size:1rem;margin-top:.25rem}.posts{list-style:none;padding:0}.posts li+li{margin-top:.5rem}.posts a{text-decoration:none;display:flex;justify-content:space-between;align-items:baseline;gap:1rem;padding:.4rem .5rem;margin:0 -.5rem;border-radius:4px;transition:background .2s,transform .2s}.posts a:hover{background:var(--hover);transform:translate(2px)}.posts a:hover span:first-child{color:var(--link)}.posts time{color:var(--dim);font-size:1rem;white-space:nowrap;font-variant-numeric:tabular-nums}.prose>*+*{margin-top:1rem}.prose h2,.prose h3,.prose h4{margin-top:2rem;padding:.2rem .75rem .25rem .9rem;border-left:3px solid currentColor;background:linear-gradient(90deg,color-mix(in srgb,var(--bg-surface-a30) 52%,transparent),transparent 95%);line-height:1.25}.prose h2{color:var(--primary-a40)}.prose h3,.prose h4{color:var(--primary-a30);font-weight:700}.prose strong,.prose b{color:color-mix(in srgb,var(--primary-a40) 72%,var(--fg));font-weight:700}.prose em{color:color-mix(in srgb,var(--primary-a40) 72%,var(--fg));font-style:italic}.prose ul,.prose ol{padding-left:1.25rem}.prose code{font-size:.9em;background:var(--rule);padding:.1em .3em;border-radius:2px}@media(prefers-color-scheme:dark){.post-title{color:color-mix(in srgb,var(--primary-a30) 75%,var(--fg) 25%)}.article-nav a{color:color-mix(in srgb,var(--fg) 72%,var(--bg))}.article-nav a:hover{color:var(--primary-a20)}.prose h2,.prose h3,.prose h4{background:linear-gradient(90deg,color-mix(in srgb,var(--primary-a50) 12%,transparent),transparent 88%)}.prose h2{color:var(--primary-a40)}.prose h3,.prose h4{color:var(--primary-a20)}.prose strong,.prose b{color:color-mix(in srgb,var(--primary-a50) 68%,var(--fg) 32%)}.prose em{color:color-mix(in srgb,var(--primary-a30) 68%,var(--fg) 32%)}}.prose a{word-break:break-word}.prose table{width:100%;border-collapse:collapse;font-size:.95rem;line-height:1.5;overflow-x:auto;display:block}.prose th,.prose td{padding:.4rem .75rem;text-align:left;border-bottom:1px solid var(--rule)}.prose th{font-size:.8rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--dim)}.prose td{color:var(--fg)}.contact-block{position:relative;margin-top:2.5rem}.contact-heading{display:flex;flex-wrap:wrap;align-items:baseline;gap:.55rem .9rem;margin-bottom:1.2rem}.contact-heading .label{margin-bottom:0}.contact-joke{font-size:.98rem;letter-spacing:.01em;color:var(--dim);opacity:.8}.contact-form{position:relative;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.1rem}.contact-fallback{color:var(--dim)}.contact-fallback-row{position:relative;margin-top:1rem;color:color-mix(in srgb,var(--dim) 88%,var(--bg))}.contact-address{display:inline-flex;flex-wrap:wrap;gap:.15rem;margin-left:.35rem;color:var(--fg);font:600 .92rem/1.3 SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace}.contact-domain{display:inline-flex;gap:.15rem}.contact-website{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.field{display:grid;gap:.2rem}.field-half{grid-column:span 1}.field-message,.contact-form button{grid-column:1 / -1}.field span{font:700 .8rem/1.2 SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;letter-spacing:.08em;text-transform:uppercase;color:var(--dim)}.field input,.field textarea,.contact-form button{width:100%;font:inherit}.field input,.field textarea{border:none;border-bottom:1px solid var(--rule);border-radius:2px 2px 0 0;padding:.5rem .55rem;background:color-mix(in srgb,var(--bg-surface-a20) 40%,transparent);color:var(--fg);transition:border-color .2s,background .2s}.field input::placeholder,.field textarea::placeholder{color:var(--dim);opacity:.45}.field textarea{min-height:7rem;resize:vertical}.field input:focus,.field textarea:focus{outline:none;border-bottom-color:var(--link);background:color-mix(in srgb,var(--bg-surface-a20) 60%,transparent)}.contact-form button{justify-self:end;width:auto;border:1px solid var(--link);border-radius:0;padding:.4rem .7rem;line-height:1;background:transparent;color:var(--link);font:700 .85rem/1.2 SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;letter-spacing:.08em;text-transform:uppercase;cursor:pointer;transition:color .15s,border-color .15s,background .15s}.contact-form button:hover{color:var(--fg);border-color:var(--fg)}.contact-form button:focus-visible{outline:2px solid color-mix(in srgb,var(--link) 50%,white);outline-offset:3px}@media(min-width:48rem){.contact-block{margin-top:2.8rem}}@media(max-width:40rem){.contact-form{grid-template-columns:1fr}.field-half,.field-message,.contact-form button{grid-column:auto}.contact-heading{gap:.3rem .75rem}.contact-joke{font-size:.92rem}}@media(prefers-color-scheme:dark){.contact-joke{color:color-mix(in srgb,var(--dim) 92%,var(--bg));opacity:.72}}.empty{color:var(--dim);font-style:italic}
