.article-wrapper{max-width:90ch;margin:0 auto}.article-content{color:var(--color-text-secondary);font-size:1rem;line-height:1.8}html.dark .article-content{color:var(--color-text-secondary-dark)}.article-content h1,.article-content h2,.article-content h3,.article-content h4,.article-content h5,.article-content h6{margin-top:1.8em;margin-bottom:1em;scroll-margin-top:6rem;font-weight:700;line-height:1.3;position:relative}.article-content h1{letter-spacing:-.025em;color:var(--color-text-primary);margin-top:0;font-size:2.75rem}html.dark .article-content h1{color:var(--color-text-primary-dark)}.article-content h2{letter-spacing:-.025em;color:var(--color-text-primary);border-bottom:1px dashed rgba(var(--color-primary-rgb), .2);margin-top:2em;padding-bottom:.75rem;font-size:2.25rem}html.dark .article-content h2{color:var(--color-text-primary-dark);border-bottom-color:rgba(var(--color-primary-rgb), .3)}.article-content h3{color:var(--color-text-primary);margin-top:2.5em;font-size:2rem}html.dark .article-content h3{color:var(--color-text-secondary-dark)}.article-content h4{color:var(--color-text-secondary);margin-top:2em;font-size:1.375rem}html.dark .article-content h4{color:var(--color-text-secondary-dark)}.article-content h5{color:var(--color-neutral-500);margin-top:1.75em;font-size:1.125rem}html.dark .article-content h5{color:var(--color-text-tertiary-dark)}.article-content p{overflow-wrap:break-word;word-wrap:break-word;margin:1.75em 0;font-size:1rem;line-height:1.8}.article-content>p:first-of-type{color:var(--color-text-secondary);margin-top:0;font-size:1rem}html.dark .article-content>p:first-of-type{color:var(--color-text-secondary-dark)}.article-content a{color:var(--color-primary);border-bottom:1px dashed var(--color-primary-lighter);word-wrap:break-word;overflow-wrap:break-word;word-break:break-word;hyphens:auto;padding-bottom:1px;font-weight:600;text-decoration:none;transition:all .2s}.article-content a:hover{color:var(--color-primary);border-bottom-color:var(--color-primary);background-color:var(--color-primary-bg-light)}html.dark .article-content a{color:var(--color-primary-light-dark);border-bottom-color:var(--color-primary-lighter)}html.dark .article-content a:hover{color:var(--color-primary-light-dark);border-bottom-color:var(--color-primary);background-color:var(--color-primary-bg)}.article-content ul,.article-content ol{margin:2em 0;padding-left:2em}.article-content li{margin:.75em 0;padding-left:.5em;line-height:1.75}.article-content ul{list-style-type:disc}.article-content ol{list-style-type:decimal}.article-content li::marker{color:var(--color-primary);font-weight:600}html.dark .article-content li::marker{color:var(--color-primary)}.article-content ul ul,.article-content ol ol,.article-content ul ol,.article-content ol ul{margin:.75em 0}.article-content blockquote{background:var(--color-primary-bg-light);border-left:5px solid var(--color-primary);color:var(--color-neutral-600);box-shadow:0 1px 3px 0 rgba(var(--color-primary-rgb), .06);border-radius:.75rem;margin:2.5em 0;padding:1.75rem 1.5rem;font-style:italic}html.dark .article-content blockquote{background:var(--color-primary-bg);border-left-color:var(--color-primary);color:var(--color-text-tertiary-dark);box-shadow:0 1px 3px 0 rgba(var(--color-primary-rgb), .25)}.article-content blockquote p{margin:.75em 0}.article-content blockquote p:first-child{margin-top:0;font-size:1rem}.article-content blockquote p:last-child{margin-bottom:0}.article-content :not(pre)>code{background:var(--color-primary-bg-light);border:1px solid var(--color-primary-lighter);color:var(--color-primary);border-radius:.375rem;padding:.25em .5em;font-family:SF Mono,Monaco,Inconsolata,Roboto Mono,Consolas,Courier New,monospace;font-size:.9em;font-weight:600}html.dark .article-content :not(pre)>code{background:var(--color-primary-bg);border-color:rgba(var(--color-primary-rgb), .3);color:var(--color-primary-light-dark)}.article-content pre{background:var(--color-bg-primary-dark);box-shadow:0 4px 6px -1px rgba(var(--color-primary-rgb), .06), 0 2px 4px -2px rgba(var(--color-primary-rgb), .06);border:1px solid var(--color-neutral-700);border-radius:.75rem;margin:2.5em 0;padding:1.75rem;overflow-x:auto}html.dark .article-content pre{background:var(--color-bg-primary-dark);border-color:var(--color-neutral-700)}.article-content pre code{font-size:.9375rem;font-weight:400;line-height:1.7;color:var(--color-text-secondary-dark)!important;background:0 0!important;border:none!important;padding:0!important}.article-content img{max-width:100%;height:auto;box-shadow:0 4px 6px -1px rgba(var(--color-primary-rgb), .06), 0 2px 4px -2px rgba(var(--color-primary-rgb), .06);border:1px solid var(--color-neutral-200);border-radius:.75rem;margin:2.5em auto;transition:transform .2s,box-shadow .2s;display:block}html.dark .article-content img{border-color:var(--color-neutral-700);box-shadow:0 4px 6px -1px rgba(var(--color-primary-rgb), .25), 0 2px 4px -2px rgba(var(--color-primary-rgb), .18)}.article-content img:hover{box-shadow:0 10px 15px -3px rgba(var(--color-primary-rgb), .06), 0 4px 6px -4px rgba(var(--color-primary-rgb), .06);transform:translateY(-2px)}.article-content table{border-collapse:separate;border-spacing:0;width:100%;box-shadow:0 1px 3px 0 rgba(var(--color-primary-rgb), .06);border:1px solid var(--color-neutral-200);border-radius:.75rem;margin:2.5em 0;overflow:hidden}html.dark .article-content table{border-color:var(--color-neutral-700);box-shadow:0 1px 3px 0 rgba(var(--color-primary-rgb), .25)}.article-content thead{background:var(--color-neutral-100)}html.dark .article-content thead{background:var(--color-bg-secondary-dark)}.article-content th{text-align:left;color:var(--color-neutral-700);text-transform:uppercase;letter-spacing:.05em;border-bottom:2px solid var(--color-neutral-200);padding:1rem 1.25rem;font-size:.875rem;font-weight:700}html.dark .article-content th{color:var(--color-text-secondary-dark);border-bottom-color:var(--color-neutral-700)}.article-content td{border-bottom:1px solid var(--color-neutral-200);padding:1rem 1.25rem}html.dark .article-content td{border-bottom-color:var(--color-neutral-700)}.article-content tr:last-child td{border-bottom:none}.article-content tbody tr{transition:background-color .2s}.article-content tbody tr:hover{background:var(--color-neutral-100)}html.dark .article-content tbody tr:hover{background:var(--color-bg-secondary-dark)}.article-content hr{background:linear-gradient(to right, transparent, var(--color-neutral-200), transparent);border:none;height:2px;margin:3.5em 0}html.dark .article-content hr{background:linear-gradient(to right, transparent, var(--color-neutral-700), transparent)}.article-content strong{color:var(--color-text-primary);font-weight:700}html.dark .article-content strong{color:var(--color-text-primary-dark)}.article-content em{color:var(--color-text-secondary);font-style:italic}html.dark .article-content em{color:var(--color-text-secondary-dark)}.article-content del{opacity:.7;text-decoration:line-through}.article-content mark{color:#713f12;background:#fef9c3;border-radius:.25rem;padding:.2em .4em}html.dark .article-content mark{color:#fef9c3;background:#713f12}.article-header{text-align:center;border-bottom:1px dashed rgba(var(--color-primary-rgb), .15);margin-bottom:4rem;padding-bottom:1.25rem}html.dark .article-header{border-bottom-color:rgba(var(--color-primary-rgb), .25)}.article-title{letter-spacing:-.025em;color:var(--color-text-primary);margin:2rem 0;font-size:2.5rem;font-weight:600;line-height:1.2}html.dark .article-title{color:var(--color-text-primary-dark)}@media (width>=768px){.article-title{font-size:2.75rem}}.article-tags{flex-wrap:wrap;justify-content:center;gap:.625rem;margin-bottom:1.25rem;display:flex}.article-tag{letter-spacing:.5px;color:var(--color-primary-lighter);background:var(--color-primary-bg);border:1px solid rgba(var(--color-primary-rgb), .2);border-radius:9999px;align-items:center;padding:.35rem 1rem;font-size:.875rem;font-weight:400;transition:all .2s;display:inline-flex}html.dark .article-tag{color:var(--color-primary-light-dark);background:var(--color-primary-bg);border-color:rgba(var(--color-primary-rgb), .35)}.article-tag:hover{background:var(--color-primary-bg-light);border-color:var(--color-primary);box-shadow:0 2px 4px rgba(var(--color-primary-rgb), .2);transform:translateY(-1px)}html.dark .article-tag:hover{background:rgba(var(--color-primary-rgb), .25);box-shadow:0 2px 4px rgba(var(--color-primary-rgb), .3)}.article-meta{color:var(--color-neutral-500);justify-content:center;align-items:center;gap:1rem;margin-top:1.5rem;font-size:.875rem;display:flex}.article-meta-divider{background:var(--color-neutral-300);border-radius:9999px;width:4px;height:4px}html.dark .article-meta-divider{background:var(--color-neutral-600)}@media (width<=768px){.article-content{font-size:1rem}.article-title{font-size:2rem}.article-content h2{font-size:1.625rem}.article-content h3{font-size:1.375rem}.article-content pre{border-radius:0;margin:2em -1rem;padding:1.25rem}.article-content a{word-break:break-all;max-width:100%;display:inline-block}.article-content p,.article-content li,.article-content td{word-break:break-word;overflow-wrap:break-word}}.article-content h1[id],.article-content h2[id],.article-content h3[id],.article-content h4[id],.article-content h5[id],.article-content h6[id]{position:relative}.article-content h1[id]:target,.article-content h2[id]:target,.article-content h3[id]:target,.article-content h4[id]:target,.article-content h5[id]:target,.article-content h6[id]:target{animation:1.5s ease-out highlight-heading}@keyframes highlight-heading{0%{background-color:#fef9c380}to{background-color:#0000}}html.dark .article-content h1[id]:target,html.dark .article-content h2[id]:target,html.dark .article-content h3[id]:target,html.dark .article-content h4[id]:target,html.dark .article-content h5[id]:target,html.dark .article-content h6[id]:target{animation:1.5s ease-out highlight-heading-dark}@keyframes highlight-heading-dark{0%{background-color:#713f124d}to{background-color:#0000}}.article-content pre{position:relative}.copy-code-button{color:#94a3b8;cursor:pointer;opacity:0;background:#1e293b;border:1px solid #334155;border-radius:.375rem;padding:.375rem .75rem;font-size:.75rem;font-weight:500;transition:all .2s;position:absolute;top:.75rem;right:.75rem}.article-content pre:hover .copy-code-button{opacity:1}.copy-code-button:hover{color:#e2e8f0;background:#334155;border-color:#475569}.copy-code-button:active{transform:scale(.95)}.article-content .footnotes{border-top:1px solid var(--color-neutral-200);margin-top:3rem;padding-top:2rem;font-size:.875rem}html.dark .article-content .footnotes{border-top-color:var(--color-neutral-700)}.article-content .footnotes ol{padding-left:1.5rem}.article-content .footnote-ref{vertical-align:super;padding:0 .2em;font-size:.75em}.article-content .callout,.article-content .note,.article-content .warning,.article-content .tip{background:var(--color-neutral-100);border-left:5px solid;border-radius:.75rem;margin:2em 0;padding:1.25rem 1.5rem}html.dark .article-content .callout,html.dark .article-content .note,html.dark .article-content .warning,html.dark .article-content .tip{background:var(--color-bg-secondary-dark)}.article-content .note{border-color:var(--color-primary);background:var(--color-primary-bg)}html.dark .article-content .note{background:var(--color-primary-bg)}.article-content .warning{background:#fefce8;border-color:#eab308}html.dark .article-content .warning{background:#713f124d}.article-content .tip{background:#f0fdf4;border-color:#22c55e}html.dark .article-content .tip{background:#14532d4d}.article-content .language-js,.article-content .language-javascript{color:#eab308}.article-content .language-ts,.article-content .language-typescript{color:var(--color-primary)}.article-content .language-css{color:#ec4899}.article-content .language-html{color:#f97316}.article-content{animation:.6s ease-out fadeInUp}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.reading-progress{background:linear-gradient(to right, var(--color-primary), var(--color-primary-light));transform-origin:0;z-index:100;height:3px;transition:transform .1s ease-out;position:fixed;top:0;left:0;right:0}html.dark .reading-progress{background:linear-gradient(to right, var(--color-primary-light), var(--color-primary-lighter))}.back-to-top{background:var(--color-bg-secondary);border:1px solid var(--color-neutral-200);cursor:pointer;opacity:0;z-index:50;border-radius:9999px;justify-content:center;align-items:center;width:3rem;height:3rem;transition:all .3s;display:flex;position:fixed;bottom:2rem;right:2rem;transform:translateY(20px);box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a}html.dark .back-to-top{background:var(--color-bg-secondary-dark);border-color:var(--color-neutral-700)}.back-to-top.visible{opacity:1;transform:translateY(0)}.back-to-top:hover{background:var(--color-neutral-100);transform:translateY(-4px);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a}html.dark .back-to-top:hover{background:var(--color-bg-tertiary-dark)}.article-content::selection{background:var(--color-primary-bg);color:var(--color-primary)}html.dark .article-content::selection{background:var(--color-primary-bg);color:var(--color-primary-light-dark)}.article-content ::selection{background:var(--color-primary-bg);color:var(--color-primary)}html.dark .article-content ::selection{background:var(--color-primary-bg);color:var(--color-primary-light-dark)}@media print{.article-content{color:var(--color-neutral-900);font-size:12pt}.article-content a{color:var(--color-neutral-900);text-decoration:underline}.article-content pre,.article-content blockquote{page-break-inside:avoid}.article-content h1,.article-content h2,.article-content h3,.article-content h4,.article-content h5,.article-content h6{page-break-after:avoid;color:var(--color-neutral-900)}.back-to-top,.reading-progress,.toc-sticky-wrapper{display:none}}@media (prefers-reduced-motion:reduce){.article-content,.article-content *{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@media (width>=1536px){.article-content{font-size:1.125rem}.article-title{font-size:3rem}}@media (width>=768px) and (width<=1024px){.article-wrapper{max-width:70ch}}@media (width<=640px){.article-header{margin-bottom:2rem;padding-bottom:1.5rem}.article-title{font-size:1.75rem}.article-meta{gap:.5rem}.article-meta-divider{display:none}.back-to-top{width:2.5rem;height:2.5rem;bottom:1rem;right:1rem}}
