@font-face{font-family:PP Neue Montreal;src:url(/fonts/PPNeueMontreal-Thin.woff2)format("woff2");font-weight:100;font-style:normal;font-display:swap}@font-face{font-family:PP Neue Montreal;src:url(/fonts/PPNeueMontreal-ThinItalic.woff2)format("woff2");font-weight:100;font-style:italic;font-display:swap}@font-face{font-family:PP Neue Montreal;src:url(/fonts/PPNeueMontreal-Light.woff2)format("woff2");font-weight:300;font-style:normal;font-display:swap}@font-face{font-family:PP Neue Montreal;src:url(/fonts/PPNeueMontreal-LightItalic.woff2)format("woff2");font-weight:300;font-style:italic;font-display:swap}@font-face{font-family:PP Neue Montreal;src:url(/fonts/PPNeueMontreal-Book.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:PP Neue Montreal;src:url(/fonts/PPNeueMontreal-BookItalic.woff2)format("woff2");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:PP Neue Montreal;src:url(/fonts/PPNeueMontreal-Regular.woff2)format("woff2");font-weight:450;font-style:normal;font-display:swap}@font-face{font-family:PP Neue Montreal;src:url(/fonts/PPNeueMontreal-Italic.woff2)format("woff2");font-weight:450;font-style:italic;font-display:swap}@font-face{font-family:PP Neue Montreal;src:url(/fonts/PPNeueMontreal-Medium.woff2)format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:PP Neue Montreal;src:url(/fonts/PPNeueMontreal-MediumItalic.woff2)format("woff2");font-weight:500;font-style:italic;font-display:swap}@font-face{font-family:PP Neue Montreal;src:url(/fonts/PPNeueMontreal-SemiBold.woff2)format("woff2");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:PP Neue Montreal;src:url(/fonts/PPNeueMontreal-SemiBoldItalic.woff2)format("woff2");font-weight:600;font-style:italic;font-display:swap}@font-face{font-family:PP Neue Montreal;src:url(/fonts/PPNeueMontreal-Bold.woff2)format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:PP Neue Montreal;src:url(/fonts/PPNeueMontreal-BoldItalic.woff2)format("woff2");font-weight:700;font-style:italic;font-display:swap}@font-face{font-family:PP Supply Mono;src:url(/fonts/PPSupplyMono-Thin.woff2)format("woff2");font-weight:100;font-style:normal;font-display:swap}@font-face{font-family:PP Supply Mono;src:url(/fonts/PPSupplyMono-Ultralight.woff2)format("woff2");font-weight:200;font-style:normal;font-display:swap}@font-face{font-family:PP Supply Mono;src:url(/fonts/PPSupplyMono-Light.woff2)format("woff2");font-weight:300;font-style:normal;font-display:swap}@font-face{font-family:PP Supply Mono;src:url(/fonts/PPSupplyMono-Regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:PP Supply Mono;src:url(/fonts/PPSupplyMono-Medium.woff2)format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:PP Supply Mono;src:url(/fonts/PPSupplyMono-Semibold.woff2)format("woff2");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:PP Supply Mono;src:url(/fonts/PPSupplyMono-Bold.woff2)format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:PP Supply Mono;src:url(/fonts/PPSupplyMono-Black.woff2)format("woff2");font-weight:900;font-style:normal;font-display:swap}:root{--color-primary:#2563eb;--color-primary-hover:#1d4ed8;--color-text:#1f2937;--color-text-light:#6b7280;--color-text-inverse:#fff;--color-background:#fff;--color-background-alt:#f9fafb;--color-background-dark:#111827;--color-border:#e5e7eb;--font-sans:"PP Neue Montreal",system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;--font-mono:"PP Supply Mono",ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace;--text-xs:.75rem;--text-sm:.875rem;--text-base:1rem;--text-lg:1.125rem;--text-xl:1.25rem;--text-2xl:1.5rem;--text-3xl:1.875rem;--text-4xl:2.25rem;--text-5xl:3rem;--leading-tight:1.25;--leading-normal:1.5;--leading-relaxed:1.75;--font-normal:400;--font-medium:500;--font-semibold:600;--font-bold:700;--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.25rem;--space-6:1.5rem;--space-8:2rem;--space-10:2.5rem;--space-12:3rem;--space-16:4rem;--space-20:5rem;--space-24:6rem;--max-width:1200px;--max-width-narrow:800px;--border-radius:.5rem;--border-radius-lg:1rem;--transition-fast:.15s ease;--transition-normal:.25s ease}*,:before,:after{box-sizing:border-box}*{margin:0;padding:0}html{-moz-text-size-adjust:none;text-size-adjust:none}html:focus-within{scroll-behavior:smooth}body{min-height:100vh;line-height:var(--leading-normal);font-family:var(--font-sans);font-size:var(--text-base);color:var(--color-text);background-color:var(--color-background);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.page-transition{min-height:100vh}@media (prefers-reduced-motion:reduce){.page-transition{transition:none!important}}ul[role=list],ol[role=list]{list-style:none}img,picture,video,canvas,svg{max-width:100%;height:auto;display:block}input,button,textarea,select{font:inherit}@media (prefers-reduced-motion:reduce){html:focus-within{scroll-behavior:auto}*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}h1,h2,h3,h4,h5,h6{line-height:var(--leading-tight);font-weight:var(--font-bold);color:var(--color-text)}h1{font-size:var(--text-5xl);margin-bottom:var(--space-6)}h2{font-size:var(--text-4xl);margin-bottom:var(--space-5)}h3{font-size:var(--text-3xl);margin-bottom:var(--space-4)}h4{font-size:var(--text-2xl);margin-bottom:var(--space-3)}p{margin-bottom:var(--space-4);line-height:var(--leading-relaxed)}a{color:var(--color-primary);text-underline-offset:2px;transition:color var(--transition-fast);text-decoration:underline}a:hover{color:var(--color-primary-hover)}ul,ol{margin-bottom:var(--space-4);padding-left:var(--space-6)}li{margin-bottom:var(--space-2)}code{font-family:var(--font-mono);background-color:var(--color-background-alt);padding:var(--space-1)var(--space-2);border-radius:4px;font-size:.9em}pre{font-family:var(--font-mono);background-color:var(--color-background-alt);padding:var(--space-4);border-radius:var(--border-radius);margin-bottom:var(--space-4);overflow-x:auto}pre code{background:0 0;padding:0}hr{border:none;border-top:1px solid var(--color-border);margin:var(--space-8)0}.container{width:100%;max-width:var(--max-width);padding-left:var(--space-4);padding-right:var(--space-4);margin-left:auto;margin-right:auto}.container-narrow{max-width:var(--max-width-narrow)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.text-light{color:var(--color-text-light)}.text-primary{color:var(--color-primary)}.mt-4{margin-top:var(--space-4)}.mt-8{margin-top:var(--space-8)}.mt-12{margin-top:var(--space-12)}.mt-16{margin-top:var(--space-16)}.mb-4{margin-bottom:var(--space-4)}.mb-8{margin-bottom:var(--space-8)}.mb-12{margin-bottom:var(--space-12)}.mb-16{margin-bottom:var(--space-16)}.page-wrapper{flex-direction:column;min-height:100vh;display:flex}.main-content{padding-top:var(--space-12);padding-bottom:var(--space-12);flex:1}.navbar{background-color:var(--color-background);border-bottom:1px solid var(--color-border);padding:var(--space-4)0;z-index:100;position:sticky;top:0}.navbar-inner{justify-content:space-between;align-items:center;display:flex}.navbar-logo{font-size:var(--text-xl);font-weight:var(--font-bold);color:var(--color-text);text-decoration:none}.navbar-logo:hover{color:var(--color-primary)}.navbar-nav{gap:var(--space-6);margin:0;padding:0;list-style:none;display:flex}.navbar-nav a{color:var(--color-text);font-weight:var(--font-medium);transition:color var(--transition-fast);text-decoration:none}.navbar-nav a:hover{color:var(--color-primary)}.footer{background-color:var(--color-background-dark);color:var(--color-text-inverse);padding:var(--space-12)0}.footer-inner{justify-content:space-between;align-items:center;gap:var(--space-4);flex-wrap:wrap;display:flex}.footer-text{color:#ffffffb3;font-size:var(--text-sm)}.footer-links{gap:var(--space-6);margin:0;padding:0;list-style:none;display:flex}.footer-links a{color:#ffffffb3;font-size:var(--text-sm);transition:color var(--transition-fast);text-decoration:none}.footer-links a:hover{color:var(--color-text-inverse)}.home-layout{min-height:100vh;display:flex}.left-container{width:60%;padding:32px}.right-container{width:40%;padding:0}.site-logo{margin-bottom:120px}.intro-text{color:#000;font-feature-settings:"liga" off,"clig" off;margin-bottom:32px;font-family:PP Neue Montreal,sans-serif;font-size:40px;font-style:normal;font-weight:500;line-height:48px}.intro-subtext{color:#666;font-feature-settings:"liga" off,"clig" off;margin-bottom:64px;font-family:PP Neue Montreal,sans-serif;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.section{flex-direction:column;align-items:flex-start;gap:16px;margin-top:64px;display:flex}.section-label{color:#888;font-feature-settings:"liga" off,"clig" off;letter-spacing:1.5px;text-transform:uppercase;margin-bottom:0;font-family:PP Supply Mono,monospace;font-size:11px;font-style:normal;font-weight:500;line-height:16px}.link{color:#000;font-feature-settings:"liga" off,"clig" off;align-items:center;gap:8px;font-family:PP Neue Montreal,sans-serif;font-size:16px;font-style:normal;font-weight:500;line-height:24px;text-decoration:none;transition:transform .2s;display:inline-flex}.link:hover{color:#000;transform:translate(16px)}.link-icon{flex-shrink:0;width:16px;height:16px}.link-row{flex-wrap:wrap;gap:32px;display:flex}.project-page{background-color:#fff;min-height:100vh;padding:32px}.project-logo{margin-bottom:32px}.project-header{justify-content:center;margin-top:32px;margin-bottom:64px;display:flex}.project-title{align-items:center;gap:12px;display:flex}.project-title h1{margin:0;font-family:PP Neue Montreal,sans-serif;font-size:16px;font-weight:500}.project-external-link{align-items:center;text-decoration:none;display:flex}.project-content{flex-direction:column;align-items:center;gap:48px;max-width:2000px;margin:0 auto;display:flex}.project-image{width:100%;max-width:2000px;height:auto}.article-page{background-color:#fff;min-height:100vh;padding:32px}.article-logo{margin-bottom:32px}.article-header{text-align:left;max-width:640px;margin:32px auto}.article-title{margin:0 0 8px;font-family:PP Neue Montreal,sans-serif;font-size:24px;font-weight:500;line-height:1.3}.article-date{letter-spacing:1.5px;color:#888;text-transform:uppercase;font-family:PP Supply Mono,monospace;font-size:11px;font-weight:500;line-height:16px;display:block}.article-content{max-width:640px;margin:0 auto}.article-content p{color:#000;margin:0 0 32px;font-family:PP Neue Montreal,sans-serif;font-size:16px;line-height:1.65}.article-content p:last-child{margin-bottom:0}.article-content ul{margin:0 0 32px;padding:0;list-style:none}.article-content ul li{margin-bottom:32px}.article-content ul li:last-child{margin-bottom:0}.article-content ul li strong{margin-bottom:.5em;font-weight:600;display:block}.article-content ul li p{margin:0}.article-content a{color:#ff4d00;text-decoration:underline}.article-content a:hover{opacity:.7}.image-modal-overlay{z-index:1000;cursor:pointer;opacity:1;background-color:#fff;justify-content:center;align-items:center;padding:32px;display:flex;position:fixed;inset:0}.image-modal-content{justify-content:center;align-items:center;max-width:100%;max-height:100%;display:flex;position:relative}.image-modal-image{object-fit:contain;cursor:default;width:auto;max-width:100%;height:auto;max-height:calc(100vh - 64px)}.image-modal-close{cursor:pointer;z-index:1001;opacity:1;background:0 0;border:none;justify-content:center;align-items:center;width:40px;height:40px;padding:0;display:flex;position:fixed;top:32px;right:32px}.image-modal-close img{width:24px;height:24px;display:block}.image-modal-close:hover{opacity:.7}.hero{padding:var(--space-16)0;text-align:center}.hero h1{margin-bottom:var(--space-4)}.hero p{font-size:var(--text-lg);color:var(--color-text-light);max-width:600px;margin-left:auto;margin-right:auto}.section-alt{background-color:var(--color-background-alt)}@media (max-width:960px){.right-container{display:none}.left-container{width:100%}}@media (max-width:768px){:root{--text-5xl:2.25rem;--text-4xl:1.875rem}.navbar-inner{gap:var(--space-4);flex-direction:column}.footer-inner{text-align:center;flex-direction:column}.hero{padding:var(--space-10)0}}
