/* ==========================================================================
   Gaming hub — the landing page served at /category/gaming/.
   Loaded only on that page (see gaming-hub.php), so none of this weighs on
   the rest of the site.

   The palette and the three faces are the ones the GTA 6 hub already uses, so
   the two pages read as the same publication. The layout is not: that page is
   one game over time, this one is many games at once.
   ========================================================================== */

body.ge-gaming-hub{
  /* The hub takes its colours from the theme's own tokens rather than keeping
     a second palette. style.css defines them light and redefines them inside
     `@media (prefers-color-scheme:dark)`, so the hub flips with the rest of
     the site for free - and inherits the contrast work already done there
     (--pink-text and --green-text are the AA-checked text variants; the raw
     --pink / --green are for fills and rules, not for type on a surface). */
  --gh-bg:var(--bg); --gh-card:var(--surface);
  --gh-ink:var(--text); --gh-mut:var(--muted); --gh-faint:var(--muted);
  --gh-hot:var(--pink); --gh-hot-l:var(--pink-text);
  --gh-lime:var(--green); --gh-lime-ink:var(--green-text);
  --gh-lime-on:var(--green-ink);
  --gh-hair:var(--line);
  /* A pink bloom is atmosphere on a dark ground and a smudge on a white one. */
  --gh-glow:rgba(255,30,142,.10); --gh-bloom:rgba(255,30,142,.13);
  /* The hero scrim keeps the art off the headline. Dark over a photo reads as
     a vignette and can run long; white over a photo bleaches it, so on a light
     ground the fade has to be spent before it reaches the first picture. */
  --gh-scrim-img:linear-gradient(95deg, var(--gh-bg) 4%,
    color-mix(in srgb, var(--gh-bg) 55%, transparent) 13%, transparent 23%);
  --gh-disp:"Archivo",system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  --gh-serif:"Source Serif 4",ui-serif,Georgia,Cambria,"Times New Roman",serif;
  --gh-mono:"JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  background:var(--gh-bg);
  overflow-x:hidden;
}
@media (prefers-color-scheme:dark){
  body.ge-gaming-hub{
    --gh-glow:rgba(255,30,142,.22); --gh-bloom:rgba(255,30,142,.26);
    --gh-scrim-img:linear-gradient(95deg, var(--gh-bg) 22%,
      color-mix(in srgb, var(--gh-bg) 72%, transparent) 46%, transparent 82%);
  }
}

/* The hero carries the H1 and the page needs no lead image, so page.php skips
   both at the source for a hub - hiding them here would still have the browser
   fetch an image it never paints. The breadcrumb stays. */

/* No advertising on the hub. */
body.ge-gaming-hub .ge-ad,
body.ge-gaming-hub [class*="ge-ad-"],
body.ge-gaming-hub .adsbygoogle,
body.ge-gaming-hub ins.adsbygoogle{ display:none !important; }

/* The theme clamps article.article to a reading column so body copy keeps a
   comfortable measure. A landing page is not body copy - it wants the whole
   grid - so the clamp is lifted here, and the text inside keeps its measure
   with max-width on the pieces that need one. Nothing outside the hub moves. */
body.ge-gaming-hub article.article{
  max-width:none !important; margin-left:0 !important; margin-right:0 !important;
}
body.ge-gaming-hub .content > *{ max-width:1264px; margin-inline:auto; }

/* ---------- shared furniture ---------- */
.ge-gh-kicker{
  font-family:var(--gh-mono); font-size:11px; font-weight:700; letter-spacing:.16em;
  color:var(--gh-hot-l); margin:0 0 12px; text-transform:uppercase;
}
.ge-gh-kicker--lime{ color:var(--gh-lime-ink); }
.ge-gh-h2{
  font-family:var(--gh-disp); font-weight:900; font-size:clamp(25px,3vw,32px);
  line-height:1.06; letter-spacing:-.028em; color:var(--gh-ink); margin:0; text-wrap:balance;
}
/* The theme underlines and pinks every link inside .article .content, and it
   does so at a higher specificity than a bare element selector. The hub sets
   its own colour on each element and wants the underline kept for hover, so
   these have to match that specificity to win rather than shout !important. */
