/* =========================================================================
   Post sidecar — new_gigahost ("Meet the new Gigahost")
   Bead: cortex-f91tzsy (post) / cortex-ea6u739 (build) / cortex-43x0lra (art)

   Hero: a machined billet, wordless. Twenty-one slots milled across the top
   — one per year of service, 2006..2026 — of which twenty are struck and
   the twenty-first, the year still running, is the frame's only #2bb3f3.
   Below it a channel running off both edges carries a machinist "20" in
   flat ink. There is no type in the image at all: the post's own copy says
   what it says, and the hero repeating it was redundancy dressed as design
   (founder direction, 2026-07-29). Achromatic throughout, one axial light.
   Built, not drawn: modules/blog/images/_source/2026_new_gigahost.html.

   Signature moment: a soft "chapters" teaser for the launch series.
   Every selector is prefixed `.post--new_gigahost`.
   ========================================================================= */

/* --- Hero art direction ---------------------------------------------------

   The art is composed against the crop this band actually performs, so the
   numbers below are derived rather than eyeballed. Do not "tidy" them.

   `.hero--background` is `background-size: cover` at
   `height: clamp(420px, 56vw, 640px)`. Above ~1137px the image is scaled to
   the viewport WIDTH (s = W/1672) and cropped only VERTICALLY, and the
   overlaid title sits at a fixed FRACTION of the band — measured
   hero-relative y 433..550 of 640, constant from 1280 to 1920 because
   `.post-title` clamps out at 3.5rem. In source-image pixels the visible
   window and the title band therefore land at:

     viewport   window            title band
     1920       y 134 .. 692      y 511 .. 613
     1440       y  69 .. 812      y 572 .. 708
     1280       y  37 .. 873      y 602 .. 755

   35% is what keeps the tally (source y 146..292) inside the window at
   1920 — the tightest case, where only 557px of the source is visible at
   all — while leaving every title band below it. The title then falls on
   the empty LEFT half of the channel, which is bare machined floor put
   there for exactly that purpose; the "20" starts at source x 980 and a
   left-anchored title never passes x ~850, so the two never meet.

   Verified by rendering the real page at 1280 / 1440 / 1920 and at 390. */
.post--new_gigahost .post-hero {
  background-position: 50% 35%;
}

/* Anchor the title bottom-LEFT. It was bottom-RIGHT only to clear the old
   phoenix, which sat upper-left; that art is gone (cortex-zkpl4fw). Left is
   also what the crop wants: a left-anchored title ends at source x ~850 at
   every desktop width, which keeps both the "20" and the tally's live
   accent slot — the two things the image is actually made of — clear of the
   type at all times. Same treatment as the sibling new_stats hero. */
.post--new_gigahost .post-hero__inner {
  align-items: flex-start;
  text-align: left;
}

.post--new_gigahost .post-title {
  max-width: 16ch;
}

/* The eyebrow this post used to emit ("GIGAHOST · 2006–2026") is gone. It
   was set directly over the hero and restated the anniversary the image is
   already entirely about, in the one place the founder asked for no words.
   The date still ships in `.post-meta` below the title. */

/* Mobile: the band collapses to `clamp(340px, 70vw, 460px)` — at 390px that
   is a 390x340 box, which relative to the 1672x941 source is TALLER than it
   is wide, so `cover` stops cropping vertically (the full source height is
   shown) and crops ~35% of the WIDTH instead. The composition is built for
   this: everything that has to survive lives inside source x 300..1372 —
   the tally spans 312..1358 and the "20" 980..1370 — so a centred window
   keeps the whole idea. No zoom; zooming to separate the title from the art
   would cost the tally, and the tally is the idea. */
@media (max-width: 767px) {
  .post--new_gigahost .post-hero {
    background-position: 50% 50%;
  }
}

