.project-media:where(.astro-x3lsrh45){position:relative;aspect-ratio:16 / 9;overflow:hidden;border:1px solid hsl(var(--field-ink) / .26);padding:.42rem;background:hsl(var(--field-warm));isolation:isolate}.project-media:where(.astro-x3lsrh45) picture,.project-media:where(.astro-x3lsrh45) img{position:relative;z-index:1;display:block;width:100%;height:100%}.project-card--lead .project-media:where(.astro-x3lsrh45){align-self:stretch;height:auto;min-height:30rem;aspect-ratio:unset}.project-media:where(.astro-x3lsrh45) img{border:1px solid hsl(var(--field-ink) / .18);object-fit:var(--poster-fit, cover);object-position:var(--poster-position, center);transform:translate3d(var(--parallax-x, 0px),var(--parallax-y, 0px),0) scale(1.012);transition:transform .26s cubic-bezier(.23,1,.32,1);will-change:transform}.media-fallback:where(.astro-x3lsrh45){position:absolute;inset:0;display:grid;align-content:end;gap:.2rem;padding:clamp(1rem,4vw,1.6rem);background:linear-gradient(135deg,hsl(var(--muted)),transparent 55%),repeating-linear-gradient(90deg,transparent 0,transparent 3.2rem,hsl(var(--border) / .42) 3.2rem,hsl(var(--border) / .42) calc(3.2rem + 1px));color:hsl(var(--foreground))}.media-fallback:where(.astro-x3lsrh45) span:where(.astro-x3lsrh45){position:absolute;top:1rem;right:1rem;color:hsl(var(--muted-foreground) / .45);font-size:clamp(2rem,7vw,4rem);font-weight:650;letter-spacing:-.08em}.media-fallback:where(.astro-x3lsrh45) strong:where(.astro-x3lsrh45){max-width:20ch;font-size:clamp(1rem,3vw,1.35rem);font-weight:620;line-height:1.1;text-wrap:balance}.media-fallback:where(.astro-x3lsrh45) small:where(.astro-x3lsrh45){color:hsl(var(--muted-foreground));font-size:.68rem}.project-media:where(.astro-x3lsrh45)[data-has-source=false] picture,.project-media:where(.astro-x3lsrh45)[data-image-failed=true] picture{display:none}.project-lens:where(.astro-x3lsrh45){position:absolute;z-index:3;width:7.5rem;height:7.5rem;border:1px solid hsl(var(--background) / .75);border-radius:50%;background-color:hsl(var(--card));background-image:var(--lens-image);background-position:var(--lens-position, center);background-repeat:no-repeat;background-size:220%;box-shadow:0 18px 45px -20px hsl(var(--foreground) / .65);opacity:0;pointer-events:none;transform:translate(-50%,-50%) scale(.88);transition:opacity .15s ease,transform .15s ease}.project-media:where(.astro-x3lsrh45)[data-lens-active=true] .project-lens:where(.astro-x3lsrh45){opacity:1;transform:translate(-50%,-50%) scale(1)}@media(hover:hover)and (pointer:fine){.project-card:hover .project-media:where(.astro-x3lsrh45) img{transform:translate3d(var(--parallax-x, 0px),var(--parallax-y, 0px),0) scale(1.03)}}@media(max-width:780px){.project-card--lead .project-media:where(.astro-x3lsrh45){min-height:0;height:auto;aspect-ratio:16 / 9}}@media(prefers-reduced-motion:reduce){.project-media:where(.astro-x3lsrh45) img,.project-lens:where(.astro-x3lsrh45){transition:none}.project-card:hover .project-media:where(.astro-x3lsrh45) img,.project-media:where(.astro-x3lsrh45) img{transform:none;will-change:auto}.project-lens:where(.astro-x3lsrh45){display:none}}.project-card:where(.astro-oeghznkx){position:relative;display:flex;min-width:0;overflow:hidden;border:1px solid hsl(var(--border));border-radius:1rem;background:hsl(var(--card));content-visibility:auto;contain-intrinsic-size:auto 38rem;transition:border-color .22s ease,box-shadow .22s ease,transform .22s ease}.project-card:where(.astro-oeghznkx)[hidden]{display:none!important}html[data-project-reveal] .project-card:where(.astro-oeghznkx)[data-project-card]{opacity:0;transform:translateY(.8rem)}html[data-project-reveal] .project-card:where(.astro-oeghznkx)[data-project-card][data-card-revealed]{opacity:1;transform:translateY(0);transition:opacity .26s cubic-bezier(.23,1,.32,1) var(--reveal-delay, 0ms),transform .26s cubic-bezier(.23,1,.32,1) var(--reveal-delay, 0ms),border-color .22s ease,box-shadow .22s ease}.project-card--grid:where(.astro-oeghznkx),.project-card--featured:where(.astro-oeghznkx){flex-direction:column}.project-card--lead:where(.astro-oeghznkx){display:grid;grid-template-columns:minmax(0,1.42fr) minmax(19rem,.78fr)}.open-case-label:where(.astro-oeghznkx){position:absolute;z-index:5;top:.8rem;left:.8rem;border:1px solid hsl(var(--background) / .65);border-radius:999px;padding:.22rem .42rem;background:hsl(var(--foreground) / .72);color:hsl(var(--background));font-size:.56rem;font-weight:700;letter-spacing:.12em;opacity:0;pointer-events:none;transform:translateY(-.35rem);transition:opacity .16s ease,transform .16s ease}.project-card--magic:where(.astro-oeghznkx):after{content:"";position:absolute;inset:0;z-index:2;background:radial-gradient(28rem circle at var(--pointer-x, -40rem) var(--pointer-y, -40rem),hsl(var(--primary) / .12),transparent 62%);opacity:0;pointer-events:none;transition:opacity .18s ease}.project-card--magic:where(.astro-oeghznkx):hover:after,.project-card--magic:where(.astro-oeghznkx):focus-within:after{opacity:1}.project-card--magic:where(.astro-oeghznkx):hover .open-case-label:where(.astro-oeghznkx),.project-card--magic:where(.astro-oeghznkx):focus-within .open-case-label:where(.astro-oeghznkx){opacity:1;transform:translateY(0)}@media(hover:hover)and (pointer:fine){.project-card--magic:where(.astro-oeghznkx):hover,.project-card--magic:where(.astro-oeghznkx):focus-within{transform:translateY(-4px)}}.project-card:where(.astro-oeghznkx):hover,.project-card:where(.astro-oeghznkx):focus-within{border-color:hsl(var(--foreground) / .24);box-shadow:0 24px 55px -42px hsl(var(--foreground) / .56)}.project-body:where(.astro-oeghznkx){position:relative;z-index:3;display:flex;min-width:0;flex:1;flex-direction:column;padding:clamp(1rem,2.5vw,1.35rem);transform:translate3d(var(--body-x, 0px),var(--body-y, 0px),0);transition:transform .22s cubic-bezier(.23,1,.32,1);will-change:transform}.project-card--lead:where(.astro-oeghznkx) .project-body:where(.astro-oeghznkx){justify-content:center;padding:clamp(1.35rem,4vw,2.25rem)}.project-body--compact:where(.astro-oeghznkx) .compact-status:where(.astro-oeghznkx){display:flex;align-items:center}.project-card--compact:where(.astro-oeghznkx) .project-heading:where(.astro-oeghznkx){margin-top:.62rem}.project-card--compact:where(.astro-oeghznkx) .project-heading:where(.astro-oeghznkx) h3:where(.astro-oeghznkx){font-size:clamp(1.3rem,2.8vw,1.8rem)}.project-card--compact:where(.astro-oeghznkx) .project-body:where(.astro-oeghznkx)>p:where(.astro-oeghznkx){margin-top:.5rem;-webkit-line-clamp:2}.project-card--compact:where(.astro-oeghznkx) .project-actions:where(.astro-oeghznkx){margin-top:1.15rem}.project-eyebrow:where(.astro-oeghznkx),.project-heading:where(.astro-oeghznkx),.github-meta:where(.astro-oeghznkx),.project-actions:where(.astro-oeghznkx){display:flex;align-items:center}.project-eyebrow:where(.astro-oeghznkx){justify-content:space-between;gap:.8rem;color:hsl(var(--muted-foreground));font-size:.67rem;font-weight:620;letter-spacing:.08em;text-transform:uppercase}.project-source:where(.astro-oeghznkx){border:1px solid hsl(var(--border));border-radius:999px;padding:.16rem .45rem;color:hsl(var(--muted-foreground));font-size:.58rem;letter-spacing:.06em;text-transform:none}.status:where(.astro-oeghznkx){display:inline-flex;align-items:center;gap:.38rem;letter-spacing:.03em}.status:where(.astro-oeghznkx) i:where(.astro-oeghznkx){width:.4rem;height:.4rem;border-radius:50%;background:hsl(var(--muted-foreground))}.status--building:where(.astro-oeghznkx) i:where(.astro-oeghznkx){background:hsl(var(--field-teal));box-shadow:0 0 0 3px hsl(var(--field-teal) / .12)}.status--active:where(.astro-oeghznkx) i:where(.astro-oeghznkx){background:#659eb9;box-shadow:0 0 0 3px #659eb91f}.project-heading:where(.astro-oeghznkx){min-width:0;justify-content:space-between;gap:.85rem;margin-top:.72rem}.project-heading:where(.astro-oeghznkx) h3:where(.astro-oeghznkx){min-width:0;margin:0;font-size:clamp(1.15rem,2.4vw,1.45rem);font-weight:620;letter-spacing:-.025em;line-height:1.18;overflow-wrap:anywhere;text-wrap:balance}.project-card--lead:where(.astro-oeghznkx) .project-heading:where(.astro-oeghznkx) h3:where(.astro-oeghznkx){font-size:clamp(1.7rem,4vw,2.65rem);letter-spacing:-.045em}.project-heading:where(.astro-oeghznkx)>span:where(.astro-oeghznkx){min-width:0;max-width:40%;overflow:hidden;color:hsl(var(--muted-foreground));font-size:.62rem;text-overflow:ellipsis;white-space:nowrap}.project-body:where(.astro-oeghznkx)>p:where(.astro-oeghznkx){display:-webkit-box;margin:.55rem 0 0;overflow:hidden;color:hsl(var(--muted-foreground));font-size:.84rem;line-height:1.62;-webkit-box-orient:vertical;-webkit-line-clamp:3}.project-card--lead:where(.astro-oeghznkx) .project-body:where(.astro-oeghznkx)>p:where(.astro-oeghznkx){font-size:.9rem;-webkit-line-clamp:5}.technologies:where(.astro-oeghznkx){display:flex;flex-wrap:wrap;gap:.35rem;margin:1rem 0 0;padding:0;list-style:none}.technologies:where(.astro-oeghznkx) li:where(.astro-oeghznkx){border:1px solid hsl(var(--border));border-radius:999px;padding:.2rem .5rem;color:hsl(var(--muted-foreground));font-size:.65rem}.project-stories:where(.astro-oeghznkx){display:grid;gap:.45rem;margin-top:1rem;padding-top:.8rem;border-top:1px solid hsl(var(--border))}.project-stories-label:where(.astro-oeghznkx){color:hsl(var(--muted-foreground));font-size:.61rem;font-weight:650;letter-spacing:.12em;text-transform:uppercase}.project-story-links:where(.astro-oeghznkx){display:flex;flex-wrap:wrap;gap:.35rem .55rem}.project-story-links:where(.astro-oeghznkx) a:where(.astro-oeghznkx){display:inline-flex;align-items:center;max-width:100%;gap:.28rem;color:hsl(var(--foreground));font-size:.68rem;line-height:1.35;text-decoration:none}.project-story-links:where(.astro-oeghznkx) a:where(.astro-oeghznkx):hover,.project-story-links:where(.astro-oeghznkx) a:where(.astro-oeghznkx):focus-visible{text-decoration:underline;text-underline-offset:.18em}.project-foot:where(.astro-oeghznkx){margin-top:auto;padding-top:1rem}.github-meta:where(.astro-oeghznkx){flex-wrap:wrap;gap:.35rem .52rem;color:hsl(var(--muted-foreground));font-size:.67rem;font-variant-numeric:tabular-nums}.github-meta:where(.astro-oeghznkx) span:where(.astro-oeghznkx){display:inline-flex;align-items:center;gap:.22rem}.github-meta:where(.astro-oeghznkx) span:where(.astro-oeghznkx)+span:where(.astro-oeghznkx):before{content:"·";margin-right:.18rem}.project-actions:where(.astro-oeghznkx){flex-wrap:wrap;gap:.5rem;margin-top:.85rem}.project-actions:where(.astro-oeghznkx) a:where(.astro-oeghznkx){display:inline-flex;min-height:2.3rem;align-items:center;gap:.34rem;border:1px solid hsl(var(--border));border-radius:999px;padding:.45rem .72rem;color:hsl(var(--foreground));font-size:.72rem;font-weight:560;text-decoration:none;transition:background .18s ease,color .18s ease,transform .18s ease}.project-actions:where(.astro-oeghznkx) a:where(.astro-oeghznkx).primary{border-color:hsl(var(--foreground));background:hsl(var(--foreground));color:hsl(var(--background))}.project-actions:where(.astro-oeghznkx) a:where(.astro-oeghznkx):hover,.project-actions:where(.astro-oeghznkx) a:where(.astro-oeghznkx):focus-visible{background:hsl(var(--muted));transform:translateY(-1px)}.project-actions:where(.astro-oeghznkx) a:where(.astro-oeghznkx).primary:hover,.project-actions:where(.astro-oeghznkx) a:where(.astro-oeghznkx).primary:focus-visible{background:hsl(var(--foreground) / .84)}.project-actions:where(.astro-oeghznkx) .contribution-action:where(.astro-oeghznkx){border-color:#eb7a0a5c;color:#c7590f}.project-actions:where(.astro-oeghznkx) .contribution-action:where(.astro-oeghznkx):hover,.project-actions:where(.astro-oeghznkx) .contribution-action:where(.astro-oeghznkx):focus-visible{border-color:#d77009b3;background:#eb7a0a1a}@media(max-width:780px){.project-card--lead:where(.astro-oeghznkx){grid-template-columns:1fr}}@media(max-width:480px){.project-heading:where(.astro-oeghznkx){align-items:flex-start;flex-direction:column;gap:.28rem}.project-heading:where(.astro-oeghznkx)>span:where(.astro-oeghznkx){max-width:100%}}@media(prefers-reduced-motion:reduce){.project-card:where(.astro-oeghznkx),.project-card--magic:where(.astro-oeghznkx):after,.open-case-label:where(.astro-oeghznkx),.project-actions:where(.astro-oeghznkx) a:where(.astro-oeghznkx),.project-body:where(.astro-oeghznkx){transition:none}html[data-project-reveal] .project-card:where(.astro-oeghznkx)[data-project-card]{opacity:1}.project-actions:where(.astro-oeghznkx) a:where(.astro-oeghznkx):hover,.project-actions:where(.astro-oeghznkx) a:where(.astro-oeghznkx):focus-visible,.project-card--magic:where(.astro-oeghznkx):hover,.project-card--magic:where(.astro-oeghznkx):focus-within{transform:none}}
