@import"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&family=Noto+Sans+SC:wght@400;500&family=Noto+Serif+SC:wght@400;500&display=swap";@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(/fonts/fa-solid-900.woff2) format("woff2")}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(/fonts/fa-regular-400.woff2) format("woff2")}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(/fonts/fa-brands-400.woff2) format("woff2")}.fa,.fas,.fa-solid,.far,.fa-regular,.fab,.fa-brands{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-solid,.fas{font-family:"Font Awesome 6 Free";font-weight:900}.fa-regular,.far{font-family:"Font Awesome 6 Free";font-weight:400}.fa-brands,.fab{font-family:"Font Awesome 6 Brands";font-weight:400}.fa-fw{text-align:center;width:1.25em}.fa-bars:before{content:""}.fa-sun:before{content:""}.fa-moon:before{content:""}.fa-adjust:before{content:""}.fa-calendar:before{content:""}.fa-clock:before{content:""}.fa-tag:before{content:""}.fa-github:before{content:""}.fa-rss:before{content:""}.fa-link:before{content:""}.fa-external-link-alt:before{content:""}:root{--font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";--font-mono: "JetBrains Mono", "Fira Code", ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;--font-cjk-sans: "Noto Sans SC", var(--font-body);--font-cjk-serif: "Noto Serif SC", Georgia, serif}:root{--fs-xs: .75rem;--fs-sm: .875rem;--fs-base: 1rem;--fs-md: 1.125rem;--fs-lg: 1.375rem;--fs-xl: 1.75rem;--fs-2xl: 2.25rem;--fs-3xl: 2.875rem;--lh-tight: 1.2;--lh-snug: 1.4;--lh-normal: 1.6;--lh-relaxed:1.75;--lh-cjk: 1.9;--measure: 65ch}:root,[data-theme=light]{--bg: #ffffff;--bg-secondary: #f5f5f5;--bg-code: #f0f0f0;--fg: #333333;--fg-2: #555555;--fg-3: #888888;--border: #e5e5e5;--border-strong:#cccccc;--accent: #1a6fcf;--accent-hover: #1358a8;--accent-soft: #e8f0fb;--tag-bg: #eeeeee;--tag-fg: #444444;color-scheme:light}[data-theme=dark]{--bg: #212121;--bg-secondary: #2a2a2a;--bg-code: #2d2d2d;--fg: #dadada;--fg-2: #bbbbbb;--fg-3: #888888;--border: #424242;--border-strong:#555555;--accent: #42a5f5;--accent-hover: #64b5f6;--accent-soft: #1a2a3d;--tag-bg: #424242;--tag-fg: #dadada;color-scheme:dark}@media (prefers-color-scheme: dark){:root:not([data-theme]){--bg: #212121;--bg-secondary: #2a2a2a;--bg-code: #2d2d2d;--fg: #dadada;--fg-2: #bbbbbb;--fg-3: #888888;--border: #424242;--border-strong: #555555;--accent: #42a5f5;--accent-hover: #64b5f6;--accent-soft: #1a2a3d;--tag-bg: #424242;--tag-fg: #dadada;color-scheme:dark}}.t-h1{font-size:var(--fs-2xl);font-weight:700;line-height:var(--lh-tight);color:var(--fg)}.t-h2{font-size:var(--fs-xl);font-weight:600;line-height:var(--lh-snug);color:var(--fg)}.t-h3{font-size:var(--fs-lg);font-weight:600;line-height:var(--lh-snug);color:var(--fg)}.t-body{font-size:var(--fs-md);line-height:var(--lh-relaxed);color:var(--fg-2);max-width:var(--measure)}.t-small{font-size:var(--fs-sm);line-height:var(--lh-normal);color:var(--fg-3)}.t-meta{font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.02em;color:var(--fg-3)}.t-label{font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--fg-3)}a{color:var(--accent);text-decoration:none;word-wrap:break-word}a:hover,a:focus{text-decoration:underline;color:var(--accent-hover)}code{font-family:var(--font-mono);font-size:.875em;background:var(--bg-code);padding:.15em .35em;border-radius:3px;color:var(--fg)}:lang(zh){line-height:var(--lh-cjk)}*,*:before,*:after{box-sizing:border-box}html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0;font-family:var(--font-body);font-size:var(--fs-base);background:var(--bg);color:var(--fg);line-height:var(--lh-normal);-webkit-font-smoothing:antialiased}h1,h2,h3,h4,h5,h6{margin:0;color:var(--fg)}p{margin:0}img{border-style:none;max-width:100%}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button{cursor:pointer}hr{box-sizing:content-box;height:0;overflow:visible;border:none;border-top:1px solid var(--border);margin:0}:root{--s-1: .25rem;--s-2: .5rem;--s-3: .75rem;--s-4: 1rem;--s-5: 1.5rem;--s-6: 2rem;--s-7: 3rem;--s-8: 4rem;--s-9: 6rem;--container-max: 42rem;--container-wide: 56rem;--gutter: 1.5rem;--r-sm: 3px;--r-md: 6px;--r-pill: 999px;--ease: cubic-bezier(.2, 0, 0, 1);--dur: .15s;--shadow-card: 0 2px 8px rgba(0, 0, 0, .08), 0 1px 2px rgba(0, 0, 0, .06);--shadow-card-dark: 0 2px 8px rgba(0, 0, 0, .35), 0 1px 2px rgba(0, 0, 0, .2)}.container{max-width:var(--container-max);margin:0 auto;padding:0 var(--gutter)}.container-wide{max-width:var(--container-wide);margin:0 auto;padding:0 var(--gutter)}.navigation{background:var(--bg);border-bottom:1px solid var(--border)}.navigation .container{display:flex;align-items:center;justify-content:space-between;height:3.5rem;gap:var(--s-4)}.navigation-title{font-size:var(--fs-base);font-weight:700;color:var(--fg);text-decoration:none;white-space:nowrap;flex-shrink:0}.navigation-title:hover{text-decoration:none;color:var(--fg)}.navigation-list{display:flex;align-items:center;gap:var(--s-1);list-style:none;margin:0;padding:0}.navigation-item{display:flex;align-items:center}.navigation-link{font-size:var(--fs-sm);color:var(--fg-2);text-decoration:none;padding:var(--s-1) var(--s-3);border-radius:var(--r-sm);transition:color var(--dur) var(--ease),background var(--dur) var(--ease)}.navigation-link:hover,.navigation-link:focus{color:var(--fg);text-decoration:none}.navigation-link[aria-current=page]{color:var(--fg);font-weight:500}.menu-separator{color:var(--border-strong);padding:0 var(--s-2);font-size:var(--fs-sm);-webkit-user-select:none;user-select:none}.nav-toggle{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:var(--r-sm);border:none;background:transparent;color:var(--fg-2);font-size:var(--fs-sm);cursor:pointer;transition:color var(--dur) var(--ease),background var(--dur) var(--ease)}.nav-toggle:hover{color:var(--fg);background:var(--bg-secondary)}.index-heading{font-size:var(--fs-sm);font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--fg-3);margin-bottom:var(--s-5);padding-bottom:var(--s-3);border-bottom:1px solid var(--border)}.sandbox-list{display:flex;flex-direction:column;gap:0;border-top:1px solid var(--border)}.sandbox-item{display:grid;grid-template-columns:1fr auto;grid-template-rows:auto auto;gap:var(--s-1) var(--s-4);padding:var(--s-5) var(--s-2);border-bottom:1px solid var(--border);text-decoration:none;color:inherit;transition:background var(--dur) var(--ease);border-radius:var(--r-sm)}.sandbox-item:hover{background:var(--bg-secondary);text-decoration:none;color:inherit}.sandbox-item:hover .sandbox-title{color:var(--accent)}.sandbox-title{font-size:var(--fs-md);font-weight:600;color:var(--fg);transition:color var(--dur) var(--ease);grid-column:1;grid-row:1;line-height:var(--lh-snug)}.sandbox-desc{font-size:var(--fs-sm);color:var(--fg-3);line-height:var(--lh-normal);grid-column:1;grid-row:2;margin-top:var(--s-1)}.sandbox-meta{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--fg-3);white-space:nowrap;grid-column:2;grid-row:1;align-self:start;padding-top:.2rem}.tag{display:inline-block;background:var(--tag-bg);color:var(--tag-fg);font-size:var(--fs-xs);padding:.2em .6em;border-radius:var(--r-sm);text-decoration:none;transition:background var(--dur) var(--ease)}.tag:hover{background:var(--border-strong);text-decoration:none;color:var(--tag-fg)}.tags{display:flex;flex-wrap:wrap;gap:var(--s-2);align-items:center}.post-meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-4);font-size:var(--fs-sm);color:var(--fg-3);margin-top:var(--s-3)}.post-meta .fa,.post-meta .fas{margin-right:.3em;font-size:.85em}.post-meta .separator{color:var(--border-strong)}.sandbox-header{padding:var(--s-7) 0 var(--s-5)}.sandbox-header .breadcrumb{font-size:var(--fs-sm);color:var(--fg-3);margin-bottom:var(--s-5);display:flex;align-items:center;gap:var(--s-2)}.sandbox-header h1{font-size:var(--fs-2xl);font-weight:700;line-height:var(--lh-tight)}.sandbox-frame{border:1px solid var(--border);border-radius:var(--r-md);overflow:hidden;margin:var(--s-6) 0}.sandbox-frame-caption{padding:var(--s-2) var(--s-4);background:var(--bg-secondary);border-top:1px solid var(--border);font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--fg-3);display:flex;justify-content:space-between;align-items:center}.sandbox-nav{display:flex;justify-content:space-between;gap:var(--s-4);padding:var(--s-6) 0;border-top:1px solid var(--border);margin-top:var(--s-6)}.sandbox-nav a{color:var(--fg-2);font-size:var(--fs-sm);text-decoration:none;display:flex;flex-direction:column;gap:var(--s-1)}.sandbox-nav a:hover{color:var(--accent);text-decoration:none}.sandbox-nav .nav-dir{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--fg-3)}.sandbox-nav .nav-title{font-weight:500;color:var(--fg)}.content{font-size:var(--fs-md);line-height:var(--lh-relaxed);color:var(--fg-2);max-width:var(--measure)}.content p+p{margin-top:var(--s-5)}.content h2{font-size:var(--fs-xl);font-weight:600;margin-top:var(--s-7);margin-bottom:var(--s-3)}.content h3{font-size:var(--fs-lg);font-weight:600;margin-top:var(--s-6);margin-bottom:var(--s-2)}.content blockquote{border-left:2px solid var(--border-strong);padding-left:var(--s-4);margin:var(--s-5) 0;color:var(--fg-3);font-style:italic}.footer{border-top:1px solid var(--border);padding:var(--s-6) 0 var(--s-7);margin-top:var(--s-9)}.footer .container{font-size:var(--fs-sm);color:var(--fg-3);text-align:center}.footer a{color:var(--accent)}.footer a:hover{text-decoration:underline}.btn{font-family:var(--font-mono);font-size:var(--fs-xs);font-weight:500;letter-spacing:.03em;padding:.4rem .9rem;border-radius:var(--r-sm);border:1px solid var(--border-strong);background:var(--bg-secondary);color:var(--fg);cursor:pointer;transition:background var(--dur) var(--ease),border-color var(--dur) var(--ease)}.btn:hover{background:var(--bg-code);border-color:var(--fg-3)}.btn:active{transform:translateY(1px)}.btn--primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn--primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.about-centered{text-align:center;padding:var(--s-9) 0 var(--s-7)}.about-centered h1{font-size:var(--fs-2xl);font-weight:700}.about-links{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--s-4);margin-top:var(--s-5);list-style:none;padding:0}.about-links a{color:var(--fg-2);font-size:var(--fs-sm)}.about-links a:hover{color:var(--accent);text-decoration:none}.about-links .fa{margin-right:.3em}.mt-0{margin-top:0}.mt-4{margin-top:var(--s-4)}.mt-5{margin-top:var(--s-5)}.mt-6{margin-top:var(--s-6)}.mt-7{margin-top:var(--s-7)}.flex{display:flex}.flex-wrap{flex-wrap:wrap}.gap-2{gap:var(--s-2)}.gap-3{gap:var(--s-3)}.gap-4{gap:var(--s-4)}.items-center{align-items:center}.text-muted{color:var(--fg-3)}
