/* ============================================================
   MEDIA HOLDING — the surface's own composition inside the
   GOLD ECOSYSTEM SHELL.

   THE SHELL IS NOT INTERPRETED HERE. `static/../shell/css/tokens.css` and
   `physics.css` are byte-identical deliveries of the accepted Gold
   implementation (see static/DELIVERED_COPIES.md). They arrive with their own
   path layout so every `url()` inside them resolves exactly as it does on
   goldintelligence.tech, and nothing in this file redefines a shell token, a
   shell law or a shell component.

   THE LAW THIS FILE OBEYS (Founder GO, 2026-08-24):
     GOLD IS THE DEFAULT. A DIFFERENCE REQUIRES A FUNCTIONAL REASON.
   Every rule below therefore names the function that requires it. A rule with
   no functional reason does not belong in this file — it belongs in the shell,
   identical for every product.
   ============================================================ */

/* ---- 1 · THE IDENTITIES OF THIS SURFACE, IN ONE GRAMMAR ------------------
   FUNCTION: every identity here — the ecosystem's own, and each product's —
   is the SAME shell composition (`.gi-lockup`: ring → name → rule → closing
   line, Founder correction 2026-08-24). A context therefore changes exactly
   one thing, and the shell says which: SIZE, through `--mark`. Nothing below
   restyles a part of the composition; each rule sets the one lever.

   THE ARRIVAL SCALE IS THE REFERENCE'S, WITH ONE MEASURED EXCEPTION. Gold's
   hero lever is `clamp(15px, 3.6vw, 23px)` × `--seal: 9.3em` — 213.9px from
   640px up, 139.5px at its floor. Preferred term and ceiling are carried here
   unchanged; the floor alone is raised, for the arithmetic reason stated
   immediately below. */
.mh-ecolock-hero { --mark: clamp(19px, 3.6vw, 23px); }

/* THE ONE NAMED DIFFERENCE IN THIS LADDER, AND THE MEASUREMENT THAT FORCES IT.

   The reference's arrival lever is `clamp(15px, 3.6vw, 23px)`; its preferred
   term and its ceiling are carried here untouched, and only the FLOOR is
   raised to 19px. The reason is a collision of two proven rules, and it is
   arithmetic rather than taste:

     - every line of an identity is a fraction of one em: the signature is
       .406em, so a line stays readable (this surface's floor, 6.8px, derived
       from the Founder's own corrections of 2026-08-24) only at em >= 16.8px;
     - a role may never render larger than the role above it.

   On a 390px phone the reference's arrival floor is 15px. Any role BELOW it
   would then have to sit under 15px to keep the order - and at 15px the
   signature already renders 6.09px, under the floor. The reference never meets
   this because it carries no identity in a list row and no second identity on
   the same width; this surface carries both. So the arrival floor is set to
   the smallest value that keeps the whole ladder readable AND ordered at every
   width, and nothing else about the lever moves.

   FOUNDER GO V2 (2026-09-10) — functional-reason test re-applied: the function
   that requires a larger mobile primary seal is the multi-identity ladder on
   this group surface (hero + product-row identities on the same width). Gold
   landing has no product-row identities, so its hero floor of 15px never meets
   the collision. NAMED FUNCTIONAL DIFFERENCE — keep floor 19px; do not invent
   a separate magic mobile size. */

/* THE LADDER IS THE REFERENCE'S OWN, AND IT IS A LADDER OF ROLES.

   Founder finding, 2026-08-24: «в одинаковой иерархической роли и одинаковом
   положении — одинаковый системный размер; во вспомогательных и последующих
   страницах… размер определяется их иерархией и местоположением.»

   Measured on the accepted implementation the same day (read-only, live):

     role                      lever                          seal 1440 / 390
     arrival (landing hero)    clamp(15px, 3.6vw, 23px)            214 / 140
     page identity (/insights) clamp(13px, 3vw, 19px)              177 / 121
     provenance (closing)      its own                             156 / 124

   Two properties of that ladder matter more than any single number: it is
   ordered by ROLE, and its floors are ordered the same way as its ceilings —
   13 < 15 — so the order survives at every width, including the one where both
   clamps sit on their floor.

   This surface had neither. The page-identity role silently borrowed the
   PRODUCT ROW's lever, which was calibrated for a different job (filling a
   column, dm-20260824-299/300), and that lever's floor is 17px — ABOVE the
   arrival lever's 15px. Measured consequence at 390px: the surface's own
   arrival seal rendered 140px while every product seal below it rendered
   158px, i.e. the hierarchy inverted on the width most people use.

   The page-identity role therefore takes the reference's page lever — its
   preferred term (3vw) and ceiling (19px) exactly, its floor raised by the
   same readability arithmetic as the arrival role — and the row keeps its
   named difference on the widths where the column exists (below, §12). The law
   this file now holds: **a role never renders larger than the role above it,
   at any width, and no line of any identity falls under the reading floor.**

   Rendered result of the ladder, measured after the change:
   1440 — 213.9 / 176.7 / 167.4 · 1024 — 213.9 / 176.7 / 156.2 ·
    768 — 213.9 / 176.7 / 176.7 ·  390 — 176.7 / 158.1 / 158.1. */
