:root{--text-xs:clamp(0.75rem, 0.7rem + 0.25vw, 0.875rem);--text-sm:clamp(0.875rem, 0.85rem + 0.25vw, 1rem);--text-base:clamp(1rem, 0.95rem + 0.25vw, 1.125rem);--text-lg:clamp(1.125rem, 1.05rem + 0.5vw, 1.375rem);--text-xl:clamp(1.375rem, 1.25rem + 0.75vw, 1.75rem);--text-2xl:clamp(1.75rem, 1.5rem + 1.25vw, 2.5rem);--text-3xl:clamp(2.25rem, 1.75rem + 2.5vw, 3.5rem);--text-4xl:clamp(3rem, 2.25rem + 3.75vw, 4.5rem);--line-height-tight:1.25;--line-height-snug:1.375;--line-height-base:1.6;--line-height-relaxed:1.75;--line-height-loose:2;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--letter-spacing-tighter:-0.05em;--letter-spacing-tight:-0.025em;--letter-spacing-normal:0;--letter-spacing-wide:0.025em;--letter-spacing-wider:0.05em;--letter-spacing-widest:0.1em;--content-narrow:45ch;--content-optimal:65ch;--content-wide:75ch;--content-full:90ch}:root{--font-size:var(--text-base);--line-height:var(--line-height-base)}body{font-size:var(--text-base);line-height:var(--line-height-base);letter-spacing:var(--letter-spacing-normal)}h1{font-size:var(--text-3xl);line-height:var(--line-height-tight);letter-spacing:var(--letter-spacing-tight);font-weight:var(--font-weight-bold)}h2{font-size:var(--text-2xl);line-height:var(--line-height-tight);letter-spacing:var(--letter-spacing-tight);font-weight:var(--font-weight-semibold)}h3{font-size:var(--text-xl);line-height:var(--line-height-snug);letter-spacing:var(--letter-spacing-normal);font-weight:var(--font-weight-semibold)}h4{font-size:var(--text-lg);line-height:var(--line-height-snug);letter-spacing:var(--letter-spacing-normal);font-weight:var(--font-weight-medium)}h5,h6{font-size:var(--text-base);line-height:var(--line-height-base);letter-spacing:var(--letter-spacing-normal);font-weight:var(--font-weight-medium)}p{font-size:var(--text-base);line-height:var(--line-height-base);max-width:var(--content-optimal)}.lead,p.lead{font-size:var(--text-lg);line-height:var(--line-height-relaxed);font-weight:var(--font-weight-normal)}small,.small{font-size:var(--text-sm);line-height:var(--line-height-relaxed)}.text-xs{font-size:var(--text-xs);line-height:var(--line-height-loose)}code,pre,kbd,samp{font-size:var(--text-sm);line-height:var(--line-height-base)}blockquote{font-size:var(--text-lg);line-height:var(--line-height-relaxed);font-style:italic}ul,ol{font-size:var(--text-base);line-height:var(--line-height-relaxed)}.hero-title{font-size:var(--text-4xl);line-height:var(--line-height-tight);letter-spacing:var(--letter-spacing-tighter)}.hero-subtitle{font-size:var(--text-xl);line-height:var(--line-height-base)}.project-card h3{font-size:var(--text-xl);line-height:var(--line-height-snug)}.project-meta{font-size:var(--text-sm);line-height:var(--line-height-base)}.project-summary{font-size:var(--text-base);line-height:var(--line-height-relaxed)}.skill-tag,.post-tag,.tag{font-size:var(--text-xs);line-height:var(--line-height-tight);letter-spacing:var(--letter-spacing-wide);text-transform:uppercase}.metric-value{font-size:var(--text-2xl);line-height:var(--line-height-tight);font-weight:var(--font-weight-bold)}.metric-label{font-size:var(--text-xs);line-height:var(--line-height-base);letter-spacing:var(--letter-spacing-wider);text-transform:uppercase}.menu{font-size:var(--text-base);line-height:var(--line-height-tight)}.menu--mobile{font-size:var(--text-lg);line-height:var(--line-height-base)}.button,button,input[type=submit],input[type=button]{font-size:var(--text-base);line-height:var(--line-height-tight);letter-spacing:var(--letter-spacing-wide)}input,textarea,select{font-size:var(--text-base);line-height:var(--line-height-base)}label{font-size:var(--text-sm);line-height:var(--line-height-base);font-weight:var(--font-weight-medium)}figcaption,.portfolio-image figcaption{font-size:var(--text-sm);line-height:var(--line-height-relaxed);font-style:italic}.pagination{font-size:var(--text-sm);line-height:var(--line-height-tight)}.post-meta,.post-meta-item{font-size:var(--text-sm);line-height:var(--line-height-base)}@supports not (font-size:clamp(1rem,1vw,1.5rem)){body{font-size:1rem}h1{font-size:2.5rem}h2{font-size:2rem}h3{font-size:1.5rem}h4{font-size:1.25rem}@media(min-width:768px){body{font-size:1.0625rem}h1{font-size:3rem}h2{font-size:2.25rem}h3{font-size:1.75rem}}@media(min-width:1024px){body{font-size:1.125rem}h1{font-size:3.5rem}h2{font-size:2.5rem}h3{font-size:2rem}}}a,button,.button,[role=button]{min-height:44px;min-width:44px;display:inline-flex;align-items:center;justify-content:center}p a,li a,.content a{min-height:auto;min-width:auto;display:inline}@media print{body{font-size:12pt;line-height:1.5}h1{font-size:24pt}h2{font-size:18pt}h3{font-size:14pt}h4,h5,h6{font-size:12pt}p,li{font-size:11pt;line-height:1.5}}