/* ==========================================================================
   Umbrella500 Green Awards — landing page
   Ported from design/aperture-landing.html.

   EVERYTHING is scoped under #gf-awards. The tokens are declared on the wrapper,
   not :root, so names like --panel and --muted cannot collide with the Hub theme
   or leak onto any other page.

   The prototype blurred gated content to fake both states in one file. This does
   not: gated markup is never rendered for a guest, so there is nothing to unblur.
   The lock treatments below hold the layout open where a value would have been.
   ========================================================================== */

/* Dark is the designed ground. The light palette below is the same design in
   the other key, not an inversion — it follows the Hub's own day/night switch
   (theme_mode_night), so the page never sits as a dark island in a light site. */
#gf-awards{
  --ink:#0F1D28; --panel:#1B2E3D; --hairline:#284053;
  --cream:#F2ECE4; --muted:#9DB0BF;
  --sage:#98C4B2; --sage-action:#79C4A2; --sand:#E7D9C8;
  --gold:#E3B457; --ember:#E8785A;

  /* Artwork tones are their own tokens because they cannot simply follow
     panel/hairline: on dark those sit ABOVE the ground, on light they would sit
     below it and the aperture would disappear into the page. */
  --blade-a:#1B2E3D; --blade-b:#284053;
  --blade-flat-a:#0F1D28; --blade-flat-b:#284053;

  /* Form field borders are a separate token from --hairline. Hairline is a
     decorative divider at ~1.5:1, which is fine for a rule between sections but
     fails WCAG 1.4.11 for a control boundary — a field outlined in it is one a
     low-vision user cannot find. Measured at 3.1:1 against the field fill. */
  --field-border:#5E7A90;
  --icon-plate:#F2ECE4;      /* light disc so dark-outlined icons read on the dark page */

  --ease:cubic-bezier(.22,1,.36,1);
  --maxw:1120px;
  --pad:clamp(18px,4vw,40px);
  --sec:clamp(56px,9vw,110px);
  --hub-header-h:70px;         /* .main-header is fixed at 70px; JS re-measures */

  margin:0;background:var(--ink);color:var(--cream);
  font-family:Futura,"Futura PT","Century Gothic","Avenir Next",Avenir,"URW Gothic","Trebuchet MS",ui-sans-serif,sans-serif;
  font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased;
}

/* Light. Greens and golds are darkened, not just swapped — the dark palette's
   #79C4A2 and #E3B457 are chosen to glow against near-black and would fail
   contrast as text or button fills on a pale ground. */
#gf-awards[data-theme=light]{
  --ink:#F4F2EE; --panel:#FFFFFF; --hairline:#D9D2C7;
  --cream:#14232F; --muted:#5A6873;
  --sage:#2F7A5E; --sage-action:#1F6E52; --sand:#8A6E45;
  --gold:#8A6210; --ember:#B33F22;

  --blade-a:#E6E1D8; --blade-b:#D2CABC;
  --blade-flat-a:#F4F2EE; --blade-flat-b:#D2CABC;
  --field-border:#94897A;   /* 3.4:1 against a white field fill */
  --icon-plate:transparent;  /* the light page already gives the outlines contrast */
}
/* The primary button fills with --sage-action and prints the page ground on it.
   On light that would be pale-on-mid-green, so the label goes white instead. */
#gf-awards[data-theme=light] .cta{color:#FFFFFF}
#gf-awards[data-theme=light] .cta-ghost{color:var(--cream)}
#gf-awards[data-theme=light] .welcome{color:#FFFFFF}
#gf-awards[data-theme=light] .gf-banner.is-ok{color:#FFFFFF}
#gf-awards[data-theme=light] .gf-banner.is-ok a{color:#FFFFFF}
#gf-awards[data-theme=light] .hx{outline-color:var(--ink)}

#gf-awards *,#gf-awards *::before,#gf-awards *::after{box-sizing:border-box}

/* ---------- collisions with the Hub's Bootstrap ----------
   Scoping under #gf-awards stops OUR rules leaking out. It does nothing to stop
   Bootstrap's rules leaking IN: a bare `.nav {display:flex}` still matches our
   element, and for any property we never declare, Bootstrap wins by default.

   Found by probing each of our class names on a bare element outside the
   wrapper and diffing the computed style:

     .nav  -> display:flex          Bootstrap's nav component. Our `.wrap.nav-in`
                                    became a FLEX ITEM of <nav>, so it shrink-
                                    wrapped to its content (509px) instead of
                                    filling to its max-width. That is why the
                                    action bar sat narrower than, and out of
                                    alignment with, the page content below it.

     .row  -> display:flex          Bootstrap's grid row. The negative margins
              margin:0 -12px        pulled the award cards' prize row 12px
                                    outside its own card on both sides.

   Declared explicitly rather than renamed: these names read correctly in our
   own markup, and an explicit reset documents the hazard where the next person
   will meet it. Anything else we add must be probed the same way — the risk is
   silent, and only shows up as a layout that is subtly wrong. */
#gf-awards .nav{display:block}
#gf-awards .row{display:flex;margin:0}

#gf-awards[dir=rtl]{font-family:"Noto Sans Arabic",Tajawal,"Segoe UI","Geeza Pro",sans-serif;line-height:1.85}

/* Until every string is in the Arabic catalogue, an RTL page will contain some
   English. Left alone, the bidi algorithm throws its full stops to the wrong end
   — ".Run by Umbrella500" — which looks like a bug rather than a missing
   translation. `plaintext` picks direction per block from its first strong
   character, so English renders LTR and Arabic renders RTL, both correctly
   punctuated. Harmless once the catalogue is complete. */
#gf-awards[dir=rtl] p,#gf-awards[dir=rtl] h1,#gf-awards[dir=rtl] h2,
#gf-awards[dir=rtl] h3,#gf-awards[dir=rtl] li,#gf-awards[dir=rtl] .q button span{
  unicode-bidi:plaintext}
#gf-awards h1,#gf-awards h2,#gf-awards h3{margin:0;font-weight:500;letter-spacing:-.015em;line-height:1.05;text-wrap:balance}
#gf-awards[dir=rtl] h1,#gf-awards[dir=rtl] h2,#gf-awards[dir=rtl] h3{letter-spacing:0;line-height:1.35}
#gf-awards p{margin:0}
#gf-awards a{color:inherit}
#gf-awards ol,#gf-awards ul{margin:0;padding:0;list-style:none}

#gf-awards .wrap{max-width:var(--maxw);margin-inline:auto;padding-inline:var(--pad)}
#gf-awards .sec{padding-block:var(--sec);border-top:1px solid var(--hairline)}
#gf-awards .eyebrow{font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--sage)}
#gf-awards .lbl{font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}
#gf-awards[dir=rtl] .eyebrow,#gf-awards[dir=rtl] .lbl{letter-spacing:0}
#gf-awards .num{font-variant-numeric:lining-nums tabular-nums;unicode-bidi:isolate}
#gf-awards .gold{color:var(--gold)}
#gf-awards :focus-visible{outline:2px solid var(--gold);outline-offset:3px}

/* ---------- buttons ---------- */
#gf-awards .cta{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;font:inherit;font-weight:600;
  font-size:15px;border:0;cursor:pointer;padding:13px 26px;text-decoration:none;border-radius:0;
  background:var(--sage-action);color:var(--ink);transition:background-color .2s var(--ease),transform .2s var(--ease)}
#gf-awards .cta:hover{background:var(--sage);color:var(--ink);text-decoration:none}
#gf-awards .cta:active{transform:translateY(1px)}
/* --hairline measured 1.34:1 against cream — invisible as a control edge and a
   WCAG 1.4.11 failure. --field-border is the token for exactly this and
   measures 3.07:1. Green owns every interactive element; gold appears only on
   the $8,700 figure, so the two stop competing for first attention. */
#gf-awards .cta-ghost{background:transparent;color:var(--cream);box-shadow:inset 0 0 0 1px var(--field-border)}
#gf-awards .cta-ghost:hover{background:var(--panel);color:var(--cream)}
#gf-awards .cta-sm{padding:8px 16px;font-size:13px}

/* ---------- page action bar ----------
   The Hub has its own fixed header (70px). This carries page identity, language
   and the CTA only — no menu, which would duplicate the Hub's navigation. */
#gf-awards .nav{position:sticky;top:var(--hub-header-h);z-index:50;
  background:color-mix(in srgb,var(--ink) 92%,transparent);
  backdrop-filter:blur(12px);border-bottom:1px solid var(--hairline)}
#gf-awards .nav-in{display:flex;align-items:center;gap:10px 14px;padding-block:9px;flex-wrap:wrap}
/* Brand rule: clear space of at least half the lockup height on every side, and
   the horizontal lockup is never shown below 120px wide. 120px at 5.402:1 is
   22px tall, so 11px of breathing room — which is what the padding below buys. */
#gf-awards .brand{display:flex;align-items:center;gap:10px;text-decoration:none;
  font-weight:600;letter-spacing:-.01em;font-size:14px;padding-block:11px}
/* Theme swap is done by loading the correct artwork file, never by filtering the
   logo — recolouring the lockup is explicitly forbidden by the brand guidelines,
   and `filter: invert()` is named as the wrong way to do exactly this. Both
   variants ship; CSS shows one. */
#gf-awards .brand img{width:120px;height:auto}
/* Selectors here must be element-qualified. `#gf-awards .brand img {display:block}`
   outranks `#gf-awards .logo-on-light {display:none}` on specificity, and the
   result is both logo variants rendering side by side — which is exactly what
   happened. Sizing rules must never also set display. */
#gf-awards img.logo-on-dark{display:block}
#gf-awards img.logo-on-light{display:none}
#gf-awards[data-theme=light] img.logo-on-dark{display:none}
#gf-awards[data-theme=light] img.logo-on-light{display:block}
#gf-awards .brand-sep{width:1px;height:18px;background:var(--hairline);flex:none}
#gf-awards .brand-txt{color:var(--muted);font-weight:500}
#gf-awards .nav-sp{margin-inline-start:auto}
#gf-awards .seg{display:flex;border:1px solid var(--hairline)}
#gf-awards .seg a{font:inherit;font-size:12px;padding:5px 10px;border:0;cursor:pointer;background:transparent;
  color:var(--muted);text-decoration:none;line-height:1.6}
#gf-awards .seg a+a{border-inline-start:1px solid var(--hairline)}
#gf-awards .seg a[aria-current=true]{background:var(--sage-action);color:var(--ink)}

/* ---------- hero ---------- */
/* One spacing scale for the whole hero. It ran tight between the H1 and the
   value line and loose between sub-copy and buttons, which read as drift
   rather than hierarchy. Top padding cut hard: there was ~200px of dead space
   above the eyebrow on desktop. */
#gf-awards{--hero-gap-s:10px; --hero-gap-m:18px; --hero-gap-l:28px}
#gf-awards .hero{padding-block:clamp(28px,4.5vw,52px) clamp(40px,6vw,72px)}
#gf-awards .hero-in{display:grid;gap:clamp(30px,5vw,60px);align-items:center}
@media(min-width:900px){#gf-awards .hero-in{grid-template-columns:minmax(0,1fr) minmax(0,440px)}}
#gf-awards .hero h1{margin-top:var(--hero-gap-m);font-size:clamp(32px,5.4vw,56px)}
#gf-awards .hero .sub{margin-top:var(--hero-gap-m);color:var(--muted);font-size:16.5px;max-width:46ch}
#gf-awards .hero .acts{margin-top:var(--hero-gap-l);display:flex;flex-wrap:wrap;gap:10px}
#gf-awards .hero .fine{margin-top:var(--hero-gap-l);color:var(--muted);font-size:13px;max-width:50ch;line-height:1.55}
#gf-awards .hero .partner{margin-top:var(--hero-gap-s);color:var(--muted);font-size:12px;opacity:.8}
/* The supplied icons are multi-colour PNGs outlined in dark navy. On the dark
   theme that outline sits at 1.07:1 against the page and the drawing collapses
   into a silhouette, so both the hero and the card icons get a light disc to
   stand on. It also reads as intentional here — a medal on a plate, which is
   what an awards page wants anyway. */
#gf-awards .hero-art{margin:0;display:grid;place-items:center}
#gf-awards .hero-art img{width:min(100%,440px);height:auto;display:block;
  background:var(--icon-plate);border-radius:50%;
  box-shadow:0 0 0 1px var(--hairline)}
