:root{--paper: #ebe6d9;--paper-deep: #e0dac8;--paper-edge: #cfc7ad;--rule: #b6ad8d;--rule-strong: #94896a;--ink: #15140f;--ink-soft: #2b2920;--muted: #5a5440;--muted-soft: #7a7456;--accent: #6b1818;--accent-hover: #531313;--accent-deep: #3f0d0d;--accent-tint: rgba(107, 24, 24, .018);--accent-wash: rgba(107, 24, 24, .035);--code-bg: #e0dac8;--grain-blend: multiply;--grain-opacity: .55;--grain-r: .26;--grain-g: .06;--grain-b: .06;--grain-a: .55;--fibre-opacity: .4;--fibre-color: rgba(63, 13, 13, .02);--display: "Fraunces", "Iowan Old Style", Georgia, serif;--serif: "Newsreader", "Iowan Old Style", Georgia, serif;--mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--headline-font:"IBM Plex Mono", "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--measure: 68rem;--measure-read: 42rem;--step--1: clamp(.78rem, .77rem + .05vw, .82rem);--step-0: clamp(1rem, .96rem + .18vw, 1.1rem);--step-1: clamp(1.13rem, 1.06rem + .3vw, 1.25rem);--step-2: clamp(1.4rem, 1.25rem + .6vw, 1.7rem);--headline: clamp(3.6rem, 2.2rem + 6.5vw, 7rem);--headline-mono: clamp(2.7rem, 1.9rem + 3.6vw, 4.8rem);--label-size: .82rem;--label-track: .22em}[data-theme=dark]{--paper: #1a1b26;--paper-deep: #1f2030;--paper-edge: #2a2b3a;--rule: #2e3041;--rule-strong: #414868;--ink: #c8e0a6;--ink-soft: #a9b1d6;--muted: #7982a9;--muted-soft: #565f89;--accent: #9ece6a;--accent-hover: #b5e088;--accent-deep: #c8e0a6;--accent-tint: rgba(158, 206, 106, .05);--accent-wash: rgba(158, 206, 106, .07);--code-bg: #1f2030;--grain-blend: screen;--grain-opacity: .22;--grain-r: .62;--grain-g: .65;--grain-b: .78;--grain-a: .32;--fibre-opacity: 0;--fibre-color: transparent}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink-soft);font-family:var(--serif);font-size:var(--step-0);line-height:1.65;font-feature-settings:"kern","liga","onum";-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}body:before{content:"";position:fixed;inset:0;pointer-events:none;z-index:0;opacity:var(--grain-opacity);mix-blend-mode:var(--grain-blend);background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='220'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0.5  0 0 0 0 0.5  0 0 0 0 0.5  0 0 0 0.55 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>")}body:after{content:"";position:fixed;inset:0;pointer-events:none;z-index:0;opacity:var(--fibre-opacity);background:repeating-linear-gradient(0deg,transparent 0,transparent 2px,var(--fibre-color) 2px,var(--fibre-color) 3px)}main,header,footer{position:relative;z-index:1}.container,.container-wide{max-width:var(--measure);margin:0 auto;padding:0 2rem}h1,h2,h3,h4{font-family:var(--display);font-weight:600;letter-spacing:-.015em;line-height:1.18;margin:2rem 0 .75rem;color:var(--ink)}h1{font-family:var(--display);font-variation-settings:"opsz" 144,"SOFT" 25,"wght" 600;font-size:var(--headline);font-weight:600;letter-spacing:-.03em;line-height:.92;margin:0}h2{font-size:var(--step-2)}h3{font-size:var(--step-1)}p{margin:0 0 1rem}a{color:var(--accent);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.22em;text-decoration-color:color-mix(in srgb,var(--accent) 45%,transparent);transition:color .1s ease,text-decoration-color .1s ease,background .1s ease}a:hover{color:var(--accent-deep);text-decoration-color:var(--accent-deep)}a:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:2px}::selection{background:var(--accent);color:var(--paper)}hr{border:none;border-top:1px solid var(--rule);margin:2.5rem 0}img{max-width:100%;height:auto}code{font-family:var(--mono);font-size:.88em;background:var(--code-bg);padding:.1em .35em;border-radius:2px;border:1px solid var(--rule)}pre{font-family:var(--mono);font-size:.88em;background:var(--code-bg)!important;padding:1rem 1.1rem;border:1px solid var(--rule);border-left:3px solid var(--accent);border-radius:0;overflow-x:auto;line-height:1.55;margin:1.5rem 0}pre code{background:transparent;padding:0;border:none}:root[data-theme=dark] pre.astro-code,:root[data-theme=dark] pre.astro-code span{color:var(--shiki-dark)!important}blockquote{margin:1.5rem 0;padding:.5rem 0 .5rem 1.2rem;border-left:3px solid var(--accent);color:var(--ink-soft);font-style:italic}ul,ol{padding-left:1.4rem;margin:0 0 1rem}li{margin:.25rem 0}table{border-collapse:collapse;width:100%;margin:1.5rem 0;font-size:.95rem;font-family:var(--mono)}th,td{border:1px solid var(--rule);padding:.5rem .75rem;text-align:left}th{background:var(--paper-deep);font-weight:600;color:var(--accent)}.mono{font-family:var(--mono)}.muted{color:var(--muted)}.small{font-size:var(--step--1)}@keyframes rise{0%{opacity:0;transform:translateY(.6rem)}to{opacity:1;transform:translateY(0)}}@keyframes draw{0%{transform:scaleX(0)}to{transform:scaleX(1)}}.reveal{animation:rise .55s cubic-bezier(.2,.7,.2,1) both}.reveal-1{animation-delay:.05s}.reveal-2{animation-delay:.18s}.reveal-3{animation-delay:.32s}.reveal-4{animation-delay:.46s}.reveal-5{animation-delay:.6s}@media (prefers-reduced-motion: reduce){.reveal,.reveal-1,.reveal-2,.reveal-3,.reveal-4,.reveal-5{animation:none}.site-header:after{animation:none!important;transform:scaleX(1)!important}}.site-header{padding:1.6rem 0 0;margin-bottom:4rem}.site-header-inner{display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap;padding:0 2rem 1.1rem;max-width:var(--measure);margin:0 auto}.site-header:after{content:"";display:block;height:6px;background:var(--accent);max-width:var(--measure);margin:0 auto;transform-origin:left center;animation:draw .6s cubic-bezier(.2,.7,.2,1) both;animation-delay:.05s}.site-title{font-family:var(--mono);font-size:.95rem;font-weight:700;color:var(--ink);text-decoration:none;letter-spacing:-.01em}.site-title:hover,.site-title .dot{color:var(--accent)}.site-nav-row{display:flex;align-items:center;gap:1.6rem;flex-wrap:wrap}.site-nav{display:flex;gap:1.8rem;font-family:var(--mono);font-size:.85rem}.site-nav a{color:var(--ink-soft);text-decoration:none;position:relative;padding-bottom:2px}.site-nav a:hover{color:var(--accent)}.site-nav a[aria-current=page]{color:var(--accent);font-weight:600}.site-nav a[aria-current=page]:after{content:"";position:absolute;left:0;right:0;bottom:-8px;height:2px;background:var(--accent)}.theme-toggle{display:inline-flex;align-items:center;font-family:var(--mono);font-size:.8rem;color:var(--muted);border:1px solid var(--rule);padding:.18rem .3rem;gap:.15rem;user-select:none}.theme-toggle button{background:transparent;border:none;color:var(--muted);font-family:var(--mono);font-size:.78rem;padding:.18rem .55rem;cursor:pointer;letter-spacing:.04em;transition:color .1s ease,background .1s ease}.theme-toggle button:hover{color:var(--ink)}.theme-toggle button[aria-pressed=true]{color:var(--paper);background:var(--accent);font-weight:600}.theme-toggle .sep{color:var(--rule);padding:0 .05rem;user-select:none}.hero{margin-bottom:5rem;padding-top:.5rem;display:grid;grid-template-columns:minmax(0,1fr) minmax(20rem,26rem);gap:3rem 4rem;align-items:end}.hero-main{grid-column:1}.hero-side{grid-column:2;padding-bottom:.4rem}.eyebrow,.hero .eyebrow{font-family:var(--mono);font-size:.8rem;letter-spacing:.2em;text-transform:uppercase;color:var(--accent);margin:0 0 1.6rem;font-weight:600;display:inline-flex;align-items:center;gap:.7rem}.eyebrow:before,.hero .eyebrow:before{content:"";width:1.8rem;height:2px;background:var(--accent)}.hero h1{font-family:var(--headline-font);font-variation-settings:normal;font-size:var(--headline-mono);font-weight:700;line-height:.98;letter-spacing:-.04em;margin:0 0 1.4rem;color:var(--ink);text-indent:0}.hero h1 .surname{display:block}.hero .role{font-family:var(--mono);font-size:var(--step-1);color:var(--accent);margin:0 0 1.8rem;font-weight:500;letter-spacing:-.005em}.hero .intro{max-width:36rem;color:var(--ink-soft);font-size:var(--step-1);line-height:1.55}.hero .intro em{color:var(--ink);font-style:italic;font-weight:500}.hero.compact{display:block;margin-bottom:3.5rem}.hero.compact h1{font-size:clamp(2.4rem,1.9rem + 2.5vw,3.6rem);line-height:1.02;letter-spacing:-.03em}.hero.compact .intro{max-width:38rem}@media (max-width: 900px){.hero{grid-template-columns:1fr;align-items:start}.hero-main,.hero-side{grid-column:1}}.hero-side .bio,.bio{margin:0;font-family:var(--serif);font-size:.98rem;line-height:1.6;padding:1.2rem 1.3rem;background:var(--accent-wash);border-left:3px solid var(--accent);color:var(--ink-soft)}.bio .label{font-family:var(--mono);font-size:.72rem;letter-spacing:.22em;text-transform:uppercase;color:var(--accent);font-weight:700;margin:0 0 .85rem;display:block;border-bottom:1px solid var(--accent);padding-bottom:.5rem}.bio p{margin:0 0 .85rem}.bio p:last-child{margin:0}.hero-side .availability{margin:.95rem 0 0;padding:0 0 0 1.3rem;font-family:var(--mono);font-size:.78rem;letter-spacing:.01em;color:var(--accent);line-height:1.5}.section-head{display:flex;justify-content:space-between;align-items:baseline;gap:1rem;margin:0 0 1.8rem;padding-bottom:.6rem;border-bottom:1px solid var(--accent)}.section-head h2,.section-head .label{font-family:var(--mono);font-size:var(--label-size);letter-spacing:var(--label-track);text-transform:uppercase;color:var(--accent);font-weight:700;margin:0;display:inline-flex;align-items:center;gap:.7rem}.section-head h2:before,.section-head .label:before{content:"";width:.7rem;height:.7rem;background:var(--accent);display:inline-block}.section-head .more{font-family:var(--mono);font-size:.78rem;text-decoration:none;color:var(--accent);letter-spacing:.08em;text-transform:uppercase}.section-head .more:hover{color:var(--accent-deep);text-decoration:underline}.section-head .count{font-family:var(--mono);font-size:.78rem;color:var(--accent);letter-spacing:.06em}.block{margin-bottom:5.5rem}.writing-list{list-style:none;padding:0;margin:0}.writing-list>li{padding:1.7rem 0;border-bottom:1px solid var(--rule)}.writing-list>li:last-child{border-bottom:none}.writing-list>li.featured{padding:2rem 0 2rem 1.5rem;margin:0 0 0 -1.5rem;border-left:4px solid var(--accent);background:var(--accent-tint);border-bottom:1px solid var(--rule)}.writing-list>li.featured:before{content:"★ Featured";display:block;font-family:var(--mono);font-size:.7rem;font-weight:700;letter-spacing:.22em;text-transform:uppercase;color:var(--accent);margin:0 0 .7rem}.writing-list>li.featured h3{font-size:1.95rem;font-weight:600;letter-spacing:-.02em;line-height:1.15;margin:0 0 .7rem;max-width:38rem}.writing-list>li.featured .desc{font-size:1.1rem;line-height:1.55;max-width:40rem}.writing-list .post-meta{display:flex;flex-wrap:wrap;gap:.4rem .85rem;align-items:baseline;font-family:var(--mono);font-size:.78rem;color:var(--ink-soft);margin-bottom:.55rem}.writing-list .post-meta time{color:var(--accent);font-weight:600;letter-spacing:.02em}.writing-list .post-meta .sep{color:var(--rule-strong)}.writing-list .post-meta .cat{color:var(--ink-soft);text-transform:uppercase;letter-spacing:.08em;font-size:.72rem}.writing-list h3{font-family:var(--serif);font-size:1.5rem;font-weight:500;letter-spacing:-.015em;line-height:1.2;margin:0 0 .55rem;color:var(--ink)}.writing-list h3 a{color:var(--ink);text-decoration:none;background-image:linear-gradient(var(--accent),var(--accent));background-size:0 2px;background-repeat:no-repeat;background-position:0 100%;transition:background-size .16s ease,color .1s ease;padding-bottom:.05em}.writing-list h3 a:hover{color:var(--accent);background-size:100% 2px}.writing-list .desc{color:var(--ink-soft);font-size:1.02rem;line-height:1.55;margin:0 0 .7rem;max-width:38rem}.writing-list .tags{font-family:var(--mono);font-size:.78rem;display:flex;flex-wrap:wrap;gap:.7rem}.writing-list .tags a{color:var(--accent);text-decoration:none}.writing-list .tags a:hover{color:var(--accent-deep);text-decoration:underline}.projects{list-style:none;padding:0;margin:0}.projects>li{display:grid;grid-template-columns:8.5rem 1fr;gap:.4rem 1.75rem;padding:1.75rem 0;border-bottom:1px solid var(--rule)}.projects>li:first-child{padding-top:0}.projects>li:last-child{border-bottom:none}.projects .label{font-family:var(--mono);font-size:.76rem;letter-spacing:.2em;text-transform:uppercase;color:var(--accent);font-weight:700;padding-top:.45rem;display:flex;align-items:baseline;gap:.55rem}.projects .label:before{content:"";display:inline-block;width:.55rem;height:.55rem;background:var(--accent);flex-shrink:0;align-self:center}.projects .body h3{font-family:var(--serif);font-size:1.4rem;font-weight:500;letter-spacing:-.012em;margin:0 0 .45rem;color:var(--ink);line-height:1.2}.projects .body p{color:var(--ink-soft);margin:0 0 .7rem;font-size:1.02rem;line-height:1.55}.projects .tags{font-family:var(--mono);font-size:.78rem;color:var(--accent);display:flex;flex-wrap:wrap;gap:.7rem}@media (max-width: 600px){.projects>li{grid-template-columns:1fr;gap:.35rem}.projects .label{padding-top:0}}.series-links{list-style:none;padding:0;margin:0;display:grid;gap:1.3rem}.series-links li{padding:1.4rem 1.6rem;border:1px solid var(--rule);border-left:4px solid var(--accent);background:var(--paper-deep)}.series-links a{font-family:var(--mono);font-size:1.15rem;color:var(--accent);text-decoration:none;font-weight:700}.series-links a:hover{color:var(--accent-deep);text-decoration:underline}.series-links .desc{color:var(--ink-soft);font-size:.98rem;margin:.55rem 0 0;line-height:1.55}@media (min-width: 700px){.series-links{grid-template-columns:repeat(2,minmax(0,1fr))}}.cleanroom{position:relative;border:1px solid var(--accent);border-left:4px solid var(--accent);background:var(--accent-wash);padding:1.7rem 1.8rem 1.7rem 1.9rem;margin:5.5rem 0 0;font-size:1rem;color:var(--ink-soft);line-height:1.65;max-width:var(--measure-read)}.cleanroom .label{position:absolute;top:-.7rem;left:1.3rem;background:var(--paper);padding:0 .65rem;font-family:var(--mono);font-size:.72rem;letter-spacing:.22em;text-transform:uppercase;color:var(--accent);font-weight:700}.article-header{margin-bottom:2.75rem;padding-bottom:1.6rem;border-bottom:1px solid var(--accent)}.article-header .eyebrow{font-family:var(--mono);font-size:.78rem;letter-spacing:.2em;text-transform:uppercase;color:var(--accent);margin:0 0 1.1rem;font-weight:700;display:inline-flex;align-items:center;gap:.55rem}.article-header .eyebrow:before{content:"";display:inline-block;width:.6rem;height:.6rem;background:var(--accent)}.article-header h1{font-family:var(--display);font-variation-settings:"opsz" 96,"SOFT" 25,"wght" 600;font-size:clamp(2.2rem,1.7rem + 2.2vw,3.4rem);line-height:1.05;letter-spacing:-.025em;margin:0 0 .75rem;font-weight:600}.article-header .lede{color:var(--ink-soft);font-size:var(--step-1);margin:0 0 1.1rem;font-family:var(--serif);line-height:1.55;font-style:italic}.article-header .post-meta{display:flex;flex-wrap:wrap;gap:.4rem .9rem;font-family:var(--mono);font-size:.8rem;color:var(--ink-soft)}.article-header .post-meta time{color:var(--accent);font-weight:600}.article-header .post-meta .sep{color:var(--rule-strong)}article{font-size:var(--step-0);max-width:var(--measure-read)}article h2{font-family:var(--display);margin-top:2.75rem;font-size:var(--step-2);padding-bottom:.45rem;border-bottom:1px solid var(--rule)}article h3{margin-top:2rem;font-family:var(--display)}article p,article ul,article ol{margin-bottom:1.15rem}article a{font-weight:500}.site-footer{border-top:6px solid var(--accent);margin-top:6rem;padding:1.6rem 0 3rem;color:var(--ink-soft);font-family:var(--mono);font-size:.78rem}.site-footer-inner{display:flex;flex-wrap:wrap;gap:.5rem 1.5rem;justify-content:space-between;align-items:baseline;padding:0 2rem;max-width:var(--measure);margin:0 auto}.site-footer .links{display:flex;gap:1.3rem;flex-wrap:wrap}.site-footer a{color:var(--accent);text-decoration:none}.site-footer a:hover{color:var(--accent-deep);text-decoration:underline}.site-footer .meta{color:var(--muted)}.site-footer .meta .sep{color:var(--rule-strong);margin:0 .5rem}.skip-link{position:absolute;left:-10000px;top:auto}.skip-link:focus{position:fixed;left:.5rem;top:.5rem;background:var(--ink);color:var(--paper);padding:.5rem .75rem;z-index:100}@media (max-width: 600px){.site-nav{gap:1.1rem}.cleanroom .label{left:.9rem}}