.mh-ecolock-page { --mark: clamp(17px, 3vw, 19px); }
/* NEWS page identity = Gold landing hero seal (Founder 2026-09-11).
   Prior screen clamp left seal at 176.7×188 vs Gold 213.9×227.6. */
.mh-prodlock.mh-newslock-page { --mark: clamp(15px, 3.6vw, 23px); }

/* ---- 1a · LOCKUP LINE GEOMETRY = GOLD PRODUCT DEFAULT --------------------
   Founder GO PIXEL-PERFECT (2026-09-10): primary identity silhouette must
   match Gold Intelligence. Prior Stage 2 “group line” overrides
   (rule 0.620 × seal, equal joints 0.085, smaller dot) made the MH lockup
   taller and visually other than Gold (measured BEFORE @1440:
   rule W 132.6 vs Gold 286.8; seal→word 18.2 vs 12.4; idH 319.1 vs 299.5).

   Functional-reason re-test: Media Holding’s role as group owner does not
   require a different rule/dot/gap geometry — only different wordmark text
   and a readable closing line colour (§1b). Decorative/group-grammar
   difference without a named function is forbidden. Shell physics.css
   (rule calc(var(--seal)*1.341), gaps .058 / .42em / .114) is the default.
   No surface overrides of .gi-rule / wordmark-top / signature-top on
   .mh-ecolock. */

/* ---- 1b · THE LINE A PERSON MUST READ, AND THE CORRECTION THAT WAS LOST ---
   Founder finding, 2026-08-24 (screen 2): the beam looks as if it does not
   reach part of the identity. Measured on that exact surface (live /et/, 390px,
   six positions of the front, top-decile of each part):

     seal       rest 131 → peak 167    wordmark  rest 139 → peak 164
     rule       rest 141 → peak 176    CLOSING   rest  40 → peak  65

   The closing line stands a whole register below everything above it, so the
   light appears to stop before it. The cause is not the light: it is a
   correction this surface had already proven and then lost in a rebuild. On
   2026-08-24 the group descriptor at hero scale was measured at 2.15:1 in the
   band's own path and moved from `--faint` to `--muted`, with the reason
   recorded — «readability never depends on the light, and a line a person must
   read takes --muted, never --faint». When the composition was rebuilt into the
   one grammar that same day, the descriptor became the fourth part and the
   colour rule did not travel with it.

   It travels now, and only where it applies: on the ECOSYSTEM's identity the
   fourth line is the descriptor — a line a person reads. On a product's
   identity it is an attribution («POWERED BY MEDIA HOLDING»), which the shell
   keeps quiet by decision; that stays untouched. */
.mh-ecolock .gi-signature { color: var(--muted); }

/* FUNCTION: the shell's rest rule does not name `.gi-provenance`, so that one
   carrier keeps moving where movement was refused. MEASURED ON THE ACCEPTED
   IMPLEMENTATION ITSELF (2026-08-24, headless, reduced motion): it is still
   running there too — this is the shell's own gap, not this surface's. The
   delivered file is not forked to fix it: the fact is routed to the shell's
   owner, and this surface parks the carrier at the shell's own designed
   highlight position so no page of ours moves under a refusal. */
@media (prefers-reduced-motion: reduce) {
  .gi-provenance { animation: none !important; background-position: calc(50% + 16vw - var(--dxc, 0px)) 0, 50% 50% !important; }
}

/* ---- 2 · THE READING TONE INSIDE A STATEMENT ----------------------------
   FUNCTION: the approved entity copy carries first-party <span class="q">
   markup on the sub-clause that steps down from the sentence that owns it.
   Gold has no such marker because its copy has no such clause. The step is a
   tone, never a drop below the reading floor: `--muted` is the shell's own
   secondary ink, measured at 6.1:1 on the panel. */
.q { color: var(--muted); }

/* ---- 3 · THE PRODUCT ROWS' STATUS --------------------------------------
   FUNCTION: this surface lists the ecosystem's products with an honest state
   («Работает» / «В разработке» / «Исследуем»), which Gold's capability rows do
   not carry — Gold lists what one product does, this lists what the group has
   shipped. The state is metadata about the row, so it takes the shell's own
   quiet marker voice under the name, never a colour of its own invention. */