/* Same trick as the card icons: the artwork is inset inside its canvas so it
   clears the circular plate, so with no plate the light theme scales it back
   out rather than leaving the inset as empty space. */
#gf-awards[data-theme=light] .hero-art img{box-shadow:none;background:transparent;
  width:min(122%,536px)}

/* ---------- status ribbon ---------- */
#gf-awards .ribbon{border-top:1px solid var(--hairline);border-bottom:1px solid var(--hairline);background:var(--panel)}
#gf-awards .ribbon-in{display:flex;flex-wrap:wrap;gap:8px clamp(20px,4vw,44px);padding-block:14px;font-size:13px;color:var(--muted)}
#gf-awards .rb{display:inline-flex;align-items:center;gap:8px}
#gf-awards .rb b{color:var(--cream);font-weight:600}
#gf-awards .rb-lock{font:inherit;font-weight:600;color:var(--gold);background:none;border:0;padding:0;cursor:pointer;
  text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px}
#gf-awards .rb-lock:hover{color:var(--sand)}
#gf-awards .live{width:7px;height:7px;background:var(--sage-action);flex:none;
  clip-path:polygon(50% 0,93% 25%,93% 75%,50% 100%,7% 75%,7% 25%)}

/* ---------- rationale ---------- */
#gf-awards .rat{padding-block:clamp(44px,6vw,76px)}
#gf-awards .rat-grid{display:grid;gap:clamp(30px,5vw,64px);align-items:center}
@media(min-width:960px){#gf-awards .rat-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}}
#gf-awards .rat-title{font-size:clamp(26px,3.6vw,40px);font-weight:600;letter-spacing:-.025em;
  line-height:1.08;color:var(--cream);max-width:16ch}
#gf-awards[dir=rtl] .rat-title{letter-spacing:0;line-height:1.35}
#gf-awards .rat-lead{margin-top:clamp(14px,1.8vw,20px);font-size:clamp(15px,1.5vw,16.5px);line-height:1.62;
  color:var(--muted);max-width:52ch}
#gf-awards .rat-punch{margin-top:clamp(20px,2.6vw,28px);font-size:clamp(18px,2.1vw,23px);line-height:1.32;
  font-weight:600;letter-spacing:-.015em;color:var(--cream);max-width:30ch;
  border-inline-start:2px solid var(--sage);padding-inline-start:clamp(14px,1.8vw,18px)}
#gf-awards[dir=rtl] .rat-punch{letter-spacing:0;line-height:1.55}
@media(max-width:959px){#gf-awards .rat-fig{order:2}#gf-awards .rat-copy{order:1}}
#gf-awards .rat-fig{margin:0;display:flex;flex-direction:column;align-items:center;gap:clamp(14px,1.6vw,18px)}
#gf-awards .rat-art{width:min(100%,400px)}
#gf-awards .rat-art svg{width:100%;height:auto;display:block}
#gf-awards .rat-key{display:flex;flex-wrap:wrap;justify-content:center;gap:8px 18px;width:min(100%,400px);
  padding-top:clamp(14px,2vw,18px);border-top:1px solid var(--hairline)}
#gf-awards .rat-key > span{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;color:var(--muted)}
#gf-awards .rat-key i{width:11px;height:11px;border-radius:50%;border:2px solid;flex:none}
#gf-awards .rat-key i.solid{background:var(--sage-action);border-color:var(--sage-action)}
#gf-awards .rat-key .k-mid{color:var(--cream);font-weight:600}

/* ---------- Umbrella500 signature ----------
   Brand rule: clear space of half the lockup height on all four sides. The lockup
   is 5.402:1, so half its height is width/5.402/2. Never recolour or redraw. */
#gf-awards .sig-sec{background:var(--panel)}
#gf-awards .sig-in{display:grid;gap:clamp(22px,4vw,48px);align-items:center}
@media(min-width:820px){#gf-awards .sig-in{grid-template-columns:minmax(0,260px) minmax(0,1fr)}}
#gf-awards .sig-logo{--logo-w:clamp(150px,20vw,220px);color:var(--cream);padding:calc(var(--logo-w)/5.402/2)}
#gf-awards .sig-logo img{width:var(--logo-w);height:auto}   /* display: see the logo toggle above */
#gf-awards .sig-copy{color:var(--muted);font-size:16px;max-width:56ch;
  border-inline-start:2px solid var(--sage);padding-inline-start:clamp(16px,2.4vw,26px)}

/* ---------- hero figure ---------- */
/* Sized down now that it carries a sentence rather than a display figure. At
   26px a number reads as a headline; the same size on a clause reads as a
   second title competing with the h1 above it. */
#gf-awards .hero-fig{margin-top:var(--hero-gap-m);font-size:clamp(17px,2vw,21px);font-weight:600;
  letter-spacing:-.02em;color:var(--cream)}
#gf-awards .hero-fig .gold{font-size:1.28em;letter-spacing:-.035em}
#gf-awards[dir=rtl] .hero-fig{letter-spacing:0}

/* ---------- partners ----------
   Marks sit on a plate rather than bare on the ground, because partner logos
   arrive in whatever colours their owners use and half of them will be dark
   artwork that would vanish on the dark theme. */
#gf-awards .partner-grid{display:grid;gap:1px;background:var(--hairline);
  border:1px solid var(--hairline);margin-top:30px}
@media(min-width:720px){#gf-awards .partner-grid{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}}
/* Scoped to the grid on purpose: the hero already has a `.partner` line
   ("Run by Umbrella500. Outreach partner: SPARK."), and an unscoped .partner
   rule silently gave that sentence card padding and a background. */
#gf-awards .partner-grid .partner{background:var(--ink);padding:clamp(22px,3vw,32px);
  display:flex;flex-direction:column;gap:16px;align-items:flex-start}
#gf-awards .partner-grid .partner.is-lead{background:var(--panel)}
/* A lone partner: hold the card to a readable width instead of letting auto-fit
   stretch it the full 1120px around 34ch of text. */
@media(min-width:720px){#gf-awards .partner-grid-one{grid-template-columns:minmax(240px,420px)}}
#gf-awards .partner-mark{display:flex;align-items:center;min-height:52px;color:var(--cream)}
#gf-awards .partner-mark img{width:auto;height:30px;max-width:200px;object-fit:contain}
#gf-awards .partner-name{font-size:21px;font-weight:600;letter-spacing:-.02em}
#gf-awards[dir=rtl] .partner-name{letter-spacing:0}
#gf-awards .partner-role{font-size:13.5px;color:var(--muted);max-width:34ch}

/* ---------- awards ---------- */
#gf-awards .awards-grid{display:grid;gap:1px;background:var(--hairline);border:1px solid var(--hairline);margin-top:34px}
@media(min-width:860px){#gf-awards .awards-grid{grid-template-columns:repeat(3,1fr)}}
#gf-awards .aw{background:var(--ink);padding:clamp(20px,2.6vw,30px);display:flex;flex-direction:column;gap:14px}
#gf-awards .aw-motif{width:96px;height:96px;display:grid;place-items:center;flex:none;
  background:var(--icon-plate);border-radius:50%}
#gf-awards .aw-motif img{width:100%;height:auto;display:block}
/* The artwork is inset inside its own canvas so it fits the circular plate. With
   no plate that inset is just dead space and the icon reads undersized, so the
   light theme scales it back out to fill the same box. One asset, two fits. */
#gf-awards[data-theme=light] .aw-motif{background:transparent}
#gf-awards[data-theme=light] .aw-motif img{width:122%}

#gf-awards .aw h3{font-size:clamp(19px,2.1vw,23px)}
#gf-awards .aw .for{color:var(--muted);font-size:14px}
#gf-awards .aw .row{display:flex;justify-content:space-between;gap:12px;align-items:baseline;
  padding-top:12px;border-top:1px solid var(--hairline);margin-top:auto}
#gf-awards .aw .row .k{font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}
#gf-awards[dir=rtl] .aw .row .k{letter-spacing:0}
#gf-awards .aw .prize{font-size:clamp(22px,2.6vw,28px);font-weight:600;letter-spacing:-.02em;color:var(--cream)}
#gf-awards .aw .split{font-size:12px;color:var(--muted);margin-top:2px}
#gf-awards .aw .win{font-size:12px;color:var(--muted);text-align:end}
#gf-awards .aw .cta{margin-top:4px}

/* ---------- the soft gate ----------
   Gated values are rendered and blurred rather than withheld.
   This is a conversion gate, not a confidentiality boundary: prize amounts and
   deadlines go out in the press release, so "someone could read it in view
   source" costs nothing, while showing that something IS there is the entire
   mechanism — a blurred figure invites, an empty slot just looks broken.

   Anything genuinely private would NOT belong behind this treatment.

   user-select and pointer-events stop casual copy-paste. The blurred nodes carry
   aria-hidden so a screen-reader user is told the same thing a sighted user is —
   there is something here, join to read it — rather than having it read out. */
#gf-awards .locked{filter:blur(7px);user-select:none;pointer-events:none}
@media(prefers-reduced-motion:reduce){#gf-awards .locked{filter:blur(6px)}}

#gf-awards .locknote{display:flex;gap:12px;align-items:flex-start;background:var(--panel);
  border-inline-start:2px solid var(--gold);padding:14px 16px;margin-top:26px}
#gf-awards .locknote .hexi{width:18px;height:18px;flex:none;margin-top:3px}
#gf-awards .locknote b{display:block;font-weight:600;margin-bottom:2px}
#gf-awards .locknote p{font-size:13.5px;color:var(--muted)}
#gf-awards .welcome{display:flex;align-items:center;gap:12px;background:var(--sage-action);color:var(--ink);
  padding:14px 18px;margin-top:26px;font-weight:600;flex-wrap:wrap}
#gf-awards .welcome span{font-weight:400;opacity:.82}

/* ---------- why apply: a ladder, not a card wall ---------- */
#gf-awards .why-h{font-size:clamp(24px,3.4vw,36px);margin-top:8px}
#gf-awards .why-lede{margin-top:10px;color:var(--muted);max-width:44ch}
/* A continuous rail with dots down the left margin is the visual grammar of a
   TIMELINE — "these things happened, in this order, in time". This content is
   not a chronology. Everyone / Every member / Every applicant / Finalists /
   Winners are nested AUDIENCES: each group is a subset of the one above and
   receives everything that group receives, plus more. A rail cannot express
   containment, so the old layout asserted a relationship the content does not
   have, and readers correctly parsed it as a timeline.

   A stack of tiers can. Each band is a surface that sits progressively further
   above the page ground, so "pays more than the last" is legible as physical
   elevation before a word of it is read. --panel is the raised-surface token in
   both themes, so the ramp lifts on light and dark alike rather than inverting. */
#gf-awards .ladder{margin:clamp(30px,4.4vw,52px) 0 0;display:grid;gap:6px}
#gf-awards .rung{padding:clamp(20px,2.6vw,30px) clamp(16px,2vw,26px);border-radius:5px;
  border-inline-start:3px solid transparent}

/* The elevation ramp alone was not carrying the climb, and on the light theme
   it could not: --panel there is #FFFFFF against a #F4F2EE ground, so the whole
   fill ramp has about two per cent of range to move in and t2 through t4 came
   out indistinguishable. Three channels now carry the same signal — fill, ring,
   and an inline-start accent that ramps in BOTH width and colour. Width is the
   one that survives the light theme, greyscale printing and colour-blindness,
   so it does the load-bearing work and colour stays confirmation.

   border-inline-start, not a left border or an offset inset shadow: it is the
   only one of the three that mirrors itself in Arabic. */
#gf-awards .t1{background:transparent;border-radius:0;padding-inline-start:0;
  border-inline-start-color:transparent;border-top:1px solid var(--hairline)}
/* Fill AND ring, because one alone only works in one theme: on dark, --panel
   sits well above --ink and the fill carries the step; on light both are
   near-white and the fill has almost no range to move in. The ring strengthens
   on the same schedule, so the ladder steps are legible either way. */
/* The ramp deliberately runs light, not dark. Deepening the band ground is the
   obvious way to say "more", but --muted body text sits at 4.83:1 on the page
   ground and tinting the band down puts it under the 4.5:1 floor. So the fill
   moves toward --panel (which is the LIGHTER token on this theme, raising
   contrast rather than lowering it) and the ring carries the visible step. */
#gf-awards .t2{background:color-mix(in srgb,var(--panel) 45%,transparent);
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--hairline) 50%,transparent);
  border-inline-start-color:color-mix(in srgb,var(--sage) 55%,var(--hairline))}
