/*
 * Styles for the 4 public channel pages: /start, /gram, /przeszedlem,
 * /platformy.
 *
 * Hand-authored (no Tailwind build) port of content-manager2's site-public
 * "Amiga Workbench" theme (design-system/src/tokens.css + src/styles.css +
 * SiteHeader.tsx/SiteFooter.tsx — site-public-spec.md §§1,3). Everything here
 * is scoped under `.rmp-channel` (the template's own <body> class) so nothing
 * leaks onto — or is leaked onto by — the shop's `_rmd` theme:
 *   - the token layer is a `.rmp-channel { --rmp-color-*: ...; }` block, NOT
 *     the source's generic `--color-*` names (those WOULD collide with the
 *     theme's own custom properties);
 *   - the box-sizing reset is scoped to `.rmp-channel *`, never the bare `*`
 *     the source's styles.css uses (a global reset from a plugin stylesheet
 *     would silently change every shop page's box model); and
 *   - `body` itself is never selected bare — only `body.rmp-channel`, which
 *     only ever matches this plugin's own template (templates/channel.php
 *     is a full, theme-free HTML document, so there is no theme `<body>` to
 *     collide with in the first place, but the selector stays scoped anyway
 *     for the same reason as everything else in this file).
 *
 * Enqueued ONLY on a valid channel request (rmp_channel_enqueue_assets) —
 * never site-wide, and the theme's own stylesheet is never dequeued.
 *
 * There is no build step: every value below is a literal px/em/color/
 * tracking value transcribed from the source TSX, including the `rmp-*`
 * hover states that site-public's styles.css does NOT define (those live in
 * the Tailwind utility classes on the JSX itself, which this hand port must
 * spell out explicitly instead).
 */

/* =============================================================
   Token layer — namespaced --rmp-* custom properties (never --color-*,
   never the theme's own names). Values are the Amiga Workbench token set
   verbatim (design-system/src/tokens.css), with the source's `color-mix()`
   border tints pre-computed to literal rgba() — same visual result, no
   dependency on `color-mix()` baseline support.
   ============================================================= */
.rmp-channel {
	--rmp-font-vt323: 'VT323', ui-monospace, monospace;
	--rmp-font-jetbrains: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
	--rmp-font-inter: 'Inter', ui-sans-serif, system-ui, sans-serif;

	--rmp-color-surface: #0a1020;
	--rmp-color-surface-2: #111a35;
	--rmp-color-surface-3: #1a2647;

	--rmp-color-border: rgba(255, 255, 255, 0.10);
	--rmp-color-border-subtle: rgba(255, 255, 255, 0.05);
	--rmp-color-border-blue: rgba(0, 119, 221, 0.40);
	--rmp-color-border-orange: rgba(232, 130, 30, 0.40);

	--rmp-color-foreground: #f0eaf8;
	--rmp-color-muted: #8a93b5;
	--rmp-color-faint: #5b6488;

	--rmp-color-primary: #0077dd;
	--rmp-color-primary-bright: #1e6fe0;
	--rmp-color-accent: #e8821e;
	--rmp-color-terminal: #39ff14;
	--rmp-color-ring: #0077dd;

	--rmp-color-info: #0077dd;
	--rmp-color-success: #39ff14;
	--rmp-color-warning: #e8821e;
	--rmp-color-danger: #ff2244;
	--rmp-color-neutral: #8a93b5;

	--rmp-radius-md: 0px;
	--rmp-radius-lg: 2px;

	--rmp-shadow-pixel: 4px 4px 0 var(--rmp-color-primary);
	--rmp-shadow-glow: 0 0 12px rgba(0, 119, 221, 0.35);

	font-family: var(--rmp-font-jetbrains);
	color: var(--rmp-color-foreground);
	background: var(--rmp-color-surface);
}

/* Scoped box-sizing reset — never a bare `*`. */
.rmp-channel,
.rmp-channel *,
.rmp-channel *::before,
.rmp-channel *::after {
	box-sizing: border-box;
}

body.rmp-channel {
	margin: 0;
	min-height: 100%;
}

a.rmp-header__logo-link,
a.rmp-header__cta-link,
a.rmp-mobile-menu__cta-link,
a.rmp-nav-link,
a.rmp-mobile-nav-row,
a.rmp-link,
a.rmp-soc {
	text-decoration: none;
}

/* =============================================================
   Shell — mirrors mount.tsx's ThemeProvider wrapper
   ("flex min-h-screen flex-col") + <main> container
   ("mx-auto w-full max-w-[1180px] flex-1 px-[22px] pt-[34px] pb-[56px]").
   ============================================================= */
.rmp-channel__shell {
	display: flex;
	flex-direction: column;
	min-height: 100vh;
	position: relative;
}

.rmp-channel__main {
	flex: 1 1 auto;
	width: 100%;
	max-width: 1180px;
	margin: 0 auto;
	padding: 34px 22px 56px;
}

/* =============================================================
   Scanline overlay (opt-in via ThemeProvider `scanline` prop upstream —
   here it is simply always-on on the shell) + blink/LED keyframes.
   ============================================================= */
.rmp-scanline {
	position: relative;
}
.rmp-scanline::after {
	content: "";
	position: absolute;
	inset: 0;
	background: repeating-linear-gradient(0deg, transparent, transparent 2px, rgba(0, 0, 0, 0.1) 2px, rgba(0, 0, 0, 0.1) 4px);
	pointer-events: none;
	z-index: 1;
}

@keyframes rmp-blink {
	0%, 100% { opacity: 1; }
	50% { opacity: 0; }
}
@keyframes rmp-led {
	0%, 100% { opacity: 1; }
	50% { opacity: 0.3; }
}
.rmp-channel .rmp-blink {
	animation: rmp-blink 1s step-end infinite;
	display: inline-block;
}
.rmp-channel .rmp-led {
	animation: rmp-led 1.4s step-end infinite;
	display: inline-block;
}

@media (prefers-reduced-motion: reduce) {
	.rmp-scanline::after {
		background: none;
	}
	.rmp-channel .rmp-blink,
	.rmp-channel .rmp-led {
		animation: none;
	}
}

/* =============================================================
   Button — hand port of the DS <Button> classes actually used by the
   header/mobile-menu CTA (site-public-spec.md §8): solid/danger + sm/md,
   plus fullWidth. Rendered as a <span> inside an <a>, so the interactive
   surface is the anchor; the base classes below still carry the focus-ring
   custom property for keyboard use via the parent link's :focus-visible.
   ============================================================= */
