.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}*,*:before,*:after{box-sizing:border-box}*{padding:0}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}body{min-height:100dvh;line-height:1.5;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}img,picture,svg,video{display:block;max-width:100%}a{color:inherit}button{font:inherit;background:none;border:0;cursor:pointer;color:inherit}:root{--bg: oklch(14% .015 270);--bg-soft: oklch(18% .02 270);--surface: oklch(22% .025 270);--line: oklch(30% .02 270);--fg: oklch(96% .01 270);--muted: oklch(70% .015 270);--accent: oklch(75% .18 250);--font-sans: ui-sans-serif, system-ui, -apple-system, Inter, "Segoe UI", Roboto, sans-serif;--font-serif: ui-serif, "Iowan Old Style", Georgia, "Times New Roman", serif;--font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;--step-s: clamp(.85rem, .8rem + .3vw, 1rem);--step-m: clamp(1rem, .9rem + .6vw, 1.25rem);--step-l: clamp(1.5rem, 1rem + 2vw, 2.5rem);--step-xl: clamp(2.5rem, 1.5rem + 5vw, 5rem);--step-xxl: clamp(3.5rem, 2rem + 9vw, 9rem);--page: min(1200px, 100% - 2.5rem);--ease: cubic-bezier(.2, .8, .2, 1);color-scheme:dark}body{background:var(--bg);color:var(--fg);font-family:var(--font-sans);font-size:var(--step-m);background-image:radial-gradient(1200px 700px at 85% -10%,color-mix(in oklch,var(--accent) 18%,transparent),transparent 60%),radial-gradient(900px 600px at -10% 110%,color-mix(in oklch,var(--accent) 10%,transparent),transparent 55%);background-attachment:fixed}.wrap{width:var(--page);margin-inline:auto}.nav{position:sticky;top:0;z-index:50;backdrop-filter:saturate(140%) blur(16px);background:color-mix(in oklch,var(--bg) 70%,transparent);border-bottom:1px solid color-mix(in oklch,var(--line) 60%,transparent)}.nav__inner{display:flex;align-items:center;justify-content:space-between;padding-block:1rem}.nav__brand{font-family:var(--font-mono);letter-spacing:-.02em;font-weight:600;text-decoration:none;display:inline-flex;gap:.5rem;align-items:center}.nav__brand:before{content:"";width:.75rem;height:.75rem;border-radius:50%;background:var(--accent);box-shadow:0 0 24px var(--accent);animation:pulse 3.2s var(--ease) infinite}@keyframes pulse{50%{transform:scale(1.25);opacity:.85}}.nav__links{display:flex;gap:1.5rem;font-family:var(--font-mono);font-size:.9rem}.nav__links a{text-decoration:none;color:var(--muted);transition:color .2s}.nav__links a:hover{color:var(--fg)}.hero{position:relative;padding:clamp(4rem,10vw,9rem) 0 clamp(3rem,8vw,6rem);overflow:clip}.hero__kicker{font-family:var(--font-mono);font-size:.85rem;color:var(--muted);text-transform:uppercase;letter-spacing:.2em;margin-bottom:1.5rem;display:inline-flex;gap:.75rem;align-items:center}.hero__kicker:before{content:"";width:2rem;height:1px;background:var(--muted)}.hero h1{font-family:var(--font-serif);font-size:var(--step-xxl);line-height:.95;letter-spacing:-.04em;font-weight:500;max-width:18ch}.hero h1 em{font-style:italic;background:linear-gradient(110deg,var(--accent),color-mix(in oklch,var(--accent) 50%,white));background-clip:text;-webkit-background-clip:text;color:transparent}.hero__lede{margin-top:2rem;max-width:52ch;color:var(--muted);font-size:var(--step-m)}.section{padding-block:clamp(3rem,6vw,5rem)}.section__head{display:flex;align-items:baseline;justify-content:space-between;gap:2rem;margin-bottom:3rem;flex-wrap:wrap;border-bottom:1px solid var(--line);padding-bottom:1rem}.section__head h2{font-family:var(--font-serif);font-weight:500;font-size:var(--step-l);letter-spacing:-.02em}.section__count{font-family:var(--font-mono);color:var(--muted);font-size:.85rem}.projects{display:grid;grid-template-columns:1fr;gap:1px;background:var(--line);border-block:1px solid var(--line)}@media(min-width:720px){.projects{grid-template-columns:1fr 1fr}}.card{--card-accent: var(--accent);position:relative;display:grid;padding:clamp(1.75rem,3vw,2.5rem);background:var(--bg);text-decoration:none;color:inherit;isolation:isolate;overflow:clip;transition:background .4s var(--ease);min-height:22rem}.card:before{content:"";position:absolute;inset:0;background:radial-gradient(600px circle at var(--mx, 50%) var(--my, 50%),color-mix(in oklch,var(--card-accent) 18%,transparent),transparent 45%);opacity:0;transition:opacity .4s var(--ease);z-index:-1}.card:hover:before,.card:focus-visible:before{opacity:1}.card:hover{background:var(--bg-soft)}.card__meta{display:flex;justify-content:space-between;align-items:center;margin-top:-10px;font-family:var(--font-mono);font-size:.8rem;color:var(--muted);letter-spacing:.04em}.card__meta-index:before{content:"— "}.card__title{font-family:var(--font-serif);font-size:clamp(1.75rem,2.5vw,2.75rem);line-height:1.05;letter-spacing:-.02em;font-weight:500;margin-top:auto;padding-top:3rem;max-width:14ch}.card__summary{color:var(--muted);margin-top:1rem;max-width:42ch}.card__tags{margin-top:1.5rem;display:flex;flex-wrap:wrap;gap:.5rem;font-family:var(--font-mono);font-size:.75rem}.card__tag{display:inline-flex;align-items:center;line-height:1;min-height:1.6rem;padding:.2rem .75rem;border:1px solid var(--line);border-radius:999px;color:var(--muted)}.card__arrow{position:absolute;bottom:clamp(1.75rem,3vw,1.5rem);right:clamp(1.75rem,3vw,2.5rem);width:2.5rem;height:2.5rem;border-radius:50%;border:1px solid var(--line);display:grid;place-items:center;transition:transform .4s var(--ease),background .4s var(--ease),border-color .4s var(--ease)}.card:hover .card__arrow{transform:translate(2px,-2px);background:var(--card-accent);border-color:var(--card-accent);color:var(--bg)}.card--featured{grid-column:1 / -1;min-height:clamp(22rem,38vw,32rem);padding:clamp(2rem,4vw,3.25rem);background:radial-gradient(80% 60% at 10% 0%,color-mix(in oklch,var(--card-accent) 14%,transparent),transparent 70%),radial-gradient(60% 70% at 100% 100%,color-mix(in oklch,var(--card-accent) 8%,transparent),transparent 65%),var(--bg)}.card--featured:after{content:"";position:absolute;inset:0 0 auto;height:2px;background:linear-gradient(90deg,transparent,var(--card-accent) 20%,color-mix(in oklch,var(--card-accent) 60%,white) 50%,var(--card-accent) 80%,transparent);opacity:.7}.card--featured .card__title{font-size:clamp(2.25rem,4vw,3.75rem);max-width:22ch;padding-top:clamp(3rem,8vw,6rem)}.card--featured .card__summary{max-width:55ch;font-size:var(--step-m);color:color-mix(in oklch,var(--fg) 85%,var(--muted))}.card--featured .card__arrow{width:3.25rem;height:3.25rem}.card--featured .card__arrow svg{width:16px;height:16px}.card__latest{display:inline-flex;align-items:center;gap:.5rem;font-family:var(--font-mono);font-size:.7rem;letter-spacing:.3em;text-transform:uppercase;color:color-mix(in oklch,var(--card-accent) 70%,white);background:color-mix(in oklch,var(--card-accent) 12%,transparent);padding:.35rem .8rem .35rem .7rem;border-radius:999px;border:1px solid color-mix(in oklch,var(--card-accent) 40%,var(--line))}.card__latest:before{content:"";width:.45rem;height:.45rem;border-radius:50%;background:var(--card-accent);box-shadow:0 0 12px var(--card-accent);animation:pulse 2.2s var(--ease) infinite}@supports (animation-timeline: view()){.reveal{animation:reveal linear both;animation-timeline:view();animation-range:entry 0% entry 60%}@keyframes reveal{0%{opacity:0;transform:translateY(2rem)}to{opacity:1;transform:translateY(0)}}}.project{padding-block:clamp(3rem,6vw,6rem);display:grid;gap:clamp(3rem,6vw,5rem)}.project__header{display:grid;gap:2rem}.project__back{font-family:var(--font-mono);font-size:.85rem;color:var(--muted);text-decoration:none}.project__back:hover{color:var(--fg)}.project__title{font-family:var(--font-serif);font-weight:500;font-size:var(--step-xl);line-height:1;letter-spacing:-.03em;max-width:16ch}.project__meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));gap:2rem;padding-top:2rem;border-top:1px solid var(--line)}.project__meta dt{font-family:var(--font-mono);font-size:.75rem;color:var(--muted);text-transform:uppercase;letter-spacing:.1em;margin-bottom:.5rem}.project__meta dd{font-size:.95rem}.project__body{max-width:65ch;font-size:var(--step-m);color:var(--fg)}.project__body :is(h2,h3){font-family:var(--font-serif);font-weight:500;margin-top:2.5rem;margin-bottom:1rem}.project__body h2{font-size:var(--step-l);letter-spacing:-.02em}.project__body h3{font-size:var(--step-m)}.project__body p{margin-bottom:1.25rem;color:color-mix(in oklch,var(--fg) 90%,var(--muted))}.project__body a{color:var(--accent);text-underline-offset:3px}.project__body code{font-family:var(--font-mono);font-size:.85em;background:var(--surface);padding:.1em .4em;border-radius:4px}.project__body pre{background:var(--surface);padding:1.25rem;border-radius:8px;overflow-x:auto;border:1px solid var(--line);margin-bottom:1.25rem}.project__body ul,.project__body ol{padding-left:1.25rem;margin-bottom:1.25rem}.project__body li{margin-bottom:.35rem}.project__links{display:flex;gap:.75rem;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;gap:.5rem;padding:.6rem 1rem;border-radius:999px;border:1px solid var(--line);font-family:var(--font-mono);font-size:.85rem;text-decoration:none;transition:background .3s var(--ease),border-color .3s var(--ease)}.btn:hover{background:var(--surface);border-color:var(--muted)}.btn--primary{background:var(--accent);color:var(--bg);border-color:var(--accent)}.btn--primary:hover{background:color-mix(in oklch,var(--accent) 85%,white);border-color:transparent}.palette[open]{padding:0;border:0;background:transparent;max-width:min(560px,92vw);width:100%;margin:12vh auto auto;animation:palette-in .25s var(--ease)}.palette::backdrop{background:color-mix(in oklch,var(--bg) 75%,transparent);backdrop-filter:blur(8px) saturate(130%);animation:palette-fade .25s var(--ease)}@keyframes palette-in{0%{transform:translateY(-8px);opacity:0}}@keyframes palette-fade{0%{opacity:0}}.palette__frame{background:color-mix(in oklch,var(--bg-soft) 92%,transparent);border:1px solid var(--line);border-radius:14px;overflow:hidden;box-shadow:0 30px 80px -20px #00000080,0 0 0 1px color-mix(in oklch,var(--accent) 15%,transparent)}.palette__header{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;padding:.75rem 1rem;border-bottom:1px solid var(--line)}.palette__chips{display:contents}.palette__chips:empty{display:none}.palette__input{flex:1;min-width:8rem;background:transparent;border:0;outline:0;color:var(--fg);font:inherit;font-size:1rem;padding:.35rem 0}.palette__input::placeholder{color:var(--muted)}.palette__list{list-style:none;max-height:50vh;overflow-y:auto;padding:.35rem}.palette__item{display:flex;align-items:center;justify-content:space-between;padding:.55rem .75rem;border-radius:8px;cursor:default;font-size:.9rem;line-height:1}.palette__item.is-active{background:color-mix(in oklch,var(--accent) 18%,transparent)}.palette__item-label{color:var(--fg)}.palette__item-count{font-family:var(--font-mono);font-size:.75rem;color:var(--muted)}.palette__empty{padding:1rem;color:var(--muted);font-size:.9rem;text-align:center}.palette__footer{display:flex;flex-wrap:wrap;gap:1rem;padding:.6rem 1rem;border-top:1px solid var(--line);font-family:var(--font-mono);font-size:.7rem;color:var(--muted)}.palette__footer kbd{display:inline-grid;place-items:center;min-width:1.3rem;height:1.3rem;padding:0 .3rem;margin-right:.25rem;border:1px solid var(--line);border-radius:4px;background:var(--bg);font:inherit}.chip{display:inline-flex;align-items:center;gap:.4rem;padding:.25rem .65rem;border-radius:999px;border:1px solid color-mix(in oklch,var(--accent) 40%,var(--line));background:color-mix(in oklch,var(--accent) 15%,transparent);color:var(--fg);font-family:var(--font-mono);font-size:.75rem;line-height:1;transition:background .2s var(--ease)}.chip:hover{background:color-mix(in oklch,var(--accent) 28%,transparent)}.chip span{color:var(--muted)}.filter-bar{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;padding:1rem 0;margin-top:-1.5rem;font-family:var(--font-mono);font-size:.8rem;color:var(--muted)}.filter-bar__label{letter-spacing:.08em;text-transform:uppercase;font-size:.7rem}.filter-bar__chips{display:inline-flex;flex-wrap:wrap;gap:.4rem}.filter-bar__count{color:var(--muted)}.filter-bar__clear{margin-left:auto;font-family:var(--font-mono);font-size:.75rem;color:var(--muted);text-transform:uppercase;letter-spacing:.1em;padding:.25rem .6rem;border:1px solid var(--line);border-radius:999px;transition:color .2s var(--ease),border-color .2s var(--ease)}.filter-bar__clear:hover{color:var(--fg);border-color:var(--muted)}.card[data-hidden]{display:none}.card--last{grid-column:1 / -1}.kbd-hint{display:inline-flex;align-items:center;gap:.35rem;font-family:var(--font-mono);font-size:.75rem;color:var(--muted);padding:.3rem .65rem;border:1px solid var(--line);border-radius:999px;transition:color .2s var(--ease),border-color .2s var(--ease)}.kbd-hint:hover{color:var(--fg);border-color:var(--muted)}.kbd-hint kbd{display:inline-grid;place-items:center;min-width:1.1rem;height:1.1rem;padding:0 .25rem;border:1px solid var(--line);border-radius:3px;background:var(--bg);font:inherit;font-size:.7rem}.section__head-right{display:inline-flex;align-items:center;gap:.75rem;flex-wrap:wrap}.donate__intro{max-width:58ch;color:var(--muted);font-size:var(--step-m);margin-bottom:clamp(2rem,4vw,3rem)}.donate__grid{display:grid;grid-template-columns:1fr;gap:1px;background:var(--line);border-block:1px solid var(--line)}@media(min-width:720px){.donate__grid{grid-template-columns:repeat(2,1fr)}}@media(min-width:1100px){.donate__grid{grid-template-columns:repeat(4,1fr)}}.donate{--card-accent: var(--accent);position:relative;display:flex;flex-direction:column;justify-content:space-between;gap:1.5rem;padding:clamp(1.5rem,2.5vw,2rem);background:var(--bg);isolation:isolate;overflow:hidden;transition:background .4s var(--ease)}.donate__grid:has(.donate:hover) .donate:not(:hover) .donate__qr{opacity:0}.donate:after{content:"";position:absolute;inset:auto 0 0;height:1px;background:var(--card-accent);transform:scaleX(0);transform-origin:left;transition:transform .5s var(--ease)}.donate:hover{background:var(--bg-soft)}.donate:hover:after{transform:scaleX(1)}.donate__head{display:flex;gap:1rem;align-items:flex-start}.donate__badge{width:2.5rem;height:2.5rem;border-radius:50%;flex-shrink:0;display:grid;place-items:center;font-family:var(--font-mono);font-size:.7rem;letter-spacing:.04em;color:var(--fg);background:color-mix(in oklch,var(--card-accent) 14%,transparent);border:1px solid color-mix(in oklch,var(--card-accent) 45%,var(--line));box-shadow:0 0 color-mix(in oklch,var(--card-accent) 30%,transparent);transition:box-shadow .5s var(--ease)}.donate:hover .donate__badge{box-shadow:0 0 0 6px color-mix(in oklch,var(--card-accent) 10%,transparent)}.donate__label{font-family:var(--font-serif);font-weight:500;font-size:1.15rem;letter-spacing:-.01em;line-height:1.2}.donate__note{color:var(--muted);font-size:.82rem;margin-top:.25rem;max-width:28ch}.donate__body{display:grid;gap:1rem;align-content:end}.donate__body--crypto{align-content:start}.donate__body--link{justify-items:start;align-content:end}.donate__qr{aspect-ratio:1;width:100%;max-width:13rem;justify-self:center;padding:.6rem;background:#f8f8f8;border:1px solid var(--line);border-radius:10px;display:grid;place-items:center;transition:opacity .4s var(--ease)}.donate__qr img{width:100%;height:100%;display:block;object-fit:contain}.donate__addr{display:flex;align-items:center;gap:.4rem;background:var(--bg-soft);border:1px solid var(--line);border-radius:999px;padding:.3rem .3rem .3rem .9rem}.donate__addr-text{font-family:var(--font-mono);font-size:.8rem;color:var(--muted);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.donate__copy{font-family:var(--font-mono);font-size:.7rem;text-transform:uppercase;letter-spacing:.15em;padding:.4rem .75rem;border-radius:999px;border:1px solid transparent;background:color-mix(in oklch,var(--card-accent) 22%,transparent);color:var(--fg);transition:background .3s var(--ease),color .3s var(--ease)}.donate__copy:hover,.donate__copy.is-copied{background:var(--card-accent);color:var(--bg)}.margin-exit{position:fixed;top:0;bottom:0;width:calc((100vw - var(--page)) / 2);z-index:5;display:none;align-items:center;justify-content:center;text-decoration:none;cursor:default}.margin-exit--left{left:0}.margin-exit--right{right:0}.margin-exit__line{position:absolute;top:50%;translate:0 -50%;width:1px;height:3rem;background:var(--muted);opacity:.35;transition:opacity .5s var(--ease),height .5s var(--ease),background .5s var(--ease)}.margin-exit__label{position:relative;writing-mode:vertical-rl;font-family:var(--font-mono);font-size:1rem;letter-spacing:.3em;text-transform:uppercase;color:var(--muted);opacity:0;translate:0 1rem;transition:opacity .5s var(--ease),translate .5s var(--ease),color .5s var(--ease)}.margin-exit--left .margin-exit__label{rotate:180deg}.margin-exit:hover .margin-exit__line,.margin-exit:focus-visible .margin-exit__line{opacity:1;height:6rem;background:var(--accent)}.margin-exit:hover .margin-exit__label,.margin-exit:focus-visible .margin-exit__label{opacity:.9;translate:0 0;color:var(--fg)}.margin-exit:focus-visible{outline:1px dashed var(--accent);outline-offset:-4px}@media(min-width:1000px){.margin-exit{display:flex}}.footer{margin-top:6rem;padding-block:3rem;border-top:1px solid var(--line);font-family:var(--font-mono);font-size:.85rem;color:var(--muted);display:flex;justify-content:space-between;flex-wrap:wrap;gap:1rem}::view-transition-old(root),::view-transition-new(root){animation-duration:.5s;animation-timing-function:var(--ease)}::view-transition-group(card-title){animation-duration:.6s}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}@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}}
