:root{--bg: #f2f1ed;--surface: #ffffff;--surface-sunken: #ecebe5;--ink: #26251e;--ink-muted: #5a5850;--ink-faint: #8b8a82;--accent: #f54e00;--accent-hover: #cf2d56;--line: oklab(.18 0 0 / .1);--line-strong: oklab(.18 0 0 / .18);--focus: oklab(.62 .18 .11 / .38);--r-sm: 6px;--r-md: 8px;--r-lg: 12px;--r-pill: 9999px;--shadow-sm: 0 1px 2px oklab(.18 0 0 / .04);--shadow-md: 0 4px 14px oklab(.18 0 0 / .06), 0 28px 60px oklab(.18 0 0 / .05);--font-sans: "Inter", "Noto Sans JP", ui-sans-serif, system-ui, "Hiragino Kaku Gothic ProN", "Yu Gothic UI", Meiryo, sans-serif;--font-serif: "Source Serif 4", "Noto Serif JP", "Iowan Old Style", "Yu Mincho", "Hiragino Mincho ProN", Georgia, serif;--font-mono: "JetBrains Mono", ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;--content-max: 680px;--page-pad: 24px}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0;background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}body{font-family:var(--font-serif);font-size:17px;line-height:1.75;min-height:100vh}a{color:var(--accent);text-decoration:none;border-bottom:1px solid oklab(.68 .18 .11 / .35);transition:color .14s ease,border-color .14s ease}a:hover{color:var(--accent-hover);border-bottom-color:var(--accent-hover)}a:focus-visible{outline:2px solid var(--focus);outline-offset:2px;border-radius:var(--r-sm)}img{max-width:100%;height:auto;display:block}hr{border:0;height:1px;background:var(--line);margin:3em 0}.site{display:flex;flex-direction:column;min-height:100vh}.nav{width:100%;max-width:1100px;margin:0 auto;padding:22px var(--page-pad);display:flex;justify-content:space-between;align-items:center;font-family:var(--font-sans)}.nav-brand{display:inline-flex;align-items:center;gap:8px;font-weight:700;font-size:17px;letter-spacing:-.02em;color:var(--ink);border:0}.nav-brand:hover{color:var(--ink)}.logo-mark{color:var(--accent)}.nav-tag{font-family:var(--font-serif);font-style:italic;font-weight:400;font-size:14px;color:var(--ink-muted);letter-spacing:0;margin-left:2px}.nav-links{display:flex;gap:24px;font-size:14.5px;color:var(--ink-muted)}.nav-links a{color:inherit;border:0}.nav-links a:hover{color:var(--accent)}.content{flex:1;width:100%;max-width:var(--content-max);margin:0 auto;padding:clamp(32px,6vw,72px) var(--page-pad)}.site-footer{border-top:1px solid var(--line);padding:28px var(--page-pad);font-family:var(--font-sans);font-size:13px;color:var(--ink-faint);text-align:center}.site-footer a{color:inherit;border:0;margin:0 10px}.site-footer a:hover{color:var(--accent)}h1,h2,h3,h4{font-family:var(--font-sans);letter-spacing:-.022em;color:var(--ink);margin:0 0 .4em;line-height:1.2}h1{font-weight:800;font-size:clamp(32px,4.2vw,44px);letter-spacing:-.028em;margin-bottom:.3em}h2{font-weight:700;font-size:clamp(22px,2.4vw,28px);margin-top:2.4em;padding-top:.4em}h3{font-weight:600;font-size:19px;margin-top:1.8em}h4{font-weight:600;font-size:16.5px;margin-top:1.4em}p{margin:0 0 1.2em}.prose p,.prose ul,.prose ol,.prose blockquote,.prose pre,.prose figure{margin-bottom:1.2em}.prose ul,.prose ol{padding-left:1.3em}.prose li{margin-bottom:.4em}.prose blockquote{margin:1.5em 0;padding:.2em 0 .2em 1.1em;border-left:3px solid var(--accent);color:var(--ink-muted);font-style:italic}.prose code{font-family:var(--font-mono);font-size:.88em;background:var(--surface-sunken);border:1px solid var(--line);padding:1px 6px;border-radius:4px;color:var(--ink)}.prose .expressive-code,.prose pre:not(.expressive-code pre){margin:1.8em calc(var(--page-pad) * -.4) 1.8em calc(var(--page-pad) * -.4)}.prose img,.prose video{margin:1.8em 0;border-radius:var(--r-md);border:1px solid var(--line)}.prose strong{color:var(--ink);font-weight:600}.prose em{font-style:italic}.prose a{font-weight:500}.post-header{margin-bottom:2.4em;padding-bottom:1.6em;border-bottom:1px solid var(--line)}.post-meta{font-family:var(--font-sans);font-size:13px;color:var(--ink-faint);letter-spacing:.01em;display:flex;flex-wrap:wrap;gap:12px;align-items:center;margin-bottom:.6em}.post-meta time{color:var(--ink-muted)}.post-description{font-family:var(--font-serif);font-size:18.5px;line-height:1.6;color:var(--ink-muted);margin:.4em 0 0}.tags{display:inline-flex;flex-wrap:wrap;gap:6px}.tag{font-family:var(--font-mono);font-size:11.5px;color:var(--ink-muted);background:var(--surface-sunken);border:1px solid var(--line);padding:2px 8px;border-radius:var(--r-pill)}.post-nav{margin-top:3.2em;padding-top:1.6em;border-top:1px solid var(--line);display:grid;grid-template-columns:1fr 1fr;gap:16px;font-family:var(--font-sans)}.post-nav a{display:block;padding:14px 16px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);text-decoration:none;color:var(--ink);font-weight:500;font-size:14.5px;line-height:1.4;transition:border-color .16s ease,transform .16s ease}.post-nav a:hover{border-color:var(--line-strong);transform:translateY(-1px);color:var(--ink)}.post-nav .nav-label{display:block;font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:4px}.post-nav .nav-empty{visibility:hidden}.intro{margin-bottom:clamp(32px,6vw,56px)}.intro h1{margin-bottom:.3em}.intro p{font-size:18px;color:var(--ink-muted);max-width:56ch;margin:0}.post-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:28px}.post-list article{padding-bottom:28px;border-bottom:1px solid var(--line)}.post-list article:last-child{border-bottom:0}.post-list h2{font-family:var(--font-sans);font-size:clamp(20px,2vw,24px);font-weight:700;letter-spacing:-.02em;margin:0 0 .3em;line-height:1.3}.post-list h2 a{color:var(--ink);border:0}.post-list h2 a:hover{color:var(--accent)}.post-list .post-meta{margin-bottom:.5em}.post-list .post-excerpt{margin:0;font-size:16px;color:var(--ink-muted);line-height:1.65}@media(max-width:640px){:root{--page-pad: 18px}body{font-size:16px;line-height:1.7}.prose pre{margin-left:calc(var(--page-pad) * -1);margin-right:calc(var(--page-pad) * -1);border-radius:0;border-left:0;border-right:0}.post-nav{grid-template-columns:1fr}}@media(prefers-reduced-motion:reduce){*{transition-duration:0ms!important;animation-duration:0ms!important}}
