/*! IGW site footer styles 0.1.2 (2026-09-17). These rules lived as an inline
   <style> block in the site footer custom code from 2026-09-03; they are
   unchanged and moved to a hosted, SHA-384-pinned stylesheet so the footer
   block stays within the size the Data API path can write reliably. Order
   matters: the footer links this sheet where the block sat, before
   igwcontrast, which re-declares the !important greys below and must follow. */
/* Global keyboard focus indicator.
   The user-agent default ring is near-black, which is invisible against this
   site's ground on every route. :focus-visible keeps it off mouse clicks. */
:focus-visible {
  outline: 2px solid #7DB8EA;
  outline-offset: 2px;
  border-radius: 2px;
}
/* Inputs already carry their own border; the offset ring would sit outside the
   field and read as a second box, so tighten it there. */
input:focus-visible,
textarea:focus-visible,
select:focus-visible {
  outline-offset: 0;
}

/* Screen-reader-only content becomes a visible panel on focus (see the
   .igw2-sr-only:focus-within rule in the site styles). Its links were still
   the user-agent blue, which is both off-brand and low contrast on the panel's
   #05070a ground. */
.igw2-sr-only a {
  color: #A3CDF2;
  text-decoration: underline;
  text-underline-offset: 2px;
}

/* Short viewports: release the fixed navigation.
   At 400% zoom (WCAG 1.4.10) the viewport is about 256 CSS pixels tall, and the
   fixed bar was covering three quarters of it — the same thing happens on a
   phone held in landscape. Switching to absolute keeps the bar at the top of the
   document and lets it scroll away, while the clearance padding below it stays
   correct, so nothing shifts. Webflow breakpoints are width-only, which is why
   this rule lives here rather than on the class. */
@media (max-height: 450px) {
  .igw2-nav { position: absolute; }
}

/* ---------------------------------------------------------------- contrast
   Seven text elements measured below the 4.5:1 minimum, all of them the same
   two greys on near-black. Measured before: 3.91, 4.15, 4.33 three times,
   4.42 twice. #8A94A0 measures 6.58 on the darkest ground and 6.28 on the card
   ground, clearing the bar with room rather than sitting on it, and close
   enough in tone that the hierarchy these greys carry is unchanged. */
.igw2-utility-note,
.igwls-next-p,
.igwls-site,
.igwls-approx,
.igwsf-approx,
.igwvc-table em,
.igwvc-note,
[data-igw-meta],
[data-igw-notice-geometry] {
  color: #8A94A0 !important;
}

/* Mission Control used #6E7A89 for its secondary text, which measures 4.40:1
   on that page's #0B0F15 panels - under the 4.5 minimum by six hundredths, on
   162 elements. Found by the standing audit rather than by eye, which is the
   point of having it. Same #8A94A0 as the rest of the site, 6.24 on that
   ground. */
#igwmc dt,
#igwmc th,
#igwmc .igwmc-span,
#igwmc .igwmc-cd-none,
#igwmc .igwmc-tile-l,
.igwmc-asof,
.igwmc-as-of,
.igwmc-note,
.igwmc-foot,
.igwmc-table th {
  color: #8A94A0 !important;
}

/* ------------------------------------------------- text over the live globe
   The globe is an animated canvas, so text on it has no fixed backdrop: the
   same label measured 5.60:1 over ocean and 1.94:1 as a bright limb passed
   beneath it. Contrast cannot be tuned against a moving background, so these
   get their own ground - a scrim that travels with the text and makes the
   ratio independent of whatever the Earth is doing. */
.igw2-earth-label,
.igw2-hero .igw2-eyebrow {
  color: #C8D4E2;
  background: rgba(4, 8, 12, .72);
  padding: 4px 9px;
  border-radius: 2px;
  display: inline-block;
  -webkit-backdrop-filter: blur(3px);
  backdrop-filter: blur(3px);
}

/* ------------------------------------------------------------- tap targets
   The globe's pad markers were 14x14 CSS pixels, below the 24px WCAG 2.2 AA
   floor, with the drawn dot and the hit area being the same box.

   Padding was the wrong instrument, and a rule here used to try it. The ring
   is the button's own border, so border-box padding grew the ring itself: the
   14px marks became 32px ones, which is a less precise claim about where a pad
   actually is. igwearthoverlay2 0.4.1 does it properly instead — the ring
   stays 14px and a transparent child carries the target, sized to the distance
   to the nearest other marker so no target reaches into its neighbour's space.
   The rule that used to sit here is deliberately gone rather than tuned. */

