/* Reviews journal. Shared filters, platform symbols, glyph masks and score
   editing remain owned by their existing components. */
/* The editor's desk at night. Reviews is the press side of the site, so it
   does not sit over the viewer's background game (which said nothing about
   the page): the clippings lie on a gridded paste-up mat under one warm desk
   lamp, below a ruled masthead. Tokens are in gamegrades-colors.css and
   swapped for Lights down in remake.css. A literal walnut desk, the first
   review's art, and plain/unlit variants were tried and set aside.

   The room: a fixed layer behind everything (html still paints the room, so
   the body goes clear), lit by the lamp from the top left. */
html:root body.reviews-page { background-color: transparent !important; }
html body.reviews-page::before {
  content: ""; position: fixed; inset: 0; z-index: -1; pointer-events: none;
  background: var(--gg-lamp-pool), var(--gg-room);
}
/* The masthead: a hairline over the kicker, the title in the clippings' own
   headline serif, upright (Bodoni italic was hard to read at this size), and
   a double rule under it. The rules frame the head, so it sits ~24px under
   the controls bar on desktop and 16px on phones. */
html body.reviews-page #reviewsPageHeader.page-header.page-header {
  border: 0 !important;
  border-top: 1px solid var(--gg-rv-rule) !important;
  border-bottom: 3px double var(--gg-rv-rule-2) !important;
  padding-top: 16px !important; padding-bottom: 16px !important;
  margin-top: -12px !important; margin-bottom: 44px !important;
  border-radius: 0 !important; background: none !important; box-shadow: none !important;
}
html body.reviews-page #reviewsPageHeader .gg-phead { padding-top: 0; padding-bottom: 0; }
html body.reviews-page #reviewsPageHeader h1 {
  font-family: var(--gg-font-serif) !important; font-style: normal !important; font-weight: 700 !important;
  font-size: clamp(40px, 5vw, 60px) !important; line-height: 1 !important; letter-spacing: -.015em !important;
  font-stretch: normal !important; margin-top: 10px !important;
}
@media (max-width: 768px) {
  html body.reviews-page #reviewsPageHeader.page-header.page-header { margin-top: 4px !important; }
}
/* The mat: under the list only (main::before, which main already positions),
   from 24px above the first clipping (--rv-mat-top, measured in full.html)
   to 24px past the column's sides and down to the foot of the column. Lamp
   light, paste-up grid (major 120px, minor 24px), felt fleck, mat colour.

   Nothing in its paint may depend on its height. The list grows every time
   the next page of reviews loads, and a box whose painting depends on its
   size is repainted whole when it grows. So every layer has a fixed px size
   and no-repeat or a fixed tile, the top edge highlight is a 1px image strip
   rather than an inset shadow, there is no outer shadow, and only the top
   corners are rounded (the foot of the mat meets the foot of the page). */
html body.reviews-page main.fulltable::before {
  content: "" !important; position: absolute; z-index: -1; pointer-events: none;
  top: var(--rv-mat-top, 260px) !important; bottom: 0 !important; left: 8px !important; right: 8px !important;
  width: auto !important; transform: none !important;
  border-radius: 20px 20px 0 0 !important; border: 0 !important; box-shadow: none !important;
  background:
    linear-gradient(var(--gg-mat-edge), var(--gg-mat-edge)),
    var(--gg-lamp-on-mat), var(--gg-mat-grid), var(--gg-mat-felt), var(--gg-mat) !important;
  background-size: 4000px 1px, 2400px 2000px, 2400px 2000px, 120px 120px, 120px 120px, 24px 24px, 24px 24px, auto !important;
  background-position: 0 0, 0 0, 0 0, 23px 23px, 23px 23px, 23px 23px, 23px 23px, 0 0 !important;
  background-repeat: no-repeat, no-repeat, no-repeat, repeat, repeat, repeat, repeat, repeat !important;
}
/* One localized pool carries the lamp's warm center onto the paper, falling
   off towards the right and down the desk. Its responsive origin stays over
   the mat on phones. Keep a bounded static layer for smooth scrolling. */