.rmp-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 0.5rem;
	border-radius: var(--rmp-radius-lg);
	border: 2px solid transparent;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.025em;
	transition: filter 0.15s ease, background-color 0.15s ease, color 0.15s ease;
	cursor: pointer;
	user-select: none;
}
.rmp-btn--sm {
	padding: 0.25rem 0.625rem;
	font-size: 0.75rem;
}
.rmp-btn--md {
	padding: 0.5rem 0.875rem;
	font-size: 0.875rem;
}
.rmp-btn--full {
	width: 100%;
}
.rmp-btn--solid-danger {
	border-color: rgba(255, 34, 68, 0.6);
	background: var(--rmp-color-danger);
	color: #fff;
	box-shadow: inset 2px 2px 0 rgba(255, 255, 255, 0.25);
}
a:hover > .rmp-btn--solid-danger,
a:focus-visible > .rmp-btn--solid-danger {
	filter: brightness(1.1);
}
.rmp-btn--outline-primary {
	border-color: rgba(0, 119, 221, 0.4);
	background: transparent;
	color: var(--rmp-color-primary);
}
a:hover > .rmp-btn--outline-primary {
	background: rgba(0, 119, 221, 0.1);
}
a:active > .rmp-btn--outline-primary {
	background: rgba(0, 119, 221, 0.2);
}

/* =============================================================
   Header — rainbow stripe + desktop/mobile blocks. Both blocks always
   render; the @media rule at the bottom of this file is the ONLY thing
   that decides which is visible.
   ============================================================= */
.rmp-header {
	background: var(--rmp-color-surface);
	color: var(--rmp-color-foreground);
	border-bottom: 1px solid var(--rmp-color-border);
	position: relative;
	z-index: 2;
}

.rmp-header__stripe {
	display: flex;
	height: 3px;
}
.rmp-header__stripe-seg {
	flex: 1 1 0;
}
.rmp-header__stripe-seg--primary { background: var(--rmp-color-primary); }
.rmp-header__stripe-seg--accent { background: var(--rmp-color-accent); }
.rmp-header__stripe-seg--success { background: var(--rmp-color-success); }
.rmp-header__stripe-seg--danger { background: var(--rmp-color-danger); }

/* -- desktop -- */
.rmp-channel__desktop-header {
	display: block;
}

.rmp-header__status-bar {
	display: flex;
	align-items: center;
	justify-content: space-between;
	border-bottom: 1px solid var(--rmp-color-border-subtle);
	background: var(--rmp-color-surface-2);
	padding: 6px 22px;
}
.rmp-header__status-path {
	color: var(--rmp-color-faint);
	font-size: 10.5px;
	letter-spacing: 0.12em;
}
.rmp-header__status-playing {
	font-size: 10.5px;
	letter-spacing: 0.08em;
}
.rmp-header__status-playing-dot {
	color: var(--rmp-color-terminal);
}
.rmp-header__status-playing-sep {
	color: var(--rmp-color-faint);
	margin: 0 4px;
}
.rmp-header__status-playing-title {
	color: var(--rmp-color-foreground);
}
.rmp-header__status-cursor {
	margin-left: 5px;
	height: 11px;
	width: 6px;
	background: var(--rmp-color-terminal);
	vertical-align: -1px;
}

.rmp-header__row {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 24px;
	padding: 16px 22px;
}
.rmp-header__logo--desktop {
	height: 38px;
	width: auto;
	display: block;
}
.rmp-header__nav {
	display: flex;
	align-items: center;
	gap: 30px;
}
.rmp-nav-link {
	position: relative;
	display: inline-flex;
	align-items: center;
	gap: 8px;
	padding: 6px 0;
	font-size: 12.5px;
	letter-spacing: 0.14em;
	color: var(--rmp-color-muted);
	transition: color 0.15s ease;
}
.rmp-nav-link:hover,
.rmp-nav-link--active {
	color: var(--rmp-color-foreground);
}
.rmp-nav-link__caret {
	color: var(--rmp-color-accent);
	font-size: 11px;
	opacity: 0;
	transition: opacity 0.15s ease;
}
.rmp-nav-link:hover .rmp-nav-link__caret,
.rmp-nav-link--active .rmp-nav-link__caret {
	opacity: 1;
}

/* -- mobile -- */
.rmp-channel__mobile-header {
	display: none;
}
.rmp-header__status-bar--mobile {
	padding: 5px 14px;
}
.rmp-header__status-path--mobile {
	font-size: 9.5px;
	letter-spacing: 0.1em;
}
.rmp-header__row--mobile {
	padding: 12px 16px;
}
.rmp-header__logo--mobile {
	height: 30px;
	width: auto;
	display: block;
}
.rmp-hamburger {
	display: flex;
	flex-direction: column;
	gap: 4px;
	background: transparent;
	padding: 8px 9px;
	border: 1px solid var(--rmp-color-border);
	cursor: pointer;
}
.rmp-hamburger--open {
	border-color: var(--rmp-color-accent);
}
.rmp-hamburger__bar {
	display: block;
	height: 2px;
	width: 18px;
	background: var(--rmp-color-accent);
	transition: transform 180ms ease, opacity 180ms ease;
}
.rmp-hamburger--open .rmp-hamburger__bar--top {
	transform: rotate(45deg) translate(3px, 3px);
}
.rmp-hamburger--open .rmp-hamburger__bar--mid {
	opacity: 0;
}
.rmp-hamburger--open .rmp-hamburger__bar--bottom {
	transform: rotate(-45deg) translate(3px, -3px);
}

