:root,html[data-theme="dark"]{color-scheme:dark;--bg: #0d1117;--bg-subtle: #161b22;--bg-inset: #010409;--border: #30363d;--border-subtle: #21262d;--text: #e6edf3;--text-muted: #9198a1;--text-faint: #6e7681;--accent: #a78bfa;--accent-strong: #c4b5fd;--accent-bg: rgba(167, 139, 250, 0.12);--green: #3fb950;--purple: #bc8cff;--orange: #f0883e;--card-shadow: 0 0 0 1px var(--border);--card-shadow-hover: 0 0 0 1px var(--accent), 0 8px 24px rgba(1, 4, 9, 0.6);--code-bg: #161b22;--kbd-bg: #21262d;--selection: rgba(167, 139, 250, 0.3)}html[data-theme="light"]{color-scheme:light;--bg: #ffffff;--bg-subtle: #f6f8fa;--bg-inset: #eff2f5;--border: #d1d9e0;--border-subtle: #e4e9ee;--text: #1f2328;--text-muted: #59636e;--text-faint: #818b98;--accent: #7c3aed;--accent-strong: #6d28d9;--accent-bg: rgba(124, 58, 237, 0.08);--green: #1a7f37;--purple: #8250df;--orange: #bc4c00;--card-shadow: 0 0 0 1px var(--border);--card-shadow-hover: 0 0 0 1px var(--accent), 0 8px 24px rgba(31, 35, 40, 0.12);--code-bg: #f6f8fa;--kbd-bg: #eff2f5;--selection: rgba(124, 58, 237, 0.2)}*,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:90px}body{margin:0;font-family:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;font-size:16px;line-height:1.65;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}::selection{background:var(--selection)}img{max-width:100%;height:auto}a{color:var(--accent);text-decoration:none;transition:color 0.15s ease}a:hover{color:var(--accent-strong)}h1,h2,h3,h4,h5,h6{line-height:1.25;font-weight:700;color:var(--text);margin:2em 0 0.6em}h1:first-child,h2:first-child,h3:first-child,h4:first-child,h5:first-child,h6:first-child{margin-top:0}code,pre,kbd{font-family:"JetBrains Mono","Cascadia Code",Consolas,monospace}kbd{background:var(--kbd-bg);border:1px solid var(--border);border-bottom-width:2px;border-radius:5px;padding:1px 6px;font-size:0.78em;color:var(--text-muted)}hr{border:0;border-top:1px solid var(--border);margin:2.5rem 0}.wrap{max-width:1140px;margin:0 auto;padding:0 24px}.screen-reader-text{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.section-title{font-size:1.35rem;margin:0}.section-title::before{content:"// ";color:var(--text-faint);font-family:"JetBrains Mono","Cascadia Code",Consolas,monospace;font-weight:400}@media (prefers-reduced-motion: reduce){html{scroll-behavior:auto}*,*::before,*::after{animation-duration:0.01ms !important;transition-duration:0.01ms !important}}.site-header{position:sticky;top:0;z-index:50;background:color-mix(in srgb, var(--bg) 82%, transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--border-subtle)}.header-inner{display:flex;align-items:center;gap:28px;height:64px}.site-brand{font-family:"JetBrains Mono","Cascadia Code",Consolas,monospace;font-weight:600;font-size:1.05rem;color:var(--text);white-space:nowrap}.site-brand .brand-prompt{color:var(--accent)}.site-brand:hover{color:var(--text)}.brand-cursor{display:inline-block;width:8px;height:1.05em;margin-left:3px;background:var(--accent);vertical-align:text-bottom;animation:blink 1.2s steps(2) infinite}@keyframes blink{50%{opacity:0}}.site-nav{display:flex;gap:4px;margin-right:auto}.site-nav a{color:var(--text-muted);font-size:0.92rem;font-weight:500;padding:6px 12px;border-radius:8px}.site-nav a:hover{color:var(--text);background:var(--bg-subtle)}.site-nav a.is-active{color:var(--accent)}.header-actions{display:flex;align-items:center;gap:6px;margin-left:auto}.icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border:1px solid transparent;border-radius:8px;background:none;color:var(--text-muted);cursor:pointer;transition:all 0.15s ease}.icon-button:hover{color:var(--text);background:var(--bg-subtle);border-color:var(--border)}.lang-label{font-family:"JetBrains Mono","Cascadia Code",Consolas,monospace;font-size:0.78rem;font-weight:600}html[data-theme="dark"] .icon-moon,html[data-theme="light"] .icon-sun{display:none}.nav-burger{display:none}.mobile-nav{display:none;flex-direction:column;padding:8px 24px 16px;border-top:1px solid var(--border-subtle)}.mobile-nav a{color:var(--text-muted);font-weight:500;padding:10px 4px}.mobile-nav a:hover{color:var(--text)}.mobile-nav.is-open{display:flex}@media (max-width: 720px){.site-nav{display:none}.nav-burger{display:inline-flex}}.site-main{min-height:60vh;padding:48px 0 80px}.site-footer{border-top:1px solid var(--border-subtle);background:var(--bg-subtle);padding:48px 0 0;font-size:0.92rem}.footer-grid{display:grid;grid-template-columns:2fr 1.2fr 1fr;gap:40px;padding-bottom:40px}@media (max-width: 720px){.footer-grid{grid-template-columns:1fr}}.footer-tagline{color:var(--text-muted);max-width:340px;margin:12px 0 16px}.footer-title{font-family:"JetBrains Mono","Cascadia Code",Consolas,monospace;font-size:0.8rem;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:var(--text-faint);margin:0 0 14px}.footer-links{list-style:none;margin:0;padding:0}.footer-links li{margin-bottom:10px}.footer-links a{color:var(--text-muted);font-weight:500}.footer-links a:hover{color:var(--accent)}.footer-link-desc{display:block;font-size:0.8rem;color:var(--text-faint)}.social-links{display:flex;gap:8px}.social-links a{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border:1px solid var(--border);border-radius:8px;color:var(--text-muted)}.social-links a svg{width:16px;height:16px;fill:currentColor}.social-links a:hover{color:var(--accent);border-color:var(--accent)}.footer-bottom{border-top:1px solid var(--border-subtle);padding-top:20px;padding-bottom:20px;color:var(--text-faint);font-size:0.82rem}.footer-bottom p{margin:0}.hero{padding-bottom:56px}.hero-kicker{font-family:"JetBrains Mono","Cascadia Code",Consolas,monospace;font-size:0.88rem;color:var(--text-faint);margin:0 0 10px}.hero-kicker .prompt{color:var(--green)}.hero-title{font-size:clamp(2.2rem, 5vw, 3.4rem);font-weight:800;letter-spacing:-0.02em;margin:0 0 12px}.hero-accent{color:var(--accent);font-family:"JetBrains Mono","Cascadia Code",Consolas,monospace;font-weight:600}.hero-tagline{font-size:1.1rem;color:var(--text-muted);max-width:620px;margin:0 0 22px}.hero-links{display:flex;flex-wrap:wrap;gap:10px}.hero-link{font-family:"JetBrains Mono","Cascadia Code",Consolas,monospace;font-size:0.82rem;font-weight:600;padding:7px 14px;border:1px solid var(--border);border-radius:999px;color:var(--text-muted);background:var(--bg-subtle);transition:all 0.15s ease}.hero-link:hover{color:var(--accent);border-color:var(--accent);background:var(--accent-bg)}.wrap>.section-title{margin-bottom:24px}.post-grid{display:grid;grid-template-columns:repeat(3, 1fr);gap:20px}@media (max-width: 960px){.post-grid{grid-template-columns:repeat(2, 1fr)}}@media (max-width: 640px){.post-grid{grid-template-columns:1fr}}.post-card{position:relative;display:flex;flex-direction:column;gap:10px;padding:22px;border-radius:12px;background:var(--bg-subtle);box-shadow:var(--card-shadow);transition:box-shadow 0.2s ease, transform 0.2s ease}.post-card:hover{box-shadow:var(--card-shadow-hover);transform:translateY(-2px)}.post-card.is-hidden{display:none}.post-meta-row{display:flex;align-items:center;gap:8px;font-family:"JetBrains Mono","Cascadia Code",Consolas,monospace;font-size:0.78rem;color:var(--text-faint)}.post-date{color:var(--text-faint)}.meta-sep{color:var(--border)}.lang-badge{font-family:"JetBrains Mono","Cascadia Code",Consolas,monospace;font-size:0.68rem;font-weight:600;padding:1px 7px;border-radius:5px;margin-left:auto;border:1px solid var(--border);color:var(--text-muted)}.lang-badge.lang-fr{color:var(--orange);border-color:var(--orange)}.lang-badge.lang-en{color:var(--green);border-color:var(--green)}.post-card-title{font-size:1.12rem;margin:0;line-height:1.35}.post-card-title a{color:var(--text)}.post-card-title a:hover{color:var(--accent)}.post-card-title a::after{content:'';position:absolute;inset:0}.post-card-excerpt{font-size:0.9rem;color:var(--text-muted);margin:0;flex-grow:1}.post-card-footer{display:flex;flex-wrap:wrap;gap:6px}.post-card-footer .tag-chip{position:relative;z-index:1}.tag-chip{font-family:"JetBrains Mono","Cascadia Code",Consolas,monospace;font-size:0.74rem;font-weight:500;color:var(--accent);background:var(--accent-bg);padding:2px 9px;border-radius:999px}.tag-chip:hover{color:var(--accent-strong)}.tag-chip .tag-count{color:var(--text-faint)}.pagination{display:flex;align-items:center;justify-content:center;gap:18px;margin-top:40px}.button{display:inline-block;font-family:"JetBrains Mono","Cascadia Code",Consolas,monospace;font-size:0.85rem;font-weight:600;padding:8px 18px;border:1px solid var(--border);border-radius:8px;color:var(--text);background:var(--bg-subtle)}.button:hover{border-color:var(--accent);color:var(--accent)}.page-number{font-family:"JetBrains Mono","Cascadia Code",Consolas,monospace;font-size:0.85rem;color:var(--text-faint)}.archives .post-full-header{margin-bottom:28px}.archive-tag-cloud{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:44px}.archive-group{margin-bottom:36px}.archive-tag-title{font-family:"JetBrains Mono","Cascadia Code",Consolas,monospace;font-size:1.05rem;color:var(--accent);border-bottom:1px solid var(--border-subtle);padding-bottom:8px;margin:0 0 14px}.archive-post-list{list-style:none;margin:0;padding:0}.archive-post-list li{position:relative;display:flex;align-items:baseline;gap:12px;padding:6px 0;font-size:0.95rem;border-radius:6px;transition:background 0.15s ease}.archive-post-list li:hover{background:var(--accent-bg)}.archive-post-list li .post-date{font-family:"JetBrains Mono","Cascadia Code",Consolas,monospace;font-size:0.78rem;flex-shrink:0}.archive-post-list li a{color:var(--text);font-weight:500}.archive-post-list li a:hover{color:var(--accent)}.archive-post-list li a::after{content:'';position:absolute;inset:0}.search-overlay{position:fixed;inset:0;z-index:100;background:rgba(1,4,9,0.65);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);padding:10vh 24px 0}.search-overlay[hidden]{display:none}.search-panel{max-width:640px;margin:0 auto;background:var(--bg-subtle);border:1px solid var(--border);border-radius:14px;box-shadow:0 16px 60px rgba(1,4,9,0.5);overflow:hidden}.search-input-row{display:flex;align-items:center;gap:12px;padding:14px 18px;border-bottom:1px solid var(--border-subtle);color:var(--text-faint)}.search-input-row input{flex:1;border:0;background:none;color:var(--text);font-family:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;font-size:1rem;outline:none}.search-input-row input::placeholder{color:var(--text-faint)}.search-close{background:none;border:0;cursor:pointer;padding:0}.search-results{max-height:55vh;overflow-y:auto;padding:8px}.search-hint,.search-empty{color:var(--text-faint);font-size:0.9rem;text-align:center;padding:24px 0;margin:0}.search-result{display:block;padding:12px 14px;border-radius:9px}.search-result:hover,.search-result.is-selected{background:var(--accent-bg)}.search-result .result-title{display:block;color:var(--text);font-weight:600;font-size:0.95rem}.search-result .result-title mark{background:none;color:var(--accent)}.search-result .result-meta{font-family:"JetBrains Mono","Cascadia Code",Consolas,monospace;font-size:0.75rem;color:var(--text-faint)}.post-full{max-width:1140px}.post-full-header{max-width:720px;margin:0 auto 32px}.post-full-header .post-meta-row{margin-bottom:14px}.post-full-header .post-meta-row .lang-badge{margin-left:0}.post-full-header .post-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:16px}.post-full-title{font-size:clamp(1.7rem, 4vw, 2.5rem);font-weight:800;letter-spacing:-0.02em;margin:0}.translation-banner{display:inline-block;margin-top:16px;font-size:0.88rem;font-weight:600;padding:8px 16px;border:1px solid var(--border);border-radius:999px;background:var(--bg-subtle);color:var(--text)}.translation-banner:hover{border-color:var(--accent);color:var(--accent)}.post-full-image{max-width:920px;margin:0 auto 40px}.post-full-image img{width:100%;border-radius:14px;box-shadow:var(--card-shadow)}.post-body-grid{position:relative}.post-content{max-width:720px;margin:0 auto;width:100%;font-size:1.02rem}.post-content p,.post-content ul,.post-content ol{color:var(--text)}.post-content li{margin-bottom:0.35em}.post-content h2{font-size:1.5rem;padding-bottom:0.35em;border-bottom:1px solid var(--border-subtle)}.post-content h3{font-size:1.2rem}.post-content h2,.post-content h3{scroll-margin-top:90px}.post-content h2 .anchor-link,.post-content h3 .anchor-link{opacity:0;margin-left:8px;font-weight:400;color:var(--text-faint)}.post-content h2:hover .anchor-link,.post-content h3:hover .anchor-link{opacity:1}.post-content blockquote{margin:1.5em 0;padding:0.6em 1.2em;border-left:3px solid var(--accent);background:var(--bg-subtle);border-radius:0 10px 10px 0;color:var(--text-muted)}.post-content blockquote p{color:inherit}.post-content img{border-radius:10px;display:block;margin:1.5em auto}.post-content table{width:100%;border-collapse:collapse;margin:1.5em 0;font-size:0.92rem}.post-content table th,.post-content table td{border:1px solid var(--border);padding:8px 12px;text-align:left}.post-content table th{background:var(--bg-subtle)}.post-content code{font-size:0.86em;background:var(--code-bg);border:1px solid var(--border-subtle);border-radius:5px;padding:0.1em 0.4em;color:var(--accent-strong)}.post-content pre{position:relative;background:var(--bg-inset);border:1px solid var(--border-subtle);border-radius:10px;padding:16px 18px;overflow-x:auto;line-height:1.55;font-size:0.86rem;margin:1.5em 0}.post-content pre code{background:none;border:0;padding:0;color:inherit;font-size:inherit}.post-content div.highlighter-rouge pre{margin:0}.post-content div.highlighter-rouge{margin:1.5em 0}.copy-code-button{position:absolute;top:8px;right:8px;font-family:"JetBrains Mono","Cascadia Code",Consolas,monospace;font-size:0.7rem;font-weight:600;color:var(--text-muted);background:var(--bg-subtle);border:1px solid var(--border);border-radius:6px;padding:3px 9px;cursor:pointer;opacity:0;transition:opacity 0.15s ease}.copy-code-button:hover{color:var(--accent);border-color:var(--accent)}pre:hover .copy-code-button,.copy-code-button.is-copied{opacity:1}.post-toc{display:none}@media (min-width: 1280px){.post-toc{display:block;position:absolute;top:0;bottom:0;left:calc(50% + 400px);width:200px}.post-toc[hidden]{display:none}.toc-inner{position:sticky;top:90px;font-size:0.85rem}}.toc-title{font-family:"JetBrains Mono","Cascadia Code",Consolas,monospace;font-size:0.75rem;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:var(--text-faint);margin:0 0 12px}#toc-nav a{display:block;color:var(--text-muted);padding:3px 0 3px 12px;border-left:2px solid var(--border-subtle);line-height:1.4}#toc-nav a.toc-h3{padding-left:26px}#toc-nav a:hover{color:var(--text)}#toc-nav a.is-active{color:var(--accent);border-left-color:var(--accent)}.post-full-footer{max-width:720px;margin:40px auto 0;padding-top:24px;border-top:1px solid var(--border-subtle)}.post-share{display:flex;align-items:center;gap:10px;font-size:0.9rem;color:var(--text-faint)}.post-share a{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border:1px solid var(--border);border-radius:8px;color:var(--text-muted)}.post-share a svg{width:15px;height:15px;fill:currentColor}.post-share a:hover{color:var(--accent);border-color:var(--accent)}.author-box{display:flex;gap:20px;align-items:flex-start;max-width:720px;margin:32px auto 0;padding:24px;background:var(--bg-subtle);border-radius:14px;box-shadow:var(--card-shadow)}.author-avatar{width:64px;height:64px;border-radius:50%;object-fit:cover;flex-shrink:0}.author-title{font-size:1.05rem;margin:0 0 6px}.author-bio{color:var(--text-muted);font-size:0.92rem;margin:0 0 10px}.author-links{display:flex;flex-wrap:wrap;gap:16px;font-size:0.85rem;color:var(--text-faint);margin:0}.author-links svg{width:13px;height:13px;fill:currentColor;vertical-align:-2px}.related-posts{max-width:720px;margin:48px auto 0}.related-grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(200px, 1fr));gap:14px;margin-top:18px}.related-card{display:flex;flex-direction:column;gap:6px;padding:16px;border-radius:10px;background:var(--bg-subtle);box-shadow:var(--card-shadow)}.related-card:hover{box-shadow:var(--card-shadow-hover)}.related-card .related-date{display:flex;align-items:center;gap:8px;font-family:"JetBrains Mono","Cascadia Code",Consolas,monospace;font-size:0.72rem;color:var(--text-faint)}.related-card .related-title{color:var(--text);font-weight:600;font-size:0.9rem;line-height:1.4}.post-navigation{display:grid;grid-template-columns:1fr 1fr;gap:14px;max-width:720px;margin:40px auto 0}@media (max-width: 640px){.post-navigation{grid-template-columns:1fr}}.post-nav-card{display:flex;flex-direction:column;gap:6px;padding:16px 18px;border-radius:10px;background:var(--bg-subtle);box-shadow:var(--card-shadow)}.post-nav-card:hover{box-shadow:var(--card-shadow-hover)}.post-nav-card .post-nav-label{font-family:"JetBrains Mono","Cascadia Code",Consolas,monospace;font-size:0.72rem;color:var(--text-faint)}.post-nav-card .post-nav-title{color:var(--text);font-weight:600;font-size:0.9rem}.post-nav-card.post-nav-next{text-align:right}.glossary .post-full-header{margin-bottom:24px}.glossary-index{margin-bottom:40px}.glossary-index .tag-chip{min-width:34px;text-align:center;font-weight:600}.glossary-letter{font-family:"JetBrains Mono","Cascadia Code",Consolas,monospace;font-size:1.4rem;color:var(--accent);border-bottom:1px solid var(--border-subtle);padding-bottom:6px;margin:32px 0 16px;scroll-margin-top:90px}.glossary-entry{max-width:720px;padding:18px 20px;margin-bottom:14px;border-radius:12px;background:var(--bg-subtle);box-shadow:var(--card-shadow);scroll-margin-top:90px;transition:box-shadow 0.2s ease}.glossary-entry:target{box-shadow:0 0 0 1px var(--accent),0 8px 24px rgba(1,4,9,0.4)}.glossary-term{font-family:"JetBrains Mono","Cascadia Code",Consolas,monospace;font-size:1.08rem;font-weight:600;color:var(--text);margin:0 0 8px}.glossary-def{color:var(--text-muted);font-size:0.96rem;margin:0 0 12px}.glossary-def{display:none}html[data-ui-lang="en"] .glossary-def[data-lang="en"],html[data-ui-lang="fr"] .glossary-def[data-lang="fr"]{display:block}.glossary-related{display:flex;flex-wrap:wrap;align-items:center;gap:6px}.glossary-related-label{font-size:0.8rem;color:var(--text-faint);margin-right:2px}.patterns-index .post-full-header{margin-bottom:32px}.pattern-group{margin-bottom:44px}.pattern-group .section-title{margin-bottom:18px}.pattern-category{text-transform:uppercase;letter-spacing:0.06em;font-size:0.68rem}.mermaid-diagram{margin:1.8em auto;text-align:center}.mermaid-diagram svg{max-width:100%;height:auto}html[data-theme="dark"]{--sx-comment: #8b949e;--sx-keyword: #ff7b72;--sx-string: #a5d6ff;--sx-number: #79c0ff;--sx-function: #d2a8ff;--sx-variable: #ffa657;--sx-constant: #79c0ff;--sx-error: #f85149}html[data-theme="light"]{--sx-comment: #6e7781;--sx-keyword: #cf222e;--sx-string: #0a3069;--sx-number: #0550ae;--sx-function: #8250df;--sx-variable: #953800;--sx-constant: #0550ae;--sx-error: #82071e}.highlight .c,.highlight .c1,.highlight .cm,.highlight .cs,.highlight .cd{color:var(--sx-comment);font-style:italic}.highlight .k,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .kv,.highlight .ow{color:var(--sx-keyword)}.highlight .kt,.highlight .kc{color:var(--sx-constant)}.highlight .s,.highlight .s1,.highlight .s2,.highlight .sb,.highlight .sc,.highlight .sd,.highlight .sh,.highlight .si,.highlight .sx,.highlight .sr,.highlight .ss{color:var(--sx-string)}.highlight .m,.highlight .mi,.highlight .mf,.highlight .mh,.highlight .mo,.highlight .mb,.highlight .mx,.highlight .il{color:var(--sx-number)}.highlight .nf,.highlight .fm,.highlight .nd{color:var(--sx-function)}.highlight .na,.highlight .nv,.highlight .vc,.highlight .vg,.highlight .vi,.highlight .bp{color:var(--sx-variable)}.highlight .nc,.highlight .nn,.highlight .no,.highlight .ne{color:var(--sx-function)}.highlight .nt{color:var(--sx-keyword)}.highlight .o{color:var(--text)}.highlight .err{color:var(--sx-error)}.highlight .gd{color:var(--sx-error);background:rgba(248,81,73,0.12)}.highlight .gi{color:var(--green);background:rgba(63,185,80,0.12)}.highlight .gh,.highlight .gu{color:var(--sx-number);font-weight:600}

/*# sourceMappingURL=main.css.map */