:root{color-scheme:light;color:#202733;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;background:#fff;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:5rem}body{margin:0;line-height:1.7}a{color:inherit;text-decoration:none}a:focus-visible{outline-offset:4px;border-radius:3px;outline:2px solid #2563eb}.container{width:min(100% - 40px,960px);margin-inline:auto}.site-header{z-index:10;background:#fff;border-bottom:1px solid #e8ebef;position:sticky;top:0}.header-inner{justify-content:space-between;align-items:center;gap:24px;min-height:76px;display:flex}.brand{font-size:1.1rem;font-weight:700}.nav-list{gap:28px;margin:0;padding:0;list-style:none;display:flex}.nav-list a,.text-link{color:#606a79;transition:color .16s}.nav-list a:hover,.nav-list a[aria-current=page],.text-link:hover{color:#1d4ed8}main{min-height:65vh}.hero{max-width:760px;padding:88px 0 72px}h1,h2,h3{letter-spacing:-.025em;line-height:1.25}h1{margin:14px 0 20px;font-size:clamp(2.4rem,6vw,3.5rem)}h2{font-size:1.55rem}.lead{color:#526070;font-size:1.12rem}.section{padding:32px 0 60px}.section-heading{justify-content:space-between;align-items:center;gap:16px;margin-bottom:24px;display:flex}.project-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;display:grid}.project-card{border:1px solid #e2e6eb;border-radius:10px;height:100%;padding:25px;transition:border-color .18s,box-shadow .18s,transform .18s;display:block}.project-card:hover{border-color:#a7b8cf;transform:translateY(-2px);box-shadow:0 6px 18px #14283c0f}.project-title{font-size:1.1rem;font-weight:650;display:block}.project-summary,.muted{color:#606a79}.project-summary{margin:12px 0}.technologies{color:#64748b;font-size:.85rem}.content-page{max-width:760px;padding:60px 0 80px}.content-page section{margin-top:42px}.site-footer{color:#64748b;border-top:1px solid #e8ebef;margin-top:60px;padding:26px 0;font-size:.88rem}.footer-inner{justify-content:space-between;gap:24px;display:flex}@media (width<=640px){.container{width:min(100% - 32px,960px)}.header-inner{min-height:64px}.nav-list{gap:14px;font-size:.85rem}.hero{padding:60px 0 44px}.project-grid{grid-template-columns:1fr}.footer-inner{flex-wrap:wrap}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition:none!important;animation:none!important}.project-card:hover{transform:none}}.brand-icon{flex:none;width:23px;height:23px;display:inline-flex}.brand-icon svg{fill:currentColor;width:100%;height:100%}.social-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.social-chip{border:1px solid #e2e6eb;border-radius:8px;align-items:center;gap:12px;padding:14px;transition:border-color .16s,background .16s;display:flex}.social-chip:hover{background:#f8fafc;border-color:#a7b8cf}@media (width<=640px){.header-inner{flex-wrap:wrap;justify-content:flex-start;gap:8px;padding-block:12px}.brand{white-space:nowrap;flex-shrink:0}.header-inner nav{margin-left:auto}.nav-list{flex-wrap:wrap;justify-content:flex-end}}.article-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;margin-top:20px;display:grid}.article-card{background:#fff;border:1px solid #e2e6eb;border-radius:10px;flex-direction:column;min-width:0;transition:transform .18s,box-shadow .18s,border-color .18s;display:flex;overflow:hidden}.article-card:hover{border-color:#b7c6da;transform:translateY(-2px);box-shadow:0 8px 24px #14283c12}.article-image{aspect-ratio:16/9;color:#64748b;letter-spacing:-.03em;background:#edf2f7;justify-content:center;align-items:center;font-size:1.25rem;font-weight:700;display:flex;overflow:hidden}.article-image img{object-fit:cover;width:100%;height:100%;transition:transform .25s;display:block}.article-card:hover .article-image img{transform:scale(1.025)}.article-content{flex-direction:column;flex:1;gap:10px;padding:20px;display:flex}.article-meta{color:#64748b;flex-wrap:wrap;gap:12px;font-size:.8rem;display:flex}.article-card-title{overflow-wrap:anywhere;margin:0;font-size:1.07rem;line-height:1.45}.article-description{color:#606a79;-webkit-line-clamp:3;-webkit-box-orient:vertical;margin:0;font-size:.9rem;line-height:1.65;display:-webkit-box;overflow:hidden}.article-tags{flex-wrap:wrap;gap:6px;margin-top:auto;padding-top:8px;display:flex}.article-tags span{color:#52647a;background:#f1f5f9;border-radius:5px;padding:4px 8px;font-size:.76rem}.dev-empty{color:#64748b;text-align:center;background:#f8fafc;border:1px dashed #cbd5e1;border-radius:10px;padding:26px}.dev-profile-link{margin-top:22px;font-size:.9rem}.dev-profile-link a{color:#1d4ed8}.dev-profile-link a:hover{text-underline-offset:4px;text-decoration:underline}@media (width<=640px){.article-grid{grid-template-columns:1fr}}@media (prefers-reduced-motion:reduce){.article-card:hover,.article-card:hover .article-image img{transform:none}}.dev-load-more{color:#334155;font:inherit;cursor:pointer;background:#fff;border:1px solid #cbd5e1;border-radius:8px;margin:32px auto 0;padding:12px 26px;font-size:.92rem;transition:background-color .16s,border-color .16s;display:block}.dev-load-more:hover{background:#f1f5f9;border-color:#94a3b8}.dev-load-more:focus-visible{outline-offset:3px;outline:2px solid #2563eb}.dev-load-more:disabled{cursor:wait;opacity:.65}.dev-load-more[hidden]{display:none}.article-categories{flex-wrap:wrap;gap:9px;margin:32px 0 24px;display:flex}.article-categories[hidden]{display:none}.category-button{color:#526070;font:inherit;cursor:pointer;background:#fff;border:1px solid #e2e8f0;border-radius:999px;padding:9px 15px;font-size:.85rem;line-height:1.4;transition:background-color .16s,border-color .16s,color .16s}.category-button:hover{background:#f1f5f9;border-color:#cbd5e1}.category-button[aria-pressed=true]{color:#fff;background:#334155;border-color:#334155;font-weight:600}.category-button:focus-visible{outline-offset:3px;outline:2px solid #2563eb}@media (prefers-reduced-motion:reduce){.category-button{transition:none}}.home-articles .article-grid{overscroll-behavior-x:contain;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;grid-template-columns:none;grid-auto-columns:260px;grid-auto-flow:column;gap:16px;margin-top:20px;padding:2px 2px 14px;scroll-padding-inline:2px;display:grid;overflow-x:auto}.home-articles .article-card{scroll-snap-align:start}.home-articles .article-content{gap:8px;padding:16px}.home-articles .article-card-title{font-size:.96rem}.home-articles .article-description{-webkit-line-clamp:2;font-size:.84rem}.home-articles .article-image{aspect-ratio:16/9}.home-articles .article-tags span{font-size:.72rem}@media (width<=640px){.home-articles .article-grid{grid-auto-columns:min(78vw,260px);gap:12px}}@media (prefers-reduced-motion:reduce){.home-articles .article-grid{scroll-snap-type:none}}.project-cover-link{border-radius:10px;width:min(100%,520px);margin:30px auto 16px;display:block}.project-cover{border:1px solid #e2e6eb;border-radius:10px;width:100%;height:auto;display:block}.project-cover-link:hover .project-cover{border-color:#94a3b8}.project-body{margin-top:36px}.project-body h2{margin:32px 0 14px}.project-body p,.project-body ul,.project-body ol{margin:0 0 18px}.project-body li+li{margin-top:6px}.project-body a{color:#1d4ed8;text-underline-offset:3px;text-decoration:underline}.project-result-figure{width:min(100%,520px);margin:32px auto}.project-result-figure a{display:block}.project-result-figure img{border:1px solid #e2e6eb;border-radius:10px;width:100%;height:auto;margin:0;display:block}.project-result-figure figcaption{color:#64748b;text-align:center;margin-top:10px;font-size:.82rem;line-height:1.6}.article-card.article-card--compact{box-sizing:border-box;flex-direction:row;align-items:center;gap:14px;min-height:124px;padding:14px;display:flex}.article-card--compact .article-image{aspect-ratio:1;border-radius:10px;flex:0 0 96px;width:96px;height:96px;min-height:0;margin:0;overflow:hidden}.article-card--compact .article-image img{object-fit:cover;width:100%;height:100%;display:block}.article-card--compact .article-image.article-image--fallback{box-sizing:border-box;text-align:center;flex-direction:row;justify-content:center;align-items:center;padding:0;display:flex}.article-thumbnail-label{letter-spacing:-.03em;font-size:1.5rem;font-weight:750;line-height:1}.article-card--compact .article-content{flex-direction:column;flex:1;justify-content:center;align-items:flex-start;gap:6px;min-width:0;padding:0;display:flex}.article-card--compact .article-card-category{color:#526273;margin:0;font-size:.72rem;font-weight:600;line-height:1.2;display:block}.article-card--compact .article-card-title{-webkit-line-clamp:3;overflow-wrap:anywhere;-webkit-box-orient:vertical;margin:0;font-size:.95rem;font-weight:700;line-height:1.36;display:-webkit-box;overflow:hidden}.article-card--compact .article-meta{flex-wrap:wrap;gap:10px;margin:0;font-size:.73rem;line-height:1.3;display:flex}.article-image.article-image--robotics{color:#205e53;background:#e4f1ee}.article-image.article-image--ai{color:#60448d;background:#eee9f8}.article-image.article-image--neuro{color:#914a68;background:#f5e9ef}.article-image.article-image--infra{color:#365b92;background:#e7edf8}.article-image.article-image--web{color:#84602d;background:#f7f0e4}.article-image.article-image--other{color:#364b65;background:#edf1f6}@media (width<=440px){.article-card.article-card--compact{gap:12px;padding:12px}.article-card--compact .article-image{flex-basis:76px;width:76px;height:76px}.article-card--compact .article-card-title{font-size:.88rem}.article-thumbnail-label{font-size:1.25rem}}.dev-articles .article-card.article-card--poster{flex-direction:column;gap:0;min-height:0;padding:0;display:flex;overflow:hidden}.dev-articles .article-card--poster .article-image.article-image--poster{box-sizing:border-box;text-align:left;flex-direction:column;flex:none;justify-content:center;align-items:flex-start;gap:8px;width:100%;height:auto;min-height:132px;margin:0;padding:14px 17px;display:flex;position:relative;overflow:hidden}.dev-articles .article-card--poster .article-image--poster.article-image--fallback{color:#364b65;background:#edf1f6}.dev-articles .article-card--poster .article-image--poster.article-image--robotics{color:#205e53;background:#e4f1ee}.dev-articles .article-card--poster .article-image--poster.article-image--ai{color:#60448d;background:#eee9f8}.dev-articles .article-card--poster .article-image--poster.article-image--neuro{color:#914a68;background:#f5e9ef}.dev-articles .article-card--poster .article-image--poster.article-image--infra{color:#365b92;background:#e7edf8}.dev-articles .article-card--poster .article-image--poster.article-image--web{color:#84602d;background:#f7f0e4}.dev-articles .article-card--poster .article-image--poster.article-image--other{color:#364b65;background:#edf1f6}.dev-articles .article-card--poster .article-image--poster.article-image--has-cover{color:#fff;background:#243041}.dev-articles .article-card--poster .article-image--poster img{object-fit:cover;width:100%;height:100%;display:block;position:absolute;inset:0}.dev-articles .article-card--poster .article-image--has-cover:after{content:"";pointer-events:none;background:linear-gradient(#0a141e7a,#0a141e1f 33%,#0a141ed6);position:absolute;inset:0}.dev-articles .article-card--poster .article-poster-category{z-index:1;letter-spacing:.08em;text-transform:uppercase;font-size:.68rem;font-weight:750;line-height:1.2;position:relative;top:auto;left:auto}.dev-articles .article-card--poster .article-poster-title{z-index:1;-webkit-line-clamp:4;color:inherit;overflow-wrap:anywhere;-webkit-box-orient:vertical;margin:0;font-size:1.07rem;font-weight:700;line-height:1.28;display:-webkit-box;position:relative;bottom:auto;left:auto;right:auto;overflow:hidden}.dev-articles .article-card--poster .article-poster-footer{box-sizing:border-box;background:#fff;min-height:0;padding:9px 17px}.dev-articles .article-card--poster .article-poster-footer .article-meta{flex-wrap:wrap;align-items:center;gap:12px;margin:0;font-size:.77rem;line-height:1.45;display:flex}@media (width<=520px){.dev-articles .article-card--poster .article-image.article-image--poster{min-height:120px;padding:13px 15px}.dev-articles .article-card--poster .article-poster-title{font-size:1rem}}.dev-articles[data-paginate=true] .article-grid{grid-template-columns:repeat(auto-fill,minmax(0,270px));justify-content:start;gap:24px;display:grid}.dev-articles[data-paginate=true] .article-card--poster .article-image.article-image--poster{aspect-ratio:auto;height:auto;min-height:140px;padding:14px 17px}@media (width<=520px){.dev-articles[data-paginate=true] .article-grid{grid-template-columns:minmax(0,1fr);max-width:290px}}.dev-articles .article-card--categorized{border-top:3px solid var(--article-accent,#64748b)}.dev-articles .article-card--category-robotics{--article-accent:#197969;--article-accent-ink:#125d51;--article-accent-bg:#e0f2ec}.dev-articles .article-card--category-ai{--article-accent:#7956b4;--article-accent-ink:#563782;--article-accent-bg:#f0e9fa}.dev-articles .article-card--category-neuro{--article-accent:#b45b7a;--article-accent-ink:#873951;--article-accent-bg:#f9e9ee}.dev-articles .article-card--category-infra{--article-accent:#4676b6;--article-accent-ink:#2f5789;--article-accent-bg:#e7effb}.dev-articles .article-card--category-web{--article-accent:#a87529;--article-accent-ink:#75501e;--article-accent-bg:#faf0de}.dev-articles .article-card--category-other{--article-accent:#64748b;--article-accent-ink:#455569;--article-accent-bg:#edf1f6}.dev-articles .article-image--categorized{position:relative}.dev-articles .article-cover-category{z-index:2;background:var(--article-accent-bg,#edf1f6);color:var(--article-accent-ink,#455569);letter-spacing:.02em;text-transform:none;pointer-events:none;border-radius:999px;padding:5px 10px;font-size:.69rem;font-weight:700;line-height:1.3;position:absolute;top:11px;right:11px;box-shadow:0 1px 4px #0000001f}.dev-articles .article-image--categorized.article-image--missing{background:var(--article-accent-bg,#edf1f6);color:var(--article-accent-ink,#455569);justify-content:center;align-items:center;display:flex}.dev-articles .article-image-topic{letter-spacing:-.02em;font-size:clamp(1.4rem,2.6vw,2.4rem);font-weight:750;line-height:1.1;display:block}.dev-articles[data-paginate=true] .article-grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));justify-content:start;gap:24px;max-width:none;display:grid}@media (width<=520px){.dev-articles[data-paginate=true] .article-grid{grid-template-columns:minmax(0,1fr);max-width:none}}
