*{box-sizing:border-box}body,html{width:100%;height:100%;margin:0;padding:0;background:linear-gradient(180deg,#e6eaf5,#f6f6f6 80%);scroll-behavior:smooth}body,html{overflow:hidden}body{position:fixed;overscroll-behavior-y:none;font-family:Inter,Avenir Next,Segoe UI,sans-serif;transition:background 3s cubic-bezier(.2,.8,.1,1);cursor:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTMwLjUgMTZDMzAuNSAyNC4wMDgxIDI0LjAwODEgMzAuNSAxNiAzMC41QzcuOTkxODcgMzAuNSAxLjUgMjQuMDA4MSAxLjUgMTZDMS41IDcuOTkxODcgNy45OTE4NyAxLjUgMTYgMS41QzI0LjAwODEgMS41IDMwLjUgNy45OTE4NyAzMC41IDE2WiIgc3Ryb2tlPSJibGFjayIvPgo8cGF0aCBkPSJNNiA5QzcuNjU2ODUgOSA5IDcuNjU2ODUgOSA2QzkgNC4zNDMxNSA3LjY1Njg1IDMgNiAzQzQuMzQzMTUgMyAzIDQuMzQzMTUgMyA2QzMgNy42NTY4NSA0LjM0MzE1IDkgNiA5WiIgZmlsbD0iYmxhY2siLz4KPC9zdmc+Cg=="),auto}a,button{cursor:url("data:image/svg+xml,%3Csvg width='28' height='28' viewBox='0 0 28 28' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='5.5' y='5.5' width='17' height='17' fill='white' stroke='black'/%3E%3Cpath d='M14 4V24M4 14H24' stroke='black'/%3E%3C/svg%3E") 14 14,pointer}a{color:black;text-decoration:none;pointer-events:all}body.secret-mode{background:#050505}.cv-menu a,.cv-menu a span,.cv-menu button,.cv-menu button span,.overlay-links a,.pointer-label,.underlay .brand,.underlay .caption,.underlay .cv-summary,.underlay .footer-title,.underlay .hero-index,.underlay .hero-letter,.underlay .mark{transition:color 3s cubic-bezier(.2,.8,.1,1),background-color 3s cubic-bezier(.2,.8,.1,1),border-color 3s cubic-bezier(.2,.8,.1,1),box-shadow 3s cubic-bezier(.2,.8,.1,1)}body.secret-mode .overlay-links,body.secret-mode .overlay-links a,body.secret-mode .pointer-label,body.secret-mode .underlay,body.secret-mode .underlay .brand,body.secret-mode .underlay .caption,body.secret-mode .underlay .cv-summary,body.secret-mode .underlay .footer-title,body.secret-mode .underlay .hero-index,body.secret-mode .underlay .hero-letter,body.secret-mode .underlay .mark{color:#f6f6f6}body.secret-mode .cv-menu a,body.secret-mode .cv-menu button{border-color:#f6f6f6;background:#111;color:#f6f6f6}body.secret-mode .cv-menu a span,body.secret-mode .cv-menu button span{border-color:#f6f6f6}body.secret-mode .cv-menu a:focus-visible,body.secret-mode .cv-menu a:hover,body.secret-mode .cv-menu button:focus-visible,body.secret-mode .cv-menu button:hover,body.secret-mode .cv-menu button[aria-pressed=true]{background:#f6f6f6;color:#111}body.secret-mode .cv-menu a:focus-visible span,body.secret-mode .cv-menu a:hover span,body.secret-mode .cv-menu button:focus-visible span,body.secret-mode .cv-menu button:hover span,body.secret-mode .cv-menu button[aria-pressed=true] span{border-color:#111}p{margin:0;padding:0}.seo-profile{width:1px;height:1px;position:absolute;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:normal}.fullscreen{position:absolute;inset:0;width:100%;height:100%}.underlay{padding:40px;display:inline-flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;pointer-events:none;z-index:1}.footer-row,.hero-row,.meta-row,.top-bar{width:100%;display:inline-flex;align-items:center;justify-content:center}.meta-row{align-items:flex-start}.footer-row{align-items:flex-end;pointer-events:all;padding-right:124px;padding-bottom:28px}.cv-grid{gap:22px}.meta-spacer,.top-spacer{flex:1 1}.underlay-gap-lg{height:60px}.underlay-gap-sm{height:10px}.brand,.footer-title{font-family:Antonio,Impact,sans-serif;font-weight:700;letter-spacing:0}.brand,.mark{flex:1 1;height:30px;font-size:30px;line-height:30px;color:black}.mark{text-align:right}.cv-menu{display:flex;align-items:flex-start;justify-content:flex-end;gap:8px;pointer-events:all}.cv-menu-floating{position:fixed;top:40px;right:40px;z-index:8}.cv-menu a,.cv-menu button{width:40px;height:40px;display:inline-grid;place-items:center;position:relative;border:1px solid black;background:rgb(246,246,246);color:black;font-family:inherit;font-size:10px;font-weight:800;line-height:1;cursor:pointer}.cv-menu a span,.cv-menu button span{width:6px;height:6px;position:absolute;top:5px;left:5px;border:1px solid black}.cv-menu a:focus-visible,.cv-menu a:hover,.cv-menu button:focus-visible,.cv-menu button:hover,.cv-menu button[aria-pressed=true]{background:black;color:white;outline:none}.cv-link-list a:after,.cv-menu a:after,.cv-menu button:after,.overlay-links a:after{content:"";width:0;height:1px;position:absolute;left:50%;bottom:-5px;background:currentColor;transform:translateX(-50%);transition:width .14s ease}.cv-link-list a,.cv-menu a,.cv-menu button,.overlay-links a{position:relative}.cv-link-list a:hover:after,.cv-menu a:hover:after,.cv-menu button:hover:after,.overlay-links a:hover:after{width:100%}.cv-menu a:focus-visible span,.cv-menu a:hover span,.cv-menu button:focus-visible span,.cv-menu button:hover span,.cv-menu button[aria-pressed=true] span{border-color:white}.caption{flex:1 1;height:100%;font-size:12px;line-height:1.5em;color:black}.caption a{padding-right:0}.cv-kicker{max-width:320px}.pointer-label{transform:rotate(90deg) translate3d(100%,10px,0);transform-origin:right;white-space:nowrap;font-size:12px;font-weight:700;line-height:100%;text-align:right;color:black}.hero-row{flex:1 1;align-items:flex-end;font-family:Antonio,Impact,sans-serif}.hero-index,.hero-letter{flex:1 1;margin:0;font-size:250px;line-height:1em;color:black;letter-spacing:0}.hero-index{line-height:100%;text-align:right}.cv-summary{width:min(30vw,480px);align-self:center;border-left:1px solid black;padding-left:18px;font-size:13px;font-weight:700;line-height:1.35;text-transform:uppercase;color:black}.cv-block{min-width:170px;max-width:240px}.cv-section{min-height:130px;padding:0 0 22px;margin:0 0 22px;border-bottom:1px solid black;scroll-margin-top:16px}.cv-section-index{font-family:Antonio,Impact,sans-serif;font-size:42px;font-weight:700;line-height:.9}.cv-section h2,.cv-section h3{margin:0;color:black}.cv-section h2{font-family:Antonio,Impact,sans-serif;font-size:34px;line-height:.95;text-transform:uppercase}.cv-section h3{margin-top:14px;font-size:12px;line-height:1.2;text-transform:uppercase}.cv-section li,.cv-section p{margin:8px 0 0;font-size:12px;line-height:1.45}.cv-section ul{margin:8px 0 0;padding-left:14px}.cv-link-list{display:grid;grid-template-columns:1fr 1fr;grid-gap:6px;gap:6px;margin-top:12px}.cv-link-list a{min-height:30px;display:grid;place-items:center;border:1px solid black;font-size:10px;font-weight:800;text-transform:uppercase}.cv-link-list a:focus-visible,.cv-link-list a:hover{background:black;color:white;outline:none}.cv-modal-layer{position:fixed;inset:0;z-index:3;display:grid;place-items:center;padding:40px;background:linear-gradient(rgba(230,234,245,.1),rgba(246,246,246,.22)),repeating-linear-gradient(90deg,rgba(0,0,0,.08),rgba(0,0,0,.08) 1px,transparent 0,transparent 18px);pointer-events:all;animation:modalLayerIn .36s ease-out both}.cv-modal-layer.is-closing{pointer-events:none;animation:modalLayerOut .36s ease-in both}.cv-modal-layer.has-project-lightbox{z-index:20}.cv-modal{width:min(820px,calc(100vw - 108px));max-height:min(78vh,680px);position:relative;overflow:hidden;border:1px solid black;background:rgba(246,246,246,.97);color:black;padding:42px 36px 34px;box-shadow:12px 12px 0 black;animation:modalIn .52s cubic-bezier(.16,1,.3,1) both}.cv-modal.is-closing{animation:modalOut .38s cubic-bezier(.7,0,.84,0) both}.cv-modal--projects{width:min(1120px,calc(100vw - 88px));max-height:min(88vh,840px)}.cv-modal--projects .cv-modal-body{max-height:48vh}.cv-modal-shader{position:absolute;inset:-30%;z-index:0;background:radial-gradient(circle at 18% 22%,rgba(0,0,0,.22),transparent 16%),radial-gradient(circle at 72% 38%,rgba(0,0,0,.16),transparent 18%),conic-gradient(from 90deg,transparent,rgba(0,0,0,.16),transparent,rgba(0,0,0,.1),transparent);filter:contrast(5) blur(18px);opacity:0;mix-blend-mode:multiply;animation:shaderWipe .9s ease-out both}.cv-modal--experience .cv-modal-shader{background:radial-gradient(circle at 82% 22%,rgba(0,0,0,.24),transparent 15%),radial-gradient(circle at 24% 74%,rgba(0,0,0,.18),transparent 20%),repeating-conic-gradient(from 45deg,rgba(0,0,0,.12) 0 8deg,transparent 8deg 18deg);animation-name:shaderSweepRight}.cv-modal--formation .cv-modal-shader{background:radial-gradient(circle at 50% 20%,rgba(0,0,0,.2),transparent 18%),linear-gradient(135deg,transparent,rgba(0,0,0,.18),transparent),repeating-linear-gradient(0deg,transparent,transparent 14px,rgba(0,0,0,.16) 15px);animation-name:shaderDrop}.cv-modal--projects .cv-modal-shader{background:radial-gradient(circle at 22% 68%,rgba(0,0,0,.22),transparent 16%),radial-gradient(circle at 78% 30%,rgba(0,0,0,.2),transparent 17%),conic-gradient(from 180deg,transparent,rgba(0,0,0,.2),transparent,rgba(0,0,0,.14),transparent);animation-name:shaderSpin}.cv-modal--skills .cv-modal-shader{background:repeating-linear-gradient(90deg,rgba(0,0,0,.16),rgba(0,0,0,.16) 3px,transparent 0,transparent 14px),radial-gradient(circle at 68% 58%,rgba(0,0,0,.18),transparent 24%);animation-name:shaderBars}.cv-modal--contact .cv-modal-shader{background:radial-gradient(circle at 18% 18%,rgba(0,0,0,.24),transparent 14%),radial-gradient(circle at 80% 80%,rgba(0,0,0,.2),transparent 20%),repeating-radial-gradient(circle at center,transparent 0,transparent 18px,rgba(0,0,0,.12) 19px);animation-name:shaderPulse}.cv-modal-grid{position:absolute;inset:0;z-index:0;background:linear-gradient(rgba(0,0,0,.08) 1px,transparent 0),linear-gradient(90deg,rgba(0,0,0,.08) 1px,transparent 0);background-size:22px 22px;-webkit-mask-image:radial-gradient(circle at center,black,transparent 72%);mask-image:radial-gradient(circle at center,black,transparent 72%);opacity:0;animation:gridIn .62s ease-out .12s both}.cv-modal h2,.cv-modal-body,.cv-modal-eyebrow,.cv-modal-header{position:relative;z-index:4}.cv-modal-header{display:flex;align-items:flex-start;justify-content:space-between;gap:20px}.cv-modal-header h2{margin-top:0}.cv-modal-close{width:42px;height:42px;border:1px solid black;background:transparent;color:black;font-size:28px;line-height:1;cursor:pointer}.cv-modal-close:focus-visible,.cv-modal-close:hover{background:black;color:white;outline:none}.cv-modal-eyebrow{margin-top:14px;font-size:11px;font-weight:800;line-height:1.2;text-transform:uppercase}.cv-modal h2{margin:16px 0 0;padding-top:.08em;font-family:Antonio,Impact,sans-serif;font-size:clamp(56px,9vw,112px);font-weight:700;line-height:.98;text-transform:uppercase}.cv-modal .cv-modal-header h2{margin:0;max-width:calc(100% - 64px)}.cv-modal-body{max-height:35vh;overflow-y:auto;margin-top:28px;padding-right:14px;padding-top:16px;border-top:1px solid black;scrollbar-width:thin}.cv-modal-body h3{margin:18px 0 0;font-size:12px;line-height:1.2;text-transform:uppercase}.cv-modal-body li,.cv-modal-body p{margin:10px 0 0;font-size:14px;line-height:1.48}.cv-modal-body ul{margin:10px 0 0;padding-left:16px}.about-hook{max-width:20ch;font-family:Antonio,Impact,sans-serif;font-size:clamp(34px,5vw,62px)!important;font-weight:700;line-height:.94!important;text-transform:uppercase}.about-scroll{display:grid;grid-gap:8px;gap:8px}.about-reveal{opacity:1;transform:translateZ(0)}@supports (animation-timeline:view()){.about-reveal{opacity:.16;transform:translate3d(0,18px,0);animation:aboutTextReveal linear both;animation-timeline:view();animation-range:entry 5% cover 38%}.about-hook.about-reveal{animation-range:entry 0 cover 48%}}.formation-list{display:grid;grid-gap:12px;gap:12px}.formation-card{position:relative;padding:14px 14px 14px 20px;border:1px solid black;background:rgba(246,246,246,.9)}.formation-card:before{content:"";position:absolute;inset:0 auto 0 0;width:6px;background:black}.formation-meta{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:12px}.formation-meta span,.formation-tags span{display:inline-grid;place-items:center;border:1px solid black;font-size:10px;font-weight:900;line-height:1;text-transform:uppercase}.formation-meta span{min-height:24px;padding:5px 7px;background:black;color:white}.formation-card h3{margin:0;font-family:Antonio,Impact,sans-serif;font-size:clamp(28px,4vw,44px);line-height:.95}.formation-card p{max-width:68ch;margin-top:12px;font-size:14px;line-height:1.45}.formation-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:14px}.formation-tags span{min-height:24px;padding:5px 7px;background:rgba(246,246,246,.78)}.project-detail-grid{display:grid;grid-gap:10px;gap:10px;margin-top:18px}.project-detail-card{display:grid;grid-template-columns:112px 1fr;grid-gap:12px;gap:12px;padding:10px;border:1px solid black;background:rgba(246,246,246,.84);cursor:url("data:image/svg+xml,%3Csvg width='28' height='28' viewBox='0 0 28 28' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='5.5' y='5.5' width='17' height='17' fill='white' stroke='black'/%3E%3Cpath d='M14 4V24M4 14H24' stroke='black'/%3E%3C/svg%3E") 14 14,pointer;transition:background .14s ease,box-shadow .16s ease,transform .16s ease;width:99%;margin-left:1%}.project-detail-card:focus-visible,.project-detail-card:hover{background:rgba(255,255,255,.94);box-shadow:5px 5px 0 black;outline:none;transform:translate3d(-2px,-2px,0)}.project-detail-card.is-featured{grid-template-columns:minmax(180px,260px) 1fr;border-width:2px;background:rgba(255,255,255,.96)}.project-detail-card.is-featured img{min-height:145px}.project-detail-card.is-featured h3{font-family:Antonio,Impact,sans-serif;font-size:clamp(28px,4vw,46px);line-height:.92}.project-detail-card img{width:100%;aspect-ratio:3010/1516;object-fit:cover;border:1px solid black}.project-detail-card h3{margin-top:0}.project-detail-stack{font-size:11px;font-weight:900;text-transform:uppercase}.project-badge{width:-moz-fit-content;width:fit-content;display:inline-grid;place-items:center;margin-top:7px;padding:5px 7px;background:black;color:white;font-size:9px}.project-badge,.project-card-action,.project-lightbox-body a{border:1px solid black;font-weight:900;line-height:1;text-transform:uppercase}.project-card-action,.project-lightbox-body a{display:inline-block;margin-top:10px;padding:6px 8px;background:transparent;color:black;font-family:inherit;font-size:10px}.project-detail-card:focus-visible .project-card-action,.project-detail-card:hover .project-card-action,.project-lightbox-body a:focus-visible,.project-lightbox-body a:hover{background:black;color:white;outline:none}.skills-board{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-gap:10px;gap:10px}.skill-panel{min-height:164px;display:flex;flex-direction:column;position:relative;overflow:clip;padding:14px 14px 14px 22px;border:1px solid black;background:rgba(246,246,246,.9);transition:background .16s ease,box-shadow .18s ease,transform .18s cubic-bezier(.16,1,.3,1)}.skill-panel:before{inset:0 auto 0 0;width:7px;background:black;transition:width .22s cubic-bezier(.16,1,.3,1)}.skill-panel:after,.skill-panel:before{content:"";position:absolute;pointer-events:none}.skill-panel:after{inset:0;border:0 solid black;transition:border-width .16s ease}.skill-panel:hover{background:white;box-shadow:inset 0 -5px 0 black;transform:translate3d(0,-2px,0)}.skill-panel:hover:before{width:12px}.skill-panel:hover:after{border-width:1px}.skill-panel-content{position:relative;z-index:1}.skill-panel h3{margin:0;font-family:Antonio,Impact,sans-serif;font-size:clamp(26px,3.6vw,38px);line-height:.92;text-transform:uppercase;transition:transform .18s cubic-bezier(.16,1,.3,1),letter-spacing .18s ease}.skill-panel:hover h3{letter-spacing:.01em;transform:translate3d(4px,0,0)}.skill-panel-content p{max-width:30ch;margin-top:10px;font-size:12px;font-weight:650;line-height:1.35;transition:opacity .16s ease,transform .18s cubic-bezier(.16,1,.3,1)}.skill-panel:hover .skill-panel-content p{opacity:.78;transform:translate3d(4px,0,0)}.skill-tags{display:flex;flex-wrap:wrap;gap:6px;position:relative;z-index:1;margin-top:auto;padding-top:18px}.skill-tag{min-height:24px;display:inline-grid;place-items:center;padding:5px 7px;border:1px solid black;background:rgba(246,246,246,.78);font-size:10px;font-weight:900;line-height:1;text-transform:uppercase;transition:background .14s ease,color .14s ease,transform .16s cubic-bezier(.16,1,.3,1)}.skill-panel:hover .skill-tag{background:black;color:white;transform:translate3d(0,-1px,0)}.skill-panel:hover .skill-tag:nth-child(2){transition-delay:20ms}.skill-panel:hover .skill-tag:nth-child(3){transition-delay:40ms}.skill-panel:hover .skill-tag:nth-child(4){transition-delay:60ms}.skill-panel:hover .skill-tag:nth-child(5){transition-delay:80ms}.skill-panel:hover .skill-tag:nth-child(6){transition-delay:.1s}.project-trail{position:absolute;inset:0;z-index:3;overflow:hidden;pointer-events:none}.project-trail-card{width:clamp(170px,22vw,290px);position:absolute;left:var(--x);top:var(--y);margin:0;padding:0;border:1px solid black;background:#f6f6f6;color:black;font-family:inherit;box-shadow:6px 6px 0 black;opacity:0;pointer-events:auto;transform:translate3d(-50%,-50%,0) rotate(var(--rotate)) scale(.76);animation:projectTrailInOut 1.7s cubic-bezier(.16,1,.3,1) both}.project-trail-card img{width:100%;display:block;aspect-ratio:3010/1516;object-fit:cover;filter:grayscale(.15) contrast(1.05)}.project-trail-card span{display:block;padding:6px 8px;border-top:1px solid black;font-size:10px;font-weight:900;line-height:1;text-transform:uppercase}.project-trail-card:focus-visible,.project-trail-card:hover{outline:none;filter:invert(1)}.project-lightbox{position:fixed;inset:0;z-index:12;display:grid;place-items:center;padding:clamp(16px,3vh,34px) clamp(24px,7vw,112px);background:repeating-linear-gradient(45deg,rgba(0,0,0,.1),rgba(0,0,0,.1) 1px,rgba(246,246,246,.96) 0,rgba(246,246,246,.96) 12px),#f6f6f6;animation:modalLayerIn .18s ease-out both}.project-lightbox.is-closing{pointer-events:none;animation:projectLightboxLayerOut .24s ease-in both}.project-lightbox-card{width:min(100%,1480px);max-height:calc(100vh - clamp(32px, 6vh, 68px));position:relative;margin:0;overflow-y:auto;overflow-x:hidden;border:1px solid black;background:#f6f6f6;box-shadow:9px 9px 0 black;scrollbar-width:thin}.project-lightbox-card.is-opening.project-lightbox-card--card{animation:projectLightboxInFromCard .34s cubic-bezier(.16,1,.3,1) both}.project-lightbox-card.is-opening.project-lightbox-card--trail{animation:projectLightboxInFromTrail .38s cubic-bezier(.16,1,.3,1) both}.project-lightbox-card.is-closing{animation:projectLightboxOut .24s cubic-bezier(.7,0,.84,0) both}.project-lightbox-card.is-switching{animation:projectLightboxSwitch .34s cubic-bezier(.16,1,.3,1) both}.project-lightbox-card>img{width:100%;height:clamp(330px,53vh,610px);max-height:none;display:block;object-fit:cover;object-position:top center;background:black}.project-lightbox-card.has-project-qr>img{height:clamp(280px,43vh,500px)}.project-lightbox-nav{position:absolute;top:10px;left:10px;z-index:1;display:flex;gap:6px}.project-lightbox-nav button{width:42px;height:42px;border:1px solid black;background:#f6f6f6;color:black;font-size:18px;font-weight:900;line-height:1}.project-lightbox-nav button:focus-visible,.project-lightbox-nav button:hover{background:black;color:white;outline:none}.project-lightbox-card figcaption{display:flex;align-items:center;justify-content:flex-start;flex-wrap:wrap;gap:12px;padding:8px 18px;border-top:1px solid black;font-size:11px;font-weight:900;line-height:1;text-transform:uppercase}.project-counter{margin-left:auto;font-family:Antonio,Impact,sans-serif;font-size:15px;font-weight:700;line-height:.9}.project-counter,.project-key-hint{padding:4px 6px;border:1px solid black}.project-key-hint{font-size:10px;font-weight:900;line-height:1}.project-lightbox-card figcaption .project-badge{margin-top:0}.project-lightbox-body{min-height:136px;position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;grid-column-gap:24px;column-gap:24px;grid-row-gap:10px;row-gap:10px;align-items:end;padding:18px;border-top:1px solid black}.project-lightbox-body p{margin:0;max-width:88ch;font-size:clamp(16px,1vw,16px);line-height:1.45}.project-lightbox-body .project-detail-stack{grid-column:1;margin-top:10px;font-size:13px}.project-lightbox-body a{min-width:150px;grid-row:1;align-self:end;position:static;display:inline-grid;place-items:center;padding:10px 12px}.project-lightbox-body a,.project-qr{grid-column:2;justify-self:end;margin-top:0;background:#f6f6f6}.project-qr{width:-moz-fit-content;width:fit-content;grid-row:2;display:grid;grid-template-columns:74px 92px;align-items:center;grid-gap:10px;gap:10px;padding:7px;border:1px solid black}.project-qr img{width:74px;height:74px;display:block;border:1px solid black;background:white}.project-qr span{font-size:10px;font-weight:900;line-height:1.15;text-transform:uppercase}.project-lightbox-close{width:42px;height:42px;position:absolute;top:10px;right:10px;z-index:1;border:1px solid black;background:#f6f6f6;color:black;font-size:28px;line-height:1}.project-lightbox-close:focus-visible,.project-lightbox-close:hover{background:black;color:white;outline:none}@keyframes modalLayerIn{0%{opacity:0}to{opacity:1}}@keyframes modalLayerOut{0%{opacity:1}to{opacity:0}}@keyframes modalIn{0%{opacity:0;transform:translate3d(0,22px,0) scale(.96);-webkit-clip-path:inset(48% 48% 48% 48%);clip-path:inset(48% 48% 48% 48%)}to{opacity:1;transform:translateZ(0) scale(1);-webkit-clip-path:inset(0 0 0 0);clip-path:inset(0 0 0 0)}}@keyframes modalOut{0%{opacity:1;transform:translateZ(0) scale(1);-webkit-clip-path:inset(0 0 0 0);clip-path:inset(0 0 0 0)}to{opacity:0;transform:translate3d(0,18px,0) scale(.97);-webkit-clip-path:inset(46% 46% 46% 46%);clip-path:inset(46% 46% 46% 46%)}}@keyframes aboutTextReveal{0%{opacity:.16;transform:translate3d(0,18px,0);filter:blur(2px)}55%{opacity:.72;filter:blur(0)}to{opacity:1;transform:translateZ(0);filter:blur(0)}}@keyframes shaderWipe{0%{opacity:.85;transform:translate3d(-12%,8%,0) rotate(0deg) scale(.72)}58%{opacity:.55}to{opacity:.08;transform:translate3d(9%,-7%,0) rotate(28deg) scale(1.25)}}@keyframes shaderSweepRight{0%{opacity:.75;transform:translate3d(14%,-8%,0) skewX(-12deg) scale(.74)}to{opacity:.08;transform:translate3d(-10%,4%,0) skewX(8deg) scale(1.26)}}@keyframes shaderDrop{0%{opacity:.78;transform:translate3d(0,-18%,0) scaleY(.7)}to{opacity:.08;transform:translate3d(0,10%,0) scaleY(1.2)}}@keyframes shaderSpin{0%{opacity:.82;transform:rotate(-40deg) scale(.75)}to{opacity:.08;transform:rotate(38deg) scale(1.24)}}@keyframes shaderBars{0%{opacity:.75;transform:translate3d(-16%,0,0) scaleX(.78)}to{opacity:.08;transform:translate3d(14%,0,0) scaleX(1.18)}}@keyframes shaderPulse{0%{opacity:.82;transform:scale(.66)}64%{opacity:.32}to{opacity:.08;transform:scale(1.25)}}@keyframes gridIn{0%{opacity:0;transform:scale(1.12)}to{opacity:.45;transform:scale(1)}}@keyframes projectTrailInOut{0%{opacity:0;transform:translate3d(-50%,-50%,0) rotate(calc(var(--rotate) - 10deg)) scale(.66);-webkit-clip-path:inset(42% 42% 42% 42%);clip-path:inset(42% 42% 42% 42%)}14%{opacity:.92;transform:translate3d(-50%,-50%,0) rotate(var(--rotate)) scale(1);-webkit-clip-path:inset(0 0 0 0);clip-path:inset(0 0 0 0)}72%{opacity:.86}to{opacity:0;transform:translate3d(-50%,-62%,0) rotate(calc(var(--rotate) + 7deg)) scale(.94);-webkit-clip-path:inset(0 0 0 0);clip-path:inset(0 0 0 0)}}@keyframes projectLightboxInFromCard{0%{opacity:0;transform:translate3d(0,22px,0) scale(.97);-webkit-clip-path:inset(32% 32% 32% 32%);clip-path:inset(32% 32% 32% 32%)}to{opacity:1;transform:translateZ(0) scale(1);-webkit-clip-path:inset(0 0 0 0);clip-path:inset(0 0 0 0)}}@keyframes projectLightboxInFromTrail{0%{opacity:0;transform:translate3d(0,-8px,0) rotate(-1.5deg) scale(.86);-webkit-clip-path:inset(12% 42% 12% 42%);clip-path:inset(12% 42% 12% 42%)}58%{opacity:1;transform:translate3d(0,2px,0) rotate(.5deg) scale(1.02);-webkit-clip-path:inset(0 0 0 0);clip-path:inset(0 0 0 0)}to{opacity:1;transform:translateZ(0) rotate(0deg) scale(1);-webkit-clip-path:inset(0 0 0 0);clip-path:inset(0 0 0 0)}}@keyframes projectLightboxOut{0%{opacity:1;transform:translateZ(0) scale(1);-webkit-clip-path:inset(0 0 0 0);clip-path:inset(0 0 0 0)}to{opacity:0;transform:translate3d(0,-14px,0) scale(.94);-webkit-clip-path:inset(38% 38% 38% 38%);clip-path:inset(38% 38% 38% 38%)}}@keyframes projectLightboxSwitch{0%{opacity:1;transform:translateZ(0) scale(1)}42%{opacity:0;transform:translate3d(calc(var(--project-direction) * -18px),0,0) scale(.98);-webkit-clip-path:inset(0 18% 0 18%);clip-path:inset(0 18% 0 18%)}43%{opacity:0;transform:translate3d(calc(var(--project-direction) * 18px),0,0) scale(.98)}to{opacity:1;transform:translateZ(0) scale(1);-webkit-clip-path:inset(0 0 0 0);clip-path:inset(0 0 0 0)}}@keyframes projectLightboxLayerOut{0%{opacity:1}to{opacity:0}}.footer-title{flex:1 1;text-align:center;white-space:nowrap;font-size:16px;line-height:1em;color:black}.right{text-align:right}.overlay-links{position:fixed;right:40px;bottom:40px;z-index:7;pointer-events:all}.overlay-links p{display:flex;align-items:center;justify-content:flex-end;gap:8px}.overlay-links a{min-width:24px;min-height:24px;display:inline-grid;place-items:center;padding:0 2px;font-size:12px;line-height:1}.overlay-links a:focus-visible,.overlay-links a:hover{background:black;color:white;outline:none}.r3f-shell{z-index:auto}.r3f-shell,.sphere-game{width:100%;height:100%;position:relative}.sphere-game-hud{position:absolute;left:40px;bottom:40px;z-index:5;display:flex;align-items:center;gap:6px;pointer-events:none}.sphere-game-hud button,.sphere-game-hud span{min-width:52px;height:30px;display:inline-grid;place-items:center;border:1px solid #111;background:rgba(246,246,246,.86);color:#111;font-family:var(--font-antonio),Impact,sans-serif;font-size:12px;font-weight:900;letter-spacing:0;line-height:1;text-transform:uppercase;box-shadow:4px 4px 0 #111}.sphere-game-hud button{min-width:64px;border-radius:0;cursor:pointer;pointer-events:auto}.sphere-game-hud button:focus-visible,.sphere-game-hud button:hover{background:#111;color:#f6f6f6;outline:none}.sphere-game-result{position:absolute;left:50%;bottom:40px;z-index:5;display:grid;grid-template-columns:auto auto;align-items:center;grid-gap:12px;gap:12px;padding:10px 14px;border:1px solid #111;background:rgba(246,246,246,.92);color:#111;box-shadow:6px 6px 0 #111;pointer-events:none;transform:translateX(-50%)}.sphere-game-result span,.sphere-game-result strong{font-family:var(--font-antonio),Impact,sans-serif;font-weight:900;letter-spacing:0;line-height:1;text-transform:uppercase}.sphere-game-result span{min-width:58px;padding:6px 8px;background:#111;color:#f6f6f6;font-size:12px;text-align:center}.sphere-game-result strong{font-size:26px}.sphere-game-result.is-secret{background:#111;color:#f6f6f6;box-shadow:8px 8px 0 #f6f6f6}.sphere-game-result.is-secret span{background:#f6f6f6;color:#111}.sphere-secret-lab{position:fixed;left:50%;top:50%;z-index:40;width:min(760px,calc(100vw - 48px));display:grid;grid-gap:14px;gap:14px;padding:26px;border:1px solid #f6f6f6;background:#111;color:#f6f6f6;box-shadow:10px 10px 0 #f6f6f6;transform:translate(-50%,-50%);animation:hiddenLabIn .5s steps(5) both}.sphere-secret-lab-close{width:44px;height:44px;position:absolute;top:12px;right:12px;display:inline-grid;place-items:center;border:1px solid #f6f6f6;border-radius:0;background:#111;color:#f6f6f6;font-family:var(--font-antonio),Impact,sans-serif;font-size:28px;font-weight:900;line-height:1}.sphere-secret-lab-close:focus-visible,.sphere-secret-lab-close:hover{background:#f6f6f6;color:#111;outline:none}.sphere-secret-lab a,.sphere-secret-lab span,.sphere-secret-lab strong{font-family:var(--font-antonio),Impact,sans-serif;font-weight:900;letter-spacing:0;line-height:1;text-transform:uppercase}.sphere-secret-lab>span{width:-moz-fit-content;width:fit-content;padding:7px 9px;background:#f6f6f6;color:#111;font-size:12px}.sphere-secret-lab strong{max-width:calc(100% - 70px);font-size:clamp(42px,6vw,82px);line-height:.94}.sphere-secret-lab p{max-width:460px;margin:0 0 8px;color:rgba(246,246,246,.72);font-size:14px;line-height:1.35}.sphere-secret-lab nav{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));grid-gap:10px;gap:10px}.sphere-secret-lab a{min-height:150px;display:grid;grid-template-rows:1fr auto;align-items:stretch;border:1px solid #f6f6f6;color:#f6f6f6;font-size:12px;text-align:center;overflow:hidden}.sphere-secret-lab a img{width:100%;height:108px;display:block;object-fit:cover;border-bottom:1px solid #f6f6f6;filter:grayscale(1) contrast(1.2);opacity:.9;transition:filter .18s ease,opacity .18s ease,transform .18s ease}.sphere-secret-lab a span{display:grid;min-height:42px;place-items:center;padding:8px}.sphere-secret-lab a:focus-visible,.sphere-secret-lab a:hover{background:#f6f6f6;color:#111;outline:none}.sphere-secret-lab a:focus-visible img,.sphere-secret-lab a:hover img{filter:grayscale(0) contrast(1);opacity:1;transform:scale(1.035)}@keyframes hiddenLabIn{0%{opacity:0;transform:translate(-50%,-46%) scale(.96)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}@media screen and (max-width:568px){body,html{overflow:auto}body{position:static}.fullscreen{position:fixed}.underlay{min-height:100vh;position:relative;padding:24px;overflow-y:auto}.footer-row{padding-right:0;padding-bottom:54px}.brand{font-size:24px;line-height:24px}.cv-menu{flex-wrap:wrap;gap:5px}.cv-menu-floating{top:24px;right:24px;max-width:calc(100vw - 180px)}.sphere-game-hud{left:24px;bottom:24px}.sphere-game-result{right:24px;bottom:70px;left:auto;transform:none}.sphere-secret-lab{padding:18px}.sphere-secret-lab nav{grid-template-columns:1fr}.cv-menu a,.cv-menu button{width:34px;height:34px;font-size:9px}.hero-row{display:flex;flex-direction:column;align-items:flex-start;gap:18px}.hero-index,.hero-letter{font-size:90px}.cv-summary{width:100%;font-size:11px}.cv-link-list{grid-template-columns:1fr}.cv-modal-layer{padding:18px}.cv-modal{width:100%;max-height:82vh;padding:26px 18px 18px;box-shadow:7px 7px 0 black}.cv-modal h2{font-size:clamp(44px,18vw,80px)}.cv-modal-body{max-height:44vh}.project-trail-card{width:clamp(140px,50vw,220px)}.project-lightbox{padding:18px}.project-lightbox-card{width:100%;max-height:calc(100vh - 36px);overflow-y:auto}.project-lightbox-card>img{height:clamp(210px,38vh,360px)}.project-lightbox-card.has-project-qr>img{height:clamp(180px,30vh,280px)}.project-lightbox-body p{font-size:15px}.project-lightbox-body{grid-template-columns:1fr;padding:14px 14px 70px}.project-lightbox-body a{grid-column:1;grid-row:auto;justify-self:stretch;width:auto}.project-qr{grid-column:1;grid-row:auto;justify-self:start}.project-detail-card,.project-detail-card.is-featured,.skills-board{grid-template-columns:1fr}.skill-panel{min-height:150px}.cv-grid{align-items:flex-start;gap:12px}.cv-block{min-width:0;max-width:none}.full{display:none;visibility:hidden}}