/*
 * ReportScan theme — full design system, v1.2 (dark default + light mode).
 *
 * v1.3: breadcrumb trail above every hero/head (CONTRACTS §30).
 * v1.2: wrapping report nav (no horizontal scroll), always-single-column
 * identity grid, country flags + infra icons, narrative / partner / related
 * report sections, /reports/ archive head + pagination, home covers +
 * mission sections. Score-history (sparkline) and hero badge-strip styles
 * removed with their templates.
 *
 * MOBILE-FIRST: base styles target a 375px viewport (single column, native
 * horizontal scroll for wide data); enhancements at (min-width: 640px) and
 * (min-width: 960px).
 *
 * Flat rules (binding): solid fills + 1px borders only. No gradient washes,
 * no box-shadows, no transforms, no keyframe animations. Hover feedback is a
 * color / border-color / background change; transitions run on color and
 * border-color only (0.15s) and are disabled under prefers-reduced-motion.
 * The only background-image on the site is the hero dot-grid texture
 * (CONTRACTS §18 — 1px radial-gradient dots at ~8% opacity).
 *
 * Tokens per CONTRACTS §13 + §16. The plugin may override any of
 * --bg/--surface/--surface-2/--border/--text/--muted/--accent/--secondary/
 * --radius/--space-section/--card-pad/--gap-grid via a later inline
 * `:root{...}` block, so every radius / section gap / card pad / grid gap
 * below routes through its var() — nothing hardcoded.
 */

/* ---------------------------------------------------------------- tokens */

:root {
	/* dark defaults */
	--bg: #020618;
	--surface: #0f172a;
	--surface-2: #1e293b;
	--border: rgba(31, 41, 55, .8);
	--border-subtle: rgba(31, 41, 55, .5);
	--text: #f1f5f9;
	--text-2: #cbd5e1;
	--muted: #64748b;
	--accent: #3b82f6; /* overridden inline from settings */
	--secondary: #64748b; /* secondary accent — defaults to the muted tone */
	--ok: #22c55e;
	--info: #3b82f6;
	--warn: #eab308;
	--orange: #f97316;
	--danger: #ef4444;
	--lvl-minimal: #22c55e;
	--lvl-low: #3b82f6;
	--lvl-moderate: #eab308;
	--lvl-elevated: #f97316;
	--lvl-high: #ef4444;
	--lvl-unknown: #64748b;
	--radius: 12px;
	/* derived radii — scale with the --radius setting (8px / 4px at default) */
	--radius-md: calc(var(--radius, 12px) * 2 / 3);
	--radius-sm: calc(var(--radius, 12px) / 3);
	--space-section: 48px;
	--card-pad: 20px;
	--gap-grid: 16px;
	--dot: rgba(148, 163, 184, .08); /* hero dot-grid, dark mode */
	--font-sans: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
	--font-mono: ui-monospace, 'Cascadia Code', 'SF Mono', Menlo, Consolas, monospace;
}

body.mode-light {
	--bg: #f8fafc;
	--surface: #fff;
	--surface-2: #f1f5f9;
	--border: rgba(15, 23, 42, .1);
	--border-subtle: rgba(15, 23, 42, .08);
	--text: #0f172a;
	--text-2: #475569;
	--muted: #64748b;
	--dot: rgba(15, 23, 42, .08); /* hero dot-grid, light mode */
}

/* ----------------------------------------------------------------- reset */

*,
*::before,
*::after {
	box-sizing: border-box;
}

* {
	margin: 0;
}

html {
	-webkit-text-size-adjust: 100%;
	text-size-adjust: 100%;
}

body {
	background: var(--bg);
	color: var(--text);
	font-family: var(--font-sans);
	font-size: 16px;
	line-height: 1.6;
	-webkit-font-smoothing: antialiased;
}

img,
svg {
	display: block;
	max-width: 100%;
	height: auto;
}

input,
button {
	font: inherit;
	color: inherit;
}

button {
	cursor: pointer;
}

h1,
h2,
h3,
h4 {
	line-height: 1.25;
	overflow-wrap: break-word;
}

a {
	color: var(--accent);
	text-decoration: none;
}

a:hover {
	text-decoration: underline;
}

a,
button,
input,
summary,
.rs-card,
.rs-nav__link,
.rs-pagination__link,
.page-numbers {
	transition: color .15s ease, border-color .15s ease;
}

:focus-visible {
	outline: 2px solid var(--accent);
	outline-offset: 2px;
}

@media (prefers-reduced-motion: reduce) {
	* {
		transition: none !important;
	}
}

/* ------------------------------------------------------- icons / letters */

/* Bundled SVG icons (inc/icons.php via rs_icon()). Inline by design —
   overrides the img/svg display:block reset. */
.rs-icon {
	display: inline-block;
	width: 1em;
	height: 1em;
	vertical-align: -.125em;
	flex: none;
}

/* 16px in data rows / list items / card titles, 18px in chips. */
.rs-row .rs-icon,
.rs-card__title .rs-icon,
.rs-value-list .rs-icon {
	width: 16px;
	height: 16px;
}

.rs-chip .rs-icon {
	width: 18px;
	height: 18px;
}

.rs-card__title .rs-icon,
.rs-value-list .rs-icon {
	margin-right: 6px;
}

/* Deterministic letter tile for brands without a bundled icon
   (rs_brand_badge() sets --h inline). */
.rs-letter {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 18px;
	height: 18px;
	flex: none;
	border-radius: var(--radius-sm);
	font: 600 10px/1 var(--font-mono);
	background: hsl(var(--h) 45% 28%);
	color: hsl(var(--h) 80% 82%);
	vertical-align: -4px;
}

