@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(/fonts/JetBrainsMono-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:italic;font-weight:100 800;font-display:swap;src:url(/fonts/JetBrainsMono-italic-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--color-bg: #ffffff;--color-text: #1a1a1a;--color-text-muted: #666666;--color-accent: #2563eb;--color-accent-hover: #1d4ed8;--color-border: #e5e7eb;--color-code-bg: #f3f4f6;--font-body: "JetBrains Mono", sans-serif;--font-sans: "JetBrains Mono", sans-serif;--font-mono: "JetBrains Mono", monospace;--font-size-base: 1.05rem;--line-height: 1.8;--max-width: 720px;--space-xs: .25rem;--space-sm: .5rem;--space-md: 1rem;--space-lg: 2rem;--space-xl: 4rem;--transition: .18s ease}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;scroll-behavior:smooth}body{font-family:var(--font-body);font-size:var(--font-size-base);line-height:var(--line-height);color:var(--color-text);background:var(--color-bg);padding:var(--space-lg) var(--space-md) var(--space-xl);transition:background var(--transition),color var(--transition)}nav,main,footer{max-width:var(--max-width);margin:0 auto}#progress{position:fixed;top:0;left:0;height:2px;width:0;background:var(--color-accent);z-index:100;transition:width 80ms linear}nav{display:flex;align-items:center;gap:var(--space-md);padding-bottom:var(--space-md);border-bottom:1px solid var(--color-border);margin-bottom:var(--space-lg);font-family:var(--font-sans);font-size:.95rem}nav a{color:var(--color-text);font-weight:500;text-decoration:none;transition:color var(--transition)}nav a:hover{color:var(--color-accent);text-decoration:none}.nav-actions{margin-left:auto;display:flex;gap:var(--space-sm)}.icon-btn{width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--color-border);border-radius:6px;background:transparent;color:var(--color-text);cursor:pointer;font-family:var(--font-sans);font-size:.75rem;font-weight:600;transition:background var(--transition),border-color var(--transition);padding:0}.icon-btn:hover{background:var(--color-code-bg);border-color:var(--color-text-muted)}.icon-btn .icon{width:14px;height:14px}h1,h2,h3,h4{font-family:var(--font-body);line-height:1.3;margin-top:var(--space-lg);margin-bottom:var(--space-sm)}h1{font-size:1.8rem}h2{font-size:1.3rem}h3{font-size:1.1rem}p{margin-bottom:var(--space-md)}a{color:var(--color-accent);text-decoration:none}a:hover{color:var(--color-accent-hover);text-decoration:underline}h2.section-title{font-family:var(--font-sans);font-size:.85rem;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--color-text-muted);margin:0 0 var(--space-md)}ul.post-list{list-style:none;padding:0}ul.post-list li{padding:var(--space-md) 0;border-bottom:1px solid var(--color-border);display:block}ul.post-list li:last-child{border-bottom:none}ul.post-list li.placeholder{border-bottom-color:transparent}ul.post-list li.placeholder .tag{border-color:transparent;color:transparent}ul.post-list a.post-link{display:block;color:var(--color-text);text-decoration:none;transition:color var(--transition)}ul.post-list a.post-link:hover{text-decoration:none}ul.post-list a.post-link:hover .post-title{color:var(--color-accent)}.post-title{font-size:1.05rem;font-weight:500;margin-bottom:4px;transition:color var(--transition);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.post-meta{display:flex;gap:var(--space-md);font-family:var(--font-sans);font-size:.8rem;color:var(--color-text-muted);align-items:center;flex-wrap:wrap}.post-meta .dot{opacity:.5}.post-meta .tag{padding:1px 8px;border:1px solid var(--color-border);border-radius:999px;font-size:.72rem;color:var(--color-text-muted);text-decoration:none}.post-meta a.tag:hover{border-color:var(--color-text-muted);color:var(--color-text)}ul:not(.post-list){list-style:none;padding:0}ul:not(.post-list) li{display:flex;align-items:baseline;gap:var(--space-md);padding:var(--space-sm) 0;border-bottom:1px solid var(--color-border)}ul:not(.post-list) li a{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}ul:not(.post-list) li>span:last-child{flex-shrink:0;color:var(--color-text-muted)}article header{margin-bottom:var(--space-lg)}article h1{font-size:1.9rem;margin-top:0;margin-bottom:var(--space-sm);letter-spacing:-.01em}.article-meta{display:flex;gap:var(--space-md);color:var(--color-text-muted);font-family:var(--font-sans);font-size:.85rem;align-items:center;flex-wrap:wrap}.article-meta .dot{opacity:.5}.article-meta .tag{padding:1px 8px;border:1px solid var(--color-border);border-radius:999px;font-size:.72rem;color:var(--color-text-muted);text-decoration:none}.article-meta a.tag:hover{border-color:var(--color-text-muted);color:var(--color-text)}article p,article li{margin-bottom:var(--space-md)}article ul,article ol{list-style:revert;padding-left:var(--space-lg)}article ul li,article ol li{border-bottom:none;display:list-item}code{font-family:var(--font-mono);font-size:.88em;background:var(--color-code-bg);padding:.1em .4em;border-radius:3px}.codeblock{position:relative;margin-bottom:var(--space-md)}article pre{background:var(--color-code-bg);padding:var(--space-md) 0;border-radius:6px;overflow-x:auto;margin-bottom:var(--space-md)}.codeblock>pre{margin:0}article pre code{background:none;padding:0}article pre.astro-code{background:var(--color-code-bg)!important}article pre.astro-code code{display:grid;counter-reset:line}article pre.astro-code .line{padding:0 var(--space-md)}article pre.astro-code .line:before{counter-increment:line;content:counter(line);display:inline-block;width:1.4rem;margin-right:1.1rem;text-align:right;color:#b0b6be;user-select:none;-webkit-user-select:none}.copy-btn{position:absolute;top:8px;right:8px;padding:4px 10px;font-family:var(--font-sans);font-size:.72rem;color:var(--color-text-muted);background:var(--color-bg);border:1px solid var(--color-border);border-radius:4px;cursor:pointer;opacity:0;transition:opacity var(--transition),color var(--transition)}article pre:hover .copy-btn,.codeblock:hover .copy-btn{opacity:1}.copy-btn:hover{color:var(--color-accent)}.copy-btn.copied{color:var(--color-accent);opacity:1}.post-nav{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-md);margin-top:var(--space-xl);padding-top:var(--space-lg);border-top:1px solid var(--color-border)}.post-nav a{display:block;padding:var(--space-md);border:1px solid var(--color-border);border-radius:6px;text-decoration:none;color:var(--color-text);transition:border-color var(--transition),background var(--transition)}.post-nav a:hover{border-color:var(--color-text-muted);background:var(--color-code-bg);text-decoration:none}.post-nav .label{font-family:var(--font-sans);font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;color:var(--color-text-muted);margin-bottom:4px}.post-nav .title{font-size:.95rem;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:break-word;height:calc(.95rem * 1.4 * 2)}.post-nav .next{text-align:right}@media(max-width:540px){.post-nav{grid-template-columns:1fr}.post-nav .next{text-align:left}}table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;margin-bottom:var(--space-md);font-family:var(--font-sans);font-size:.95rem}th,td{padding:var(--space-sm) var(--space-md);border:1px solid var(--color-border);text-align:left;white-space:nowrap}th{background:var(--color-code-bg)}footer{margin-top:var(--space-xl);padding-top:var(--space-md);border-top:1px solid var(--color-border);display:flex;align-items:center;gap:var(--space-md);font-family:var(--font-sans);font-size:.8rem;color:var(--color-text-muted);flex-wrap:wrap}footer a{color:var(--color-text-muted);text-decoration:none;display:inline-flex;align-items:center;gap:4px;transition:color var(--transition)}footer a:hover{color:var(--color-accent);text-decoration:none}footer .spacer{margin-left:auto}footer .icon{width:14px;height:14px}.floating-btn{position:fixed;right:var(--space-md);width:40px;height:40px;border-radius:50%;background:var(--color-bg);border:1px solid var(--color-border);color:var(--color-text-muted);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transform:translateY(5px);transition:opacity var(--transition),transform var(--transition),color var(--transition),border-color var(--transition);z-index:50;padding:0;font-family:var(--font-sans);font-size:.75rem;font-weight:600}.floating-btn.visible{opacity:1;pointer-events:auto;transform:translateY(0)}.floating-btn:hover{color:var(--color-accent);border-color:var(--color-text-muted)}.floating-btn svg{width:16px;height:16px}#back-to-top{bottom:var(--space-md)}#lang-toggle-floating{bottom:calc(var(--space-md) + 48px)}.lang-ja,section[lang=ja]{display:none}html.ja .lang-en,html.ja section[lang=en]{display:none}html.ja .lang-ja,html.ja section[lang=ja]{display:revert}.mermaid,.mermaid svg,.mermaid foreignObject *{font-feature-settings:normal;font-variant-ligatures:none}
