*{margin:0;padding:0;box-sizing:border-box}:root{--bg: #ffffff;--bg-side: #f5f5f4;--bg-subtle: #f7f7f6;--text: #1c1c1c;--text-muted: #7c7c78;--text-faint: #a0a09b;--border: #e7e7e5;--accent: hsl(30 14% 42%);--rust: hsl(14 45% 48%);--sans: "Avenir Next", Avenir, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace}:root[data-theme=dark]{--bg: #131312;--bg-side: #1a1a19;--bg-subtle: #1e1e1d;--text: #e6e6e4;--text-muted: #92928d;--text-faint: #6e6e69;--border: #2b2b29;--accent: hsl(220 18% 65%);--rust: hsl(14 55% 65%)}body{font-family:var(--sans);font-size:1rem;line-height:1.65;background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased}a{color:inherit}a:hover{color:var(--text-muted)}.layout{display:grid;grid-template-columns:320px 1fr;min-height:100vh}.content{min-width:0}.content-inner{max-width:840px;margin:0 auto;padding:56px 24px 40px}.sidebar{background:var(--bg-side);border-right:1px solid var(--border)}.sidebar-inner{position:sticky;top:0;height:100vh;display:flex;flex-direction:column;justify-content:space-between;padding:56px 32px 36px 40px}.sidebar-name{display:inline-block;font-weight:600;font-size:1.15rem;text-decoration:none;margin-bottom:8px}.sidebar-bio{font-size:.9rem;color:var(--text-muted);line-height:1.55;margin-bottom:32px}.sidebar-nav{display:flex;flex-direction:column}.sidebar-nav a{position:relative;font-size:.9rem;color:var(--text-muted);text-decoration:none;padding:4px 0}.sidebar-nav a:hover{color:var(--text)}.sidebar-nav a.active{color:var(--accent);font-weight:600}.sidebar-nav a.active:before{content:"";position:absolute;left:-14px;top:6px;width:3px;height:12px;background:var(--accent);border-radius:2px}.sidebar-nav-elsewhere a:hover,.sidebar-nav-elsewhere button:hover{color:var(--accent)}.sidebar-nav button{background:none;border:none;font-family:inherit;font-size:.9rem;color:var(--text-muted);text-align:left;padding:4px 0;cursor:pointer}.sidebar-nav button:hover{color:var(--text)}.sidebar-nav-elsewhere{margin-top:32px}.sidebar-nav-label{font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);opacity:.6;margin-bottom:6px}.theme-toggle{background:none;border:none;font-size:.95rem;cursor:pointer;color:var(--text-muted);line-height:1;padding:4px 0}.page-title{font-size:1.45rem;font-weight:700;letter-spacing:-.01em;margin-bottom:28px}.page-body{font-size:1.05rem}.page-body p{margin-bottom:1.2em;max-width:60ch}.page-body a{text-decoration:underline;text-underline-offset:2px}.page-body code{font-family:var(--mono);font-size:.85em;background:var(--bg-subtle);border-radius:3px;padding:2px 5px}.post-card{padding-bottom:24px;margin-bottom:24px;border-bottom:1px solid var(--border)}.post-card:last-of-type{border-bottom:none;padding-bottom:0;margin-bottom:0}.post-link{position:relative;display:block;text-decoration:none;transition:padding-left .22s ease}.post-link:before{content:"";position:absolute;left:0;top:2px;width:2px;height:0;background:var(--rust);border-radius:2px;transition:height .26s ease}.post-link:hover{color:inherit;padding-left:16px}.post-link:hover:before{height:calc(100% - 4px)}.post-link:hover h3{color:var(--accent)}.post-link time{font-size:.75rem;color:color-mix(in srgb,var(--accent) 85%,var(--text-faint));text-transform:uppercase;letter-spacing:.06em}.post-link h3{font-size:1.25rem;font-weight:600;margin:8px 0 5px;line-height:1.35;display:inline-block;padding-bottom:2px;transition:color .2s ease}.post-excerpt{font-size:.98rem;color:var(--text-muted)}.post-topline{display:flex;align-items:center;flex-wrap:wrap;gap:12px}.post-tags{display:inline-flex;flex-wrap:wrap;gap:6px}.journal-entry-toggle{width:100%;background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;text-align:left;cursor:pointer}.journal-entry-body{margin-top:18px}.tag{display:inline-flex;align-items:center;gap:5px;font-size:.75rem;color:var(--text-muted);text-transform:none;letter-spacing:normal;border:1px solid var(--border);border-radius:999px;padding:2px 10px}.tag svg{width:11px;height:11px;flex-shrink:0;opacity:.75}.section-heading{font-size:1.15rem;font-weight:600;margin:36px 0 16px;padding-top:24px;border-top:1px solid var(--border)}.skills{display:flex;flex-direction:column;gap:10px}.skill-row{display:grid;grid-template-columns:140px 1fr;gap:16px;font-size:.98rem;align-items:baseline}.skill-category{color:var(--text-faint);font-size:.78rem;text-transform:uppercase;letter-spacing:.05em}.skill-items{color:var(--text)}.education{display:flex;flex-direction:column;gap:18px}.edu-school{font-size:1rem;font-weight:600}.edu-degree{font-size:.95rem;color:var(--text-muted)}.edu-detail{font-size:.85rem;color:var(--text-faint)}.skill-row a{text-decoration:none}.skill-row a:hover{text-decoration:underline;text-underline-offset:2px}.project{padding-bottom:26px;margin-bottom:26px;border-bottom:1px solid var(--border)}.project:last-of-type{border-bottom:none}.project-name{font-size:1.15rem;font-weight:600;margin-bottom:2px}.project-name a{text-decoration:none}.project-name a:hover{text-decoration:underline;text-underline-offset:3px}.project-tagline{font-size:1rem;margin-bottom:8px}.project-description{font-size:.98rem;color:var(--text-muted);margin-bottom:10px;max-width:56ch}.project-highlights{list-style:none;margin-bottom:10px}.project-highlights li{font-size:.95rem;color:var(--text-muted);padding-left:16px;position:relative}.project-highlights li:before{content:"–";position:absolute;left:0;color:var(--text-faint)}.project-tech{font-size:.78rem;color:var(--text-faint)}.article-header{margin-bottom:36px}.article-header h1{display:inline-block;font-size:1.8rem;font-weight:700;letter-spacing:-.015em;line-height:1.28;border-bottom:1.5px solid var(--rust);padding-bottom:8px;margin-bottom:16px}.article-subtitle{font-size:1.08rem;color:var(--text-muted);margin-bottom:14px}.article-meta{display:flex;align-items:center;flex-wrap:wrap;gap:12px;font-size:.8rem;color:var(--text-faint);text-transform:uppercase;letter-spacing:.05em}.article-tags{display:inline-flex;flex-wrap:wrap;gap:6px}.article-body{font-size:1.08rem;line-height:1.75}.article-body p{margin-bottom:1.4em}.article-body h2{font-size:1.2rem;font-weight:600;margin:2em 0 .75em}.article-body code{font-family:var(--mono);font-size:.84em;background:var(--bg-subtle);border-radius:3px;padding:2px 5px}.article-body blockquote{border-left:2px solid var(--border);margin:1.75em 0;padding-left:20px;color:var(--text-muted)}.article-body blockquote p{margin-bottom:0}.article-related{margin-top:48px;padding-top:20px;border-top:1px solid var(--border)}.article-related-label{display:block;font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;color:var(--text-faint);margin-bottom:10px}.article-related a{display:block;width:fit-content;font-size:.9rem;color:var(--text-muted);text-decoration:none;padding:3px 0}.article-related a:hover{color:var(--text)}.article-footer{margin-top:48px;padding-top:20px;border-top:1px solid var(--border)}.back-link{font-size:.88rem;text-decoration:none}.back-link:hover{text-decoration:underline;text-underline-offset:2px}.site-footer{margin-top:40px;padding-top:20px;border-top:1px solid var(--border)}.site-footer p{font-size:.78rem;color:var(--text-faint)}.article-body h3{font-size:1.05rem;font-weight:600;margin:1.6em 0 .6em}.article-body ul,.article-body ol{margin:0 0 1.4em 1.4em}.article-body li{margin-bottom:.35em}.article-body a{text-decoration:underline;text-underline-offset:2px}.article-body hr{border:none;border-top:1px solid var(--border);margin:2.5em 0}.article-body img{max-width:100%;border-radius:4px}.article-body pre{background:var(--bg-subtle);border:1px solid var(--border);border-radius:6px;padding:14px 16px;overflow-x:auto;margin:0 0 1.4em;line-height:1.55}.article-body pre code{background:none;border-radius:0;padding:0;font-size:.85rem}.article-body table{width:100%;border-collapse:collapse;margin:0 0 1.4em;font-size:.92rem}.article-body th{background:var(--bg-subtle);text-align:left;padding:9px 12px;font-weight:600;border-bottom:1px solid var(--border)}.article-body td{padding:9px 12px;border-bottom:1px solid var(--border)}.content-inner:has(.admin-editor){max-width:720px}.admin-loading{color:var(--text-muted)}.admin-login h1{font-size:1.45rem;font-weight:700;margin-bottom:20px}.admin-login form{display:flex;flex-direction:column;gap:10px;max-width:320px}.admin-login input{font-family:inherit;font-size:.95rem;color:var(--text);background:var(--bg-subtle);border:1px solid var(--border);border-radius:5px;padding:9px 12px}.admin-login input:focus{outline:none;border-color:var(--accent)}.admin-login button{align-self:flex-start;font-family:inherit;font-size:.9rem;font-weight:600;color:#fff;background:var(--rust);border:none;border-radius:5px;padding:8px 16px;cursor:pointer}.admin-error{font-size:.85rem;color:var(--rust)}.admin-success{font-size:.85rem;color:var(--text-muted);margin-bottom:16px}.admin-editor-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}.admin-editor-header h1{font-size:1.45rem;font-weight:700}.admin-editor-actions{display:flex;gap:8px}.admin-editor-actions button{font-family:inherit;font-size:.85rem;font-weight:600;color:var(--accent);background:none;border:1px solid var(--border);border-radius:5px;padding:7px 14px;cursor:pointer}.admin-editor-actions button:hover{border-color:var(--accent)}.admin-editor-actions button:disabled{color:var(--text-faint);cursor:default}.admin-fields{display:flex;flex-direction:column;gap:12px}.admin-fields input,.admin-fields textarea{width:100%;font-family:inherit;font-size:.95rem;color:var(--text);background:var(--bg-subtle);border:1px solid var(--border);border-radius:5px;padding:9px 12px;resize:vertical}.admin-fields input:focus,.admin-fields textarea:focus{outline:none;border-color:var(--accent)}.admin-fields textarea{min-height:70px}.admin-mdx-editor{--font: var(--sans);--baseBg: var(--bg-subtle);--basePageBg: var(--bg-subtle);--baseBgSubtle: var(--bg-subtle);--baseBgHover: var(--bg-side);--baseBgActive: var(--bg-side);--baseText: var(--text);--baseBase: var(--text);--baseBorder: var(--border);--baseBorderHover: var(--accent);--accentBg: var(--bg-subtle);--accentBgSubtle: var(--bg-subtle);--accentBgHover: var(--bg-side);--accentBgActive: var(--bg-side);--accentText: var(--accent);--accentBase: var(--accent);--accentBorder: var(--accent);--accentSolid: var(--rust);--accentSolidHover: var(--rust);--accentTextContrast: #fff;--radius: 5px;border:1px solid var(--border);border-radius:8px;overflow:hidden}.admin-mdx-editor .dark-theme{--font: var(--sans);--baseBg: var(--bg-subtle);--basePageBg: var(--bg-subtle);--baseBgSubtle: var(--bg-subtle);--baseBgHover: var(--bg-side);--baseBgActive: var(--bg-side);--baseText: var(--text);--baseBase: var(--text);--baseBorder: var(--border);--baseBorderHover: var(--accent);--accentBg: var(--bg-subtle);--accentBgSubtle: var(--bg-subtle);--accentBgHover: var(--bg-side);--accentBgActive: var(--bg-side);--accentText: var(--accent);--accentBase: var(--accent);--accentBorder: var(--accent);--accentSolid: var(--rust);--accentSolidHover: var(--rust);--accentTextContrast: #fff}.admin-mdx-content{min-height:400px;font-family:var(--sans)}.admin-links{display:flex;flex-direction:column;gap:8px}.admin-links-label{font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;color:var(--text-faint)}.admin-link-row{display:flex;gap:8px}.admin-link-row input{width:auto;flex:1}.admin-link-row button{flex:none;font-size:1rem;color:var(--text-faint);background:none;border:1px solid var(--border);border-radius:5px;width:34px;cursor:pointer}.admin-link-add{align-self:flex-start;font-size:.82rem;color:var(--accent);background:none;border:none;padding:2px 0;cursor:pointer}.admin-preview{border:1px solid var(--border);border-radius:8px;padding:24px}.not-found{padding:48px 0}.not-found h1{font-size:2rem;margin-bottom:8px}.not-found p{color:var(--text-muted);margin-bottom:20px}@media(prefers-reduced-motion:reduce){*{transition-duration:.01ms!important}}@media(max-width:720px){.layout{grid-template-columns:1fr}.sidebar{border-right:none;border-bottom:1px solid var(--border)}.sidebar-inner{position:static;height:auto;flex-direction:row;align-items:flex-start;gap:16px;padding:24px 24px 20px}.sidebar-inner>div:first-child{flex:1;min-width:0}.sidebar-bio{margin-bottom:12px}.sidebar-nav{flex-direction:row;flex-wrap:wrap;gap:2px 16px}.sidebar-nav-elsewhere{margin-top:6px}.sidebar-nav-label{display:none}.content-inner{padding:36px 24px 32px}}
