/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-border-style:solid}}}@layer theme{:host,:root{--font-sans:"Larsseit","Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-zinc-900:oklch(21% .006 285.885);--spacing:.25rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-text:#1a1a1a;--color-text-muted:#666;--color-text-light:#000;--color-border:#bbb;--color-bg:#ddd;--color-card-hover:#d2d2d2;--color-code-bg:#f5f5f5;--color-text-link:#000;--logo-filter:invert(100)}}@layer base{*,::backdrop,:after,:before{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}:host,html{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}html{scroll-behavior:smooth;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{font-family:var(--font-sans);color:var(--color-text);background:var(--color-bg);font-size:16px;line-height:1.6;transition:background-color .2s,color .2s}a{color:var(--color-text-link);text-underline-offset:2px;-webkit-text-decoration:underline #0000004d;text-decoration:underline #0000004d;transition:opacity .15s,text-decoration-color .15s}img{-webkit-user-drag:none;-webkit-user-select:none;user-select:none}::selection{background:var(--color-text-link);color:var(--color-bg)}.dark a{text-decoration-color:#ffffff4d}a:hover{opacity:.7}}@layer components{.wrapper{max-width:690px;margin:0 auto;padding:0 24px}.header{z-index:100;position:relative}.header-inner{max-width:690px;margin:0 auto}.nav{justify-content:space-between;align-items:center;padding:16px 24px;display:flex}.nav-logo{color:var(--color-text-light);font-size:16px;font-weight:500;text-decoration:none;transition:opacity .15s}.nav-logo:hover{opacity:.7}.nav-logo img{filter:var(--logo-filter)}.logo-text{white-space:nowrap;display:inline-flex}.logo-typing-area{display:inline}.logo-cursor{background-color:var(--color-text-light);vertical-align:middle;width:2px;height:1em;margin-left:2px;margin-right:4px;display:inline-block;position:relative;top:-2px}.nav-links{align-items:center;gap:8px;list-style:none;display:flex}.nav-mobile-controls{align-items:center;gap:8px;display:none}.menu-toggle{cursor:pointer;width:36px;height:36px;color:var(--color-text-muted);-webkit-tap-highlight-color:transparent;background:0 0;border:none;border-radius:8px;justify-content:center;align-items:center;transition:color .15s;display:flex}.menu-toggle:hover{color:var(--color-text)}.mobile-menu-overlay{background:var(--color-bg);z-index:99;padding-top:80px;display:none;position:fixed;inset:0}.mobile-menu-nav{flex-direction:column;justify-content:center;align-items:center;gap:8px;height:100%;display:flex}.mobile-menu-link{color:var(--color-text-muted);align-items:center;gap:12px;padding:16px 32px;font-size:24px;font-weight:500;text-decoration:none;transition:color .15s;display:flex}.mobile-menu-link svg{width:24px;height:24px}.mobile-menu-link.active,.mobile-menu-link:hover{color:var(--color-text);opacity:1}.nav-link{color:var(--color-text-muted);border-radius:100px;align-items:center;gap:6px;padding:7px 14px 6px;font-size:14px;font-weight:500;text-decoration:none;transition:background-color .15s,color .15s;display:flex}.nav-link:hover{color:var(--color-text)}.nav-link.active,.nav-link:hover{background:var(--color-card-hover);opacity:1}.nav-link.active{color:var(--color-text-light)}.theme-toggle{cursor:pointer;width:36px;height:36px;color:var(--color-text-muted);-webkit-tap-highlight-color:transparent;background:0 0;border:none;border-radius:8px;justify-content:center;align-items:center;transition:color .15s;display:flex}.theme-toggle:hover{color:var(--color-text)}.main{padding-bottom:40px}.hero{padding:40px 0 48px}.hero-name{margin-bottom:2px;font-size:16px;font-weight:600}.hero-title{color:var(--color-text-muted);margin-bottom:20px;font-size:14px}.hero-bio{font-size:16px;line-height:1.75}.hero-bio p{margin-bottom:16px}.hero-bio p:last-child{margin-bottom:0}.hero-bio em{font-style:italic}.hero-bio a{text-underline-offset:3px;-webkit-text-decoration:none;text-decoration:none}.dark .hero-bio a{text-decoration-color:#ffffff4d}.section{padding:48px 0}.section-title{color:var(--color-text-link);border-bottom:1px solid var(--color-border);margin-bottom:18px;padding-bottom:26px;font-size:17px;font-weight:600}.projects-grid{grid-template-columns:repeat(2,1fr);gap:16px;display:grid}.project-card{border-radius:12px;text-decoration:none;transition:border-color .15s,box-shadow .25s;display:block;overflow:hidden}.project-card:hover{opacity:1;box-shadow:0 12px 24px #00000014}.dark .project-card:hover{box-shadow:0 12px 24px #0000004d}.project-preview{height:180px;position:relative;overflow:hidden}.project-logo,.project-preview{justify-content:center;align-items:center;display:flex}.project-logo{color:#1a1a1a;z-index:2;background:#fffffff2;border-radius:12px;width:56px;height:56px;box-shadow:0 4px 12px #0000001a}.project-overlay{cursor:pointer;text-align:center;z-index:1;opacity:1;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);background:#0000001a;border:1px solid #ffffff0d;border-radius:8px;flex-direction:column;justify-content:flex-end;align-items:flex-start;width:calc(100% - 24px);padding:10px 16px;display:flex;position:absolute;bottom:12px;left:12px;right:0;transform:none}.project-overlay-name{color:#fff;margin-bottom:4px;font-size:16px;font-weight:600}.project-overlay-desc{color:#ffffffa6;text-align:left;font-size:13px;line-height:1.4}.work-list{margin-top:-18px;list-style:none}.work-link{border-radius:8px;align-items:center;gap:16px;margin:0 -12px;padding:16px 12px;text-decoration:none;transition:opacity .15s;display:flex;position:relative}.work-item-bg{background:var(--color-card-hover);z-index:0;border-radius:8px;position:absolute;inset:0}.work-link>:not(.work-item-bg){z-index:1;position:relative}.work-link:hover{opacity:1}.work-icon{background:var(--color-card-hover);border:1px solid var(--color-border);width:40px;color:var(--color-text-muted);border-radius:6px;flex-shrink:0;justify-content:center;align-self:stretch;align-items:center;display:flex}.work-content{flex:1;min-width:0}.work-title{margin-bottom:2px;font-size:16px;font-weight:400}.work-date{color:var(--color-text-muted);font-size:14px}.work-meta{text-align:right;flex-shrink:0;align-self:flex-start}.work-type{font-size:14px;display:block}.work-time,.work-type{color:var(--color-text-muted)}.work-time{font-size:13px}.view-all{color:var(--color-text-muted);align-items:center;gap:6px;margin-top:20px;font-size:14px;text-decoration:none;display:inline-flex}.about-page,.blog-page{padding-top:40px}.page-title{color:var(--color-text-light);margin-bottom:26px;font-size:17px;font-weight:600}.page-desc{color:var(--color-text-muted);margin-bottom:32px;font-size:14px}.blog-list{list-style:none}.blog-item:first-child{border-top:1px solid var(--color-border)}.blog-link{border-radius:8px;align-items:center;gap:16px;margin:0 -12px;padding:16px 12px;text-decoration:none;transition:opacity .15s;display:flex;position:relative}.blog-item-bg{background:var(--color-card-hover);z-index:0;border-radius:8px;position:absolute;inset:0}.blog-link>:not(.blog-item-bg){z-index:1;position:relative}.blog-link:hover{opacity:1}.blog-icon{background:var(--color-card-hover);border:1px solid var(--color-border);width:40px;color:var(--color-text-muted);border-radius:6px;flex-shrink:0;justify-content:center;align-self:stretch;align-items:center;display:flex}.blog-content{flex:1;min-width:0}.blog-title{margin-bottom:2px;font-size:16px;font-weight:400}.blog-date{color:var(--color-text-muted);font-size:14px}.blog-meta{text-align:right;flex-shrink:0;align-self:flex-start}.blog-time{color:var(--color-text-muted);font-size:13px}.about-content{font-size:16px;line-height:1.75}.about-content p{margin-bottom:16px}.about-content h2{color:var(--color-text-light);border-bottom:1px solid var(--color-border);margin-top:64px;margin-bottom:18px;padding-bottom:26px;font-size:17px;font-weight:600}.experience-list{list-style:none}.experience-item{justify-content:space-between;align-items:flex-start;padding:16px 0;display:flex}.experience-item:first-child{padding-top:0}.experience-role h3{margin-bottom:2px;font-size:14px;font-weight:400}.experience-company,.experience-date{color:var(--color-text-muted);font-size:13px}.skills-grid{flex-wrap:wrap;gap:8px;display:flex}.skill-tag{background:var(--color-card-hover);color:var(--color-text-muted);border-radius:6px;padding:6px 12px 4px;font-size:13px}.contact-links{gap:20px;margin-top:16px}.contact-link{border:1px solid var(--color-border);color:var(--color-text-light);letter-spacing:.05rem;text-transform:uppercase;text-align:center;width:100%;padding:9px 12px 8px;font-size:12px;text-decoration:none}.post{padding-top:24px}.post-header{margin-bottom:40px}.back-link{color:var(--color-text-muted);align-items:center;gap:6px;margin-bottom:24px;font-size:14px;text-decoration:none;display:inline-flex}.post-title{color:var(--color-text-light);margin-bottom:12px;font-size:20px;font-weight:600;line-height:1.3}.post-meta{color:var(--color-text-muted);gap:16px;font-size:13px;display:flex}.post-content{font-size:16px;line-height:1.8}.post-content p{margin-bottom:20px}.post-content h2{margin-top:40px;margin-bottom:16px;font-size:18px;font-weight:600}.post-content h3{margin-top:32px;margin-bottom:12px;font-size:16px;font-weight:600}.post-content h4{margin-bottom:8px}.post-content h4,.post-content strong{color:var(--color-text-light)}.post-content ol,.post-content ul{margin-bottom:20px;padding-left:24px}.post-content li{margin-bottom:8px}.post-content pre{background:var(--color-code-bg);border:1px solid var(--color-border);border-radius:8px;margin-bottom:20px;padding:16px;font-size:14px;line-height:1.6;overflow-x:auto}.post-content code{font-family:Consolas,SF Mono,Monaco,Courier New,monospace;font-size:.9em}.post-content li code,.post-content p code{background:var(--color-code-bg);border-radius:4px;padding:2px 6px;font-size:.875em}.post-content table{border-collapse:collapse;width:100%;margin-bottom:20px;font-size:14px}.post-content td,.post-content th{border-bottom:1px solid var(--color-border);text-align:left;padding:10px 12px}.post-content th{font-weight:600}.post-content div>hr{border-color:var(--color-border);margin-bottom:16px}.post-content strong{font-weight:600}.post-content .image-link-expand{display:none}.post-content .captioned-image-container{margin-bottom:32px}.post-content .image-caption{text-align:center;color:var(--color-text-muted);margin-top:8px;font-size:13px}.post-footer{border-top:1px solid var(--color-border);margin-top:60px;padding-top:24px}.post-footer p{color:var(--color-text-muted);margin-bottom:16px;font-size:14px}.project-page{padding-top:24px}.project-header{margin-bottom:48px}.project-hero{text-align:center;border-radius:6px;margin-bottom:32px}.project-hero-title{color:var(--color-text-light);text-shadow:0 2px 4px #0000001a;margin-bottom:8px;font-size:20px;font-weight:600}.project-hero-tagline{color:var(--color-text-muted);font-size:16px}.project-meta-grid{gap:32px;margin-bottom:24px;display:flex}.project-meta-item{flex-direction:column;gap:4px;display:flex}.project-meta-label{text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-light);font-size:12px;font-weight:500}.project-meta-value{color:var(--color-text-muted);font-size:14px}.project-links{gap:12px;display:flex}.project-link-btn{background:var(--color-text);color:var(--color-bg);border-radius:8px;align-items:center;gap:8px;padding:8px 16px;font-size:14px;font-weight:500;text-decoration:none;transition:opacity .15s;display:inline-flex}.project-link-btn:hover{opacity:.85}.project-link-btn.secondary{background:var(--color-card-hover);color:var(--color-text);border:1px solid var(--color-border)}.project-link-btn.secondary:hover{background:var(--color-border);opacity:1}.project-section{margin-bottom:64px}.project-section h2{color:var(--color-text-light);margin-bottom:16px;font-size:16px;font-weight:600}.project-section p{color:var(--color-text-muted);font-size:16px;line-height:1.75}.project-tech-grid{flex-wrap:wrap;gap:8px;display:flex}.project-features{padding:0;list-style:none}.project-features li{color:var(--color-text-muted);margin-bottom:12px;padding-left:20px;font-size:15px;line-height:1.5;position:relative}.project-features li:before{content:"∙";color:var(--color-text-light);position:absolute;left:0}• .project-footer{border-top:1px solid var(--color-border);margin-top:60px;padding-top:24px}.footer{color:var(--color-text-light);padding:32px 0;font-size:13px}.footer p{opacity:.25;padding:16px 0}.skeleton{background:linear-gradient(90deg,var(--color-card-hover)25%,var(--color-border)50%,var(--color-card-hover)75%);background-size:200% 100%;border-radius:4px;animation:skeleton-loading 1.5s infinite}@keyframes skeleton-loading{0%{background-position:200% 0}to{background-position:-200% 0}}}@layer utilities{.visible{visibility:visible}.\!relative{position:relative!important}.relative{position:relative}.inset-0{inset:calc(var(--spacing)*0)}.-top-0\.5{top:calc(var(--spacing)*-.5)}.top-0\.5{top:calc(var(--spacing)*.5)}.mx-auto{margin-inline:auto}.mt-8{margin-top:calc(var(--spacing)*8)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.box-border{box-sizing:border-box}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-auto{height:auto}.h-full{height:100%}.w-full{width:100%}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-row{flex-direction:row}.items-center{align-items:center}.justify-between{justify-content:space-between}.gap-2{gap:calc(var(--spacing)*2)}.gap-4{gap:calc(var(--spacing)*4)}.overflow-hidden{overflow:hidden}.border{border-style:var(--tw-border-style);border-width:1px}.bg-zinc-900{background-color:var(--color-zinc-900)}.object-cover{object-fit:cover}.object-center{object-position:center}.object-top{object-position:top}.pt-8{padding-top:calc(var(--spacing)*8)}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (min-width:40rem){.sm\:flex{display:flex}.sm\:justify-between{justify-content:space-between}}}@font-face{font-family:Larsseit;src:url(/fonts/Larsseit.otf)format("opentype");font-weight:400;font-style:normal}@font-face{font-family:Larsseit;src:url(/fonts/Larsseit-Medium.otf)format("opentype");font-weight:500;font-style:normal}@font-face{font-family:Larsseit;src:url(/fonts/Larsseit-Bold.otf)format("opentype");font-weight:600;font-style:normal}.dark{--color-text:lch(100% 0 0/.7);--color-text-muted:lch(100% 0 0/.6);--color-text-light:#fff;--color-border:#2a2a2a;--color-bg:#101010;--color-card-hover:#1f1f1f;--color-code-bg:#1c1c1c;--color-text-link:#fff;--logo-filter:invert(0)}.hljs{color:#383a42;background:var(--color-code-bg)}.hljs-comment,.hljs-quote{color:#a0a1a7;font-style:italic}.hljs-doctag,.hljs-formula,.hljs-keyword{color:#a626a4}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e45649}.hljs-literal{color:#0184bb}.hljs-addition,.hljs-attribute,.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#50a14f}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#986801}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#4078f2}.hljs-built_in,.hljs-class .hljs-title,.hljs-title.class_{color:#c18401}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline}.dark .hljs{color:#abb2bf}.dark .hljs-comment,.dark .hljs-quote{color:#5c6370;font-style:italic}.dark .hljs-doctag,.dark .hljs-formula,.dark .hljs-keyword{color:#c678dd}.dark .hljs-deletion,.dark .hljs-name,.dark .hljs-section,.dark .hljs-selector-tag,.dark .hljs-subst{color:#e06c75}.dark .hljs-literal{color:#56b6c2}.dark .hljs-addition,.dark .hljs-attribute,.dark .hljs-meta .hljs-string,.dark .hljs-regexp,.dark .hljs-string{color:#98c379}.dark .hljs-attr,.dark .hljs-number,.dark .hljs-selector-attr,.dark .hljs-selector-class,.dark .hljs-selector-pseudo,.dark .hljs-template-variable,.dark .hljs-type,.dark .hljs-variable{color:#d19a66}.dark .hljs-bullet,.dark .hljs-link,.dark .hljs-meta,.dark .hljs-selector-id,.dark .hljs-symbol,.dark .hljs-title{color:#61aeee}.dark .hljs-built_in,.dark .hljs-class .hljs-title,.dark .hljs-title.class_{color:#e6c07b}@media (max-width:690px){.wrapper{padding:0 16px}.nav{padding:16px}.nav-links-desktop{display:none}.nav-mobile-controls{display:flex}.mobile-menu-overlay{display:block}.projects-grid{grid-template-columns:1fr}.blog-link,.work-link{flex-wrap:wrap}.blog-meta,.work-meta{text-align:left;gap:12px;width:100%;margin-top:8px;display:flex}.post-title{font-size:24px}.post-meta{flex-wrap:wrap;gap:8px 16px}.project-hero{padding:32px 20px}.project-hero-title{font-size:24px}.project-meta-grid{flex-wrap:wrap;gap:16px 32px}.project-links{flex-wrap:wrap}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}