#gf-awards .t3{background:color-mix(in srgb,var(--panel) 68%,transparent);
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--hairline) 76%,transparent);
  border-inline-start-width:4px;border-inline-start-color:var(--sage)}
#gf-awards .t4{background:var(--panel);
  box-shadow:inset 0 0 0 1px var(--hairline);
  border-inline-start-width:5px;border-inline-start-color:var(--sage-action)}
#gf-awards .t5{background:color-mix(in srgb,var(--gold) 12%,var(--panel));
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--gold) 45%,transparent);
  border-inline-start-width:6px;border-inline-start-color:var(--gold);
  padding-block:clamp(24px,3.4vw,40px)}

/* The tier name now heads its own band instead of floating in a 190px margin
   column, which was mostly empty and put the label a screen-width away from
   the thing it labelled. A rule under it turns the label into a masthead for
   the band, which is what stops five stacked tiers reading as one long list. */
#gf-awards .rung-k{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  font-size:11px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;
  color:var(--cream);
  padding-bottom:clamp(12px,1.6vw,16px);margin-bottom:clamp(16px,2.1vw,24px);
  border-bottom:1px solid color-mix(in srgb,var(--hairline) 65%,transparent)}
#gf-awards[dir=rtl] .rung-k{letter-spacing:0}
/* Tier colour lives in the marker, not the label: the ramp has to cross a
   changing band tint in two themes, and 11px uppercase is small text needing
   4.5:1. Gold as a label colour measured 4.55:1 on the light theme's tinted t5
   band — passing, but with no margin for a future token nudge, so the capstone
   is said in the marker, the accent and the figures instead. */
/* The marker grows with the tier. Colour alone ramped too quietly to read as a
   progression, and size is the one channel that survives both themes and
   colour-blindness without touching text contrast. */
#gf-awards .hx{width:9px;height:9px;flex:none;background:var(--hairline);
  clip-path:polygon(50% 0,93% 25%,93% 75%,50% 100%,7% 75%,7% 25%)}
#gf-awards .t2 .hx{width:11px;height:11px;background:color-mix(in srgb,var(--sage) 55%,var(--hairline))}
#gf-awards .t3 .hx{width:13px;height:13px;background:var(--sage)}
#gf-awards .t4 .hx{width:15px;height:15px;background:var(--sage-action)}
#gf-awards .t5 .hx{width:17px;height:17px;background:var(--gold)}
/* Nesting made explicit. The lede claims each tier pays more than the last;
   elevation shows it, and this says which "more" — you keep everything the
   tier above gets. Without it the bands read as five separate offers.

   It is a plate rather than loose text because it was previously a grey note
   floating at the end of the label row, at the size the eye uses for legal
   small print, and it carries the argument of the whole section. */
#gf-awards .rung-more{margin-inline-start:auto;font-size:11px;font-weight:600;
  letter-spacing:.02em;text-transform:none;color:var(--muted);
  padding:5px 10px;border-radius:2px;
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--hairline) 80%,transparent)}
#gf-awards .rung-more::before{content:"+";margin-inline-end:5px;color:var(--sage);font-weight:700}
#gf-awards .rung-v{display:grid;gap:clamp(18px,2.6vw,34px)}
/* Two columns, deliberately uneven. Every rung in config.php holds one lead
   benefit and at most one supporting note, so the tracks are declared rather
   than auto-fitted: auto-fit gives two equal columns, which reads as two
   equal claims, and the lead benefit is not one of two equal claims. */
@media(min-width:760px){
  #gf-awards .rung-v:not(.solo){grid-template-columns:minmax(0,1.12fr) minmax(0,.88fr)}
  /* A rung with one benefit was still laying out on a two-column track, so
     "It costs nothing" sat beside half a row of nothing. auto-fit cannot know
     the count; the template does. */
  #gf-awards .rung-v.solo{grid-template-columns:minmax(0,1fr)}}
#gf-awards .ben{display:flex;flex-direction:column;gap:6px;min-width:0}

/* The figure is the section. Five bands of grey prose gave a reader skimming on
   a phone nothing to land on, and the old 29px figure sat close enough to the
   17px headline beside it that neither won. Display size settles it: the number
   is what the rung pays, the headline says what the number is, and the sentence
   is there for the reader who has already been convinced by the first two.

   Sizes ramp with the tier, and the two ends of the ladder take the extremes —
   $0 opens it and $8,700 closes it, which are the two figures the section is
   actually arguing with. */
#gf-awards .ben .fig{font-size:clamp(32px,4.6vw,48px);font-weight:500;letter-spacing:-.04em;
  line-height:.98;color:var(--sage);align-self:start;margin-bottom:2px}
#gf-awards[dir=rtl] .ben .fig{letter-spacing:0}
#gf-awards .t1 .ben .fig{font-size:clamp(42px,6.6vw,72px)}
#gf-awards .t5 .ben .fig{color:var(--gold);font-size:clamp(36px,5.4vw,58px)}
#gf-awards .ben h3{font-size:17px;font-weight:600;letter-spacing:-.01em}
#gf-awards[dir=rtl] .ben h3{letter-spacing:0}
#gf-awards .ben p{font-size:14.5px;line-height:1.62;color:var(--muted);max-width:44ch}
/* The opening rung is the one a cold visitor decides on, so it is set as a
   statement rather than as the first of five equal entries — no card, aligned
   flush with the section heading, and at a size that is read rather than
   skimmed past. */
#gf-awards .t1 .ben h3{font-size:clamp(17px,1.9vw,21px);font-weight:500;letter-spacing:-.015em}
#gf-awards .t1 .ben p{font-size:15px;max-width:54ch}

/* A benefit with no number is a supporting note, and says so with a rule
   instead of borrowing display size it has not earned. The alternative was to
   invent a statistic for every rung so the layout stayed even, which is how
   award pages end up quoting numbers nobody can source. */
#gf-awards .ben.no-fig::before{content:"";display:block;width:20px;height:2px;
  background:var(--sage);margin-bottom:11px}
#gf-awards .ben.no-fig h3{font-size:15.5px}

/* The qualification checklist. Chips, not prose, because the reader is scanning
   for one specific thing — the disqualifier they believe applies to them — and
   a paragraph hides it. Squared to match the buttons; the page has no pills. */
/* A boxed label with a border and a fill is button grammar, and readers tried
   to press these. They are facts about who can enter, so they are set as a
   list: no box, no border, a tick that says "yes, this is fine" rather than
   "click me". The tick is decorative — the words carry the meaning on their
   own, which is why it is not a character screen readers will announce. */
#gf-awards .chips{display:flex;flex-wrap:wrap;gap:6px 22px;
  margin-top:clamp(14px,1.8vw,20px);list-style:none;padding:0}
#gf-awards .chips li{display:flex;align-items:baseline;gap:8px;
  font-size:14px;font-weight:500;color:var(--cream);
  background:none;border:0;box-shadow:none;padding:0;border-radius:0}
#gf-awards .chips li::before{content:"";flex:none;width:13px;height:9px;
  border-left:2px solid var(--sage);border-bottom:2px solid var(--sage);
  transform:rotate(-45deg) translateY(-1px)}
#gf-awards[dir=rtl] .chips li::before{transform:rotate(-45deg) translateY(-1px)}
#gf-awards[dir=rtl] .chips li{letter-spacing:0}

/* Blur radius in em, not px: the figure is fluid-sized, and a fixed radius
   turns legible at the top of the clamp. Padding keeps the smudge from
   clipping against the headline below it. */
#gf-awards .ben .fig.locked{filter:blur(.26em);padding:.06em .22em;margin-inline-start:-.22em}

/* The signup line inside this section is the one a guest reads immediately
   after seeing four bands of smudged figures, which is the moment the argument
   has landed. It was set as a loose grey sentence, at the weight of a footnote. */
#gf-awards .why .gate-hint{margin-top:clamp(20px,2.6vw,28px);padding:15px 18px;
  border-radius:4px;font-size:13.5px;
  background:color-mix(in srgb,var(--panel) 55%,transparent);
  box-shadow:inset 0 0 0 1px var(--hairline)}

/* Locked rung. Tier labels and the rail stay sharp, so the ladder still reads —
   you can see how many rungs there are and what they are called. Only what each
   rung PAYS is withheld, which is exactly what joining buys. */
/* Visually hidden but read aloud — used where a glyph carries the meaning
   sighted users get from repetition and context. */
#gf-awards .gf-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;
  overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}

/* ---------- the gate — the aperture ---------- */
#gf-awards .gate{background:var(--panel);text-align:center;position:relative;overflow:hidden}
#gf-awards .gate-in{position:relative;z-index:2;max-width:46ch;margin-inline:auto}
#gf-awards .gate-art{display:grid;place-items:center;margin-bottom:26px}
#gf-awards .gate-art svg{width:min(280px,58vw);height:auto}
#gf-awards .gate h2{font-size:clamp(24px,3.4vw,36px);margin-top:8px}
#gf-awards .gate .sub{color:var(--muted);margin-top:14px}
#gf-awards .gate .cta{margin-top:26px}
#gf-awards .gate .steps{margin-top:26px;display:grid;gap:8px;text-align:start;max-width:34ch;margin-inline:auto}
#gf-awards .gate .steps div{display:flex;gap:10px;font-size:13.5px;color:var(--muted)}
#gf-awards .gate .steps b{color:var(--sage);font-weight:600;flex:none}
#gf-awards .gate .micro{margin-top:16px;font-size:12.5px;color:var(--muted)}
#gf-awards .gate .micro a{color:var(--sage);font-weight:600}

/* ---------- timeline ---------- */
#gf-awards .tl{margin-top:30px;border-top:1px solid var(--hairline)}
#gf-awards .tl-r{display:flex;justify-content:space-between;gap:16px;align-items:baseline;
  padding-block:15px;border-bottom:1px solid var(--hairline)}
#gf-awards .tl-r .k{display:flex;align-items:center;gap:10px;font-size:14px;color:var(--muted)}
#gf-awards .tl-r .v{font-weight:600;text-align:end}
#gf-awards .tl-r.now .v{color:var(--gold)}
#gf-awards .gate-hint,#gf-awards .tl-lock{display:flex;gap:10px;align-items:center;flex-wrap:wrap;
  margin-top:18px;font-size:13px;color:var(--muted)}
#gf-awards .gate-hint .hexi,#gf-awards .tl-lock .hexi{width:14px;height:14px;flex:none}
#gf-awards .gate-hint a,#gf-awards .tl-lock a{font-weight:600;color:var(--sage);
  text-decoration:underline;text-underline-offset:3px}
#gf-awards .hexdot{width:8px;height:8px;background:var(--gold);flex:none;
  clip-path:polygon(50% 0,93% 25%,93% 75%,50% 100%,7% 75%,7% 25%)}

/* ---------- faq ---------- */
#gf-awards .faq{margin-top:30px;border-top:1px solid var(--hairline)}
#gf-awards .q{border-bottom:1px solid var(--hairline)}
#gf-awards .q button{width:100%;background:transparent;border:0;color:inherit;font:inherit;font-weight:600;font-size:16px;
  text-align:start;cursor:pointer;padding-block:17px;display:flex;gap:16px;align-items:center;justify-content:space-between}
#gf-awards .q .ind{width:13px;height:13px;flex:none;position:relative}
#gf-awards .q .ind::before,#gf-awards .q .ind::after{content:"";position:absolute;background:var(--muted);
  transition:transform .25s var(--ease)}
#gf-awards .q .ind::before{inset-inline:0;top:6px;height:1.5px}
#gf-awards .q .ind::after{inset-block:0;inset-inline-start:6px;width:1.5px}
#gf-awards .q button[aria-expanded=true] .ind::after{transform:scaleY(0)}
#gf-awards .q button[aria-expanded=true] .ind::before{background:var(--sage)}
#gf-awards .a{max-height:0;overflow:hidden;transition:max-height .3s var(--ease)}
/* Without this the ONLY thing that ever opened an answer was awards.js setting
   style.maxHeight — so with JS off all six answers were permanently invisible
   and the buttons inert, while awards.js's own header claimed they were
   "readable with JS off". They are in the HTML; they were not readable.
   Driven by the same aria-expanded the button already carries, so the state is
   in one place. */
#gf-awards .q button[aria-expanded="true"] + .a{max-height:60rem}
#gf-awards:not(.has-js) .a{max-height:none}
#gf-awards .a p{color:var(--muted);padding-block:0 18px;max-width:72ch;font-size:14.5px}

