:root[data-theme=dark]{--bg:#0d0d0d;--bg-secondary:#141414;--text:#e8e8e8;--text-muted:#888;--accent:#7aa2f7;--accent-alt:#9ece6a;--border:#2a2a2a;--tag-tuto:#9ece6a;--tag-idea:#bb9af7}:root[data-theme=light]{--bg:#fafafa;--bg-secondary:#f0f0f0;--text:#1a1a1a;--text-muted:#666;--accent:#2563eb;--accent-alt:#16a34a;--border:#e0e0e0;--tag-tuto:#16a34a;--tag-idea:#7c3aed}@font-face{font-family:ibm plex mono;src:url(/fonts/IBMPlexMono-Regular.woff2)format('woff2');font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:ibm plex mono;src:url(/fonts/IBMPlexMono-Bold.woff2)format('woff2');font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:ibm plex mono;src:url(/fonts/IBMPlexMono-Italic.woff2)format('woff2');font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:ibm plex sans;src:url(/fonts/IBMPlexSans-Regular.woff2)format('woff2');font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:ibm plex sans;src:url(/fonts/IBMPlexSans-Bold.woff2)format('woff2');font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:ibm plex sans;src:url(/fonts/IBMPlexSans-Italic.woff2)format('woff2');font-weight:400;font-style:italic;font-display:swap}*,*::before,*::after{box-sizing:border-box}html{font-size:17px;line-height:1.7}body{margin:0;padding:0;background-color:var(--bg);color:var(--text);font-family:ibm plex sans,system-ui,sans-serif}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}.site-header,.site-footer{max-width:860px;margin:0 auto;padding-left:1.5rem;padding-right:1.5rem}main{max-width:680px;margin:0 auto;padding:2.5rem 1.5rem 5rem}.site-header{padding-top:1.25rem;padding-bottom:1.25rem;border-bottom:1px solid var(--border)}.site-nav{display:flex;align-items:center;gap:.5rem}.site-title{font-family:ibm plex mono,monospace;font-weight:700;font-size:.9rem;color:var(--text);text-decoration:none;flex:1;letter-spacing:-.02em}.site-title:hover{color:var(--accent);text-decoration:none}.nav-links{display:flex;align-items:center;gap:1.5rem;font-size:.875rem}.nav-links a{color:var(--text-muted);font-family:ibm plex mono,monospace}.nav-links a:hover{color:var(--text);text-decoration:none}.theme-toggle{background:0 0;border:none;cursor:pointer;color:var(--text-muted);font-size:.95rem;padding:0;line-height:1;display:flex;align-items:center}.theme-toggle:hover{color:var(--text)}.lang-switch{display:flex;gap:.2rem;font-size:.8rem;font-family:ibm plex mono,monospace;color:var(--text-muted)}.lang-switch a{color:var(--text-muted)}.lang-switch a:hover{color:var(--text);text-decoration:none}.lang-current{color:var(--text);font-weight:700}.lang-sep{color:var(--border)}.site-footer{border-top:1px solid var(--border);padding-top:1.25rem;padding-bottom:2rem;margin-top:3rem;font-size:.82rem;color:var(--text-muted);font-family:ibm plex mono,monospace}.site-footer a{color:var(--text-muted)}.site-footer a:hover{color:var(--accent);text-decoration:none}.page-header{margin-bottom:2rem}.page-header h1{font-family:ibm plex mono,monospace;font-size:1.1rem;font-weight:400;color:var(--text-muted);margin:0}.article-list{display:flex;flex-direction:column}.article-card{display:grid;grid-template-columns:6.5rem 5rem 1fr;align-items:baseline;column-gap:1rem;padding:.35rem 0;border-bottom:1px solid transparent;font-size:.88rem}.article-card:hover{border-bottom-color:var(--border)}.card-date{color:var(--text-muted);font-family:ibm plex mono,monospace;font-size:.8rem;white-space:nowrap}.card-type{font-family:ibm plex mono,monospace;font-size:.78rem;white-space:nowrap}.type-tuto{color:var(--tag-tuto)}.type-idea{color:var(--tag-idea)}.card-title-tags{display:flex;align-items:baseline;gap:1rem;flex-wrap:wrap;min-width:0}.card-title{color:var(--text);font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.card-title:hover{color:var(--accent);text-decoration:none}.card-tags{display:flex;gap:.5rem;flex-wrap:wrap;flex-shrink:0}.card-tags .tag{color:var(--text-muted);font-size:.78rem;font-family:ibm plex mono,monospace}.card-tags .tag:hover{color:var(--accent);text-decoration:none}.tutorial-category{margin-bottom:2.5rem}.category-title{font-family:ibm plex mono,monospace;font-size:.88rem;font-weight:400;color:var(--text-muted);margin:0 0 .5rem;padding-bottom:.3rem;border-bottom:1px solid var(--border)}.article-header{margin-bottom:2.5rem;padding-bottom:1.25rem;border-bottom:1px solid var(--border)}.article-date{display:block;font-family:ibm plex mono,monospace;font-size:.8rem;color:var(--text-muted);margin-bottom:.6rem}.article-title{font-family:ibm plex mono,monospace;font-size:1.5rem;font-weight:700;line-height:1.3;margin:0 0 1rem;color:var(--text)}.article-tags{display:flex;gap:.75rem;flex-wrap:wrap}.article-tags .tag{font-family:ibm plex mono,monospace;font-size:.8rem;color:var(--text-muted)}.article-tags .tag:hover{color:var(--accent);text-decoration:none}.article-content h1,.article-content h2,.article-content h3,.article-content h4{font-family:ibm plex mono,monospace;color:var(--text);margin-top:2rem;margin-bottom:.5rem}.article-content h2{font-size:1.15rem;padding-bottom:.25rem;border-bottom:1px solid var(--border)}.article-content h3{font-size:1rem}.article-content p{margin:0 0 1.1rem}.article-content code{font-family:ibm plex mono,monospace;font-size:.85em;background:var(--bg-secondary);padding:.1em .35em;border-radius:3px;color:var(--accent-alt)}.article-content pre{background:var(--bg-secondary);border:1px solid var(--border);border-radius:4px;padding:1rem 1.25rem;overflow-x:auto;margin:1.25rem 0}.article-content pre code{background:0 0;padding:0;color:var(--text);font-size:.88rem}.article-content blockquote{border-left:3px solid var(--border);margin:1.25rem 0;padding-left:1rem;color:var(--text-muted)}.article-content blockquote p{margin:0}.article-content img{max-width:100%;height:auto;display:block;margin:1.5rem auto}.article-content table{border-collapse:collapse;width:100%;font-size:.88rem;margin:1.25rem 0}.article-content th,.article-content td{border:1px solid var(--border);padding:.4rem .75rem;text-align:left}.article-content th{background:var(--bg-secondary);font-family:ibm plex mono,monospace;font-size:.8rem;font-weight:700}.article-content hr{border:none;border-top:1px solid var(--border);margin:2rem 0}.article-content ul,.article-content ol{padding-left:1.5rem;margin:0 0 1rem}.article-content li{margin-bottom:.2rem}#graph-container{position:relative;width:70vw;margin-left:calc((680px - 70vw)/2);height:70vh;border:1px solid var(--border);border-radius:4px;overflow:hidden;background:var(--bg-secondary)}#graph-container.fullscreen{position:fixed;inset:0;width:100vw;height:100vh;margin:0;border-radius:0;border:none;z-index:9999}#graph{width:100%;height:100%}#graph-fullscreen-btn{position:absolute;top:10px;right:10px;z-index:10;background:var(--bg);border:1px solid var(--border);color:var(--text-muted);font-family:ibm plex mono,monospace;font-size:.75rem;padding:4px 8px;cursor:pointer;border-radius:3px;line-height:1}#graph-fullscreen-btn:hover{color:var(--text);border-color:var(--accent)}.graph-empty{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--text-muted);font-family:ibm plex mono,monospace;font-size:.85rem}@media(max-width:640px){html{font-size:16px}main{padding:2rem 1rem 4rem}.site-nav{flex-wrap:wrap;row-gap:.5rem}.site-title{font-size:.82rem}.nav-links{gap:.75rem;flex-wrap:wrap}.article-card{grid-template-columns:1fr;gap:.1rem;padding:.6rem 0;border-bottom:1px solid var(--border)}.card-title{white-space:normal}.card-title-tags{flex-direction:column;gap:.2rem}.article-title{font-size:1.25rem}.article-content table{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch}#graph-container{width:100%;margin-left:0;height:55vh}}.bg{color:#f8f8f2;background-color:#272822}.chroma{color:#f8f8f2;background-color:#272822}.chroma .err{color:#960050;background-color:#1e0010}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#3c3d38}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .line{display:flex}.chroma .k{color:#66d9ef}.chroma .kc{color:#66d9ef}.chroma .kd{color:#66d9ef}.chroma .kn{color:#f92672}.chroma .kp{color:#66d9ef}.chroma .kr{color:#66d9ef}.chroma .kt{color:#66d9ef}.chroma .na{color:#a6e22e}.chroma .nc{color:#a6e22e}.chroma .no{color:#66d9ef}.chroma .nd{color:#a6e22e}.chroma .ne{color:#a6e22e}.chroma .nx{color:#a6e22e}.chroma .nt{color:#f92672}.chroma .nf{color:#a6e22e}.chroma .fm{color:#a6e22e}.chroma .l{color:#ae81ff}.chroma .ld{color:#e6db74}.chroma .s{color:#e6db74}.chroma .sa{color:#e6db74}.chroma .sb{color:#e6db74}.chroma .sc{color:#e6db74}.chroma .dl{color:#e6db74}.chroma .sd{color:#e6db74}.chroma .s2{color:#e6db74}.chroma .se{color:#ae81ff}.chroma .sh{color:#e6db74}.chroma .si{color:#e6db74}.chroma .sx{color:#e6db74}.chroma .sr{color:#e6db74}.chroma .s1{color:#e6db74}.chroma .ss{color:#e6db74}.chroma .m{color:#ae81ff}.chroma .mb{color:#ae81ff}.chroma .mf{color:#ae81ff}.chroma .mh{color:#ae81ff}.chroma .mi{color:#ae81ff}.chroma .il{color:#ae81ff}.chroma .mo{color:#ae81ff}.chroma .o{color:#f92672}.chroma .ow{color:#f92672}.chroma .c{color:#75715e}.chroma .ch{color:#75715e}.chroma .cm{color:#75715e}.chroma .c1{color:#75715e}.chroma .cs{color:#75715e}.chroma .cp{color:#75715e}.chroma .cpf{color:#75715e}.chroma .gd{color:#f92672}.chroma .ge{font-style:italic}.chroma .gi{color:#a6e22e}.chroma .gs{font-weight:700}.chroma .gu{color:#75715e}.bg{background-color:#fff}.chroma{background-color:#fff}.chroma .err{color:#f6f8fa;background-color:#82071e}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#e5e5e5}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .line{display:flex}.chroma .k{color:#cf222e}.chroma .kc{color:#cf222e}.chroma .kd{color:#cf222e}.chroma .kn{color:#cf222e}.chroma .kp{color:#cf222e}.chroma .kr{color:#cf222e}.chroma .kt{color:#cf222e}.chroma .na{color:#1f2328}.chroma .nc{color:#1f2328}.chroma .no{color:#0550ae}.chroma .nd{color:#0550ae}.chroma .ni{color:#6639ba}.chroma .nl{color:#900;font-weight:700}.chroma .nn{color:#24292e}.chroma .nx{color:#1f2328}.chroma .nt{color:#0550ae}.chroma .nb{color:#6639ba}.chroma .bp{color:#6a737d}.chroma .nv{color:#953800}.chroma .vc{color:#953800}.chroma .vg{color:#953800}.chroma .vi{color:#953800}.chroma .vm{color:#953800}.chroma .nf{color:#6639ba}.chroma .fm{color:#6639ba}.chroma .s{color:#0a3069}.chroma .sa{color:#0a3069}.chroma .sb{color:#0a3069}.chroma .sc{color:#0a3069}.chroma .dl{color:#0a3069}.chroma .sd{color:#0a3069}.chroma .s2{color:#0a3069}.chroma .se{color:#0a3069}.chroma .sh{color:#0a3069}.chroma .si{color:#0a3069}.chroma .sx{color:#0a3069}.chroma .sr{color:#0a3069}.chroma .s1{color:#0a3069}.chroma .ss{color:#032f62}.chroma .m{color:#0550ae}.chroma .mb{color:#0550ae}.chroma .mf{color:#0550ae}.chroma .mh{color:#0550ae}.chroma .mi{color:#0550ae}.chroma .il{color:#0550ae}.chroma .mo{color:#0550ae}.chroma .o{color:#0550ae}.chroma .ow{color:#0550ae}.chroma .p{color:#1f2328}.chroma .c{color:#57606a}.chroma .ch{color:#57606a}.chroma .cm{color:#57606a}.chroma .c1{color:#57606a}.chroma .cs{color:#57606a}.chroma .cp{color:#57606a}.chroma .cpf{color:#57606a}.chroma .gd{color:#82071e;background-color:#ffebe9}.chroma .ge{color:#1f2328}.chroma .gi{color:#116329;background-color:#dafbe1}.chroma .go{color:#1f2328}.chroma .gl{text-decoration:underline}.chroma .w{color:#fff}