@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/91bd2e40df15814e-s.19s5evoqhirey.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/a63431c4ac64ea8b-s.386o_ri1vb0yv.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/8b4ed0a90d903ab5-s.44dak0sams9f0.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/c47649aa31f9e140-s.p.3lxpqujs87tck.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Hanken Grotesk Fallback;src:local(Arial);ascent-override:99.07%;descent-override:30.02%;line-gap-override:0.0%;size-adjust:100.94%}.hanken_grotesk_801b1091-module__wtdtla__className{font-family:Hanken Grotesk,Hanken Grotesk Fallback;font-style:normal}.hanken_grotesk_801b1091-module__wtdtla__variable{--font-hanken:"Hanken Grotesk", "Hanken Grotesk Fallback"}
@font-face{font-family:Instrument Serif;font-style:italic;font-weight:400;font-display:swap;src:url(../media/fc0a7394b875fa43-s.2ytmazkdrg7t9.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Instrument Serif;font-style:italic;font-weight:400;font-display:swap;src:url(../media/7ebf22b5a21034f8-s.p.3j3877k49yy0l.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Instrument Serif;font-style:normal;font-weight:400;font-display:swap;src:url(../media/ccf27e5a7366fb23-s.1icgra-w5i50b.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Instrument Serif;font-style:normal;font-weight:400;font-display:swap;src:url(../media/e41d5df559864f9e-s.p.1g73gv09-xcb6.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Instrument Serif Fallback;src:local(Times New Roman);ascent-override:117.94%;descent-override:36.93%;line-gap-override:0.0%;size-adjust:83.94%}.instrument_serif_bc6faae3-module__Gi5TfG__className{font-family:Instrument Serif,Instrument Serif Fallback;font-weight:400}.instrument_serif_bc6faae3-module__Gi5TfG__variable{--font-instrument:"Instrument Serif", "Instrument Serif Fallback"}
.portfolio-shell{--surface:#18181b;--surface-raised:#2b2b2d;--surface-card:#262628;--line:#343437;--text:#e8e8ea;--muted:#949497;--accent:#9fbe9f;background:var(--surface);min-height:100vh;color:var(--text);font-family:var(--font-hanken), Arial, sans-serif}.portfolio-shell.is-light{--surface:#f5f5f2;--surface-raised:#e8e8e4;--surface-card:#efefeb;--line:#d7d7d2;--text:#242426;--muted:#696969;--accent:#3b704b;background:var(--surface)}.portfolio-shell *{box-sizing:border-box}.portfolio-shell a{color:inherit}.portfolio{background:var(--surface);width:calc(100% - 120px);max-width:776px;min-height:100vh;margin:0 auto;position:relative;box-shadow:0 0 0 1px #ffffff0a}.portfolio:before,.portfolio:after{content:"";background:repeating-linear-gradient(130deg,#222224 0 1px,#1b1b1d 1px 5px);width:60px;position:absolute;top:0;bottom:0}.portfolio:before{right:100%}.portfolio:after{left:100%}.is-light .portfolio:before,.is-light .portfolio:after{background:repeating-linear-gradient(130deg,#e8e8e4 0 1px,#f0f0ec 1px 5px)}.portfolio-banner{text-align:center;color:#fff;background:linear-gradient(#0000 45%,#00000040),url(/pixel-mountains.webp) 50% 56%/cover;place-items:center;height:280px;margin-bottom:8px;display:grid}.portfolio-banner span{max-width:370px;font:italic 20px var(--font-instrument), Georgia, serif;text-shadow:0 2px 10px #102923,0 1px 2px #102923;padding:8px 15px}.portfolio-header{border-bottom:1px dashed var(--line);padding:0 32px 20px}.portfolio-avatar{object-fit:cover;border:4px solid var(--surface);border-radius:50%;width:112px;height:112px;margin-top:-40px;display:block}.portfolio-headline{justify-content:space-between;align-items:center;gap:20px;padding-top:16px;display:flex}.portfolio-headline h1{font:italic 500 36px/40px var(--font-instrument), Georgia, serif;letter-spacing:.01em;margin:0 0 2px}.portfolio-headline p{color:var(--muted);margin:0;font-size:14px;font-weight:600}.portfolio-socials{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.portfolio-socials a,.portfolio-socials button{width:34px;height:34px;color:var(--text);cursor:pointer;background:0 0;border:0;place-items:center;padding:0;text-decoration:none;display:inline-grid}.button-face{color:#fffc;background:#212121;border:1px solid #00000080;border-radius:16px;justify-content:center;align-items:center;gap:8px;transition:transform .15s cubic-bezier(0,0,.2,1);display:flex;position:relative;overflow:hidden;box-shadow:0 4px 10px -4px #0f172a26}.button-face:after{content:"";border-radius:inherit;pointer-events:none;border:0 solid #2a2a2a;border-top-width:2px;border-bottom:2px solid #00000080;transition:border-color .15s,box-shadow .15s;position:absolute;inset:0}.portfolio-socials .button-face{width:34px;height:34px}.portfolio-socials :is(a,button):is(:hover,:focus-visible,:active) .button-face,.contact-links a:is(:hover,:focus-visible,:active) .button-face{transform:translateY(1px)}.portfolio-socials :is(a,button):is(:hover,:focus-visible,:active) .button-face:after,.contact-links a:is(:hover,:focus-visible,:active) .button-face:after{border-top-color:#00000080;border-bottom-width:0;box-shadow:inset 0 5px 15px #0007}.is-light .button-face{color:#262626;background:#fafafa;border-color:#e5e5e5}.is-light .button-face:after{border-top-color:#f5f5f5;border-bottom-color:#d4d4d4}.is-light .portfolio-socials :is(a,button):is(:hover,:focus-visible,:active) .button-face:after,.is-light .contact-links a:is(:hover,:focus-visible,:active) .button-face:after{border-top-color:#d4d4d4;box-shadow:inset 0 3px 10px #0f172a1f}.portfolio-intro{padding:25px 32px 88px}.portfolio-intro>p{letter-spacing:-.02em;color:#b9b9bd;max-width:840px;margin:0 0 26px;font-size:18px;line-height:1.625}.is-light .portfolio-intro>p{color:#56565a}.portfolio-intro strong{color:var(--text)}.music-card{border:1px solid var(--line);background:#00000012;border-radius:17px;flex-wrap:wrap;align-items:center;gap:15px;min-height:94px;padding:16px;display:flex}.music-card>img{object-fit:cover;background:#39343b;border-radius:7px;width:60px;height:60px}.music-copy{flex-direction:column;flex:1;gap:3px;min-width:180px;font-size:13px;display:flex}.music-copy>span:last-child{color:var(--muted)}.music-copy>a{width:fit-content;font-size:15px;font-weight:700;text-decoration:none}.music-copy>a:hover{text-decoration:underline}.music-eyebrow{color:var(--muted);align-items:center;gap:6px;font-size:12px;display:flex}.music-eyebrow svg{color:#1ed760}.music-play{color:var(--text);border:1px solid var(--line);cursor:pointer;background:0 0;border-radius:50%;place-items:center;width:37px;height:37px;font-size:23px;text-decoration:none;transition:background .18s,transform .18s;display:grid}.music-play:hover{background:var(--surface-raised)}.music-play:active{transform:translateY(1px)}.portfolio-section{border-top:1px dashed var(--line);padding:38px 64px 42px}.has-reveal .portfolio-section,.has-reveal .portfolio-contact{transition:opacity .5s ease-out,transform .5s ease-out}.has-reveal .portfolio-section:not(.is-visible),.has-reveal .portfolio-contact:not(.is-visible){opacity:0;transform:translateY(18px)}.has-reveal .proof-section:not(.is-visible) .proof-card{animation:none}.portfolio-section h2,.portfolio-contact h2{font:normal 20px/28px var(--font-instrument), Georgia, serif;opacity:.7;margin:0 0 30px}.work-list{gap:22px;display:grid}.work-item{align-items:flex-start;gap:16px;min-height:58px;padding-left:18px;display:flex}.work-logo{object-fit:cover;border-radius:10px;flex:0 0 46px;width:46px;height:46px;display:block}.work-info{flex:1}.work-info h3{margin:0 0 2px;font-size:18px;font-weight:500;line-height:24px}.work-info p{color:var(--muted);margin:0;font-size:14px;line-height:1.55}.work-info .work-detail{max-width:640px;color:var(--text);margin-top:11px}.work-expand{color:var(--muted);cursor:pointer;background:0 0;border:0;min-width:40px;min-height:40px;font-size:24px;line-height:1;transition:transform .2s,color .18s}.work-expand:hover{color:var(--text)}.work-expand[aria-expanded=true]{transform:rotate(180deg)}.proof-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;display:grid}.proof-card{background:var(--surface-raised);opacity:0;border:1px solid #3b3b3e;border-radius:12px;flex-direction:column;min-width:0;padding:6px 6px 16px;transition:box-shadow .22s,border-color .22s;animation:.65s cubic-bezier(.2,.75,.2,1) forwards proof-arrive;display:flex;position:relative;overflow:hidden}.proof-card:hover{border-color:#64646a;box-shadow:0 10px 24px #00000026}.proof-card:focus-within{outline:2px solid var(--accent);outline-offset:3px}.proof-card-link{z-index:1;border-radius:inherit;position:absolute;inset:0}@keyframes proof-arrive{0%{opacity:0;transform:translateY(26px)}to{opacity:1;transform:translateY(0)}}.proof-art{height:237px;font:14px var(--font-instrument), Georgia, serif;color:#b2c6b5;background:radial-gradient(circle at 70% 30%,#46576c 0,#0000 32%),linear-gradient(150deg,#232d35 0%,#16201d 52%,#324439 100%);border:1px solid #ffffff17;border-radius:8px;flex:none;place-items:center;display:grid;position:relative}.proof-card:nth-child(2) .proof-art{background:radial-gradient(circle at 30% 65%,#55456d,#0000 35%),linear-gradient(150deg,#1d2128,#2b2937)}.proof-card:nth-child(3) .proof-art{background:radial-gradient(circle at 68% 30%,#7e674b,#0000 35%),linear-gradient(150deg,#2c2c30,#363528)}.proof-card:nth-child(4) .proof-art{background:radial-gradient(circle at 20% 30%,#425f68,#0000 35%),linear-gradient(150deg,#1b272b,#2e3937)}.proof-index{position:absolute;top:18px;left:18px}.proof-logo{object-fit:cover;border-radius:20px;width:98px;height:98px;display:block;box-shadow:0 12px 30px #00000047}.proof-lettermark{color:#fff;font:700 26px var(--font-hanken), Arial, sans-serif;background:linear-gradient(145deg,#678957,#233d2a);place-items:center;display:grid}.proof-card-copy{flex-direction:column;flex:1;padding:13px 8px 0;display:flex}.proof-card h3{margin:0 0 5px;font-size:16px}.proof-card p{color:var(--muted);margin:0;font-size:13px;line-height:1.45}.proof-status{color:var(--accent);margin-top:auto;padding-top:14px;font-size:11px}.section-heading-row{justify-content:space-between;align-items:baseline;gap:15px;display:flex}.section-heading-row h2{margin-bottom:10px}.section-heading-row h2 span{color:#63a776;font-size:11px}.section-heading-row h2 small{font:13px var(--font-hanken), Arial, sans-serif;color:var(--muted);letter-spacing:0}.github-section>p,.stack-section>p{color:var(--muted);margin:0 0 24px;font-size:14px;line-height:1.6}.activity-status{min-height:123px}.contribution-scroll{width:100%;padding:4px 0 8px;overflow-x:auto}.contribution-calendar{width:max-content}.contribution-months{height:18px;color:var(--muted);font-size:10px;position:relative}.contribution-months span{position:absolute;top:0}.contribution-graph{grid-template-rows:repeat(7,10px);grid-auto-columns:10px;grid-auto-flow:column;gap:2px;width:max-content;display:grid}.contribution-day{border-radius:2px;width:10px;height:10px}.contribution-day.level-0,.contribution-legend .level-0{background:#161b22}.contribution-day.level-1,.contribution-legend .level-1{background:#0e4429}.contribution-day.level-2,.contribution-legend .level-2{background:#006d32}.contribution-day.level-3,.contribution-legend .level-3{background:#26a641}.contribution-day.level-4,.contribution-legend .level-4{background:#39d353}.is-light .contribution-day.level-0,.is-light .contribution-legend .level-0{background:#ebedf0}.contribution-caption{color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:10px;margin-top:10px;font-size:12px;display:flex}.contribution-legend{align-items:center;gap:3px;display:flex}.contribution-legend i{border-radius:2px;width:10px;height:10px;display:inline-block}.contribution-legend i:first-child{margin-left:5px}.contribution-legend i:last-child{margin-right:5px}.stack-window{width:100%;overflow:hidden}.stack-track{width:max-content;animation:80s linear infinite stack-marquee;display:flex}.stack-window:hover .stack-track,.stack-window:focus-within .stack-track{animation-play-state:paused}.stack-group{gap:16px;padding-right:16px;display:flex}.stack-item{text-align:center;flex-direction:column;align-items:center;gap:8px;min-width:90px;padding:8px 0;transition:transform .3s;display:flex}.stack-item:hover{transform:scale(1.06)}.tech-icon{opacity:.72;filter:grayscale();place-items:center;width:40px;height:40px;transition:opacity .3s,filter .3s;display:grid}.tech-icon img{object-fit:contain;width:40px;height:40px;display:block}.stack-item[data-tech=nextjs] .tech-icon img{filter:invert()}.stack-item:hover .tech-icon{opacity:1;filter:grayscale(0)}.stack-item small{color:var(--muted);font-size:12px}@keyframes stack-marquee{to{transform:translate(-50%)}}.reads-section h2{opacity:.5;margin-bottom:18px}.read-row{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:18px;min-height:84px;padding:24px 0;text-decoration:none;transition:opacity .3s;display:flex}.read-title{opacity:.8;font-size:15px;font-weight:500;line-height:28px;transition:opacity .3s}.read-time{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;flex:none;font-size:12px}.read-row:is(:hover,:focus-visible) .read-title{opacity:1}.reads-list:hover .read-row:not(:hover),.reads-list:focus-within .read-row:not(:focus-visible):not(:hover){opacity:.4}.portfolio-contact{border-top:1px dashed var(--line);padding:55px 64px 40px}.portfolio-contact>p{color:var(--muted);margin:0 0 18px;font-size:15px}.contact-card{border:1px solid var(--line);background:var(--surface-raised);border-radius:12px;align-items:center;gap:14px;width:fit-content;margin-bottom:58px;padding:11px 16px;text-decoration:none;transition:transform .18s,border-color .18s;display:flex}.contact-card:hover{border-color:var(--muted);transform:translateY(-2px)}.contact-card span{color:#253528;background:#c9dccc;border-radius:50%;place-items:center;width:38px;height:38px;font:italic 13px Georgia,serif;display:grid}.contact-card strong{font-size:14px}.portfolio-contact h2{margin-bottom:8px}.contact-links{flex-wrap:wrap;gap:10px;margin-top:27px;display:flex}.contact-links a{text-decoration:none;display:inline-flex}.contact-links .button-face{min-height:38px;padding:8px 12px;font-size:14px;font-weight:500}.portfolio-footer{border-top:1px solid var(--line);color:var(--muted);justify-content:space-between;gap:20px;padding:23px 32px;font-size:12px;display:flex}.portfolio-footer a{align-items:center;gap:5px;text-decoration:none;display:inline-flex}.portfolio-footer a:hover{text-decoration:underline}@media (max-width:640px){.portfolio{width:100%}.portfolio:before,.portfolio:after{display:none}.portfolio-banner{height:235px}.portfolio-header,.portfolio-intro,.portfolio-section,.portfolio-contact{padding-left:22px;padding-right:22px}.portfolio-headline{flex-direction:column;align-items:flex-start}.portfolio-socials{justify-content:flex-start}.portfolio-intro{padding-bottom:48px}.read-row{flex-direction:column;align-items:flex-start;gap:4px}.proof-art{height:165px}.portfolio-footer{padding-left:22px;padding-right:22px}}@media (max-width:480px){.portfolio-banner span{font-size:17px}.portfolio-headline h1{font-size:34px}.portfolio-intro>p{font-size:16px}.proof-grid{grid-template-columns:1fr}.proof-art{height:185px}.section-heading-row h2 small{margin-top:5px;display:block}.contact-links .button-face>span{display:none}}@media (prefers-reduced-motion:reduce){.proof-card{opacity:1;animation:none}.stack-track{animation:none}}
