:root{--bg: #fafafa;--fg: #18181b;--muted: #6b7280;--accent: #5b21b6;--accent-soft: #ede9fe;--card: #ffffff;--border: #e5e7eb;--code-bg: #f3f4f6;--max-w: 960px;--radius: 12px;--shadow: 0 1px 2px rgba(0,0,0,.04), 0 4px 12px rgba(0,0,0,.04)}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--fg);font:16px/1.65 -apple-system,BlinkMacSystemFont,"Segoe UI","Hiragino Kaku Gothic ProN","Hiragino Sans","Yu Gothic UI",Meiryo,system-ui,sans-serif;-webkit-font-smoothing:antialiased}code,pre,.badge.minver{font-family:ui-monospace,"SF Mono","Cascadia Code","JetBrains Mono",Menlo,Consolas,monospace}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}.skip-link{position:absolute;top:-3em;left:0;background:var(--fg);color:var(--bg);padding:.5em 1em;z-index:100}.skip-link:focus{top:0}.container{max-width:var(--max-w);margin:0 auto;padding:0 1.25rem}.site-header{border-bottom:1px solid var(--border);background:var(--bg);position:sticky;top:0;z-index:10;backdrop-filter:saturate(180%) blur(8px)}.site-header .container{display:flex;align-items:center;justify-content:space-between;padding-top:.75rem;padding-bottom:.75rem}.brand{font-weight:700;color:var(--fg)}.site-nav{display:flex;gap:1rem;align-items:center}.site-nav a{color:var(--muted);font-size:.92em}.site-nav a:hover{color:var(--fg);text-decoration:none}.lang-toggle{border:1px solid var(--border);padding:.15em .5em;border-radius:6px;font-size:.82em}main{padding:2.5rem 0 4rem}.hero h1{font-size:clamp(1.6rem,2.2vw + 1rem,2.4rem);line-height:1.2;letter-spacing:-.01em;margin:0 0 .8rem}.accent{color:var(--accent)}.lead{color:var(--muted);font-size:1.05rem;max-width:38rem}.works{margin-top:3rem}.works h2{font-size:1.2rem;letter-spacing:.02em;text-transform:uppercase;color:var(--muted)}.works-grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(280px, 1fr));gap:1rem;margin-top:1rem}.work-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:1.1rem 1.2rem;box-shadow:var(--shadow);transition:transform .14s ease,box-shadow .14s ease;display:flex;flex-direction:column;gap:.6rem}.work-card:hover{transform:translateY(-2px);box-shadow:0 4px 6px rgba(0,0,0,.05),0 10px 24px rgba(0,0,0,.06)}.work-card header{display:flex;flex-wrap:wrap;align-items:baseline;gap:.4rem}.work-card h2,.work-card h3{font-size:1.05rem;margin:0}.work-card h2 a,.work-card h3 a{color:var(--fg)}.work-card h2 a:hover,.work-card h3 a:hover{color:var(--accent)}.tagline{color:var(--muted);margin:0;font-size:.94rem}.badge{display:inline-block;font-size:.72rem;padding:.12em .55em;border-radius:4px;background:var(--accent-soft);color:var(--accent);line-height:1.4;white-space:nowrap}.badge.cat{background:var(--code-bg);color:var(--muted)}.badge.lang{background:var(--code-bg);color:var(--fg)}.badge.minver{background:rgba(0,0,0,0);border:1px solid var(--border);color:var(--muted)}.work-links{display:flex;flex-wrap:wrap;gap:.9rem;margin-top:auto;font-size:.88rem}.work-links .more{margin-left:auto;color:var(--muted)}.page-head{margin-bottom:2rem}.page-head h1{font-size:clamp(1.6rem,2.4vw + 1rem,2.4rem);margin:.2rem 0 .6rem}.page-head .badges{display:flex;flex-wrap:wrap;gap:.4rem;margin:.6rem 0 1rem}.page-head .back a{color:var(--muted);font-size:.9rem}.work-body{line-height:1.75}.work-body h2{font-size:1.3rem;margin-top:2rem;border-bottom:1px solid var(--border);padding-bottom:.3rem}.work-body h3{font-size:1.1rem;margin-top:1.5rem}.work-body pre{background:var(--code-bg);padding:1rem;border-radius:8px;overflow-x:auto;font-size:.88rem;line-height:1.5}.work-body code{background:var(--code-bg);padding:.12em .35em;border-radius:4px;font-size:.9em}.work-body pre code{background:rgba(0,0,0,0);padding:0}.work-body blockquote{border-left:3px solid var(--accent);padding-left:1rem;color:var(--muted);margin:1rem 0}.site-footer{border-top:1px solid var(--border);padding:1.5rem 0;font-size:.88rem;color:var(--muted);margin-top:4rem}.site-footer a{color:var(--muted)}.site-footer a:hover{color:var(--fg)}@media (max-width: 500px){.site-header .container{flex-wrap:wrap;gap:.5rem}.site-nav{font-size:.88rem}}