body.ge-gaming-hub .article .content a{ color:inherit; text-decoration:none; }
body.ge-gaming-hub .article .content a:hover .ge-gh-leadhead,
body.ge-gaming-hub .article .content a:hover .ge-gh-rowhead,
body.ge-gaming-hub .article .content a:hover .ge-gh-calhead,
body.ge-gaming-hub .article .content a:hover .ge-gh-esporthead2,
body.ge-gaming-hub .article .content a.ge-gh-followlink:hover,
body.ge-gaming-hub .article .content a.ge-gh-chip:hover{
  text-decoration:underline; text-decoration-color:var(--gh-hot);
  text-decoration-thickness:2px; text-underline-offset:3px;
}
body.ge-gaming-hub .article .content a.ge-gh-author{ color:var(--gh-ink); }
/* A chip is an <a>, so the `color:inherit` reset above (0,3,2) beats any bare
   `.ge-gh-chip` rule (0,1,0) - stating the colour here is the only way it
   applies rather than silently riding on whatever the content colour is. */
body.ge-gaming-hub .article .content a.ge-gh-chip{ color:var(--gh-ink); }
body.ge-gaming-hub .article .content a.ge-gh-author:hover{
  text-decoration:underline; text-decoration-color:var(--gh-hot);
  text-decoration-thickness:2px; text-underline-offset:3px;
}

/* ---------- breadcrumb ----------
   The theme prints the current-page crumb but marks it screen-reader-only, so
   a hub shows a lone house icon with nothing after it. Reveal it here, the way
   the GTA 6 hub does, so the trail reads Home / Gaming. */
body.ge-gaming-hub .ge-breadcrumbs{
  /* Every section below sits in the same column, so the trail has to share
     it - left at the theme default it hangs out past the hero and the chips. */
  max-width:1264px; margin-left:auto; margin-right:auto; margin-bottom:22px;
}
body.ge-gaming-hub .ge-breadcrumbs ol{
  display:flex; align-items:center; flex-wrap:wrap; margin:0; padding:0; list-style:none;
}
body.ge-gaming-hub .ge-breadcrumbs .ge-crumb-current.screen-reader-text{
  position:static !important; width:auto !important; height:auto !important;
  clip:auto !important; clip-path:none !important; overflow:visible !important;
  white-space:nowrap !important; margin:0 !important; padding:0 !important;
  font-family:var(--gh-disp); font-size:12px; font-weight:800;
  letter-spacing:.08em; text-transform:uppercase; color:var(--gh-mut);
  align-items:center;
}
body.ge-gaming-hub .ge-breadcrumbs .ge-crumb-current::before{
  content:"/"; font-family:var(--gh-mono); color:var(--gh-hair);
  /* style.css sets the home link to padding:0, so the separator gets equal
     margins - an uneven pair here jams the slash against the house icon. */
  margin:0 9px; font-size:13px;
  /* style.css draws the site-wide separator as a rotated 6x6 chevron built
     from borders. Setting content:"/" alone leaves that box in place and
     the slash renders inside it, rotated. Clear the box too. */
  width:auto; height:auto; border:0; transform:none; opacity:1;
}
body.ge-gaming-hub .page-head{ padding-bottom:0; }

/* ---------- hero ----------
   Text on the left, art stepped down the right and running a little past the
   edge, with a scrim so the two never fight over the same pixels. */