html body.reviews-page main.fulltable::after {
  content: ""; position: absolute; z-index: 2; pointer-events: none;
  top: var(--rv-mat-top, 260px); left: 8px; right: 8px; height: 1100px;
  border-radius: 20px 20px 0 0;
  background: var(--gg-lamp-on-paper);
}
@media (max-width: 768px) {
  html body.reviews-page main.fulltable::before { left: 0 !important; right: 0 !important; border-radius: 16px 16px 0 0 !important; }
  html body.reviews-page main.fulltable::after { left: 0; right: 0; }
}
/* Shadows fall away from the lamp. The list's wrapper scrolls sideways and
   clips anything past its edge, so it borrows main's gutter on the shadow
   side and gives it back as its own: same content width. The gutter is
   fluid (16-32px), so the borrow must be too: a fixed 32px ran the page
   past the viewport at every width under 1280px. */
html body.reviews-page main.fulltable > .table-wrap:not(.page-header-wrap) {
  width: calc(100% + var(--gg-gutter)) !important; max-width: none !important; margin-right: calc(-1 * var(--gg-gutter)); padding-right: var(--gg-gutter); margin-bottom: -32px; padding-bottom: 32px;
}
html body.reviews-page :is(.mobile-card, .full-list.is-desktop-list tbody > tr) { border-radius: 3px; box-shadow: inset 1px 1px 0 var(--gg-lamp-paper-edge), 0 1px 2px var(--gg-lamp-contact), 9px 18px 30px -14px var(--gg-lamp-cast); }
html body.reviews-page .gg-journal-footer-cell { display: none; }
.gg-journal-footer { display: flex; align-items: center; flex-wrap: wrap; gap: 8px 14px; color: var(--gg-ink-2); font: 500 13px/1.4 var(--gg-font-case); }
.gg-journal-played, .gg-journal-pv { display: inline-flex; align-items: center; gap: 5px; white-space: nowrap; }
.gg-journal-played .pf-icon { width: 14px; height: 14px; color: var(--gg-ink-2); filter: none; }
.gg-journal-pv small { font-size: 11px; font-weight: 600; }
.gg-journal-read { margin-left: auto; color: var(--gg-press-accent); font: 650 13px/1.4 var(--gg-font-case); text-decoration: none; white-space: nowrap; }
.gg-journal-read:hover { text-decoration: underline; text-underline-offset: 3px; }
.gg-journal-attributes { display: flex; align-items: center; flex-wrap: wrap; gap: 10px 18px; margin: 0; min-width: 0; }
.gg-journal-attributes > div { display: flex; align-items: center; gap: 6px; }
.gg-journal-attributes dt { color: var(--gg-ink-2); font: 650 12px/1.4 var(--gg-font-case); text-transform: uppercase; letter-spacing: .02em; }
.gg-journal-attributes dd { margin: 0; color: var(--gg-ink-2); font: 500 13px/1.4 var(--gg-font-case); }
html body.reviews-page .gg-journal-attributes .attr-scale i { background: var(--gg-rule); }
html body.reviews-page .gg-journal-attributes .attr-scale i.on { background: var(--gg-ink); }
html body.reviews-page .gg-journal-attributes .scale-word { color: var(--gg-ink); }
html body.reviews-page :is(.gg-journal-read, .gg-journal-footer .hours-cell, .gg-journal-attributes .attr-scale):focus-visible { outline: 2px solid var(--gg-press-accent); outline-offset: 3px; }
html body.reviews-page .gg-journal-footer .hours-cell { cursor: pointer; }
html body.reviews-page .gg-journal-footer .hours-cell:hover { text-decoration: underline; text-underline-offset: 3px; }

