:root{--background: #181818;--text: #f4f4f4;--muted: #9a9a9a;--subtle: #747474;--badge: #242424;--badge-hover: #2d2d2d;--code: #242424;--overlay: rgb(24 24 24 / .2);--font: Geist, -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;color-scheme:dark}*{box-sizing:border-box}html,body{margin:0;min-height:100%;background:var(--background);color:var(--text);font-family:var(--font);font-size:14.4px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{min-height:100vh;background:var(--background)}a{color:var(--text);text-decoration:none}.markdown a:not(.badge):not(.post-row):not(.spotify-card):not(.social-icon-link){display:inline-flex;align-items:center;gap:.16rem;border-radius:6px;background:var(--badge);padding:.02rem .38rem;margin:0 .12rem;color:var(--text);font-size:.92em;line-height:1.55;transition:background .16s ease,opacity .16s ease}.markdown a:not(.badge):not(.post-row):not(.spotify-card):not(.social-icon-link):after{content:"↗";color:var(--subtle);font-size:.86em}.markdown a:not(.badge):not(.post-row):not(.spotify-card):not(.social-icon-link):hover{background:var(--badge-hover);opacity:1}.markdown h1,.markdown h2,.markdown h3{margin:1.35em 0 .38em;line-height:1.15;letter-spacing:-.04em}.markdown h1{font-size:1.7em}.markdown h2{font-size:1.28em}.markdown h3{font-size:1.08em}.markdown ul{margin:.35em 0 .7em;padding-left:1.2em}.markdown pre{overflow-x:auto;border-radius:8px;background:var(--code);padding:.85rem 1rem;line-height:1.55}.markdown code{border-radius:5px;background:var(--code);padding:.08rem .28rem}.post-body,.blog-wrap,.post-wrap{max-width:48rem}.blog-hero,.post-hero{margin:1.8rem 0 2rem}.blog-hero h1,.post-hero h1{max-width:12ch;margin:.2rem 0 .65rem;font-size:clamp(2.25rem,8vw,4.45rem);font-weight:650;letter-spacing:-.085em;line-height:.9}.post-hero h1{max-width:13ch}.blog-hero .muted,.post-description{max-width:38rem;color:var(--muted);font-size:1.04rem;line-height:1.55;letter-spacing:-.025em}.post-tags{margin-top:1rem}.post-list{display:grid;gap:.55rem;margin-top:2rem}.post-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:1.2rem;align-items:start;border-top:1px solid rgb(255 255 255 / .075);padding:1rem 0;transition:opacity .16s ease,transform .16s ease}.post-row:last-child{border-bottom:1px solid rgb(255 255 255 / .075)}.post-row:hover{opacity:1;transform:translate(.18rem)}.post-row:after{content:"↗";color:var(--subtle);grid-column:2;grid-row:2;justify-self:end}.post-row-main{min-width:0}.post-row-title,.post-row-description,.post-row-tags,.post-row-date{display:block}.post-row-title{max-width:34rem;font-size:1.14rem;font-weight:550;line-height:1.22;letter-spacing:-.04em}.post-row-description{max-width:38rem;margin-top:.38rem;color:var(--muted);line-height:1.45}.post-row-tags{margin-top:.55rem}.post-row-tags span{display:inline-flex;margin:0 .28rem .28rem 0;border-radius:999px;background:#ffffff0e;padding:.02rem .45rem;color:var(--muted);font-size:.78rem}.post-row-date{color:var(--subtle);font-size:.85rem;white-space:nowrap}.post-content{margin-top:2.4rem;font-size:1.02rem;line-height:1.72}.post-content>p:first-child:first-letter{float:left;margin:.08rem .45rem 0 0;color:var(--text);font-size:3.6rem;font-weight:650;line-height:.82;letter-spacing:-.09em}.post-content p{max-width:42rem;margin:.86em 0;color:#f4f4f4eb}.post-content h2{max-width:16ch;margin-top:2.1em;padding-top:.65rem;border-top:1px solid rgb(255 255 255 / .09);font-size:1.95rem;line-height:.98;letter-spacing:-.07em}.post-content h3{margin-top:1.65em;color:#f4f4f4f2;font-size:1.12rem;letter-spacing:-.035em}.post-content ul,.post-content ol{max-width:40rem;margin:.85rem 0 1rem;padding-left:1.25rem;color:#f4f4f4e6}.post-content li+li{margin-top:.32rem}.post-content blockquote{margin:1.5rem 0;border-left:2px solid var(--muted);padding-left:1rem;color:var(--muted);font-size:1.08rem}.post-content pre{max-width:min(48rem,calc(100vw - 3rem));margin:1.35rem 0;border:1px solid rgb(255 255 255 / .08);border-radius:14px;background:linear-gradient(rgb(255 255 255 / .035),transparent 2.5rem),#101010;box-shadow:inset 0 1px #ffffff0f}.post-content pre code{display:block;min-width:max-content;background:transparent;padding:0;color:#f4f4f4e0;font-size:.9rem}.post-content figure{margin:1.6rem 0}.post-content figure img{display:block;width:100%;border:1px solid rgb(255 255 255 / .08);border-radius:14px;background:#101010}.post-content figcaption{margin-top:.55rem;color:var(--subtle);font-size:.88rem;line-height:1.4}.app-shell{min-height:100vh;padding:4.2rem 1.5rem 3rem;display:flex}.page-wrap{width:100%;max-width:35em;min-height:calc(100vh - 6rem);margin:0 auto;display:flex;flex-direction:column}.page-content{flex:1 0 auto}.markdown{line-height:1.56;letter-spacing:-.02em}.markdown>:first-child{margin-top:0}.markdown>:last-child{margin-bottom:0}.markdown p,.line-group{margin:.42em 0}.profile-row{display:flex;min-height:64px;align-items:center;gap:.8rem;margin-bottom:1.35rem}.markdown .profile-row img.avatar{display:block;width:64px;height:64px;margin:0;border-radius:12px;object-fit:cover;object-position:center}.spotify-card{position:relative;isolation:isolate;display:flex;width:min(100%,310px);height:64px;min-width:0;flex:0 1 310px;overflow:hidden;border:1px solid rgb(255 255 255 / .075);border-radius:12px;background:#1f1f1f;color:var(--text);box-shadow:inset 0 1px #ffffff0a,0 10px 24px #00000021;transition:border-color .18s ease,transform .18s ease}.spotify-card:before{position:absolute;inset:-32px -18px -32px 42%;background-image:var(--spotify-art);background-position:center;background-size:cover;content:"";filter:blur(26px) saturate(1.45);opacity:.24;z-index:-2}.spotify-card:after{position:absolute;inset:0;background:linear-gradient(90deg,#1f1f1f 43%,#1f1f1fd1 72%,#1f1f1f94);content:"";z-index:-1}.profile-row .spotify-card[hidden]{display:none!important}.spotify-card:hover{border-color:#ffffff26;transform:translateY(-1px)}.spotify-art{width:64px;height:64px;flex:0 0 auto;object-fit:cover;transition:transform .22s ease}.spotify-card:hover .spotify-art{transform:scale(1.035)}.spotify-copy{display:flex;min-width:0;flex:1;flex-direction:column;justify-content:center;padding:.42rem .55rem .36rem .62rem}.spotify-topline,.spotify-label,.spotify-song,.spotify-artist{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.spotify-topline{display:flex;align-items:center;justify-content:space-between;gap:.4rem}.spotify-label{display:flex;align-items:center;gap:.34rem;color:#35df72;font-size:.56rem;font-weight:550;letter-spacing:.07em;line-height:1.1;text-transform:uppercase}.spotify-equalizer{display:inline-flex;height:9px;align-items:end;gap:1px}.spotify-equalizer i{width:2px;border-radius:2px;background:currentColor;animation:spotify-wave .8s ease-in-out infinite alternate}.spotify-equalizer i:nth-child(1){height:45%}.spotify-equalizer i:nth-child(2){height:100%;animation-delay:-.35s}.spotify-equalizer i:nth-child(3){height:68%;animation-delay:-.6s}.spotify-mark{width:14px;height:14px;flex:0 0 auto;color:#1ed760}@keyframes spotify-wave{to{height:25%}}.spotify-song{margin-top:.15rem;font-size:.82rem;font-weight:550;line-height:1.15}.spotify-artist{margin-top:.07rem;color:#f4f4f494;font-size:.68rem;line-height:1.15}.spotify-progress{height:2px;margin-top:.31rem;overflow:hidden;border-radius:999px;background:#ffffff1f}.spotify-progress>span{display:block;width:0;height:100%;border-radius:inherit;background:#1ed760;transition:width 1s linear}@media(prefers-reduced-motion:reduce){.spotify-equalizer i{animation:none}}.markdown strong{font-weight:550}.muted{color:var(--muted)}.section-label{margin-top:2.2em;margin-bottom:.55em;color:var(--muted)}.section-label:first-of-type{margin-top:1.2em}.line{margin:.22em 0}.arrow-line{display:flex;gap:.55rem;align-items:baseline}.arrow-line:before{content:"->";color:var(--subtle);flex:0 0 auto}.badge{display:inline-flex;align-items:center;gap:.18rem;border-radius:6px;background:var(--badge);padding:.02rem .44rem;margin:0 .34rem .34rem 0;color:var(--text);font-size:.85em;line-height:1.65;transition:background .16s ease,opacity .16s ease}.stack-list,.link-list{display:flex;flex-wrap:wrap;gap:.38rem}.stack-list .badge,.link-list .badge{margin:0}.link-list{gap:.38rem;margin-top:.65rem}.more-links{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.75rem 1rem}.social-icon-list{display:flex;align-items:center;gap:.72rem}.social-icon-link{display:inline-flex;width:18px;height:18px;align-items:center;justify-content:center;color:var(--muted);opacity:.62;transition:opacity .16s ease,transform .16s ease}.social-icon-link:hover{opacity:1;transform:translateY(-1px)}.social-icon-link img{display:block;width:100%;height:100%;filter:invert(1);object-fit:contain}.logo-stack{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.55rem}.logo-badge{display:inline-flex;width:24px;height:24px;align-items:center;justify-content:center}.logo-badge img{width:100%;height:100%;object-fit:contain}.work-list{display:grid;gap:1.25rem}.work-card{border-top:1px solid rgb(255 255 255 / .08);padding-top:1.05rem}.work-title{margin:0;color:var(--text);font-weight:550}.work-meta{margin-top:.12rem;color:var(--muted);font-size:.88rem}.work-points{margin-top:.65rem}a.badge:hover{background:var(--badge-hover);opacity:1}.badge svg{width:12px;height:12px;flex:0 0 auto}.footer{margin-top:64px;color:var(--muted);font-size:.95rem}.footer a{color:var(--muted)}.hire-me-content{position:relative;z-index:1;transition:filter .22s ease,opacity .22s ease}.not-open-overlay{position:fixed;inset:0;display:grid;place-items:center;padding:1.5rem;background:#1818182e;color:var(--text);font-size:clamp(1.35rem,5vw,3.4rem);font-weight:650;letter-spacing:-.07em;line-height:.98;text-align:center;opacity:0;pointer-events:none;z-index:10;transform:scale(.98);transition:opacity .22s ease,transform .22s ease}.hire-me-content:hover{filter:blur(8px);opacity:.36}.hire-me-content:hover+.not-open-overlay{opacity:1;transform:scale(1)}.hire-me-page.not-open-visible .hire-me-content,.hire-me-page:has(.hire-me-content:hover) .hire-me-content{filter:blur(8px);opacity:.36}.hire-me-page.not-open-visible .not-open-overlay,.hire-me-page:has(.hire-me-content:hover) .not-open-overlay{opacity:1;transform:scale(1)}@media(max-width:560px){.app-shell{padding:2.5rem 1.25rem}.page-wrap{min-height:calc(100vh - 4rem)}.blog-hero h1,.post-hero h1{max-width:11ch}.post-row{grid-template-columns:1fr;gap:.4rem}.post-row-date,.post-row:after{grid-column:auto;grid-row:auto;justify-self:start}.post-content>p:first-child:first-letter{font-size:3rem}}