/* --- Closing line, then the chapters card (cortex-kdok586) ----------------
   The outro ("Welcome to the new Gigahost. Twenty years young.") used to render
   BELOW the card, where the card's tight 0.5rem bottom margin made it read as a
   caption hanging off the card rather than as the article's last line. It now
   closes the prose, above the card (founder direction 2026-08-02).

   Two spacing consequences, both handled here:
     1. The outro needs its own beat above it — 1.4rem (the `.post-body p`
        default) makes it look like a fourth paragraph of the "Twenty years"
        section instead of the sign-off.
     2. The card's bottom margin was tuned for a line of text sitting under it.
        What follows it now is the CTA pill button, so 0.5rem is far too tight;
        2.5rem gives the button the same air the card gets above. */
.post--new_gigahost .post-outro {
  margin-top: 2.5rem;
}

/* --- Chapters: the launch teaser (signature moment) ---------------------- */
.post--new_gigahost .chapters {
  margin: 3.25rem 0 2.5rem;
  padding: clamp(1.75rem, 4vw, 2.5rem);
  background: #ffffff;
  border: 1px solid var(--gh-rule);
  border-radius: var(--radius-lg, 12px);
  box-shadow: 0 24px 48px -32px rgba(4, 45, 74, 0.35);
}

/* The card is kicker + one body paragraph. Its `<h2 class="chapters__title">` and
   its second body line are gone (founder direction, cortex-koy9h0p) — the card is
   explicitly mutable and gets rewritten as each post in the series ships, so the
   now-dead `.chapters__title` and `.chapters__body + .chapters__body` rules were
   deleted rather than left behind for a title that is not coming back in this form.

   The kicker used to carry `margin: 0` because the title's own `0.35rem` top margin
   opened the gap under it. With the title gone the kicker has to open that gap
   itself, or the eyebrow collides with the body copy. 0.85rem is the old
   kicker->title->body rhythm collapsed into one step: near enough to keep the
   eyebrow attached to the card rather than floating, far enough that it reads as a
   label above the paragraph and not as its first line. */
.post--new_gigahost .chapters__kicker {
  margin: 0 0 0.85rem;
  color: var(--gh-blue);
  text-transform: uppercase;
  letter-spacing: 0.16em;
  font-size: 0.74rem;
  font-weight: 600;
}

.post--new_gigahost .chapters__body {
  color: var(--gh-muted);
  font-size: 1.04rem;
  line-height: 1.55;
  margin: 0;
}

/* --- Closing CTA as a single pill button (cortex-udrr63k) ----------------
   The post used to end with two links (Open Control Center + Request Phoenix
   early access). Phoenix came out of this post, so only the primary CTA
   remains — the former `a:last-of-type` secondary/outline rule is gone, since
   with one link it matched that same link and rendered the sole CTA as the
   secondary action.

   DORMANT WHILE THE CTA IS HIDDEN (cortex-koy9h0p). The post template's
   `$ccCtaLive` flag is false until Control Center 2.0 ships, so the closing
   paragraph is not emitted and `.post-body > p:last-child` currently matches
   nothing — the last child is the `<aside class="chapters">`, and `p:last-child`
   only matches a `p` that IS the last child. That is why these rules are kept
   verbatim rather than deleted: flipping the flag back to true restores the pill
   button with no CSS change. Do not "clean up" this block as dead code, and do
   not loosen the selector to `p:last-of-type` — that would start styling the
   standalone read-more line as a pill button. */
.post--new_gigahost .post-body > p:last-child {
  text-align: center;
}

.post--new_gigahost .post-body > p:last-child a {
  display: inline-block;
  margin: 0.35rem 0.4rem;
  padding: 0.7rem 1.5rem;
  border-radius: var(--radius-pill, 50px);
  background: var(--gh-blue-mid);
  color: #fff;
  font-weight: 600;
  text-decoration: none;
  transition: background 0.18s ease, transform 0.18s ease;
}

.post--new_gigahost .post-body > p:last-child a:hover,
.post--new_gigahost .post-body > p:last-child a:focus {
  background: var(--gh-navy);
  color: #fff;
  box-shadow: inset 0 0 0 1.5px var(--gh-navy);
}