body.mode-light .rs-letter {
	background: hsl(var(--h) 60% 88%);
	color: hsl(var(--h) 60% 35%);
}

.rs-value-list .rs-letter {
	margin-right: 6px;
}

/* Country flag <img> (rs_flag(), CONTRACTS §21) — inline with the country
   text in identity rows and regulator warning cells. Overrides the img
   display:block / height:auto reset. */
.rs-flag {
	display: inline-block;
	width: 20px;
	height: 15px;
	flex: none;
	border: 1px solid var(--border-subtle);
	border-radius: 2px;
	vertical-align: -2px;
}

/* Infra icon wrapper (rs_infra_icon()/rs_flag() markup on the registrar /
   provider / server-software / country rows in identity.php). Inside a
   .rs-row it joins the right-aligned value cluster: the wrapper takes over
   the margin-left:auto push and hands the value back a zero margin. */
.rs-infra-icon {
	display: inline-flex;
	align-items: center;
	flex: none;
}

.rs-row > .rs-infra-icon {
	margin-left: auto;
}

.rs-row > .rs-infra-icon + .rs-value {
	margin-left: 0;
}

/* ------------------------------------------------------ layout / a11y */

.rs-container {
	max-width: 72rem;
	margin: 0 auto;
	padding: 0 16px;
}

.rs-main {
	min-height: 60vh;
}

.rs-report {
	display: block;
	padding-bottom: calc(var(--space-section, 48px) / 2);
}

.rs-section {
	padding: calc(var(--space-section, 48px) * 2 / 3) 0;
	/* the sticky report nav wraps to two 40px rows on narrow screens (§22) */
	scroll-margin-top: 96px;
}

.rs-section__title {
	font-size: 1.25rem;
	font-weight: 650;
	letter-spacing: -.01em;
	margin: 0 0 12px;
}

.rs-section__sub {
	display: block;
	margin: 0 0 16px;
}

.screen-reader-text {
	position: absolute !important;
	width: 1px;
	height: 1px;
	margin: -1px;
	padding: 0;
	overflow: hidden;
	clip: rect(0 0 0 0);
	clip-path: inset(50%);
	border: 0;
	white-space: nowrap;
}

.rs-skip-link:focus {
	position: fixed;
	top: 8px;
	left: 8px;
	z-index: 100;
	width: auto;
	height: auto;
	margin: 0;
	padding: 10px 16px;
	overflow: visible;
	clip: auto;
	clip-path: none;
	white-space: normal;
	background: var(--surface);
	color: var(--text);
	border: 1px solid var(--accent);
	border-radius: var(--radius-md);
}

/* ---------------------------------------------------------------- header */

.rs-header {
	background: var(--bg);
	border-bottom: 1px solid var(--border);
}

.rs-header__inner {
	display: flex;
	align-items: center;
	justify-content: space-between;
	flex-wrap: wrap;
	gap: 4px 16px;
	min-height: 60px;
	padding-top: 8px;
	padding-bottom: 8px;
}

.rs-logo {
	display: flex;
	align-items: center;
	min-width: 0;
}

.rs-logo .custom-logo-link {
	display: block;
}

.rs-logo img.custom-logo {
	display: block;
	max-height: 48px;
	width: auto;
}

.rs-logo__link {
	display: inline-flex;
	align-items: center;
	min-height: 44px;
	font-size: 1.05rem;
	font-weight: 700;
	letter-spacing: -.01em;
	color: var(--text);
}

.rs-logo__link:hover {
	color: var(--accent);
	text-decoration: none;
}

.rs-header__nav {
	display: flex;
	align-items: center;
	gap: 16px;
	min-width: 0;
}

/* wp_nav_menu('primary') list */
.rs-header__menu {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 0 16px;
	list-style: none;
	margin: 0;
	padding: 0;
}

.rs-header__link,
.rs-header__menu a {
	display: inline-flex;
	align-items: center;
	min-height: 44px;
	font-family: var(--font-mono);
	font-size: 11px;
	text-transform: uppercase;
	letter-spacing: .08em;
	color: var(--muted);
}

.rs-header__link:hover,
.rs-header__menu a:hover {
	color: var(--text);
	text-decoration: none;
}

/* ---------------------------------------------------------------- footer */

.rs-footer {
	margin-top: var(--space-section, 48px);
	border-top: 1px solid var(--border);
	padding: calc(var(--space-section, 48px) * 2 / 3) 0;
}

.rs-footer__inner {
	display: flex;
	flex-direction: column;
	gap: 8px;
}

.rs-footer__text {
	color: var(--muted);
	font-size: 13px;
}

.rs-footer__nav {
	min-width: 0;
}

.rs-footer__menu {
	display: flex;
	flex-wrap: wrap;
	gap: 0 20px;
	list-style: none;
	margin: 0;
	padding: 0;
}

.rs-footer__menu a {
	display: inline-flex;
	align-items: center;
	min-height: 44px;
	font-family: var(--font-mono);
	font-size: 12px;
	color: var(--muted);
}

.rs-footer__menu a:hover {
	color: var(--text);
	text-decoration: none;
}

/* --------------------------------------------------------- home hero v2 */

.rs-hero2 {
	padding: var(--space-section, 48px) 0;
	border-bottom: 1px solid var(--border-subtle);
	/* subtle dot-grid texture — the one sanctioned background-image */
	background-image: radial-gradient(circle, var(--dot) 1px, transparent 1px);
	background-size: 24px 24px;
}

.rs-hero2__inner {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: calc(var(--gap-grid, 16px) * 2);
	align-items: center;
}

.rs-hero2__copy {
	min-width: 0;
}

.rs-hero2__eyebrow {
	font-family: var(--font-mono);
	font-size: 11px;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: .12em;
	color: var(--secondary, var(--muted));
}

