:root{--bg:#0d0c0b;--s1:#141312;--s2:#1d1c1a;--b1:#252320;--b2:#363430;--ink:#f0ede6;--ink-2:#a8a49e;--ink-3:#7a7670;--sand:#c4a882;--font:"Inter", system-ui, sans-serif;--mono:"JetBrains Mono", monospace;--gutter:clamp(1.25rem, 4vw, 4.5rem);--max:1360px;--r:6px}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;scroll-padding-top:72px;font-size:15px}body{font-family:var(--font);background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;line-height:1.7;overflow-x:hidden}a{color:inherit;text-decoration:none}img{max-width:100%;display:block}ul{list-style:none}::-webkit-scrollbar{width:5px}::-webkit-scrollbar-thumb{background:var(--b1);border-radius:99px}.wrap{width:min(100%, var(--max));padding-inline:var(--gutter);margin-inline:auto}.nav{z-index:100;border-bottom:1px solid #0000;align-items:center;height:52px;transition:background .2s,border-color .2s,transform .25s,opacity .25s;display:flex;position:fixed;inset:0 0 auto}.nav.nav-home{opacity:0;pointer-events:none;transform:translateY(-100%)}.nav.nav-home.nav-visible{opacity:1;pointer-events:auto;transform:none}.nav.scrolled{backdrop-filter:blur(14px);border-color:var(--b1);background:#0d0c0be0}.nav-inner{justify-content:space-between;align-items:center;width:100%;display:flex}.nav-logo{font-family:var(--mono);color:var(--ink);letter-spacing:-.01em;font-size:.82rem;font-weight:500}.nav-note-title{font-family:var(--font);color:var(--ink);letter-spacing:-.02em;white-space:nowrap;text-overflow:ellipsis;opacity:0;pointer-events:none;max-width:0;font-size:.88rem;font-weight:600;line-height:1.2;transition:opacity .2s,transform .2s,max-width .2s;overflow:hidden;transform:translateY(4px)}.nav-note.nav-note-past .nav-note-title{opacity:1;max-width:min(58vw,420px);transform:none}.nav-note .nav-note-links{flex-shrink:0;margin-left:auto}.page-note .note-article{padding-top:88px;padding-bottom:96px}.nav-links{align-items:center;gap:6px;display:flex}.nav-link{color:var(--ink-2);border-radius:var(--r);padding:5px 10px;font-size:.8rem;transition:color .15s,background .15s}.nav-link:hover{color:var(--ink);background:var(--s1)}.nav-link.active{color:var(--ink)}.nav-book{color:var(--ink);background:var(--s2);border:1px solid var(--b2);border-radius:var(--r);margin-left:8px;padding:5px 14px;font-size:.8rem;font-weight:500;transition:background .15s,border-color .15s}.nav-book:hover{background:var(--b1);border-color:var(--b2)}.nav-toggle{cursor:pointer;color:inherit;appearance:none;background:0 0;border:none;flex-direction:column;gap:4px;padding:4px;display:none}.nav-toggle span{background:var(--ink-2);border-radius:2px;width:18px;height:1.5px;display:block}.mobile-nav{z-index:200;background:var(--bg);flex-direction:column;justify-content:center;align-items:center;gap:28px;display:none;position:fixed;inset:0}.mobile-nav.open{display:flex!important}.mobile-nav-close{color:var(--ink-3);cursor:pointer;background:0 0;border:none;padding:8px;font-size:1.1rem;position:absolute;top:18px;right:24px}.mobile-nav-link{color:var(--ink-2);font-size:1.5rem;font-weight:600}.mobile-nav-link:hover{color:var(--ink)}.sec-label{align-items:center;gap:14px;margin-bottom:36px;display:flex}.sec-num{font-family:var(--mono);color:var(--ink-3);font-size:.72rem}.sec-name{letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);font-size:.72rem;font-weight:600}.sec-rule{background:var(--b1);flex:1;height:1px}.sec-link{color:var(--ink-3);white-space:nowrap;text-decoration:underline;text-decoration-color:var(--b1);text-underline-offset:3px;font-size:.75rem}.sec-muted{font-family:var(--mono);color:var(--ink-3);white-space:nowrap;font-size:.72rem}.sec-count{font-family:var(--mono);color:var(--ink-3);letter-spacing:.02em;margin-top:16px;font-size:.72rem}.hero{padding-top:140px;padding-bottom:96px}.hero-name{letter-spacing:-.045em;margin-bottom:28px;font-weight:700;line-height:.9}.hero-name .line1{color:var(--ink);font-size:clamp(4rem,10.5vw,9.5rem);display:block}.hero-name .line2{color:var(--ink-3);font-size:clamp(4rem,10.5vw,9.5rem);display:block}.hero-status{font-family:var(--mono);letter-spacing:0;color:var(--ink-2);align-items:center;gap:6px;font-size:.72rem;font-weight:500;line-height:1.4;display:inline-flex}.hero-status-dot{background:#6b9e6b;border-radius:50%;flex-shrink:0;width:6px;height:6px}.hero-meta{letter-spacing:normal;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px 16px;width:100%;margin-top:18px;font-weight:400;line-height:normal;display:flex}.hero-cta.btn{border-radius:var(--r);font-family:var(--font);letter-spacing:0;background:var(--ink);color:var(--bg);border:none;justify-content:center;align-items:center;gap:6px;margin-left:auto;padding:8px 16px;font-size:.82rem;font-weight:500;line-height:1.4;text-decoration:none;transition:opacity .15s;display:inline-flex}.hero-cta.btn:hover{background:var(--ink);opacity:.9}.hero-cta span{line-height:1}.hero-rule{background:var(--b1);width:100%;height:1px;margin-bottom:28px}.hero-sub{flex-direction:column;align-items:flex-start;gap:14px;max-width:none;display:flex}.hero-desc{color:var(--ink-2);text-wrap:pretty;width:100%;max-width:none;font-size:clamp(.9rem,1.5vw,1.05rem);line-height:1.75}.hero-desc strong{color:var(--ink);font-weight:500}.hero-tagline{font-family:var(--mono);color:var(--ink-3);letter-spacing:.01em;margin-top:14px;font-size:.78rem}.hero-kbd{font-family:var(--mono);color:var(--ink-3);user-select:none;margin-left:8px;font-size:.68rem}.hero-kbd kbd{background:var(--s2);border:1px solid var(--b1);color:var(--ink-2);border-radius:3px;padding:2px 5px}.btn{border-radius:var(--r);font-size:.82rem;font-weight:500;font-family:var(--font);cursor:pointer;border:none;align-items:center;gap:6px;padding:8px 18px;text-decoration:none;transition:all .15s;display:inline-flex}.btn-filled{background:var(--ink);color:var(--bg)}.btn-filled:hover{background:var(--sand)}.btn-outline{color:var(--ink-2);border:1px solid var(--b1);background:0 0}.btn-outline:hover{color:var(--ink);border-color:var(--b2)}.section{border-top:1px solid var(--b1);padding-block:80px}.section:first-of-type{border-top:none}.project-grid{background:var(--b1);border:1px solid var(--b1);border-radius:calc(var(--r) + 1px);grid-template-columns:repeat(3,1fr);gap:1px;margin-bottom:20px;display:grid;overflow:hidden}.project-card{background:var(--bg);color:inherit;flex-direction:column;transition:background .15s;display:flex}.project-card:hover{background:var(--s1)}.project-card:hover .proj-thumb img{transform:scale(1.04)}.proj-thumb{aspect-ratio:4/3;background:var(--s1);position:relative;overflow:hidden}.proj-thumb img{object-fit:cover;width:100%;height:100%;transition:transform .35s}.proj-placeholder{background-image:linear-gradient(var(--b1) 1px, transparent 1px), linear-gradient(90deg, var(--b1) 1px, transparent 1px);background-size:22px 22px;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.proj-placeholder span{filter:grayscale();opacity:.35;font-size:1.6rem}.proj-body{flex-direction:column;flex:1;gap:6px;padding:16px 18px 18px;display:flex}.proj-cat{font-family:var(--mono);color:var(--ink-3);text-transform:uppercase;letter-spacing:.08em;font-size:.64rem}.proj-name{font-family:var(--mono);color:var(--ink);flex-wrap:wrap;align-items:center;gap:8px;font-size:.82rem;font-weight:500;display:flex}.live-dot{background:#6b9e6b;border-radius:50%;width:5px;height:5px;display:inline-block}.proj-private{font-family:var(--mono);color:var(--ink-3);border:1px solid var(--b1);text-transform:uppercase;letter-spacing:.06em;border-radius:3px;padding:1px 6px;font-size:.62rem}.proj-meta{font-family:var(--mono);color:var(--ink-3);flex-wrap:wrap;gap:6px 10px;font-size:.66rem;display:flex}.proj-award{color:var(--sand)}.proj-desc{color:var(--ink-2);flex:1;font-size:.78rem;line-height:1.55}.proj-tags{flex-wrap:wrap;gap:4px;margin-top:6px;display:flex}.proj-links{font-family:var(--mono);flex-wrap:wrap;gap:10px;margin-top:8px;font-size:.68rem;display:flex}.proj-links a{color:var(--ink-2);text-decoration:underline;text-decoration-color:var(--b1);text-underline-offset:3px}.proj-links a:hover{color:var(--ink)}.proj-private-note{color:var(--ink-3)}.tag{font-family:var(--mono);color:var(--ink-3);border:1px solid var(--b1);border-radius:4px;padding:1px 7px;font-size:.66rem}.hack-list{background:var(--b1);border:1px solid var(--b1);border-radius:var(--r);grid-template-columns:1fr 1fr;gap:1px;display:grid;overflow:hidden}.hack-item{background:var(--bg);padding:22px 24px}.hack-item:hover{background:var(--s1)}.hack-place{font-family:var(--mono);color:var(--sand);text-transform:uppercase;letter-spacing:.08em;margin-bottom:6px;font-size:.68rem}.hack-name{color:var(--ink);margin-bottom:4px;font-size:.92rem;font-weight:600}.hack-proj{font-family:var(--mono);color:var(--ink-3);border:1px solid var(--b1);border-radius:4px;margin-bottom:8px;padding:1px 8px;font-size:.68rem;display:inline-block}.hack-desc{color:var(--ink-2);font-size:.78rem;line-height:1.6}.about-grid{grid-template-columns:1fr 340px;align-items:start;gap:60px;display:grid}.prose p{color:var(--ink-2);margin-bottom:14px;font-size:.92rem;line-height:1.8}.prose p:last-child{margin-bottom:0}.prose strong{color:var(--ink);font-weight:500}.prose a{color:var(--ink-2);text-decoration:underline;text-decoration-color:var(--b2);text-underline-offset:3px}.prose a:hover{color:var(--ink)}.about-aside>*+*{margin-top:12px}.aside-card{border:1px solid var(--b1);border-radius:var(--r);overflow:hidden}.aside-head{border-bottom:1px solid var(--b1);padding:12px 16px}.aside-head-label{font-family:var(--mono);color:var(--ink-3);text-transform:uppercase;letter-spacing:.08em;font-size:.68rem}.aside-row{border-bottom:1px solid var(--b1);justify-content:space-between;align-items:center;gap:8px;padding:10px 16px;font-size:.82rem;display:flex}.aside-row:last-child{border-bottom:none}.aside-val{color:var(--ink);font-weight:500}.aside-sub{color:var(--ink-3);font-size:.72rem}.aside-date{font-family:var(--mono);color:var(--ink-3);white-space:nowrap;font-size:.7rem}.skill-row{flex-wrap:wrap;gap:6px;display:flex}.skill-groups{margin-top:28px}.skill-groups-label{color:var(--ink-3);font-size:.72rem;font-family:var(--mono);text-transform:uppercase;letter-spacing:.08em;margin-bottom:14px}.skill-group-grid{grid-template-columns:1fr 1fr;gap:18px 24px;display:grid}.skill-group-name{font-family:var(--mono);color:var(--ink-3);text-transform:uppercase;letter-spacing:.06em;margin-bottom:8px;font-size:.66rem}.cert-block{margin-top:32px}.cert-list{border:1px solid var(--b1);border-radius:var(--r);overflow:hidden}.cert-row{border-bottom:1px solid var(--b1);justify-content:space-between;align-items:baseline;gap:12px;padding:12px 16px;display:flex}.cert-row:last-child{border-bottom:none}.cert-name{color:var(--ink);font-size:.85rem;font-weight:500}.cert-issuer{color:var(--ink-3);margin-top:2px;font-size:.72rem}.cert-date{font-family:var(--mono);color:var(--ink-3);white-space:nowrap;font-size:.7rem}.exp-list{flex-direction:column;gap:28px;display:flex}.exp-org-name{color:var(--ink);margin-bottom:10px;font-size:1rem;font-weight:600}.exp-role+.exp-role{margin-top:14px}.exp-role-nested{border-left:1px solid var(--b1);padding-left:14px}.exp-role-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:16px;margin-bottom:6px;display:flex}.exp-title{color:var(--ink);font-size:.88rem;font-weight:500}.exp-dates{font-family:var(--mono);color:var(--ink-3);font-size:.7rem}.exp-bullets{color:var(--ink-2);padding-left:1.1em;font-size:.82rem;line-height:1.65;list-style:outside}.exp-bullets li+li{margin-top:4px}.talks-block{border-top:1px solid var(--b1);margin-top:32px;padding-top:24px}.talks-label{font-family:var(--mono);color:var(--ink-3);text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px;font-size:.68rem}.talks-list{flex-direction:column;gap:8px;display:flex}.talks-list li{color:var(--ink-2);flex-wrap:wrap;gap:8px 14px;font-size:.85rem;display:flex}.talks-list em{color:var(--ink);font-style:normal;font-weight:500}.talks-org{font-family:var(--mono);color:var(--ink-3);font-size:.7rem}.now-block{font-family:var(--mono);background:0 0;border:none;border-radius:0;max-width:560px;padding:4px 0;font-size:.82rem}.now-row{grid-template-columns:100px 1fr;gap:10px;display:grid}.now-row+.now-row{margin-top:8px}.now-key{color:var(--ink-3)}.now-val{color:var(--ink-2)}a.now-val{text-decoration:underline;text-decoration-color:var(--b2);text-underline-offset:3px}a.now-val:hover{color:var(--ink)}.proof-strip{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px;margin-top:28px;display:grid}.proof-item img{aspect-ratio:4/3;object-fit:cover;border-radius:var(--r);border:1px solid var(--b1);width:100%}.proof-item figcaption{font-family:var(--mono);color:var(--ink-3);margin-top:6px;font-size:.66rem}.homelab-teaser{border:1px solid var(--b1);border-radius:6px;grid-template-columns:1fr auto;align-items:center;gap:20px;padding:28px 32px;transition:background .15s,border-color .15s;display:grid}.homelab-teaser:hover{background:var(--s1);border-color:var(--b2)}.homelab-teaser-title{color:var(--ink);margin-bottom:6px;font-size:.92rem;font-weight:600}.homelab-teaser-desc{color:var(--ink-3);font-size:.82rem}.homelab-teaser-arrow{color:var(--ink-3);font-size:1.1rem}.contact-block{max-width:640px}.contact-lead{color:var(--ink);margin-bottom:8px;font-size:1.05rem;line-height:1.5}.contact-tagline{font-family:var(--mono);color:var(--ink-3);margin-bottom:20px;font-size:.78rem}.contact-actions{flex-wrap:wrap;gap:8px;margin-bottom:28px;display:flex}.contact-channels{border:1px solid var(--b1);border-radius:var(--r);overflow:hidden}.contact-row{border-bottom:1px solid var(--b1);grid-template-columns:100px 1fr;align-items:baseline;gap:12px;padding:12px 16px;display:grid}.contact-row:last-child{border-bottom:none}.contact-label{font-family:var(--mono);color:var(--ink-3);text-transform:uppercase;letter-spacing:.08em;font-size:.68rem}.contact-val{color:var(--ink-2);font-size:.88rem}.contact-val:hover{color:var(--ink)}.contact-email{user-select:all}.social-icons{flex-wrap:wrap;gap:10px 18px;margin-top:28px;display:flex}.social-icon{font-family:var(--mono);color:var(--ink-2);align-items:center;gap:8px;padding:8px 0;font-size:.75rem;transition:color .15s;display:inline-flex}.social-icon:hover{color:var(--ink)}.social-icon svg{opacity:.85;flex-shrink:0}.footer-link{color:inherit;text-decoration:underline;text-decoration-color:var(--b2);text-underline-offset:3px}.resume-page{padding-bottom:80px}.resume-actions{flex-wrap:wrap;gap:8px;margin:24px 0 12px;display:flex}.resume-hint{font-family:var(--mono);color:var(--ink-3);margin-bottom:28px;font-size:.68rem}.resume-h1{letter-spacing:-.04em;margin-bottom:12px;font-size:clamp(2.4rem,6vw,4rem);font-weight:700;line-height:.95}.resume-harvard-header .resume-h1{margin-bottom:10px}.resume-harvard-contact{font-family:var(--mono);color:var(--ink-3);margin-bottom:16px;font-size:.72rem;line-height:1.6}.resume-harvard-contact a{color:var(--ink-2);text-decoration:underline;text-decoration-color:var(--b1);text-underline-offset:3px}.resume-harvard-contact a:hover{color:var(--ink)}.resume-sub{color:var(--ink-2);max-width:520px;font-size:.92rem;line-height:1.7}.resume-about-p{color:var(--ink-2);margin-bottom:10px;font-size:.88rem;line-height:1.7}.resume-about-p:last-child{margin-bottom:0}.resume-tagline{font-family:var(--mono);color:var(--ink-3);font-size:.78rem}.resume-section{border-top:1px solid var(--b1);margin-top:36px;padding-top:28px}.resume-section h2{font-family:var(--mono);text-transform:uppercase;letter-spacing:.1em;color:var(--ink-3);margin-bottom:16px;font-size:.72rem}.resume-item+.resume-item{margin-top:16px}.resume-item-head{flex-wrap:wrap;justify-content:space-between;gap:12px;margin-bottom:4px;display:flex}.resume-item-title{color:var(--ink);font-weight:500}.resume-item-meta{font-family:var(--mono);color:var(--ink-3);font-size:.7rem}.resume-item-submeta{margin-top:4px}.resume-item p,.resume-item li{color:var(--ink-2);font-size:.85rem;line-height:1.65}.resume-item ul{margin-top:6px;padding-left:1.1em;list-style:outside}.resume-item em,.resume-talk-list em{color:var(--ink);font-style:normal;font-weight:500}.resume-role{margin-top:8px}.resume-role-title{color:var(--ink-2);margin-bottom:4px;font-size:.88rem}.resume-talk-list,.resume-cert-list{flex-direction:column;gap:8px;padding:0;list-style:none;display:flex}.resume-talk-list li,.resume-cert-list li{color:var(--ink-2);font-size:.85rem;line-height:1.55}.resume-cert-list li{border-bottom:1px solid var(--b1);flex-wrap:wrap;justify-content:space-between;gap:12px;padding:8px 0;display:flex}.resume-cert-list li:first-child{border-top:1px solid var(--b1)}.resume-cert-name{color:var(--ink);font-weight:500}.resume-cert-meta{font-family:var(--mono);color:var(--ink-3);font-size:.7rem}.resume-skills-grid{grid-template-columns:1fr 1fr;gap:20px 28px;display:grid}.resume-skills-harvard{display:none}.resume-skill-col .resume-item-title{font-size:.72rem;font-family:var(--mono);text-transform:uppercase;letter-spacing:.08em;color:var(--ink-3);margin-bottom:8px;font-weight:500}.resume-pdf-note{border-top:1px solid var(--b1);font-family:var(--mono);color:var(--ink-3);margin-top:48px;padding-top:20px;font-size:.68rem}.resume-pdf-note code{color:var(--ink-2)}@media print{@page{size:letter;margin:.6in .7in}.nav,#mobile-nav,#cli-console,.resume-screen-only,.resume-actions,.resume-pdf-note,.footer,.resume-skills-grid{display:none!important}html{font-size:11pt}body{print-color-adjust:exact;color:#000!important;background:#fff!important}.wrap{width:100%;max-width:none;margin:0;padding:0}.resume-page{color:#000;max-width:none;margin:0;padding:0;font-family:Times New Roman,Times,Georgia,serif}.resume-harvard-header{text-align:center;border-bottom:1px solid #000;margin-bottom:14pt;padding-bottom:10pt}.resume-h1{letter-spacing:.04em;text-transform:uppercase;margin:0 0 6pt;font-size:18pt;font-weight:700;line-height:1.2;color:#000!important}.resume-harvard-contact{margin:0;font-family:Times New Roman,Times,Georgia,serif;font-size:10pt;color:#000!important}.resume-harvard-contact a{text-decoration:none;color:#000!important}.resume-section{break-inside:avoid;border-top:none;margin-top:12pt;padding-top:0}.resume-section h2{letter-spacing:.06em;text-transform:uppercase;border-bottom:1px solid #000;margin:0 0 8pt;padding-bottom:2pt;font-family:Times New Roman,Times,Georgia,serif;font-size:11pt;font-weight:700;color:#000!important}.resume-item+.resume-item{margin-top:8pt}.resume-item-title,.resume-role-title,.resume-cert-name,.resume-talk-list em{font-weight:700;color:#000!important}.resume-item-meta,.resume-cert-meta{font-family:Times New Roman,Times,Georgia,serif;font-size:10pt;font-style:italic;color:#000!important}.resume-item p,.resume-item li,.resume-talk-list li,.resume-cert-list li,.resume-skill-line{font-size:10pt;line-height:1.35;color:#000!important}.resume-item ul{margin-top:3pt;padding-left:1.15em}.resume-item ul li+li,.resume-role{margin-top:2pt}.resume-role-title{margin-bottom:2pt;font-size:10pt;font-style:italic;font-weight:400;color:#000!important}.resume-item-submeta{display:none}.resume-skills-harvard{display:block}.resume-skill-line{margin:0 0 3pt}.resume-skill-line strong{font-weight:700;color:#000!important}.resume-cert-list li{border:none;justify-content:space-between;padding:1pt 0;display:flex}.resume-cert-list li:first-child{border:none}.resume-talk-list{gap:3pt}.r{opacity:1!important;transform:none!important}}.note-row{border-bottom:1px solid var(--b1);grid-template-columns:100px 1fr auto;align-items:baseline;gap:20px;padding:16px 0;transition:color .15s;display:grid}.note-row:first-child{border-top:1px solid var(--b1)}.note-row:hover .note-title{color:var(--ink)}.note-date{font-family:var(--mono);color:var(--ink-3);font-size:.72rem}.note-title{color:var(--ink-2);font-size:.9rem}.note-arrow{color:var(--ink-3);font-size:.78rem}.note-article{max-width:min(1100px,100%)}.note-article h1{letter-spacing:-.03em;margin-bottom:8px;font-size:clamp(1.6rem,4vw,2.4rem);font-weight:700;line-height:1.15}.note-tags{flex-wrap:wrap;gap:6px;margin-bottom:16px;display:flex}.note-meta{font-family:var(--mono);color:var(--ink-3);white-space:nowrap;flex-wrap:nowrap;align-items:center;gap:8px;margin:0 0 36px;font-size:.72rem;line-height:1.2;display:flex}.note-meta time{font:inherit;color:inherit;margin:0;display:inline}.note-meta-sep{opacity:.7}.note-footer{border-top:1px solid var(--b1);grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:start;gap:16px 0;margin-top:48px;padding-top:28px;display:grid}.note-footer-side{width:100%;min-width:0}.note-footer-prev,.note-footer-next{justify-self:stretch}.note-footer-center{text-align:center;white-space:nowrap;padding-inline:4.5ch}.note-footer a{color:var(--ink-3);text-decoration:underline;text-decoration-color:var(--b1);text-underline-offset:3px;font-size:.82rem}.note-footer-link{align-items:start;gap:8px;width:100%;max-width:100%;text-decoration:none;display:grid}.note-footer-prev .note-footer-link{grid-template-columns:auto minmax(0,1fr)}.note-footer-next .note-footer-link{grid-template-columns:minmax(0,1fr) auto;margin-left:auto}.note-footer-arrow{color:var(--ink-3);flex-shrink:0;line-height:1.4}.note-footer-link-title{-webkit-line-clamp:2;text-decoration:underline;text-decoration-color:var(--b1);text-underline-offset:3px;-webkit-box-orient:vertical;line-height:1.4;display:-webkit-box;overflow:hidden}.note-footer-next .note-footer-link-title{text-align:right}.note-footer-link:hover .note-footer-link-title{color:var(--ink-2)}.note-article .body{color:var(--ink-2);font-size:.93rem;line-height:1.85}.note-article .body p{margin-bottom:18px}.note-article .body h2{color:var(--ink);margin:32px 0 10px;font-size:1.1rem;font-weight:600}.note-article .body h3{color:var(--ink);margin:24px 0 8px;font-size:.95rem;font-weight:600}.note-article .body code{font-family:var(--mono);background:var(--s2);border:1px solid var(--b1);color:var(--sand);border-radius:4px;padding:2px 6px;font-size:.82rem}.note-article .body pre{background:var(--s1);border:1px solid var(--b1);border-radius:var(--r);margin-bottom:18px;padding:20px;overflow-x:auto}.note-article .body pre code{color:var(--ink-2);background:0 0;border:none;padding:0}.note-article .body ul,.note-article .body ol{margin:0 0 18px;padding-left:1.5em}.note-article .body ul{list-style:outside}.note-article .body ol{list-style:decimal}.note-article .body ul ul{margin-bottom:0;list-style:circle}.note-article .body ol ol{margin-bottom:0;list-style:lower-alpha}.note-article .body li{margin-bottom:6px;padding-left:.25em;display:list-item}.note-article .body li::marker{color:var(--ink-3)}.note-article .body a{color:var(--ink);text-decoration:underline;text-decoration-color:var(--b2);text-underline-offset:3px}.note-article .body img{border:1px solid var(--b1);background:#e8e4dc;border-radius:6px;max-width:100%;height:auto;margin:20px 0;padding:16px;display:block}.note-article .body table{border-collapse:collapse;table-layout:auto;width:100%;max-width:100%;margin:0 0 24px;font-size:.82rem;display:table}.note-article .body thead th{text-align:left;font-family:var(--mono);color:var(--ink-3);letter-spacing:.04em;text-transform:uppercase;border-bottom:1px solid var(--b2);padding:10px 14px 10px 0;font-size:.72rem;font-weight:500}.note-article .body td{border-bottom:1px solid var(--b1);vertical-align:top;color:var(--ink-2);padding:12px 14px 12px 0}.note-article .body td:last-child,.note-article .body th:last-child{padding-right:0}.note-article .body tbody tr:last-child td{border-bottom:none}.homelab-grid{background:var(--b1);border:1px solid var(--b1);border-radius:var(--r);grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:1px;display:grid;overflow:hidden}.service-card{background:var(--bg);color:inherit;flex-direction:column;padding:20px;text-decoration:none;transition:background .15s;display:flex}.service-card:hover{background:var(--s1)}.service-status{align-items:center;gap:6px;margin-bottom:10px;display:flex}.status-dot{border-radius:50%;width:6px;height:6px}.status-up{background:#6b9e6b}.status-down{background:#9e6b6b}.status-warn{background:#9e916b}.status-unknown{background:var(--b2)}.service-name{font-family:var(--mono);color:var(--ink);margin-bottom:3px;font-size:.82rem;font-weight:500}.service-desc{color:var(--ink-3);font-size:.75rem;line-height:1.5}.hw-grid{background:var(--b1);border:1px solid var(--b1);border-radius:var(--r);grid-template-columns:1fr 1fr;gap:1px;display:grid;overflow:hidden}.hw-row{background:var(--bg);grid-template-columns:110px 1fr;align-items:center;gap:12px;padding:14px 18px;display:grid}.hw-label{font-family:var(--mono);color:var(--ink-3);text-transform:uppercase;letter-spacing:.08em;font-size:.7rem}.hw-val{color:var(--ink);font-size:.82rem}.book-hero{padding-top:140px;padding-bottom:80px}.avail-badge{font-family:var(--mono);color:var(--ink-2);border:1px solid var(--b1);border-radius:99px;align-items:center;gap:7px;margin-bottom:28px;padding:5px 14px;font-size:.72rem;display:inline-flex}.cal-embed{border:1px solid var(--b1);border-radius:var(--r);background:var(--s1);min-height:500px;color:var(--ink-3);font-size:.85rem;font-family:var(--mono);flex-direction:column;justify-content:center;align-items:center;gap:12px;display:flex}.footer{border-top:1px solid var(--b1);color:var(--ink-3);font-size:.75rem;font-family:var(--mono);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;padding:28px 0;display:flex}@keyframes blink{0%,to{opacity:1}50%{opacity:0}}.cursor{background:var(--ink-3);vertical-align:middle;width:2px;height:.85em;margin-left:2px;animation:1.1s step-end infinite blink;display:inline-block}@media (width<=1024px){.project-grid{grid-template-columns:1fr 1fr}.hack-list{grid-template-columns:1fr}.about-grid{grid-template-columns:1fr;gap:36px}.skill-group-grid{grid-template-columns:1fr}}@media (width<=720px){.proj-desktop-only{display:none}.project-grid .proj-mobile:first-child{order:2}.project-grid .proj-mobile:nth-child(2){order:1}.project-grid .proj-mobile:nth-child(5){order:3}.project-grid .proj-mobile:nth-child(6){order:4}}@media (width<=640px){.hero-meta{gap:10px 12px}.project-grid,.hw-grid{grid-template-columns:1fr}.nav-links{display:none}.nav-toggle{display:flex}.note-row{grid-template-columns:1fr;gap:4px}.note-date{display:none}.hide-mobile{display:none!important}.resume-skills-grid{grid-template-columns:1fr}.resume-actions{flex-direction:column;align-items:stretch}.resume-actions .btn{justify-content:center}}@media print{:root{--bg:#fff!important;--ink:#000!important;--ink-2:#333!important;--ink-3:#666!important;--b1:#ddd!important;--s1:#fff!important;--s2:#fcfcfc!important}body{color:#000!important;background:#fff!important;font-size:11pt!important}.nav,#mobile-nav,#cli-console,.hero-actions,.avail-badge,.sec-rule,.note-arrow,.status-dot,.status-text,#cli-close{display:none!important}.wrap{width:100%!important;max-width:100%!important;margin:0!important;padding:0!important}.section{page-break-inside:avoid;border-top:1px solid #000!important;padding-block:20px!important}.r{opacity:1!important;transform:none!important}a[href^=http]:after{content:" [Available at: " attr(href) "]"!important;color:#333!important;font-size:85%!important;font-family:var(--mono)!important}.project-grid,.hack-list,.hw-grid{background:0 0!important;border:none!important;grid-template-columns:1fr!important}.project-card,.hack-item,.hw-row{background:0 0!important;border-bottom:1px solid #eee!important;padding:10px 0!important}.proj-placeholder,.proj-thumb{display:none!important}}