/* Footer link rows were 20px tall with under 24px between them, which is the
   2.5.8 minimum a stacked list has to meet on its own. Padding the row rather
   than the text keeps the type where it is. */
.igw2-footer-link {
  display: inline-flex;
  align-items: center;
  min-height: 24px;
}

/* The FAA source link on each airspace notice is a block link at 22px, two
   short of the same minimum. It is the link that takes a reader to the
   authoritative document, so it is the last one that should be awkward to hit. */
[data-igw-notice-source] {
  display: inline-flex;
  align-items: center;
  min-height: 24px;
}

/* -------------------------------------------------------- mobile copy width
   .igw2-explore-copy computes to 389.4px inside a 390px viewport, so its H1
   and lede were clipped by the section's overflow on five routes. The column
   is bounded to its container and the display face allowed to shrink. The
   ramp's floor and ceiling are scale steps (38 and 68, type-scale sweep
   2026-09-03); the .igw2-display class and the .igw2-display-explore combo
   carry the same ramp at this breakpoint. */
@media (max-width: 767px) {
  .igw2-explore-copy,
  .igw2-explore-copy > * {
    max-width: 100%;
    min-width: 0;
  }
  h1.igw2-display {
    font-size: clamp(38px, 11.6vw, 68px);
    letter-spacing: -.035em;
    line-height: 1;
    overflow-wrap: break-word;
  }
  .igw2-lede { max-width: 100%; }
}

/* ------------------------------------------- hero text over the marker layer
   At 1440 the globe's disc runs under the headline column, and the column's
   box sat above the marker layer: two pads measured elementFromPoint = H1,
   and with the H1 let through, the .igw2-hero-content container itself. The
   whole column lets pointer events through; the calls to action take them
   back. Display text must never intercept the instrument behind it. Found by
   the touch-emulated tap probe on the delivered page, 2026-09-03. */
.igw2-hero-content { pointer-events: none; }
.igw2-hero-content .igw2-actions { pointer-events: auto; }

/* ------------------------------------------- the CSS fallback sphere on /
   A 96 px swipe on the homepage globe at 390 turned it 1.8 px while the same
   swipe turned /explore 90 px. The finger was landing on .igw2-earth-sphere,
   the CSS fallback globe, which on the home page is a sibling of the WebGL
   host inside the preserve-3d .igw2-earth at translateZ(54px) with pointer
   events of its own; the host's touch-action never applied and Chromium
   cancelled the pointer after two moves. The fallback has no use for the
   pointer — the interaction module never runs without WebGL — so it lets
   every event through to the host. Measured 2026-09-03 by the overlay 0.4.6
   probe: with this rule the swipe turns the globe 0.576 rad. */
.igw2-earth > .igw2-earth-sphere { pointer-events: none; }

/* ---------------------------------------------- the Flight 8 film, on intent
   2026-09-05. The self-hosted 2.09 MB recap comes off the CDN (owner decision,
   2026-09-04). The three <video> elements that carried it on /starship and
   /news are now links to IGW's own YouTube upload of the same film, showing
   the same poster frame and playing only when a reader chooses to - the
   performance audit's budget in one rule: poster first, video after intent.
   The element keeps its class, so the site sheet's absolute inset-0 box and
   filter still apply; these rules only clip the image to it and put the
   affordance on it, in the scrim the globe labels use. */
a.igw2-authentic-media-video {
  overflow: hidden;
}
a.igw2-authentic-media-video > img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
a.igw2-authentic-media-video::after {
  content: "Watch the film \2197";
  position: absolute;
  left: 16px;
  bottom: 16px;
  display: inline-flex;
  align-items: center;
  min-height: 36px;
  padding: 0 14px;
  background: rgba(4, 8, 12, .72);
  border: 1px solid rgba(255, 255, 255, .36);
  border-radius: 2px;
  color: #f5f5f5;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: .02em;
  line-height: 1;
  -webkit-backdrop-filter: blur(3px);
  backdrop-filter: blur(3px);
  transition: border-color .15s ease-out, background-color .15s ease-out;
}
a.igw2-authentic-media-video:hover::after,
a.igw2-authentic-media-video:focus-visible::after {
  border-color: rgba(255, 255, 255, .60);
  background: rgba(4, 8, 12, .86);
}

/* ------------------------------------------------------- type-scale sweep
   2026-09-03. Sizes set by stylesheets the Data API cannot edit were brought
   onto the site's type scale from here, after every stylesheet, each rule a
   stopgap held only until its own module could carry the size. All three have
   now been returned to their modules and this block sets no module's type:
     - the launch schedule's embed on /launches - folded into igwlaunchschedule
       0.1.3, 2026-09-04;
     - the NASA feed's injected .78rem meta line - igwnasavisualstream 0.1.4
       shipped 2026-09-04 already setting 12px;
     - the hosted igwchannel sheet's title (15) and channel link (13) -
       igwchannel-0.2.1.css carries 16 and 12 itself, so the two rules that
       held them here were deleted on 2026-09-05 (E1, the last two). */

