@import "https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css";.fade-overlay{position:absolute;bottom:0;left:0;right:0;height:2.5rem;pointer-events:none;background:linear-gradient(to bottom,rgba(255,255,255,0) 0%,rgba(255,255,255,.6) 30%,white 100%)}[data-theme=dark] .fade-overlay{background:linear-gradient(to bottom,rgba(26,32,44,0) 0%,rgba(26,32,44,.6) 30%,#1a202c 100%)}.post-header{display:flex;align-items:start;justify-content:space-between;gap:1rem}@media(max-width:640px){.post-header{flex-direction:column;gap:.5rem}.post-header .post-tags{margin-top:.5rem}.post-header .tag-divider{display:none}}.post-tags{display:flex;align-items:center;gap:.5rem;flex-shrink:0}.post-title-link{color:inherit;text-decoration:none;transition:color .2s ease}.post-title-link:hover{color:oklch(var(--p));text-decoration:underline}.post-title{color:oklch(var(--bc)) !important;transition:color .3s ease}.post-card-group:hover .post-title,.card:hover .post-title{color:#7c3aed !important}.read-more-link{display:inline-flex;align-items:center;gap:.5rem;font-size:.875rem;font-weight:600;color:#7c3aed;text-decoration:none;transition:all .3s ease}.post-card-group:hover .read-more-link{color:#6d28d9;gap:.75rem}.read-more-arrow{transition:transform .2s ease}.post-card-group:hover .read-more-arrow{transform:translateX(4px)}.category-badge{display:inline-block;padding:.2rem .6rem;font-size:.7rem;font-weight:500;border-radius:1rem;transition:all .2s ease;text-decoration:none;background-color:#f3e8ff;color:#7c3aed;border:1px solid #e9d5ff}.category-badge:hover{background-color:#ede9fe;border-color:#ddd6fe;text-decoration:none}[data-theme=dark] .category-badge{background-color:rgba(167,139,250,.2);color:#c4b5fd;border:1px solid rgba(167,139,250,.3)}[data-theme=dark] .category-badge:hover{background-color:rgba(167,139,250,.3);border-color:rgba(167,139,250,.5)}.post-content{font-size:1.125rem;line-height:1.7;color:oklch(var(--bc))}.post-content p{margin-bottom:1rem}.post-content h1,.post-content h2,.post-content h3,.post-content h4,.post-content h5,.post-content h6{margin-top:1.5rem;margin-bottom:.75rem;line-height:1.3;font-weight:700;color:oklch(var(--bc))}.post-content h1{font-size:2.25rem;margin-top:0}.post-content h2{font-size:1.875rem}.post-content h3{font-size:1.5rem}.post-content h4{font-size:1.25rem}.post-content ul,.post-content ol{margin-bottom:1rem;padding-left:1.5rem}.post-content ul li,.post-content ol li{margin-bottom:.25rem;line-height:1.7}.post-content ul{list-style-type:disc;list-style-position:outside}.post-content ol{list-style-type:decimal;list-style-position:outside}.post-content ul ul{list-style-type:circle;margin-top:.375rem}.post-content ul ul ul{list-style-type:square}.post-content blockquote{margin:2rem 0;padding:1rem 1.5rem;border-left:4px solid oklch(var(--p));background-color:oklch(var(--b2));font-style:italic}.post-content blockquote p:last-child{margin-bottom:0}.post-content code{font-size:.9em;padding:.2rem .4rem;background-color:oklch(var(--b2));border-radius:.25rem;border:1px solid oklch(var(--b3));font-family:courier new,monospace;color:oklch(var(--bc))}.post-content .code-block-wrapper{position:relative;margin:2rem 0;border:2px solid #7c3aed;border-radius:.5rem;background-color:#1f2937}.post-content .code-block-wrapper .code-header{display:flex;justify-content:space-between;align-items:center;padding:.5rem 1rem;background-color:rgba(124,58,237,.1);border-bottom:1px solid rgba(124,58,237,.3)}.post-content .code-block-wrapper .code-header .code-language{font-size:.75rem;font-weight:600;color:#c4b5fd;text-transform:uppercase;letter-spacing:.05em}.post-content .code-block-wrapper .code-header .copy-button{padding:.25rem .75rem;font-size:.75rem;font-weight:500;color:#c4b5fd;background-color:transparent;border:1px solid rgba(124,58,237,.4);border-radius:.25rem;cursor:pointer;transition:all .2s ease}.post-content .code-block-wrapper .code-header .copy-button:hover{background-color:rgba(124,58,237,.2);border-color:#7c3aed;color:#e9d5ff}.post-content .code-block-wrapper .code-header .copy-button.copied{background-color:rgba(34,197,94,.2);border-color:#22c55e;color:#86efac}.post-content pre{margin:0;padding:1.5rem;background-color:#1f2937;border-radius:0 0 .5rem .5rem;border:none;overflow-x:auto}.post-content pre code{background-color:transparent;padding:0;border:none;color:#f9fafb}.post-content>pre{margin:2rem 0;border:2px solid #7c3aed;border-radius:.5rem}.post-content a{color:oklch(var(--p));text-decoration:underline;text-decoration-color:oklch(var(--p)/.3);transition:all .2s ease}.post-content a:hover{color:oklch(var(--pf));text-decoration-color:oklch(var(--pf)/.5)}.post-content img{margin:1.5rem 0;max-width:100%;height:auto}.post-content video{max-width:100%;height:auto}.post-content hr{margin:2rem auto;max-width:40%;border:none;border-top:3px solid #d1d5db;opacity:.6}.video-wrapper{margin:1.5rem 0}.video-wrapper video{display:block;width:100%;max-width:100%}.pr-table-wrapper{border-radius:.5rem;overflow:hidden;background-color:oklch(var(--b2)/.2);box-shadow:0 1px 2px rgba(0,0,0,5%);transition:all .3s ease}.pr-table-wrapper:hover{background-color:oklch(var(--b2)/.3);box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1)}.work-list li{padding-left:.5rem}.work-list li::marker{color:#7c3aed;font-size:1.25rem}.pr-row{border-left:4px solid rgba(124,58,237,.3);transition:all .3s ease}.pr-row:hover{border-left-color:rgba(124,58,237,.6)}.pr-row:hover .font-semibold{color:#7c3aed !important}.pr-row .font-semibold{transition:color .3s ease}.pr-row .pr-description p{margin:0 !important;padding:0 !important;line-height:inherit}.pr-row .pr-description a{color:#7c3aed;text-decoration:underline;text-underline-offset:2px;transition:color .2s ease}.pr-row .pr-description a:hover{color:#6d28d9}.tech-badge{display:inline-flex;align-items:center;gap:.375rem;padding:.375rem .625rem;background-color:transparent;border:1px solid rgba(107,33,168,.2);border-radius:.375rem;font-size:.8125rem;font-weight:500;color:oklch(var(--bc)/.8);transition:all .2s ease}.tech-badge:hover{border-color:rgba(107,33,168,.8);background-color:oklch(var(--bc)/.05);transform:translateY(-1px);box-shadow:0 2px 4px rgba(0,0,0,5%)}.tech-badge .tech-icon{width:1rem;height:1rem;flex-shrink:0}.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}html{scroll-behavior:smooth}