@charset "UTF-8";html{scroll-behavior:smooth}.ide-wrap{--ide-bg: hsl(42, 30%, 97%);--ide-chrome: hsl(42, 14%, 91%);--ide-border: hsl(42, 10%, 80%);--ide-text: hsl(0, 0%, 12%);--ide-dim: hsl(0, 0%, 42%);--ide-faint: hsl(42, 8%, 88%);--syn-green: hsl(150, 60%, 26%);--syn-cyan: hsl(195, 85%, 26%);--syn-amber: hsl(30, 95%, 33%);--syn-red: hsl(349, 85%, 38%);max-width:1200px;margin:0 auto;padding:0 24px 56px}[color-mode=dark] .ide-wrap{--ide-bg: hsl(224, 16%, 11%);--ide-chrome: hsl(224, 14%, 15%);--ide-border: hsl(224, 10%, 24%);--ide-text: hsl(220, 14%, 88%);--ide-dim: hsl(222, 9%, 60%);--ide-faint: hsl(224, 12%, 17%);--syn-green: hsl(150, 50%, 58%);--syn-cyan: hsl(192, 65%, 62%);--syn-amber: hsl(38, 90%, 62%);--syn-red: hsl(350, 85%, 64%)}.t-green{color:var(--syn-green)}.t-red{color:var(--syn-red)}.t-amber{color:var(--syn-amber)}.t-comment{color:var(--ide-dim);font-style:italic}.j-key,.y-key{color:var(--syn-cyan)}.j-str{color:var(--syn-green)}.j-val{color:var(--syn-amber)}.j-punc{color:var(--ide-dim)}.page-grain{position:fixed;inset:0;z-index:9999;pointer-events:none;opacity:.035;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");background-repeat:repeat;background-size:180px}.ide{position:relative;background:var(--ide-bg);color:var(--ide-text);border:1px solid var(--ide-border);border-radius:14px;box-shadow:0 40px 80px -32px #00000059,0 0 0 1px #ffffff05 inset;overflow:clip}[color-mode=dark] .ide{box-shadow:0 40px 80px -32px #000000b3,0 0 90px -40px #ca02274d}.ide__chrome{position:sticky;top:0;z-index:40;display:flex;align-items:stretch;gap:8px;background:var(--ide-chrome);border-bottom:1px solid var(--ide-border);padding:0 14px}.ide__dots{display:flex;align-items:center;gap:7px;padding-right:8px}.ide__dot{width:11px;height:11px;border-radius:50%}.ide__dot--r{background:#ec5651}.ide__dot--y{background:#f6bb31}.ide__dot--g{background:#39c668}.ide__tabs{display:flex;align-items:stretch;overflow-x:auto;scrollbar-width:none}.ide__tabs::-webkit-scrollbar{display:none}.ide .tab{display:inline-flex;align-items:center;gap:7px;padding:13px 16px;font-family:JetBrains Mono,monospace;font-size:12.5px;white-space:nowrap;color:var(--ide-dim);text-decoration:none;border-right:1px solid var(--ide-border);border-top:2px solid transparent;transition:color .2s,background .2s}.ide .tab:first-of-type{border-left:1px solid var(--ide-border)}.ide .tab:hover{color:var(--ide-text);background:var(--ide-faint)}.ide .tab.is-active{color:var(--ide-text);background:var(--ide-bg);border-top-color:var(--syn-red)}.tab__icon{font-size:10px;opacity:.55}.ide__body{padding:0 clamp(20px,5vw,64px)}.ide .sec{padding:56px 0;scroll-margin-top:64px}.ide .sec+.sec{border-top:1px dashed var(--ide-border)}.ide .sec[data-file]:before{content:"▸ " attr(data-file);display:inline-block;transform:translateY(-56px);margin-bottom:-1.4em;font-family:JetBrains Mono,monospace;font-size:11px;letter-spacing:.06em;color:var(--ide-dim);background:var(--ide-bg);padding:2px 10px 2px 0;position:relative;top:.7em}.sec__head{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:28px}.ide .cmd{font-family:JetBrains Mono,monospace;font-size:13px;color:var(--ide-dim);letter-spacing:.02em;margin:0 0 6px}.ide .sec__title{font-family:Sora,IBM Plex Sans,sans-serif;font-weight:700;font-size:clamp(28px,4vw,40px);letter-spacing:-.02em;line-height:1.1;margin:0;text-shadow:none}.ide .sec__title:before{content:"## ";color:var(--syn-red);font-weight:600;opacity:.85}.ide .sec__link{font-family:JetBrains Mono,monospace;font-size:13.5px;color:var(--ide-dim);text-decoration:none;border-bottom:1px solid var(--ide-border);padding-bottom:2px;white-space:nowrap;transition:color .2s,border-color .2s}.ide .sec__link:hover{color:var(--ide-text);border-bottom-color:var(--ide-text)}.ide .sec__sub{color:var(--ide-dim);font-size:var(--caption);margin:-12px 0 24px}.ide .sec__foot{font-family:JetBrains Mono,monospace;font-size:13px;color:var(--ide-dim);margin:28px 0 0}.ide .sec__foot a{color:var(--ide-text);text-decoration:none;border-bottom:1px solid var(--ide-border);padding-bottom:1px;transition:border-color .2s}.ide .sec__foot a:hover{border-bottom-color:var(--syn-red)}.ide .reveal{opacity:0;animation:rise .7s cubic-bezier(.22,1,.36,1) forwards;animation-delay:calc(var(--r, 0) * .12s)}@keyframes rise{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}@keyframes blink{50%{opacity:0}}.gitlog{list-style:none;margin:0;padding:0}.commit{display:grid;grid-template-columns:28px 1fr;margin:0}.commit__graph{position:relative}.commit__graph:before{content:"";position:absolute;left:5px;top:0;bottom:0;width:2px;background:var(--ide-border)}.commit:first-child .commit__graph:before{top:26px}.commit:last-child .commit__graph:before{bottom:calc(100% - 26px)}.commit__node{position:absolute;top:20px;left:0;width:12px;height:12px;border-radius:50%;background:var(--ide-bg);border:2.5px solid var(--syn-cyan)}.commit--head .commit__node{border-color:var(--syn-red);box-shadow:0 0 0 4px color-mix(in srgb,var(--syn-red) 18%,transparent)}.commit__card{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:20px;align-items:center;text-decoration:none;color:inherit;padding:14px 16px;margin:2px 0;border-radius:10px;border:1px solid transparent;transition:background .2s,border-color .2s,transform .3s cubic-bezier(.22,1,.36,1)}.commit__card:hover{background:var(--ide-faint);border-color:var(--ide-border);transform:translate(4px)}.commit--head .commit__card{background:var(--ide-faint);border-color:var(--ide-border)}.commit--head .commit__card:hover{border-color:var(--syn-red)}.commit__line1{margin:0 0 6px;line-height:1.45}.commit__hash{font-family:JetBrains Mono,monospace;font-size:13px;color:var(--syn-amber);background:none;padding:0;margin-right:8px}.commit__ref{font-family:JetBrains Mono,monospace;font-size:12.5px;color:var(--syn-red);margin-right:8px}.commit__title{font-family:Sora,IBM Plex Sans,sans-serif;font-weight:600;font-size:clamp(16px,2.2vw,19px)}.commit__meta{display:flex;flex-wrap:wrap;gap:6px 14px;margin:0;font-family:JetBrains Mono,monospace;font-size:11.5px;text-transform:uppercase;letter-spacing:.03em;color:var(--ide-dim)}.commit__tag{color:var(--syn-cyan);text-transform:none}.commit__desc{margin:8px 0 0;font-size:var(--caption);color:var(--ide-dim);line-height:1.55;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.commit__thumb{width:140px;border-radius:8px;overflow:hidden;border:1px solid var(--ide-border)}.commit__thumb img{display:block;width:100%;height:auto;aspect-ratio:5/3;object-fit:cover;transition:transform .4s cubic-bezier(.22,1,.36,1)}.commit--head .commit__thumb{width:200px}.commit__card:hover .commit__thumb img{transform:scale(1.05)}.ide .oneline{list-style:none;margin:0;padding:0}.ide .oneline__row{display:flex;align-items:baseline;gap:14px;padding:13px 16px;margin:0 -16px;border-radius:8px;text-decoration:none;color:inherit;transition:background .15s}.ide .oneline__row:hover{background:var(--ide-faint)}.ide .oneline__row:hover .oneline__title{color:var(--syn-cyan)}.ide .oneline__hash{font-family:JetBrains Mono,monospace;font-size:13px;color:var(--syn-amber);background:none;padding:0;flex-shrink:0}.ide .oneline__title{flex:1;min-width:0;font-family:Sora,IBM Plex Sans,sans-serif;font-weight:600;font-size:16px;line-height:1.45;transition:color .15s}.ide .oneline__meta{display:flex;gap:14px;flex-shrink:0;font-family:JetBrains Mono,monospace;font-size:11.5px;text-transform:uppercase;letter-spacing:.03em;color:var(--ide-dim);white-space:nowrap}.post-vars{--element1: var(--ide-text);--element2: color-mix(in srgb, var(--ide-text) 82%, var(--ide-dim));--element3: var(--ide-dim);--element4: var(--ide-border);--surface2: var(--ide-faint);--primary-color: var(--syn-red)}.ide .post{padding-top:40px}.ide .post__crumb{display:flex;align-items:baseline;gap:20px;flex-wrap:wrap;font-family:JetBrains Mono,monospace;font-size:13px;color:var(--ide-dim);margin:0 0 32px}.ide .post__crumb b{color:var(--ide-text);font-weight:500}.ide .post__back{color:var(--ide-dim);text-decoration:none;border-bottom:1px solid var(--ide-border);padding-bottom:2px;transition:color .2s,border-color .2s}.ide .post__back:hover{color:var(--ide-text);border-bottom-color:var(--ide-text)}.ide .post__meta{display:flex;align-items:baseline;gap:16px;flex-wrap:wrap;font-family:JetBrains Mono,monospace;font-size:12px;letter-spacing:.05em;text-transform:uppercase;color:var(--ide-dim);margin:0 0 16px}.ide .post__title{font-family:Sora,IBM Plex Sans,sans-serif;font-size:clamp(1.75rem,5vw,3rem);font-weight:800;color:var(--ide-text);line-height:1.15;letter-spacing:-.03em;margin:0 0 1rem;max-width:880px;text-shadow:none}.ide .post__title:before{content:"# ";color:var(--syn-red);font-weight:700}.ide .post__desc{font-size:1.05rem;color:var(--ide-dim);line-height:1.65;max-width:780px;margin:0 0 1.25rem}.ide .post__tags{font-family:JetBrains Mono,monospace;font-size:13px;margin:0 0 2.5rem}.ide .post__tag{color:var(--syn-cyan);text-decoration:none;border-bottom:1px solid transparent;transition:border-color .2s}.ide .post__tag:hover{border-bottom-color:var(--syn-cyan)}.ide .post__hero{margin-bottom:3rem;border-radius:12px;overflow:hidden;border:1px solid var(--ide-border)}.ide .post__hero-img{display:block;width:100%;height:auto;object-fit:cover}.ide .article-content{border-top:1px dashed var(--ide-border);padding-top:2.5rem;max-width:780px;font-size:1.0625rem;line-height:1.8;color:var(--element2)}.ide .article-content h1,.ide .article-content h2,.ide .article-content h3,.ide .article-content h4{font-family:Sora,sans-serif;font-weight:700;color:var(--element1);letter-spacing:-.02em;margin-top:2.25em;margin-bottom:.75em;text-shadow:none}.ide .article-content h2{font-size:1.6rem;padding-top:1.5rem;border-top:1px solid var(--element4)}.ide .article-content h3{font-size:1.25rem}.ide .article-content p{margin-bottom:1.5em}.ide .article-content a{font-family:inherit;color:var(--primary-color);text-decoration:none;border-bottom:1px solid color-mix(in srgb,var(--primary-color) 40%,transparent);transition:border-color .2s}.ide .article-content a:hover{border-bottom-color:var(--primary-color)}.ide .article-content blockquote{border-left:3px solid var(--primary-color);margin:2em 0;padding:.75em 1.5em;background:var(--surface2);border-radius:0 8px 8px 0;color:var(--element2);font-style:italic}.ide .article-content pre{border-radius:8px;border:1px solid var(--element4);font-family:JetBrains Mono,monospace;font-size:.875rem;overflow-x:auto;margin:1.75em 0;padding:1.25em 1.5em}.ide .article-content pre code{font-family:inherit;font-size:inherit;background:none!important;border:none!important;padding:0!important;border-radius:0;color:inherit}.ide .article-content code:not(pre code){font-family:JetBrains Mono,monospace;font-size:.875em;background:var(--surface2);border:1px solid var(--element4);padding:.15em .4em;border-radius:4px;color:var(--element1)}.ide .article-content strong{color:var(--element1);font-weight:700}.ide .article-content ul,.ide .article-content ol{padding-left:1.5em;margin-bottom:1.5em}.ide .article-content li{margin-bottom:.4em}.ide .article-content hr{border:none;border-top:1px dashed var(--element4);margin:2.5em 0}.ide .article-content img{border-radius:8px;border:1px solid var(--element4);max-width:100%;height:auto;margin:1.5em 0}.ide .sig__card{display:flex;align-items:center;justify-content:space-between;gap:2rem;padding:28px 32px;border-radius:12px;background:var(--ide-faint);border:1px solid var(--ide-border);flex-wrap:wrap}.ide .sig__thanks{font-family:Sora,sans-serif;font-size:1.15rem;font-weight:700;color:var(--ide-text);margin:0 0 .4rem;letter-spacing:-.01em}.ide .sig__bio{font-size:.9rem;color:var(--ide-dim);margin:0;line-height:1.55;max-width:440px}.ide .sig__cta{font-family:JetBrains Mono,monospace;font-size:.8rem;letter-spacing:.04em;color:var(--ide-text);text-decoration:none;border:1px solid var(--ide-border);padding:.6em 1.1em;border-radius:6px;background:transparent;white-space:nowrap;transition:background .2s,border-color .2s,color .2s;flex-shrink:0}.ide .sig__cta:hover{background:var(--ide-text);color:var(--ide-bg);border-color:var(--ide-text)}.ide .ls{font-family:JetBrains Mono,monospace;font-size:14px;border:1px solid var(--ide-border);border-radius:10px;overflow:hidden}.ide .ls__total{margin:0;padding:10px 18px;font-size:12px;color:var(--ide-dim);background:var(--ide-faint);border-bottom:1px solid var(--ide-border)}.ide .ls__row{display:grid;grid-template-columns:110px 60px 90px 1fr auto;gap:18px;align-items:center;padding:12px 18px;text-decoration:none;color:var(--ide-dim);transition:background .15s,color .15s}.ide .ls__row+.ls__row{border-top:1px solid var(--ide-border)}.ide .ls__row:hover{background:var(--ide-faint);color:var(--ide-text)}.ide .ls__row:hover .ls__arrow{opacity:1;transform:translate(0)}.ide .ls__row:hover .ls__name{color:var(--syn-cyan)}.ide .ls__perm{color:var(--syn-amber);opacity:.85}.ide .ls__owner,.ide .ls__count{opacity:.8}.ide .ls__name{color:var(--ide-text);font-weight:700;transition:color .15s}.ide .ls__arrow{opacity:0;transform:translate(-6px);transition:opacity .2s,transform .25s}.ide__status{display:flex;align-items:center;gap:20px;padding:8px 18px;font-family:JetBrains Mono,monospace;font-size:11.5px;color:var(--ide-dim);background:var(--ide-chrome);border-top:1px solid var(--ide-border)}.ide__status-spacer{flex:1}@media(prefers-reduced-motion:reduce){.ide .reveal{animation:none;opacity:1}}@media(max-width:860px){.commit--head .commit__thumb{width:140px}}@media(max-width:768px){.ide-wrap{padding:0 0 40px}.ide,[color-mode=dark] .ide{border-inline:none;border-radius:0;box-shadow:none}.ide__dots{display:none}.ide__chrome{padding:0 10px}.ide__body{padding:0 18px}.ide .oneline__row{flex-wrap:wrap;gap:6px 12px;padding:12px 16px}.ide .oneline__title{flex-basis:100%;order:-1}.ide .sec{padding:40px 0}.ide .sec[data-file]:before{transform:translateY(-40px)}.commit__card{grid-template-columns:1fr;gap:12px}.commit__thumb,.commit--head .commit__thumb{width:100%;max-width:300px}.ide__status{gap:12px;flex-wrap:wrap}.ide .post{padding-top:28px}.ide .post__crumb{gap:12px}.ide .sig__card{flex-direction:column;align-items:flex-start;gap:1.25rem}.ide .ls__row{grid-template-columns:1fr auto;gap:10px}.ide .ls__perm,.ide .ls__owner,.ide .ls__count{display:none}}@media(max-width:480px){.commit{grid-template-columns:20px 1fr}}
