@font-face{font-family:editorial;src:url(/_next/static/media/ed7565e80f187568-s.p.woff2) format("woff2");font-display:swap;font-weight:400;font-style:normal}@font-face{font-family:editorial Fallback;src:local("Times New Roman");ascent-override:73.50%;descent-override:26.50%;line-gap-override:0.00%;size-adjust:100.00%}.__className_1e561a{font-family:editorial,editorial Fallback;font-weight:400;font-style:normal}.__variable_1e561a{--font-editorial:"editorial","editorial Fallback"}*,: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:#c7c7cc;--text-3:#8e8e93;--text-inv:#1c1c1e;--nav-bg:rgba(28,28,30,0.55);--mono:ui-monospace,"SF Mono",SFMono-Regular,Menlo,monospace;--ease-out:cubic-bezier(0.16,1,0.3,1);font-family:var(
    --font-outfit,"Outfit",-apple-system,BlinkMacSystemFont,sans-serif
  );background:var(--bg);background-image:url(/textures/grain.svg);background-size:160px 160px;color:var(--text);min-height:100vh;transition:background-color .3s ease,color .3s ease;line-height:1.5}.p-depth{position:fixed;inset:0;width:100%;height:100%;z-index:2;pointer-events:none}.p-shell{position:relative;z-index:1}.p-depth--sky{z-index:3}.p-felix-layer{position:relative;z-index:4}.p-depth--front{z-index:5}.portfolio[data-theme=light]{--bg:#f7f6f2;--bg-raised:#ffffff;--bg-hover:#edf0e8;--border:#adb8a6;--text:#202a24;--text-2:#3f4b42;--text-3:#5d6b5f;--text-inv:#ffffff;--nav-bg:rgba(247,246,242,0.94)}.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}.portfolio :is(a,button,summary,input):focus-visible{outline:2px solid var(--text-2);outline-offset:4px}.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{display:inline-flex;align-items:center;justify-content:center;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 .16s,color .16s,transform .16s var(--ease-out);flex-shrink:0}.p-name-pill:hover{border-color:var(--text-2)}.p-name-short{display:none}.p-nav-label{position:relative;top:1px}.p-tabs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));background:var(--bg-raised);border:1px solid var(--border);border-radius:100px;padding:4px;grid-gap:2px;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 .24s var(--ease-out),background .3s ease;pointer-events:none}.p-tabs[data-tab=about] .p-tabs-slider{transform:translateX(calc(100% + 2px))}.p-tabs:has(.p-tab:focus-visible) .p-tabs-slider{transition-duration:0s}.p-tabs .p-tab{display:inline-flex;align-items:center;justify-content:center;font-size:.8125rem;font-weight:500;line-height:1;color:var(--text-2);padding:.5rem 1.125rem;border-radius:100px;letter-spacing:.01em;position:relative;z-index:1;transition:color .14s ease,transform .14s var(--ease-out)}.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,transform .16s var(--ease-out)}.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}.portfolio .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:1rem}.p-hero-sub{font-size:.9375rem;font-weight:400;color:var(--text-2);line-height:1.75;max-width:480px;margin:0}.p-hero-roles{display:grid;grid-gap:.875rem;gap:.875rem;margin:1.25rem 0}.p-hero-role{display:grid;grid-template-columns:4.75rem minmax(0,1fr);grid-gap:.5rem;gap:.5rem}.p-hero-role dt{color:var(--text-3);font:.625rem/1.75 var(--mono);padding-top:.1875rem}.p-hero-role dd{margin:0;color:var(--text-2);font-size:.8125rem;line-height:1.75}.p-hero-role strong{color:var(--text);font-weight:500}.p-hero-contact,.p-hero-role--previous dd{color:var(--text-3);font-size:.75rem}.p-hero-contact{line-height:1.8;overflow-wrap:anywhere}.portfolio .p-hero-contact a{color:var(--text-2);text-decoration:underline;-webkit-text-decoration-color:var(--border);text-decoration-color:var(--border);text-underline-offset:3px;transition:color .14s,-webkit-text-decoration-color .14s;transition:color .14s,text-decoration-color .14s;transition:color .14s,text-decoration-color .14s,-webkit-text-decoration-color .14s}.portfolio .p-hero-contact a:is(:hover,:focus-visible){color:var(--text);-webkit-text-decoration-color:currentColor;text-decoration-color:currentColor}.p-hero-side-image-wrap{position:relative;width:100%;max-width:360px;justify-self:end;align-self:center;display:inline-flex;flex-direction:column;align-items:center}.p-hero-side-image{width:75%;max-width:360px;aspect-ratio:1/1;height:auto;object-fit:cover;display:block;border-radius:50%;overflow:hidden;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 .16s,background-color .16s,box-shadow .18s,transform .18s var(--ease-out);cursor:default}.p-project-card:focus-within,.p-project-card:hover{border-color:var(--text-2)}.p-project-card:active{background:var(--bg-hover);transition-duration:.08s}a.p-project-card{cursor:pointer}.p-project-impact{font-size:.725rem;font-weight:500;color:var(--text)}.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;text-decoration:underline;-webkit-text-decoration-color:transparent;text-decoration-color:transparent;text-underline-offset:3px;transition:-webkit-text-decoration-color .14s;transition:text-decoration-color .14s;transition:text-decoration-color .14s,-webkit-text-decoration-color .14s}.p-project-card:is(:hover,:focus-visible) .p-project-name{-webkit-text-decoration-color:currentColor;text-decoration-color:currentColor}.portfolio[data-theme=light] .p-project-name{color:#195b91}.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:400;color:var(--text-2);line-height:1.55;flex:1 1}.p-project-footer{display:flex;align-items:center;flex-wrap:wrap;gap:.375rem;margin-top:auto;padding-top:.25rem}.p-lang-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.portfolio[data-theme=light] .p-lang-dot{box-shadow:inset 0 0 0 1px rgba(32,42,36,.25)}.p-lang-name,.p-project-stat{font-size:.725rem;color:var(--text-2);font-family:var(--mono)}.p-project-stat{display:inline-flex;align-items:center;gap:.25rem;margin-left:.625rem;line-height:1}.p-project-stat svg{flex-shrink:0}.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-pub-row{display:flex;flex-direction:column;gap:.25rem;padding:.875rem 1rem;transition:background .12s}.p-pub-row:hover{background:var(--bg-hover)}.p-pub-header{display:flex;align-items:baseline;justify-content:space-between;gap:1rem}.p-pub-title,.p-pub-title-plain{font-size:.875rem;font-weight:500;color:var(--text);min-width:0}.p-pub-title:hover{text-decoration:underline;text-underline-offset:2px}.p-pub-meta{font-size:.775rem;color:var(--text-2);line-height:1.55}.p-news-scroll{display:flex;flex-direction:column;gap:.625rem;max-height:240px;overflow-y:auto;padding-right:.375rem;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.p-news-block{display:flex;align-items:baseline;gap:.875rem;padding:.875rem 1rem;background:var(--bg-raised);border:1px solid var(--border);border-radius:10px;flex-shrink:0;transition:border-color .15s}.p-news-block:hover{border-color:var(--text-2)}.p-news-text{font-size:.8125rem;color:var(--text-2);line-height:1.55;min-width:0}.p-news-link{color:inherit}.p-news-link:hover{color:var(--text);text-decoration:underline;text-underline-offset:2px}.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:400;color:var(--text-2);line-height:1.55}.p-about-hero{display:grid;grid-template-columns:200px 1fr;grid-gap:2.75rem;gap:2.75rem;align-items:center;margin-bottom:4rem}.p-about-intro{position:relative;top:12px}.p-about-photo{width:100%;height:auto;aspect-ratio:4/5;border-radius:16px;object-fit:cover;object-position:center 22%;border:1px solid var(--border);box-shadow:0 14px 34px rgba(0,0,0,.3)}[data-theme=light] .p-about-photo{box-shadow:0 10px 28px rgba(0,0,0,.12)}.p-about-name{font-family:var(--font-editorial),Georgia,serif;font-size:2.25rem;font-weight:400;letter-spacing:-.03em;line-height:1.1;color:var(--text);margin-bottom:.5rem}.p-about-tagline{font-size:.875rem;color:var(--text-3);letter-spacing:.01em;margin-bottom:1.25rem}.p-about-bio{font-size:.9375rem;font-weight:400;color:var(--text-2);line-height:1.7;max-width:540px;margin-bottom:2.5rem}.p-about-links{display:flex;gap:.625rem;flex-wrap:wrap;margin-top:1.75rem}.p-about-link{display:inline-flex;align-items:center;gap:.4rem;font-size:.8125rem;font-weight:500;color:var(--text-2);letter-spacing:.01em;padding:.5rem .875rem;border:1px solid var(--border);border-radius:999px;background:var(--bg-raised);transition:color .18s ease,background .18s ease,border-color .18s ease,transform .18s ease}.p-about-link:hover{color:var(--text);background:var(--bg-hover);border-color:var(--text-3)}.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%;height:auto;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);text-decoration:underline;-webkit-text-decoration-color:transparent;text-decoration-color:transparent;text-underline-offset:4px;transition:color .14s,-webkit-text-decoration-color .14s;transition:color .14s,text-decoration-color .14s;transition:color .14s,text-decoration-color .14s,-webkit-text-decoration-color .14s}.p-footer a:is(:hover,:focus-visible){color:var(--text);-webkit-text-decoration-color:currentColor;text-decoration-color:currentColor}.p-footer-dot{width:3px;height:3px;border-radius:50%;background:var(--border);flex-shrink:0}.p-grove{--grove-ink:#a2ab9b;position:relative;padding-top:42px;overflow:hidden}.p-grove[data-theme=light]{--grove-ink:#52674a}.p-grove-art{position:relative;width:max(100%,720px);left:50%;transform:translateX(-50%);touch-action:pan-y;font-family:ui-monospace,SF Mono,Menlo,Courier New,monospace;font-size:max(6px,.83vw)}@media (max-width:768px){.p-grove-art{width:calc(var(--grove-columns) * 1ch);transform:translateX(calc(-1 * var(--grove-center)))}}.p-hills-canvas{display:block;width:100%;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:none;font-family:inherit;font-size:inherit;line-height:1.25;white-space:pre;color:color-mix(in srgb,var(--grove-ink) 55%,transparent);margin:0;padding:0;transition:color .8s ease,opacity .8s ease}.p-grove[data-theme=light] .p-hills-canvas{color:color-mix(in srgb,var(--grove-ink) 72%,transparent)}.p-grove-sky{position:absolute;top:3px;right:10%;width:60px;height:38px}.p-grove-sky>*{position:absolute;inset:0;margin:0;font:10px/1.15 var(--mono);pointer-events:none;transition:opacity .7s ease,transform .9s ease}.p-grove-sun{color:#a78343;opacity:0;transform:translateY(12px) rotate(-20deg)}.p-grove-moon{color:#c8cfbd;opacity:.65;transform:translateY(0)}.p-grove[data-theme=light] .p-grove-sun{color:#9a681e;opacity:1;transform:translateY(0) rotate(0)}.p-grove[data-theme=light] .p-grove-moon{opacity:0;transform:translateY(-12px)}.p-grove-temple-ink{color:#b0a08a;transition:color .8s ease}.p-grove-temple-roof{color:#c18b74}.p-grove[data-theme=light] .p-grove-temple-ink{color:#504232;font-weight:500}.p-grove[data-theme=light] .p-grove-temple-roof{color:#783a27}.p-grove-lantern{position:relative;color:#f2cf8e;text-shadow:0 0 5px #efbd6b99,0 0 15px #dfae5c55;transition:color .4s ease,text-shadow .4s ease}.p-grove-lantern:before{content:"";position:absolute;pointer-events:none;left:50%;top:50%;width:clamp(20px,3.2em,38px);height:clamp(20px,3.2em,38px);border-radius:50%;background:radial-gradient(circle,#ffc65588 0,#ffb13440 30%,#ef982414 55%,transparent 75%);opacity:.24;transform:translate(-50%,-50%) scale(.85);transition:opacity .4s ease,transform .4s ease}.p-grove[data-theme=light] .p-grove-lantern{color:#825016;text-shadow:none}.p-grove[data-theme=light] .p-grove-lantern:before{background:radial-gradient(circle,#e28b197a 0,#e89a3238 35%,#edac4820 55%,transparent 75%);opacity:0}.p-grove.p-grove--lit .p-grove-lantern{color:#fff1c9;text-shadow:0 0 2px #fff5dd,0 0 7px #ffd27f,0 0 16px #f6b84c,0 0 28px #ed962788}.p-grove.p-grove--lit .p-grove-lantern:before{opacity:1;transform:translate(-50%,-50%) scale(1)}.p-grove[data-theme=light].p-grove--lit .p-grove-lantern{color:#88420d;text-shadow:0 0 3px #efb457bb,0 0 12px #df911b66}.portfolio .p-grove-temple{position:absolute;min-width:44px;min-height:44px;padding:0;border-radius:8px;color:var(--text-3)}.p-grove-temple:focus-visible{outline:1px dashed var(--grove-ink);outline-offset:4px}.p-grove-hint{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%,3px);white-space:nowrap;font:10px/1.5 var(--mono);opacity:0;transition:opacity .2s ease,transform .2s ease}.p-grove-temple:focus-visible .p-grove-hint,.p-grove-temple:hover .p-grove-hint{opacity:1;transform:translate(-50%)}.loader-overlay{position:fixed;inset:0;z-index:20000;background:var(--bg,#1c1c1e);display:grid;place-items:center;transition:opacity .3s ease}.loader-overlay.loader-fade-out{opacity:0;pointer-events:none}.loader-bamboo{color:#a2b393;text-align:center;padding:0 1rem}[data-theme=light] .loader-bamboo{color:#617654}[data-theme=light] .loader-bamboo-distant{color:color-mix(in srgb,currentColor 55%,transparent)}.loader-bamboo pre{margin:0 0 1.5rem;font:clamp(6px,1.8vw,10px)/1.35 var(--mono);text-align:left}.loader-bamboo-row>span{display:inline-block;opacity:0;animation:bamboo-grow .22s ease-out both;animation-delay:var(--grow-delay)}.loader-bamboo-distant{color:color-mix(in srgb,currentColor 35%,transparent)}.loader-bamboo-caption{font:10px/1.5 var(--mono);letter-spacing:.08em;color:var(--text-3);animation:bamboo-caption .3s ease .2s both}@keyframes bamboo-grow{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:translateY(0)}}@keyframes bamboo-caption{0%{opacity:0}to{opacity:1}}.p-desk-steam{color:#bbc7b1}.p-desk-steam-burst{color:#d2dec8}[data-theme=light] .p-desk-steam,[data-theme=light] .p-desk-steam-burst{color:#516548}.p-desk-steam path{animation:desk-tea-steam 3.8s ease-in-out infinite}.p-desk-steam path+path{animation-delay:-1.9s}@keyframes desk-tea-steam{0%,to{opacity:.2;transform:translateY(.5px)}50%{opacity:.75;transform:translateY(-1px)}}.p-desk-steam-burst path{animation:desk-tea-curl 1.8s ease-out both}.p-desk-steam-burst path+path{animation-delay:.15s}.p-pixel-workstation--tea-warm .p-desk-tea>path:first-of-type{fill:#e0d4b4}@keyframes desk-tea-curl{0%{opacity:0;transform:translateY(1px)}20%{opacity:.9}to{opacity:0;transform:translate(-1px,-6px)}}.p-companion{position:relative;transform-origin:center bottom}.p-companion-zzz{position:absolute;top:2px;right:-9px;font:10px/1 var(--mono);color:var(--text-3);animation:felix-doze 3.6s ease-in-out infinite}.p-companion-zzz span{display:inline-block;font-size:8px;transform:translate(2px,-6px)}@keyframes felix-doze{0%,to{opacity:.25;transform:translateY(2px)}50%{opacity:.7;transform:translateY(-2px)}}.p-felix-firefly{position:absolute;left:50%;width:4px;height:4px;margin-left:-2px;border-radius:50%;background:#e4e8a8;box-shadow:0 0 6px 2px #d6dc9e66,0 0 14px 4px #d6dc9e22;pointer-events:none;opacity:0}.p-felix-firefly--perched{animation:felix-firefly-arrive 3.5s ease-out 1s forwards,felix-firefly-glow 3.6s ease-in-out 4.5s infinite}.p-felix-firefly--leaving{animation:felix-firefly-leave 1.5s ease-in forwards}[data-theme=light] .p-felix-firefly{display:none}@keyframes felix-firefly-arrive{0%{opacity:0;transform:translate(-90px,-70px)}15%{opacity:.9}45%{transform:translate(-40px,-46px)}75%{transform:translate(-10px,-14px)}to{opacity:1;transform:translate(0)}}@keyframes felix-firefly-glow{0%,to{opacity:.55}50%{opacity:1}}@keyframes felix-firefly-leave{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(-30px,-50px)}}.p-companion-hitbox:focus-visible{outline:1px dashed var(--text-3);outline-offset:5px;border-radius:6px}@media (prefers-reduced-motion:reduce){.portfolio *,.portfolio :after,.portfolio :before{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.loader-overlay{display:none}.loader-bamboo-row>span{opacity:1}.p-companion-zzz,.p-desk-steam path{animation:none}.p-desk-steam-burst{display:none}}@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-intro{top:0}.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}.portfolio .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.875rem}.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}.portfolio .p-pixel-workstation{padding:0;color:inherit}.p-desk-art{display:flex;flex-direction:column;align-items:center}.portfolio .p-desk-computer-trigger,.portfolio .p-desk-plant-trigger{position:absolute;padding:0;border-radius:6px}.portfolio .p-desk-computer-trigger{top:30px;left:54px;width:52px;height:44px}.portfolio .p-desk-plant-trigger{top:38px;left:106px;width:30px;height:36px}.p-desk-note{position:absolute;bottom:140px;left:0;width:190px;padding:.5rem .625rem;font-size:12px;color:var(--text-2);background:var(--bg-raised);border:1px solid var(--border);border-radius:10px}.portfolio .p-desk-tea-trigger{position:absolute;top:36px;left:12px;width:44px;height:44px;padding:0;border-radius:8px}.p-desk-landscape,.p-desk-terminal{transition:opacity .35s ease}.p-desk-landscape{--desk-sky:#283b4c;--desk-orb:#dadbb6;--desk-far:#667e73;--desk-near:#9baa8c;--desk-ground:#b9c1a3}.portfolio[data-theme=light] .p-desk-landscape{--desk-sky:#ded9bf;--desk-orb:#b68332;--desk-far:#9aa88b;--desk-near:#6c8369;--desk-ground:#bdc39d}.p-desk-landscape>*{transition:fill .6s ease,opacity .6s ease}.p-desk-screen[data-tab=about] .p-desk-terminal,.p-desk-screen[data-tab=work] .p-desk-landscape,.portfolio[data-theme=light] .p-desk-moon-cutout{opacity:0}.p-desk-cursor{animation:desk-cursor-blink 1.8s step-end infinite}.p-desk-screen[data-tab=about] .p-desk-cursor{animation-play-state:paused}@keyframes desk-cursor-blink{0%,to{opacity:1}50%{opacity:.25}}.p-pixel-workstation:hover,[data-theme=light] .p-pixel-workstation{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-tokyo{position:fixed;inset:0;z-index:25000;background:#9fd6d8;transform-origin:0 0;overflow:hidden}.p-tokyo-canvas{display:block;width:100%;height:100%;outline:none;opacity:0;transition:opacity .5s ease}.p-tokyo.is-ready .p-tokyo-canvas{opacity:1}.p-tokyo-loading:after{content:"";display:block;justify-self:center;width:8px;height:8px;margin-top:14px;border-radius:50%;background:currentColor;animation:p-tokyo-bob .9s ease-in-out infinite;will-change:transform}@keyframes p-tokyo-bob{0%,to{transform:translateY(0) scale(1)}50%{transform:translateY(-8px) scale(.8)}}@media (prefers-reduced-motion:reduce){.p-tokyo-loading:after{animation:none}.p-tokyo-canvas{transition:none}}.p-tokyo-hud{position:absolute;inset:0;pointer-events:none;font-family:var(--mono);color:#fff}.p-tokyo-minimap{position:absolute;right:16px;bottom:16px;width:240px;height:240px;border-radius:50%;border:3px solid #f4efe2;box-shadow:0 2px 0 #25313a,0 6px 18px rgba(20,40,46,.25);transform:rotate(-1.5deg)}@media (max-width:640px){.p-tokyo-minimap{width:150px;height:150px;right:12px;bottom:12px}}.p-tokyo-loading{position:absolute;inset:0;display:grid;place-items:center;align-content:center;margin:0;font:600 14px/1 var(--mono);letter-spacing:.08em;color:#2c4a52}.p-tokyo-stack{position:absolute;top:16px;right:16px;display:flex;flex-direction:column;gap:12px;z-index:2}.portfolio .p-tokyo-paper{display:grid;place-items:center;width:44px;height:44px;padding:0;color:#2f3e43;background:#f6f2e6;border:2px solid #2f3e43;border-radius:9px;box-shadow:0 3px 0 #2f3e43;transform:rotate(-1.5deg);transition:transform .15s ease,box-shadow .15s ease,background .15s ease;cursor:pointer}.portfolio .p-tokyo-paper:nth-child(2n){transform:rotate(1.2deg)}.portfolio .p-tokyo-paper:hover{background:#fffdf5;transform:translateY(-1px) rotate(0deg)}.portfolio .p-tokyo-paper:active{box-shadow:0 1px 0 #2f3e43;transform:translateY(2px)}.portfolio .p-tokyo-paper[aria-pressed=true]{background:#e3efe6}.portfolio .p-tokyo-paper:focus-visible{outline:3px solid #2f7fc1;outline-offset:3px}.p-tokyo-paper svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.p-tokyo-menu{position:absolute;top:16px;right:76px;z-index:2;width:min(300px,calc(100vw - 108px));max-height:calc(100% - 32px);overflow:auto;padding:20px 20px 18px;font:400 12px/1.5 var(--mono);color:#2f3e43;background:#f6f2e6;border:2px solid #2f3e43;border-radius:12px;box-shadow:0 4px 0 #2f3e43;transform:rotate(-.6deg)}.p-tokyo-menu h2{margin:0 0 14px;font:800 20px/1.1 var(--mono);letter-spacing:.04em;text-transform:uppercase}.p-tokyo-menu-progress{display:grid;grid-gap:6px;gap:6px;margin:0 0 16px;padding:0 0 14px;border-bottom:2px dashed #b9b29f}.p-tokyo-menu-progress div{display:flex;justify-content:space-between;gap:12px}.p-tokyo-menu-progress dt{font-weight:600}.p-tokyo-menu-progress dd{margin:0;font-weight:800}.p-tokyo-menu-keys{display:grid;grid-gap:6px;gap:6px;margin:0 0 18px;padding:0;list-style:none}.p-tokyo-menu-keys kbd{display:inline-block;min-width:46px;margin-right:8px;padding:1px 6px;font:700 11px/1.5 var(--mono);text-align:center;color:#f6f2e6;background:#2f3e43;border-radius:5px}.p-tokyo-menu-actions{display:grid;grid-gap:8px;gap:8px}.portfolio .p-tokyo-menu-actions button{padding:10px 12px;font:700 12px/1.3 var(--mono);color:#2f3e43;background:#e4ece4;border:2px solid #2f3e43;border-radius:999px;cursor:pointer}.portfolio .p-tokyo-menu-actions button:first-child{color:#f6f2e6;background:#2f3e43}.portfolio .p-tokyo-menu-actions button:focus-visible{outline:3px solid #2f7fc1;outline-offset:2px}@media (prefers-reduced-motion:reduce){.p-tokyo-menu,.portfolio .p-tokyo-paper,.portfolio .p-tokyo-paper:nth-child(2n){transform:none;transition:none}}.p-tokyo-hud>*{position:absolute;opacity:0;visibility:hidden;transition:opacity .35s ease,transform .35s ease,visibility 0s linear .35s}.p-tokyo-hud>.is-shown{opacity:1;visibility:visible;transition-delay:0s}.p-tokyo-errand{top:16px;left:50%;max-width:min(420px,calc(100vw - 200px));padding:8px 14px 8px 12px;font:700 12px/1.35 var(--mono);color:#2f3e43;background:#f6f2e6;border:2px solid #2f3e43;border-left-width:8px;border-radius:8px;box-shadow:0 3px 0 #2f3e43;transform:translate(-50%,-6px) rotate(-.8deg)}.p-tokyo-errand.is-shown{transform:translate(-50%) rotate(-.8deg)}.p-tokyo-errand[data-kind=collect]{border-left-color:#e2b53c}.p-tokyo-errand[data-kind=deliver]{border-left-color:#e1735a}.p-tokyo-errand-distance{color:#c9402f}.p-tokyo-errand-arrow{width:64px;height:64px;margin:-32px 0 0 -32px;border-radius:50%;background:#e8483b;border:3px solid #ffffff;box-shadow:0 3px 0 #2f3e43,0 6px 16px rgba(20,30,34,.35)}.p-tokyo-errand-arrow:before{content:"";position:absolute;left:50%;top:50%;width:0;height:0;margin:-12px 0 0 14px;border:12px solid transparent;border-left:18px solid #ffffff;transform-origin:-14px 12px;transform:rotate(var(--turn,0rad))}.p-tokyo-errand-arrow span{position:absolute;inset:0;display:grid;place-items:center;font:800 12px/1 var(--mono);color:#ffffff}.p-tokyo-hud>.p-tokyo-errand-arrow.is-shown{animation:p-tokyo-nudge 1.2s ease-in-out infinite}@keyframes p-tokyo-nudge{0%,to{scale:1}50%{scale:1.08}}@media (prefers-reduced-motion:reduce){.p-tokyo-hud>.p-tokyo-errand-arrow.is-shown{animation:none}}@media (max-width:640px){.p-tokyo-errand{top:auto;bottom:96px;max-width:calc(100vw - 32px)}}.p-tokyo-hud>.p-tokyo-title{inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;pointer-events:none;transform:scale(1.02)}.p-tokyo-hud>.p-tokyo-title.is-shown{transform:none}.p-tokyo-title-name{display:flex;flex-direction:column;align-items:center;margin:0;font:800 clamp(44px,9vw,96px)/.92 var(--mono);letter-spacing:.05em;text-transform:uppercase;color:#f6f2e6;text-shadow:-3px -3px 0 #2f3e43,3px -3px 0 #2f3e43,-3px 3px 0 #2f3e43,3px 3px 0 #2f3e43,0 9px 0 rgba(47,62,67,.35)}.p-tokyo-title-name span:last-child{font-size:1.3em}.portfolio .p-tokyo-title-line{margin:0;padding:4px 12px;font:700 13px/1.4 var(--mono);letter-spacing:.08em;color:#2f3e43;background:rgba(246,242,230,.88);border-radius:6px}.portfolio .p-tokyo-title-enter{margin-top:18px;padding:12px 34px;font:800 18px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:#2f3e43;background:#f3cf5b;border:2px solid #2f3e43;border-radius:8px;box-shadow:0 4px 0 #2f3e43;transform:rotate(-1.5deg);pointer-events:auto;cursor:pointer}.portfolio .p-tokyo-title-enter:hover{background:#f7da77}.portfolio .p-tokyo-title-enter:active{box-shadow:0 1px 0 #2f3e43;transform:translateY(3px) rotate(-1.5deg)}.portfolio .p-tokyo-title-enter:focus-visible{outline:3px solid #2f7fc1;outline-offset:4px}.portfolio .p-tokyo-title-hint{margin:0;font:600 11px/1 var(--mono);letter-spacing:.08em;color:#2f3e43;opacity:.75}.p-tokyo-area{left:32px;bottom:34px;display:flex;flex-direction:column;font:800 44px/.95 var(--mono);letter-spacing:.06em;text-transform:uppercase;color:#ffffff;text-shadow:-2px -2px 0 #1f2b33,2px -2px 0 #1f2b33,-2px 2px 0 #1f2b33,2px 2px 0 #1f2b33,0 6px 0 rgba(31,43,51,.25);transform:translateY(10px)}.p-tokyo-area.is-shown{transform:none}.p-tokyo-hint{top:16px;left:16px;right:76px;display:flex;flex-wrap:wrap;gap:6px 14px;width:-moz-fit-content;width:fit-content;padding:9px 14px;font-size:12px;line-height:1.4;color:#1f3a40;background:rgba(255,255,255,.82);border-radius:12px;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.p-tokyo-hint-item{white-space:nowrap}.p-tokyo-hint kbd{display:inline-block;min-width:22px;padding:1px 6px;margin-right:2px;font:700 11px/1.4 var(--mono);text-align:center;color:#ffffff;background:#1f3a40;border-radius:5px}.p-tokyo-prompt{left:50%;bottom:44px;padding:11px 20px;font-size:14px;font-weight:600;letter-spacing:.03em;white-space:nowrap;background:rgba(31,43,51,.86);border-radius:999px;transform:translate(-50%,8px)}.p-tokyo-prompt.is-shown{transform:translate(-50%)}.p-tokyo-score{top:16px;padding:10px 22px;font-size:16px;font-weight:700;white-space:pre;text-align:center;background:rgba(31,43,51,.86);border-radius:14px;transform:translateX(-50%)}.p-tokyo-call,.p-tokyo-score{left:50%;letter-spacing:.06em}.p-tokyo-call{top:34%;font:800 40px/1 var(--mono);text-transform:uppercase;text-shadow:-2px -2px 0 #1f2b33,2px -2px 0 #1f2b33,-2px 2px 0 #1f2b33,2px 2px 0 #1f2b33;transform:translate(-50%,6px)}.p-tokyo-call.is-shown{transform:translate(-50%)}.p-tokyo-card{top:50%;left:50%;width:min(380px,calc(100% - 48px));padding:30px 32px 28px;text-align:center;color:#1f2b33;background:rgba(255,255,255,.96);border-radius:22px;box-shadow:0 24px 60px rgba(31,43,51,.3);transform:translate(-50%,-46%);pointer-events:auto}.p-tokyo-card.is-shown{transform:translate(-50%,-50%)}.p-tokyo-card-title{margin:0 0 12px;font:800 30px/1.15 var(--mono);letter-spacing:.02em}.p-tokyo-card-score{display:inline-block;margin:0 0 14px;padding:6px 14px;font:700 13px/1.3 var(--mono);white-space:pre;color:#1f3a40;background:#e9f1f2;border-radius:999px}.p-tokyo-card-detail{margin:0 0 24px;font-size:15px;line-height:1.55;color:#4b5a63}.p-tokyo-card-actions{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}.portfolio .p-tokyo-card-button{min-width:124px;padding:12px 20px;font:700 14px/1 var(--mono);color:#ffffff;background:#1f2b33;border-radius:999px}.portfolio .p-tokyo-card-button+.p-tokyo-card-button{color:#1f2b33;background:#e5ebee}.portfolio .p-tokyo-card-button:focus-visible{outline:2px solid #2f7fc1;outline-offset:2px}.p-tokyo-leave{margin:auto;width:min(380px,calc(100% - 32px));padding:28px;border:0;border-radius:22px;color:#1f2b33;background:#f6f8f4;font-family:var(--mono);text-align:center;box-shadow:0 24px 60px rgba(31,43,51,.3)}.p-tokyo-leave::-webkit-backdrop{background:rgba(22,39,42,.32)}.p-tokyo-leave::backdrop{background:rgba(22,39,42,.32)}.p-tokyo-leave h2{margin:0;font-size:26px}.p-tokyo-leave p{margin:14px 0 22px;font-size:13px;line-height:1.5}.p-tokyo-leave-actions{display:flex;gap:10px;justify-content:center}.portfolio .p-tokyo-leave button{padding:12px 16px;border-radius:999px;font:700 12px/1.3 var(--mono);background:#e0e8e2;color:#1f2b33}.portfolio .p-tokyo-leave button:first-child{background:#1f3a40;color:white}.portfolio .p-tokyo-leave button:focus-visible{outline:2px solid #2f7fc1;outline-offset:3px}.p-tokyo-speech{position:absolute;max-width:min(290px,80vw);padding:13px 16px;border-radius:16px 16px 16px 3px;background:#f6efda;color:#293f3d;box-shadow:0 4px 16px #233b3924;font:500 13px/1.55 var(--mono);transform:translate(-50%,-100%);pointer-events:none;transition:none}.p-tokyo-journal{right:20px;bottom:28px;max-width:min(360px,calc(100% - 40px));padding:16px 18px;color:#344e46;background:rgba(239,237,211,.94);border:1px solid #647b69;border-radius:3px 12px 3px 8px;box-shadow:3px 4px 0 rgba(47,66,58,.15);font-size:12px;line-height:1.55}.p-tokyo-journal strong{font-size:11px;letter-spacing:.08em}.portfolio .p-tokyo-journal p{margin:6px 0 0}.p-tokyo-journal-notes{max-width:250px;font-size:11px}.p-tokyo-note{left:20px;top:78px;width:min(330px,calc(100% - 40px));padding:17px 20px;color:#344e46;background:rgba(244,239,216,.96);border-left:3px solid #869a7b;border-radius:2px 8px 8px 2px}.p-tokyo-note-title{font:700 15px/1.4 var(--mono)}.portfolio .p-tokyo-note-detail{margin:7px 0 0;font-size:13px;line-height:1.6}.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:background-color .14s,color .14s,transform .16s var(--ease-out)}.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:#9bbfd9;filter:drop-shadow(0 1px 0 rgba(45,69,85,.3)) drop-shadow(0 3px 7px rgba(45,69,85,.12))}.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)}[data-theme=light] .p-felix-chat-bubble--assistant{background:#e4edf3}.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)}.portfolio .p-felix-chat-send{width:42px;height:42px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;background:#1f6feb;color:#fff;border:1px solid color-mix(in srgb,#1f6feb 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}.portfolio[data-theme=light] .p-felix-chat-send{background:#195b91;color:#fff;border-color:rgba(25,91,145,.4)}.portfolio .p-felix-chat-send:disabled{transform:none;cursor:not-allowed}.p-felix-chat-close{transition:background-color .14s,color .14s,transform .16s var(--ease-out)}@media (prefers-reduced-motion:no-preference){.portfolio .p-project-card:active{transform:scale(.99)}.portfolio :is(.p-name-pill,.p-tab,.p-theme-toggle,.p-about-link,.p-hat-option,.p-felix-chat-close,.p-felix-chat-send):active:not(:disabled){transform:scale(.96);transition-duration:.08s}}@media (hover:hover) and (pointer:fine) and (prefers-reduced-motion:no-preference){.p-project-card:hover:not(:active){transform:translateY(-2px);box-shadow:0 4px 14px #0000000d}.p-about-link:hover:not(:active),.portfolio .p-felix-chat-send:hover:not(:active):not(:disabled){transform:translateY(-1px)}}