@media (min-width: 769px) {
  html body.reviews-page .full-list.is-desktop-list tbody { gap: 16px; }
  /* Rows are not content-visibility: auto. Skipping off-screen rows made
     each one restyle as it scrolled in (~78 elements; measured as the main
     source of dropped frames scrolling a 152-review journal: 30fps with
     ~310 slow frames at 4x CPU, against 45fps and ~60 without). The cost
     moves to load (~150ms at 4x) and to each 15-row append; both measured
     acceptable. Mobile cards are the same (style.css). */
  html body.reviews-page .full-list.is-desktop-list tbody > tr {
    grid-template-columns: 40px var(--gg-review-art-w, clamp(264px, 25vw, 336px)) repeat(4, minmax(0, 1fr)) 32px;
    grid-template-rows: auto minmax(66px, 1fr) auto;
    gap: 10px 12px; padding: 20px;
  }
  html body.reviews-page .full-list.is-desktop-list .rank { grid-column: 1; grid-row: 1 / 3; align-self: stretch; min-height: 0; }
  html body.reviews-page .full-list.is-desktop-list .rank-controls { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; width: 40px; }
  html body.reviews-page .full-list.is-desktop-list .rank-display { font: 450 32px/1.1 var(--gg-font-serif); color: var(--gg-ink-2); }
  html body.reviews-page .full-list.is-desktop-list .rank .rank-move { width: 30px; height: 30px; min-height: 30px; border: 1px solid var(--gg-rule); border-radius: 3px; font: 500 20px/1 var(--gg-font-case); }
  html body.reviews-page .full-list.is-desktop-list .rank .rank-move:disabled { border-color: transparent; }
  html body.reviews-page .full-list.is-desktop-list .gg-review-grip { order: 4; font-size: 18px; line-height: 18px; }
  html body.reviews-page .full-list.is-desktop-list .covercol { grid-column: 2; grid-row: 1 / 3; }
  html body.reviews-page .full-list.is-desktop-list :is(.rowcover, .nocover.small) { width: var(--gg-review-art-w, clamp(264px, 25vw, 336px)) !important; height: var(--gg-review-art-h, clamp(132px, 12.5vw, 168px)) !important; border-radius: 2px; }
  html body.reviews-page .full-list.is-desktop-list .gamename { grid-column: 3 / 7; grid-row: 1; padding-left: 8px !important; font: 600 32px/1.13 var(--gg-font-serif); }
  /* Reserve both title lines so wrapping cannot change the clipping's height
     or the artwork dimensions calculated from its title-and-score column. */
  html body.reviews-page .full-list.is-desktop-list:not(.is-snippet-grid) .gamename > a { min-height: 2lh; }
  html body.reviews-page .full-list.is-desktop-list .gamename > a { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; }
  html body.reviews-page .full-list.is-desktop-list .gamename-platform { display: none; }
  html body.reviews-page .full-list.is-desktop-list .gg-review-excerpt { font: 400 16px/1.4 var(--gg-font-serif); margin-top: 7px; color: var(--gg-ink-2); }
  html body.reviews-page .full-list.is-desktop-list .scorecell { grid-row: 2; margin-top: 0; align-items: center; padding: 0 !important; border-left: 1px solid var(--gg-rule); }
  html body.reviews-page .full-list.is-desktop-list .scorecell[data-score-key="enjoyment_score"] { grid-column: 3; border-left: 0; }
  html body.reviews-page .full-list.is-desktop-list .scorecell[data-score-key="gameplay_score"] { grid-column: 4; }
  html body.reviews-page .full-list.is-desktop-list .scorecell[data-score-key="music_score"] { grid-column: 5; }
  html body.reviews-page .full-list.is-desktop-list .scorecell[data-score-key="narrative_score"] { grid-column: 6; }
  html body.reviews-page .full-list.is-desktop-list .scorecell::before { font-size: 11px; margin-bottom: 6px; }
  html body.reviews-page .full-list.is-desktop-list .scorecell .badge { font-size: 30px; line-height: 1; padding: 3px 0; }
  html body.reviews-page .full-list.is-desktop-list .gg-score-ruler { width: min(56px, 75%); }
  html body.reviews-page .full-list.is-desktop-list :is(.playtimecol, td[id^="pv-"], .attributes-col, .genrescol) { display: none; }
  html body.reviews-page .full-list.is-desktop-list .gg-journal-menu { grid-column: 7; grid-row: 1 / 3; align-self: start; }
  html body.reviews-page .full-list.is-desktop-list .action-buttons { flex-direction: column; }
  html body.reviews-page .full-list.is-desktop-list .action-buttons > a { display: none; }
  html body.reviews-page .full-list.is-desktop-list td.gg-journal-footer-cell { display: block; grid-column: 2 / 8; grid-row: 3; padding-top: 12px !important; border-top: 1px solid var(--gg-rule); margin-top: 4px; }
}
@media (min-width: 769px) and (max-width: 1100px) {
  html body.reviews-page .full-list.is-desktop-list tbody > tr { padding: 16px 12px; gap: 8px; }
  html body.reviews-page .full-list.is-desktop-list .gamename { font-size: 26px; }
  html body.reviews-page .full-list.is-desktop-list .gamename .gg-review-excerpt { font-size: 15px; }
  html body.reviews-page .full-list.is-desktop-list .scorecell .badge { font-size: 26px; }
  html body.reviews-page .full-list.is-desktop-list .scorecell::before { font-size: 11px; letter-spacing: 0; }
}
@media (max-width: 768px) {
  html body.reviews-page .mobile-card { padding: 0; overflow: visible; }
  html body.reviews-page .mobile-card-view { gap: 16px; }
  html body.reviews-page .mobile-card-rank-controls { padding: 0 12px; min-height: 44px; gap: 4px; position: static; display: flex; align-items: center; }
  .gg-journal-rank-label { color: var(--gg-ink-2); font: 650 11px/1 var(--gg-font-case); text-transform: uppercase; letter-spacing: .02em; }
  html body.reviews-page .mobile-card-rank-controls :is(.mobile-rank-btn, .mobile-rank-number) { font: 450 23px/1 var(--gg-font-serif); padding: 0 5px; border: 0; background: none; border-radius: 0; min-width: 32px; min-height: 44px; }
  html body.reviews-page .mobile-card-rank-controls .mobile-rank-btn::before { content: none; }
  html body.reviews-page .mobile-card-rank-arrows { display: flex; gap: 0; }
  html body.reviews-page .mobile-card-rank-controls .mobile-rank-move { width: 44px; min-width: 44px; height: 44px; padding: 0; border: 0; background: none; font-size: 22px; }
  html body.reviews-page .mobile-card-rank-controls .mobile-rank-move:not(:disabled):hover { background: var(--gg-paper-2); }
  html body.reviews-page .mobile-card:not(.has-review-tie) .mobile-card-rank-arrows { display: none; }
  html body.reviews-page .mobile-card-rank-controls .gg-review-grip { width: 24px; text-align: center; font-size: 18px; }
  html body.reviews-page .mobile-card-rank-controls .gg-review-more { margin-left: auto; }
  html body.reviews-page .mobile-card-rank-controls .gg-review-more summary { width: 44px; height: 44px; }
  html body.reviews-page .mobile-card-rank-controls.editing .mobile-rank-input { width: 48px; height: 36px; padding: 4px; color: var(--gg-ink); background: var(--gg-paper-2); border: 1px solid var(--gg-rule); border-radius: 3px; }
  html body.reviews-page .mobile-card-rank-controls.editing .mobile-rank-btn { display: none; }
  html body.reviews-page .mobile-card-hero { padding: 0; overflow: visible; }
  html body.reviews-page .mobile-card-hero-link { display: flex; flex-direction: column; align-items: stretch; padding: 0 12px; gap: 12px; height: auto; }
  html body.reviews-page .mobile-card-hero-link :is(img, .mobile-card-hero-fallback) { width: 100%; height: auto; aspect-ratio: 2 / 1; object-fit: cover; border-radius: 2px; }
  html body.reviews-page .mobile-card-hero-titles { position: static; padding: 0 !important; }
  html body.reviews-page .mobile-card-title { font: 600 27px/1.15 var(--gg-font-serif); text-align: left; }
  html body.reviews-page .mobile-card-body { display: flex; flex-direction: column; gap: 14px; padding: 14px 12px 10px; }
  html body.reviews-page .mobile-card-scores { border: 0; padding: 0; }
  html body.reviews-page .mobile-card-score { gap: 7px; padding: 0 3px; }
  html body.reviews-page .mobile-card-score .label { font-size: 11px; letter-spacing: 0 !important; }
  html body.reviews-page .mobile-card-score .value { font-size: 28px; }
  html body.reviews-page .mobile-card-score-bar { width: min(44px, 80%); }
  html body.reviews-page .mobile-card-body .gg-review-excerpt { font-size: 15px; line-height: 1.45; -webkit-line-clamp: 2; }
  html body.reviews-page .mobile-card-body .gg-journal-attributes { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; text-align: center; }
  html body.reviews-page .mobile-card-body .gg-journal-attributes > div { display: flex; flex-direction: column; gap: 2px; }
  html body.reviews-page .mobile-card-body .gg-journal-attributes dt { font-size: 11px; }
  html body.reviews-page .mobile-card-body .gg-journal-attributes dd { width: 100%; }
  html body.reviews-page .mobile-card-body .gg-journal-attributes .attr-scale { min-height: 36px; width: 100%; }
  html body.reviews-page .mobile-card-body .gg-journal-attributes .scale-icons { width: 100%; max-width: 100px; justify-content: space-between; }
  html body.reviews-page .mobile-card-body .gg-journal-attributes .scale-icons i { width: 13px; height: 14px; }
  html body.reviews-page .mobile-card-actions.gg-journal-footer { display: flex; flex-wrap: wrap; justify-content: flex-start; gap: 4px 12px; border-top: 1px solid var(--gg-rule); padding-top: 10px; margin: 0; font-size: 12px; }
  html body.reviews-page .gg-journal-read { font-size: 13px; min-height: 44px; display: inline-flex; align-items: center; gap: 4px; }
  html body.reviews-page .mobile-card-actions .vote-control { flex-basis: 100%; }
  html body.reviews-page :is(.mobile-rank-btn, .mobile-rank-move):focus-visible { outline: 2px solid var(--gg-press-accent); outline-offset: -3px; }
}
/* A transformed card would become the containing block for its fixed menu. */
html body.reviews-page .mobile-card { transform: none !important; }
html body.reviews-page .full-list.is-desktop-list tbody > tr.gg-drop-before,
html body.reviews-page .mobile-card.gg-drop-before { box-shadow: 0 -3px 0 var(--gg-press-accent); }
html body.reviews-page .full-list.is-desktop-list tbody > tr.gg-drop-after,
html body.reviews-page .mobile-card.gg-drop-after { box-shadow: 0 3px 0 var(--gg-press-accent); }

