.pipeline-stage-num[data-astro-cid-yjwqggy4]{margin-bottom:var(--space-1);display:block}.projects-container article{scroll-margin-top:var(--space-8);background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);flex-direction:column;padding:1.75rem;transition:background .25s,border-color .25s,transform .25s,box-shadow .25s;display:flex;position:relative}.projects-container article:has(.card-link){cursor:pointer}.projects-container article:has(.card-link):hover{background:var(--bg-card-hover);border-color:var(--border-hover);transform:translateY(-2px)}.card-link:focus-visible{outline:none}.projects-container article:has(.card-link:focus-visible){outline:2px solid var(--accent);outline-offset:2px}.card-link{color:var(--text-primary);font-weight:inherit}.card-link:after{content:"";z-index:1;position:absolute;inset:0}.projects-container article:has(.card-link):hover .card-link{color:var(--accent)}.projects-container article.featured{background:var(--bg-featured);padding:var(--space-8);border-color:#8b7cf733;grid-column:1/-1}.projects-container article.featured:has(.card-link):hover{background:var(--bg-featured);border-color:var(--accent-border-strong);box-shadow:0 8px 32px var(--accent-glow)}.projects-container article p{color:var(--text-secondary);font-size:var(--text-base);line-height:1.65}.projects-container article:last-of-type:nth-of-type(2n){grid-column:1}.featured-label{font-family:var(--font-mono);font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.1em;color:var(--accent);margin-bottom:var(--space-3)}.year{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-tertiary);margin-bottom:var(--space-3);display:inline-block}.tags{margin:var(--space-4) 0}.tag-list{gap:var(--space-1);flex-wrap:wrap;display:flex}.tag{font-family:var(--font-mono);background:var(--accent-subtle);color:var(--accent);border-radius:var(--radius-sm);font-size:var(--text-xs);letter-spacing:.02em;padding:.2rem .6rem;font-weight:400}.card-actions{z-index:2;justify-content:space-between;align-items:center;gap:var(--space-4);margin-top:auto;display:flex;position:relative}.how-it-works-btn{z-index:2;align-items:center;gap:var(--space-2);font-family:var(--font-body);font-size:var(--text-sm);color:var(--text-primary);border:1px solid var(--accent-border);border-radius:var(--radius-sm);cursor:pointer;letter-spacing:.02em;height:2rem;opacity:var(--opacity-resting);white-space:nowrap;background:0 0;padding:0 .8rem;font-weight:600;transition:opacity .15s,border-color .15s,background-color .15s;display:flex;position:relative}.how-it-works-btn:hover{opacity:1;border-color:var(--accent-border-strong);background-color:var(--accent-subtle)}.how-it-works-btn .chevron{color:var(--accent);transition:transform .4s cubic-bezier(.4,0,.2,1);display:inline-block}.how-it-works-btn.open .chevron{transform:rotate(-180deg)}.detail-row{--notch-x:50%;margin-top:calc(-1 * var(--space-3));transition:grid-template-rows .25s cubic-bezier(.4, 0, .2, 1), opacity .2s ease, display .25s allow-discrete;opacity:1;grid-column:1/-1;grid-template-rows:1fr;display:grid;position:relative}.detail-row[hidden]{opacity:0;grid-template-rows:0fr;display:none}.detail-row-inner{min-height:0;padding-top:var(--space-2);overflow:hidden}@starting-style{.detail-row:not([hidden]){opacity:0;grid-template-rows:0fr}}@media (prefers-reduced-motion:reduce){.detail-row{transition:none}}.detail-content{padding:var(--space-4);background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);gap:var(--space-4);align-items:start;display:grid;position:relative}.detail-content--stack{grid-template-columns:1fr}.detail-content--split{grid-template-columns:minmax(0,2fr) minmax(0,3fr)}.detail-content:before{content:"";top:-6px;left:var(--notch-x);background:var(--bg-card);border-top:1px solid var(--accent-border-strong);border-left:1px solid var(--accent-border-strong);width:10px;height:10px;position:absolute;transform:translate(-50%)rotate(45deg)}@media (width<=800px){.detail-content--split{grid-template-columns:1fr}}.detail-panel{background:var(--bg-panel);border:1px solid var(--border-faint);border-radius:var(--radius-md);font-family:var(--font-mono);font-size:var(--text-xs);overflow:hidden}.detail-panel-header{border-bottom:1px solid var(--border-faint);background:#ffffff06;justify-content:space-between;align-items:center;padding:.3rem .65rem;display:flex}.detail-panel-label{font-size:var(--text-2xs);text-transform:uppercase;letter-spacing:.1em;color:var(--accent)}.detail-panel-caption{font-size:var(--text-2xs);color:var(--text-tertiary)}.pipeline-body{padding:.85rem var(--space-3);flex-direction:column;align-items:center;display:flex}.pipeline-edge{font-size:var(--text-2xs);color:var(--text-tertiary)}.pipeline-stage{border:1px solid var(--border-faint);border-radius:0 var(--radius-sm) var(--radius-sm) 0;width:100%;padding:var(--space-2) .65rem;background:#ffffff05;border-left:2px solid #8b7cf680}.pipeline-stage-num{font-size:var(--text-xs);color:var(--accent);flex-shrink:0}.projects-container .pipeline-stage-desc{font-size:var(--text-sm);color:var(--text-secondary);line-height:1.5;font-family:var(--font-mono)}.pipeline-connector{flex-direction:column;align-items:center;gap:.08rem;padding:.18rem 0;display:flex}.pipeline-connector-line{background:#ffffff1a;width:1px;height:7px}.pipeline-connector-caret{font-size:var(--text-2xs);color:#ffffff26;line-height:1}.links{flex-wrap:wrap;gap:1.25rem;display:flex}.links a{font-size:var(--text-sm)}.note{font-style:italic;font-size:var(--text-sm);color:var(--text-tertiary);padding-top:var(--space-2);margin-top:auto}@media (width<=640px){.projects-container article.featured{grid-column:1}.card-actions{align-items:flex-start;gap:var(--space-3);flex-direction:column}.how-it-works-btn{align-self:flex-start}}.detail-row .pipeline-body{padding:var(--space-2) var(--space-3)}.detail-row .pipeline-stage{padding:.3rem .5rem}.detail-row .pipeline-connector{padding:.05rem 0}.detail-row .pipeline-connector-line{height:4px}.code-demo pre{padding:var(--space-3) var(--space-3) var(--space-3) 0;font-family:var(--font-mono);font-size:var(--text-xs);counter-reset:line;margin:0;line-height:2;background:0 0!important}.code-demo pre code{white-space:normal;display:block}.code-demo .line{white-space:pre-wrap;overflow-wrap:anywhere;min-height:2em;padding-left:3rem;display:block;position:relative}.code-demo .line:before{counter-increment:line;content:counter(line);width:3rem;padding-right:var(--space-3);box-sizing:border-box;text-align:right;color:var(--text-tertiary);user-select:none;position:absolute;left:0}.code-demo .chip{border-radius:var(--radius-sm);-webkit-box-decoration-break:clone;box-decoration-break:clone;padding:.1rem .35rem;font-style:normal}.code-demo .chip.warn{background:#d6a05a33;color:#f0e0c0!important}.code-demo .chip.err{background:#e65a5a33;color:#f5a0a0!important}.code-demo-caption{margin-top:var(--space-2);font-family:var(--font-mono);font-size:var(--text-2xs);color:var(--text-tertiary)}.fork-shot[data-astro-cid-gfhm5h3o]{border:1px solid var(--border);border-radius:var(--radius-md);cursor:pointer;display:block;overflow:hidden;box-shadow:0 8px 24px #00000059}.fork-shot[data-astro-cid-gfhm5h3o]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.fork-chrome[data-astro-cid-gfhm5h3o]{background:var(--bg-panel);border-bottom:1px solid var(--border-faint);font-family:var(--font-mono);font-size:var(--text-2xs);color:var(--text-tertiary);text-align:center;padding:.3rem .65rem;display:block}.fork-shot[data-astro-cid-gfhm5h3o] img[data-astro-cid-gfhm5h3o]{width:100%;height:auto;display:block}.fork-caption[data-astro-cid-gfhm5h3o]{margin-top:var(--space-2);font-family:var(--font-mono);font-size:var(--text-2xs);color:var(--text-tertiary)}.page{box-sizing:content-box;max-width:860px;padding:var(--space-8);margin:0 auto}h1,h2{margin-bottom:var(--space-4)}.subtitle>a{color:var(--text-primary);font-weight:600}.subtitle>a:hover{color:var(--accent)}main{margin-top:var(--space-12)}section{margin-bottom:var(--space-12)}header{padding-bottom:var(--space-12);margin-bottom:var(--space-8);border-bottom:1px solid var(--border)}.eyebrow{font-family:var(--font-mono);font-size:var(--text-sm);color:var(--accent);letter-spacing:.04em;margin-bottom:var(--space-3)}.subtitle{font-size:var(--text-lg);color:var(--text-secondary);font-weight:400;line-height:1.7}.header-cta{gap:var(--space-3);margin-top:var(--space-8);display:flex}.cta-button{font-weight:600;font-size:var(--text-sm);border:1.5px solid var(--accent);background:var(--accent);color:var(--bg-primary);letter-spacing:.01em;border-radius:8px;padding:.6rem 1.4rem;text-decoration:none;transition:background-color .2s,color .2s,border-color .2s;display:inline-block}.cta-button:hover{color:var(--accent);background:0 0}.cta-button-secondary{color:var(--text-primary);border-color:var(--border);background:0 0}.cta-button-secondary:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-subtle)}.projects-container{gap:var(--space-4);grid-template-columns:repeat(2,1fr);display:grid}.skills-inline{gap:var(--space-8);grid-template-columns:repeat(auto-fit,minmax(220px,1fr));display:grid}.skill-group h3{font-family:var(--font-mono);font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.08em;color:var(--accent);margin-bottom:var(--space-2)}.skill-group p{color:var(--text-secondary);font-size:var(--text-base);line-height:1.8}.social-links{justify-content:center;align-items:center;gap:var(--space-6);padding:var(--space-8) 0 var(--space-12);border-top:1px solid var(--border);display:flex}.social-links a{opacity:var(--opacity-faint);transition:opacity .2s}.social-links a:hover{opacity:1}.social-links img{filter:brightness(0)invert();width:28px;height:28px}.footer-email{font-family:var(--font-mono);font-size:var(--text-sm);color:var(--text-tertiary)}@media (width<=640px){.page{padding:var(--space-4)}.projects-container{grid-template-columns:1fr}.header-content{padding-inline:var(--space-2)}.header-content>.subtitle{line-height:1.55}.projects-container article p{font-size:.9rem;line-height:1.6}.header-cta{gap:var(--space-2);grid-template-columns:1.15fr 1fr 1fr;display:grid}.header-cta a{text-align:center;white-space:nowrap;justify-content:center;align-items:center;width:100%;min-width:0;padding-inline:.5rem;display:flex}}@media (width>=768px){.page{padding:var(--space-12)}.skills-inline{grid-template-columns:1fr 1fr 1fr}}@keyframes fadeUp{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}header{animation:.5s both fadeUp}.projects{animation:.5s .1s both fadeUp}.tools{animation:.5s .2s both fadeUp}.social-links{animation:.5s .3s both fadeUp}.glow{animation:1.5s ease-out card-glow}@keyframes card-glow{0%{box-shadow:0 0 0 0 var(--accent-glow)}15%{box-shadow:0 0 24px 4px #7c6ff08c}70%{box-shadow:0 0 24px 4px #7c6ff08c}to{box-shadow:0 0 #7c6ff000}}.notes{color:var(--text-tertiary);font-size:var(--text-sm);line-height:1.6}.notes strong{color:var(--text-secondary);font-weight:600}
