/* Header gallery extends the existing Plex typography and semantic palette. */
.hv-gallery{--hv-ease:cubic-bezier(.77,0,.175,1);padding-block:8px 56px}
.hv-gallery button,.hv-gallery select{font:inherit}
.hv-gallery .control-secondary{min-height:44px;padding:10px 16px;border-radius:6px;font-size:14px}
.hv-gallery button:disabled{cursor:default;color:var(--muted);opacity:.65}
.hv-gallery :is(button,a,select):focus-visible{outline:2px solid var(--accent-text);outline-offset:5px}
.hv-gallery ::selection{background:var(--accent);color:var(--paper)}
.hv-tools{display:flex;align-items:end;flex-wrap:wrap;gap:20px 28px;padding-block:20px 24px;border-bottom:1px solid var(--divider)}
.hv-tools label{display:grid;gap:8px;font-size:13px;color:var(--muted)}
.hv-tools select{padding:10px 36px 10px 12px;min-height:44px;color:var(--text);background:var(--paper);border:1px solid var(--control-border);border-radius:6px}
.hv-tools output{font-size:14px;color:var(--muted);padding-bottom:12px;margin-left:auto}
.hv-gallery .hv-description{font-size:15px;line-height:1.65;color:var(--muted);max-width:72ch;margin:14px 0 28px}
.hv-section{padding-top:44px}
.hv-section>h2{font-size:30px}
.hv-icon-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0 28px}
.hv-icon-item{min-width:0;padding-block:24px 20px;border-top:1px solid var(--line);scroll-margin-top:24px}
.hv-icon-stage{height:104px;display:flex;align-items:center;justify-content:flex-start}
.hv-icon{display:block;width:48px;height:48px;color:var(--accent-text);flex:none}
.hv-icon-grid[data-style="tile"] .hv-icon-stage>.hv-icon{background:var(--surface);box-sizing:content-box;padding:18px;border-radius:12px}
.hv-icon-grid[data-style="accent"] .hv-icon-stage>.hv-icon{background:var(--accent-text);color:var(--paper);box-sizing:content-box;padding:18px;border-radius:12px}
.hv-icon-item h3{font-size:17px;font-weight:500}
.hv-item-tools{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;margin-top:10px}
.hv-item-tools>a{font-family:PlexMono,monospace;font-size:11px;color:var(--muted);text-underline-offset:4px}
.hv-gallery .hv-item-tools button{font-size:12px;min-height:38px;padding:6px 0;color:var(--accent-text)}
.hv-art-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:36px 24px}
.hv-art-item{min-width:0;scroll-margin-top:24px}
.hv-art-stage{background:var(--surface);border-radius:6px;overflow:hidden;padding:8px}
.hv-art-caption{padding-top:18px}
.hv-art-caption h3{font-size:20px}
.hv-art-caption p{color:var(--muted);font-size:14px;line-height:1.55;margin:10px 0}
.hv-diagram{display:block;width:100%;height:auto;overflow:visible;color:var(--accent-text)}
.hv-diagram .hv-wire{stroke:var(--divider)}
.hv-diagram .hv-node>rect{fill:var(--paper);stroke:var(--divider)}
.hv-diagram .hv-core>rect{fill:var(--accent-text);stroke:var(--accent-text)}
.hv-diagram .hv-core>svg{color:var(--paper)}
.hv-diagram .hv-dot,.hv-diagram .hv-packet,.hv-diagram .hv-release-marker{fill:var(--accent-text);stroke:none}
.hv-diagram .hv-packet{opacity:0}
.hv-diagram .hv-plane{fill:var(--paper);stroke:var(--accent-text)}
.hv-diagram .hv-ring,.hv-diagram .hv-guard{stroke:var(--accent-text);opacity:.35}
.hv-diagram .hv-check{stroke-width:3}
.hv-diagram text{fill:var(--muted);stroke:none;font-family:Plex,Arial,sans-serif;font-size:12px;text-anchor:middle}
.hv-motion-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:48px 28px;margin-top:36px}
.hv-motion-item{min-width:0;scroll-margin-top:24px}
.hv-motion-item:first-child{grid-column:1/-1}
.hv-motion-caption{display:flex;align-items:baseline;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:18px}
.hv-motion-caption h2{font-size:23px}
.hv-motion-caption>span{font-size:13px;color:var(--muted)}
.hv-hero,.hv-hero *{box-sizing:border-box}
.hv-hero{--hv-ease:cubic-bezier(.77,0,.175,1);display:grid;grid-template-columns:1fr;align-items:center;background:var(--surface);border-radius:6px;overflow:hidden;position:relative;container-type:inline-size}
.hv-hero-copy{padding:32px 32px 0;position:relative;z-index:1}
.hv-hero-copy>.hv-icon{width:28px;height:28px;margin-bottom:24px}
.hv-hero-copy h3{font-size:clamp(26px,2.6vw,36px);font-weight:500;line-height:1.15;letter-spacing:-.025em;max-width:18ch;text-wrap:balance}
.hv-hero-copy p{font-size:15px;color:var(--muted);line-height:1.6;max-width:35ch;margin-top:16px}
.hv-hero-art{width:100%;max-width:480px;justify-self:center;padding:8px 20px 20px}
.hv-motion-item:first-child .hv-hero{grid-template-columns:1fr 1.1fr;min-height:370px}
.hv-motion-item:first-child .hv-hero-copy{padding:40px}
.hv-motion-item:first-child .hv-hero-copy h3{font-size:clamp(30px,3.8vw,48px)}
.hv-motion-item:first-child .hv-hero-art{max-width:580px;padding:20px}
.hv-motion-description{font-size:14px;color:var(--muted);line-height:1.6;margin:16px 0 0}
.hv-motion-actions{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-top:12px}
.hv-motion-actions .hv-item-tools{margin:0;flex:1;justify-content:flex-end;gap:20px}
.hv-gallery .hv-footnote{margin-top:48px}
.hv-feedback{position:fixed;inset:auto 20px 20px auto;z-index:20;max-width:min(460px,calc(100vw - 40px));background:var(--paper);color:var(--text);padding:16px 22px;border:1px solid var(--divider);border-radius:6px;font-size:14px;line-height:1.5}
.hv-feedback:empty{display:none}
.hv-gallery [hidden]{display:none!important}
/* Stable illustrations are the default, including without JavaScript. */
.hv-hero .hv-packet{animation:hv-travel 5s linear infinite}
.hv-hero .hv-layer{animation:hv-separate 7s var(--hv-ease) infinite}
.hv-hero .hv-orbit{transform-origin:200px 140px;animation:hv-orbit 28s linear infinite}
.hv-hero .hv-step{animation:hv-emphasis 6s var(--hv-ease) infinite;animation-delay:calc(var(--i)*-.65s)}
.hv-hero .hv-ring{transform-origin:200px 140px;animation:hv-signal 6s var(--hv-ease) infinite;animation-delay:calc(var(--i)*-1.8s)}
.hv-hero .hv-guard{animation:hv-perimeter 7s var(--hv-ease) infinite;animation-delay:calc(var(--i)*-1.6s)}
.hv-hero .hv-horizon{animation:hv-emphasis 7s var(--hv-ease) infinite;animation-delay:calc(var(--i)*-.6s)}
.hv-hero.hv-enhanced:not(.hv-running) *{animation-play-state:paused!important}
.hv-hero[data-hv-scene="hub"] .hv-packet{animation-name:hv-route}
.hv-hero .hv-release-marker{animation:hv-release 8s linear infinite}
@keyframes hv-route{0%{transform:translate(0,0);opacity:0}10%{opacity:1}30%{transform:translate(var(--mx),0)}65%{transform:translate(var(--mx),var(--ty));opacity:1}100%{transform:translate(var(--tx),var(--ty));opacity:0}}
@keyframes hv-release{0%{transform:translate(0,0);opacity:0}5%{opacity:1}20%{transform:translate(80px,0)}30%{transform:translate(80px,-45px)}45%{transform:translate(160px,-45px)}55%{transform:translate(160px,-90px)}70%{transform:translate(240px,-90px)}80%{transform:translate(240px,-135px);opacity:1}100%{transform:translate(300px,-135px);opacity:0}}
@keyframes hv-travel{0%{transform:translate(0,0);opacity:0}8%{opacity:1}88%{opacity:1}100%{transform:translate(var(--tx),var(--ty));opacity:0}}
@keyframes hv-separate{0%,100%{transform:translateY(0)}50%{transform:translateY(var(--lift))}}
@keyframes hv-orbit{to{transform:rotate(360deg)}}
@keyframes hv-emphasis{0%,100%{opacity:1}50%{opacity:.38}}
@keyframes hv-signal{0%,100%{transform:scale(.96);opacity:.2}50%{transform:scale(1.04);opacity:.65}}
@keyframes hv-perimeter{0%,100%{opacity:.22}50%{opacity:.8}}
@media(hover:hover) and (pointer:fine){.hv-item-tools a:hover{text-decoration:underline}.hv-gallery .hv-item-tools button:hover{text-decoration:underline;text-underline-offset:4px}}
@media(max-width:1050px){.hv-icon-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.hv-art-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:767px){.hv-icon-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:0 20px}.hv-art-grid,.hv-motion-grid{grid-template-columns:1fr}.hv-tools{gap:16px}.hv-tools output{margin-left:0;width:100%;padding:0}.hv-motion-item:first-child .hv-hero{grid-template-columns:1fr}.hv-motion-item:first-child .hv-hero-copy,.hv-hero-copy{padding:28px 24px 0}.hv-hero-copy h3,.hv-motion-item:first-child .hv-hero-copy h3{font-size:30px}.hv-hero-copy p{min-height:0}.hv-hero-art{max-width:420px}.hv-motion-actions{gap:12px}.hv-motion-actions .hv-item-tools{gap:8px}.hv-motion-caption h2{font-size:22px}.hv-section{padding-top:36px}.hv-icon-item h3{font-size:16px}.hv-item-tools{align-items:flex-start;flex-direction:column}.hv-motion-actions .hv-item-tools{align-items:flex-end}.hv-gallery .hv-item-tools button{min-height:44px}}
@media(prefers-reduced-motion:reduce){.hv-hero *{animation:none!important}}