/* One content column, shared with the Games page and its control bar. */
html body.reviews-page main.fulltable {
  width: 100%; max-width: var(--gg-content-width); box-sizing: border-box;
  margin-inline: auto; padding-inline: var(--gg-gutter) !important;
}
html body.reviews-page #reviewsPageHeader {
  display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center;
  gap: 6px 24px; width: 100% !important; margin: 32px 0 24px !important;
}
html body.reviews-page #reviewsPageHeader .gg-phead { width: auto; min-width: 0; margin: 0; padding: 0 !important; }
.gg-review-edit-hint { grid-column: 1 / -1; margin: 0; color: var(--gg-room-tx-2); font: 500 13px/1.4 var(--gg-font-case); }
.gg-mobile-review-views { display: none; }
html body.reviews-page :is(.gg-desktop-review-views, .gg-mobile-review-views) {
  gap: 2px; padding: 3px; border: 1px solid var(--gg-room-line);
  border-radius: 8px; background: var(--gg-room-2);
}
html body.reviews-page :is(.gg-desktop-review-views, .gg-mobile-review-views) button {
  min-height: 44px; padding: 0 12px; border: 0; border-radius: 5px;
  background: none; color: var(--gg-room-tx-2); font: 650 13px/1 var(--gg-font-case); cursor: pointer;
}
html body.reviews-page :is(.gg-desktop-review-views, .gg-mobile-review-views) button[aria-pressed="true"] {
  background: var(--gg-accent-soft); color: var(--gg-accent-light); box-shadow: none;
}
html body.reviews-page :is(.gg-desktop-review-views, .gg-mobile-review-views) button:focus-visible {
  outline: 2px solid var(--gg-accent-light); outline-offset: 1px;
}
html body.reviews-page :is(.gg-desktop-review-views, .gg-mobile-review-views) button:active { background: var(--gg-room-3); }
.gg-journal-links { display: inline-flex; align-items: center; gap: 18px; margin-left: auto; }
.gg-journal-links .gg-journal-read { margin-left: 0; }
/* The soundtrack sits with the other links, in their type. */
.gg-journal-links .gg-soundtrack { min-height: 0; font: 650 13px/1.4 var(--gg-font-case); text-decoration: none; white-space: nowrap; }
.gg-journal-links .gg-soundtrack:hover { color: var(--gg-press-accent); text-decoration: underline; text-underline-offset: 3px; }
/* Groups played + PV for the Snippets grid's top line; transparent everywhere else. */
.gg-journal-meta { display: contents; }
/* Only the Snippets grid holds a place for missing words (review-summary.css). */
.gg-review-none { display: none; }
.gg-journal-edit { color: var(--gg-press-accent); font: 650 13px/1.4 var(--gg-font-case); text-decoration: none; white-space: nowrap; }
.gg-journal-edit:hover { text-decoration: underline; text-underline-offset: 3px; }
.gg-journal-edit:focus-visible { outline: 2px solid var(--gg-press-accent); outline-offset: 3px; }
.gg-review-tie-note { margin: 0; color: var(--gg-ink-2); font: 500 13px/1.4 var(--gg-font-case); }
.gg-review-tie-note[hidden] { display: none !important; }
html body.reviews-page .gamename > .gg-review-tie-note { display: block; margin-top: 8px; }
html body.reviews-page .gg-review-feedback {
  position: fixed; bottom: 24px; left: 50%; transform: translateX(-50%); z-index: 3450;
  width: max-content; max-width: calc(100vw - 32px); box-sizing: border-box;
  padding: 12px 18px; border: 1px solid var(--gg-rule); border-radius: 6px;
  background: var(--gg-paper-raised); color: var(--gg-ink); box-shadow: 0 4px 16px rgba(0,0,0,.2);
  font: 600 14px/1.4 var(--gg-font-case); pointer-events: none;
}
html body.reviews-page .gg-review-feedback[hidden] { display: none; }
@media (max-width: 768px) {
  html body.reviews-page #reviewsPageHeader { gap: 8px 12px; margin: 24px 0 16px !important; }
  html body.reviews-page .gg-mobile-review-views { display: flex; }
  html body.reviews-page :is(.mobile-card-view, .mobile-list-view).mobile-visible { padding-inline: 0; }
  html body.reviews-page .mobile-list-table th { font-size: 11px; }
  html body.reviews-page .mobile-list-table .mobile-score { width: 70px; }
  html body.reviews-page .gg-review-list-hours { font-size: 12px; }
  html body.reviews-page .mobile-card > .gg-review-tie-note { padding: 0 12px 10px; }
  html body.reviews-page .mobile-list-row .gg-review-tie-note { display: block; margin-top: 4px; }
  html body.reviews-page .gg-journal-links { flex-basis: 100%; justify-content: flex-end; gap: 20px; }
  html body.reviews-page .gg-journal-edit { display: inline-flex; align-items: center; min-height: 44px; }
  html body.reviews-page .gg-review-feedback { bottom: calc(84px + env(safe-area-inset-bottom)); }
}




