html{scroll-behavior:smooth;scroll-padding-top:88px}body{background:var(--bg);color:var(--fg);font-family:var(--font-sans);font-size:var(--text-base);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;transition:background var(--d-base) var(--ease), color var(--d-base) var(--ease);line-height:1.6}html[data-reading-font=source]{--font-sans:var(--font-reading-source), system-ui, sans-serif}html[data-reading-font=plex]{--font-sans:var(--font-reading-plex), system-ui, sans-serif}html[data-reading-font=atkinson]{--font-sans:var(--font-reading-atkinson), system-ui, sans-serif}html[data-reading-font=lora]{--font-sans:var(--font-reading-lora), Georgia, "Times New Roman", serif}html[data-reading-font=be-vietnam]{--font-sans:var(--font-reading-be-vietnam), system-ui, sans-serif;--font-mono:var(--font-reading-ibm-plex-mono), "SF Mono", "Cascadia Mono", "Roboto Mono", monospace}img{max-width:100%;height:auto;display:block}a{color:inherit;text-decoration:none}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--radius-sm)}::selection{background:var(--accent);color:var(--fg-on-accent)}.route-progress{z-index:2147483647;pointer-events:none;opacity:0;contain:paint;height:2px;transition:opacity .22s ease, transform .26s var(--ease);position:fixed;inset:0 0 auto;transform:translateY(-3px)}.route-progress:before{content:"";filter:blur(9px)saturate(1.12);opacity:0;background:radial-gradient(60% 100% at 18% 0,#ff5ac82e,#0000 64%),radial-gradient(62% 100% at 54% 0,#f9c74f1f,#0000 66%),radial-gradient(60% 100% at 86% 0,#37d5ff2e,#0000 64%);background:radial-gradient(60% 100% at 18% 0,lab(64.2258% 70.8764 -23.4089/.18),#0000 64%),radial-gradient(62% 100% at 54% 0,lab(83.1755% 9.62213 64.5254/.12),#0000 66%),radial-gradient(60% 100% at 86% 0,lab(78.8177% -30.8909 -32.7436/.18),#0000 64%);height:18px;transition:opacity .26s;position:absolute;inset:-8px 0 auto}.route-progress__bar{width:100%;height:100%;transform:translate3d(0, 0, 0) scaleX(var(--route-progress,0));transform-origin:0;will-change:transform;background:linear-gradient(90deg,#ff5ac8,#f9c74f 24%,#37d5ff 52%,#9b7cff 78%,#ff5ac8) 0 0/100% 100%;border-radius:0 999px 999px 0;transition:transform .76s cubic-bezier(.22,1,.36,1),opacity .22s;display:block;position:relative;overflow:hidden;box-shadow:0 0 10px #37d5ff4d,0 0 18px #ff5ac833;box-shadow:0 0 10px lab(78.8177% -30.8909 -32.7436/.3),0 0 18px lab(64.2258% 70.8764 -23.4089/.2)}.route-progress__bar:after{content:"";opacity:0;background:linear-gradient(90deg,#0000,#ffffff70,#0000);transition:opacity .22s;position:absolute;inset:0}.route-progress--loading,.route-progress--finishing{opacity:1;transform:translateY(0)}.route-progress--loading:before,.route-progress--finishing:before{opacity:.62}.route-progress--loading .route-progress__bar{opacity:.96}.route-progress--loading .route-progress__bar:after{opacity:.18}.route-progress--finishing .route-progress__bar{transition-duration:.52s;transform:translate(0,0)scaleX(1)}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition-duration:0s!important;animation-duration:0s!important;animation-iteration-count:1!important}.route-progress--loading .route-progress__bar,.route-progress--finishing .route-progress__bar{transform:translate(0,0)scaleX(1)}.accent{color:var(--accent);background:0 0;-webkit-background-clip:initial;background-clip:initial}}.container{width:min(var(--layout-container-max), 100% - var(--layout-container-gutter));margin-inline:auto}main{padding-top:80px;padding-bottom:var(--space-section)}@media (max-width:840px){:root{--text-display:3.25rem;--text-hero:4rem}}@media (max-width:560px){:root{--text-display:2.5rem;--text-hero:2.85rem;--layout-container-gutter:1.25rem}}.app-nav{z-index:50;transition:background var(--d-base) var(--ease), border-color var(--d-base) var(--ease), backdrop-filter var(--d-base);background:color-mix(in oklab, var(--bg) 70%, transparent);-webkit-backdrop-filter:blur(12px)saturate(160%);border-bottom:1px solid #0000;position:fixed;inset:0 0 auto}.app-nav.is-scrolled{background:color-mix(in oklab, var(--bg) 90%, transparent);border-bottom-color:var(--divider)}.app-nav-inner{width:min(var(--layout-container-max), 100% - var(--layout-container-gutter));justify-content:space-between;align-items:center;gap:1.5rem;height:72px;margin-inline:auto;display:flex}.brand{align-items:center;gap:.625rem;display:flex}.brand-mark{font-family:var(--font-mono);font-weight:700;font-size:var(--text-xs);letter-spacing:.1em;border:1px solid var(--border-strong);border-radius:var(--radius-sm);color:var(--fg);padding:.375rem .5rem}.brand-avatar{object-fit:cover;border:1px solid var(--border-strong);background:var(--bg);border-radius:50%;flex-shrink:0;width:36px;height:36px;transition:border-color .18s,transform .18s}.brand:hover .brand-avatar{border-color:var(--accent,var(--fg));transform:scale(1.04)}.brand-text{font-weight:600;font-size:var(--text-sm);letter-spacing:0}@media (max-width:640px){.brand-text{display:none}}.nav-links{gap:.25rem;display:flex}.nav-link{font-size:var(--text-sm);color:var(--fg-muted);border-radius:var(--radius-md);transition:color var(--d-fast);padding:.5rem .875rem;font-weight:500;position:relative}.nav-link:after{content:"";background:var(--fg);transform-origin:0;height:1px;transition:transform .4s var(--ease);position:absolute;bottom:.25rem;left:.875rem;right:.875rem;transform:scaleX(0)}.nav-link:hover{color:var(--fg)}.nav-link:hover:after{transform:scaleX(1)}@media (max-width:840px){.nav-links{display:none}}.nav-actions{align-items:center;gap:.75rem;display:flex}.nav-mobile-toggle{border:1px solid var(--border);border-radius:var(--radius-md);cursor:pointer;width:40px;height:40px;transition:background var(--d-fast), border-color var(--d-fast);background:0 0;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:none}.nav-mobile-toggle:hover{background:var(--bg-muted)}@media (max-width:840px){.nav-mobile-toggle{display:flex}.nav-resume-btn{display:none}}.hamburger{flex-direction:column;gap:5px;width:18px;display:flex}.hamburger span{background:var(--fg);transform-origin:50%;height:1.5px;transition:transform .25s var(--ease), opacity .15s;border-radius:2px;display:block}.hamburger.is-open span:first-child{transform:translateY(6.5px)rotate(45deg)}.hamburger.is-open span:nth-child(2){opacity:0;transform:scaleX(0)}.hamburger.is-open span:nth-child(3){transform:translateY(-6.5px)rotate(-45deg)}.nav-mobile-panel{z-index:48;background:color-mix(in oklab, var(--bg) 97%, transparent);-webkit-backdrop-filter:blur(16px)saturate(180%);border-bottom:1px solid var(--divider);opacity:0;visibility:hidden;transition:transform .25s var(--ease), opacity .2s var(--ease), visibility 0s .25s;position:fixed;top:72px;left:0;right:0;transform:translateY(-6px)}.nav-mobile-panel.is-open{opacity:1;visibility:visible;transition:transform .25s var(--ease), opacity .2s var(--ease), visibility 0s 0s;transform:translateY(0)}.nav-mobile-inner{flex-direction:column;gap:.125rem;width:min(1200px,100% - 2rem);margin-inline:auto;padding-block:.75rem 1rem;display:flex}.nav-mobile-link{font-size:var(--text-base);color:var(--fg-muted);border-radius:var(--radius-md);transition:background var(--d-fast), color var(--d-fast);padding:.75rem .875rem;font-weight:500;display:block}.nav-mobile-link:hover{background:var(--bg-muted);color:var(--fg)}.nav-mobile-footer{border-top:1px solid var(--divider);margin-top:.75rem;padding-top:.75rem}.nav-mobile-cta{justify-content:center;width:100%}.nav-mobile-backdrop{z-index:47;background:color-mix(in oklab, var(--bg-inverse) 15%, transparent);position:fixed;inset:0}.offline-banner{top:calc(88px + env(safe-area-inset-top,0px));z-index:46;border-radius:var(--radius-lg);border:1px solid color-mix(in oklab, var(--border-strong) 82%, transparent);background:color-mix(in oklab, var(--bg-elevated) 88%, transparent);-webkit-backdrop-filter:blur(16px)saturate(180%);width:min(680px,100vw - 1.5rem);box-shadow:0 18px 44px color-mix(in oklab, var(--fg) 12%, transparent);align-items:flex-start;gap:.75rem;padding:.9rem .75rem .9rem 1rem;display:inline-flex;position:fixed;left:50%;transform:translate(-50%)}.offline-banner__dot{border-radius:999px;flex:none;width:.65rem;height:.65rem;margin-top:.42rem}.offline-banner__message{min-width:0;font-size:var(--text-sm);color:var(--fg);flex:auto;font-weight:500;line-height:1.5}.offline-banner__dismiss{width:2rem;height:2rem;color:var(--fg-muted);background:color-mix(in oklab, var(--bg-elevated) 72%, transparent);cursor:pointer;transition:color var(--d-fast), background var(--d-fast), border-color var(--d-fast), transform var(--d-fast);border:1px solid #0000;border-radius:999px;flex:none;place-items:center;margin-top:-.25rem;padding:0;display:grid}.offline-banner__dismiss:hover{color:var(--fg);border-color:var(--border);background:var(--bg-muted)}.offline-banner__dismiss:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.offline-banner__dismiss:active{transform:scale(.96)}.offline-banner__dismiss svg{width:1rem;height:1rem}.offline-banner--syncing{border-color:color-mix(in oklab, var(--status-syncing) 34%, var(--border));background:linear-gradient(135deg, color-mix(in oklab, var(--status-syncing) 13%, transparent), transparent 58%), color-mix(in oklab, var(--bg-elevated) 90%, transparent)}.offline-banner--syncing .offline-banner__dot{background:var(--status-syncing);box-shadow:0 0 0 4px color-mix(in oklab, var(--status-syncing) 18%, transparent)}.offline-banner--ready{border-color:color-mix(in oklab, var(--status-online) 30%, var(--border));background:linear-gradient(135deg, color-mix(in oklab, var(--status-online) 12%, transparent), transparent 60%), color-mix(in oklab, var(--bg-elevated) 90%, transparent)}.offline-banner--ready .offline-banner__dot{background:var(--status-online);box-shadow:0 0 0 4px color-mix(in oklab, var(--status-online) 18%, transparent)}.offline-banner--partial{border-color:color-mix(in oklab, var(--status-partial) 34%, var(--border));background:linear-gradient(135deg, color-mix(in oklab, var(--status-partial) 13%, transparent), transparent 62%), color-mix(in oklab, var(--bg-elevated) 92%, transparent)}.offline-banner--partial .offline-banner__dot{background:var(--status-partial);box-shadow:0 0 0 4px color-mix(in oklab, var(--status-partial) 18%, transparent)}.offline-banner--offline{border-color:color-mix(in oklab, var(--status-offline) 32%, var(--border));background:linear-gradient(135deg, color-mix(in oklab, var(--status-offline) 13%, transparent), transparent 62%), color-mix(in oklab, var(--bg-elevated) 92%, transparent)}.offline-banner--offline .offline-banner__dot{background:var(--status-offline);box-shadow:0 0 0 4px color-mix(in oklab, var(--status-offline) 18%, transparent)}.theme-toggle{background:var(--bg-muted);border:1px solid var(--border);border-radius:var(--radius-pill);min-width:102px;min-height:34px;padding:3px;display:inline-flex}.theme-toggle-btn{width:30px;height:28px;color:var(--fg-subtle);cursor:pointer;border-radius:var(--radius-pill);transition:color var(--d-fast), background var(--d-fast);background:0 0;border:none;justify-content:center;align-items:center;display:inline-flex}.theme-toggle-btn:hover{color:var(--fg)}.theme-toggle-btn.is-active{background:var(--bg-elevated);color:var(--fg);box-shadow:var(--shadow-sm)}.btn{font-size:var(--text-sm);letter-spacing:0;border-radius:var(--radius-md);cursor:pointer;transition:transform var(--d-fast) var(--ease), background var(--d-fast), color var(--d-fast), border-color var(--d-fast);white-space:nowrap;border:1px solid #0000;justify-content:center;align-items:center;gap:.5rem;padding:.625rem 1rem;font-weight:600;display:inline-flex}.btn:hover{transform:translateY(-1px)}.btn:active{transform:translateY(0)}.btn-sm{font-size:var(--text-xs);padding:.5rem .875rem}.btn-lg{font-size:var(--text-base);padding:.875rem 1.5rem}.btn-primary{background:var(--fg);color:var(--bg)}.btn-primary:hover{background:var(--accent-strong);color:var(--fg-on-accent)}.btn-secondary{color:var(--fg);border-color:var(--border-strong);background:0 0}.btn-secondary:hover{border-color:var(--fg);background:var(--bg-muted)}.btn-ghost{color:var(--fg);border-color:var(--border);background:0 0}.btn-ghost:hover{background:var(--bg-muted);border-color:var(--border-strong)}@media (max-width:840px){.offline-banner{top:calc(82px + env(safe-area-inset-top,0px));width:min(100% - 1rem,680px);padding-left:.875rem}}.eyebrow{font-family:var(--font-mono);font-size:var(--text-xs);letter-spacing:.05em;color:var(--fg-muted);background:var(--bg-muted);border:1px solid var(--border);border-radius:var(--radius-pill);align-items:center;gap:.5rem;padding:.375rem .75rem;display:inline-flex}.tech-chip{font-family:var(--font-mono);font-size:var(--text-xs);letter-spacing:.02em;color:var(--fg-muted);background:var(--bg-muted);border:1px solid var(--border);border-radius:var(--radius-sm);transition:transform var(--d-fast), border-color var(--d-fast);align-items:center;padding:.25rem .625rem;display:inline-flex}.tech-chip:hover{border-color:var(--border-strong);transform:translateY(-1px)}.app-footer{border-top:1px solid var(--divider);background:var(--bg);padding-block:2.5rem}.app-footer-inner{width:min(var(--layout-container-max), 100% - var(--layout-container-gutter));grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:1.5rem;margin-inline:auto;display:grid}@media (max-width:720px){.app-footer-inner{text-align:center;grid-template-columns:1fr;justify-items:center;gap:1rem}}.footer-meta .footer-name{font-weight:600;font-size:var(--text-sm);margin:0}.footer-meta .footer-tag{font-size:var(--text-xs);color:var(--fg-subtle);margin:.125rem 0 0}.footer-center{justify-self:center;align-items:center;display:flex}.footer-social{gap:.5rem;margin:0;padding:0;list-style:none;display:flex}.footer-social a{border-radius:var(--radius-md);width:36px;height:36px;color:var(--fg-muted);transition:color var(--d-fast), background var(--d-fast);justify-content:center;align-items:center;display:inline-flex}.footer-social a:hover{color:var(--fg);background:var(--bg-muted)}.footer-copy{font-size:var(--text-xs);color:var(--fg-subtle);white-space:nowrap;justify-self:end;align-items:center;gap:.4rem;margin:0;display:flex}@media (max-width:720px){.footer-copy{justify-self:center}}.footer-version{font-family:var(--font-mono);color:var(--fg-subtle);opacity:.55;letter-spacing:.04em;font-size:.68rem}.locale-menu{font-size:var(--text-xs);line-height:1;position:relative}.locale-menu-trigger{border:1px solid var(--divider);background:var(--bg);color:var(--fg);font:inherit;cursor:pointer;transition:border-color var(--d-fast), background var(--d-fast), color var(--d-fast), box-shadow var(--d-fast), transform var(--d-fast);border-radius:999px;align-items:center;gap:.5rem;padding:.45rem .7rem .45rem .55rem;display:inline-flex;box-shadow:0 1px #00000005}.locale-menu-trigger:hover{border-color:color-mix(in oklch, var(--accent) 45%, var(--divider));background:var(--bg-muted);box-shadow:0 6px 18px -10px color-mix(in oklch, var(--accent) 55%, transparent)}.locale-menu-trigger:focus-visible{outline:2px solid color-mix(in oklch, var(--accent) 70%, transparent);outline-offset:2px}.locale-menu.is-pending .locale-menu-trigger{opacity:.65;pointer-events:none}.locale-menu .locale-flag{background:var(--bg-muted);border-radius:999px;flex-shrink:0;justify-content:center;align-items:center;width:22px;height:22px;font-family:Apple Color Emoji,Segoe UI Emoji,Noto Color Emoji,sans-serif;font-size:18px;line-height:1;display:inline-flex}.locale-menu .locale-name{letter-spacing:.01em;font-weight:500}.locale-menu .locale-caret{color:var(--fg-subtle);transition:transform var(--d-fast), color var(--d-fast)}.locale-menu.is-open .locale-caret{color:var(--fg);transform:rotate(180deg)}.locale-menu--compact .locale-menu-trigger{justify-content:center;gap:0;width:32px;height:32px;padding:0}.locale-menu--compact .locale-menu-trigger .locale-name,.locale-menu--compact .locale-menu-trigger .locale-caret{display:none}.locale-menu-list{border:1px solid var(--divider);background:var(--bg);opacity:0;transform-origin:100% 100%;pointer-events:none;min-width:200px;transition:opacity var(--d-fast), transform var(--d-fast);z-index:50;-webkit-backdrop-filter:saturate(140%)blur(6px);backdrop-filter:saturate(140%)blur(6px);border-radius:14px;margin:0;padding:.35rem;list-style:none;position:absolute;bottom:calc(100% + .5rem);right:0;transform:translateY(6px)scale(.97);box-shadow:0 12px 32px -12px #0000002e,0 4px 12px -6px #00000014}.locale-menu--down .locale-menu-list{transform-origin:100% 0;top:calc(100% + .5rem);bottom:auto;transform:translateY(-6px)scale(.97)}.locale-menu.is-open .locale-menu-list{opacity:1;pointer-events:auto;transform:translateY(0)scale(1)}.locale-menu-item{width:100%;color:var(--fg);font:inherit;text-align:left;cursor:pointer;transition:background var(--d-fast), color var(--d-fast);background:0 0;border:0;border-radius:10px;grid-template-columns:auto 1fr auto auto;align-items:center;gap:.65rem;padding:.5rem .6rem;display:grid}.locale-menu-item:hover{background:var(--bg-muted)}.locale-menu-item.is-active{background:color-mix(in oklch, var(--accent) 12%, transparent);color:var(--fg)}.locale-menu-item:focus-visible{outline:2px solid color-mix(in oklch, var(--accent) 70%, transparent);outline-offset:-2px}.locale-code{letter-spacing:.08em;color:var(--fg-subtle);background:var(--bg-muted);font-size:10px;font-weight:600;font-family:var(--font-mono), ui-monospace, monospace;border-radius:4px;padding:2px 6px}.locale-menu-item.is-active .locale-code{color:var(--accent);background:color-mix(in oklch, var(--accent) 14%, transparent)}.locale-check{color:var(--accent);display:inline-flex}@media (max-width:720px){.locale-menu-list{transform-origin:bottom;right:50%;transform:translate(50%,6px)scale(.97)}.locale-menu--down .locale-menu-list{transform-origin:top;transform:translate(50%,-6px)scale(.97)}.locale-menu.is-open .locale-menu-list{transform:translate(50%)scale(1)}}.eyebrow-dot{background:var(--accent);border-radius:50%;width:6px;height:6px}.page-back{font-size:var(--text-sm);color:var(--fg-muted);transition:color var(--d-fast);align-items:center;display:inline-flex}.page-back:hover{color:var(--fg)}.section-wrapper{width:100%;max-width:1024px;padding:.75rem}.box-title{font-size:var(--text-2xl);letter-spacing:0;border-bottom:1px solid var(--divider);margin-bottom:1.25rem;padding-bottom:.75rem;font-weight:600}
