:root{--bg:#ffffff;--bg-secondary:#f7f7f8;--text:#1a1a1a;--text-muted:#6b7280;--accent:#2563eb;--accent-hover:#1d4ed8;--border:#e5e7eb;--code-bg:#f3f4f6;--max-width:720px;--bg-pattern:url("data:image/svg+xml,%3Csvg width='24' height='24' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='12' cy='12' r='1' fill='%23e0e0e0'/%3E%3C/svg%3E")}:root[data-theme=dark]{--bg:#111113;--bg-secondary:#1c1c1f;--text:#e4e4e7;--text-muted:#a1a1aa;--accent:#60a5fa;--accent-hover:#93bbfd;--border:#2e2e32;--code-bg:#1e1e22;--bg-pattern:url("data:image/svg+xml,%3Csvg width='24' height='24' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='12' cy='12' r='1' fill='%232a2a30'/%3E%3C/svg%3E")}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#111113;--bg-secondary:#1c1c1f;--text:#e4e4e7;--text-muted:#a1a1aa;--accent:#60a5fa;--accent-hover:#93bbfd;--border:#2e2e32;--code-bg:#1e1e22;--bg-pattern:url("data:image/svg+xml,%3Csvg width='24' height='24' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='12' cy='12' r='1' fill='%232a2a30'/%3E%3C/svg%3E")}}*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,segoe ui,Roboto,Oxygen,Ubuntu,Cantarell,fira sans,droid sans,helvetica neue,sans-serif;font-size:1rem;line-height:1.7;color:var(--text);background-color:var(--bg);background-image:var(--bg-pattern);background-repeat:repeat}main{max-width:var(--max-width);margin:0 auto;padding:2rem 1.5rem}a{color:var(--accent);text-decoration:none}a:hover{color:var(--accent-hover);text-decoration:underline}h1,h2,h3,h4{line-height:1.3;margin-top:1.5em;margin-bottom:.5em}h1{font-size:1.8rem}h2{font-size:1.4rem}h3{font-size:1.15rem}p{margin-bottom:1em}ul,ol{padding-left:1.5em;margin-bottom:1em}img{max-width:100%;height:auto;display:block;margin-left:auto;margin-right:auto}:root[data-theme=dark] article img[src$=".png"]{filter:invert(.88)hue-rotate(180deg)}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) article img[src$=".png"]{filter:invert(.88)hue-rotate(180deg)}}.post-content img{cursor:zoom-in}.lightbox{position:fixed;inset:0;z-index:1000;display:none;align-items:center;justify-content:center;padding:2rem;background:rgba(0,0,0,.88);cursor:zoom-out;opacity:0;transition:opacity .18s ease}.lightbox.open{display:flex;opacity:1}.lightbox img{max-width:100%;max-height:100%;width:auto;height:auto;background:#fff;border-radius:4px;box-shadow:0 12px 48px rgba(0,0,0,.55);filter:none!important}.lightbox-close{position:fixed;top:.75rem;right:1.25rem;font-size:2.5rem;line-height:1;color:#fff;cursor:pointer;background:0 0;border:none;padding:.25rem .5rem}hr{border:none;border-top:1px solid var(--border);margin:2rem 0}header{border-bottom:1px solid var(--border)}header nav{max-width:var(--max-width);margin:0 auto;padding:1rem 1.5rem;display:flex;align-items:center;justify-content:space-between}.site-title{font-size:1.2rem;font-weight:700;color:var(--text)}.site-title:hover{color:var(--accent);text-decoration:none}header ul{list-style:none;display:flex;gap:1.5rem;padding:0;margin:0}header ul a{color:var(--text-muted);font-size:.95rem}header ul a:hover,header ul a.active{color:var(--accent)}.nav-blog{display:flex;align-items:center;gap:.5rem}.nav-icon{display:flex;align-items:center;color:var(--text-muted);cursor:pointer;list-style:none;transition:color .2s}.nav-icon::-webkit-details-marker{display:none}.nav-icon:hover,.subscribe[open] .nav-icon{color:var(--accent)}.nav-icon{line-height:0}.nav-icon svg{display:block;width:15px;height:15px}footer{border-top:1px solid var(--border);margin-top:3rem}.footer-content{max-width:var(--max-width);margin:0 auto;padding:1.5rem;text-align:center}footer p{font-size:.85rem;color:var(--text-muted);margin:.75rem 0 0}.social-links{display:flex;justify-content:center;gap:.75rem}.social-links a{color:var(--text-muted);display:flex;transition:color .2s}.social-links a:hover{color:var(--accent);text-decoration:none}.recent-posts h2{margin-top:2.5rem}.recent-posts ul{list-style:none;padding:0}.recent-posts li{display:flex;gap:1rem;align-items:baseline;padding:.3rem 0}.recent-posts time{font-size:.85rem;color:var(--text-muted);white-space:nowrap}.interesting-blogs h2{margin-top:2.5rem}.interesting-blogs ul{list-style:none;padding:0}.interesting-blogs li{display:flex;gap:1rem;align-items:baseline;padding:.3rem 0}.interesting-blogs time{font-size:.85rem;color:var(--text-muted);white-space:nowrap;min-width:5.5rem}.interesting-blogs .feed-source{font-size:.8rem;color:var(--text-muted);white-space:nowrap}.interesting-blogs .feeds-loading{color:var(--text-muted);font-size:.9rem}.feeds-more{display:inline-block;margin-top:.75rem;padding:.35em .75em;font-size:.8rem;color:var(--accent);background:var(--bg);border:1px solid var(--accent);border-radius:4px;cursor:pointer;transition:background .2s,color .2s}.feeds-more:hover{background:var(--accent);color:var(--bg)}.feeds-more:disabled{opacity:.6;cursor:default}.posts-year h2{margin-top:2rem;margin-bottom:.25rem}.posts-year h3{margin-top:1rem;font-weight:500;color:var(--text-muted)}.post-list{list-style:none;padding:0}.post-list li{display:flex;gap:1rem;align-items:baseline;padding:.25rem 0}.post-list time{font-size:.85rem;color:var(--text-muted);min-width:3.5rem}.list-header{position:relative;display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;margin:2.7rem 0 .9rem}.list-header h1{margin:0 .5rem 0 0}.list-header .subscribe{position:static}.list-header .subscribe .subscribe-form{left:0;right:auto}a.subscribe-toggle:hover{text-decoration:none}.subscribe{position:relative}.subscribe-toggle{display:inline-flex;align-items:center;gap:.4em;padding:.35em .75em;font-size:.8rem;color:var(--accent);background:var(--bg);border:1px solid var(--accent);border-radius:4px;cursor:pointer;list-style:none;user-select:none;transition:background .2s,color .2s}.subscribe-toggle::-webkit-details-marker{display:none}.subscribe-toggle:hover,.subscribe[open] .subscribe-toggle{background:var(--accent);color:var(--bg)}.subscribe-form{display:flex;gap:.4rem}.subscribe .subscribe-form{position:absolute;top:calc(100% + .4rem);right:0;z-index:10;width:min(20rem,calc(100vw - 2rem));padding:.4rem;background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;box-shadow:0 4px 16px rgba(0,0,0,.15)}header nav{position:relative}.subscribe-nav{position:static}.subscribe-nav .subscribe-form{right:1.5rem}.subscribe-form input[type=email]{flex:1;min-width:0;padding:.35em .6em;font:inherit;font-size:.85rem;color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:4px}.subscribe-form button{padding:.35em .75em;font:inherit;font-size:.8rem;color:var(--bg);background:var(--accent);border:1px solid var(--accent);border-radius:4px;cursor:pointer}.subscribe-form button:hover{background:var(--accent-hover)}.subscribe-form button:disabled{opacity:.6;cursor:default}.subscribe-done{margin:0;padding:.35em .2em;font-size:.85rem;color:var(--text)}.subscribe-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.75rem 1.5rem;margin-top:3rem;padding:1rem 1.25rem;background:var(--bg-secondary);border:1px solid var(--border);border-radius:8px}.subscribe-card-text{flex:1 1 16rem}.subscribe-card-title{margin:0;font-weight:600}.subscribe-card-sub{margin:.15rem 0 0;font-size:.85rem;color:var(--text-muted)}.subscribe-card .subscribe-form{flex:1 1 18rem;max-width:22rem}.post-header{margin-bottom:2rem}.post-header h1{margin-top:0}.post-meta{font-size:.9rem;color:var(--text-muted);display:flex;align-items:center;gap:.75rem;flex-wrap:wrap}.tags{display:flex;gap:.4rem;flex-wrap:wrap}.tag{background:var(--bg-secondary);border:1px solid var(--border);border-radius:3px;padding:.1em .5em;font-size:.8rem}.toc-sidebar{position:fixed;top:6rem;left:calc((100vw - var(--max-width))/2 - 260px);width:220px;max-height:calc(100vh - 8rem);overflow-y:auto}.toc-sidebar h2{font-size:.85rem;font-weight:600;color:var(--accent);margin-top:0;margin-bottom:.75rem;text-transform:none;letter-spacing:0}.toc-sidebar nav>ul{list-style:none;padding:0;margin:0}.toc-sidebar nav ul{list-style:none;padding:0;margin:0}.toc-sidebar nav ul ul{padding-left:.75rem;margin:0}.toc-sidebar nav li{margin:0;padding:0}.toc-sidebar nav a{display:block;padding:.25rem 0 .25rem .75rem;font-size:.82rem;line-height:1.4;color:var(--text-muted);border-left:2px solid transparent;transition:color .15s,border-color .15s}.toc-sidebar nav a:hover{color:var(--text);text-decoration:none}.toc-sidebar nav a.active{color:var(--accent);border-left-color:var(--accent);font-weight:500}@media(max-width:1100px){.toc-sidebar{position:static;width:100%;max-height:none;background:var(--bg-secondary);border:1px solid var(--border);border-radius:4px;padding:1rem 1.25rem;margin-bottom:1.5rem}.toc-sidebar nav a{border-left:none;padding-left:0}.toc-sidebar nav a.active{border-left:none}}code{font-family:sfmono-regular,Consolas,liberation mono,Menlo,monospace;font-size:.88em;background:var(--code-bg);padding:.15em .35em;border-radius:3px}pre{background:var(--code-bg);padding:1rem;border-radius:4px;overflow-x:auto;margin-bottom:1em}pre code{background:0 0;padding:0}blockquote{border-left:3px solid var(--accent);padding-left:1rem;margin:1em 0;color:var(--text-muted)}.about-header{display:flex;flex-wrap:wrap;align-items:center;gap:1.5rem;margin-bottom:2rem}.about-avatar{width:150px;height:auto;flex-shrink:0;border-radius:4px}.about-intro{flex:1 1 300px;min-width:0}.about-name-row{display:flex;align-items:center;gap:1rem;flex-wrap:wrap;margin-bottom:.5rem}.about-name-row h2{margin:0}.about-name-row .download-cv-btn{margin-top:0}.about-intro p:first-of-type{margin-top:.5rem}.about-meta{display:grid;grid-template-columns:auto 1fr;column-gap:1rem;row-gap:.3rem;margin:1rem 0 0;font-size:.95rem}.about-meta dt{color:var(--text-muted);font-weight:500}.about-meta dd{margin:0;color:var(--text)}.projects-grid{display:grid;grid-template-columns:1fr;gap:1.5rem;margin-top:2rem}.project-card{border:1px solid var(--border);border-radius:8px;overflow:hidden;background:var(--bg-secondary);transition:border-color .2s,transform .2s}.project-card:hover{border-color:var(--accent);transform:translateY(-2px)}.project-thumb-link{display:block}.project-thumb{width:100%;height:auto;margin:0;display:block;border-bottom:1px solid var(--border)}.project-body{padding:1.25rem 1.5rem 1.5rem}.project-name{margin:0;font-size:1.25rem}.project-tagline{margin:.15rem 0 .75rem;color:var(--text-muted);font-size:.95rem}.project-desc{margin:0 0 1rem;font-size:.95rem}.project-features{list-style:none;margin:0 0 1.25rem;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(16rem,1fr));gap:.75rem}.project-feature{display:flex;gap:.75rem;align-items:flex-start;padding:.85rem 1rem;border:1px solid var(--border);border-radius:8px;background:var(--bg);transition:border-color .2s}.project-feature:hover{border-color:var(--accent)}.project-feature-icon{flex:none;font-size:1.35rem;line-height:1.2}.project-feature-title{display:block;font-size:.95rem;color:var(--text)}.project-feature-text{margin:.2rem 0 0;font-size:.875rem;line-height:1.5;color:var(--text-muted)}.project-tags{margin-bottom:1rem}.project-links{display:flex;gap:1rem;flex-wrap:wrap;font-size:.9rem;font-weight:500}.download-cv-btn{display:inline-block;margin-top:4px;padding:.35em .75em;font-size:.8rem;color:var(--accent);background:var(--bg);border:1px solid var(--accent);border-radius:4px;cursor:pointer;transition:background .2s,color .2s}.download-cv-btn:hover{background:var(--accent);color:var(--bg)}.theme-toggle{background:0 0;border:none;cursor:pointer;color:var(--text-muted);padding:.25rem;display:flex;align-items:center;transition:color .2s}.theme-toggle:hover{color:var(--accent)}.theme-toggle svg{width:18px;height:18px}.scroll-to-top{max-width:var(--max-width);margin:0 auto;padding:0 1.5rem;text-align:right;display:none}.scroll-to-top.visible{display:block}.scroll-to-top a{font-size:.85rem;color:var(--accent)}@media print{header,footer,.download-cv-btn{display:none!important}body{color:#000;background:#fff}main{max-width:100%;padding:0}a{color:#000;text-decoration:none}}@media(max-width:600px){h1{font-size:1.5rem}h2{font-size:1.2rem}header nav{padding:.75rem 1rem;flex-wrap:wrap;gap:.5rem}.nav-right{gap:1rem}main{padding:1.5rem 1rem}.recent-posts li,.post-list li,.interesting-blogs li{flex-direction:column;gap:0}}.skills-page .skills-lede{font-size:1.2rem;line-height:1.6;margin-bottom:1.5rem}.skills-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:.75rem;margin:0 0 2rem}.skills-stats div{background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;padding:.75rem 1rem;color:var(--text-muted);font-size:.9rem}.skills-stats span{display:block;font-size:1.8rem;font-weight:700;line-height:1.2;color:var(--accent)}.skills-gates{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:.75rem;margin:1rem 0 1.5rem}.skills-gates div{border:1px solid var(--border);border-top:3px solid var(--accent);border-radius:6px;padding:.9rem 1rem;background:var(--bg)}.skills-gates p{margin:.4rem 0 0;font-size:.92rem;color:var(--text-muted)}.skills-page table{display:block;overflow-x:auto;width:100%;border-collapse:collapse;margin:1rem 0 1.5rem;font-size:.92rem}.skills-page th,.skills-page td{border:1px solid var(--border);padding:.45rem .7rem;text-align:left;vertical-align:top}.skills-page th{background:var(--bg-secondary)}.skills-gates-4{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}