.rmp-mobile-menu {
	display: none;
	border-top: 1px solid var(--rmp-color-border-subtle);
}
.rmp-mobile-menu--open {
	display: block;
}
.rmp-mobile-menu__bar {
	display: flex;
	align-items: center;
	justify-content: space-between;
	background: linear-gradient(90deg, #0077dd, #e8821e);
	padding: 6px 14px;
}
.rmp-mobile-menu__bar-label {
	font-size: 10.5px;
	letter-spacing: 0.12em;
	color: #fff;
}
.rmp-mobile-menu__close {
	font-size: 10.5px;
	color: #fff;
	cursor: pointer;
}
.rmp-mobile-menu__body {
	background: var(--rmp-color-surface);
	padding: 6px 0;
}
.rmp-mobile-nav-row {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 10px;
	padding: 13px 16px;
	transition: background-color 0.15s ease;
}
.rmp-mobile-nav-row:hover {
	background: rgba(255, 255, 255, 0.05);
}
.rmp-mobile-nav-row__caret {
	color: var(--rmp-color-accent);
	font-size: 12px;
	opacity: 0;
}
.rmp-mobile-nav-row__caret--active {
	opacity: 1;
}
.rmp-mobile-nav-row__label {
	font-family: var(--rmp-font-vt323);
	font-size: 22px;
	line-height: 1;
	color: var(--rmp-color-muted);
}
.rmp-mobile-nav-row__label--active {
	color: var(--rmp-color-foreground);
}
.rmp-mobile-menu__cta {
	padding: 8px 16px 14px;
}
.rmp-mobile-menu__terminal {
	border-top: 1px solid var(--rmp-color-border-subtle);
	background: var(--rmp-color-surface-2);
	padding: 9px 16px;
}
.rmp-mobile-menu__terminal-text {
	color: var(--rmp-color-terminal);
	font-size: 10.5px;
}
.rmp-mobile-menu__terminal-cursor {
	margin-left: 5px;
	height: 13px;
	width: 7px;
	background: var(--rmp-color-terminal);
	vertical-align: -2px;
}

/* =============================================================
   Footer
   ============================================================= */
.rmp-footer {
	background: var(--rmp-color-surface);
	color: var(--rmp-color-foreground);
	border-top: 1px solid var(--rmp-color-border);
}
.rmp-footer__top {
	max-width: 1180px;
	margin: 0 auto;
	padding: 36px 22px 26px;
	display: flex;
	flex-wrap: wrap;
	justify-content: space-between;
	gap: 40px;
}
.rmp-footer__brand {
	min-width: 260px;
	max-width: 360px;
	flex: 1 1 auto;
}
.rmp-footer__logo {
	height: 46px;
	width: auto;
	display: block;
	margin-bottom: 16px;
}
.rmp-footer__tagline {
	color: var(--rmp-color-muted);
	font-size: 12.5px;
	line-height: 1.65;
	margin: 0 0 14px;
}
.rmp-footer__socials {
	display: flex;
	gap: 8px;
}
.rmp-soc {
	display: flex;
	align-items: center;
	justify-content: center;
	height: 38px;
	width: 38px;
	border: 1px solid var(--rmp-color-border);
	color: var(--rmp-color-muted);
	transition: border-color 0.15s ease, color 0.15s ease;
}
.rmp-soc:hover,
.rmp-soc:focus-visible {
	border-color: var(--rmp-color-accent);
	color: var(--rmp-color-accent);
}
.rmp-soc__icon {
	display: block;
}

.rmp-footer__columns {
	display: flex;
	flex-wrap: wrap;
	gap: 52px;
}
.rmp-footer__column {
	min-width: 120px;
}
.rmp-footer__column-title {
	color: var(--rmp-color-accent);
	font-size: 11px;
	letter-spacing: 0.16em;
	margin-bottom: 14px;
}
.rmp-footer__column-links {
	display: flex;
	flex-direction: column;
	gap: 11px;
}
.rmp-link {
	color: var(--rmp-color-muted);
	font-size: 12.5px;
	transition: color 0.15s ease;
}
.rmp-link:hover,
.rmp-link:focus-visible {
	color: var(--rmp-color-foreground);
}

.rmp-footer__strip {
	background: var(--rmp-color-surface-2);
	border-top: 1px solid var(--rmp-color-border);
}
.rmp-footer__strip-inner {
	max-width: 1180px;
	margin: 0 auto;
	padding: 13px 22px;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
}
.rmp-footer__strip-build {
	font-size: 11px;
}
.rmp-footer__strip-build-cmd {
	color: var(--rmp-color-terminal);
}
.rmp-footer__strip-build-meta {
	color: var(--rmp-color-faint);
	margin-left: 4px;
}
.rmp-footer__strip-note {
	color: var(--rmp-color-faint);
	font-size: 11px;
}
.rmp-footer__strip-copy {
	color: var(--rmp-color-muted);
	font-size: 11px;
}

/* =============================================================
   /gram page — the pixel-perfect acceptance benchmark
   (site-public-spec.md §PAGE2). Literal px/tracking/color values
   transcribed from GramPage.tsx; `[hidden]` is forced above any
   display:flex/grid utility below it, since author rules would otherwise
   beat the UA `[hidden]` rule regardless of selector specificity.
   ============================================================= */
.rmp-channel [hidden] {
	display: none !important;
}

.rmp-page-eyebrow {
	color: var(--rmp-color-accent);
	font-size: 11px;
	letter-spacing: 0.18em;
}

.rmp-page-head {
	margin-top: 8px;
	margin-bottom: 4px;
	display: flex;
	flex-wrap: wrap;
	align-items: flex-end;
	justify-content: space-between;
	gap: 24px;
}
.rmp-page-h1 {
	font-family: var(--rmp-font-vt323);
	color: var(--rmp-color-foreground);
	margin: 0;
	font-size: 54px;
	line-height: 0.9;
}
.rmp-page-stats {
	display: flex;
	gap: 22px;
	padding-bottom: 6px;
}
.rmp-stat__value {
	font-family: var(--rmp-font-vt323);
	color: var(--rmp-color-foreground);
	font-size: 30px;
	line-height: 1;
}
.rmp-stat--terminal .rmp-stat__value {
	color: var(--rmp-color-terminal);
}
.rmp-stat__label {
	color: var(--rmp-color-faint);
	font-size: 10px;
	letter-spacing: 0.12em;
}
.rmp-page-intro {
	color: var(--rmp-color-muted);
	margin: 6px 0 0;
	max-width: 560px;
	font-size: 13px;
	line-height: 1.6;
}

/* /gry ma grid (albo empty state) bezpośrednio po intro — każda inna strona
   wstawia między nie pasek filtrów, który daje odstęp. Adjacency wyrównuje. */
.rmp-page-intro + .rmp-grid,
.rmp-page-intro + .rmp-empty {
	margin-top: 28px;
}

.rmp-filter-bar,
.rmp-sort-bar {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 12px;
}
.rmp-filter-bar {
	margin: 32px 0 18px;
}
/* /przeszedlem's own PLATFORMA row sits directly above a SORTUJ row (its
   own margin-top:0), so it needs a tighter bottom gap than /gram's
   single filter row — PrzeszedlemPage.tsx's `mb-[12px]` vs GramPage.tsx's
   `mb-[18px]`. */
.rmp-filter-bar--compact {
	margin-bottom: 12px;
}
.rmp-sort-bar {
	margin: 0 0 18px;
}
.rmp-filter-label {
	color: var(--rmp-color-faint);
	font-size: 11px;
	letter-spacing: 0.14em;
}
.rmp-filter-chips {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
}
.rmp-filter {
	font-family: var(--rmp-font-jetbrains);
	padding: 7px 13px;
	font-size: 11px;
	letter-spacing: 0.1em;
	border: 1px solid var(--rmp-color-border);
	background: transparent;
	color: var(--rmp-color-muted);
	cursor: pointer;
	transition: border-color 0.15s ease, color 0.15s ease, background-color 0.15s ease;
}
.rmp-filter:hover {
	border-color: var(--rmp-color-accent);
	color: var(--rmp-color-foreground);
}
.rmp-filter--active,
.rmp-filter--active:hover {
	border-color: var(--rmp-color-accent);
	background: var(--rmp-color-accent);
	color: #0a1020;
}
/* /przeszedlem's SORTUJ chips use the PRIMARY blue, not the accent orange
   FILTER chips share with PLATFORMA/TYP — PrzeszedlemPage.tsx's own
   `border-primary bg-primary text-white` active class. */
.rmp-filter--active-primary,
.rmp-filter--active-primary:hover {
	border-color: var(--rmp-color-primary);
	background: var(--rmp-color-primary);
	color: #fff;
}

.rmp-grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(min(340px, 100%), 1fr));
	gap: 18px;
}

