/* Zambo shared polish layer: tokens, shared nav/footer, motion. Loaded on the five polished routes. */
:root{
  --app-font-sans:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  --app-font-display:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  --app-font-mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --ease-entrance:cubic-bezier(.22,1,.36,1);--ease-hover:cubic-bezier(.4,0,.2,1);
  --display-hero:clamp(44px,5.2vw,72px);--display-section:clamp(2rem,4vw,3.25rem);--body:clamp(1.0625rem,1.5vw,1.125rem);
  --s1:8px;--s2:16px;--s3:24px;--s4:32px;--s6:48px;--s8:64px;--s12:96px;--s16:128px;
  --zp-bg:#070807;--zp-surface:#0f120e;--zp-line:rgba(255,255,255,.12);--zp-text:#f4f5ef;--zp-body:#d3d9cd;--zp-muted:#a2aa9c;--zp-accent:#c8f135;--zp-ink:#070807;
  --zp-mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --zp-sans:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  --zp-nav-h:64px;
}

html.zp-on{scroll-behavior:smooth;scroll-padding-top:calc(var(--zp-nav-h) + 16px)}
.zp{background:var(--zp-bg);color:var(--zp-text);overflow-x:clip;font-family:var(--zp-sans)}
body.zp,body.zp #root{background-color:#070807}
@keyframes zambo-route-in{from{opacity:0}to{opacity:1}}
#root.zp-route-enter{animation:zambo-route-in 250ms ease-out both}
body.zp-route-leaving main{opacity:0;transition:opacity 250ms ease-out}
html,body{background-color:#070807}
@view-transition{navigation:auto}
::view-transition-old(root){animation:zambo-route-in 250ms ease-out reverse both}
::view-transition-new(root){animation:zambo-route-in 250ms ease-out both}
.zp :focus-visible{outline:2px solid var(--zp-accent);outline-offset:3px}

/* shared nav */
[data-zp-nav-host]{position:sticky;top:0;z-index:50}
.zp-nav{position:sticky;top:0;z-index:50;background:rgba(7,8,7,.86);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border-bottom:1px solid var(--zp-line);transition:background 180ms ease,border-color 180ms ease,box-shadow 180ms ease,backdrop-filter 180ms ease}
.zp-nav.is-scrolled{background:rgba(7,8,7,.97);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border-bottom-color:rgba(200,241,53,.24);box-shadow:0 8px 24px rgba(0,0,0,.28)}
.zp-nav-in{width:min(1240px,calc(100% - 48px));height:var(--zp-nav-h);margin:auto;display:flex;align-items:center;gap:var(--s3);transition:height 250ms var(--ease-hover)}
.zp-nav.is-condensed{--zp-nav-h:52px}
.zp-logo{display:flex;align-items:center;min-height:48px;gap:10px;color:var(--zp-text)!important;text-decoration:none;font:700 12px/1 var(--zp-mono);letter-spacing:.16em}
.zp-logo b{display:grid;place-items:center;width:30px;height:30px;border-radius:8px;background:var(--zp-accent);color:var(--zp-ink);font:900 17px/1 var(--zp-sans)}
.zp-links{display:flex;gap:var(--s1);margin-left:auto}
.zp-links a{min-height:48px;padding:0 14px;display:inline-flex;align-items:center;border-radius:8px;color:var(--zp-body)!important;text-decoration:none;font:700 11px/1 var(--zp-mono);letter-spacing:.06em;text-transform:uppercase;transition:color 200ms var(--ease-hover),background 200ms var(--ease-hover)}
.zp-links a:hover{background:rgba(255,255,255,.07)}
.zp-links a[aria-current=page]{color:var(--zp-accent)!important;box-shadow:inset 0 -2px 0 var(--zp-accent);border-radius:8px 8px 0 0}
.zp-cta{min-height:48px;padding:0 16px;display:inline-flex;align-items:center;border-radius:8px;background:var(--zp-accent);color:var(--zp-ink)!important;text-decoration:none;font:800 12px/1 var(--zp-sans);opacity:0;visibility:hidden;transform:translateY(-4px);transition:opacity 250ms var(--ease-hover),transform 250ms var(--ease-hover),visibility 250ms}
.zp-nav.is-condensed .zp-cta{opacity:1;visibility:visible;transform:none}
.zp-menu{display:none;margin-left:auto;width:48px;height:48px;border:1px solid var(--zp-line);border-radius:10px;background:none;color:var(--zp-text);cursor:pointer;font:700 11px var(--zp-mono)}
.zp-nav-menu{display:none;margin-left:auto}
.zp-nav-menu>summary{list-style:none;place-items:center}
.zp-nav-menu>summary::-webkit-details-marker{display:none}
@media(max-width:800px){.zp-nav-menu{display:block}.zp-nav-menu>.zp-menu{display:grid}.zp-nav-menu[open]+.zp-links{display:flex}}
@media(min-width:801px) and (max-width:1100px){.zp-nav-in{gap:var(--s1)}.zp-links a{padding-inline:8px;font-size:10px}.zp-logo{font-size:11px}.zp-cta{padding-inline:12px}}

.zp-skip{position:fixed;left:16px;top:-64px;z-index:120;padding:12px 16px;border-radius:8px;background:var(--zp-accent);color:var(--zp-ink)!important;font:800 14px var(--zp-sans);text-decoration:none;transition:transform 200ms var(--ease-hover)}
.zp-skip:focus{transform:translateY(80px)}
.zp #zp-main:focus{outline:none}
.zp .aer-copy.is-failed{background:#ffb45c;color:var(--zp-ink);border-color:#ffb45c}
/* Mobile navigation has one visible state: the opened drawer, or the no-JS details menu. */
/* no horizontal overflow at 360px: long words wrap, flex/grid children may shrink */
html:has(body.zp){overflow-x:clip}
.zp main{min-width:0}
.zp:not(.zp-home) main :is(h1,h2,h3,p,li,a,td,th,caption,code,dd,dt){overflow-wrap:anywhere}
.zp:not(.zp-home) main :is(section,div,article,table){min-width:0;max-width:100%}
.zp:not(.zp-home) main pre{max-width:100%;overflow-x:auto}
/* shared footer */
.zp-footer{margin-top:var(--s12);border-top:1px solid var(--zp-line);background:var(--zp-bg);color:var(--zp-muted);font-family:var(--zp-sans)}
.zp-footer-in{width:min(1160px,calc(100% - 48px));margin:auto;padding:var(--s8) 0 var(--s4)}
.zp-footer-tag{margin:var(--s2) 0 var(--s6);color:var(--zp-muted);font-size:1rem}
.zp-footer-groups{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--s4)}
.zp-footer-groups div{display:flex;flex-direction:column;gap:4px}
.zp-footer-groups strong{margin-bottom:var(--s1);color:var(--zp-accent);font:700 11px/1.4 var(--zp-mono);letter-spacing:.1em;text-transform:uppercase}
.zp-footer-groups a{min-height:32px;display:flex;align-items:center;color:var(--zp-muted)!important;text-decoration:none;font-size:14px}
.zp-footer-groups a:hover{color:var(--zp-text)!important}
.zp-footer-bottom{margin-top:var(--s6);padding-top:var(--s2);display:flex;justify-content:space-between;gap:var(--s2);flex-wrap:wrap;border-top:1px solid var(--zp-line);font:12px/1.6 var(--zp-mono)}
.zp-footer-bottom a{color:var(--zp-muted)!important}

/* legacy per-page chrome replaced by the shared nav/footer */
[data-zp-legacy]{display:none!important}

/* typography on the four non-home pages */
.zp:not(.zp-home) main h1{font-size:var(--display-hero);font-weight:800;letter-spacing:-.03em;line-height:1.02;text-wrap:balance;max-width:20ch}
.zp:not(.zp-home) main h2{font-size:var(--display-section);font-weight:750;letter-spacing:-.02em;line-height:1.08;text-wrap:balance}
.zp:not(.zp-home) main :is(p,li){font-size:var(--body);line-height:1.65}
.zp:not(.zp-home) main :is(p,li):not(.eyebrow){color:var(--zp-body)}
.zp:not(.zp-home) main > p,.zp:not(.zp-home) main section > p{max-width:68ch}
.zp:not(.zp-home) main :is(code,pre,small,th,td,caption,.eyebrow,.status-badge){font-size:revert}
.zp:not(.zp-home) main :is(th,td,caption){font-size:.9375rem;line-height:1.5}
.zp:not(.zp-home) main .eyebrow{font-size:12px;color:var(--zp-accent)}
.zp:not(.zp-home) main{max-width:1000px;margin-inline:auto;padding-inline:24px}
.zp-impl main{max-width:1120px}
.zp:not(.zp-home) main section{scroll-margin-top:80px}
.zp-home h1,.zp-home h2{text-wrap:balance}
.zp-home .aer-hero h1{font-size:var(--display-hero);font-weight:800;letter-spacing:-.03em;line-height:1.02}
.zp-home .aer-section h2,.zp-home .aer-final h2{font-size:var(--display-section);font-weight:750;letter-spacing:-.02em;line-height:1.08}
.zp-home .aer-section>p:not(.aer-kicker),.zp-home .aer-swarm>div>p:not(.aer-kicker),.zp-home .aer-final>p:not(.aer-kicker){font-size:var(--body);line-height:1.65;max-width:68ch;color:var(--zp-body)}
.zp-home .aer-muted,.zp-home .aer-price-grid article p,.zp-home .aer-collector-grid article p{color:var(--zp-muted)}
.zp-home .aer-standard{padding-bottom:var(--s8)}

/* buttons and cards */
.zp :is(.aer-primary,.aer-secondary,.install-btn,.zp-cta,.zp-sticky a){transition:transform 200ms var(--ease-hover),box-shadow 200ms var(--ease-hover),opacity 200ms var(--ease-hover)}
.zp :is(.aer-primary,.aer-secondary,.install-btn,.zp-sticky a):hover{transform:translateY(-2px)}
.zp :is(.aer-primary,.aer-secondary,.install-btn,.zp-sticky a,.aer-copy,.zp-cta):active{transform:scale(.98);transition-duration:150ms}
.zp .aer-copy{transition:transform 150ms var(--ease-hover),background 300ms var(--ease-hover),color 300ms var(--ease-hover)}
.zp .aer-copy.is-copied{background:var(--zp-accent);color:var(--zp-ink)}
.zp .aer-copy svg{transition:transform 300ms var(--ease-entrance)}
.zp .aer-copy.is-copied svg{transform:scale(1.15) rotate(-8deg)}
.zp-home .aer-snippet,.zp-home .aer-command{padding:14px;display:flex;flex-direction:column;gap:10px}
.zp-home .aer-snippet .aer-copy,.zp-home .aer-command .aer-copy{position:static;align-self:flex-start;min-height:48px}
.zp-home .aer-snippet pre{white-space:pre-wrap;overflow-wrap:anywhere}
.zp-home .aer-snippet code{white-space:pre-wrap;overflow-wrap:anywhere}

/* Homepage motion lives in src/pages/home-motion.css: exactly two decorative animations (hero receipt, swarm graph). */
.zp-home .aer-status i{animation:none}

/* homepage receipt legibility */
.zp-home .aer-receipt-top{font-size:12px;color:var(--zp-muted)}
.zp-home .aer-receipt-row span{color:var(--zp-muted);font-size:12px}
.zp-home .aer-receipt-row strong{color:var(--zp-text)}
.zp-home .aer-receipt-row code{color:#c3cabd;font-size:12px}
.zp-home .aer-root span{font-size:12px}
.zp-home .aer-root code{font-size:12px}
.zp-home .aer-receipt small{font-size:12px;color:var(--zp-muted)}
.zp-home .aer-collector-grid article>.aer-copy{position:static;width:100%;margin-top:12px;justify-content:center;min-height:48px}
/* continuity strip and install steps */
.zp-strip{margin:var(--s6) 0;display:grid;grid-template-columns:repeat(3,1fr);gap:var(--s2);counter-reset:zp;list-style:none;padding:0}
.zp-step{position:relative;padding:var(--s3);border:1px solid var(--zp-line);border-radius:14px;background:var(--zp-surface);list-style:none}
.zp-step:not(:last-child)::after{content:"";position:absolute;top:50%;right:-17px;width:18px;height:2px;background:var(--zp-accent);transform:translateY(-50%)}
.zp-step span{display:block;color:var(--zp-accent);font:700 12px/1 var(--zp-mono);letter-spacing:.12em}
.zp-step strong{display:block;margin:var(--s1) 0;color:var(--zp-text);font-size:1.25rem;line-height:1.2}
.zp-step p{margin:0!important;color:var(--zp-body)!important;font-size:1rem!important;line-height:1.55!important}
.zp-step a{color:var(--zp-accent)}
.zp-strip-note{color:var(--zp-muted)!important;font-size:.9375rem!important}

/* implementations: legible badges */
.zp-impl .status-badge{min-height:28px;padding:4px 12px;letter-spacing:.02em}

.zp-home .aer-pypi{margin-top:10px;min-height:48px}
/* branded loader: functional, pointer-events none, hard cap 2.5s via CSS even if script fails */
/* sticky mobile CTA */
.zp-sticky{display:none!important}
.zp-sticky[hidden]{display:none!important}

@media(max-width:800px){
  .zp-nav-in{width:calc(100% - 36px)}
  .zp-menu{display:block}
  .zp-cta{display:none}
  .zp-links{display:none;position:absolute;top:100%;left:0;right:0;margin:0;padding:var(--s2);flex-direction:column;background:rgba(7,8,7,.98);border-bottom:1px solid var(--zp-line)}
  .zp-links.is-open{display:flex}
  .zp-links a{min-height:48px}
  .zp-footer-groups{grid-template-columns:repeat(2,1fr)}
  .zp-footer-groups a,.zp-footer-bottom a{min-height:48px}
  .zp-strip{grid-template-columns:1fr}
  .zp-step:not(:last-child)::after{top:auto;bottom:-17px;right:auto;left:50%;width:2px;height:18px}
  .zp-home .zp-sticky,.zp-install .zp-sticky{display:block!important;position:fixed;left:0;right:0;bottom:0;z-index:40;padding:var(--s1) var(--s2) calc(var(--s1) + env(safe-area-inset-bottom));background:rgba(7,8,7,.94);border-top:1px solid var(--zp-line);transform:translateY(110%);transition:transform 300ms var(--ease-entrance);visibility:hidden}
  .zp-sticky.is-on{transform:none;visibility:visible}
  .zp-sticky a{min-height:48px;display:flex;align-items:center;justify-content:center;border-radius:10px;background:var(--zp-accent);color:var(--zp-ink)!important;text-decoration:none;font:800 14px var(--zp-sans)}
  .zp-has-sticky{padding-bottom:calc(72px + env(safe-area-inset-bottom))}
  .zp-home .aer-collector-grid{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;gap:12px;padding:0 16px 12px 0;margin-right:-18px;-webkit-overflow-scrolling:touch}
  .zp-home .aer-collector-grid article{flex:0 0 calc(100% - 16px);scroll-snap-align:start}
  .zp-install .tablist{display:flex;flex-wrap:nowrap;overflow-x:auto;scroll-snap-type:x mandatory;gap:8px;padding-right:16px}
  .zp-install .tablist .tab{flex:0 0 auto;scroll-snap-align:start;min-height:48px;display:inline-flex;align-items:center}
  /* leaderboard table to cards */
  .zp-impl .table-scroll{overflow:visible;border:0;background:none}
  .zp-impl table,.zp-impl tbody,.zp-impl tr,.zp-impl td,.zp-impl caption{display:block;min-width:0;width:100%}
  .zp-impl thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
  .zp-impl tr{margin-bottom:12px;padding:8px 16px;border:1px solid var(--zp-line);border-radius:12px;background:var(--zp-surface)}
  .zp-impl td{display:grid;grid-template-columns:104px 1fr;gap:12px;padding:10px 0;border-top:1px solid var(--zp-line);overflow-wrap:anywhere}
  .zp-impl td:first-child{border-top:0}
  .zp-impl td::before{content:attr(data-label);color:var(--zp-accent);font:700 11px/1.6 var(--zp-mono);text-transform:uppercase}
}
@media(max-width:560px){.zp-footer-groups{grid-template-columns:1fr 1fr}.zp:not(.zp-home) main{padding-inline:18px}}
@media(pointer:coarse){.zp :is(.install-btn,.aer-primary,.aer-secondary,.aer-copy,button,.aer-text-link,.aer-nav-cta,.tab),.zp-links a,.zp-cta,.zp-menu,.zp-footer-groups a,.zp-footer-bottom a,.zp-sticky a{min-height:48px}.zp .aer-text-link,.zp-footer-bottom a{display:inline-flex;align-items:center}}
@media(prefers-reduced-motion:reduce){
  html.zp-on{scroll-behavior:auto}
  .zp *,.zp *::before,.zp *::after{animation:none!important;transition:none!important}
  #root.zp-route-enter{animation:none!important}
  body.zp-route-leaving #root{opacity:1!important}
  .zp button:active,.zp a:active{transform:none!important}
  @view-transition{navigation:none}
}
.zp-seo-details{width:min(1160px,calc(100% - 48px));margin:0 auto 20px;padding:12px 0 0;border-top:1px solid var(--zp-line);color:var(--zp-muted);font:400 12px/1.6 var(--zp-sans)}
.zp-seo-details>summary{min-height:42px;display:flex;align-items:center;cursor:pointer;color:var(--zp-muted);font:600 11px var(--zp-mono);letter-spacing:.04em;list-style:none}
.zp-seo-details>summary::-webkit-details-marker{display:none}
.zp-seo-details>summary::after{content:"+";margin-left:auto;color:var(--zp-accent);font-size:16px}
.zp-seo-details[open]>summary::after{content:"−"}
.zp-seo-details>p{max-width:76ch;margin:12px 0;color:var(--zp-muted);font-size:12px;line-height:1.65}
.zp-seo-details>strong{display:block;margin:12px 0 4px;color:var(--zp-text);font:700 10px var(--zp-mono);letter-spacing:.08em;text-transform:uppercase}
.zp-seo-details>a{display:inline-flex;align-items:center;min-height:36px;margin-right:8px;color:var(--zp-muted);font-size:11px;text-decoration:none}
.zp-seo-details>a:hover{color:var(--zp-accent)}
.zambo-canonical-hub.zp-seo-details{width:min(1160px,calc(100% - 48px));max-width:none;margin:0 auto 20px;padding:12px 0 0;border-top:1px solid var(--zp-line);background:none}
.zambo-canonical-hub.zp-seo-details>summary{color:var(--zp-muted);font:600 11px var(--zp-mono);letter-spacing:.04em;text-transform:none}
.zp-seo-details .zambo-social-row{margin-top:8px;color:var(--zp-muted);font-size:11px}
@media(max-width:800px){.zp-seo-details{width:calc(100% - 36px)}}

/* React pages in the v3 scope hide legacy page chrome, never the shared chrome. */
body.zp-r #root>:is(div,main,section)>:is(nav,header,footer):not([data-zp-nav]):not([data-zp-footer]),
body.zp-r #root>:is(nav,header,footer):not([data-zp-nav]):not([data-zp-footer]),
body.zp-r #root>:is(div,main)>div:first-child>:is(nav,footer):first-child:not([data-zp-nav]):not([data-zp-footer]),
body.zp-r #root>:is(div,main)>:is(div,section)>footer:last-child:not([data-zp-footer]){display:none!important}
body.zp-r{background:var(--zp-bg)}
body.zp-r .zp-footer{margin-top:0}
.zp-footer-groups details{min-width:0}
.zp-footer-groups summary{color:var(--zp-accent);font:700 12px/1.4 var(--zp-mono);min-height:48px;display:flex;align-items:center;justify-content:space-between;cursor:pointer;list-style:none}
.zp-footer-groups summary::after{content:"+";font-size:20px}
.zp-footer-groups details[open]>summary::after{content:"−"}
.zp-footer-groups details>div{display:flex;flex-direction:column}
@media(min-width:801px){.zp-footer-groups details[open]>summary::after{display:none}}
@media(max-width:800px){
  .zp-footer-groups{display:flex;flex-direction:column;gap:0}
  .zp-footer-groups details{border-bottom:1px solid var(--zp-line)}
  .zp-footer-groups details>div{padding-bottom:16px}
  .zp-nav:not([data-zp-wired]) .zp-links{display:none}
  .zp-nav .zp-nav-menu[open]+.zp-links{display:flex}
}
.zp-menu[hidden]{display:none!important}
@media(max-width:800px){body.zp-home .zp-sticky{display:block}body.zp-home{padding-bottom:90px}}
@media(pointer:coarse){.zp :is(a,button,[role="button"],summary){min-height:48px}.zp a:not([hidden]):not(.zp-skip){display:inline-flex;align-items:center}.zp-footer-groups summary{display:flex}}
@media(max-width:430px){.zp:not(.zp-home) main h1{font-size:clamp(32px,8.4vw,36px);overflow-wrap:normal;word-break:normal}}
@media(min-width:801px){.zp-home .aer-hero h1 em{display:block}}