.rs-hero2__title {
	margin-top: 10px;
	font-size: clamp(1.75rem, 4.5vw + .75rem, 3rem);
	font-weight: 750;
	letter-spacing: -.02em;
}

.rs-hero2__sub {
	margin-top: 12px;
	color: var(--text-2);
	font-size: 1.0625rem;
}

.rs-hero2__cta {
	margin-top: 24px;
}

/* flat console card */

.rs-console {
	background: var(--surface);
	border: 1px solid var(--border);
	border-radius: var(--radius, 12px);
	min-width: 0;
}

.rs-console__bar {
	display: flex;
	align-items: center;
	gap: 6px;
	padding: 10px calc(var(--card-pad, 20px) * .8);
	border-bottom: 1px solid var(--border-subtle);
}

.rs-console__dot {
	width: 8px;
	height: 8px;
	border-radius: 50%;
	flex: none;
}

.rs-console__dot:nth-child(1) {
	background: var(--danger);
}

.rs-console__dot:nth-child(2) {
	background: var(--warn);
}

.rs-console__dot:nth-child(3) {
	background: var(--ok);
}

.rs-console__file {
	margin-left: auto;
	font-family: var(--font-mono);
	font-size: 11px;
	color: var(--secondary, var(--muted));
	overflow-wrap: anywhere;
}

.rs-console__body {
	padding: calc(var(--card-pad, 20px) * .6) var(--card-pad, 20px) calc(var(--card-pad, 20px) * .8);
	font-family: var(--font-mono);
	font-size: 13px;
}

.rs-console__line {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	flex-wrap: wrap;
	gap: 2px 12px;
	padding: 7px 0;
	border-bottom: 1px dashed var(--border-subtle);
}

.rs-console__line:last-child {
	border-bottom: 0;
}

.rs-console__key {
	color: var(--muted);
	text-transform: uppercase;
	font-size: 11px;
	letter-spacing: .05em;
}

/* lvl-* classes set --lvl; unrated lines fall back to plain text color */
.rs-console__val {
	color: var(--lvl, var(--text));
	font-weight: 600;
	text-align: right;
	overflow-wrap: anywhere;
}

/* ------------------------------------------------------- breadcrumb (§30) */

/* Mono trail sitting above the heroes / archive head (report, archive and
   regular pages — template-parts/breadcrumb.php). Flat: links are muted
   text, hover is a color change only (transition comes from the global `a`
   rule). */
.rs-breadcrumb {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 6px;
	margin-bottom: var(--gap-grid, 16px);
	font-family: var(--font-mono);
	font-size: 11px;
	color: var(--muted);
}

.rs-breadcrumb a {
	display: inline-flex;
	align-items: center;
	min-height: 32px;
	color: var(--muted);
	text-decoration: none;
}

.rs-breadcrumb a:hover {
	color: var(--text);
	text-decoration: none;
}

.rs-breadcrumb__sep {
	color: var(--muted);
}

.rs-breadcrumb__current {
	display: inline-flex;
	align-items: center;
	min-height: 44px; /* touch-friendly tap target (§30) */
	color: var(--text-2);
	overflow-wrap: anywhere;
}

/* -------------------------------------------------- page / report heroes */

.rs-hero {
	padding: var(--space-section, 48px) 0 calc(var(--space-section, 48px) * 5 / 6);
}

.rs-hero--page {
	padding: calc(var(--space-section, 48px) * 5 / 6) 0 8px;
}

.rs-hero__title {
	font-size: clamp(1.75rem, 4.5vw + .75rem, 3rem);
	font-weight: 750;
	letter-spacing: -.02em;
}

.rs-hero__sub {
	margin-top: 8px;
	color: var(--text-2);
	font-size: 1.0625rem;
	max-width: 60ch;
}

/* report hero */

.rs-hero__top {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 16px 20px;
}

.rs-hero__favicon {
	width: 40px;
	height: 40px;
	flex-shrink: 0;
	border-radius: var(--radius-md);
	background: var(--surface-2);
}

.rs-hero__id {
	min-width: 0;
}

.rs-hero__domain {
	font-family: var(--font-mono);
	font-size: clamp(1.4rem, 4vw, 2rem);
	font-weight: 650;
	letter-spacing: -.01em;
	overflow-wrap: anywhere;
}

.rs-hero--degraded .rs-hero__domain {
	margin-top: 8px;
}

.rs-hero__meta {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 8px 12px;
	margin-top: 6px;
}

.rs-hero__category {
	margin-top: 20px;
	padding-top: 12px;
	border-top: 1px dashed var(--border-subtle);
}

/* full card width — deliberately no measure cap (CONTRACTS §19) */
.rs-hero__reasoning {
	margin-top: 8px;
	color: var(--text-2);
	font-size: 14px;
	max-width: none;
}

.rs-hero__indicators {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin-top: 16px;
}

/* ----------------------------------------------------------- stats strip */

.rs-stats {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: calc(var(--gap-grid, 16px) * .75);
	list-style: none;
	margin: 0;
	padding: 0;
}

.rs-stat {
	display: flex;
	flex-direction: column;
	gap: 2px;
	min-width: 0;
	padding: calc(var(--card-pad, 20px) * .7) calc(var(--card-pad, 20px) * .9);
	border: 1px solid var(--border);
	border-radius: var(--radius, 12px);
	background: var(--surface);
}

.rs-stat__value {
	font-family: var(--font-mono);
	font-size: 1.4rem;
	font-weight: 700;
	color: var(--text);
}

.rs-stat__label {
	font-family: var(--font-mono);
	font-size: 11px;
	text-transform: uppercase;
	letter-spacing: .05em;
	color: var(--muted);
}