.rmp-empty {
	border: 1px dashed var(--rmp-color-border);
	background: var(--rmp-color-surface-2);
	padding: 48px 24px;
	text-align: center;
}
.rmp-empty__title {
	font-family: var(--rmp-font-vt323);
	color: var(--rmp-color-muted);
	margin-bottom: 8px;
	font-size: 30px;
	line-height: 1;
}
.rmp-empty__text {
	color: var(--rmp-color-faint);
	margin: 0;
	font-size: 12.5px;
}

.rmp-card {
	display: flex;
	flex-direction: column;
	border: 1px solid var(--rmp-color-border);
	background: var(--rmp-color-surface-2);
}
.rmp-card__head {
	display: flex;
	gap: 14px;
	padding: 15px 15px 13px;
}
.rmp-card__cover {
	position: relative;
	aspect-ratio: 3 / 4;
	width: 58px;
	flex-shrink: 0;
	overflow: hidden;
	border: 1px solid var(--rmp-color-border-subtle);
}
.rmp-card__cover-img {
	position: absolute;
	inset: 0;
	height: 100%;
	width: 100%;
	object-fit: cover;
	display: block;
}
.rmp-card__cover-fx {
	position: absolute;
	inset: 0;
	background: repeating-linear-gradient(0deg, rgba(0, 0, 0, 0.20) 0 1px, transparent 1px 3px);
}
.rmp-card__body {
	display: flex;
	min-width: 0;
	flex: 1 1 auto;
	flex-direction: column;
	gap: 9px;
}
.rmp-card__title {
	font-family: var(--rmp-font-vt323);
	color: var(--rmp-color-foreground);
	font-size: 22px;
	line-height: 1.5;
	overflow-wrap: anywhere;
}
.rmp-card__meta {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 8px;
}
.rmp-chip {
	padding: 3px 8px;
	font-size: 9.5px;
	letter-spacing: 0.06em;
}
.rmp-status-pip {
	color: var(--rmp-color-terminal);
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font-size: 9.5px;
	letter-spacing: 0.1em;
}
.rmp-status-pip__dot {
	display: inline-block;
	height: 6px;
	width: 6px;
	background: var(--rmp-color-terminal);
}
.rmp-card__setup {
	color: var(--rmp-color-muted);
	font-size: 11px;
	line-height: 1.4;
}

.rmp-card__section {
	margin-top: 2px;
	border-top: 1px solid var(--rmp-color-border-subtle);
	padding: 13px 15px 15px;
}
.rmp-section-label {
	color: var(--rmp-color-faint);
	margin-bottom: 9px;
	font-size: 10px;
	letter-spacing: 0.12em;
}
.rmp-materials-empty {
	color: var(--rmp-color-faint);
	font-size: 10.5px;
	letter-spacing: 0.1em;
}
.rmp-video-row {
	display: flex;
	gap: 9px;
}

.rmp-video-tile {
	position: relative;
	display: block;
	min-width: 0;
	flex: 1 1 0%;
	max-width: 200px;
	aspect-ratio: 16 / 9;
	overflow: hidden;
	border: 1px solid var(--rmp-color-border-subtle);
}
a.rmp-video-tile {
	text-decoration: none;
}
.rmp-video-tile__frame {
	position: absolute;
	inset: 0;
	height: 100%;
	width: 100%;
	border: 0;
}
.rmp-video-tile__thumb {
	position: absolute;
	inset: 0;
	height: 100%;
	width: 100%;
	object-fit: cover;
	display: block;
}
.rmp-video-tile__fx {
	position: absolute;
	inset: 0;
	background: repeating-linear-gradient(0deg, rgba(0, 0, 0, 0.22) 0 1px, transparent 1px 3px);
}
.rmp-video-tile__badge {
	position: absolute;
	left: 7px;
	top: 7px;
	padding: 2px 6px;
	font-family: var(--rmp-font-jetbrains);
	font-size: 8.5px;
	letter-spacing: 0.08em;
	color: #fff;
	background: rgba(10, 16, 32, 0.78);
}
.rmp-play {
	position: absolute;
	left: 50%;
	top: 50%;
	display: flex;
	height: 34px;
	width: 34px;
	transform: translate(-50%, -50%);
	align-items: center;
	justify-content: center;
	background: var(--rmp-color-danger);
	transition: transform 140ms ease;
}
.rmp-play__icon {
	margin-left: 2px;
	font-size: 13px;
	color: #fff;
}
.rmp-video-tile--link:hover .rmp-play {
	transform: translate(-50%, -50%) scale(1.08);
}

.rmp-chip-row {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
}

/* =============================================================
   /przeszedlem — DoneCard (site-public-spec.md §PAGE4). Reuses .rmp-card,
   .rmp-card__head, .rmp-card__cover(-img/-fx), .rmp-card__body, .rmp-card__meta,
   .rmp-card__setup, .rmp-card__section/.rmp-section-label, .rmp-video-row/
   .rmp-materials-empty, .rmp-chip(-row) unchanged from /gram's GameCard —
   only the elements DoneCard adds of its own get new classes below.
   ============================================================= */
