.pixel-swarm{top:0;left:0;width:100%;height:100vh;pointer-events:none;z-index:10;overflow:hidden;will-change:opacity,filter,transform}.pixel-swarm,.pixel-swarm__pixel{position:fixed;transform-origin:center center}.pixel-swarm__pixel{background-color:var(--color-accent);will-change:transform,opacity;box-shadow:0 0 12px var(--color-accent-glow),0 0 24px rgba(255,255,255,.04);border-radius:1px;filter:drop-shadow(0 0 8px var(--color-accent-glow)) drop-shadow(0 0 16px rgba(255,255,255,.03));backface-visibility:hidden;-webkit-font-smoothing:subpixel-antialiased}@keyframes pixel-pulse{0%,to{opacity:.8;filter:drop-shadow(0 0 8px var(--color-accent-glow)) drop-shadow(0 0 16px rgba(255,255,255,.03))}50%{opacity:1;filter:drop-shadow(0 0 12px var(--color-accent-glow)) drop-shadow(0 0 20px rgba(255,255,255,.05))}}@keyframes pixel-genesis{0%{box-shadow:0 0 0 var(--color-accent-glow),0 0 0 rgba(255,255,255,0);filter:drop-shadow(0 0 0 var(--color-accent-glow)) drop-shadow(0 0 0 rgba(255,255,255,0))}40%{box-shadow:0 0 32px var(--color-accent-glow),0 0 64px rgba(255,255,255,.3);filter:drop-shadow(0 0 24px var(--color-accent-glow)) drop-shadow(0 0 48px rgba(255,255,255,.2))}to{box-shadow:0 0 12px var(--color-accent-glow),0 0 24px rgba(255,255,255,.04);filter:drop-shadow(0 0 8px var(--color-accent-glow)) drop-shadow(0 0 16px rgba(255,255,255,.03))}}@media (max-width:767px){.pixel-swarm__pixel{box-shadow:0 0 8px var(--color-accent-glow),0 0 16px rgba(255,255,255,.02);filter:drop-shadow(0 0 6px var(--color-accent-glow)) drop-shadow(0 0 12px rgba(255,255,255,.02))}@keyframes pixel-genesis{0%{box-shadow:0 0 0 var(--color-accent-glow),0 0 0 rgba(255,255,255,0);filter:drop-shadow(0 0 0 var(--color-accent-glow)) drop-shadow(0 0 0 rgba(255,255,255,0))}40%{box-shadow:0 0 24px var(--color-accent-glow),0 0 48px rgba(255,255,255,.2);filter:drop-shadow(0 0 16px var(--color-accent-glow)) drop-shadow(0 0 32px rgba(255,255,255,.15))}to{box-shadow:0 0 8px var(--color-accent-glow),0 0 16px rgba(255,255,255,.02);filter:drop-shadow(0 0 6px var(--color-accent-glow)) drop-shadow(0 0 12px rgba(255,255,255,.02))}}}html.light .pixel-swarm__pixel{background-color:var(--color-accent);box-shadow:0 0 12px var(--color-accent-glow),0 0 24px rgba(0,0,0,.04);filter:drop-shadow(0 0 8px var(--color-accent-glow)) drop-shadow(0 0 16px rgba(0,0,0,.03))}@media (prefers-reduced-motion:reduce){.pixel-swarm__pixel{animation:none;opacity:.8}}.work-section{gap:3rem;padding:6rem 1.5rem 4rem;background-color:var(--color-surface)}.work-section,.work-section__grid{display:flex;flex-direction:column;min-width:0}.work-section__grid{gap:2rem}.work-card{display:flex;flex-direction:column;gap:1.5rem;padding:0;background:none;border:none;cursor:pointer;text-align:left;transition:all .3s ease;min-width:0}a.work-card{text-decoration:none;color:inherit}.work-card__label{font-family:var(--font-mono);font-size:.75rem;font-weight:500;letter-spacing:.05em;color:var(--color-text-tertiary);text-transform:uppercase}.work-card__image{position:relative;width:100%;overflow:hidden;border-radius:.5rem;aspect-ratio:16/9;background-color:var(--color-surface-raised)}.work-card__image img{width:100%;height:100%;object-fit:cover;filter:grayscale(100%) brightness(.92);transition:filter .35s ease,transform .3s ease}.work-card:hover .work-card__image img{filter:grayscale(0) brightness(1);transform:scale(1.02)}.work-card__content{display:flex;flex-direction:column;gap:1rem;min-width:0}.work-card__title{font-family:var(--font-display);font-size:1.5rem;font-weight:700;color:var(--color-text-primary);margin:0;display:inline-flex;align-items:center;gap:var(--space-2);flex-wrap:wrap}.work-card__kbd{font-family:var(--font-mono);font-size:.65rem;font-weight:500;text-transform:lowercase;letter-spacing:.02em;padding:.15em .4em;border-radius:.25rem;background:var(--color-surface-raised);color:var(--color-text-secondary);border:1px solid var(--color-border);box-shadow:0 1px 0 var(--color-border)}.work-card__title:not(:has(.work-card__kbd)){display:block;overflow-wrap:break-word}.work-card__description{font-family:var(--font-body);font-size:1rem;line-height:1.6;color:var(--color-text-secondary);margin:0;overflow-wrap:break-word}.work-card__techs{display:flex;flex-wrap:wrap;gap:.75rem}.work-card__tech-badge{display:inline-flex;padding:.375rem .75rem;font-family:var(--font-mono);font-size:.75rem;font-weight:500;color:var(--color-text-secondary);border:1px solid var(--color-border);border-radius:.25rem;background-color:var(--color-surface-raised)}@media (max-width:640px){.work-section{padding:4rem 1rem 2.5rem;gap:2.5rem}.work-section__grid{gap:1.5rem}.work-card__title{font-size:1.25rem}.work-card__description{font-size:.95rem}}.capabilities-section{display:flex;flex-direction:column;gap:3rem;padding:4rem 1.5rem;background-color:var(--color-surface);min-width:0}.capabilities-section__header-group{display:flex;flex-direction:column;gap:.75rem}.capabilities-section__header-group .section-header{margin-bottom:0}.capabilities-section__description{font-family:var(--font-body);font-size:1rem;line-height:1.6;color:var(--color-text-secondary);max-width:600px;margin:0}.capabilities-section__grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:1px;padding:1px;background-color:var(--color-border)}.capabilities-section__grid>*,.capability-card{display:flex;min-height:0}.capability-card{position:relative;overflow:hidden;flex-direction:column;flex:1 1;gap:1.5rem;padding:1.5rem;background-color:var(--color-surface);border:1px solid transparent;transition:border-color .3s ease}.capability-card__glow{position:absolute;inset:-50%;background:radial-gradient(circle at center,var(--color-accent-glow) 0,transparent 70%);pointer-events:none}.capability-card__border{position:absolute;inset:0;border:1px solid var(--color-accent);border-radius:inherit;pointer-events:none}.capability-card__content{position:relative;display:flex;flex-direction:column;flex:1 1;min-height:0;gap:1.5rem}.capability-card__header{display:flex;align-items:flex-start;gap:1rem}.capability-card__icon{width:24px;height:24px;flex-shrink:0;color:var(--color-accent)}.capability-card__title{font-family:var(--font-display);font-size:1.25rem;font-weight:700;color:var(--color-text-primary);margin:0}.capability-card__techs{display:flex;flex-direction:column;flex:1 1;gap:.75rem;padding:0;margin:0;list-style:none}.capability-card__tech{font-family:var(--font-body);font-size:.95rem;color:var(--color-text-secondary);line-height:1.5}.capability-card__tech:before{content:"→ ";margin-right:.5rem;opacity:.5}@media (max-width:1200px){.capabilities-section__grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (max-width:768px){.capabilities-section__grid{grid-template-columns:repeat(2,1fr)}}@media (max-width:640px){.capabilities-section{padding:3rem 1rem;gap:2rem}.capabilities-section__header-group{gap:.5rem}.capabilities-section__grid{grid-template-columns:1fr}}.open-source-section{display:flex;flex-direction:column;gap:3rem;padding:4rem 1.5rem;background-color:var(--color-surface);min-width:0}.open-source-section__filters{display:flex;flex-wrap:wrap;gap:.75rem;margin-bottom:1rem}.open-source-section__filter-tag{padding:.5rem 1rem;font-family:var(--font-mono);font-size:.75rem;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--color-text-secondary);background-color:transparent;border:1px solid var(--color-border);border-radius:.25rem;cursor:pointer;transition:all .2s ease}.open-source-section__filter-tag:hover{border-color:var(--color-border-bright);color:var(--color-text-primary)}.open-source-section__filter-tag--active{border-color:var(--color-accent)}.open-source-section__filter-tag--active,html.light .open-source-section__filter-tag--active{background-color:var(--color-accent);color:var(--color-surface)}.open-source-section__grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:1rem}.repo-card{display:flex;flex-direction:column;gap:1rem;padding:1.5rem;background-color:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:.5rem;text-align:left;cursor:pointer;transition:all .3s ease}.repo-card:hover{background-color:var(--color-surface-hover);border-color:var(--color-border-bright);box-shadow:0 0 24px var(--color-accent-glow)}.repo-card__header{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.repo-card__title{font-family:var(--font-display);font-size:1.125rem;font-weight:700;color:var(--color-text-primary);margin:0;flex:1 1}.repo-card__stars{font-family:var(--font-mono);font-size:.75rem;color:var(--color-accent);white-space:nowrap}.repo-card__description{font-family:var(--font-body);font-size:.95rem;line-height:1.5;color:var(--color-text-secondary);margin:0;flex:1 1}.repo-card__footer{display:flex;gap:.75rem;align-items:center;justify-content:space-between;padding-top:.75rem;border-top:1px solid var(--color-border)}.repo-card__language{font-weight:600;color:var(--color-text-tertiary)}.repo-card__category,.repo-card__language{font-family:var(--font-mono);font-size:.75rem;text-transform:uppercase;letter-spacing:.05em}.repo-card__category{font-weight:500;color:var(--color-text-muted)}@media (max-width:768px){.open-source-section__grid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}}@media (max-width:640px){.open-source-section{padding:3rem 1rem;gap:2rem}.open-source-section__grid{grid-template-columns:1fr}.open-source-section__filters{min-width:0;overflow-x:auto;padding-bottom:.5rem;-webkit-overflow-scrolling:touch}.open-source-section__filter-tag{white-space:nowrap;flex-shrink:0}}.contact-section{display:flex;align-items:center;justify-content:center;min-height:60vh;padding:4rem 1.5rem;background-color:var(--color-surface);min-width:0}.contact-section__container{position:relative;display:flex;flex-direction:column;gap:1.5rem;align-items:center;text-align:center;max-width:600px;width:100%}.contact-section__glow{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:600px;height:600px;border-radius:50%;background:radial-gradient(circle,var(--color-accent-glow) 0,transparent 70%);filter:blur(40px);pointer-events:none;z-index:-1}.contact-section__label{font-family:var(--font-mono);font-size:.875rem;font-weight:500;letter-spacing:.05em;color:var(--color-text-tertiary);text-transform:uppercase}.contact-section__headline{font-family:var(--font-display);font-size:clamp(2rem,6vw,3.5rem);font-weight:700;line-height:1.2;letter-spacing:-.02em;color:var(--color-text-primary);margin:0}.contact-section__buttons{display:flex;gap:1rem;flex-wrap:wrap;justify-content:center;margin-top:1rem}.contact-section__button{display:inline-flex;align-items:center;justify-content:center;padding:.75rem 1.5rem;font-family:var(--font-body);font-size:.95rem;font-weight:600;text-decoration:none;border-radius:.375rem;transition:all .3s ease;cursor:pointer}.contact-section__button--primary{background-color:var(--color-accent);color:var(--color-surface);border:1px solid var(--color-accent)}.contact-section__button--primary:hover{transform:translateY(-2px);box-shadow:0 8px 16px rgba(255,255,255,.1)}html.light .contact-section__button--primary:hover{box-shadow:0 8px 16px rgba(0,0,0,.1)}.contact-section__button--secondary{background-color:transparent;color:var(--color-text-primary);border:1px solid var(--color-border-bright)}.contact-section__button--secondary:hover{border-color:var(--color-text-primary);transform:translateY(-2px)}@media (max-width:640px){.contact-section{min-height:50vh;padding:3rem 1rem}.contact-section__headline{font-size:clamp(1.5rem,5vw,2rem)}.contact-section__buttons{flex-direction:column;width:100%}.contact-section__button{width:100%}.contact-section__glow{width:400px;height:400px}}@media (prefers-reduced-motion:reduce){.contact-section__button:hover{transform:none}.contact-section__glow{filter:none}}.site-footer{padding:2rem 1.5rem;border-top:1px solid var(--color-border);background-color:var(--color-surface)}.site-footer__container{display:flex;align-items:center;justify-content:space-between;width:100%;max-width:1280px;margin:0 auto;min-width:0}.site-footer__left,.site-footer__right{display:flex;align-items:center;gap:.75rem;font-family:var(--font-mono);font-size:.75rem;font-weight:500;letter-spacing:.05em;color:var(--color-text-tertiary);text-transform:uppercase;min-width:0}.site-footer__copyright{color:var(--color-text-primary)}.site-footer__role{color:var(--color-text-secondary)}.site-footer__separator{opacity:.4}.site-footer__link{color:var(--color-text-secondary);text-decoration:none;transition:color .2s ease}.site-footer__link:hover{color:var(--color-text-primary);text-decoration:underline}@media (max-width:640px){.site-footer__container{flex-direction:column;gap:1rem;text-align:center}.site-footer__left,.site-footer__right{justify-content:center}}.pacman-overlay{position:fixed;inset:0;z-index:9999;overflow:visible;pointer-events:auto;opacity:1!important;visibility:visible!important;background:transparent}.pacman-crt{inset:0;z-index:100;opacity:.04;background:repeating-linear-gradient(0deg,transparent,transparent 2px,currentColor 0,currentColor 4px)}.pacman-crt,.pacman-hud{position:absolute;pointer-events:none}.pacman-hud{top:5rem;left:0;right:0;display:flex;align-items:center;justify-content:center;gap:1.5rem;z-index:110}.pacman-hud__score{font-family:var(--font-mono);font-size:1rem;font-weight:700;letter-spacing:.15em;color:#7dd3c0;text-shadow:0 0 8px rgba(125,211,192,.4)}.pacman-hud__controls{display:flex;gap:.5rem;pointer-events:auto}.pacman-hud__btn{font-family:var(--font-mono);font-size:.75rem;min-width:44px;min-height:44px;padding:.25rem .5rem;background:rgba(125,211,192,.1);border:1px solid rgba(125,211,192,.3);border-radius:4px;color:#7dd3c0;cursor:pointer;transition:background .15s}.pacman-hud__btn:hover{background:rgba(125,211,192,.2)}.pacman-touch-controls{position:fixed;bottom:max(1.25rem,env(safe-area-inset-bottom));display:grid;grid-template-columns:repeat(3,clamp(3.5rem,14vw,4.5rem));grid-template-rows:repeat(2,clamp(3.5rem,14vw,4.5rem));grid-template-areas:". up ." "left down right";gap:.35rem;z-index:130;touch-action:none}.pacman-touch-controls--left{left:max(1.25rem,env(safe-area-inset-left))}.pacman-touch-controls--right{right:max(1.25rem,env(safe-area-inset-right))}.pacman-touch-controls__button{display:grid;place-items:center;width:100%;height:100%;padding:0;border:1px solid rgba(125,211,192,.45);border-radius:4px;background:rgba(10,10,10,.86);color:#7dd3c0;font-family:var(--font-mono);font-size:1.5rem;line-height:1;-webkit-tap-highlight-color:transparent;touch-action:manipulation;-webkit-user-select:none;user-select:none}.pacman-touch-controls__button:active,.pacman-touch-controls__button:focus-visible{background:rgba(125,211,192,.24);border-color:#7dd3c0;outline:none}.pacman-touch-controls__button--up{grid-area:up}.pacman-touch-controls__button--left{grid-area:left}.pacman-touch-controls__button--down{grid-area:down}.pacman-touch-controls__button--right{grid-area:right}html.light .pacman-touch-controls__button{background:rgba(250,250,250,.9)}.pacman-entity{position:fixed;top:-100px;left:-100px;width:40px;height:40px;background-color:#7dd3c0;border-radius:50%;z-index:9998;box-shadow:0 0 12px rgba(125,211,192,.4);clip-path:polygon(50% 50%,100% 15%,100% 0,0 0,0 100%,100% 100%,100% 85%);will-change:top,left,transform;animation:pacman-chomp .25s steps(2) infinite;pointer-events:none}@keyframes pacman-chomp{0%{clip-path:polygon(50% 50%,100% 15%,100% 0,0 0,0 100%,100% 100%,100% 85%)}50%{clip-path:polygon(50% 50%,100% 40%,100% 0,0 0,0 100%,100% 100%,100% 60%)}to{clip-path:polygon(50% 50%,100% 15%,100% 0,0 0,0 100%,100% 100%,100% 85%)}}.pacman-ghost{position:fixed;top:-100px;left:-100px;width:36px;height:36px;z-index:9997;border-radius:50% 50% 0 0;clip-path:polygon(0 0,0 75%,10% 100%,25% 75%,40% 100%,55% 75%,70% 100%,85% 75%,100% 100%,100% 0,85% 0,50% 0,15% 0);will-change:top,left;transition:background-color .2s,opacity .3s;pointer-events:none}.pacman-ghost:after,.pacman-ghost:before{content:"";position:absolute;width:8px;height:8px;border-radius:50%;background:var(--color-surface,#0a0a0a);top:30%}.pacman-ghost:before{left:25%}.pacman-ghost:after{right:25%}.pacman-ghost[style*="#ffffff"],.pacman-ghost[style*="rgb(255, 255, 255)"]{box-shadow:0 0 8px rgba(255,255,255,.3)}.pacman-ghost[style*="#999999"],.pacman-ghost[style*="rgb(153, 153, 153)"]{box-shadow:0 0 8px rgba(153,153,153,.3)}.pacman-ghost[style*="#666666"],.pacman-ghost[style*="rgb(102, 102, 102)"]{box-shadow:0 0 8px rgba(102,102,102,.3)}.ghost--frightened{box-shadow:0 0 10px rgba(26,26,107,.5)!important}.ghost--blinking{animation:ghost-blink .3s step-end infinite}@keyframes ghost-blink{0%,to{opacity:1}50%{opacity:.3}}.pacman-power-pellet{position:absolute;width:16px;height:16px;margin-left:-8px;margin-top:-8px;border-radius:50%;background:transparent;box-shadow:0 0 12px rgba(125,211,192,.5),0 0 24px rgba(125,211,192,.2);pointer-events:none;z-index:52;animation:power-pulse 1.2s ease-in-out infinite}@keyframes power-pulse{0%,to{transform:scale(1);opacity:.8}50%{transform:scale(1.3);opacity:1}}.pacman-state-overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;z-index:120;background:rgba(0,0,0,.6);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);animation:overlay-in .3s ease-out}html.light .pacman-state-overlay{background:rgba(255,255,255,.6)}@keyframes overlay-in{0%{opacity:0}to{opacity:1}}.pacman-state-overlay--won{background:rgba(0,0,0,.82);background-image:radial-gradient(ellipse 60% 50% at 50% 50%,rgba(125,211,192,.06) 0,transparent 70%)}.pacman-state-text{font-family:var(--font-mono);font-size:clamp(1.5rem,5vw,3rem);font-weight:700;letter-spacing:.2em;color:#7dd3c0;text-shadow:0 0 20px rgba(125,211,192,.5)}.pacman-state-text--ready{animation:ready-pulse .5s ease-in-out infinite alternate}@keyframes ready-pulse{0%{opacity:.6;transform:scale(.95)}to{opacity:1;transform:scale(1.05)}}.pacman-state-text--won{animation:won-glow 1s ease-in-out infinite alternate;font-size:clamp(1rem,3.5vw,2rem);letter-spacing:.25em}@keyframes won-glow{0%{text-shadow:0 0 20px rgba(125,211,192,.5)}to{text-shadow:0 0 40px rgba(125,211,192,.8),0 0 80px rgba(125,211,192,.3)}}.pacman-state-score{font-family:var(--font-mono);font-size:1.25rem;color:var(--color-text-secondary);letter-spacing:.1em}.pacman-state-hint{font-family:var(--font-mono);font-size:.75rem;color:var(--color-text-tertiary);letter-spacing:.05em;margin-top:.5rem}.pacman-win-card{display:flex;flex-direction:column;align-items:center;gap:1rem;padding:2rem 3rem;background:rgba(0,0,0,.75);border:1px solid rgba(125,211,192,.3);border-radius:4px;box-shadow:0 0 40px rgba(125,211,192,.12),inset 0 0 60px rgba(0,0,0,.4);animation:win-card-in .4s cubic-bezier(.22,1,.36,1);position:relative;z-index:1}html.light .pacman-win-card{background:rgba(250,250,250,.85);border-color:rgba(125,211,192,.4)}@keyframes win-card-in{0%{opacity:0;transform:scale(.88) translateY(16px)}to{opacity:1;transform:scale(1) translateY(0)}}.pacman-win-label{font-family:var(--font-mono);font-size:.7rem;letter-spacing:.2em;color:rgba(125,211,192,.6);text-transform:uppercase}.pacman-win-score-block{display:flex;flex-direction:column;align-items:center;gap:.25rem;margin:.5rem 0;padding:1rem 2rem;border-top:1px solid rgba(125,211,192,.15);border-bottom:1px solid rgba(125,211,192,.15);width:100%}.pacman-win-score-label{font-family:var(--font-mono);font-size:.65rem;letter-spacing:.25em;color:var(--color-text-tertiary);text-transform:uppercase}.pacman-win-score-value{font-family:var(--font-mono);font-size:clamp(2rem,6vw,3.5rem);font-weight:700;color:#7dd3c0;letter-spacing:.1em;text-shadow:0 0 24px rgba(125,211,192,.5);animation:score-count-in .6s cubic-bezier(.22,1,.36,1) .2s both}@keyframes score-count-in{0%{opacity:0;transform:translateY(8px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.pacman-win-rank{font-family:var(--font-mono);font-size:.9rem;font-weight:700;letter-spacing:.3em;color:#7dd3c0;background:rgba(125,211,192,.1);border:1px solid rgba(125,211,192,.3);padding:.2rem .75rem;border-radius:2px;animation:rank-pop .3s cubic-bezier(.34,1.56,.64,1) .5s both}@keyframes rank-pop{0%{opacity:0;transform:scale(.7)}to{opacity:1;transform:scale(1)}}.pacman-confetti{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:0}.pacman-confetti__dot{position:absolute;width:6px;height:6px;border-radius:1px;animation:confetti-fall 2.4s ease-in infinite;opacity:0}.pacman-confetti__dot--0{background:#7dd3c0;left:8%;animation-delay:0s;animation-duration:2.2s}.pacman-confetti__dot--1{background:#ffffff;left:20%;animation-delay:.3s;animation-duration:2.8s}.pacman-confetti__dot--2{background:#7dd3c0;left:35%;animation-delay:.1s;animation-duration:2s}.pacman-confetti__dot--3{background:#999999;left:50%;animation-delay:.5s;animation-duration:3s}.pacman-confetti__dot--4{background:#7dd3c0;left:65%;animation-delay:.2s;animation-duration:2.5s}.pacman-confetti__dot--5{background:#ffffff;left:80%;animation-delay:.4s;animation-duration:1.9s}.pacman-confetti__dot:nth-child(6n+1){top:-10px}.pacman-confetti__dot:nth-child(6n+2){top:-10px;animation-delay:.6s}.pacman-confetti__dot:nth-child(6n+3){top:-10px;animation-delay:1.1s}.pacman-confetti__dot:nth-child(6n+4){top:-10px;animation-delay:.9s}.pacman-confetti__dot:nth-child(6n+5){top:-10px;animation-delay:1.4s}.pacman-confetti__dot:nth-child(6n){top:-10px;animation-delay:1.7s}@keyframes confetti-fall{0%{opacity:0;transform:translateY(0) rotate(0deg) scaleX(1)}10%{opacity:1}90%{opacity:.8}to{opacity:0;transform:translateY(110vh) rotate(2turn) scaleX(-1)}}.nav-bar__ghost-hint{display:flex;align-items:center;justify-content:center;position:relative;padding:0;background:none;border:none;cursor:pointer;width:24px;height:24px;color:#7dd3c0;transition:opacity .2s}.nav-bar__ghost-hint:hover{opacity:.8}.nav-bar__ghost-icon{width:16px;height:16px;animation:ghost-hint-glow 2s ease-in-out infinite,ghost-hint-drift 2.4s ease-in-out infinite;filter:drop-shadow(0 0 4px rgba(125,211,192,.4))}@keyframes ghost-hint-glow{0%,to{filter:drop-shadow(0 0 4px rgba(125,211,192,.3))}50%{filter:drop-shadow(0 0 8px rgba(125,211,192,.6))}}@keyframes ghost-hint-drift{0%,to{transform:translateX(-4px)}50%{transform:translateX(4px)}}.nav-bar__ghost-tooltip{position:absolute;top:100%;left:50%;transform:translateX(-50%);margin-top:.5rem;padding:.25rem .5rem;font-family:var(--font-mono);font-size:.625rem;letter-spacing:.05em;color:#7dd3c0;background:rgba(10,10,10,.9);border:1px solid rgba(125,211,192,.2);border-radius:4px;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .2s}html.light .nav-bar__ghost-tooltip{background:rgba(250,250,250,.9)}.nav-bar__ghost-hint:hover .nav-bar__ghost-tooltip{opacity:1}.hero--game-active .pixel-swarm__pixel{box-shadow:none!important;filter:none!important;animation:none!important}.hero--game-active .hero__left{transition:opacity .4s ease,visibility .4s}.hero--game-active .hero__left,.hero--game-active .scroll-indicator{opacity:0!important;visibility:hidden;pointer-events:none}@media (prefers-reduced-motion:reduce){.ghost--blinking,.nav-bar__ghost-icon,.pacman-confetti__dot,.pacman-entity,.pacman-ghost,.pacman-power-pellet,.pacman-state-text--ready,.pacman-state-text--won,.pacman-win-card,.pacman-win-rank,.pacman-win-score-value{animation:none!important;opacity:1!important;transform:none!important}}.site-header{position:absolute;top:0;left:0;right:0;z-index:90;pointer-events:none;transition:background-color .3s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),transform .3s cubic-bezier(.4,0,.2,1),-webkit-backdrop-filter .3s cubic-bezier(.4,0,.2,1);transition:background-color .3s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),transform .3s cubic-bezier(.4,0,.2,1),backdrop-filter .3s cubic-bezier(.4,0,.2,1);transition:background-color .3s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),transform .3s cubic-bezier(.4,0,.2,1),backdrop-filter .3s cubic-bezier(.4,0,.2,1),-webkit-backdrop-filter .3s cubic-bezier(.4,0,.2,1);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}@media (max-width:640px){.site-header{position:fixed}}.site-header__inner{max-width:80rem;margin:0 auto;padding:var(--space-4) var(--space-4);display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:var(--space-6);pointer-events:auto}@media (max-width:640px){.site-header__inner{position:relative;padding:var(--space-3) var(--space-4);gap:var(--space-4)}.site-header__slot--center{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:1}}.site-header--initial{background:linear-gradient(180deg,rgba(0,0,0,.06),transparent 85%)}html.dark .site-header--initial{background:linear-gradient(180deg,rgba(0,0,0,.5),transparent 85%)}.site-header--scrolled{background-color:var(--color-background);box-shadow:0 12px 30px rgba(0,0,0,.15),0 0 0 1px var(--color-black-5);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px)}.site-header__slot{min-width:0}.site-header__slot--center{justify-self:center;text-align:center}.site-header__slot--right{justify-self:end}html.dark .site-header--scrolled{box-shadow:0 16px 40px rgba(0,0,0,.55),0 0 0 1px rgba(255,255,255,.04)}.site-header__brand{pointer-events:auto}.site-header__brand-name{font-family:var(--font-tech);font-size:.75rem;letter-spacing:.32em;text-transform:uppercase;color:var(--color-slate-600);display:inline-flex;align-items:center;gap:.25rem}.site-header__brand-dot,.site-header__brand-word--accent{color:var(--color-accent)}.site-header__brand-suffix{font-family:var(--font-mono)}@media (max-width:640px){.site-header__brand-dot,.site-header__brand-suffix{display:none}}.btn-primary{position:relative;padding:.75rem 2rem;background:transparent;border:1px solid var(--color-ink);color:var(--color-ink);cursor:pointer;overflow:hidden;transition:all .3s ease;box-shadow:0 1px 3px rgba(0,0,0,.1)}.btn-primary:hover{background-color:var(--color-ink);color:white}.btn-primary__text{position:relative;z-index:10;font-family:var(--font-tech);font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.15em;display:flex;align-items:center;gap:.75rem}.btn-primary__arrow{font-size:16px;transition:transform .3s ease}.btn-primary:hover .btn-primary__arrow{transform:translateX(4px)}[data-sonner-toaster] [data-sonner-toast]{background:var(--color-surface-raised,#141414)!important;border:1px solid var(--color-border,rgba(255,255,255,.12))!important;color:var(--color-text-primary,#ffffff)!important;font-family:var(--font-body,system-ui,sans-serif)!important;box-shadow:0 10px 24px rgba(0,0,0,.35),0 0 0 1px rgba(255,255,255,.06)!important}[data-sonner-toaster] [data-sonner-toast][data-type=success]{border-left:4px solid var(--lens-toast-success,#34d399)!important}[data-sonner-toaster] [data-sonner-toast][data-type=success] [data-icon]{color:var(--lens-toast-success,#34d399)!important}[data-sonner-toaster] [data-sonner-toast][data-type=warning]{border-left:4px solid var(--lens-toast-warning,#f59e0b)!important}[data-sonner-toaster] [data-sonner-toast][data-type=warning] [data-icon]{color:var(--lens-toast-warning,#f59e0b)!important}[data-sonner-toaster] [data-sonner-toast][data-type=error]{border-left:4px solid var(--lens-toast-error,#e52521)!important}[data-sonner-toaster] [data-sonner-toast][data-type=error] [data-icon]{color:var(--lens-toast-error,#e52521)!important}html.light [data-sonner-toaster] [data-sonner-toast]{background:var(--color-surface-raised,#ffffff)!important;border-color:var(--color-border,#e0e0e0)!important;color:var(--color-text-primary,#000000)!important;box-shadow:0 10px 24px rgba(0,0,0,.12),0 0 0 1px rgba(0,0,0,.06)!important}.image-preview-container{position:relative;display:inline-block}.image-preview-popup{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:100;display:flex;flex-direction:column;background:var(--color-paper);border:1px solid var(--color-slate-200);border-radius:4px;box-shadow:0 20px 25px -5px rgba(0,0,0,.15),0 8px 10px -6px rgba(0,0,0,.1),0 0 0 1px rgba(0,0,0,.05);overflow:hidden;pointer-events:none}.image-preview-popup__image{width:100%;height:100%;object-fit:cover;object-position:top left}.image-preview-popup__caption{position:absolute;bottom:0;left:0;right:0;padding:var(--space-2) var(--space-3);background:linear-gradient(0deg,rgba(0,0,0,.7) 0,transparent);font-family:var(--font-mono);font-size:9px;text-transform:uppercase;letter-spacing:.1em;color:rgba(255,255,255,.9)}.image-preview-popup--left:after{right:-6px;border-right:1px solid var(--color-slate-200);border-top:1px solid var(--color-slate-200)}.image-preview-popup--left:after,.image-preview-popup--right:after{content:"";position:absolute;top:50%;transform:translateY(-50%) rotate(45deg);width:12px;height:12px;background:var(--color-paper)}.image-preview-popup--right:after{left:-6px;border-left:1px solid var(--color-slate-200);border-bottom:1px solid var(--color-slate-200)}[data-theme=dark] .image-preview-popup,[data-theme=dark] .image-preview-popup--left:after,[data-theme=dark] .image-preview-popup--right:after{background:var(--color-paper);border-color:var(--color-slate-700)}.project-modal-backdrop{position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.8);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}@media (max-width:640px){.project-modal-backdrop{align-items:flex-end}}.project-modal{position:relative;max-width:90vw;max-height:95vh;background:var(--color-paper);border:1px solid var(--color-slate-200);border-radius:4px;overflow:hidden;box-shadow:0 25px 50px -12px rgba(0,0,0,.5)}@media (max-width:640px){.project-modal{width:100%;max-width:100%;max-height:90vh;max-height:90dvh;border-radius:16px 16px 0 0;border-left:none;border-right:none;border-bottom:none;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}}.project-modal__close{position:absolute;top:var(--space-4);right:var(--space-4);z-index:10;width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.5);border:none;border-radius:50%;color:white;cursor:pointer;transition:background .2s ease}@media (max-width:640px){.project-modal__close{top:var(--space-6);right:var(--space-6)}}.project-modal__handle{position:absolute;top:var(--space-4);left:50%;transform:translateX(-50%);width:40px;height:4px;border-radius:999px;background-color:rgba(255,255,255,.5);opacity:0}@media (max-width:640px){.project-modal__handle{opacity:1}}.project-modal__close:hover{background:rgba(0,0,0,.7)}.project-modal__content{display:flex;align-items:stretch;gap:var(--space-8);padding:var(--space-8)}.project-modal__content-wrapper{display:flex;flex-direction:column;gap:var(--space-4)}.project-modal--video .project-modal__content{align-items:center;padding:var(--space-6);padding-top:var(--space-8);gap:var(--space-6)}@media (min-width:1024px){.project-modal--video .project-modal__content{padding-left:var(--space-6);padding-right:var(--space-6);gap:var(--space-4)}}.project-modal__video{width:640px;height:360px;border-radius:4px;overflow:hidden}.project-modal__video--portrait{width:360px;height:640px}.project-modal__video iframe{width:100%;height:100%;border:none}@media (max-width:640px){.project-modal__video{width:100%;max-width:calc(100% - var(--space-12));height:auto;aspect-ratio:16/9}.project-modal__video--portrait{width:100%;max-width:280px;height:auto;aspect-ratio:9/16;max-height:45vh;margin:0 auto}}.project-modal__preview{flex-shrink:0;max-width:50vw;max-height:70vh;display:flex;align-items:center;justify-content:center}.project-modal__image{max-width:100%;max-height:100%;object-fit:contain;border-radius:4px;box-shadow:0 4px 12px rgba(0,0,0,.15)}.project-modal__info{display:flex;flex-direction:column;justify-content:center;gap:var(--space-4);max-width:380px;padding-right:var(--space-4)}.project-modal__pagination{display:flex;align-items:center;justify-content:space-between;padding:0 var(--space-8) var(--space-6);font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:.15em;color:var(--color-slate-500)}.project-modal__nav{display:flex;align-items:center;gap:var(--space-2)}.project-modal__nav-button{padding:var(--space-3) var(--space-6);min-height:44px;min-width:80px;display:flex;align-items:center;justify-content:center;border-radius:999px;border:1px solid var(--color-slate-300);background:var(--color-paper);font-family:var(--font-mono);font-size:11px;text-transform:uppercase;letter-spacing:.1em;cursor:pointer;transition:all .2s ease}.project-modal__nav-button:hover:not(:disabled){border-color:var(--color-accent);color:var(--color-accent)}.project-modal__nav-button:disabled{opacity:.4;cursor:default}@media (max-width:640px){.project-modal__content{flex-direction:column;padding:var(--space-4);padding-top:var(--space-8)}.project-modal__preview{max-width:100%;max-height:45vh;overflow:hidden;border-radius:4px}.project-modal__info{max-width:100%;padding-right:0}.project-modal__pagination{padding:0 var(--space-4) var(--space-4)}}.project-modal__header{display:flex;align-items:baseline;gap:var(--space-3)}.project-modal__title{font-family:var(--font-display);font-size:1.5rem;font-weight:500;color:var(--color-ink);margin:0;display:inline-flex;align-items:center;gap:var(--space-2);flex-wrap:wrap}.project-modal__kbd{font-family:var(--font-mono);font-size:.65rem;font-weight:500;text-transform:lowercase;letter-spacing:.02em;padding:.15em .4em;border-radius:.25rem;background:var(--color-surface-raised);color:var(--color-text-secondary);border:1px solid var(--color-border);box-shadow:0 1px 0 var(--color-border)}.project-modal__spotlight-note{font-family:var(--font-body);font-size:.875rem;line-height:1.5;color:var(--color-text-secondary);margin:0}.project-modal__year{font-family:var(--font-mono);font-size:11px;color:var(--color-accent);text-transform:uppercase;letter-spacing:.1em}.project-modal__year-struck{text-decoration:line-through}.project-modal__year-redesigned{text-decoration:none}.project-modal__description{font-family:var(--font-body);font-size:.9rem;line-height:1.6;color:var(--color-slate-600);margin:0}.project-modal__tech{display:flex;flex-wrap:wrap;gap:var(--space-2)}.project-modal__tech-tag{font-size:10px;padding:var(--space-1) var(--space-2);background:var(--color-slate-100);border:1px solid var(--color-slate-200);color:var(--color-slate-600)}.project-modal__tech-tag,.project-modal__visit{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.05em;border-radius:2px}.project-modal__visit{display:inline-flex;align-items:center;align-self:flex-start;gap:var(--space-2);padding:var(--space-2) var(--space-4);background:var(--color-accent);font-size:11px;color:white;text-decoration:none;transition:background .2s ease,transform .2s ease}.project-modal__visit:hover{background:var(--color-primary);transform:translateY(-1px)}[data-theme=dark] .project-modal{background:var(--color-paper);border-color:var(--color-slate-700)}[data-theme=dark] .project-modal__title{color:var(--color-slate-100)}[data-theme=dark] .project-modal__description{color:var(--color-slate-400)}[data-theme=dark] .project-modal__tech-tag{background:var(--color-slate-800);border-color:var(--color-slate-700);color:var(--color-slate-400)}.repo-modal{max-width:640px;width:100%}.repo-modal__content{padding:var(--space-8);flex-direction:column}.repo-modal__banner{width:100%;height:auto;border-radius:4px;border:1px solid var(--color-slate-200);margin-bottom:var(--space-4);display:block}.repo-modal__banner-image{width:100%;height:auto;display:block;filter:grayscale(100%);transition:filter .4s cubic-bezier(.4,0,.2,1)}.repo-modal__banner:hover .repo-modal__banner-image{filter:grayscale(0)}html.dark .repo-modal__banner{border-color:var(--color-slate-700)}.repo-modal__language{font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:.1em;padding:var(--space-1) var(--space-2);background:var(--color-slate-100);border:1px solid var(--color-slate-200);color:var(--color-slate-600)}.repo-modal__stats{display:flex;gap:var(--space-4)}.repo-modal__stars{font-family:var(--font-mono);font-size:11px;color:var(--color-accent)}.repo-modal__visit{gap:var(--space-2)}html.dark .repo-modal__language{background:var(--color-slate-200);border-color:var(--color-slate-300);color:var(--color-slate-500)}[tabindex="0"]:focus-visible,a:focus-visible,button:focus-visible{outline:none;position:relative}[tabindex="0"]:focus-visible:after,a:focus-visible:after,button:focus-visible:after{content:"";position:absolute;inset:-4px;border-radius:inherit;box-shadow:0 0 0 2px var(--color-surface),0 0 0 4px var(--color-accent),0 0 12px 4px var(--color-accent-glow);pointer-events:none;animation:focus-pulse 1.5s ease infinite}[tabindex="0"]:focus-visible,a:focus-visible,button:focus-visible{border-radius:2px}@keyframes focus-pulse{0%,to{opacity:1}50%{opacity:.7}}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}