/* ---------------------------------------------------------------- button */

.rs-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 44px;
	padding: 10px 20px;
	font-family: var(--font-mono);
	font-size: 13px;
	font-weight: 600;
	letter-spacing: .02em;
	background: var(--accent);
	color: #fff;
	border: 1px solid var(--accent);
	border-radius: var(--radius-md);
	text-decoration: none;
}

.rs-btn:hover {
	border-color: var(--text);
	text-decoration: none;
	color: #fff;
}

/* ------------------------------------------------------------------ grid */

.rs-grid {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: var(--gap-grid, 16px);
}

/* identity cards (WHOIS / SSL / SERVER) stack vertically at EVERY viewport
   (§21) — single column here and re-asserted inside each min-width block,
   where the generic .rs-grid goes multi-column */
.rs-grid--identity {
	grid-template-columns: minmax(0, 1fr);
	align-items: stretch;
}

.rs-grid--ioc {
	align-items: start;
}

.rs-grid--stats {
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: calc(var(--gap-grid, 16px) * .625);
}

/* ------------------------------------------------------------------ card */

.rs-card {
	background: var(--surface);
	border: 1px solid var(--border);
	border-radius: var(--radius, 12px);
	min-width: 0;
}

.rs-section > .rs-card {
	margin-top: var(--gap-grid, 16px);
}

.rs-card__head {
	display: flex;
	align-items: center;
	gap: 10px;
	padding: calc(var(--card-pad, 20px) * .6) var(--card-pad, 20px);
	border-bottom: 1px solid var(--border-subtle);
}

.rs-card__head .rs-chip,
.rs-card__head .rs-tag {
	margin-left: auto;
	flex-shrink: 0;
}

.rs-card__title {
	font-family: var(--font-mono);
	font-size: 11px;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: .05em;
	color: var(--text-2);
}

.rs-card__body {
	padding: calc(var(--card-pad, 20px) * .6) var(--card-pad, 20px) calc(var(--card-pad, 20px) * .8);
	overflow-x: auto;
}

.rs-card__body > p {
	font-size: 14px;
	color: var(--text-2);
}

/* latest-grid report card (whole card is a link) */

a.rs-card--report {
	display: block;
	color: inherit;
	text-decoration: none;
}

a.rs-card--report:hover {
	border-color: var(--accent);
	text-decoration: none;
}

.rs-card__favicon {
	width: 20px;
	height: 20px;
	flex-shrink: 0;
	border-radius: var(--radius-sm);
	background: var(--surface-2);
}

.rs-card--report .rs-card__title {
	font-size: 13px;
	text-transform: none;
	letter-spacing: 0;
	color: var(--text);
	overflow-wrap: anywhere;
}

/* contact-page aside card (no head/body wrappers) */

.rs-card--aside {
	padding: var(--card-pad, 20px);
}

.rs-card--aside .rs-card__text {
	margin-top: 10px;
	font-size: 14px;
	color: var(--text-2);
}

/* ------------------------------------------------------- sticky page nav */

/* NO horizontal scrolling at any size (§22): items wrap onto extra rows so
   every anchor is visible immediately at 375px; compact 40px tap targets on
   mobile, roomier padding restored at ≥640px. Sticky + solid bg stay. */
.rs-nav {
	position: sticky;
	top: 0;
	z-index: 10;
	display: flex;
	flex-wrap: wrap;
	gap: 0 2px;
	margin: 0 -16px;
	padding: 0 16px;
	background: var(--bg);
	border-bottom: 1px solid var(--border);
}

.rs-nav__link {
	display: inline-flex;
	align-items: center;
	min-height: 40px;
	padding: 2px 8px;
	font-family: var(--font-mono);
	font-size: 11px;
	text-transform: uppercase;
	letter-spacing: .05em;
	color: var(--muted);
	white-space: nowrap;
	border-bottom: 2px solid transparent;
	text-decoration: none;
}

.rs-nav__link:hover {
	color: var(--text);
	text-decoration: none;
}

.rs-nav__link.is-active {
	color: var(--accent);
	border-bottom-color: var(--accent);
}

/* ----------------------------------------------- rows / labels / values */

.rs-row {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 4px 12px;
	padding: 7px 0;
	border-bottom: 1px dashed var(--border-subtle);
}

/* last element (value / severity tag) sits right; leading icon + text
   cluster left. Overridden for flow-style rows below. */
.rs-row > :last-child {
	margin-left: auto;
}

.rs-row:last-child {
	border-bottom: 0;
}

.rs-row--list {
	display: block;
}

.rs-row--list > .rs-label {
	display: block;
	margin-bottom: 6px;
}

.rs-label {
	font-family: var(--font-mono);
	font-size: 11px;
	text-transform: uppercase;
	letter-spacing: .05em;
	color: var(--muted);
}

.rs-label--headline {
	display: block;
	font-size: 12px;
	margin-bottom: 4px;
	color: var(--text-2);
}

.rs-label--uptime-meta {
	margin-top: 10px;
}

.rs-value {
	font-family: var(--font-mono);
	font-size: 13px;
	color: var(--text);
	overflow-wrap: anywhere;
}

.rs-value--empty {
	color: var(--muted);
}

.rs-value--mono {
	font-family: var(--font-mono);
	word-break: break-all;
}

.rs-value-list {
	list-style: none;
	margin: 0;
	padding: 0;
}

.rs-value-list li {
	padding: 6px 0;
	border-bottom: 1px dashed var(--border-subtle);
}

.rs-value-list li:last-child {
	border-bottom: 0;
}

.rs-value-list--ioc li {
	font-family: var(--font-mono);
	font-size: 13px;
	overflow-wrap: anywhere;
}

.rs-value-list--ioc li .rs-label {
	margin-right: 6px;
}