.rmp-card__cover-check {
	position: absolute;
	right: 3px;
	top: 3px;
	font-size: 13px;
	line-height: 1;
	color: var(--rmp-color-terminal);
}
.rmp-card__title-row {
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
	gap: 10px;
}
.rmp-card__score {
	font-family: var(--rmp-font-vt323);
	flex-shrink: 0;
	font-size: 26px;
	line-height: 1;
}
.rmp-card__score--terminal { color: var(--rmp-color-terminal); }
.rmp-card__score--accent { color: var(--rmp-color-accent); }
.rmp-card__score--muted { color: var(--rmp-color-muted); }

.rmp-meta-text {
	color: var(--rmp-color-faint);
	font-size: 10px;
	letter-spacing: 0.08em;
}

.rmp-verdict-block {
	padding: 0 15px 13px;
}
.rmp-verdict {
	color: var(--rmp-color-foreground);
	margin: 0;
	padding-left: 11px;
	font-size: 12.5px;
	font-style: italic;
	line-height: 1.6;
}

/* =============================================================
   /platformy — PlatformCard (site-public-spec.md §PAGE3). Reuses .rmp-card,
   .rmp-card__cover-fx, .rmp-card__meta, .rmp-chip, .rmp-chip-row, and the
   shared .rmp-led blink keyframe (declared in the scanline/blink block
   above) — the machine glyph + right-column layout differ from GameCard's
   own pixel values, so those get their own classes. .rmp-machine__img (the
   optional featured-image overlay, absolute inset-0 atop .rmp-machine) is the
   .rmp-card__cover-img twin for the machine tile.
   ============================================================= */
.rmp-platform-card__head {
	display: flex;
	gap: 16px;
	padding: 16px 16px 14px;
}
.rmp-machine {
	position: relative;
	display: flex;
	align-items: flex-end;
	justify-content: center;
	height: 64px;
	width: 72px;
	flex-shrink: 0;
	overflow: hidden;
	border: 1px solid var(--rmp-color-border-subtle);
	padding-bottom: 10px;
}
.rmp-machine__img {
	position: absolute;
	inset: 0;
	height: 100%;
	width: 100%;
	object-fit: cover;
	display: block;
}
.rmp-machine__led {
	position: absolute;
	top: 8px;
	left: 8px;
	height: 7px;
	width: 7px;
}
.rmp-machine__glyph {
	display: flex;
	align-items: flex-end;
	gap: 3px;
}
.rmp-machine__glyph-a {
	display: block;
	height: 18px;
	width: 30px;
	background: rgba(255, 255, 255, 0.14);
}
.rmp-machine__glyph-b {
	display: block;
	height: 26px;
	width: 8px;
	background: rgba(255, 255, 255, 0.1);
}

.rmp-platform-card__body {
	display: flex;
	min-width: 0;
	flex: 1 1 auto;
	flex-direction: column;
	gap: 8px;
}
.rmp-platform-card__title {
	font-family: var(--rmp-font-vt323);
	color: var(--rmp-color-foreground);
	font-size: 24px;
	line-height: 1.05;
	overflow-wrap: anywhere;
}
.rmp-platform-card__year-type {
	color: var(--rmp-color-faint);
	font-size: 9.5px;
	letter-spacing: 0.08em;
}

.rmp-status-line {
	margin-top: 1px;
	display: flex;
	align-items: center;
	gap: 7px;
}
.rmp-status-dot {
	display: inline-block;
	height: 6px;
	width: 6px;
}
.rmp-status-dot--terminal { background: var(--rmp-color-terminal); }
.rmp-status-dot--accent { background: var(--rmp-color-accent); }
.rmp-status-dot--muted { background: var(--rmp-color-muted); }
.rmp-status-label {
	font-size: 9.5px;
	letter-spacing: 0.1em;
}
.rmp-status-label--terminal { color: var(--rmp-color-terminal); }
.rmp-status-label--accent { color: var(--rmp-color-accent); }
.rmp-status-label--muted { color: var(--rmp-color-muted); }

.rmp-platform-card__block {
	padding: 0 16px 14px;
}
.rmp-rig-text {
	color: var(--rmp-color-muted);
	margin: 0;
	padding-left: 11px;
	font-size: 12px;
	line-height: 1.55;
}
.rmp-platform-card__mods-label {
	color: var(--rmp-color-faint);
	margin-bottom: 8px;
	font-size: 10px;
	letter-spacing: 0.12em;
}
.rmp-platform-card__mods-chips {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
}
.rmp-mod-chip {
	color: var(--rmp-color-muted);
	border: 1px solid var(--rmp-color-border-subtle);
	background: var(--rmp-color-surface-3);
	padding: 3px 8px;
	font-size: 10px;
	letter-spacing: 0.03em;
}

.rmp-platform-card__stats {
	margin-top: auto;
	display: flex;
	border-top: 1px solid var(--rmp-color-border-subtle);
}
.rmp-platform-card__stat {
	flex: 1 1 0%;
	border-right: 1px solid var(--rmp-color-border-subtle);
	padding: 11px 14px;
	text-align: center;
}
.rmp-platform-card__stat--last {
	border-right: none;
}
.rmp-platform-card__stat-value {
	font-family: var(--rmp-font-vt323);
	color: var(--rmp-color-foreground);
	font-size: 22px;
	line-height: 1;
}
.rmp-platform-card__stat-value--terminal { color: var(--rmp-color-terminal); }
.rmp-platform-card__stat-value--accent { color: var(--rmp-color-accent); }
.rmp-platform-card__stat-label {
	color: var(--rmp-color-faint);
	margin-top: 3px;
	font-size: 8.5px;
	letter-spacing: 0.1em;
}

/* =============================================================
   /start — the ActivityPage (site-public-spec.md §PAGE1). Literal px/color/
   tracking values transcribed from ActivityPage.tsx's inline styles. The hero
   reuses .rmp-page-eyebrow / .rmp-page-head / .rmp-page-h1 / .rmp-stat(*) from
   the /gram block above (identical values); only the hero's wider 34px stat
   gap + 600px intro get their own rules.
   ============================================================= */