/* ------------------------------------------------- three things the owner cut
   2026-09-17, on the owner's instruction, looking at the holding page on an
   iPhone: "This photo is still showing. Get rid of it." and "Also remove the
   arrow next to watch an IGW film. And remove the falcon heavy video at the
   bottom."

   All three are removed from here rather than at their own definitions,
   because this sheet is the last stylesheet the page loads and none of the
   three is owned by it: the photograph is a Designer element inside the home
   hero component, which the Data API cannot address without editing the
   component itself, and the other two are defined in the homepage's own head
   block, which a concurrent session maintains. One place, one revert.

   The photograph is IGW's own (K Enagonio), and its element keeps its
   data-igw-media-credit and data-igw-media-source attributes in the delivered
   HTML, so the provenance record survives the removal - it is not rendered
   either way, under the no-credits rule. Measured before removing: 393x1285
   at 78% opacity behind the whole holding page on a phone, and 393x794 on the
   full site with the gate off, so it goes in both states, which is what "get
   rid of it" means. */
.igw2-starship-fallback-media { display: none !important; }

/* The arrow is a pseudo-element, U+2197, which iOS renders as a colour emoji
   rather than a glyph - the blue tile in the owner's screenshot. Removing the
   content removes the box with it; the link keeps its underline and its 44px
   target. */
html[data-igw-coming-soon="cinema"] .igw-cs-watch::after { content: none !important; }

/* The Falcon Heavy poster card under the globe. The same film is still one tap
   away from the "Watch an IGW film" link above the countdown, which opens the
   same screening dialog, so nothing is lost with it. The coming-soon runtime
   still builds the element; this only stops it rendering, and display:none
   takes it out of the tab order and the accessibility tree as well. Removing
   it at the source belongs in igwcomingsoon when that module is next edited. */
html[data-igw-coming-soon="cinema"] .igw-cs-film { display: none !important; }

/* ------------------------------------ the empty band above the landing copy
   2026-09-17, owner: "there is a little too much space at the top that's
   empty."

   Measured on the live holding page at 393x852: the first line of copy sat
   101px down, and 71 of those were `main.igw2-page`'s phone rule - the
   clearance reserved for the fixed navigation. On the landing page the
   navigation is display:none (the gate hides it) and the sticky alert bar is
   not on the page at all, so those 71px held nothing. The clearance is
   released here and the hero carries its own top offset instead, which puts
   the kicker 56px into the page rather than 101. Landing state only: every
   other route still needs the clearance, and the navigation is really there. */
html[data-igw-holding="landing"] main.igw2-page { padding-top: 0 !important; }
@media (max-width: 767px) {
  html[data-igw-holding="landing"] .igw2-hero { padding-top: 56px !important; }
}

/* ------------------------------------------- the shop link, holding page only
   2026-09-17, owner: "add a link to the IGW shop at the bottom of the holding
   page, the link to the outside shop. Not the rebuilt skin on the IGW site."

   The element is built by igwholdingshop 0.1.0 and appended to the hero, which
   in the landing layout is a grid. grid-column 1/-1 makes it span the full
   width, so auto-placement drops it into the row after the copy and the globe
   at every width - the bottom - without this sheet having to know how many
   rows there are. The face, size, gold underline and 44px target are the
   "Watch an IGW film" link's, so the two read as one family; the custom
   properties carry fallbacks because they are declared on the coming-soon
   scope and this rule is scoped to the landing state. */
html[data-igw-holding="landing"] .igw-hs {
  grid-column: 1 / -1;
  display: flex;
  justify-content: center;
  margin: 30px 0 0;
}
html[data-igw-holding="landing"] .igw-hs-link {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  color: var(--cs-ink, #f3f1ea);
  font: 500 13px/1.5 "IGW Coming Soon Text", "Plus Jakarta Sans", sans-serif;
  text-decoration: none;
  border-bottom: 1px solid var(--cs-accent, #c5b088);
}
html[data-igw-holding="landing"] .igw-hs-link:hover {
  color: #fff;
  border-bottom-color: #e0d3b9;
}
@media (forced-colors: active) {
  html[data-igw-holding="landing"] .igw-hs-link { color: LinkText; border-bottom-color: LinkText; }
}