.ge-gh-head{
  position:relative; margin:0 -80px; padding:34px 80px 10px; overflow:hidden;
  min-height:414px;
}
.ge-gh-headtext{ position:relative; z-index:2; padding-bottom:6px; max-width:52%; }
.ge-gh-eyebrow{
  font-family:var(--gh-mono); font-size:11px; font-weight:700; letter-spacing:.2em;
  color:var(--gh-hot-l); margin:0 0 14px; white-space:nowrap;
}
.ge-gh-title{
  font-family:var(--gh-disp); font-weight:900; font-size:clamp(54px,9vw,112px);
  line-height:.94; letter-spacing:-.042em; color:var(--gh-ink); margin:0;
  text-shadow:0 0 46px var(--gh-bloom);
}
.ge-gh-lede{
  font-family:var(--gh-serif); font-size:18.5px; line-height:1.58;
  color:var(--gh-mut); margin:20px 0 0; max-width:44ch;
}

.ge-gh-mosaic{
  position:absolute; right:-40px; top:30px; width:642px; z-index:1;
  display:grid; grid-template-columns:repeat(3,1fr); gap:10px; align-items:start;
}
.ge-gh-mcol{ display:flex; flex-direction:column; gap:10px; }
.ge-gh-mcol:nth-child(1){ margin-top:22px; }
.ge-gh-mcol:nth-child(3){ margin-top:38px; }
.ge-gh-tile{ display:block; }
.ge-gh-tile img{ width:100%; object-fit:cover; display:block; border-radius:4px; }
.ge-gh-mcol:nth-child(1) .ge-gh-tile:nth-child(1) img{ height:180px; }
.ge-gh-mcol:nth-child(1) .ge-gh-tile:nth-child(2) img{ height:126px; }
.ge-gh-mcol:nth-child(2) .ge-gh-tile:nth-child(1) img{ height:146px; }
.ge-gh-mcol:nth-child(2) .ge-gh-tile:nth-child(2) img{ height:136px; }
.ge-gh-mcol:nth-child(3) .ge-gh-tile:nth-child(1) img{ height:126px; }
.ge-gh-mcol:nth-child(3) .ge-gh-tile:nth-child(2) img{ height:160px; }

.ge-gh-scrim{
  position:absolute; right:0; top:0; width:760px; height:520px; z-index:1; pointer-events:none;
  background:var(--gh-scrim-img);
}
/* closest-side, not the default farthest-corner: a circle sized to the corner
   is still tinted where it meets the nearer edges, and overflow:hidden then
   cuts that tint into a visible rectangle behind the headline. */
.ge-gh-glow{
  position:absolute; left:-120px; top:-150px; width:760px; height:560px;
  z-index:0; pointer-events:none;
  background:radial-gradient(circle closest-side, var(--gh-glow), rgba(255,30,142,0));
}

/* ---------- chips ---------- */
.ge-gh-chips{ margin-top:32px; }
.ge-gh-chiprow{ display:flex; flex-wrap:wrap; gap:8px; }
.ge-gh-chiprow--inline{ display:flex; align-items:center; gap:14px; margin-top:12px; }
.ge-gh-chiplabel{
  font-family:var(--gh-mono); font-size:10.5px; font-weight:700; letter-spacing:.15em;
  color:var(--gh-mut); margin:0; white-space:nowrap;
}
.ge-gh-chip{
  font-family:var(--gh-mono); font-size:11.5px; font-weight:500; letter-spacing:.03em;
  border:1px solid var(--gh-hair); border-radius:100px;
  padding:7px 14px; white-space:nowrap;
}

/* ---------- calendar ---------- */
.ge-gh-cal{
  margin-top:46px; background:var(--gh-card); border-radius:14px; padding:26px 26px 28px;
}
.ge-gh-calrow{ display:flex; flex-wrap:wrap; gap:18px 0; }
.ge-gh-calcell{
  display:flex; flex-direction:column; flex:1 1 0; min-width:190px;
  border-left:1px solid var(--gh-hair); padding:0 22px;
}
.ge-gh-calcell:first-child{ border-left:0; padding-left:0; }
.ge-gh-caldate{
  font-family:var(--gh-mono); font-size:13px; font-weight:700; letter-spacing:.1em;
  color:var(--gh-lime-ink); margin-bottom:11px;
}
.ge-gh-calhead{
  font-family:var(--gh-disp); font-weight:800; font-size:17px; line-height:1.22;
  letter-spacing:-.015em; color:var(--gh-ink); margin-bottom:8px; text-wrap:balance;
}
.ge-gh-calsub{ font-family:var(--gh-serif); font-size:14px; line-height:1.5; color:var(--gh-mut); }

