@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/fonts/jetbrains-mono-latin-400-normal.woff2)format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/fonts/jetbrains-mono-latin-500-normal.woff2)format("woff2")}@font-face{font-family:"M PLUS Rounded 1c";font-style:normal;font-display:swap;font-weight:400;src:url(/fonts/m-plus-rounded-1c-latin-400-normal.woff2)format("woff2")}@font-face{font-family:"M PLUS Rounded 1c";font-style:normal;font-display:swap;font-weight:500;src:url(/fonts/m-plus-rounded-1c-latin-500-normal.woff2)format("woff2")}@font-face{font-family:"M PLUS Rounded 1c";font-style:normal;font-display:swap;font-weight:700;src:url(/fonts/m-plus-rounded-1c-latin-700-normal.woff2)format("woff2")}:root{--font-body:"M PLUS Rounded 1c", system-ui, sans-serif;--font-prose:var(--font-body);--font-mono:"JetBrains Mono", "Courier New", monospace;--text-sm:.875rem;--text-base:1.125rem;--text-lg:1.25rem;--text-xl:1.5rem;--text-2xl:2rem;--text-2xs:.65rem;--text-xs:.75rem;--leading-body:1.75;--leading-tight:1.3;--space-quarter:.25rem;--space-half:.5rem;--space-xs:.5rem;--space-sm:1rem;--space-1-5:1.5rem;--space-md:2rem;--space-2-5:2.5rem;--space-lg:4rem;--space-xl:6rem;--radius-sm:4px;--radius-sm-2:6px;--radius-md:8px;--radius-lg:12px;--radius-xl:16px;--radius-pill:999px;--max-width:38rem;--max-width-wide:70rem;--page-padding:1.5rem}:root,[data-theme],[data-theme=dark]{--color-brand:#5f92bd;--color-brand-strong:#7aa6cb;--color-text-primary:#e4e8ee;--color-text-secondary:#aab2bf;--color-text-muted:#8a93a1;--color-text-disabled:#5e6674;--color-text-accent:#7aa6cb;--color-text-interactive:#7aa6cb;--color-text-interactive-hover:#9cc0dd;--color-text-success:#79ab9a;--color-text-warning:#cbab68;--color-text-error:#cf7f7a;--color-text-on-accent:#0a0f14;--color-on-danger:#160a0a;--color-surface:color-mix(in srgb, #0c0e11 96%, var(--color-brand) 4%);--color-surface-raised:color-mix(in srgb, #13161b 94%, var(--color-brand) 6%);--color-surface-elevated:color-mix(in srgb, #1a1e25 91%, var(--color-brand) 9%);--color-surface-glass:color-mix(in srgb, var(--color-surface-elevated) 84%, transparent);--color-surface-overlay:color-mix(in srgb, var(--color-surface-raised) 95%, transparent);--color-accent:var(--color-text-accent);--color-accent-soft:var(--color-text-interactive);--color-accent-hover:var(--color-text-interactive-hover);--color-rule:color-mix(in srgb, var(--color-brand) 10%, transparent);--color-rule-strong:color-mix(in srgb, var(--color-brand) 18%, transparent);--color-overlay-soft:color-mix(in srgb, var(--color-brand) 6%, transparent);--color-overlay-strong:color-mix(in srgb, var(--color-brand) 12%, transparent);--color-shadow:color-mix(in srgb, var(--color-brand) 10%, transparent);--color-focus-ring:var(--color-brand-strong);--color-selection:color-mix(in srgb, var(--color-brand) 24%, transparent);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;scroll-behavior:smooth;font-size:100%}::selection{background:var(--color-selection);color:var(--color-text-primary)}body{font-family:var(--font-body);font-size:var(--text-base);line-height:var(--leading-body);color:var(--color-text-primary);background-color:var(--color-surface);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;min-height:100vh}:focus-visible{outline:2px solid var(--color-focus-ring);outline-offset:3px}a{color:var(--color-text-interactive);text-decoration:none;transition:color .15s}a:hover{color:var(--color-text-interactive-hover)}h1,h2,h3,h4{font-family:var(--font-body);line-height:var(--leading-tight);color:var(--color-text-primary);letter-spacing:-.02em}h1{font-size:var(--text-2xl);margin-bottom:var(--space-sm);font-weight:700}h2{font-size:var(--text-xl);margin-top:var(--space-lg);margin-bottom:var(--space-sm);font-weight:600}h3{font-size:var(--text-lg);margin-top:var(--space-md);margin-bottom:var(--space-xs);font-weight:600}hr{border:none;border-top:1px solid var(--color-rule);margin:var(--space-lg) 0}.page{max-width:var(--max-width);padding:0 var(--page-padding);flex-direction:column;min-height:100vh;margin:0 auto;display:flex}.page--wide{max-width:var(--max-width-wide)}.body--immersive{overscroll-behavior:none;overflow:hidden}.page--immersive{width:100%;max-width:none;height:100dvh;min-height:0;padding:0;overflow:hidden}.page>main{padding-top:var(--space-md);padding-bottom:var(--space-lg);flex-direction:column;flex:1;display:flex}.page--immersive>main{min-height:0;padding:0;overflow:hidden}.skip-link{z-index:100;background:var(--color-surface-raised,#13161b);color:var(--color-text-primary,#e4e8ee);font-family:var(--font-mono);font-size:var(--text-sm);border-radius:6px;padding:.5rem 1rem;text-decoration:none;position:absolute;top:1rem;left:-9999px}.skip-link:focus{outline:2px solid var(--color-focus-ring,#5f92bd);outline-offset:3px;left:1rem}.sr-only{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.site-footer{padding:var(--space-md) 0;text-align:center;color:var(--color-text-muted)}.site-footer__nav{margin-bottom:var(--space-xs);font-family:var(--font-mono);flex-wrap:wrap;justify-content:center;gap:.5rem 1.1rem;font-size:.8rem;display:flex}.site-footer__nav a{color:var(--color-text-muted);text-decoration:none;transition:color .15s}.site-footer__nav a:hover,.site-footer__nav a:focus-visible{color:var(--color-text-interactive-hover)}.site-footer__colophon{font-family:var(--font-mono);color:var(--color-text-muted);font-size:.8rem}@media (width<=640px){:root{--text-base:1rem;--text-lg:1.125rem;--text-xl:1.35rem;--text-2xl:1.65rem;--page-padding:1.25rem}.page>main{padding-top:var(--space-sm);padding-bottom:var(--space-md)}.home{padding:var(--space-md) 0}.intro{padding:var(--space-md) 0;text-align:center;flex-direction:column;align-items:center;display:flex}.intro-image{float:none;margin:0 auto var(--space-md) auto;width:120px;height:120px;display:block}.intro p{margin:0 auto}.post-item__link,.project-item__link{flex-direction:column;align-items:flex-start;gap:.2rem}.post-item__meta,.project-item__meta{text-align:left;white-space:normal}.project-item{flex-direction:column;align-items:flex-start;gap:.2rem}.project-item__meta{text-align:left;justify-content:flex-start}.guestbook__meta{flex-wrap:wrap}hr{margin:var(--space-md) 0}}@media (width<=480px){:root{--text-base:.9375rem;--text-lg:1.05rem;--text-xl:1.2rem;--text-2xl:1.45rem;--page-padding:1rem;--space-md:1.5rem;--space-lg:2.5rem}.post-item__link,.project-item__link{padding-left:.35rem;padding-right:.35rem}.post-item__title,.project-item__title{word-break:break-word}.project-item__title{flex-wrap:wrap;gap:.35rem}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.page-preview{--preview-gap:10px;--preview-tether-x:1.25rem;--preview-enter-y:-4px;z-index:1000;inline-size:min(23rem, calc(100vw - 2 * var(--page-padding)));color:var(--color-text-primary);opacity:0;translate:var(--preview-x,0px) var(--preview-y,0px);pointer-events:none;transition:opacity .11s cubic-bezier(.3, 0, .35, 1), display .2s allow-discrete, overlay .2s allow-discrete;background:0 0;border:0;margin:0;padding:0;position:fixed;inset:0 auto auto 0;overflow:visible}.page-preview[hidden]{display:none}.page-preview:popover-open{opacity:1}@starting-style{.page-preview:popover-open{opacity:0}}.page-preview--glide{transition:opacity .11s cubic-bezier(.3, 0, .35, 1), translate .26s cubic-bezier(.2, .72, .25, 1), display .2s allow-discrete, overlay .2s allow-discrete}.page-preview:before{content:"";inline-size:1px;block-size:var(--preview-gap);background:linear-gradient(to bottom, transparent, var(--color-rule-strong));transform-origin:top;transition:transform .15s cubic-bezier(.2,.72,.25,1);position:absolute;inset-block-start:calc(-1 * var(--preview-gap));inset-inline-start:var(--preview-tether-x);transform:scaleY(0)}.page-preview:popover-open:before{transition-delay:70ms;transform:scaleY(1)}.page-preview[data-placement=above]{--preview-enter-y:4px}.page-preview[data-placement=above]:before{background:linear-gradient(to top, transparent, var(--color-rule-strong));transform-origin:bottom;inset-block-start:auto;inset-block-end:calc(-1 * var(--preview-gap))}.page-preview__frame{box-sizing:content-box;block-size:var(--preview-block-size,auto);border:1px solid var(--color-rule-strong);border-radius:var(--radius-lg);background:color-mix(in srgb, var(--color-surface) 92%, transparent);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);box-shadow:inset 0 1px 0 var(--color-overlay-strong), 0 1.25rem 2.5rem -1.25rem color-mix(in srgb, #000 62%, var(--color-brand) 10%);transform:translateY(var(--preview-enter-y));transition:transform .18s cubic-bezier(.2,.72,.25,1);overflow:clip}.page-preview:popover-open .page-preview__frame{transform:none}.page-preview--glide .page-preview__frame{transition:transform .18s cubic-bezier(.2,.72,.25,1),block-size .24s cubic-bezier(.2,.72,.25,1)}.page-preview__sheet{gap:.55rem;padding:.8rem .95rem .7rem;display:grid}.page-preview--settling .page-preview__sheet{animation:.2s cubic-bezier(.2,.72,.25,1) both page-preview-settle}@keyframes page-preview-settle{0%{opacity:.3;transform:translateY(3px)}to{opacity:1;transform:none}}.page-preview__kicker{min-inline-size:0;color:var(--color-text-muted);font:500 var(--text-2xs) / 1 var(--font-mono);letter-spacing:.08em;text-transform:lowercase;align-items:center;gap:.5rem;margin:0;display:flex}.page-preview__path{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.page-preview__kicker:after{content:"";background:linear-gradient(to right, var(--color-rule-strong), transparent);flex:auto;block-size:1px}.page-preview__body{gap:.4rem;display:grid}.page-preview__title{color:var(--color-text-primary);font-family:var(--font-body);letter-spacing:-.025em;text-wrap:pretty;-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:0;font-size:clamp(1.05rem,2vw,1.18rem);font-weight:600;line-height:1.35;display:-webkit-box;overflow:hidden}.page-preview__excerpt{color:var(--color-text-secondary);font-family:var(--font-body);font-size:var(--text-sm);text-wrap:pretty;-webkit-line-clamp:3;-webkit-box-orient:vertical;margin:0;line-height:1.55;display:-webkit-box;overflow:hidden}.page-preview__excerpt[hidden]{display:none}.page-preview__meta{border-block-start:1px solid var(--color-rule);color:var(--color-text-muted);font:500 .7rem / 1.4 var(--font-mono);letter-spacing:.02em;text-overflow:ellipsis;text-transform:lowercase;white-space:nowrap;margin:0;padding-block-start:.55rem;overflow:hidden}.page-preview__skeleton{gap:.45rem;padding-block:.1rem .15rem;display:grid}.page-preview__bar{border-radius:var(--radius-sm);background:var(--color-overlay-strong);block-size:.6rem;animation:1.9s ease-in-out infinite page-preview-breathe}.page-preview__bar--title{background:color-mix(in srgb, var(--color-brand) 20%, transparent);block-size:.85rem;inline-size:58%}.page-preview__bar:nth-child(2){animation-delay:.12s}.page-preview__bar:nth-child(3){inline-size:76%;animation-delay:.24s}@keyframes page-preview-breathe{0%,to{opacity:.45}50%{opacity:.9}}.page-preview:not([data-state=loading]) .page-preview__skeleton,.page-preview[data-state=loading] .page-preview__body,.page-preview:not([data-state=ready]) .page-preview__meta{display:none}.page-preview[data-state=empty] .page-preview__title{color:var(--color-text-muted);font-size:var(--text-sm);letter-spacing:0;font-weight:500}.page-preview-link{text-decoration:underline;-webkit-text-decoration-color:color-mix(in srgb, var(--color-accent) 45%, transparent);text-decoration-color:color-mix(in srgb, var(--color-accent) 45%, transparent);text-underline-offset:.22em;text-decoration-thickness:1px}@media (width<=720px),(hover:none),(pointer:coarse){.page-preview{display:none}}.particle-field{z-index:-1;pointer-events:none;contain:layout paint style;position:fixed;inset:0}.particle-field__canvas{opacity:0;width:100%;height:100%;transition:opacity .9s;display:block}.particle-field[data-state=live] .particle-field__canvas,.particle-field[data-state=still] .particle-field__canvas{opacity:1}.particle-field__tone{display:none}.particle-field__tone[data-tone=far]{color:color-mix(in srgb, var(--color-text-muted) 74%, var(--color-brand))}.particle-field__tone[data-tone=near]{color:var(--color-brand-strong)}@media (forced-colors:active){.particle-field{display:none}}.site-nav{width:min(100%,44rem);padding:var(--space-md) 0 var(--space-sm);border-bottom:1px solid var(--color-rule);align-items:center;gap:1rem;margin:0 auto;display:flex}.site-nav__wordmark{font-family:var(--font-body);letter-spacing:.02em;color:var(--color-brand);text-transform:lowercase;font-size:2.25rem;font-weight:700;line-height:1;text-decoration:none}@media (width<=640px){.site-nav__wordmark{font-size:1.9rem}}@media (width<=480px){.site-nav__wordmark{font-size:1.6rem}}.note-search__trigger{border-radius:var(--radius-sm);width:2rem;height:2rem;color:var(--color-text-muted);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;margin-left:auto;padding:0;display:inline-flex}.note-search__trigger:focus-visible{outline:none}.note-search__trigger svg{fill:none;stroke:currentColor;stroke-width:1.35px;stroke-linecap:round;stroke-linejoin:round;width:1.4rem;height:1.4rem}@media (width<=480px){.note-search__trigger :is(span,kbd){display:none}}.note-search__layer{z-index:50;padding:clamp(1rem, 8vh, 4rem) var(--page-padding);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:#000000b8;justify-content:center;align-items:flex-start;animation:.22s cubic-bezier(.22,1,.36,1) both note-search-fade-in;display:flex;position:fixed;inset:0}.note-search__layer.is-closing{animation:.18s cubic-bezier(.4,0,1,1) both note-search-fade-out}.note-search__panel{border:1px solid var(--color-rule-strong);border-radius:var(--radius-lg);transform-origin:top;background:#06070a;flex-direction:column;width:min(38rem,100%);max-height:min(72vh,36rem);animation:.26s cubic-bezier(.22,1,.36,1) both note-search-in;display:flex;overflow:hidden}.note-search__panel.is-closing{animation:.18s cubic-bezier(.4,0,1,1) both note-search-out}@keyframes note-search-fade-in{0%{opacity:0}to{opacity:1}}@keyframes note-search-fade-out{0%{opacity:1}to{opacity:0}}@keyframes note-search-in{0%{opacity:0;transform:translateY(-8px)scale(.99)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes note-search-out{0%{opacity:1;transform:translateY(0)scale(1)}to{opacity:0;transform:translateY(-6px)scale(.99)}}.note-search__field{border-bottom:1px solid var(--color-rule-strong);color:var(--color-text-muted);grid-template-columns:auto minmax(0,1fr);align-items:center;gap:.75rem;padding:.85rem 1.1rem;transition:border-color .22s cubic-bezier(.22,1,.36,1);display:grid}.note-search__field:focus-within{border-bottom-color:var(--color-brand)}.note-search__field svg{fill:none;stroke:currentColor;stroke-width:1.35px;stroke-linecap:round;stroke-linejoin:round;width:1.4rem;height:1.4rem;transition:stroke .22s cubic-bezier(.22,1,.36,1)}.note-search__field:focus-within svg{color:var(--color-brand-strong)}.note-search__field input{min-width:0;color:var(--color-text-primary);font:var(--text-base) var(--font-mono);caret-color:var(--color-brand-strong);background:0 0;border:0;outline:0}.note-search__field input::placeholder{color:var(--color-text-muted);opacity:1}.note-search__results{margin:0;padding:.35rem;list-style:none;overflow:auto}.note-search__result{border-radius:var(--radius-md);border-top:1px solid var(--color-rule);color:inherit;cursor:pointer;grid-template-columns:minmax(0,1fr) auto;align-items:baseline;gap:.6rem 1rem;padding:.75rem .65rem;text-decoration:none;transition:background .18s cubic-bezier(.22,1,.36,1),color .18s cubic-bezier(.22,1,.36,1);display:grid}.note-search__result:first-child{border-top:0}.note-search__result:hover,.note-search__result.is-active{background:var(--color-overlay-soft)}.note-search__result.is-active{color:var(--color-text-primary)}.note-search__result-title{font-family:var(--font-mono);font-size:var(--text-sm);text-overflow:ellipsis;white-space:nowrap;grid-column:1;overflow:hidden}.note-search__result-arrow{color:var(--color-text-muted);font-family:var(--font-mono);opacity:0;grid-area:1/2;transition:opacity .18s cubic-bezier(.22,1,.36,1),transform .18s cubic-bezier(.22,1,.36,1);transform:translate(-4px)}.note-search__result:hover .note-search__result-arrow,.note-search__result.is-active .note-search__result-arrow{opacity:1;transform:translate(0)}