.mh-state { display: block; margin-top: 6px; }
.mh-state.is-live { color: var(--gold-lo); }

/* ---- 4 · LEGACY NEWS-LIST SELECTORS (retired markup) --------------------
   FUNCTION: retained only so an old cache cannot paint an unstyled body; the
   generator emits `.ins-card`, not `.mh-item`. Do not extend. */
.mh-item { display: block; padding: clamp(26px, 3.6vh, 38px) 0; border-bottom: 1px solid var(--line); }
.mh-item:last-child { border-bottom: 0; }
.mh-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px; margin: 0 0 12px; }
.mh-meta .sep { color: var(--line); }
.mh-meta time { font-variant-numeric: tabular-nums; }
.mh-item .h-section { margin: 0 0 10px; }
.mh-item .mat-copy { margin: 0; color: var(--muted); max-width: var(--measure); }
.mh-item .ins-more { display: inline-block; margin-top: 14px; }
a.mh-item:hover .h-section { filter: brightness(1.08); }
a.mh-item:focus-visible { outline: 2px solid var(--gold-lo); outline-offset: 4px; }

/* ---- 5 · NEWS ARTICLE — CONTINUATION OF THE NEWS HUB (decision B) -------
   FUNCTION (Founder GO 2026-09-10 NEWS-CONT-001): the article is a READING
   role on the SAME Media Holding NEWS surface as `/news/`. Composition
   precedent = this product's hub (`section.mh-head > .hero-copy`), not Gold
   Insights edition (`section.hero` / `.ins-article`). Insights-edition
   selectors below are retained only as cache-safe legacy; the generator no
   longer emits them as the article root. */

/* Back to hub — NEWS surface link (gold register), not Insights board-learn. */
.mh-back { text-align: center; margin: 14px 0 0; font-size: .88rem; }
.mh-back a { color: var(--gold); text-decoration: none; font-weight: 600; }
.mh-back a:hover { text-decoration: underline; }

/* Reading column — NAMED functional difference: long-form needs a measure.
   Same token as the shell's reading measure; centred under the hub hero. */
.mh-read { max-width: var(--measure, 760px); margin-left: auto; margin-right: auto; }
.mh-read h2 { font-size: 1.15rem; font-weight: 600; margin: 28px 0 10px; line-height: 1.3; }
.mh-read > h2:first-of-type { margin-top: 0; }
.mh-read p { color: var(--text); font-size: 1rem; line-height: 1.75; margin: 0 0 14px; overflow-wrap: break-word; }
.mh-read .note { color: var(--muted); font-size: .88rem; line-height: 1.6; margin: 22px 0 0; }

/* Hub dek and article dek share .lede; keep the same centred measure. */
.hero-copy .lede { margin-left: auto; margin-right: auto; max-width: 46ch; }

/* Field riders for NEWS reading body + shared hero h1 / meta (shell envfield). */
@supports ((-webkit-background-clip: text) or (background-clip: text)) {
  .hero-copy h1, .mh-read h2 {
    background-image: var(--glint-soft), linear-gradient(var(--text), var(--text));
    background-repeat: repeat-x, no-repeat;
    background-size: 130vw 100%, 100% 100%;
    background-position: calc(50% - 69.8vw - var(--dxc, 0px)) 0, 50% 50%;
    -webkit-background-clip: text; background-clip: text;
    -webkit-text-fill-color: transparent;
    animation: envfield 72s linear infinite;
  }
  .mh-read > p, .mh-read .note, .ins-meta {
    background-image: var(--glint-text), linear-gradient(currentColor, currentColor);
    background-repeat: repeat-x, no-repeat;
    background-size: 130vw 100%, 100% 100%;
    background-position: calc(50% - 69.8vw - var(--dxc, 0px)) 0, 50% 50%;
    -webkit-background-clip: text; background-clip: text;
    -webkit-text-fill-color: transparent;
    animation: envfield 72s linear infinite;
  }
  .mh-read p a, .mh-read .note a {
    -webkit-text-fill-color: var(--gold-hi); background: none;
  }
}

/* FUNCTION: every publication declares what it is — our own record, verified
   external material, or material we cite without verifying. Editorial
   obligation; no Gold counterpart. MATERIAL LAW (Stage 2): information =
   line + air — never raised `--panel` (raised = transaction only). */
.mh-trust { display: flex; align-items: flex-start; gap: 12px; margin: 0 0 22px; padding: 14px 0; border: 0; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); background: transparent; max-width: var(--measure); }
.mh-trust i { width: 8px; height: 8px; border-radius: 50%; flex: none; margin-top: 7px; background: var(--faint); }
.mh-trust[data-trust="own"] i { background: var(--gold); }
.mh-trust[data-trust="verified"] i { background: var(--silver); }
.mh-trust .mat-copy { margin: 0; color: var(--muted); }