/* ---------- verification banner ---------- */
#gf-awards .gf-banner{border-bottom:1px solid var(--hairline);font-size:14px}
#gf-awards .gf-banner.is-ok{background:var(--sage-action);color:var(--ink)}
#gf-awards .gf-banner.is-warn{background:var(--panel);color:var(--cream);
  border-inline-start:3px solid var(--gold)}
#gf-awards .gf-banner-in{display:flex;flex-wrap:wrap;gap:6px 14px;align-items:center;padding-block:13px}
#gf-awards .gf-banner a{font-weight:600;text-decoration:underline;text-underline-offset:3px}
#gf-awards .gf-banner.is-ok a{color:var(--ink)}
#gf-awards .gf-banner.is-warn a{color:var(--sage)}

/* ---------- signup modal ---------- */
#gf-awards .gf-ov{position:fixed;inset:0;z-index:1100;background:rgba(6,12,17,.8);
  display:none;align-items:center;justify-content:center;padding:16px}
#gf-awards .gf-ov[data-open=true]{display:flex}
#gf-awards .gf-modal{background:var(--ink);border:1px solid var(--hairline);
  width:min(100%,27rem);max-height:92vh;overflow-y:auto;position:relative}
@media(max-width:560px){
  #gf-awards .gf-ov{align-items:flex-end;padding:0}
  #gf-awards .gf-modal{width:100%;max-height:94vh}
}
#gf-awards .gf-x{position:absolute;inset-block-start:8px;inset-inline-end:10px;background:transparent;
  border:0;color:var(--muted);font-size:24px;line-height:1;cursor:pointer;padding:6px 10px}
#gf-awards .gf-x:hover{color:var(--cream)}
#gf-awards .gf-head{padding:22px 22px 0;display:grid;place-items:center}
#gf-awards .gf-head svg{width:64px;height:64px}
#gf-awards .gf-pad{padding:18px 22px 24px}
#gf-awards .gf-pad h3{font-size:21px;text-align:center}
#gf-awards .gf-why{text-align:center;color:var(--muted);font-size:13.5px;margin-top:8px}
#gf-awards .gf-err{margin-top:14px;padding:11px 13px;background:color-mix(in srgb,var(--ember) 16%,transparent);
  border-inline-start:3px solid var(--ember);color:var(--cream);font-size:13.5px}
#gf-awards .gf-fld{margin-top:12px}
#gf-awards .gf-fld label{display:block;font-size:12px;font-weight:600;margin-bottom:5px;color:var(--muted)}
#gf-awards .gf-fld input,#gf-awards .gf-fld select{width:100%;font:inherit;font-size:16px;padding:11px 12px;
  background:var(--panel);color:var(--cream);border:1px solid var(--field-border);min-height:44px;border-radius:0}
#gf-awards .gf-fld input:focus,#gf-awards .gf-fld select:focus{outline:0;border-color:var(--sage-action)}
#gf-awards .gf-note{display:block;margin-top:5px;font-size:11.5px;color:var(--muted)}
/* First and last name share a row, but only when there is room. On a 320px
   screen two columns leave ~145px each, which is not enough for a name field
   with a 44px touch target — the one unconditional multi-column grid on the
   page, and the one place a narrow phone would have felt cramped. */
#gf-awards .gf-two{display:grid;gap:10px}
@media(min-width:400px){#gf-awards .gf-two{grid-template-columns:1fr 1fr}}
#gf-awards .gf-chk{display:flex;gap:9px;align-items:flex-start;font-size:12.5px;color:var(--muted);margin:13px 0}
#gf-awards .gf-chk input{margin-top:3px;width:17px;height:17px;flex:none;accent-color:var(--sage-action)}
#gf-awards .gf-cap{margin-top:14px;min-height:66px}
#gf-awards .gf-pad .cta{width:100%;margin-top:12px}
#gf-awards .gf-pad .cta[disabled]{opacity:.6;cursor:progress}
#gf-awards .gf-foot{font-size:12px;color:var(--muted);text-align:center;margin-top:12px}
#gf-awards .gf-foot a{color:var(--sage);font-weight:600}

/* Honeypot: off-screen rather than display:none. Some bots skip hidden inputs,
   and this one is only useful if they fill it in. aria-hidden + tabindex="-1"
   keep it away from people and from assistive technology. */
#gf-awards .gf-hp{position:absolute;inset-inline-start:-9999px;width:1px;height:1px;overflow:hidden}

#gf-awards .gf-sent{text-align:center;padding:26px 22px 28px}
#gf-awards .gf-sent svg{width:78px;height:78px;margin-inline:auto}
#gf-awards .gf-sent h3{font-size:22px;margin-top:14px}
#gf-awards .gf-sent p{color:var(--muted);margin-top:10px;font-size:14.5px}
#gf-awards .gf-addr{color:var(--cream);font-weight:600}
#gf-awards .gf-steps{margin-top:18px;background:var(--panel);padding:14px;display:grid;gap:8px;
  text-align:start;font-size:13px;color:var(--muted)}
#gf-awards .gf-steps div{display:flex;gap:10px}
#gf-awards .gf-steps b{color:var(--sage);font-weight:600;flex:none}

/* ---------- motion: one-time entrances only ---------- */
@media(prefers-reduced-motion:no-preference){
  #gf-awards .blades{animation:gf-iris .8s var(--ease) both;transform-origin:center}
  @keyframes gf-iris{from{transform:rotate(-9deg)}to{transform:rotate(0)}}
  #gf-awards .lens>*{animation:gf-fade .7s var(--ease) both}
  #gf-awards .lens>*:nth-child(2){animation-delay:.08s}
  #gf-awards .lens>*:nth-child(3){animation-delay:.16s}
  #gf-awards .core{animation:gf-fade .7s .3s var(--ease) both}
  @keyframes gf-fade{from{opacity:0}to{opacity:1}}
  /* Gated on .rv-on, which the script adds immediately before it starts
     observing. Without that gate the page hides its own content by default and
     relies on JavaScript to reveal it — so a blocked script, a CDN failure or a
     single error anywhere earlier leaves a completely blank page. Content is
     visible unless something is definitely going to animate it. */
  #gf-awards.rv-on .rv{opacity:0;transform:translateY(18px);
    transition:opacity .6s var(--ease),transform .6s var(--ease)}
  #gf-awards.rv-on .rv.in{opacity:1;transform:none}
}
@media(pointer:coarse){#gf-awards .cta,#gf-awards .seg a,#gf-awards .q button{min-height:44px}}

/* A card whose action is unavailable states why, in place of the button, so the
   three cards stay the same height and nobody hunts for a button that is absent. */
#gf-awards .aw-note{font-size:13px;color:var(--muted);padding-block:9px;
  border-top:1px solid var(--hairline);margin-top:4px}

/* Partner logos arrive in their owners' colours, and most brand marks are dark:
   SPARK's cobalt #083A80 measures 1.28:1 on the dark card and disappears. A light
   plate is the only treatment that works for artwork we neither control nor may
   recolour — so it applies ONLY to third-party marks.

   Umbrella500 ships proper white and black variants, so it needs no plate; giving
   it one put the white lockup on a cream ground and washed it out. */
#gf-awards .partner-mark img{height:34px}
#gf-awards .partner-mark .partner-plate{display:inline-flex;background:var(--icon-plate);
  border-radius:4px;padding:9px 13px}
#gf-awards[data-theme=light] .partner-mark .partner-plate{background:transparent;padding:0}

/* ---------- apply route ---------- */
/* Was 760px, which looked lost inside the Hub shell. 920 gives the account
   summary, the switcher and the step pips room to breathe; the CONTROLS stay
   capped near 52ch regardless, so the measure of what you actually read and
   type is unchanged. The action bar shares this class so the logo above lines
   up with the heading below — they were centred to different widths. */
#gf-awards .apply-wrap{max-width:920px}
#gf-awards .apply-lede{margin-top:16px;font-size:17px;color:var(--muted);max-width:56ch}
#gf-awards .apply-note{margin-top:10px;font-size:13.5px;color:var(--muted)}
#gf-awards .apply-wrap .acts{margin-top:26px;display:flex;flex-wrap:wrap;gap:10px}
#gf-awards .apply-switch{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:26px;
  padding:14px 16px;background:var(--panel);border-inline-start:2px solid var(--sage)}
#gf-awards .apply-switch label{font-size:12px;font-weight:600;color:var(--muted)}
#gf-awards .apply-switch select{font:inherit;font-size:14px;padding:8px 10px;min-height:40px;
  background:var(--ink);color:var(--cream);border:1px solid var(--field-border)}
#gf-awards .apply-steps{margin-top:30px;border-top:1px solid var(--hairline)}
#gf-awards .apply-step{display:flex;gap:16px;padding-block:20px;border-bottom:1px solid var(--hairline)}
#gf-awards .apply-step h2{font-size:17px;font-weight:600}
#gf-awards .apply-step p{margin-top:5px;font-size:14px;color:var(--muted);max-width:52ch}
#gf-awards .apply-step-n{width:28px;height:28px;flex:none;display:grid;place-items:center;
  font-size:13px;font-weight:700;color:var(--muted);border:1px solid var(--hairline);border-radius:50%}
#gf-awards .apply-step.is-current .apply-step-n{background:var(--sage-action);color:var(--ink);
  border-color:var(--sage-action)}
#gf-awards .apply-pending{margin-top:26px;padding:16px 18px;background:var(--panel);
  border-inline-start:3px solid var(--gold)}
#gf-awards .apply-pending p{margin-top:6px;font-size:14px;color:var(--muted)}
#gf-awards .apply-facts{margin-top:24px;display:grid;gap:1px;background:var(--hairline);
  border:1px solid var(--hairline)}
#gf-awards .apply-facts > div{background:var(--ink);padding:14px 16px;display:flex;
  justify-content:space-between;gap:16px}
#gf-awards .apply-facts dt{font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
#gf-awards .apply-facts dd{margin:0;font-weight:600}

/* ===========================================================================
   THE APPLICATION WIZARD
   ---------------------------------------------------------------------------
   This block did not exist. apply.tpl shipped 19 wz-* classes and awards.css
   defined none of them, so every applicant saw raw unstyled HTML: labels
   sitting inline against inputs, no rhythm, no focus states, inputs stretching
   the full width of the container. The markup was right and the stylesheet was
   simply never written.

   Rules that drove the layout, in priority order:
     · label ABOVE input, always — inline labels break the moment a label wraps,
       and every one of these labels is a full question
     · 16px input text — anything smaller makes iOS zoom on focus
     · 46px minimum control height — touch target floor
     · text inputs capped near 52ch — a 900px-wide box for a phone number tells
       the applicant to write an essay
   =========================================================================== */

/* Was 760px, which looked lost inside the Hub shell. 920 gives the account
   summary, the switcher and the step pips room to breathe; the CONTROLS stay
   capped near 52ch regardless, so the measure of what you actually read and
   type is unchanged. The action bar shares this class so the logo above lines
   up with the heading below — they were centred to different widths. */
#gf-awards .apply-wrap{max-width:920px}
#gf-awards .apply-lede{margin-top:14px;color:var(--muted);font-size:16px;line-height:1.6;max-width:60ch}
#gf-awards .apply-lede b{color:var(--cream);font-weight:600}
#gf-awards .apply-note{margin-top:9px;font-size:13.5px;color:var(--muted);line-height:1.55}
#gf-awards .acts{display:flex;flex-wrap:wrap;gap:11px;margin-top:22px}

/* Award switcher --------------------------------------------------------- */
#gf-awards .apply-switch{display:flex;flex-wrap:wrap;align-items:center;gap:11px;
  margin-top:26px;padding:13px 16px;border-radius:8px;background:var(--panel);
  border:1px solid var(--hairline)}
#gf-awards .apply-switch label{font-size:13px;font-weight:600;color:var(--cream)}
#gf-awards .apply-switch .apply-note{margin:0}

/* Progress --------------------------------------------------------------- */
/* People were not seeing this at all.
   Two reasons, and the second mattered more than the size. At 12.5px it was
   smaller than any other interface text on the page — and the pending steps
   carried `border:1px solid transparent` over a 55%-opacity fill, so they had
   no edge. Three steps with no boundary read as faint decoration rather than a
   set you are moving through, which is the one thing this element exists to
   say. Nudged up a size and given every pip a real hairline: a control boundary
   needs 3:1 against its surroundings to be perceivable at all (WCAG 1.4.11),
   and transparent is 1:1. */