/* ---------- the three desks ---------- */
.ge-gh-doors{
  display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:38px; margin-top:48px;
  /* The three desks never hold the same number of stories. Without this each
     column is stretched to the tallest one and the short ones trail hundreds
     of pixels of empty black. Ragged bottoms are correct here. */
  align-items:start;
}
.ge-gh-door{ display:flex; flex-direction:column; }
.ge-gh-doorhead{ border-top:3px solid var(--gh-hot); padding-top:13px; margin-bottom:18px; }
.ge-gh-doortitle{
  font-family:var(--gh-mono); font-size:12px; font-weight:700; letter-spacing:.15em;
  color:var(--gh-ink); margin:0 0 6px;
}
.ge-gh-doorsub{ font-family:var(--gh-serif); font-size:14.5px; color:var(--gh-mut); margin:0; }

.ge-gh-lead{ display:flex; flex-direction:column; margin-bottom:4px; }
.ge-gh-lead img{
  /* height:auto is load-bearing: WordPress prints height="432" on the tag, and
     a presentational height wins over aspect-ratio unless the height is auto -
     without it every lead image renders at double its intended depth. */
  width:100%; height:auto; aspect-ratio:16/10; object-fit:cover;
  display:block; border-radius:3px;
}
.ge-gh-leaddate{
  font-family:var(--gh-mono); font-size:10.5px; letter-spacing:.12em;
  color:var(--gh-mut); margin:13px 0 7px;
}
.ge-gh-leadhead{
  font-family:var(--gh-disp); font-weight:800; font-size:19px; line-height:1.22;
  letter-spacing:-.018em; color:var(--gh-ink); text-wrap:balance;
}
.ge-gh-leadsub{
  font-family:var(--gh-serif); font-size:15px; line-height:1.5; color:var(--gh-mut); margin-top:9px;
}

.ge-gh-rows{ margin-top:14px; }
.ge-gh-row{
  display:grid; grid-template-columns:52px minmax(0,1fr); gap:14px; align-items:baseline;
  border-top:1px solid var(--gh-hair); padding:14px 0 15px;
}
.ge-gh-rowdate{ font-family:var(--gh-mono); font-size:11px; letter-spacing:.08em; color:var(--gh-mut); }
.ge-gh-rowbody{ display:flex; flex-direction:column; gap:6px; }
.ge-gh-rowhead{
  font-family:var(--gh-disp); font-weight:700; font-size:15.5px; line-height:1.3;
  letter-spacing:-.01em; color:var(--gh-ink); text-wrap:balance;
}

/* ---------- bylines: the pair Google reads as authorship ---------- */
.ge-gh-byline{
  font-family:var(--gh-mono); font-size:9.5px; letter-spacing:.07em;
  color:var(--gh-faint); text-transform:uppercase;
}
.ge-gh-byline--lead{
  display:flex; gap:7px; align-items:baseline; margin-top:11px; text-transform:none;
}
.ge-gh-by{ font-family:var(--gh-mono); font-size:11px; letter-spacing:.06em; color:var(--gh-mut); }
.ge-gh-author{ font-family:var(--gh-disp); font-weight:700; font-size:12.5px; color:var(--gh-ink); }
.ge-gh-when{ font-family:var(--gh-mono); font-size:11px; color:var(--gh-mut); }