/* ----------------------------------------------------------------- table */

/* Base (≤639px): the table itself scrolls horizontally — wrapper-less
   fallback; rs-card__body overflow-x is the second safety net. */
.rs-table {
	display: block;
	width: 100%;
	overflow-x: auto;
	border-collapse: collapse;
}

.rs-table thead th {
	font-family: var(--font-mono);
	font-size: 10px;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: .05em;
	color: var(--muted);
	text-align: left;
	padding: 8px 10px 8px 0;
	border-bottom: 1px solid var(--border);
}

.rs-table tbody td {
	font-family: var(--font-mono);
	font-size: 13px;
	padding: 8px 10px 8px 0;
	border-bottom: 1px dashed var(--border-subtle);
	overflow-wrap: anywhere;
	vertical-align: baseline;
}

.rs-table tbody tr:last-child td {
	border-bottom: 0;
}

.rs-table tbody tr:hover td {
	background-color: var(--surface-2);
}

/* ------------------------------------------------- badges / chips / tags */

.rs-badge {
	display: inline-block;
	padding: 2px 8px;
	font-family: var(--font-mono);
	font-size: 11px;
	color: var(--text-2);
	border: 1px solid var(--border);
	border-radius: var(--radius-sm);
	overflow-wrap: anywhere;
}

.rs-chip {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	padding: 4px 10px;
	font-family: var(--font-mono);
	font-size: 12px;
	color: var(--text-2);
	border: 1px solid var(--border);
	border-radius: var(--radius-sm);
	text-decoration: none;
}

/* linked chips (hero indicators): comfortable touch target on small screens */
a.rs-chip {
	min-height: 44px;
	padding: 8px 12px;
}

a.rs-chip:hover {
	border-color: var(--text);
	text-decoration: none;
}

.rs-chip--network {
	margin-bottom: 12px;
}

.rs-tag {
	display: inline-block;
	padding: 2px 6px;
	font-family: var(--font-mono);
	font-size: 10px;
	text-transform: uppercase;
	letter-spacing: .05em;
	color: var(--muted);
	border: 1px solid var(--border);
	border-radius: var(--radius-sm);
	white-space: nowrap;
}

/* severity modifiers (rs-chip / rs-tag) */

.sev-critical {
	color: var(--danger);
	border-color: var(--danger);
}

.sev-medium {
	color: var(--orange);
	border-color: var(--orange);
}

a.rs-chip.sev-critical:hover {
	border-color: var(--danger);
	color: var(--text);
}

a.rs-chip.sev-medium:hover {
	border-color: var(--orange);
	color: var(--text);
}

/* trust-score level modifiers — set --lvl, consumed by chip/gauge/console */

.lvl-minimal { --lvl: var(--lvl-minimal); }
.lvl-low { --lvl: var(--lvl-low); }
.lvl-moderate { --lvl: var(--lvl-moderate); }
.lvl-elevated { --lvl: var(--lvl-elevated); }
.lvl-high { --lvl: var(--lvl-high); }
.lvl-unknown { --lvl: var(--lvl-unknown); }

.rs-chip.lvl-minimal,
.rs-chip.lvl-low,
.rs-chip.lvl-moderate,
.rs-chip.lvl-elevated,
.rs-chip.lvl-high,
.rs-chip.lvl-unknown {
	color: var(--lvl);
	border-color: var(--lvl);
	font-weight: 600;
}

/* ----------------------------------------------------------- status dot */

.rs-dot {
	display: inline-block;
	width: 8px;
	height: 8px;
	border-radius: 50%;
	background: var(--muted);
	flex-shrink: 0;
}

.rs-dot--up {
	background: var(--ok);
}

.rs-dot--down {
	background: var(--danger);
}

.rs-dot--unknown {
	background: var(--muted);
}

/* ----------------------------------------------------------------- gauge */

.rs-gauge {
	width: 100%;
	text-align: left;
	color: var(--lvl, var(--text));
}

.rs-gauge__score {
	font-family: var(--font-mono);
	font-size: 36px;
	font-weight: 700;
	line-height: 1;
}

.rs-gauge__max {
	font-family: var(--font-mono);
	font-size: 14px;
	color: var(--muted);
}

.rs-gauge__label {
	display: block;
	margin-top: 4px;
	font-family: var(--font-mono);
	font-size: 11px;
	text-transform: uppercase;
	letter-spacing: .05em;
}

/* opt-in attribution credit (v1.4 §35, redesigned v1.6 §43) — sits
   right-aligned under the score gauge (the gauge column is right-aligned in
   the hero top row ≥640px). Rendered as a sibling of .rs-hero__top, not a
   flex child, so the 6px offset is exact (no row-gap inflation) and the
   favicon/domain/gauge flex wrap is untouched on mobile. Prefix is plain
   text; only .rs-attribution__link (label + optional icon) is clickable. */
.rs-attribution {
	display: block;
	margin: 6px 0 0;
	font-family: var(--font-mono);
	font-size: 10px;
	color: var(--muted);
	text-align: right;
}

.rs-attribution__prefix {
	color: var(--muted);
}

.rs-attribution__link {
	color: var(--muted);
	text-decoration: none;
}

.rs-attribution__link:hover {
	color: var(--text-2);
	text-decoration: underline;
}

.rs-attribution__icon {
	display: inline-block;
	width: 14px;
	height: 14px;
	vertical-align: -2px;
	margin-right: 4px;
	border-radius: 2px;
}

/* ---------------------------------------------------------------- uptime */

.rs-uptime {
	display: flex;
	align-items: flex-end;
	gap: 3px;
}