#gf-awards .wz-progress{display:flex;flex-wrap:wrap;gap:7px 9px;margin:26px 0 0;padding:0;list-style:none}
#gf-awards .wz-pip{display:flex;align-items:center;gap:9px;padding:8px 14px 8px 8px;
  border-radius:100px;font-size:14px;color:var(--cream);
  border:1px solid var(--hairline);background:color-mix(in srgb,var(--panel) 70%,transparent)}
#gf-awards .wz-pip-n{display:grid;place-items:center;width:24px;height:24px;flex:none;
  border-radius:50%;font-size:12.5px;font-weight:700;
  background:color-mix(in srgb,var(--hairline) 85%,transparent);color:var(--cream)}
#gf-awards .wz-pip.is-done .wz-pip-n{background:var(--sage);color:var(--panel)}
/* "You are here" has to win against four other pips now that they all have an
   edge — so the ring doubles rather than the colour shouting. */
#gf-awards .wz-pip.is-current{color:var(--cream);font-weight:600;
  border-color:var(--sage);border-width:2px;padding:7px 13px 7px 7px;
  background:var(--panel)}
#gf-awards .wz-pip.is-current .wz-pip-n{background:var(--sage-action);color:#fff}
#gf-awards[data-theme=dark] .wz-pip.is-current .wz-pip-n{color:var(--ink)}

/* Step head -------------------------------------------------------------- */
#gf-awards .wz-form{margin-top:30px}
#gf-awards .wz-h{font-size:clamp(21px,2.6vw,27px);font-weight:600;letter-spacing:-.015em;
  padding-bottom:14px;border-bottom:1px solid var(--hairline)}
#gf-awards[dir=rtl] .wz-h{letter-spacing:0}
#gf-awards .wz-pre{margin-top:13px;font-size:14.5px;line-height:1.62;color:var(--muted);max-width:58ch}

/* One question ----------------------------------------------------------- */
#gf-awards .wz-q{margin-top:clamp(22px,2.6vw,30px)}
#gf-awards .wz-label{display:block;font-size:15.5px;font-weight:600;line-height:1.45;
  color:var(--cream);margin-bottom:7px}
/* "optional", as metadata rather than part of the question.

   It used to sit inline immediately after the label text, at nearly the same
   size and weight, so it read as the last word of the question — "Your role
   optional". Pushed to the end of the row, set in the small uppercase the page
   already uses for labels, and dimmed: the eye now reads the question, then the
   qualifier, in that order.

   The label row is capped to the width of ITS OWN control (see data-type
   below), so the tag lands on the same vertical line as the field's right edge
   instead of drifting into whitespace the input never reaches. */
#gf-awards .wz-label{display:flex;align-items:baseline;gap:14px;max-width:52ch}
#gf-awards .wz-label-t{flex:1 1 auto;min-width:0}
#gf-awards .wz-opt{flex:none;margin-inline-start:auto;
  font-size:10px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  color:color-mix(in srgb,var(--muted) 82%,transparent)}
#gf-awards[dir=rtl] .wz-opt{letter-spacing:0;font-size:11.5px}

/* Match the label row to the control it labels. */
#gf-awards .wz-q[data-type=textarea] .wz-label{max-width:66ch}
#gf-awards .wz-q[data-type=select] .wz-label,
#gf-awards .wz-q[data-type=country] .wz-label{max-width:38ch}
#gf-awards .wz-q[data-type=social] .wz-label,
#gf-awards .wz-q[data-type=multiselect] .wz-label,
#gf-awards .wz-q[data-type=checkbox] .wz-label{max-width:none}

/* The modal's fields are full-width, so its labels are too. */
#gf-awards .gf-fld label{display:flex;align-items:baseline;gap:14px}
#gf-awards .wz-help{font-size:13.5px;line-height:1.55;color:var(--muted);margin:-2px 0 9px;max-width:58ch}
#gf-awards .wz-count{margin-top:7px;font-size:12.5px;color:var(--muted)}

/* Controls. One rule for every control type, so a select never sits at a
   different height from the text input beside it. */
#gf-awards .wz-form input[type=text],#gf-awards .wz-form input[type=email],
#gf-awards .wz-form input[type=url],#gf-awards .wz-form input[type=tel],
#gf-awards .wz-form select,#gf-awards .wz-form textarea{
  display:block;width:100%;max-width:52ch;box-sizing:border-box;
  font:inherit;font-size:16px;line-height:1.5;min-height:46px;padding:11px 13px;
  color:var(--cream);background:var(--panel);
  /* --field-border, not --hairline. The token exists precisely for this:
     --hairline is a ~1.5:1 decorative divider, fine between sections and a
     WCAG 1.4.11 failure as a control boundary — a field outlined in it is one
     a low-vision applicant cannot find. */
  /* The border is painted from --fb / --fbw so that STATES set a variable
     instead of trying to out-specify this rule. Error, hover and focus all
     compete over one custom property on one element, which is a fight with a
     predictable winner — overriding border-color from a separate rule is not,
     as several rounds of cascade forensics established. */
  border:var(--fbw,1px) solid var(--fb,var(--field-border));border-radius:7px;
  transition:border-color .15s ease,box-shadow .15s ease}
#gf-awards .wz-form textarea{max-width:66ch;min-height:132px;resize:vertical}
#gf-awards .wz-form select{max-width:38ch;cursor:pointer}
#gf-awards .wz-form input::placeholder{color:color-mix(in srgb,var(--muted) 72%,transparent)}
#gf-awards .wz-form :is(input,select,textarea):hover{--fb:color-mix(in srgb,var(--sage) 55%,var(--hairline))}
#gf-awards .wz-form :is(input,select,textarea):focus-visible{outline:2px solid var(--sage-action);
  outline-offset:2px;--fb:var(--sage-action)}
/* Read-only is not disabled: it is answerable data we already hold, so it must
   look settled rather than broken. */
#gf-awards .wz-form input[readonly]{background:color-mix(in srgb,var(--panel) 45%,transparent);
  color:var(--muted);cursor:default}

/* Checkboxes ------------------------------------------------------------- */
#gf-awards .wz-checks{display:grid;gap:4px}
@media(min-width:620px){#gf-awards .wz-checks{grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 18px}}
#gf-awards .wz-check{display:flex;align-items:flex-start;gap:11px;
  min-height:44px;padding:10px 12px;margin-inline-start:-12px;border-radius:7px;
  font-size:15px;line-height:1.5;cursor:pointer;transition:background .15s ease}
#gf-awards .wz-check:hover{background:color-mix(in srgb,var(--panel) 65%,transparent)}
#gf-awards .wz-check input{flex:none;width:19px;height:19px;margin-top:1px;
  accent-color:var(--sage-action);cursor:pointer}
#gf-awards .wz-check input:focus-visible{outline:2px solid var(--sage-action);outline-offset:2px}
/* A consent is a commitment, not a preference — it gets a surface of its own so
   it cannot be skimmed past in a list of tickboxes. */
#gf-awards .wz-consent{align-items:flex-start;padding:15px 17px;margin-inline-start:0;
  background:var(--panel);border:1px solid var(--hairline);border-radius:8px}
#gf-awards .wz-consent:hover{background:var(--panel);border-color:color-mix(in srgb,var(--sage) 55%,var(--hairline))}
#gf-awards .wz-q:has(.wz-consent) .wz-label{position:absolute;width:1px;height:1px;
  margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}

/* Social links ----------------------------------------------------------- */
#gf-awards .wz-social{display:grid;gap:13px}
@media(min-width:620px){#gf-awards .wz-social{grid-template-columns:repeat(2,minmax(0,1fr))}}
#gf-awards .wz-fld label{display:block;font-size:12.5px;font-weight:600;
  letter-spacing:.02em;color:var(--muted);margin-bottom:5px}
#gf-awards .wz-social input{max-width:none!important}

/* Errors ----------------------------------------------------------------- */
#gf-awards .wz-error{margin-top:8px;font-size:14px;font-weight:600;color:var(--ember)}

/* An errored field has to be findable from across the page, so the signal is
   the CONTROL, not a line of text beneath it. 1px of ember read as "slightly
   different brown" next to a 1px --field-border; 2px plus a soft ember wash
   reads as wrong at a glance, and the tinted fill survives greyscale where a
   hue change alone would not.
   Live over-limit (.is-over, set by awards.js while typing) and server-side
   rejection (.has-error) get the SAME treatment on purpose — they are the same
   problem to the person typing, and two different-looking errors would imply
   two different kinds of wrong. */
/* Set on the control as well as the question: the question alone would be
   inherited, and an inherited value loses to :hover setting --fb on the control
   itself. Declared after hover/focus so it wins the tie. */
#gf-awards .wz-q.has-error,#gf-awards .wz-q.is-over,
#gf-awards .wz-q.has-error :is(input,select,textarea),
#gf-awards .wz-q.is-over :is(input,textarea){--fb:var(--ember);--fbw:2px}
#gf-awards .wz-q.has-error :is(input,select,textarea),
#gf-awards .wz-q.is-over :is(input,textarea){
  background:color-mix(in srgb,var(--ember) 6%,var(--panel))}
#gf-awards .wz-q.has-error :is(input,select,textarea):focus-visible,
#gf-awards .wz-q.is-over  :is(input,textarea):focus-visible{outline-color:var(--ember)}
/* The label goes with it. On a long step the field can be scrolled past its own
   label, and a red box with a black heading looks like a rendering fault. */
#gf-awards .wz-q.has-error .wz-label,#gf-awards .wz-q.is-over .wz-label{color:var(--ember)}
#gf-awards .gf-err{margin-top:20px;padding:13px 16px;border-radius:8px;font-size:14.5px;
  color:var(--ember);background:color-mix(in srgb,var(--ember) 11%,transparent);
  border:1px solid color-mix(in srgb,var(--ember) 42%,transparent)}

/* Step nav --------------------------------------------------------------- */
#gf-awards .wz-nav{display:flex;flex-wrap:wrap;gap:12px;align-items:center;
  margin-top:clamp(26px,3.4vw,38px);padding-top:22px;border-top:1px solid var(--hairline)}
/* Back is secondary and must not sit first in the tab order or first on the
   page — the form's own order puts it first in the DOM for keyboard users
   returning upward, so only the visual order is swapped. */
#gf-awards .wz-nav .cta-ghost{order:2}
#gf-awards .wz-nav .cta:not(.cta-ghost){order:1}

/* Review + done ---------------------------------------------------------- */
#gf-awards .wz-page-card{margin-top:18px;padding:19px 21px;border-radius:10px;
  background:var(--panel);border:1px solid var(--hairline)}
#gf-awards .wz-page-card h3{font-size:18px;font-weight:600}
#gf-awards .wz-page-card .acts{margin-top:15px}
#gf-awards .apply-facts{display:grid;gap:1px;margin-top:24px;
  border:1px solid var(--hairline);border-radius:9px;overflow:hidden;
  background:var(--hairline)}
#gf-awards .apply-facts>div{display:flex;flex-wrap:wrap;gap:10px;justify-content:space-between;
  padding:13px 17px;background:var(--panel)}
#gf-awards .apply-facts dt{font-size:13.5px;color:var(--muted)}
#gf-awards .apply-facts dd{font-size:14.5px;font-weight:600;color:var(--cream)}
#gf-awards .apply-pending{margin-top:22px;padding:17px 19px;border-radius:9px;
  background:color-mix(in srgb,var(--sage) 12%,transparent);
  border:1px solid color-mix(in srgb,var(--sage) 42%,transparent)}
#gf-awards .apply-pending p{margin-top:6px;font-size:14.5px;line-height:1.6;color:var(--muted)}
#gf-awards .apply-pending a{color:var(--sage-action);font-weight:600}

/* Error summary. Colour is never the only signal — every error carries an icon
   and words, so it survives greyscale, colour-blindness and a screen reader. */
#gf-awards .gf-err-h{font-weight:600;color:var(--ember);font-size:15px;line-height:1.5}
#gf-awards .gf-err-list{margin:11px 0 0;padding:0;display:grid;gap:8px;list-style:none}
#gf-awards .gf-err-list li{font-size:14px;line-height:1.5;color:var(--cream)}
#gf-awards .gf-err-list a{color:var(--ember);font-weight:600;text-underline-offset:3px;
  text-decoration:underline;text-decoration-thickness:1px}
#gf-awards .gf-err-list a:hover{text-decoration-thickness:2px}
#gf-awards .gf-err-list span{display:block;color:var(--muted);font-size:13.5px}
#gf-awards .gf-err:focus-visible{outline:2px solid var(--ember);outline-offset:3px}

