/* The Growth Gazette — components
 *
 * The design export applied every style inline, because of how it was
 * generated. These are the same declarations as real classes.
 *
 * Rule for this file: no literal colours, faces or sizes. If a value is not
 * a token, it is a structural constant (a max width, a grid minimum) and it
 * should be obvious which is which.
 */

/* ── layout ──────────────────────────────────────────────────────────── */

.gg-wrap {
  max-width: 1180px;
  margin: 0 auto;
  padding-inline: 20px;
}

.gg-main {
  max-width: 1180px;
  margin: 0 auto;
  padding: 20px 20px 40px;
}

/* The metadata treatment, applied to every kicker, label, column head and
 * timestamp. In the export this string was concatenated inline on roughly
 * every second element. */
.gg-meta {
  font-family: var(--f-meta);
  text-transform: var(--meta-transform);
  letter-spacing: var(--meta-track);
  font-weight: var(--meta-weight);
}

/* ── masthead and chrome ─────────────────────────────────────────────── */

.gg-utility {
  border-bottom: var(--rw) solid var(--rule);
  background: var(--bg);
}

.gg-utility__inner {
  display: flex;
  justify-content: space-between;
  gap: 16px;
  padding-block: 6px;
  font-size: var(--tiny);
  color: var(--muted);
}

.gg-utility a {
  color: inherit;
}

.gg-masthead {
  border-bottom: var(--rw) solid var(--rule);
  background: var(--bg);
}

.gg-masthead__inner {
  padding: 22px 20px 14px;
  text-align: center;
}

.gg-masthead__link {
  text-decoration: none;
  color: var(--ink);
  display: inline-block;
}

.gg-masthead__title {
  display: block;
  font-family: var(--f-mast);
  font-size: var(--mast-size);
  font-weight: var(--mast-weight);
  letter-spacing: var(--mast-track);
  text-transform: var(--mast-transform);
  font-style: var(--mast-style);
  line-height: 1.05;
}

.gg-masthead__tagline {
  font-size: var(--tiny);
  color: var(--muted);
  margin-top: 8px;
}

.gg-nav {
  border-top: var(--rw) solid var(--hair);
}

.gg-nav__inner {
  display: flex;
  gap: 26px;
  justify-content: center;
  overflow-x: auto;
}

.gg-nav__link {
  font-size: var(--tiny);
  text-decoration: none;
  padding-block: 10px;
  color: var(--ink);
  border-bottom: 2px solid transparent;
  white-space: nowrap;
}

.gg-nav__link[aria-current="page"] {
  color: var(--accent);
  border-bottom-color: var(--accent);
}

/* ── footer ──────────────────────────────────────────────────────────── */

.gg-footer {
  border-top: 3px double var(--rule);
  margin-top: 56px;
  background: var(--bg);
}

.gg-footer__inner {
  padding: 32px 20px 48px;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
  gap: 28px;
}

.gg-footer__heading {
  font-size: var(--tiny);
  color: var(--muted);
  margin-bottom: 10px;
}

.gg-footer__item {
  margin-bottom: 6px;
  font-size: var(--small);
}

.gg-footer__item a {
  text-decoration: none;
}

.gg-footer__brand {
  max-width: 34ch;
}

.gg-footer__wordmark {
  font-family: var(--f-mast);
  font-size: 18px;
  font-weight: var(--mast-weight);
  letter-spacing: var(--mast-track);
}

.gg-footer__note {
  font-size: var(--small);
  color: var(--muted);
  margin: 8px 0 0;
}

.gg-footer__legal {
  font-size: var(--tiny);
  color: var(--muted);
  margin: 12px 0 0;
}

/* ── page furniture ──────────────────────────────────────────────────── */

.gg-breadcrumb {
  font-family: var(--f-meta);
  font-size: var(--tiny);
  text-transform: var(--meta-transform);
  letter-spacing: var(--meta-track);
  color: var(--muted);
  margin-bottom: 18px;
}

.gg-breadcrumb a {
  text-decoration: none;
}

.gg-breadcrumb__sep {
  opacity: 0.5;
}

.gg-pagehead {
  border-bottom: 3px solid var(--ink);
  padding-bottom: 14px;
}

.gg-kicker {
  font-size: var(--tiny);
  color: var(--kicker-ink);
  background: var(--kicker-bg);
  display: inline-block;
  padding-block: 2px;
}

.gg-pagehead__title {
  margin: 8px 0 10px;
  font-family: var(--f-display);
  font-size: clamp(30px, 6vw, var(--h1));
  line-height: 1.08;
  font-weight: var(--mast-weight);
  letter-spacing: var(--mast-track);
}

.gg-pagehead__standfirst {
  margin: 0;
  max-width: 72ch;
  font-size: var(--lead);
  color: var(--muted);
}

.gg-pagehead__meta {
  display: flex;
  flex-wrap: wrap;
  gap: 20px;
  margin-top: 16px;
  font-family: var(--f-meta);
  font-size: var(--tiny);
  text-transform: var(--meta-transform);
  letter-spacing: var(--meta-track);
  color: var(--muted);
}

.gg-pagehead__meta time {
  color: var(--ink);
}

/* ── the index table ─────────────────────────────────────────────────── */

