.portfolio-page[data-astro-cid-5pb5lsx3]{width:min(100%,86rem);margin:clamp(2.5rem,6vw,5rem) auto 5rem;padding:0 2rem}header[data-astro-cid-5pb5lsx3]{margin-bottom:3.2rem}.eyebrow[data-astro-cid-5pb5lsx3]{color:var(--text-400);margin:0;font-size:.78rem;line-height:1.5}h1[data-astro-cid-5pb5lsx3],h2[data-astro-cid-5pb5lsx3]{color:var(--text-900)}h1[data-astro-cid-5pb5lsx3]{letter-spacing:-.045em;margin:.9rem 0 1.25rem;font-size:clamp(3rem,6vw,4.5rem);font-weight:900;line-height:1}.projects[data-astro-cid-5pb5lsx3]{border-top:1px solid #94a3b833;margin:0;padding:0;list-style:none}.project[data-astro-cid-5pb5lsx3]{border-bottom:1px solid #94a3b833;grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);align-items:start;gap:clamp(2rem,4vw,4rem);padding:3rem 0;display:grid}.project-number[data-astro-cid-5pb5lsx3]{color:var(--text-400);padding-top:.15rem;font-size:.85rem}.project-number[data-astro-cid-5pb5lsx3]:before{content:"["}.project-number[data-astro-cid-5pb5lsx3]:after{content:"]"}.project-details[data-astro-cid-5pb5lsx3]{margin:1.2rem 0}summary[data-astro-cid-5pb5lsx3]{cursor:pointer;width:fit-content;color:var(--text-500);padding:.4rem 0;font-size:.78rem}summary[data-astro-cid-5pb5lsx3]:hover{color:var(--text-900)}summary[data-astro-cid-5pb5lsx3]:focus-visible{outline:2px solid rgb(var(--project-accent));outline-offset:5px}.project-visual[data-astro-cid-5pb5lsx3]{min-width:0;margin:0}.project[data-astro-cid-5pb5lsx3]{isolation:isolate;position:relative}.project[data-astro-cid-5pb5lsx3]:before{content:"";z-index:-1;pointer-events:none;opacity:0;background:linear-gradient(100deg, rgb(var(--project-accent) / .055), transparent 75%);transition:opacity .22s;position:absolute;inset:0 -1rem}.project[data-astro-cid-5pb5lsx3]:is(:hover,:focus-within):before{opacity:1}.project[data-astro-cid-5pb5lsx3]:is(:hover,:focus-within) .project-number[data-astro-cid-5pb5lsx3]{color:var(--text-900);text-shadow:2px 0 rgb(var(--project-accent) / .7)}.project[data-astro-cid-5pb5lsx3]:is(:hover,:focus-within) h2[data-astro-cid-5pb5lsx3]{animation:.4s steps(2,end) signal-lock}@keyframes signal-lock{0%,70%{text-shadow:-2px 0 #67e8f9,2px 0 #f0abfc;transform:translate(1px)}35%{text-shadow:2px 0 #67e8f9,-2px 0 #f0abfc;transform:translate(-1px)}to{transform:none}}.case-preview[data-astro-cid-5pb5lsx3]{background:#eef2f7;border:1px solid #94a3b838;display:block;overflow:hidden;box-shadow:0 14px 40px #0000001f}.project-screenshot[data-astro-cid-5pb5lsx3]{width:100%;height:auto;transition:transform .3s,filter .3s;display:block}.case-preview[data-astro-cid-5pb5lsx3]:hover .project-screenshot[data-astro-cid-5pb5lsx3]{filter:contrast(1.025);transform:scale(1.018)}.code-preview[data-astro-cid-5pb5lsx3]{min-width:0;padding:1rem 0}.code-preview[data-astro-cid-5pb5lsx3] pre.astro-code{outline:none;margin:0;padding:0;font-size:clamp(.65rem,1vw,.8rem);line-height:1.9;overflow-x:auto;background:0 0!important}.code-preview[data-astro-cid-5pb5lsx3] code{white-space:pre;display:block!important}.code-preview[data-astro-cid-5pb5lsx3] .line:before{content:none}html:not(.dark) .code-preview[data-astro-cid-5pb5lsx3]{background:#0c1019;padding:1rem}.project-image[data-astro-cid-5pb5lsx3]{filter:saturate(.65);width:min(78%,19rem);height:auto;margin:0 auto;transition:transform .3s,filter .3s;display:block}.project[data-astro-cid-5pb5lsx3]:hover .project-image[data-astro-cid-5pb5lsx3]{filter:saturate();transform:rotate(-3deg)}figcaption[data-astro-cid-5pb5lsx3]{color:var(--text-300);align-items:baseline;gap:.8rem;margin-top:1.2rem;font-size:.65rem;display:flex}@media (width<=900px){.project[data-astro-cid-5pb5lsx3]{grid-template-columns:1fr}.project-visual[data-astro-cid-5pb5lsx3]{width:100%;max-width:38rem}}@media (prefers-reduced-motion:reduce){.project[data-astro-cid-5pb5lsx3]:is(:hover,:focus-within) h2[data-astro-cid-5pb5lsx3]{animation:none}.project[data-astro-cid-5pb5lsx3]:before,.project-image[data-astro-cid-5pb5lsx3],.project-screenshot[data-astro-cid-5pb5lsx3]{transition:none}.project[data-astro-cid-5pb5lsx3]:hover .project-image[data-astro-cid-5pb5lsx3],.case-preview[data-astro-cid-5pb5lsx3]:hover .project-screenshot[data-astro-cid-5pb5lsx3]{transform:none}}html.dark h2[data-astro-cid-5pb5lsx3]{text-shadow:0 0 22px #b98cff24}h2[data-astro-cid-5pb5lsx3]{letter-spacing:-.035em;width:fit-content;max-width:100%;margin:.55rem 0 1.2rem;font-size:clamp(1.5rem,3.5vw,2rem);font-weight:500;line-height:1.25}.description[data-astro-cid-5pb5lsx3],.detail[data-astro-cid-5pb5lsx3]{max-width:70ch;font-size:1rem;line-height:1.75}.description[data-astro-cid-5pb5lsx3]{color:var(--text-700);margin:0}.detail[data-astro-cid-5pb5lsx3]{color:var(--text-300);margin:.8rem 0 0}.stack[data-astro-cid-5pb5lsx3]{flex-wrap:wrap;gap:.6rem 1.1rem;margin:-.25rem 0 1.5rem;padding:0;font-size:.78rem;font-weight:500;line-height:1.7;list-style:none;display:flex}.stack[data-astro-cid-5pb5lsx3] li[data-astro-cid-5pb5lsx3]{color:rgb(var(--stack-light-rgb));transition:text-shadow .22s}html.dark .stack[data-astro-cid-5pb5lsx3] li[data-astro-cid-5pb5lsx3]{color:rgb(var(--stack-rgb));text-shadow:0 0 8px rgb(var(--stack-rgb) / .45), 0 0 18px rgb(var(--stack-rgb) / .2)}html.dark .stack[data-astro-cid-5pb5lsx3] li[data-astro-cid-5pb5lsx3]:hover{text-shadow:0 0 6px rgb(var(--stack-rgb) / .8), 0 0 16px rgb(var(--stack-rgb) / .65), 0 0 30px rgb(var(--stack-rgb) / .4)}@media (prefers-reduced-motion:reduce){.stack[data-astro-cid-5pb5lsx3] li[data-astro-cid-5pb5lsx3]{transition:none}}.project-links[data-astro-cid-5pb5lsx3]{flex-wrap:wrap;gap:1.5rem;display:flex}.project-links[data-astro-cid-5pb5lsx3] a[data-astro-cid-5pb5lsx3]{color:var(--brand-500);text-underline-offset:.3em;padding-block:.5rem;font-size:.8rem;text-decoration:underline}.project-links[data-astro-cid-5pb5lsx3] a[data-astro-cid-5pb5lsx3]:hover{color:var(--text-900)}.project-links[data-astro-cid-5pb5lsx3] a[data-astro-cid-5pb5lsx3]:focus-visible{outline:2px solid var(--brand-500);outline-offset:5px}@media (width<=600px){.portfolio-page[data-astro-cid-5pb5lsx3]{padding-inline:1.25rem}header[data-astro-cid-5pb5lsx3]{margin-bottom:2rem}.project[data-astro-cid-5pb5lsx3]{grid-template-columns:1fr;gap:.75rem;padding-block:2rem}}
