/* === Root Variables ===================================================== */
:root {
	--bg: #0a0a14;
	--bg-card: #0c0d1c;
	--bg-raised: #101226;
	--border: #1a2040;
	--border-warm: #2a1e08;
	--text: #c8d0e0;
	--text-dim: #7788aa;
	--text-muted: #3d4f66;
	--text-bright: #e0e8ff;
	--accent-cold: #7ab3f0;
	--accent-amber: #ff9944;
	--accent-ember: #ff7a3a;
	--accent-gold: #e6a817;
	--status-ok: #2ecc71;
	--status-warn: #ff9944;
	--status-dead: #ff6060;
	--elim-bg: #200808;
	--elim-text: #ff6060;
	--defect-bg: #061624;
	--defect-text: #5ab4ff;
	--font-display: "IM Fell English SC", "Times New Roman", serif;
	--font-italic: "IM Fell English", "Times New Roman", serif;
	--font-mono: "JetBrains Mono", "Courier New", monospace;
	--gap: 1.5rem;
	--pad-h: 2rem;

	/* Faction accent colors */
	--color-signed: #e6a817;
	--color-unrelayed: #9b59b6;
	--color-kindzero: #1abc9c;
	--color-ghost: #7f8c8d;
	--color-ember: #ff7a3a;
	--color-inquisitors: #4a9eff;
	--color-firehose: #e74c3c;
	--color-exiles: #2ecc71;
}

/* === Reset ============================================================== */
*,
*::before,
*::after {
	box-sizing: border-box;
	margin: 0;
	padding: 0;
}

/* === Body + Atmosphere ================================================== */
body {
	background:
		radial-gradient(
			ellipse at 12% 45%,
			rgba(255, 122, 58, 0.055) 0%,
			transparent 52%
		),
		radial-gradient(
			ellipse at 88% 18%,
			rgba(74, 158, 255, 0.04) 0%,
			transparent 48%
		),
		radial-gradient(
			ellipse at 50% 90%,
			rgba(155, 89, 182, 0.03) 0%,
			transparent 55%
		),
		var(--bg);
	color: var(--text);
	font-family: var(--font-mono);
	font-size: 14px;
	line-height: 1.65;
	min-height: 100vh;
}

/* Scanline overlay — subtle CRT feel */
body::after {
	content: "";
	position: fixed;
	inset: 0;
	background: repeating-linear-gradient(
		0deg,
		transparent,
		transparent 3px,
		rgba(0, 0, 0, 0.022) 3px,
		rgba(0, 0, 0, 0.022) 4px
	);
	pointer-events: none;
	z-index: 9999;
}

/* === Links ============================================================== */
a {
	color: var(--accent-cold);
	text-decoration: none;
}
a:hover {
	text-decoration: underline;
	opacity: 0.85;
}

/* === Typography ========================================================= */
h1 {
	font-family: var(--font-display);
	font-size: 2rem;
	font-weight: normal;
	color: var(--text-bright);
	letter-spacing: 0.04em;
}

h2 {
	font-family: var(--font-display);
	font-size: 0.78rem;
	font-weight: normal;
	color: var(--text-dim);
	text-transform: uppercase;
	letter-spacing: 0.14em;
	margin-bottom: 0.7rem;
	padding-bottom: 0.3rem;
	border-bottom: 1px solid var(--border);
}

h3 {
	font-family: var(--font-display);
	font-size: 0.7rem;
	font-weight: normal;
	color: var(--text-muted);
	text-transform: uppercase;
	letter-spacing: 0.1em;
	margin: 0.8rem 0 0.4rem;
}

.empty {
	color: var(--text-muted);
	font-size: 0.82rem;
	font-style: italic;
	font-family: var(--font-italic);
}

.section-note {
	font-family: var(--font-italic);
	font-style: italic;
	font-size: 0.78rem;
	color: var(--text-muted);
	margin-bottom: 0.6rem;
}

/* === Header ============================================================= */
header {
	padding: 1.4rem var(--pad-h) 1rem;
	border-bottom: 1px solid var(--border);
}

.supertitle {
	font-family: var(--font-display);
	font-size: 0.65rem;
	color: var(--accent-amber);
	letter-spacing: 0.22em;
	text-transform: uppercase;
	margin-bottom: 0.35rem;
	opacity: 0.65;
}

.subtitle {
	font-family: var(--font-italic);
	font-style: italic;
	color: var(--text-muted);
	font-size: 0.88rem;
	margin-top: 0.15rem;
}

