:root{--bg: #f9f8f6;--surface: #ffffff;--surface2: #f2f0ec;--border: #e4e0d8;--border2: #ccc8c0;--text: #18160f;--text2: #5a5650;--text3: #9c9790;--accent: #1d4ed8;--accent-bg: #eff4ff;--red: #b91c1c;--red-bg: #fef2f2;--green: #15803d;--green-bg: #f0fdf4;--amber: #92400e;--amber-bg: #fffbeb;--mono: "JetBrains Mono", "Courier New", monospace;--sans: "Inter", system-ui, sans-serif;--serif: "Lora", Georgia, serif;--wide: 1080px;--radius: 10px}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;scroll-behavior:smooth}body{font-family:var(--sans);background:var(--bg);color:var(--text);line-height:1.7;-webkit-font-smoothing:antialiased}img{max-width:100%;display:block}a{color:var(--accent);text-decoration:underline;text-underline-offset:3px}a:hover{color:var(--red)}.nav{position:sticky;top:0;z-index:100;background:#f9f8f6f2;backdrop-filter:blur(12px);border-bottom:1px solid var(--border)}.nav-inner{max-width:var(--wide);margin:0 auto;padding:0 1.5rem;height:58px;display:flex;align-items:center;justify-content:space-between}.nav-brand{font-family:var(--sans);font-size:15px;font-weight:600;color:var(--text);text-decoration:none;letter-spacing:-.01em}.nav-brand:hover{color:var(--text)}.nav-links{display:flex;align-items:center;gap:2px;list-style:none}.nav-links a{font-family:var(--sans);font-size:13px;font-weight:500;color:var(--text2);text-decoration:none;padding:6px 12px;border-radius:6px;transition:all .12s}.nav-links a:hover{background:var(--surface2);color:var(--text)}.nav-links a.active{color:var(--accent);background:var(--accent-bg)}.nav-li-btn{display:flex!important;align-items:center;gap:6px;background:#0a66c2!important;color:#fff!important;padding:6px 14px!important;border-radius:6px;font-weight:500!important;text-decoration:none!important;transition:background .12s!important}.nav-li-btn:hover{background:#004182!important;color:#fff!important}.footer{background:var(--surface);border-top:1px solid var(--border);padding:2rem 1.5rem;margin-top:4rem}.footer-inner{max-width:var(--wide);margin:0 auto;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:1rem}.footer-note{font-size:13px;color:var(--text3)}.footer-links{display:flex;gap:1.5rem;list-style:none}.footer-links a{font-size:13px;color:var(--text3);text-decoration:none}.footer-links a:hover{color:var(--text)}.page-header{background:var(--surface);border-bottom:1px solid var(--border);padding:2.5rem 1.5rem}.page-header-inner{max-width:var(--wide);margin:0 auto}.eyebrow{font-family:var(--mono);font-size:11px;color:var(--text3);letter-spacing:.1em;text-transform:uppercase;margin-bottom:.5rem}.page-header h1{font-family:var(--sans);font-size:clamp(1.6rem,3vw,2.25rem);font-weight:600;letter-spacing:-.03em;color:var(--text);margin-bottom:.35rem}.page-header .sub{font-size:15px;color:var(--text2)}.btn{display:inline-flex;align-items:center;gap:7px;font-family:var(--sans);font-size:13px;font-weight:600;padding:9px 18px;border-radius:8px;text-decoration:none;transition:all .15s;cursor:pointer;border:none}.btn-primary{background:var(--text);color:#fff}.btn-primary:hover{background:#333;color:#fff}.btn-ghost{background:var(--surface);color:var(--text2);border:1px solid var(--border2)}.btn-ghost:hover{background:var(--surface2);color:var(--text)}.btn-blue{background:#0a66c2;color:#fff}.btn-blue:hover{background:#004182;color:#fff}.btn-row{display:flex;gap:10px;flex-wrap:wrap}.tag{display:inline-block;font-family:var(--mono);font-size:10px;font-weight:500;letter-spacing:.08em;text-transform:uppercase;padding:2px 8px;border-radius:4px;width:fit-content}.tag-blue{background:var(--accent-bg);color:var(--accent)}.tag-red{background:var(--red-bg);color:var(--red)}.tag-green{background:var(--green-bg);color:var(--green)}.tag-amber{background:var(--amber-bg);color:var(--amber)}.skill-tag{display:inline-block;font-family:var(--sans);font-size:12px;font-weight:500;color:var(--text2);background:var(--surface2);border:1px solid var(--border);padding:4px 10px;border-radius:99px;margin:3px}.diagram-wrap{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.5rem;margin:2rem 0;overflow:hidden}.diagram-wrap figcaption{font-family:var(--mono);font-size:11px;color:var(--text3);text-align:center;margin-top:1rem;letter-spacing:.06em}.hero{max-width:var(--wide);margin:0 auto;padding:5rem 1.5rem 4rem;display:grid;grid-template-columns:1fr 340px;gap:4rem;align-items:start}.hero-eyebrow{font-family:var(--mono);font-size:11px;color:var(--text3);letter-spacing:.1em;text-transform:uppercase;margin-bottom:1rem}.hero h1{font-family:var(--sans);font-size:clamp(2rem,4vw,2.75rem);font-weight:600;line-height:1.15;letter-spacing:-.03em;color:var(--text);margin-bottom:1.25rem}.hero-desc{font-size:16px;color:var(--text2);line-height:1.75;margin-bottom:2rem;max-width:480px}.skills-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.5rem;position:sticky;top:78px}.skills-card h3{font-family:var(--mono);font-size:11px;color:var(--text3);letter-spacing:.1em;text-transform:uppercase;margin-bottom:1rem;padding-bottom:.75rem;border-bottom:1px solid var(--border)}.projects-section{max-width:var(--wide);margin:0 auto;padding:0 1.5rem 5rem}.section-label{font-family:var(--mono);font-size:11px;color:var(--text3);letter-spacing:.1em;text-transform:uppercase;margin-bottom:1.5rem}.project-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:1.25rem}.project-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.75rem;text-decoration:none;color:inherit;display:flex;flex-direction:column;gap:.75rem;transition:all .2s}.project-card:hover{border-color:var(--border2);transform:translateY(-2px);box-shadow:0 8px 24px #0000000f;color:inherit}.project-card h3{font-family:var(--sans);font-size:18px;font-weight:600;color:var(--text);line-height:1.3;letter-spacing:-.02em}.project-card p{font-size:14px;color:var(--text2);line-height:1.65;flex:1}.project-arrow{font-size:13px;color:var(--accent);font-weight:600;display:flex;align-items:center;gap:4px;margin-top:.25rem}.about-wrap{max-width:var(--wide);margin:0 auto;padding:3rem 1.5rem;display:grid;grid-template-columns:1fr 260px;gap:4rem;align-items:start}.about-prose h2{font-family:var(--sans);font-size:1.05rem;font-weight:600;color:var(--text);margin:2.5rem 0 .75rem;padding-top:2.5rem;border-top:1px solid var(--border);letter-spacing:-.01em}.about-prose h2:first-child{margin-top:0;padding-top:0;border-top:none}.about-prose p{font-size:15px;color:var(--text2);line-height:1.8;margin-bottom:1rem}.about-prose ul{padding-left:1.25rem;margin-bottom:1rem}.about-prose li{font-size:15px;color:var(--text2);line-height:1.8;margin-bottom:.35rem}.about-sidebar{position:sticky;top:78px}.about-widget{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.25rem;margin-bottom:1rem}.about-widget h3{font-family:var(--mono);font-size:11px;color:var(--text3);letter-spacing:.1em;text-transform:uppercase;margin-bottom:.9rem;padding-bottom:.75rem;border-bottom:1px solid var(--border)}.cert-item{font-family:var(--sans);font-size:13px;color:var(--text2);padding:6px 0;border-bottom:1px solid var(--border);line-height:1.5}.cert-item:last-child{border-bottom:none}.cert-item strong{display:block;color:var(--text);font-weight:500;font-size:12px}.resume-wrap{max-width:760px;margin:3rem auto;padding:0 1.5rem}.resume-section{margin-bottom:2.5rem}.resume-section h2{font-family:var(--mono);font-size:11px;color:var(--text3);letter-spacing:.1em;text-transform:uppercase;margin-bottom:1rem;padding-bottom:.6rem;border-bottom:1px solid var(--border)}.resume-job{margin-bottom:1.75rem}.resume-job-header{display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:.5rem;margin-bottom:.35rem}.resume-job-title{font-family:var(--sans);font-size:15px;font-weight:600;color:var(--text);letter-spacing:-.01em}.resume-job-co{font-family:var(--sans);font-size:14px;color:var(--text2)}.resume-job-date{font-family:var(--mono);font-size:11px;color:var(--text3)}.resume-job ul{padding-left:1.25rem;margin-top:.5rem}.resume-job li{font-size:14px;color:var(--text2);line-height:1.75;margin-bottom:.3rem}.resume-cert{display:flex;justify-content:space-between;align-items:baseline;padding:8px 0;border-bottom:1px solid var(--border);flex-wrap:wrap;gap:.25rem}.resume-cert:last-child{border-bottom:none}.resume-cert-name{font-family:var(--sans);font-size:14px;color:var(--text);font-weight:500}.resume-cert-issuer{font-family:var(--sans);font-size:13px;color:var(--text3)}.download-bar{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1rem 1.25rem;display:flex;align-items:center;justify-content:space-between;margin-bottom:2.5rem;flex-wrap:wrap;gap:.75rem}.download-bar p{font-size:13px;color:var(--text2)}.blog-wrap{max-width:var(--wide);margin:0 auto;padding:3rem 1.5rem;display:grid;grid-template-columns:1fr 260px;gap:3rem;align-items:start}.post-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.5rem 1.75rem;margin-bottom:1rem;display:block;text-decoration:none;color:inherit;transition:all .18s}.post-card:hover{border-color:var(--border2);transform:translateY(-2px);box-shadow:0 6px 20px #0000000d;color:inherit}.post-card.upcoming{opacity:.55;border-style:dashed;cursor:default}.post-card.upcoming:hover{transform:none;box-shadow:none}.post-meta{display:flex;align-items:center;gap:8px;margin-bottom:.65rem;flex-wrap:wrap}.part-chip{font-family:var(--mono);font-size:10px;color:var(--accent);background:var(--accent-bg);padding:2px 8px;border-radius:4px;letter-spacing:.04em}.date-chip{font-size:12px;color:var(--text3);font-family:var(--mono)}.post-card h2{font-family:var(--sans);font-size:1.1rem;font-weight:600;color:var(--text);line-height:1.35;letter-spacing:-.02em;margin-bottom:.5rem}.post-card .excerpt{font-size:13.5px;color:var(--text2);line-height:1.7;margin-bottom:.85rem}.post-read-more{font-family:var(--sans);font-size:13px;font-weight:600;color:var(--accent);display:flex;align-items:center;gap:4px}.blog-sidebar{position:sticky;top:78px}.blog-widget{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.25rem;margin-bottom:1rem}.blog-widget h3{font-family:var(--mono);font-size:11px;color:var(--text3);letter-spacing:.1em;text-transform:uppercase;margin-bottom:.9rem;padding-bottom:.75rem;border-bottom:1px solid var(--border)}.lab-item{display:flex;align-items:center;gap:9px;padding:6px 0;border-bottom:1px solid var(--border);font-size:13px}.lab-item:last-child{border-bottom:none}.lab-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.lab-dot.done{background:var(--green)}.lab-dot.wip{background:var(--amber)}.lab-dot.todo{background:var(--border2)}.lab-name{flex:1;color:var(--text2)}.lab-name.done{color:var(--text)}.status-pill{font-family:var(--mono);font-size:10px;padding:1px 7px;border-radius:99px;font-weight:500}.s-done{background:var(--green-bg);color:var(--green)}.s-wip{background:var(--amber-bg);color:var(--amber)}.s-todo{background:var(--surface2);color:var(--text3)}.article-outer{max-width:var(--wide);margin:0 auto;padding:3rem 1.5rem;display:grid;grid-template-columns:1fr 220px;gap:3rem;align-items:start}.article-header{margin-bottom:2rem}.article-header h1{font-family:var(--serif);font-size:clamp(1.6rem,3vw,2.25rem);font-weight:600;line-height:1.25;color:var(--text);margin-bottom:.75rem}.article-meta{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--text3);font-family:var(--mono);padding-bottom:1.5rem;border-bottom:1px solid var(--border);flex-wrap:wrap}.prose{font-family:var(--serif);font-size:17px;line-height:1.85;color:var(--text)}.prose p{margin-bottom:1.5rem}.prose h2{font-family:var(--sans);font-size:1.1rem;font-weight:600;color:var(--text);margin:2.5rem 0 .75rem;padding-top:2.5rem;border-top:1px solid var(--border);letter-spacing:-.01em}.prose h3{font-family:var(--sans);font-size:.9rem;font-weight:600;color:var(--text);margin:1.75rem 0 .4rem;text-transform:uppercase;letter-spacing:.05em}.prose blockquote{border-left:3px solid var(--accent);background:var(--accent-bg);padding:.75rem 1.25rem;margin:1.75rem 0;border-radius:0 6px 6px 0}.prose blockquote p{margin:0;font-style:italic;color:var(--text2);font-size:1rem}.prose code{font-family:var(--mono);font-size:.82em;background:var(--surface2);border:1px solid var(--border);padding:.12em .4em;border-radius:4px;color:var(--red)}.prose pre{background:#111;border-radius:8px;padding:1.25rem 1.5rem;margin:1.5rem 0;overflow-x:auto;border:1px solid #222}.prose pre code{background:none;border:none;padding:0;color:#d4d4d4;font-size:13px;line-height:1.7}.prose ul,.prose ol{padding-left:1.5rem;margin-bottom:1.5rem}.prose li{margin-bottom:.4rem}.prose strong{font-weight:600;color:var(--text);font-style:normal}.prose a{color:var(--accent)}.prose figure{margin:2rem 0}.toc-nav{position:sticky;top:78px}.toc-nav h3{font-family:var(--mono);font-size:11px;color:var(--text3);letter-spacing:.1em;text-transform:uppercase;margin-bottom:.75rem}.toc-nav a{display:block;font-size:12px;font-family:var(--sans);color:var(--text3);text-decoration:none;padding:5px 0 5px 12px;border-left:2px solid var(--border);line-height:1.4;transition:all .12s}.toc-nav a:hover{color:var(--text2);border-left-color:var(--border2)}.toc-nav a.active{color:var(--accent);border-left-color:var(--accent);font-weight:500}@media (max-width: 760px){.hero{grid-template-columns:1fr;gap:2rem;padding:3rem 1.5rem 2.5rem}.skills-card{display:none}.about-wrap,.blog-wrap,.article-outer{grid-template-columns:1fr}.toc-nav,.nav-links .hide-mobile{display:none}}