.rs-uptime__day {
	flex: 1 0 4px;
	max-width: 10px;
	height: 28px;
	border-radius: 2px;
	background: var(--surface-2);
	border: 1px solid var(--border-subtle);
}

.rs-uptime__day.up {
	background: var(--ok);
	border-color: var(--ok);
}

.rs-uptime__day.down {
	background: var(--danger);
	border-color: var(--danger);
}

.rs-uptime__day.unknown {
	background: var(--surface-2);
	border-color: var(--border-subtle);
}

/* ---------------------------------------------------------------- timing */

.rs-timing {
	display: block;
}

.rs-timing__row {
	justify-content: flex-start;
	align-items: center;
	flex-wrap: nowrap;
	gap: 12px;
}

.rs-timing__row > .rs-label {
	flex: 0 0 6.5rem;
}

.rs-timing__row > .rs-value {
	flex: 0 0 4.5rem;
	text-align: right;
	white-space: nowrap;
}

.rs-timing__track {
	flex: 1 1 auto;
	height: 6px;
	background: var(--surface-2);
	border-radius: 3px;
	overflow: hidden;
}

.rs-timing__bar {
	display: block;
	height: 100%;
	background: var(--accent);
	border-radius: 3px;
}

/* ------------------------------------------------- redirects / tech list */

.rs-redirects {
	list-style: none;
	margin: 0;
	padding: 0;
	counter-reset: rs-redirect;
}

.rs-redirects .rs-row {
	justify-content: flex-start;
}

.rs-redirects .rs-row > :last-child {
	margin-left: 0;
}

.rs-redirects .rs-row::before {
	counter-increment: rs-redirect;
	content: counter(rs-redirect);
	font-family: var(--font-mono);
	font-size: 11px;
	color: var(--muted);
	min-width: 1.25em;
}

.rs-tech {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	list-style: none;
	margin: 0;
	padding: 0;
}

.rs-tech .rs-chip {
	padding: 6px 10px;
}

.rs-tech .rs-chip .rs-label {
	overflow-wrap: anywhere;
	white-space: normal;
}

/* ------------------------------------------------------------ screenshot */

.rs-screenshot {
	padding: calc(var(--card-pad, 20px) * .6);
}

.rs-screenshot__frame {
	aspect-ratio: 1280 / 800;
	overflow: hidden;
	border-radius: var(--radius-md);
	background: var(--surface-2);
}

.rs-screenshot__frame img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.rs-screenshot figcaption {
	margin-top: 10px;
}

/* ------------------------------------------------------- details/summary */

.rs-details {
	margin-top: 8px;
	padding-top: 8px;
	border-top: 1px dashed var(--border-subtle);
}

.rs-details > summary {
	display: flex;
	align-items: center;
	min-height: 44px;
	cursor: pointer;
	list-style: none;
	font-family: var(--font-mono);
	font-size: 11px;
	text-transform: uppercase;
	letter-spacing: .05em;
	color: var(--muted);
	padding: 4px 0;
}

.rs-details > summary::-webkit-details-marker {
	display: none;
}

.rs-details > summary::before {
	content: "+";
	display: inline-block;
	min-width: 1.1em;
	color: var(--accent);
	font-weight: 700;
}

.rs-details[open] > summary::before {
	content: "\2212";
}

.rs-details > summary:hover {
	color: var(--text);
}

/* ------------------------------------------------- report narrative (§23) */

/* Data-woven prose card right after the hero. Paragraphs deliberately span
   the FULL card width (no measure cap); readability comes from the larger
   size, looser leading and paragraph rhythm. The .rs-narrative scope also
   out-cascades the generic 14px .rs-card__body > p rule. */
.rs-narrative .rs-narrative__p {
	margin: 0 0 1em;
	font-size: 15px;
	line-height: 1.7;
	color: var(--text-2);
	max-width: none;
}

.rs-narrative .rs-narrative__p:last-child {
	margin-bottom: 0;
}

/* Guidance block (assessment + educational cards): stacked cards share the
   grid gap; lists inherit the narrative prose rhythm. */
.rs-guidance {
	display: grid;
	gap: var(--gap-grid, 16px);
}

.rs-narrative .rs-narrative__list {
	margin: 0;
	padding-left: 1.25em;
	font-size: 15px;
	line-height: 1.7;
	color: var(--text-2);
}

.rs-narrative .rs-narrative__list li {
	margin: 0 0 .6em;
	padding-left: .25em;
}

.rs-narrative .rs-narrative__list li:last-child {
	margin-bottom: 0;
}

.rs-narrative .rs-narrative__list li::marker {
	color: var(--muted);
}

.rs-narrative .rs-narrative__list--steps li::marker {
	color: var(--accent);
	font-family: var(--font-mono);
	font-weight: 600;
}

/* ---------------------------------------------------- partner embed (§26) */

/* Accent-bordered card variant with a centered title; the admin-provided
   third-party embed is constrained to the card width. */
.rs-partner .rs-card {
	border-color: var(--accent);
}

.rs-partner .rs-card__head {
	justify-content: center;
}

.rs-partner .rs-card__title {
	text-align: center;
}

.rs-partner .rs-card__body iframe,
.rs-partner .rs-card__body embed,
.rs-partner .rs-card__body object,
.rs-partner .rs-card__body video,
.rs-partner .rs-card__body img {
	max-width: 100%;
}

.rs-partner .rs-card__body iframe {
	width: 100%;
	border: 0;
}

/* scoped past the generic .rs-card__body > p rule */
.rs-partner .rs-partner__note {
	margin-top: 12px;
	font-family: var(--font-mono);
	font-size: 11px;
	text-align: center;
	color: var(--muted);
}

/* -------------------------------------------------- related reports (§25) */

