:root{--bg: #f4efe6;--bg-raised: #fffaf3;--bg-inset: #ebe4d6;--ink: #17211c;--muted: #4e5c54;--faint: #6a786f;--copper: #8a4c18;--copper-deep: #6d3b12;--line: rgba(138, 76, 24, .32);--led: #157a45;--led-dim: #b7e0cb;--danger: #a15d12;--shadow: 0 16px 40px rgba(70, 48, 20, .08);--header-bg: rgba(244, 239, 230, .92);--card: rgba(255, 250, 243, .94);--quote: #fffaf3;--stats: rgba(255, 250, 243, .82);--btn-ink: #fff8ee;--btn-hover: #a15d24;--body-top: #fff8ee;--glow: rgba(224, 161, 92, .28);--grid: rgba(138, 76, 24, .2);--link-line: rgba(138, 76, 24, .16);--sans: "IBM Plex Sans", "Segoe UI", sans-serif;--display: "Bricolage Grotesque", "IBM Plex Sans", sans-serif;--mono: "IBM Plex Mono", ui-monospace, monospace;--max: 1120px;--header: 4.6rem}html[data-theme=night]{color-scheme:dark;--bg: #101614;--bg-raised: #17211c;--bg-inset: #0c1210;--ink: #f3efe6;--muted: #b7c0b6;--faint: #8d998c;--copper: #e0a15c;--copper-deep: #a56a32;--line: rgba(224, 161, 92, .38);--led: #3dce8e;--led-dim: #1e6b48;--danger: #e7b15c;--shadow: 0 18px 50px rgba(0, 0, 0, .28);--header-bg: rgba(16, 22, 20, .88);--card: rgba(23, 33, 28, .88);--quote: rgba(23, 33, 28, .75);--stats: rgba(12, 18, 16, .72);--btn-ink: #1a120b;--btn-hover: #f0c08a;--body-top: #141c18;--glow: rgba(224, 161, 92, .08);--grid: rgba(224, 161, 92, .16);--link-line: rgba(224, 161, 92, .18)}*,*:before,*:after{box-sizing:border-box}html{scroll-behavior:smooth;color-scheme:light}body{margin:0;min-height:100vh;color:var(--ink);font-family:var(--sans);font-size:1.05rem;line-height:1.65;background:radial-gradient(ellipse 80% 50% at 10% -10%,var(--glow),transparent 50%),linear-gradient(180deg,var(--body-top) 0%,var(--bg) 28rem)}body:before{content:"";pointer-events:none;position:fixed;inset:0;background-image:radial-gradient(var(--grid) .7px,transparent .8px);background-size:22px 22px;mask-image:linear-gradient(180deg,#000 0,transparent 42rem);opacity:.45}img{max-width:100%}a{color:var(--copper);text-underline-offset:.18em}a:hover{color:var(--ink)}:focus-visible{outline:2px solid var(--copper);outline-offset:3px}.skip{position:absolute;left:1rem;top:-4rem;z-index:20;background:var(--ink);color:var(--bg);padding:.5rem .8rem}.skip:focus{top:.6rem}.wrap{width:min(var(--max),calc(100% - 2rem));margin-inline:auto}.site-header{position:sticky;top:0;z-index:10;backdrop-filter:blur(14px);background:var(--header-bg);border-bottom:1px solid var(--line)}.titlebar{display:flex;justify-content:space-between;align-items:baseline;gap:1rem;width:min(var(--max),calc(100% - 2rem));margin:0 auto;padding:.35rem 0 0;color:var(--muted);font-family:var(--mono);font-size:.72rem;letter-spacing:.08em;text-transform:uppercase}.titlebar>span:first-child{white-space:nowrap}.titlebar-links{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.35rem .9rem}.titlebar-links a{color:var(--muted);text-decoration:none}.titlebar-links a:hover{color:var(--copper)}.titlebar-live{color:var(--led)}.bar{display:flex;align-items:center;justify-content:space-between;gap:1rem;width:min(var(--max),calc(100% - 2rem));margin:0 auto;min-height:3.4rem}.brand{display:flex;align-items:center;gap:.7rem;color:var(--ink);text-decoration:none;font-family:var(--display);font-weight:700;letter-spacing:-.03em}.brand small{display:block;color:var(--muted);font-family:var(--mono);font-size:.68rem;font-weight:400;letter-spacing:.06em;text-transform:uppercase}.chip-mark{width:2.4rem;height:2.4rem;flex:none;overflow:visible}.chip-pins{fill:none;stroke:var(--copper);stroke-width:2;stroke-linecap:round}.chip-body{fill:var(--bg-raised);stroke:var(--ink);stroke-width:1.8}.chip-dot{fill:var(--led)}.chip-label{fill:var(--ink);font-family:var(--mono);font-size:10.5px;font-weight:500;letter-spacing:.02em}.brand:hover .chip-body{stroke:var(--copper)}.nav-links{display:flex;align-items:center;gap:1.15rem}.nav-links a{color:var(--ink);text-decoration:none;font-size:.95rem}.nav-links a[aria-current=page]{color:var(--copper);box-shadow:inset 0 -2px 0 var(--copper)}.nav-cta{border:1px solid var(--copper);padding:.35rem .7rem;border-radius:999px}.bar-end{display:flex;align-items:center;gap:1rem}.theme-toggle{width:2.35rem;height:2.35rem;display:grid;place-items:center;flex:none;padding:0;border:1px solid var(--line);border-radius:999px;background:transparent;color:var(--copper);cursor:pointer}.theme-toggle:hover{border-color:var(--copper);color:var(--ink)}.theme-icon{width:1.15rem;height:1.15rem;grid-area:1 / 1}.theme-icon-moon,html[data-theme=night] .theme-icon-sun{display:none}html[data-theme=night] .theme-icon-moon{display:block}.mobile-nav{display:none}.mobile-nav summary{list-style:none;cursor:pointer;border:1px solid var(--line);padding:.35rem .7rem;border-radius:999px;font-family:var(--mono);font-size:.8rem;letter-spacing:.06em;text-transform:uppercase}.mobile-nav summary::-webkit-details-marker{display:none}.mobile-links{position:absolute;left:0;right:0;top:100%;z-index:20;padding:.4rem 1rem .9rem;background:var(--bg-raised);border-bottom:1px solid var(--line);display:grid;gap:.15rem}.mobile-links a{color:var(--ink);text-decoration:none;padding:.7rem .2rem;border-bottom:1px solid var(--link-line)}main{padding-bottom:4rem}.hero{display:grid;grid-template-columns:1.3fr .8fr;gap:2.5rem;align-items:center;padding:3.2rem 0 2rem}h1,h2,h3{font-family:var(--display);letter-spacing:-.035em;line-height:1.08;font-weight:700}h1{margin:.2rem 0 1rem;font-size:clamp(2.6rem,6vw,4.6rem)}h2{font-size:clamp(1.8rem,3vw,2.4rem);margin:0 0 .8rem}.lede{font-size:1.15rem;max-width:40rem;color:var(--ink)}.kicker{margin:0;color:var(--copper);font-family:var(--mono);font-size:.78rem;letter-spacing:.12em;text-transform:uppercase}.actions{display:flex;flex-wrap:wrap;gap:.8rem;margin-top:1.5rem}.btn{display:inline-flex;align-items:center;justify-content:center;min-height:2.8rem;padding:.45rem 1rem;border-radius:999px;text-decoration:none;font-weight:600}.btn-primary{background:var(--copper);color:var(--btn-ink)}.btn-primary:hover{background:var(--btn-hover);color:var(--btn-ink)}.btn-ghost{border:1px solid var(--line);color:var(--ink)}.btn-ghost:hover{border-color:var(--copper);color:var(--ink)}.module{background:var(--bg-inset);border:1px solid var(--line);border-radius:18px;padding:1.1rem 1.15rem 1.2rem;box-shadow:var(--shadow);position:relative}.module:before,.module:after{content:"";position:absolute;width:8px;height:8px;border:1.5px solid var(--copper)}.module:before{top:8px;left:8px;border-right:0;border-bottom:0}.module:after{right:8px;bottom:8px;border-left:0;border-top:0}.module-head{display:flex;justify-content:space-between;gap:1rem;font-family:var(--mono);font-size:.75rem;color:var(--muted);letter-spacing:.06em;text-transform:uppercase;border-bottom:1px dashed var(--line);padding-bottom:.7rem}.pins{display:grid;gap:.45rem;margin:1rem 0;padding:0;list-style:none}.pins li{display:grid;grid-template-columns:4.2rem 1fr auto;gap:.6rem;align-items:center;font-family:var(--mono);font-size:.82rem}.pins b{color:var(--copper);font-weight:500}.dot{width:.55rem;height:.55rem;border-radius:50%;background:var(--led);box-shadow:0 0 8px var(--led)}.dot.warn{background:var(--danger);box-shadow:0 0 8px var(--danger)}.schematic{margin:.4rem 0 2.4rem}.schematic svg{display:block;width:100%;height:auto;overflow:visible}.schematic .trace,.schematic .ink,.schematic .pulse,.schematic .waves{fill:none;stroke-linecap:round;stroke-linejoin:round}.schematic .trace{stroke:var(--copper);stroke-width:2}.schematic .ink{stroke:var(--ink);stroke-width:2}.schematic .draw{stroke-dasharray:1;stroke-dashoffset:1;animation:schematic-draw 1.1s cubic-bezier(.65,0,.35,1) var(--d, 0s) forwards}.schematic .pulse{stroke:var(--led);stroke-width:3.2}.schematic .pulse path{stroke-dasharray:10 200;stroke-dashoffset:10;animation:schematic-pulse 3.6s linear calc(1.8s + var(--p)) infinite}.schematic .waves{stroke:var(--led);stroke-width:2.4}.schematic .waves path{opacity:0;animation:schematic-wave 3.6s ease-out calc(1.8s + var(--w)) infinite}.led-glow,.led-lamp{fill:var(--led);opacity:0}.led-lamp{animation:led-cycle 3.6s ease-in-out 1.8s infinite}.led-glow{animation:led-glow-cycle 3.6s ease-in-out 1.8s infinite}.schematic-sm{max-width:30rem;margin:1.6rem 0 1.2rem}.schematic .spark{fill:none;stroke:var(--led);stroke-width:2.4;stroke-linecap:round}.schematic .spark path{opacity:0;animation:spark-flicker 1.4s steps(1,end) calc(1.1s + var(--s)) infinite}.line-art{fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;overflow:visible}.line-art .ink{stroke:var(--ink)}.line-art .accent{stroke:var(--led)}.line-art .fill{fill:var(--led);stroke:none}.js .line-art .draw{stroke-dasharray:1;stroke-dashoffset:1}.js .line-art .fill{opacity:0}.js .line-art.in-view .draw{animation:schematic-draw .9s cubic-bezier(.65,0,.35,1) var(--d, 0s) forwards}.js .line-art.in-view .fill{animation:fade-in .4s ease-out var(--d, 0s) forwards}.service-icon{display:block;width:3rem;height:3rem;margin-bottom:.3rem}.card:hover .service-icon .accent-group,.card:hover .project-art .accent-group{animation:accent-blink 1.2s ease-in-out infinite}.project-art{position:absolute;top:1.1rem;right:1.1rem;width:4.4rem;height:4.4rem}.card.has-art .kicker,.card.has-art h3,.card.has-art .signal{padding-right:5rem}.project-art .printer-head,.project-art .bee-wings,.project-art .qr-scan{transform-box:fill-box}.card:hover .project-art .qr-scan{animation:qr-scan 1.4s ease-in-out infinite alternate}@keyframes qr-scan{0%{transform:translateY(-12px)}to{transform:translateY(12px)}}.card:hover .project-art .printer-head{animation:printer-sweep 1.6s ease-in-out infinite}.card:hover .project-art .bee-wings{transform-origin:50% 100%;animation:wing-flap .18s ease-in-out infinite alternate}@keyframes printer-sweep{0%,to{transform:translate(0)}25%{transform:translate(-9px)}75%{transform:translate(9px)}}@keyframes wing-flap{to{transform:scaleY(.6);opacity:.7}}.schematic-labels{position:relative;height:1.2rem;margin:.55rem 0 0;padding:0;list-style:none;color:var(--muted);font-family:var(--mono);font-size:.72rem;letter-spacing:.1em;text-transform:uppercase}.schematic-labels li{position:absolute;left:var(--x);transform:translate(-50%);white-space:nowrap}@keyframes schematic-draw{to{stroke-dashoffset:0}}@keyframes schematic-pulse{0%{stroke-dashoffset:10}30%,to{stroke-dashoffset:-100}}@keyframes fade-in{to{opacity:1}}@keyframes accent-blink{50%{opacity:.35}}@keyframes spark-flicker{0%,8%,18%,26%{opacity:1}4%,12%,22%,30%,to{opacity:0}}@keyframes schematic-wave{0%,60%{opacity:0}66%{opacity:1}78%,to{opacity:0}}@keyframes led-cycle{0%,79%{opacity:.25}84%,95%{opacity:1}to{opacity:.25}}@keyframes led-glow-cycle{0%,79%,to{opacity:0}84%,95%{opacity:.18}}.bus{display:flex;flex-wrap:wrap;gap:.5rem 0;list-style:none;padding:0;margin:0 0 2.5rem}.bus li{display:flex;align-items:center;font-family:var(--mono);font-size:.82rem;letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}.filters{display:flex;flex-wrap:wrap;gap:.45rem;margin:1.1rem 0 0;padding:0;list-style:none}.filters button{border:1px solid var(--line);border-radius:999px;background:transparent;color:var(--muted);padding:.32rem .72rem;font-family:var(--mono);font-size:.75rem;letter-spacing:.04em;cursor:pointer}.filters button[aria-pressed=true]{background:var(--copper);border-color:var(--copper);color:var(--btn-ink)}.phases{display:flex;flex-wrap:wrap;gap:.45rem 1.15rem;margin:1.15rem 0 0;padding:0;list-style:none}.phases a{font-family:var(--mono);font-size:.78rem;letter-spacing:.06em;text-transform:uppercase;text-decoration:none}#employment{scroll-margin-top:7.5rem}.employers{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;margin:0;padding:0;list-style:none}.employers a{display:flex;flex-direction:column;gap:.25rem;min-height:100%;padding:1rem 1.1rem;border:1px solid var(--line);border-radius:16px;background:var(--card);color:inherit;text-decoration:none}.employers a:hover{border-color:var(--copper);color:inherit}.employers strong{font-family:var(--display);font-size:1.25rem;letter-spacing:-.03em}.employers span{color:var(--muted);font-size:.92rem}.bus li:not(:last-child):after{content:"";width:2.2rem;height:1px;margin:0 .7rem;background:linear-gradient(90deg,var(--copper-deep),var(--copper))}.stats{display:grid;grid-template-columns:repeat(5,1fr);border:1px solid var(--line);border-radius:16px;overflow:hidden;background:var(--stats)}.stats div{padding:1rem .9rem 1.05rem;border-right:1px solid var(--line)}.stats div:last-child{border-right:0}.stats strong{display:block;font-family:var(--display);font-size:1.35rem;letter-spacing:-.03em}.stats span{color:var(--muted);font-size:.82rem}.section{padding:2.6rem 0 .4rem}.section-head{display:flex;justify-content:space-between;align-items:end;gap:1rem;margin-bottom:1.2rem}.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem}.card[hidden],.section[hidden]{display:none}.card{position:relative;display:flex;flex-direction:column;gap:.55rem;background:var(--card);border:1px solid var(--line);border-radius:16px;padding:1.25rem 1.3rem 1.3rem;min-height:100%;text-decoration:none;color:inherit;transition:border-color .16s ease,transform .16s ease}a.card:hover{border-color:var(--copper);color:inherit;transform:translateY(-2px)}.card h3{margin:0;font-size:1.5rem}.card h3 a{color:var(--ink);text-decoration:none}.card h3 a:hover{color:var(--copper)}.signal{margin:0;color:var(--led);font-family:var(--mono);font-size:.78rem;line-height:1.45}.card p{margin:0;color:var(--muted)}.tags{display:flex;flex-wrap:wrap;gap:.35rem;margin-top:auto;padding:0;list-style:none}.tags li,.tag{border:1px solid var(--line);border-radius:999px;padding:.1rem .5rem;color:var(--muted);font-family:var(--mono);font-size:.72rem}.prose{max-width:46rem}.prose h2{margin-top:2rem;font-size:1.55rem;scroll-margin-top:7.5rem}.prose ul{padding-left:1.1rem}.prose li+li{margin-top:.35rem}.spec{display:grid;gap:.8rem;margin:1.4rem 0 0;padding:1rem;background:var(--bg-inset);border:1px solid var(--line);border-radius:16px}.spec div{display:grid;grid-template-columns:8rem 1fr;gap:.8rem}.spec dt{color:var(--copper);font-family:var(--mono);font-size:.75rem;letter-spacing:.08em;text-transform:uppercase}.spec dd{margin:0}.quote{margin:0;padding:1rem 1rem 1rem 1.1rem;border-left:3px solid var(--copper);background:var(--quote);border-radius:0 14px 14px 0}a.quote{display:block;color:inherit;text-decoration:none}a.quote:hover{color:inherit;transform:translateY(-2px)}.quote p{margin:0 0 .7rem;font-size:1.05rem;white-space:pre-line}.quote footer{color:var(--muted);font-size:.9rem}.portrait{width:7.25rem;height:7.25rem;object-fit:cover;object-position:center 18%;border-radius:16px;border:1px solid var(--copper);background:#f4efe6;display:block;flex:none}.profile-top{display:flex;gap:1rem;align-items:center;margin:.2rem 0 .9rem}.profile-top p{margin:.15rem 0 0}.about-intro{display:grid;grid-template-columns:8.5rem 1fr;gap:1.4rem;align-items:center}.about-intro .portrait{width:8.5rem;height:8.5rem}.quote-form{display:grid;gap:.85rem;max-width:36rem}.quote-form label{display:grid;gap:.35rem;font-family:var(--mono);font-size:.78rem;letter-spacing:.06em;text-transform:uppercase;color:var(--copper)}.quote-form input,.quote-form textarea{width:100%;border:1px solid var(--line);border-radius:12px;background:var(--bg-inset);color:var(--ink);font:inherit;letter-spacing:0;text-transform:none;padding:.75rem .85rem}.quote-form button{justify-self:start;border:0;cursor:pointer;font:inherit}.cert-list{display:grid;gap:.75rem;margin:0;padding:0;list-style:none}.cert-list li{border-top:1px solid var(--line);padding-top:.75rem}.note{color:var(--muted);font-size:.92rem}.page-hero{padding:2.4rem 0 .4rem}.page-hero h1{font-size:clamp(2.3rem,5vw,3.6rem)}.timeline{display:grid;gap:1rem}.job{border-top:1px solid var(--line);padding-top:1rem}.job h3{margin:0;font-size:1.3rem}.meta{color:var(--muted);font-family:var(--mono);font-size:.82rem}footer.site-footer{border-top:1px solid var(--line);padding:1.6rem 0 2rem;color:var(--muted)}.footer-row{display:flex;justify-content:space-between;gap:1rem;flex-wrap:wrap}.footer-row nav{display:flex;gap:1rem;flex-wrap:wrap}.repo-list{display:grid;gap:.7rem;padding:0;margin:0;list-style:none}.repo-list a{display:block;text-decoration:none;color:inherit;border:1px solid var(--line);border-radius:12px;padding:.8rem 1rem}.repo-list a:hover{border-color:var(--copper)}.repo-list strong{display:block;color:var(--ink)}@media(max-width:980px){.hero,.grid-3,.stats{grid-template-columns:1fr 1fr}.stats div:nth-child(2n){border-right:0}.stats div{border-bottom:1px solid var(--line)}}@media(max-width:760px){.project-art{width:3.4rem;height:3.4rem}.card.has-art .kicker,.card.has-art h3{padding-right:3.8rem}.card.has-art .signal{padding-right:0}.nav-links{display:none}.mobile-nav{display:block}.hero,.grid-2,.grid-3,.stats,.spec div,.about-intro,.employers{grid-template-columns:1fr}.stats div{border-right:0}h1{font-size:2.4rem}.pins li{grid-template-columns:3.4rem 1fr auto}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.dot{box-shadow:none}a.card,a.card:hover,a.quote:hover{transform:none}.schematic .draw,.led-lamp{animation:none;stroke-dashoffset:0;opacity:1}.schematic .pulse,.led-glow{display:none}.schematic .waves path,.schematic .spark path{animation:none;opacity:.6}.js .line-art .draw,.js .line-art .fill,.js .line-art.in-view .draw,.js .line-art.in-view .fill,.card:hover .service-icon .accent-group,.card:hover .project-art .accent-group,.card:hover .project-art .printer-head,.card:hover .project-art .bee-wings,.card:hover .project-art .qr-scan{animation:none;stroke-dashoffset:0;opacity:1}}