/* Sources on the NEWS reading column. */
.mh-sources { margin-top: clamp(34px, 4.5vh, 52px); border-top: 1px solid var(--line); padding-top: 24px; max-width: var(--measure); }
.mh-sources h3 { font-size: .66rem; font-weight: 600; text-transform: uppercase; letter-spacing: .16em; color: var(--faint); margin: 0 0 10px; }
.mh-sources ul, .mh-sources ol { margin: 0; padding-left: 1.3rem; }
.mh-sources li { color: var(--muted); font-size: .88rem; line-height: 1.75; }
.mh-sources li + li { margin-top: 10px; }
.mh-sources a { color: var(--gold-lo); text-decoration: underline; text-underline-offset: .28em; word-break: break-word; }

/* Legacy Insights-edition / engraved blob — cache-safe only. Do not extend. */
.hero { display: grid; grid-template-columns: 1fr; padding: clamp(40px, 7vh, 72px) 0 6px; }
.hero .hero-copy { max-width: 760px; }
.board-learn { text-align: center; margin: 14px 0 0; font-size: 14px; }
.board-learn a { color: var(--gold); text-decoration: none; font-weight: 600; }
.ins-article { max-width: var(--measure, 760px); margin: 0 auto; }
.ins-article h2 { font-size: 1.15rem; font-weight: 600; margin: 28px 0 10px; line-height: 1.3; }
.ins-article p { color: var(--text); font-size: 1rem; line-height: 1.75; margin: 0 0 14px; }
.ins-sources { margin-top: 28px; border-top: 1px solid var(--line); padding-top: 18px; }
.mh-article .mat-copy + .mat-copy { margin-top: 1.15rem; }
.mh-article .h-section { margin: clamp(34px, 4.5vh, 52px) 0 16px; }
.mh-article .mh-title { font-size: clamp(1.35rem, 1.1rem + .85vw, 1.72rem); letter-spacing: .06em; }

/* ---- 6 · SKIP LINK ------------------------------------------------------
   FUNCTION: an accessibility affordance this surface owes its readers; the
   shell carries no skip link because Gold's landing is one column with no
   repeated chrome above the content. */
.mh-skip { position: absolute; top: 0; inset-inline-start: 0; width: 1px; height: 1px; padding: 0; margin: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0; }
.mh-skip:focus { inset-inline-start: 12px; top: 12px; width: auto; height: auto; margin: 0; overflow: visible; clip-path: none; z-index: 100; padding: 12px 18px; background: var(--panel); color: var(--text); border: 1px solid var(--gold-lo); font-size: .82rem; letter-spacing: .06em; }

/* ---- 7 · PRINT ----------------------------------------------------------
   FUNCTION: an article must survive paper. The shell is a screen material and
   states nothing about print. */