.stats-strip {
	display: flex;
	gap: 2.5rem;
	margin-top: 0.9rem;
	flex-wrap: wrap;
	align-items: baseline;
}

.stat {
	font-size: 0.82rem;
	color: var(--text-dim);
	display: flex;
	align-items: baseline;
	gap: 0.35rem;
}

.stat b {
	color: var(--text-bright);
	font-size: 1.35rem;
	font-weight: 700;
}

.stat-label {
	font-family: var(--font-display);
	font-size: 0.65rem;
	text-transform: uppercase;
	letter-spacing: 0.1em;
	color: var(--text-muted);
}

.feud-stat {
	color: var(--accent-amber);
}

.feud-label {
	font-family: var(--font-display);
	font-size: 0.65rem;
	text-transform: uppercase;
	letter-spacing: 0.1em;
	opacity: 0.75;
	margin-right: 0.25rem;
}

.feud-since {
	font-size: 0.75rem;
	opacity: 0.6;
}

/* === Top Grid =========================================================== */
.top-grid {
	display: grid;
	grid-template-columns: 260px 1fr 280px;
	grid-template-rows: auto auto;
	grid-template-areas:
		"factions  events  top-signals"
		"rollcall  events  relay-health";
	gap: var(--gap);
	padding: var(--gap) var(--pad-h);
}

.section-factions {
	grid-area: factions;
}
.section-rollcall {
	grid-area: rollcall;
}
.section-events {
	grid-area: events;
}
.section-top-signals {
	grid-area: top-signals;
}
.section-relay-health {
	grid-area: relay-health;
}

/* Sections below the top grid */
.content-pad {
	padding: 0 var(--pad-h) var(--gap);
}

.lower-2col {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: var(--gap);
	padding: 0 var(--pad-h) var(--gap);
}

/* === Faction Class Colors =============================================== */
.faction-signed {
	--faction-color: var(--color-signed);
}
.faction-unrelayed {
	--faction-color: var(--color-unrelayed);
}
.faction-kindzero {
	--faction-color: var(--color-kindzero);
}
.faction-ghost {
	--faction-color: var(--color-ghost);
}
.faction-ember {
	--faction-color: var(--color-ember);
}
.faction-inquisitors {
	--faction-color: var(--color-inquisitors);
}
.faction-firehose {
	--faction-color: var(--color-firehose);
}
.faction-exiles {
	--faction-color: var(--color-exiles);
}

/* === Faction Sigil Bars ================================================= */
.faction-row {
	display: flex;
	align-items: center;
	gap: 0.5rem;
	padding: 0.28rem 0.5rem 0.28rem 0.65rem;
	margin-bottom: 0.35rem;
	border-left: 3px solid var(--faction-color, var(--border));
	background: linear-gradient(
		90deg,
		rgba(255, 255, 255, 0.022) 0%,
		transparent 75%
	);
	transition: background 0.2s ease;
}

.faction-row:hover {
	background: linear-gradient(
		90deg,
		rgba(255, 255, 255, 0.05) 0%,
		transparent 75%
	);
}