/* ---------- college esports ---------- */
.ge-gh-esports{ margin-top:54px; border-top:3px solid var(--gh-lime-ink); padding-top:24px; }
.ge-gh-esporthead{
  display:flex; justify-content:space-between; align-items:baseline; gap:40px; margin-bottom:16px;
}
.ge-gh-esportintro{
  font-family:var(--gh-serif); font-size:16px; line-height:1.55; color:var(--gh-mut);
  margin:0; max-width:46ch;
}
.ge-gh-esportrows{ display:flex; flex-direction:column; border-bottom:1px solid var(--gh-hair); }
.ge-gh-esportrow{
  display:grid; grid-template-columns:186px minmax(0,1fr) 112px; gap:26px; align-items:baseline;
  border-top:1px solid var(--gh-hair); padding:16px 0 17px;
}
.ge-gh-pull{ display:flex; flex-direction:column; gap:4px; }
.ge-gh-pullkey{
  font-family:var(--gh-disp); font-weight:800; font-size:17px; letter-spacing:-.014em;
  color:var(--gh-lime-ink);
}
.ge-gh-pullnote{ font-family:var(--gh-mono); font-size:10px; letter-spacing:.12em; color:var(--gh-mut); }
.ge-gh-esporthead2{ font-family:var(--gh-serif); font-size:16px; line-height:1.5; color:var(--gh-ink); }
.ge-gh-esportmeta{
  display:flex; flex-direction:column; gap:3px; text-align:right;
  font-family:var(--gh-mono); font-size:11px; color:var(--gh-mut);
}

/* ---------- follow ---------- */
.ge-gh-follow{ display:flex; flex-direction:column; }
.ge-gh-followintro{
  font-family:var(--gh-serif); font-size:15.5px; line-height:1.55; color:var(--gh-mut); margin:0 0 12px;
}
.ge-gh-followlinks{ display:flex; flex-direction:column; }
.ge-gh-followlink{
  font-family:var(--gh-disp); font-weight:700; font-size:15px; letter-spacing:-.008em;
  color:var(--gh-ink); border-top:1px solid var(--gh-hair); padding:11px 0;
}

/* ---------- newsletter ---------- */
.ge-gh-news{
  margin-top:54px; background:var(--gh-card); border-radius:14px;
  padding:30px 34px 32px; display:grid; grid-template-columns:minmax(0,1fr) 400px;
  gap:46px; align-items:center;
}
.ge-gh-newshead{
  font-family:var(--gh-disp); font-weight:900; font-size:27px; line-height:1.1;
  letter-spacing:-.024em; color:var(--gh-ink); margin:0 0 9px; text-wrap:balance;
}
.ge-gh-newsintro{
  font-family:var(--gh-serif); font-size:16px; line-height:1.55; color:var(--gh-mut);
  margin:0; max-width:52ch;
}
.ge-gh-newsform{ display:flex; flex-direction:column; gap:10px; margin:0; }
.ge-gh-newslabel{
  font-family:var(--gh-mono); font-size:10.5px; font-weight:700; letter-spacing:.13em;
  color:var(--gh-mut);
}
.ge-gh-newsrow{ display:flex; gap:9px; }
.ge-gh-news input[type="email"]{
  flex-grow:1; min-width:0; font-family:var(--gh-serif); font-size:14px;
  color:var(--gh-ink); background:var(--gh-bg); border:1px solid var(--gh-hair);
  border-radius:8px; padding:12px 14px;
}
.ge-gh-news .sub{
  font-family:var(--gh-disp); font-weight:800; font-size:13.5px; letter-spacing:.02em;
  color:var(--gh-lime-on); background:var(--gh-lime); border:0; border-radius:8px;
  padding:12px 20px; cursor:pointer; white-space:nowrap;
}
.ge-gh-news .news-hp{ position:absolute; left:-9999px; }
.ge-gh-news .news-form-status{
  font-family:var(--gh-mono); font-size:11px; color:var(--gh-mut); margin:0; min-height:1em;
}

/* ---------- the closing band ---------- */
.ge-gh-band{
  margin-top:52px; display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:54px;
}
.ge-gh-more{ display:flex; flex-direction:column; }
.ge-gh-moreintro,
.ge-gh-followintro{
  font-family:var(--gh-serif); font-size:15.5px; line-height:1.55; color:var(--gh-mut);
  margin:0 0 12px;
}
.ge-gh-morelinks{ display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:0 34px; }
.ge-gh-morelink,
.ge-gh-followlink{
  font-family:var(--gh-disp); font-weight:700; font-size:15px; letter-spacing:-.008em;
  color:var(--gh-ink); border-top:1px solid var(--gh-hair); padding:11px 0;
}

