*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}:root{--black: #000;--white: #fff;--gray-50: #f9fafb;--gray-100: #f3f4f6;--gray-200: #e5e7eb;--gray-300: #d1d5db;--gray-400: #9ca3af;--gray-600: #4b5563;--gray-700: #374151;--gray-800: #1f2937;--gray-900: #111827;--yellow-300: #fde047;--yellow-400: #facc15;--code-bg: #2b2b2b;--code-text: #a9b7c6}html{scroll-behavior:smooth}body{font-family:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace;background:var(--white);color:var(--black);line-height:1.5;min-height:100vh}h1,h2,h3,h4,h5,h6{font-weight:700;line-height:1.2}a{color:inherit;text-decoration:underline;text-underline-offset:2px}a:hover{text-decoration:none}.container{max-width:64rem;margin:0 auto;padding:0 1.5rem}@media (min-width: 768px){.container{padding:0 2rem}}.container-wide{max-width:72rem;margin:0 auto}.header{padding:.75rem 1rem .5rem}@media (min-width: 768px){.header{padding:.75rem 1.25rem .5rem}}.header-inner{max-width:72rem;margin:0 auto;display:flex;align-items:center;justify-content:space-between}.logo{display:flex;align-items:center;gap:.5rem;text-decoration:none}.logo img{width:1.75rem;height:1.75rem}.logo span{font-weight:700;font-size:.875rem;letter-spacing:.025em}@media (min-width: 768px){.logo span{font-size:1rem}}.nav{display:flex;align-items:center;gap:1rem}.nav a{font-weight:600;font-size:.875rem;padding:.125rem .375rem}@media (min-width: 768px){.nav a{font-size:1rem}}.footer{border-top:4px solid var(--black);background:var(--white);padding:1.5rem;text-align:center;font-size:.875rem}@media (min-width: 768px){.footer{padding:2rem}}.footer-links{display:flex;flex-wrap:wrap;justify-content:center;gap:1rem;margin-bottom:1rem}.hero{border-bottom:1px solid var(--gray-300);padding:2rem 1.5rem 3rem}@media (min-width: 768px){.hero{padding:3rem 2rem 4rem}}.hero h1{font-size:2.25rem;margin-bottom:1.5rem}@media (min-width: 768px){.hero h1{font-size:3.75rem}}.hero-text{font-size:1.125rem;line-height:1.75}@media (min-width: 768px){.hero-text{font-size:1.25rem}}.hero-subtitle{font-size:1rem;color:var(--gray-600);margin-top:1rem}.section{border-bottom:1px solid var(--gray-300);padding:3rem 1.5rem}@media (min-width: 768px){.section{padding:4rem 2rem}}.section-gray{background:var(--gray-50)}.section-black{background:var(--black);color:var(--white);border-bottom:none}.section-black a{text-decoration:underline}.section h2{font-size:1.5rem;margin-bottom:1.5rem}@media (min-width: 768px){.section h2{font-size:1.875rem;margin-bottom:2rem}}.project-card{border:4px solid var(--black);background:var(--white);padding:1.5rem}@media (min-width: 768px){.project-card{padding:2rem}}.project-card h3{font-size:1.25rem;margin-bottom:1rem}@media (min-width: 768px){.project-card h3{font-size:1.5rem}}.project-card p{font-size:1rem;line-height:1.75;color:var(--gray-800);margin-bottom:1.5rem}@media (min-width: 768px){.project-card p{font-size:1.125rem}}.archive-card{border:2px solid var(--gray-400);background:var(--white);padding:1.5rem}@media (min-width: 768px){.archive-card{padding:2rem}}.archive-card h3{font-size:1.25rem;margin-bottom:1rem}@media (min-width: 768px){.archive-card h3{font-size:1.5rem}}.archive-card p{font-size:1rem;line-height:1.75;color:var(--gray-700);margin-bottom:1.5rem}@media (min-width: 768px){.archive-card p{font-size:1.125rem}}.btn-group{display:flex;flex-wrap:wrap;gap:.75rem}.btn{display:inline-flex;align-items:center;padding:.5rem 1rem;font-weight:700;font-size:.875rem;text-decoration:none;transition:background-color .15s,color .15s}.btn-primary{border:2px solid var(--black);background:var(--white)}.btn-primary:hover{background:var(--black);color:var(--white)}.btn-yellow{border:2px solid var(--black);background:var(--yellow-300)}.btn-yellow:hover{background:var(--yellow-400)}.btn-gray{border:2px solid var(--gray-400);background:var(--white)}.btn-gray:hover{background:var(--gray-100)}.btn-large{border-width:4px;padding:.75rem 1.5rem}.blog-card{display:block;text-decoration:none;border-left:4px solid var(--yellow-300)}.blog-card:hover article{background:var(--gray-50)}.blog-card article{border:4px solid var(--black);background:var(--white);padding:1.5rem;transition:background-color .15s}.blog-card time{font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:var(--gray-600)}.blog-card h2{font-size:1.25rem;margin:.5rem 0 .75rem}.blog-card p{font-size:1rem;line-height:1.75;color:var(--gray-700)}.blog-card .read-more{display:inline-block;margin-top:1rem;font-weight:700;font-size:.875rem}.blog-list{display:flex;flex-direction:column;gap:1.5rem}.blog-footer{margin-top:1.5rem;display:flex;flex-direction:column;gap:.75rem}@media (min-width: 640px){.blog-footer{flex-direction:row;align-items:center;justify-content:space-between}}.rss-link{font-size:.875rem;color:var(--gray-600)}.post-wrapper{border-left:4px solid var(--yellow-300)}.post-article{border-left:4px solid var(--black);border-top:1px solid var(--gray-300);padding:3rem 1.5rem}@media (min-width: 768px){.post-article{padding:4rem 2rem}}.post-header{margin-bottom:3rem;padding-bottom:2rem;border-bottom:4px solid var(--black)}.back-link{display:inline-block;margin-bottom:1rem;font-size:.875rem;font-weight:700}.post-date{display:block;margin-bottom:1rem;font-size:.875rem;text-transform:uppercase;letter-spacing:.05em;color:var(--gray-600)}.post-title{font-size:1.875rem;margin-bottom:1rem}@media (min-width: 768px){.post-title{font-size:3rem}}.post-description{font-size:1.125rem;line-height:1.75;color:var(--gray-700)}.prose h2{margin-top:2.5rem;margin-bottom:.75rem;font-size:1.25rem;padding-bottom:.5rem;border-bottom:2px solid var(--black);scroll-margin-top:5rem}@media (min-width: 768px){.prose h2{font-size:1.5rem}}.prose h3{margin-top:1.5rem;margin-bottom:.5rem;font-size:1.125rem;scroll-margin-top:5rem}@media (min-width: 768px){.prose h3{font-size:1.25rem}}.prose p{margin-bottom:1rem;font-size:.875rem;line-height:1.75;color:var(--gray-900)}@media (min-width: 768px){.prose p{font-size:1rem}}.prose ul,.prose ol{margin-bottom:1rem;padding-left:1.5rem;font-size:.875rem;line-height:1.75}@media (min-width: 768px){.prose ul,.prose ol{font-size:1rem}}.prose ul{list-style-type:disc}.prose ol{list-style-type:decimal}.prose li{padding-left:.25rem;margin-bottom:.375rem}.prose code{background:var(--gray-200);padding:.125rem .5rem;border-radius:.25rem;font-size:.875rem;font-weight:500}.prose pre{margin:1.5rem 0;padding:1rem;background:var(--code-bg);color:var(--code-text);border-radius:.5rem;overflow-x:auto;font-size:.75rem;line-height:1.5}@media (min-width: 768px){.prose pre{font-size:.875rem}}.prose pre code{background:rgba(0,0,0,0);padding:0;border-radius:0;color:inherit;font-size:inherit;font-weight:normal}.prose blockquote{margin:1.25rem 0;padding:1rem;border-left:4px solid var(--black);background:var(--gray-50);font-size:.875rem;color:var(--gray-800)}@media (min-width: 768px){.prose blockquote{font-size:1rem}}.prose blockquote p:last-child{margin-bottom:0}.prose table{width:100%;margin:2rem 0;border:4px solid var(--black);background:var(--white);text-align:left;border-collapse:collapse}@media (max-width: 767px){.prose table{border-width:2px;margin:1.5rem -.5rem;width:calc(100% + 1rem)}}.prose thead{background:var(--yellow-300);font-size:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em}@media (max-width: 767px){.prose thead{font-size:.6rem;letter-spacing:0}}.prose th{padding:1rem 1.25rem;border-bottom:4px solid var(--black);text-align:left}@media (max-width: 767px){.prose th{padding:.5rem .35rem;border-bottom-width:2px}}.prose tbody tr{border-bottom:2px solid var(--gray-300)}.prose tbody tr:nth-child(even){background:var(--gray-50)}.prose tbody tr:hover{background:var(--gray-100)}@media (max-width: 767px){.prose tbody tr{border-bottom-width:1px}}.prose td{padding:1rem 1.25rem;font-size:.875rem;line-height:1.75;vertical-align:top}@media (max-width: 767px){.prose td{padding:.5rem .35rem;font-size:.7rem;line-height:1.4}}@media (min-width: 768px){.prose td{font-size:1rem}}.prose strong{font-weight:700;color:var(--black)}.prose em{font-style:italic}.prose hr{margin:2rem 0;border:none;border-top:2px solid var(--gray-300)}.prose img{max-width:700px;width:100%;height:auto;margin:1.5rem auto;display:block;cursor:zoom-in;transition:opacity .15s}.prose img:hover{opacity:.85}@media (max-width: 767px){.prose img{max-width:calc(100% + 1rem);margin-left:-.5rem;margin-right:-.5rem}}.lightbox-overlay{position:fixed;inset:0;background:rgba(0,0,0,.9);display:flex;align-items:center;justify-content:center;z-index:1000;cursor:zoom-out;opacity:0;visibility:hidden;transition:opacity .2s,visibility .2s}.lightbox-overlay.active{opacity:1;visibility:visible}.lightbox-overlay img{max-width:90vw;max-height:90vh;object-fit:contain;cursor:zoom-out}.lightbox-overlay .lightbox-close{position:absolute;top:1rem;right:1rem;color:var(--white);font-size:2rem;font-weight:700;cursor:pointer;line-height:1;padding:.5rem}.lightbox-overlay .lightbox-close:hover{opacity:.7}.about-content{max-width:48rem;margin:0 auto}.about-content h1{font-size:2.25rem;margin-bottom:2rem}@media (min-width: 768px){.about-content h1{font-size:3rem}}.about-content h2{font-size:1.5rem;margin-top:3rem;margin-bottom:1rem}.about-content p{font-size:1rem;line-height:1.75;margin-bottom:1.5rem}@media (min-width: 768px){.about-content p{font-size:1.125rem}}.page-header{border-top:1px solid var(--gray-300);padding:3rem 1.5rem}@media (min-width: 768px){.page-header{padding:4rem 2rem}}.page-title{font-size:2.25rem;margin-bottom:2rem}@media (min-width: 768px){.page-title{font-size:3rem}}.hljs{display:block;overflow-x:auto;padding:.5em;background:rgba(0,0,0,0);color:#a9b7c6}.hljs-comment,.hljs-quote{color:gray;font-style:italic}.hljs-keyword,.hljs-doctag,.hljs-formula{color:#cc7832}.hljs-string,.hljs-regexp,.hljs-attr,.hljs-attribute{color:#6a8759}.hljs-number,.hljs-literal{color:#6897bb}.hljs-title,.hljs-title.function,.hljs-function .hljs-title{color:#ffc66d}.hljs-built_in,.hljs-builtin-name,.hljs-class .hljs-title,.hljs-type{color:#e8bf6a}.hljs-name,.hljs-section,.hljs-selector-id,.hljs-selector-class{color:#e06c75}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline;color:#6897bb}