#gf-awards .wz-error{display:flex;align-items:flex-start;gap:7px}
#gf-awards .wz-error svg{width:15px;height:15px;flex:none;margin-top:1px;
  fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round}
#gf-awards .wz-count.is-over{color:var(--ember);font-weight:600;font-size:14px;
  display:flex;align-items:flex-start;gap:7px}
/* Words AND a mark, never colour alone (WCAG 1.4.1). */
#gf-awards .wz-count.is-over::before{content:"!";flex:none;display:grid;place-items:center;
  width:17px;height:17px;margin-top:1px;border-radius:50%;
  font-size:12px;font-weight:800;line-height:1;
  color:var(--panel);background:var(--ember)}

/* "From your account" — deliberately NOT styled as form fields. It is settled
   information being confirmed, and anything that looks like an input invites
   someone to try typing in it. */
#gf-awards .wz-known{margin-top:22px;padding:17px 19px;border-radius:9px;
  background:color-mix(in srgb,var(--panel) 60%,transparent);
  border:1px solid var(--hairline)}
#gf-awards .wz-known-h{font-size:11px;font-weight:700;letter-spacing:.16em;
  text-transform:uppercase;color:var(--muted)}
#gf-awards[dir=rtl] .wz-known-h{letter-spacing:0}
#gf-awards .wz-known dl{display:grid;gap:9px;margin:13px 0 0}
@media(min-width:560px){#gf-awards .wz-known dl{grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:14px}}
#gf-awards .wz-known dt{font-size:12.5px;color:var(--muted);margin-bottom:2px}
#gf-awards .wz-known dd{margin:0;font-size:15px;font-weight:600;color:var(--cream);
  overflow-wrap:anywhere}
#gf-awards .wz-known .apply-note{margin-top:14px;padding-top:12px;border-top:1px solid var(--hairline)}
#gf-awards .wz-known a{color:var(--sage-action);font-weight:600;text-underline-offset:3px}

/* Subheading within a step. Sits between questions, so it needs more space
   above than below — it belongs to what follows it, not what precedes it. */
#gf-awards .wz-group{margin:clamp(30px,3.6vw,40px) 0 -6px;padding-top:clamp(18px,2.2vw,24px);
  border-top:1px solid var(--hairline);
  font-size:11px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}
#gf-awards[dir=rtl] .wz-group{letter-spacing:0}

/* What the single consent covers. Open on the page, not folded behind a link:
   merging four ticks into one is a decision about friction, but hiding what is
   being agreed to would be a different decision entirely. */
#gf-awards .wz-consent-what{margin-top:6px;padding:17px 19px;border-radius:9px;
  background:color-mix(in srgb,var(--panel) 55%,transparent);
  border:1px solid var(--hairline)}
#gf-awards .wz-consent-h{font-size:11px;font-weight:700;letter-spacing:.16em;
  text-transform:uppercase;color:var(--muted)}
#gf-awards[dir=rtl] .wz-consent-h{letter-spacing:0}
#gf-awards .wz-consent-what ul{margin:12px 0 0;padding:0;display:grid;gap:10px;list-style:none}
#gf-awards .wz-consent-what li{position:relative;padding-inline-start:19px;
  font-size:14.5px;line-height:1.6;color:var(--muted)}
#gf-awards .wz-consent-what li::before{content:"";position:absolute;inset-inline-start:0;top:9px;
  width:7px;height:7px;border-radius:50%;background:var(--sage)}
#gf-awards .wz-consent-what a{color:var(--sage-action);font-weight:600;text-underline-offset:3px}
#gf-awards .wz-consent{margin-top:14px}

/* Applied-already banners. The submitted one keeps the green "done" ground; an
   in-progress draft is deliberately quieter — it is a nudge, not a result. */
#gf-awards .welcome a{color:inherit;font-weight:700;text-underline-offset:3px;
  text-decoration:underline;text-decoration-thickness:1px;margin-inline-start:10px}
#gf-awards .welcome a:hover{text-decoration-thickness:2px}
#gf-awards .welcome.is-draft{background:color-mix(in srgb,var(--gold) 16%,transparent);
  color:var(--cream);border:1px solid color-mix(in srgb,var(--gold) 45%,transparent)}
#gf-awards[data-theme=light] .welcome.is-draft{color:var(--cream)}
#gf-awards .welcome.is-draft a{color:var(--cream)}

/* ---------- share ----------
   Ordinary links styled as buttons. No brand colours: a row of red/blue/green
   platform chips would out-shout everything around it and date badly. One
   neutral treatment, brand recognition carried by the glyph. */
#gf-awards .gf-share{margin-top:clamp(22px,3vw,32px)}
#gf-awards .gf-share-h{font-size:clamp(17px,2vw,20px);font-weight:600;
  letter-spacing:-.01em;color:var(--cream);margin-bottom:13px}
#gf-awards[dir=rtl] .gf-share-h{letter-spacing:0}
#gf-awards .gf-share-row{display:flex;flex-wrap:wrap;gap:9px}
#gf-awards .gf-share-btn{display:inline-flex;align-items:center;gap:8px;
  min-height:44px;padding:10px 15px;border-radius:100px;
  font:inherit;font-size:14px;font-weight:600;line-height:1;cursor:pointer;
  color:var(--cream);background:var(--panel);text-decoration:none;
  border:1px solid var(--hairline);
  transition:border-color .15s ease,background-color .15s ease}
#gf-awards .gf-share-btn:hover{text-decoration:none;
  border-color:color-mix(in srgb,var(--sage) 60%,var(--hairline));
  background:color-mix(in srgb,var(--sage) 8%,var(--panel))}
#gf-awards .gf-share-btn svg{width:17px;height:17px;flex:none;
  fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
/* Facebook's mark reads as a solid glyph, not an outline, so it alone fills. */
#gf-awards .gf-share-btn.is-fb svg path{fill:currentColor;stroke:none}
#gf-awards .gf-share-btn.is-copied{border-color:var(--sage-action);
  background:color-mix(in srgb,var(--sage) 14%,var(--panel));color:var(--sage-action)}
@media(max-width:520px){
  /* On a phone the native sheet is strictly better than five of our buttons —
     it offers what the person actually has installed, including apps we would
     never think to list. So it takes over, and the rest step aside. */
  #gf-awards .gf-share-row:has(.gf-share-native:not([hidden])) .gf-share-btn:not(.gf-share-native):not(.gf-share-copy){display:none}
}

/* Modal artwork is now an image, not a painted SVG. Sized here rather than in
   the markup so both modal steps stay identical without repeating dimensions. */
#gf-awards .gf-head img{width:76px;height:76px;object-fit:contain;display:block}

/* ============================================================ HERO REVISION */

#gf-awards .hero-micro{margin-top:12px;font-size:13px;color:var(--muted)}
/* Eligibility reads at body size; the trust line is support, not a second claim. */
#gf-awards .hero .trust{margin-top:6px;font-size:.85rem;color:var(--muted);opacity:.92}

/* ---- sub-header CTA, revealed on scroll ---- */
#gf-awards .nav-cta{opacity:0;transform:translateY(8px);pointer-events:none;
  transition:opacity .2s ease,transform .2s ease}
#gf-awards .nav-cta.is-shown{opacity:1;transform:none;pointer-events:auto}

/* ---- language: one control on mobile, segmented on desktop ---- */
#gf-awards .lang-toggle{display:none;align-items:center;gap:6px;
  min-width:72px;min-height:44px;padding:0 12px;
  font:inherit;font-size:13px;font-weight:600;cursor:pointer;
  color:var(--cream);background:transparent;border:1px solid var(--field-border);border-radius:100px}
#gf-awards .lang-toggle svg{width:16px;height:16px;flex:none;fill:none;stroke:currentColor;
  stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
#gf-awards .lang-toggle .lang-chev{width:13px;height:13px;transition:transform .2s ease}
#gf-awards .lang-toggle[aria-expanded=true] .lang-chev{transform:rotate(180deg)}
/* Arabic renders optically smaller and lighter than Latin at the same nominal
   size, so it is nudged up rather than left looking like a lesser option. */
#gf-awards .seg a[lang^=ar],#gf-awards .lang-sheet [lang^=ar]{font-size:1.12em;font-weight:600}

#gf-awards .lang-sheet{position:fixed;inset:0;z-index:1000;display:grid;align-items:end;
  background:color-mix(in srgb,#000 55%,transparent)}
#gf-awards .lang-sheet[hidden]{display:none}
#gf-awards .lang-sheet-in{background:var(--panel);padding:20px 18px calc(20px + env(safe-area-inset-bottom));
  border-start-start-radius:18px;border-start-end-radius:18px;
  transform:translateY(100%);transition:transform .22s cubic-bezier(.22,1,.36,1)}
#gf-awards .lang-sheet.is-open .lang-sheet-in{transform:none}
#gf-awards .lang-sheet-h{font-size:11px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;
  color:var(--muted);margin-bottom:12px}
#gf-awards[dir=rtl] .lang-sheet-h{letter-spacing:0}
#gf-awards .lang-sheet a{display:flex;align-items:center;justify-content:space-between;gap:12px;
  min-height:52px;padding:12px 14px;margin-inline:-14px;border-radius:10px;
  font-size:16px;color:var(--cream);text-decoration:none}
#gf-awards .lang-sheet a svg{width:20px;height:20px;flex:none;opacity:0;
  fill:none;stroke:var(--sage-action);stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
#gf-awards .lang-sheet a[aria-selected=true]{background:color-mix(in srgb,var(--sage) 12%,transparent);font-weight:600}
#gf-awards .lang-sheet a[aria-selected=true] svg{opacity:1}

/* ---- sticky CTA (mobile) ---- */
#gf-awards .sticky-cta{position:fixed;inset-inline:0;bottom:0;z-index:900;
  padding:12px 16px calc(12px + env(safe-area-inset-bottom));
  background:color-mix(in srgb,var(--ink) 94%,transparent);
  border-top:1px solid var(--hairline);backdrop-filter:blur(10px);
  transform:translateY(110%);transition:transform .2s ease}
#gf-awards .sticky-cta[hidden]{display:none}
#gf-awards .sticky-cta.is-shown{transform:none}
#gf-awards .sticky-cta .cta{width:100%}

@media(max-width:767px){
  /* Language + CTA join the lockup's row instead of taking one of their own. */
  #gf-awards .nav-in{gap:8px;padding-block:7px}
  #gf-awards .nav-sp{margin-inline-start:auto}
  #gf-awards .brand img{width:96px}
  #gf-awards .brand-txt{display:none}
  #gf-awards .nav-cta{display:none}          /* the sticky bar is the mobile CTA */
  #gf-awards .hero{padding-block:20px 32px}
  #gf-awards .hero h1{font-size:clamp(26px,7.4vw,34px)}
  #gf-awards .hero .sub{font-size:15px}
  #gf-awards .hero .acts{flex-direction:column;gap:12px;align-items:stretch}
  #gf-awards .hero .acts .cta{width:100%}
  /* Panel sits inline, after the microcopy and before the attribution — nothing
     floats below the fold.

     display:contents promotes the copy block's children into .hero-in's grid so
     the panel can be ordered among them. That also hands them the GRID's
     row-gap, which is up to 60px — it overrode every margin in the hero and
     produced 178px voids between lines. The gap has to go to zero here so the
     elements' own --hero-gap-* margins own the rhythm again, which is the whole
     point of having a scale. */
  /* The panel that needed display:contents to be re-ordered is gone, so the
     copy block is an ordinary flow container again and the grid gap is no
     longer fighting the hero's own margins. */
  #gf-awards .hero-in{gap:clamp(24px,5vw,36px)}
  /* .2em tracking on a long uppercase string wrapped the eyebrow onto two lines
     and cost a whole line of the first screen. */
  #gf-awards .eyebrow{letter-spacing:.1em;font-size:10.5px}
}
@media(min-width:768px){#gf-awards .sticky-cta{display:none!important}}
@media(prefers-reduced-motion:reduce){
  #gf-awards .nav-cta,#gf-awards .sticky-cta,#gf-awards .lang-sheet-in{transition:none}
}

/* Modal award context + two-step indicator. */
#gf-awards .gf-award{font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  color:var(--sage-action);margin-bottom:6px}
#gf-awards[dir=rtl] .gf-award{letter-spacing:0}
#gf-awards .gf-steps2{display:flex;gap:8px;margin:15px 0 4px;padding:0;list-style:none}
#gf-awards .gf-steps2 li{display:flex;align-items:center;gap:8px;flex:1;
  padding:9px 12px;border-radius:100px;font-size:13px;color:var(--muted);
  background:color-mix(in srgb,var(--panel) 60%,transparent);border:1px solid var(--hairline)}