/* Wide tables scroll inside their own container so the page body never
 * scrolls horizontally at 375px. */
.gg-tablewrap {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  margin-top: 22px;
}

.gg-table {
  min-width: 560px;
}

.gg-table caption {
  text-align: left;
  font-family: var(--f-meta);
  text-transform: var(--meta-transform);
  letter-spacing: var(--meta-track);
  font-weight: var(--meta-weight);
  font-size: var(--tiny);
  color: var(--muted);
  padding-bottom: 8px;
}

.gg-table thead tr {
  background: var(--thead-bg);
  color: var(--thead-ink);
}

.gg-table th {
  padding: 10px;
  font-family: var(--f-meta);
  font-size: var(--tiny);
  letter-spacing: var(--meta-track);
  text-transform: var(--meta-transform);
}

.gg-table td {
  padding: var(--rowpad) 10px;
}

.gg-table tbody tr {
  border-bottom: var(--rw) solid var(--hair);
}

/* Zebra striping is presentational, so it belongs here rather than being
 * computed per row in the template as the export did. */
.gg-table tbody tr:nth-child(even) {
  background: var(--zebra);
}

.gg-col--num {
  width: 46px;
}

.gg-col--right {
  text-align: right;
}

.gg-cell--rank {
  font-family: var(--f-meta);
  font-size: var(--small);
  color: var(--muted);
  font-variant-numeric: tabular-nums;
}

.gg-cell--name {
  font-size: var(--small);
  font-weight: 600;
}

.gg-cell--name a {
  text-decoration: none;
}

.gg-cell--loc {
  font-size: var(--small);
  color: var(--muted);
}

.gg-cell--cat {
  font-family: var(--f-meta);
  font-size: var(--tiny);
  color: var(--muted);
}

.gg-cell--score {
  font-family: var(--f-meta);
  font-size: var(--small);
  text-align: right;
  font-variant-numeric: tabular-nums;
}

.gg-score {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  justify-content: flex-end;
}

/* Decorative. The figure beside it carries the value, and the bar is
 * aria-hidden in the template. Width is set per row from data.
 *
 * The export computed width as (score - 70) * 2.2 px, which silently
 * collapses for any score below 70. Width is now a 0-100 percentage of a
 * fixed track, so the full scale renders correctly. */
.gg-score__bar {
  display: inline-block;
  height: 6px;
  width: var(--bar-w, 0%);
  max-width: 66px;
  background: var(--accent);
  opacity: 0.55;
}

.gg-score__bartrack {
  display: inline-block;
  width: 66px;
  line-height: 0;
}

/* ── rank movement ───────────────────────────────────────────────────── */

/* Movement is carried three ways: a glyph, a written word for assistive
 * technology, and colour. Colour is never the only signal.
 *
 * The design export carried a glyph and a number only. The written form is
 * added here because the build brief specifies a glyph and a word, and the
 * export does not meet that as shipped. */
.gg-cell--delta {
  font-family: var(--f-meta);
  font-size: var(--tiny);
  text-align: right;
}

.gg-delta--up {
  color: var(--pos);
}

.gg-delta--down {
  color: var(--neg);
}

.gg-delta--flat {
  color: var(--muted);
}

/* ── panel cards ─────────────────────────────────────────────────────── */

.gg-cards {
  margin-top: 36px;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 24px;
}

.gg-card {
  border: var(--rw) solid var(--rule);
  border-radius: var(--radius);
  padding: 18px;
  background: var(--panel);
}

.gg-card__title {
  margin: 0 0 8px;
  font-family: var(--f-display);
  font-size: 18px;
  font-weight: var(--mast-weight);
}

.gg-card__body {
  margin: 0;
  font-size: var(--small);
  color: var(--muted);
}

.gg-card--link {
  display: block;
  text-decoration: none;
  color: inherit;
}

/* ── the data partner lockup ─────────────────────────────────────────── */

.gg-partner__label {
  font-family: var(--f-meta);
  font-size: var(--tiny);
  text-transform: var(--meta-transform);
  letter-spacing: var(--meta-track);
  font-weight: var(--meta-weight);
  color: var(--muted);
  margin-bottom: 10px;
}

.gg-partner__lockup {
  display: flex;
  align-items: baseline;
  gap: 10px;
  flex-wrap: wrap;
}

.gg-partner__name {
  font-family: var(--f-meta);
  font-size: 22px;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
}

.gg-partner__url {
  font-family: var(--f-meta);
  font-size: var(--tiny);
  color: var(--muted);
}

/* ── toolbar above the table ─────────────────────────────────────────── */

.gg-toolbar {
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
  justify-content: space-between;
  align-items: center;
  padding-block: 14px;
  border-bottom: var(--rw) solid var(--rule);
}

.gg-toolbar__note {
  font-size: var(--small);
  color: var(--muted);
}

.gg-button {
  font-family: var(--f-meta);
  font-size: var(--tiny);
  text-transform: var(--meta-transform);
  letter-spacing: var(--meta-track);
  font-weight: var(--meta-weight);
  text-decoration: none;
  border: var(--rw) solid var(--rule);
  border-radius: var(--radius);
  padding: 8px 14px;
  white-space: nowrap;
}
