.article-content[data-theme-style=default]{font-family:var(--font-sans);color:var(--color-text);line-height:1.8}.article-content[data-theme-style=default] h1,.article-content[data-theme-style=default] h2,.article-content[data-theme-style=default] h3{letter-spacing:-.02em;margin-top:2em;margin-bottom:.75em;font-weight:700}.article-content[data-theme-style=default] h1{font-size:2em}.article-content[data-theme-style=default] h2{font-size:1.5em}.article-content[data-theme-style=default] h3{font-size:1.25em}.article-content[data-theme-style=default] p{margin-bottom:1.25em}.article-content[data-theme-style=default] blockquote{border-left:3px solid var(--color-accent);color:var(--color-text-secondary);margin:1.5em 0;padding-left:1em}.article-content[data-theme-style=default] code{font-family:var(--font-mono);background:var(--color-bg-secondary);border-radius:4px;padding:.125em .375em;font-size:.875em}.article-content[data-theme-style=default] pre{background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius);padding:1em;overflow-x:auto}.article-content[data-theme-style=default] a{color:var(--color-accent);text-underline-offset:2px;text-decoration:underline}.article-content[data-theme-style=default] table{border-collapse:collapse;width:100%}.article-content[data-theme-style=default] th,.article-content[data-theme-style=default] td{border:1px solid var(--color-border);text-align:left;padding:.75em 1em}.article-content[data-theme-style=default] th{background:var(--color-bg-secondary);font-weight:600}
.article-content[data-theme-style=github]{word-wrap:break-word;color:var(--color-text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Noto Sans,Helvetica,Arial,sans-serif;font-size:16px;line-height:1.6}.article-content[data-theme-style=github] h1,.article-content[data-theme-style=github] h2,.article-content[data-theme-style=github] h3,.article-content[data-theme-style=github] h4{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.article-content[data-theme-style=github] h1{border-bottom:1px solid var(--color-border);padding-bottom:.3em;font-size:2em}.article-content[data-theme-style=github] h2{border-bottom:1px solid var(--color-border);padding-bottom:.3em;font-size:1.5em}.article-content[data-theme-style=github] h3{font-size:1.25em}.article-content[data-theme-style=github] h4{font-size:1em}.article-content[data-theme-style=github] p{margin-top:0;margin-bottom:16px}.article-content[data-theme-style=github] blockquote{color:var(--color-text-secondary);border-left:.25em solid var(--color-border);margin:0;padding:0 1em}.article-content[data-theme-style=github] ul,.article-content[data-theme-style=github] ol{margin-top:0;margin-bottom:16px;padding-left:2em}.article-content[data-theme-style=github] li,.article-content[data-theme-style=github] li+li{margin-top:.25em}.article-content[data-theme-style=github] code{background:var(--color-bg-secondary);border-radius:6px;padding:.2em .4em;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:.875em}.article-content[data-theme-style=github] pre{background:var(--color-bg-secondary);border-radius:6px;padding:16px;font-size:.85em;line-height:1.45;overflow:auto}.article-content[data-theme-style=github] pre code{background:0 0;border-radius:0;padding:0;font-size:1em}.article-content[data-theme-style=github] a{color:var(--color-accent);text-decoration:none}.article-content[data-theme-style=github] a:hover{text-decoration:underline}.article-content[data-theme-style=github] table{border-collapse:collapse;border-spacing:0;width:100%}.article-content[data-theme-style=github] th,.article-content[data-theme-style=github] td{border:1px solid var(--color-border);padding:6px 13px}.article-content[data-theme-style=github] th{background:var(--color-bg-secondary);font-weight:600}.article-content[data-theme-style=github] tr:nth-child(2n){background:var(--color-bg-secondary)}.article-content[data-theme-style=github] hr{background-color:var(--color-border);border:0;height:.25em;margin:24px 0;padding:0}.article-content[data-theme-style=github] img{border-radius:6px;max-width:100%}.article-content[data-theme-style=github] details{border:1px solid var(--color-border);border-radius:6px;margin-bottom:16px;padding:16px}.article-content[data-theme-style=github] details summary{cursor:pointer;font-weight:600}.article-content[data-theme-style=github] .task-list-item{margin-left:-1.5em;list-style-type:none}.article-content[data-theme-style=github] .task-list-item input{margin-right:.5em}
.article-content[data-theme-style=notion]{color:var(--color-text);letter-spacing:.01em;font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Apple Color Emoji,Arial,sans-serif;font-size:16px;line-height:1.75}.article-content[data-theme-style=notion] h1,.article-content[data-theme-style=notion] h2,.article-content[data-theme-style=notion] h3{letter-spacing:-.02em;margin-top:1.5em;margin-bottom:.5em;font-weight:700;line-height:1.3}.article-content[data-theme-style=notion] h1{margin-top:0;font-size:1.875em}.article-content[data-theme-style=notion] h2{border-bottom:1px solid var(--color-border);padding-bottom:.25em;font-size:1.5em}.article-content[data-theme-style=notion] h3{font-size:1.25em}.article-content[data-theme-style=notion] p{margin-top:0;margin-bottom:.75em}.article-content[data-theme-style=notion] blockquote{border-left:3px solid var(--color-accent);background:var(--color-bg-secondary);border-radius:0 var(--radius)var(--radius)0;margin:.75em 0;padding:.5em 1em}.article-content[data-theme-style=notion] blockquote p{margin-bottom:0}.article-content[data-theme-style=notion] ul,.article-content[data-theme-style=notion] ol{margin-top:0;margin-bottom:.75em;padding-left:1.5em}.article-content[data-theme-style=notion] li{margin-bottom:.25em}.article-content[data-theme-style=notion] li::marker{color:var(--color-text-secondary)}.article-content[data-theme-style=notion] code{background:var(--color-bg-secondary);color:#eb5757;border-radius:4px;padding:.125em .375em;font-family:SFMono-Regular,Menlo,Consolas,monospace;font-size:.875em}[data-theme=dark] .article-content[data-theme-style=notion] code{color:#ff7b72}.article-content[data-theme-style=notion] pre{background:var(--color-bg-secondary);border-radius:var(--radius);margin:.75em 0;padding:1em 1.25em;overflow-x:auto}.article-content[data-theme-style=notion] pre code{color:inherit;background:0 0;padding:0;font-size:.875em;line-height:1.6}.article-content[data-theme-style=notion] a{color:var(--color-accent);text-underline-offset:3px;-webkit-text-decoration:underline #37352f26;text-decoration:underline #37352f26}.article-content[data-theme-style=notion] a:hover{-webkit-text-decoration-color:var(--color-accent);text-decoration-color:var(--color-accent)}.article-content[data-theme-style=notion] table{border-collapse:collapse;width:100%;margin:.75em 0;font-size:.9em}.article-content[data-theme-style=notion] th,.article-content[data-theme-style=notion] td{border:1px solid var(--color-border);text-align:left;padding:.5em .75em}.article-content[data-theme-style=notion] th{background:var(--color-bg-secondary);color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em;font-size:.85em;font-weight:600}.article-content[data-theme-style=notion] hr{border:none;border-top:1px solid var(--color-border);margin:1.5em 0}.article-content[data-theme-style=notion] img{border-radius:var(--radius);max-width:100%;margin:.5em 0}.article-content[data-theme-style=notion] callout{background:var(--color-bg-secondary);border-radius:var(--radius);gap:.75em;margin:.75em 0;padding:1em;display:flex}.article-content[data-theme-style=notion] .callout-icon{font-size:1.25em;line-height:1}
.article-content[data-theme-style=academic]{color:var(--color-text);text-align:justify;-webkit-hyphens:auto;hyphens:auto;font-family:Noto Serif,Source Han Serif SC,Georgia,Times New Roman,serif;font-size:17px;line-height:1.9}.article-content[data-theme-style=academic] h1,.article-content[data-theme-style=academic] h2,.article-content[data-theme-style=academic] h3,.article-content[data-theme-style=academic] h4{text-align:left;-webkit-hyphens:none;hyphens:none;font-family:Noto Sans,Source Han Sans SC,-apple-system,sans-serif;font-weight:700}.article-content[data-theme-style=academic] h1{letter-spacing:-.03em;margin-top:0;margin-bottom:.75em;font-size:1.75em}.article-content[data-theme-style=academic] h2{letter-spacing:-.02em;margin-top:2em;margin-bottom:.5em;font-size:1.375em}.article-content[data-theme-style=academic] h3{margin-top:1.5em;margin-bottom:.5em;font-size:1.125em}.article-content[data-theme-style=academic] h4{margin-top:1.25em;margin-bottom:.375em;font-size:1em;font-style:italic}.article-content[data-theme-style=academic] p{text-indent:1em;margin-top:0;margin-bottom:1em}.article-content[data-theme-style=academic] h1+p,.article-content[data-theme-style=academic] h2+p,.article-content[data-theme-style=academic] h3+p,.article-content[data-theme-style=academic] h4+p,.article-content[data-theme-style=academic] blockquote+p,.article-content[data-theme-style=academic] pre+p{text-indent:0}.article-content[data-theme-style=academic] blockquote{border-left:3px solid var(--color-accent);background:var(--color-bg-secondary);text-indent:0;margin:1em 0;padding:.75em 1.25em;font-style:italic}.article-content[data-theme-style=academic] blockquote p{text-indent:0;margin-bottom:.5em}.article-content[data-theme-style=academic] blockquote p:last-child{margin-bottom:0}.article-content[data-theme-style=academic] ul,.article-content[data-theme-style=academic] ol{text-indent:0;margin-top:0;margin-bottom:1em;padding-left:1.25em}.article-content[data-theme-style=academic] li{margin-bottom:.375em}.article-content[data-theme-style=academic] li p{text-indent:0;margin-bottom:.25em}.article-content[data-theme-style=academic] code{background:var(--color-bg-secondary);letter-spacing:0;border-radius:4px;padding:.15em .4em;font-family:JetBrains Mono,Fira Code,monospace;font-size:.85em}.article-content[data-theme-style=academic] pre{background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius);text-indent:0;margin:1em 0;padding:1em 1.25em;overflow-x:auto}.article-content[data-theme-style=academic] pre code{background:0 0;padding:0;font-size:.85em;line-height:1.6}.article-content[data-theme-style=academic] .code-block{border:1px solid var(--color-border);background:var(--color-bg-secondary);border-radius:6px;margin:1.5rem 0 1.75rem;overflow:hidden}.article-content[data-theme-style=academic] .code-header{background:var(--color-bg);border-bottom:1px solid var(--color-border);min-height:2.5rem;padding:.375rem .75rem .375rem 1rem}.article-content[data-theme-style=academic] .code-language{letter-spacing:.1em;color:var(--color-text-secondary);font-family:Noto Sans,Source Han Sans SC,-apple-system,sans-serif;font-size:.6875rem;font-weight:700;line-height:1}.article-content[data-theme-style=academic] .code-copy-btn{z-index:auto;width:1.875rem;height:1.875rem;color:var(--color-text-secondary);background:0 0;border:1px solid #0000;border-radius:4px;transition:color .15s,border-color .15s,background-color .15s;position:static}.article-content[data-theme-style=academic] .code-copy-btn:hover{border-color:var(--color-border);background:var(--color-bg-secondary);color:var(--color-text)}.article-content[data-theme-style=academic] .code-copy-btn:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.article-content[data-theme-style=academic] .code-block pre{text-indent:0;tab-size:2;background:0 0;border:0;border-radius:0;margin:0;padding:1rem 1.125rem 1.125rem}.article-content[data-theme-style=academic] .code-block pre code{font-family:var(--font-mono);font-variant-ligatures:common-ligatures;font-size:.8125rem;line-height:1.65}.article-content[data-theme-style=academic] .code-block pre:focus-visible{outline:2px solid var(--color-accent);outline-offset:-2px}.article-content[data-theme-style=academic] .code-block+p{text-indent:0}.article-content[data-theme-style=academic] .python-demo{border:1px solid var(--color-border);background:var(--color-bg);border-radius:8px;margin:1.5rem 0 1.75rem}.article-content[data-theme-style=academic] .python-demo-header{border-bottom:1px solid var(--color-border);background:var(--color-bg);min-height:2.5rem;padding:.375rem .75rem .375rem 1rem}.article-content[data-theme-style=academic] .python-demo-title{letter-spacing:.01em;gap:.5rem;font-family:Noto Sans,Source Han Sans SC,-apple-system,sans-serif;font-size:.75rem}.article-content[data-theme-style=academic] .python-mark{border-radius:.3rem;width:1.5rem;height:1.5rem;font-size:.625rem}.article-content[data-theme-style=academic] .python-demo-actions{gap:.375rem}.article-content[data-theme-style=academic] .python-demo-status{margin-right:.25rem;font-size:.6875rem}.article-content[data-theme-style=academic] .python-demo-actions button{border-radius:4px;min-height:1.875rem;padding:.25rem .5rem;font-size:.6875rem}.article-content[data-theme-style=academic] .python-demo-actions .python-run{padding-inline:.625rem}.article-content[data-theme-style=academic] .python-demo-code{background:var(--color-bg-secondary);border:0;border-radius:0;margin:0;padding:.875rem 1.125rem 1rem;font-size:.8125rem;line-height:1.65}.article-content[data-theme-style=academic] .python-demo-code code,.article-content[data-theme-style=academic] .python-demo-output pre code{background:0 0;border-radius:0;padding:0}.article-content[data-theme-style=academic] .python-demo-output{border-top:1px solid var(--color-border);background:var(--color-bg)}.article-content[data-theme-style=academic] .python-output-label{padding:.5rem 1rem .25rem;font-family:Noto Sans,Source Han Sans SC,-apple-system,sans-serif;font-size:.6875rem;font-weight:600}.article-content[data-theme-style=academic] .python-demo-output pre{border:0;border-radius:0;min-height:0;margin:0;padding:.25rem 1rem .75rem;font-size:.8125rem;line-height:1.6}.article-content[data-theme-style=academic] .python-demo-output p{margin:0;padding:.125rem 1rem .75rem;font-family:Noto Serif,Source Han Serif SC,Georgia,serif;font-size:.8125rem;line-height:1.55}.article-content[data-theme-style=academic] .python-demo figcaption{border-top:1px solid var(--color-border);background:var(--color-bg-secondary);margin:0;padding:.5rem 1rem .625rem;font-size:.6875rem;line-height:1.5}.article-content[data-theme-style=academic] .python-demo button:focus-visible,.article-content[data-theme-style=academic] .python-demo-code:focus-visible{outline-offset:2px}@media (max-width:640px){.article-content[data-theme-style=academic] .python-demo{border-radius:6px;margin:1.25rem -.25rem 1.5rem}.article-content[data-theme-style=academic] .python-demo-header{gap:.5rem}.article-content[data-theme-style=academic] .python-demo-actions{gap:.375rem}.article-content[data-theme-style=academic] .code-block{border-radius:4px;margin:1.25rem -.25rem 1.5rem}.article-content[data-theme-style=academic] .code-block pre{padding:.875rem .875rem 1rem}}.article-content[data-theme-style=academic] a{color:var(--color-accent);text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1px}.article-content[data-theme-style=academic] a:hover{text-decoration-thickness:2px}.article-content[data-theme-style=academic] table{border-collapse:collapse;width:100%;margin:1em 0;font-family:Noto Sans,sans-serif;font-size:.9em}.article-content[data-theme-style=academic] th,.article-content[data-theme-style=academic] td{border:1px solid var(--color-border);text-align:left;padding:.625em 1em}.article-content[data-theme-style=academic] th{background:var(--color-bg-secondary);text-transform:uppercase;letter-spacing:.05em;font-size:.85em;font-weight:600}.article-content[data-theme-style=academic] hr{text-align:center;color:var(--color-text-secondary);border:none;margin:2em 0}.article-content[data-theme-style=academic] hr:before{content:"· · ·";letter-spacing:1em}.article-content[data-theme-style=academic] img{border-radius:var(--radius);max-width:100%;margin:1.5em auto;display:block}.article-content[data-theme-style=academic] figcaption{text-align:center;color:var(--color-text-secondary);margin-top:.5em;font-size:.85em;font-style:italic}.article-content[data-theme-style=academic] sup{vertical-align:super;font-size:.75em;line-height:0}.article-content[data-theme-style=academic] .footnote-ref{color:var(--color-accent);font-family:Noto Sans,sans-serif;text-decoration:none}

.code-block{border-radius:var(--radius);background:var(--color-bg-secondary);margin:1rem 0;overflow:hidden}.code-header{background:var(--color-bg);border-bottom:1px solid var(--color-border);justify-content:space-between;align-items:center;padding:.5rem 1rem;display:flex}.code-language{color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em;font-size:.75rem;font-weight:500}.code-copy-btn{border-radius:var(--radius);border:1px solid var(--color-border);width:2rem;height:2rem;color:var(--color-text-secondary);cursor:pointer;background:0 0;justify-content:center;align-items:center;transition:all .2s;display:inline-flex}.code-copy-btn:hover{color:var(--color-text);border-color:var(--color-accent);background:var(--color-bg-secondary)}.code-block pre{background:0 0;margin:0;padding:1rem 1.25rem;overflow-x:auto}.code-block code{font-family:var(--font-mono);background:0 0;border:none;padding:0;font-size:.875rem;line-height:1.6}[data-theme=light] .token.comment,[data-theme=light] .token.prolog,[data-theme=light] .token.doctype,[data-theme=light] .token.cdata{color:#6a737d}[data-theme=light] .token.punctuation{color:#24292e}[data-theme=light] .token.property,[data-theme=light] .token.tag,[data-theme=light] .token.boolean,[data-theme=light] .token.number,[data-theme=light] .token.constant,[data-theme=light] .token.symbol,[data-theme=light] .token.deleted{color:#005cc5}[data-theme=light] .token.selector,[data-theme=light] .token.attr-name,[data-theme=light] .token.string,[data-theme=light] .token.char,[data-theme=light] .token.builtin,[data-theme=light] .token.inserted{color:#22863a}[data-theme=light] .token.operator,[data-theme=light] .token.entity,[data-theme=light] .token.url,[data-theme=light] .token.atrule,[data-theme=light] .token.attr-value,[data-theme=light] .token.keyword{color:#d73a49}[data-theme=light] .token.function,[data-theme=light] .token.class-name{color:#6f42c1}[data-theme=light] .token.regex,[data-theme=light] .token.important,[data-theme=light] .token.variable{color:#e36209}[data-theme=dark] .token.comment,[data-theme=dark] .token.prolog,[data-theme=dark] .token.doctype,[data-theme=dark] .token.cdata{color:#8b949e}[data-theme=dark] .token.punctuation{color:#c9d1d9}[data-theme=dark] .token.property,[data-theme=dark] .token.tag,[data-theme=dark] .token.boolean,[data-theme=dark] .token.number,[data-theme=dark] .token.constant,[data-theme=dark] .token.symbol,[data-theme=dark] .token.deleted{color:#79c0ff}[data-theme=dark] .token.selector,[data-theme=dark] .token.attr-name,[data-theme=dark] .token.string,[data-theme=dark] .token.char,[data-theme=dark] .token.builtin,[data-theme=dark] .token.inserted{color:#a5d6ff}[data-theme=dark] .token.operator,[data-theme=dark] .token.entity,[data-theme=dark] .token.url,[data-theme=dark] .token.atrule,[data-theme=dark] .token.attr-value,[data-theme=dark] .token.keyword{color:#ff7b72}[data-theme=dark] .token.function,[data-theme=dark] .token.class-name{color:#d2a8ff}[data-theme=dark] .token.regex,[data-theme=dark] .token.important,[data-theme=dark] .token.variable{color:#ffa657}
:root{--font-sans:"PingFang SC","Microsoft YaHei","Noto Sans CJK SC",system-ui,-apple-system,sans-serif;--font-mono:"SF Mono","Fira Code","Consolas",monospace;--color-bg:#fff;--color-bg-secondary:#f8f8f8;--color-text:#1a1a1a;--color-text-secondary:#666;--color-border:#e5e5e5;--color-accent:#2563eb;--color-accent-hover:#1d4ed8;--project-card-bg:#fbfcfd99;--heatmap-empty:#eef5ef;--heatmap-1:#d9f5dd;--heatmap-2:#a7e8ae;--heatmap-3:#7cda88;--heatmap-4:#5dce6a;--heatmap-pulse:#5dce6a;--max-width:1000px;--content-width:720px;--radius:8px;--spacing:1.5rem}[data-theme=dark]{--color-bg:#0a0a0a;--color-bg-secondary:#141414;--color-text:#e5e5e5;--color-text-secondary:#a0a0a0;--color-border:#2a2a2a;--color-accent:#60a5fa;--color-accent-hover:#93bbfd;--project-card-bg:#2a2a2a99;--heatmap-empty:#21262d;--heatmap-1:#0e4429;--heatmap-2:#006d32;--heatmap-3:#26a641;--heatmap-4:#39d353;--heatmap-pulse:#39d353}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{font-family:var(--font-sans);color:var(--color-text);background:var(--color-bg);-webkit-font-smoothing:antialiased;line-height:1.7;transition:background-color .48s,color .48s}body{flex-direction:column;min-height:100vh;transition:background-color .48s,color .48s;display:flex;position:relative}.ascii-background{z-index:0;pointer-events:none;position:fixed;inset:0;overflow:hidden}.ascii-background-source{object-fit:cover;object-position:center;opacity:.3;filter:saturate(.62)contrast(1.02)brightness(.92);mix-blend-mode:normal;width:100%;height:100%;transition:opacity .48s,filter .48s;position:absolute;inset:0}.ascii-background canvas{opacity:.07;mix-blend-mode:multiply;width:100%;height:100%;transition:opacity .48s,filter .48s;display:block;position:absolute;inset:0}[data-theme=dark] .ascii-background{background:#11151e}[data-theme=dark] .ascii-background-source{opacity:.22;filter:saturate(.6)brightness(.74)contrast(1.04);mix-blend-mode:normal}[data-theme=dark] .ascii-background canvas{opacity:.08;filter:invert()contrast(.9);mix-blend-mode:screen}a{color:var(--color-accent);text-decoration:none;transition:color .2s}a:hover{color:var(--color-accent-hover)}img{max-width:100%;height:auto}button{font-family:inherit;font-size:inherit;cursor:pointer;color:inherit;background:0 0;border:none}.btn{border-radius:var(--radius);white-space:nowrap;color:var(--color-text);border:1px solid var(--color-border);background:0 0;justify-content:center;align-items:center;gap:.5rem;padding:.5rem 1rem;font-size:.875rem;font-weight:500;transition:all .2s;display:inline-flex}[data-theme=dark] .btn{color:#0a0a0a;background:#fff;border-color:#fff}.btn:hover{opacity:.9}.btn-primary{background:var(--color-accent);color:#fff;border-color:var(--color-accent)}.btn-primary:hover{background:var(--color-accent-hover);color:#fff}.btn-secondary{border:1px solid var(--color-border);color:var(--color-text);background:0 0}[data-theme=dark] .btn-secondary{border-color:var(--color-border);color:var(--color-text);background:0 0}.btn-secondary:hover{border-color:var(--color-accent);color:var(--color-accent)}.btn-ghost{color:var(--color-text-secondary);background:0 0;border:none}.btn-ghost:hover{background:var(--color-bg-secondary);color:var(--color-text)}.btn-sm{padding:.25rem .625rem;font-size:.75rem}.header{z-index:100;background:var(--color-bg);background:color-mix(in srgb,var(--color-bg)88%,transparent);border-bottom:1px solid var(--color-border);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);transition:background-color .48s,border-color .48s,color .48s;position:sticky;top:0}.header-inner{max-width:var(--max-width);padding:0 max(var(--spacing),env(safe-area-inset-right))0 max(var(--spacing),env(safe-area-inset-left));justify-content:space-between;align-items:center;height:56px;margin:0 auto;display:flex}.header-nav{align-items:center;gap:.5rem;display:flex}.header-link{border-radius:var(--radius);color:var(--color-text-secondary);justify-content:center;align-items:center;padding:.25rem .5rem;font-size:.875rem;transition:all .2s;display:inline-flex}.header-link:has(svg):not(:has(span)){width:36px;height:36px;padding:0}.header-link:hover,.header-link.active{color:var(--color-text);background:var(--color-bg-secondary)}.header-left,.header-right{color:var(--color-text-secondary);font-size:.75rem}.header-time{font-variant-numeric:tabular-nums}.theme-toggle{border-radius:var(--radius);width:36px;height:36px;color:var(--color-text-secondary);flex-shrink:0;justify-content:center;align-items:center;margin-left:.25rem;transition:all .2s;display:inline-flex}.theme-toggle:hover{background:var(--color-bg-secondary);color:var(--color-text)}.back-to-top{right:max(var(--spacing),env(safe-area-inset-right));bottom:max(var(--spacing),env(safe-area-inset-bottom));z-index:90;border:1px solid var(--color-border);background:var(--color-bg);width:44px;height:44px;color:var(--color-text-secondary);border-radius:50%;justify-content:center;align-items:center;font-size:1.25rem;line-height:1;transition:color .2s,border-color .2s,transform .2s;display:inline-flex;position:fixed}.back-to-top:hover{border-color:var(--color-accent);color:var(--color-accent);transform:translateY(-2px)}.back-to-top:focus-visible{outline:2px solid var(--color-accent);outline-offset:3px}@media (max-width:640px){.back-to-top{right:max(1rem,env(safe-area-inset-right));bottom:max(1rem,env(safe-area-inset-bottom))}}@media (prefers-reduced-motion:reduce){.back-to-top{transition:none}.back-to-top:hover{transform:none}}.lang-switcher{border-radius:var(--radius);width:36px;height:36px;color:var(--color-text-secondary);flex-shrink:0;justify-content:center;align-items:center;margin-left:.5rem;font-size:.8125rem;font-weight:500;transition:all .2s;display:inline-flex}.lang-switcher:hover{background:var(--color-bg-secondary);color:var(--color-text)}.footer{z-index:1;border-top:1px solid var(--color-border);margin-top:auto;position:relative}.footer-inner{max-width:var(--max-width);padding:var(--spacing);color:var(--color-text-secondary);justify-content:space-between;align-items:center;margin:0 auto;font-size:.75rem;display:flex}.footer-sep{opacity:.5;margin:0 .5rem}.footer-links{gap:var(--spacing);display:flex}.footer-social{color:var(--color-text-secondary)}.footer-social:hover{color:var(--color-text)}body>main{max-width:var(--max-width);padding:1.5rem var(--spacing);isolation:isolate;flex:1;width:100%;min-height:calc(100vh - 116px);margin:0 auto;transition:background-color .48s,color .48s}.home-layout{gap:calc(var(--spacing)*3);z-index:1;grid-template-columns:240px minmax(0,1fr);align-items:start;display:grid;position:relative}.home-intro{top:calc(56px + var(--spacing));min-width:0;position:sticky}.home-layout-no-intro{grid-template-columns:minmax(0,1fr)}.home-intro-copy{min-width:0;max-width:680px}.home-intro h1{margin-bottom:.25rem;font-size:1.5rem;line-height:1.2}.home-intro-role{color:var(--color-text-secondary);margin-bottom:var(--spacing)}.home-intro h2{margin-bottom:.75rem;font-size:1.25rem}.home-intro-description{color:var(--color-text-secondary);max-width:62ch}.home-intro-description p:last-child{margin-bottom:0}.home-intro-avatar{object-fit:cover;width:120px;height:120px;margin-bottom:var(--spacing);border-radius:50%}.home-intro-social{margin-top:var(--spacing);flex-wrap:wrap;gap:1rem;font-size:.875rem;display:flex}.home-content .featured{margin-top:0}.playground{margin-top:calc(var(--spacing)*1.75);margin-bottom:calc(var(--spacing)*2.75);min-height:3.25rem;position:relative}.playground-actions{align-items:center;gap:1rem;display:flex}.playground-action{color:var(--color-text-secondary);font-variant-numeric:tabular-nums;flex-direction:column;align-items:center;gap:.05rem;padding:0;font-size:.7rem;transition:transform .18s ease-out,color .18s ease-out;display:inline-flex}.playground-action:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px;border-radius:8px}.playground-action:active{transform:scale(.94)}.playground-action:hover{color:var(--color-text)}.playground-action img{object-fit:contain;-webkit-user-select:none;user-select:none;pointer-events:none;width:3rem;height:3rem}.playground-action-flower img{width:2.8rem;height:2.8rem}.playground-effects{z-index:110;pointer-events:none;position:fixed;inset:0}.playground-particle{object-fit:contain;width:2.4rem;height:2.4rem;animation:.82s ease-out both playground-fade;position:absolute;transform:translate(-50%,-50%)}@keyframes playground-fade{0%{opacity:.9;transform:translate(-50%,-50%)scale(.68)rotate(0)}to{opacity:0;transform:translate(calc(-50% + var(--play-dx)),calc(-50% + var(--play-dy)))scale(.9)rotate(var(--play-rotate))}}@media (prefers-reduced-motion:reduce){.playground-action{transition:none}.playground-particle{animation:.26s ease-out both playground-fade}}@media (max-width:760px){.home-layout{grid-template-columns:1fr;gap:0}.home-intro{padding-bottom:calc(var(--spacing)*2);margin-bottom:calc(var(--spacing)*2);border-bottom:1px solid var(--color-border);position:static}.home-intro-avatar{width:88px;height:88px}.featured-item{flex-wrap:wrap;gap:.25rem .75rem}.featured-date{min-width:0}.featured-title{flex:100%;min-width:0}.featured-tag{margin-left:auto}.playground{margin-top:calc(var(--spacing)*1.25);margin-bottom:calc(var(--spacing)*2.25)}}@media (max-width:420px){.playground-actions{gap:.8rem}}.section-label{text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-secondary);margin-bottom:var(--spacing);font-size:.75rem}.featured{margin-top:calc(var(--spacing)*4)}.featured-list{flex-direction:column;gap:0;display:flex}.featured-item{border-bottom:1px solid var(--color-border);color:inherit;align-items:baseline;gap:1rem;padding:.75rem 0;text-decoration:none;transition:all .2s;display:flex}.featured-item:first-child{border-top:1px solid var(--color-border)}.featured-item:hover{color:inherit;padding-left:.5rem;text-decoration:none}.featured-date{color:var(--color-text-secondary);font-variant-numeric:tabular-nums;white-space:nowrap;min-width:100px;font-size:.8125rem}.featured-title{color:var(--color-text);flex:1;font-size:1rem;font-weight:500;transition:color .2s}.featured-item:hover .featured-title{color:var(--color-accent)}.featured-tag{color:var(--color-accent);white-space:nowrap;font-size:.75rem}.featured-more{color:var(--color-accent);margin-top:1rem;font-size:.875rem;text-decoration:none;display:inline-block}.featured-more:hover{text-decoration:underline}.projects-section{margin-top:calc(var(--spacing)*4)}.home-content .projects-section{margin-top:calc(var(--spacing)*2.5)}.project-playground{position:relative}.project-card-long-press{cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.project-card-dragging{z-index:3;cursor:grabbing;--drag-x:0px;--drag-y:0px;--grab-x:50%;--grab-y:50%;transform-origin:var(--grab-x)var(--grab-y);position:relative;transform:translate(var(--drag-x),var(--drag-y))rotate(1deg)scale(.24)!important;transition:none!important}.project-card-discarded{pointer-events:none;animation:.3s ease-in forwards project-card-discard}.project-trash{right:max(1.25rem,env(safe-area-inset-right));bottom:max(1.25rem,env(safe-area-inset-bottom));z-index:120;opacity:0;pointer-events:none;place-items:center;width:4.5rem;height:4.5rem;transition:opacity .18s ease-out,transform .18s ease-out;display:grid;position:fixed;transform:scale(.72)}.project-trash.is-visible{opacity:1;animation:1.1s ease-in-out infinite project-trash-blink;transform:scale(1)}.project-trash img{object-fit:contain;pointer-events:none;width:4.25rem;height:4.25rem}@keyframes project-trash-blink{0%,to{opacity:.65}50%{opacity:1}}@keyframes project-card-discard{to{opacity:0;transform:scale(.86)translateY(.5rem)}}@media (prefers-reduced-motion:reduce){.project-trash.is-visible{animation:none}.project-card-discarded{animation-duration:1ms}}.projects-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;max-width:760px;display:grid}.project-card{aspect-ratio:4/3;border:1px solid color-mix(in srgb,var(--color-text)13%,transparent);background:var(--project-card-bg);-webkit-backdrop-filter:blur(14px)saturate(118%);backdrop-filter:blur(14px)saturate(118%);border-radius:14px;flex-direction:column;padding:1.25rem;transition:transform .28s,border-color .28s,background-color .28s;display:flex;position:relative;overflow:hidden}.project-card:hover{border-color:color-mix(in srgb,var(--color-accent)66%,var(--color-text));background:color-mix(in srgb,var(--project-card-bg)95%,var(--color-bg));transform:translateY(-4px)}.project-card-main{flex:1;text-decoration:none;display:block}.project-card-meta{color:var(--color-text-secondary);font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;justify-content:space-between;align-items:center;margin-bottom:1.25rem;font-size:.625rem;display:flex}.project-card-jump{width:1.75rem;height:1.75rem;color:var(--color-text-secondary);justify-content:center;align-items:center;font-size:1rem;transition:color .2s,transform .2s;display:inline-flex}.project-card-jump:hover{color:var(--color-accent);transform:translate(2px,-2px)}.project-card-image{aspect-ratio:16/8;object-fit:cover;border-bottom:1px solid color-mix(in srgb,var(--color-text)13%,transparent);width:calc(100% + 2.5rem);max-width:none;height:auto;margin:-1.25rem -1.25rem 1.25rem;display:block}.project-card h3{letter-spacing:-.02em;margin-bottom:.625rem;font-size:clamp(1.1rem,2vw,1.35rem);line-height:1.25}.project-card p{color:var(--color-text-secondary);-webkit-line-clamp:3;-webkit-box-orient:vertical;font-size:.875rem;display:-webkit-box;overflow:hidden}@media (prefers-reduced-motion:reduce){.project-card{transition:border-color .2s,background-color .2s}.project-card:hover{transform:none}}.projects-categorized{gap:calc(var(--spacing)*2);flex-direction:column;display:flex}.project-category-nav{flex-wrap:wrap;gap:.5rem;display:flex}.project-category-nav a{border:1px solid var(--color-border);color:var(--color-text-secondary);border-radius:999px;padding:.3rem .7rem;font-size:.8125rem}.project-category-nav a:hover{border-color:var(--color-accent);color:var(--color-accent)}.project-category{scroll-margin-top:5rem}.project-category+.project-category{padding-top:calc(var(--spacing)*1.5);border-top:1px solid var(--color-border)}.project-category-heading{align-items:center;gap:1rem;margin-bottom:1rem;display:flex}.project-category-heading h2{flex:none;font-size:1rem;font-weight:600}.project-category-heading span{background:var(--color-border);flex:1;height:1px}@media (max-width:640px){.project-card-dragging{transform:translate(var(--drag-x),var(--drag-y))rotate(1deg)scale(.3)!important}.projects-grid{grid-template-columns:1fr}}.blog-hero{padding:calc(var(--spacing)*2)0 calc(var(--spacing)*3)}.blog-hero h1{margin-bottom:.5rem;font-size:clamp(1.5rem,3vw,2.5rem);font-weight:700}.blog-list{flex-direction:column;gap:0;display:flex}.blog-item{border-bottom:1px solid var(--color-border);color:inherit;cursor:pointer;align-items:baseline;gap:1rem;padding:.875rem 0;text-decoration:none;transition:all .2s;display:flex}.blog-item:last-child{border-bottom:none}.blog-item:hover{color:inherit;padding-left:.5rem;text-decoration:none}.blog-item-date{color:var(--color-text-secondary);font-variant-numeric:tabular-nums;white-space:nowrap;min-width:80px;font-size:.8125rem}.blog-item-content{flex:1;min-width:0}.blog-item-title{color:var(--color-text);margin-bottom:.25rem;font-size:1rem;font-weight:500;transition:color .2s}.blog-item:hover .blog-item-title{color:var(--color-accent)}.blog-item-summary{color:var(--color-text-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:.8125rem;line-height:1.5;display:-webkit-box;overflow:hidden}.blog-item-tag{color:var(--color-accent);white-space:nowrap;font-size:.75rem}.blog-item-labels{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:.5rem;max-width:15rem;display:flex}.blog-item-series{color:var(--color-text-secondary);white-space:nowrap;font-size:.6875rem}.blog-item-series-part{color:var(--color-accent);font-family:var(--font-mono);white-space:nowrap;font-size:.6875rem}.blog-tree{gap:.75rem}.blog-tree-series{min-width:0}.blog-tree-children{margin-left:1.5rem;padding-left:1.25rem}.blog-tree-parent{border-bottom-color:color-mix(in srgb,var(--color-border)72%,transparent);gap:1rem;padding-left:.25rem}.blog-series-root{cursor:default}.blog-tree-parent.blog-series-root:hover{padding-left:.25rem}.blog-tree-parent:hover{padding-left:.5rem}.blog-tree-gutter{flex:0 0 1rem;width:1rem}.blog-series-kind{color:var(--color-accent);font-size:.6875rem}.blog-tree-toggle{width:1rem;height:1.5rem;color:var(--color-accent);font-family:var(--font-mono);opacity:.72;text-align:center;cursor:pointer;background:0 0;border:0;flex:0 0 1rem;margin:0;padding:0;font-size:.75rem}.blog-tree-toggle:hover,.blog-tree-toggle:focus-visible{opacity:1}.blog-tree-toggle:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px;border-radius:2px}.blog-tree-series-meta{color:var(--color-text-secondary);white-space:nowrap;font-size:.6875rem}.blog-tree-item{border-bottom-color:color-mix(in srgb,var(--color-border)58%,transparent);padding-left:.25rem;position:relative}.blog-tree-item:last-child{border-bottom:none}.blog-tree-single{padding-left:.25rem}@media (max-width:640px){.blog-item{flex-direction:column;gap:.25rem}.blog-tree-children{margin-left:1rem;padding-left:.75rem}.blog-tree-item{align-items:flex-start}.blog-tree-gutter{display:none}.blog-tree-parent{align-items:flex-start}.blog-tree-item .blog-item-labels{justify-content:flex-start;max-width:none;margin-left:1.875rem}.blog-item-date{min-width:auto}}.search-bar{align-items:center;gap:var(--spacing);margin-bottom:calc(var(--spacing)*1.5);display:flex}.search-input{border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-bg);color:var(--color-text);flex:1;padding:.625rem 1rem;font-size:.875rem;transition:border-color .2s}.search-input:focus{border-color:var(--color-accent);outline:none}.search-input::placeholder{color:var(--color-text-secondary);opacity:.7}.search-count{color:var(--color-text-secondary);white-space:nowrap;font-size:.75rem}.search-empty{text-align:center;padding:calc(var(--spacing)*3)0;color:var(--color-text-secondary)}.search-empty p{margin-bottom:var(--spacing)}.article-page{grid-template-columns:180px minmax(0,1fr);gap:3rem;max-width:1100px;margin:0 auto;padding:1rem 0;display:grid}@media (min-width:1280px){body>main:has(.article-page){max-width:1400px}.article-page{grid-template-columns:180px minmax(0,1fr) 280px;max-width:1400px}}@media (max-width:1279px){.article-page{grid-template-columns:1fr}.article-toc{display:none}}.article-toc{overscroll-behavior:contain;scrollbar-width:thin;align-self:start;max-height:calc(100vh - 96px);margin-left:-1rem;padding-right:1rem;position:sticky;top:80px;overflow-y:auto}.article-toc nav{min-width:0}.toc-title{text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-secondary);opacity:.6;margin-bottom:.75rem;font-size:.6875rem;font-weight:600}.toc-list{border-left:1px solid var(--color-border);padding-left:0;list-style:none}.toc-list li{margin:0}.toc-list a{box-sizing:border-box;min-height:2.25rem;color:var(--color-text-secondary);opacity:.7;cursor:pointer;touch-action:manipulation;border-left:2px solid #0000;margin-left:-1px;padding:.5rem .5rem .5rem 1rem;font-size:.8125rem;line-height:1.4;text-decoration:none;transition:all .2s;display:block}.toc-list a:hover,.toc-list li[data-active=true] a{opacity:1;color:var(--color-text);border-left-color:var(--color-accent)}.toc-list li[data-active=true] a{background:var(--color-bg-secondary)}.toc-number{min-width:2.25rem;color:var(--color-accent);font-family:var(--font-mono);font-variant-numeric:tabular-nums;opacity:.8;font-size:.6875rem;display:inline-block}.toc-label{display:inline}.toc-list li[data-level="3"] a{padding-left:2rem;font-size:.75rem}.article-main{min-width:0}.article-top{color:var(--color-text-secondary);border-bottom:1px solid var(--color-border);justify-content:space-between;align-items:center;margin-bottom:1.5rem;padding-bottom:1rem;font-size:.75rem;display:flex}.article-top-left{align-items:center;gap:.5rem;display:flex}.article-top a{color:var(--color-text-secondary);text-decoration:none}.article-top a:hover{color:var(--color-text)}.article-top-meta{align-items:center;gap:.5rem;display:flex}.article-header{margin-bottom:2rem}.article-title{letter-spacing:-.02em;margin-bottom:.75rem;font-size:clamp(1.75rem,4vw,2.5rem);font-weight:700;line-height:1.3}.article-summary{color:var(--color-text-secondary);font-size:1.0625rem;line-height:1.6}.article-series{border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-bg-secondary);margin:3rem 0 2rem;padding:1rem 1.125rem}.article-series-heading{margin-bottom:.75rem}.article-series-kicker{color:var(--color-accent);font-family:var(--font-mono);letter-spacing:.04em;text-transform:uppercase;margin-bottom:.25rem;font-size:.6875rem;display:block}.article-series h2{margin:0;font-size:1rem;font-weight:650}.article-series-heading p{color:var(--color-text-secondary);margin:.375rem 0 0;font-size:.8125rem;line-height:1.5}.article-series-list{gap:.125rem;margin:0;padding:0;list-style:none;display:grid}.article-series-list li>a,.article-series-list li>span[aria-current=page]{border-radius:calc(var(--radius)*.75);color:var(--color-text-secondary);align-items:baseline;gap:.625rem;padding:.375rem .5rem;font-size:.8125rem;line-height:1.4;text-decoration:none;display:flex}.article-series-list li>a:hover{background:var(--color-bg);color:var(--color-text);text-decoration:none}.article-series-list li[data-current=true]>span{background:var(--color-bg);color:var(--color-text);font-weight:600}.article-series-number{color:var(--color-accent);font-family:var(--font-mono);font-variant-numeric:tabular-nums;text-align:right;flex:0 0 1.25rem;font-size:.6875rem}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.article-divider{border:none;border-top:1px solid var(--color-border);margin:1.5rem 0}.article-content{counter-reset:h2-counter;font-size:1rem;line-height:1.9}.article-content h2{letter-spacing:-.01em;counter-increment:h2-counter;counter-reset:h3-counter;margin-top:3rem;margin-bottom:1rem;scroll-margin-top:96px;font-size:1.5rem;font-weight:700}.article-content h2:before{content:counter(h2-counter)". ";color:var(--color-accent);font-weight:600}.article-content h3{counter-increment:h3-counter;margin-top:2rem;margin-bottom:.75rem;scroll-margin-top:96px;font-size:1.25rem;font-weight:600}.article-content h3:before{content:counter(h2-counter)"." counter(h3-counter)" ";color:var(--color-text-secondary);font-weight:500}.article-content p{margin-bottom:1.25rem}.article-content ul,.article-content ol{margin-bottom:1.25rem;padding-left:1.5rem}.article-content li{margin-bottom:.375rem}.article-content blockquote{border:1px solid color-mix(in srgb,var(--color-accent)32%,var(--color-border));border-radius:var(--radius);background:color-mix(in srgb,var(--color-accent)6%,var(--color-bg));color:var(--color-text-secondary);margin:1.5rem 0;padding-left:1rem;padding-right:1rem;font-style:italic}.article-content[data-theme-style] blockquote{border-left:1px solid color-mix(in srgb,var(--color-accent)32%,var(--color-border))}.article-content table{border-collapse:collapse;width:100%;margin:1.5rem 0;font-size:.875rem}.article-content th,.article-content td{text-align:left;border:1px solid var(--color-border);padding:.75rem 1rem}.article-content th{background:var(--color-bg-secondary);font-weight:600}.article-content code{font-family:var(--font-mono);background:var(--color-bg-secondary);border-radius:4px;padding:.125rem .375rem;font-size:.875em}.article-content pre{background:var(--color-bg-secondary);border-radius:var(--radius);margin:1rem 0;padding:1rem 1.25rem;overflow-x:auto}.article-content pre code{background:0 0;padding:0;font-size:.875rem;line-height:1.6}.footnote-layout{--footnote-column-gap:1.5rem;--footnote-column-width:16rem;position:relative}.article-content .footnotes{border-top:1px solid var(--color-border);color:var(--color-text-secondary);margin-top:3rem;padding-top:1rem;font-size:.875rem}.article-content .footnotes ol{margin:0;padding-left:1.5rem}.article-content .footnotes li{padding:.25rem 0}.article-side-notes{top:0;left:calc(100% + var(--footnote-column-gap));width:var(--footnote-column-width);pointer-events:none;display:none;position:absolute}.article-side-notes[data-visible=true]{display:block}.article-side-note{box-sizing:border-box;border:1px solid var(--color-border);background:var(--color-bg-secondary);width:100%;color:var(--color-text);font-family:var(--font-sans);border-radius:8px;padding:.625rem .75rem .625rem 2rem;font-size:.75rem;line-height:1.55;position:absolute}.article-side-note:before{content:attr(data-footnote);color:var(--color-accent);font-family:var(--font-mono);font-size:.6875rem;font-weight:700;line-height:1.55;position:absolute;top:.625rem;left:.75rem}.footnote-layout .article-side-note p{text-align:left;-webkit-hyphens:none;hyphens:none;margin:0}.article-side-note a{pointer-events:auto;color:var(--color-accent)}@media (max-width:1279px){.article-side-notes{display:none!important}}.code-block{margin:1rem 0;position:relative}.code-block pre{background:var(--color-bg-secondary);border-radius:var(--radius);margin:0;padding:2.5rem 1.25rem 1rem;overflow-x:auto}.code-block pre code{background:0 0;padding:0;font-size:.875rem;line-height:1.6}.code-copy-btn{border-radius:var(--radius);background:var(--color-bg);border:1px solid var(--color-border);width:2rem;height:2rem;color:var(--color-text-secondary);cursor:pointer;z-index:1;justify-content:center;align-items:center;transition:all .2s;display:inline-flex;position:absolute;top:.5rem;right:.5rem}.code-copy-btn:hover{color:var(--color-text);border-color:var(--color-accent)}.python-demo{border:1px solid var(--color-border);background:var(--color-bg);border-radius:10px;margin:1.25rem 0;overflow:hidden}.python-demo-header,.python-output-label{justify-content:space-between;align-items:center;gap:.75rem;display:flex}.python-demo-header{border-bottom:1px solid var(--color-border);background:var(--color-bg-secondary);min-height:2.75rem;padding:.5rem .75rem}.python-demo-title,.python-demo-actions,.python-demo-status{align-items:center;gap:.45rem;display:inline-flex}.python-demo-title{font-family:var(--font-sans);color:var(--color-text-secondary);font-size:.78rem;font-weight:600}.python-mark{color:#ffd343;width:1.65rem;height:1.65rem;font-family:var(--font-mono);background:#3776ab;border-radius:.4rem;place-items:center;font-size:.65rem;font-weight:800;display:inline-grid}.python-demo-actions{flex-wrap:wrap}.python-demo-actions button{border:1px solid var(--color-border);background:var(--color-bg);color:var(--color-text-secondary);font-family:var(--font-sans);border-radius:6px;padding:.28rem .5rem;font-size:.72rem;transition:border-color .15s,color .15s,background .15s}.python-demo-actions button:hover:not(:disabled){border-color:var(--color-accent);color:var(--color-text)}.python-demo-actions button:disabled{cursor:not-allowed;opacity:.45}.python-demo-actions .python-run{border-color:var(--color-accent);background:var(--color-accent);color:#fff}.python-demo-actions .python-run:hover:not(:disabled){border-color:var(--color-accent-hover);background:var(--color-accent-hover);color:#fff}.python-demo-status{font-family:var(--font-sans);color:var(--color-text-secondary);font-size:.72rem}.python-demo-status i{background:#94a3b8;border-radius:50%;width:.45rem;height:.45rem}.python-demo[data-state=loading] .python-demo-status i,.python-demo[data-state=running] .python-demo-status i{background:#f59e0b;animation:1s ease-in-out infinite python-pulse}.python-demo[data-state=success] .python-demo-status i{background:#16a34a}.python-demo[data-state=error] .python-demo-status i,.python-demo[data-state=timeout] .python-demo-status i{background:#dc2626}@keyframes python-pulse{50%{opacity:.35}}.python-demo-code,.python-demo-output pre{font-family:var(--font-mono);white-space:pre;margin:0;padding:1rem 1.1rem;font-size:.82rem;line-height:1.65;overflow-x:auto}.article-content .python-demo-code,.article-content .python-demo-output pre{background:0 0;border-radius:0}.python-demo-code{min-height:0}.python-demo-code code{background:0 0;padding:0}.python-demo-output{border-top:1px solid var(--color-border)}.python-output-label{color:var(--color-text-secondary);font-family:var(--font-sans);padding:.5rem 1rem .35rem;font-size:.72rem}.python-demo-output pre{min-height:2.2rem;color:var(--color-text);padding-top:.35rem;padding-bottom:.75rem}.python-demo-output p{color:var(--color-text-secondary);margin:0;padding:0 1rem .8rem;font-size:.76rem}.python-demo[data-state=error] .python-demo-output pre,.python-demo[data-state=timeout] .python-demo-output pre{color:#b91c1c}.python-demo figcaption{border-top:1px solid var(--color-border);color:var(--color-text-secondary);padding:.5rem 1rem .65rem;font-size:.7rem}.python-demo button:focus-visible,.python-demo-code:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}@media (prefers-reduced-motion:reduce){.python-demo-actions button,.python-demo[data-state=loading] .python-demo-status i,.python-demo[data-state=running] .python-demo-status i{transition:none;animation:none}}@media (max-width:640px){.python-demo-header{flex-direction:column;align-items:flex-start}.python-demo-actions{width:100%}}.mermaid-block{border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-bg-secondary);margin:1.5rem 0;overflow:hidden}.mermaid-diagram{background:var(--color-bg);min-height:8rem;padding:1.25rem;overflow-x:auto}.mermaid-diagram svg{max-width:100%;height:auto;margin:0 auto;display:block}.mermaid-toolbar{border-top:1px solid var(--color-border);background:var(--color-bg-secondary);justify-content:flex-end;padding:.5rem .75rem;display:flex}.mermaid-expand-btn{border:1px solid var(--color-border);border-radius:calc(var(--radius) - 2px);color:var(--color-text-secondary);padding:.3rem .6rem;font-size:.8125rem;transition:color .2s,border-color .2s,background .2s}.mermaid-expand-btn:hover:not(:disabled){border-color:var(--color-accent);color:var(--color-accent);background:var(--color-bg)}.mermaid-expand-btn:disabled{cursor:wait;opacity:.65}.mermaid-lightbox{border:1px solid var(--color-border);border-radius:calc(var(--radius) + 2px);background:var(--color-bg);width:min(96vw,1200px);max-width:none;height:min(90vh,900px);max-height:none;color:var(--color-text);padding:0;overflow:hidden}.mermaid-lightbox::backdrop{background:#000000b8}.mermaid-lightbox-shell{grid-template-rows:auto minmax(0,1fr) auto;height:100%;display:grid}.mermaid-lightbox-header{border-bottom:1px solid var(--color-border);justify-content:space-between;align-items:center;gap:1rem;padding:.75rem 1rem;display:flex}.mermaid-lightbox-header h2{margin:0;font-size:.9375rem;font-weight:600}.article-content .mermaid-lightbox-header h2:before{content:none}.mermaid-zoom-controls{align-items:center;gap:.25rem;display:inline-flex}.mermaid-zoom-controls button{border:1px solid var(--color-border);border-radius:calc(var(--radius) - 2px);width:2rem;height:2rem;color:var(--color-text-secondary);place-items:center;line-height:1;transition:color .2s,border-color .2s,background .2s;display:inline-grid}.mermaid-zoom-controls button:hover{border-color:var(--color-accent);color:var(--color-accent);background:var(--color-bg-secondary)}.mermaid-zoom-controls .mermaid-zoom-value{width:3.25rem;font-size:.75rem}.mermaid-zoom-controls .mermaid-close-btn{border-color:#0000;margin-left:.5rem;font-size:1.35rem}.mermaid-lightbox-viewport{background:var(--color-bg-secondary);min-height:0;padding:clamp(1rem,3vw,2.5rem);overflow:auto}.mermaid-lightbox-stage{transform-origin:top;place-items:start center;min-width:min-content;min-height:100%;transition:transform .2s ease-out;display:grid}.mermaid-lightbox-stage svg{width:auto;max-width:none;height:auto;display:block}.mermaid-lightbox-hint{border-top:1px solid var(--color-border);color:var(--color-text-secondary);text-align:center;margin:0;padding:.625rem 1rem;font-size:.75rem}@media (max-width:600px){.mermaid-lightbox{border:0;border-radius:0;width:100vw;height:100vh}.mermaid-lightbox-header{padding:.625rem .75rem}.mermaid-lightbox-viewport{padding:1rem .75rem}}@media (prefers-reduced-motion:reduce){.mermaid-lightbox-stage{transition:none}}.mermaid-loading{min-height:8rem;color:var(--color-text-secondary);place-items:center;padding:1.25rem;display:grid}.mermaid-error{color:var(--color-text-secondary);padding:1rem 1.25rem}.mermaid-error p{margin-bottom:.75rem}.mermaid-error pre,.mermaid-source pre{border-radius:0;margin:0}.mermaid-source{border-top:1px solid var(--color-border)}.mermaid-source summary{color:var(--color-text-secondary);cursor:pointer;padding:.625rem 1rem;font-size:.8125rem}.mermaid-source summary:hover{color:var(--color-text)}.article-content img{border-radius:var(--radius);max-width:100%;margin:1.5rem 0}.article-content hr{border:none;border-top:1px solid var(--color-border);margin:2.5rem 0}.article-content a{color:var(--color-accent);text-underline-offset:2px;-webkit-text-decoration:underline #2563eb4d;text-decoration:underline #2563eb4d}.article-content a:hover{-webkit-text-decoration-color:var(--color-accent);text-decoration-color:var(--color-accent)}.article-footer{border-top:1px solid var(--color-border);color:var(--color-text-secondary);justify-content:space-between;align-items:center;margin-top:3rem;padding-top:2rem;font-size:.875rem;display:flex}@media (max-width:640px){:root{--spacing:1rem}html{overflow-x:hidden}body>main{padding:1.25rem max(var(--spacing),env(safe-area-inset-right))2rem max(var(--spacing),env(safe-area-inset-left))}.header-inner{padding-left:max(var(--spacing),env(safe-area-inset-left));padding-right:max(var(--spacing),env(safe-area-inset-right))}.header-left,.header-right{display:none}.header-nav{justify-content:flex-end;gap:.125rem;width:100%}.header-link{min-width:44px;min-height:44px;padding:.5rem .625rem;font-size:.8125rem}:is(.header-link:has(svg):not(:has(span)),.theme-toggle,.lang-switcher){width:44px;height:44px}.article-page{gap:0;padding-top:.25rem}.article-top{flex-direction:column;align-items:flex-start;gap:.45rem;margin-bottom:1.25rem;padding-bottom:.75rem;line-height:1.45}.article-top-left,.article-top-meta{flex-wrap:wrap;row-gap:.15rem}.article-title{letter-spacing:-.01em;overflow-wrap:anywhere;text-wrap:balance;font-size:clamp(1.5rem,8vw,2rem);line-height:1.25}.article-header{margin-bottom:1.5rem}.article-summary{text-wrap:pretty;font-size:1rem;line-height:1.7}.article-divider{margin:1rem 0}.article-content{overflow-wrap:break-word;font-size:1rem;line-height:1.85}.article-content[data-theme-style] h1{font-size:1.65rem;line-height:1.3}.article-content[data-theme-style] h2{margin-top:2.25rem;margin-bottom:.75rem;scroll-margin-top:72px;font-size:1.35rem;line-height:1.35}.article-content[data-theme-style] h3{margin-top:1.75rem;margin-bottom:.625rem;scroll-margin-top:72px;font-size:1.125rem;line-height:1.45}.article-content p{margin-bottom:1rem}.article-content ul,.article-content ol{padding-left:1.25rem}.article-content pre,.code-block pre{padding:.875rem;font-size:.8125rem}.code-block pre{padding-top:2.5rem}.article-content pre code,.code-block pre code{font-size:.8125rem;line-height:1.55}.article-content table{-webkit-overflow-scrolling:touch;max-width:100%;display:block;overflow-x:auto}.article-content th,.article-content td{white-space:nowrap;padding:.625rem .75rem}.article-content img{margin:1.25rem 0}.article-series{margin:2.25rem 0 1.5rem;padding:.875rem}.article-series-list li>a,.article-series-list li>span[aria-current=page]{min-height:44px;padding:.6rem .5rem}.article-footer{flex-direction:column;align-items:flex-start;gap:.875rem;margin-top:2.25rem;padding-top:1.5rem}.footer-inner{padding:1.25rem max(var(--spacing),env(safe-area-inset-right))max(1.25rem,env(safe-area-inset-bottom))max(var(--spacing),env(safe-area-inset-left));flex-direction:column;align-items:flex-start;gap:.75rem}.footer-links{gap:1rem}}.footer-back{color:var(--color-accent);font-weight:500;text-decoration:none}.footer-back:hover{text-decoration:underline}.about-header{text-align:center;padding:calc(var(--spacing)*2)0 calc(var(--spacing)*3)}.about-avatar{width:96px;height:96px;margin-bottom:var(--spacing);border-radius:50%}.about-header h1{margin-bottom:.25rem;font-size:1.5rem}.about-header p{color:var(--color-text-secondary);margin-bottom:var(--spacing)}.about-social{justify-content:center;gap:var(--spacing);display:flex}.about-section{margin-top:calc(var(--spacing)*2)}.about-section h2{margin-bottom:var(--spacing);font-size:1.25rem}.about-content{font-size:.9375rem;line-height:1.8}.about-content p{margin-bottom:.75rem}.about-content p:last-child{margin-bottom:0}.about-content ul,.about-content ol{margin-bottom:.75rem;padding-left:1.5rem}.about-content a{color:var(--color-accent);text-decoration:underline}.skills-grid{gap:var(--spacing);display:grid}.skill-card{border:1px solid var(--color-border);border-radius:var(--radius);padding:var(--spacing)}.skill-card h3{margin-bottom:.5rem;font-size:1rem}.skill-card p{color:var(--color-text-secondary);margin-bottom:.75rem;font-size:.875rem}.skill-tags{flex-wrap:wrap;gap:.5rem;display:flex}.skill-tags span{background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:999px;padding:.125rem .5rem;font-size:.75rem}.page-404{text-align:center;padding:calc(var(--spacing)*4)0}.page-404 h1{margin-bottom:var(--spacing);font-size:4rem;font-weight:700}.page-404 p{color:var(--color-text-secondary);margin-bottom:calc(var(--spacing)*1.5)}.page-work{max-width:920px;margin:0 auto}.work-hero{border-bottom:1px solid var(--color-border);margin-bottom:calc(var(--spacing)*1.5);padding:clamp(1.25rem,3vw,2rem) 0 clamp(1.5rem,3vw,2.25rem)}.contribution-heatmap{width:min(100%,720px);margin-bottom:clamp(1.25rem,3vw,2rem);margin-left:auto;margin-right:auto}.heatmap-grid{grid-template-rows:repeat(7,1fr);grid-auto-columns:minmax(0,1fr);grid-auto-flow:column;gap:clamp(.2rem,.65vw,.4rem);width:100%;display:grid}.heatmap-cell{aspect-ratio:1;background:var(--heatmap-empty);border-radius:3px;min-width:0;position:relative;overflow:hidden}.heatmap-pulse{border-radius:inherit;background:var(--heatmap-pulse);opacity:0;mix-blend-mode:normal;pointer-events:none;will-change:opacity,transform;animation:6.4s ease-in-out infinite heatmap-pulse;position:absolute;inset:0;transform:scale(.72)}.heatmap-pulse-forward{animation-delay:var(--heatmap-forward-delay)}.heatmap-pulse-backward{animation-delay:var(--heatmap-backward-delay)}.heatmap-level-1{background:var(--heatmap-1)}.heatmap-level-2{background:var(--heatmap-2)}.heatmap-level-3{background:var(--heatmap-3)}.heatmap-level-4{background:var(--heatmap-4)}@keyframes heatmap-pulse{0%,5%,to{opacity:0;transform:scale(.76)}9%{opacity:.72;transform:scale(1)}14%{opacity:0;transform:scale(.9)}}@media (prefers-reduced-motion:reduce){.heatmap-pulse{opacity:0;animation:none;transform:none}}.work-hero-kicker,.project-hero-kicker{color:var(--color-accent);font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;margin-bottom:1rem;font-size:.6875rem}.work-hero h1{letter-spacing:-.04em;text-wrap:balance;max-width:12ch;margin-bottom:1.25rem;font-size:clamp(2.5rem,8vw,5.25rem);line-height:.98}.work-hero p{max-width:48ch;color:var(--color-text-secondary);text-align:center;margin-left:auto;margin-right:auto;font-size:1.05rem;line-height:1.7}.page-project{max-width:920px;margin:0 auto;padding-bottom:clamp(3rem,8vw,7rem)}.page-project .breadcrumb{color:var(--color-text-secondary);align-items:center;gap:.625rem;padding:.5rem 0;font-size:.75rem;display:flex}.page-project .breadcrumb a{color:var(--color-accent)}.page-project .breadcrumb span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.project-hero{border-bottom:1px solid var(--color-border);padding:clamp(2.5rem,8vw,5rem) 0 clamp(2.25rem,6vw,4rem)}.project-hero h1{letter-spacing:-.04em;text-wrap:balance;max-width:15ch;margin-bottom:1.5rem;font-size:clamp(2.5rem,8vw,5.5rem);line-height:.98}.project-hero p{max-width:58ch;color:var(--color-text-secondary);font-size:clamp(1.05rem,2vw,1.25rem);line-height:1.65}.project-hero-meta{flex-wrap:wrap;align-items:center;gap:1rem;margin-top:2rem;font-size:.8125rem;display:flex}.project-hero-meta a{border:1px solid var(--color-accent);min-height:2.5rem;color:var(--color-accent);border-radius:999px;align-items:center;padding:.5rem .875rem;font-weight:600;display:inline-flex}.project-hero-meta a:hover{background:var(--color-accent);color:var(--color-bg)}.project-hero-meta span{color:var(--color-text-secondary)}.project-content{max-width:720px;margin:clamp(2.5rem,7vw,5rem) auto 0;font-size:1.05rem}.project-article-page .article-top-meta a{color:var(--color-accent);font-weight:600}.project-article-header{margin-bottom:1.5rem}.project-article-header .project-hero-kicker{margin-bottom:.875rem}.project-article-page .article-content{max-width:720px}.project-content>div[data-theme-style]{max-width:none}.project-content h2{margin-top:3.5rem}.project-content h2:first-child{margin-top:0}.project-content pre{margin-left:-1rem;margin-right:-1rem}@media (max-width:640px){.project-card{aspect-ratio:auto;min-height:250px}.work-hero h1,.project-hero h1{max-width:10ch}.project-content pre{margin-left:0;margin-right:0}}.settings-page{max-width:800px;margin:0 auto}.settings-header{margin-bottom:calc(var(--spacing)*2)}.settings-header h1{margin-bottom:.25rem;font-size:1.5rem}.settings-header p{color:var(--color-text-secondary);font-size:.875rem}.settings-tabs{border-bottom:1px solid var(--color-border);margin-bottom:calc(var(--spacing)*2);gap:.25rem;display:flex;overflow-x:auto}.settings-tab{color:var(--color-text-secondary);white-space:nowrap;border-bottom:2px solid #0000;padding:.625rem 1rem;font-size:.875rem;transition:all .2s}.settings-tab:hover{color:var(--color-text)}.settings-tab.active{color:var(--color-accent);border-bottom-color:var(--color-accent)}.settings-section{margin-bottom:calc(var(--spacing)*2)}.settings-section h2{margin-bottom:var(--spacing);font-size:1.25rem}.settings-section h3{margin-top:calc(var(--spacing)*1.5);margin-bottom:var(--spacing);font-size:1rem}.form-group{margin-bottom:var(--spacing)}.form-group label{margin-bottom:.375rem;font-size:.875rem;font-weight:500;display:block}.form-group input[type=text],.form-group input[type=url],.form-group input[type=email],.form-group textarea,.form-group select{border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-bg);width:100%;color:var(--color-text);padding:.625rem .875rem;font-family:inherit;font-size:.875rem;transition:border-color .2s}.form-group input:focus,.form-group textarea:focus,.form-group select:focus{border-color:var(--color-accent);outline:none}.form-group textarea{resize:vertical;min-height:80px}.form-row{gap:var(--spacing);grid-template-columns:1fr 1fr;display:grid}@media (max-width:640px){.form-row{grid-template-columns:1fr}}.form-hint{color:var(--color-text-secondary);margin-bottom:var(--spacing);font-size:.875rem}.form-check{align-items:center;gap:.5rem;margin-bottom:.5rem;display:flex}.form-check input[type=checkbox]{width:16px;height:16px;accent-color:var(--color-accent)}.form-check label{cursor:pointer;font-size:.875rem}.form-check code{font-family:var(--font-mono);background:var(--color-bg-secondary);border-radius:4px;padding:.125rem .375rem;font-size:.8125rem}.input-with-preview{flex-direction:column;gap:.375rem;display:flex}.input-with-preview input{border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-bg);width:100%;color:var(--color-text);padding:.625rem .875rem;font-size:.875rem;transition:border-color .2s}.input-with-preview input:focus{border-color:var(--color-accent);outline:none}.input-preview{color:var(--color-text-secondary);font-size:.75rem}.input-preview strong{color:var(--color-text);font-weight:500}.social-row{align-items:flex-end}.social-item{margin-bottom:var(--spacing);align-items:flex-end;gap:.75rem;display:flex}.social-fields{gap:var(--spacing);flex:1;grid-template-columns:1fr 2fr;display:grid}.social-fields .form-group{margin-bottom:0}.social-delete{border-radius:var(--radius);width:36px;height:36px;color:var(--color-text-secondary);cursor:pointer;flex-shrink:0;justify-content:center;align-items:center;margin-bottom:0;transition:all .2s;display:inline-flex}.social-delete:hover{color:#dc2626;background:#dc26261a}.settings-footer{align-items:center;gap:var(--spacing);padding-top:var(--spacing);border-top:1px solid var(--color-border);display:flex}.settings-message{font-size:.875rem}.settings-message.success{color:#16a34a}.settings-message.error{color:#dc2626}.style-options{grid-template-columns:1fr 1fr;gap:.75rem;margin-top:.5rem;display:grid}@media (max-width:640px){.style-options{grid-template-columns:1fr}}.style-option{border:1px solid var(--color-border);border-radius:var(--radius);cursor:pointer;padding:.75rem 1rem;transition:all .2s}.style-option:hover{border-color:var(--color-accent)}.style-option.active{border-color:var(--color-accent);background:#2563eb0d}[data-theme=dark] .style-option.active{background:#60a5fa1a}.style-option-header{justify-content:space-between;align-items:center;margin-bottom:.25rem;display:flex}.style-option-name{font-size:.875rem;font-weight:600}.style-option-check{color:var(--color-accent);font-weight:600}.style-option-desc{color:var(--color-text-secondary);margin:0;font-size:.75rem;line-height:1.4}.style-preview{border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-bg);margin-top:1rem;padding:1rem}.style-preview-header{color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em;margin-bottom:.75rem;font-size:.75rem}.style-preview-content{font-size:.875rem;line-height:1.6}.style-preview-content h3{margin-bottom:.5rem;font-size:1.125rem}.style-preview-content p{margin-bottom:.75rem}.style-preview-content code{font-family:var(--font-mono);background:var(--color-bg-secondary);border-radius:4px;padding:.125em .375em;font-size:.85em}.style-preview-content pre{background:var(--color-bg-secondary);border-radius:var(--radius);margin-bottom:.75rem;padding:.75rem;overflow-x:auto}.style-preview-content pre code{background:0 0;padding:0}