/* ---------- the river ----------
   The chronological index. The desks above are three narrow columns, so this
   reads as one wide ledger instead - same hairline rhythm, more room for the
   headline, and the byline parked on the right where the eye can skip it. */
.ge-gh-river{ margin:64px 0 0; }
.ge-gh-riverhd{ margin:0 0 18px; }
.ge-gh-riverrows{
  display:flex; flex-direction:column; border-bottom:1px solid var(--gh-hair);
}
.ge-gh-riverrow{
  display:grid; grid-template-columns:62px minmax(0,1fr) 128px; gap:24px;
  align-items:baseline; border-top:1px solid var(--gh-hair); padding:16px 0 17px;
}
body.ge-gaming-hub .article .content a.ge-gh-riverrow:hover .ge-gh-riverhead{ color:var(--gh-hot-l); }
.ge-gh-riverdate{
  font-family:var(--gh-mono); font-size:11px; letter-spacing:.08em; color:var(--gh-mut);
}
.ge-gh-riverbody{ display:flex; flex-direction:column; gap:6px; min-width:0; }
.ge-gh-riverhead{
  font-family:var(--gh-disp); font-weight:700; font-size:17px; line-height:1.28;
  letter-spacing:-.012em; color:var(--gh-ink); text-wrap:balance;
  transition:color .15s ease;
}
.ge-gh-riversub{
  font-family:var(--gh-serif); font-size:14.5px; line-height:1.5; color:var(--gh-mut);
}
.ge-gh-riverrow .ge-gh-byline{ text-align:right; }
.ge-gh-riverall{
  display:inline-flex; align-items:center; min-height:34px;
  margin:14px 0 0; font-family:var(--gh-mono); font-size:11px;
  font-weight:700; letter-spacing:.12em; text-transform:uppercase;
}
/* The hub-wide `a{color:inherit}` reset sits at (0,3,2), so the one link on
   this page that carries its own colour has to be written the same way the
   byline link is - see the specificity guard at the end of this file. */
body.ge-gaming-hub .article .content a.ge-gh-riverall{ color:var(--gh-lime-ink); }
body.ge-gaming-hub .article .content a.ge-gh-riverall:hover{
  text-decoration:underline; text-decoration-color:var(--gh-lime-ink);
  text-decoration-thickness:2px; text-underline-offset:4px;
}

/* ---------- narrower screens ---------- */
@media (max-width:1100px){
  .ge-gh-mosaic{ width:520px; top:40px; }
  .ge-gh-headtext{ max-width:58%; }
  .ge-gh-eyebrow{ white-space:normal; }
  .ge-gh-doors{ grid-template-columns:repeat(2,minmax(0,1fr)); gap:32px; }
  .ge-gh-esportrow{ grid-template-columns:150px minmax(0,1fr) 96px; gap:18px; }
}
@media (max-width:781px){
  /* The hero's 80px gutter is there to let the art bleed past the column on a
     desktop; the bleed margin is already gone at this width, so the padding
     alone was squeezing the headline into 179px of a 375px screen. */
  .ge-gh-head{
    min-height:0; margin:0; padding:22px 0 8px;
    display:flex; flex-direction:column;
  }
  /* The art is first in the markup because it is absolutely positioned on a
     desktop. Stacked, the headline has to come first. */
  .ge-gh-headtext{ max-width:100%; order:1; }
  .ge-gh-mosaic{ position:static; width:auto; margin:24px 0 0; order:2; }
  .ge-gh-eyebrow{ white-space:normal; }
  .ge-gh-mcol:nth-child(1),
  .ge-gh-mcol:nth-child(3){ margin-top:0; }
  .ge-gh-scrim,.ge-gh-glow{ display:none; }
  .ge-gh-news{ grid-template-columns:minmax(0,1fr); gap:22px; }
  .ge-gh-band{ grid-template-columns:minmax(0,1fr); gap:40px; }
  /* Three stepped columns become six slivers on a phone. Let the columns
     dissolve so the tiles themselves lay out two-up at a readable size. */
  .ge-gh-mosaic{ grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; }
  .ge-gh-mcol{ display:contents; }
  .ge-gh-mosaic .ge-gh-tile img{ height:118px !important; }
  .ge-gh-doors{ grid-template-columns:minmax(0,1fr); gap:40px; }
  .ge-gh-calcell{ border-left:0; padding:0; min-width:100%; }
  .ge-gh-calcell + .ge-gh-calcell{ border-top:1px solid var(--gh-hair); padding-top:16px; }
  .ge-gh-esporthead{ flex-direction:column; gap:14px; }
  .ge-gh-esportrow{ grid-template-columns:minmax(0,1fr); gap:8px; }
  .ge-gh-esportmeta{ flex-direction:row; gap:10px; text-align:left; }
  .ge-gh-river{ margin-top:44px; }
  .ge-gh-riverrow{ grid-template-columns:minmax(0,1fr); gap:8px; }
  .ge-gh-riverrow .ge-gh-byline{ text-align:left; }
}