@media print {
  .substrate, header.bar, .mh-skip, footer { display: none !important; }
  body { background: #fff; color: #111; }
  .mat-copy, .mh-sources li, .ins-sources li, .mh-trust .mat-copy, .ins-article p, .mh-read p { color: #333 !important; -webkit-text-fill-color: #333 !important; }
  .h-section, .engraved, .ins-article h2, .mh-read h2 { color: #000 !important; -webkit-text-fill-color: #000 !important; }
  .mh-sources a::after, .ins-sources a::after { content: " (" attr(href) ")"; font-size: .8em; word-break: break-all; }
}


/* ============================================================
   8 · THE SHELL'S COMPOSITION VALUES, AS CLASSES

   WHY THIS SECTION EXISTS — and it is not a style preference.
   The accepted implementation writes composition inline. This bundle ships a
   strict CSP `style-src 'self'` that blocks style ATTRIBUTES — so values that
   worked locally were silently dropped in production. Values live here as
   classes; the functional reason for the carrier change is the policy itself.

   Founder GO 2026-09-10: registration reference = Gold /assistant (not Gold /).
   journey.py: pad clamp(44px,8vh,86px) + row mb clamp(30px,6vh,60px) → Y 158.
   ============================================================ */
.mh-hero {
  /* Arrival Y: Gold /assistant (journey.py clamp 44/8vh/86). Close: Gold
     landing half-speech — not a second full --section under the CTAs. */
  padding-top: clamp(44px, 8vh, 86px);
  padding-bottom: calc((clamp(44px, 7vh, 72px) + var(--section)) / 2);
}
.mh-toprow    { justify-content: flex-end; margin-bottom: clamp(30px, 6vh, 60px); }
/* Gold /assistant wraps lockup in .rise with margin-bottom:8px (journey.py).
   Landing uses 10px; canonical arrival reference is /assistant. */
.mh-idline    { margin-bottom: 8px; text-align: center; }
.mh-lede-brand{ margin: var(--gap-brand) 0 0; }
.mh-lede      { margin-top: var(--gap-eyebrow); }
/* Action row under the cover sentence — Gold landing CTA rhythm after speech. */
.mh-actions   { margin-top: clamp(22px, 3.2vh, 36px); }
.mh-say       { margin: 14px 0 0; color: var(--muted); font-size: clamp(.95rem, .9rem + .25vw, 1.05rem); max-width: var(--measure); }
.mh-pn        { font-size: .78rem; letter-spacing: .18em; margin: 0; }
.mh-pd        { margin: 0; color: var(--muted); font-size: clamp(.95rem, .9rem + .25vw, 1.05rem); max-width: var(--measure); }
.mh-act       { margin: 18px 0 0; }

/* ── Gold pillars / rows-band law (surfaces.py, Founder 2026-08-28) ────────
   The band from the hairline above to the first row hairline is ONE pause,
   split equally: half above the label, half below it (margin-bottom). Bottom
   section pad is 0 so the rows own the lower edge; the next section's
   `.section + .section` hairline (or an explicit merge) continues the page.
   Applied to this surface's product rows — the ecosystem's primary capability
   band after identity. */
.mh-band-rows {
  padding-top: calc((var(--section) + 18px + var(--cell)) / 2);
  padding-bottom: 0;
}
.mh-band-rows > .label {
  margin: 0 0 calc((var(--section) + 18px + var(--cell)) / 2);
}

/* Statement band immediately after a rows band: Gold trust_band uses
   border-top:0 so pillars→trust read as one continuous group, not two
   empty padded boxes. */
.mh-band-rows + .section.mh-band-say {
  border-top: 0;
}
.mh-band-say > .label { margin: 0; }
.mh-head      { padding-top: clamp(40px, 7vh, 72px); }
.mh-title     { font-size: clamp(1.5rem, 5.2vw, 2.9rem); line-height: 1.15; margin: 14px 0 0; }
.mh-title--flush { margin: 0; }
.mh-flush     { padding-top: 0; }
.mh-ah        { font-size: .78rem; letter-spacing: .2em; }
.mh-sh        { font-size: .72rem; letter-spacing: .22em; margin: 0 0 14px; }
.mh-ap        { color: var(--muted); max-width: var(--measure); }
.mh-gap       { margin-top: clamp(34px, 5vh, 58px); }
.mh-note      { text-transform: none; letter-spacing: .02em; color: var(--muted); margin-top: 26px; }
.mh-a         { color: var(--gold-lo); text-decoration: underline; text-underline-offset: .28em; }
.mh-nf        { padding-top: clamp(96px, 18vh, 200px); }
.mh-close     { padding-bottom: clamp(48px, 8vh, 90px); }
.mh-rights    { font-size: .72rem; flex-wrap: wrap; }
.mh-fl        { color: var(--muted); }
.mh-fl--me    { text-decoration: underline; }
.mh-fn        { text-transform: none; letter-spacing: .02em; color: var(--muted); max-width: var(--measure); }
.mh-rowtitle  { font-size: .9rem; letter-spacing: .16em; }
.mh-empty     { margin: 0 0 12px; }


/* ============================================================
   9 · THE READING SURFACE, IN THE SHELL'S OWN INSIGHTS COMPOSITION

   The accepted implementation has a reading surface — `/insights` — and it is
   the precedent this one follows exactly. Its composition, measured on the
   live page:

     header.bar → div.ins-identity (the FULL lockup, alone) → section.hero >
     .hero-copy (.eyebrow → h1 → .lead) → .ins-grid > a.ins-card → closing

   The values below are that page's own, carried across unchanged. They live
   here rather than inline for the reason section 8 already gives: this bundle
   ships a policy that blocks the style attribute, and the reference does not
   ship a policy at all.

   THE IDENTITY STANDS ON EVERY PAGE (Founder GO, 2026-08-24: «всегда и везде»).
   The reference proves the rule on its own inner pages: the chrome carries
   wayfinding, and the identity arrives BELOW it, alone and in full, before the
   page says its first word. Until now this surface's reading pages carried no
   identity at all.
   ============================================================ */
.ins-identity { text-align: center; margin: clamp(64px, 13.5vh, 126px) 0 0; }
@media (max-width: 768px) {
  .ins-identity { margin-top: clamp(40px, 8vh, 70px); }
}
/* Arrival chrome already owns Gold landing air; do not stack Insights margin. */
main > .ins-identity:first-child { margin-top: 0; }

.hero-copy { margin-left: auto; margin-right: auto; text-align: center; }
.hero-copy h1 { font-size: clamp(1.35rem, 1.1rem + .85vw, 1.72rem); line-height: 1.28; margin: 0 0 14px; text-wrap: balance; }
.hero-copy .lead { margin-left: auto; margin-right: auto; max-width: 46ch; }

.eyebrow { color: var(--gold-hi); font-size: .62rem; font-weight: 600; letter-spacing: .22em; text-transform: uppercase; margin-bottom: 12px; }
.lead { color: var(--muted); font-size: clamp(.95rem, 2vw, 1.1rem); line-height: 1.65; max-width: 52ch; margin: 0; }

.ins-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 0 34px; }
.ins-card { padding: 18px 0 22px; border-top: 1px solid var(--line); display: block; text-decoration: none; color: var(--text); }
.ins-card p { margin: 0; color: var(--muted); font-size: .94rem; line-height: 1.6; }
.ins-meta { color: var(--faint); font-size: .66rem; font-weight: 600; letter-spacing: .16em; text-transform: uppercase; margin-bottom: 10px; display: block; }
.ins-card h3 { margin: 0 0 8px; font-size: 1rem; font-weight: 600; line-height: 1.35; }
.ins-card:hover h3 { filter: brightness(1.08); }
.ins-card:focus-visible { outline: 2px solid var(--gold-lo); outline-offset: 4px; }
.ins-meta .sep { opacity: .55; }

/* ---- 10 · THE CLOSING IS SEPARATED LIKE EVERY OTHER BAND ----------------
   FUNCTION: the shell separates bands with `.section + .section`, which is an
   ADJACENT-sibling rule. This surface adds a `<main>` landmark for the skip
   link — an accessibility affordance the reference's single-column landing
   does not need — and that landmark stands between the last band and the
   closing, so the shell's rule cannot reach across it. Measured on the live
   page: every band on the surface carried the hairline; the closing alone had
   `border-top-width: 0px` against the reference's `1px`, and it read as a
   block that did not belong to the page. The line is restored, not invented:
   same width, same token, same law. */
main + footer.section { border-top: 1px solid var(--line); }

/* ---- 11 · THE CLOSING HAS A LAST WORD ----------------------------------
   FUNCTION: Visual Physics §9, verbatim — «**Not** used on the Media Holding
   site itself — there the direct identity signs the page (`MEDIA HOLDING` +
   legal line)». The «Powered by» layer is correctly absent here (the owner IS
   the surface), but nothing had taken the place the canon assigns, so the page
   stopped instead of closing. The signature uses the shell's own §9 carrier —
   the same register, the same light — with the direct identity as its word. */
.gi-foot-sig .powered b { color: var(--muted); }

/* ---- 12 · PRODUCT MARKS: DERIVED, NEVER DRAWN --------------------------
   FUNCTION: a product destination carries its own identity. The marks are the
   Founder masters with the studio ground removed and nothing else changed
   (`scripts/derive-product-marks.mjs` prints the provenance of every file it
   writes). A product that has no ratified mark shows none — the column keeps
   its width so every name still stands on one axis, and the row says the
   truth: a product gets its face when it has one. */
/* THE MARK IS THE RING ALONE, AND THE SCENE'S LIGHT REACHES IT.
   Two Founder findings, 2026-08-24: «логотипы у нас и так говорят сами за себя»
   — the caption inside the asset is dropped, because the name now opens the
   text beside it and would otherwise be said twice; and «свет почему то на них
   не реагирует» — a plain <img> is a replaced element, it cannot carry the
   field, so the mark stood dark in a scene where every register answers.

   The response is the shell's own mechanism, the one its group lockup uses:
   a sibling layer masked by the asset's OWN alpha, carrying the same one band,
   on the same keyframe and the same phase. The metal that already exists is
   lit; nothing is redrawn and no mark emits light of its own. */
/* ---- 12 · THE PRODUCT LOCKUP FILLS ITS COLUMN -------------------------
   The row shows the product's FULL identity, drawn by the shell: three
   vector facet masks of one metal, the wordmark, the rule and the closing
   line. Two things follow that a cropped raster could not give:

     · it is the whole logo at any size, and it stays crisp;
     · its light is the surface's own beam — the shell paints the facets
       through `position: fixed` layers riding `envlight`, so the mark cannot
       be lit while the beam is elsewhere. There is no second animation to
       fall out of step with.

   SIZE USES THE SPACE IT IS GIVEN (Founder GO, 2026-08-24): the column is
   ~279px at the reference measure, and the lockup is driven by ONE lever, so
   the mark grows with the column instead of sitting as a small object in a
   large empty box. `--mark` 16px puts the seal at 149px and the wordmark at
   ~238px — the column filled, nothing clipped. */
/* THE COLUMN THE LOGO IS GIVEN, AND THE SIZE IT IS SET AT.

   The reference's row carries a short text label in its first column, so
   `minmax(180px, .8fr)` is right there. This surface's row carries a product
   IDENTITY — seal, wordmark, rule and attribution — and every line inside it
   is a fraction of one em. Measured on the built page, the reference's column
   left that em at 11px on a laptop, which put the attribution line at 4.47px
   and the ecosystem descriptor at 5.95px: rendered, tracked, and past the
   point where they are text at all. That is the functional reason for the
   difference — the same one the Founder named on 2026-08-24, that the logo sat
   small in an area it was not using.

   So the column is widened to what an identity needs, and the em is set from
   it. Not with a container query: `container-type` makes the element a
   containing block for fixed-position descendants, and the glint the shell
   paints on `position: fixed` is exactly that — it would light in the box
   instead of on the page, which is the defect this same package closes. */
.mh-markcol { display: block; }
.mh-prodlock { margin: 0 auto; }

/* WHERE THE TWO-COLUMN ROW STOPS BEING ABLE TO HOLD AN IDENTITY. Measured on
   the built page across eleven widths: below about 1024px the first column
   falls under ~300px, and a lockup set small enough to fit it puts its
   attribution line at 6.1px — while a lockup set large enough to read spills
   out of the column by up to 77px. Neither is a result. The row therefore
   stacks earlier than the reference's does, which is the same behaviour the
   reference already has on a phone, reached at the width where THIS row's
   content requires it. Above it, the column is widened from `.8fr` to `1fr`
   for the same reason: an identity is not a text label. */
/* AND THE AIR UNDER AN IDENTITY IS NOT THE AIR UNDER A LABEL.

   Founder correction, 2026-08-24, point 3: stacked, the row put its text
   directly under the product's full identity and the composition read as
   compressed. The shell's stacked row uses `gap: 8px` — correct, because in
   the reference that column holds a short TEXT LABEL, where 8px is optical
   spacing inside one block.

   Here the first item is a complete identity that closes with its own
   signature line, and the distance from an identity to the copy that follows
   it is a boundary the shell already owns and has already calibrated:
   `--gap-brand` — the pause under the hero lockup («the brand reads as
   standing in its own air», 36% of the lockup on a laptop, 29% on a phone).
   It is taken as it is, at both of its own widths: 67px on a 390px phone,
   96px where the row stacks on a wider screen. No value is chosen here. */
/* AND THE ROW'S OWN LEVER STOPS WHERE ITS REASON STOPS.

   The row lever exists because an identity stands in a COLUMN and every line
   inside it is a fraction of one em (dm-20260824-299/300). Below 1024px there
   is no column: the row stacks, and the identity is simply the first thing in
   a full-width block — the same job the page identity has. So on the stacked
   widths the row takes the page lever rather than a third, independently
   calibrated one, and the ladder cannot invert (measured before this rule:
   arrival 140px against row 158px at 390px). Above 1024px the column returns
   and so does the row's named difference: 167px against the page role's 177px
   and the arrival role's 214px — ordered, at every width. */
@media (max-width: 1023px) {
  .mat-info.gi-row { grid-template-columns: 1fr; gap: var(--gap-brand); padding: 16px 0 18px; }
  .mh-prodlock { --mark: clamp(17px, 3vw, 19px); }
}
@media (min-width: 1024px) {
  .mat-info.gi-row { grid-template-columns: minmax(210px, 1fr) 1.85fr; }
  .mh-prodlock { --mark: clamp(16.8px, 1.48vw, 18px); }
}

/* A NAME IS NOT A TYPOGRAPHIC EFFECT. `.gi-line` sets every line of the
   lockup in caps, which is right for the shell's own identity — GOLD
   INTELLIGENCE is written that way. A product whose owner writes it
   `MHDigital` is not written `MHDIGITAL` (Founder correction, 2026-08-24),
   so in a product row the case comes from the text and nothing transforms
   it. The names that are genuinely upper-case are passed upper-case. */
.mh-prodlock .gi-wordmark { text-transform: none; }

/* THE PAINT MUST REACH THE WHOLE LETTER. The shell clips its metal to the
   glyphs and sizes that metal to the element BOX, whose height is one em —
   exact for upper-case, which has nothing below the baseline. `MHDigital`
   does: measured, the descender of the `g` fell outside the painted box and
   was cut flat, so the word read `MHDiqital` (Founder finding, 2026-08-24).
   The room is opened with padding — which is what the background is sized
   to — and taken straight back with a negative margin, so the lockup keeps
   the ONE rhythm the gates hold it to and only the paint area changes. */
.mh-prodlock.mh-descend .gi-wordmark { padding-bottom: .3em; margin-bottom: -.3em; }

/* THREE PEERS BY CONSTRUCTION, NOT BY ADJUSTMENT.

   Until 2026-08-24 the News row carried a different composition from the two
   beside it — the group's raster lockup — so its scale, its material and its
   reading rank all had to be brought level by rules written here, one at a
   time. Under the one grammar there is nothing left to level: the three rows
   hold the same shell component, at the same lever, in the same metal, and
   they cannot drift apart at any width because there is only one composition
   on the surface to drift. Those rules are therefore gone rather than
   rewritten. */

/* the name opens the text, so the row's own rhythm starts with it */
.gi-row .mh-pn { margin: 0 0 10px; }
/* The engraved register sets a section marker in caps, and for a name that IS
   upper-case — GOLD INTELLIGENCE — that is simply the name. It is not a
   licence to respell one: `MHDigital` is how its owner writes it, and a
   heading that renders `MHDIGITAL` is a misspelling wearing a typographic
   excuse (Founder correction, 2026-08-24). The register keeps its size, its
   tracking and its material; only the transform stands down, and only where
   the name requires it. */
.gi-row .mh-pn.mh-cased { text-transform: none; }
.gi-row .mh-pd { margin: 0; }
.gi-row .ins-more { margin-top: 12px; }

/* THE FOURTH LINE IS THE SHELL'S OWN, AND IT IS NO LONGER INVENTED HERE.
   The surface used to add a fifth part to the group lockup so that a page
   could name itself. Under the one grammar the name IS the second part and
   the fourth line says what the identity is for, so that rule has nothing
   left to do (Founder correction, 2026-08-24, points 4–6). */

@media (prefers-reduced-motion: reduce) {
  .mh-markbox::after { animation: none !important; background-position: calc(50% + 16vw - var(--dxc, 0px)) 0; }
}

/* ---- 13 · ARRIVAL CHROME = Gold LANDING (Founder GO 2026-09-11) ---------
   FUNCTION: periphery L/R like goldintelligence.tech `/`, not Insights
   right-cluster + hairline. Pad/row values = surfaces.py landing header.
   Nav register matches Gold muted chrome type. */
.mh-arrival {
  padding-top: clamp(56px, 10vh, 110px);
  padding-bottom: 0;
  border: 0;
}
.mh-chrome-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
  margin-bottom: clamp(36px, 7vh, 72px);
  min-height: 32px;
  border: 0;
}
.navlinks { display: flex; align-items: center; flex-wrap: wrap; }
.navlinks a, .langs a { color: var(--faint); text-decoration: none; font-size: .66rem; font-weight: 600; letter-spacing: .18em; text-transform: uppercase; margin-left: 16px; }
.navlinks a:first-child { margin-left: 0; }
.navlinks a:hover, .langs a:hover { color: var(--text); }
.navlinks a[aria-current="page"] { color: var(--text); }
.langs a.on { color: var(--gold-hi); }
.nav-right { display: flex; align-items: center; }
.ins-more { display: inline-block; margin-top: 14px; color: var(--gold-hi); font-size: .66rem; font-weight: 600; letter-spacing: .18em; text-transform: uppercase; }

/* Legacy Insights bar — cache-safe only. Generator no longer emits it. */
.bar { display: flex; justify-content: space-between; align-items: center; gap: 12px; padding: 16px 0; border-bottom: 1px solid var(--line); flex-wrap: wrap; }
header.bar > nav { display: flex; align-items: center; margin-left: auto; }

/* the page title takes the reference's own display material: the moving soft
   glint over the reading ink. The whole set is stated, not just the image —
   a background-image without the clip paints the BOX, which is exactly the
   white plate the first attempt put on the page. */
@supports ((-webkit-background-clip: text) or (background-clip: text)) {
  .hero-copy h1 {
    background-image: var(--glint-soft), linear-gradient(var(--text), var(--text));
    background-size: 130vw 100%, 100% 100%;
    background-repeat: repeat-x, no-repeat;
    background-position: calc(50% - 69.8vw - var(--dxc, 0px)) 0, 50% 50%;
    -webkit-background-clip: text; background-clip: text;
    -webkit-text-fill-color: transparent;
    animation: envfield 72s linear infinite;
  }
}
@media (prefers-reduced-motion: reduce) {
  .hero-copy h1 { animation: none !important; background-position: calc(50% + 16vw - var(--dxc, 0px)) 0, 50% 50%; }
}


/* ---- 14 · LANGUAGE CONTROL — SURFACE BRIDGE ONLY -----------------------
   Stage 2 (2026-09-10): mhls theme lives in delivered `physics.css` under
   `.gi-lang.mhls`. Markup carries `gi-lang mhls`. Host keeps only the
   noscript-safe floor: hide legacy links after lang.js mounts. */
/* Floor links retire only after lang.js mounts the component (noscript-safe). */
#mh-lang[data-mhls-live] > a { display: none; }
