@property --bg{syntax: "<color>"; inherits: true; initial-value: #101010;}@property --panel{syntax: "<color>"; inherits: true; initial-value: #161616;}@property --panel-strong{syntax: "<color>"; inherits: true; initial-value: #1c1c1c;}@property --footer{syntax: "<color>"; inherits: true; initial-value: #090909;}@property --ink{syntax: "<color>"; inherits: true; initial-value: #050505;}@property --ink-solid{syntax: "<color>"; inherits: true; initial-value: #000000;}@property --text{syntax: "<color>"; inherits: true; initial-value: #f4f5f7;}@property --muted{syntax: "<color>"; inherits: true; initial-value: #c4c8d0;}@property --accent-green{syntax: "<color>"; inherits: true; initial-value: #c6c6c6;}@property --accent-pink{syntax: "<color>"; inherits: true; initial-value: #bdbdbd;}@property --accent-gold{syntax: "<color>"; inherits: true; initial-value: #b4b4b4;}@property --accent-orange{syntax: "<color>"; inherits: true; initial-value: #b0b0b0;}@property --text-strong{syntax: "<color>"; inherits: true; initial-value: #e9e9e9;}@property --muted-strong{syntax: "<color>"; inherits: true; initial-value: #d2d6dd;}@property --white{syntax: "<color>"; inherits: true; initial-value: #ffffff;}@property --accent{syntax: "<color>"; inherits: true; initial-value: #6c6c6c;}@property --accent-2{syntax: "<color>"; inherits: true; initial-value: #c6c6c6;}@property --bg-grad-1{syntax: "<color>"; inherits: true; initial-value: #121212;}@property --bg-grad-2{syntax: "<color>"; inherits: true; initial-value: #141414;}@property --bg-grad-3{syntax: "<color>"; inherits: true; initial-value: #161616;}@property --bg-grad-4{syntax: "<color>"; inherits: true; initial-value: #131313;}@property --bg-grad-5{syntax: "<color>"; inherits: true; initial-value: #101010;}@property --bg-grad-6{syntax: "<color>"; inherits: true; initial-value: #0f0f0f;}@property --glass-01{syntax: "<color>"; inherits: true; initial-value: rgba(255,255,255,.01);}@property --glass-03{syntax: "<color>"; inherits: true; initial-value: rgba(255,255,255,.03);}@property --glass-04{syntax: "<color>"; inherits: true; initial-value: rgba(255,255,255,.04);}@property --glass-05{syntax: "<color>"; inherits: true; initial-value: rgba(255,255,255,.05);}@property --glass-08{syntax: "<color>"; inherits: true; initial-value: rgba(255,255,255,.08);}@property --glass-10{syntax: "<color>"; inherits: true; initial-value: rgba(255,255,255,.1);}@property --glass-12{syntax: "<color>"; inherits: true; initial-value: rgba(255,255,255,.12);}@property --glass-15{syntax: "<color>"; inherits: true; initial-value: rgba(255,255,255,.15);}@property --glass-16{syntax: "<color>"; inherits: true; initial-value: rgba(255,255,255,.16);}@property --glass-20{syntax: "<color>"; inherits: true; initial-value: rgba(255,255,255,.2);}@property --glass-25{syntax: "<color>"; inherits: true; initial-value: rgba(255,255,255,.25);}@property --glass-55{syntax: "<color>"; inherits: true; initial-value: rgba(255,255,255,.55);}@property --ink-16{syntax: "<color>"; inherits: true; initial-value: rgba(0,0,0,.16);}@property --ink-25{syntax: "<color>"; inherits: true; initial-value: rgba(0,0,0,.25);}@property --ink-40{syntax: "<color>"; inherits: true; initial-value: rgba(0,0,0,.4);}@property --ink-45{syntax: "<color>"; inherits: true; initial-value: rgba(0,0,0,.45);}@property --accent-gold-30{syntax: "<color>"; inherits: true; initial-value: rgba(180,180,180,.3);}@property --accent-gold-25{syntax: "<color>"; inherits: true; initial-value: rgba(180,180,180,.25);}@property --accent-gold-12{syntax: "<color>"; inherits: true; initial-value: rgba(180,180,180,.12);}@property --accent-gold-10{syntax: "<color>"; inherits: true; initial-value: rgba(180,180,180,.1);}@property --accent-gold-05{syntax: "<color>"; inherits: true; initial-value: rgba(180,180,180,.05);}@property --accent-gold-20{syntax: "<color>"; inherits: true; initial-value: rgba(180,180,180,.2);}@property --accent-2-08{syntax: "<color>"; inherits: true; initial-value: rgba(200,200,200,.08);}@property --accent-2-16{syntax: "<color>"; inherits: true; initial-value: rgba(200,200,200,.16);}@property --accent-2-20{syntax: "<color>"; inherits: true; initial-value: rgba(200,200,200,.2);}@property --nav-link{syntax: "<color>"; inherits: true; initial-value: rgba(205,210,220,.75);}@property --muted-trail{syntax: "<color>"; inherits: true; initial-value: rgba(191,191,191,.35);}@property --line{syntax: "<color>"; inherits: true; initial-value: rgba(255,255,255,.28);}@property --ns0{syntax: "<color>"; inherits: true; initial-value: #7c7c81;}@property --ns1{syntax: "<color>"; inherits: true; initial-value: #7383af;}@property --ns2{syntax: "<color>"; inherits: true; initial-value: #9faac8;}@property --ns3{syntax: "<color>"; inherits: true; initial-value: #bcc5d6;}@property --ns4{syntax: "<color>"; inherits: true; initial-value: #a2adbf;}@property --ns5{syntax: "<color>"; inherits: true; initial-value: #a09bb7;}@property --ns6{syntax: "<color>"; inherits: true; initial-value: #7d8ab3;}@property --ns7{syntax: "<color>"; inherits: true; initial-value: #7c7c81;}@property --h2c0{syntax: "<color>"; inherits: true; initial-value: rgba(124,124,129,.1);}@property --h2c1{syntax: "<color>"; inherits: true; initial-value: rgba(115,131,175,.3);}@property --h2c2{syntax: "<color>"; inherits: true; initial-value: rgba(159,170,200,.4);}@property --h2c3{syntax: "<color>"; inherits: true; initial-value: rgba(188,197,214,.45);}@property --h2c4{syntax: "<color>"; inherits: true; initial-value: rgba(162,173,191,.38);}@property --h2c5{syntax: "<color>"; inherits: true; initial-value: rgba(160,155,183,.32);}@property --h2c6{syntax: "<color>"; inherits: true; initial-value: rgba(125,138,179,.28);}@property --h2c7{syntax: "<color>"; inherits: true; initial-value: rgba(124,124,129,.1);}@property --wmv{syntax: "<color>"; inherits: true; initial-value: #ffffff;}@property --h2v{syntax: "<color>"; inherits: true; initial-value: #ffffff;}@property --card-g0{syntax: "<color>"; inherits: true; initial-value: rgba(255,255,255,.1);}@property --card-g1{syntax: "<color>"; inherits: true; initial-value: rgba(255,255,255,.03);}@property --card-g2{syntax: "<color>"; inherits: true; initial-value: rgba(255,255,255,.06);}@property --card-in{syntax: "<color>"; inherits: true; initial-value: rgba(255,255,255,.04);}@property --card-in2{syntax: "<color>"; inherits: true; initial-value: rgba(255,255,255,.09);}@property --card-drop{syntax: "<color>"; inherits: true; initial-value: rgba(0,0,0,0);}@property --card-drop2{syntax: "<color>"; inherits: true; initial-value: rgba(0,0,0,0);}@property --card-fade{syntax: "<color>"; inherits: true; initial-value: rgba(6,6,6,.85);}@property --art-glow{syntax: "<color>"; inherits: true; initial-value: rgba(255,255,255,.16);}@property --art-a{syntax: "<color>"; inherits: true; initial-value: #181818;}@property --art-b{syntax: "<color>"; inherits: true; initial-value: #0a0a0a;}@property --panel-g0{syntax: "<color>"; inherits: true; initial-value: rgba(30,30,32,.78);}@property --panel-g1{syntax: "<color>"; inherits: true; initial-value: rgba(14,14,15,.86);}@property --panel-sh{syntax: "<color>"; inherits: true; initial-value: rgba(0,0,0,0);}@property --gb-g0{syntax: "<color>"; inherits: true; initial-value: rgba(255,255,255,.16);}@property --gb-g1{syntax: "<color>"; inherits: true; initial-value: rgba(255,255,255,.05);}@property --gb-g2{syntax: "<color>"; inherits: true; initial-value: rgba(255,255,255,.09);}@property --gb-in{syntax: "<color>"; inherits: true; initial-value: rgba(255,255,255,.05);}@property --gb-drop{syntax: "<color>"; inherits: true; initial-value: rgba(0,0,0,.35);}@property --wmf{syntax: "<number>"; inherits: true; initial-value: 0;}:root{--ns0: #7c7c81;--ns1: #7383af;--ns2: #9faac8;--ns3: #bcc5d6;--ns4: #a2adbf;--ns5: #a09bb7;--ns6: #7d8ab3;--ns7: #7c7c81;--nav-stops: var(--ns0) 0%, var(--ns1) 14%, var(--ns2) 28%, var(--ns3) 38%, var(--ns4) 50%, var(--ns5) 64%, var(--ns6) 80%, var(--ns7) 100%;--h2c0: rgba(124,124,129,.1);--h2c1: rgba(115,131,175,.3);--h2c2: rgba(159,170,200,.4);--h2c3: rgba(188,197,214,.45);--h2c4: rgba(162,173,191,.38);--h2c5: rgba(160,155,183,.32);--h2c6: rgba(125,138,179,.28);--h2c7: rgba(124,124,129,.1);--wmv: #ffffff;--h2v: #ffffff;--card-g0: rgba(255,255,255,.1);--card-g1: rgba(255,255,255,.03);--card-g2: rgba(255,255,255,.06);--card-in: rgba(255,255,255,.04);--card-in2: rgba(255,255,255,.09);--card-drop: rgba(0,0,0,0);--card-drop2: rgba(0,0,0,0);--card-fade: rgba(6,6,6,.85);--art-glow: rgba(255,255,255,.16);--art-a: #181818;--art-b: #0a0a0a;--panel-g0: rgba(30,30,32,.78);--panel-g1: rgba(14,14,15,.86);--panel-sh: rgba(0,0,0,0);--gb-g0: rgba(255,255,255,.16);--gb-g1: rgba(255,255,255,.05);--gb-g2: rgba(255,255,255,.09);--gb-in: rgba(255,255,255,.05);--gb-drop: rgba(0,0,0,.35);--wmf: 0;transition:--bg .6s ease,--panel .6s ease,--panel-strong .6s ease,--footer .6s ease,--ink .6s ease,--ink-solid .6s ease,--text .6s ease,--muted .6s ease,--accent-green .6s ease,--accent-pink .6s ease,--accent-gold .6s ease,--accent-orange .6s ease,--text-strong .6s ease,--muted-strong .6s ease,--white .6s ease,--accent .6s ease,--accent-2 .6s ease,--bg-grad-1 .6s ease,--bg-grad-2 .6s ease,--bg-grad-3 .6s ease,--bg-grad-4 .6s ease,--bg-grad-5 .6s ease,--bg-grad-6 .6s ease,--glass-01 .6s ease,--glass-03 .6s ease,--glass-04 .6s ease,--glass-05 .6s ease,--glass-08 .6s ease,--glass-10 .6s ease,--glass-12 .6s ease,--glass-15 .6s ease,--glass-16 .6s ease,--glass-20 .6s ease,--glass-25 .6s ease,--glass-55 .6s ease,--ink-16 .6s ease,--ink-25 .6s ease,--ink-40 .6s ease,--ink-45 .6s ease,--accent-gold-30 .6s ease,--accent-gold-25 .6s ease,--accent-gold-12 .6s ease,--accent-gold-10 .6s ease,--accent-gold-05 .6s ease,--accent-gold-20 .6s ease,--accent-2-08 .6s ease,--accent-2-16 .6s ease,--accent-2-20 .6s ease,--nav-link .6s ease,--muted-trail .6s ease,--line .6s ease,--ns0 .6s ease,--ns1 .6s ease,--ns2 .6s ease,--ns3 .6s ease,--ns4 .6s ease,--ns5 .6s ease,--ns6 .6s ease,--ns7 .6s ease,--h2c0 .6s ease,--h2c1 .6s ease,--h2c2 .6s ease,--h2c3 .6s ease,--h2c4 .6s ease,--h2c5 .6s ease,--h2c6 .6s ease,--h2c7 .6s ease,--wmv .6s ease,--h2v .6s ease,--card-g0 .6s ease,--card-g1 .6s ease,--card-g2 .6s ease,--card-in .6s ease,--card-in2 .6s ease,--card-drop .6s ease,--card-drop2 .6s ease,--card-fade .6s ease,--art-glow .6s ease,--art-a .6s ease,--art-b .6s ease,--panel-g0 .6s ease,--panel-g1 .6s ease,--panel-sh .6s ease,--gb-g0 .6s ease,--gb-g1 .6s ease,--gb-g2 .6s ease,--gb-in .6s ease,--gb-drop .6s ease,--wmf .6s ease;--bg: #101010;--panel: #161616;--panel-strong: #1c1c1c;--footer: #090909;--ink: #050505;--ink-solid: #000000;--text: #f4f5f7;--muted: #c4c8d0;--accent-green: #c6c6c6;--accent-pink: #bdbdbd;--accent-gold: #b4b4b4;--accent-orange: #b0b0b0;--text-strong: #e9e9e9;--muted-strong: #d2d6dd;--white: #ffffff;--accent: #6c6c6c;--accent-2: #c6c6c6;--bg-grad-1: #121212;--bg-grad-2: #141414;--bg-grad-3: #161616;--bg-grad-4: #131313;--bg-grad-5: #101010;--bg-grad-6: #0f0f0f;--bg-layer-mid: color-mix(in srgb, var(--bg) 82%, #ffffff 18%);--bg-layer-back: color-mix(in srgb, var(--bg) 70%, #ffffff 30%);--glass-01: rgba(255,255,255,.01);--glass-03: rgba(255,255,255,.03);--glass-04: rgba(255,255,255,.04);--glass-05: rgba(255,255,255,.05);--glass-08: rgba(255,255,255,.08);--glass-10: rgba(255,255,255,.1);--glass-12: rgba(255,255,255,.12);--glass-15: rgba(255,255,255,.15);--glass-16: rgba(255,255,255,.16);--glass-20: rgba(255,255,255,.2);--glass-25: rgba(255,255,255,.25);--glass-55: rgba(255,255,255,.55);--ink-16: rgba(0,0,0,.16);--ink-25: rgba(0,0,0,.25);--ink-40: rgba(0,0,0,.4);--ink-45: rgba(0,0,0,.45);--accent-gold-30: rgba(180, 180, 180, .3);--accent-gold-25: rgba(180, 180, 180, .25);--accent-gold-12: rgba(180, 180, 180, .12);--accent-gold-10: rgba(180, 180, 180, .1);--accent-gold-05: rgba(180, 180, 180, .05);--accent-gold-20: rgba(180, 180, 180, .2);--accent-2-08: rgba(200, 200, 200, .08);--accent-2-16: rgba(200, 200, 200, .16);--accent-2-20: rgba(200, 200, 200, .2);--nav-link: rgba(205,210,220,.75);--muted-trail: rgba(191,191,191,.35);--line: rgba(255, 255, 255, .28);--border: var(--glass-08);--radius: calc(18px * var(--s, 1));--portrait-opacity: .8;--text-body-size: clamp(1rem, .45vw + .85rem, 1.35rem);--text-body-line: 1.6;--text-body-tracking: .01em;--text-heading-line: 1.2;--text-heading-tracking: -.01em;--text-label-size: clamp(.78rem, .35vw + .65rem, 1rem);--text-label-line: 1.45;--text-label-tracking: .08em}*,*:before,*:after{box-sizing:border-box}html{font-size:calc(16px * var(--s, 1));background:var(--bg);scroll-behavior:smooth;scrollbar-width:none}html::-webkit-scrollbar{display:none}body{margin:0;font-family:Inter,-apple-system,system-ui,sans-serif;color:var(--text);background:var(--bg);min-height:100vh;overflow-x:hidden;position:relative;cursor:url(/assets/cursor/arrow.svg) 4 4,auto}a{color:inherit;text-decoration:none;cursor:url(/assets/cursor/hand.svg) 6 2,pointer}button,input,select,textarea,.Link__github,.Link__linkedin,.Link__mail{cursor:url(/assets/cursor/hand.svg) 6 2,pointer}img{max-width:100%;display:block}.bg-gradient,.bg-noise{position:fixed;inset:0;width:100%;pointer-events:none}.bg-gradient{height:100%;background:var(--bg);z-index:-3}.bg-gradient:after{content:"";position:absolute;inset:0;background:radial-gradient(ellipse 120% 100% at 50% 45%,transparent 55%,rgba(0,0,0,.1) 100%);pointer-events:none}.bg-noise{z-index:-2;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160' viewBox='0 0 160 160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.08'/%3E%3C/svg%3E");mix-blend-mode:soft-light}.section{position:relative;z-index:1;padding:clamp(calc(80px * var(--s, 1)),10vw,calc(135px * var(--s, 1))) 0}.container{width:min(calc(1200px * var(--s, 1)),92vw);margin:0 auto}.section-head{margin-bottom:calc(32px * var(--s, 1));z-index:3;width:fit-content;max-width:100%;text-align:left}.timeline .section-head{margin-bottom:calc(32px * var(--s, 1))}.section-subtitle{font-size:.82rem;text-transform:uppercase;letter-spacing:var(--text-label-tracking);font-weight:600;line-height:var(--text-label-line);margin:calc(40px * var(--s, 1)) 0 calc(8px * var(--s, 1));color:var(--muted-strong);position:relative}.section-subtitle:after{content:"";display:block;height:1px;background:linear-gradient(90deg,transparent 0%,var(--line) 5%,var(--line) 95%,transparent 100%);width:100%;margin:calc(8px * var(--s, 1)) 0 calc(14px * var(--s, 1))}.section-subtitle+*{margin-left:0;margin-right:0}.subsection-block+.subsection-block{margin-top:calc(40px * var(--s, 1))}.section--journey .subsection-block+.subsection-block{margin-top:0}.subsection-block .section-subtitle{margin-top:calc(40px * var(--s, 1))}.subsection-block .lede:last-child,.subsection-block .body:last-child{margin-bottom:0}.section p.lede,.section p.body{display:block;width:fit-content;max-width:100%;padding:calc(6px * var(--s, 1)) calc(10px * var(--s, 1));border-radius:calc(10px * var(--s, 1));background:color-mix(in srgb,var(--bg) 32%,transparent);box-shadow:0 0 calc(18px * var(--s, 1)) calc(10px * var(--s, 1)) color-mix(in srgb,var(--bg) 35%,transparent);box-decoration-break:clone;-webkit-box-decoration-break:clone}.focus-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:clamp(calc(24px * var(--s, 1)),4vw,calc(40px * var(--s, 1)));row-gap:0;margin-top:0}.focus-item .section-subtitle{margin-top:calc(40px * var(--s, 1))}.focus-item .lede:last-child{margin-bottom:0}.subsection{margin-left:0;margin-right:0}.lang-block{margin-top:calc(16px * var(--s, 1))}.lang-note{color:var(--muted)}.eyebrow{text-transform:none;letter-spacing:.01em;font-family:Inter,system-ui,sans-serif;font-weight:500;color:var(--accent);font-size:var(--text-label-size);line-height:var(--text-label-line);margin:0 0 calc(12px * var(--s, 1))}.eyebrow--center{text-align:center}.eyebrow{background-image:linear-gradient(100deg,var(--nav-stops));background-size:200% 100%;background-position:0% 50%;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;animation:nav-link-shimmer 2.6s steps(31) infinite}.section--about .section-subtitle{color:#4a3bff8c}.section--journey .section-subtitle{color:#6eff528c}.section--focus .section-subtitle{color:#ff41508c}.section--work .section-subtitle{color:#ffc14d8c}.section--skills .section-subtitle{color:#00bae68c}.section--contact .section-subtitle{color:#ff61d98c}h1,h2,h3,.eyebrow,.nav-links a{-webkit-user-select:none;user-select:none}h1,h2,h3{font-family:Bricolage Grotesque,Inter,system-ui,sans-serif;font-variation-settings:"opsz" 96;margin:0;line-height:var(--text-heading-line);letter-spacing:var(--text-heading-tracking)}h1{font-size:clamp(2.2rem,3.6vw,3.2rem);line-height:1.1}h2{font-size:clamp(1.8rem,2.6vw,2.4rem)}.section-head h2{color:transparent;background:linear-gradient(100deg,var(--h2c0) 0%,var(--h2c1) 14%,var(--h2c2) 28%,var(--h2c3) 38%,var(--h2c4) 50%,var(--h2c5) 64%,var(--h2c6) 80%,var(--h2c7) 100%) 0% 50% / 200% 100% repeat-x,linear-gradient(180deg,color-mix(in srgb,var(--h2v) 15%,transparent),color-mix(in srgb,var(--h2v) 17.4%,transparent),color-mix(in srgb,var(--h2v) 20.3%,transparent),color-mix(in srgb,var(--h2v) 23.6%,transparent),color-mix(in srgb,var(--h2v) 27.4%,transparent),color-mix(in srgb,var(--h2v) 31.8%,transparent),color-mix(in srgb,var(--h2v) 37%,transparent),color-mix(in srgb,var(--h2v) 43%,transparent),color-mix(in srgb,var(--h2v) 50%,transparent) 28%,color-mix(in srgb,var(--h2v) 34%,transparent) 58%,color-mix(in srgb,var(--h2v) 14%,transparent));-webkit-background-clip:text;background-clip:text;animation:nav-link-shimmer 9s steps(108) infinite}h3{font-size:clamp(1.2rem,2vw,1.5rem)}.lede{color:var(--muted);font-size:var(--text-body-size);line-height:var(--text-body-line);letter-spacing:var(--text-body-tracking);margin:0 0 calc(12px * var(--s, 1))}.body{color:var(--muted);font-size:var(--text-body-size);line-height:var(--text-body-line);letter-spacing:var(--text-body-tracking)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:calc(8px * var(--s, 1));padding:.8em 1.1em;border-radius:calc(6px * var(--s, 1));font-weight:600;font-size:.9rem;border:none;color:#000;background:#fff;box-shadow:#32325d40 0 calc(2px * var(--s, 1)) calc(5px * var(--s, 1)) -1px,#0000004d 0 1px calc(3px * var(--s, 1)) -1px;transition:transform .2s ease-in-out,background .2s ease-in-out,color .2s ease-in-out;cursor:url(/assets/cursor/hand.svg) 6 2,pointer;position:relative}.btn:hover{transform:scale(1.1);background:#000;color:#fff}.btn-primary{background:inherit;color:inherit;border:inherit}.btn-ghost{background:inherit;border:inherit}.btn:focus-visible{outline:calc(2px * var(--s, 1)) solid #000000;outline-offset:calc(2px * var(--s, 1))}.Link__github{padding:.8em;outline:none;border:none;background:var(--accent);box-shadow:#32325d40 0 calc(2px * var(--s, 1)) calc(5px * var(--s, 1)) -1px,#0000004d 0 1px calc(3px * var(--s, 1)) -1px;transition:transform .2s ease-in-out,background-color .2s ease-in-out;display:inline-flex;align-items:center;justify-content:center;min-width:calc(56px * var(--s, 1));height:calc(56px * var(--s, 1))}.Link__github:hover{cursor:url(/assets/cursor/hand.svg) 6 2,pointer;transform:scale(1.1);background-color:#171515}.Link__github .github{fill:#000;transition:fill .2s ease-in-out}.Link__github:hover .github{fill:#fff}.Link__linkedin{padding:.8em 1em;outline:none;border:none;background:var(--accent);color:#000;font-weight:700;text-transform:lowercase;letter-spacing:.04em;box-shadow:#32325d40 0 calc(2px * var(--s, 1)) calc(5px * var(--s, 1)) -1px,#0000004d 0 1px calc(3px * var(--s, 1)) -1px;transition:transform .2s ease-in-out,background-color .2s ease-in-out,color .2s ease-in-out;display:inline-flex;align-items:center;justify-content:center;min-width:calc(56px * var(--s, 1));height:calc(56px * var(--s, 1))}.Link__linkedin:hover{cursor:url(/assets/cursor/hand.svg) 6 2,pointer;transform:scale(1.1);background-color:#0a66c2;color:#fff}.Link__mail{padding:.8em;outline:none;border:none;background:var(--accent);color:#000;box-shadow:#32325d40 0 calc(2px * var(--s, 1)) calc(5px * var(--s, 1)) -1px,#0000004d 0 1px calc(3px * var(--s, 1)) -1px;transition:transform .2s ease-in-out,background-color .2s ease-in-out,color .2s ease-in-out;display:inline-flex;align-items:center;justify-content:center;min-width:calc(56px * var(--s, 1));height:calc(56px * var(--s, 1))}.Link__mail:hover{cursor:url(/assets/cursor/hand.svg) 6 2,pointer;transform:scale(1.1);background-color:#7fd6ff;color:#000}.Link__mail .mail-icon{width:calc(24px * var(--s, 1));height:calc(28px * var(--s, 1));fill:currentColor;transition:fill .2s ease-in-out}.cta-row{display:flex;gap:calc(12px * var(--s, 1));flex-wrap:wrap;margin:calc(20px * var(--s, 1)) 0;justify-content:flex-start}.chip,.pill{display:inline-flex;align-items:center;gap:calc(6px * var(--s, 1));padding:calc(8px * var(--s, 1)) calc(12px * var(--s, 1));border-radius:calc(999px * var(--s, 1));background:var(--glass-05);border:1px solid var(--border);color:var(--text);font-size:.92rem}.chip-row{display:flex;flex-wrap:wrap;gap:calc(8px * var(--s, 1))}.pills{display:flex;flex-wrap:wrap;gap:calc(10px * var(--s, 1))}.pill-group h3{margin-bottom:calc(8px * var(--s, 1))}.pill-groups{display:grid;gap:calc(22px * var(--s, 1))}.navbar{position:fixed;top:0;left:50%;transform:translate(-50%);transition:none;width:100%;max-width:100%;z-index:10;backdrop-filter:none;-webkit-backdrop-filter:none;background:transparent;border:none;border-radius:0;padding:calc(8px * var(--s, 1)) calc(16px * var(--s, 1))}.navbar:after{display:none}.navbar:before{display:none}.nav-inner{width:100%;display:flex;align-items:center;justify-content:center;gap:calc(18px * var(--s, 1));padding:calc(4px * var(--s, 1)) 0}.nav-toggle{display:none;align-items:center;gap:calc(10px * var(--s, 1));padding:calc(10px * var(--s, 1));border:none;border-radius:calc(999px * var(--s, 1));background:color-mix(in srgb,var(--bg) 32%,transparent);box-shadow:0 0 calc(18px * var(--s, 1)) calc(10px * var(--s, 1)) color-mix(in srgb,var(--bg) 35%,transparent);color:var(--nav-link);font-family:inherit;font-size:.85rem;letter-spacing:.06em;text-transform:uppercase}.nav-toggle__icon{width:calc(26px * var(--s, 1));height:calc(16px * var(--s, 1));position:relative}.nav-toggle__icon:before,.nav-toggle__icon:after,.nav-toggle__icon span{content:"";position:absolute;left:0;right:0;height:calc(3px * var(--s, 1));background-image:linear-gradient(120deg,var(--white) 0%,#5f5f5f 35%,#9a9a9a 70%,var(--white) 100%);background-size:250% 250%;border-radius:calc(999px * var(--s, 1));transition:transform .2s ease,opacity .2s ease;animation:name-sheen 6s ease-in-out infinite}.nav-toggle__icon:before{top:0}.nav-toggle__icon:after{bottom:0}.nav-toggle__icon span{top:50%;transform:translateY(-50%)}.navbar.is-open .nav-toggle__icon:before{transform:translateY(calc(6.5px * var(--s, 1))) rotate(45deg)}.navbar.is-open .nav-toggle__icon:after{transform:translateY(calc(-6.5px * var(--s, 1))) rotate(-45deg)}.navbar.is-open .nav-toggle__icon span{opacity:0}.nav-links a{padding:calc(8px * var(--s, 1)) calc(12px * var(--s, 1));border-radius:calc(12px * var(--s, 1))}.brand{display:flex;align-items:center;gap:calc(10px * var(--s, 1));font-weight:700}.brand-mark{width:calc(36px * var(--s, 1));height:calc(36px * var(--s, 1));border-radius:calc(12px * var(--s, 1));background:linear-gradient(135deg,var(--accent),var(--accent-2));display:grid;place-items:center;color:var(--ink);font-weight:800;letter-spacing:.05em}.brand-name{font-size:.95rem;color:var(--muted)}.nav-links{display:flex;align-items:center;justify-content:center;gap:calc(16px * var(--s, 1));flex-wrap:wrap;font-weight:600;width:100%}.navbar.nav-docked{width:auto;left:calc(100% - calc(24px * var(--s, 1)));top:50%;transform:translate(-100%,-50%);padding:calc(10px * var(--s, 1)) calc(12px * var(--s, 1))}.navbar.nav-docked .nav-inner{justify-content:flex-start}.navbar.nav-docked .nav-links{flex-direction:column;align-items:flex-end;gap:calc(10px * var(--s, 1));width:auto}.nav-link--top{display:none!important;color:#fff}.navbar.nav-docked .nav-link--top{display:inline-block!important}.nav-links a{font-family:Inter,system-ui,sans-serif;font-weight:500;cursor:url(/assets/cursor/hand.svg) 6 2,pointer;padding:calc(8px * var(--s, 1)) calc(12px * var(--s, 1));border-radius:calc(10px * var(--s, 1));transition:transform .2s ease-in-out,background .25s ease,color .25s ease;color:var(--nav-link);position:relative;display:inline-block;white-space:nowrap;line-height:var(--text-label-line);letter-spacing:var(--text-label-tracking)}.nav-links a span{display:inline-block}.nav-links a:hover,.nav-links a.is-active{transform:scale(1.1)}@property --nav-p{syntax: "<number>"; inherits: true; initial-value: 0;}.nav-links{--nav-tile: calc(600px * var(--s, 1));animation:nav-shimmer 8s steps(96) infinite}.nav-links a span{background-image:linear-gradient(100deg,var(--nav-stops));background-size:var(--nav-tile) 100%;background-position:calc(var(--nav-p) * var(--nav-tile) - var(--ox, 0px)) 0;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;opacity:.5;transition:opacity .35s ease-out}.navbar.nav-docked .nav-links a span{background-image:linear-gradient(180deg,var(--nav-stops));background-size:100% var(--nav-tile);background-position:0 calc(var(--nav-p) * var(--nav-tile) - var(--oy, 0px))}.nav-links a:hover span,.nav-links a.is-active span,.navbar.nav-docked .nav-links a:hover span,.navbar.nav-docked .nav-links a.is-active span{background-image:linear-gradient(100deg,var(--nav-stops));background-size:200% 100%;background-position:0% 50%;animation:nav-link-shimmer 2.6s steps(31) infinite;opacity:1}.navbar .nav-links:has(a:hover) a:not(:hover) span,.navbar .nav-links:has(a.is-active) a:not(.is-active):not(:hover) span{opacity:.3}@keyframes nav-link-shimmer{0%{background-position:0% 50%}to{background-position:200% 50%}}@keyframes hero-shimmer{0%{background-position-x:0%}to{background-position-x:200%}}@keyframes nav-shimmer{0%{--nav-p: 0}to{--nav-p: 1}}@media(prefers-reduced-motion:reduce){.nav-links,.nav-links a:hover span,.nav-links a.is-active span{animation:none}}.navbar.nav-docked .nav-links a:hover,.navbar.nav-docked .nav-links a:hover.is-active{color:var(--nav-hover-color)}.nav-link--focus:hover,.nav-link--focus.is-active{color:#ff4150}.nav-link--top:hover,.nav-link--top.is-active{color:#fff}.nav-link--skills:hover,.nav-link--skills.is-active{color:#00bae6}.nav-link--journey:hover,.nav-link--journey.is-active{color:#6eff52}.nav-link--work:hover,.nav-link--work.is-active{color:#ffc14d}.nav-link--about:hover,.nav-link--about.is-active{color:#4a3bff}.nav-link--contact:hover,.nav-link--contact.is-active{color:#ff61d9}.nav-links a:after{content:"";position:absolute;left:calc(10px * var(--s, 1));right:calc(10px * var(--s, 1));bottom:calc(6px * var(--s, 1));height:1px;background:linear-gradient(90deg,transparent,var(--accent-gold-25),var(--muted-trail),transparent);opacity:0;transform:scaleX(.5);transition:opacity .25s ease,transform .25s ease}@font-face{font-family:BricoJ;src:url(/assets/hero/bricoJ.woff2) format("woff2");font-weight:700;unicode-range:U+004A;font-display:swap}.pf{--pf-brand: "BricoJ", "Bricolage Grotesque", Inter, system-ui, sans-serif;color:#f1f1f1}.pf-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}body.pf-hero-click{cursor:url(/assets/cursor/hand.svg) 6 2,pointer}.pf-fx{position:fixed;inset:0;z-index:0;pointer-events:none}.pf-person{position:absolute;z-index:2;left:calc(40.3vw - (104svh * 1200 / 1120) / 2);top:3svh;height:104svh;width:calc(104svh * 1200 / 1120);transform-origin:50% 62%;transform:rotate(2.5deg);will-change:transform}.pf-person img{display:block;width:100%;height:100%;max-width:none;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.pf-person:after{content:"";position:absolute;left:0;right:0;bottom:0;height:36%;background:linear-gradient(to bottom,#10101000,#101010 80%)}.pf-word{position:absolute;z-index:3;top:38svh;font-family:var(--pf-brand);font-weight:700;font-variation-settings:"opsz" 96;font-size:clamp(3rem,9vw,12rem);line-height:1;letter-spacing:-.035em;white-space:nowrap;transform-origin:0 0;will-change:transform,opacity}.pf-word--j{right:calc(100% - (40.3vw - 13svh - calc(50px * var(--s, 1))))}.pf-word--b{left:calc(40.3vw + 22.6svh + calc(50px * var(--s, 1)))}.pf-ch{display:inline-block}.pf-ch i{display:inline-block;font-style:normal;opacity:0;transform:translateY(.28em);transition:transform 1.3s cubic-bezier(.16,1,.3,1),opacity 1s ease}.pf-ready .pf-ch i{opacity:1;transform:none}.pf-mhero{display:none}.pf{--pf-col: 31.5vw}.pf-page{display:grid;grid-template-columns:var(--pf-col) minmax(0,1fr)}.pf-page.pf-expanded{grid-template-columns:minmax(0,1fr) minmax(0,0fr)}.pf-left{overflow:clip;position:relative;z-index:1}.pf-me{display:grid;grid-template-columns:var(--pf-col) 1fr;min-height:100%}.pf-id{position:fixed;top:0;left:0;width:var(--pf-col);box-sizing:border-box;height:100svh;padding:clamp(calc(24px * var(--s, 1)),5svh,calc(48px * var(--s, 1))) clamp(calc(20px * var(--s, 1)),2vw,calc(32px * var(--s, 1))) calc(24px * var(--s, 1)) clamp(calc(24px * var(--s, 1)),4vw,calc(64px * var(--s, 1)));display:flex;flex-direction:column}.pf-slot{visibility:hidden}.pf-slot-photo{--w: calc(33.333vw - clamp(calc(24px * var(--s, 1)), 4vw, calc(64px * var(--s, 1))) - clamp(calc(20px * var(--s, 1)), 2vw, calc(32px * var(--s, 1)))) ;display:block;width:calc(var(--w) * 1.16);margin-left:calc(var(--w) * -.21);aspect-ratio:1200 / 1120;flex:none}.pf-slot-photo img{width:100%;display:block;max-width:none}.pf-slot-name{display:block;font-family:var(--pf-brand);font-weight:700;font-variation-settings:"opsz" 96;font-size:calc((var(--pf-col) - clamp(calc(24px * var(--s, 1)),4vw,calc(64px * var(--s, 1))) - clamp(calc(20px * var(--s, 1)),2vw,calc(32px * var(--s, 1)))) / 6.43);line-height:1;letter-spacing:-.035em;white-space:nowrap;margin-top:-5.2svh;flex:none}.pf-slot-name .pf-slot{display:inline-block}.pf-gap{display:inline-block;width:.28em}.pf-intro{margin-top:2.4svh;opacity:0;will-change:opacity,transform}.pf-blurb{margin:0;font-size:1rem;line-height:1.55;color:#8c8c8c}.pf-quick{display:flex;gap:calc(18px * var(--s, 1));flex-wrap:wrap;margin-top:calc(18px * var(--s, 1));font-size:.92rem}.pf-quick a{color:#6e6e6e;border-bottom:1px solid transparent;transition:color .2s,border-color .2s}.pf-quick a:hover{color:#f1f1f1;border-color:#fff6}.pf-intro-body{display:grid}.pf-intro-body>*{grid-area:1 / 1}.pf-intro-say{transition:opacity .5s ease}.pf-intro-short{transition:opacity .9s cubic-bezier(.25,.46,.45,.94) .1s}.pf-swapping .pf-intro-short,.pf-swapping .pf-intro-say{opacity:0;pointer-events:none;transition:opacity .22s linear}.pf-intro-say,.pf-expanded .pf-intro-short{visibility:hidden;pointer-events:none}.pf-expanded .pf-intro-say{visibility:visible;pointer-events:auto}.pf-intro-say .ct-quote{margin:0;max-width:none}.pf-intro-say .ct-quote blockquote{font-size:1.15rem;line-height:1.45;color:#9a9a9a}.pf-intro-say .ct-quote figcaption{font-size:.9rem;color:#6e6e6e}.pf-say{position:relative;font-family:Inter,system-ui,sans-serif;font-weight:300;font-size:clamp(1.3rem,1.9vw,1.9rem);line-height:1.12;letter-spacing:-.02em;color:#8c8c8c}.pf-roll{display:inline-block;height:1.12em;overflow:hidden;vertical-align:top;transition:width .7s cubic-bezier(.16,1,.3,1)}.pf-col{display:block;transition:transform 1.1s cubic-bezier(.76,0,.24,1)}.pf-col span{display:block;height:1.12em;margin-bottom:.3em;white-space:nowrap;font-weight:400;color:#e6e6e6}.pf-measure{position:absolute;visibility:hidden;pointer-events:none;white-space:nowrap;font-weight:400}.pf-measure span{display:inline-block}.pf-toggle{margin-top:calc(28px * var(--s, 1));align-self:flex-start;display:inline-flex;align-items:center;gap:calc(10px * var(--s, 1));font:inherit;font-weight:500;font-size:.95rem;color:#6e6e6e;background:none;padding:0 0 calc(4px * var(--s, 1));border:0;border-bottom:1px solid rgba(255,255,255,.14);border-radius:0;transition:border-color .25s,color .25s;opacity:0}.pf-toggle:hover{color:var(--text);border-color:var(--text)}.pf-toggle span{transition:opacity .28s linear,transform .28s cubic-bezier(0,0,.2,1)}.pf-toggle.pf-swap span,.pf-toggle.pf-swap i{opacity:0;transform:translateY(calc(5px * var(--s, 1)));transition:opacity .16s linear,transform .16s cubic-bezier(.4,0,1,1)}.pf-toggle i{font-style:normal;transition:transform .35s cubic-bezier(0,0,.2,1),opacity .28s linear}.pf-toggle:hover i{transform:translate(calc(4px * var(--s, 1)))}.pf-expanded .pf-toggle:hover i{transform:none}.pf-all{grid-column:2;padding:clamp(calc(40px * var(--s, 1)),8svh,calc(96px * var(--s, 1))) 5vw calc(120px * var(--s, 1)) 3vw;opacity:0;transform:translateY(calc(14px * var(--s, 1)));pointer-events:none;transition:opacity .18s cubic-bezier(.4,0,1,1),transform .18s cubic-bezier(.4,0,1,1)}.pf-all.pf-show{opacity:1;transform:none;pointer-events:auto;transition:opacity .5s cubic-bezier(0,0,.4,1),transform .7s cubic-bezier(.25,.46,.45,.94)}.pf-m-head{display:none}.pf-all-grid{display:grid;grid-template-columns:1.1fr 1fr;gap:5vw;max-width:calc(1100px * var(--s, 1))}.pf-all h2{font-size:clamp(2rem,3.6vw,3.4rem);line-height:1.05;margin-bottom:calc(28px * var(--s, 1))}.pf-all p{font-size:1.12rem;line-height:1.62;color:#cfcfcf;max-width:52ch;margin:0 0 calc(20px * var(--s, 1))}.pf-all .pf-lbl{font-weight:500;font-size:.85rem;color:#6e6e6e;margin:0 0 calc(10px * var(--s, 1))}.pf-links{display:flex;flex-wrap:wrap;gap:calc(8px * var(--s, 1)) calc(22px * var(--s, 1));margin-top:calc(38px * var(--s, 1));padding-top:calc(22px * var(--s, 1));border-top:1px solid rgba(255,255,255,.1);font-size:1rem}.pf-links a{color:#9a9a9a;border-bottom:1px solid transparent;transition:color .2s,border-color .2s}.pf-links a:hover{color:#f1f1f1;border-color:#fff6}.pf-cv{display:inline-flex;gap:calc(10px * var(--s, 1));margin-top:calc(22px * var(--s, 1));font-weight:500;border-bottom:1px solid rgba(255,255,255,.35);padding-bottom:calc(2px * var(--s, 1))}.pf-cv:hover{border-color:#fff}.pf-facts{margin:0 0 calc(38px * var(--s, 1))}.pf-facts div{display:flex;align-items:baseline;gap:calc(10px * var(--s, 1));padding:calc(9px * var(--s, 1)) 0;font-size:1rem}.pf-facts dt{color:#6e6e6e;white-space:nowrap}.pf-facts dd{margin:0;color:#8c8c8c;text-align:right}.pf-facts i{flex:1;border-bottom:1px dotted rgba(255,255,255,.16);transform:translateY(calc(-4px * var(--s, 1)))}.pf-all .pf-stack{display:flex;flex-wrap:wrap;gap:calc(28px * var(--s, 1)) calc(30px * var(--s, 1))}.pf-all .pf-stack .pf-lbl{font:500 .72rem/1 ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.12em;text-transform:uppercase}.pf-stack ul{list-style:none;margin:calc(12px * var(--s, 1)) 0 0;padding:0;display:grid;gap:calc(7px * var(--s, 1));font-size:.95rem;color:#8c8c8c;white-space:nowrap}.pf-right{position:relative;z-index:1;padding:100svh clamp(calc(24px * var(--s, 1)),5vw,calc(90px * var(--s, 1))) 0 clamp(calc(8px * var(--s, 1)),2vw,calc(40px * var(--s, 1)));min-width:0;will-change:transform,opacity;transition:transform .85s cubic-bezier(.25,.46,.45,.94),opacity .55s cubic-bezier(0,0,.4,1)}.pf-inner{width:calc(100vw - var(--pf-col) - clamp(calc(24px * var(--s, 1)),5vw,calc(90px * var(--s, 1))) - clamp(calc(8px * var(--s, 1)),2vw,calc(40px * var(--s, 1))));max-width:calc(960px * var(--s, 1))}.pf-page.pf-leaving .pf-right{transform:translate(40vw);opacity:0;pointer-events:none;transition:transform .42s cubic-bezier(.4,0,1,1),opacity .3s linear .1s}.pf-page.pf-expanded .pf-right{display:none}.pf-inner .section{padding:clamp(calc(36px * var(--s, 1)),8svh,calc(80px * var(--s, 1))) 0}.pf-inner .section .container{width:100%;max-width:none;margin:0;padding:0}.pf-sub{font-weight:500;font-size:.85rem;color:#9b9b9b;margin:calc(46px * var(--s, 1)) 0 calc(22px * var(--s, 1))}.pf-sub:first-of-type{margin-top:0}.pf-rows{display:grid;gap:calc(34px * var(--s, 1))}.pf-rows:hover .pf-row{opacity:.5}.pf-rows .pf-row:hover{opacity:1}.pf-row{transition:opacity .3s}.pf-row h3{font-size:1.4rem;font-weight:650;letter-spacing:0;font-variation-settings:"opsz" 36;line-height:1.2}.pf-row__meta{margin:calc(5px * var(--s, 1)) 0 0;color:#9b9b9b;font-size:.98rem}.pf-row__desc{margin:calc(10px * var(--s, 1)) 0 0;color:#b9b9b9;line-height:1.55;max-width:60ch;font-size:1rem}.pf-row__tags{margin:calc(10px * var(--s, 1)) 0 0;color:#666;font-size:.9rem;font-weight:500}.pf-reveal{opacity:0;transform:translateY(calc(18px * var(--s, 1)));transition:opacity .5s ease,transform .5s ease}.pf-reveal.pf-visible{opacity:1;transform:none}.proj-row--cats.pf-reveal{transition-delay:.08s}@keyframes pf-drift{0%{transform:translateY(0)}to{transform:translateY(var(--pf-drift, 0px))}}.pf-drifting .pf-inner{animation:pf-drift linear both;animation-timeline:scroll(root block)}@media(max-width:900px){.pf-fx,.pf-mhero{display:none}.pf-page,.pf-page.pf-expanded{grid-template-columns:minmax(0,1fr)}.pf-left{overflow:visible;z-index:auto}.pf-me{grid-template-columns:minmax(0,1fr)}.pf-id{position:static;width:auto;height:auto;padding:calc(30px * var(--s, 1)) calc(24px * var(--s, 1))}.pf-all{grid-column:auto}.pf-slot{visibility:visible}.pf-slot-photo{position:relative;width:100%;margin:0}.pf-slot-photo:after{content:"";position:absolute;left:0;right:0;bottom:0;height:36%;background:linear-gradient(to bottom,#10101000,#101010 80%)}.pf-slot-name{position:relative;z-index:1;font-size:calc((100vw - calc(48px * var(--s, 1))) / 6.5);margin-top:-9vw}.pf-intro,.pf-toggle,.pf-inner{opacity:1!important;transform:none!important;pointer-events:auto!important}.pf-toggle{margin-top:calc(26px * var(--s, 1))}.pf-expanded .pf-intro-short{visibility:visible;pointer-events:auto}.pf-expanded .pf-intro-say{visibility:hidden;pointer-events:none}.pf-all{position:fixed;inset:0;z-index:200;overflow-y:auto;overscroll-behavior:contain;background:var(--bg);padding:calc(30px * var(--s, 1)) calc(24px * var(--s, 1)) calc(60px * var(--s, 1));transform:none;visibility:hidden;transition:opacity .35s ease,visibility 0s .35s}.pf-all.pf-show{visibility:visible;transition:opacity .35s ease}.pf-m-head{display:block;margin-bottom:calc(40px * var(--s, 1))}.pf-m-name{display:block;font-family:var(--pf-brand);font-weight:700;font-variation-settings:"opsz" 96;font-size:calc((100vw - calc(48px * var(--s, 1))) / 6.5);line-height:1;letter-spacing:-.035em;white-space:nowrap;color:var(--text)}.pf-m-head .pf-toggle{margin-top:calc(18px * var(--s, 1))}html.pf-lock{overflow:hidden}.pf-all-grid{grid-template-columns:1fr;gap:calc(30px * var(--s, 1))}.pf-right{padding:0 calc(24px * var(--s, 1));will-change:auto}.pf-inner{width:auto;animation:none!important}.pf-page.pf-expanded .pf-right{display:block}html{scrollbar-width:auto}html::-webkit-scrollbar{display:initial}.scroll-track{display:none}}@media(prefers-reduced-motion:reduce){.pf-ch i{transition:none}.pf-reveal{opacity:1;transform:none;transition:none}}.hero-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(calc(280px * var(--s, 1)),1fr));align-items:center;gap:clamp(calc(28px * var(--s, 1)),4vw,calc(60px * var(--s, 1)));justify-items:center;transform:translateY(calc(-1 * var(--hero-shift)))}.hero-copy{text-align:left;max-width:calc(640px * var(--s, 1));margin:0 auto}.hero-copy .hero-title{margin:calc(4px * var(--s, 1)) 0 calc(10px * var(--s, 1))}.hero-name{font-size:clamp(2.5rem,4vw,3.4rem);line-height:1.18;margin-bottom:calc(18px * var(--s, 1));color:var(--white);padding-bottom:.08em;overflow:visible}@keyframes name-sheen{0%{background-position:0% 50%}50%{background-position:100% 50%}to{background-position:0% 50%}}@keyframes caret-blink{50%{opacity:0}}.hero-tags{display:flex;flex-wrap:wrap;gap:calc(8px * var(--s, 1));margin-top:calc(12px * var(--s, 1))}@keyframes hero-halo{0%,to{transform:scale(.92);opacity:.45}50%{transform:scale(1.12);opacity:.85}}@keyframes hero-rotate{to{transform:rotate(360deg)}}.floating-card{display:none}.social-links{display:flex;gap:calc(12px * var(--s, 1));margin-top:calc(12px * var(--s, 1));justify-content:flex-start}.social{width:calc(38px * var(--s, 1));height:calc(38px * var(--s, 1));border-radius:calc(12px * var(--s, 1));border:1px solid var(--border);background:var(--glass-04);display:grid;place-items:center;transition:transform .2s ease,border-color .2s ease}.social--mail{font-weight:800;font-size:1.2rem}.social--linkedin img{width:calc(20px * var(--s, 1));height:calc(20px * var(--s, 1))}.card-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(calc(240px * var(--s, 1)),1fr));gap:calc(18px * var(--s, 1))}.card{background:linear-gradient(145deg,var(--glass-03),var(--glass-01));border:1px solid var(--border);border-radius:var(--radius);padding:calc(18px * var(--s, 1))}.card p{color:var(--muted);line-height:1.6}.skills{background:transparent}.timeline .container{display:grid;gap:0}.edu-grid{display:grid;grid-template-columns:1.15fr .75fr 1fr;gap:calc(24px * var(--s, 1));width:90%;justify-items:start;margin-left:2%}.edu-item{padding:0;background:transparent;width:100%}.edu-item h4{margin:0 0 calc(8px * var(--s, 1));font-size:1rem}.edu-item p{margin:0 0 calc(6px * var(--s, 1))}.edu-item .meta{color:var(--muted);font-size:.92rem}.focus-list{list-style:none;padding:0;margin:calc(6px * var(--s, 1)) 0 0;color:var(--muted)}.focus-list li{padding:calc(2px * var(--s, 1)) 0}.career-list{position:relative;padding-left:calc(18px * var(--s, 1));padding-top:calc(12px * var(--s, 1));padding-bottom:calc(12px * var(--s, 1))}.career-list:before{display:none}.career-item{position:relative;padding-left:calc(22px * var(--s, 1));margin-bottom:calc(32px * var(--s, 1))}.career-item:before{content:"{";position:absolute;left:calc(-22px * var(--s, 1));top:calc(-14px * var(--s, 1));height:100%;font-size:2.6rem;line-height:1;transform:scaleY(2.2);transform-origin:top;color:var(--line)}.career-item:last-child{margin-bottom:0}.career-title{margin:0 0 calc(10px * var(--s, 1));font-size:1rem}.career-meta{margin:0 0 calc(2px * var(--s, 1));color:var(--muted);font-size:.92rem}.career-desc{margin:0;color:var(--muted)}.timeline-progress{width:100%;height:calc(6px * var(--s, 1));background:var(--glass-05);border-radius:calc(999px * var(--s, 1));overflow:hidden;border:1px solid var(--border)}.progress-bar{height:100%;width:0%;background:linear-gradient(135deg,var(--accent),var(--accent-2));transition:width .2s ease}.timeline-track{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(calc(260px * var(--s, 1)),calc(320px * var(--s, 1)));gap:calc(16px * var(--s, 1));overflow-x:auto;padding-bottom:calc(6px * var(--s, 1));scroll-snap-type:x mandatory}.timeline-card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:calc(18px * var(--s, 1));scroll-snap-align:start}.timeline-meta{display:flex;justify-content:space-between;align-items:center;color:var(--muted);font-size:.92rem;margin-bottom:calc(6px * var(--s, 1))}.badge{background:var(--glass-08);border-radius:calc(10px * var(--s, 1));padding:calc(6px * var(--s, 1)) calc(10px * var(--s, 1));font-weight:700;color:var(--text)}.badge-work{background:var(--accent-2-16)}.badge-project{background:var(--accent-gold-20)}.timeline-card .meta{color:var(--muted);font-size:.95rem}.project-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(calc(260px * var(--s, 1)),1fr));gap:calc(18px * var(--s, 1))}.project-card{border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;background:var(--panel);display:grid;grid-template-rows:calc(200px * var(--s, 1)) 1fr}.project-thumb{background-size:cover;background-position:center}.placeholder-media{background:linear-gradient(135deg,var(--accent-2-20),var(--accent-gold-20))}.project-body{padding:calc(16px * var(--s, 1))}.project-body p{color:var(--muted)}.about{background:transparent}.section--about{padding-top:0}.about .container,.timeline .container,.section--focus .container,.section--work .container,.section--skills .container,.section--contact .container{width:min(calc(1200px * var(--s, 1)),75%);margin-left:10vw;margin-right:auto}.about-grid{display:grid;grid-template-columns:1fr;gap:0;align-items:start}.lang-card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:calc(16px * var(--s, 1))}.lang-list{list-style:none;padding:0;margin:calc(12px * var(--s, 1)) 0 0;color:var(--muted)}.lang-list li{padding:calc(6px * var(--s, 1)) 0;display:flex;align-items:center;gap:calc(10px * var(--s, 1))}.lang-flag{width:calc(22px * var(--s, 1));height:calc(22px * var(--s, 1));object-fit:cover;border-radius:50%;display:inline-block;border:1px solid currentColor;filter:grayscale(1)}.cv-section{text-align:left}.cv-actions{display:flex;justify-content:center;gap:calc(12px * var(--s, 1));flex-wrap:wrap;margin:calc(12px * var(--s, 1)) 0 calc(22px * var(--s, 1))}.cv-preview{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:calc(12px * var(--s, 1))}.cv-image{width:100%;max-width:calc(960px * var(--s, 1));margin:0 auto;border-radius:calc(12px * var(--s, 1))}.contact{background:transparent}.contact-inner{display:grid;grid-template-columns:repeat(auto-fit,minmax(calc(260px * var(--s, 1)),1fr));gap:calc(18px * var(--s, 1));align-items:center}.contact-card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:calc(16px * var(--s, 1))}.contact-card ul{list-style:none;padding:0;margin:0;color:var(--muted);line-height:1.6}.reveal{opacity:0;transform:translateY(calc(18px * var(--s, 1)));transition:opacity .6s ease,transform .6s ease}.reveal.visible{opacity:1;transform:translateY(0)}@media(min-width:1600px){.container{width:min(calc(1500px * var(--s, 1)),78vw)}.about .container,.timeline .container,.section--focus .container,.section--work .container,.section--skills .container,.section--contact .container{width:min(calc(1500px * var(--s, 1)),78vw);margin-left:auto;margin-right:auto}.nav-links a{font-size:1rem}.hero-name{font-size:clamp(3rem,3.5vw,4.2rem)}}@media(min-width:2200px){.container{width:min(calc(1800px * var(--s, 1)),70vw)}.about .container,.timeline .container,.section--focus .container,.section--work .container,.section--skills .container,.section--contact .container{width:min(calc(1800px * var(--s, 1)),70vw);margin-left:auto;margin-right:auto}h1{font-size:clamp(3.2rem,3vw,4.6rem)}h2{font-size:clamp(2.2rem,2vw,3rem)}h3{font-size:clamp(1.4rem,1.4vw,2rem)}.lede,.body{font-size:clamp(1.2rem,.6vw + .8rem,1.6rem)}}@media(max-width:1200px){.about .container,.timeline .container,.section--focus .container,.section--work .container,.section--skills .container,.section--contact .container{width:min(calc(1200px * var(--s, 1)),92vw);margin-left:auto;margin-right:auto}}@media(max-width:900px){.nav-links{justify-content:flex-end}.nav-links a{padding:calc(6px * var(--s, 1)) calc(10px * var(--s, 1));font-size:.85rem}.edu-grid,.focus-grid{grid-template-columns:1fr}.timeline-track{grid-auto-flow:row;grid-auto-columns:unset;grid-template-columns:repeat(auto-fit,minmax(calc(240px * var(--s, 1)),1fr));overflow:visible}.about-grid{grid-template-columns:1fr}}@media(max-width:640px){.nav-inner{flex-direction:column;align-items:flex-start}.nav-links{width:100%;justify-content:space-between;gap:calc(10px * var(--s, 1))}.nav-links a{padding:calc(6px * var(--s, 1)) calc(8px * var(--s, 1));font-size:.8rem}.floating-card{position:static;margin-top:calc(14px * var(--s, 1))}}@media(max-width:720px){.navbar{padding:calc(10px * var(--s, 1)) calc(14px * var(--s, 1));transition:background .35s ease,backdrop-filter .35s ease}.nav-inner{align-items:center;gap:calc(10px * var(--s, 1));position:relative;min-height:calc(44px * var(--s, 1))}.nav-toggle{display:inline-flex;position:fixed;right:calc(18px * var(--s, 1));top:calc(22px * var(--s, 1));z-index:12}.nav-links{display:flex;opacity:0;pointer-events:none}.navbar.is-open .nav-links{opacity:1;pointer-events:auto}.nav-link--top{display:inline-block!important}.navbar.nav-docked{left:50%;top:0;transform:translate(-50%);width:100%;padding:calc(10px * var(--s, 1)) calc(14px * var(--s, 1))}.navbar.is-open{position:fixed;inset:0;transform:none;padding:calc(22px * var(--s, 1)) calc(18px * var(--s, 1));background:color-mix(in srgb,var(--bg) 88%,transparent);backdrop-filter:blur(calc(8px * var(--s, 1))) saturate(120%);-webkit-backdrop-filter:blur(calc(8px * var(--s, 1))) saturate(120%)}.navbar.is-open .nav-inner{height:100%;justify-content:center;align-items:center}.navbar.is-open .nav-links{display:flex;flex-direction:column;align-items:flex-end;justify-content:center;width:100%;min-height:100%;gap:calc(18px * var(--s, 1));padding:0 calc(12px * var(--s, 1))}.navbar.is-open .nav-links a{font-size:1.5rem}.nav-links a{opacity:0;transform:translate(calc(28px * var(--s, 1)));transition:transform .35s ease,opacity .35s ease,color .25s ease}.navbar.is-open .nav-links a{opacity:1;transform:translate(0)}.navbar.is-open .nav-links a:nth-child(1){transition-delay:.04s}.navbar.is-open .nav-links a:nth-child(2){transition-delay:.08s}.navbar.is-open .nav-links a:nth-child(3){transition-delay:.12s}.navbar.is-open .nav-links a:nth-child(4){transition-delay:.16s}.navbar.is-open .nav-links a:nth-child(5){transition-delay:.2s}.navbar.is-open .nav-links a:nth-child(6){transition-delay:.24s}.navbar.is-open .nav-links a:nth-child(7){transition-delay:.28s}#projects{margin-top:calc(24px * var(--s, 1))}}@media(max-width:480px){.section{padding:clamp(calc(60px * var(--s, 1)),14vw,calc(90px * var(--s, 1))) 0}.hero.section+.section{padding-top:clamp(calc(56px * var(--s, 1)),12vw,calc(80px * var(--s, 1)))}.cta-row{gap:calc(10px * var(--s, 1))}.Link__github,.Link__linkedin,.Link__mail{min-width:calc(48px * var(--s, 1));height:calc(48px * var(--s, 1))}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.reveal{opacity:1!important;transform:none!important}.btn,.social{transition:none}.eyebrow{animation:none}}.scroll-track{position:fixed;top:0;right:0;bottom:0;width:32px;z-index:1000;touch-action:none}.scroll-thumb{position:absolute;top:0;right:0;width:40px;height:0;pointer-events:none;transition:opacity .2s ease;opacity:.75;background:var(--text);-webkit-mask-image:linear-gradient(to bottom,transparent 0%,#000 20%,#000 80%,transparent 100%);mask-image:linear-gradient(to bottom,transparent 0%,#000 20%,#000 80%,transparent 100%);will-change:transform}.scroll-track:hover .scroll-thumb,.scroll-track.is-dragging .scroll-thumb{opacity:1}.is-scroll-dragging,.is-scroll-dragging *{user-select:none;-webkit-user-select:none}.proj-stage{--proj-gap: calc(16px * var(--s, 1));--proj-feat-h: clamp(calc(260px * var(--s, 1)), 32vw, calc(400px * var(--s, 1)));--proj-cat-h: clamp(calc(120px * var(--s, 1)), 12vw, calc(150px * var(--s, 1)));position:relative;display:grid;gap:var(--proj-gap);height:calc(var(--proj-feat-h) + var(--proj-cat-h) + var(--proj-gap));grid-template-rows:var(--proj-feat-h) var(--proj-cat-h)}.proj-row{display:grid;gap:var(--proj-gap);min-height:0}.proj-row--featured{grid-template-columns:repeat(2,1fr)}.proj-row--cats{grid-template-columns:repeat(var(--n, 4),1fr)}.proj-card{position:relative;display:block;padding:0;overflow:hidden;text-align:left;font:inherit;color:var(--text);border:0;border-radius:var(--radius);cursor:url(/assets/cursor/hand.svg) 6 2,pointer;transition:opacity .6s ease,box-shadow .4s ease;will-change:transform;background:linear-gradient(135deg,var(--card-g0),var(--card-g1) 55%,var(--card-g2));-webkit-backdrop-filter:blur(calc(18px * var(--s, 1))) saturate(170%);backdrop-filter:blur(calc(18px * var(--s, 1))) saturate(170%);box-shadow:inset 0 0 calc(22px * var(--s, 1)) var(--card-in),0 calc(14px * var(--s, 1)) calc(34px * var(--s, 1)) var(--card-drop)}.proj-card:after,.proj-panel:after{content:"";position:absolute;inset:0;z-index:4;padding:1px;border-radius:inherit;pointer-events:none;box-shadow:inset 0 1px #ffffff4d;background:linear-gradient(135deg,#ffffff8c,#ffffff2b 30% 70%,#ffffff61);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask:linear-gradient(#000 0 0) content-box exclude,linear-gradient(#000 0 0)}.proj-card:hover,.proj-card:focus-visible{box-shadow:inset 0 0 calc(22px * var(--s, 1)) var(--card-in2),0 calc(18px * var(--s, 1)) calc(42px * var(--s, 1)) var(--card-drop2)}.proj-card:focus-visible{outline:calc(2px * var(--s, 1)) solid var(--glass-55);outline-offset:calc(3px * var(--s, 1))}.proj-stage.is-dim .proj-card:not(.is-origin){opacity:0;pointer-events:none;transition:opacity .5s ease}.proj-stage.is-closing .proj-card:not(.is-origin){transition:opacity .5s ease .3s}.proj-stage.is-closing .proj-card.is-origin{opacity:1}.proj-card.is-origin{opacity:0;transition:none}.proj-card__text{position:absolute;inset:auto 0 0;display:grid;gap:calc(4px * var(--s, 1));padding:clamp(calc(16px * var(--s, 1)),2vw,calc(26px * var(--s, 1)));background:linear-gradient(to top,var(--card-fade),transparent)}.proj-card--cat .proj-card__text{inset:0;align-content:end;background:none}.proj-card__kicker{font-size:var(--text-label-size);letter-spacing:var(--text-label-tracking);text-transform:uppercase;font-weight:700;color:var(--muted)}.proj-card__title{font-family:BricoJ,Bricolage Grotesque,Inter,system-ui,sans-serif;font-variation-settings:"opsz" 96;font-size:clamp(1.15rem,1vw + .9rem,1.8rem);font-weight:700;letter-spacing:var(--text-heading-tracking);color:var(--text-strong)}.proj-card--featured .proj-card__title{font-size:clamp(1.4rem,1.6vw + 1rem,2.3rem)}.proj-card__sub{color:var(--muted);font-size:.95rem}.proj-card--cat .proj-card__sub{font-size:.85rem}.proj-card__text{z-index:2}.proj-art{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transition:transform .8s cubic-bezier(.2,.7,.2,1)}.proj-card:hover .proj-art{transform:scale(1.04)}.proj-art--placeholder{--x: 30%;--y: 20%;background:linear-gradient(145deg,var(--art-a),var(--art-b))}.proj-art--placeholder[data-art="1"]{--x: 75%;--y: 15%}.proj-art--placeholder[data-art="2"]{--x: 20%;--y: 80%}.proj-art--placeholder[data-art="3"]{--x: 80%;--y: 75%}.proj-art--placeholder[data-art="4"]{--x: 50%;--y: 45%}.proj-art--placeholder[data-art="5"]{--x: 10%;--y: 35%}.proj-panel{position:absolute;inset:0;z-index:5;overflow:hidden;background:linear-gradient(135deg,var(--panel-g0),var(--panel-g1));-webkit-backdrop-filter:blur(calc(28px * var(--s, 1))) saturate(170%);backdrop-filter:blur(calc(28px * var(--s, 1))) saturate(170%);box-shadow:0 calc(24px * var(--s, 1)) calc(60px * var(--s, 1)) var(--panel-sh);border-radius:var(--radius);outline:none}.proj-panel__inner{position:absolute;inset:0}.proj-panel__bar{position:absolute;top:0;left:0;right:0;z-index:3;display:flex;align-items:center;justify-content:space-between;padding:calc(18px * var(--s, 1)) calc(22px * var(--s, 1));pointer-events:none}.proj-panel__count{font-size:var(--text-label-size);letter-spacing:var(--text-label-tracking);text-transform:uppercase;font-weight:700;color:var(--muted)}.proj-btn{display:grid;place-items:center;width:calc(44px * var(--s, 1));height:calc(44px * var(--s, 1));padding:0;color:var(--text);background:var(--glass-08);border:1px solid var(--glass-12);border-radius:50%;backdrop-filter:blur(calc(14px * var(--s, 1)));-webkit-backdrop-filter:blur(calc(14px * var(--s, 1)));cursor:url(/assets/cursor/hand.svg) 6 2,pointer;pointer-events:auto;transition:background .25s ease,transform .25s ease}.proj-btn:hover{background:var(--glass-20)}.proj-btn:focus-visible{outline:calc(2px * var(--s, 1)) solid var(--glass-55);outline-offset:calc(2px * var(--s, 1))}.proj-btn svg{width:calc(20px * var(--s, 1));height:calc(20px * var(--s, 1));fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.proj-nav{position:absolute;z-index:6;width:calc(56px * var(--s, 1));height:calc(56px * var(--s, 1));animation:proj-nav-in .4s ease .5s backwards}@keyframes proj-nav-in{0%{opacity:0}to{opacity:1}}.proj-btn--prev,.proj-btn--next{top:50%;margin-top:calc(-28px * var(--s, 1))}.proj-btn--prev{right:100%}.proj-btn--next{left:100%}@media(max-width:1279px){.proj-btn--prev,.proj-btn--next{top:calc(100% + calc(14px * var(--s, 1)));margin-top:0}.proj-btn--prev{right:auto;left:calc(50% - calc(60px * var(--s, 1)))}.proj-btn--next{left:calc(50% + calc(4px * var(--s, 1)))}}.proj-nav{background:none;border:0;backdrop-filter:none;-webkit-backdrop-filter:none;color:var(--text-strong);transition:transform .3s cubic-bezier(.2,.7,.2,1),color .25s ease}.proj-nav:hover{background:none;transform:scale(1.35)}.proj-nav__glyph{display:block;width:calc(40px * var(--s, 1));height:calc(40px * var(--s, 1));background-image:linear-gradient(100deg,#6e6e6e,#8a8a8a,#b5b5b5 28%,#e6e6e6 38%,#b0b0b0 50%,#9a9a9a 64%,gray 80%,#6e6e6e);background-size:200% 100%;background-position:0% 50%;opacity:.5;transition:opacity .35s ease-out}.proj-btn--prev .proj-nav__glyph{-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M15 5l-7 7 7 7'/%3E%3C/svg%3E") center / contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M15 5l-7 7 7 7'/%3E%3C/svg%3E") center / contain no-repeat}.proj-btn--next .proj-nav__glyph{-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 5l7 7-7 7'/%3E%3C/svg%3E") center / contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 5l7 7-7 7'/%3E%3C/svg%3E") center / contain no-repeat}.proj-nav:hover .proj-nav__glyph,.proj-nav:focus-visible .proj-nav__glyph{opacity:1;animation:nav-link-shimmer 2.6s steps(31) infinite}@media(prefers-reduced-motion:reduce){.proj-nav:hover .proj-nav__glyph{animation:none}}.proj-btn--close{position:relative;width:calc(54px * var(--s, 1));height:calc(54px * var(--s, 1));border:0;background:linear-gradient(135deg,var(--gb-g0),var(--gb-g1) 55%,var(--gb-g2));-webkit-backdrop-filter:blur(calc(16px * var(--s, 1))) saturate(170%);backdrop-filter:blur(calc(16px * var(--s, 1))) saturate(170%);box-shadow:inset 0 0 calc(14px * var(--s, 1)) var(--gb-in),0 calc(8px * var(--s, 1)) calc(20px * var(--s, 1)) var(--gb-drop);transition:background .25s ease,transform .3s cubic-bezier(.2,.7,.2,1),color .25s ease}.proj-btn--close:after{content:"";position:absolute;inset:0;padding:1px;border-radius:inherit;pointer-events:none;box-shadow:inset 0 1px #ffffff4d;background:linear-gradient(135deg,#ffffff8c,#ffffff2b 30% 70%,#ffffff61);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask:linear-gradient(#000 0 0) content-box exclude,linear-gradient(#000 0 0)}.proj-btn--close svg{width:calc(26px * var(--s, 1));height:calc(26px * var(--s, 1))}.proj-btn--close:hover{color:#ff6b6b;background:linear-gradient(135deg,#ff6e6e42,#ff5a5a14 55%,#ff6e6e24);transform:scale(1.15)}.proj-slide{position:absolute;inset:0;animation:proj-in-next .5s cubic-bezier(.2,.7,.2,1) both}.proj-slide[data-dir=prev]{animation-name:proj-in-prev}@keyframes proj-in-next{0%{opacity:0;transform:translate(calc(36px * var(--s, 1)))}to{opacity:1;transform:none}}@keyframes proj-in-prev{0%{opacity:0;transform:translate(calc(-36px * var(--s, 1)))}to{opacity:1;transform:none}}.proj-detail{display:grid;grid-template-columns:1.15fr 1fr;height:100%}.proj-detail__art{position:relative}.proj-detail__art .proj-art{transition:none}.proj-detail__copy{display:grid;align-content:center;gap:calc(14px * var(--s, 1));padding:clamp(calc(28px * var(--s, 1)),4vw,calc(64px * var(--s, 1))) clamp(calc(28px * var(--s, 1)),4vw,calc(56px * var(--s, 1)));overflow-y:auto}.proj-detail h3,.proj-next h3{margin:0;font-size:clamp(1.8rem,2.6vw + .8rem,3.2rem);line-height:var(--text-heading-line);letter-spacing:var(--text-heading-tracking);color:var(--text-strong)}.proj-detail__lede{margin:0;font-size:1.15rem;color:var(--text)}.proj-detail__body{margin:0;color:var(--muted);line-height:var(--text-body-line)}.proj-detail__meta{display:grid;gap:calc(10px * var(--s, 1));margin:calc(6px * var(--s, 1)) 0 0}.proj-detail__meta div{display:grid;gap:calc(2px * var(--s, 1))}.proj-detail__meta dt{font-size:.75rem;letter-spacing:var(--text-label-tracking);text-transform:uppercase;color:var(--muted)}.proj-detail__meta dd{margin:0;color:var(--text-strong)}.proj-detail__links{display:flex;flex-wrap:wrap;gap:calc(10px * var(--s, 1));margin:calc(6px * var(--s, 1)) 0 0}.proj-detail__links a{padding:calc(10px * var(--s, 1)) calc(18px * var(--s, 1));font:inherit;color:var(--text-strong);text-decoration:none;background:var(--glass-08);border:1px solid var(--glass-15);border-radius:calc(999px * var(--s, 1));cursor:url(/assets/cursor/hand.svg) 6 2,pointer;transition:background .25s ease}.proj-detail__links a:hover{background:var(--glass-20)}.proj-next{display:grid;align-content:center;justify-items:center;gap:calc(14px * var(--s, 1));height:100%;padding:0 calc(28px * var(--s, 1));text-align:center}@media(max-width:900px){.proj-row--cats{grid-template-columns:repeat(2,1fr)}.proj-stage{height:auto;grid-template-rows:none;--proj-feat-h: calc(260px * var(--s, 1));--proj-cat-h: calc(120px * var(--s, 1))}.proj-row--featured{grid-template-columns:1fr;grid-auto-rows:var(--proj-feat-h)}.proj-row--cats{grid-auto-rows:var(--proj-cat-h)}}@media(max-width:720px){.proj-panel{position:fixed;z-index:1000;border-radius:0}.proj-panel:after{display:none}.proj-detail{grid-template-columns:1fr;grid-template-rows:34% 1fr}.proj-detail__copy{align-content:start;padding:calc(24px * var(--s, 1)) calc(22px * var(--s, 1)) calc(96px * var(--s, 1))}.proj-nav{position:fixed;z-index:1001}.proj-btn--prev,.proj-btn--next{top:auto;bottom:calc(20px * var(--s, 1));margin-top:0}.proj-btn--prev{left:calc(22px * var(--s, 1));right:auto}.proj-btn--next{right:calc(22px * var(--s, 1));left:auto}.proj-next{padding:0 calc(28px * var(--s, 1))}}@media(prefers-reduced-motion:reduce){.proj-card,.proj-art,.proj-slide{transition:none;animation:none}}.anim-paused{animation-play-state:paused!important}:root{--ghost-a: .27;--ghost: rgba(255, 255, 255, var(--ghost-a))}.pf-inner .section-head h2{background:none;animation:none;color:var(--ghost);-webkit-text-fill-color:currentColor;font-size:clamp(2rem,2.8vw,2.6rem);letter-spacing:-.035em;line-height:1.05}.pf-inner .section-head{margin-bottom:calc(10px * var(--s, 1))}.pf-word{color:color-mix(in srgb,#fff calc((1 - var(--pf-tone, 0)) * 100%),var(--ghost))}.pf-inner .section--contact{padding-bottom:0}.pf-edu__bar{margin:calc(18px * var(--s, 1)) 0 calc(6px * var(--s, 1));height:calc(4px * var(--s, 1));border-radius:calc(4px * var(--s, 1));background:#ffffff14;overflow:hidden}.pf-edu__bar i{position:relative;display:block;height:100%;width:var(--w);overflow:hidden;background:#ffffff8c;border-radius:calc(4px * var(--s, 1))}.pf-edu.pf-reveal:not(.pf-visible) .pf-edu__bar i{width:0}.pf-edu.pf-visible .pf-edu__bar i{transition:width 1.1s cubic-bezier(.2,.7,.2,1) .15s;animation:pf-breathe 2.4s ease-in-out 1.3s infinite}.pf-edu__bar i:after{content:"";position:absolute;top:0;bottom:0;left:0;width:45%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.7),transparent);transform:translate(-100%)}.pf-edu.pf-visible .pf-edu__bar i:after{animation:pf-sweep 2.4s ease-in-out 1.3s infinite}@keyframes pf-breathe{0%,to{opacity:1}50%{opacity:.78}}@keyframes pf-sweep{0%{transform:translate(-100%)}70%,to{transform:translate(240%)}}@media(prefers-reduced-motion:reduce){.pf-edu.pf-visible .pf-edu__bar i,.pf-edu.pf-visible .pf-edu__bar i:after{animation:none;transition:none}}.pf-edu__ends{display:flex;justify-content:space-between;color:#6e6e6e;font-size:.8rem}.pf-edu__gpa{display:flex;align-items:baseline;gap:calc(12px * var(--s, 1));margin:calc(18px * var(--s, 1)) 0 0;color:#d6d6d6;font-size:1.05rem}.pf-edu__gpa span{font:500 .72rem/1 ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.12em;color:#6e6e6e}.pf-edu__chips{display:flex;flex-wrap:wrap;gap:calc(6px * var(--s, 1));margin-top:calc(14px * var(--s, 1))}.pf-edu__chips span{font:500 .76rem/1 ui-monospace,SFMono-Regular,Menlo,monospace;color:#9a9a9a;padding:calc(7px * var(--s, 1)) calc(10px * var(--s, 1));border-radius:calc(5px * var(--s, 1));background:#ffffff0f}.pf-more.pf-edu__more{display:none;margin:calc(14px * var(--s, 1)) 0 0}@media(max-width:720px){.pf-more.pf-edu__more{display:inline-block}.pf-edu__chips:not(.is-open) span[data-extra]{display:none}}.pf-edu__also{margin:calc(16px * var(--s, 1)) 0 0;color:#8c8c8c;font-size:.95rem}.pf-tl{position:relative;padding-left:calc(28px * var(--s, 1))}.pf-tl:before{content:"";position:absolute;left:calc(5px * var(--s, 1));top:calc(8px * var(--s, 1));bottom:calc(8px * var(--s, 1));width:1px;background:#ffffff1f}.pf-tl__item{position:relative;padding-bottom:calc(30px * var(--s, 1))}.pf-tl>:last-child .pf-tl__item{padding-bottom:0}.pf-tl__item:before{content:"";position:absolute;left:calc(-28px * var(--s, 1));top:calc(7px * var(--s, 1));width:calc(11px * var(--s, 1));height:calc(11px * var(--s, 1));border-radius:50%;background:#0b0b0c;border:1px solid rgba(255,255,255,.4)}.pf-tl__when{margin:0 0 calc(4px * var(--s, 1));color:#6e6e6e;font-size:.85rem}.pf-more{margin:calc(26px * var(--s, 1)) 0 0 calc(28px * var(--s, 1));font:inherit;font-weight:500;font-size:.95rem;color:#6e6e6e;background:none;border:0;border-bottom:1px solid rgba(255,255,255,.14);padding:0 0 calc(4px * var(--s, 1));border-radius:0;cursor:pointer;transition:color .25s,border-color .25s}.pf-more:hover{color:var(--text);border-color:var(--text)}.pf-tl__fold{display:grid;grid-template-rows:0fr;opacity:0;transition:grid-template-rows .45s cubic-bezier(.3,0,.2,1),opacity .35s linear}.pf-tl__fold.is-open{grid-template-rows:1fr;opacity:1;transition:grid-template-rows .45s cubic-bezier(.3,0,.2,1),opacity .4s linear .1s}.pf-tl__fold>div{overflow:hidden;min-height:0;margin-left:calc(-28px * var(--s, 1));padding-left:calc(28px * var(--s, 1))}@media(prefers-reduced-motion:reduce){.pf-tl__fold,.pf-tl__fold.is-open{transition:none}}.ct svg{width:1em;height:1em;fill:currentColor;flex:none}.ct a{text-decoration:none}.ct-quote{margin:var(--ct-gap, calc(56px * var(--s, 1))) 0 0;max-width:52ch;min-height:4.4rem}.ct-quote blockquote{margin:0;font:italic 400 1rem/1.5 Inter,system-ui,sans-serif;color:#7a7a7a;min-height:1.5em}.ct-ghost{visibility:hidden}.ct-caret{display:inline;border-left:1px solid #7a7a7a;margin:0 calc(-3px * var(--s, 1)) 0 calc(2px * var(--s, 1));animation:ct-blink 1s steps(1) infinite}@keyframes ct-blink{50%{opacity:0}}.ct-quote figcaption{margin-top:calc(6px * var(--s, 1));font-size:.85rem;color:#555;opacity:0;transition:opacity .4s}.ct-quote figcaption.is-on{opacity:1}.ct-quote figcaption:before{content:"— "}@media(prefers-reduced-motion:reduce){.ct-caret{animation:none;opacity:0}}.ct{container-type:inline-size;width:100%}.ct-mix{display:grid;grid-template-columns:repeat(4,auto);justify-content:start;column-gap:calc(40px * var(--s, 1))}.ct-it{position:relative;display:flex;align-items:center;gap:calc(10px * var(--s, 1));border-top:1px solid rgba(255,255,255,.1)}.ct-it a{display:flex;align-items:center;gap:calc(12px * var(--s, 1));padding:calc(16px * var(--s, 1)) 0;min-width:0;color:#8c8c8c;font-weight:500;transition:color .2s}.ct-it a svg{font-size:1.2rem;color:#6e6e6e;transition:color .2s}.ct-it a em{font-style:normal;font-size:.85rem;color:#555;transition:transform .25s,color .2s}.ct-it a:hover,.ct-it a:hover svg,.ct-it a:hover em{color:#fff}.ct-it a:hover em{transform:translate(calc(2px * var(--s, 1)),calc(-2px * var(--s, 1)))}.ct-copy{display:grid;place-items:center;width:calc(28px * var(--s, 1));height:calc(28px * var(--s, 1));padding:0;border:0;border-radius:calc(7px * var(--s, 1));background:none;color:#6e6e6e;cursor:pointer;opacity:0;transform:translate(calc(-4px * var(--s, 1)));transition:opacity .2s,transform .25s,color .2s,background .2s}.ct-copy svg{width:calc(15px * var(--s, 1));height:calc(15px * var(--s, 1));fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}.ct-it:hover .ct-copy,.ct-copy:focus-visible,.ct-copy.is-ok{opacity:1;transform:none}.ct-copy:hover{color:#fff;background:#ffffff14}.ct-copy.is-ok{color:#8fd19e}@media(hover:none){.ct-copy{opacity:1;transform:none}}@container (max-width: 700px){.ct-mix{grid-template-columns:repeat(2,auto)}}@container (max-width: 420px){.ct-mix{grid-template-columns:minmax(0,1fr)}.ct-it a{overflow-wrap:anywhere}}.ct-lead{margin:0 0 calc(20px * var(--s, 1)) calc(1.5px * var(--s, 1));font:400 1.08rem/1.4 Inter,system-ui,sans-serif;letter-spacing:0;color:#a8a8a8}:root{--wk-radius: calc(10px * var(--s, 1))}.wk-count__p{display:none}.wk-kicker{margin:0;font-size:.74rem;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}.wk-poster{display:block;width:100%;aspect-ratio:16 / 10;object-fit:cover}.wk-card{position:relative;display:block;width:100%;padding:0;overflow:hidden;border:0;border-radius:var(--wk-radius);background:#101010;cursor:url(/assets/cursor/hand.svg) 6 2,pointer;box-shadow:0 calc(14px * var(--s, 1)) calc(34px * var(--s, 1)) var(--card-drop);transition:transform .5s cubic-bezier(.2,.7,.2,1),box-shadow .4s,opacity .5s}.wk-card:after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;box-shadow:inset 0 0 0 1px #ffffff24,inset 0 1px #ffffff47}.wk-card:hover{box-shadow:0 calc(18px * var(--s, 1)) calc(42px * var(--s, 1)) var(--card-drop2)}button{color:inherit;font:inherit}.wk-arrow{flex:none}.wk-e{display:grid;gap:calc(14px * var(--s, 1))}.wk-e__row{--proj-gap: calc(16px * var(--s, 1));--proj-feat-h: clamp(calc(260px * var(--s, 1)), 32vw, calc(400px * var(--s, 1)));--proj-cat-h: clamp(calc(120px * var(--s, 1)), 12vw, calc(150px * var(--s, 1)));position:relative;width:100%;height:calc(var(--proj-feat-h) + var(--proj-cat-h) + var(--proj-gap))}@media(max-width:1279px){.wk-e__row{margin-bottom:calc(64px * var(--s, 1))}}.wk-e__stage{height:100%;touch-action:pan-y}.wk-e__stage .wk-poster{position:absolute;inset:0;height:100%;opacity:0;transition:opacity .45s ease}.wk-e__stage .wk-poster.is-on{opacity:1}.wk-e__strip{overscroll-behavior-x:contain;display:flex;gap:calc(10px * var(--s, 1));overflow-x:auto;scrollbar-width:none;padding:calc(2px * var(--s, 1))}.wk-e__th{flex:0 0 calc((100% - calc(50px * var(--s, 1))) / 6);min-width:calc(84px * var(--s, 1));padding:0;border:1px solid var(--glass-12);border-radius:var(--wk-radius);overflow:hidden;opacity:.5;background:none;cursor:url(/assets/cursor/hand.svg) 6 2,pointer;transition:opacity .3s,border-color .3s}.wk-e__th.is-on,.wk-e__th:hover{opacity:1;border-color:var(--glass-55)}.wk-veil{position:fixed;inset:0;z-index:90;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:none;isolation:isolate}.wk-veil:before{content:"";position:fixed;inset:0;z-index:-1;background:#060606b8;backdrop-filter:blur(calc(28px * var(--s, 1))) saturate(1.1);-webkit-backdrop-filter:blur(calc(28px * var(--s, 1))) saturate(1.1);animation:wk-in .4s ease both}.wk-veil::-webkit-scrollbar{display:none}@keyframes wk-in{0%{opacity:0}}@keyframes wk-up{0%{opacity:0;transform:translateY(calc(18px * var(--s, 1)))}}.wk-stage{--pad: clamp(calc(16px * var(--s, 1)), 3vw, calc(44px * var(--s, 1)));position:relative;box-sizing:border-box;min-height:100%;padding:var(--pad)}.wk-detail__bar{position:absolute;top:var(--pad);right:var(--pad);z-index:3}.wk-detail__nav{display:flex;align-items:center;gap:calc(8px * var(--s, 1))}.wk-count{margin-right:calc(10px * var(--s, 1))}.wk-detail__nav .wk-arrow{width:calc(40px * var(--s, 1));height:calc(40px * var(--s, 1))}.wk-detail__main{display:grid;grid-template-columns:minmax(0,1fr) clamp(calc(320px * var(--s, 1)),34vw,calc(500px * var(--s, 1)));gap:clamp(calc(24px * var(--s, 1)),3vw,calc(48px * var(--s, 1)));align-items:center;min-height:calc(100svh - 2 * var(--pad))}.wk-gal{width:min(100%,calc((100svh - 2 * var(--pad)) * 1.35 + calc(60px * var(--s, 1))));justify-self:center;display:flex;align-items:center;gap:calc(16px * var(--s, 1))}.wk-gal__nav{display:grid;justify-items:center;gap:clamp(calc(14px * var(--s, 1)),3svh,calc(28px * var(--s, 1)))}.wk-gal__dots{display:grid;gap:calc(9px * var(--s, 1))}.wk-gal__dots i{width:calc(5px * var(--s, 1));height:calc(5px * var(--s, 1));border-radius:50%;background:#ffffff24;transition:background .3s}.wk-gal__dots i.is-on{background:#ffffff80}.wk-gal__view{position:relative;flex:1;min-width:0;aspect-ratio:16 / 10}.wk-slide{position:absolute;inset:0;border-radius:var(--wk-radius);overflow:hidden;background:#101010;box-shadow:0 calc(30px * var(--s, 1)) calc(80px * var(--s, 1)) #0000008c,inset 0 0 0 1px var(--glass-12);transform:translateY(calc(var(--o) * 14%)) scale(calc(1 - .1 * var(--a)));transform-origin:center;opacity:calc(1 - .3 * var(--a));z-index:calc(5 - var(--a));transition:transform .55s cubic-bezier(.2,.7,.2,1),opacity .45s ease;cursor:url(/assets/cursor/hand.svg) 6 2,pointer}.wk-slide:before{content:"";position:absolute;inset:0;z-index:1;border-radius:inherit;pointer-events:none;box-shadow:inset 0 0 0 1px #ffffff29}.wk-slide.is-on{cursor:default}.wk-slide:not(.is-on):after{content:"";position:absolute;inset:0;background:#0606064d}.wk-slide[data-far]{opacity:0;pointer-events:none}.wk-slide .wk-poster{height:100%}.wk-ph{height:100%;display:grid;place-content:center;gap:calc(6px * var(--s, 1));text-align:center;background:radial-gradient(120% 90% at 30% 20%,hsl(var(--h) 30% 24%),hsl(var(--h) 25% 9%));color:#ffffffb3}.wk-ph span{font:600 clamp(1.1rem,2vw,1.6rem)/1.2 var(--font-display, inherit)}.wk-ph i{font:500 .72rem/1 ui-monospace,Menlo,monospace;letter-spacing:.12em;text-transform:uppercase;opacity:.6}.wk-vnav{position:static;width:calc(44px * var(--s, 1));height:calc(44px * var(--s, 1));animation:none}.wk-vnav .proj-nav__glyph{width:calc(34px * var(--s, 1));height:calc(34px * var(--s, 1))}.wk-vnav--up .proj-nav__glyph{-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 15l7-7 7 7'/%3E%3C/svg%3E") center / contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 15l7-7 7 7'/%3E%3C/svg%3E") center / contain no-repeat}.wk-vnav--down .proj-nav__glyph{-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 9l7 7 7-7'/%3E%3C/svg%3E") center / contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 9l7 7 7-7'/%3E%3C/svg%3E") center / contain no-repeat}.wk-detail__body{align-self:start;padding-top:calc(56px * var(--s, 1))}.wk-detail__body h3{margin:calc(6px * var(--s, 1)) 0 calc(16px * var(--s, 1));font-size:clamp(1.9rem,3vw,2.8rem);letter-spacing:0;font-variation-settings:"opsz" 36}.wk-detail__body p{margin:0 0 calc(12px * var(--s, 1));color:var(--muted);line-height:1.6}.wk-stage dl{display:grid;gap:calc(18px * var(--s, 1));margin:calc(28px * var(--s, 1)) 0 0;align-content:start}.wk-stage dt{font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}.wk-stage dd{margin:calc(4px * var(--s, 1)) 0 0;color:var(--text-strong)}.wk-stage dd a{color:inherit}.wk-chips{display:flex;flex-wrap:wrap;gap:calc(6px * var(--s, 1))}.wk-chips span{font:500 .76rem/1 ui-monospace,SFMono-Regular,Menlo,monospace;color:#9a9a9a;padding:calc(7px * var(--s, 1)) calc(10px * var(--s, 1));border-radius:calc(5px * var(--s, 1));background:#ffffff0f}.wk-e__nav{display:none}@media(max-width:720px){.wk-e__row{height:auto;margin-bottom:0}.wk-e__row .proj-nav,.wk-e__strip{display:none}.wk-e__nav{display:flex;align-items:center;justify-content:center;gap:calc(18px * var(--s, 1));margin-bottom:calc(-44px * var(--s, 1));align-self:start}.wk-e{margin-bottom:calc(-18px * var(--s, 1))}.wk-e__nav .proj-nav{position:static;margin:0;width:calc(44px * var(--s, 1));height:calc(44px * var(--s, 1));animation:none}.wk-e__nav .proj-nav__glyph{width:calc(34px * var(--s, 1));height:calc(34px * var(--s, 1))}.wk-e__dots{display:flex;gap:calc(9px * var(--s, 1));align-items:center}.wk-e__dots button{width:calc(5px * var(--s, 1));height:calc(5px * var(--s, 1));padding:0;border:0;border-radius:50%;background:#ffffff24;transition:background .3s;position:relative}.wk-e__dots button:before{content:"";position:absolute;inset:calc(-10px * var(--s, 1)) calc(-2px * var(--s, 1))}.wk-e__dots button.is-on{background:#ffffff80}.wk-e__stage{height:auto;aspect-ratio:4 / 5}.wk-detail__main{grid-template-columns:1fr;align-items:start}.wk-gal{width:100%;flex-direction:column;align-items:stretch;gap:0}.wk-gal__view{flex:none;aspect-ratio:100 / 107.5;overflow:hidden;touch-action:pan-y}.wk-slide{inset:0 auto 0 0;width:86%;transform:translate(calc(var(--o) * (100% + calc(12px * var(--s, 1)))))}.wk-gal__nav{display:flex;align-items:center;justify-content:center;gap:calc(18px * var(--s, 1));margin-top:calc(22px * var(--s, 1))}.wk-gal__dots{display:flex}.wk-vnav--up .proj-nav__glyph,.wk-vnav--down .proj-nav__glyph{transform:rotate(-90deg)}.wk-count__p{display:inline}.wk-detail__main{padding-top:calc(56px * var(--s, 1))}.wk-detail__body{padding-top:0}.wk-e__row>.proj-nav{display:none}}@media(prefers-reduced-motion:reduce){.wk-card,.wk-poster,.wk-slide,.wk-veil,.wk-veil:before,.wk-fx,.wk-vnav{transition:none;animation:none!important}}.wk-e{position:relative;z-index:1}.wk-detail__nav .wk-close{transition:background .25s ease,color .25s ease,transform .3s cubic-bezier(.2,.7,.2,1)}.wk-detail__nav .wk-close:hover{color:#ff6b6b;background:linear-gradient(135deg,#ff6e6e42,#ff5a5a14 55%,#ff6e6e24);transform:scale(1.1)}@keyframes wk-fade{0%{opacity:0}}@keyframes wk-out{to{opacity:0}}@keyframes wk-down{to{opacity:0;transform:translateY(calc(14px * var(--s, 1)))}}.wk-fx{animation:wk-up .55s cubic-bezier(.2,.7,.2,1) .12s both}.wk-vnav{animation:wk-fade .4s ease .3s both}.wk-slide:not(.is-on){animation:wk-fade .5s ease .25s backwards}.wk-slide.is-on{animation:wk-fade .4s ease both}.wk-veil.is-closing{pointer-events:none}.wk-veil.is-closing:before{animation:wk-out .36s ease both}.wk-veil.is-closing .wk-fx{animation:wk-down .3s cubic-bezier(.4,0,.8,.4) both}.wk-veil.is-closing .wk-vnav,.wk-veil.is-closing .wk-slide{animation:wk-out .25s ease both}
