/* Gameradar typography contract: loaded after route styles. */
body.gr-app {
  --type-caption: 11px;
  --type-meta: 12px;
  --type-small: 13px;
  --type-body: 15px;
  --type-card-title: 16px;
  --type-section-title: 22px;
  --type-page-title: 30px;
  font-size: var(--type-body);
  line-height: 1.55;
}
.gr-app .gr-navigation a { font-size: 14px; }
.gr-app .gr-secondary-nav a { font-size: 13px; }
.gr-app .gr-search input { font-size: 14px; }
.gr-app .gr-quick-search kbd { font-size: 12px; }
.gr-app .gr-watch-open { font-size: 13px; }
.gr-app .gr-button,
.gr-app .primary-button,
.gr-app .advanced-filters > button { font-size: 13px; }
.gr-app .eyebrow,
.gr-app .gr-eyebrow,
.gr-app .gr-media-kicker { font-size: var(--type-caption); }
.gr-app .breadcrumbs { font-size: var(--type-caption); }
.gr-app .gr-page-heading h1,
.gr-app .gr-browser-heading h1 { font-size: var(--type-page-title); }
.gr-app .gr-page-heading p,
.gr-app .gr-section-heading p,
.gr-app .section-heading p { font-size: var(--type-small); }
.gr-app .gr-section-heading h2 { font-size: var(--type-section-title); }
.gr-app .section-heading > a,
.gr-app .gr-section-heading > a { font-size: var(--type-small); }
.gr-app .badge { font-size: var(--type-caption); }
.gr-app .tag-chip { font-size: var(--type-caption); min-height: 28px; }
.gr-app .tag-chips-compact .tag-chip { font-size: 10px; min-height: 25px; }
.gr-app .filter-tabs a,
.gr-app .filter-toggle,
.gr-app .reset-filter { font-size: var(--type-meta); }
.gr-app .advanced-filters label > span,
.gr-app .active-filter-summary { font-size: var(--type-caption); }
.gr-app .quick-filters a,
.gr-app .popular-tags a,
.gr-app .popular-tags > span { font-size: var(--type-caption); }
.gr-app .source-pair small,
.gr-app .hero-metric small,
.gr-app .principle-mark small { font-size: var(--type-caption); }
.gr-app .gr-card h3,
.gr-app .gr-browser-grid .gr-game-card h3 { font-size: var(--type-card-title); }
.gr-app .gr-card-facts,
.gr-app .gr-card-date,
.gr-app .gr-card-unknown,
.gr-app .gr-card-metric { font-size: var(--type-meta); }
.gr-app .gr-card-metric small { font-size: var(--type-caption); }
.gr-app .gr-tags span,
.gr-app .gr-card-media-count { font-size: var(--type-caption); }
.gr-app .card-description { font-size: var(--type-small); }
.gr-app .reason-list span { font-size: var(--type-caption); }
.gr-app .price s,
.gr-app .price-muted,
.gr-app .version { font-size: var(--type-caption); }
.gr-app .game-action-label,
.gr-app .detail-personal-actions .game-action-label { font-size: var(--type-meta); }
.gr-app .availability > small { font-size: var(--type-caption); }
.gr-app .source-presence { min-height: 30px; font-size: var(--type-caption); }
.gr-app .source-direct-link { font-size: var(--type-meta); }
.gr-app .release-row,
.gr-app .event-row,
.gr-app .community-row { font-size: var(--type-small); }
.gr-app .detail-copy > p,
.gr-app .gr-app-detail-description { font-size: var(--type-body); }
.gr-app .detail-meta small,
.gr-app .gr-app .detail-meta small { font-size: var(--type-caption); }
.gr-app .detail-meta strong { font-size: 14px; }
.gr-app .gr-detail-nav a { font-size: var(--type-small); }
.gr-app .gr-media-sidebar-copy h2 { font-size: 20px; }
.gr-app .gr-media-sidebar-copy p { font-size: var(--type-small); }
.gr-app .gr-media-sidebar-meta,
.gr-app .gr-media-sidebar-review-head strong { font-size: 14px; }
.gr-app .gr-media-sidebar-review-head a { font-size: var(--type-meta); }
.gr-app .gr-media-sidebar-review-summary,
.gr-app .gr-media-sidebar-review-list { font-size: var(--type-small); }
.gr-app .game-intel-strip > span,
.gr-app .game-intel-strip small { font-size: var(--type-caption); }
.gr-app .expectation-method strong { font-size: var(--type-meta); }
.gr-app .expectation-method p,
.gr-app .expectation-reasons li { font-size: var(--type-small); }
.gr-app .discovery-source,
.gr-app .discovery-tags a,
.gr-app .discovery-card-footer > small,
.gr-app .discovery-card-footer > span { font-size: var(--type-caption); }
.gr-app .journey-heading h2 { font-size: 26px; }
.gr-app .journey-heading p { font-size: var(--type-small); }
.gr-app .journey-summary strong { font-size: var(--type-small); }
.gr-app .journey-summary span { font-size: var(--type-caption); }
.gr-app .journey-stage { min-height: 188px; padding: 16px; }
.gr-app .journey-stage-head { grid-template-columns: 34px minmax(0,1fr) auto; gap: 10px; }
.gr-app .journey-step { width: 34px; height: 34px; font-size: var(--type-caption); }
.gr-app .journey-stage-head small { font-size: 10px; }
.gr-app .journey-stage-head h3 { font-size: var(--type-card-title); }
.gr-app .journey-state { padding: 4px 7px; font-size: 10px; }
.gr-app .journey-stage > p { margin: 13px 0 15px; font-size: var(--type-small); line-height: 1.55; }
.gr-app .journey-stage-meta time,
.gr-app .journey-stage-meta span,
.gr-app .journey-stage-meta b { font-size: var(--type-caption); }
.gr-app .journey-source-list { gap: 7px; margin-top: 10px; }
.gr-app .journey-source-list a,
.gr-app .journey-source-list span { font-size: var(--type-meta); }
.gr-app .journey-source-list a {
  display: inline-flex; align-items: center; gap: 5px; padding: 5px 8px;
  border: 1px solid rgba(103,200,245,.34); border-radius: 6px;
  background: rgba(103,200,245,.08); color: var(--accent-strong); font-weight: 750;
}
.gr-app .journey-source-list a::after { content: "↗"; font-size: 11px; }
.gr-app .journey-source-list a:hover { color: #fff; border-color: rgba(158,223,255,.7); background: rgba(103,200,245,.15); }
.gr-app .source-direct-link,
.gr-app .gr-availability-open,
.gr-app .gr-media-sidebar-review-head a,
.gr-app .release-heading a[target="_blank"],
.gr-app .community-heading a[target="_blank"] {
  color: var(--accent-strong);
  font-weight: 750;
  text-decoration: underline;
  text-decoration-color: rgba(158,223,255,.42);
  text-underline-offset: 3px;
}
.gr-app .source-direct-link:hover,
.gr-app .gr-availability-open:hover,
.gr-app .gr-media-sidebar-review-head a:hover,
.gr-app .release-heading a[target="_blank"]:hover,
.gr-app .community-heading a[target="_blank"]:hover {
  color: #fff;
  text-decoration-color: var(--accent-strong);
}
.gr-app .availability-source-copy strong { font-size: var(--type-small); }
.gr-app .availability-source-copy small,
.gr-app .availability-source > i { font-size: var(--type-caption); }
@media (max-width: 760px) {
  body.gr-app { font-size: 14px; }
  .gr-app .journey-heading h2 { font-size: 23px; }
  .gr-app .journey-stage { min-height: 0; }
  .gr-app .gr-page-heading h1,
  .gr-app .gr-browser-heading h1 { font-size: 27px; }
}
/* Route-specific small text is normalized to the same readable floor. */
.gr-app :is(.availability-hero-stats small, .availability-filter .filter-tabs small,
  .availability-directory-grid small, .availability-evidence-heading small,
  .availability-source-copy small, .availability-source > i) { font-size: var(--type-caption); }
.gr-app :is(.availability-hero-stats span, .availability-evidence-heading span,
  .availability-directory-grid > a > span, .availability-source-copy em) { font-size: var(--type-caption); }
.gr-app .availability-directory-grid strong { font-size: var(--type-meta); }
.gr-app .availability-source-mark { font-size: var(--type-meta); }
.gr-app .availability-source-copy strong { font-size: var(--type-small); }
.gr-app :is(.discovery-coverage > small, .discovery-coverage span,
  .discovery-hero > aside small, .discovery-filter-grid label > span,
  .discovery-shortcuts a, .discovery-facts small, .release-window small,
  .release-window span) { font-size: var(--type-caption); }
.gr-app :is(.discovery-source, .discovery-tags a,
  .discovery-card-footer > small, .discovery-card-footer > span) { font-size: var(--type-caption); }
.gr-app .discovery-filter-grid :is(input, select, a) { font-size: var(--type-meta); }
.gr-app :is(.gr-media-hover-rail span, .gr-media-strip span,
  .gr-card-rating > span, .gr-card-index > span, .gr-card-rating small,
  .gr-card-status, .gr-cover-fallback span, .gr-media-hover-all,
  .gr-media-hover-head, .gr-release-channels, .gr-trailer-toggle,
  .gr-game-list .gr-card-genres, .gr-game-list .gr-card-platforms,
  .gr-game-list .gr-signal-reasons summary, .gr-game-row .gr-unread) {
  font-size: var(--type-caption);
}
.gr-app :is(.gr-media-review-sample header, .gr-media-review-sample footer,
  .gr-media-review-score small, .gr-media-review-score span,
  .gr-media-sidebar-rail button > span, .gr-media-review-empty,
  .gr-media-review-sample p, .gr-similar-game-copy > span,
  .gr-similar-game-copy small) { font-size: var(--type-caption); }
.gr-app .gr-media-review-sample header strong { font-size: var(--type-meta); }
.gr-app :is(.watch-card-heading span,
  .watch-card-body > p, .watchlist-toolbar button, .watch-card-action,
  .command-context span, .command-result-copy small, .command-footer) {
  font-size: var(--type-caption);
}
.gr-app .watch-card-actions > a { font-size: var(--type-meta); }
.gr-app :is(.game-intel-strip > span, .game-intel-strip small,
  .insight-card-kicker small, .insight-card-kicker span,
  .insight-game-copy footer span, .review-sample footer span,
  .expectation-reasons p, .insight-card-metrics b, .insight-card-metrics span,
  .insights-summary span, .intel-chart-card header span, .intel-chart-legend,
  .intel-heading-status span, .intel-score-card small, .intel-stat-card small,
  .expectation-reasons > small, .review-sample footer a,
  .review-sample header strong, .review-sample time, .intel-alerts span,
  .intel-score-card span, .intel-stat-card span, .review-samples-heading > a) {
  font-size: var(--type-caption);
}
.gr-app :is(.expectation-method p, .expectation-method strong,
  .expectation-reasons li, .review-sample p, .intel-no-chart) { font-size: var(--type-meta); }
.gr-app :is(.saved-search-card header span, .saved-search-meta,
  .saved-search-card > code, .saved-search-card footer :is(a,button),
  .search-subscription-actions :is(button,a), .subscription-secondary,
  .subscription-channel-grid article > span, .subscriptions-builder label span,
  .search-subscription-bar p, .subscription-channel-grid a,
  .subscription-channel-grid p, .subscription-status,
  .subscriptions-principles span) { font-size: var(--type-caption); }
.gr-app :is(.detail-score span, .radar-score small, .score-ring small,
  .availability > small, .community-heading > span, .detail-meta small,
  .latest-signal span, .media-trailer figcaption span,
  .release-meta span, .community-meta span, .upcoming-meta span,
  .release-publication-meta span, .community-time span, .event-source,
  .release-heading time, .event-heading time, .release-kind small,
  .release-publication-action span, .release-publication-heading time,
  .release-publication-source small, .source-card dl > div,
  .source-card-note, .source-link-missing, .source-heading small,
  .source-logo, .relationship-card > small, .tag-directory-grid > a div small,
  .upcoming-date span) { font-size: var(--type-caption); }
.gr-app :is(.badge, .source-presence, .tag-chips-compact .tag-chip,
  .advanced-filters label > span, .reason-list span) { font-size: var(--type-caption); }
.gr-app .event-icon { font-size: var(--type-meta); }
.gr-app .release-kind { font-size: var(--type-meta); }
.gr-app .release-heading,
.gr-app .event-heading,
.gr-app .community-heading { font-size: var(--type-small); }
.gr-app :is(.game-media-thumb small, .gr-quick-event-meta .gr-badge,
  .gr-badge, .gr-brand small, .gr-date-row > time span, .gr-date-row small,
  .gr-home-live, .gr-local-note, .gr-quick-event-meta time,
  .gr-filter-bar label, .gr-footer > .gr-container > small,
  .gr-footer [data-gr-ui-version], .gr-live-status, .gr-quick-event p,
  .detail-hero-facts, .sources-details > summary small) { font-size: var(--type-caption); }
.gr-app :is(.availability-row .community-heading > span,
  .availability-row .community-meta span, .availability-row .community-time small,
  .gr-card-art:has(.gr-card-release) .gr-card-status,
  .gr-card-tools .game-action-watch .game-action-label,
  .gr-game-card .gr-card-genres, .gr-game-card .gr-card-release,
  .gr-library[data-gr-card-layout=list] .gr-card-release,
  .gr-availability-evidence > summary,
  .gr-availability-evidence > summary .gr-badge) { font-size: var(--type-caption); }
.gr-app .gr-availability-open { font-size: var(--type-meta); }
.gr-app .gr-browser-search > label:not(.gr-browser-search) { font-size: var(--type-meta); }
.gr-app .source-card > a {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  width: fit-content;
  margin-top: 12px;
  padding: 6px 9px;
  border: 1px solid rgba(103,200,245,.34);
  border-radius: 6px;
  background: rgba(103,200,245,.08);
  color: var(--accent-strong);
  font-size: var(--type-meta);
  font-weight: 800;
}
.gr-app .source-card > a::after { content: "↗"; font-size: 11px; }
.gr-app .source-card > a:hover { color: #fff; border-color: rgba(158,223,255,.7); background: rgba(103,200,245,.15); }
.gr-app a.source-presence.is-present { color: #d9ffea; border-color: rgba(112,230,165,.42); background: rgba(112,230,165,.1); font-weight: 750; }
.gr-app a.source-presence.is-searchable { color: #ffe3ac; border-color: rgba(255,199,102,.42); background: rgba(255,199,102,.1); font-weight: 750; }
