:root{--mono:"SFMono-Regular", "Cascadia Code", "Roboto Mono", monospace;--display:Georgia, "Times New Roman", serif;font-family:var(--mono);color:#ddebce;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;background:#101412}*{box-sizing:border-box}body{margin:0}#root{width:100%;min-height:100svh}.playground{background:#101412;min-height:100svh;position:relative;overflow:hidden}.playground:before{content:"";opacity:.12;pointer-events:none;background-image:radial-gradient(#c9d5be .7px,#0000 .7px);background-size:7px 7px;position:absolute;inset:0}.portfolio-shell{z-index:3;flex-direction:column;width:min(1180px,100% - 80px);min-height:100svh;margin:0 auto;padding:34px 0 24px;display:flex;position:relative}.portfolio-nav,.portfolio-footer,.section-heading,.project-row{align-items:center;display:flex}.portfolio-nav{color:#eef6e3c2;letter-spacing:.08em;text-transform:uppercase;justify-content:space-between;font-size:11px}.monogram{color:#efffc7;letter-spacing:-.08em;font-size:18px;font-weight:700;text-decoration:none}.monogram span,.portfolio-intro h1 span{color:#e87550}.portfolio-nav nav{gap:28px;margin-left:auto;margin-right:28px;display:flex}.control-toggle{z-index:5;color:#101412;width:40px;height:40px;font:14px/1 var(--mono);cursor:pointer;background:#c5f36c;border:1px solid #c5f36cb8;border-radius:50%;place-items:center;padding:0;transition:color .18s,border-color .18s,transform .18s;display:grid;position:fixed;bottom:20px;right:20px}.control-toggle:hover,.control-toggle:focus-visible{color:#efffc7;background:#e87550;border-color:#efffc7;transform:translateY(-2px)scale(1.04)}.portfolio-nav a,.portfolio-footer a{color:inherit;text-decoration:none}.portfolio-nav nav a:hover,.portfolio-footer a:hover,.project-row:hover{color:#efffc7}.availability{color:#ddefcf80}.availability i{background:#c5f36c;border-radius:50%;width:5px;height:5px;margin:0 8px 1px 0;display:inline-block}.portfolio-intro{max-width:610px;margin-top:clamp(100px,18vh,190px)}.eyebrow{color:#e87550;letter-spacing:.14em;text-transform:uppercase;margin:0 0 17px;font-size:10px}.portfolio-intro h1{color:#efffc7;font-family:var(--display);letter-spacing:-.07em;margin:0;font-size:clamp(64px,10vw,142px);font-weight:400;line-height:.84}.intro-copy{color:#ddefcfa8;max-width:340px;margin-top:30px;font-size:13px;line-height:1.6}.about-section{border-top:1px solid #ddefcf2e;width:min(920px,100%);min-height:560px;margin-top:25vh;padding-top:18px;position:relative;overflow:hidden}.about-heading{justify-content:space-between;gap:30px;display:flex}.about-heading .eyebrow{margin-bottom:14px}.about-heading h2{color:#efffc7;max-width:470px;font-family:var(--display);letter-spacing:-.04em;margin:0;font-size:clamp(30px,4vw,50px);font-weight:400;line-height:.98}.section-index{color:#ddefcf66;font-size:10px}.about-layout{grid-template-columns:minmax(180px,.7fr) minmax(0,1.3fr);gap:clamp(30px,8vw,110px);margin-top:48px;display:grid}.about-details .eyebrow{margin-bottom:18px}.about-details ul{color:#ddefcf94;gap:13px;margin:0;padding:0;font-size:11px;line-height:1.5;list-style:none;display:grid}.about-details li:before{content:"/";color:#e87550;width:20px;display:inline-block}.closed-apps{margin:0;position:absolute;bottom:16px;left:0}.closed-app-dock{border-top:1px solid #ddefcf2e;flex-wrap:wrap;gap:7px;padding-top:10px;display:flex}.closed-app{color:#ddefcfb3;width:34px;height:34px;font:9px var(--mono);cursor:pointer;background:#ddefcf0f;border:1px solid #ddefcf33;place-items:center;padding:0;display:grid}.closed-app svg{color:#c5f36c;width:16px;height:16px}.closed-app:hover,.closed-app:focus-visible{color:#efffc7;background:#c5f36c1a;border-color:#c5f36c}.social-grid{min-height:0;position:static}.social-window{top:var(--window-y);left:var(--window-x);-webkit-user-select:none;user-select:none;background:#101412f5;border:1px solid #ddefcf3d;width:min(100%,300px);transition:box-shadow .18s;position:absolute;overflow:hidden;box-shadow:8px 8px #00000038}.social-window.is-minimized{width:min(100%,300px)}.social-window:hover{box-shadow:11px 11px #0000004d}.social-window.is-opening{z-index:20;opacity:0;pointer-events:none;transform-origin:50%;transition:opacity .26s,transform .26s;transform:scale(3.2)}.window-bar{color:#eef6e3b8;cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;background:#ddefcf14;border-bottom:1px solid #ddefcf26;justify-content:space-between;align-items:center;gap:10px;min-height:29px;padding-left:10px;display:flex}.window-bar:active{cursor:grabbing}.window-title{text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:7px;min-width:0;font-size:9px;display:flex;overflow:hidden}.window-title svg{color:#c5f36c;width:12px;height:12px}.window-controls{align-self:stretch;display:flex}.window-controls button{color:#eef6e3ad;width:31px;font:16px/1 var(--mono);cursor:pointer;background:0 0;border:0;border-left:1px solid #ddefcf1f;padding:0}.window-controls button:nth-child(2){place-items:center;display:grid}.window-square{border:1px solid;width:10px;height:10px;display:block}.window-controls button:hover,.window-controls button:focus-visible{color:#101412;background:#c5f36c}.window-controls button:last-child:hover,.window-controls button:last-child:focus-visible{color:#efffc7;background:#e87550}.window-content{color:#eef6e3b8;border:1px solid #ddefcf29;flex-direction:column;gap:18px;min-height:174px;padding:17px;text-decoration:none;transition:background .18s;display:flex}.social-window:focus-within .window-content,.social-window:hover .window-content{background:#c5f36c12}.is-window-dragging,.is-window-dragging *{-webkit-user-select:none!important;user-select:none!important}.social-platform{color:#efffc7;letter-spacing:.04em;text-transform:uppercase;align-items:center;gap:8px;font-size:10px;font-weight:700;display:flex}.social-platform svg{color:#c5f36c;width:15px;height:15px}.social-card-linkedin .social-platform svg,.social-card-email .social-platform svg{color:#e87550}.social-open-link{color:#ddefcf6b;margin-left:auto;font-size:14px;font-weight:400;text-decoration:none}.social-open-link:hover,.social-open-link:focus-visible{color:#c5f36c}.social-card-github .window-content{color:#c9d1d9;background:#0d1117}.social-card-github .social-platform,.social-card-github .profile-info strong{color:#f0f6fc}.social-card-github .profile-info em{color:#8b949e}.social-card-github .profile-meta{color:#58a6ff}.social-card-linkedin .window-content{color:#d7e6f4;background:#111d2a}.social-card-linkedin .social-platform,.social-card-linkedin .profile-info strong{color:#70b7f5}.social-card-linkedin .profile-info em,.social-card-linkedin .profile-meta{color:#91a9bd}.social-card-email .window-content{color:#d8dee8;background:#171b22}.social-card-email .social-platform,.social-card-email .profile-info strong{color:#e8edf5}.social-card-email .profile-info em,.social-card-email .profile-meta{color:#9ca8b8}.profile-row{align-items:center;gap:12px;display:flex}.profile-avatar{object-fit:cover;background:#c5f36c;border-radius:50%;flex:0 0 40px;width:40px;height:40px}.profile-avatar-initials{color:#101412;font-family:var(--display);place-items:center;font-size:17px;display:grid}.profile-avatar-blank{background:#b6c0b1;position:relative;overflow:hidden}.profile-avatar-blank:before{content:"";background:#7d887e;border-radius:50%;width:12px;height:12px;position:absolute;top:9px;left:14px}.profile-avatar-blank:after{content:"";background:#7d887e;border-radius:50% 50% 0 0;height:22px;position:absolute;bottom:-6px;left:6px;right:6px}.profile-info{flex-direction:column;gap:5px;min-width:0;display:flex}.profile-info strong{color:#efffc7;font-size:14px;font-weight:400}.profile-info em,.profile-meta{overflow-wrap:anywhere;font-size:10px;font-style:normal}.profile-info em{color:#ddefcf85}.profile-meta{color:#c5f36c;overflow-wrap:anywhere;margin-top:auto}.portfolio-work{width:min(920px,100%);margin-top:8vh;padding-top:48px}.section-heading{border-bottom:1px solid #ddefcf2e;justify-content:space-between}.section-heading .eyebrow{margin-bottom:11px}.section-heading>span{color:#ddefcf6b;font-size:10px}.github-embed{background:#101412b8;border:1px solid #ddefcf2e;margin-top:28px}.github-embed-header{border-bottom:1px solid #ddefcf24;align-items:center;gap:15px;padding:22px;display:flex}.github-embed-avatar{object-fit:cover;background:#c5f36c;border-radius:50%;flex:0 0 54px;width:54px;height:54px}.github-embed-header h2{color:#efffc7;font-family:var(--display);letter-spacing:-.04em;margin:0 0 5px;font-size:24px;font-weight:400}.github-embed-header p,.github-bio,.repo-main>span,.repo-empty{color:#ddefcf85;margin:0;font-size:11px;line-height:1.6}.github-profile-link{color:#c5f36c;white-space:nowrap;margin-left:auto;font-size:10px;text-decoration:none}.github-bio{max-width:580px;padding:20px 22px 0}.github-stats{color:#ddefcf80;flex-wrap:wrap;gap:22px;padding:20px 22px;font-size:10px;display:flex}.github-stats strong{color:#efffc7;margin-right:5px;font-size:13px;font-weight:400}.contribution-section{padding:0 22px 22px}.contribution-heading{color:#efffc7;justify-content:space-between;align-items:center;gap:18px;margin-bottom:14px;font-size:11px;display:flex}.contribution-heading>span{color:#ddefcf80;white-space:nowrap;align-items:center;gap:5px;font-size:9px;display:flex}.contribution-heading i,.contribution-cell{border:1px solid #ddefcf0d;border-radius:2px;width:10px;height:10px;display:block}.contribution-scroll{padding-bottom:3px;overflow-x:auto}.contribution-chart{grid-template-columns:28px minmax(520px,1fr);gap:8px;min-width:556px;display:grid}.weekday-labels{color:#ddefcf66;grid-template-rows:repeat(7,10px);gap:3px;font-size:8px;line-height:10px;display:grid}.weekday-labels span:first-child,.weekday-labels span:nth-child(3),.weekday-labels span:nth-child(5){visibility:hidden}.contribution-grid{grid-template-rows:repeat(7,10px);grid-auto-columns:10px;grid-auto-flow:column;gap:3px;display:grid}.contribution-level-0{background:#ddefcf14}.contribution-level-1{background:#c5f36c47}.contribution-level-2{background:#c5f36c7a}.contribution-level-3{background:#c5f36cb3}.contribution-level-4{background:#c5f36c}.repo-list{border-top:1px solid #ddefcf24}.repo-row{min-height:88px;color:inherit;border-bottom:1px solid #ddefcf24;grid-template-columns:28px minmax(0,1fr) auto 20px;align-items:center;gap:16px;padding:14px 22px;text-decoration:none;transition:background .18s,padding .18s;display:grid}.repo-row:last-child{border-bottom:0}.repo-row:hover{background:#c5f36c0f;padding-left:27px}.repo-number{color:#e87550;font-size:10px}.repo-main{gap:5px;min-width:0;display:grid}.repo-main strong{color:#efffc7;font-size:12px;font-weight:400}.repo-main>span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.repo-details{color:#ddefcf70;white-space:nowrap;align-items:center;gap:14px;font-size:9px;display:flex}.repo-details span:first-child{color:#c5f36c}.repo-arrow{color:#c5f36c;font-size:16px}.repo-empty{padding:22px}.project-row{color:#eef6e3b8;border-bottom:1px solid #ddefcf2e;gap:20px;min-height:64px;font-size:12px;text-decoration:none;transition:color .18s,padding .18s}.project-row:hover{padding-left:8px}.project-number{color:#e87550;width:20px;font-size:10px}.project-name{color:#efffc7;flex:1}.project-type{color:#ddefcf7a;font-size:10px}.project-arrow{color:#c5f36c;margin-left:12px;font-size:17px}.portfolio-footer{color:#ddefcf6b;letter-spacing:.04em;border-top:1px solid #ddefcf2e;margin-top:24vh;padding-top:24px;font-size:10px;display:block}.footer-main{grid-template-columns:minmax(0,1fr) minmax(220px,.7fr);align-items:end;gap:60px;padding-bottom:72px;display:grid}.footer-copy{max-width:520px}.footer-copy .eyebrow{margin-bottom:14px}.footer-copy h2{color:#efffc7;font-family:var(--display);letter-spacing:-.05em;margin:0;font-size:clamp(38px,5vw,66px);font-weight:400;line-height:.94}.footer-copy>p:last-child{color:#ddefcf94;max-width:390px;margin:22px 0 0;font-size:11px;line-height:1.7}.footer-cta{color:#101412;text-transform:uppercase;background:#c5f36c;border:1px solid #c5f36c8c;justify-content:space-between;align-items:center;min-height:58px;padding:0 16px;font-size:10px;text-decoration:none;transition:color .18s,background .18s,transform .18s;display:flex}.footer-cta span{align-items:center;gap:9px;display:flex}.footer-cta svg{width:15px;height:15px}.footer-cta strong{font-size:17px;font-weight:400}.footer-cta:hover,.footer-cta:focus-visible{color:#efffc7;background:#e87550;transform:translateY(-3px)}.footer-bottom{border-top:1px solid #ddefcf1f;justify-content:space-between;align-items:center;gap:20px;padding-top:14px;display:flex}.footer-links{gap:20px;display:flex}.footer-links a{color:inherit}.footer-links a:hover{color:#efffc7}@media (width<=700px){.portfolio-shell{width:calc(100% - 40px);padding-top:24px}.portfolio-nav nav{gap:14px;margin-right:0}.availability{display:none}.portfolio-intro{margin-top:14vh}.portfolio-intro h1{font-size:clamp(58px,18vw,100px)}.about-section{min-height:900px;margin-top:14vh}.about-layout{margin-top:30px;display:block}.about-details{z-index:1;position:relative}.social-grid{min-height:0}.social-window{width:calc(100% - 8px);left:0}.portfolio-work{margin-top:8vh;padding-top:36px}.github-embed-header{flex-wrap:wrap;align-items:flex-start}.github-profile-link{width:100%;margin-left:69px}.contribution-section{padding-left:14px;padding-right:14px}.contribution-heading{flex-direction:column;align-items:flex-start;gap:10px}.repo-row{grid-template-columns:24px minmax(0,1fr) 18px;gap:10px;padding:14px}.repo-row:hover{padding-left:18px}.repo-details{flex-wrap:wrap;grid-column:2/3;gap:8px}.repo-arrow{grid-area:1/3/span 2}.project-row{gap:10px}.project-type{display:none}.portfolio-footer{margin-top:20vh}.footer-main{grid-template-columns:1fr;gap:32px;padding-bottom:48px}.footer-copy h2{font-size:clamp(40px,12vw,62px)}.footer-bottom{flex-direction:column;align-items:flex-start;gap:11px}.footer-links{gap:14px}}@media (width>=701px) and (width<=900px){.social-window{width:calc(50% - 5px)}}.game-grid{--cell-size:min(2.0833vw, 3.3333svh);--board-width:calc(48 * var(--cell-size));opacity:.27;width:100%;height:auto;position:absolute;inset:0;overflow:hidden}.grid-lines{width:var(--board-width);opacity:.12;background-image:linear-gradient(#d3ebbd21 1px,#0000 1px),linear-gradient(90deg,#d3ebbd21 1px,#0000 1px);background-size:var(--cell-size) var(--cell-size);height:100%;position:absolute;top:0;left:50%;transform:translate(-50%)}.segment,.apple{top:calc(var(--y) * var(--cell-size));left:calc((50% - (24 * var(--cell-size))) + (var(--x) * var(--cell-size)));width:var(--cell-size);height:var(--cell-size);transition:top .145s linear,left .145s linear;display:block;position:absolute}.segment:after{content:"";background:#c5f36c;position:absolute;inset:18%;box-shadow:0 0 10px #c5f36c1f}.segment.head:after{background:#efffc7}.ambient-snake{opacity:.3}.ambient-snake .segment:after{background:var(--snake-color)}.ambient-snake .segment.head:after{background:var(--snake-head)}.ambient-snake-0{--snake-color:#a96858;--snake-head:#c28c7e}.ambient-snake-1{--snake-color:#668d94;--snake-head:#82a9ad}.ambient-snake-2{--snake-color:#81709f;--snake-head:#9a89b8}.apple{z-index:2;transition:transform .145s linear,opacity .45s,filter .45s}.apple span{background:#ef724e;border-radius:50%;width:44%;height:44%;margin:28%;display:block;box-shadow:0 0 18px #ef724e4d}.snake{z-index:1;position:absolute;inset:0}.snake.is-teleporting .segment{transition:none}.snake.is-dying{animation:.56s ease-in forwards death}.snake:not(.is-dying){animation:.42s ease-out arrival}.apple.is-dying{opacity:0;filter:blur(3px);transform:scale(1.5)}.apple-edge-indicator{--cell-size:min(2.0833vw, 3.3333svh);left:calc((50% - (24 * var(--cell-size))) + (var(--x) * var(--cell-size)));z-index:4;color:#ef724e;width:22px;height:22px;font:700 14px/20px var(--mono);text-align:center;background:#101412e0;border:1px solid #ef724e;border-radius:50%;margin-left:-6px;animation:1.2s ease-in-out infinite indicator-pulse;position:fixed;box-shadow:0 0 14px #ef724e47}.apple-edge-indicator-top{top:14px}.apple-edge-indicator-bottom{bottom:14px}@keyframes death{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(1.12)}}@keyframes arrival{0%{opacity:0;transform:translate(-7px)rotate(-1deg)}35%{opacity:1;transform:translate(5px)rotate(.8deg)}65%{transform:translate(-2px)rotate(-.3deg)}to{transform:translate(0)rotate(0)}}@keyframes indicator-pulse{0%,to{opacity:.7;transform:scale(.92)}50%{opacity:1;transform:scale(1)}}