/* A direct listening action is separate from the editable Music value. */
.gg-soundtrack { display: inline-flex; align-items: center; justify-content: center; gap: 3px; min-height: 44px; color: var(--gg-press-accent); font: 650 13px/1.3 var(--gg-font-case); text-decoration: underline; text-underline-offset: 3px; }
.gg-soundtrack:focus-visible { outline: 2px solid var(--gg-press-accent); outline-offset: 2px; }
.gg-soundtrack:hover { color: var(--gg-ink); }
html body.reviews-page .scorecell .gg-soundtrack { margin-top: 2px; }
@media (max-width: 768px) {
  html body.reviews-page .mobile-card-body .gg-editorial-headline { margin: 0; }
  html body.reviews-page .mobile-card-body .gg-review-excerpt { font-size: 16px; line-height: 1.5; }
  html body.reviews-page .mobile-card-score .gg-soundtrack { font-size: 12px; max-width: 100%; overflow-wrap: anywhere; }
  html body.reviews-page .mobile-card-body .gg-journal-attributes dt { font-size: 12px; }
}

html body.reviews-page #reviewsPageHeader { border-bottom: 3px double var(--gg-room-line-2); padding-bottom: 16px; }
/* The detailed table uses the landscape cover's native proportions. */
@media (min-width: 769px) {
  html body.reviews-page .full-list.is-desktop-list .gg-table-columns { display: none; }
  html body.reviews-page .full-list:not(.is-desktop-list) {
    width: 100%; min-width: 1440px; table-layout: fixed; border-collapse: collapse;
    border-spacing: 0; background: var(--gg-paper);
  }
  .gg-col-rank { width: 48px; } .gg-col-cover { width: 184px; }
  .gg-col-game { width: 300px; } .gg-col-hours { width: 80px; }
  .gg-col-value { width: 96px; } .gg-col-score { width: 84px; }
  .gg-col-attrs { width: 200px; } .gg-col-genres { width: 120px; }
  .gg-col-actions { width: 68px; }
  html body.reviews-page .full-list:not(.is-desktop-list) :is(th, td) {
    padding: 14px 8px !important; border-radius: 0 !important;
  }
  html body.reviews-page .full-list:not(.is-desktop-list) th {
    background: var(--gg-paper-2); font-size: 12px;
  }
  html body.reviews-page .full-list:not(.is-desktop-list) tbody td {
    border-bottom: 1px solid var(--gg-rule); vertical-align: middle;
  }
  html body.reviews-page .full-list:not(.is-desktop-list) .gamename {
    min-width: 0; font: 600 18px/1.35 var(--gg-font-serif); overflow-wrap: anywhere;
  }
  html body.reviews-page .full-list:not(.is-desktop-list) .gg-review-excerpt { font-size: 14px; }
  html body.reviews-page .full-list:not(.is-desktop-list) .scorecell .badge { font-size: 24px; }
  /* Legacy score/odd-row fills overpainted the shared paper, especially the
     Music column and perfect scores. Paint each row on one consistent stock. */
  html body.reviews-page .full-list:not(.is-desktop-list) tbody tr > td {
    background-color: var(--gg-paper) !important;
    background-image: none !important;
    transition: none;
  }
  html body.reviews-page .full-list:not(.is-desktop-list) .covercol { width: 184px; min-width: 184px; }
  html body.reviews-page .full-list:not(.is-desktop-list) :is(.rowcover, .nocover.small) {
    width: 164px !important; height: auto !important; aspect-ratio: 460 / 215;
    min-height: 0; max-height: none; border-radius: 3px;
  }
}
.gg-table-scroll-hint { display: none; }
@media (min-width: 769px) {
  main:has(.full-list:not(.is-desktop-list)) .gg-table-scroll-hint {
    display: block; margin: 0 0 12px; color: var(--gg-room-tx-3); font: 500 13px/1.4 var(--gg-font-case);
  }
}
/* Without an excerpt the art creates spare vertical space. Keep each ruler
   beside its grade instead of letting auto margins push it to the art's foot. */
@media (min-width: 769px) {
  html body.reviews-page .full-list.is-desktop-list:not(.is-snippet-grid) tbody > tr:not(:has(.gg-review-excerpt, .gg-editorial-headline)) .scorecell {
    align-self: start;
  }
  html body.reviews-page .full-list.is-desktop-list:not(.is-snippet-grid) tbody > tr:not(:has(.gg-review-excerpt, .gg-editorial-headline)) .scorecell .gg-score-ruler {
    margin-top: 6px;
  }
}
