.astro-route-announcer{position:absolute;left:0;top:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap;width:1px;height:1px}.home-cosmos[data-astro-cid-uuir2toa]{position:fixed;inset:0;z-index:-1;pointer-events:none}.home-cosmos[data-astro-cid-uuir2toa] canvas[data-astro-cid-uuir2toa]{width:100%;height:100%;display:block}.cosmos-scrim[data-astro-cid-uuir2toa]{position:absolute;inset:0;background:linear-gradient(to right,color-mix(in srgb,var(--color-bg) 40%,transparent),color-mix(in srgb,var(--color-bg) 38%,transparent) 70%,color-mix(in srgb,var(--color-bg) 20%,transparent) 86%,color-mix(in srgb,var(--color-bg) 4%,transparent));opacity:0;transition:opacity .5s ease}.cosmos-glare-mask[data-astro-cid-uuir2toa]{position:absolute;inset:0;overflow:hidden;opacity:0;transition:opacity .5s ease;-webkit-mask-image:linear-gradient(to right,#000 0%,#000 var(--cosmos-column-edge, 74%),transparent var(--cosmos-column-fade, 94%));mask-image:linear-gradient(to right,#000 0%,#000 var(--cosmos-column-edge, 74%),transparent var(--cosmos-column-fade, 94%))}.home-cosmos[data-astro-cid-uuir2toa][data-cosmos-mode=backdrop] .cosmos-glare-mask[data-astro-cid-uuir2toa]{opacity:1}.cosmos-glare[data-astro-cid-uuir2toa]{position:absolute;left:0;top:0;width:1000px;height:1000px;margin:-500px 0 0 -500px;opacity:0;background:radial-gradient(closest-side,color-mix(in srgb,var(--color-bg) 94%,transparent) 0%,color-mix(in srgb,var(--color-bg) 82%,transparent) 40%,color-mix(in srgb,var(--color-bg) 40%,transparent) 72%,transparent 100%);will-change:transform,opacity}@media(max-width:1099px){.cosmos-scrim[data-astro-cid-uuir2toa]{background:color-mix(in srgb,var(--color-bg) 56%,transparent)}}.home-cosmos[data-astro-cid-uuir2toa][data-cosmos-mode=backdrop] .cosmos-scrim[data-astro-cid-uuir2toa]{opacity:1}@media(max-width:899px){.home-cosmos[data-astro-cid-uuir2toa][data-cosmos-objects] .cosmos-scrim[data-astro-cid-uuir2toa]{opacity:1}}@keyframes astroFadeInOut{0%{opacity:1}to{opacity:0}}@keyframes astroFadeIn{0%{opacity:0;mix-blend-mode:plus-lighter}to{opacity:1;mix-blend-mode:plus-lighter}}@keyframes astroFadeOut{0%{opacity:1;mix-blend-mode:plus-lighter}to{opacity:0;mix-blend-mode:plus-lighter}}@keyframes astroSlideFromRight{0%{transform:translate(100%)}}@keyframes astroSlideFromLeft{0%{transform:translate(-100%)}}@keyframes astroSlideToRight{to{transform:translate(100%)}}@keyframes astroSlideToLeft{to{transform:translate(-100%)}}@media(prefers-reduced-motion){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}[data-astro-transition-scope]{animation:none!important}}.site-nav{position:relative;background:color-mix(in srgb,var(--color-bg) 72%,transparent)}.site-nav:after{content:"";position:absolute;left:0;right:0;bottom:0;height:4px;pointer-events:none;background:repeating-linear-gradient(to right,var(--hud-tick) 0 1px,transparent 1px 40px) top / 100% 3px no-repeat,linear-gradient(var(--hud-line),var(--hud-line)) top / 100% 1px no-repeat}.nav-container{max-width:calc(var(--max-width) + 4rem);margin:0 auto;padding:var(--space-2) var(--space-3);display:flex;align-items:center;justify-content:space-between;gap:var(--space-3)}.nav-identity{display:flex;flex-direction:column;gap:.3rem}.hud-label{margin:0;font-family:var(--font-mono);font-size:.62rem;font-weight:400;letter-spacing:var(--track-label);text-transform:uppercase;color:var(--color-muted)}.hud-label:before{content:"// ";color:var(--color-accent)}.nav-tagline{white-space:nowrap}.nav-brand{font-family:var(--font-mono);font-size:var(--font-size-sm);font-weight:500;letter-spacing:var(--track-wide);text-transform:uppercase;color:var(--color-text)}.nav-right{display:flex;align-items:center;gap:var(--space-3)}.nav-links{list-style:none;display:flex;margin:0;padding:0}.nav-links li{position:relative;padding:0 var(--space-2)}.nav-links li+li:before{content:"";position:absolute;left:0;top:.1em;bottom:.1em;width:1px;background:var(--hud-line)}.nav-links a{display:flex;flex-direction:column;align-items:center;gap:.15rem;font-family:var(--font-mono);font-size:var(--font-size-xs);letter-spacing:var(--track-label);text-transform:uppercase;color:var(--color-muted);transition:color var(--transition-fast)}.nav-index{font-size:.58rem;letter-spacing:.1em;line-height:1;color:var(--color-muted);transition:color var(--transition-fast)}.nav-links a:hover{color:var(--color-text)}.nav-links a:hover .nav-index{color:var(--color-accent-bright)}@media(max-width:900px){.nav-index{display:none}.nav-links li{padding:0 var(--space-1)}}footer{position:relative;margin-top:var(--space-6);background:color-mix(in srgb,var(--color-bg) 72%,transparent)}footer:before{content:"";position:absolute;left:0;right:0;top:0;height:4px;pointer-events:none;background:repeating-linear-gradient(to right,var(--hud-tick) 0 1px,transparent 1px 40px) bottom / 100% 3px no-repeat,linear-gradient(var(--hud-line),var(--hud-line)) bottom / 100% 1px no-repeat}.footer-container{max-width:calc(var(--max-width) + 4rem);margin:0 auto;padding:var(--space-4) var(--space-3);display:flex;flex-wrap:wrap;gap:var(--space-3);align-items:center;justify-content:space-between}.footer-links{list-style:none;display:flex;gap:var(--space-3);margin:0;padding:0}.footer-links a{display:flex;align-items:center;line-height:1;color:var(--color-muted);font-family:var(--font-mono);font-size:var(--font-size-xs);letter-spacing:var(--track-label);text-transform:uppercase;transition:color var(--transition-fast)}.footer-links a:hover{color:var(--color-text)}.footer-copy{margin:0;font-family:var(--font-mono);font-size:var(--font-size-xs);letter-spacing:.08em;line-height:1;color:var(--color-muted);display:flex;align-items:center}.footer-credits{max-width:calc(var(--max-width) + 4rem);margin:0 auto;padding:0 var(--space-3) var(--space-4);font-size:var(--font-size-xs);line-height:1.6;color:var(--color-muted);opacity:.55;transition:opacity var(--transition-base)}.footer-credits:hover{opacity:.9}.footer-credits a{color:inherit}.footer-credits a:hover{color:var(--color-text)}.nav-links a[aria-current=page]{position:relative;color:var(--color-text);font-weight:500}.nav-links a[aria-current=page] .nav-index{color:var(--color-accent-bright)}.nav-links a[aria-current=page]:after{content:"";position:absolute;left:50%;transform:translate(-50%);width:1.4rem;bottom:-.5em;height:2px;border-radius:1px;background:var(--color-accent);box-shadow:var(--hud-glow)}@media(max-width:640px){.nav-container{flex-direction:column;align-items:flex-start;gap:var(--space-2)}.nav-right{flex-wrap:wrap;gap:var(--space-2)}.nav-links{flex-wrap:wrap;gap:var(--space-1) 0}.nav-links li+li:before{display:none}.nav-tagline{display:none}}.button-row{display:flex;gap:var(--space-2);flex-wrap:wrap}.button{display:inline-block;padding:.55rem .9rem;border-radius:var(--radius-sm);border:1px solid var(--color-border);color:var(--color-text);font-size:var(--font-size-sm);transition:background-color var(--transition-fast),border-color var(--transition-fast)}.button:hover{background-color:color-mix(in srgb,var(--color-accent) 8%,transparent);border-color:color-mix(in srgb,var(--color-accent) 30%,transparent);text-decoration:none}.channels{list-style:none;margin:0;padding:0 var(--space-3);display:grid;gap:var(--space-1);background:color-mix(in srgb,var(--color-bg) 68%,transparent)}.channels li{display:flex;flex-direction:column;gap:.15rem;padding:var(--space-2) 0;border-top:1px solid var(--color-border)}.channels li:last-child{border-bottom:1px solid var(--color-border)}.channel-label{font-family:var(--font-mono);font-size:var(--font-size-xs);letter-spacing:var(--track-wide);text-transform:uppercase;color:var(--color-text-soft)}.channel-value{font-family:var(--font-heading);font-size:var(--font-size-lg);color:var(--color-text);transition:color var(--transition-fast);align-self:flex-start}.channel-value:hover,.channel-value:focus-visible{color:var(--color-accent)}.project-grid{display:grid;gap:var(--space-3)}@media(min-width:640px){.project-grid{grid-template-columns:repeat(2,1fr)}}.project-card{background-color:var(--surface);backdrop-filter:blur(var(--surface-blur));-webkit-backdrop-filter:blur(var(--surface-blur));border:1px solid var(--surface-border);border-radius:var(--radius-md);padding:var(--space-3);transition:background-color var(--transition-fast),border-color var(--transition-fast),transform var(--transition-fast)}.project-card:hover{background-color:var(--surface-strong);border-color:#7c8aff66;transform:translateY(-2px)}.project-card h2{font-size:var(--font-size-lg);text-transform:none;letter-spacing:normal;margin-bottom:var(--space-2)}.project-meta{font-size:var(--font-size-sm);color:var(--color-text-soft)}.tech-badges{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:var(--space-2)}.tech-badge{display:inline-block;padding:.2rem .55rem;font-family:var(--font-mono);font-size:var(--font-size-xs);font-weight:500;letter-spacing:.06em;border-radius:999px;background:color-mix(in srgb,var(--color-bg) 92%,var(--color-accent) 8%);color:var(--color-accent);border:1px solid color-mix(in srgb,var(--color-accent) 22%,transparent);cursor:default;transition:background var(--transition-fast),border-color var(--transition-fast)}.tech-badge:hover{background:color-mix(in srgb,var(--color-bg) 84%,var(--color-accent) 16%);border-color:color-mix(in srgb,var(--color-accent) 40%,transparent)}.tech-badge.filterable{cursor:pointer;user-select:none}.tech-badge.filterable.active{background:var(--color-accent);color:var(--color-bg);border-color:var(--color-accent);font-weight:600}.project-card-wrapper{scroll-margin-top:var(--space-5)}.project-card-wrapper.hidden{display:none}.project-toolbar{margin-bottom:var(--space-4);padding:var(--space-2) var(--space-3);background-color:var(--surface);backdrop-filter:blur(var(--surface-blur));-webkit-backdrop-filter:blur(var(--surface-blur));border:1px solid var(--surface-border);border-radius:var(--radius-md)}.project-toolbar .project-overview{margin:0 0 var(--space-2)}.project-toolbar .filter-bar:last-child{margin-bottom:0}.filter-bar{display:flex;flex-wrap:wrap;gap:.4rem;align-items:center}.filter-label{font-family:var(--font-mono);font-size:var(--font-size-sm);letter-spacing:var(--track-label);text-transform:uppercase;color:var(--color-muted);margin-right:.3rem}.project-private-badge{display:inline-block;margin-left:.5rem;padding:.1rem .5rem;vertical-align:middle;font-family:var(--font-mono);font-size:var(--font-size-xs);font-weight:600;letter-spacing:.04em;text-transform:uppercase;border-radius:999px;color:var(--color-muted);border:1px solid var(--color-border)}.project-content{max-width:var(--max-width)}.project-content h2{margin-top:var(--space-5)}.project-content p{margin-bottom:var(--space-3)}.project-content img{margin:var(--space-4) 0;border-radius:var(--radius-sm)}.project-content pre{padding:var(--space-3);overflow-x:auto;border-radius:var(--radius-sm);background:#1c1e210a;font-size:var(--font-size-sm)}.photo-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--space-3)}@media(min-width:768px){.photo-grid{grid-template-columns:repeat(2,1fr)}}@media(min-width:1400px){.photo-grid{grid-template-columns:repeat(3,1fr)}}.photo-grid button{padding:0;border:none;background:none;cursor:pointer;border-radius:var(--radius-sm);overflow:hidden}.photo-grid img{width:100%;height:100%;object-fit:cover;border-radius:var(--radius-sm);aspect-ratio:3 / 2;transition:transform var(--transition-base),opacity var(--transition-base)}.photo-grid button:hover img{transform:scale(1.03);opacity:.9}.viewer{position:fixed;inset:0;background:#141619f0;backdrop-filter:blur(6px);z-index:1000;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity var(--transition-base)}.viewer[aria-hidden=false]{opacity:1;pointer-events:auto}.viewer-stage{position:relative;max-width:90vw;max-height:85vh;display:flex;align-items:center;justify-content:center}.viewer-image{max-width:100%;max-height:85vh;object-fit:contain;border-radius:var(--radius-sm);user-select:none;-webkit-user-drag:none}.viewer-image.is-loading{opacity:.2;filter:blur(8px);transition:opacity .4s ease,filter .4s ease}.viewer-caption{position:absolute;bottom:-2.2rem;left:50%;transform:translate(-50%);color:#eaeaead9;font-size:var(--font-size-sm);text-align:center;max-width:60ch}.info-toggle{position:fixed;top:1rem;right:3.5rem;width:36px;height:36px;border-radius:50%;border:1px solid rgba(255,255,255,.35);background:#00000059;color:#fff;font-size:.85rem;font-weight:600;cursor:pointer;z-index:1002;display:flex;align-items:center;justify-content:center;transition:background var(--transition-fast)}.info-toggle:hover,.info-toggle:focus-visible{background:#0009}.viewer-close{position:fixed;top:1rem;right:1rem;width:36px;height:36px;border-radius:50%;border:1px solid rgba(255,255,255,.35);background:#00000059;color:#fff;font-size:1rem;cursor:pointer;z-index:1002;display:flex;align-items:center;justify-content:center;transition:background var(--transition-fast)}.viewer-close:hover,.viewer-close:focus-visible{background:#0009}.info-panel{position:fixed;top:0;right:0;height:100%;width:320px;background:#1c1e21f5;color:#eaeaea;padding:var(--space-4);padding-top:4rem;transform:translate(100%);transition:transform var(--transition-base);z-index:1001}.viewer.with-info .info-panel{transform:translate(0)}.info-title{font-family:var(--font-heading);font-size:1.1rem;margin-bottom:var(--space-1)}.info-meta{font-size:var(--font-size-sm);color:#eaeaeab3;margin-bottom:var(--space-3)}.info-settings{font-size:var(--font-size-sm);line-height:1.6}@media(max-width:768px){.info-panel{width:100%}.viewer-caption{bottom:-2.8rem}.info-toggle{top:auto;bottom:1rem;right:1rem}.viewer-close{top:.75rem;right:.75rem}}.music-list{display:flex;flex-direction:column;gap:var(--space-4)}.music-item{background-color:var(--surface);backdrop-filter:blur(var(--surface-blur));-webkit-backdrop-filter:blur(var(--surface-blur));border:1px solid var(--surface-border);border-radius:var(--radius-md);padding:var(--space-3)}.music-meta{margin-bottom:var(--space-2)}.music-title{font-family:var(--font-heading);font-size:var(--font-size-lg);letter-spacing:var(--track-title);margin-bottom:var(--space-1)}.music-note{font-family:var(--font-mono);font-size:var(--font-size-sm);letter-spacing:.03em;color:var(--color-muted)}.music-item audio,.music-item video{width:100%;margin-top:var(--space-2);border-radius:999px}.music-item audio{border:1px solid var(--color-border);background:color-mix(in srgb,var(--color-bg) 70%,transparent)}.music-item video{max-height:60vh;background:#000;border-radius:var(--radius-sm)}.status{margin-top:.5rem;font-size:.8rem;letter-spacing:.04em;opacity:.7;text-transform:capitalize}.status-under-development{color:#b7791f}.status-finished{color:#2f855a}.status-archived{color:#718096}.project-overview{margin:1rem 0 2rem;font-family:var(--font-mono);font-size:var(--font-size-sm);letter-spacing:.06em;text-transform:uppercase;color:var(--color-muted)}.repo-meta{margin-top:1.5rem;font-family:var(--font-mono);font-size:var(--font-size-sm);letter-spacing:.03em;color:var(--color-muted)}.readme-content{line-height:1.75}.readme-content h1,.readme-content h2,.readme-content h3,.readme-content h4,.project-content h1,.project-content h2,.project-content h3,.project-content h4{font-family:var(--font-heading);text-transform:none;letter-spacing:normal;margin-top:2rem;margin-bottom:.75rem}.readme-content h1{font-size:1.6rem}.readme-content h2{font-size:1.3rem}.readme-content h3{font-size:1.1rem}.readme-content p{margin-bottom:1rem}.readme-content ul,.readme-content ol{margin:0 0 1rem 1.5rem}.readme-content li{margin-bottom:.25rem}.readme-content pre{background:#161b22;border:1px solid var(--color-border);border-radius:6px;padding:1rem 1.25rem;overflow-x:auto;margin-bottom:1rem;font-size:.85rem}.readme-content code{font-family:SF Mono,Fira Code,Cascadia Code,monospace;font-size:.875em}.readme-content p code,.readme-content li code{background:#161b22;border:1px solid var(--color-border);border-radius:3px;padding:.1em .35em}.readme-content blockquote{border-left:3px solid var(--color-border);padding-left:1rem;margin-left:0;opacity:.8}.readme-content img{max-width:100%;border-radius:4px}.readme-content table{width:100%;border-collapse:collapse;margin-bottom:1rem;font-size:.9rem}.readme-content th,.readme-content td{padding:.5rem .75rem;border:1px solid var(--color-border);text-align:left}.readme-content th{background:#161b22}.readme-content hr{border:none;border-top:1px solid var(--color-border);margin:2rem 0}.approach-scale{position:fixed;left:max(var(--space-3),calc(50% - var(--max-width) / 2 - 4rem));top:50%;transform:translateY(-50%);z-index:3;display:flex;flex-direction:column;align-items:center;gap:var(--space-2);pointer-events:none;opacity:0;animation:approach-scale-in .6s ease .35s forwards}@keyframes approach-scale-in{to{opacity:1}}.approach-index{font-family:var(--font-mono);font-size:var(--font-size-xs);letter-spacing:var(--track-label);color:var(--color-muted);writing-mode:vertical-rl;text-orientation:mixed}.approach-rail{position:relative;width:1px;height:clamp(7rem,22vh,12rem);background:var(--color-border)}.approach-fill{position:absolute;inset:0;background:linear-gradient(to bottom,color-mix(in srgb,var(--color-accent) 45%,transparent),var(--color-accent));transform-origin:top;transform:scaleY(var(--fill, 0))}.approach-tick{position:absolute;top:var(--tick-pos, 0%);left:50%;width:5px;height:5px;margin:-2.5px 0 0 -2.5px;border-radius:50%;background:var(--color-border);transition:background-color var(--transition-base),box-shadow var(--transition-base)}.approach-tick[data-state=passed]{background:color-mix(in srgb,var(--color-accent) 55%,transparent)}.approach-tick[data-state=active]{background:var(--color-accent-bright);box-shadow:0 0 0 3px color-mix(in srgb,var(--color-accent) 18%,transparent)}.approach-scale[data-travelable=false] .approach-rail{display:none}@media(max-width:1099px){.approach-scale{left:0;right:0;top:0;transform:none;flex-direction:row;align-items:stretch;gap:0;height:2px}.approach-index{display:none}.approach-rail{width:100%;height:100%}.approach-fill{transform-origin:left;transform:scaleX(var(--fill, 0));background:linear-gradient(to right,color-mix(in srgb,var(--color-accent) 45%,transparent),var(--color-accent))}.approach-tick{top:50%;left:var(--tick-pos, 0%);width:3px;height:3px;margin:-1.5px 0 0 -1.5px}}.departure{max-width:var(--max-width);margin:var(--space-6) auto 0}.departure-link{display:flex;align-items:baseline;gap:var(--space-2);padding:var(--space-3);border:1px solid var(--surface-border);border-radius:var(--radius-md);background-color:var(--surface);backdrop-filter:blur(var(--surface-blur));color:var(--color-text);text-decoration:none;transition:border-color var(--transition-base),background-color var(--transition-base)}.departure-link:hover,.departure-link:focus-visible{border-color:color-mix(in srgb,var(--color-accent) 45%,transparent);background-color:var(--surface-strong);text-decoration:none}.departure-label{font-family:var(--font-mono);font-size:var(--font-size-xs);letter-spacing:var(--track-wide);text-transform:uppercase;color:var(--color-text-soft)}.departure-index{font-family:var(--font-mono);font-size:var(--font-size-sm);letter-spacing:var(--track-label);color:var(--color-accent-bright)}.departure-name{font-family:var(--font-heading);font-size:var(--font-size-lg);text-transform:uppercase;letter-spacing:var(--track-label)}.departure-name:after{content:"→";display:inline-block;margin-left:.6em;color:var(--color-accent);transition:transform var(--transition-base)}.departure-link:hover .departure-name:after,.departure-link:focus-visible .departure-name:after{transform:translate(.25em)}@media(prefers-reduced-motion:reduce){.departure-name:after{transition:none}}
