.resume-root{--canvas: #ffffff;--canvas-subtle: #f6f8fa;--canvas-inset: #f6f8fa;--border: #d1d9e0;--border-muted: #d8dee4;--fg: #1f2328;--fg-muted: #59636e;--fg-subtle: #818b98;--accent: #0969da;--accent-fg: #ffffff;--accent-subtle: #ddf4ff;--success: #1a7f37;--success-subtle: #dafbe1;--attention: #9a6700;--done: #8250df;--btn-bg: #f6f8fa;--btn-border: rgba(31,35,40,.15);--btn-hover: #eef1f4;--shadow: 0 1px 0 rgba(31,35,40,.04);--shadow-md: 0 3px 6px rgba(140,149,159,.15);--g0: #ebedf0;--g1: #9be9a8;--g2: #40c463;--g3: #30a14e;--g4: #216e39;--mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif}.resume-root[data-theme=dark]{--canvas: #0d1117;--canvas-subtle: #161b22;--canvas-inset: #010409;--border: #2f3742;--border-muted: #21262d;--fg: #e6edf3;--fg-muted: #9198a1;--fg-subtle: #6e7681;--accent: #4493f8;--accent-fg: #ffffff;--accent-subtle: #388bfd1a;--success: #3fb950;--success-subtle: #2ea04326;--attention: #d29922;--done: #ab7df8;--btn-bg: #21262d;--btn-border: #3d444db3;--btn-hover: #30363d;--shadow: 0 0 transparent;--shadow-md: 0 3px 6px rgba(1,4,9,.5);--g0: #161b22;--g1: #0e4429;--g2: #006d32;--g3: #26a641;--g4: #39d353}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:#f6f8fa}.resume-root{font-family:var(--sans);background:var(--canvas);color:var(--fg);min-height:100vh;font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased;transition:background .2s ease,color .2s ease}.resume-root a{color:var(--accent);text-decoration:none}.resume-root a:hover{text-decoration:underline}.gh-topbar{position:sticky;top:0;z-index:50;display:flex;align-items:center;gap:16px;padding:12px 24px;background:var(--canvas-subtle);border-bottom:1px solid var(--border);backdrop-filter:saturate(180%) blur(6px)}.gh-topbar .brand{display:flex;align-items:center;gap:10px;font-weight:600}.gh-topbar .brand .mono{font-family:var(--mono);color:var(--fg-muted);font-weight:400}.gh-topbar .spacer{flex:1}.seg{display:inline-flex;padding:3px;gap:2px;background:var(--canvas-inset);border:1px solid var(--border);border-radius:8px}.seg button{font-family:var(--sans);font-size:12.5px;font-weight:500;border:0;background:transparent;color:var(--fg-muted);padding:5px 12px;border-radius:6px;cursor:pointer;transition:all .15s ease;white-space:nowrap}.seg button:hover{color:var(--fg)}.seg button[data-active=true]{background:var(--canvas);color:var(--fg);box-shadow:var(--shadow-md);border:1px solid var(--border-muted);padding:4px 11px}.resume-root[data-theme=dark] .seg button[data-active=true]{background:var(--btn-hover)}.btn{display:inline-flex;align-items:center;gap:6px;font-family:var(--sans);font-size:12.5px;font-weight:500;padding:5px 12px;border-radius:6px;cursor:pointer;background:var(--btn-bg);color:var(--fg);border:1px solid var(--btn-border);transition:background .12s ease}.btn:hover{background:var(--btn-hover);text-decoration:none}.btn.primary{background:var(--success);border-color:#1f232826;color:#fff}.btn.primary:hover{background:#1c8139;filter:brightness(1.05)}.btn.icon{padding:6px}.gh-wrap{max-width:1280px;margin:0 auto;padding:24px 24px 80px}.gh-grid{display:grid;grid-template-columns:296px 1fr;gap:24px}@media(max-width:900px){.gh-grid{grid-template-columns:1fr}}.label{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:500;padding:1px 9px;border-radius:999px;border:1px solid var(--border);color:var(--fg-muted);background:transparent}.label.green{color:var(--success);border-color:var(--success)}.label.blue{color:var(--accent);border-color:var(--accent)}.dot{width:10px;height:10px;border-radius:50%;display:inline-block;flex:none}.card{background:var(--canvas);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow)}.muted{color:var(--fg-muted)}.mono{font-family:var(--mono)}.divider{height:1px;background:var(--border);border:0;margin:16px 0}.counter{font-size:12px;font-weight:500;color:var(--fg-muted);background:var(--canvas-inset);border:1px solid var(--border-muted);border-radius:999px;padding:0 7px;min-width:20px;text-align:center}.topbar-nav{display:flex;align-items:center;gap:2px}.topbar-nav a{font-size:13px;font-weight:500;color:var(--fg-muted);padding:6px 10px;border-radius:6px}.topbar-nav a:hover{color:var(--fg);background:var(--btn-hover);text-decoration:none}.topbar-nav a.active{color:var(--fg)}.gh-topbar .brand{white-space:nowrap;min-width:0}@media(max-width:600px){.gh-topbar{padding-left:14px;padding-right:14px;gap:8px}.gh-topbar .brand{gap:7px}.gh-topbar .brand .mono{display:none}.topbar-nav{gap:0}.topbar-nav a{padding:6px 8px}}.blog-wrap{max-width:1012px}.blog-index-head{display:flex;align-items:center;gap:8px;margin-bottom:16px}.blog-index-head h1{margin:0;font-size:20px;font-weight:600}.blog-index-head>svg{color:var(--fg-muted)}.file-list{overflow:hidden}.file-list-head{display:flex;align-items:center;gap:6px;padding:12px 16px;border-bottom:1px solid var(--border);font-size:14px;background:var(--canvas-subtle)}.file-list-head>svg{color:var(--fg-muted)}.file-list-sep{color:var(--fg-muted)}.file-list-dir{font-weight:600}.file-empty{padding:32px 16px;text-align:center;color:var(--fg-muted)}.file-row{display:flex;align-items:center;gap:14px;padding:14px 16px;border-bottom:1px solid var(--border-muted);color:var(--fg)}.file-row:last-child{border-bottom:0}.file-row:hover{background:var(--canvas-subtle);text-decoration:none}.file-row-icon{color:var(--fg-muted);flex:none;display:flex}.file-row-main{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}.file-row-title{font-weight:600;font-size:15px;color:var(--accent)}.file-row:hover .file-row-title{text-decoration:underline}.file-row-sub{display:flex;align-items:center;flex-wrap:wrap;gap:8px;font-size:12px;color:var(--fg-muted)}.file-row-sep{color:var(--fg-subtle)}.file-row-date{flex:none;font-size:12px;color:var(--fg-muted);white-space:nowrap}@media(max-width:600px){.file-row-date{display:none}}.topic-tag{display:inline-flex;align-items:center;gap:3px;font-size:11px;line-height:1.7;padding:0 8px;border-radius:999px;color:var(--accent);background:var(--accent-subtle)}.post-layout{display:grid;grid-template-columns:minmax(0,768px) 200px;gap:40px;justify-content:center;align-items:start}.post-layout.no-toc{grid-template-columns:minmax(0,768px)}.post-main{min-width:0}.back-link{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--fg-muted);margin-bottom:12px}.back-link:hover{color:var(--accent);text-decoration:none}.post-title{font-size:32px;font-weight:700;letter-spacing:-.01em;line-height:1.2;margin:4px 0 10px}.post-meta{display:flex;align-items:center;flex-wrap:wrap;gap:8px;font-size:13px;color:var(--fg-muted);margin-bottom:20px}.file-view{overflow:hidden}.file-toolbar{display:flex;align-items:center;gap:12px;padding:8px 12px 8px 16px;background:var(--canvas-subtle);border-bottom:1px solid var(--border)}.file-toolbar-name{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--fg-muted)}.file-toolbar-name>svg{color:var(--fg-muted)}.file-tabs button{font-size:12px;padding:4px 10px}.raw-source{margin:0;padding:16px 20px;overflow:auto;tab-size:2;font-family:var(--mono);font-size:12.5px;line-height:1.6;color:var(--fg);background:var(--canvas)}@media(max-width:1040px){.post-layout,.post-layout.no-toc{grid-template-columns:minmax(0,1fr);max-width:768px;margin:0 auto}.toc{display:none}}@media(max-width:600px){.post-title{font-size:25px}}.toc{position:sticky;top:76px;align-self:start;padding-top:4px;font-size:13px;max-height:calc(100vh - 92px);overflow-y:auto;overscroll-behavior:contain}.toc-head{display:flex;align-items:center;gap:6px;margin-bottom:10px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--fg-muted)}.toc-head>svg{color:var(--fg-muted)}.toc nav{display:flex;flex-direction:column;border-left:1px solid var(--border)}.toc-link{color:var(--fg-muted);padding:4px 0 4px 14px;margin-left:-1px;border-left:2px solid transparent;line-height:1.35}.toc-link:hover{color:var(--accent);text-decoration:none;border-left-color:var(--border)}.toc-link[data-depth="3"]{padding-left:26px;font-size:12px}.blog-404{max-width:520px;margin:48px auto;padding:40px 32px;text-align:center}.blog-404-code{font-size:56px;font-weight:700;color:var(--fg-muted);line-height:1}.blog-404 p{margin:12px 0 20px}.resume-root .markdown-body{font-size:16px;line-height:1.65;color:var(--fg);word-wrap:break-word}.file-view .markdown-body{padding:24px 28px}.resume-root .markdown-body>*:first-child{margin-top:0}.resume-root .markdown-body>*:last-child{margin-bottom:0}.resume-root .markdown-body h1,.resume-root .markdown-body h2,.resume-root .markdown-body h3,.resume-root .markdown-body h4,.resume-root .markdown-body h5,.resume-root .markdown-body h6{margin:24px 0 16px;font-weight:600;line-height:1.25;scroll-margin-top:80px}.resume-root .markdown-body h1{font-size:1.9em;padding-bottom:.3em;border-bottom:1px solid var(--border-muted)}.resume-root .markdown-body h2{font-size:1.5em;padding-bottom:.3em;border-bottom:1px solid var(--border-muted)}.resume-root .markdown-body h3{font-size:1.25em}.resume-root .markdown-body h4{font-size:1em}.resume-root .markdown-body h5{font-size:.875em}.resume-root .markdown-body p,.resume-root .markdown-body blockquote,.resume-root .markdown-body ul,.resume-root .markdown-body ol,.resume-root .markdown-body table,.resume-root .markdown-body pre{margin:0 0 16px}.resume-root .markdown-body ul,.resume-root .markdown-body ol{padding-left:2em}.resume-root .markdown-body li{margin:.25em 0}.resume-root .markdown-body li>p{margin-bottom:.5em}.resume-root .markdown-body blockquote{padding:0 1em;color:var(--fg-muted);border-left:.25em solid var(--border)}.resume-root .markdown-body code{font-family:var(--mono);font-size:85%;padding:.2em .4em;background:var(--canvas-subtle);border-radius:6px}.resume-root .markdown-body pre{padding:16px;overflow:auto;line-height:1.45;background:var(--canvas-subtle);border:1px solid var(--border-muted);border-radius:8px}.resume-root .markdown-body pre code{background:transparent;padding:0;font-size:90%;border-radius:0}.resume-root .markdown-body a{color:var(--accent)}.resume-root .markdown-body a:hover{text-decoration:underline}.resume-root .markdown-body img{max-width:100%;box-sizing:border-box;border-radius:8px}.resume-root .markdown-body hr{height:.25em;padding:0;margin:24px 0;background:var(--border);border:0}.resume-root .markdown-body table{display:block;width:max-content;max-width:100%;overflow:auto;border-collapse:collapse}.resume-root .markdown-body th,.resume-root .markdown-body td{padding:6px 13px;border:1px solid var(--border)}.resume-root .markdown-body th{font-weight:600;background:var(--canvas-subtle)}.resume-root .markdown-body tr:nth-child(2n){background:var(--canvas-subtle)}.resume-root .markdown-body .anchor{float:left;margin-left:-20px;padding-right:4px;line-height:1}.resume-root .markdown-body .anchor:before{content:"";display:inline-block;width:16px;height:16px;vertical-align:middle;background-color:var(--fg-muted);opacity:0;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M7.775 3.275a.75.75 0 0 0 1.06 1.06l1.25-1.25a2 2 0 1 1 2.83 2.83l-2.5 2.5a2 2 0 0 1-2.83 0 .75.75 0 0 0-1.06 1.06 3.5 3.5 0 0 0 4.95 0l2.5-2.5a3.5 3.5 0 0 0-4.95-4.95l-1.25 1.25Zm-4.69 9.64a2 2 0 0 1 0-2.83l2.5-2.5a2 2 0 0 1 2.83 0 .75.75 0 0 0 1.06-1.06 3.5 3.5 0 0 0-4.95 0l-2.5 2.5a3.5 3.5 0 0 0 4.95 4.95l1.25-1.25a.75.75 0 0 0-1.06-1.06l-1.25 1.25a2 2 0 0 1-2.83 0Z'/%3E%3C/svg%3E") center / contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M7.775 3.275a.75.75 0 0 0 1.06 1.06l1.25-1.25a2 2 0 1 1 2.83 2.83l-2.5 2.5a2 2 0 0 1-2.83 0 .75.75 0 0 0-1.06 1.06 3.5 3.5 0 0 0 4.95 0l2.5-2.5a3.5 3.5 0 0 0-4.95-4.95l-1.25 1.25Zm-4.69 9.64a2 2 0 0 1 0-2.83l2.5-2.5a2 2 0 0 1 2.83 0 .75.75 0 0 0 1.06-1.06 3.5 3.5 0 0 0-4.95 0l-2.5 2.5a3.5 3.5 0 0 0 4.95 4.95l1.25-1.25a.75.75 0 0 0-1.06-1.06l-1.25 1.25a2 2 0 0 1-2.83 0Z'/%3E%3C/svg%3E") center / contain no-repeat}.resume-root .markdown-body h1:hover .anchor:before,.resume-root .markdown-body h2:hover .anchor:before,.resume-root .markdown-body h3:hover .anchor:before,.resume-root .markdown-body h4:hover .anchor:before{opacity:1}.resume-root{--code-kw:#cf222e;--code-str:#0a3069;--code-num:#0550ae;--code-fn:#8250df;--code-var:#953800;--code-tag:#116329;--code-comment:#6e7781;--code-meta:#116329}.resume-root[data-theme=dark]{--code-kw:#ff7b72;--code-str:#a5d6ff;--code-num:#79c0ff;--code-fn:#d2a8ff;--code-var:#ffa657;--code-tag:#7ee787;--code-comment:#8b949e;--code-meta:#7ee787}.markdown-body .hljs-comment,.markdown-body .hljs-quote{color:var(--code-comment);font-style:italic}.markdown-body .hljs-keyword,.markdown-body .hljs-selector-tag,.markdown-body .hljs-doctag,.markdown-body .hljs-type,.markdown-body .hljs-variable.language_{color:var(--code-kw)}.markdown-body .hljs-string,.markdown-body .hljs-regexp,.markdown-body .hljs-addition,.markdown-body .hljs-meta .hljs-string{color:var(--code-str)}.markdown-body .hljs-number,.markdown-body .hljs-literal{color:var(--code-num)}.markdown-body .hljs-title,.markdown-body .hljs-title.function_,.markdown-body .hljs-title.class_,.markdown-body .hljs-section{color:var(--code-fn);font-weight:600}.markdown-body .hljs-variable,.markdown-body .hljs-template-variable,.markdown-body .hljs-attr,.markdown-body .hljs-attribute,.markdown-body .hljs-property,.markdown-body .hljs-params,.markdown-body .hljs-built_in{color:var(--code-var)}.markdown-body .hljs-tag,.markdown-body .hljs-name,.markdown-body .hljs-selector-id,.markdown-body .hljs-selector-class,.markdown-body .hljs-symbol,.markdown-body .hljs-bullet,.markdown-body .hljs-link{color:var(--code-tag)}.markdown-body .hljs-meta{color:var(--code-meta)}.markdown-body .hljs-emphasis{font-style:italic}.markdown-body .hljs-strong{font-weight:700}.resume-root .markdown-body pre.mermaid{position:relative;margin:0 0 16px;padding:16px;overflow:auto;background:var(--canvas-subtle);border:1px solid var(--border-muted);border-radius:8px;font-family:var(--mono);font-size:85%;line-height:1.45}.resume-root .markdown-body pre.mermaid[data-processed=true]{padding:8px;background:transparent;border:0;text-align:center;cursor:zoom-in}.resume-root .markdown-body pre.mermaid svg{max-width:100%;height:auto}.resume-root .markdown-body pre.mermaid[data-processed=true]:after{content:"Click to enlarge";position:absolute;top:8px;right:8px;font-family:var(--sans);font-size:11px;color:var(--fg-muted);background:var(--canvas-subtle);border:1px solid var(--border-muted);border-radius:999px;padding:2px 9px;opacity:.65;transition:opacity .12s;pointer-events:none}.resume-root .markdown-body pre.mermaid[data-processed=true]:hover:after{opacity:1}.resume-root .mermaid-lightbox{position:fixed;inset:0;z-index:200;display:flex;padding:64px 24px 24px;background:#010409b8;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.resume-root .mermaid-lightbox-bar{position:absolute;top:14px;right:18px;display:flex;align-items:center;gap:6px}.resume-root .mermaid-lightbox-bar .btn{background:var(--canvas)}.resume-root .mermaid-lightbox-scroll{flex:1;overflow:auto;cursor:grab;background:var(--canvas);border:1px solid var(--border);border-radius:12px}.resume-root .mermaid-lightbox-scroll:active{cursor:grabbing}.resume-root .mermaid-lightbox-diagram{min-width:100%;padding:24px;box-sizing:border-box}.resume-root .mermaid-lightbox-diagram svg{width:100%;height:auto;max-width:none;display:block}
