:root{color-scheme:light;--paper:#fffff8;--paper-deep:#f5f5ee;--ink:#1c1a18;--muted:#7c7065;--rule:#bdb2a4;--line:var(--rule);--line-strong:#8d8174;--accent:#398087;--accent-dark:#c88bc3;--moss:#3f5242;--surface:#f8f4ed;--focus:#1f5ea8;--fun-space:#070a18;--fun-star-strong:#fffffff2;--fun-star-medium:#ffffffb8;--fun-star-soft:#ffffff9e;--fun-star-bright:#ffffffc7;--fun-particle-warm:#f0b429;--shadow:0 22px 50px #30261c1f;--shell:min(1180px, calc(100vw - 2rem));--font-display:ui-serif, Georgia, Cambria, "Times New Roman", serif;--font-body:ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-sans:var(--font-body);--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace}*{box-sizing:border-box}html{scroll-behavior:smooth;background:var(--paper)}body{min-width:320px;color:var(--ink);font-family:var(--font-body);text-rendering:optimizelegibility;margin:0;font-size:1rem;line-height:1.6}img,svg,canvas{max-width:100%;display:block}img{height:auto}button,input,textarea,select{font:inherit}button,a{-webkit-tap-highlight-color:transparent}a{color:inherit;text-underline-offset:.18em;text-decoration-thickness:.08em}a:hover{color:var(--accent-dark)}button{color:inherit}:focus-visible{outline:3px solid var(--focus);outline-offset:4px}::selection{color:var(--ink);background:#d9b8a7}.shell{width:var(--shell);margin-inline:auto}.skip-link{z-index:1000;background:var(--ink);color:#fff;border-radius:.2rem;padding:.65rem .85rem;position:fixed;top:.75rem;left:.75rem;transform:translateY(-180%)}.skip-link:focus{transform:translateY(0)}.site-header{z-index:60;background:color-mix(in srgb, var(--paper) 92%, transparent);backdrop-filter:blur(12px);border-bottom:1px solid #594e4238;position:sticky;top:0}.site-header__inner{justify-content:space-between;align-items:center;gap:1.5rem;min-height:4.75rem;display:flex}.wordmark{font-family:var(--font-display);letter-spacing:-.025em;align-items:center;gap:.65rem;font-weight:700;text-decoration:none;display:inline-flex}.wordmark__mark{border:1px solid var(--ink);width:2.15rem;height:2.15rem;font-family:var(--font-mono);letter-spacing:.08em;border-radius:50%;place-items:center;font-size:.72rem;display:grid}.nav-links{align-items:center;gap:clamp(.8rem,2vw,1.65rem);font-size:.9rem}.nav-links a{text-decoration:none}.nav-links a:hover{text-decoration:underline}.nav-links--desktop{display:flex}.nav-links--mobile{display:none}main{min-height:70vh}.eyebrow{color:var(--muted);font-family:var(--font-mono);letter-spacing:.095em;text-transform:uppercase;margin:0 0 .7rem;font-size:.73rem;font-weight:600}.display-title,.section-title,.article-title{font-family:var(--font-display);letter-spacing:-.04em;text-wrap:balance;font-weight:500}.display-title{max-width:11ch;margin:0;font-size:clamp(3rem,7.2vw,5.45rem);line-height:.96}.section-title{margin:0;font-size:clamp(2rem,4.2vw,3.4rem);line-height:1}.section-copy{max-width:58ch;color:var(--muted)}.section-heading{grid-template-columns:minmax(0,.85fr) minmax(18rem,1fr);align-items:end;gap:clamp(1.5rem,6vw,6rem);margin-bottom:2.25rem;display:grid}.rule-label{color:var(--muted);font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;align-items:center;gap:.75rem;margin:0;font-size:.72rem;display:flex}.rule-label:before{content:"";background:currentColor;width:2.25rem;height:1px}.text-link,.chip,.button,.icon-button{min-height:2.75rem}.button,.chip,.icon-button{border:1px solid var(--ink);cursor:pointer;background:0 0}.button{justify-content:center;align-items:center;gap:.55rem;padding:.65rem 1rem;text-decoration:none;display:inline-flex}.button:hover,.button:focus-visible,.chip:hover,.chip[aria-pressed=true]{background:var(--ink);color:var(--surface)}.button--accent{border-color:var(--accent);background:var(--accent);color:#fff}.button--accent:hover{border-color:var(--accent-dark);background:var(--accent-dark);color:#fff}.chip{border-radius:999px;padding:.45rem .9rem;font-size:.82rem}.meta-row{color:var(--muted);font-family:var(--font-mono);font-variant-numeric:tabular-nums;flex-wrap:wrap;gap:.4rem .9rem;font-size:.76rem;display:flex}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.site-footer{border-top:1px solid var(--rule);margin-top:6rem}.site-footer__inner{grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:2rem;padding-block:2.5rem 3.5rem;display:grid}.site-footer__statement{max-width:15ch;font-family:var(--font-display);margin:0;font-size:clamp(1.7rem,3vw,2.6rem);line-height:1}.site-footer__meta{color:var(--muted);flex-wrap:wrap;justify-content:flex-end;gap:1rem;font-size:.82rem;display:flex}.empty-state,.error-state{border:1px dashed var(--rule);color:var(--muted);padding:1.5rem}.prose{font-family:var(--font-display);font-size:clamp(1.08rem,1.7vw,1.24rem);line-height:1.75}.prose>*{max-width:42rem;margin-inline:auto}.prose h2,.prose h3{color:var(--ink);font-family:var(--font-body);letter-spacing:-.025em;margin-top:2.8em;line-height:1.15}.prose img{border:1px solid var(--rule);background:var(--paper-deep);width:min(100%,62rem);max-width:62rem;margin-block:2.5rem;margin-inline:auto}.prose a{color:var(--accent-dark)}.prose code{font-family:var(--font-mono);font-size:.9em}.prose pre{max-width:min(100%,42rem);overflow-x:auto}.prose .table-scroll{overscroll-behavior-x:contain;max-width:min(100%,57rem);margin:1.75rem auto;overflow-x:auto}.prose table{border-collapse:collapse;width:100%;min-width:30rem;font-family:var(--font-body);font-size:.85em;line-height:1.5}.prose th,.prose td{border:1px solid var(--rule);vertical-align:top;text-align:left;padding:.7rem .9rem}.prose th{background:var(--paper-deep);color:var(--ink);font-weight:700}.prose tbody tr:nth-child(2n){background:#8d81740f}.prose .mermaid-block{width:min(100%,60rem);max-width:60rem;margin:2rem auto}.prose .mermaid-chart{border:1px solid var(--rule);background:var(--paper-deep);padding:1.2rem .8rem;overflow-x:auto}.prose .mermaid-chart svg{max-width:100%;height:auto;margin-inline:auto;display:block}.prose .mermaid-source{font-family:var(--font-body);margin-top:.5rem;font-size:.85em}.prose .mermaid-source summary{width:fit-content;color:var(--muted);cursor:pointer}.prose .mermaid-source pre{border:1px solid var(--rule);background:var(--paper-deep);padding:1rem;font-size:.85em;overflow-x:auto}@media (width<=760px){:root{--shell:min(100% - 1.25rem, 1180px)}body{background-position-y:4.2rem}.site-header__inner{min-height:4.2rem}.nav-links--desktop{display:none}.nav-links--mobile{display:flex}.section-heading,.site-footer__inner{grid-template-columns:1fr}.site-footer__meta{justify-content:flex-start}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}}.site-frame{min-height:100vh}html[data-fun-color=rainbow] .site-frame{filter:saturate(1.35);animation:.5s linear infinite fun-rainbow-shift}@keyframes fun-rainbow-shift{0%{filter:hue-rotate()saturate(1.45)}to{filter:hue-rotate(360deg)saturate(1.45)}}html[data-fun-space=outerspace]{background:var(--fun-space)}html[data-fun-space=outerspace] body{background:radial-gradient(circle at 15% 18%, var(--fun-star-strong) 0 1px, transparent 1.5px), radial-gradient(circle at 72% 31%, var(--fun-star-medium) 0 1px, transparent 1.5px), radial-gradient(circle at 43% 76%, var(--fun-star-soft) 0 1px, transparent 1.5px), radial-gradient(circle at 88% 84%, var(--fun-star-bright) 0 1px, transparent 1.5px), var(--fun-space);background-size:13rem 13rem,17rem 17rem,19rem 19rem,23rem 23rem}html[data-fun-space=outerspace] .site-frame{background:color-mix(in srgb, var(--paper) 82%, transparent)}html[data-fun-space=outerspace] .site-frame :where(h1,h2,h3,p,a,button,img,canvas,article,form,fieldset,legend,label,input,.portfolio-card){will-change:transform;animation:2.1s ease-in-out infinite alternate fun-zero-gravity}html[data-fun-space=outerspace] .site-frame :where(h1,h2,h3,p,a,button,img,canvas,article,form,fieldset,legend,label,input,.portfolio-card):nth-child(2n){animation-duration:1.7s;animation-delay:-.7s}html[data-fun-space=outerspace] .site-frame :where(h1,h2,h3,p,a,button,img,canvas,article,form,fieldset,legend,label,input,.portfolio-card):nth-child(3n){animation-duration:2.6s;animation-delay:-1.2s}@keyframes fun-zero-gravity{0%{transform:translate(-.8rem,-.65rem)rotate(-.65deg)scale(.99)}to{transform:translate(.9rem,1rem)rotate(.75deg)scale(1.01)}}html[data-fun-orientation=vertical] body{width:100vh;min-height:100vw;overflow:auto}html[data-fun-orientation=vertical] .site-frame{transform-origin:0 0;width:100vh;max-width:none;transform:rotate(90deg)translateY(-100%)}html[data-fun-mono=true]{--font-display:var(--font-mono);--font-body:var(--font-mono);--font-sans:var(--font-mono)}html[data-fun-wobble=true] .site-frame :where(a,button,.portfolio-card){transition:scale .18s ease-out,rotate .18s ease-out}html[data-fun-wobble=true] .site-frame :where(a,button,.portfolio-card):hover{rotate:-.35deg;scale:1.035}html[data-fun-css-tier=polished] .site-frame :where(.site-header,.portfolio-card,.fun-card){box-shadow:none!important;backdrop-filter:none!important}html[data-fun-css-tier=styled] .site-frame :where(.site-header,.portfolio-card,.fun-card){box-shadow:none!important;backdrop-filter:none!important;border-radius:0!important}html[data-fun-css-tier=styled] .site-frame :where(.page-section:not([data-fun-lab]),.hero){padding-block:clamp(2.5rem,5vw,4rem)!important}html[data-fun-css-tier=simple] .site-frame :where(.site-header,.portfolio-card,.fun-card){box-shadow:none!important;backdrop-filter:none!important;background-image:none!important;border-radius:0!important}html[data-fun-css-tier=simple] .site-frame :where(.hero,.section-heading,.note-section,.project-grid,.also-grid,.site-footer__inner){display:block!important}html[data-fun-css-tier=simple] .site-frame :where(.page-section:not([data-fun-lab]),.hero){padding-block:2rem!important}html[data-fun-css-tier=bare] .site-frame :where(.site-header,.portfolio-card,.fun-card){box-shadow:none!important;backdrop-filter:none!important;background:0 0!important;border-radius:0!important}html[data-fun-css-tier=bare] .site-frame :where(.hero,.section-heading,.note-section,.project-grid,.also-grid,.site-footer__inner,.hero__links,.filter-row){display:block!important}html[data-fun-css-tier=bare] .site-frame :where(.shell){width:auto!important;margin-inline:1rem!important}html[data-fun-css-tier=bare] .site-frame :where(.page-section:not([data-fun-lab]),.hero){min-height:0!important;padding-block:1.25rem!important}html[data-fun-css-tier=naked] .site-frame :where(.site-header,.site-header *,main>:not([data-fun-lab]),main>:not([data-fun-lab]) *,.site-footer,.site-footer *){all:revert!important}html[data-fun-css-tier=naked] .site-frame main>:not([data-fun-lab]){margin:1rem 0!important;display:block!important}html[data-fun-css-tier=naked] .site-frame :where(img,svg,canvas){max-width:100%!important;height:auto!important}.fun-comet-particle,.fun-confetti-particle{z-index:2000;pointer-events:none;user-select:none;position:fixed}.fun-comet-particle{color:var(--accent-dark);font-size:1rem;animation:.7s ease-out forwards fun-comet-fade;transform:translate(-50%,-50%)}@keyframes fun-comet-fade{0%{opacity:1;transform:translate(-50%,-50%)scale(1)rotate(0)}to{opacity:0;transform:translate(-50%,-160%)scale(.25)rotate(110deg)}}.fun-confetti-particle{top:-2rem;left:var(--fun-confetti-x,50vw);color:var(--accent-dark);animation:fun-confetti-fall 1.9s ease-in var(--fun-confetti-delay,0s) forwards;font-size:clamp(.8rem,2vw,1.25rem)}.fun-confetti-particle:nth-child(3n+2){color:var(--accent)}.fun-confetti-particle:nth-child(3n){color:var(--fun-particle-warm)}@keyframes fun-confetti-fall{0%{opacity:1;transform:translate(0,0)rotate(0)}to{opacity:0;transform:translate3d(var(--fun-confetti-drift,0), 110vh, 0) rotate(var(--fun-confetti-spin,540deg))}}@media (prefers-reduced-motion:reduce){html[data-fun-color=rainbow] .site-frame,html[data-fun-space=outerspace] .site-frame :where(h1,h2,h3,p,a,button,img,canvas,article,form,fieldset,legend,label,input,.portfolio-card),.fun-comet-particle,.fun-confetti-particle{animation:none!important}html[data-fun-color=rainbow] .site-frame{filter:hue-rotate(25deg)saturate(1.25)}html[data-fun-wobble=true] .site-frame :where(a,button,.portfolio-card):hover{rotate:0deg;scale:1}}