#gf-awards .gf-steps2 b{display:grid;place-items:center;width:20px;height:20px;flex:none;
  border-radius:50%;font-size:11px;font-weight:700;
  background:color-mix(in srgb,var(--hairline) 70%,transparent);color:var(--muted)}
#gf-awards .gf-steps2 .is-now{color:var(--cream);font-weight:600;border-color:var(--sage)}
#gf-awards .gf-steps2 .is-now b{background:var(--sage-action);color:#fff}

/* Terms notice. Sits directly above the button it qualifies, because the click
   IS the agreement — putting it anywhere else breaks that link. */
#gf-awards .gf-terms{margin:16px 0 12px;font-size:12.5px;line-height:1.55;color:var(--muted)}
#gf-awards .gf-terms a{color:var(--cream);font-weight:600;text-underline-offset:3px;
  text-decoration:underline;text-decoration-thickness:1px}
#gf-awards .gf-terms a:hover{text-decoration-thickness:2px}

/* ---- language switcher: one control at every width ----
   The compact trigger replaces the segmented buttons on desktop too (Saleem,
   2026-08-09). Swapped on JS availability, NOT on a breakpoint: the segmented
   control is three plain links that work with no JavaScript, while the trigger
   needs JS to open anything. Hiding the links by width — which the mobile block
   did — left a no-JS visitor with no way to change language at all. */
#gf-awards.has-js .seg{display:none}
#gf-awards.has-js .lang-toggle{display:inline-flex}

@media(min-width:768px){
  /* A bottom sheet is a phone pattern; on a 1500px screen it is a full-width
     drawer for three links. Same trigger, same markup, same JS — the panel just
     anchors under the control it belongs to, which is where the eye already is. */
  #gf-awards .lang-sheet{align-items:start;justify-items:end;background:transparent;
    padding-block-start:calc(var(--hub-header-h) + 58px);
    padding-inline:max(var(--pad), calc((100vw - var(--maxw)) / 2 + var(--pad)))}
  #gf-awards .lang-sheet-in{width:232px;padding:14px 12px;
    border:1px solid var(--hairline);border-radius:14px;
    box-shadow:0 14px 38px color-mix(in srgb,#000 22%,transparent);
    transform:translateY(-8px);opacity:0;
    transition:transform .18s ease,opacity .18s ease}
  #gf-awards .lang-sheet.is-open .lang-sheet-in{transform:none;opacity:1}
  #gf-awards .lang-sheet a{min-height:44px;font-size:15px}
}

/* ---- welcome: pick an award ----
   Three real choices, not a paragraph asking them to go and find some. */
#gf-awards .gf-pick{display:grid;gap:9px;margin-top:18px}
#gf-awards .gf-pick-a{display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;
  column-gap:14px;align-items:center;
  padding:13px 15px;border-radius:12px;text-decoration:none;
  background:color-mix(in srgb,var(--panel) 60%,transparent);
  border:1px solid var(--hairline);
  transition:border-color .15s ease,background-color .15s ease}
#gf-awards a.gf-pick-a:hover{text-decoration:none;
  border-color:var(--sage);background:color-mix(in srgb,var(--sage) 10%,var(--panel))}
#gf-awards .gf-pick-a img{grid-row:1 / 3;width:42px;height:42px;object-fit:contain}
#gf-awards .gf-pick-t{font-size:15px;font-weight:600;color:var(--cream);align-self:end}
#gf-awards .gf-pick-d{font-size:12.5px;line-height:1.45;color:var(--muted);align-self:start}
#gf-awards .gf-pick-a.is-off{opacity:.6;cursor:default}
#gf-awards .gf-pick-a.is-off .gf-pick-d{color:var(--gold)}
#gf-awards .gf-later{font:inherit;font-size:13px;color:var(--muted);background:none;border:0;
  cursor:pointer;text-decoration:underline;text-underline-offset:3px;padding:6px}
#gf-awards .gf-later:hover{color:var(--cream)}

/* Three short boxes on one row — what / how much / over what period. */
#gf-awards .wz-measure{display:grid;gap:13px}
@media(min-width:620px){#gf-awards .wz-measure{grid-template-columns:repeat(3,minmax(0,1fr))}}
#gf-awards .wz-measure input{max-width:none!important}

/* Radio group. Shares .wz-check with the multi-selects so a tick and a radio
   have the same hit area, spacing and hover — they are the same gesture. */
#gf-awards .wz-radios{display:grid;gap:4px;max-width:52ch}
#gf-awards .wz-radio input{width:19px;height:19px;flex:none;margin-top:1px;
  accent-color:var(--sage-action);cursor:pointer}
/* One column: these options are sentences, not one-word values, and two
   columns of prose is harder to compare than one. */
#gf-awards .wz-radios .wz-check{width:100%}

/* ---------- the success screen ----------
   Twenty minutes of work ends here. It gets a shape of its own rather than a
   sentence: what happened, what you now have, and when you hear. */
#gf-awards .done{margin-top:26px}
#gf-awards .done-head{display:flex;align-items:center;gap:16px;
  padding-bottom:clamp(20px,2.6vw,28px);border-bottom:1px solid var(--hairline)}
#gf-awards .done-tick{display:grid;place-items:center;flex:none;width:46px;height:46px;
  border-radius:50%;background:var(--sage-action)}
#gf-awards .done-tick svg{width:24px;height:24px;fill:none;stroke:#fff;
  stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round}
#gf-awards[data-theme=dark] .done-tick svg{stroke:var(--ink)}
#gf-awards .done-head h2{font-size:clamp(21px,2.8vw,28px);font-weight:600;letter-spacing:-.015em}
#gf-awards[dir=rtl] .done-head h2{letter-spacing:0}
#gf-awards .done-head p{margin-top:5px;font-size:15px;color:var(--muted)}

#gf-awards .done-page,#gf-awards .done-next{margin-top:clamp(24px,3vw,34px)}
#gf-awards .done-page-h{font-size:11px;font-weight:700;letter-spacing:.16em;
  text-transform:uppercase;color:var(--muted);margin-bottom:12px}
#gf-awards[dir=rtl] .done-page-h{letter-spacing:0}
#gf-awards .done-page .wz-page-card{margin-top:0}

/* The schedule. A numbered list, because these genuinely are in sequence —
   the one place on this page where numbering carries information. */
#gf-awards .done-next ol{list-style:none;margin:0;padding:0;counter-reset:dn}
#gf-awards .done-next li{counter-increment:dn;position:relative;
  display:flex;flex-wrap:wrap;gap:6px 16px;justify-content:space-between;align-items:baseline;
  padding:13px 0 13px 34px;border-bottom:1px solid var(--hairline)}
#gf-awards[dir=rtl] .done-next li{padding:13px 34px 13px 0}
#gf-awards .done-next li::before{content:counter(dn);position:absolute;inset-inline-start:0;top:12px;
  display:grid;place-items:center;width:22px;height:22px;border-radius:50%;
  font-size:11px;font-weight:700;color:var(--muted);
  background:color-mix(in srgb,var(--hairline) 60%,transparent)}
#gf-awards .done-next li:last-child{border-bottom:0}
#gf-awards .dn-k{font-size:14.5px;color:var(--cream)}
#gf-awards .dn-v{font-size:14px;font-weight:600;color:var(--muted);white-space:nowrap}
#gf-awards .done-foot{margin-top:clamp(24px,3vw,32px);padding-top:18px;
  border-top:1px solid var(--hairline)}

/* ============================================ REVIEWING APPLICATIONS */
#gf-awards .rv-meta{margin-top:22px}
#gf-awards .rv-meta a{color:var(--sage-action);font-weight:600}

#gf-awards .rv-filters{margin-top:24px}
#gf-awards .rv-chips{display:flex;flex-wrap:wrap;gap:8px}
#gf-awards .rv-chip{display:inline-flex;align-items:center;gap:8px;
  min-height:38px;padding:8px 15px;border-radius:100px;
  font-size:13.5px;font-weight:600;text-decoration:none;text-transform:capitalize;
  color:var(--muted);background:color-mix(in srgb,var(--panel) 60%,transparent);
  border:1px solid var(--hairline)}
#gf-awards .rv-chip:hover{text-decoration:none;color:var(--cream)}
#gf-awards .rv-chip.is-on{color:var(--cream);border-color:var(--sage);background:var(--panel)}
#gf-awards .rv-chip b{font-size:12px;padding:1px 7px;border-radius:100px;
  background:color-mix(in srgb,var(--hairline) 70%,transparent);color:var(--muted)}
#gf-awards .rv-chip.is-on b{background:var(--sage-action);color:#fff}

#gf-awards .rv-selects{display:flex;flex-wrap:wrap;gap:9px;align-items:center;margin-top:12px}
#gf-awards .rv-selects select,#gf-awards .rv-selects input[type=search]{
  font:inherit;font-size:14px;min-height:40px;padding:8px 12px;
  color:var(--cream);background:var(--panel);
  border:1px solid var(--field-border);border-radius:7px}
#gf-awards .rv-selects input[type=search]{min-width:min(100%,240px)}
#gf-awards .rv-clear{font-size:13px;color:var(--muted);text-decoration:underline;text-underline-offset:3px}
#gf-awards .rv-count{margin-top:16px;font-size:13px;color:var(--muted)}

/* A table that stays a table on a phone: the header hides and each row becomes
   a stacked card, rather than forcing a horizontal scroll through five columns. */
#gf-awards .rv-table{margin-top:10px;border-top:1px solid var(--hairline)}
#gf-awards .rv-row{display:grid;gap:4px 16px;padding:14px 4px;
  border-bottom:1px solid var(--hairline);text-decoration:none;color:var(--cream)}
@media(min-width:820px){
  #gf-awards .rv-row{grid-template-columns:minmax(0,2.1fr) minmax(0,2fr) minmax(0,1.3fr) minmax(0,1fr) minmax(0,.9fr);
    align-items:baseline}
}
#gf-awards a.rv-row:hover{text-decoration:none;background:color-mix(in srgb,var(--sage) 7%,transparent)}
#gf-awards .rv-head{font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  color:var(--muted);padding-block:10px}
#gf-awards[dir=rtl] .rv-head{letter-spacing:0}
@media(max-width:819px){#gf-awards .rv-head{display:none}}
#gf-awards .rv-row span{font-size:14px;min-width:0;overflow-wrap:anywhere}
#gf-awards .rv-title{font-weight:600;display:flex;flex-wrap:wrap;align-items:center;gap:8px}
#gf-awards .rv-sub{display:block;font-size:12.5px;color:var(--muted)}
#gf-awards .rv-blank{color:var(--muted);font-style:italic}
#gf-awards .rv-empty{margin-top:26px;color:var(--muted)}

#gf-awards .rv-pill{display:inline-block;padding:2px 9px;border-radius:100px;
  font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}
#gf-awards[dir=rtl] .rv-pill{letter-spacing:0}
#gf-awards .rv-pill.is-draft{background:color-mix(in srgb,var(--gold) 20%,transparent);color:var(--gold)}
#gf-awards .rv-pill.is-submitted{background:color-mix(in srgb,var(--sage) 20%,transparent);color:var(--sage-action)}
#gf-awards .rv-pill.is-tier{background:color-mix(in srgb,var(--panel) 80%,transparent);
  color:var(--muted);border:1px solid var(--hairline)}

#gf-awards .rv-block{margin-top:clamp(28px,3.4vw,40px)}
#gf-awards .rv-block-h{font-size:11px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;
  color:var(--muted);padding-bottom:10px;border-bottom:1px solid var(--hairline)}