.rmp-page-stats--hero {
	gap: 34px;
}
.rmp-hero-intro {
	color: var(--rmp-color-muted);
	margin: 6px 0 0;
	max-width: 600px;
	font-size: 13px;
	line-height: 1.6;
}

/* -- contributions layout: panel + year rail -- */
.rmp-contrib {
	display: flex;
	gap: 18px;
	align-items: flex-start;
	flex-wrap: wrap;
	margin-top: 30px;
}
.rmp-contrib__panel {
	flex: 1 1 0;
	min-width: 320px;
}
.rmp-amiga-panel {
	border: 1px solid var(--rmp-color-border-blue);
	background: var(--rmp-color-surface-2);
	box-shadow: 5px 5px 0 rgba(0, 0, 0, 0.35);
}
.rmp-amiga-header {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 14px;
	padding: 8px 14px;
	background: linear-gradient(90deg, #0077dd, #e8821e);
}
.rmp-amiga-header__title {
	font-family: var(--rmp-font-jetbrains);
	font-size: 11px;
	letter-spacing: 0.08em;
	color: #fff;
}
.rmp-amiga-header__sub {
	font-family: var(--rmp-font-jetbrains);
	font-size: 10px;
	letter-spacing: 0.1em;
	color: rgba(255, 255, 255, 0.85);
}
.rmp-contrib__count {
	padding: 16px 18px 4px;
}
.rmp-contrib__count-value {
	font-family: var(--rmp-font-vt323);
	color: var(--rmp-color-foreground);
	font-size: 26px;
	line-height: 1;
}

/* -- heatmap grid -- */
.rmp-heatmap__scroll {
	padding: 14px 18px 6px;
	overflow-x: auto;
}
.rmp-heatmap__inner {
	display: inline-block;
	min-width: max-content;
}
.rmp-heatmap__months {
	display: flex;
	gap: 3px;
	margin-left: 34px;
	margin-bottom: 5px;
}
.rmp-heatmap__month {
	position: relative;
	width: 13px;
	height: 12px;
	flex-shrink: 0;
}
.rmp-heatmap__month-label {
	position: absolute;
	left: 0;
	bottom: 0;
	white-space: nowrap;
	color: var(--rmp-color-faint);
	font-size: 10px;
	letter-spacing: 0.04em;
}
.rmp-heatmap__grid {
	display: flex;
}
.rmp-heatmap__days {
	display: flex;
	flex-direction: column;
	gap: 3px;
	width: 28px;
	margin-right: 6px;
	flex-shrink: 0;
}
.rmp-heatmap__day-label {
	height: 13px;
	display: flex;
	align-items: center;
	justify-content: flex-end;
	color: var(--rmp-color-faint);
	font-size: 9.5px;
	line-height: 1;
}
.rmp-heatmap__weeks {
	display: flex;
	gap: 3px;
}
.rmp-heatmap__week {
	display: flex;
	flex-direction: column;
	gap: 3px;
}
.rmp-cell {
	width: 13px;
	height: 13px;
	flex-shrink: 0;
	border: 1px solid transparent;
}
.rmp-cell--l0 {
	background: rgba(255, 255, 255, 0.05);
}
.rmp-cell--l1 {
	background: #3d2606;
	border-color: rgba(0, 0, 0, 0.30);
}
.rmp-cell--l2 {
	background: #8a4f0f;
	border-color: rgba(0, 0, 0, 0.30);
}
.rmp-cell--l3 {
	background: #cc7a16;
	border-color: rgba(0, 0, 0, 0.30);
}
.rmp-cell--l4 {
	background: #f5a623;
	border-color: rgba(0, 0, 0, 0.30);
}
.rmp-cell--future {
	background: rgba(255, 255, 255, 0.02);
}

/* -- heatmap legend -- */
.rmp-heatmap-legend {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 14px;
	padding: 6px 18px 16px;
	flex-wrap: wrap;
}
.rmp-heatmap-legend__text {
	color: var(--rmp-color-faint);
	font-size: 11px;
	letter-spacing: 0.04em;
}
.rmp-heatmap-legend__scale {
	display: flex;
	align-items: center;
	gap: 6px;
}
.rmp-heatmap-legend__word {
	color: var(--rmp-color-faint);
	font-size: 10.5px;
	letter-spacing: 0.06em;
}
.rmp-heatmap-legend__swatch {
	width: 12px;
	height: 12px;
	border: 1px solid rgba(0, 0, 0, 0.30);
}
.rmp-heatmap-legend__swatch--0 { background: rgba(255, 255, 255, 0.05); }
.rmp-heatmap-legend__swatch--1 { background: #3d2606; }
.rmp-heatmap-legend__swatch--2 { background: #8a4f0f; }
.rmp-heatmap-legend__swatch--3 { background: #cc7a16; }
.rmp-heatmap-legend__swatch--4 { background: #f5a623; }

/* -- heatmap tooltip (fixed, JS-positioned above the hovered cell) -- */
.rmp-heatmap-tooltip {
	position: fixed;
	z-index: 300;
	pointer-events: none;
	transform: translate(-50%, calc(-100% - 9px));
}
.rmp-heatmap-tooltip__inner {
	font-family: var(--rmp-font-jetbrains);
	font-size: 10.5px;
	line-height: 1;
	white-space: nowrap;
	color: var(--rmp-color-foreground);
	background: #0a1020;
	border: 1px solid var(--rmp-color-border-blue);
	padding: 5px 9px;
	box-shadow: 3px 3px 0 rgba(0, 0, 0, 0.45);
}

/* -- overview strip: top games + streak tiles + radar -- */
.rmp-overview {
	border-top: 1px solid var(--rmp-color-border);
	display: flex;
	flex-wrap: wrap;
}
.rmp-overview__left {
	flex: 1 1 0;
	min-width: 280px;
	padding: 18px;
	border-right: 1px solid var(--rmp-color-border-subtle);
}
.rmp-overview__right {
	flex: 1 1 0;
	min-width: 280px;
	padding: 18px 18px 8px;
	display: flex;
	flex-direction: column;
}
.rmp-overview__label {
	color: var(--rmp-color-accent);
	font-size: 11px;
	letter-spacing: 0.14em;
	margin-bottom: 14px;
}
.rmp-overview__label--radar {
	margin-bottom: 4px;
}
.rmp-overview__intro {
	color: var(--rmp-color-muted);
	margin: 0 0 18px;
	font-size: 13px;
	line-height: 1.7;
}
.rmp-glink {
	color: var(--rmp-color-primary);
	text-decoration: none;
	transition: color 0.15s ease;
}
.rmp-glink:hover,
.rmp-glink:focus-visible {
	color: var(--rmp-color-primary-bright);
}
.rmp-streak-tiles {
	display: flex;
	gap: 10px;
	flex-wrap: wrap;
}
.rmp-streak-tile {
	flex: 1 1 0;
	min-width: 96px;
	border: 1px solid var(--rmp-color-border-subtle);
	background: var(--rmp-color-surface-3);
	padding: 11px 12px;
}
.rmp-streak-tile__value {
	font-family: var(--rmp-font-vt323);
	font-size: 26px;
	line-height: 1;
}
.rmp-streak-tile__value--accent { color: var(--rmp-color-accent); }
.rmp-streak-tile__value--foreground { color: var(--rmp-color-foreground); }
.rmp-streak-tile__label {
	color: var(--rmp-color-faint);
	font-size: 9.5px;
	letter-spacing: 0.08em;
	margin-top: 4px;
}
.rmp-overview__radar {
	flex: 1 1 auto;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 6px 18px 0;
}
.rmp-overview__pusto {
	color: var(--rmp-color-faint);
	font-size: 12px;
}

/* -- platform radar SVG (fills/strokes here; coords are per-element attrs) -- */
.rmp-radar {
	width: 100%;
	max-width: 300px;
	height: auto;
	overflow: visible;
}
.rmp-radar__ring {
	fill: none;
	stroke: rgba(255, 255, 255, 0.10);
	stroke-width: 1;
}
.rmp-radar__axis {
	stroke: rgba(255, 255, 255, 0.10);
	stroke-width: 1;
}
.rmp-radar__data {
	fill: #f5a62333;
	stroke: #f5a623;
	stroke-width: 2;
	stroke-linejoin: round;
}
.rmp-radar__dot {
	fill: #f5a623;
}
.rmp-radar__label {
	font-family: var(--rmp-font-jetbrains);
	font-size: 10px;
	fill: var(--rmp-color-foreground);
}
.rmp-radar__pct {
	font-family: var(--rmp-font-jetbrains);
	font-size: 9px;
	fill: var(--rmp-color-faint);
}

/* -- year rail -- */
.rmp-year-rail {
	width: 88px;
	flex-shrink: 0;
	display: flex;
	flex-direction: column;
	gap: 6px;
}
.rmp-year {
	font-family: var(--rmp-font-jetbrains);
	font-size: 13px;
	letter-spacing: 0.04em;
	text-align: left;
	padding: 8px 13px;
	cursor: pointer;
	border: 1px solid var(--rmp-color-border);
	background: transparent;
	color: var(--rmp-color-muted);
	transition: border-color 0.15s ease, color 0.15s ease, background-color 0.15s ease;
}
.rmp-year:hover {
	border-color: var(--rmp-color-primary);
	color: var(--rmp-color-foreground);
}
.rmp-year--active,
.rmp-year--active:hover {
	border-color: var(--rmp-color-primary);
	background: var(--rmp-color-primary);
	color: #fff;
}

/* -- O KANALE header -- */
.rmp-about {
	margin-top: 56px;
}
.rmp-about__eyebrow-row {
	display: flex;
	align-items: center;
	gap: 14px;
}
.rmp-about__eyebrow {
	color: var(--rmp-color-accent);
	font-size: 11px;
	letter-spacing: 0.18em;
	white-space: nowrap;
}
.rmp-about__rule {
	flex: 1 1 auto;
	height: 1px;
	background: var(--rmp-color-border);
}
.rmp-about__h2 {
	font-family: var(--rmp-font-vt323);
	color: var(--rmp-color-foreground);
	margin: 10px 0 0;
	font-size: 42px;
	line-height: 0.92;
}
.rmp-about__sub {
	color: var(--rmp-color-muted);
	margin: 8px 0 0;
	max-width: 560px;
	font-size: 13px;
	line-height: 1.6;
}

/* -- KIM JESTEM panel -- */
.rmp-bio {
	margin-top: 24px;
}
.rmp-bio__body {
	display: flex;
	gap: 24px;
	flex-wrap: wrap;
	padding: 22px;
}
.rmp-bio__left {
	width: 154px;
	flex-shrink: 0;
}
.rmp-bio__avatar {
	position: relative;
	aspect-ratio: 1 / 1;
	background: linear-gradient(155deg, rgba(0, 119, 221, 0.32), #0a1020 72%);
	border: 1px solid var(--rmp-color-border-subtle);
	overflow: hidden;
	display: flex;
	align-items: center;
	justify-content: center;
}
.rmp-bio__avatar-fx {
	position: absolute;
	inset: 0;
	background: repeating-linear-gradient(0deg, rgba(0, 0, 0, 0.22) 0 1px, transparent 1px 3px);
}
.rmp-bio__avatar-mark {
	font-family: var(--rmp-font-vt323);
	font-size: 70px;
	line-height: 1;
	color: rgba(255, 255, 255, 0.85);
}
.rmp-bio__avatar-img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}
.rmp-bio__rec {
	position: absolute;
	top: 9px;
	left: 9px;
	display: flex;
	align-items: center;
	gap: 6px;
}
.rmp-bio__rec-dot {
	width: 7px;
	height: 7px;
	display: block;
	background: var(--rmp-color-danger);
}
.rmp-bio__rec-text {
	font-size: 8.5px;
	letter-spacing: 0.12em;
	color: #fff;
}
.rmp-bio__tags {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
	margin-top: 11px;
}
.rmp-bio__tag {
	color: var(--rmp-color-muted);
	font-size: 9.5px;
	letter-spacing: 0.04em;
	padding: 4px 8px;
	border: 1px solid var(--rmp-color-border-subtle);
	background: var(--rmp-color-surface-3);
}
.rmp-bio__right {
	flex: 1 1 0;
	min-width: 250px;
}
.rmp-bio__p {
	color: var(--rmp-color-muted);
	font-size: 13.5px;
	line-height: 1.75;
	margin: 0;
}
.rmp-bio__p + .rmp-bio__p {
	margin-top: 14px;
}

/* -- SPRZĘT I METODA + KONTAKT panels -- */
.rmp-panels {
	display: flex;
	gap: 18px;
	flex-wrap: wrap;
	margin-top: 18px;
	align-items: stretch;
}
.rmp-panel-col {
	flex: 1 1 340px;
	min-width: 300px;
	display: flex;
	flex-direction: column;
}
.rmp-panel-col__body {
	padding: 20px;
	display: flex;
	flex-direction: column;
	flex: 1;
}
.rmp-panel-col__body--rig { gap: 14px; }
.rmp-panel-col__body--contact { gap: 16px; }
.rmp-panel__p {
	color: var(--rmp-color-muted);
	margin: 0;
	font-size: 13px;
	line-height: 1.7;
}
.rmp-terminal-box {
	background: var(--rmp-color-surface-3);
	border: 1px solid var(--rmp-color-border-subtle);
	padding: 9px 12px;
}
.rmp-terminal-box__cmd {
	color: var(--rmp-color-terminal);
	font-size: 11px;
}
.rmp-terminal-box__out {
	color: var(--rmp-color-faint);
	font-size: 11px;
}
.rmp-rig-stats {
	display: flex;
	align-items: center;
	gap: 22px;
	margin-top: 2px;
}
.rmp-rig-stat__value {
	font-family: var(--rmp-font-vt323);
	font-size: 26px;
	line-height: 1;
	color: var(--rmp-color-foreground);
}
.rmp-rig-stat__value--terminal {
	color: var(--rmp-color-terminal);
}
.rmp-rig-stat__label {
	color: var(--rmp-color-faint);
	font-size: 9px;
	letter-spacing: 0.1em;
	margin-top: 3px;
}
.rmp-panel__note {
	color: var(--rmp-color-faint);
	margin: 0;
	font-size: 11.5px;
	line-height: 1.5;
}
.rmp-panel__cta {
	margin-top: auto;
	padding-top: 4px;
}
a.rmp-cta-link {
	text-decoration: none;
}
.rmp-contact-block__label {
	color: var(--rmp-color-faint);
	font-size: 9.5px;
	letter-spacing: 0.14em;
	margin-bottom: 7px;
}
a.rmp-mail {
	color: var(--rmp-color-terminal);
	font-size: 14px;
	letter-spacing: 0.02em;
	text-decoration: none;
	word-break: break-all;
	transition: color 0.15s ease;
}
a.rmp-mail:hover,
a.rmp-mail:focus-visible {
	color: #fff;
}
.rmp-contact-socials {
	margin-top: auto;
}
.rmp-contact-socials__label {
	color: var(--rmp-color-faint);
	font-size: 9.5px;
	letter-spacing: 0.14em;
	margin-bottom: 9px;
}
.rmp-contact-socials__row {
	display: flex;
	gap: 8px;
	flex-wrap: wrap;
}
.rmp-soc--lg {
	height: 40px;
	width: 40px;
}

/* =============================================================
   /gry — CatalogCard (rmp_channel_render_catalog_card(), includes/
   channel-render.php). No site-public-spec.md page backs this one — /gry is
   plugin-native, added after the pixel-perfect ports above — so this is a
   hand-authored ruleset rather than a transcription, matching the sibling
   cards' own tokens/border/spacing language. The card is deliberately a
   LIGHTER shape than GameCard/DoneCard/PlatformCard (no section — see the
   render function's own docblock), so it does not reuse `.rmp-card` itself;
   it DOES reuse `.rmp-card__meta`, `.rmp-chip` and `.rmp-status-pip(-dot)`
   unchanged. The whole card is an `<a>` (not a `<div>` like its siblings), so
   it needs its own link reset + hover accent. `.rmp-catalog-card__cover(-img)`
   is the same optional featured-image overlay as `.rmp-card__cover(-img)` /
   `.rmp-machine__img` — rendered only when the row's `cover` is non-empty, so
   the card is a flex ROW (cover left, text right) with the title/meta stacked
   in `.rmp-catalog-card__body`; with no cover, `__body` is the sole flex item
   and the card reads exactly as it did before this element existed.
   ============================================================= */
a.rmp-catalog-card {
	display: flex;
	flex-direction: row;
	gap: 12px;
	border: 1px solid var(--rmp-color-border);
	background: var(--rmp-color-surface-2);
	padding: 15px;
	text-decoration: none;
	transition: border-color 0.15s ease;
}
a.rmp-catalog-card:hover,
a.rmp-catalog-card:focus-visible {
	border-color: var(--rmp-color-accent);
}
.rmp-catalog-card__cover {
	position: relative;
	aspect-ratio: 3 / 4;
	width: 72px;
	flex-shrink: 0;
	overflow: hidden;
	border: 1px solid var(--rmp-color-border-subtle);
}
.rmp-catalog-card__cover-img {
	height: 100%;
	width: 100%;
	object-fit: cover;
	display: block;
}
.rmp-catalog-card__body {
	display: flex;
	min-width: 0;
	flex: 1 1 auto;
	flex-direction: column;
	gap: 9px;
}
.rmp-catalog-card__title {
	font-family: var(--rmp-font-vt323);
	color: var(--rmp-color-foreground);
	font-size: 22px;
	line-height: 1.5;
	overflow-wrap: anywhere;
}

/* /gry's status pip is the one place `.rmp-status-pip` carries a modifier:
   the catalogue is a flat list across EVERY status (backlog/playing/
   completed — rmp_channel_is_game_status()'s whitelist, channel-logic.php),
   unlike /gram's GameCard where every card is "W TRAKCIE" and a bare pip +
   static label suffices. Colour alone carries the meaning here (no English
   status copy, per the render function's own docblock), so each modifier
   restyles both the text colour and the dot — `.rmp-status-pip__dot` hardcodes
   its own background rather than `currentColor`, so the dot needs its own
   override alongside the text colour. */
.rmp-status-pip--playing {
	color: var(--rmp-color-terminal);
}
.rmp-status-pip--playing .rmp-status-pip__dot {
	background: var(--rmp-color-terminal);
}
.rmp-status-pip--completed {
	color: var(--rmp-color-primary);
}
.rmp-status-pip--completed .rmp-status-pip__dot {
	background: var(--rmp-color-primary);
}
.rmp-status-pip--backlog {
	color: var(--rmp-color-muted);
}
.rmp-status-pip--backlog .rmp-status-pip__dot {
	background: var(--rmp-color-muted);
}

/* =============================================================
   Responsive — the ONE thing deciding desktop vs mobile header visibility.
   ============================================================= */
@media (max-width: 820px) {
	.rmp-channel__desktop-header {
		display: none;
	}
	.rmp-channel__mobile-header {
		display: block;
	}
}
