@font-face{font-family:EB Garamond;font-style:italic;font-weight:400;font-display:swap;src:url(/fonts/eb-garamond-latin-ext-400-italic.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:EB Garamond;font-style:italic;font-weight:400;font-display:swap;src:url(/fonts/eb-garamond-latin-400-italic.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:EB Garamond;font-style:italic;font-weight:500;font-display:swap;src:url(/fonts/eb-garamond-latin-ext-500-italic.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:EB Garamond;font-style:italic;font-weight:500;font-display:swap;src:url(/fonts/eb-garamond-latin-500-italic.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:EB Garamond;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/eb-garamond-latin-ext-400-regular.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:EB Garamond;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/eb-garamond-latin-400-regular.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:EB Garamond;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/eb-garamond-latin-ext-500-regular.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:EB Garamond;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/eb-garamond-latin-500-regular.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:EB Garamond;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/eb-garamond-latin-ext-600-regular.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:EB Garamond;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/eb-garamond-latin-600-regular.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Inter;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/inter-latin-ext-400-regular.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Inter;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/inter-latin-400-regular.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Inter;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/inter-latin-ext-500-regular.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Inter;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/inter-latin-500-regular.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Inter;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/inter-latin-ext-600-regular.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Inter;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/inter-latin-600-regular.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Inter;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/inter-latin-ext-700-regular.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Inter;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/inter-latin-700-regular.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Inter;font-style:normal;font-weight:800;font-display:swap;src:url(/fonts/inter-latin-ext-800-regular.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Inter;font-style:normal;font-weight:800;font-display:swap;src:url(/fonts/inter-latin-800-regular.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}:root{--bg:#ffffff;--bg-card:#f8f9fa;--text:#1a1a2e;--text-muted:#6b7280;--border:#e5e7eb;--accent:#2563eb;--accent-hover:#1d4ed8;--font-sans:"Inter",system-ui,-apple-system,sans-serif;--font-serif:"EB Garamond",Georgia,serif;--bg-prose:#eef0f4;--text-prose:var(--text);--text-xs:0.75rem;--text-sm:0.875rem;--text-base:1rem;--text-lg:1.125rem;--text-xl:1.25rem;--text-2xl:1.5rem;--text-3xl:1.875rem;--text-4xl:2.25rem;--text-hero:3rem;--space-1:0.25rem;--space-2:0.5rem;--space-3:0.75rem;--space-4:1rem;--space-6:1.5rem;--space-8:2rem;--space-12:3rem;--space-16:4rem;--max-width:800px;--header-height:60px;--radius:6px;--shadow:0 1px 3px rgba(0,0,0,0.08),0 1px 2px rgba(0,0,0,0.06);--shadow-md:0 4px 6px rgba(0,0,0,0.07),0 2px 4px rgba(0,0,0,0.06);--transition:background-color 0.2s ease,color 0.2s ease,border-color 0.2s ease}.dark{--bg:#0f172a;--bg-card:#1e293b;--text:#f1f5f9;--text-muted:#94a3b8;--border:#334155;--accent:#60a5fa;--accent-hover:#93c5fd;--bg-prose:#182032;--text-prose:#d6d9e0}*,:after,:before{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;scroll-behavior:smooth}body{font-family:var(--font-sans);font-size:var(--text-base);line-height:1.7;color:var(--text);background-color:var(--bg);transition:var(--transition);-webkit-font-smoothing:antialiased}img,picture,svg{display:block;max-width:100%}h1,h2,h3,h4{line-height:1.25;font-weight:700;color:var(--text)}h1{font-size:var(--text-3xl);margin-bottom:var(--space-4)}h2{font-size:var(--text-2xl)}h2,h3{margin-bottom:var(--space-3)}h3{font-size:var(--text-xl)}p{margin-bottom:var(--space-4);color:var(--text)}a{color:var(--accent);text-decoration:none;transition:color .15s ease}a:hover{color:var(--accent-hover);text-decoration:underline}hr{border:none;border-top:1px solid var(--border);margin:var(--space-8) 0}.container{max-width:var(--max-width);margin:0 auto;padding:0 var(--space-6)}.page-content{padding-top:calc(var(--header-height) + var(--space-12));padding-bottom:var(--space-16);min-height:calc(100vh - var(--header-height))}.muted{color:var(--text-muted)}.small{font-size:var(--text-sm)}.center{text-align:center}.section{margin-bottom:var(--space-12)}.card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:var(--space-6);box-shadow:var(--shadow);transition:var(--transition),box-shadow .2s ease}.card:hover{box-shadow:var(--shadow-md)}.tag{font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.04em;background:var(--bg);color:var(--text-muted);border:1px solid var(--border);border-radius:999px;padding:2px var(--space-2)}.btn,.tag{display:inline-block;font-weight:600}.btn{font-size:var(--text-sm);padding:var(--space-2) var(--space-6);border-radius:var(--radius);border:none;cursor:pointer;transition:background-color .15s ease,color .15s ease,opacity .15s ease;text-decoration:none;line-height:1.75}.btn-primary{background:var(--accent);color:#fff}.btn-primary:hover{background:var(--accent-hover);color:#fff;text-decoration:none}.btn-outline{background:transparent;color:var(--accent);border:1px solid var(--accent)}.btn-outline:hover{background:var(--accent);color:#fff;text-decoration:none}.btn:disabled{opacity:.55;cursor:not-allowed}.header{position:fixed;top:0;left:0;right:0;height:var(--header-height);background:var(--bg);border-bottom:1px solid var(--border);z-index:100;transition:var(--transition),box-shadow .2s ease}.header.scrolled{box-shadow:var(--shadow-md)}.header-inner{max-width:var(--max-width);margin:0 auto;padding:0 var(--space-6);height:100%;display:flex;align-items:center;justify-content:space-between;gap:var(--space-4)}.header-logo{font-weight:700;font-size:var(--text-lg);color:var(--text);text-decoration:none;white-space:nowrap}.header-logo:hover{color:var(--accent);text-decoration:none}.header-nav{display:flex;align-items:center;gap:var(--space-6);list-style:none}.header-nav a{font-size:var(--text-sm);font-weight:500;color:var(--text-muted);text-decoration:none;transition:color .15s ease}.header-nav a.active,.header-nav a:hover{color:var(--accent);text-decoration:none}.header-actions{display:flex;align-items:center;gap:var(--space-2);flex-shrink:0}.theme-toggle{background:none;border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;padding:var(--space-1) var(--space-2);font-size:var(--text-base);color:var(--text-muted);line-height:1.4;transition:var(--transition),border-color .15s ease;flex-shrink:0}.theme-toggle:hover{color:var(--text);border-color:var(--accent)}.hamburger{display:none;flex-direction:column;justify-content:center;gap:5px;background:none;border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;padding:7px var(--space-2);width:36px;height:36px;flex-shrink:0;transition:border-color .15s ease}.hamburger:hover{border-color:var(--accent)}.hamburger-bar{display:block;width:16px;height:2px;background:var(--text-muted);border-radius:2px;transition:transform .2s ease,opacity .2s ease,background .15s ease;transform-origin:center}.hamburger:hover .hamburger-bar{background:var(--text)}.hamburger--open .hamburger-bar:first-child{transform:translateY(7px) rotate(45deg)}.hamburger--open .hamburger-bar:nth-child(2){opacity:0;transform:scaleX(0)}.hamburger--open .hamburger-bar:nth-child(3){transform:translateY(-7px) rotate(-45deg)}.mobile-nav{display:none;border-top:1px solid var(--border);background:var(--bg);padding:var(--space-4) var(--space-6)}.mobile-nav-list{list-style:none;display:flex;flex-direction:column}.mobile-nav-link{display:block;padding:var(--space-3) 0;font-size:var(--text-base);font-weight:500;color:var(--text-muted);text-decoration:none;border-bottom:1px solid var(--border);transition:color .15s ease}.mobile-nav-list li:last-child .mobile-nav-link{border-bottom:none}.mobile-nav-link.active,.mobile-nav-link:hover{color:var(--accent);text-decoration:none}.header-nav-desktop{flex:1;display:flex;justify-content:flex-end}@media (max-width:640px){.header-nav-desktop{display:none}.hamburger{display:flex}.mobile-nav{display:block}}.footer{border-top:1px solid var(--border);padding:var(--space-8) var(--space-6);text-align:center;font-size:var(--text-sm);transition:var(--transition)}.footer,.footer a{color:var(--text-muted)}.footer a:hover{color:var(--accent);text-decoration:none}.hero{padding:var(--space-16) 0 var(--space-12)}.hero-heading{font-size:var(--text-hero);font-weight:800;line-height:1.15;margin-bottom:var(--space-4);color:var(--text)}.hero-tagline{font-size:var(--text-xl);color:var(--text-muted);margin-bottom:var(--space-6);font-weight:400}.hero-intro{font-size:var(--text-lg);max-width:600px;margin-bottom:var(--space-8);color:var(--text)}.hero-ctas{display:flex;gap:var(--space-4);flex-wrap:wrap;align-items:center}.projects-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--space-6);margin-top:var(--space-6)}.project-card-title{font-size:var(--text-xl);margin-bottom:var(--space-2)}.project-card-desc{font-size:var(--text-sm);color:var(--text-muted);margin-bottom:var(--space-4);line-height:1.6}.project-card-tags{display:flex;flex-wrap:wrap;gap:var(--space-2);margin-bottom:var(--space-4)}.project-card-link{font-size:var(--text-sm);font-weight:600}.blog-list{list-style:none;margin-top:var(--space-6)}.blog-list-item{padding:var(--space-4) 0;border-bottom:1px solid var(--border)}.blog-list-item:last-child{border-bottom:none}.blog-post-title{font-size:var(--text-lg);font-weight:600;margin-bottom:var(--space-1)}.blog-post-date{font-size:var(--text-sm);color:var(--text-muted);margin:0}.blog-controls{display:flex;gap:var(--space-3);margin-top:var(--space-6);align-items:center;flex-wrap:wrap}.blog-search-wrapper{position:relative;flex:1;min-width:180px}.blog-search-icon{position:absolute;left:var(--space-3);top:50%;transform:translateY(-50%);width:16px;height:16px;color:var(--text-muted);pointer-events:none}.blog-search{width:100%;padding:var(--space-2) var(--space-3) var(--space-2) calc(var(--space-3) + 20px);font-family:var(--font-sans);font-size:var(--text-sm);color:var(--text);background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);outline:none;transition:border-color .15s ease,box-shadow .15s ease;appearance:none}.blog-search::placeholder{color:var(--text-muted)}.blog-search:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 15%,transparent)}.blog-search::-webkit-search-cancel-button{display:none}.blog-search-clear{position:absolute;right:var(--space-2);top:50%;transform:translateY(-50%);background:none;border:none;color:var(--text-muted);font-size:var(--text-lg);line-height:1;cursor:pointer;padding:2px 4px;border-radius:3px;transition:color .15s ease}.blog-search-clear:hover,.blog-sort{color:var(--text)}.blog-sort{padding:var(--space-2) var(--space-3);font-family:var(--font-sans);font-size:var(--text-sm);background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);outline:none;cursor:pointer;transition:border-color .15s ease;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23888' d='M6 8L1 3h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right var(--space-3) center;padding-right:calc(var(--space-3) + 18px)}.blog-sort:focus{border-color:var(--accent)}@media (max-width:640px){.blog-controls{flex-direction:column;align-items:stretch}.blog-sort{width:100%}}.blog-month-divider{display:flex;align-items:center;gap:var(--space-3);margin-top:var(--space-10)}.blog-month-divider:after,.blog-month-divider:before{content:"";flex:1;height:1px;background:var(--border)}.blog-month-label{font-family:var(--font-sans);font-size:var(--text-xs);font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.1em;white-space:nowrap}div:first-child>.blog-month-divider{margin-top:var(--space-6)}.blog-article{max-width:700px;margin:0 auto;background:var(--bg-prose);border-radius:12px;padding:3.5rem 3rem;border:1px solid var(--border);box-shadow:var(--shadow-md)}.dark .blog-article{box-shadow:0 4px 32px rgba(0,0,0,.45),0 1px 8px rgba(0,0,0,.25)}.blog-article .blog-post-header{margin-bottom:var(--space-8);padding-bottom:var(--space-6);border-bottom:1px solid var(--border)}.blog-article .blog-post-header h1{font-family:var(--font-sans);font-size:var(--text-4xl);font-weight:650;line-height:1.2;color:var(--text)}.blog-post-date-display{font-size:var(--text-sm);color:var(--text-muted);margin:var(--space-2) 0 0 0}.blog-prose{font-family:var(--font-serif);font-size:1.125rem;line-height:1.875;color:var(--text-prose)}.blog-prose h2,.blog-prose h3,.blog-prose h4,.blog-prose h5,.blog-prose h6{font-family:var(--font-sans);color:var(--text);line-height:1.3}.blog-prose h2{font-size:var(--text-2xl);margin-top:var(--space-8);margin-bottom:var(--space-4)}.blog-prose h3{font-size:var(--text-xl);margin-top:var(--space-6);margin-bottom:var(--space-3)}.blog-prose p{margin-bottom:1.5em;text-align:justify}.blog-prose a{color:var(--accent);text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;transition:color .15s ease}.blog-prose a:hover{color:var(--accent-hover)}.blog-prose pre{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:var(--space-4);overflow-x:auto;font-size:var(--text-sm);margin-bottom:var(--space-4)}.blog-prose code{background:var(--bg-card);border-radius:3px;padding:1px 4px;font-size:.9em;font-family:var(--font-sans)}.blog-prose pre code{background:none;padding:0}.blog-prose img{height:auto;margin:var(--space-8) auto;box-shadow:0 2px 12px rgba(0,0,0,.15)}@media (max-width:640px){.blog-article{padding:2rem 1.5rem;border-radius:8px}.blog-article .blog-post-header h1{font-size:var(--text-3xl)}}.skills-list{display:flex;flex-wrap:wrap;gap:var(--space-2)}.skills-list,.timeline-item{margin-bottom:var(--space-6)}.timeline-item{padding-left:var(--space-6);border-left:2px solid var(--border);position:relative}.timeline-item:before{content:"";position:absolute;left:-5px;top:6px;width:8px;height:8px;border-radius:50%;background:var(--accent)}.timeline-year{font-size:var(--text-sm);font-weight:600;color:var(--accent);margin-bottom:var(--space-1)}.comments-section{margin-top:var(--space-12)}.comment-item{border-left:3px solid var(--border);padding-left:var(--space-4);margin-bottom:var(--space-6)}.comment-name{font-weight:700}.comment-name,.comment-text{margin-bottom:var(--space-1)}.comment-date{font-size:var(--text-xs);color:var(--text-muted);margin:0}.form-group{margin-bottom:var(--space-4)}.form-label{display:block;font-weight:500;margin-bottom:var(--space-1)}.form-input,.form-label,.form-textarea{font-size:var(--text-sm);color:var(--text)}.form-input,.form-textarea{width:100%;padding:var(--space-2) var(--space-3);font-family:var(--font-sans);background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);transition:var(--transition),border-color .15s ease}.form-input:focus,.form-textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px rgba(37,99,235,.15)}.form-textarea{resize:vertical;min-height:100px}.form-hint{font-size:var(--text-xs);color:var(--text-muted);margin:var(--space-1) 0 0 0}.alert{padding:var(--space-3) var(--space-4);border-radius:var(--radius);font-size:var(--text-sm);margin-bottom:var(--space-4)}.alert-success{background:#f0fdf4;color:#166534;border:1px solid #bbf7d0}.alert-error{background:#fef2f2;color:#991b1b;border:1px solid #fecaca}.dark .alert-success .dark .alert-error .not-found{text-align:center;padding:var(--space-16) 0}.not-found-code{font-size:6rem;font-weight:800;color:var(--border);line-height:1;margin-bottom:var(--space-4)}@media (max-width:640px){.hero-heading{font-size:var(--text-3xl)}.hero-tagline{font-size:var(--text-lg)}.projects-grid{grid-template-columns:1fr}}.blog-image{display:flex;justify-content:center;margin:2rem 0}.blog-image img{height:auto}.blog-image img,.blog-prose img{max-width:100%;border-radius:var(--radius)}.blog-prose img{display:block;margin:2rem auto}.gallery-single{margin:var(--space-8) 0;text-align:center}.gallery-single img{display:block;max-width:100%;height:auto;border-radius:var(--radius);margin:0 auto;box-shadow:0 2px 12px rgba(0,0,0,.15)}.gallery-carousel{margin:var(--space-8) 0 0 0;border-radius:var(--radius);border:1px solid var(--border);box-shadow:var(--shadow-md);user-select:none}.gallery-carousel,.gallery-track{overflow:hidden;background:var(--bg-card)}.gallery-track{position:relative;width:100%;aspect-ratio:4/3}.gallery-slide{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;opacity:0;transform:translateX(8px);transition:opacity .35s ease,transform .35s ease;pointer-events:none}.gallery-slide--active{opacity:1;transform:translateX(0);pointer-events:auto}.gallery-slide img{display:block;max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain;border-radius:0;box-shadow:none;margin:0}.gallery-caption{font-family:var(--font-serif);font-size:var(--text-sm);color:var(--text-muted);text-align:center;padding:var(--space-2) var(--space-4);border-top:1px solid var(--border);font-style:italic;line-height:1.5;min-height:2.25rem}.gallery-controls{display:flex;align-items:center;justify-content:space-between;padding:var(--space-2) var(--space-3);border-top:1px solid var(--border);background:var(--bg-card)}.gallery-btn{background:none;border:1px solid var(--border);border-radius:var(--radius);color:var(--text-muted);font-size:var(--text-lg);cursor:pointer;padding:var(--space-1) var(--space-3);line-height:1.5;transition:color .15s ease,border-color .15s ease,background .15s ease;flex-shrink:0}.gallery-btn:hover{color:var(--text);border-color:var(--accent);background:var(--bg)}.gallery-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.gallery-dots{display:flex;gap:var(--space-2);align-items:center;flex-wrap:wrap;justify-content:center}.gallery-dot{width:8px;height:8px;border-radius:50%;border:1px solid var(--text-muted);background:transparent;cursor:pointer;padding:0;transition:background .2s ease,border-color .2s ease,transform .2s ease}.gallery-dot--active{background:var(--accent);border-color:var(--accent);transform:scale(1.3)}.gallery-dot:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.dark .gallery-carousel{box-shadow:0 4px 32px rgba(0,0,0,.45),0 1px 8px rgba(0,0,0,.25)}@media (max-width:640px){.gallery-track{aspect-ratio:3/2}.gallery-btn{padding:var(--space-1) var(--space-2);font-size:var(--text-base)}.gallery-caption{font-size:var(--text-xs)}}.now-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--space-6);margin-top:var(--space-4)}.now-card{display:flex;flex-direction:column}.now-card-icon{font-size:1.5rem;margin-bottom:var(--space-2);line-height:1}.now-card-label{margin-bottom:var(--space-1)!important;text-transform:uppercase;letter-spacing:.06em;font-weight:600}.now-card-title{font-weight:600;font-size:var(--text-base);margin-bottom:var(--space-1);color:var(--text)}.now-card-meta{margin-bottom:var(--space-1)}.now-card-meta,.now-card-note{font-size:var(--text-sm);color:var(--text-muted)}.now-card-note{font-style:italic;margin-top:auto;padding-top:var(--space-3);border-top:1px solid var(--border);margin-bottom:0!important}.now-log-year-tabs{display:flex;gap:0;border-bottom:2px solid var(--border);margin-bottom:var(--space-6)}.now-log-year-tab{background:none;border:none;border-bottom:2px solid transparent;margin-bottom:-2px;padding:var(--space-2) var(--space-4);font-family:var(--font-sans);font-size:var(--text-sm);font-weight:600;color:var(--text-muted);cursor:pointer;transition:color .15s ease,border-color .15s ease}.now-log-year-tab:hover{color:var(--text)}.now-log-year-tab--active{color:var(--accent);border-bottom-color:var(--accent)}.now-filters{display:flex;gap:var(--space-2);flex-wrap:wrap;margin-bottom:var(--space-6)}.now-filter-btn{background:var(--bg);border:1px solid var(--border);border-radius:999px;padding:var(--space-1) var(--space-3);font-family:var(--font-sans);font-size:var(--text-xs);font-weight:600;color:var(--text-muted);cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease;text-transform:uppercase;letter-spacing:.04em}.now-filter-btn:hover{border-color:var(--accent);color:var(--accent)}.now-filter-btn--active{background:var(--accent);border-color:var(--accent);color:#fff}.now-log-list{border-top:1px solid var(--border)}.now-log-entry{justify-content:space-between;padding:var(--space-3) 0;border-bottom:1px solid var(--border);gap:var(--space-4)}.now-log-entry,.now-log-entry-left{display:flex;align-items:flex-start}.now-log-entry-left{gap:var(--space-3);flex:1;min-width:0}.now-log-entry-month{font-size:var(--text-xs);color:var(--text-muted);min-width:2.5rem;padding-top:2px;flex-shrink:0}.now-log-entry-icon{font-size:var(--text-sm);flex-shrink:0;padding-top:1px}.now-log-entry-title{font-size:var(--text-sm);font-weight:600;color:var(--text)}.now-log-entry-meta{font-size:var(--text-sm);color:var(--text-muted)}.now-log-entry-note{margin-top:var(--space-1);margin-bottom:0!important}.now-log-stars{font-size:var(--text-base);letter-spacing:2px;flex-shrink:0;white-space:nowrap;padding-top:1px}.now-log-star--filled{color:#f59e0b}.now-log-star--empty{color:var(--border)}@media (max-width:640px){.now-grid{grid-template-columns:1fr}.now-log-year-tab{padding:var(--space-2) var(--space-3)}}.page-loader{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;background:var(--bg);animation:loader-fade-in .15s ease forwards}@keyframes loader-fade-in{0%{opacity:0}to{opacity:1}}.page-loader__spinner{display:block;width:36px;height:36px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:loader-spin .7s linear infinite}@keyframes loader-spin{to{transform:rotate(1turn)}}