html{scroll-behavior:smooth}.blog-list a{color:var(--text);text-decoration:underline}.nav-bar{display:flex;justify-content:space-between;align-items:center}.nav-brand{font-weight:700}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.spin{animation:spin .5s ease-in-out}@keyframes rainbow{0%{color:red}17%{color:#ff8000}33%{color:#ff0}50%{color:#0f0}67%{color:#0080ff}83%{color:#8000ff}to{color:red}}@keyframes wave{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}.rainbow{animation:rainbow 20s linear infinite;display:inline-block;cursor:default}.rainbow span{display:inline-block}.rainbow span.space{width:.25em}.rainbow:hover span{animation:wave 1.2s ease-in-out infinite}.rainbow:hover span:nth-child(2){animation-delay:.05s}.rainbow:hover span:nth-child(3){animation-delay:.1s}.rainbow:hover span:nth-child(4){animation-delay:.15s}.rainbow:hover span:nth-child(5){animation-delay:.2s}.rainbow:hover span:nth-child(6){animation-delay:.25s}.rainbow:hover span:nth-child(7){animation-delay:.3s}.rainbow:hover span:nth-child(8){animation-delay:.35s}.rainbow:hover span:nth-child(9){animation-delay:.4s}.rainbow:hover span:nth-child(10){animation-delay:.45s}.rainbow:hover span:nth-child(11){animation-delay:.5s}.rainbow:hover span:nth-child(12){animation-delay:.55s}.bio,.status{margin:1em 0}.status div{margin:.25em 0}.socials{display:flex;align-items:center;gap:1rem}.socials a,.socials button{display:flex;align-items:center;color:var(--text);opacity:.7;transition:opacity .2s,transform .2s;background:none;border:none;padding:0;cursor:pointer}.socials a:hover,.socials button:hover{opacity:1;transform:translateY(-2px)}.socials a,.socials button{position:relative}.social-popover{position:absolute;bottom:100%;left:50%;transform:translate(-50%);margin-bottom:.5rem;padding:.25rem .5rem;background:var(--code-bg);border-radius:4px;font-size:.8rem;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .2s}.socials a:hover .social-popover,.socials button:hover .social-popover,.social-popover.show{opacity:1}.github-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:1rem;margin:1.5rem 0}.github-card{display:block;padding:1rem;border:1px solid var(--code-bg);border-radius:.5rem;text-decoration:none;color:var(--text);transition:border-color .2s,box-shadow .2s}.github-card:hover{border-color:var(--link);box-shadow:0 2px 8px #0000001a}.github-card-header{display:flex;align-items:center;gap:.5rem;font-weight:600;color:var(--link)}.github-card-header svg{opacity:.7}.github-card-desc{margin:.75rem 0;font-size:.9em;opacity:.8}.github-card-footer{font-size:.85em}.github-card-lang{display:flex;align-items:center;gap:.4rem}.lang-dot{width:12px;height:12px;border-radius:50%}:root{--bg: #fff;--text: #222;--link: #0066cc;--code-bg: #f5f5f5}[data-theme=dark]{--bg: #1a1a1a;--text: #e0e0e0;--link: #6db3f2;--code-bg: #2d2d2d}body{max-width:clamp(320px,90vw,52rem);margin:clamp(1rem,4vw,2.5rem) auto;padding:0 clamp(1rem,4vw,2rem);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:clamp(1rem,.95rem + .25vw,1.125rem);line-height:1.7;background:var(--bg);color:var(--text)}a{color:var(--link);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px}a:hover{text-decoration-thickness:2px}a:focus-visible{outline:2px solid var(--link);outline-offset:2px}h1,h2,h3,h4{margin-top:1.5em;margin-bottom:.5em;line-height:1.3}h1{font-size:1.8em}h2{font-size:1.4em}h3{font-size:1.2em}p{margin:1em 0}li{margin:.3em 0}pre,code{background:var(--code-bg)}code{padding:.1em .3em;border-radius:.2em;font-size:.85em}pre{padding:1em;border-radius:.3em;margin:1.5em 0;font-size:.85em;line-height:1.5}pre code{padding:0;font-size:inherit}blockquote{border-left:3px solid var(--link);margin:1.5em 0;padding-left:1em;color:var(--text)}hr{border:none;border-top:1px solid var(--code-bg);margin:1.5em 0}.theme-toggle{cursor:pointer;background:none;border:none;font-size:1em;color:var(--text);padding:.25em;border-radius:.25em}.theme-toggle:focus-visible{outline:2px solid var(--link);outline-offset:2px}.toc{position:fixed;left:max(1rem,calc((100vw - 52rem)/2 - 20rem));top:6rem;width:16rem;max-height:calc(100vh - 8rem);overflow-y:auto;font-size:.85em;line-height:1.4}.toc ul{list-style:none;padding:0;margin:0}.toc li{margin:.4em 0}.toc a{color:var(--text);opacity:.6;text-decoration:none;display:block;border-left:2px solid transparent;padding:.2em 0 .2em .75em}.toc a:hover{opacity:1}.toc a.active{opacity:1;border-left-color:var(--link);color:var(--link)}.toc-toggle,.toc-drawer,.toc-backdrop{display:none}@media(max-width:90rem){.toc{display:none}.toc-toggle{display:flex;align-items:center;justify-content:center;position:fixed;bottom:2rem;right:2rem;width:3rem;height:3rem;border-radius:50%;background:var(--bg);border:2px solid var(--code-bg);color:var(--text);cursor:pointer;z-index:100}.toc-backdrop{display:none;position:fixed;inset:0;background:#00000080;z-index:200}.toc-backdrop.open{display:block}.toc-drawer{display:block;position:fixed;bottom:0;left:0;right:0;max-height:60vh;background:var(--bg);border-top:2px solid var(--code-bg);border-radius:1rem 1rem 0 0;padding:1rem;transform:translateY(100%);transition:transform .3s ease;z-index:300;overflow-y:auto}.toc-drawer.open{transform:translateY(0)}.toc-drawer-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem;font-weight:700}.toc-drawer-header button{background:none;border:none;font-size:1.5rem;cursor:pointer;color:var(--text)}.toc-drawer-nav ul{list-style:none;padding:0;margin:0}.toc-drawer-nav li{margin:.5em 0}.toc-drawer-nav a{display:block;color:var(--text);text-decoration:none;padding:.25em .75em;border-left:2px solid transparent}.toc-drawer-nav a.active{color:var(--link);border-left-color:var(--link)}body:has(.toc-toggle) .scroll-top{bottom:6rem}}.scroll-top{position:fixed;bottom:2rem;right:2rem;width:3rem;height:3rem;border-radius:50%;background:var(--bg);border:2px solid var(--code-bg);cursor:pointer;opacity:0;visibility:hidden;transition:opacity .2s,visibility .2s;z-index:100;display:flex;align-items:center;justify-content:center}.scroll-top.visible{opacity:1;visibility:visible}.scroll-top svg{width:1.2rem;height:1.2rem;stroke:var(--text);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.scroll-top .progress{position:absolute;top:-2px;left:-2px;width:calc(100% + 4px);height:calc(100% + 4px);transform:rotate(-90deg)}.scroll-top .progress circle{fill:none;stroke:var(--link);stroke-width:2;stroke-dasharray:157;stroke-dashoffset:157}.code-wrapper{position:relative}.copy-btn{position:absolute;top:.5rem;right:.5rem;padding:.25rem .5rem;font-size:.75rem;background:var(--code-bg);color:var(--text);border:1px solid var(--text);border-radius:.25rem;cursor:pointer;opacity:0;transition:opacity .2s}.code-wrapper:hover .copy-btn{opacity:.7}.copy-btn:hover{opacity:1!important}.post-share{display:flex;gap:.5rem;margin:1rem 0}.post-share a,.post-share button{padding:.4rem .8rem;font-size:.85rem;background:var(--code-bg);color:var(--text);border:1px solid var(--text);border-radius:.25rem;text-decoration:none;cursor:pointer}.post-share a:hover,.post-share button:hover{opacity:.8}.post-nav{display:flex;justify-content:space-between;gap:1rem;margin:1.5rem 0}.post-nav a{max-width:45%}.post-nav-prev{text-align:left}.post-nav-next{text-align:right;margin-left:auto}.heading-anchor{opacity:0;margin-left:.3em;text-decoration:none;color:var(--link)}h1:hover .heading-anchor,h2:hover .heading-anchor,h3:hover .heading-anchor{opacity:.6}.heading-anchor:hover{opacity:1!important}img{max-width:100%}pre,code,pre[class*=language-],code[class*=language-]{font-family:ui-monospace,SF Mono,Menlo,Monaco,Cascadia Code,monospace!important;background:var(--code-bg)!important}:root:not([data-theme=dark]) .token.comment,:root:not([data-theme=dark]) .token.prolog,:root:not([data-theme=dark]) .token.cdata{color:#6a737d}:root:not([data-theme=dark]) .token.punctuation{color:#24292e}:root:not([data-theme=dark]) .token.property,:root:not([data-theme=dark]) .token.tag,:root:not([data-theme=dark]) .token.boolean,:root:not([data-theme=dark]) .token.number,:root:not([data-theme=dark]) .token.constant,:root:not([data-theme=dark]) .token.symbol{color:#005cc5}:root:not([data-theme=dark]) .token.selector,:root:not([data-theme=dark]) .token.attr-name,:root:not([data-theme=dark]) .token.string,:root:not([data-theme=dark]) .token.char,:root:not([data-theme=dark]) .token.builtin{color:#032f62}:root:not([data-theme=dark]) .token.operator,:root:not([data-theme=dark]) .token.entity,:root:not([data-theme=dark]) .token.url,:root:not([data-theme=dark]) .token.variable{color:#d73a49}:root:not([data-theme=dark]) .token.atrule,:root:not([data-theme=dark]) .token.attr-value,:root:not([data-theme=dark]) .token.function{color:#6f42c1}:root:not([data-theme=dark]) .token.keyword{color:#d73a49}:root:not([data-theme=dark]) .token.regex,:root:not([data-theme=dark]) .token.important{color:#e36209}:root:not([data-theme=dark]) code[class*=language-],:root:not([data-theme=dark]) pre[class*=language-]{color:#24292e}pre{overflow-x:auto}pre[class*=language-]{font-size:.85em}pre code,pre[class*=language-] code{font-size:inherit}
