@import"https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500&family=IBM+Plex+Sans:ital,wght@0,400;0,500;0,600;1,400&family=Instrument+Serif:ital@0;1&display=swap";.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{--paper: #F5EFE4;--paper-deep: #EBE3D2;--ink: #1F1E1A;--ink-soft: #4A4842;--ink-faint: #8A8579;--rule: #D6CFBE;--purple: #4B2E83;--purple-soft: #8B73B5;--purple-tint: #ECE5F2;--ember: #C8623A;--ember-tint: #F3DDD0;--gold: #D4A017;--gold-tint: #F6E8B8;--ocean: #1E8A8A;--ocean-tint: #D3EAEA;--bg: var(--paper);--bg-elev: var(--paper-deep);--bg-tint: var(--purple-tint);--fg: var(--ink);--fg-soft: var(--ink-soft);--fg-faint: var(--ink-faint);--border: var(--rule);--border-strong: var(--ink);--link: var(--purple);--link-hover: var(--ink);--accent: var(--ember);--highlight: var(--gold);--secondary: var(--ocean);--selection-bg: var(--gold-tint);--selection-fg: var(--ink);--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--font-sans: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;--font-serif: "Instrument Serif", "Iowan Old Style", "Apple Garamond", Georgia, serif;--fs-display: 3.5rem;--fs-h1: 2.5rem;--fs-h2: 1.75rem;--fs-h3: 1.25rem;--fs-body-lg: 1.125rem;--fs-body: 1rem;--fs-small: .875rem;--fs-caption: .75rem;--lh-tight: 1.1;--lh-snug: 1.3;--lh-body: 1.6;--lh-prose: 1.7;--tr-tight: -.02em;--tr-snug: -.01em;--tr-caption: .08em;--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-5: 24px;--sp-6: 32px;--sp-7: 48px;--sp-8: 64px;--sp-9: 96px;--gutter: var(--sp-5);--prose-max: 68ch;--r-1: 2px;--r-2: 6px;--r-3: 12px;--r-full: 999px;--shadow-1: 0 1px 0 rgba(31, 30, 26, .06);--shadow-2: 0 6px 24px -8px rgba(31, 30, 26, .18);--ease: cubic-bezier(.2, 0, 0, 1);--dur-1: .12s;--dur-2: .2s;--dur-3: .4s}@media(prefers-color-scheme:dark){:root{--paper: #1A1916;--paper-deep: #25231E;--ink: #EFE9DC;--ink-soft: #B7B1A2;--ink-faint: #7F7A6E;--rule: #3A382F;--purple-tint: #2A1E40;--ember-tint: #3A2218;--gold-tint: #3D3014;--ocean-tint: #0F2A2C}}html{background:var(--bg);color:var(--fg);font-family:var(--font-sans);font-size:var(--fs-body);line-height:var(--lh-body);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}::selection{background:var(--selection-bg);color:var(--selection-fg)}h1,h2,h3,h4{font-family:var(--font-mono);color:var(--fg);text-transform:lowercase;margin:0 0 var(--sp-4);line-height:var(--lh-tight);font-weight:700}h1{font-size:var(--fs-h1);letter-spacing:var(--tr-snug)}h2{font-size:var(--fs-h2);font-weight:600}h3{font-size:var(--fs-h3);font-weight:600}h4{font-size:var(--fs-body-lg);font-weight:600}.display{font-family:var(--font-mono);font-size:var(--fs-display);font-weight:700;letter-spacing:var(--tr-tight);line-height:var(--lh-tight);text-transform:lowercase}p{margin:0 0 var(--sp-4);max-width:var(--prose-max)}.body-lg{font-size:var(--fs-body-lg);line-height:var(--lh-prose)}.small{font-size:var(--fs-small);font-family:var(--font-mono)}.caption{font-family:var(--font-mono);font-size:var(--fs-caption);font-weight:500;letter-spacing:var(--tr-caption);text-transform:uppercase;color:var(--fg-faint)}.serif,em.flourish,.pull-quote{font-family:var(--font-serif);font-style:italic;font-weight:400}.pull-quote{font-size:var(--fs-h2);line-height:var(--lh-snug);color:var(--fg-soft);border-left:2px solid var(--purple);padding-left:var(--sp-4);margin:var(--sp-6) 0}code,kbd,pre{font-family:var(--font-mono);font-size:.92em}code{background:var(--paper-deep);border:1px solid var(--rule);border-radius:var(--r-1);padding:1px 6px}pre{background:var(--paper-deep);border:1px solid var(--rule);border-radius:var(--r-2);padding:var(--sp-4);overflow-x:auto;line-height:1.55}pre code{background:none;border:none;padding:0}a{color:var(--link);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;transition:text-decoration-thickness var(--dur-1) var(--ease)}a:hover{text-decoration-thickness:2px;color:var(--link-hover)}hr{border:none;border-top:1px solid var(--rule);margin:var(--sp-6) 0}kbd{background:var(--paper);border:1px solid var(--rule);border-bottom-width:2px;border-radius:var(--r-1);padding:1px 6px;font-size:.85em;color:var(--fg-soft)}.brand-stripe{display:block;height:3px;width:64px;background:linear-gradient(to right,var(--purple) 0 50%,var(--gold) 50% 100%);border:none;margin:var(--sp-4) 0}.brand-stripe--full{width:100%}hr.uw{border:none;height:2px;background:linear-gradient(to right,var(--purple) 0 50%,var(--gold) 50% 100%);margin:var(--sp-6) 0}.tag--uw{background:var(--purple);color:var(--gold);border-color:var(--purple);letter-spacing:.06em}.btn{font-family:var(--font-mono);font-size:var(--fs-small);font-weight:600;text-transform:lowercase;color:var(--fg);background:var(--paper);border:1px solid var(--ink);border-radius:var(--r-1);padding:8px 14px;cursor:pointer;transition:background var(--dur-1) var(--ease),transform var(--dur-1) var(--ease);text-decoration:none;display:inline-flex;align-items:center;gap:var(--sp-2)}.btn:hover{background:var(--paper-deep)}.btn:active{transform:scale(.98)}.btn--primary{background:var(--purple);color:var(--paper);border-color:var(--purple)}.btn--primary:hover{background:#3a2466}.btn--ember{background:var(--ember);color:var(--paper);border-color:var(--ember)}.btn--ghost{border-color:var(--rule);color:var(--fg-soft)}.tag{font-family:var(--font-mono);font-size:var(--fs-caption);font-weight:500;letter-spacing:.04em;text-transform:lowercase;padding:3px 10px;border-radius:var(--r-full);background:var(--purple-tint);color:var(--purple);border:1px solid transparent;display:inline-block}.tag--ember{background:var(--ember-tint);color:var(--ember)}.tag--gold{background:var(--gold-tint);color:#7a5c12}.tag--ocean{background:var(--ocean-tint);color:var(--ocean)}.tag--ghost{background:transparent;border-color:var(--rule);color:var(--fg-faint)}.card{background:var(--paper);border:1px solid var(--rule);border-radius:var(--r-2);padding:var(--sp-5);box-shadow:var(--shadow-1)}.card--deep{background:var(--paper-deep)}:focus-visible{outline:2px solid var(--purple);outline-offset:2px;border-radius:var(--r-1)}.dot{display:inline-block;width:.55em;height:.55em;background:var(--purple);border-radius:var(--r-full);vertical-align:.08em;margin-right:.35em}.dot--ember{background:var(--ember)}.dot--gold{background:var(--gold)}.dot--ocean{background:var(--ocean)}*,*:before,*:after{box-sizing:border-box}body{margin:0;--measure: 46rem;--shell-pad-x: clamp(var(--sp-5), 4vw, var(--sp-6))}.shell{width:100%;max-width:var(--measure);margin:0 auto;padding:var(--sp-7) var(--shell-pad-x)}.site-header{width:100%;max-width:var(--measure);margin:0 auto;padding:var(--sp-6) var(--shell-pad-x) 0;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--sp-3) var(--sp-4)}.site-header .wordmark{display:inline-flex;align-items:center}.site-nav{display:flex;gap:var(--sp-4);font-family:var(--font-mono);font-size:var(--fs-small)}.site-nav a{color:var(--fg-soft);text-decoration:none}.site-nav a:hover,.site-nav a[aria-current=page]{color:var(--purple)}.brand-logo{display:block;height:auto}.brand-logo text{font-family:var(--font-mono)}.brand-logo .bm-stem{stroke:var(--purple)}.brand-logo .bm-p{fill:var(--purple)}.brand-logo .bm-g{fill:var(--gold)}.brand-logo .bm-d{fill:var(--ink)}.brand-logo--sm{width:clamp(140px,42vw,164px)}.site-footer{width:100%;max-width:var(--measure);margin:0 auto;padding:var(--sp-5) var(--shell-pad-x) var(--sp-7);border-top:1px solid var(--rule);display:flex;flex-direction:column;gap:var(--sp-4);font-family:var(--font-mono);font-size:var(--fs-small);color:var(--ink-faint)}.site-footer a{color:var(--ink-faint);text-decoration:none}.site-footer a:hover{color:var(--purple)}.site-footer__row{display:flex;flex-wrap:wrap;justify-content:space-between;gap:var(--sp-3) var(--sp-5)}.site-footer__links{display:flex;gap:var(--sp-4)}.site-footer__legal{font-size:var(--fs-caption)}.hero-lead{font-family:var(--font-mono);font-weight:700;font-size:clamp(1.9rem,6vw,var(--fs-h1));letter-spacing:var(--tr-snug);line-height:var(--lh-tight);color:var(--ink);text-transform:lowercase;margin:0}.intro__bio{color:var(--ink-soft);max-width:54ch;margin-top:var(--sp-6)}.intro__bio .serif{color:var(--ink)}.intro__bio strong{color:var(--ink);font-weight:600}.intro__cred{font-family:var(--font-mono);font-weight:600;color:var(--ink);white-space:nowrap}.section{margin-top:var(--sp-8)}.section__head{margin-bottom:var(--sp-6)}.section__head .brand-stripe{margin:0 0 var(--sp-4)}.section__row{display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-4)}.section__row h2{margin:0}.section__more{font-family:var(--font-mono);font-size:var(--fs-small);color:var(--fg-soft);text-decoration:none;white-space:nowrap}.section__more:hover{color:var(--purple)}.prose{max-width:var(--prose-max)}.prose :is(h2,h3){margin-top:var(--sp-7)}.prose img{max-width:100%;height:auto;border-radius:var(--r-2)}.post-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:var(--sp-5)}.post-list .post-link{text-decoration:none;color:var(--ink);display:block}.post-list .post-link:hover .post-title{color:var(--purple)}.post-title{font-family:var(--font-mono);font-size:var(--fs-h3);font-weight:600;margin:0 0 var(--sp-1)}.post-meta{font-family:var(--font-mono);font-size:var(--fs-caption);letter-spacing:var(--tr-caption);text-transform:uppercase;color:var(--ink-faint)}.post-desc{color:var(--ink-soft);margin:var(--sp-2) 0 0}.concepts{list-style:none;padding:0;margin:var(--sp-5) 0 0;display:grid;grid-template-columns:1fr;gap:var(--sp-4)}.concepts li{font-family:var(--font-mono);font-size:var(--fs-small)}.concepts strong{color:var(--ink);font-weight:600}.concepts span{color:var(--ink-faint)}@media(min-width:560px){.concepts{grid-template-columns:1fr 1fr;gap:var(--sp-5)}}.post-back{display:inline-block;margin-bottom:var(--sp-5);font-family:var(--font-mono);font-size:var(--fs-small);color:var(--fg-soft);text-decoration:none}.post-back:hover{color:var(--purple)}.post-tags{list-style:none;padding:0;margin:var(--sp-4) 0 0;display:flex;flex-wrap:wrap;gap:var(--sp-2)}a.tag{text-decoration:none;transition:background var(--dur-1) var(--ease),color var(--dur-1) var(--ease)}a.tag:hover{background:var(--purple);color:var(--paper)}.blog-topics{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-2);margin-top:var(--sp-5)}.blog-topics .caption{margin-right:var(--sp-1)}.error-links{display:flex;flex-wrap:wrap;gap:var(--sp-4);margin-top:var(--sp-6);font-family:var(--font-mono);font-size:var(--fs-small)}.error-links a{color:var(--fg-soft);text-decoration:none}.error-links a:hover{color:var(--purple)}.post-body{margin-top:var(--sp-6)}.post-foot{max-width:var(--measure);margin:var(--sp-8) auto 0;padding-top:var(--sp-5);border-top:1px solid var(--rule);font-family:var(--font-mono);font-size:var(--fs-small)}.post-foot a{color:var(--fg-soft);text-decoration:none}.post-foot a:hover{color:var(--purple)}.prose .astro-code{color:var(--shiki-light);background-color:var(--shiki-light-bg)}.prose .astro-code span{color:var(--shiki-light)}@media(prefers-color-scheme:dark){.prose .astro-code{color:var(--shiki-dark);background-color:var(--shiki-dark-bg)}.prose .astro-code span{color:var(--shiki-dark)}}.field{display:flex;flex-direction:column;gap:var(--sp-2);margin-bottom:var(--sp-5)}.field label{font-family:var(--font-mono);font-size:var(--fs-small);color:var(--fg-soft)}.field input,.field textarea{font-family:var(--font-sans);font-size:var(--fs-body);color:var(--fg);background:var(--paper);border:1px solid var(--rule);border-radius:var(--r-1);padding:10px 12px}.field input:focus,.field textarea:focus{border-color:var(--purple);outline:none}.field textarea{min-height:8rem;resize:vertical}.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.form-note{font-size:var(--fs-small);border-radius:var(--r-2);padding:var(--sp-3) var(--sp-4);margin-bottom:var(--sp-5)}.form-note--ok{background:var(--ocean-tint);color:var(--ocean)}.form-note--err{background:var(--ember-tint);color:var(--ember)}@media(prefers-reduced-motion:no-preference){::view-transition-old(root),::view-transition-new(root){animation-duration:var(--dur-2)}}