#gf-awards[dir=rtl] .rv-block-h{letter-spacing:0}
#gf-awards .rv-qa{display:grid;gap:0}
#gf-awards .rv-qa>div{display:grid;gap:5px 24px;padding:14px 0;border-bottom:1px solid var(--hairline)}
@media(min-width:760px){
  #gf-awards .rv-qa>div{grid-template-columns:minmax(0,1fr) minmax(0,1.6fr)}
  /* A 200-word answer beside its question is unreadable at that measure, so
     long answers get the full width and sit under it. */
  #gf-awards .rv-qa>div.is-long{grid-template-columns:1fr}
}
#gf-awards .rv-qa dt{font-size:13.5px;color:var(--muted);line-height:1.5}
#gf-awards .rv-qa dd{margin:0;font-size:15px;line-height:1.65;color:var(--cream);overflow-wrap:anywhere}
#gf-awards .rv-qa .is-long dd{max-width:70ch}
/* "DEMONSTRATED" and "SUBMITTED" were breaking mid-word in their columns. */
#gf-awards .rv-pill{white-space:nowrap}
#gf-awards .rv-head span{white-space:nowrap}
@media(min-width:820px){
  #gf-awards .rv-row{grid-template-columns:minmax(0,2fr) minmax(0,2fr) minmax(0,1.2fr) minmax(0,1.15fr) minmax(0,.85fr)}
}

/* Signup-modal fields were 15px. Safari on iOS auto-zooms any focused input
   under 16px and does NOT zoom back out — so tapping "First Name" left the
   applicant panning sideways through the rest of the form, at the highest-stakes
   moment in the funnel. The wizard's own fields were already 16px; this was a
   one-line inconsistency in the one place it cost the most.

   The form's intro, shown once on step 1. */
/* A rounded rectangle with a full hairline border, sitting directly above a
   form, is a text input. People tried to type in it. It is a note, so it is
   set as one: no box, a single rule down the leading edge, and it now sits
   ABOVE the step indicator rather than between the steps and the first
   question, where it was reading as the first field. */
#gf-awards .wz-intro{margin:14px 0 4px;padding:2px 0 2px 16px;
  border-inline-start:3px solid color-mix(in srgb,var(--sage) 45%,transparent);
  background:none;border-radius:0}
#gf-awards .wz-intro p{font-size:15px;line-height:1.62;color:var(--muted);max-width:62ch}
#gf-awards .wz-intro p+p{margin-top:9px}
#gf-awards .wz-footer{margin-top:22px;padding-top:16px;border-top:1px solid var(--hairline)}

/* A reviewer reading an application that predates answer-freezing. Deliberately
   loud: the risk is that they trust what they are reading. */
#gf-awards .rv-warn{margin:18px 0 6px;padding:12px 14px;border-radius:10px;
  border:1px solid var(--warn-bd,#c99700);background:var(--warn-bg,#fff8e6);
  color:var(--warn-fg,#5c4600);font-size:14px;line-height:1.5}
#gf-awards[data-theme=dark] .rv-warn{--warn-bd:#6b5400;--warn-bg:#2a2410;--warn-fg:#f0dfa8}

/* Reviewer pager. Centred rather than pushed to one edge: with 100 rows above
   it the judge's eye arrives from the middle of the table, not its margin. */
#gf-awards .rv-pager{display:flex;align-items:center;justify-content:center;
  gap:14px;margin:22px 0 4px;flex-wrap:wrap}
#gf-awards .rv-pager .is-off{opacity:.4;pointer-events:none}
#gf-awards .rv-pageno{font-size:14px;color:var(--muted)}

/* ---------------------------------------------------------------------------
   Programme and host platform.

   Reworked 2026-08-10. The first version was two columns of unequal length with
   the logo and the funding statements trailing off the bottom of the left one,
   which left a large void on the right and made the whole section read as
   unfinished. Three changes:

     · the label column is a FIXED width, so every value starts on the same
       vertical. It was minmax(96px,auto), which let the longest label —
       "DELIVERED BY" — push its own value out of line with the three above it.
     · the two columns are given their own alignment rather than being stretched
       to the taller one's height.
     · the logo and the two statements are one ruled block spanning the full
       width, because that is what they are: the formal notice, not a third
       column that ran out of content.
   --------------------------------------------------------------------------- */
/* THE HOST-PLATFORM SECTION.

   It was a two-column grid — the programme brief and its Funded by / Focus /
   Delivered by table on the left, the hub on the right — over a ruled compliance
   footer carrying the EU and SPARK logos, the funding statement and the
   responsibility clause. All of that came out on 2026-08-11: the awards are
   Umbrella500 owned and funded, SPARK amplifies only, so the page was never a
   programme publication and the credits claimed a relationship that is not there.

   One block left, so no grid. It is measure-limited rather than stretched across
   the full width — a single paragraph running the whole 1120px reads as a footer
   nobody finishes, and this one is the argument for keeping the account. */
#gf-awards .prog-grid-single{max-width:62ch}
#gf-awards .prog-hub h3{font-size:clamp(20px,2.4vw,25px);font-weight:600;margin-bottom:13px}
#gf-awards .prog-hub p{font-size:15.5px;line-height:1.68;color:var(--muted)}
#gf-awards .prog-hub p + p{margin-top:12px}
#gf-awards .prog-hub-note{margin-top:14px;color:var(--cream);font-weight:500}

/* A conditional question whose condition is not met.

   Hidden rather than absent so awards.js can unfold it the moment the
   controlling answer changes; with JS off it stays hidden and the server-side
   reveal on Save behaves exactly as it always did.

   This rule was written, then silently deleted a few hours later when the
   programme section above was rewritten with a replace-to-end-of-file. Nothing
   failed loudly: every conditional question simply became visible to everyone,
   which reads as a longer form rather than as a bug. tests/awards-page.sh now
   asserts the rule exists, because "the page looks slightly wrong" is not a
   signal anyone reliably acts on. */
#gf-awards .wz-q.is-folded{display:none}

/* A write-in that belongs to one option, sitting beside it.
   The follow-up used to render as its own block below the whole question:
   people answered the radio, saw a new heading appear, and read it as an
   unrelated question. Inside the option's label it is unmistakably part of that
   choice. */
#gf-awards .wz-radio.has-write-in{flex-wrap:wrap}
#gf-awards .wz-writein{flex:1 1 190px;min-width:0;margin-inline-start:10px;
  padding:8px 11px;font-size:15px;border-radius:7px;
  border:1px solid var(--hairline);background:var(--panel);color:var(--cream)}
#gf-awards .wz-writein:focus{outline:2px solid var(--sage-action);outline-offset:1px}
#gf-awards .wz-writein[hidden]{display:none}

/* The box is on screen from the start now, on the two options that take one.
   Unpicked, it recedes — a hairline outline and no fill, so the option list
   still reads as a list of choices rather than a wall of inputs. The moment its
   option is chosen it fills in and looks like every other field on the form.
   Nothing here hides anything: an unpicked box is fully visible, focusable and
   typeable, and typing in it selects its option. */
#gf-awards .wz-radio:not(:has(input[type=radio]:checked)) .wz-writein{
  background:transparent; border-style:dashed; opacity:.72;
}
#gf-awards .wz-radio:not(:has(input[type=radio]:checked)) .wz-writein:focus{
  background:var(--panel); border-style:solid; opacity:1;
}

/* The CHOSEN option reads as the answer: its row is tinted and its box is a
   real, filled field. Between this and the dashed inert state above, which one
   is live is legible at a glance rather than by hunting for a filled radio. */
#gf-awards .wz-radio:has(input[type=radio]:checked){
  background:color-mix(in srgb, var(--sage-action) 9%, transparent);
  border-radius:10px;
}
#gf-awards .wz-writein{transition:background .18s var(--ease), border-color .18s var(--ease), opacity .18s var(--ease)}

/* And when switching away actually removes something you typed, the row says
   so. Without this the text simply vanishes, which is easy to miss — the
   complaint that prompted it was that both options looked like they would be
   submitted. Two-thirds of a second, once, only on the row that lost text. */
@keyframes gfCleared{
  0%   { background:color-mix(in srgb, var(--ember) 26%, transparent); }
  100% { background:transparent; }
}
#gf-awards .wz-radio.was-cleared{ animation:gfCleared .62s var(--ease) 1; border-radius:10px; }
#gf-awards .wz-radio.was-cleared .wz-writein{ border-color:var(--ember); }

@media (prefers-reduced-motion: reduce){
  /* No flash, no transition. The value is cleared either way — this is a hint,
     never the mechanism. */
  #gf-awards .wz-radio.was-cleared{ animation:none; }
  #gf-awards .wz-writein{ transition:none; }
}
@media (max-width:520px){
  /* On a narrow screen it drops under its own option rather than squeezing
     the label — still clearly inside that choice, because the label wraps it. */
  #gf-awards .wz-writein{flex:1 1 100%;margin:8px 0 0 30px}
}


/* ---------------------------------------------------------------------------
   "Something isn't working".

   Deliberately quiet: one line of small text under the form, not a button
   competing with "Save and continue". It is a safety net, and a loud one would
   read as an invitation to expect trouble. Once opened it becomes a proper
   field, because at that point the person has something to say.
   --------------------------------------------------------------------------- */
#gf-awards .gf-report{ margin-top:30px; padding-top:18px; border-top:1px solid var(--hairline) }
#gf-awards .gf-report-open{
  padding:0; border:0; background:none; font:inherit; font-size:13.5px;
  color:var(--muted); text-decoration:underline; text-underline-offset:3px; cursor:pointer;
}
#gf-awards .gf-report-open:hover{ color:var(--cream) }
#gf-awards .gf-report-open:focus-visible{ outline:2px solid var(--sage-action); outline-offset:3px }

#gf-awards .gf-report-box{ max-width:56ch }
#gf-awards .gf-report-box label{
  display:block; margin-bottom:8px; font-size:14px; color:var(--cream); font-weight:500;
}
#gf-awards .gf-report-box textarea{
  width:100%; padding:11px 13px; font:inherit; font-size:15px; line-height:1.5;
  border:1px solid var(--field-border); border-radius:8px;
  background:var(--panel); color:var(--cream); resize:vertical;
}
#gf-awards .gf-report-box textarea:focus{
  outline:2px solid var(--sage-action); outline-offset:1px;
}
#gf-awards .gf-report-acts{ display:flex; gap:10px; margin-top:11px; flex-wrap:wrap }
#gf-awards .gf-report-said{
  margin:0; font-size:14.5px; line-height:1.55; color:var(--sage);
}


/* ---------------------------------------------------------------------------
   The insights screen. An operational page for two or three people: plain
   tables, dense, no decoration. Legibility of numbers is the whole design job,
   so figures are tabular and the count that matters is the one in bold.
   --------------------------------------------------------------------------- */
#gf-awards.gf-insights .ins-h{
  margin:38px 0 4px; font-size:clamp(17px,2vw,20px); font-weight:600; color:var(--cream);
}
#gf-awards.gf-insights .ins-sub{ font-size:13.5px; color:var(--muted); margin:0 0 8px }
#gf-awards.gf-insights .ins-sub a{ color:var(--sage); text-decoration:underline }
#gf-awards.gf-insights .ins-note{ font-size:13.5px; line-height:1.55; color:var(--muted); margin:0 0 12px; max-width:78ch }
#gf-awards.gf-insights .ins-empty{ font-size:14px; color:var(--muted); padding:12px 0 }

#gf-awards.gf-insights .ins-t{
  width:100%; border-collapse:collapse; font-size:13.5px;
  border:1px solid var(--hairline); background:var(--panel);
}
#gf-awards.gf-insights .ins-t th{
  text-align:left; padding:9px 12px; font-size:11px; letter-spacing:.09em;
  text-transform:uppercase; color:var(--muted); font-weight:700;
  border-bottom:1px solid var(--hairline); white-space:nowrap;
}
#gf-awards.gf-insights .ins-t td{
  padding:10px 12px; vertical-align:top; color:var(--cream);
  border-top:1px solid var(--hairline);
}
#gf-awards.gf-insights .ins-t .num{ text-align:right; font-variant-numeric:tabular-nums; white-space:nowrap }
#gf-awards.gf-insights .ins-t .strong{ font-weight:700 }
#gf-awards.gf-insights .ins-when{ color:var(--muted); white-space:nowrap; font-variant-numeric:tabular-nums }
#gf-awards.gf-insights .ins-sub2{ display:block; font-size:12px; color:var(--muted) }
#gf-awards.gf-insights .ins-q{ margin-bottom:3px }
#gf-awards.gf-insights .ins-qt{ display:block; font-size:12.5px; color:var(--muted) }
#gf-awards.gf-insights .ins-msg{ max-width:52ch; line-height:1.5; white-space:pre-wrap }
/* Browser-reported rows are noisier and less certain than something a person
   wrote, so they sit back a little rather than competing with it. */
#gf-awards.gf-insights .ins-t tr.is-js td{ color:var(--muted) }
@media(max-width:720px){
  #gf-awards.gf-insights .ins-t{ display:block; overflow-x:auto; white-space:nowrap }
}
