@font-face{font-family:Inter Fallback;src:local(Arial),local(Helvetica Neue),local(Roboto);size-adjust:106.94%}@font-face{font-family:JetBrains Mono Fallback;src:local(Menlo),local(Consolas),local(Courier New);size-adjust:99.6%}:root{--bg:#080808;--box:#101010;--card:#141414;--card-2:#1b1b1b;--card-3:#232323;--line:#ffffff17;--line-2:#ffffff2b;--ink:#fafafa;--ink-sub:#f4f4f499;--ink-dim:#f4f4f461;--ink-faint:#f4f4f433;--green:#7ed491;--mono:"JetBrains Mono", "JetBrains Mono Fallback", ui-monospace, Menlo, monospace;--ui:"Inter", "Inter Fallback", system-ui, sans-serif;--r-sm:3px;--r-md:6px;--r-lg:8px;--r-xl:10px;--sp-1:8px;--sp-2:14px;--sp-3:20px;--sp-4:28px;--sp-5:36px;--sp-6:48px;--side:198px}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--ink);font-family:var(--ui);-webkit-font-smoothing:antialiased;overflow-anchor:none}::selection{background:var(--ink);color:var(--bg)}a{color:inherit;text-decoration:none}:focus-visible{outline:2px solid var(--line-2);outline-offset:2px;border-radius:4px}svg{display:block}img{max-width:100%}.shell{gap:10px;min-height:100vh;padding:8px;display:flex}.side{width:var(--side);height:calc(100vh - 16px);padding:var(--sp-3) 3px 4px;flex-direction:column;flex-shrink:0;display:flex;position:sticky;top:8px}.side-top{padding:0 8px var(--sp-3);align-items:center;gap:11px;display:flex}.avatar{background:var(--card-3);border:1px solid var(--line-2);width:34px;height:34px;font:600 12px var(--ui);color:var(--ink);border-radius:50%;flex-shrink:0;place-items:center;display:grid;overflow:hidden}.avatar img{object-fit:cover;border-radius:inherit;width:100%;height:100%}.side-id .n{font:600 14px var(--ui);letter-spacing:-.01em}.side-id .status{font:500 11px var(--ui);color:var(--ink-dim);align-items:center;gap:6px;margin-top:3px;display:flex}.side-id .status i{background:var(--green);width:6px;height:6px;box-shadow:0 0 7px var(--green);border-radius:50%;animation:2.8s ease-in-out infinite breathe}@keyframes breathe{0%,to{opacity:1}50%{opacity:.45}}.side-scroll{flex-direction:column;flex:1;gap:2px;display:flex;overflow-y:auto}.side-scroll::-webkit-scrollbar{width:0}.nav-item{border-radius:var(--r-md);font:500 14.5px var(--ui);color:var(--ink-sub);align-items:center;gap:12px;padding:8px 10px;transition:color .15s,background .15s;display:flex}.nav-item svg{stroke:currentColor;stroke-width:1.7px;fill:none;flex-shrink:0;width:19px;height:19px}.nav-item:hover{color:var(--ink);background:#ffffff0a}.nav-item.active{color:var(--ink);background:var(--card-2);border:1px solid var(--line)}.grp{font:500 11.5px var(--ui);color:var(--ink-dim);padding:var(--sp-3) 10px 6px}.side-search{margin-top:var(--sp-2);border-radius:var(--r-md);background:var(--card);border:1px solid var(--line);align-items:center;gap:9px;padding:9px 11px;display:flex}.side-search svg{width:15px;height:15px;stroke:var(--ink-faint);stroke-width:1.8px;fill:none}.side-search input{color:var(--ink);font:400 13px var(--ui);background:0 0;border:0;outline:0;flex:1;min-width:0}.side-search input::placeholder{color:var(--ink-faint)}.side-search .k{font:500 10.5px var(--mono);color:var(--ink-faint);border:1px solid var(--line);border-radius:6px;padding:2px 6px}.main{flex:1;min-width:0}.wrap{background:var(--box);border:1px solid var(--line);border-radius:10px;padding:clamp(22px,2.6vw,40px)}.docs>*,.split>*,.metrics,.gal,.works>*,.svc-grid>*,.dgrid>*,.contact-grid>*{min-width:0}.btn{font:500 13.5px var(--ui);border-radius:var(--r-md);cursor:pointer;align-items:center;gap:8px;padding:10px 18px;transition:all .18s;display:inline-flex}.btn-solid{background:var(--ink);color:var(--bg)}.btn-solid:hover{transform:translateY(-1px);box-shadow:0 8px 26px #00000080}.btn-ghost{color:var(--ink);border:1px solid var(--line-2);background:var(--card)}.btn-ghost:hover{background:var(--card-2)}.pill{font:500 12px var(--ui);border:1px solid var(--line-2);color:var(--ink-sub);border-radius:100px;padding:5px 12px}.pill.indev{color:var(--ink)}.tag{font:400 11.5px var(--mono);color:var(--ink-dim);border:1px solid var(--line);border-radius:var(--r-sm);padding:4px 9px}.sec{background:var(--card);border:1px solid var(--line);border-radius:var(--r-xl);margin-bottom:var(--sp-3);padding:clamp(20px,2.4vw,30px)}.sec-head{margin-bottom:var(--sp-3)}.sec-head h2{font:600 19px var(--ui);letter-spacing:-.02em}.sec-head p{color:var(--ink-sub);margin-top:6px;font-size:14px}.prose{max-width:720px}.prose h2{font:600 19px var(--ui);letter-spacing:-.02em;margin:var(--sp-5) 0 var(--sp-2)}.prose h3{font:600 15px var(--ui);margin:var(--sp-4) 0 var(--sp-1)}.prose p{color:var(--ink-sub);margin-bottom:var(--sp-2);font-size:14px;line-height:1.78}.prose p code,.prose li code{font:400 13px var(--mono);background:var(--card-2);border:1px solid var(--line);color:var(--ink);border-radius:5px;padding:1px 6px}.prose ul{margin:0 0 var(--sp-2) 18px}.prose li{color:var(--ink-sub);font-size:14px;line-height:1.78}.prose a.link{color:var(--ink);border-bottom:1px solid var(--line-2)}.code{border:1px solid var(--line);border-radius:var(--r-md);margin:var(--sp-2) 0 var(--sp-3);background:#050506;overflow:hidden}.code-bar{border-bottom:1px solid var(--line);font:400 11.5px var(--mono);color:var(--ink-dim);align-items:center;gap:8px;padding:8px 14px;display:flex}.code-bar .dot{background:var(--card-3);border-radius:50%;width:7px;height:7px}.code pre{max-height:460px;font:400 12.5px/1.7 var(--mono);color:var(--ink-sub);padding:14px 16px;overflow:auto}.code .kw{color:#c6a4e4}.code .fn{color:#8fb9e6}.code .st{color:#a7cc8b}.code .cm{color:var(--ink-faint)}.callout{border:1px solid var(--line);border-left:2px solid var(--ink-dim);border-radius:var(--r-md);background:var(--card-2);margin:var(--sp-2) 0 var(--sp-3);gap:12px;padding:14px 16px;display:flex}.callout .ico{font:600 13px var(--mono);color:var(--ink-dim);flex-shrink:0}.callout p{color:var(--ink-sub);margin:0;font-size:13.5px;line-height:1.65}.media-wrap{position:relative}.media-wrap .bleed{z-index:0;background:var(--art);filter:blur(36px)saturate(1.4);opacity:.14;border-radius:var(--r-lg);pointer-events:none;transition:opacity .5s;position:absolute;inset:-6px}.media-wrap:hover .bleed{opacity:.28}.media-wrap .frame{z-index:1;border-radius:var(--r-lg);border:1px solid var(--line);background:var(--art,var(--card-2));position:relative;overflow:hidden}.reveal{opacity:0;transition:opacity .6s cubic-bezier(.2,.7,.2,1),transform .6s cubic-bezier(.2,.7,.2,1);transform:translateY(18px)}.reveal.in{opacity:1;transform:none}.foot{gap:var(--sp-3);padding:var(--sp-3) 4px 4px;margin-top:var(--sp-4);border-top:1px solid var(--line);color:var(--ink-dim);flex-wrap:wrap;font-size:13px;display:flex}.foot .sp{flex:1}.foot a:hover{color:var(--ink)}.page-head{padding:var(--sp-2) 0 var(--sp-4)}.page-head h1{font:700 32px var(--ui);letter-spacing:-.03em}.page-head p{color:var(--ink-sub);max-width:560px;margin-top:10px;font-size:15px;line-height:1.7}.page-head code{font:400 13px var(--mono);background:var(--card);border:1px solid var(--line);color:var(--ink);border-radius:5px;padding:1px 6px}.mtop,.side-backdrop{display:none}@media (width<=900px){.mtop{z-index:60;-webkit-backdrop-filter:blur(14px)saturate(1.2);border-bottom:1px solid var(--line);background:#0a0a0ad1;align-items:center;gap:11px;height:54px;padding:0 14px;display:flex;position:fixed;top:0;left:0;right:0}.mtop .avatar{width:30px;height:30px}.mtop-name{font:600 15px var(--ui);letter-spacing:-.01em;flex:1}.mtop-name span{color:var(--ink-dim)}.mtop-burger{cursor:pointer;width:38px;height:38px;color:var(--ink);background:0 0;border:0;place-items:center;margin-right:-8px;display:grid}.mtop-burger svg{stroke:currentColor;stroke-width:1.8px;fill:none;stroke-linecap:round;width:22px;height:22px}.side{z-index:70;background:var(--bg);border-right:1px solid var(--line);width:min(82vw,280px);height:100dvh;padding:var(--sp-3) 12px 16px;transition:transform .28s cubic-bezier(.2,.7,.2,1);display:flex;position:fixed;top:0;left:0;transform:translate(-100%)}.side.open{transform:none;box-shadow:24px 0 60px #00000080}.side-backdrop{z-index:65;background:#0000008c;animation:.2s bd-in;display:block;position:fixed;inset:0}@keyframes bd-in{0%{opacity:0}to{opacity:1}}body.nav-open{overflow:hidden}.shell{padding:54px 0 0;display:block;overflow-x:hidden}.main{width:100%}.wrap{overflow-wrap:break-word;background:0 0;border:0;border-radius:0;padding:20px 16px 48px}}@media (width<=520px){.wrap{padding:18px 14px 44px}}@media (prefers-reduced-motion:reduce){.reveal{opacity:1;transition:none;transform:none}html{scroll-behavior:auto}}.wrap{position:relative}.wrap>:not(.fx-canvas):not(.fx-frame):not(.fx-hud){z-index:1;position:relative}.fx-canvas{z-index:0;border-radius:inherit;pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.fx-frame{z-index:-1;pointer-events:none;width:100vw;height:100vh;position:fixed;inset:0}@media (width<=900px){.fx-frame{display:none}}.fx-hud{z-index:50;font:500 10.5px var(--mono);color:var(--ink-faint);letter-spacing:.05em;pointer-events:none;position:fixed;bottom:10px;right:14px}@media (width<=900px){.fx-hud{display:none}}.sec,.fcard .frame{--mx:-400px;--my:-400px}.sec{position:relative}.sec:after,.fcard .frame:after{content:"";border-radius:inherit;background:radial-gradient(240px circle at var(--mx) var(--my), #fafafa52, #fafafa1a 45%, transparent 70%);-webkit-mask-composite:xor;pointer-events:none;z-index:2;padding:1px;position:absolute;inset:-1px;-webkit-mask-image:linear-gradient(#000 0 0),linear-gradient(#000 0 0);-webkit-mask-position:0 0,0 0;-webkit-mask-size:auto,auto;-webkit-mask-repeat:repeat,repeat;-webkit-mask-clip:content-box,border-box;-webkit-mask-origin:content-box,border-box;-webkit-mask-composite:xor;mask-composite:exclude;-webkit-mask-source-type:auto,auto;mask-mode:match-source,match-source}@media (prefers-reduced-motion:reduce){.fx-hud{display:none}}.side-search{position:relative}.search-pop{z-index:90;background:var(--card-2);border:1px solid var(--line-2);border-radius:var(--r-md);max-height:300px;padding:5px;position:absolute;bottom:calc(100% + 8px);left:0;right:0;overflow-y:auto}.search-pop .sr-grp{font:500 10px var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint);padding:7px 9px 3px}.search-pop .sr-item{border-radius:var(--r-sm);font:500 13px var(--ui);color:var(--ink-sub);padding:7px 9px;display:block}.search-pop .sr-item.sel,.search-pop .sr-item:hover{background:var(--card-3);color:var(--ink)}.search-pop .sr-empty{font:400 12.5px var(--ui);color:var(--ink-dim);padding:9px}@media (width<=900px){.search-pop{top:calc(100% + 8px);bottom:auto}}html{scrollbar-width:thin;scrollbar-color:#232323 #080808}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:var(--bg)}::-webkit-scrollbar-thumb{background:var(--card-3);border:2px solid var(--bg);border-radius:8px}::-webkit-scrollbar-thumb:hover{background:#3a3a3a}::-webkit-scrollbar-corner{background:var(--bg)}.empty{text-align:center;border:1px dashed var(--line-2);border-radius:var(--r-lg,12px);background:var(--card);color:var(--ink-dim);flex-direction:column;justify-content:center;align-items:center;gap:10px;padding:clamp(48px,9vw,96px) 20px;display:flex}.empty svg{color:var(--ink-faint)}.empty-title{font:600 16px var(--ui);color:var(--ink-sub);letter-spacing:-.01em}.empty-hint{color:var(--ink-dim);max-width:42ch;font-size:13.5px;line-height:1.6}.hero{padding:var(--sp-2) 0 var(--sp-4)}.hero h1{font:700 clamp(32px, 3.5vw, 48px)/1.05 var(--ui);letter-spacing:-.035em;max-width:21ch}.hero h1 .line2{letter-spacing:-.015em;color:var(--ink-sub);max-width:52ch;margin-top:10px;font-size:.5em;font-weight:500;line-height:1.35;display:block}.hero-sub{margin-top:var(--sp-2);color:var(--ink-sub);max-width:480px;font-size:14.5px;line-height:1.65}.hero-ctas{margin-top:var(--sp-3);flex-wrap:wrap;gap:10px;display:flex}.fscroll{margin-bottom:var(--sp-3);scrollbar-width:thin;scrollbar-color:var(--card-2) transparent;padding-bottom:10px;overflow:auto hidden}.fscroll::-webkit-scrollbar{height:8px}.fscroll::-webkit-scrollbar-thumb{background:var(--card-2);border-radius:8px}.fscroll::-webkit-scrollbar-track{background:0 0}.fgrid{gap:var(--sp-2);width:max-content;display:flex}.fcard{border-radius:var(--r-lg);flex:0 0 clamp(300px,32vw,440px);height:460px;text-decoration:none;transition:flex-basis .5s cubic-bezier(.2,.7,.2,1);position:relative}.fcard:hover{flex-basis:clamp(400px,44vw,580px)}.fcard .bleed{z-index:0;filter:blur(38px)saturate(1.4);opacity:.12;border-radius:var(--r-lg);pointer-events:none;background-position:50%;background-size:cover;transition:opacity .5s;position:absolute;inset:6px 4px -12px}.fcard:hover .bleed{opacity:.5}.fcard .frame{z-index:1;border-radius:var(--r-lg);border:1px solid var(--line);background:var(--card-2);position:absolute;inset:0;overflow:hidden}.fcard .art{position:absolute;inset:0}.fcard .art img{object-fit:cover;width:100%;height:100%;transition:transform .6s cubic-bezier(.2,.7,.2,1);display:block}.fcard:hover .art img{transform:scale(1.05)}.fcard .scrim{background:linear-gradient(#0a0a0a1f 0%,#0000 34% 46%,#0a0a0ae6 100%);position:absolute;inset:0}.fcard .badge{z-index:2;font:500 11.5px var(--ui);color:var(--ink);border-radius:var(--r-sm);-webkit-backdrop-filter:blur(10px);background:#0a0a0a80;border:1px solid #ffffff24;align-items:center;gap:7px;padding:5px 11px;display:inline-flex;position:absolute;top:14px;left:14px}.fcard .badge:before{content:"";background:var(--green);width:6px;height:6px;box-shadow:0 0 6px var(--green);border-radius:50%;flex-shrink:0}.fcard .cap{z-index:2;padding:var(--sp-3);position:absolute;bottom:0;left:0;right:0}.fcard .cap h3{font:600 19px var(--ui);letter-spacing:-.02em;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.fcard .cap .desc{opacity:0;max-width:440px;max-height:0;color:var(--ink-sub);font-size:13.5px;line-height:1.6;transition:max-height .42s cubic-bezier(.2,.7,.2,1),opacity .35s,margin-top .42s;overflow:hidden}.fcard:hover .cap .desc{opacity:1;max-height:60px;margin-top:7px}.dhome{gap:var(--sp-2);grid-template-columns:repeat(auto-fill,minmax(220px,1fr));display:grid}.dhome-card{border:1px solid var(--line);border-radius:var(--r-md);background:var(--card-2);flex-direction:column;gap:6px;padding:16px 18px;transition:border-color .18s,transform .18s;display:flex}.dhome-card:hover{border-color:var(--line-2);transform:translateY(-2px)}.dhome-card .m{font:500 10.5px var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-dim)}.dhome-card .t{font:600 14.5px var(--ui);letter-spacing:-.01em;color:var(--ink)}.dhome-card .s{color:var(--ink-sub);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12.5px;line-height:1.55;display:-webkit-box;overflow:hidden}.log{border-top:1px solid var(--line)}.log-item{align-items:baseline;gap:var(--sp-3);border-bottom:1px solid var(--line);padding:18px 4px;text-decoration:none;transition:padding-left .2s;display:flex}.log-item:hover{padding-left:10px}.log-item .d{font:400 11.5px var(--mono);color:var(--ink-faint);white-space:nowrap;min-width:52px}.log-item .p{font:500 11px var(--mono);color:var(--ink-sub);white-space:nowrap;min-width:130px}.log-item .t{color:var(--ink-sub);font-size:15px;transition:color .15s}.log-item:hover .t{color:var(--ink)}.log-item .arrow{color:var(--ink-faint);margin-left:auto;transition:color .15s,transform .2s}.log-item:hover .arrow{color:var(--ink);transform:translate(4px)}.sec-foot{margin-top:var(--sp-4);padding-top:var(--sp-3);border-top:1px solid var(--line);text-align:center}.sec-foot a{font:500 14px var(--ui);color:var(--ink-sub)}.sec-foot a:hover{color:var(--ink)}@media (width<=760px){.fcard{flex-basis:78vw;height:380px}.fcard:hover{flex-basis:78vw}.log-item .p{display:none}}.works{gap:var(--sp-3);grid-template-columns:repeat(3,1fr);display:grid}.wk{text-decoration:none;display:block}.wk .media-wrap .frame{aspect-ratio:4/3}.wk .art{background:var(--art);position:absolute;inset:0}.wk .art img{object-fit:cover;width:100%;height:100%;transition:transform .5s cubic-bezier(.2,.7,.2,1);display:block}.wk:hover .art img{transform:scale(1.04)}.wk .badge{z-index:2;font:500 11px var(--ui);color:var(--ink);border-radius:var(--r-sm);-webkit-backdrop-filter:blur(10px);background:#0a0a0a8c;border:1px solid #ffffff24;padding:5px 11px;position:absolute;top:12px;left:12px}.wk-body{padding-top:14px}.wk-body h3{font:600 18px var(--ui);letter-spacing:-.01em}.wk-body .dem{color:var(--ink-sub);margin-top:6px;font-size:13.5px;line-height:1.6}.wk-body .tags{font:400 11px var(--mono);color:var(--ink-faint);letter-spacing:.04em;margin-top:10px}.services{margin-top:var(--sp-6)}.svc-head{margin-bottom:var(--sp-3);align-items:baseline;gap:12px;display:flex}.svc-head h2{font:700 26px var(--ui);letter-spacing:-.02em}.svc-head .note{font:400 12px var(--mono);color:var(--ink-faint)}.svc-grid{gap:var(--sp-2);grid-template-columns:repeat(3,1fr);display:grid}.svc{border:1px solid var(--line);border-radius:var(--r-md);background:var(--card);padding:var(--sp-3);transition:border-color .15s}.svc:hover{border-color:var(--line-2)}.svc .ic{border:1px solid var(--line-2);background:var(--card-2);width:40px;height:40px;margin-bottom:var(--sp-2);border-radius:10px;place-items:center;display:grid}.svc .ic svg{width:19px;height:19px;stroke:var(--ink-sub);stroke-width:1.6px;fill:none}.svc h4{font:600 16px var(--ui)}.svc p{color:var(--ink-sub);margin-top:6px;font-size:13.5px;line-height:1.65}.svc .ph{margin-top:var(--sp-2);font:400 11px var(--mono);color:var(--ink-faint)}@media (width<=900px){.works,.svc-grid{grid-template-columns:1fr}}@media (width>=901px) and (width<=1180px){.works,.svc-grid{grid-template-columns:repeat(2,1fr)}}.filters{margin:var(--sp-4) 0;flex-wrap:wrap;gap:8px;display:flex}.filters a{border:1px solid var(--line);font:500 13px var(--ui);color:var(--ink-sub);border-radius:100px;padding:7px 15px;text-decoration:none;transition:all .15s}.filters a:hover{color:var(--ink)}.filters a.active{background:var(--ink);color:var(--bg);border-color:var(--ink)}.entries{border-top:1px solid var(--line)}.entry{gap:var(--sp-3);padding:var(--sp-3) 0;border-bottom:1px solid var(--line);grid-template-columns:200px 1fr;align-items:center;text-decoration:none;transition:padding-left .2s;display:grid}.entry:hover{padding-left:8px}.entry .thumb{position:relative}.entry .thumb .frame{aspect-ratio:16/10;border-radius:var(--r-md);border:1px solid var(--line);background:var(--art,var(--card-2));position:relative;overflow:hidden}.entry .thumb .art{background:var(--art);transition:transform .5s;position:absolute;inset:0}.entry:hover .thumb .art{transform:scale(1.05)}.entry .meta{font:400 12px var(--mono);color:var(--ink-faint);align-items:center;gap:10px;display:flex}.entry .meta .proj{color:var(--ink-sub)}.entry h3{font:600 20px var(--ui);letter-spacing:-.015em;margin-top:8px;transition:color .15s}.entry:hover h3{color:var(--ink)}.entry p{color:var(--ink-sub);max-width:640px;margin-top:8px;font-size:14px;line-height:1.65}.entry .rt{font:400 11.5px var(--mono);color:var(--ink-faint);margin-top:10px}@media (width<=760px){.entry{grid-template-columns:1fr}}.dgrid{gap:var(--sp-3);grid-template-columns:repeat(2,1fr);display:grid}.dcard{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--card);padding:var(--sp-4);text-decoration:none;transition:border-color .15s,background .15s;display:block}.dcard:hover{border-color:var(--line-2);background:var(--card-2)}.dcard .top{align-items:center;gap:13px;display:flex}.dcard .ic{border:1px solid var(--line-2);border-radius:11px;flex-shrink:0;place-items:center;width:42px;height:42px;display:grid}.dcard .ic svg{width:20px;height:20px;stroke:var(--ink-sub);stroke-width:1.6px;fill:none}.dcard h3{font:600 19px var(--ui);letter-spacing:-.015em}.dcard .st{font:400 12px var(--mono);color:var(--ink-dim);margin-top:2px}.dcard p{margin-top:var(--sp-3);color:var(--ink-sub);font-size:14px;line-height:1.65}.dcard .meta{margin-top:var(--sp-3);padding-top:var(--sp-3);border-top:1px solid var(--line);justify-content:space-between;align-items:center;display:flex}.dcard .pages{font:400 12px var(--mono);color:var(--ink-faint)}.dcard .go{font:500 13px var(--ui);color:var(--ink-sub)}.dcard:hover .go{color:var(--ink)}.dcard.empty{border-style:dashed}.dcard.empty .ic svg{stroke:var(--ink-faint)}.dcard.empty h3,.dcard.empty p{color:var(--ink-dim)}@media (width<=900px){.dgrid{grid-template-columns:1fr}}.blocks>*+*{margin-top:var(--sp-4)}.blocks .prose{max-width:760px}.blk-eyebrow{font:500 11px var(--mono);letter-spacing:.2em;text-transform:uppercase;color:var(--ink-dim);margin-bottom:10px}.blk-title h2,.blk-h{font:700 24px var(--ui);letter-spacing:-.02em}.blk-title p{color:var(--ink-sub);max-width:640px;margin-top:8px;font-size:15px;line-height:1.7}.blk-figure{position:relative}.blk-figure .frame{z-index:1;border-radius:var(--r-lg);border:1px solid var(--line);position:relative;overflow:hidden}.blk-figure .frame img{width:100%;display:block}.blk-figure figcaption{color:var(--ink-dim);text-align:center;margin-top:10px;font-size:12.5px}.blk-figure.size-wide{margin-inline:calc(-1*clamp(0px,3vw,40px))}.sg-scroll{scrollbar-width:thin;scrollbar-color:var(--card-2) transparent;padding-bottom:10px;overflow:auto hidden}.sg-scroll::-webkit-scrollbar{height:8px}.sg-scroll::-webkit-scrollbar-thumb{background:var(--card-2);border-radius:8px}.sg-row{gap:var(--sp-2);width:max-content;display:flex}.sg-card{flex:0 0 clamp(260px,30vw,420px);position:relative}.sg-card .frame{z-index:1;border-radius:var(--r-lg);border:1px solid var(--line);aspect-ratio:16/10;position:relative;overflow:hidden}.sg-card .frame img{object-fit:cover;width:100%;height:100%;display:block}.sg-card figcaption{color:var(--ink-dim);margin-top:8px;font-size:12.5px}.g-grid{gap:var(--sp-2);margin-top:var(--sp-2);display:grid}.g-cell img{border-radius:var(--r-md);border:1px solid var(--line);width:100%;display:block}.g-cell figcaption{color:var(--ink-dim);margin-top:6px;font-size:12px}.blk-facts{gap:var(--sp-2);display:grid}.fact-cell{border:1px solid var(--line);border-radius:var(--r-md);background:var(--card);padding:var(--sp-3)}.fact-cell .v{font:700 24px var(--ui);letter-spacing:-.02em}.fact-cell .k{color:var(--ink-dim);margin-top:4px;font-size:12.5px}.fact-cell .d{color:var(--ink-faint);margin-top:4px;font-size:12px}.blk-changelog{border:1px solid var(--line);border-radius:var(--r-md);background:var(--card);padding:var(--sp-3)}.cl-entry+.cl-entry{margin-top:var(--sp-3)}.cl-title{font:600 14px var(--ui);margin-bottom:var(--sp-2)}.blk-video{border-radius:var(--r-lg);border:1px solid var(--line);background:#050506;position:relative;overflow:hidden}.blk-video video{object-fit:cover;width:100%;height:100%;display:block}.blk-video figcaption{color:var(--ink-dim);border-top:1px solid var(--line);padding:10px 14px;font-size:12.5px}.blk-quote{border-left:2px solid var(--line-2);margin:var(--sp-2) 0;padding:4px 0 4px 20px}.blk-quote p{font:500 clamp(17px, 2vw, 21px) var(--ui);color:var(--ink);letter-spacing:-.01em;line-height:1.5}.blk-quote cite{font:400 13px var(--mono);color:var(--ink-dim);margin-top:10px;font-style:normal;display:block}.blk-divider{margin:var(--sp-2) 0;color:var(--ink-faint);align-items:center;gap:14px;display:flex}.blk-divider:before,.blk-divider:after{content:"";background:var(--line);flex:1;height:1px}.blk-divider:not(:has(span)):after{display:none}.blk-divider span{font:500 11px var(--mono);letter-spacing:.14em;text-transform:uppercase}.blk-divider:not(:has(span)){background:var(--line);height:1px;display:block}.blk-features .blk-h{margin-bottom:var(--sp-3)}.feat-grid{gap:var(--sp-2);display:grid}.feat{border:1px solid var(--line);border-radius:var(--r-md);background:var(--card);padding:var(--sp-3)}.feat.has-img{flex-direction:column;justify-content:flex-end;min-height:200px;display:flex;position:relative;overflow:hidden}.feat.has-img>:not(.feat-bg){z-index:1;position:relative}.feat-bg{z-index:0;position:absolute;inset:0}.feat-bg img{object-fit:cover;width:100%;height:100%;display:block}.feat-scrim{background:linear-gradient(#08080824,#0808086b 52%,#080808e6);position:absolute;inset:0}.feat.has-img .feat-ic{-webkit-backdrop-filter:blur(8px);background:#08080873;border-color:#ffffff29}.feat.has-img p{color:#f4f4f4b8}.feat-ic{border:1px solid var(--line);border-radius:var(--r-sm);width:34px;height:34px;color:var(--ink);place-items:center;margin-bottom:12px;display:grid}.feat-ic svg{stroke:currentColor;stroke-width:1.6px;fill:none;stroke-linecap:round;stroke-linejoin:round;width:18px;height:18px}.feat h3{font:600 15px var(--ui);letter-spacing:-.01em}.feat p{color:var(--ink-sub);margin-top:6px;font-size:13.5px;line-height:1.6}.blk-diagram{margin:var(--sp-2) 0;border:1px solid var(--line);border-radius:var(--r-md);background:var(--card);padding:var(--sp-3);overflow-x:auto}.blk-diagram .mmd{justify-content:center;min-height:40px;display:flex}.blk-diagram .mmd svg{max-width:100%;height:auto}.blk-diagram figcaption{text-align:center;color:var(--ink-dim);margin-top:10px;font-size:12.5px}.mmd-err{color:var(--ink-dim);font:400 12.5px var(--mono);margin:0}.blk-two{gap:var(--sp-3);align-items:start;display:grid}.blk-two .tc-col{min-width:0}.blk-two .tc-col .blocks>:first-child{margin-top:0}@media (width<=760px){.blk-facts,.g-grid,.feat-grid,.blk-two{grid-template-columns:1fr!important}}.blk-phero{margin:var(--sp-2) 0 var(--sp-5);grid-template-columns:minmax(260px,430px) 1fr;align-items:center;gap:clamp(22px,3.4vw,48px);display:grid}.blk-phero .ph-img{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--card);overflow:hidden}.blk-phero .ph-img img{object-fit:cover;aspect-ratio:4/5;width:100%;height:100%;display:block}.ph-chip{font:500 11px var(--mono);letter-spacing:.09em;text-transform:uppercase;color:var(--ink-sub);background:var(--card-2);border:1px solid var(--line);border-radius:100px;margin-bottom:16px;padding:5px 12px;display:inline-block}.ph-statement{font:600 clamp(22px, 2.6vw, 32px)/1.28 var(--ui);letter-spacing:-.02em;margin:0 0 var(--sp-2);max-width:24ch}.ph-p{color:var(--ink-sub);margin-bottom:var(--sp-2);max-width:58ch;font-size:14.5px;line-height:1.75}.ph-ctas{margin-top:var(--sp-3);flex-wrap:wrap;gap:10px;display:flex}@media (width<=860px){.blk-phero{grid-template-columns:1fr}.blk-phero .ph-img img{aspect-ratio:1}}.stack-blurb{margin:-8px 0 var(--sp-3);color:var(--ink-sub);font-size:14px}.stack-grid{border:1px solid var(--line);border-radius:var(--r-md);background:var(--line);grid-template-columns:repeat(auto-fill,minmax(118px,1fr));gap:1px;display:grid;overflow:hidden}.stack-cell{background:var(--card);text-align:center;padding:20px 12px 16px;transition:background .15s}.stack-cell:hover{background:var(--card-2)}.stack-ic{place-items:center;height:34px;margin-bottom:10px;display:grid}.stack-ic img{object-fit:contain;max-width:58%;max-height:28px}.stack-ic span{font:600 15px var(--mono);color:var(--ink-dim);border:1px solid var(--line-2);border-radius:var(--r-sm);place-items:center;width:30px;height:30px;display:grid}.stack-name{font:500 13px var(--ui);color:var(--ink)}.stack-note{font:400 10.5px var(--mono);letter-spacing:.05em;color:var(--ink-dim);margin-top:3px}.ahero{gap:var(--sp-5);margin-bottom:var(--sp-6);grid-template-columns:300px 1fr;align-items:center;display:grid}.ahero .portrait .frame{aspect-ratio:4/5}.ahero .portrait .art{background:var(--art);position:absolute;inset:0}.ahero h1{font:700 clamp(30px, 3.2vw, 42px) var(--ui);letter-spacing:-.03em;line-height:1.05}.ahero .role{font:500 17px var(--ui);color:var(--ink-sub);margin-top:10px}.ahero .intro{margin-top:var(--sp-2);color:var(--ink-sub);max-width:500px;font-size:14.5px;line-height:1.7}.ahero .cta{margin-top:var(--sp-3);flex-wrap:wrap;gap:10px;display:flex}.stats{gap:var(--sp-2);margin-bottom:var(--sp-6);grid-template-columns:repeat(4,1fr);display:grid}.stat{border:1px solid var(--line);border-radius:var(--r-md);background:var(--card);padding:var(--sp-3)}.stat .v{font:700 26px var(--ui);letter-spacing:-.02em}.stat .k{color:var(--ink-dim);margin-top:4px;font-size:12.5px}.a-sec{margin-bottom:var(--sp-6)}.a-label{font:500 11px var(--mono);letter-spacing:.22em;text-transform:uppercase;color:var(--ink-dim);margin-bottom:var(--sp-4);align-items:baseline;gap:var(--sp-2);display:flex}.a-label:after{content:"";background:var(--line);flex:1;height:1px}.a-label a{font-family:var(--ui)}.tl{padding-left:26px;position:relative}.tl:before{content:"";background:var(--line-2);width:1px;position:absolute;top:6px;bottom:6px;left:5px}.tl-item{padding-bottom:var(--sp-4);position:relative}.tl-item:last-child{padding-bottom:0}.tl-item:before{content:"";background:var(--box);border:2px solid var(--ink-dim);border-radius:50%;width:11px;height:11px;position:absolute;top:5px;left:-24px}.tl-item.now:before{border-color:var(--green);background:var(--green);box-shadow:0 0 10px #7ed49180}.tl-item .when{font:400 12px var(--mono);color:var(--ink-faint)}.tl-item h3{font:600 17px var(--ui);margin-top:4px}.tl-item .org{color:var(--ink-sub);margin-top:1px;font-size:13.5px}.tl-item p{color:var(--ink-dim);max-width:640px;margin-top:8px;font-size:14px;line-height:1.7}.tl-item .tags{flex-wrap:wrap;gap:7px;margin-top:10px;display:flex}.skills{gap:var(--sp-3);grid-template-columns:repeat(3,1fr);display:grid}.skgrp h4{font:600 14px var(--ui);margin-bottom:var(--sp-2)}.skgrp .chips{flex-wrap:wrap;gap:8px;display:flex}.chip{font:500 13px var(--ui);color:var(--ink-sub);border:1px solid var(--line);background:var(--card);border-radius:8px;padding:8px 13px}.hl{gap:var(--sp-3);grid-template-columns:repeat(3,1fr);display:grid}.hlcard{text-decoration:none;display:block}.hlcard .media-wrap .frame{aspect-ratio:16/11}.hlcard .art{position:absolute;inset:0}.hlcard .art img{object-fit:cover;width:100%;height:100%;transition:transform .5s}.hlcard:hover .art img{transform:scale(1.04)}.hlcard h4{font:600 15px var(--ui);margin-top:12px}.hlcard span{color:var(--ink-dim);font-size:13px}.close-cta{text-align:center;border:1px solid var(--line);border-radius:var(--r-lg);background:linear-gradient(150deg, var(--card-2), var(--card));padding:clamp(var(--sp-5), 5vw, 64px) var(--sp-3)}.close-cta h2{font:700 30px var(--ui);letter-spacing:-.02em}.close-cta p{color:var(--ink-sub);margin-top:10px;font-size:15px}.close-cta .cta{margin-top:var(--sp-3);flex-wrap:wrap;justify-content:center;gap:10px;display:flex}@media (width<=900px){.ahero{grid-template-columns:1fr}.ahero .portrait{max-width:260px}.stats{grid-template-columns:repeat(2,1fr)}.skills,.hl{grid-template-columns:1fr}}.page-head .avail{font:500 12.5px var(--ui);color:var(--green);margin-bottom:var(--sp-3);background:#7ed49114;border:1px solid #7ed49138;border-radius:100px;align-items:center;gap:9px;padding:6px 12px;display:inline-flex}.page-head .avail i{background:var(--green);width:7px;height:7px;box-shadow:0 0 9px var(--green);border-radius:50%;animation:2.8s ease-in-out infinite breathe}.page-head h1{font:700 34px var(--ui)}.contact-grid{gap:var(--sp-3);grid-template-columns:1.1fr 1fr;align-items:start;display:grid}.email-card{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--card);padding:var(--sp-4)}.email-card .lbl{font:500 11px var(--mono);letter-spacing:.18em;text-transform:uppercase;color:var(--ink-dim)}.email-card .addr{font:600 26px var(--ui);letter-spacing:-.02em;word-break:break-all;margin-top:10px}.email-card .btns{margin-top:var(--sp-3);flex-wrap:wrap;gap:10px;display:flex}.info{margin-top:var(--sp-3)}.info .row{border-bottom:1px solid var(--line);justify-content:space-between;gap:12px;padding:13px 0;font-size:14px;display:flex}.info .row:last-child{border-bottom:0}.info .k{color:var(--ink-dim)}.info .v{color:var(--ink)}.socials{gap:var(--sp-2);grid-template-columns:repeat(2,1fr);display:grid}.soc{border:1px solid var(--line);border-radius:var(--r-md);background:var(--card);align-items:center;gap:13px;padding:15px 16px;text-decoration:none;transition:border-color .15s,background .15s;display:flex}.soc:hover{border-color:var(--line-2);background:var(--card-2)}.soc .ic{border:1px solid var(--line-2);background:var(--card-2);border-radius:10px;flex-shrink:0;place-items:center;width:38px;height:38px;display:grid}.soc .ic svg{width:19px;height:19px;stroke:var(--ink);stroke-width:1.7px;fill:none}.soc .p{font:600 14.5px var(--ui)}.soc .h{color:var(--ink-dim);margin-top:1px;font-size:12.5px}.soc .arrow{color:var(--ink-faint);margin-left:auto;transition:color .15s,transform .2s}.soc:hover .arrow{color:var(--ink);transform:translate(3px)}.form-card{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--card);padding:var(--sp-4);margin-top:var(--sp-3)}.form-card h2{font:600 20px var(--ui);letter-spacing:-.015em}.form-card p{color:var(--ink-dim);margin-top:6px;font-size:13.5px}.frow{gap:var(--sp-2);margin-top:var(--sp-3);grid-template-columns:1fr 1fr;display:grid}.field label{font:500 12px var(--ui);color:var(--ink-sub);margin-bottom:6px;display:block}.field input,.field textarea{background:var(--box);border:1px solid var(--line);border-radius:var(--r-md);width:100%;color:var(--ink);font:400 14px var(--ui);outline:none;padding:11px 13px}.field input:focus,.field textarea:focus{border-color:var(--line-2)}.field.full{grid-column:1/-1}.field textarea{resize:vertical;min-height:120px}.form-card .btn{margin-top:var(--sp-3)}@media (width<=900px){.contact-grid,.socials,.frow{grid-template-columns:1fr}}.back{font:500 13px var(--ui);color:var(--ink-dim);margin-bottom:var(--sp-3);align-items:center;gap:7px;text-decoration:none;display:inline-flex}.back:hover{color:var(--ink)}.hero-media{height:440px;margin-bottom:var(--sp-4)}.hero-media .frame{height:100%}.hero-media .art{position:absolute;inset:0}.hero-media .art img{object-fit:cover;width:100%;height:100%;display:block}.hero-media .badge{z-index:2;font:500 12px var(--ui);color:var(--ink);border-radius:var(--r-sm);-webkit-backdrop-filter:blur(10px);background:#0a0a0a80;border:1px solid #ffffff24;padding:6px 13px;position:absolute;top:16px;left:16px}.phead{justify-content:space-between;align-items:flex-end;gap:var(--sp-3);margin-bottom:var(--sp-2);flex-wrap:wrap;display:flex}.phead h1{font:700 33px var(--ui);letter-spacing:-.03em}.phead .meta{flex-wrap:wrap;align-items:center;gap:8px;margin-top:10px;display:flex}.phead .actions{gap:10px;display:flex}.metrics{gap:var(--sp-2);margin:var(--sp-4) 0 var(--sp-3);grid-template-columns:repeat(4,1fr);display:grid}.metric{border:1px solid var(--line);border-radius:var(--r-md);background:var(--card);padding:var(--sp-3)}.metric .v{font:700 24px var(--ui);letter-spacing:-.02em}.metric .k{color:var(--ink-dim);margin-top:4px;font-size:12.5px}.gal{gap:var(--sp-2);margin:var(--sp-2) 0 var(--sp-3);grid-template-columns:2fr 1fr;display:grid}.gal .media-wrap .frame{aspect-ratio:16/10}.gal .col{gap:var(--sp-2);display:grid}.gal .col .media-wrap .frame{aspect-ratio:16/11}.gal .art{position:absolute;inset:0}.gal .art img{object-fit:cover;width:100%;height:100%;display:block}.brief{gap:var(--sp-4);margin-bottom:var(--sp-5);grid-template-columns:1fr minmax(260px,320px);align-items:start;display:grid}.brief.brief-solo{grid-template-columns:1fr}.brief-summary p{color:var(--ink-sub);max-width:62ch;font-size:16px;line-height:1.75}.detail-content{margin-top:var(--sp-2)}.aside-card{border:1px solid var(--line);border-radius:var(--r-md);background:var(--card);padding:var(--sp-3);position:sticky;top:24px}.aside-card .row{border-bottom:1px solid var(--line);justify-content:space-between;gap:12px;padding:10px 0;font-size:13.5px;display:flex}.aside-card .row:last-child{border-bottom:0}.aside-card .row .k{color:var(--ink-dim)}.aside-card .row .v{color:var(--ink);text-align:right}.aside-card .btn{width:100%;margin-top:var(--sp-2);justify-content:center}.next-proj{border:1px solid var(--line);border-radius:var(--r-lg);height:160px;margin-top:var(--sp-3);text-decoration:none;display:block;position:relative;overflow:hidden}.next-proj .art{background:linear-gradient(150deg,#20242e,#3b4459);transition:transform .5s;position:absolute;inset:0}.next-proj:hover .art{transform:scale(1.04)}.next-proj .scrim{background:linear-gradient(90deg,#0a0a0abf,#0000);position:absolute;inset:0}.next-proj .lbl{position:absolute;top:50%;left:22px;transform:translateY(-50%)}.next-proj .lbl .s{font:400 11px var(--mono);color:var(--ink-dim)}.next-proj .lbl .t{font:600 22px var(--ui);margin-top:2px}@media (width<=900px){.metrics{grid-template-columns:repeat(2,1fr)}.gal,.brief{grid-template-columns:1fr}.aside-card{position:static}}.docs{grid-template-columns:200px 1fr 172px;align-items:start;gap:clamp(20px,3vw,44px);display:grid}.crumbs{font:400 12.5px var(--mono);color:var(--ink-dim);margin-bottom:var(--sp-2)}.crumbs a{color:var(--ink-sub);text-decoration:none}.crumbs span{color:var(--ink-faint);margin:0 6px}.tree{position:sticky;top:24px}.tree .back{font:500 12.5px var(--ui);color:var(--ink-dim);margin-bottom:var(--sp-3);gap:6px;text-decoration:none;display:inline-flex}.tree .back:hover{color:var(--ink)}.tree-grp{font:500 11px var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--ink-faint);margin:var(--sp-3) 0 8px}.tree a{font:400 13.5px var(--ui);color:var(--ink-dim);border-radius:7px;padding:6px 10px;text-decoration:none;display:block}.tree a:hover{color:var(--ink);background:var(--card)}.tree a.active{color:var(--ink);background:var(--card);border-left:2px solid var(--ink);border-radius:0 7px 7px 0}.article h1{font:600 34px var(--ui);letter-spacing:-.02em}.article .lead{color:var(--ink-sub);margin-top:10px;font-size:16px;line-height:1.7}.article .ver{gap:8px;margin-top:14px;display:inline-flex}.params{table-layout:fixed;border-collapse:collapse;width:100%;margin:var(--sp-2) 0 var(--sp-3);font-size:13.5px}.params th,.params td{overflow-wrap:anywhere;word-break:break-word}.params th{text-align:left;font:500 11px var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-dim);border-bottom:1px solid var(--line-2);padding:8px 10px}.params td{border-bottom:1px solid var(--line);color:var(--ink-sub);vertical-align:top;padding:11px 10px}.params td .name{font:500 13px var(--mono);color:var(--ink)}.params td .type{font:400 12px var(--mono);color:#8fb9e6}.otp{position:sticky;top:24px}.otp-title{font:500 11px var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:10px}.otp a{border-left:1px solid var(--line);color:var(--ink-dim);padding:5px 0 5px 12px;font-size:12.5px;text-decoration:none;display:block}.otp a:hover,.otp a.active{color:var(--ink);border-left-color:var(--ink)}.pager{gap:var(--sp-2);margin-top:var(--sp-5);display:flex}.pager a{border:1px solid var(--line);border-radius:var(--r-md);background:var(--card);flex:1;padding:14px 16px;text-decoration:none;transition:border-color .15s}.pager a:hover{border-color:var(--line-2)}.pager .lbl{font:400 11px var(--mono);color:var(--ink-faint)}.pager .ttl{font:500 14px var(--ui);color:var(--ink);margin-top:4px}.pager .next{text-align:right}@media (width<=1080px){.docs{grid-template-columns:1fr}.tree,.otp{display:none}}.entry-wrap{max-width:760px;margin:0 auto}.entry-wrap .back{font:500 13px var(--ui);color:var(--ink-dim);margin-bottom:var(--sp-4);align-items:center;gap:7px;text-decoration:none;display:inline-flex}.entry-wrap .back:hover{color:var(--ink)}.e-meta{font:400 12.5px var(--mono);color:var(--ink-faint);align-items:center;gap:10px;display:flex}.e-meta .proj{color:var(--ink-sub)}.entry-wrap h1{font:700 clamp(30px, 3.6vw, 42px) var(--ui);letter-spacing:-.025em;margin-top:12px;line-height:1.1}.e-tags{margin-top:var(--sp-3);gap:7px;display:flex}.e-hero{margin:var(--sp-4) 0 var(--sp-5)}.e-hero .frame{aspect-ratio:16/8}.e-hero .art{position:absolute;inset:0}.e-hero .art img{object-fit:cover;width:100%;height:100%;display:block}figure.fig{margin:var(--sp-4) 0}figure.fig .frame{aspect-ratio:16/9}figure.fig .art{position:absolute;inset:0}figure.fig .art img{object-fit:cover;width:100%;height:100%;display:block}figure.fig figcaption{color:var(--ink-dim);text-align:center;margin-top:10px;font-size:12.5px}.changelog{border:1px solid var(--line);border-radius:var(--r-md);background:var(--card);padding:var(--sp-3);margin:var(--sp-4) 0}.changelog .cl-title{font:600 14px var(--ui);margin-bottom:var(--sp-2)}.cl-row{border-top:1px solid var(--line);color:var(--ink-sub);grid-template-columns:76px 1fr;gap:12px;padding:8px 0;font-size:13.5px;display:grid}.cl-row:first-of-type{border-top:0}.cl-tag{font:500 10.5px var(--mono);letter-spacing:.08em;text-transform:uppercase;padding:3px 0}.cl-tag.add{color:#a7cc8b}.cl-tag.chg{color:#8fb9e6}.cl-tag.fix{color:#e6a459}.e-nav{gap:var(--sp-2);margin-top:var(--sp-6);display:flex}.e-nav a{border:1px solid var(--line);border-radius:var(--r-md);background:var(--card);flex:1;padding:14px 16px;text-decoration:none;transition:border-color .15s}.e-nav a:hover{border-color:var(--line-2)}.e-nav .lbl{font:400 11px var(--mono);color:var(--ink-faint)}.e-nav .ttl{font:500 13.5px var(--ui);color:var(--ink);margin-top:4px}.e-nav .next{text-align:right}