/* ---------- specificity guard --------------------------------------------
   The theme styles `.article h1`, `.article .content h2` and
   `.article .content p` at (0,1,1), which outranks a single hub class at
   (0,1,0). Left alone the hero headline renders at the theme's 44px article
   size in the theme's face instead of the display face at clamp(54..112),
   the section heads lose the display face too, and every hub paragraph picks
   up a flat 22px bottom margin it was never designed with. Re-assert the
   hub's own values one class higher - these must mirror the rules above. */
body.ge-gaming-hub .ge-gh-title{
  font-family:var(--gh-disp); font-weight:900; font-size:clamp(54px,9vw,112px);
  line-height:.94; letter-spacing:-.042em; margin:0;
}
body.ge-gaming-hub .ge-gh-h2{
  font-family:var(--gh-disp); font-weight:900; line-height:1.06;
  letter-spacing:-.028em; margin:0;
}
body.ge-gaming-hub .ge-gh-newshead{
  font-family:var(--gh-disp); font-weight:900; line-height:1.1;
  letter-spacing:-.024em; margin:0 0 9px;
}
/* The chips, calendar and desk labels are h2s so the sections exist in the
   document outline; the theme's `.article .content h2` (0,2,1) would otherwise
   hand them the article heading face, weight, margins and line-height.
   These values mirror the .ge-gh-kicker / .ge-gh-doortitle rules above. */
body.ge-gaming-hub h2.ge-gh-kicker,
body.ge-gaming-hub h2.ge-gh-doortitle{
  font-family:var(--gh-mono); font-weight:700; line-height:1.7;
}
body.ge-gaming-hub h2.ge-gh-kicker{ font-size:11px; margin:0 0 12px; }
body.ge-gaming-hub h2.ge-gh-doortitle{ font-size:12px; margin:0 0 6px; }

body.ge-gaming-hub .ge-gh-eyebrow{ margin:0 0 14px; }
body.ge-gaming-hub .ge-gh-lede{ margin:20px 0 0; }
body.ge-gaming-hub .ge-gh-kicker{ margin:0 0 12px; }
body.ge-gaming-hub .ge-gh-doortitle{ margin:0 0 6px; }
body.ge-gaming-hub .ge-gh-followintro{ margin:0 0 12px; }
body.ge-gaming-hub .ge-gh-chiplabel,
body.ge-gaming-hub .ge-gh-doorsub,
body.ge-gaming-hub .ge-gh-esportintro,
body.ge-gaming-hub .ge-gh-newsintro,
body.ge-gaming-hub .ge-gh-moreintro{ margin:0; }

@media (prefers-reduced-motion:reduce){
  body.ge-gaming-hub *{ animation:none !important; transition:none !important; }
}
