/* The site's header and footer, in one place.
 *
 * These used to exist twice: the homepage had the design's navbar and a full footer, the
 * four generated sub-pages had a stripped bar and two lines of copy, and the two drifted
 * because nothing tied them together. This file is the single source for both, and it is
 * self-contained: styles.css is not loaded on the sub-pages, so every value the chrome
 * needs is either here or a var() with a literal fallback.
 *
 * Load order on the homepage is styles.css, then this, then home.css. Same specificity as
 * the legacy .navbar rules in styles.css means this wins on order, which is the intent.
 * ------------------------------------------------------------------------------------- */

:root{
  --chrome-cyan:#00F5FF;
  --chrome-ink:#a0a0b0;
  --chrome-line:rgba(255,255,255,.08);
  --chrome-ui:var(--font-ui,'Inter',system-ui,sans-serif);
  --chrome-display:var(--font-display,'Orbitron',system-ui,sans-serif);
}

/* The header's own label for the signup input. It lived in home.css, so on any page that
   did not load home.css it rendered as visible text beside the placeholder: "Email for
   build news Email for build news". It belongs with the markup that uses it. */
.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;
  clip:rect(0 0 0 0);white-space:nowrap;border:0}

/* ---- header ------------------------------------------------------------------- */
.navbar{position:fixed;top:0;left:0;right:0;z-index:1000;padding:1rem 2rem;border:0;
  background:linear-gradient(to bottom,rgba(10,10,15,.92) 0%,rgba(10,10,15,.72) 60%,transparent 100%);
  backdrop-filter:none;-webkit-backdrop-filter:none;box-shadow:none;transition:background .25s}
.navbar.scrolled{background:linear-gradient(to bottom,rgba(10,10,15,.96) 0%,rgba(10,10,15,.86) 60%,rgba(10,10,15,.4) 100%);
  border-bottom:0}
.nav-container{max-width:1400px;margin:0 auto;padding:0;display:flex;align-items:center;justify-content:space-between;gap:1.5rem}
.nav-logo{display:flex;align-items:center;flex-shrink:0}
.logo-image{height:64px;width:auto;object-fit:contain;display:block}
.nav-menu{display:flex;gap:1.75rem;margin:0;padding:0;list-style:none;flex-wrap:wrap;align-items:center}
.nav-menu li{margin:0}
.nav-link,.nav-menu [aria-current="page"]{font-family:var(--chrome-ui);font-size:.75rem;font-weight:500;letter-spacing:.1em;
  text-transform:uppercase;color:var(--chrome-ink);padding:.5rem 0;text-decoration:none;background:none;border:0;transition:color .2s}