/* "More reports" reuses the base .rs-section + .rs-grid card grid — the
   same layout as the home latest-reports grid by contract. Equal-height
   cards made explicit, mirroring .rs-grid--identity. */
.rs-related .rs-grid {
	align-items: stretch;
}

/* ---------------------------------------------- prose (legal pages etc.) */

.rs-prose {
	max-width: 70ch;
	color: var(--text-2);
}

.rs-prose h1,
.rs-prose h2,
.rs-prose h3,
.rs-prose h4 {
	color: var(--text);
	margin: 1.6em 0 .5em;
}

.rs-prose h1:first-child,
.rs-prose h2:first-child,
.rs-prose h3:first-child,
.rs-prose p:first-child {
	margin-top: 0;
}

.rs-prose h2 {
	font-size: 1.35rem;
}

.rs-prose h3 {
	font-size: 1.1rem;
}

.rs-prose p,
.rs-prose ul,
.rs-prose ol {
	margin: 0 0 1em;
}

.rs-prose ul,
.rs-prose ol {
	padding-left: 1.4em;
}

.rs-prose li {
	margin-bottom: .35em;
}

.rs-prose a {
	text-decoration: underline;
}

.rs-prose blockquote {
	margin: 0 0 1em;
	padding: .25em 0 .25em 1em;
	border-left: 2px solid var(--border);
	color: var(--muted);
}

.rs-prose code {
	font-family: var(--font-mono);
	font-size: .875em;
	background: var(--surface-2);
	border-radius: var(--radius-sm);
	padding: .1em .35em;
}

.rs-prose pre {
	background: var(--surface-2);
	border: 1px solid var(--border-subtle);
	border-radius: var(--radius-md);
	padding: 12px 16px;
	overflow-x: auto;
	margin: 0 0 1em;
}

.rs-prose pre code {
	background: none;
	padding: 0;
}

.rs-prose img {
	border-radius: var(--radius-md);
}

.rs-prose table {
	width: 100%;
	border-collapse: collapse;
	margin: 0 0 1em;
	font-size: 14px;
}

.rs-prose th,
.rs-prose td {
	text-align: left;
	padding: 6px 10px 6px 0;
	border-bottom: 1px dashed var(--border-subtle);
}

/* --------------------------------------- empty states / blog list / 404 */

.rs-empty {
	padding: calc(var(--card-pad, 20px) * 1.4) var(--card-pad, 20px);
	text-align: center;
	color: var(--muted);
	border: 1px dashed var(--border);
	border-radius: var(--radius, 12px);
}

.rs-empty--admin {
	margin-top: 12px;
	font-family: var(--font-mono);
	font-size: 12px;
	border-color: var(--border-subtle);
}

.rs-post-list {
	list-style: none;
	margin: 0;
	padding: 0;
}

.rs-post-list__item {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	flex-wrap: wrap;
	gap: 4px 16px;
	padding: 12px 0;
	border-bottom: 1px dashed var(--border-subtle);
}

.rs-post-list__link {
	color: var(--text);
	font-weight: 600;
}

.rs-post-list__link:hover {
	color: var(--accent);
	text-decoration: none;
}

.rs-post-list__date {
	font-family: var(--font-mono);
	font-size: 12px;
	color: var(--muted);
}

/* WP archive pagination (the_posts_pagination) */

.navigation.pagination {
	margin: 24px 0;
}

.nav-links {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
}

.page-numbers {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 44px;
	min-height: 44px;
	padding: 6px 10px;
	text-align: center;
	font-family: var(--font-mono);
	font-size: 13px;
	color: var(--text-2);
	border: 1px solid var(--border);
	border-radius: var(--radius-sm);
	text-decoration: none;
}

a.page-numbers:hover {
	border-color: var(--accent);
	color: var(--text);
	text-decoration: none;
}

.page-numbers.current {
	border-color: var(--accent);
	color: var(--accent);
}

.page-numbers.dots {
	border-color: transparent;
}

/* ------------------------------------------------- /reports/ head (§24) */

/* PageHero-style archive header — mirrors the .rs-hero--page proportions;
   the compound selector out-cascades the .rs-section padding in the
   min-width blocks below. */
.rs-section.rs-archive-head {
	padding: calc(var(--space-section, 48px) * 5 / 6) 0 0;
}

.rs-archive-head .rs-section__title {
	font-size: clamp(1.6rem, 3.5vw + .5rem, 2.25rem);
	letter-spacing: -.02em;
	margin-bottom: 4px;
}

.rs-archive-head .rs-section__sub {
	margin: 0;
	font-family: var(--font-mono);
	font-size: 13px;
	color: var(--muted);
}

/* ------------------------------------------- /reports/ pagination (§24) */

/* Mono numbered boxes; current page = accent border + accent text; hover
   feedback is the flat border-color lift. */
.rs-pagination {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 8px;
	margin-top: calc(var(--gap-grid, 16px) * 1.5);
}

.rs-pagination__link,
.rs-pagination__current {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 40px;
	min-height: 40px;
	padding: 6px 12px;
	font-family: var(--font-mono);
	font-size: 13px;
	color: var(--text-2);
	border: 1px solid var(--border);
	border-radius: var(--radius-sm);
	text-decoration: none;
}

.rs-pagination__link:hover {
	border-color: var(--accent);
	color: var(--text);
	text-decoration: none;
}

.rs-pagination__current {
	border-color: var(--accent);
	color: var(--accent);
	font-weight: 600;
}

/* prev/next are text links — the 40px number-box width floor doesn't apply */
.rs-pagination__link--prev,
.rs-pagination__link--next {
	min-width: 0;
}

.rs-pagination__gap {
	display: inline-flex;
	align-items: center;
	min-height: 40px;
	padding: 0 2px;
	font-family: var(--font-mono);
	color: var(--muted);
}

