:root{--font-display:"Playfair Display", Georgia, serif;--font-mono:"IBM Plex Mono", "Courier New", monospace;--font-ui:system-ui, -apple-system, sans-serif;--color-bg:#0e0e0e;--color-surface:#161616;--color-border:#2a2a2a;--color-text:#f0ede6;--color-muted:#8c8680;--color-accent:#d0243e;--color-accent-dim:#d0243e26;--lab-screen:#060606;--lab-grid:#f0ede60b;--lab-axis:#f0ede617;--lab-gold:#e8c26a}*,:after,:before{box-sizing:border-box}html{scroll-behavior:smooth}body{background:var(--color-bg);color:var(--color-text);font-family:var(--font-ui);-webkit-font-smoothing:antialiased;margin:0;font-size:1rem;line-height:1.6}img{max-width:100%;height:auto;display:block}a{color:inherit;text-decoration:none}.text-display{font-family:var(--font-display);letter-spacing:-.02em;font-weight:700;line-height:1.05}.text-display--hero{font-size:calc(clamp(3rem,8vw,6rem))}.text-display--section{font-size:calc(clamp(1.5rem,4vw,2.5rem))}.text-mono{font-family:var(--font-mono);font-size:.875rem}.text-mono--sm{letter-spacing:.04em;font-size:.75rem}.text-label{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.1em;color:var(--color-muted);font-size:.7rem}.container{max-width:1200px;margin:0 auto;padding:0 1.5rem}.container--narrow{max-width:800px}.container--reading,.hero__intro,.lab__intro{max-width:640px}.site-header{border-bottom:1px solid var(--color-border);background:var(--color-bg);z-index:100;justify-content:space-between;align-items:center;padding:1rem 1.5rem;display:flex;position:sticky;top:0}.site-header__logo{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.06em;color:var(--color-text);white-space:nowrap;font-size:.9rem;font-weight:500}.site-header__logo .accent{color:var(--color-accent)}.site-nav{gap:1.5rem;margin:0;padding:0;list-style:none;display:flex}.site-nav a{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--color-muted);font-size:.8rem;transition:color .15s}.site-nav a.router-link-active,.site-nav a:hover{color:var(--color-text)}.site-footer{border-top:1px solid var(--color-border);font-family:var(--font-mono);color:var(--color-muted);justify-content:space-between;align-items:center;margin-top:6rem;padding:2rem 1.5rem;font-size:.75rem;display:flex}.hero{border-bottom:1px solid var(--color-border);padding-top:5rem;padding-bottom:4rem}.hero__name{font-family:var(--font-display);letter-spacing:-.02em;margin:0 0 1rem;font-size:calc(clamp(3rem,8vw,6rem));font-weight:700;line-height:1}.hero__role{min-height:2rem;margin:0 0 2rem;font-size:1.25rem}.hero__intro{color:var(--color-muted);font-size:1.1rem;line-height:1.7}.section{border-bottom:1px solid var(--color-border);padding-top:4rem;padding-bottom:4rem}.section__header{justify-content:space-between;align-items:baseline;margin-bottom:2rem;display:flex}.section__number{font-family:var(--font-mono);color:var(--color-accent);margin-right:.75rem;font-size:.75rem}.section__title{font-family:var(--font-display);margin:0;font-size:calc(clamp(1.5rem,4vw,2.25rem));font-weight:700;display:inline}.section__all-link{font-family:var(--font-mono);color:var(--color-muted);font-size:.8rem;transition:color .15s}.section__all-link:hover{color:var(--color-accent)}.post-card{border-bottom:1px solid var(--color-border);grid-template-columns:1fr auto;align-items:start;gap:1rem;padding:1.5rem 0;display:grid}.post-card__date{font-family:var(--font-mono);color:var(--color-muted);white-space:nowrap;font-size:.75rem}.post-card__title{font-family:var(--font-display);margin:0 0 .4rem;font-size:1.25rem;font-weight:700;line-height:1.2}.post-card__title a:hover{color:var(--color-accent)}.post-card__teaser{color:var(--color-muted);margin:0;font-size:.9375rem;line-height:1.5}.projects-grid{grid-template-columns:repeat(auto-fill,minmax(min(300px,100%),1fr));gap:1.5rem;display:grid}.work-entry{border-bottom:1px solid var(--color-border);grid-template-columns:160px 1fr;gap:2rem;padding:2.5rem 0;display:grid}.work-entry__meta{padding-top:.2rem}.work-entry__dates{font-family:var(--font-mono);color:var(--color-muted);font-size:.8rem}.work-entry__type-badge{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.06em;color:var(--color-accent);margin-top:.4rem;font-size:.7rem}.work-entry__role{font-family:var(--font-display);margin:0 0 .25rem;font-size:1.375rem;font-weight:700;line-height:1.2}.work-entry__employer{color:var(--color-muted);margin:0 0 1rem;font-size:1rem}.work-entry__employer a:hover{color:var(--color-text)}.work-entry__description{color:var(--color-muted);margin:0 0 1rem;font-size:.9375rem;line-height:1.7}.work-entry__tech-tags{flex-wrap:wrap;gap:.4rem;display:flex}.work-entry__tech-tag{font-family:var(--font-mono);border:1px solid var(--color-border);color:var(--color-muted);padding:.2em .6em;font-size:.7rem}.page-enter-active,.page-leave-active{transition:opacity .25s,transform .25s}.page-enter-from{opacity:0;transform:translateY(8px)}.page-leave-to{opacity:0;transform:translateY(-8px)}@media print{body{color:#000;background:#fff;font-size:11pt}:is(.photo-collision,.section:has(.terminal),.site-footer,.site-header){display:none}.work-entry{page-break-inside:avoid;grid-template-columns:120px 1fr;gap:1rem}.work-entry__description{color:#333}a{color:inherit;text-decoration:none}a[href]:after{content:""}}@media (width<=768px){.work-entry{grid-template-columns:1fr;gap:.5rem}.site-footer{text-align:center;flex-direction:column;gap:.5rem}.site-header{flex-wrap:wrap;gap:.5rem;padding:.75rem 1rem}.site-header__logo{white-space:nowrap}.site-nav{flex-wrap:wrap;gap:.5rem .85rem}.post-card{grid-template-columns:1fr;gap:.25rem}.post-card__date{margin-top:.5rem}.project-card{height:340px}.project-card__image{height:150px}}.post-header__meta{flex-wrap:wrap;align-items:center;gap:1.5rem;display:flex}.post-header__reading-time{font-family:var(--font-mono);color:var(--color-muted);font-size:.75rem}.post-header__series{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--color-accent);margin-bottom:.75rem;font-size:.7rem}.post-tag-link{color:var(--color-muted);font-family:var(--font-mono);font-size:.75rem;transition:color .15s}.post-tag-link:hover{color:var(--color-accent)}.post-404{font-family:var(--font-mono);border:1px solid var(--color-border);background:var(--color-surface);margin-top:4rem;padding:2rem;font-size:.875rem}.post-404__prompt{color:var(--color-muted);margin-bottom:.75rem}.post-404__status{color:var(--color-accent);margin-bottom:1.5rem}.post-404__message{color:var(--color-muted);margin-bottom:2rem}.post-404__actions{flex-wrap:wrap;gap:1.5rem;display:flex}.post-404__actions a{color:var(--color-text);transition:color .15s}.post-404__actions a:hover{color:var(--color-accent)}@media (hover:hover) and (pointer:fine){body{cursor:none}.app-cursor{pointer-events:none;z-index:9999;position:fixed;top:0;left:0}.app-cursor__dot{background:var(--color-accent);width:6px;height:6px;transition:opacity .15s}.app-cursor__dot,.app-cursor__ring{will-change:transform;border-radius:50%;position:absolute}.app-cursor__ring{border:1px solid #c41e3a73;width:28px;height:28px;transition:width .2s,height .2s,border-color .2s,background .2s}.app-cursor__ring--hover{background:#c41e3a14;border-color:#c41e3ab3;width:44px;height:44px}.app-cursor__ring--hover+.app-cursor__dot{opacity:0}.app-cursor__ring--click{opacity:.4;transition:transform .1s,opacity .1s;transform:translate3d(var(--rx),var(--ry),0) scale(1.5)!important}}.lab{padding-top:4rem;padding-bottom:5rem}.lab__kicker{margin-bottom:1rem}.lab__kicker a:hover{color:var(--color-text)}.lab__title{margin:0 0 1.5rem}.lab__intro{color:var(--color-muted);margin:0 0 2.5rem;font-size:1.05rem;line-height:1.7}.lab__body p strong,.lab__intro strong{color:var(--color-text);font-weight:500}.lab__body{border-top:1px solid var(--color-border);grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:3rem;margin-top:4rem;padding-top:2.5rem;display:grid}@media (width<=800px){.lab__body{grid-template-columns:minmax(0,1fr);gap:2rem}}.lab__body h2,.lab__body p{margin:0 0 1rem}.lab__body p{color:var(--color-muted);line-height:1.7}.lab__body a{border-bottom:1px solid var(--color-accent)}.lab__math{color:var(--color-text);background:var(--color-surface);border-left:2px solid var(--color-accent);white-space:nowrap;margin:0 0 1.25rem;padding:1rem 1.25rem;font-size:.9rem;line-height:2;overflow-x:auto}.lab-btn,.lab-led,.lab-readouts,.lab__math,.lab__source{font-family:var(--font-mono)}.lab__source{color:var(--color-muted);margin-top:3rem;font-size:.75rem}.lab__source a{border-bottom:1px solid var(--color-border)}.lab__source a:hover{border-color:var(--color-accent);color:var(--color-text)}.lab-placeholder{aspect-ratio:4/3;background:var(--color-surface);width:100%;max-height:70vh}.lab-btn,.lab-placeholder{border:1px solid var(--color-border)}.lab-btn{letter-spacing:.1em;text-transform:uppercase;color:var(--color-text);cursor:pointer;background:#141414;border-bottom-width:3px;align-items:center;gap:.45rem;padding:.45rem .8rem;font-size:.7rem;transition:border-color .12s,background .12s,transform 60ms;display:inline-flex}.lab-btn:focus-visible,.lab-btn:hover{border-color:var(--color-accent);outline:none}.lab-btn:active{border-bottom-width:1px;margin-bottom:2px;transform:translateY(2px)}.lab-btn[aria-pressed=true]{background:var(--color-accent-dim);border-color:var(--color-accent)}.lab-btn:disabled{opacity:.5;cursor:default}.lab-btn__glyph{color:var(--color-accent);font-size:.8em}.lab-btn--lit .lab-btn__glyph,.lab-btn[aria-pressed=true] .lab-btn__glyph{color:var(--lab-gold);text-shadow:0 0 6px #e8c26acc}.lab-readouts{flex-wrap:wrap;gap:.4rem 1.75rem;margin:0;padding:0;display:flex}.lab-readouts>div{align-items:baseline;gap:.6rem;display:flex}.lab-readouts dt{letter-spacing:.1em;text-transform:uppercase;color:var(--color-muted);margin:0;font-size:.62rem}.lab-readouts dd{color:var(--lab-gold);text-shadow:0 0 8px #e8c26a73;margin:0;font-size:.85rem}.lab-led,.lab-readouts dd{font-variant-numeric:tabular-nums}.lab-led{white-space:nowrap;text-align:right;min-width:5.5rem;color:var(--color-accent);text-shadow:0 0 8px #d0243eb3;border:1px solid var(--color-border);letter-spacing:.06em;background:#050505;padding:.25rem .6rem;font-size:.95rem;display:inline-block}.lab-slider{flex-wrap:wrap;align-items:center;gap:.5rem .75rem;min-width:0;display:flex}.lab-slider>.text-label{white-space:nowrap}.lab-slider input[type=range]{appearance:none;cursor:pointer;background:0 0;flex:140px;min-width:0;height:22px;margin:0}.lab-slider input[type=range]::-webkit-slider-runnable-track{background:repeating-linear-gradient(to right,var(--color-muted) 0 2px,transparent 2px 10px);height:2px}.lab-slider input[type=range]::-moz-range-track{background:repeating-linear-gradient(to right,var(--color-muted) 0 2px,transparent 2px 10px);height:2px}.lab-slider input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background:var(--color-accent);border:1px solid #ff5c73;width:12px;height:20px;margin-top:-9px;box-shadow:0 0 8px #d0243e99}.lab-slider input[type=range]::-moz-range-thumb{background:var(--color-accent);border:1px solid #ff5c73;border-radius:0;width:12px;height:20px;box-shadow:0 0 8px #d0243e99}.lab-slider input[type=range]:focus-visible{outline:1px solid var(--color-accent);outline-offset:4px}.error-page[data-v-a9b9474d]{flex-direction:column;min-height:100vh;display:flex}.error-page__main[data-v-a9b9474d]{flex:1;justify-content:center;align-items:center;padding:2rem 1.5rem;display:flex}.error-terminal[data-v-a9b9474d]{font-family:var(--font-mono,"IBM Plex Mono",monospace);color:#f0ede6;cursor:text;background:#0e0e0e;border:1px solid #2a2a2a;flex-direction:column;width:100%;max-width:700px;min-height:480px;font-size:.8rem;display:flex;position:relative;overflow:hidden}.error-terminal[data-v-a9b9474d]:after{content:"";pointer-events:none;z-index:10;background:repeating-linear-gradient(#0000,#0000 2px,#0000000e 0 4px);position:absolute;inset:0}.error-terminal__spectrum[data-v-a9b9474d]{opacity:.5;z-index:2;pointer-events:none;background:linear-gradient(#ff2020,#f60 18%,#fc0 34%,#0c4 50%,#09f 66%,#73c 82%,#f06);width:3px;position:absolute;top:0;bottom:0;left:0}.error-terminal__bar[data-v-a9b9474d]{background:#1a1a1a;border-bottom:1px solid #2a2a2a;flex-shrink:0;align-items:center;gap:.4rem;padding:.6rem 1rem;display:flex}.error-terminal__dot[data-v-a9b9474d]{border-radius:50%;width:12px;height:12px}.error-terminal__dot--red[data-v-a9b9474d]{background:#ff5f57}.error-terminal__dot--yellow[data-v-a9b9474d]{background:#febc2e}.error-terminal__dot--green[data-v-a9b9474d]{background:#28c840}.error-terminal__label[data-v-a9b9474d]{color:#6b6763;flex:1;margin-left:.5rem;font-size:.75rem}.error-terminal__code[data-v-a9b9474d]{letter-spacing:.06em;text-transform:uppercase;color:#d0243ee6;border:1px solid #d0243e66;border-radius:2px;padding:.15em .6em;font-size:.65rem;animation:2s infinite pulse-code-a9b9474d}.error-terminal__output[data-v-a9b9474d]{white-space:pre;flex:1;padding:1rem 1.25rem;line-height:1.65;overflow-y:auto}.error-terminal__line[data-v-a9b9474d]{min-height:1.2em}.error-terminal__line--ok[data-v-a9b9474d]{color:#28c840}.error-terminal__line--fail[data-v-a9b9474d]{color:#d0243e}.error-terminal__line--warn[data-v-a9b9474d]{color:#febc2e}.error-terminal__line--accent[data-v-a9b9474d]{color:#d0243e}.error-terminal__line--dim[data-v-a9b9474d]{color:#6b6763}.error-terminal__line--ascii[data-v-a9b9474d]{color:#d0243e;opacity:.85}.error-terminal__line--blank[data-v-a9b9474d]{height:.6em}.error-terminal__prompt[data-v-a9b9474d]{color:#8c8680}.error-terminal__prompt-line[data-v-a9b9474d]{display:flex}.error-terminal__current[data-v-a9b9474d],.error-terminal__history[data-v-a9b9474d]{margin-top:.25rem}.error-terminal__output-text[data-v-a9b9474d]{color:#8c8680;white-space:pre-wrap;padding-left:0}.error-terminal__input-display[data-v-a9b9474d]{display:inline}.error-terminal__cursor[data-v-a9b9474d]{vertical-align:text-bottom;background:#f0ede6;width:.55em;height:1.1em;margin-left:1px;animation:1s step-end infinite blink-error-cursor-a9b9474d;display:inline-block}.error-terminal__hidden-input[data-v-a9b9474d]{opacity:0;pointer-events:none;width:0;height:0;position:absolute}.error-terminal--glitch[data-v-a9b9474d]{animation:.6s step-end forwards error-glitch-a9b9474d}.error-terminal--glitch .error-terminal__output[data-v-a9b9474d]{text-shadow:2px 0 #ff0040b3,-2px 0 #0ff9;animation:.12s step-end 4 error-clip-a9b9474d}.error-terminal--glitch .error-terminal__spectrum[data-v-a9b9474d]{animation:.6s step-end forwards error-spectrum-flash-a9b9474d}@keyframes blink-error-cursor-a9b9474d{0%,to{background:#f0ede6}50%{background:#d0243e}}@keyframes pulse-code-a9b9474d{0%,to{opacity:1}50%{opacity:.5}}@keyframes error-glitch-a9b9474d{0%{filter:none;transform:none}8%{filter:brightness(2)hue-rotate(180deg)saturate(6);transform:translate(-3px)}16%{filter:none;transform:none}24%{filter:brightness(.5)saturate(8)hue-rotate(-90deg);transform:translate(3px)translateY(1px)}32%{filter:none;transform:none}48%{filter:invert(.15)hue-rotate(90deg);transform:translate(-2px)}56%{filter:none;transform:none}to{filter:none;transform:none}}@keyframes error-clip-a9b9474d{0%{clip-path:inset(40% 0 20%)}25%{clip-path:inset(10% 0 60%)}50%{clip-path:inset(70% 0 5%)}75%{clip-path:inset(25% 0 35%)}to{clip-path:inset(0)}}@keyframes error-spectrum-flash-a9b9474d{0%{opacity:.5;filter:none}15%{opacity:1;filter:brightness(3)saturate(2)}30%{opacity:.2}50%{opacity:1;filter:brightness(2)}70%{opacity:.3}to{opacity:.5;filter:none}}@media (width<=768px){.error-terminal[data-v-a9b9474d]{min-height:400px;font-size:.7rem}.error-page__main[data-v-a9b9474d]{align-items:flex-start;padding-top:1.5rem}}