.nav-link:hover,.nav-link.active,.nav-menu [aria-current="page"]{color:#fff}
.nav-menu [aria-current="page"]{border-bottom:2px solid var(--chrome-cyan);padding-bottom:.35rem}
.nav-link::after{display:none}
.nav-actions{display:flex;align-items:center;gap:1rem}
.social-link{color:var(--chrome-ink);display:flex;transition:color .2s}
.social-link:hover{color:#fff}

.signup{display:flex;align-items:center;gap:.5rem;padding:.35rem .35rem .35rem .9rem;border-radius:999px;
  background:rgba(10,10,15,.7);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);
  border:1px solid rgba(255,255,255,.14)}
.signup input{width:190px;padding:.4rem 0;border:0;background:transparent;font-family:var(--chrome-ui);
  font-size:.8rem;color:#fff;outline:none}
.signup input::placeholder{color:var(--chrome-ink)}
.signup button{font-family:var(--chrome-ui);font-size:.72rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;
  padding:.55rem 1.1rem;border:0;border-radius:999px;background:var(--chrome-cyan);color:#0a0a0f;cursor:pointer;
  white-space:nowrap;transition:filter .2s}
.signup button:hover{filter:brightness(1.1)}
.signup button:disabled{opacity:.6;cursor:default}
.signup-note{position:fixed;top:var(--nav-h,96px);right:2rem;z-index:999;margin:0;
  font-family:var(--chrome-ui);font-size:.75rem;color:var(--chrome-ink);pointer-events:none}
.signup-note.ok{color:var(--accent-green,#10B981)}

.nav-toggle{display:none;flex-direction:column;gap:5px;background:none;border:none;cursor:pointer;padding:.5rem}
.nav-toggle span{width:24px;height:2px;background:#fff;transition:transform .2s,opacity .2s}

/* ---- footer ------------------------------------------------------------------- */
.site-foot{background:var(--bg-primary,#0a0a0f);padding:4rem 2rem 2rem;border-top:1px solid var(--chrome-line)}
.site-foot .foot-wrap{max-width:1200px;margin:0 auto}
.foot-grid{display:grid;grid-template-columns:1.5fr 2fr;gap:4rem;margin-bottom:3rem}
.foot-logo{display:inline-flex}
.foot-logo img{height:80px;width:auto;object-fit:contain}
.foot-cols{display:grid;grid-template-columns:repeat(3,1fr);gap:2rem}
.foot-cols h3{font-family:var(--chrome-display);font-size:.8rem;font-weight:600;color:var(--text-muted,#9a9aaa);
  letter-spacing:.1em;text-transform:uppercase;margin:0 0 1rem}
.foot-cols a{display:block;font-family:var(--chrome-ui);font-size:.9rem;color:var(--chrome-ink);text-decoration:none;
  margin-bottom:.5rem;transition:color .2s}
.foot-cols a:hover{color:#fff}
.foot-base{border-top:1px solid var(--chrome-line);padding-top:2rem;text-align:center}
.foot-base p{display:flex;align-items:center;justify-content:center;gap:.5rem;flex-wrap:wrap;margin:0 0 .5rem;
  font-family:var(--chrome-ui);font-size:.85rem}
.foot-base a{color:var(--chrome-ink);text-decoration:none}
.foot-base a:hover{color:#fff}
.foot-base span{color:#555}
.foot-base .copy{font-size:.8rem;color:var(--text-muted,#9a9aaa)}

/* ---- responsive --------------------------------------------------------------- */
@media (max-width:1300px){
  .nav-container{flex-wrap:wrap;row-gap:.55rem}
  .nav-actions{width:100%;order:3;justify-content:flex-start}
  .signup{flex:1;max-width:520px}
  .signup input{width:auto;flex:1;min-width:0}
}
@media (pointer:coarse),(max-width:768px){
  /* a 13px-tall link is not a tap target; 44px is the accessible minimum */
  .nav-link,.nav-menu [aria-current="page"]{padding:.85rem 0;display:inline-block}
  .social-link{padding:.6rem}
  .foot-cols a{padding:.45rem 0}
  .foot-base a{display:inline-block;padding:.4rem .2rem}
}
@media (max-width:980px){
  .site-foot{padding-left:1.25rem;padding-right:1.25rem}
  .foot-grid{grid-template-columns:1fr;gap:2rem}
  .foot-cols{grid-template-columns:1fr 1fr}
}
@media (max-width:640px){
  .foot-cols{grid-template-columns:1fr}
}

/* ---- touch: real tap targets ---------------------------------------------------
 * The signup sits in a 999px pill whose look must not change, so the hit area grows
 * instead. 44px is the accessible minimum.
 */
@media (pointer:coarse),(max-width:768px){
  .signup{padding:.5rem .5rem .5rem 1rem}
  .signup input{min-height:44px}
  .signup button{min-height:44px;padding:.75rem 1.1rem}
}

/* ---- mobile: the menu collapses behind the toggle -------------------------------
 * These rules used to live only in styles.css, which the sub-pages do not load, so the
 * first build of the shared header left five nav links, two social icons and a signup
 * pill all fighting for a 375px row. The page overflowed sideways and the first heading
 * ended up underneath the bar.
 */
@media (max-width:900px){
  .nav-menu{display:none;position:absolute;top:100%;left:0;right:0;flex-direction:column;gap:.25rem;
    background:rgba(10,10,15,.98);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);
    padding:1rem 1.5rem;border-bottom:1px solid var(--chrome-line)}
  .nav-menu.active{display:flex}
  .nav-toggle{display:flex}
  .navbar{padding:.75rem 1.25rem}
  .nav-container{position:relative;flex-wrap:nowrap;gap:.75rem}
  .nav-actions{order:0;width:auto;flex:1;justify-content:flex-end;min-width:0}
  .logo-image{height:44px}
  .signup{flex:1;min-width:0;max-width:none}
  .signup input{width:auto;flex:1;min-width:0}
}
@media (max-width:560px){
  /* Below this the signup cannot share a line with anything. It moves under the bar and
     keeps its full width, which is where it is actually usable. */
  .nav-container{flex-wrap:wrap;row-gap:.6rem}
  .nav-actions{order:3;width:100%;flex:0 0 100%;justify-content:space-between}
  .signup input{font-size:16px}   /* anything smaller makes iOS zoom the page on focus */
}

/* Any author rule with a display beats the browser's own [hidden] rule, so an element with
   the attribute stays on screen. It cost the blog its filter: .blog-card is display:flex, so
   all thirteen cards showed while five of them carried hidden. home.css has guarded this
   since the trailer and the mint card hit it; it belongs in the shared sheet, which every
   page now loads, rather than in one page's stylesheet. */
[hidden]{display:none!important}