/* --------------------------------------------- home "What we cover" (§27) */

/* Three equal cards: single column up to 959px (the generic .rs-grid 2-up
   step at 640px is opted out inside the media blocks), 3-up at ≥960px. */
.rs-covers .rs-grid {
	align-items: stretch;
}

/* --------------------------------------------------- home mission (§27) */

/* Full container width, left aligned, muted secondary tone. */
.rs-mission .rs-mission__p {
	margin: 0 0 1em;
	font-size: 15px;
	line-height: 1.7;
	color: var(--text-2);
	max-width: none;
}

.rs-mission .rs-mission__p:last-child {
	margin-bottom: 0;
}

/* ----------------------------------------------- contact form (§44) */

/* Integrated Snyfer Core contact form — flat, stacked fields. Rendered by
   the plugin under the contact page body. Reuses .rs-btn for submit. */
.rs-contact__form {
	display: block;
	max-width: 640px;
	margin: 24px 0 0;
}

.rs-contact__field {
	margin: 0 0 16px;
}

.rs-contact__field label {
	display: block;
	margin: 0 0 6px;
	font-family: var(--font-mono);
	font-size: 11px;
	text-transform: uppercase;
	letter-spacing: .05em;
	color: var(--muted);
}

.rs-contact__field input,
.rs-contact__field textarea {
	display: block;
	width: 100%;
	min-height: 44px;
	padding: 10px 12px;
	font-family: var(--font-sans);
	font-size: 15px;
	color: var(--text);
	background: var(--surface);
	border: 1px solid var(--border);
	border-radius: var(--radius, 12px);
}

.rs-contact__field textarea {
	min-height: 132px;
	resize: vertical;
	line-height: 1.6;
}

.rs-contact__field input::placeholder,
.rs-contact__field textarea::placeholder {
	color: var(--muted);
}

.rs-contact__field input:focus,
.rs-contact__field textarea:focus {
	outline: 2px solid var(--accent);
	outline-offset: 1px;
	border-color: var(--accent);
}

/* submit reuses .rs-btn; nothing extra needed beyond full-width on mobile. */
.rs-contact__submit .rs-btn {
	width: 100%;
}

/* PRG success / error notice above the form. */
.rs-contact__notice {
	margin: 0 0 20px;
	padding: 12px 16px;
	max-width: 640px;
	font-size: 14px;
	color: var(--text-2);
	background: var(--surface);
	border: 1px solid var(--border);
	border-left-width: 3px;
	border-radius: var(--radius-md);
}

.rs-contact__notice--ok {
	border-left-color: var(--ok);
}

.rs-contact__notice--error {
	border-left-color: var(--danger);
}

/* ----------------------------------------------------- ≥640px (tablet+) */

@media (min-width: 640px) {
	.rs-container {
		padding: 0 24px;
	}

	.rs-section {
		padding: var(--space-section, 48px) 0;
		/* the wrapped nav settles onto a single 40px row from here up */
		scroll-margin-top: 64px;
	}

	/* submit button is full-width on mobile, auto from tablet up (§44) */
	.rs-contact__submit .rs-btn {
		width: auto;
	}

	.rs-nav {
		gap: 0 4px;
		margin: 0 -24px;
		padding: 0 24px;
	}

	.rs-nav__link {
		padding: 4px 12px;
	}

	/* hero v2: console beside the copy column */
	.rs-hero2 {
		padding: calc(var(--space-section, 48px) * 1.5) 0;
	}

	.rs-hero2__inner {
		grid-template-columns: 1.1fr .9fr;
		gap: calc(var(--gap-grid, 16px) * 2.5);
	}

	/* score gauge back to the right edge of the hero */
	.rs-gauge {
		width: auto;
		margin-left: auto;
		text-align: right;
	}

	.rs-gauge__score {
		font-size: 44px;
	}

	/* 2-col grids */
	.rs-grid {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	/* identity stays single-column at every viewport (§21) */
	.rs-grid--identity {
		grid-template-columns: minmax(0, 1fr);
	}

	/* covers skip the 2-up step — 1col until ≥960px (§27) */
	.rs-covers .rs-grid {
		grid-template-columns: minmax(0, 1fr);
	}

	.rs-grid--stats {
		grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
	}

	.rs-grid--contact {
		grid-template-columns: 2fr 1fr;
		align-items: start;
	}

	.rs-stats {
		grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
	}

	/* pointer-first: back to compact controls */
	a.rs-chip {
		min-height: 0;
		padding: 4px 10px;
	}

	.rs-details > summary {
		min-height: 0;
	}

	.page-numbers {
		min-height: 36px;
		min-width: 36px;
	}

	.rs-timing__row > .rs-label {
		flex-basis: 8.5rem;
	}

	.rs-footer__inner {
		flex-direction: row;
		align-items: center;
		justify-content: space-between;
		flex-wrap: wrap;
		gap: 8px 16px;
	}

	/* tables behave as real tables again (still guarded by the scrolling
	   rs-card__body) */
	.rs-table {
		display: table;
	}
}

/* ---------------------------------------------------- ≥960px (desktop+) */

@media (min-width: 960px) {
	.rs-container {
		padding: 0 32px;
	}

	.rs-nav {
		margin: 0 -32px;
		padding: 0 32px;
	}

	/* 3-col latest-reports / ioc / related grids */
	.rs-grid {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}

	/* identity stays single-column at every viewport (§21) */
	.rs-grid--identity {
		grid-template-columns: minmax(0, 1fr);
	}

	/* covers: 3 cards side by side from here up (§27) */
	.rs-covers .rs-grid {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}

	.rs-grid--contact {
		grid-template-columns: 2fr 1fr;
	}
}
