/**handles:psg-site**/
:root{--bg:#fff;--bg-alt:#f5f5f7;--bg-elev:#fbfbfd;--ink:#1d1d1f;--ink-2:#6e6e73;--ink-3:#86868b;--line:#d2d2d7;--line-soft:#e8e8ed;--blue:#0071e3;--blue-hover:#0077ed;--link:#0066cc;--link-dark:#2997ff;--green:#008009;--green-dark:#30d158;--orange:#b64400;--orange-dark:#ff9f0a;--dark:#000;--graphite:#1d1d1f;--graphite-line:#424245;--ink-on-dark:#f5f5f7;--ink-on-dark-2:#a1a1a6;--font-text:-apple-system,BlinkMacSystemFont,"SF Pro Text","Helvetica Neue","Segoe UI",sans-serif;--font-display:-apple-system,BlinkMacSystemFont,"SF Pro Display","Helvetica Neue","Segoe UI Variable Display","Segoe UI",sans-serif;--font-mono:"SF Mono",ui-monospace,Menlo,Consolas,"Liberation Mono",monospace;--ease:cubic-bezier(0.4, 0, 0.6, 1);--ease-out:cubic-bezier(0.28, 0.11, 0.32, 1);--r-tile:28px;--r-card:18px;--gn-h:44px;--ln-h:52px;--wrap:1068px;--wrap-wide:1260px;--gutter:22px}*,::after,::before{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:calc(var(--ln-h) + 16px)}body{margin:0;background:var(--bg);color:var(--ink);font:400 17px/1.47059 var(--font-text);letter-spacing:-.022em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}body.menu-open{overflow:hidden}blockquote,figure,h1,h2,h3,h4,ol,p,ul{margin:0}ol,ul{padding:0}img{display:block;max-width:100%;height:auto}svg{flex-shrink:0}button{font:inherit}a{color:var(--link);text-decoration:none}a:hover{text-decoration:underline}:focus-visible{outline:2px solid var(--blue);outline-offset:3px;border-radius:4px}.skip{position:absolute;left:-9999px;top:8px;z-index:300;background:#fff;color:var(--ink);padding:10px 16px;border-radius:980px;box-shadow:0 4px 16px rgba(0,0,0,.16)}.skip:focus{left:12px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.t-hero{font:600 clamp(40px, 6.2vw, 80px)/1.05 var(--font-display);letter-spacing:-.015em}.t-section{font:600 clamp(32px, 4.2vw, 48px)/1.0834 var(--font-display);letter-spacing:-.003em}.t-tile{font:600 clamp(28px, 3vw, 40px)/1.1 var(--font-display);letter-spacing:0}.t-card{font:600 21px/1.19 var(--font-display);letter-spacing:.011em}.t-card-lg{font:600 clamp(24px, 2.2vw, 28px)/1.143 var(--font-display);letter-spacing:.007em}.t-eyebrow{font:600 clamp(19px, 1.6vw, 21px)/1.19 var(--font-display);letter-spacing:.011em;color:var(--ink-3)}.t-intro{font:400 clamp(19px, 1.7vw, 21px)/1.381 var(--font-text);letter-spacing:.011em;color:var(--ink-2)}.t-small{font-size:14px;line-height:1.43;letter-spacing:-.016em;color:var(--ink-2)}.t-caption{font-size:12px;line-height:1.33;letter-spacing:-.01em;color:var(--ink-2)}.t-kicker{font:600 12px/1.33 var(--font-text);letter-spacing:-.01em;color:var(--link)}.t-kicker.is-muted{color:var(--ink-2)}.t-num{font:600 48px/1 var(--font-display);color:var(--blue)}.t-dim{color:var(--ink-3)}.muted{color:var(--ink-2)}.mono{font-family:var(--font-mono);letter-spacing:0}.wrap{width:100%;max-width:var(--wrap);margin-inline:auto;padding-inline:var(--gutter)}.wrap-wide{max-width:var(--wrap-wide)}.read{max-width:736px}.sec{padding-block:clamp(88px,10vw,144px)}.sec-tight{padding-block:clamp(48px,6vw,88px)}.sec-flush-top{padding-top:0}.sec-alt{background:var(--bg-alt)}.sec-dark,.sec-graphite{color:var(--ink-on-dark)}.sec-dark{background:var(--dark)}.sec-graphite{background:var(--graphite)}.sec-head{display:flex;flex-direction:column;gap:12px;max-width:780px;margin-bottom:clamp(32px,4vw,48px)}.sec-head.is-center{margin-inline:auto;align-items:center;text-align:center}.sec-head-row{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;flex-wrap:wrap;margin-bottom:clamp(32px,4vw,48px)}.sec-head-row .sec-head{margin-bottom:0}.grid{display:grid;gap:12px}.g-2{grid-template-columns:repeat(2,minmax(0,1fr))}.g-3{grid-template-columns:repeat(3,minmax(0,1fr))}.g-4{grid-template-columns:repeat(4,minmax(0,1fr))}.gap-20{gap:20px}.split{display:grid;grid-template-columns:minmax(0,4fr) minmax(0,7fr);gap:clamp(24px,5vw,64px)}.split-even{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:clamp(32px,5vw,64px);align-items:center}.stack{display:flex;flex-direction:column;gap:16px}.stack-sm{display:flex;flex-direction:column;gap:8px}.is-dark .muted,.is-dark .t-intro,.is-dark .t-small,.sec-dark .muted,.sec-dark .t-intro,.sec-dark .t-small,.sec-graphite .muted,.sec-graphite .t-intro,.sec-graphite .t-small{color:var(--ink-on-dark-2)}.is-dark .t-eyebrow,.sec-dark .t-eyebrow,.sec-graphite .t-eyebrow{color:var(--ink-3)}.is-dark a:not(.btn),.sec-dark a:not(.btn),.sec-graphite a:not(.btn){color:var(--link-dark)}.is-dark .t-kicker,.sec-dark .t-kicker,.sec-graphite .t-kicker{color:var(--link-dark)}.gn{position:sticky;top:0;z-index:200;height:var(--gn-h);background:rgba(251,251,253,.8);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);transition:box-shadow .32s var(--ease),background-color .32s var(--ease)}.gn.is-scrolled{box-shadow:0 1px 0 rgba(0,0,0,.08)}body.has-ln .gn,body:has(.ln) .gn{position:relative}.gn-in{height:100%;display:flex;align-items:center;justify-content:space-between;gap:20px}.gn-brand{display:inline-flex;align-items:center;gap:10px;min-height:44px;color:var(--ink);font:600 14px/1 var(--font-text);letter-spacing:-.01em;white-space:nowrap}.gn-brand:hover{text-decoration:none}.gn-mono{width:26px;height:26px;border-radius:7px;background:var(--ink);color:#fff;display:grid;place-items:center;font:600 11px/1 var(--font-display);letter-spacing:.02em;transition:transform .32s var(--ease-out)}.gn-brand:hover .gn-mono{transform:scale(1.08)}.gn-links{list-style:none;display:flex;align-items:center;gap:clamp(14px,2.2vw,30px)}.gn-links a{display:inline-flex;align-items:center;min-height:44px;color:rgba(0,0,0,.8);font-size:12px;letter-spacing:-.01em;transition:color .32s var(--ease)}.gn-links a:hover{color:#000;text-decoration:none}.gn-links a[aria-current=page]{color:#000;font-weight:600}.gn-actions{display:flex;align-items:center;gap:2px}.gn-cv{display:inline-flex;align-items:center;min-height:44px}.gn-cv span{background:var(--blue);color:#fff;border-radius:980px;padding:4px 12px;font-size:12px;line-height:1.33;transition:background-color .24s var(--ease)}.gn-cv:hover{text-decoration:none}.gn-cv:hover span{background:var(--blue-hover)}.gn-burger{display:none;position:relative;width:44px;height:44px;border:0;background:0 0;color:var(--ink);cursor:pointer}.gn-burger span{position:absolute;left:13px;width:18px;height:1.5px;border-radius:1px;background:currentColor;transition:transform .32s var(--ease)}.gn-burger span:first-child{top:18px}.gn-burger span:nth-child(2){top:25px}.menu-open .gn-burger span:first-child{transform:translateY(3.5px) rotate(45deg)}.menu-open .gn-burger span:nth-child(2){transform:translateY(-3.5px) rotate(-45deg)}.nav-dark .gn{background:rgba(22,22,23,.8)}.nav-dark .gn.is-scrolled{box-shadow:0 1px 0 rgba(255,255,255,.08)}.nav-dark .gn-brand{color:var(--ink-on-dark)}.nav-dark .gn-mono{background:var(--ink-on-dark);color:#000}.nav-dark .gn-links a{color:rgba(255,255,255,.8)}.nav-dark .gn-links a:hover,.nav-dark .gn-links a[aria-current=page]{color:#fff}.nav-dark .gn-burger{color:var(--ink-on-dark)}.ln{position:sticky;top:0;z-index:150;height:var(--ln-h);background:rgba(255,255,255,.72);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);border-bottom:1px solid rgba(0,0,0,.16)}.ln-in{height:100%;display:flex;align-items:center;justify-content:space-between;gap:16px}.ln-title{font:600 21px/1 var(--font-display);letter-spacing:.011em;color:var(--ink);white-space:nowrap}.ln-menu{display:flex;align-items:center;gap:20px}.ln-menu a{display:inline-flex;align-items:center;min-height:44px;font-size:12px;color:rgba(0,0,0,.8);transition:color .32s var(--ease)}.ln-menu a:hover{color:var(--link);text-decoration:none}.ln-menu a.is-active{color:var(--link)}.ln-menu .ln-cta span{background:var(--blue);color:#fff;border-radius:980px;padding:4px 11px;line-height:1.33;transition:background-color .24s var(--ease)}.ln-menu .ln-cta:hover span{background:var(--blue-hover)}.ln.is-dark{background:rgba(0,0,0,.72);border-bottom-color:rgba(255,255,255,.16)}.ln.is-dark .ln-title{color:var(--ink-on-dark)}.ln.is-dark .ln-menu a{color:rgba(255,255,255,.8)}.ln.is-dark .ln-menu a.is-active,.ln.is-dark .ln-menu a:hover{color:var(--link-dark)}.ln.is-dark .ln-menu .ln-cta span{color:#fff}.gf{background:var(--bg-alt);color:var(--ink-2);font-size:12px;line-height:1.33;letter-spacing:-.01em}.gf .wrap{padding-top:17px;padding-bottom:21px}.gf-note{padding-bottom:12px;margin-bottom:12px;border-bottom:1px solid var(--line)}.gf-cols{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;padding:8px 0 20px}.gf-col{display:flex;flex-direction:column;gap:8px}.gf-col h2{font:600 12px/1.33 var(--font-text);color:var(--ink)}.gf a{color:#424245}.gf-bottom{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px 24px;padding-top:12px;border-top:1px solid var(--line)}.gf-legal{display:flex;gap:0}.gf-legal a+a{border-left:1px solid var(--line);margin-left:10px;padding-left:10px}.hero{padding-block:clamp(72px,9vw,120px) clamp(48px,6vw,72px);text-align:center}.hero-in{display:flex;flex-direction:column;align-items:center;gap:20px}.hero .t-hero{max-width:960px}.hero .t-intro{max-width:740px}.hero.is-dark{background:var(--dark);color:var(--ink-on-dark)}.hero.is-alt{background:var(--bg-alt)}.hero-split{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,4fr);gap:clamp(32px,5vw,64px);align-items:center;text-align:left}.hero-split .hero-in{align-items:flex-start}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:12px 22px;border-radius:980px;border:1px solid transparent;font:400 17px/1.1 var(--font-text);letter-spacing:-.022em;cursor:pointer;transition:background-color .24s var(--ease),color .24s var(--ease),border-color .24s var(--ease),transform .24s var(--ease)}.btn:hover{text-decoration:none}.btn:active{transform:scale(.97)}.btn-primary{background:var(--blue);color:#fff}.btn-primary:hover{background:var(--blue-hover);color:#fff}.btn-secondary{border-color:var(--blue);color:var(--link)}.btn-secondary:hover{background:var(--blue);color:#fff}.is-dark .btn-secondary,.sec-dark .btn-secondary,.sec-graphite .btn-secondary{border-color:var(--link-dark);color:var(--link-dark)}.is-dark .btn-secondary:hover,.sec-dark .btn-secondary:hover,.sec-graphite .btn-secondary:hover{background:var(--link-dark);color:#000}.btn svg{width:18px;height:18px}.btn-row{display:flex;flex-wrap:wrap;gap:14px 16px;justify-content:center}.btn-row.is-start{justify-content:flex-start}.links-row{display:flex;flex-wrap:wrap;gap:10px 28px;justify-content:center}.links-row.is-start{justify-content:flex-start}.more::after{content:"";display:inline-block;width:.38em;height:.38em;margin-left:.32em;border-top:1.5px solid currentColor;border-right:1.5px solid currentColor;transform:translateY(-.1em) rotate(45deg);transition:transform .24s var(--ease)}.more:hover::after{transform:translate(3px,-.1em) rotate(45deg)}.ext::after{content:" ↗"}.tile{position:relative;overflow:hidden;border-radius:var(--r-tile)}.tile-light{background:var(--bg-alt)}.tile-outline{background:var(--bg-elev);border:1px solid var(--line-soft)}.tile-dark{background:var(--dark);color:var(--ink-on-dark)}.tile-graphite{background:var(--graphite);color:var(--ink-on-dark)}.tile-center{display:flex;flex-direction:column;align-items:center;text-align:center;gap:12px;padding:clamp(44px,5vw,60px) clamp(24px,4vw,48px)}.tile-center .t-intro{max-width:520px;font-size:clamp(17px, 1.5vw, 19px)}.tile-pad{padding:clamp(40px,5.5vw,72px) clamp(24px,5vw,64px)}.tile-foot{margin-top:auto;padding-top:24px}.card{display:flex;flex-direction:column;gap:8px;padding:28px;border-radius:var(--r-card);background:var(--bg-alt);color:inherit}.card-lg{padding:32px;border-radius:var(--r-tile)}.card-white{background:#fff}.card-dark{background:var(--graphite);color:var(--ink-on-dark)}.card-outline{background:0 0;border:1px solid var(--line)}.card .t-card{color:inherit}a.card{transition:transform .5s var(--ease-out),box-shadow .5s var(--ease-out)}a.card:hover{text-decoration:none;transform:translateY(-4px);box-shadow:0 14px 40px rgba(0,0,0,.12)}.card-dark .muted,.card-dark .t-small{color:var(--ink-on-dark-2)}.card-dark .t-kicker{color:var(--ink-on-dark-2)}.card-sep{border-top:1px solid var(--line);margin-top:8px;padding-top:14px;display:flex;flex-direction:column;gap:6px;font-size:14px}.chips{display:flex;flex-wrap:wrap;gap:8px}.chips.is-center{justify-content:center}.chip{font-size:12px;line-height:1.33;padding:6px 12px;border-radius:980px;border:1px solid var(--line);color:var(--ink-2)}.is-dark .chip{border-color:var(--graphite-line);color:var(--ink-on-dark-2)}.status{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:980px;border:1px solid currentColor;font:600 12px/1.33 var(--font-text);letter-spacing:-.01em}.status::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}.status-ok{color:var(--green)}.status-wip{color:var(--orange)}.is-dark .status-ok,.sec-dark .status-ok{color:var(--green-dark)}.is-dark .status-wip,.sec-dark .status-wip{color:var(--orange-dark)}.status-text-ok{color:var(--green)}.status-text-wip{color:var(--orange)}.banner{display:inline-flex;align-items:flex-start;gap:12px;max-width:820px;padding:14px 22px;border-radius:var(--r-card);background:#fff;text-align:left;font-size:14px;line-height:1.43}.banner .dot{width:8px;height:8px;margin-top:6px;border-radius:50%;background:var(--orange);flex-shrink:0}.stats{border-top:1px solid var(--graphite-line);padding-top:40px}.stat{display:flex;flex-direction:column;gap:6px}.stat-num{font:600 clamp(40px, 4.5vw, 56px)/1.07 var(--font-display);letter-spacing:-.005em}.stat-txt{font:600 clamp(22px, 2.2vw, 28px)/1.15 var(--font-display)}.stat-label{font-size:14px;line-height:1.43;color:var(--ink-on-dark-2)}.person{display:flex;flex-direction:column;gap:4px}.person b{font:600 19px/1.21 var(--font-display)}.rows{border-top:1px solid var(--line)}.row{display:grid;grid-template-columns:110px minmax(0,1fr) minmax(0,1.4fr);gap:24px;align-items:baseline;padding:24px 0;border-bottom:1px solid var(--line)}.row b{font:600 21px/1.19 var(--font-display)}.row .status{justify-self:start}.row.kv{grid-template-columns:minmax(0,1fr) minmax(0,1.6fr);padding:18px 0}.is-dark .row,.is-dark .rows{border-color:var(--graphite-line)}.steps{list-style:none;display:flex;flex-direction:column}.steps li{display:flex;gap:20px;padding:24px 0;border-bottom:1px solid var(--graphite-line)}.steps li:last-child{border-bottom:0}.steps .n{font:600 21px/1.4 var(--font-display);color:var(--link-dark);min-width:16px}.spec{width:100%;border-collapse:collapse;font-size:17px}.spec th{text-align:left;font:600 12px/1.33 var(--font-text);color:var(--ink-2);padding:0 16px 12px 0;border-bottom:1px solid var(--line)}.spec td{padding:20px 16px 20px 0;border-bottom:1px solid var(--line);vertical-align:top}.spec td:first-child{font:600 17px/1.47 var(--font-display);width:90px}.spec td:last-child{color:var(--ink-2)}.callout{display:flex;align-items:flex-start;gap:16px;padding:24px 28px;border-radius:var(--r-card);border:1px solid var(--line)}.callout svg{width:22px;height:22px;margin-top:2px;color:var(--blue)}.sec-dark .callout{border-color:var(--graphite-line);color:var(--ink-on-dark-2)}.sec-dark .callout svg{color:var(--link-dark)}.callout strong{color:var(--ink)}.sec-dark .callout strong{color:var(--ink-on-dark)}.note{display:flex;gap:12px;align-items:flex-start;font-size:14px;line-height:1.43;color:var(--ink-2);max-width:860px}.note svg{width:18px;height:18px;margin-top:1px;color:var(--ink-2)}.note strong{color:var(--ink)}.linklist{display:flex;flex-direction:column}.linklist a{display:flex;justify-content:space-between;align-items:center;gap:12px;min-height:44px;padding:8px 0;border-bottom:1px solid var(--line);color:var(--ink);font-size:15px;transition:color .24s var(--ease)}.linklist a::after{content:"↗";color:var(--ink-3);transition:transform .24s var(--ease),color .24s var(--ease)}.linklist a:hover{color:var(--link);text-decoration:none}.linklist a:hover::after{color:var(--link);transform:translate(2px,-2px)}.portrait{position:relative;overflow:hidden;border-radius:var(--r-tile);background:var(--bg-alt);aspect-ratio:4/5}.portrait img{width:100%;height:115%;object-fit:cover;object-position:center 20%;will-change:transform}.avatar{width:140px;height:140px;border-radius:50%;overflow:hidden;background:var(--line-soft)}.avatar img{width:100%;height:100%;object-fit:cover}.hero-media{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:12px}.hero-media .portrait{aspect-ratio:auto;min-height:100%}.gallery{--gpad:max(var(--gutter), calc((100vw - var(--wrap)) / 2 + var(--gutter)))}.gallery-track{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(270px,312px);gap:20px;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;padding:8px var(--gpad) 28px;scroll-padding-inline:var(--gpad);scrollbar-width:none}.gallery-track::-webkit-scrollbar{display:none}.gallery-track>*{scroll-snap-align:start;min-height:260px}.gallery-paddles{display:flex;justify-content:flex-end;gap:14px}.paddle{width:44px;height:44px;border:0;border-radius:50%;cursor:pointer;display:grid;place-items:center;background:rgba(210,210,215,.64);color:rgba(0,0,0,.56);transition:background-color .24s var(--ease),color .24s var(--ease),opacity .24s var(--ease)}.paddle:hover{background:rgba(223,223,227,.9);color:rgba(0,0,0,.72)}.paddle:disabled{opacity:.42;cursor:default}.paddle svg{width:16px;height:16px}.pipe{display:flex;align-items:stretch;gap:8px}.pipe-step{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px;padding:24px;border-radius:var(--r-card);background:var(--graphite)}.pipe-step .n{font:600 32px/1 var(--font-display);color:var(--link-dark)}.pipe-step b{font:600 19px/1.21 var(--font-display)}.pipe-step span:last-child{font-size:14px;line-height:1.43;color:var(--ink-on-dark-2)}.pipe-arrow{display:flex;align-items:center;color:var(--graphite-line)}.pipe-arrow svg{width:16px;height:16px}.prose h2{font:600 21px/1.19 var(--font-display);letter-spacing:.011em;margin:44px 0 12px}.prose li,.prose p{color:#424245;margin-bottom:12px}.prose ul{padding-left:20px;margin-bottom:12px}.prose strong{color:var(--ink)}.prose code{font:15px/1.4 var(--font-mono);background:var(--bg-alt);border-radius:6px;padding:2px 6px}.post-item{padding:24px 0;border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:6px}.term-stage{position:relative;display:flex;align-items:center;justify-content:center;min-height:480px;padding:clamp(16px,3vw,40px);border-radius:var(--r-tile);background:var(--dark)}.term{position:relative;z-index:2;display:flex;flex-direction:column;width:100%;max-width:680px;border-radius:12px;overflow:hidden;background:rgba(30,30,30,.97);box-shadow:0 0 0 1px rgba(255,255,255,.1),0 22px 70px 4px rgba(0,0,0,.56);transform-origin:50% 100%;transition:transform .42s var(--ease-out),opacity .32s var(--ease),border-radius .32s var(--ease)}.term-bar{position:relative;display:flex;align-items:center;height:38px;padding:0 14px;background:#2c2c2e;border-bottom:1px solid #000;user-select:none}.term-title{position:absolute;inset:0;display:block;padding:0 76px;line-height:38px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font:600 13px/38px var(--font-text);letter-spacing:-.01em;color:#98989d;pointer-events:none}.term-lights{position:relative;z-index:1;display:flex;gap:8px}.tl{position:relative;width:12px;height:12px;padding:0;border:0;border-radius:50%;cursor:pointer;display:grid;place-items:center}.tl::before{content:"";position:absolute;inset:-6px}.tl svg{width:8px;height:8px;opacity:0;transition:opacity .12s;color:rgba(0,0,0,.6)}.term-lights:hover .tl svg,.tl:focus-visible svg{opacity:1}.tl-close{background:#ff5f57}.tl-min{background:#febc2e}.tl-max{background:#28c840}.term-body{height:340px;overflow-y:auto;padding:12px 16px 16px;cursor:text;font:13px/1.6 var(--font-mono);letter-spacing:0;color:#f2f2f7;scrollbar-width:thin;scrollbar-color:#48484a transparent}.term-line{white-space:pre-wrap;word-break:break-word;min-height:1.6em}.term-form{display:flex;align-items:baseline;gap:0}.term-input{flex:1;min-width:0;padding:0;border:0;outline:0;background:0 0;color:#f2f2f7;caret-color:#f2f2f7;font:inherit}.c-ok{color:#30d158}.c-blue{color:#64d2ff}.c-dim{color:#8e8e93}.c-warn{color:#ff9f0a}.c-err{color:#ff453a}.c-pink{color:#ff6482}.c-b{font-weight:700}.term.is-min{transform:translateY(46%) scale(.12);opacity:0;pointer-events:none}.term.is-closed{transform:scale(.94);opacity:0;pointer-events:none}.term.is-max{position:fixed;inset:calc(var(--gn-h) + 16px) 16px 16px;z-index:260;max-width:none;width:auto}.term.is-max .term-body{height:auto;flex:1}.term-backdrop{position:fixed;inset:0;z-index:250;background:rgba(0,0,0,.48);opacity:0;pointer-events:none;transition:opacity .32s var(--ease)}.term-backdrop.is-on{opacity:1;pointer-events:auto}.term-dock{position:absolute;left:50%;bottom:18px;z-index:1;display:flex;gap:10px;padding:8px;border-radius:18px;background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.14);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);transform:translate(-50%,140%);opacity:0;transition:transform .42s var(--ease-out),opacity .32s var(--ease)}.term-dock.is-on{transform:translate(-50%,0);opacity:1}.dock-app{position:relative;width:52px;height:52px;border:0;border-radius:12px;cursor:pointer;display:grid;place-items:center;background:linear-gradient(#3a3a3c,#1c1c1e);color:#f2f2f7;font:600 15px/1 var(--font-mono);box-shadow:inset 0 0 0 1px rgba(255,255,255,.12);transition:transform .24s var(--ease-out)}.dock-app:hover{transform:translateY(-6px) scale(1.08)}.dock-app::after{content:"";position:absolute;bottom:-6px;left:50%;width:4px;height:4px;margin-left:-2px;border-radius:50%;background:rgba(255,255,255,.7);opacity:0}.dock-app.is-running::after{opacity:1}.dock-hint{position:absolute;left:50%;bottom:calc(100% + 10px);transform:translateX(-50%);padding:4px 10px;border-radius:6px;background:rgba(40,40,42,.92);color:#f2f2f7;font:12px/1.4 var(--font-text);white-space:nowrap;pointer-events:none}.term-reopen-msg{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:#6e6e73;font-size:14px;pointer-events:none;opacity:0;transition:opacity .32s var(--ease)}.term-reopen-msg.is-on{opacity:1}html.js [data-hero]{opacity:0;transform:translateY(24px);animation:psg-in 1.2s var(--ease-out) forwards;animation-delay:var(--hd, 0s)}@keyframes psg-in{to{opacity:1;transform:none}}html.js [data-reveal]{opacity:0;transform:translate3d(0,40px,0);transition:opacity 1s var(--ease-out),transform 1s var(--ease-out);transition-delay:var(--rd, 0s)}html.js [data-reveal=fade]{transform:none}html.js [data-reveal=zoom]{transform:scale(.94)}html.js [data-reveal].is-in{opacity:1;transform:none}[data-scale]{transform:scale(var(--s,1));transform-origin:50% 0;will-change:transform}.fill-word{color:var(--fill-off,#d2d2d7);transition:color .25s linear}.fill-word.is-on{color:inherit}.sec-dark [data-fill],.sec-graphite [data-fill]{--fill-off:#424245}html.js .pipe-step{opacity:.3;transform:translateY(14px);transition:opacity .7s var(--ease-out),transform .7s var(--ease-out)}html.js .pipe-step.is-lit{opacity:1;transform:none}html.js .pipe-arrow{transition:color .7s var(--ease-out)}html.js .pipe-arrow.is-lit{color:var(--link-dark)}.caret{display:inline-block;width:8px;height:1.1em;margin-left:2px;background:currentColor;vertical-align:text-bottom;animation:psg-blink 1.06s steps(1) infinite}@keyframes psg-blink{50%{opacity:0}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}html.js .pipe-step,html.js [data-hero],html.js [data-reveal]{opacity:1;transform:none;animation:none;transition:none}html.js .pipe-arrow{color:var(--link-dark)}[data-scale]{transform:none}.fill-word{color:inherit}.caret{animation:none}*,::after,::before{transition-duration:NaNs!important;animation-duration:NaNs!important}}@media (max-width:1068px){.g-4{grid-template-columns:repeat(2,minmax(0,1fr))}.gn-links{gap:14px}.gn-name{display:none}}@media (max-width:833px){:root{--gutter:16px}.g-2,.g-3,.g-4,.gf-cols,.hero-media,.hero-split,.split,.split-even{grid-template-columns:minmax(0,1fr)}.hero-split{text-align:center}.hero-split .hero-in{align-items:center}.hero-split .btn-row,.hero-split .links-row{justify-content:center}.gn-name{display:inline}.gn-burger{display:block}.gn-links{position:fixed;inset:var(--gn-h) 0 0;z-index:190;flex-direction:column;align-items:stretch;gap:0;padding:20px 40px 40px;overflow-y:auto;background:rgba(251,251,253,.98);visibility:hidden;opacity:0;transition:opacity .32s var(--ease),visibility 0s linear .32s}.menu-open .gn{-webkit-backdrop-filter:none;backdrop-filter:none;background:#fbfbfd}.nav-dark.menu-open .gn{background:#161617}.nav-dark .gn-links{background:rgba(22,22,23,.98)}.menu-open .gn-links{visibility:visible;opacity:1;transition:opacity .32s var(--ease)}.gn-links li{opacity:0;transform:translateY(-8px);transition:opacity .3s var(--ease),transform .3s var(--ease)}.menu-open .gn-links li{opacity:1;transform:none;transition-delay:calc(var(--i) * 30ms + 60ms)}.gn-links a{min-height:52px;font:600 28px/1.14 var(--font-display);letter-spacing:.007em;color:var(--ink)}.nav-dark .gn-links a{color:var(--ink-on-dark)}.ln-menu a:not(.ln-cta){display:none}.row{grid-template-columns:minmax(0,1fr);gap:6px}.pipe{flex-direction:column}.pipe-arrow{justify-content:center;transform:rotate(90deg);height:20px}.spec thead{display:none}.spec tr{display:grid;grid-template-columns:64px minmax(0,1fr);column-gap:12px;padding:18px 0;border-bottom:1px solid var(--line)}.spec td{padding:0;border:0}.spec td:last-child{grid-column:2;padding-top:4px}.term-stage{min-height:420px}.term-body{height:300px;font-size:12px}.term-title{font-size:12px}.term.is-max{inset:calc(var(--gn-h) + 8px) 8px 8px}.hero-media .portrait{aspect-ratio:1/1}}.admin-bar .gn,.admin-bar .ln{top:32px}body.admin-bar:has(.ln) .gn{top:0}@media (max-width:782px){.admin-bar .gn,.admin-bar .ln{top:46px}body.admin-bar:has(.ln) .gn{top:0}}@media (max-width:600px){.admin-bar .gn,.admin-bar .ln{top:0}}@view-transition{navigation:auto}::view-transition-new(root),::view-transition-old(root){animation-duration:.35s}.card{position:relative}.avatar-ring{position:relative;flex-shrink:0;width:128px;height:128px;margin:0 0 4px;padding:5px;border-radius:50%}.avatar-ring::after,.avatar-ring::before{content:"";position:absolute;border-radius:50%}.avatar-ring::before{inset:0;background:conic-gradient(from 0deg,#0071e3,#64d2ff,#30d158,#0071e3);animation:psg-spin 8s linear infinite}.avatar-ring::after{inset:2.5px;background:var(--bg)}.avatar-ring img{position:relative;z-index:1;width:100%;height:100%;border-radius:50%;object-fit:cover;object-position:center 20%;transition:transform .6s var(--ease-out)}.avatar-ring:hover img{transform:scale(1.06)}.avatar-ring.is-sm{width:112px;height:112px}html.js .avatar-ring[data-hero]{animation:psg-pop .9s cubic-bezier(.34,1.56,.64,1) forwards}@keyframes psg-spin{to{transform:rotate(1turn)}}@keyframes psg-pop{from{opacity:0;transform:scale(.6)}to{opacity:1;transform:none}}.title-avatar{display:flex;align-items:center;gap:28px;max-width:980px;text-align:left}.title-avatar .t-hero{max-width:none}@media (min-width:834px){.has-fly>a::after{content:"";display:inline-block;width:.34em;height:.34em;margin-left:6px;border-right:1.2px solid currentColor;border-bottom:1.2px solid currentColor;transform:translateY(-2px) rotate(45deg);transition:transform .32s var(--ease)}.has-fly.is-open>a::after,.has-fly:focus-within>a::after,.has-fly:hover>a::after{transform:translateY(1px) rotate(225deg)}.gn-fly{position:absolute;left:0;right:0;top:100%;z-index:5;background:rgba(251,251,253,.98);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);box-shadow:0 18px 30px -18px rgba(0,0,0,.18);visibility:hidden;opacity:0;transform:translateY(-6px);transition:opacity .32s var(--ease),transform .32s var(--ease),visibility 0s linear .32s}.has-fly.is-open .gn-fly,.has-fly:focus-within .gn-fly,.has-fly:hover .gn-fly{visibility:visible;opacity:1;transform:none;transition:opacity .32s var(--ease),transform .32s var(--ease)}.gn-fly-in{display:flex;flex-direction:column;gap:14px;padding-top:32px;padding-bottom:48px}.gn-fly-title{font-size:12px;color:var(--ink-2)}.gn-fly-list{list-style:none;display:flex;flex-direction:column;gap:6px}.gn-fly-list li{opacity:0;transform:translateY(-4px);transition:opacity .3s var(--ease),transform .3s var(--ease)}.has-fly.is-open .gn-fly-list li,.has-fly:focus-within .gn-fly-list li,.has-fly:hover .gn-fly-list li{opacity:1;transform:none;transition-delay:calc(var(--j) * 25ms + 60ms)}.gn-links .gn-fly-list a{min-height:0;font:600 24px/1.17 var(--font-display);letter-spacing:.009em;color:var(--ink)}.gn-links .gn-fly-list a:hover,.gn-links .gn-fly-list a[aria-current=page]{color:var(--link)}.nav-dark .gn-fly{background:rgba(22,22,23,.98)}.nav-dark .gn-fly-title{color:var(--ink-3)}.nav-dark .gn-links .gn-fly-list a{color:var(--ink-on-dark)}.nav-dark .gn-links .gn-fly-list a:hover,.nav-dark .gn-links .gn-fly-list a[aria-current=page]{color:var(--link-dark)}}.gn-scrim{position:fixed;inset:0;z-index:160;background:rgba(232,232,237,.4);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);opacity:0;visibility:hidden;transition:opacity .32s var(--ease),visibility 0s linear .32s}.nav-dark .gn-scrim{background:rgba(0,0,0,.4)}body.fly-open .gn-scrim{opacity:1;visibility:visible;transition:opacity .32s var(--ease)}a.ln-title:hover{color:var(--link);text-decoration:none}.ln.is-dark a.ln-title:hover{color:var(--link-dark)}.ln-menu a.is-current{color:var(--ink);font-weight:600;box-shadow:inset 0 -2px 0 var(--blue)}.ln.is-dark .ln-menu a.is-current{color:#fff;box-shadow:inset 0 -2px 0 var(--link-dark)}.ico{display:inline-grid;place-items:center;width:48px;height:48px;margin-bottom:8px;border-radius:14px;background:rgba(0,113,227,.08);color:var(--blue);transition:transform .5s var(--ease-out),background-color .3s var(--ease)}.ico svg{width:26px;height:26px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}.card-dark .ico{background:rgba(41,151,255,.15);color:var(--link-dark)}.card:hover .ico{transform:scale(1.08) rotate(-4deg);background:rgba(0,113,227,.14)}html.js .ico svg *{stroke-dasharray:1;stroke-dashoffset:1}html.js .is-in .ico svg *{animation:psg-draw 1.1s var(--ease-out) forwards;animation-delay:calc(var(--rd, 0s) + .25s)}@keyframes psg-draw{to{stroke-dashoffset:0}}.explore-card{min-height:280px}.explore-more{margin-top:auto;padding-top:12px;font-size:15px;color:var(--link)}a.card:hover .more::after{transform:translate(3px,-.1em) rotate(45deg)}.next-tile{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:24px;row-gap:4px;align-items:center;padding:32px 36px;border-radius:var(--r-tile);background:var(--bg-alt);color:var(--ink);transition:background-color .3s var(--ease)}.next-tile .t-caption,.next-tile .t-card-lg{grid-column:1}.next-arrow{grid-column:2;grid-row:1/3;width:52px;height:52px;border-radius:50%;display:grid;place-items:center;background:var(--blue);color:#fff;transition:transform .45s var(--ease-out)}.next-arrow svg{width:22px;height:22px}.next-tile:hover{text-decoration:none;background:#ececf0}.next-tile:hover .next-arrow{transform:translateX(6px)}.status::before{animation:psg-ping 2.2s var(--ease) infinite}@keyframes psg-ping{0%{box-shadow:0 0 0 0 currentColor}100%,70%{box-shadow:0 0 0 6px transparent}}.btn-primary{position:relative;overflow:hidden}.btn-primary::after{content:"";position:absolute;top:0;bottom:0;left:-60%;width:40%;background:linear-gradient(100deg,transparent,rgba(255,255,255,.35),transparent);transform:skewX(-20deg);transition:left .7s var(--ease-out);pointer-events:none}.btn-primary:hover::after{left:130%}.progress{position:fixed;top:0;left:0;right:0;z-index:300;height:2px;background:var(--blue);transform-origin:0 50%;transform:scaleX(var(--p,0));pointer-events:none}.admin-bar .progress{top:32px}.to-top{position:fixed;right:20px;bottom:20px;z-index:120;width:44px;height:44px;border:0;border-radius:50%;display:grid;place-items:center;cursor:pointer;color:#fff;background:rgba(29,29,31,.72);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);opacity:0;transform:translateY(12px) scale(.9);pointer-events:none;transition:opacity .32s var(--ease),transform .45s var(--ease-out),background-color .24s var(--ease)}.to-top.is-on{opacity:1;transform:none;pointer-events:auto}.to-top:hover{background:var(--blue)}.to-top svg{width:18px;height:18px}.tilt::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;opacity:0;transition:opacity .3s var(--ease);background:radial-gradient(circle at var(--mx,50%) var(--my,50%),rgba(255,255,255,.6),transparent 55%)}.card-dark.tilt::after{background:radial-gradient(circle at var(--mx,50%) var(--my,50%),rgba(255,255,255,.1),transparent 55%)}.tilt:hover::after{opacity:1}.gf-cols{grid-template-columns:repeat(4,minmax(0,1fr))}.gf a{background:linear-gradient(currentColor,currentColor) 0 100%/0 1px no-repeat;transition:background-size .3s var(--ease)}.gf a:hover{text-decoration:none;background-size:100% 1px}@media (max-width:833px){.gf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.title-avatar{flex-direction:column;text-align:center;gap:16px}.gn-fly-title{display:none}.gn-fly-in{padding:0 0 8px 14px}.gn-fly-list{list-style:none}.gn-links .gn-fly-list a{min-height:38px;font:400 17px/1.3 var(--font-text);letter-spacing:-.022em;color:var(--ink-2)}.nav-dark .gn-links .gn-fly-list a{color:var(--ink-on-dark-2)}.next-tile{padding:24px}.explore-card{min-height:0}}@media (max-width:782px){.admin-bar .progress{top:46px}}@media (prefers-reduced-motion:reduce){.avatar-ring::before,.status::before{animation:none}html.js .avatar-ring[data-hero]{animation:none;opacity:1;transform:none}html.js .ico svg *{stroke-dashoffset:0;animation:none}@view-transition{navigation:none}}@media (max-width:833px){.gn-links{background:#fbfbfd}.nav-dark .gn-links{background:#161617}}html.js [data-hero=fade]{transform:none;animation-name:psg-fade}@keyframes psg-fade{to{opacity:1}}.term{container-type:inline-size;--art-h:320px}.term.is-max{--art-h:calc(100vh - var(--gn-h) - 110px)}.term-art{margin:6px 0;white-space:pre;overflow:hidden;font-size:5px;font-size:min(calc((100cqw - 32px) / 112 / .62), calc(var(--art-h) / 70 / 1.02));line-height:1.02;letter-spacing:0;color:#f2f2f7;text-shadow:0 0 6px rgba(255,69,58,.35)}