:root{--ground:#0b0c0d;--surface:#181a1b;--edge:#303234;--accent:#8894a0;--lifted:#b0b8c1;--bone:#eceded;--muted:#a7a8a8;--faint:#7f8081;--t-label:.75rem;--t-meta:.8rem;--t-small:.94rem;--t-body:1rem;--t-lede:clamp(1.02rem, 2.6vw, 1.18rem);--sans:ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--mono:ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--s-within:.7rem;--s-sub:.9rem;--s-caption:1.25rem;--s-row:1rem;--s-chip:.5rem;--s-block:2rem;--s-card:clamp(3rem, 8vh, 4.5rem);--s-section:clamp(3rem, 9vh, 5.5rem);--measure-page:40rem;--measure-card:26rem;--measure-shelves:56rem}*{box-sizing:border-box}html{scrollbar-gutter:stable}body{align-items:center;gap:var(--s-section);background:var(--ground);min-height:100svh;color:var(--bone);font-family:var(--sans);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;flex-direction:column;margin:0;padding:0 1.5rem 3rem;display:flex;overflow-x:hidden}#field,.lift,.grain,.vignette{pointer-events:none;position:fixed;inset:0}#field{z-index:1;width:100%;height:100%}.lift{z-index:0}.grain,.vignette{z-index:2}main,footer{z-index:3;position:relative}main{margin-block:auto}.topbar{z-index:4;background:var(--ground);border-bottom:1px solid var(--edge);align-self:stretch;margin:0 -1.5rem;padding:0 1.5rem;position:sticky;top:0}.topbar-inner{justify-content:space-between;align-items:center;column-gap:var(--s-block);row-gap:var(--s-chip);max-width:var(--measure-shelves);min-height:3.5rem;padding:var(--s-chip) 0;flex-wrap:wrap;margin:0 auto;display:flex}.topbar-home{font-family:var(--mono);letter-spacing:-.02em;font-size:1.05rem;font-weight:500;text-decoration:none}.topbar-home .pure{color:var(--bone)}.topbar-home .idle{color:var(--accent)}.topbar-links{gap:var(--s-caption);margin:0;padding:0;list-style:none;display:flex}.menu{position:relative}.menu summary{font-family:var(--mono);font-size:var(--t-meta);color:var(--muted);cursor:pointer;text-underline-offset:.35em;align-items:center;gap:.45rem;text-decoration-thickness:1px;list-style:none;display:flex}.menu summary::-webkit-details-marker{display:none}.menu summary:hover,.menu details[open]>summary{color:var(--bone)}.menu summary[data-current]{color:var(--bone);text-decoration:underline;text-decoration-color:var(--accent)}.chevron{border-bottom:1.5px solid;border-right:1.5px solid;width:5px;height:5px;margin-top:-3px;transition:transform .15s;transform:rotate(45deg)}.menu details[open] .chevron{margin-top:2px;transform:rotate(225deg)}.menu-panel{z-index:6;background:var(--surface);border:1px solid var(--edge);border-radius:4px;width:22rem;margin:0;padding:.4rem;list-style:none;position:absolute;top:calc(100% + .9rem);right:0;box-shadow:0 18px 40px -16px #000c}.menu-panel a{border-radius:3px;grid-template-columns:32px 1fr;align-items:center;gap:.1rem .75rem;padding:.6rem .7rem;text-decoration:none;display:grid}.menu-panel img{border-radius:7px;grid-row:1/span 2}.menu-name{font-size:var(--t-small);color:var(--bone);font-weight:600}.menu-blurb{font-size:var(--t-meta);color:var(--muted);line-height:1.4}.menu-panel a:hover,.menu-panel a:focus-visible{background:#8894a01a}.menu-panel a[aria-current]{box-shadow:inset 2px 0 0 var(--accent)}@media (width<=40rem){.topbar-inner{position:relative}.menu{position:static}.menu-panel{width:auto;top:calc(100% + 1px);left:0;right:0}}@media (prefers-reduced-motion:no-preference){.menu details[open] .menu-panel{animation:.16s unfold}}@keyframes unfold{0%{opacity:0;translate:0 -4px}to{opacity:1;translate:none}}.topbar a:focus-visible,.menu summary:focus-visible,.skip:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.skip{z-index:5;font-family:var(--mono);font-size:var(--t-meta);color:var(--bone);background:var(--surface);border:1px solid var(--accent);border-radius:2px;padding:.5rem .9rem;position:absolute;top:.75rem;left:.75rem;transform:translateY(-200%)}.skip:focus{transform:none}.lift{background:radial-gradient(70% 55% at 50% 44%,#c4ccd40d 0%,#c4ccd408 34%,#c4ccd403 60%,#0000 78%)}.grain{opacity:.05;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)'/%3E%3C/svg%3E")}.vignette{background:radial-gradient(#0000 54%,#000000b8 100%)}.badge{margin-bottom:var(--s-block);font-family:var(--mono);font-size:var(--t-label);letter-spacing:.16em;text-transform:uppercase;color:var(--lifted);border:1px solid var(--edge);background:#181a1bb8;border-radius:2px;align-items:center;gap:.55rem;padding:.42rem .9rem;display:inline-flex}.pip{background:var(--accent);width:5px;height:5px;animation:2.6s ease-in-out infinite pulse;box-shadow:0 0 9px #8894a0b3}@keyframes pulse{0%,to{opacity:1}50%{opacity:.25}}main{text-align:center;max-width:var(--measure-page);flex-direction:column;align-items:center;display:flex}h1{font-family:var(--mono);letter-spacing:-.035em;margin:0;font-size:clamp(2.9rem,12.5vw,6.4rem);font-weight:500;line-height:1.05}h1 .pure{color:var(--bone)}h1 .idle{color:var(--accent)}.tagline{margin:var(--s-caption) 0 0;font-size:var(--t-lede);color:var(--bone);text-wrap:balance;line-height:1.6}.thesis{margin:var(--s-sub) 0 0;font-size:var(--t-body);color:var(--muted);text-wrap:pretty;line-height:1.7}main.home{width:100%;max-width:var(--measure-shelves)}.home>.tagline,.home>.thesis{max-width:var(--measure-page)}.shelves{grid-template-columns:repeat(auto-fit, minmax(min(100%, 22rem), var(--measure-card)));justify-content:center;gap:var(--s-block);width:100%;margin-top:var(--s-card);text-align:left;display:grid}.shelf{gap:var(--s-within);flex-direction:column;display:flex}.shelf-title{font-family:var(--mono);font-size:var(--t-label);letter-spacing:.16em;text-transform:uppercase;color:var(--muted);margin:0;font-weight:400}.shelf .project{flex:1;max-width:none;margin-top:0}.project{width:100%;max-width:var(--measure-card);margin-top:var(--s-card);text-align:left;border:1px solid var(--edge);border-left:2px solid var(--accent);background:#181a1bdb;border-radius:3px;padding:1.2rem 1.3rem 1.25rem;text-decoration:none;transition:border-color .2s,background .2s,transform .2s,box-shadow .2s;display:block}.project:hover,.project:focus-visible{border-color:var(--accent);background:#1e2123e6;transform:translateY(-2px);box-shadow:0 12px 28px -14px #8894a080,0 0 22px -8px #8894a040}.project:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.project:hover .proj-icon,.project:focus-visible .proj-icon{transform:rotate(-8deg)scale(1.08)}.project-head{flex-wrap:wrap;align-items:center;gap:.3rem .65rem;display:flex}.proj-icon{border:1px solid var(--edge);border-radius:9px;flex:none;width:36px;height:36px;transition:border-color .25s,transform .2s;overflow:hidden}.proj-icon svg{width:100%;height:100%;display:block}.proj-icon .i-tile{fill:var(--ground)}.proj-icon .i-ring,.proj-icon .i-neck,.proj-icon .i-grip,.proj-icon .i-wave{fill:none}.proj-icon .i-ring,.proj-icon .i-neck{stroke:var(--bone);stroke-width:32px}.proj-icon .i-grip{stroke:var(--bone);stroke-width:47px;stroke-linecap:round}.proj-icon .i-wave{stroke:url(#i-beat);stroke-width:24px;stroke-linecap:round;stroke-linejoin:round}.proj-icon .i-fade{stop-color:var(--accent)}.proj-icon .su-ring{fill:none;stroke:var(--bone);stroke-width:34px}.proj-icon .su-dot{fill:var(--bone)}.proj-icon .su-arrows{fill:none;stroke:var(--accent);stroke-width:34px;stroke-linecap:round;stroke-linejoin:round}.project-head h3{letter-spacing:-.005em;margin:0;font-size:1rem}.project-head h3 .ic-lead{color:var(--bone);font-weight:700}.project-head h3 .ic-tail{color:var(--accent);font-weight:400}.tag{white-space:nowrap;font-family:var(--mono);font-size:var(--t-label);letter-spacing:.08em;text-transform:uppercase;color:var(--lifted);border:1px solid var(--edge);border-radius:2px;margin-left:auto;padding:.15rem .45rem}@media (width<=460px){.project-head{grid-template-columns:auto 1fr;gap:.3rem .65rem;display:grid}.proj-icon{grid-row:1/span 2}.project-head h3,.tag{grid-column:2}.tag{justify-self:start;margin-left:0}}.project-desc{margin:var(--s-within) 0 0;font-size:var(--t-small);color:var(--muted);line-height:1.6}.project-desc strong{text-wrap:balance;display:block}body:has(main.page) #field{opacity:.4}.app-icon{width:96px;height:96px;margin-bottom:var(--s-within);display:block}.page h1{font-size:clamp(2.4rem,10vw,4.6rem)}.page h1.long{font-size:clamp(1.7rem,7vw,3.3rem)}.prose{width:100%;margin-top:var(--s-card);text-align:left}.prose h2{margin:var(--s-block) 0 0;font-family:var(--mono);font-size:var(--t-meta);letter-spacing:.14em;text-transform:uppercase;color:var(--lifted);font-weight:500}.prose h2:first-child{margin-top:0}.prose p,.prose li{margin:var(--s-within) 0 0;font-size:var(--t-body);color:var(--muted);line-height:1.7}.prose ol,.prose ul{margin:0;padding-left:1.2rem}.prose a{color:var(--lifted);text-underline-offset:.18em}.prose a:hover{color:var(--bone)}.prose a:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.product{z-index:3;align-items:center;gap:var(--s-block);flex-direction:column;width:100%;display:flex;position:relative}.product>main{width:100%;margin-block:0}.rail ul{justify-content:center;gap:var(--s-chip) var(--s-caption);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.rail-title{display:none}.rail a{font-family:var(--mono);font-size:var(--t-meta);color:var(--muted);text-decoration:none;display:block}.rail a:hover{color:var(--bone)}.rail a[aria-current]{color:var(--bone);text-decoration:underline;text-decoration-color:var(--accent);text-underline-offset:.35em}.rail a:focus-visible{outline:2px solid var(--accent);outline-offset:3px}@media (width>=64rem){.product{grid-template-columns:11rem minmax(0, var(--measure-page)) 11rem;justify-content:center;align-items:start;column-gap:var(--s-block);display:grid}.rail{text-align:left;margin-top:.5rem;position:sticky;top:6rem}.rail-title{margin:0 0 var(--s-within);font-family:var(--mono);font-size:var(--t-label);letter-spacing:.14em;text-transform:uppercase;color:var(--faint);display:block}.rail ul{border-left:1px solid var(--edge);flex-direction:column;gap:0}.rail a{border-left:2px solid #0000;margin-left:-1px;padding:.4rem 0 .4rem .9rem}.rail a[aria-current]{border-left-color:var(--accent);text-decoration:none}}.prose .store-badge{width:fit-content;margin:0 auto var(--s-block);display:block}.prose *+.store-badge{margin-top:var(--s-block)}.prose .store-badge img{display:block}.prose figure{margin:var(--s-block) auto 0;max-width:372px}.prose figure img{border:1px solid var(--edge);border-radius:12px;width:100%;height:auto;display:block}.prose figcaption{margin-top:var(--s-within);font-size:var(--t-meta);text-align:center;color:var(--muted)}.facts{width:100%;margin:var(--s-card) 0 0;text-align:left;border:1px solid var(--edge);background:var(--edge);border-radius:3px;grid-template-columns:repeat(auto-fit,minmax(8.5rem,1fr));gap:1px;display:grid;overflow:hidden}.facts div{background:#181a1beb;padding:.8rem 1rem}.facts dt{font-family:var(--mono);font-size:var(--t-label);letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}.facts dd{font-size:var(--t-small);color:var(--bone);margin:.3rem 0 0}.facts+.prose{margin-top:var(--s-block)}main>.links{margin-top:var(--s-card)}footer{align-items:center;gap:var(--s-row);flex-direction:column;display:flex}.links{justify-content:center;gap:var(--s-chip);flex-wrap:wrap;display:flex}.link{align-items:center;gap:var(--s-chip);font-family:var(--mono);font-size:var(--t-meta);color:var(--muted);border:1px solid var(--edge);border-radius:2px;padding:.5rem .95rem;text-decoration:none;transition:color .2s,border-color .2s,background .2s,transform .2s,box-shadow .2s;display:inline-flex}.mark{flex:none;transition:transform .2s}.link:hover,.link:focus-visible{color:var(--bone);border-color:var(--accent);background:#8894a014;transform:translateY(-2px);box-shadow:0 8px 20px -12px #8894a080,0 0 16px -6px #8894a040}.link:hover .mark{transform:rotate(-8deg)scale(1.08)}.link:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.copyright{font-family:var(--mono);font-size:var(--t-label);letter-spacing:.05em;color:var(--faint);margin:0}@media (prefers-reduced-motion:reduce){.pip{animation:none}.link,.mark{transition:color .2s,border-color .2s,background .2s,box-shadow .2s}.link:hover .mark,.link:hover,.link:focus-visible{transform:none}.project{transition:border-color .2s,background .2s,box-shadow .2s}.project:hover,.project:focus-visible,.project:hover .proj-icon,.project:focus-visible .proj-icon{transform:none}}.proj-icon .i-wave{stroke-dasharray:700;stroke-dashoffset:700px;animation:9s ease-in-out infinite beat}@keyframes beat{0%{stroke-dashoffset:700px}22%,62%{stroke-dashoffset:0}92%,to{stroke-dashoffset:-700px}}@media (prefers-reduced-motion:no-preference){.rail,.badge,.app-icon,h1,.tagline,.thesis,.shelf-title,.project,.prose,.link{opacity:0;animation:.45s forwards arrive}.rail{animation-delay:0s}.badge{animation-delay:40ms}.app-icon{animation-delay:70ms}h1{animation-delay:.1s}.tagline{animation-delay:.17s}.thesis{animation-delay:.23s}.shelf-title{animation-delay:.27s}.project,.prose{animation-delay:.31s}.shelf+.shelf .project{animation-delay:.37s}.links .link:first-child{animation-delay:.42s}.links .link:nth-child(2){animation-delay:.49s}.links .link:nth-child(3){animation-delay:.56s}.navigated :is(.rail,.badge,.app-icon,h1,.tagline,.thesis,.shelf-title,.project,.prose,.link){opacity:1;animation:none}}@keyframes arrive{0%{opacity:0;translate:0 4px}to{opacity:1;translate:none}}@media (prefers-reduced-motion:reduce){.proj-icon .i-wave{stroke-dashoffset:0;animation:none}}.astro-route-announcer{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;top:0;left:0;overflow:hidden}@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(*),[data-astro-transition-scope]{animation:none!important}}
