.portfolio-page{--pf-bg:#05070d;--pf-bg-2:#080b14;--pf-panel:#0c1120;--pf-panel-2:#10162a;--pf-line:#202847;--pf-line-soft:#8eacff17;--pf-ink:#edf1fb;--pf-muted:#7c86a8;--pf-muted-2:#4a5273;--pf-accent:#5b9dff;--pf-accent-strong:#2f6fef;--pf-accent-ink:#fff;--pf-accent-2:#22d3ee;--pf-accent-3:#8b7cff;--pf-radius:16px;--pf-radius-sm:10px;isolation:isolate;background:var(--pf-bg);min-height:100dvh;color:var(--pf-ink);font-family:var(--font-inter), sans-serif;position:relative}.portfolio-page a{color:inherit}.portfolio-page .mono{font-family:var(--font-jetbrains-mono), monospace}.portfolio-page .wrap{max-width:1120px;margin:0 auto;padding:0 28px}.portfolio-page:before{content:"";z-index:-3;background-image:linear-gradient(var(--pf-line-soft) 1px, transparent 1px), linear-gradient(90deg, var(--pf-line-soft) 1px, transparent 1px);opacity:.4;background-size:64px 64px;position:fixed;inset:0;-webkit-mask-image:radial-gradient(80% 60% at 50% 0,#000 30%,#0000 78%);mask-image:radial-gradient(80% 60% at 50% 0,#000 30%,#0000 78%)}.portfolio-page .pf-network{z-index:-2;pointer-events:none;width:100%;height:100%;position:fixed;inset:0}.portfolio-page:after{content:"";z-index:-1;background:radial-gradient(560px circle at var(--pf-mx,50%) var(--pf-my,15%), #5b9dff1a, transparent 60%), radial-gradient(ellipse 70% 45% at 85% -6%, #5b9dff21, transparent 60%), radial-gradient(ellipse 60% 42% at 6% 20%, #22d3ee17, transparent 60%), radial-gradient(ellipse 55% 40% at 50% 115%, #8b7cff14, transparent 60%);position:fixed;inset:0}.portfolio-page nav{z-index:50;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border-bottom:1px solid var(--pf-line-soft);background:#05070db8;position:sticky;top:0}.portfolio-page nav .wrap{justify-content:space-between;align-items:center;height:64px;display:flex}.portfolio-page .nav-brand{font-family:var(--font-jetbrains-mono), monospace;color:var(--pf-ink);align-items:center;gap:8px;font-size:13px;display:flex}.portfolio-page .nav-brand:before{content:"";background:var(--pf-accent);border-radius:50%;width:7px;height:7px;box-shadow:0 0 0 3px #5b9dff38}.portfolio-page .nav-links{font-size:13px;font-family:var(--font-jetbrains-mono), monospace;color:var(--pf-muted);gap:30px;margin:0;padding:0;list-style:none;display:flex}.portfolio-page .nav-links a{text-decoration:none;transition:color .2s;position:relative}.portfolio-page .nav-links a:hover{color:var(--pf-ink)}.portfolio-page .nav-links a.active{color:var(--pf-accent)}.portfolio-page .nav-links a.active:after{content:"";background:var(--pf-accent);height:2px;position:absolute;bottom:-21px;left:0;right:0}.portfolio-page .nav-toggle{border:1px solid var(--pf-line);color:var(--pf-ink);cursor:pointer;background:0 0;border-radius:8px;justify-content:center;align-items:center;width:36px;height:36px;display:none}.portfolio-page .nav-toggle span,.portfolio-page .nav-toggle span:before,.portfolio-page .nav-toggle span:after{content:"";background:var(--pf-ink);width:16px;height:2px;transition:transform .2s,opacity .2s;display:block;position:relative}.portfolio-page .nav-toggle span:before{position:absolute;top:-5px}.portfolio-page .nav-toggle span:after{position:absolute;top:5px}.portfolio-page .nav-toggle[aria-expanded=true] span{background:0 0}.portfolio-page .nav-toggle[aria-expanded=true] span:before{transform:translateY(5px)rotate(45deg)}.portfolio-page .nav-toggle[aria-expanded=true] span:after{transform:translateY(-5px)rotate(-45deg)}.portfolio-page .hero{grid-template-columns:1.05fr 1fr;align-items:center;gap:48px;padding-top:96px;padding-bottom:72px;display:grid}.portfolio-page .pf-eyebrow{font-family:var(--font-jetbrains-mono), monospace;letter-spacing:.06em;text-transform:uppercase;color:var(--pf-accent);align-items:center;gap:8px;margin-bottom:18px;font-size:12px;display:inline-flex}.portfolio-page .hero h1{font-family:var(--font-fraunces), serif;letter-spacing:-.01em;color:var(--pf-ink);font-size:clamp(2.6rem,5.6vw,4.4rem);font-weight:560;line-height:1.02}.portfolio-page .hero h1 .hl{background:linear-gradient(100deg, var(--pf-accent-2), var(--pf-accent) 45%, var(--pf-accent-3) 75%, var(--pf-accent-2));color:#0000;background-size:300% 100%;-webkit-background-clip:text;background-clip:text;font-style:italic;animation:9s ease-in-out infinite pf-gradient-shift}@keyframes pf-gradient-shift{0%,to{background-position:0%}50%{background-position:100%}}@media (prefers-reduced-motion:reduce){.portfolio-page .hero h1 .hl{background-position:35%;animation:none}}.portfolio-page .hero p.lede{color:var(--pf-muted);max-width:46ch;margin-top:24px;font-size:18px;line-height:1.6}.portfolio-page .hero-actions{flex-wrap:wrap;gap:14px;margin-top:32px;display:flex}.portfolio-page .btn{font-family:var(--font-inter), sans-serif;border-radius:100px;align-items:center;gap:8px;padding:13px 22px;font-size:14px;font-weight:600;text-decoration:none;transition:box-shadow .2s,border-color .2s,background .2s;display:inline-flex}.portfolio-page .btn-primary{background:var(--pf-accent-strong);color:var(--pf-accent-ink)}.portfolio-page .btn-primary:hover{box-shadow:0 10px 28px #2f6fef52}.portfolio-page .btn-ghost{border:1px solid var(--pf-line);color:var(--pf-ink)}.portfolio-page .btn-ghost:hover{border-color:var(--pf-muted);background:var(--pf-panel)}.portfolio-page .signal-card{background:var(--pf-panel);border:1px solid var(--pf-line);border-radius:var(--pf-radius);transform-style:preserve-3d;perspective:800px;overflow:hidden;box-shadow:0 30px 60px -30px #0009}.portfolio-page .signal-bar{background:var(--pf-panel-2);border-bottom:1px solid var(--pf-line);font-family:var(--font-jetbrains-mono), monospace;color:var(--pf-muted);align-items:center;gap:10px;padding:13px 16px;font-size:12px;display:flex}.portfolio-page .signal-dot{background:var(--pf-accent);border-radius:50%;flex-shrink:0;width:8px;height:8px;box-shadow:0 0 0 3px #5b9dff38}.portfolio-page .signal-title{color:var(--pf-ink)}.portfolio-page .signal-body{padding:18px 18px 6px;position:relative}.portfolio-page .signal-body svg{cursor:crosshair;width:100%;height:auto;display:block}.portfolio-page .signal-body .axis{stroke:var(--pf-line);stroke-width:1px}.portfolio-page .signal-body .grid-line{stroke:var(--pf-line-soft);stroke-width:1px}.portfolio-page .signal-body .fit-line{stroke:var(--pf-accent);stroke-width:2.5px;fill:none;filter:drop-shadow(0 0 8px #5b9dff80)}.portfolio-page .signal-body .fit-pulse{fill:#d6f0ff;filter:drop-shadow(0 0 6px #aae8ffe6)}.portfolio-page .signal-body .pt{fill:var(--pf-accent-2);fill-opacity:.85}.portfolio-page .signal-body .crosshair line{stroke:var(--pf-accent-2);stroke-width:1px;stroke-dasharray:3 4;opacity:.5}.portfolio-page .signal-body .crosshair-dot{fill:none;stroke:var(--pf-accent-2);stroke-width:1.5px;opacity:.8}.portfolio-page .signal-r2{color:var(--pf-muted-2);margin-left:auto}.portfolio-page .signal-readout{color:var(--pf-accent-2);border:1px solid var(--pf-line);pointer-events:none;white-space:nowrap;background:#080b14d9;border-radius:6px;padding:3px 7px;font-size:10.5px;position:absolute;transform:translate(12px,-26px)}.portfolio-page .signal-caption{color:var(--pf-muted);align-items:center;gap:8px;padding:12px 18px 18px;font-size:12px;display:flex}.portfolio-page .marquee{border-top:1px solid var(--pf-line-soft);border-bottom:1px solid var(--pf-line-soft);background:var(--pf-bg-2);padding:16px 0;overflow:hidden}.portfolio-page .marquee-track{letter-spacing:.02em;width:max-content;color:var(--pf-muted-2);white-space:nowrap;gap:0;font-size:13px;animation:32s linear infinite pf-marquee;display:flex}.portfolio-page .marquee-track span{padding-right:0}@keyframes pf-marquee{0%{transform:translate(0)}to{transform:translate(-50%)}}@media (prefers-reduced-motion:reduce){.portfolio-page .marquee-track{animation:none}.portfolio-page .marquee{overflow-x:auto}}.portfolio-page section{border-top:1px solid var(--pf-line-soft);padding:60px 0;scroll-margin-top:84px}.portfolio-page .sec-head{margin-bottom:28px}.portfolio-page .sec-head h2{font-family:var(--font-fraunces), serif;font-size:clamp(1.7rem,3vw,2.2rem);font-weight:560}.portfolio-page .sec-head h2 em{color:var(--pf-accent);font-style:italic}.portfolio-page .about-grid{flex-direction:column;display:flex}.portfolio-page .about-grid p{color:var(--pf-muted);max-width:66ch}.portfolio-page .about-grid p strong{color:var(--pf-ink);font-weight:600}.portfolio-page .about-body{align-items:flex-start;gap:32px;margin-bottom:48px;display:flex}.portfolio-page .about-photo-wrap{flex-shrink:0;width:216px}.portfolio-page .about-photo{aspect-ratio:3/4;border-radius:var(--pf-radius);background:linear-gradient(160deg, var(--pf-panel), var(--pf-panel-2));border:1px solid var(--pf-line);overflow:hidden}.portfolio-page .about-photo img{object-fit:cover;width:100%;height:100%;display:block}.portfolio-page .about-text{grid-template-columns:1fr 1fr;gap:32px;display:grid}.portfolio-page .about-text p+p{margin-top:14px}.portfolio-page .readout{border-top:1px solid var(--pf-line-soft);grid-template-columns:repeat(3,1fr);gap:0;margin:0;padding:0;list-style:none;display:grid}.portfolio-page .readout li{border-right:1px solid var(--pf-line-soft);padding:22px 24px}.portfolio-page .readout li:first-child{padding-left:0}.portfolio-page .readout li:last-child{border-right:none;padding-right:0}.portfolio-page .readout .k{font-family:var(--font-jetbrains-mono), monospace;color:var(--pf-accent);text-transform:uppercase;letter-spacing:.05em;font-size:11px;display:block}.portfolio-page .readout .v{color:var(--pf-ink);margin-top:8px;font-size:15px;line-height:1.5}.portfolio-page .projects{grid-template-columns:repeat(2,1fr);gap:22px;display:grid}.portfolio-page .project-card{background:var(--pf-panel);border:1px solid var(--pf-line);border-radius:var(--pf-radius);padding:20px 28px 28px;text-decoration:none;transition:border-color .25s,transform .25s,box-shadow .25s;display:block;position:relative;overflow:hidden}.portfolio-page .project-card:before{content:"";pointer-events:none;background:linear-gradient(115deg,#0000 35%,#5b9dff29 50%,#0000 65%);transition:transform .75s;position:absolute;inset:0;transform:translate(-130%)}.portfolio-page .project-card:hover:before{transform:translate(130%)}@media (prefers-reduced-motion:reduce){.portfolio-page .project-card:before{display:none}}.portfolio-page .project-card:hover{border-color:var(--pf-accent);transform:translateY(-3px);box-shadow:0 20px 40px -16px #0000008c}.portfolio-page .case-icon{color:var(--pf-muted-2);position:absolute;top:20px;right:20px}.portfolio-page .project-card:hover .case-icon{color:var(--pf-accent)}.portfolio-page .status{font-family:var(--font-jetbrains-mono), monospace;color:var(--pf-accent);text-transform:uppercase;letter-spacing:.04em;align-items:center;gap:7px;font-size:11px;display:inline-flex}.portfolio-page .status:before{content:"";background:var(--pf-accent);border-radius:50%;width:6px;height:6px;box-shadow:0 0 0 3px #5b9dff38}.portfolio-page .status.is-progress{color:var(--pf-accent)}.portfolio-page .status.is-progress:before{background:var(--pf-accent);animation:1.6s ease-in-out infinite pf-pulse;box-shadow:0 0 0 3px #5b9dff33}.portfolio-page .status.is-planned{color:var(--pf-muted-2)}.portfolio-page .status.is-planned:before{background:var(--pf-muted-2);box-shadow:none}@keyframes pf-pulse{0%,to{opacity:1}50%{opacity:.35}}.portfolio-page .project-card h3{font-family:var(--font-fraunces), serif;color:var(--pf-ink);margin-top:12px;font-size:1.35rem;font-weight:560}.portfolio-page .project-card p{color:var(--pf-muted);margin-top:12px;font-size:14.5px;line-height:1.6}.portfolio-page .chips{flex-wrap:wrap;gap:8px;margin-top:18px;display:flex}.portfolio-page .chip{font-family:var(--font-jetbrains-mono), monospace;border:1px solid var(--pf-line);color:var(--pf-muted);border-radius:100px;padding:5px 10px;font-size:11px}.portfolio-page .project-card.empty{color:var(--pf-muted);border-style:dashed;flex-direction:column;justify-content:center;display:flex}.portfolio-page .project-card.empty h3{color:var(--pf-muted)}.portfolio-page .skills-grid{grid-template-columns:repeat(4,1fr);gap:24px;display:grid}.portfolio-page .skill-col{background:var(--pf-panel);border:1px solid var(--pf-line);border-radius:var(--pf-radius-sm);padding:22px 20px}.portfolio-page .skill-col .k{font-family:var(--font-jetbrains-mono), monospace;letter-spacing:.05em;color:var(--pf-accent);margin-bottom:16px;font-size:14px;display:block}.portfolio-page .skill-col ul{color:var(--pf-ink);flex-direction:column;gap:11px;margin:0;padding:0;font-size:14px;list-style:none;display:flex}.portfolio-page .skill-col li{align-items:center;gap:9px;display:flex}.portfolio-page .skill-col li:before{content:"";background:var(--pf-line);flex-shrink:0;width:5px;height:5px}.portfolio-page .contact-card{background:var(--pf-panel);border:1px solid var(--pf-line);border-radius:var(--pf-radius);flex-direction:column;gap:32px;padding:42px;transition:border-color .25s;display:flex}.portfolio-page .contact-card:hover{border-color:var(--pf-accent)}.portfolio-page .contact-card h2{font-family:var(--font-fraunces), serif;font-size:1.8rem;font-weight:560}.portfolio-page .contact-card p{color:var(--pf-muted);max-width:52ch;margin-top:8px}.portfolio-page .contact-links{grid-template-columns:repeat(2,1fr);gap:14px;display:grid}.portfolio-page .contact-link{border:1px solid var(--pf-line);background:var(--pf-panel-2);color:var(--pf-ink);border-radius:12px;align-items:center;gap:12px;min-width:0;padding:17px 18px;text-decoration:none;transition:border-color .2s;display:flex}.portfolio-page .contact-link:hover{border-color:var(--pf-accent)}.portfolio-page .contact-link .c-icon{color:var(--pf-accent);flex-shrink:0}.portfolio-page .contact-link .c-body{flex-direction:column;gap:3px;min-width:0;display:flex}.portfolio-page .contact-link .c-body .k{font-family:var(--font-jetbrains-mono), monospace;color:var(--pf-muted-2);text-transform:uppercase;letter-spacing:.04em;font-size:11px}.portfolio-page .contact-link .c-body .v{text-overflow:ellipsis;white-space:nowrap;font-size:14px;overflow:hidden}.portfolio-page .contact-link .c-arrow{color:var(--pf-muted-2);flex-shrink:0;margin-left:auto;transition:transform .2s,color .2s}.portfolio-page .contact-link:hover .c-arrow{color:var(--pf-accent);transform:translate(2px,-2px)}.portfolio-page footer{color:var(--pf-muted-2);font-size:13px;font-family:var(--font-jetbrains-mono), monospace;justify-content:space-between;padding:34px 0 54px;display:flex}@media (max-width:900px){.portfolio-page .about-text{grid-template-columns:1fr;gap:16px}.portfolio-page .about-text p+p{margin-top:16px}.portfolio-page .skills-grid{grid-template-columns:1fr 1fr}}@media (max-width:760px){.portfolio-page .hero{grid-template-columns:1fr;padding-top:60px}.portfolio-page .about-body{flex-direction:column;align-items:flex-start;gap:24px}.portfolio-page .about-photo-wrap{align-self:center;width:208px}.portfolio-page .readout{grid-template-columns:1fr}.portfolio-page .readout li{border-right:none;border-bottom:1px solid var(--pf-line-soft);padding:18px 0}.portfolio-page .readout li:last-child{border-bottom:none}.portfolio-page .projects,.portfolio-page .skills-grid{grid-template-columns:1fr}.portfolio-page .contact-card{padding:28px}.portfolio-page .contact-links{grid-template-columns:1fr}.portfolio-page .nav-toggle{display:flex}.portfolio-page .nav-links{-webkit-backdrop-filter:none;border-bottom:1px solid var(--pf-line);z-index:60;background:#05070d;flex-direction:column;gap:0;padding:8px 28px 18px;display:none;position:absolute;top:64px;left:0;right:0}.portfolio-page .nav-links.open{display:flex}.portfolio-page .nav-links li{border-top:1px solid var(--pf-line-soft);padding:13px 0}.portfolio-page .nav-links a.active:after{display:none}.portfolio-page footer{flex-direction:column;gap:8px}}
