@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/inter-latin-400-normal.C38fXH4l.woff2)format("woff2"),url(/_astro/inter-latin-400-normal.CyCys3Eg.woff)format("woff")}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/inter-latin-500-normal.Cerq10X2.woff2)format("woff2"),url(/_astro/inter-latin-500-normal.BL9OpVg8.woff)format("woff")}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/inter-latin-600-normal.LgqL8muc.woff2)format("woff2"),url(/_astro/inter-latin-600-normal.CiBQ2DWP.woff)format("woff")}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/inter-latin-700-normal.Yt3aPRUw.woff2)format("woff2"),url(/_astro/inter-latin-700-normal.BLAVimhd.woff)format("woff")}:root{--bg:#000;--surface:#0a0a0a;--surface-hover:#141414;--line:#ffffff17;--text:#fff;--text-muted:#c4c4c4;--text-soft:#8f8f8f;--shell-w:52rem;--header-h:3.25rem;--footer-h:2.5rem;--dock-h:3.25rem;--glow-a:#6366f124;--glow-b:#22d3ee1a;--glow-c:#818cf814}body[data-active-tab=projects]{--glow-a:#6366f129;--glow-b:#22d3ee1f;--glow-c:#34d39917}body[data-active-tab=activity]{--glow-a:#34d39921;--glow-b:#6366f11a;--glow-c:#22d3ee14}body[data-active-tab=connect]{--glow-a:#818cf824;--glow-b:#fbbf2417;--glow-c:#6366f114}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{background:var(--bg);color-scheme:dark}body{color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:1rem;line-height:1.6;position:relative}.app-shell{z-index:1;grid-template-rows:var(--header-h) var(--dock-h) minmax(0, 1fr) var(--footer-h);height:100dvh;display:grid;position:relative;overflow:hidden}.page-loader{z-index:3000;opacity:0;pointer-events:none;background:linear-gradient(90deg,#0000 0%,#ffffff8c 45%,#ffffffd9 50%,#ffffff8c 55%,#0000 100%) 0 0/200% 100%;height:2px;animation:1.1s cubic-bezier(.4,0,.2,1) forwards loader-sweep;position:fixed;inset:0 0 auto}body.is-ready .page-loader{animation:.45s forwards loader-finish}.hero-backdrop{z-index:0;pointer-events:none;position:fixed;inset:0;overflow:hidden}.hero-backdrop-grid{background-image:radial-gradient(#ffffff17 1px,#0000 1px);background-size:28px 28px;animation:28s linear infinite grid-drift;position:absolute;inset:-50%;mask-image:radial-gradient(70% 60% at 50% 42%,#000 20%,#0000 72%)}.hero-backdrop-glow{filter:blur(80px);opacity:.55;border-radius:50%;transition:background .7s;animation:18s ease-in-out infinite glow-drift;position:absolute}.hero-backdrop-glow--a{background:var(--glow-a);width:min(42vw,22rem);height:min(42vw,22rem);top:8%;left:18%}.hero-backdrop-glow--b{background:var(--glow-b);width:min(36vw,18rem);height:min(36vw,18rem);animation-duration:22s;animation-delay:-6s;top:52%;right:12%}.hero-backdrop-glow--c{background:var(--glow-c);width:min(28vw,14rem);height:min(28vw,14rem);animation-duration:26s;animation-delay:-11s;bottom:18%;left:42%}.accent-pulse{align-items:center;gap:.55rem;padding-block:.15rem;display:flex}.panel-mark{align-items:center;min-height:.85rem;display:flex}.panel-heading .panel-mark{margin-bottom:.1rem}.activity-spark{align-items:flex-end;gap:.28rem;height:.85rem}.activity-spark-bar{width:.22rem;height:var(--bar-h,50%);transform-origin:bottom;animation:2.8s ease-in-out infinite spark-rise;animation-delay:var(--bar-delay,0s);background:#34d3998c;border-radius:2px}.connect-pulse{align-items:center;gap:0}.connect-pulse-dot{background:var(--text-soft);opacity:.35;width:.38rem;height:.38rem;animation:2.6s ease-in-out infinite dot-pulse;animation-delay:var(--pulse-delay,0s);border-radius:50%}.connect-pulse-line{transform-origin:0;width:.85rem;height:1px;animation:2.6s ease-in-out infinite connect-line;animation-delay:var(--line-delay,0s);background:linear-gradient(90deg,#ffffff1f,#ffffff0a)}.connect-pulse-dot:first-child{--pulse-delay:0s}.connect-pulse-line:nth-child(2){--line-delay:.14s}.connect-pulse-dot:nth-child(3){--pulse-delay:.28s}.connect-pulse-line:nth-child(4){--line-delay:.42s}.connect-pulse-dot:nth-child(5){--pulse-delay:.56s}.connect-pulse-line:nth-child(6){--line-delay:.7s}.connect-pulse-dot:nth-child(7){--pulse-delay:.84s}.accent-pulse-dot{background:var(--dot-color);opacity:.35;width:.42rem;height:.42rem;animation:2.4s ease-in-out infinite dot-pulse;animation-delay:var(--pulse-delay,0s);border-radius:50%}.reveal{opacity:0;transition:opacity .52s cubic-bezier(.22,1,.36,1),transform .52s cubic-bezier(.22,1,.36,1);transition-delay:var(--reveal-delay,0s);transform:translateY(10px)}.reveal.is-visible{opacity:1;transform:translateY(0)}body.is-ready #panel-overview:not([hidden]) .stagger-list>*{animation:.48s cubic-bezier(.22,1,.36,1) backwards row-enter}body.is-ready #panel-overview:not([hidden]) .stagger-list>:first-child{animation-delay:.12s}body.is-ready #panel-overview:not([hidden]) .stagger-list>:nth-child(2){animation-delay:.17s}body.is-ready #panel-overview:not([hidden]) .stagger-list>:nth-child(3){animation-delay:.22s}body.is-ready #panel-overview:not([hidden]) .stagger-list>:nth-child(4){animation-delay:.27s}body.is-ready #panel-overview:not([hidden]) .stagger-list>:nth-child(5){animation-delay:.32s}.tab-panel.panel-enter .stagger-list>*{animation:.42s cubic-bezier(.22,1,.36,1) backwards row-enter}.tab-panel.panel-enter .stagger-list>:first-child{animation-delay:40ms}.tab-panel.panel-enter .stagger-list>:nth-child(2){animation-delay:80ms}.tab-panel.panel-enter .stagger-list>:nth-child(3){animation-delay:.12s}.tab-panel.panel-enter .stagger-list>:nth-child(4){animation-delay:.16s}.tab-panel.panel-enter .stagger-list>:nth-child(5){animation-delay:.2s}.tab-panel.panel-enter .stagger-list>:nth-child(6){animation-delay:.24s}@keyframes loader-sweep{0%{opacity:1;background-position:200% 0}to{opacity:1;background-position:-200% 0}}@keyframes loader-finish{to{opacity:0}}@keyframes grid-drift{0%{transform:translate(0)}to{transform:translate(28px,28px)}}@keyframes glow-drift{0%,to{transform:translate(0)scale(1)}33%{transform:translate(3%,-4%)scale(1.06)}66%{transform:translate(-4%,3%)scale(.94)}}@keyframes dot-pulse{0%,to{opacity:.28;transform:scale(1)}50%{opacity:.95;transform:scale(1.35)}}@keyframes row-enter{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes spark-rise{0%,to{opacity:.45;transform:scaleY(.85)}50%{opacity:.9;transform:scaleY(1)}}@keyframes connect-line{0%,to{opacity:.35;transform:scaleX(.7)}50%{opacity:.85;transform:scaleX(1)}}::selection{background:#ffffff29}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{z-index:2000;background:var(--surface);color:var(--text);border-radius:6px;padding:.5rem .75rem;text-decoration:none;position:absolute;top:-100%;left:.75rem}.skip-link:focus{top:.75rem}:focus-visible{outline-offset:2px;outline:2px solid #fff}.shell-inner{width:100%;max-width:var(--shell-w);margin-inline:auto;padding-inline:clamp(1rem,3vw,1.5rem)}.site-header{background:var(--bg)}.site-header-inner{height:var(--header-h);justify-content:space-between;align-items:center;gap:1rem;display:flex}.site-brand{color:var(--text);letter-spacing:-.02em;font-size:1rem;font-weight:600;text-decoration:none}.site-brand:hover{color:var(--text-muted)}.site-header-nav{align-items:center;gap:.15rem;display:flex}.icon-btn{width:2rem;height:2rem;color:var(--text-muted);border-radius:6px;justify-content:center;align-items:center;text-decoration:none;transition:color .14s,background .14s;display:inline-flex}.icon-btn:hover{color:var(--text);background:var(--surface-hover)}.app-stage{flex-direction:column;min-width:0;min-height:0;display:flex}.tab-panel{overscroll-behavior:contain;flex:1;min-height:0;overflow-y:auto}.tab-panel.panel-enter{animation:.32s panel-fade}.tab-panel[hidden]{display:none!important}.panel-stack{min-height:100%;max-width:var(--shell-w);flex-direction:column;justify-content:center;gap:clamp(1.25rem,3.5vh,2.25rem);margin-inline:auto;padding-block:clamp(1rem,4vh,2.5rem);padding-inline:clamp(1.25rem,4vw,2rem);display:flex}.panel-stack--overview{gap:clamp(1.5rem,4vh,2.5rem)}.overview-hero{flex-direction:column;gap:.85rem;display:flex}.overview-title{letter-spacing:-.035em;font-size:clamp(1.75rem,4.5vw,2.5rem);font-weight:600;line-height:1.12}.panel-title-row{align-items:center;gap:.55rem;display:flex}.panel-title-icon{color:var(--text);opacity:.9;flex-shrink:0}.panel-list-rail{grid-template-columns:auto minmax(0,1fr);align-items:stretch;gap:clamp(.85rem,2vw,1.35rem);min-height:0;display:grid}.project-rail{flex-direction:column;justify-content:stretch;gap:.4rem;width:3px;min-height:100%;padding-block:.35rem;display:flex}.project-rail-segment{background:var(--segment-color);opacity:.4;transform-origin:top;min-height:1.75rem;animation:3s ease-in-out infinite rail-flow;animation-delay:var(--segment-delay,0s);border-radius:999px;flex:1}@keyframes rail-flow{0%,to{opacity:.28;transform:scaleY(.72)}50%{opacity:.95;transform:scaleY(1)}}.overview-lead{color:var(--text-muted);max-width:42ch;font-size:clamp(1rem,2vw,1.125rem);line-height:1.6}.overview-focus{letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted);flex-wrap:wrap;align-items:center;gap:.5rem .65rem;font-size:.78rem;font-weight:600;display:flex}.overview-section-label{letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);margin-bottom:.5rem;font-size:.78rem;font-weight:600}.overview-actions{flex-wrap:wrap;align-items:center;gap:.45rem .65rem;display:flex}.overview-action{color:var(--text);align-items:center;gap:.4rem;font-size:.9375rem;font-weight:600;text-decoration:none;transition:color .14s;display:inline-flex}.overview-action:hover{color:var(--text-muted)}.overview-action-count{color:var(--text-muted);font-size:.8125rem;font-weight:600}.overview-action-sep{color:var(--text-soft);opacity:.35;user-select:none}.panel-title{letter-spacing:-.02em;text-transform:none;color:var(--text);font-size:clamp(1.25rem,2.5vw,1.5rem);font-weight:600}.panel-heading{flex-direction:column;gap:.5rem;margin-bottom:.25rem;display:flex}.panel-heading .panel-mark+.panel-title,.panel-heading .panel-mark+.panel-title-row{margin-top:.15rem}.panel-desc{color:var(--text-muted);max-width:40ch;font-size:clamp(.9375rem,1.5vw,1.0625rem);line-height:1.55}.meta-row{color:var(--text-soft);flex-wrap:wrap;align-items:center;gap:.5rem 1rem;font-size:.78rem;display:flex}.meta-row a{color:var(--text-muted);text-decoration:none}.meta-row a:hover{color:var(--text)}.project-list,.repo-list,.connect-list{flex-direction:column;list-style:none;display:flex}.project-list{gap:.35rem}.project-row{border:none}.project-row-link{isolation:isolate;box-sizing:border-box;width:100%;color:inherit;background:0 0;border-radius:12px;grid-template-columns:2.75rem minmax(0,1fr) 1.5rem;align-items:center;gap:1rem;margin-inline:-1.1rem;padding:1rem 1.1rem;text-decoration:none;transition:color .16s;display:grid;position:relative}.project-row-link:after{content:"";border-radius:inherit;z-index:-1;background:0 0;transition:background .18s;position:absolute;inset:0}.project-row-link:hover:after,.project-row-link:focus-visible:after{background:#ffffff0f}.project-row-link:focus-visible{outline-offset:2px;outline:2px solid #fff}.project-row-link:hover .project-row-arrow,.project-row-link:focus-visible .project-row-arrow{color:var(--text);transform:translate(2px)}.project-row-link:hover .project-row-desc,.project-row-link:focus-visible .project-row-desc{color:var(--text-muted)}.project-row--spotlight .project-row-link{padding-block:1.05rem}.project-row--spotlight .project-row-name{font-size:1.125rem}.project-row-icon{flex-shrink:0;justify-content:center;align-items:center;width:2.75rem;height:2.75rem;display:flex;overflow:hidden}.project-row-icon img{object-fit:contain;width:100%;height:100%;transition:transform .2s}.project-row-link:hover .project-row-icon img{transform:scale(1.06)}.project-row-fallback{width:100%;height:100%;color:var(--text-muted);justify-content:center;align-items:center;font-size:.75rem;font-weight:700;display:none}.project-row-body{flex-direction:column;gap:.15rem;min-width:0;display:flex}.project-row-top{flex-wrap:wrap;align-items:baseline;gap:.5rem;display:flex}.project-row-name{letter-spacing:-.02em;font-size:1rem;font-weight:600}.project-row-tag{color:var(--text-muted);text-transform:lowercase;font-size:.75rem}.project-row-desc{color:var(--text-muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:.9375rem;line-height:1.45;display:-webkit-box;overflow:hidden}.project-row-arrow{width:1.5rem;height:1.5rem;color:var(--text-soft);flex-shrink:0;justify-content:center;align-items:center;font-size:.9rem;line-height:1;transition:color .14s,transform .14s;display:flex}.repo-list{gap:.35rem}.repo-row{border:none}.repo-row-link{isolation:isolate;box-sizing:border-box;width:100%;color:inherit;background:0 0;border-radius:12px;justify-content:space-between;align-items:flex-start;gap:1rem;margin-inline:-1.1rem;padding:.95rem 1.1rem;text-decoration:none;transition:color .16s;display:flex;position:relative}.repo-row-link:after{content:"";border-radius:inherit;z-index:-1;background:0 0;transition:background .18s;position:absolute;inset:0}.repo-row-link:hover:after,.repo-row-link:focus-visible:after{background:#ffffff0f}.repo-row-link:focus-visible{outline-offset:2px;outline:2px solid #fff}.repo-row-main{flex-direction:column;gap:.15rem;min-width:0;display:flex}.repo-row-name{letter-spacing:-.01em;font-size:1rem;font-weight:600}.repo-row-desc{color:var(--text-muted);font-size:.875rem;line-height:1.45}.repo-row-meta{color:var(--text-soft);flex-direction:column;flex-shrink:0;align-items:flex-end;gap:.2rem;font-size:.68rem;display:flex}.repo-stars{color:#d4a017}.repo-lang{color:var(--lang-color)}.text-link{color:var(--text-muted);font-size:.9375rem;font-weight:600;text-decoration:none}.text-link:hover{color:var(--text)}.empty-state{color:var(--text-muted);font-size:.9375rem}.empty-state a{color:var(--text)}.connect-list{gap:.35rem}.connect-list li{border:none}.connect-row{isolation:isolate;box-sizing:border-box;width:100%;color:inherit;background:0 0;border-radius:12px;justify-content:space-between;align-items:center;gap:1rem;margin-inline:-1.1rem;padding:1rem 1.1rem;text-decoration:none;transition:color .16s;display:flex;position:relative}.connect-row:after{content:"";border-radius:inherit;z-index:-1;background:0 0;transition:background .18s;position:absolute;inset:0}.connect-row:hover:after,.connect-row:focus-visible:after{background:#ffffff0f}.connect-row:focus-visible{outline-offset:2px;outline:2px solid #fff}.connect-label{color:var(--text-muted);font-size:.875rem;font-weight:500}.connect-value{color:var(--text);text-align:right;font-size:1rem;font-weight:600}.connect-row:hover .connect-value{color:var(--text)}.dock-host{padding-inline:1rem;justify-content:center;align-items:center;padding-bottom:.25rem;display:flex}.floating-dock{background:var(--surface);border-radius:999px;align-items:center;gap:.15rem;padding:.22rem;display:inline-flex}.dock-tab{appearance:none;color:var(--text-soft);font:inherit;letter-spacing:-.01em;cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:999px;justify-content:center;align-items:center;padding:.5rem 1rem;font-size:.875rem;font-weight:600;line-height:1.2;transition:color .14s,background .14s;display:inline-flex}.dock-tab:hover{color:var(--text-muted)}.dock-tab[aria-selected=true]{color:var(--text);background:var(--surface-hover)}.dock-tab:focus-visible{outline:none;box-shadow:inset 0 0 0 2px #ffffffd9}.site-footer{background:var(--bg)}.site-footer-inner{height:var(--footer-h);justify-content:space-between;align-items:center;gap:.75rem;display:flex}.footer-copy,.footer-links a{color:var(--text-muted);font-size:.8125rem;text-decoration:none}.footer-links{flex-wrap:wrap;align-items:center;gap:.85rem;display:flex}.footer-links a:hover{color:var(--text)}@media (width>=768px){.panel-stack--overview{grid-template-rows:auto auto;grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);align-items:start;gap:clamp(1.5rem,3vh,2rem) clamp(2rem,5vw,3.5rem);display:grid}.overview-hero{grid-area:1/1}.overview-featured{grid-area:1/2/span 2;align-self:center}.overview-actions{grid-area:2/1;align-self:end}#panel-projects .panel-list-rail>.project-list{grid-template-columns:repeat(2,minmax(0,1fr));gap:.35rem clamp(1.5rem,4vw,2.5rem);display:grid}#panel-projects .project-row:nth-child(odd){padding-right:clamp(.5rem,1.5vw,.75rem)}#panel-projects .project-row:nth-child(2n){padding-left:clamp(.5rem,1.5vw,.75rem)}#panel-connect .connect-list{grid-template-columns:repeat(2,minmax(0,1fr));gap:.35rem clamp(1rem,3vw,2rem);display:grid}#panel-connect .connect-list li:nth-child(odd){padding-right:clamp(.5rem,1.5vw,.75rem)}#panel-connect .connect-list li:nth-child(2n){padding-left:clamp(.5rem,1.5vw,.75rem)}}@media (width>=960px){:root{--shell-w:56rem}#panel-projects .project-list{row-gap:.25rem}}@media (width<=560px){:root{--footer-h:auto;--dock-h:3.2rem}.project-row-link{grid-template-columns:2.75rem minmax(0,1fr) 1.5rem;gap:.65rem;margin-inline:-.85rem;padding:.95rem .85rem}.project-row-arrow{display:flex}.repo-row-link{flex-direction:column;gap:.35rem}.repo-row-meta{flex-direction:row;align-items:center;gap:.5rem}.connect-row{flex-direction:column;align-items:flex-start;gap:.15rem}.connect-value{text-align:left}.site-footer-inner{flex-direction:column;align-items:flex-start;height:auto;padding-block:.55rem}.floating-dock{scrollbar-width:none;max-width:100%;overflow-x:auto}.floating-dock::-webkit-scrollbar{display:none}.dock-tab{padding:.4rem .7rem;font-size:.74rem}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}.reveal{opacity:1;transform:none}.page-loader{display:none}}@keyframes panel-fade{0%{opacity:0}to{opacity:1}}@media (height>=640px) and (width>=561px){.panel-stack{justify-content:center}}@media (height>=800px){.panel-stack{gap:clamp(1.25rem,4vh,2.25rem)}.project-row--spotlight .project-row-link{padding-block:1.15rem}}
