*,:before,:after{box-sizing:border-box}body{margin:0}:root{--bg:#111;--text:#ededed;--text-muted:#999;--border:#2a2a2a;--accent:#fff;--accent-link:#a8e6c9;--space-xs:4px;--space-sm:8px;--space-md:16px;--space-lg:24px;--space-xl:48px;--space-2xl:96px;--font-sans:"Radio Canada", system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono:ui-monospace, "SF Mono", Menlo, monospace;--text-sm:.875rem;--text-base:1rem;--text-lg:1.125rem;--text-xl:1.5rem;--text-2xl:2rem;--max-width:720px}[data-theme=light]{--bg:#fff;--text:#1a1a1a;--text-muted:#6b6b6b;--border:#e5e5e5;--accent:#0a0a0a;--accent-link:#6ec9a8}body{font-family:var(--font-sans);font-size:var(--text-base);color:var(--text);background-color:var(--bg);-webkit-font-smoothing:antialiased;line-height:1.6}h1,h2,h3{margin:0;line-height:1.2}h1{font-size:var(--text-2xl)}h2{font-size:var(--text-xl)}h3{font-size:var(--text-lg)}p{margin:0}a{color:var(--text);text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1px;transition:text-decoration-thickness .2s}a:hover{text-decoration-thickness:2px}#root{max-width:var(--max-width);padding:var(--space-lg);margin:0 auto}.navbar{padding:var(--space-md) 0;margin-bottom:var(--space-xl);justify-content:space-between;align-items:flex-start;display:flex}.navbar .brand{font-weight:600;text-decoration:none}.navbar .nav-links{align-items:flex-end;gap:var(--space-sm);text-align:right;flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.navbar .nav-links a{color:var(--text-muted);text-decoration:none;position:relative}.navbar .nav-links a:after{content:"";background:var(--accent-link);transform-origin:0;height:1px;transition:transform .25s;position:absolute;bottom:-2px;left:0;right:0;transform:scaleX(0)}.navbar .nav-links a:hover:after{transform:scaleX(1)}.theme-toggle{cursor:pointer;color:var(--text-muted);background:0 0;border:none;padding:.1rem;line-height:0;transition:color .2s}.theme-toggle svg{display:block;overflow:visible}.theme-toggle:hover{color:var(--accent-link)}.theme-toggle .moon-cutout{transition:transform .4s cubic-bezier(.4,0,.2,1);transform:translate(0)}.theme-toggle .rays{transform-origin:12px 12px;opacity:0;transition:transform .35s cubic-bezier(.4,0,.2,1),opacity .25s;transform:scale(0)}[data-theme=dark] .theme-toggle .moon-cutout{transform:translate(10px,-10px)}[data-theme=dark] .theme-toggle .rays{opacity:1;transform:scale(1)}html.theme-transitioning,html.theme-transitioning :not(.theme-toggle):not(.theme-toggle *){transition:background-color .3s,color .3s,border-color .3s,text-decoration-color .3s}.navbar .nav-links a.active{color:var(--accent-link);font-weight:500}.experience h2,.projects h2{color:var(--accent-link);font-size:1rem}.experience{padding-top:2rem}.experience h2{margin-bottom:1.5rem}.job{margin-bottom:2rem}.job-header{justify-content:space-between;align-items:baseline;margin-bottom:.25rem;display:flex}.job-date{color:var(--text-muted)}.job-desc{margin:0}.company-name,.project-name{font-weight:700;position:relative}.company-name:after,.project-name:after{content:"";transform-origin:0;background:currentColor;height:1px;transition:transform .25s;position:absolute;bottom:-2px;left:0;right:0;transform:scaleX(0)}.company-name:hover:after,.project-name:hover:after{transform:scaleX(1)}.projects{padding-top:2rem}.projects h2{margin-bottom:1.5rem}.project{margin-bottom:2rem}.project-header{justify-content:space-between;align-items:baseline;margin-bottom:.25rem;display:flex}.project-date{color:var(--text-muted)}.project-desc{white-space:nowrap;text-overflow:ellipsis;margin:0;overflow:hidden}.tech{color:var(--text-muted);margin:.4rem 0 0;font-size:.85rem}section{margin-bottom:var(--space-2xl)}.page h1,.page p{margin-bottom:1.5rem}.link-list{margin:0;padding:0;list-style:none}.link-list li{color:var(--text-muted);margin-bottom:.25rem}.link-accent{color:var(--accent-link);text-decoration:none;position:relative}.link-accent:after{content:"";background:var(--accent-link);transform-origin:0;height:1px;transition:transform .25s;position:absolute;bottom:-2px;left:0;right:0;transform:scaleX(0)}.link-accent:hover:after{transform:scaleX(1)}
