*,:after,:before{box-sizing:border-box}:root{--font-outfit:"Avenir Next","Segoe UI","Helvetica Neue",Arial,sans-serif}body,html{margin:0;padding:0;width:100%;min-height:100%;background:#1c1c1e;-moz-osx-font-smoothing:grayscale}.portfolio,body,html{-webkit-font-smoothing:antialiased}.portfolio{--bg:#1c1c1e;--bg-raised:#242426;--bg-hover:#2c2c2e;--border:#38383a;--text:#f2f2f7;--text-2:#aeaeb2;--text-3:#636366;--text-inv:#1c1c1e;--nav-bg:rgba(28,28,30,0.55);--mono:ui-monospace,"SF Mono",SFMono-Regular,Menlo,monospace;font-family:var(
    --font-outfit,"Outfit",-apple-system,BlinkMacSystemFont,sans-serif
  );background:var(--bg);color:var(--text);min-height:100vh;transition:background-color .3s ease,color .3s ease;line-height:1.5}.portfolio[data-theme=light]{--bg:#f5efe6;--bg-raised:#ede8dd;--bg-hover:#e5dfd4;--border:#d0cabf;--text:#1c1c1e;--text-2:#6c6c70;--text-3:#aeaeb2;--text-inv:#f2f2f7;--nav-bg:rgba(245,239,230,0.82)}.portfolio *,.portfolio :after,.portfolio :before{box-sizing:border-box}.portfolio button{cursor:pointer;background:none;border:none;font:inherit}.portfolio a{color:inherit;text-decoration:none}.portfolio img{display:block}.portfolio h1,.portfolio h2,.portfolio h3,.portfolio p{margin:0}.p-nav{position:-webkit-sticky;position:sticky;top:0;z-index:100;background:var(--nav-bg);backdrop-filter:saturate(180%) blur(40px);-webkit-backdrop-filter:saturate(180%) blur(40px);transition:background-color .3s ease}.p-nav-inner{padding:0 clamp(1rem,4vw,2.5rem);height:56px;justify-content:space-between}.p-nav-inner,.p-nav-right{display:flex;align-items:center}.p-nav-right{gap:.75rem}.p-name-pill{font-size:.8125rem;font-weight:500;letter-spacing:.01em;color:var(--text);border:1.5px solid var(--border);border-radius:100px;padding:.35rem .875rem;white-space:nowrap;transition:border-color .2s,color .2s;flex-shrink:0}.p-name-pill:hover{border-color:var(--text-2)}.p-name-short{display:none}.p-tabs{display:flex;background:var(--bg-raised);border:1px solid var(--border);border-radius:100px;padding:4px;gap:2px;position:relative}.p-tabs-slider{position:absolute;top:4px;bottom:4px;left:4px;width:calc((100% - 10px) / 2);border-radius:100px;background:var(--text);box-shadow:0 1px 5px rgba(0,0,0,.28);transition:transform .5s cubic-bezier(.4,0,.2,1),background .3s ease;pointer-events:none}.p-tabs[data-tab=about] .p-tabs-slider{transform:translateX(calc(100% + 2px))}.p-tabs .p-tab{font-size:.8125rem;font-weight:500;color:var(--text-2);padding:.4rem 1.125rem;border-radius:100px;letter-spacing:.01em;position:relative;z-index:1;transition:color .18s ease}.p-tabs .p-tab:hover:not(.p-tab--active){color:var(--text)}.p-tabs .p-tab--active{color:var(--text-inv)}.p-theme-toggle{width:34px;height:34px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:var(--text-2);flex-shrink:0;transition:background .15s,color .15s}.p-theme-toggle:hover{background:var(--bg-hover);color:var(--text)}.p-theme-toggle svg{display:block}.p-content{max-width:960px;margin:0 auto;padding:clamp(2.5rem,5vw,4rem) clamp(1rem,4vw,2.5rem)}.p-hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(260px,360px);grid-gap:clamp(1.25rem,3vw,2.5rem);gap:clamp(1.25rem,3vw,2.5rem);align-items:center;margin-bottom:2.75rem}.p-hero-greeting{font-size:clamp(1.875rem,4vw,2.625rem);font-weight:600;letter-spacing:-.03em;line-height:1.15;color:var(--text);margin-bottom:.75rem}.p-hero-sub{font-size:.9375rem;font-weight:300;color:var(--text-2);line-height:1.75;max-width:480px;margin:0}.p-hero-side-image-wrap{position:relative;justify-self:end;align-self:center;display:inline-flex;flex-direction:column;align-items:center}.p-hero-side-image{width:75%;max-width:360px;height:auto;filter:drop-shadow(0 10px 30px rgba(0,0,0,.22));pointer-events:auto;-webkit-user-select:none;-moz-user-select:none;user-select:none}.p-hero-side-caption{position:absolute;bottom:-1.75rem;left:50%;transform:translateX(-50%);font-size:.75rem;font-weight:500;letter-spacing:.01em;color:var(--text-2);background:var(--bg-raised);border:1px solid var(--border);border-radius:999px;padding:.25rem .6rem;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity .2s ease}.p-hero-side-image-wrap:hover .p-hero-side-caption{opacity:1}.p-section{margin-bottom:5rem}.p-section:last-child{margin-bottom:0}.p-section--beyond{margin-bottom:3.5rem}.p-spotify-list{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:.75rem;gap:.75rem}.p-spotify-placeholder{width:100%;height:100px;border-radius:12px;background:var(--bg-raised);border:1px solid var(--border);overflow:hidden}.p-spotify-list iframe{display:block;width:100%;height:100px;border:none}.portfolio .p-section-label{font-size:.6875rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--text-3);margin-bottom:.75rem}.p-projects-grid{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:.625rem;gap:.625rem;margin-bottom:.625rem}.p-project-card{background:var(--bg-raised);border:1px solid var(--border);border-radius:10px;padding:1rem 1rem .875rem;display:flex;flex-direction:column;gap:.5rem;min-height:120px;transition:border-color .15s;cursor:default}a.p-project-card{cursor:pointer}a.p-project-card:hover{border-color:var(--text-2)}.p-card-header{justify-content:space-between;gap:.5rem}.p-card-header,.p-card-title{display:flex;align-items:flex-start}.p-card-title{gap:.375rem;min-width:0}.p-card-name-row{min-width:0}.p-card-name-row .p-project-name{display:inline}.p-card-name-row .p-public-badge{display:inline-block;vertical-align:middle;margin-left:.375rem}.p-card-repo-icon{color:var(--text-2);flex-shrink:0;margin-top:6px}.p-project-name{font-size:.875rem;font-weight:600;color:#58a6ff;letter-spacing:-.01em}.portfolio[data-theme=light] .p-project-name{color:#0969da}.p-public-badge{font-size:.6875rem;font-weight:500;color:var(--text-2);border:1px solid var(--border);border-radius:100px;padding:.1rem .5rem;white-space:nowrap;flex-shrink:0}.p-card-dots{color:var(--text-3);flex-shrink:0;margin-top:1px}.p-project-desc{font-size:.775rem;font-weight:300;color:var(--text-2);line-height:1.55;flex:1 1}.p-project-footer{display:flex;align-items:center;gap:.375rem;margin-top:auto;padding-top:.25rem}.p-lang-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.p-lang-name{font-size:.725rem;color:var(--text-2);font-family:var(--mono)}.p-view-repos-btn{display:flex;align-items:center;justify-content:center;gap:.5rem;width:100%;padding:.7rem 1rem;margin-top:.125rem;border:1px solid var(--border);border-radius:10px;font-size:.8125rem;font-weight:500;color:var(--text-2);transition:border-color .15s,color .15s,background .15s}.p-view-repos-btn:hover{border-color:var(--text-2);color:var(--text);background:var(--bg-hover)}.p-list{border:1px solid var(--border);border-radius:10px;overflow:hidden}.p-list-item{border-bottom:1px solid var(--border)}.p-list-item:last-child{border-bottom:none}.p-list-row{display:flex;align-items:center;justify-content:space-between;padding:.875rem 1rem;gap:1rem;cursor:pointer;transition:background .12s}.p-list-row:hover{background:var(--bg-hover)}.p-list-left{flex:1 1}.p-list-left,.p-list-text{display:flex;align-items:center;gap:.625rem;min-width:0}.p-list-text{flex-wrap:wrap}.p-org-logo{width:16px;height:16px;border-radius:3px;object-fit:contain;flex-shrink:0;background:transparent}.p-list-role{font-size:.875rem;font-weight:500;color:var(--text);white-space:nowrap}.p-list-sep{font-size:.875rem;color:var(--text-3);flex-shrink:0}.p-list-org{font-size:.875rem;color:var(--text-2);transition:color .12s;white-space:nowrap}.p-list-org:hover{color:var(--text);text-decoration:underline;text-underline-offset:2px}.p-list-org-plain{font-size:.875rem;color:var(--text-2);white-space:nowrap}.p-exp-row-right{display:flex;align-items:center;gap:.625rem;flex-shrink:0}.p-list-date{font-size:.725rem;font-family:var(--mono);white-space:nowrap}.p-exp-chevron,.p-list-date{color:var(--text-3);flex-shrink:0}.p-exp-chevron{transition:transform .22s ease}.p-exp-chevron--open{transform:rotate(180deg)}.p-exp-details-inner{padding:0 1rem .875rem}.p-exp-bullets{list-style:disc;padding-left:1.25rem;display:flex;flex-direction:column;gap:.375rem}.p-exp-bullets li{font-size:.775rem;font-weight:300;color:var(--text-2);line-height:1.55}.p-about-hero{display:grid;grid-template-columns:176px 1fr;grid-gap:2.5rem;gap:2.5rem;align-items:start;margin-bottom:3.5rem}.p-about-photo{width:100%;aspect-ratio:1;border-radius:12px;object-fit:cover;object-position:top;border:1px solid var(--border)}.p-about-name{font-size:1.75rem;font-weight:600;letter-spacing:-.03em;line-height:1.1;color:var(--text);margin-bottom:.375rem}.p-about-tagline{font-size:.875rem;color:var(--text-2);margin-bottom:1.125rem}.p-about-bio{font-size:.9375rem;font-weight:300;color:var(--text-2);line-height:1.75;max-width:500px;margin-bottom:3rem}.p-about-links{display:flex;gap:1.25rem;flex-wrap:wrap}.p-about-link{display:flex;align-items:center;gap:.375rem;font-size:.8125rem;font-weight:500;color:var(--text-2);letter-spacing:.01em;transition:color .15s}.p-about-link:hover{color:var(--text)}.p-currently{border:1px solid var(--border);border-radius:10px;overflow:hidden}.p-currently-item{display:flex;align-items:baseline;padding:.875rem 1rem;border-bottom:1px solid var(--border);gap:1.5rem;transition:background .12s}.p-currently-item:last-child{border-bottom:none}.p-currently-item:hover{background:var(--bg-hover)}.p-currently-label{font-size:.6875rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--text-3);min-width:70px;flex-shrink:0}.p-currently-value{font-size:.875rem;color:var(--text);font-weight:400}.p-hobbies{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:1.25rem;gap:1.25rem}.p-hobby-card{display:flex;flex-direction:column;gap:.75rem}.p-hobby-card img{width:100%;aspect-ratio:3/4;object-fit:cover;border-radius:10px;border:1px solid var(--border);transition:opacity .15s}.p-hobby-card:hover img{opacity:.82}.p-hobby-label{font-size:.6875rem;font-weight:500;letter-spacing:.04em;color:var(--text-3);text-align:center;text-transform:uppercase}.p-footer{border-top:1px solid var(--border);padding:1.5rem clamp(1rem,4vw,2.5rem);display:flex;justify-content:center;align-items:center;gap:1rem;transition:border-color .3s ease}.p-footer a{font-size:.8125rem;font-weight:500;color:var(--text-3);transition:color .15s}.p-footer a:hover{color:var(--text)}.p-footer-dot{width:3px;height:3px;border-radius:50%;background:var(--border);flex-shrink:0}.p-hills-canvas{display:block;width:100%;height:auto;overflow-x:hidden;overflow-y:visible;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;font-family:ui-monospace,SF Mono,Menlo,Courier New,monospace;font-size:clamp(.6rem,.85vw,.9rem);line-height:1.25;white-space:pre;color:#a2ab9b;opacity:.55;margin:0;padding:0}[data-theme=light] .p-hills-canvas{color:#6e6f67;opacity:.35}.loader-overlay{position:fixed;inset:0;z-index:9999;background:var(--bg,#1c1c1e);display:flex;align-items:center;justify-content:center;transition:opacity .4s ease}.loader-overlay.loader-fade-out{opacity:0;pointer-events:none}.loader-wrapper{width:200px;height:60px;position:relative;z-index:1}.loader-circle{width:20px;height:20px;position:absolute;border-radius:50%;background-color:var(--text,#f2f2f7);left:15%;transform-origin:50%;animation:loaderCircle .5s ease infinite alternate}@keyframes loaderCircle{0%{top:60px;height:5px;border-radius:50px 50px 25px 25px;transform:scaleX(1.7)}40%{height:20px;border-radius:50%;transform:scaleX(1)}to{top:0}}.loader-circle:nth-child(2){left:45%;animation-delay:.2s}.loader-circle:nth-child(3){left:auto;right:15%;animation-delay:.3s}.loader-shadow{width:20px;height:4px;border-radius:50%;background-color:rgba(0,0,0,.9);position:absolute;top:62px;transform-origin:50%;z-index:-1;left:15%;filter:blur(1px);animation:loaderShadow .5s ease infinite alternate}@keyframes loaderShadow{0%{transform:scaleX(1.5)}40%{transform:scaleX(1);opacity:.7}to{transform:scaleX(.2);opacity:.4}}.loader-shadow:nth-child(4){left:45%;animation-delay:.2s}.loader-shadow:nth-child(5){left:auto;right:15%;animation-delay:.3s}@media (max-width:768px){.p-content{padding:2rem 1.25rem}.p-nav-inner{padding:0 1.25rem}.p-hero{grid-template-columns:1fr;gap:1.25rem;margin-bottom:2rem}.p-hero-side-image-wrap{justify-self:center}.p-hero-side-image{max-width:min(72vw,360px)}.p-projects-grid{grid-template-columns:1fr}.p-list-row{align-items:flex-start;padding:.875rem}.p-list-left{flex:1 1;min-width:0;align-items:flex-start}.p-list-text{flex-direction:column;align-items:flex-start;gap:.125rem}.p-list-sep{display:none}.p-list-role{white-space:normal;font-size:.8125rem;line-height:1.3}.p-list-org,.p-list-org-plain{white-space:normal;font-size:.75rem;color:var(--text-3)}.p-exp-row-right{padding-top:2px;gap:.5rem}.p-list-date{font-size:.675rem}.p-exp-details-inner{padding:0 .875rem .875rem}.p-about-hero{grid-template-columns:1fr;gap:1.5rem;text-align:center}.p-about-photo{width:160px;margin:0 auto}.p-about-bio{max-width:100%;text-align:left;margin-bottom:2rem}.p-about-links{justify-content:center;margin-bottom:1.5rem}.p-hobbies{grid-template-columns:repeat(2,1fr)}.p-footer{flex-wrap:wrap;gap:.75rem}}@media (max-width:520px){.p-spotify-list{grid-template-columns:1fr}.p-nav-inner{padding:0 1rem}.p-name-pill{font-size:.725rem;padding:.3rem .65rem}.p-name-full{display:none}.p-name-short{display:inline}.p-tabs .p-tab{font-size:.725rem;padding:.35rem .8rem}.p-hero-greeting{font-size:1.625rem}.p-hero-side-image{max-width:min(82vw,320px)}.p-content{padding:1.75rem 1rem}.p-project-card{padding:.875rem .875rem .75rem}.p-list-row{padding:.75rem 1rem}.p-exp-details-inner{padding:0 1rem .75rem}.p-exp-bullets li{font-size:.75rem}.p-about-photo{width:140px}.p-about-name{font-size:1.5rem}.p-about-tagline{font-size:.8125rem}.p-about-bio{font-size:.875rem}.p-currently-item{flex-direction:column;gap:.2rem;padding:.75rem 1rem}.p-currently-label{min-width:unset}.p-hobbies{gap:.875rem}.p-footer{padding:1.25rem 1rem;gap:.625rem}.p-footer a{font-size:.75rem}}.p-workstation-fixed{position:fixed;left:20px;bottom:40px;z-index:999}@media (max-width:1200px){.p-workstation-fixed{display:none}}.p-pixel-workstation{display:flex;flex-direction:column;align-items:center;position:relative;opacity:.8;transition:opacity .3s ease}.p-pixel-workstation:hover{opacity:1}.p-workstation-label{font-size:.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-3);margin-top:.25rem}.p-hat-menu{position:absolute;bottom:140px;left:0;font-size:13px;background:var(--bg-raised);border:1px solid var(--border);border-radius:12px;padding:.5rem;min-width:130px;display:flex;flex-direction:column;gap:2px;box-shadow:0 8px 30px rgba(0,0,0,.3);z-index:1001}.p-hat-menu-header{font-size:.625rem;font-weight:700;text-transform:uppercase;color:var(--text-3);padding:.4rem .6rem;letter-spacing:.05em}.p-hat-option{background:transparent;border:none;color:var(--text-2);font-size:.75rem;text-align:left;padding:.5rem .6rem;border-radius:6px;cursor:pointer;transition:all .2s}.p-hat-option:hover{background:var(--bg-hover);color:var(--text)}.p-companion-wrap{width:50px;height:50px;-webkit-user-select:none;-moz-user-select:none;user-select:none;filter:drop-shadow(0 4px 12px rgba(0,0,0,.15))}.p-companion-hitbox{position:relative;outline:none}.p-companion{color:#bcd5ea;filter:drop-shadow(0 4px 12px rgba(0,0,0,.25))}[data-theme=light] .p-companion{color:#bcd5ea;filter:drop-shadow(0 2px 8px rgba(0,0,0,.1))}.p-companion svg{border:none}.p-companion-eyes,[data-theme=light] .p-companion-eyes{fill:#1c1c1e}.p-companion-hint{position:absolute;top:-24px;left:50%;transform:translateX(-50%);font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-3);background:var(--bg-raised);border:1px solid var(--border);padding:.2rem .5rem;border-radius:4px;white-space:nowrap;opacity:0;transition:opacity .2s ease;pointer-events:none}.p-companion-wrap:hover .p-companion-hint{opacity:1}.p-felix-chat{position:absolute;bottom:-10px;width:min(320px,calc(100vw - 2rem));background:color-mix(in srgb,var(--bg-raised) 92%,white 8%);border:1px solid var(--border);border-radius:18px;box-shadow:0 24px 60px rgba(0,0,0,.24);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);overflow:hidden;-moz-user-select:text;user-select:text;-webkit-user-select:text}.p-felix-chat--right{left:calc(100% + 16px)}.p-felix-chat--left{right:calc(100% + 16px)}.p-felix-chat-header{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem;padding:.9rem 1rem .75rem;border-bottom:1px solid var(--border)}.p-felix-chat-title{margin:0;font-size:.875rem;font-weight:600;color:var(--text)}.p-felix-chat-subtitle{margin:.2rem 0 0;font-size:.6875rem;letter-spacing:.08em;text-transform:uppercase;color:var(--text-3)}.p-felix-chat-close{width:28px;height:28px;border-radius:999px;color:var(--text-2);background:var(--bg-hover);transition:color .15s ease,background .15s ease}.p-felix-chat-close:hover{color:var(--text)}.p-felix-chat-messages{display:flex;flex-direction:column;gap:.65rem;max-height:280px;overflow-y:auto;overflow-x:hidden;padding:.9rem 1rem}.p-felix-chat-bubble{max-width:90%;min-width:0;padding:.75rem .85rem;border-radius:14px;font-size:.8rem;line-height:1.5;white-space:pre-wrap;overflow-wrap:break-word;word-break:normal}.p-felix-chat-link{color:inherit;text-decoration:underline;text-underline-offset:2px}.p-felix-chat-link:hover{opacity:.8}.p-felix-chat-bubble--assistant{align-self:flex-start;background:rgba(188,213,234,.18);color:var(--text)}.p-felix-chat-bubble--user{align-self:flex-end;background:var(--text);color:var(--text-inv)}.p-felix-chat-bubble--loading{color:var(--text-2)}.p-felix-chat-form{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;grid-gap:.55rem;gap:.55rem;padding:0 1rem 1rem}.p-felix-chat-input{width:100%;height:42px;border:1px solid var(--border);border-radius:999px;background:var(--bg);color:var(--text);padding:0 .95rem;font:inherit;font-size:.82rem;line-height:1;outline:none;box-shadow:inset 0 1px 0 rgba(255,255,255,.04)}.p-felix-chat-input:focus{border-color:var(--text-2)}.p-felix-chat-input::placeholder{color:var(--text-3)}.p-felix-chat-send{width:42px;height:42px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;background:var(--text);color:var(--bg);border:1px solid color-mix(in srgb,var(--text) 70%,transparent);box-shadow:0 10px 24px rgba(0,0,0,.18);transition:opacity .15s ease,transform .15s ease,background-color .2s ease,color .2s ease}.p-felix-chat-send:hover:not(:disabled){transform:translateY(-1px)}.portfolio[data-theme=light] .p-felix-chat-send{background:#1c1c1e;color:#f5efe6;border-color:rgba(28,28,30,.12)}.p-felix-chat-send:disabled{opacity:.45;transform:none;cursor:not-allowed}