*,*:before,*:after{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;padding:0}a{color:inherit;text-decoration:none}img{display:block;max-width:100%;height:auto}ul,ol{list-style:none;margin:0;padding:0}button{font-family:inherit;cursor:pointer}html{scrollbar-color:rgba(148,163,184,.35) #0f172a}body{font-family:Inter,system-ui,-apple-system,sans-serif;font-weight:400;background:#0f172a;color:#94a3b8;font-size:1rem;line-height:1.625;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-tap-highlight-color:transparent}::selection{color:#0f172a;background-color:#5eead4}::-webkit-scrollbar{width:10px}::-webkit-scrollbar-track{background:#0f172a}::-webkit-scrollbar-thumb{background-color:#94a3b859;border:3px solid #0f172a;border-radius:10px}:focus-visible{outline:2px solid #5eead4;outline-offset:3px;border-radius:4px}h1,h2,h3{color:#e2e8f0;margin:0;text-wrap:balance}p{margin:0}.text-link{color:#e2e8f0;font-weight:500;transition:color .15s ease}.text-link:hover,.text-link:focus-visible{color:#5eead4}.nowrap{white-space:nowrap}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.layout{max-width:1280px;min-height:100vh;margin:0 auto;padding:0 96px;display:flex;justify-content:space-between;gap:16px}@media (max-width: 1280px){.layout{padding:0 48px}}@media (max-width: 960px){.layout{flex-direction:column;gap:0;padding:0 24px}}@media (max-width: 640px){.layout{padding:0 16px}}.content{width:52%;padding:96px 0}@media (max-width: 960px){.content{width:100%;padding:48px 0 96px}}.sidebar{position:sticky;top:0;width:44%;max-height:100vh;padding:96px 0;display:flex;flex-direction:column;justify-content:space-between}@media (max-height: 850px){.sidebar{padding:64px 0}}@media (max-width: 960px){.sidebar{position:relative;width:100%;max-height:none;padding:48px 0 0}}.sidebar .identity{display:flex;flex-direction:column;align-items:flex-start;gap:20px}.sidebar .avatar{width:170px;height:170px;border-radius:50%;object-fit:cover;border:1px solid rgba(148,163,184,.35);flex-shrink:0}@media (max-width: 640px){.sidebar .avatar{width:128px;height:128px}}.sidebar .brand{display:inline-block;border-radius:4px}.sidebar .brand img{width:200px;height:auto}@media (max-width: 640px){.sidebar .brand img{width:168px}}.sidebar .role{margin-top:20px;font-size:1.25rem;font-weight:500;letter-spacing:-.025em;color:#e2e8f0}@media (max-width: 640px){.sidebar .role{font-size:1.125rem}}.sidebar .pitch{margin-top:16px;max-width:20rem;line-height:1.625}.sidebar .menu-toggle{display:none;position:absolute;top:48px;right:0;width:48px;height:48px;padding:0;flex-direction:column;align-items:center;justify-content:center;gap:5px;background:transparent;border:0;border-radius:8px}.sidebar .menu-toggle:hover .menu-toggle__bar{background:#5eead4}@media (max-width: 960px){.sidebar .menu-toggle{display:inline-flex}}.sidebar .menu-toggle__bar{display:block;width:20px;height:2px;border-radius:2px;background:#e2e8f0;transition:transform .3s cubic-bezier(.16,1,.3,1),opacity .2s ease,background-color .15s ease}@media (prefers-reduced-motion: reduce){.sidebar .menu-toggle__bar{transition:none}}.sidebar .menu-toggle.is-open .menu-toggle__bar:nth-child(1){transform:translateY(7px) rotate(45deg)}.sidebar .menu-toggle.is-open .menu-toggle__bar:nth-child(2){opacity:0;transform:scaleX(0)}.sidebar .menu-toggle.is-open .menu-toggle__bar:nth-child(3){transform:translateY(-7px) rotate(-45deg)}.sidebar .social{display:flex;align-items:center;gap:20px}@media (max-width: 960px){.sidebar .social{margin-top:32px}}.sidebar .social a{display:inline-flex;color:#94a3b8;font-size:1.5rem;transition:color .15s ease,transform .15s ease}.sidebar .social a:hover,.sidebar .social a:focus-visible{color:#e2e8f0;transform:translateY(-2px)}.nav{margin-top:64px}@media (max-height: 850px){.nav{margin-top:32px}}@media (max-width: 960px){.nav{display:grid;grid-template-rows:0fr;margin-top:0;transition:grid-template-rows .35s cubic-bezier(.16,1,.3,1)}.nav.open{grid-template-rows:1fr;margin-top:24px}}.nav ul{display:flex;flex-direction:column;gap:4px;min-height:0;overflow:hidden}.nav a{display:inline-flex;align-items:center;gap:16px;padding:12px 0;font-size:.75rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#94a3b8;transition:color .15s ease}.nav a .nav-rule{display:block;width:4rem;height:1px;background:#94a3b8;transform:scaleX(.5);transform-origin:left;transition:transform .25s cubic-bezier(.16,1,.3,1),background-color .15s ease}.nav a .nav-rule+span{transform:translate(-2rem);transition:transform .25s cubic-bezier(.16,1,.3,1)}.nav a:hover,.nav a:focus-visible,.nav a.active{color:#e2e8f0}.nav a:hover .nav-rule,.nav a:focus-visible .nav-rule,.nav a.active .nav-rule{transform:scaleX(1);background:#e2e8f0}.nav a:hover .nav-rule+span,.nav a:focus-visible .nav-rule+span,.nav a.active .nav-rule+span{transform:none}.nav a.active .nav-rule{background:#5eead4}.info-card__title{font-size:.875rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#e2e8f0;margin-bottom:16px}.info-card__content{line-height:1.625}.card{position:relative;border-radius:8px;transition:background-color .2s ease}.card:hover{background-color:#1e293b80}.card{display:grid;grid-template-columns:8rem 1fr;gap:20px;align-items:start;width:100%;padding:16px;margin:0 -16px;box-sizing:content-box;color:inherit;text-align:left;font:inherit;background:transparent;border:0}@media (max-width: 960px){.card{box-sizing:border-box;margin:0;padding:16px 0}.card:hover{background:transparent}}@media (max-width: 640px){.card{grid-template-columns:1fr;gap:12px}}.card--no-thumb{grid-template-columns:1fr}.card:hover .card__title,.card:focus-visible .card__title{color:#5eead4}.card:hover .card__arrow,.card:focus-visible .card__arrow{transform:translate(2px,-2px)}.card:hover .card__thumbnail,.card:focus-visible .card__thumbnail{border-color:#94a3b859}.card__thumbnail{aspect-ratio:16/10;border:2px solid rgba(148,163,184,.15);border-radius:4px;overflow:hidden;background:#1e293b80;transition:border-color .2s ease}@media (max-width: 640px){.card__thumbnail{max-width:12.5rem}}.card__thumbnail img{width:100%;height:100%;object-fit:cover}.card__body{display:flex;flex-direction:column;gap:8px;min-width:0}.card__title{display:flex;align-items:baseline;gap:4px;font-size:1rem;font-weight:600;line-height:1.375;color:#e2e8f0;transition:color .15s ease}.card__arrow{flex-shrink:0;font-size:.875rem;transform:translateY(1px);transition:transform .2s cubic-bezier(.16,1,.3,1)}.card__description{font-size:.875rem;line-height:1.625}.card__tag{font-size:.75rem;font-weight:500;color:#94a3b8;text-transform:capitalize}.card__tech-tags{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}.card__tech-tag{display:inline-flex;align-items:center;padding:.25rem .75rem;border-radius:9999px;background:#2dd4bf1a;color:#5eead4;font-size:.75rem;font-weight:500;line-height:1.25rem}.card-list{display:flex;flex-direction:column;gap:8px}@media (max-width: 960px){.card-list{gap:0}}.card-link{display:block;border-radius:8px}.card-link:focus-visible .card__title{color:#5eead4}.btn{display:inline-flex;align-items:center;gap:8px;padding:8px 16px;border:1px solid rgba(148,163,184,.35);border-radius:8px;background:transparent;color:#e2e8f0;font-size:.875rem;font-weight:500;transition:border-color .15s ease,color .15s ease}.btn:hover{border-color:#5eead4;color:#5eead4}.btn:disabled{opacity:.5;cursor:not-allowed}.wrapper{display:flex;justify-content:center;padding:64px 0}.spinner{width:2.5rem;height:2.5rem;position:relative}.spinner:before,.spinner:after{content:"";position:absolute;inset:0;border-radius:50%;background:#5eead4;transform:scale(0);animation:pulse 2s ease-in-out infinite}.spinner:after{animation-delay:1s}@media (prefers-reduced-motion: reduce){.spinner:before{animation:none;transform:scale(.4);opacity:.6}.spinner:after{display:none}}@keyframes pulse{0%,to{transform:scale(0);opacity:.8}50%{transform:scale(1);opacity:0}}.page-header{margin-bottom:48px}.page-header h1{font-size:2.25rem;font-weight:700;line-height:1.2;letter-spacing:-.025em}@media (max-width: 640px){.page-header h1{font-size:1.875rem}}.page-header p{margin-top:16px;max-width:36rem}.section{margin-bottom:96px}@media (max-width: 960px){.section{margin-bottom:64px}}.section:last-child{margin-bottom:0}.section-title{font-size:.875rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#e2e8f0;margin-bottom:32px}@media (max-width: 960px){.section-title{position:sticky;top:0;z-index:10;margin:0 -24px 24px;padding:16px 24px;background:#0f172ad9;backdrop-filter:blur(8px)}}@media (max-width: 640px){.section-title{margin:0 -16px 24px;padding:16px}}.section-link{display:inline-flex;align-items:center;gap:8px;margin-top:40px;color:#e2e8f0;font-weight:600}.section-link svg{transition:transform .2s cubic-bezier(.16,1,.3,1)}.section-link:hover,.section-link:focus-visible{color:#5eead4}.section-link:hover svg,.section-link:focus-visible svg{transform:translate(4px)}.project-details .back-link{display:inline-flex;align-items:center;gap:8px;margin-bottom:32px;font-size:.875rem;font-weight:600;color:#5eead4}.project-details .back-link svg{transition:transform .2s cubic-bezier(.16,1,.3,1)}.project-details .back-link:hover svg,.project-details .back-link:focus-visible svg{transform:translate(-4px)}.project-details h1{font-size:2.25rem;font-weight:700;letter-spacing:-.025em;line-height:1.2;margin-bottom:32px}.project-details .cover{width:100%;border:2px solid rgba(148,163,184,.15);border-radius:8px;margin-bottom:32px}.project-details .rich-text{max-width:68ch}.project-details .rich-text p,.project-details .rich-text ul,.project-details .rich-text ol{margin:0 0 16px}.project-details .rich-text ul{list-style:disc;padding-left:20px}.project-details .rich-text a{color:#5eead4;text-decoration:underline;text-underline-offset:3px}.project-details .rich-text strong{color:#e2e8f0;font-weight:600}.project-details .tags{display:flex;flex-wrap:wrap;gap:8px;margin-top:32px}.project-details .tags li{display:inline-flex;align-items:center;padding:.25rem .75rem;border-radius:9999px;background:#2dd4bf1a;color:#5eead4;font-size:.75rem;font-weight:500;line-height:1.25rem}.empty-state{padding:48px 0}.empty-state a{color:#5eead4}.category-filter{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:32px}.category-filter .filter-btn{padding:8px 16px;font-size:.875rem;font-weight:500;color:#94a3b8;background:transparent;border:1px solid rgba(148,163,184,.35);border-radius:9999px;transition:color .15s ease,border-color .15s ease,background-color .15s ease}.category-filter .filter-btn:hover{color:#e2e8f0;border-color:#94a3b8}.category-filter .filter-btn.active{color:#5eead4;background:#2dd4bf1a;border-color:transparent}.project-viewer{position:fixed;inset:0;z-index:1000;display:flex;flex-direction:column;background:#0f172af7}.viewer-header{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:16px 24px;border-bottom:1px solid rgba(148,163,184,.15)}@media (max-width: 768px){.viewer-header{padding:12px 16px}}.viewer-title{display:flex;align-items:center;gap:16px;min-width:0}.viewer-title h2{font-size:1.25rem;font-weight:600}.github-link{display:inline-flex;align-items:center;gap:8px;font-size:.875rem;font-weight:500;color:#94a3b8;transition:color .15s ease}.github-link:hover,.github-link:focus-visible{color:#5eead4}@media (max-width: 768px){.github-link span{display:none}}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:40px;height:40px;background:transparent;border:1px solid rgba(148,163,184,.35);border-radius:8px;color:#e2e8f0;transition:border-color .15s ease,color .15s ease}.close-btn:hover{border-color:#5eead4;color:#5eead4}.viewer-content{flex:1;display:flex;align-items:center;justify-content:center;padding:16px;overflow:hidden}.iframe-error{text-align:center}.iframe-error p{color:#fca5a5;margin-bottom:16px}.iframe-error button{padding:8px 16px;border:1px solid rgba(148,163,184,.35);border-radius:8px;background:transparent;color:#e2e8f0}.project-iframe{width:100%;height:100%;min-height:80vh;border:1px solid rgba(148,163,184,.15);border-radius:8px;background:#fff}fieldset.category-filter{border:0;padding:0;min-width:0}.intro p+p{margin-top:16px}.intro strong{color:#e2e8f0;font-weight:500}.featured-project{position:relative;border-radius:8px;transition:background-color .2s ease}.featured-project:hover{background-color:#1e293b80}.featured-project{display:grid;grid-template-columns:8rem 1fr;gap:20px;padding:16px;margin:0 -16px 16px}@media (max-width: 960px){.featured-project{margin:0 0 32px;padding:0}.featured-project:hover{background:transparent}}@media (max-width: 640px){.featured-project{grid-template-columns:1fr;gap:12px}}.featured-project__thumb{aspect-ratio:16/10;border:2px solid rgba(148,163,184,.15);border-radius:4px;overflow:hidden;transition:border-color .2s ease}@media (max-width: 640px){.featured-project__thumb{max-width:12.5rem;order:2}}.featured-project__thumb img{width:100%;height:100%;object-fit:cover}.featured-project:hover .featured-project__thumb{border-color:#94a3b859}.featured-project h3{font-size:1rem;font-weight:600;line-height:1.375}.featured-project__description{margin-top:8px;font-size:.875rem}.featured-project__links{display:flex;flex-wrap:wrap;gap:20px;margin-top:12px}.featured-project__links a{display:inline-flex;align-items:center;gap:4px;font-size:.875rem;font-weight:500;color:#e2e8f0;transition:color .15s ease}.featured-project__links a svg{transition:transform .2s cubic-bezier(.16,1,.3,1)}.featured-project__links a:hover,.featured-project__links a:focus-visible{color:#5eead4}.featured-project__links a:hover svg,.featured-project__links a:focus-visible svg{transform:translate(2px,-2px)}.tech-list{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.tech-list li{display:inline-flex;align-items:center;padding:.25rem .75rem;border-radius:9999px;background:#2dd4bf1a;color:#5eead4;font-size:.75rem;font-weight:500;line-height:1.25rem}.experience-list{display:flex;flex-direction:column;gap:16px}.experience-item{position:relative;border-radius:8px;transition:background-color .2s ease}.experience-item:hover{background-color:#1e293b80}.experience-item{display:grid;grid-template-columns:8rem 1fr;gap:20px;padding:16px;margin:0 -16px}@media (max-width: 960px){.experience-item{margin:0 0 16px;padding:0}.experience-item:hover{background:transparent}}@media (max-width: 640px){.experience-item{grid-template-columns:1fr;gap:8px}}.experience-item__period{padding-top:.125rem;font-size:.75rem;font-weight:600;letter-spacing:.05em;text-transform:uppercase;font-variant-numeric:tabular-nums}.experience-item h3{font-size:1rem;font-weight:600;line-height:1.375}.experience-item__company{color:#94a3b8;font-weight:400}.experience-item__description{margin-top:8px;font-size:.875rem}.experience-list--detailed{gap:40px}@media (max-width: 960px){.experience-list--detailed{gap:32px}}.experience-item__highlights{display:flex;flex-direction:column;gap:8px;max-width:68ch;margin-top:16px;padding-left:20px;list-style:disc;font-size:.875rem}.experience-item__highlights li::marker{color:#5eead4}.about-story p+p{margin-top:16px}.about-story strong{color:#e2e8f0;font-weight:500}.skill-list{display:flex;flex-direction:column;gap:8px}.skill-list li{display:flex;align-items:center;gap:12px}.skill-list li svg{flex-shrink:0;color:#5eead4}.education-list{display:flex;flex-direction:column;gap:20px}.education-list h3{font-size:1rem;font-weight:600;line-height:1.375}.education-list p{margin-top:4px;font-size:.875rem}