.faction-name {
	font-family: var(--font-display);
	font-size: 0.7rem;
	color: var(--text-dim);
	flex: 1;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

.faction-count {
	color: var(--faction-color, var(--text));
	font-size: 0.95rem;
	font-weight: 700;
	width: 2.6rem;
	text-align: right;
}

.bar-track {
	width: 48px;
	height: 4px;
	background: rgba(255, 255, 255, 0.06);
	overflow: hidden;
}

.bar {
	height: 100%;
	background: var(--faction-color, var(--accent-cold));
	opacity: 0.75;
	transition: width 0.5s ease;
}

/* === Events Feed ======================================================== */
.event {
	padding: 0.5rem 0;
	border-bottom: 1px solid #0c1020;
	font-size: 0.82rem;
	display: flex;
	gap: 0.5rem;
	flex-wrap: wrap;
	align-items: baseline;
}

.ev-type {
	font-family: var(--font-display);
	text-transform: uppercase;
	font-size: 0.62rem;
	letter-spacing: 0.07em;
	padding: 0.14rem 0.44rem;
	flex-shrink: 0;
	border-radius: 1px;
}

.event-elim .ev-type {
	background: var(--elim-bg);
	color: var(--elim-text);
	border: 1px solid rgba(255, 96, 96, 0.25);
}

.event-defect .ev-type {
	background: var(--defect-bg);
	color: var(--defect-text);
	border: 1px solid rgba(90, 180, 255, 0.2);
}

.ev-handle {
	color: var(--text-bright);
	font-weight: 700;
}

.ev-faction {
	color: var(--text-muted);
	font-size: 0.76rem;
}

.ev-cause {
	color: var(--text-muted);
	font-size: 0.72rem;
	font-family: var(--font-italic);
	font-style: italic;
}

.ev-time {
	color: #2d3d52;
	font-size: 0.7rem;
	margin-left: auto;
	white-space: nowrap;
}

/* === Top Signals ======================================================== */
.top-extra {
	display: flex;
	gap: 0.5rem;
	align-items: baseline;
	padding: 0.3rem 0.4rem;
	border-bottom: 1px solid #0c1020;
	font-size: 0.82rem;
	transition: background 0.15s;
}

.top-extra:hover {
	background: rgba(255, 255, 255, 0.02);
}

.top-extra .rank {
	color: var(--text-muted);
	width: 1.8rem;
	flex-shrink: 0;
	font-size: 0.7rem;
}

.top-extra .top-handle {
	color: var(--text-bright);
	flex: 1;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

.top-extra .top-faction {
	font-family: var(--font-display);
	font-size: 0.65rem;
	text-transform: uppercase;
	letter-spacing: 0.04em;
	color: var(--faction-color, var(--text-muted));
}

.top-extra .top-score {
	color: var(--accent-cold);
	width: 2rem;
	text-align: right;
	flex-shrink: 0;
}

/* === Relay Health ======================================================= */
.relay-row {
	display: flex;
	gap: 0.5rem;
	padding: 0.22rem 0;
	font-size: 0.72rem;
	border-bottom: 1px solid #0c1020;
}

.relay-url {
	flex: 1;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
	color: var(--accent-cold);
	opacity: 0.75;
}

.relay-stats {
	white-space: nowrap;
	color: var(--text-muted);
}

.relay-ok .relay-stats {
	color: var(--status-ok);
	opacity: 0.7;
}
.relay-troubled .relay-stats {
	color: var(--status-warn);
}

.relay-updated {
	font-size: 0.66rem;
	color: var(--text-muted);
	margin-top: 0.5rem;
	font-family: var(--font-italic);
	font-style: italic;
}

/* === Rollcall Pulse ===================================================== */
@keyframes candle-flicker {
	0%,
	100% {
		opacity: 1;
	}
	25% {
		opacity: 0.65;
	}
	55% {
		opacity: 0.85;
	}
	75% {
		opacity: 0.55;
	}
}

.rollcall-entry {
	display: flex;
	align-items: center;
	gap: 0.6rem;
	padding: 0.3rem 0;
	border-bottom: 1px solid #0c1020;
	font-size: 0.8rem;
}

.candle {
	display: inline-block;
	animation: candle-flicker 2.6s ease-in-out infinite;
	font-size: 0.95rem;
}

.rollcall-time {
	color: var(--accent-amber);
	font-size: 0.78rem;
}

/* === Manifesto Wall ===================================================== */
.manifesto-cards {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: 1rem;
	margin-top: 0.25rem;
}

.manifesto-card {
	background: var(--bg-card);
	border: 1px solid var(--border);
	border-top: 2px solid var(--faction-color, var(--border));
	padding: 0.8rem 0.9rem 0.75rem;
	transition:
		transform 0.15s ease,
		box-shadow 0.15s ease;
}

.manifesto-card:hover {
	transform: translateY(-3px);
	box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);
}

.manifesto-faction {
	font-family: var(--font-display);
	font-size: 0.68rem;
	color: var(--faction-color, var(--text-dim));
	text-transform: uppercase;
	letter-spacing: 0.07em;
	margin-bottom: 0.45rem;
}

.manifesto-author {
	color: var(--text-bright);
	font-size: 0.88rem;
	font-weight: 700;
}

.manifesto-time {
	font-size: 0.7rem;
	color: var(--text-muted);
	margin-top: 0.35rem;
}

/* === Silence Watch ====================================================== */
.at-risk-row {
	display: flex;
	align-items: baseline;
	gap: 0.5rem;
	padding: 0.28rem 0.4rem 0.28rem 0.6rem;
	border-bottom: 1px solid #0c1020;
	border-left: 2px solid var(--faction-color, var(--border));
	margin-bottom: 0.2rem;
	font-size: 0.82rem;
	transition: background 0.15s;
}

.at-risk-row:hover {
	background: rgba(255, 255, 255, 0.018);
}

.at-risk-handle {
	color: var(--text-bright);
	flex: 1;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

.at-risk-faction {
	font-family: var(--font-display);
	font-size: 0.62rem;
	color: var(--faction-color, var(--text-muted));
	text-transform: uppercase;
	letter-spacing: 0.04em;
}

.at-risk-silence {
	color: var(--status-warn);
	font-size: 0.74rem;
	white-space: nowrap;
	flex-shrink: 0;
}

/* === Boost Ledger ======================================================= */
.boost-row {
	display: flex;
	align-items: baseline;
	gap: 0.5rem;
	padding: 0.3rem 0;
	border-bottom: 1px solid #0c1020;
	font-size: 0.82rem;
}

.boost-handle {
	color: var(--text-bright);
	flex: 1;
}

.boost-faction {
	font-family: var(--font-display);
	font-size: 0.62rem;
	color: var(--faction-color, var(--text-muted));
	text-transform: uppercase;
	letter-spacing: 0.04em;
}

.boost-time {
	color: var(--text-muted);
	font-size: 0.7rem;
	white-space: nowrap;
}

/* === Faction Volume ===================================================== */
.volume-row {
	display: flex;
	align-items: center;
	gap: 0.5rem;
	padding: 0.25rem 0.5rem 0.25rem 0.65rem;
	margin-bottom: 0.3rem;
	border-left: 3px solid var(--faction-color, var(--border));
	background: linear-gradient(
		90deg,
		rgba(255, 255, 255, 0.015) 0%,
		transparent 70%
	);
}

.volume-name {
	font-family: var(--font-display);
	font-size: 0.7rem;
	color: var(--text-dim);
	flex: 1;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

.volume-count {
	color: var(--faction-color, var(--text));
	font-size: 0.9rem;
	font-weight: 700;
	width: 2.6rem;
	text-align: right;
}

/* === Budget Sparkline =================================================== */
.sparkline-container {
	margin-top: 0.5rem;
}

.sparkline {
	display: block;
	width: 100%;
	max-width: 280px;
	height: 54px;
	overflow: visible;
}

.sparkline-label {
	display: block;
	margin-top: 0.45rem;
	color: var(--accent-amber);
	font-size: 0.9rem;
	font-weight: 700;
}

/* === Footer ============================================================= */
footer {
	padding: 0.75rem var(--pad-h);
	border-top: 1px solid var(--border);
	font-size: 0.76rem;
	color: var(--text-muted);
	display: flex;
	gap: 1rem;
	align-items: center;
}

#last-updated {
	color: var(--text-dim);
}

.footer-divider {
	color: #1e2a3a;
}

.footer-tagline {
	font-family: var(--font-italic);
	font-style: italic;
	color: #2a3444;
	letter-spacing: 0.02em;
}

/* === Load Animations ==================================================== */
@keyframes fade-in-up {
	from {
		opacity: 0;
		transform: translateY(7px);
	}
	to {
		opacity: 1;
		transform: translateY(0);
	}
}

.top-grid > section {
	animation: fade-in-up 0.35s ease backwards;
}

.section-events {
	animation-delay: 0s;
}
.section-factions {
	animation-delay: 0.06s;
}
.section-top-signals {
	animation-delay: 0.1s;
}
.section-rollcall {
	animation-delay: 0.14s;
}
.section-relay-health {
	animation-delay: 0.18s;
}

.section-manifesto-wall,
.lower-2col {
	animation: fade-in-up 0.35s ease backwards;
	animation-delay: 0.22s;
}

/* === Mobile ============================================================= */
@media (max-width: 900px) {
	.top-grid {
		grid-template-columns: 1fr;
		grid-template-areas:
			"factions"
			"events"
			"top-signals"
			"rollcall"
			"relay-health";
	}

	.lower-2col {
		grid-template-columns: 1fr;
	}

	.manifesto-cards {
		grid-template-columns: 1fr 1fr;
	}
}

@media (max-width: 540px) {
	:root {
		--pad-h: 1rem;
		--gap: 1rem;
	}

	h1 {
		font-size: 1.5rem;
	}

	.manifesto-cards {
		grid-template-columns: 1fr;
	}

	.stats-strip {
		gap: 1.25rem;
	}
}
