.astro-route-announcer{position:absolute;left:0;top:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap;width:1px;height:1px}.nav-bar{position:sticky;top:0;z-index:50;background:var(--bg-canvas);border-bottom:1px solid var(--border-subtle);height:64px}.nav-inner{max-width:1200px;margin:0 auto;padding:0 var(--space-6);height:100%;display:flex;align-items:center;gap:var(--space-6)}.nav-brand{display:inline-flex;align-items:center;gap:10px;color:var(--ink-1);font-family:Fraunces,Georgia,serif;font-weight:600;font-size:22px;font-variation-settings:"opsz" 36;letter-spacing:-.01em;line-height:1;flex-shrink:0}.nav-brand:hover{color:var(--ink-1);text-decoration:none}.nav-brand-mark{display:inline-block;width:8px;height:8px;background:var(--accent);border-radius:1px;transform:translateY(-2px)}.nav-brand-text{display:inline-block}.nav-search{display:none;flex:1;max-width:400px;margin:0 auto;position:relative;height:36px}@media(min-width:1024px){.nav-search{display:block}}.nav-search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--ink-3);pointer-events:none}.nav-search-input{width:100%;height:100%;background:var(--bg-surface);border:1px solid var(--border-subtle);border-radius:var(--radius-md);padding:0 var(--space-3) 0 36px;color:var(--ink-1);font-family:inherit;font-size:var(--text-sm);transition:border-color var(--duration-fast) var(--ease-out)}.nav-search-input::placeholder{color:var(--ink-3)}.nav-search-input:disabled{cursor:text}.nav-search-input:focus{outline:none;border-color:var(--border-strong)}.nav-actions{margin-left:auto;display:flex;align-items:center;gap:var(--space-3);flex-shrink:0}@media(min-width:1024px){.nav-actions{margin-left:0}}.nav-github-cta{display:inline-flex;align-items:center;gap:8px;color:var(--ink-1);background:var(--bg-surface);border:1px solid var(--border-strong);font-size:var(--text-sm);font-weight:500;padding:8px 14px;border-radius:var(--radius-md);line-height:1.2;transition:background var(--duration-fast) var(--ease-out),border-color var(--duration-fast) var(--ease-out),color var(--duration-fast) var(--ease-out)}.nav-github-cta:hover{background:var(--bg-surface-2);border-color:var(--ink-2);color:var(--ink-1);text-decoration:none}.nav-github-cta svg{flex-shrink:0}.nav-write{display:inline-flex;align-items:center;background:var(--accent);color:#fff;padding:8px 16px;border-radius:var(--radius-md);font-weight:500;font-size:var(--text-sm);line-height:1.2;transition:background var(--duration-fast) var(--ease-out)}.nav-write:hover{background:var(--accent-hover);color:#fff;text-decoration:none}.nav-actions .theme-toggle{width:36px;height:36px}.nav-actions-skeleton{display:inline-block;width:64px;height:32px}.user-menu{position:relative}.user-menu-trigger{width:32px;height:32px;border-radius:var(--radius-full);overflow:hidden;padding:0;background:transparent;border:1px solid var(--border-subtle);cursor:pointer;transition:border-color var(--duration-fast) var(--ease-out),transform var(--duration-fast) var(--ease-out)}.user-menu-trigger:hover{border-color:var(--border-strong)}.user-menu-trigger:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.user-menu-avatar{width:32px;height:32px;border-radius:var(--radius-full);display:block;object-fit:cover}.user-menu-avatar-fallback{display:flex;align-items:center;justify-content:center;background:var(--accent-soft);color:var(--accent-ink);font-family:Fraunces,Georgia,serif;font-weight:600;font-size:16px;line-height:1;font-variation-settings:"opsz" 24}.user-menu-popover{position:absolute;top:calc(100% + 8px);right:0;min-width:220px;background:var(--bg-elevated);border:1px solid var(--border-subtle);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);padding:var(--space-2);z-index:60}.user-menu-name{padding:var(--space-2) var(--space-3) var(--space-1);font-size:var(--text-xs);color:var(--ink-3);text-transform:uppercase;letter-spacing:.04em}.user-menu-item{display:flex;align-items:center;gap:10px;padding:var(--space-2) var(--space-3);color:var(--ink-1);font-size:var(--text-sm);border-radius:var(--radius-sm);width:100%;text-align:left;text-decoration:none;transition:background var(--duration-fast) var(--ease-out)}.user-menu-item:hover{background:var(--bg-surface-2);color:var(--ink-1);text-decoration:none}.user-menu-item-button{background:none;border:none;font:inherit;cursor:pointer}.user-menu-divider{height:1px;background:var(--border-subtle);margin:var(--space-2) 0}.user-menu-form{margin:0}:root{color-scheme:light;--text-xs: 12px;--text-sm: 14px;--text-base: 16px;--text-lg: 18px;--text-xl: 22px;--text-2xl: 28px;--text-3xl: 36px;--text-4xl: 48px;--text-5xl: 64px;--leading-tight: 1.2;--leading-snug: 1.35;--leading-normal: 1.55;--leading-relaxed: 1.75;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--space-16: 64px;--space-20: 80px;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 14px;--radius-xl: 20px;--radius-full: 999px;--border-width: 1px;--ease-out: cubic-bezier(.2, .8, .2, 1);--ease-in-out: cubic-bezier(.4, 0, .2, 1);--duration-fast: .12s;--duration-base: .18s;--duration-slow: .28s;--bg-canvas: #faf6ee;--bg-surface: #ffffff;--bg-surface-2: #f4efe3;--bg-elevated: #ffffff;--ink-1: #1a1410;--ink-2: #4a3f33;--ink-3: #7a6f60;--ink-4: #b5a993;--border-subtle: #ede5d3;--border-strong: #d4c9b0;--accent: #b85c2c;--accent-hover: #9a4a22;--accent-soft: #fbe9dd;--accent-ink: #4a1f0e;--success: #4f7a3d;--warning: #b89020;--danger: #a8361f;--shadow-sm: 0 1px 2px 0 rgba(26, 20, 16, .04);--shadow-md: 0 4px 12px -2px rgba(26, 20, 16, .06), 0 2px 4px -2px rgba(26, 20, 16, .04);--shadow-lg: 0 12px 28px -8px rgba(26, 20, 16, .1), 0 4px 12px -4px rgba(26, 20, 16, .06)}:root[data-theme=dark]{color-scheme:dark;--bg-canvas: #14110d;--bg-surface: #1f1a14;--bg-surface-2: #2a231b;--bg-elevated: #2a231b;--ink-1: #f2ebdc;--ink-2: #c9bfa9;--ink-3: #8a7f6b;--ink-4: #54493b;--border-subtle: #2d261c;--border-strong: #4a3f30;--accent: #e68b5c;--accent-hover: #f0a37d;--accent-soft: #3a1f12;--accent-ink: #fbe9dd;--success: #8ab16b;--warning: #dcb94a;--danger: #d9684d;--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .25);--shadow-md: 0 4px 14px -2px rgba(0, 0, 0, .3), 0 2px 6px -2px rgba(0, 0, 0, .2);--shadow-lg: 0 16px 32px -10px rgba(0, 0, 0, .45), 0 8px 16px -6px rgba(0, 0, 0, .25)}:root,:root[data-theme=dark]{--bg: var(--bg-canvas);--surface: var(--bg-surface);--text: var(--ink-1);--muted: var(--ink-3);--border: var(--border-subtle);--brand: var(--accent);--brand-fg: var(--bg-canvas);--info-bg: var(--accent-soft);--info-fg: var(--accent-ink);--success-bg: color-mix(in srgb, var(--success) 14%, transparent);--error: var(--danger);--error-bg: color-mix(in srgb, var(--danger) 12%, transparent)}*,*:before,*:after{box-sizing:border-box}*{margin:0}html{scroll-behavior:smooth}:focus{outline:none}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:inherit}::selection{background:var(--accent-soft);color:var(--accent-ink)}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}body{line-height:var(--leading-normal);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}img,picture,video,canvas,svg{display:block;max-width:100%}input,button,textarea,select{font:inherit;color:inherit}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}#root,#__next{isolation:isolate}body{background:var(--bg-canvas);color:var(--ink-1);font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:var(--text-base);line-height:var(--leading-normal);font-feature-settings:"cv11","ss01";transition:background var(--duration-base) var(--ease-out),color var(--duration-base) var(--ease-out)}h1,h2,h3,h4,h5,h6{font-family:Fraunces,Georgia,Times New Roman,serif;font-weight:500;letter-spacing:-.01em;line-height:var(--leading-snug);color:var(--ink-1);font-variation-settings:"opsz" 36}h1{font-size:var(--text-4xl);font-variation-settings:"opsz" 96;letter-spacing:-.02em;line-height:var(--leading-tight)}h2{font-size:var(--text-2xl)}h3{font-size:var(--text-xl)}h4{font-size:var(--text-lg);font-variation-settings:"opsz" 18}a{color:var(--accent);text-decoration:none;transition:color var(--duration-fast) var(--ease-out)}a:hover{color:var(--accent-hover)}button{cursor:pointer;background:none;border:none;color:inherit;padding:0}.prose{font-family:"Source Serif 4","Source Serif Pro",Georgia,serif;font-size:19px;line-height:var(--leading-relaxed);max-width:68ch;color:var(--ink-1);font-variation-settings:"opsz" 28}.prose>*+*{margin-top:1em}.prose h1,.prose h2,.prose h3,.prose h4{font-family:Fraunces,Georgia,serif;margin-top:1.8em;margin-bottom:.5em}.prose h2{font-size:var(--text-2xl);font-variation-settings:"opsz" 36}.prose h3{font-size:var(--text-xl);font-variation-settings:"opsz" 24}.prose h4{font-size:var(--text-lg)}.prose a{color:var(--accent);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}.prose a:hover{color:var(--accent-hover)}.prose blockquote{border-left:3px solid var(--border-strong);padding-left:var(--space-5);margin:1.4em 0;color:var(--ink-2);font-style:italic}.prose ul,.prose ol{padding-left:1.4em}.prose li+li{margin-top:.4em}.prose code{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em;background:var(--bg-surface-2);color:var(--ink-1);padding:1px 6px;border-radius:var(--radius-sm);border:1px solid var(--border-subtle)}.prose pre{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,monospace;background:var(--bg-surface-2);border:1px solid var(--border-subtle);border-radius:var(--radius-md);padding:var(--space-4) var(--space-5);overflow-x:auto;font-size:14px;line-height:1.55}.prose pre code{background:none;border:none;padding:0;font-size:inherit}.prose img{border-radius:var(--radius-md);margin:1.6em auto}.prose hr{border:none;border-top:1px solid var(--border-subtle);margin:2.5em 0}.site-header{display:flex;align-items:center;justify-content:space-between;gap:16px;max-width:880px;margin:0 auto;padding:20px 24px;border-bottom:1px solid var(--border)}.site-header .brand{font-weight:700;font-size:20px;color:var(--text)}.site-header nav{display:flex;align-items:center;gap:16px}.site-header .signin{background:var(--brand);color:var(--brand-fg);padding:8px 14px;border-radius:8px;font-weight:500}.site-header .signin:hover{text-decoration:none;filter:brightness(1.05)}.site-header .write{font-weight:500}.site-header .signout{background:transparent;border:1px solid var(--border);color:var(--text);padding:6px 12px;border-radius:8px;cursor:pointer;font:inherit}.site-header .signout:hover{border-color:var(--brand)}main{max-width:880px;margin:0 auto;padding:32px 24px}.empty{color:var(--muted);text-align:center;padding:64px 0}.geo-banner{font-size:13px;color:var(--muted);background:var(--info-bg);color:var(--info-fg);padding:8px 14px;border-radius:999px;display:inline-block;margin:0 0 24px}.geo-banner-post{max-width:720px;margin:24px auto 0;display:none;padding:6px 12px}.geo-banner-post.visible{display:inline-block;margin:24px 24px 0}.site-footer{max-width:880px;margin:48px auto 64px;padding:24px;border-top:1px solid var(--border)}.subscribe-form label{display:block;font-size:14px;color:var(--muted);margin-bottom:8px}.subscribe-row{display:flex;gap:8px;max-width:480px}.subscribe-form input[type=email]{flex:1;border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:8px;padding:10px 12px;font:inherit;font-size:14px}.subscribe-form input[type=email]:focus{outline:none;border-color:var(--brand)}.subscribe-form button{background:var(--brand);color:var(--brand-fg);border:none;border-radius:8px;padding:10px 16px;font:inherit;font-weight:500;cursor:pointer}.subscribe-status{margin:8px 0 0;font-size:13px;min-height:18px;color:var(--muted)}.subscribe-status-ok{color:var(--success)}.subscribe-status-err{color:var(--error)}.posts{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:18px}.post-card{border:1px solid var(--border);background:var(--surface);border-radius:12px;padding:20px 22px}.post-card h2{margin:0 0 6px;font-size:22px}.post-card h2 a{color:var(--text)}.post-card h2 a:hover{color:var(--brand);text-decoration:none}.post-card .summary{color:var(--muted);margin:6px 0 12px}.post-card .meta{color:var(--muted);font-size:13px}.editor{display:flex;flex-direction:column;gap:18px}.editor-title{width:100%;background:transparent;border:none;border-bottom:1px solid var(--border);font-size:32px;font-weight:700;color:var(--text);padding:8px 4px;outline:none}.editor-title::placeholder{color:var(--muted)}.editor-title:focus{border-color:var(--brand)}.editor-cover{display:flex;flex-direction:column;gap:10px;padding:14px;border:1px dashed var(--border);border-radius:10px;background:var(--surface);cursor:pointer}.editor-cover-label{font-size:14px;color:var(--muted)}.editor-cover input[type=file]{font-size:13px}.editor-cover-preview{max-width:100%;max-height:220px;object-fit:cover;border-radius:8px}.editor-md{border-radius:10px;overflow:hidden}.editor-actions{display:flex;align-items:center;gap:14px}.editor-publish{background:var(--brand);color:var(--brand-fg);border:none;border-radius:8px;padding:10px 18px;font:inherit;font-weight:600;cursor:pointer}.editor-publish:disabled{opacity:.55;cursor:not-allowed}.pill{display:inline-flex;align-items:center;gap:6px;font-size:14px;padding:6px 12px;border-radius:999px;font-weight:500}.pill-info{background:var(--info-bg);color:var(--info-fg)}.pill-success{background:var(--success-bg);color:var(--success)}.pill-error{background:var(--error-bg);color:var(--error)}.post-article{max-width:720px;margin:32px auto 80px;padding:0 24px;line-height:1.7;font-size:18px}.post-article header.post-head{margin-bottom:32px;padding-bottom:20px;border-bottom:1px solid var(--border)}.post-article h1.post-title{font-size:40px;line-height:1.2;margin:0 0 16px;letter-spacing:-.01em}.post-article .post-meta{display:flex;align-items:center;gap:12px;color:var(--muted);font-size:14px}.post-article .post-meta img.avatar{width:32px;height:32px;border-radius:50%;object-fit:cover}.post-article .post-meta .author-name{color:var(--text);font-weight:500}.post-article .post-cover{width:100%;max-height:420px;object-fit:cover;border-radius:12px;margin-bottom:28px}.post-article .post-summary{background:var(--surface);border-left:3px solid var(--brand);padding:14px 18px;border-radius:0 8px 8px 0;margin:0 0 32px;color:var(--muted);font-size:15px}.post-article .post-tags{display:flex;flex-wrap:wrap;gap:8px;margin:28px 0 0;padding:0;list-style:none}.post-article .post-tags li{background:var(--info-bg);color:var(--info-fg);padding:4px 10px;border-radius:999px;font-size:13px}.post-body h1,.post-body h2,.post-body h3,.post-body h4{line-height:1.3;margin:1.6em 0 .6em}.post-body h1{font-size:28px}.post-body h2{font-size:24px}.post-body h3{font-size:20px}.post-body p{margin:1em 0}.post-body a{color:var(--brand);text-decoration:underline;text-underline-offset:3px}.post-body ul,.post-body ol{padding-left:1.4em}.post-body li{margin:.4em 0}.post-body blockquote{border-left:3px solid var(--border);margin:1.4em 0;padding:.2em 1em;color:var(--muted);font-style:italic}.post-body code{background:var(--surface);border:1px solid var(--border);padding:1px 6px;border-radius:4px;font-size:.92em;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace}.post-body pre{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:16px 18px;overflow-x:auto;font-size:14px;line-height:1.55}.post-body pre code{background:none;border:none;padding:0}.post-body img{max-width:100%;height:auto;border-radius:8px}.post-body hr{border:none;border-top:1px solid var(--border);margin:2.5em 0}.post-edit-link{display:none;margin-top:28px;font-size:14px;color:var(--muted)}.post-edit-link.visible{display:inline}.post-comments{max-width:720px;margin:0 auto 80px;padding:28px 24px 0;border-top:1px solid var(--border)}.post-comments h2{margin:0 0 16px;font-size:20px}.comment-room{display:flex;flex-direction:column;gap:14px}.comment-presence{font-size:13px;color:var(--muted)}.comment-presence .comment-conn{font-style:italic}.comment-empty{color:var(--muted);font-size:14px;margin:0}.comment-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:10px;max-height:480px;overflow-y:auto}.comment{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:10px 14px}.comment-meta{font-size:12px;color:var(--muted);margin-bottom:4px}.comment-meta strong{color:var(--text);font-weight:600}.comment-body{font-size:15px;white-space:pre-wrap;word-break:break-word}.comment-typing{font-size:13px;color:var(--muted);font-style:italic}.comment-form{display:flex;flex-direction:column;gap:8px}.comment-form textarea{width:100%;min-height:84px;border:1px solid var(--border);border-radius:8px;padding:10px 12px;font:inherit;font-size:14px;background:var(--surface);color:var(--text);resize:vertical}.comment-form textarea:focus{outline:none;border-color:var(--brand)}.comment-form-actions{display:flex;justify-content:flex-end}.comment-form-actions button{background:var(--brand);color:var(--brand-fg);border:none;border-radius:8px;padding:8px 14px;font:inherit;font-weight:500;cursor:pointer}.comment-form-actions button:disabled{opacity:.55;cursor:not-allowed}.comment-signin-cta{display:inline-block;background:var(--brand);color:var(--brand-fg);padding:10px 14px;border-radius:8px;font-size:14px;font-weight:500}.comment-signin-cta:hover{text-decoration:none;filter:brightness(1.05)}.theme-toggle{width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-full);background:transparent;color:var(--ink-2);border:1px solid var(--border-subtle);cursor:pointer;transition:background var(--duration-fast) var(--ease-out),color var(--duration-fast) var(--ease-out),border-color var(--duration-fast) var(--ease-out)}.theme-toggle:hover{color:var(--ink-1);border-color:var(--border-strong)}.theme-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
