@charset "UTF-8";:root{--color-bg:#F5F1EB;--color-bg-secondary:#E8E0D4;--color-text:#2D2D2D;--color-text-secondary:#3D3D3D;--color-text-muted:#6B6B6B;--color-accent:#10b981;--color-accent-hover:#059669;--color-border:#2D2D2D;--color-border-subtle:#D4CBC0;--color-left-border:#2D2D2D;--color-code-bg:#1e1e1e;--color-code-text:#E8E0D4;--color-inline-code-bg:#D4CBC0;--color-inline-code-text:#2D2D2D}[data-theme=dark]{--color-bg:#2D2D2D;--color-bg-secondary:#3D3D3D;--color-text:#E8E0D4;--color-text-secondary:#D4CBC0;--color-text-muted:#A0998E;--color-accent:#10b981;--color-accent-hover:#059669;--color-border:#E8E0D4;--color-border-subtle:#3D3D3D;--color-left-border:#E8E0D4;--color-code-bg:#1a1a1a;--color-code-text:#E8E0D4;--color-inline-code-bg:#3D3D3D;--color-inline-code-text:#E8E0D4}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--color-bg:#2D2D2D;--color-bg-secondary:#3D3D3D;--color-text:#E8E0D4;--color-text-secondary:#D4CBC0;--color-text-muted:#A0998E;--color-accent:#10b981;--color-accent-hover:#059669;--color-border:#E8E0D4;--color-border-subtle:#3D3D3D;--color-left-border:#E8E0D4;--color-code-bg:#1a1a1a;--color-code-text:#E8E0D4;--color-inline-code-bg:#3D3D3D;--color-inline-code-text:#E8E0D4}}*,*::before,*::after{box-sizing:border-box}html{font-size:100%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{margin:0;padding:0;font-family:Inter,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,sans-serif;font-size:1.125rem;line-height:1.65;color:var(--color-text);background-color:var(--color-bg);transition:background-color .3s ease,color .3s ease}h1,h2,h3,h4,h5,h6{font-family:Georgia,times new roman,serif;font-weight:400;line-height:1.2;color:var(--color-text);margin-top:2em;margin-bottom:.5em}h1{font-size:2.441rem;margin-top:0}h2{font-size:1.953rem}h3{font-size:1.563rem}h4,h5,h6{font-size:1.25rem}p{margin:0 0 1.5em;max-width:65ch}a{color:var(--color-accent);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px;transition:color .2s ease,text-decoration-thickness .2s ease}a:hover{color:var(--color-accent-hover);text-decoration-thickness:2px}a:visited{color:var(--color-accent)}blockquote{margin:1.5rem 0;padding-left:1.5rem;border-left:12px solid var(--color-accent);font-style:italic;color:var(--color-text-secondary)}.site-wrapper{min-height:100vh;position:relative}.theme-bar{position:fixed;left:0;top:0;width:12px;height:100vh;background:var(--color-left-border);transition:background-color .3s ease,width .15s ease;z-index:100;border:none;padding:0;cursor:pointer}.theme-bar:hover{width:16px}.app-header{padding:2rem 1.5rem;max-width:800px;margin:0 auto}.app-header a{text-decoration:none;color:var(--color-text)}.app-header a:hover{color:var(--color-accent)}.app-header-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.app-header-logo{display:flex;align-items:center;gap:.75rem}.app-header-logo svg{width:48px;height:auto;transition:transform .3s ease}.app-header-logo svg path{fill:var(--color-accent);transition:fill .3s ease}.app-header-logo:hover svg{transform:scaleX(-1)}.app-header h1{font-size:1.25rem;margin:0;font-weight:600;font-family:Inter,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,sans-serif}.app-header-menu{display:flex;gap:1rem;margin-top:.75rem}.app-header-menu a{color:var(--color-text-secondary);text-decoration:none;font-size:.875rem}.app-header-menu a:hover{color:var(--color-accent)}.app-header-social{display:flex;gap:.75rem}.app-header-social a{color:var(--color-text-secondary);font-size:1.25rem}.app-header-social a:hover{color:var(--color-accent)}.app-container{max-width:800px;margin:0 auto;padding:0 1.5rem 3rem;min-height:calc(100vh - 200px);overflow-x:visible}.bio-section{display:flex;gap:2rem;align-items:flex-start;margin-bottom:3rem}@media(max-width:600px){.bio-section{flex-direction:column-reverse}}.bio-content{flex:1}.bio-content p{font-size:1.125rem;color:var(--color-text-secondary)}.bio-social{display:flex;gap:.75rem;margin-top:1rem}.bio-social a{color:var(--color-text-secondary);font-size:1.25rem}.bio-social a:hover{color:var(--color-accent)}.bio-image{flex-shrink:0}.bio-image img{width:120px;height:120px;border-radius:50%;object-fit:cover}.section-header{font-family:Inter,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,sans-serif;font-size:.875rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-muted);margin:3rem 0 1.5rem;padding-bottom:.5rem;border-bottom:1px solid var(--color-border-subtle)}.projects-list{display:flex;flex-direction:column;gap:2rem;margin-top:1.5rem}.projects-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;margin-top:1.5rem}@media(max-width:768px){.projects-grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:500px){.projects-grid{grid-template-columns:1fr}}.project-card{display:flex;flex-direction:column;background:var(--color-bg-secondary);border-radius:8px;overflow:hidden}.project-card .project-card-image{width:100%;height:160px;object-fit:cover}.project-card .project-card-content{padding:1rem;display:flex;flex-direction:column;flex-grow:1}.project-card .project-type{font-size:.875rem;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.05em;margin-bottom:.5rem}.project-card .project-name{font-family:Georgia,times new roman,serif;font-size:1.25rem;margin:0 0 .75rem;line-height:1.3}.project-card .project-name a{color:var(--color-text);text-decoration:none}.project-card .project-name a:hover{color:var(--color-accent)}.project-card .project-description{font-size:.875rem;color:var(--color-text-secondary);line-height:1.5;margin:0;flex-grow:1}.project-card .project-description p{margin:0}.project-card .project-description a{color:var(--color-accent);text-decoration:underline}.project-card-large{display:grid;grid-template-columns:1fr auto;gap:1.5rem;padding:1.5rem;background:var(--color-bg-secondary);border-radius:8px;border-left:4px solid var(--color-accent);transition:border-color .2s ease}.project-card-large:hover{border-color:var(--color-text)}.project-content{display:flex;flex-direction:column}.project-header{display:flex;align-items:center;gap:.5rem;margin-bottom:.5rem}.project-icon{color:var(--color-accent);font-size:1.25rem}.project-type{font-size:.875rem;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.05em}.project-name{font-family:Georgia,times new roman,serif;font-size:1.563rem;margin:0 0 .75rem}.project-name a{color:var(--color-text);text-decoration:none}.project-name a:hover{color:var(--color-accent)}.project-description{font-size:1rem;color:var(--color-text-secondary);margin:0 0 1rem;line-height:1.6}.project-highlights{list-style:none;padding:0;margin:0 0 1rem;display:flex;flex-wrap:wrap;gap:.5rem}.project-highlights li{font-size:.875rem;color:var(--color-text-muted);background:var(--color-bg);padding:.25rem .75rem;border-radius:4px}.project-link{font-size:.875rem;color:var(--color-accent);text-decoration:none;margin-top:auto}.project-link:hover{text-decoration:underline}.project-image{width:180px;flex-shrink:0}.project-image img{width:100%;height:auto;border-radius:4px;object-fit:cover}@media(max-width:600px){.project-card-large{grid-template-columns:1fr}.project-image{width:100%;max-width:200px;order:-1}}.posts-list{list-style:none;padding:0;margin:0}.post-card{padding:1.5rem 0;border-bottom:1px solid var(--color-border-subtle)}.post-card:last-child{border-bottom:none}.post-card-title{font-family:Georgia,times new roman,serif;font-size:1.563rem;margin:0 0 .5rem;line-height:1.4}.post-card-title a{color:var(--color-text);text-decoration:none}.post-card-title a:hover{color:var(--color-accent)}.post-card-date-separator{color:var(--color-text-muted);margin:0 .4em}.post-card-date{font-family:Inter,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,sans-serif;font-size:.875rem;font-weight:400;color:var(--color-text-muted);white-space:nowrap}.post-card-description{font-size:1rem;color:var(--color-text-secondary);margin:0 0 .75rem;line-height:1.5}.post-card-tags{display:flex;flex-wrap:wrap;gap:.5rem}.tag{display:inline-block;padding:.125rem .375rem;background:var(--color-bg-secondary);color:var(--color-text-secondary);font-size:.75rem;border-radius:3px;text-decoration:none;transition:background-color .2s ease,color .2s ease}.tag:hover{background:var(--color-accent);color:#fff}.tags-cloud{display:flex;flex-wrap:wrap;gap:.75rem;margin-top:1.5rem}.tag-cloud-item{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem .75rem;background:var(--color-bg-secondary);color:var(--color-text);font-size:1rem;border-radius:4px;text-decoration:none;transition:background-color .2s ease,color .2s ease}.tag-cloud-item:hover{background:var(--color-accent);color:#fff}.tag-cloud-item:hover .tag-count{background:rgba(255,255,255,.2);color:#fff}.tag-count{display:inline-flex;align-items:center;justify-content:center;min-width:1.5rem;padding:.125rem .375rem;background:var(--color-bg);color:var(--color-text-muted);font-size:.875rem;border-radius:3px;transition:background-color .2s ease,color .2s ease}.post{max-width:65ch}.post-header{margin-bottom:2rem}.post-title{font-size:3.052rem;margin:0 0 .75rem}.post-meta{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;color:var(--color-text-muted);font-size:.875rem;margin-bottom:.75rem}.post-meta-separator{color:var(--color-text-muted)}.post-tags{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:1.5rem}.post-content h2{margin-top:3rem}.post-content img{max-width:100%;height:auto;border-radius:4px}.post-content ul,.post-content ol{padding-left:1.5rem}.post-content ul li,.post-content ol li{margin-bottom:.5rem}.post-content .highlight,.post-content pre{margin-bottom:3rem}code{font-family:jetbrains mono,fira code,sf mono,Menlo,Monaco,Consolas,monospace;font-size:.875em}p code,li code,td code{background-color:var(--color-inline-code-bg);color:var(--color-inline-code-text);padding:.125em .375em;border-radius:3px}pre{background-color:var(--color-code-bg);color:var(--color-code-text);padding:1rem 1.5rem;border-radius:4px;overflow-x:auto;margin:1.5rem calc(-1 * $code-extend)3rem;width:calc(100% + 2 * $code-extend);max-width:none}pre code{background:0 0;padding:0;font-size:.75em;line-height:1.5;color:inherit}.highlight{margin-top:1.5rem;margin-left:calc(-1 * $code-extend);margin-right:calc(-1 * $code-extend);margin-bottom:3rem;width:calc(100% + 2 * $code-extend);max-width:none}.highlight pre{margin:0;width:100%;max-width:none}table,.table{width:100%;border-collapse:collapse;margin:2rem 0;font-size:.875rem}th,td{padding:.75rem 1rem;text-align:left;vertical-align:top;border-bottom:1px solid var(--color-border-subtle)}thead th{font-weight:600;color:var(--color-text);border-bottom:2px solid var(--color-border);background:0 0}tbody tr:hover{background-color:var(--color-bg-secondary)}.theme-toggle{background:0 0;border:none;cursor:pointer;padding:.5rem;color:var(--color-text-secondary);font-size:1.25rem;transition:color .2s ease}.theme-toggle:hover{color:var(--color-accent)}.theme-toggle svg{width:20px;height:20px;fill:currentColor}.theme-toggle__sun{display:block}[data-theme=dark] .theme-toggle__sun{display:none}.theme-toggle__moon{display:none}[data-theme=dark] .theme-toggle__moon{display:block}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .theme-toggle__sun{display:none}:root:not([data-theme=light]) .theme-toggle__moon{display:block}}.til-list{list-style:none;padding:0;margin:0}.til-entry{padding:1.5rem 0;border-bottom:1px solid var(--color-border-subtle)}.til-entry:last-child{border-bottom:none}.til-entry--quote{font-style:italic;font-size:1.25rem}.til-entry--quote .til-content{color:var(--color-text)}.til-entry--quote .til-author{font-style:normal;font-size:1rem;color:var(--color-text-muted);margin-top:.5rem}.til-entry--quote .til-author::before{content:"— "}.til-entry--til .til-title{font-family:Georgia,times new roman,serif;font-size:1.563rem;margin:0 0 .5rem}.til-entry--til .til-content{color:var(--color-text-secondary)}.til-entry--til .til-tags{margin-top:.75rem}.til-date{font-size:.875rem;color:var(--color-text-muted);font-family:Inter,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,sans-serif;font-weight:400}.til-date-separator{color:var(--color-text-muted);margin:0 .4em}.pagination{display:flex;justify-content:center;align-items:center;gap:.25rem;margin:3rem 0}.pagination .page-link{display:flex;align-items:center;justify-content:center;min-width:2.25rem;height:2.25rem;padding:.5rem .75rem;border-radius:4px;text-decoration:none;color:var(--color-text-muted);font-size:.875rem}.pagination .page-link:hover{background:var(--color-bg-secondary);color:var(--color-accent)}.pagination .page-link.active{background:var(--color-accent);color:#fff}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(max-width:768px){.app-container{padding:0 1rem 2rem}h1{font-size:1.953rem}.post-title{font-size:1.953rem}pre,.highlight{margin-left:0;margin-right:0;width:100%;max-width:100%}}.box{padding:1rem;margin:1.5rem 0;border-radius:4px;border-left:12px solid;background:var(--color-bg-secondary)}.box p:last-child{margin-bottom:0}.box--info{border-color:var(--color-bg-secondary)}.box--warning{border-color:#f59e0b}.box--important{border-color:var(--color-accent)}.box--tip{border-color:var(--color-accent)}.chart-container{background:var(--color-code-bg);border-radius:8px;padding:1rem;margin:1.5rem 0}.chart-header{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:.75rem;color:var(--color-text-muted);font-size:.875rem;text-transform:uppercase;letter-spacing:.05em}.chart-stat{font-size:1.563rem;font-weight:600;color:var(--color-accent)}.chart-stat-label{font-size:.875rem;color:var(--color-text-muted);margin-left:.5rem}