/* =====================================================================
   GRAPHIC ENTERTAINMENT — Dark pulp for dangerous times.
   Main stylesheet. Edit the variables below to retune the whole site.
   ===================================================================== */

/* ---------- Display font (headers, buttons, badges, nav) ----------
   Bebas Neue, self-hosted (SIL Open Font License — free for commercial
   use). ~13 KB WOFF2; font-display: swap means headlines render
   instantly in the fallback font and swap when this file arrives, so a
   slow or failed load can never blank out or break the site.

   The font-weight range 400 700 tells browsers to use this single file
   for bold text too, instead of synthesizing a fake bold.

   The second @font-face (latin-ext) is only downloaded by the browser
   if a page actually contains accented characters (é, ñ, ö, …). */
@font-face {
	font-family: 'Bebas Neue';
	src: url('../fonts/bebasneue-regular.woff2') format('woff2');
	font-weight: 400 700;
	font-style: normal;
	font-display: swap;
	unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
	font-family: 'Bebas Neue';
	src: url('../fonts/bebasneue-regular-ext.woff2') format('woff2');
	font-weight: 400 700;
	font-style: normal;
	font-display: swap;
	unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+1D00-1DBF, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* CUSTOMIZE — switching to Dirty Ego (or any other display font):
   Dirty Ego requires a commercial license from misprintedtype.com for
   use on this site. Once licensed:
     1. Convert the TTF/OTF to WOFF2 (e.g. cloudconvert.com or
        transfonter.org) and save it as assets/fonts/dirtyego.woff2
     2. Uncomment the block below
     3. In :root below, change --ge-font-display to start with
        'Dirty Ego', e.g.:
        --ge-font-display: 'Dirty Ego', 'Bebas Neue', 'Arial Narrow', Arial, sans-serif;
     4. Update the preload filename in ge_preload_fonts() in functions.php

@font-face {
	font-family: 'Dirty Ego';
	src: url('../fonts/dirtyego.woff2') format('woff2');
	font-weight: 400 700;
	font-style: normal;
	font-display: swap;
}
*/

:root {
	/* Palette: black / charcoal / white / blood red / muted gray */
	--ge-black: #0b0b0e;
	--ge-charcoal: #141419;
	--ge-surface: #1c1c23;
	--ge-surface-2: #24242d;
	--ge-border: #2e2e38;
	--ge-red: #b3121f;          /* blood red */
	--ge-red-bright: #e02431;
	--ge-red-deep: #7a0c15;
	--ge-text: #f2f0ee;
	--ge-muted: #a5a3ad;
	--ge-faint: #6f6d78;

	/* Type */
	--ge-font-display: 'Bebas Neue', 'Franklin Gothic Medium', 'Arial Narrow', 'Helvetica Neue', Arial, sans-serif;
	--ge-font-body: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;

	--ge-max-width: 1200px;
	--ge-radius: 6px;
	--ge-shadow: 0 12px 40px rgba(0, 0, 0, 0.55);
}

/* ---------- Reset / base ---------- */

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

html { scroll-behavior: smooth; }

@media (prefers-reduced-motion: reduce) {
	html { scroll-behavior: auto; }
	*, *::before, *::after {
		animation-duration: 0.01ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: 0.01ms !important;
	}
}

body {
	margin: 0;
	background: var(--ge-black);
	color: var(--ge-text);
	font-family: var(--ge-font-body);
	font-size: 17px;
	line-height: 1.65;
	-webkit-font-smoothing: antialiased;
}

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

a { color: var(--ge-text); text-decoration-color: var(--ge-red); text-underline-offset: 3px; }
a:hover { color: var(--ge-red-bright); }

h1, h2, h3, h4, h5 {
	font-family: var(--ge-font-display);
	font-weight: 700;
	letter-spacing: 0.03em;
	text-transform: uppercase;
	line-height: 1.15;
	margin: 0 0 0.5em;
	color: var(--ge-text);
}

h1 { font-size: clamp(2rem, 5vw, 3.4rem); }
h2 { font-size: clamp(1.5rem, 3.5vw, 2.2rem); }
h3 { font-size: 1.15rem; }

p { margin: 0 0 1em; }

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

.ge-skip-link {
	position: absolute; left: -9999px; top: 0; z-index: 999;
	background: var(--ge-red); color: #fff; padding: 10px 18px;
}
.ge-skip-link:focus { left: 0; color: #fff; }

.ge-container { max-width: var(--ge-max-width); margin: 0 auto; padding: 0 20px; }
.ge-narrow { max-width: 780px; }

/* ---------- Buttons ---------- */

.ge-btn {
	display: inline-block;
	font-family: var(--ge-font-display);
	font-size: 0.85rem;
	font-weight: 700;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	text-decoration: none;
	padding: 11px 20px;
	border-radius: var(--ge-radius);
	border: 2px solid transparent;
	cursor: pointer;
	transition: background 0.2s ease, color 0.2s ease, border-color 0.2s ease, transform 0.15s ease;
	line-height: 1.2;
}
.ge-btn:hover { transform: translateY(-2px); }
.ge-btn:focus-visible { outline: 3px solid var(--ge-red-bright); outline-offset: 2px; }

.ge-btn-primary { background: var(--ge-red); color: #fff; }
.ge-btn-primary:hover { background: var(--ge-red-bright); color: #fff; }

.ge-btn-secondary { background: var(--ge-surface-2); color: var(--ge-text); border-color: var(--ge-border); }
.ge-btn-secondary:hover { border-color: var(--ge-red); color: #fff; }

.ge-btn-outline { background: transparent; color: var(--ge-text); border-color: var(--ge-red); }
.ge-btn-outline:hover { background: var(--ge-red); color: #fff; }

.ge-btn-ghost { background: transparent; color: var(--ge-muted); border-color: var(--ge-border); }
.ge-btn-ghost:hover { color: var(--ge-text); border-color: var(--ge-muted); }

.ge-btn-disabled { background: var(--ge-surface); color: var(--ge-faint); cursor: default; }
.ge-btn-disabled:hover { transform: none; }

.ge-btn-lg { font-size: 1rem; padding: 15px 30px; }

/* ---------- Announcement bar ---------- */

.ge-announcement {
	background: linear-gradient(90deg, var(--ge-red-deep), var(--ge-red) 50%, var(--ge-red-deep));
	border-bottom: 1px solid var(--ge-red);
}
.ge-announcement-inner {
	display: flex; align-items: center; justify-content: center;
	position: relative; padding-top: 9px; padding-bottom: 9px;
}
.ge-announcement-text {
	color: #fff;
	font-family: var(--ge-font-display);
	font-size: 0.9rem; letter-spacing: 0.1em; text-transform: uppercase;
	text-decoration: none; text-align: center;
	padding-right: 28px; /* keep clear of the dismiss button on mobile */
}
a.ge-announcement-text:hover { color: #fff; text-decoration: underline; text-decoration-color: #fff; }
.ge-announcement-dismiss {
	position: absolute; right: 12px; top: 50%;
	transform: translateY(-50%);
	background: none; border: 0; padding: 4px 10px;
	color: rgba(255, 255, 255, 0.75);
	font-size: 1.25rem; line-height: 1; cursor: pointer;
}
.ge-announcement-dismiss:hover { color: #fff; }
.ge-announcement-dismiss:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }

/* ---------- Header / navigation ---------- */

.ge-header {
	position: sticky; top: 0; z-index: 100;
	background: rgba(11, 11, 14, 0.94);
	backdrop-filter: blur(8px);
	border-bottom: 1px solid var(--ge-border);
}

.ge-header-inner {
	display: flex; align-items: center; justify-content: space-between;
	gap: 24px; min-height: 68px; flex-wrap: wrap; padding-top: 8px; padding-bottom: 8px;
}

.ge-logo-text { text-decoration: none; display: block; }
.ge-logo-name {
	display: block;
	font-family: var(--ge-font-display);
	font-size: 1.35rem; font-weight: 700;
	letter-spacing: 0.1em; text-transform: uppercase;
	color: var(--ge-text);
}
.ge-logo-name::after { content: '.'; color: var(--ge-red-bright); }
.ge-logo-tagline {
	display: block; font-size: 0.7rem; letter-spacing: 0.14em;
	text-transform: uppercase; color: var(--ge-muted);
}

.ge-nav-toggle {
	display: none; background: none; border: 2px solid var(--ge-border);
	border-radius: var(--ge-radius); padding: 9px 11px; cursor: pointer;
}
.ge-nav-toggle-bar {
	display: block; width: 22px; height: 2px; background: var(--ge-text);
	margin: 4px 0; transition: transform 0.2s ease, opacity 0.2s ease;
}
.ge-nav-toggle[aria-expanded="true"] .ge-nav-toggle-bar:nth-child(1) { transform: translateY(6px) rotate(45deg); }
.ge-nav-toggle[aria-expanded="true"] .ge-nav-toggle-bar:nth-child(2) { opacity: 0; }
.ge-nav-toggle[aria-expanded="true"] .ge-nav-toggle-bar:nth-child(3) { transform: translateY(-6px) rotate(-45deg); }

.ge-nav-list {
	list-style: none; margin: 0; padding: 0;
	display: flex; flex-wrap: wrap; gap: 2px;
}
.ge-nav-list li { position: relative; }
.ge-nav-list a {
	display: block; padding: 8px 11px;
	font-family: var(--ge-font-display);
	font-size: 0.8rem; font-weight: 700;
	letter-spacing: 0.07em; text-transform: uppercase;
	color: var(--ge-muted); text-decoration: none;
	border-bottom: 2px solid transparent;
}
.ge-nav-list a:hover,
.ge-nav-list .current-menu-item > a,
.ge-nav-list .current_page_item > a {
	color: var(--ge-text); border-bottom-color: var(--ge-red);
}

/* Simple dropdown support for nested menus */
.ge-nav-list .sub-menu {
	list-style: none; margin: 0; padding: 6px 0;
	position: absolute; left: 0; top: 100%; min-width: 200px;
	background: var(--ge-charcoal); border: 1px solid var(--ge-border);
	border-radius: var(--ge-radius); display: none; z-index: 50;
}
.ge-nav-list li:hover > .sub-menu,
.ge-nav-list li:focus-within > .sub-menu { display: block; }

@media (max-width: 980px) {
	.ge-nav-toggle { display: block; }
	.ge-nav { display: none; width: 100%; }
	.ge-nav.is-open { display: block; }
	.ge-nav-list { flex-direction: column; padding-bottom: 12px; }
	.ge-nav-list a { padding: 12px 8px; font-size: 0.95rem; border-bottom: 1px solid var(--ge-border); }
	.ge-nav-list .sub-menu { position: static; display: block; border: 0; background: transparent; padding-left: 16px; }
}

/* ---------- Sections ---------- */

.ge-section { padding: 64px 0; }
.ge-section-dark { background: var(--ge-charcoal); border-top: 1px solid var(--ge-border); border-bottom: 1px solid var(--ge-border); }

.ge-section-header {
	display: flex; align-items: baseline; justify-content: space-between;
	gap: 16px; flex-wrap: wrap; margin-bottom: 28px;
}
.ge-section-title { margin-bottom: 0; }
.ge-section-title::after {
	content: ''; display: block; width: 56px; height: 3px;
	background: var(--ge-red); margin-top: 10px;
}
.ge-section-sub { color: var(--ge-muted); margin: 6px 0 0; width: 100%; }
.ge-section-link {
	font-family: var(--ge-font-display); font-size: 0.85rem;
	letter-spacing: 0.08em; text-transform: uppercase;
	color: var(--ge-muted); text-decoration: none;
}
.ge-section-link:hover { color: var(--ge-red-bright); }

.ge-eyebrow {
	font-family: var(--ge-font-display);
	font-size: 0.78rem; font-weight: 700;
	letter-spacing: 0.2em; text-transform: uppercase;
	color: var(--ge-red-bright); margin-bottom: 10px;
}

/* "Read Dangerously." — the action slogan. Accent line used in the
   Dispatch, samples, merch, and 404 sections. */
.ge-slogan {
	font-family: var(--ge-font-display);
	font-size: 1rem; font-weight: 700;
	letter-spacing: 0.22em; text-transform: uppercase;
	color: var(--ge-red-bright);
	margin: 18px 0 0;
}

.ge-page-header { padding: 56px 0 8px; }
.ge-page-title::after {
	content: ''; display: block; width: 56px; height: 3px;
	background: var(--ge-red); margin-top: 12px;
}
.ge-page-sub { color: var(--ge-muted); max-width: 700px; }

/* ---------- Hero ---------- */

.ge-hero {
	position: relative;
	background:
		radial-gradient(ellipse at 20% 0%, rgba(179, 18, 31, 0.14), transparent 55%),
		radial-gradient(ellipse at 90% 100%, rgba(179, 18, 31, 0.08), transparent 50%),
		linear-gradient(180deg, var(--ge-charcoal), var(--ge-black));
	border-bottom: 1px solid var(--ge-border);
	overflow: hidden;
}

.ge-hero-slide {
	display: none;
	max-width: var(--ge-max-width); margin: 0 auto;
	padding: 56px 20px 64px;
	grid-template-columns: minmax(260px, 420px) 1fr;
	gap: 48px; align-items: center;
}
.ge-hero-slide.is-active { display: grid; animation: ge-fade 0.6s ease; }

@keyframes ge-fade {
	from { opacity: 0; transform: translateY(8px); }
	to { opacity: 1; transform: none; }
}

.ge-hero-media { position: relative; }
.ge-hero-cover, .ge-hero-media .ge-cover-img, .ge-hero-media .ge-cover-placeholder {
	border-radius: var(--ge-radius);
	box-shadow: var(--ge-shadow);
}

.ge-hero-title { font-size: clamp(2rem, 4.5vw, 3.2rem); margin-bottom: 8px; }
.ge-hero-title a { color: var(--ge-text); text-decoration: none; }
.ge-hero-title a:hover { color: var(--ge-red-bright); }

.ge-hero-series { font-family: var(--ge-font-display); text-transform: uppercase; letter-spacing: 0.08em; color: var(--ge-muted); margin-bottom: 4px; }
.ge-hero-genre { color: var(--ge-red-bright); font-size: 0.9rem; letter-spacing: 0.05em; text-transform: uppercase; font-family: var(--ge-font-display); }
.ge-hero-genre a { color: inherit; text-decoration: none; }
.ge-hero-hook { color: var(--ge-muted); font-size: 1.08rem; max-width: 56ch; }

.ge-hero-buttons { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 20px; }

.ge-hero-nav {
	display: flex; gap: 10px; justify-content: center;
	padding: 0 0 28px;
}
.ge-hero-dot {
	width: 12px; height: 12px; border-radius: 50%;
	border: 2px solid var(--ge-faint); background: transparent;
	cursor: pointer; padding: 0;
}
.ge-hero-dot.is-active { background: var(--ge-red); border-color: var(--ge-red); }
.ge-hero-dot:focus-visible { outline: 2px solid var(--ge-red-bright); outline-offset: 2px; }

.ge-hero-static .ge-hero-content-wide { text-align: center; max-width: 800px; margin: 0 auto; }
.ge-hero-static .ge-hero-buttons { justify-content: center; }
.ge-hero-static .ge-hero-hook { margin-left: auto; margin-right: auto; }

@media (max-width: 860px) {
	.ge-hero-slide { grid-template-columns: 1fr; gap: 28px; padding: 36px 20px 44px; }
	.ge-hero-media { max-width: 320px; }
}

/* ---------- Covers & placeholders ---------- */

.ge-cover-img { width: 100%; border-radius: var(--ge-radius); object-fit: cover; aspect-ratio: 2 / 3; }

.ge-cover-placeholder {
	aspect-ratio: 2 / 3; width: 100%;
	border-radius: var(--ge-radius);
	display: flex; flex-direction: column; justify-content: space-between;
	padding: 18px; text-align: center;
	border: 1px solid var(--ge-border);
	background: linear-gradient(160deg, var(--ge-surface) 0%, var(--ge-charcoal) 60%, var(--ge-black) 100%);
	position: relative; overflow: hidden;
}
.ge-cover-placeholder::before {
	content: ''; position: absolute; inset: 0;
	background: radial-gradient(ellipse at 50% 115%, rgba(179, 18, 31, 0.35), transparent 60%);
}
.ge-cover-variant-2 { background: linear-gradient(200deg, var(--ge-surface-2) 0%, var(--ge-charcoal) 55%, var(--ge-black) 100%); }
.ge-cover-variant-3::before { background: radial-gradient(ellipse at 0% 0%, rgba(179, 18, 31, 0.28), transparent 55%); }
.ge-cover-variant-4::before { background: radial-gradient(ellipse at 100% 20%, rgba(179, 18, 31, 0.3), transparent 55%); }

.ge-cover-placeholder-brand {
	position: relative; font-family: var(--ge-font-display);
	font-size: 0.62rem; letter-spacing: 0.24em; text-transform: uppercase;
	color: var(--ge-faint);
}
.ge-cover-placeholder-title {
	position: relative; font-family: var(--ge-font-display);
	font-size: 1.25rem; font-weight: 700; letter-spacing: 0.05em;
	text-transform: uppercase; color: var(--ge-text); line-height: 1.2;
}
.ge-cover-placeholder-note {
	position: relative; font-size: 0.65rem; letter-spacing: 0.18em;
	text-transform: uppercase; color: var(--ge-red-bright);
}

/* ---------- Badges ---------- */

.ge-badges { display: flex; flex-wrap: wrap; gap: 6px; margin: 10px 0; }
.ge-badge {
	font-family: var(--ge-font-display);
	font-size: 0.66rem; font-weight: 700;
	letter-spacing: 0.1em; text-transform: uppercase;
	padding: 4px 9px; border-radius: 3px;
	background: var(--ge-surface-2); color: var(--ge-muted);
	border: 1px solid var(--ge-border);
}
.ge-badge-audiobook { color: var(--ge-text); border-color: var(--ge-faint); }
.ge-badge-coming-soon { background: var(--ge-red-deep); border-color: var(--ge-red); color: #fff; }

/* ---------- Book cards ---------- */

.ge-book-grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
	gap: 28px;
}

.ge-book-card {
	background: var(--ge-surface);
	border: 1px solid var(--ge-border);
	border-radius: var(--ge-radius);
	overflow: hidden;
	display: flex; flex-direction: column;
	transition: transform 0.25s ease, box-shadow 0.25s ease, border-color 0.25s ease;
}
.ge-book-card:hover {
	transform: translateY(-6px);
	box-shadow: var(--ge-shadow);
	border-color: var(--ge-red);
}

.ge-book-card-cover { display: block; position: relative; }
.ge-book-card-cover .ge-cover-img,
.ge-book-card-cover .ge-cover-placeholder { border-radius: 0; }
.ge-book-card-cover .ge-cover-img { transition: transform 0.4s ease; }
.ge-book-card:hover .ge-cover-img { transform: scale(1.04); }
.ge-book-card-cover { overflow: hidden; }

.ge-cover-ribbon {
	position: absolute; top: 26px; right: -34px;
	transform: rotate(45deg);
	background: var(--ge-red); color: #fff;
	font-family: var(--ge-font-display);
	font-size: 0.62rem; font-weight: 700;
	letter-spacing: 0.12em; text-transform: uppercase;
	padding: 5px 40px;
}

.ge-book-card-body { padding: 18px 18px 22px; display: flex; flex-direction: column; flex: 1; }
.ge-book-card-title { margin-bottom: 2px; font-size: 1.1rem; }
.ge-book-card-title a { color: var(--ge-text); text-decoration: none; }
.ge-book-card-title a:hover { color: var(--ge-red-bright); }
.ge-book-card-byline { color: var(--ge-muted); font-size: 0.88rem; margin-bottom: 2px; }
.ge-book-card-series { font-family: var(--ge-font-display); font-size: 0.75rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ge-faint); margin-bottom: 2px; }
.ge-book-card-genre { color: var(--ge-red-bright); font-family: var(--ge-font-display); font-size: 0.72rem; letter-spacing: 0.08em; text-transform: uppercase; margin-bottom: 8px; }
.ge-book-card-genre a { color: inherit; text-decoration: none; }
.ge-book-card-hook { color: var(--ge-muted); font-size: 0.9rem; flex: 1; }

.ge-book-buttons { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
.ge-book-buttons-card .ge-btn { font-size: 0.72rem; padding: 8px 13px; }

/* ---------- Coming soon cards ---------- */

.ge-coming-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 460px), 1fr)); gap: 28px; }

.ge-coming-card {
	display: grid; grid-template-columns: 180px 1fr; gap: 24px;
	background:
		radial-gradient(ellipse at 100% 0%, rgba(179, 18, 31, 0.12), transparent 55%),
		var(--ge-surface);
	border: 1px solid var(--ge-border);
	border-radius: var(--ge-radius);
	padding: 26px;
	transition: border-color 0.25s ease, box-shadow 0.25s ease;
}
.ge-coming-card:hover { border-color: var(--ge-red); box-shadow: var(--ge-shadow); }
.ge-coming-title { font-size: 1.5rem; margin-bottom: 4px; }
.ge-coming-title a { color: var(--ge-text); text-decoration: none; }
.ge-coming-title a:hover { color: var(--ge-red-bright); }
.ge-coming-genre { color: var(--ge-red-bright); font-family: var(--ge-font-display); font-size: 0.78rem; letter-spacing: 0.1em; text-transform: uppercase; }
.ge-coming-hook { color: var(--ge-muted); }

@media (max-width: 640px) {
	.ge-coming-card { grid-template-columns: 1fr; }
	.ge-coming-cover { max-width: 220px; }
}

/* ---------- Series cards ---------- */

.ge-series-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 250px), 1fr)); gap: 24px; }

.ge-series-card {
	background: linear-gradient(180deg, var(--ge-surface), var(--ge-charcoal));
	border: 1px solid var(--ge-border);
	border-top: 3px solid var(--ge-red);
	border-radius: var(--ge-radius);
	padding: 26px;
	display: flex; flex-direction: column; gap: 4px;
	transition: transform 0.25s ease, box-shadow 0.25s ease;
}
.ge-series-card:hover { transform: translateY(-5px); box-shadow: var(--ge-shadow); }
.ge-series-title a { color: var(--ge-text); text-decoration: none; }
.ge-series-title a:hover { color: var(--ge-red-bright); }
.ge-series-desc { color: var(--ge-muted); font-size: 0.95rem; flex: 1; }
.ge-series-card .ge-btn { align-self: flex-start; margin-top: 10px; }

/* ---------- Genre tiles ---------- */

.ge-genre-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 260px), 1fr)); gap: 20px; }

.ge-genre-tile {
	position: relative; display: flex; flex-direction: column; gap: 6px;
	min-height: 160px; padding: 24px;
	border-radius: var(--ge-radius);
	border: 1px solid var(--ge-border);
	text-decoration: none; overflow: hidden;
	background:
		radial-gradient(ellipse at 15% 110%, rgba(179, 18, 31, 0.28), transparent 60%),
		linear-gradient(165deg, var(--ge-surface-2), var(--ge-black));
	transition: transform 0.25s ease, border-color 0.25s ease, box-shadow 0.25s ease;
}
.ge-genre-tile:nth-child(3n)   { background: radial-gradient(ellipse at 100% 0%, rgba(179, 18, 31, 0.24), transparent 55%), linear-gradient(200deg, var(--ge-surface-2), var(--ge-black)); }
.ge-genre-tile:nth-child(3n+2) { background: radial-gradient(ellipse at 50% -30%, rgba(179, 18, 31, 0.2), transparent 60%), linear-gradient(180deg, var(--ge-surface), var(--ge-black)); }
.ge-genre-tile:hover { transform: translateY(-5px); border-color: var(--ge-red); box-shadow: var(--ge-shadow); }

.ge-genre-tile-name {
	font-family: var(--ge-font-display);
	font-size: 1.25rem; font-weight: 700;
	letter-spacing: 0.06em; text-transform: uppercase;
	color: var(--ge-text);
}
.ge-genre-tile-desc { color: var(--ge-muted); font-size: 0.9rem; flex: 1; }
.ge-genre-tile-browse {
	font-family: var(--ge-font-display);
	font-size: 0.76rem; letter-spacing: 0.12em; text-transform: uppercase;
	color: var(--ge-red-bright);
}

/* ---------- Audiobooks section ---------- */

.ge-audiobooks {
	background:
		radial-gradient(ellipse at 85% 20%, rgba(179, 18, 31, 0.14), transparent 55%),
		var(--ge-black);
}
.ge-audiobooks-inner { display: grid; grid-template-columns: 1.1fr 1fr; gap: 48px; align-items: center; }
.ge-audiobooks-covers { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; align-items: end; }
.ge-audiobooks-cover { display: block; transition: transform 0.25s ease; }
.ge-audiobooks-cover:hover { transform: translateY(-6px); }
.ge-audiobooks-cover:nth-child(even) { transform: translateY(14px); }
.ge-audiobooks-cover:nth-child(even):hover { transform: translateY(8px); }

@media (max-width: 860px) {
	.ge-audiobooks-inner { grid-template-columns: 1fr; }
}

/* ---------- Samples teaser ---------- */

.ge-samples-teaser-inner {
	display: flex; align-items: center; justify-content: space-between;
	gap: 32px; flex-wrap: wrap;
}
.ge-samples-teaser p { color: var(--ge-muted); max-width: 56ch; margin-bottom: 0; }

/* ---------- Media teasers / gallery ---------- */

.ge-media-teaser-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 230px), 1fr)); gap: 20px; }

.ge-media-teaser {
	display: flex; flex-direction: column; gap: 6px;
	padding: 24px; min-height: 130px;
	background: var(--ge-surface);
	border: 1px solid var(--ge-border);
	border-left: 3px solid var(--ge-red);
	border-radius: var(--ge-radius);
	text-decoration: none;
	transition: transform 0.25s ease, border-color 0.25s ease;
}
a.ge-media-teaser:hover { transform: translateY(-4px); border-color: var(--ge-red); }
.ge-media-teaser-name { font-family: var(--ge-font-display); font-size: 1.05rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--ge-text); }
.ge-media-teaser-desc { color: var(--ge-muted); font-size: 0.9rem; }
.ge-media-teaser-soon { font-family: var(--ge-font-display); font-size: 0.7rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ge-red-bright); }
.ge-media-empty { color: var(--ge-muted); }

.ge-gallery-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); gap: 20px; }
.ge-gallery-item { margin: 0; }
.ge-gallery-item a { display: block; transition: transform 0.25s ease; }
.ge-gallery-item a:hover { transform: translateY(-5px); }
.ge-gallery-item figcaption {
	font-family: var(--ge-font-display); font-size: 0.75rem;
	letter-spacing: 0.08em; text-transform: uppercase;
	color: var(--ge-muted); margin-top: 8px; text-align: center;
}

/* ---------- Trailers (click-to-play) ---------- */

.ge-trailer {
	position: relative; aspect-ratio: 16 / 9;
	background: var(--ge-surface);
	border: 1px solid var(--ge-border);
	border-radius: var(--ge-radius);
	overflow: hidden; cursor: pointer;
}
.ge-trailer-poster { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform 0.4s ease, opacity 0.3s ease; }
.ge-trailer:hover .ge-trailer-poster { transform: scale(1.03); opacity: 0.85; }

.ge-play-btn {
	position: absolute; top: 50%; left: 50%;
	transform: translate(-50%, -50%);
	width: 76px; height: 76px;
	background: none; border: 0; padding: 0; cursor: pointer;
	transition: transform 0.2s ease;
}
.ge-play-btn:hover { transform: translate(-50%, -50%) scale(1.1); }
.ge-play-btn:focus-visible { outline: 3px solid var(--ge-red-bright); outline-offset: 4px; border-radius: 50%; }
.ge-play-btn svg { width: 100%; height: 100%; }
.ge-play-circle { fill: rgba(11, 11, 14, 0.7); stroke: var(--ge-red-bright); stroke-width: 3; }
.ge-play-triangle { fill: var(--ge-red-bright); }

.ge-trailer-label {
	position: absolute; left: 16px; bottom: 12px;
	font-family: var(--ge-font-display);
	font-size: 0.75rem; font-weight: 700;
	letter-spacing: 0.14em; text-transform: uppercase;
	color: #fff; background: rgba(11, 11, 14, 0.72);
	padding: 6px 12px; border-radius: 3px;
	pointer-events: none;
}

.ge-trailer iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }

.ge-hero-trailer { box-shadow: var(--ge-shadow); }
.ge-book-trailer { max-width: 900px; }

.ge-trailer-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 300px), 1fr)); gap: 24px; }
.ge-trailer-item-title { margin-top: 10px; font-family: var(--ge-font-display); text-transform: uppercase; letter-spacing: 0.06em; font-size: 0.9rem; }
.ge-trailer-item-title a { color: var(--ge-text); text-decoration: none; }
.ge-trailer-item-title a:hover { color: var(--ge-red-bright); }

.ge-featured-trailer-caption { margin-top: 12px; color: var(--ge-muted); }
.ge-featured-trailer-caption a { color: var(--ge-text); }

/* ---------- Motion covers (individual book pages only) ---------- */

.ge-motion-cover {
	position: relative; border-radius: var(--ge-radius);
	overflow: hidden; box-shadow: var(--ge-shadow);
	aspect-ratio: 2 / 3; background: var(--ge-surface);
}
.ge-motion-cover video { width: 100%; height: 100%; object-fit: cover; display: block; }

.ge-motion-toggle {
	position: absolute; right: 12px; bottom: 12px;
	width: 40px; height: 40px; border-radius: 50%;
	background: rgba(11, 11, 14, 0.75);
	border: 1px solid var(--ge-border);
	color: #fff; cursor: pointer; font-size: 0.7rem;
	display: flex; align-items: center; justify-content: center;
}
.ge-motion-toggle:hover { border-color: var(--ge-red); }
.ge-motion-toggle:focus-visible { outline: 2px solid var(--ge-red-bright); outline-offset: 2px; }
.ge-motion-toggle .ge-motion-toggle-play { display: none; }
.ge-motion-toggle[aria-pressed="true"] .ge-motion-toggle-play { display: inline; }
.ge-motion-toggle[aria-pressed="true"] .ge-motion-toggle-pause { display: none; }

/* ---------- Single book page ---------- */

.ge-book-hero {
	background:
		radial-gradient(ellipse at 15% 0%, rgba(179, 18, 31, 0.15), transparent 55%),
		linear-gradient(180deg, var(--ge-charcoal), var(--ge-black));
	border-bottom: 1px solid var(--ge-border);
	padding: 56px 0;
}
.ge-book-hero-inner {
	display: grid; grid-template-columns: minmax(240px, 380px) 1fr;
	gap: 48px; align-items: start;
}
.ge-book-title { margin-bottom: 4px; }
.ge-book-byline { color: var(--ge-muted); font-size: 1.05rem; }
.ge-book-genre { color: var(--ge-red-bright); font-family: var(--ge-font-display); letter-spacing: 0.08em; text-transform: uppercase; font-size: 0.85rem; }
.ge-book-genre a { color: inherit; text-decoration: none; }
.ge-book-series a { color: inherit; text-decoration: none; }
.ge-book-hook { font-size: 1.1rem; color: var(--ge-muted); max-width: 60ch; }
.ge-book-release { color: var(--ge-muted); font-size: 0.95rem; }

@media (max-width: 820px) {
	.ge-book-hero-inner { grid-template-columns: 1fr; }
	.ge-book-hero-media { max-width: 300px; }
}

.ge-pull-quote {
	margin: 0; padding: 8px 0 8px 24px;
	border-left: 4px solid var(--ge-red);
	font-size: 1.25rem; font-style: italic; color: var(--ge-text);
}
.ge-review-list .ge-pull-quote { margin-bottom: 28px; }
.ge-review-list .ge-pull-quote:last-child { margin-bottom: 0; }
.ge-review-cite {
	display: block; margin-top: 10px;
	font-style: normal;
	font-family: var(--ge-font-display);
	font-size: 0.78rem; letter-spacing: 0.12em; text-transform: uppercase;
	color: var(--ge-red-bright);
}
.ge-review-cite::before { content: '— '; }

.ge-book-info-list { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 18px; margin: 0; }
.ge-book-info-list dt {
	font-family: var(--ge-font-display); font-size: 0.72rem;
	letter-spacing: 0.14em; text-transform: uppercase; color: var(--ge-faint);
}
.ge-book-info-list dd { margin: 2px 0 0; color: var(--ge-text); }

/* ---------- Newsletter utility pages (thanks-confirm / welcome) ---------- */

.ge-steps {
	margin: 8px 0 32px; padding: 0;
	list-style: none;
	counter-reset: ge-step;
}
.ge-steps li {
	position: relative;
	counter-increment: ge-step;
	padding: 0 0 18px 52px;
	color: var(--ge-muted);
}
.ge-steps li::before {
	content: counter(ge-step);
	position: absolute; left: 0; top: -2px;
	width: 34px; height: 34px;
	display: flex; align-items: center; justify-content: center;
	background: var(--ge-red);
	color: #fff;
	font-family: var(--ge-font-display);
	font-size: 1rem; font-weight: 700;
	border-radius: 50%;
}

/* ---------- Authors ---------- */

.ge-author-header { max-width: 780px; margin-bottom: 32px; }
.ge-author-name::after { content: ''; display: block; width: 44px; height: 3px; background: var(--ge-red); margin-top: 10px; }
.ge-author-bio { color: var(--ge-muted); font-size: 1.05rem; }
.ge-author-books-title { color: var(--ge-muted); margin-bottom: 18px; }

/* ---------- About ---------- */

.ge-about {
	background:
		radial-gradient(ellipse at 50% 120%, rgba(179, 18, 31, 0.16), transparent 60%),
		var(--ge-black);
	text-align: center;
}
.ge-about-inner { max-width: 820px; }
.ge-about-copy { font-size: 1.25rem; line-height: 1.7; color: var(--ge-text); }

/* ---------- Newsletter / Dispatch ---------- */

.ge-dispatch {
	background:
		radial-gradient(ellipse at 50% 0%, rgba(179, 18, 31, 0.2), transparent 55%),
		var(--ge-charcoal);
	border-top: 1px solid var(--ge-border);
	border-bottom: 1px solid var(--ge-border);
	text-align: center;
}
.ge-dispatch-inner { max-width: 720px; }
.ge-dispatch-copy { color: var(--ge-muted); }

.ge-dispatch-fields { display: flex; gap: 10px; flex-wrap: wrap; justify-content: center; margin-top: 24px; }
.ge-dispatch-fields input {
	flex: 1 1 200px; max-width: 280px;
	padding: 12px 16px;
	background: var(--ge-black);
	border: 1px solid var(--ge-border);
	border-radius: var(--ge-radius);
	color: var(--ge-text);
	font-size: 0.95rem;
}
.ge-dispatch-fields input:focus { outline: 2px solid var(--ge-red); border-color: var(--ge-red); }
.ge-dispatch-fields input::placeholder { color: var(--ge-faint); }
.ge-dispatch-note { color: var(--ge-faint); font-size: 0.8rem; margin-top: 14px; }

/* Signup status line (success/error) + honeypot field. The honeypot is
   moved off-screen rather than display:none — bots skip fields they can
   see are hidden. */
.ge-dispatch-status { margin-top: 14px; font-size: 0.9rem; color: var(--ge-muted); }
.ge-dispatch-status.is-error { color: var(--ge-red-bright); }
.ge-hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }

/* ---------- News ---------- */

.ge-news-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 300px), 1fr)); gap: 28px; }

.ge-news-card {
	background: var(--ge-surface);
	border: 1px solid var(--ge-border);
	border-radius: var(--ge-radius);
	overflow: hidden;
	transition: transform 0.25s ease, border-color 0.25s ease;
}
.ge-news-card:hover { transform: translateY(-4px); border-color: var(--ge-red); }
.ge-news-card-image img { width: 100%; aspect-ratio: 16 / 9; object-fit: cover; }
.ge-news-card-body { padding: 20px; }
.ge-news-card-date { font-family: var(--ge-font-display); font-size: 0.72rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ge-faint); margin-bottom: 6px; }
.ge-news-card-title a { color: var(--ge-text); text-decoration: none; }
.ge-news-card-title a:hover { color: var(--ge-red-bright); }
.ge-news-card-excerpt { color: var(--ge-muted); font-size: 0.92rem; }
.ge-news-card-more { font-family: var(--ge-font-display); font-size: 0.78rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--ge-red-bright); text-decoration: none; }

/* ---------- Content / pages ---------- */

.ge-main { min-height: 60vh; }
.ge-entry-content { color: var(--ge-text); }
.ge-entry-content a { color: var(--ge-red-bright); }
.ge-entry-content img { border-radius: var(--ge-radius); }
.ge-entry-content blockquote { border-left: 4px solid var(--ge-red); margin: 1.5em 0; padding: 4px 0 4px 20px; font-style: italic; color: var(--ge-muted); }
.ge-page-thumbnail { margin-bottom: 28px; }
.ge-page-thumbnail img { border-radius: var(--ge-radius); }
.ge-page { padding-bottom: 64px; }
.ge-news-single { padding-bottom: 64px; }
.ge-404 { padding-bottom: 64px; }

.ge-post-nav { display: flex; justify-content: space-between; gap: 20px; margin: 40px 0; flex-wrap: wrap; }
.ge-post-nav a { color: var(--ge-muted); text-decoration: none; }
.ge-post-nav a:hover { color: var(--ge-red-bright); }

.ge-pagination { margin: 48px 0; text-align: center; }
.ge-pagination .nav-links { display: flex; gap: 8px; justify-content: center; flex-wrap: wrap; }
.ge-pagination .page-numbers {
	display: inline-block; padding: 9px 15px;
	background: var(--ge-surface); border: 1px solid var(--ge-border);
	border-radius: var(--ge-radius); color: var(--ge-muted);
	text-decoration: none; font-family: var(--ge-font-display);
}
.ge-pagination .page-numbers.current { background: var(--ge-red); border-color: var(--ge-red); color: #fff; }
.ge-pagination a.page-numbers:hover { border-color: var(--ge-red); color: var(--ge-text); }

/* ---------- Footer ---------- */

.ge-footer {
	background: var(--ge-black);
	border-top: 1px solid var(--ge-border);
	padding: 56px 0 24px;
	margin-top: 0;
}
.ge-footer-grid {
	display: grid;
	grid-template-columns: 1.4fr 1fr 1fr 1.2fr;
	gap: 40px;
}
@media (max-width: 900px) { .ge-footer-grid { grid-template-columns: 1fr 1fr; } }
@media (max-width: 540px) { .ge-footer-grid { grid-template-columns: 1fr; } }

.ge-footer-logo {
	font-family: var(--ge-font-display);
	font-size: 1.25rem; font-weight: 700;
	letter-spacing: 0.1em; text-transform: uppercase;
	margin-bottom: 4px;
}
.ge-footer-logo::after { content: '.'; color: var(--ge-red-bright); }
.ge-footer-tagline { color: var(--ge-muted); font-size: 0.9rem; }

.ge-footer-heading {
	font-size: 0.82rem; letter-spacing: 0.16em;
	color: var(--ge-faint); margin-bottom: 14px;
}

.ge-footer-links { list-style: none; margin: 0; padding: 0; }
.ge-footer-links li { margin-bottom: 8px; }
.ge-footer-links a { color: var(--ge-muted); text-decoration: none; font-size: 0.92rem; }
.ge-footer-links a:hover { color: var(--ge-red-bright); }

.ge-social-links { list-style: none; margin: 18px 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: 6px; }
.ge-social-links a {
	display: inline-block; padding: 6px 12px;
	border: 1px solid var(--ge-border); border-radius: var(--ge-radius);
	color: var(--ge-muted); text-decoration: none;
	font-family: var(--ge-font-display); font-size: 0.72rem;
	letter-spacing: 0.1em; text-transform: uppercase;
}
.ge-social-links a:hover { border-color: var(--ge-red); color: var(--ge-text); }

.ge-footer-cta p { color: var(--ge-muted); font-size: 0.92rem; }

.ge-footer-bottom {
	margin-top: 48px; padding-top: 20px;
	border-top: 1px solid var(--ge-border);
	color: var(--ge-faint); font-size: 0.82rem;
	text-align: center;
}
.ge-affiliate-disclosure { margin-bottom: 6px; }

/* ---------- Samples: library, cards, and the sample reader ---------- */

/* Sample cards ride on the book-card styles; these are the extras. */
.ge-cover-ribbon-sample { background: var(--ge-red); }
.ge-sample-badges { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 10px; }

/* Sample page hero: reuses the book hero; jump buttons get breathing room. */
.ge-sample-jump { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 20px; }
.ge-sample-title-link { color: inherit; text-decoration: none; }
.ge-sample-title-link:hover { color: var(--ge-red-bright); }

/* The book-like reading area. Deliberately different from the rest of
   the site: a warm paper-dark panel, serif type at a comfortable
   measure, generous leading, and a drop cap — a page, not a webpage. */
.ge-sample-reader {
	background: linear-gradient(180deg, #1e1b18, #191714);
	border: 1px solid var(--ge-border);
	border-radius: var(--ge-radius);
	box-shadow: var(--ge-shadow);
	padding: clamp(28px, 6vw, 64px);
	font-family: Georgia, 'Times New Roman', serif;
	font-size: 1.15rem;
	line-height: 1.85;
	color: #e8e2d8;
}
.ge-sample-reader p { margin: 0 0 1.4em; }
.ge-sample-reader p:last-of-type { margin-bottom: 0; }
.ge-sample-reader > p:first-of-type::first-letter {
	font-family: var(--ge-font-display);
	font-size: 3.4em;
	line-height: 0.8;
	float: left;
	padding: 0.08em 0.12em 0 0;
	color: var(--ge-red-bright);
}
.ge-sample-end-mark {
	text-align: center;
	color: var(--ge-red);
	font-size: 1.4rem;
	margin-top: 2em;
}
.ge-sample-continues {
	text-align: center;
	color: var(--ge-faint);
	font-size: 0.9rem;
	margin-top: 14px;
	font-style: italic;
}

/* Optional secondary Kindle preview embed. */
.ge-sample-embed iframe {
	width: 100%;
	height: 600px;
	border: 1px solid var(--ge-border);
	border-radius: var(--ge-radius);
	background: var(--ge-surface);
}

/* Audio sample player — on the sample page and the Samples-page shelf. */
.ge-sample-audio {
	background: var(--ge-surface);
	border: 1px solid var(--ge-border);
	border-radius: var(--ge-radius);
	padding: 14px;
}
.ge-sample-audio audio { width: 100%; display: block; }

/* Samples page: audiobook shelf rows (cover + inline player). */
.ge-sample-audio-list { display: grid; gap: 20px; margin-top: 24px; }
.ge-sample-audio-row {
	display: grid;
	grid-template-columns: 110px 1fr;
	gap: 20px;
	align-items: center;
	background: var(--ge-surface);
	border: 1px solid var(--ge-border);
	border-radius: var(--ge-radius);
	padding: 16px;
}
.ge-sample-audio-row .ge-cover-img,
.ge-sample-audio-row .ge-cover-placeholder { border-radius: var(--ge-radius); }
.ge-sample-audio-row .ge-sample-audio { padding: 0; border: 0; background: transparent; margin-top: 10px; }
@media (max-width: 560px) {
	.ge-sample-audio-row { grid-template-columns: 1fr; }
	.ge-sample-audio-cover { max-width: 140px; }
}

/* "Ready for more?" CTA. */
.ge-sample-cta { text-align: center; }
.ge-sample-cta .ge-book-buttons { justify-content: center; }
.ge-sample-backlink { margin-top: 18px; }
.ge-sample-backlink a { color: var(--ge-muted); text-decoration: none; }
.ge-sample-backlink a:hover { color: var(--ge-red-bright); }

/* ---------- Events: calendar + upcoming list ---------- */

/* Month navigation. */
.ge-cal-nav {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	flex-wrap: wrap;
	margin-bottom: 6px;
}
.ge-cal-month {
	font-family: var(--ge-font-display);
	font-size: clamp(1.3rem, 3vw, 1.8rem);
	letter-spacing: 0.05em;
	text-transform: uppercase;
}
.ge-cal-today-link { text-align: center; margin: 0 0 10px; font-size: 0.85rem; }
.ge-cal-today-link a { color: var(--ge-muted); }

/* The month grid. */
.ge-calendar {
	width: 100%;
	border-collapse: collapse;
	background: var(--ge-surface);
	border: 1px solid var(--ge-border);
	border-radius: var(--ge-radius);
	overflow: hidden;
	box-shadow: var(--ge-shadow);
	margin-top: 10px;
}
.ge-calendar th {
	font-family: var(--ge-font-display);
	font-size: 0.72rem;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--ge-faint);
	background: var(--ge-charcoal);
	padding: 10px 4px;
	border-bottom: 1px solid var(--ge-border);
	text-align: center;
}
.ge-calendar td {
	border: 1px solid var(--ge-border);
	width: 14.28%;
	height: 64px;
	vertical-align: top;
	padding: 0;
}
.ge-calendar .ge-cal-empty { background: var(--ge-charcoal); }
.ge-cal-day {
	display: block;
	position: relative;
	height: 100%;
	min-height: 64px;
	padding: 8px 0 0 10px;
	color: var(--ge-muted);
	font-size: 0.9rem;
	text-decoration: none;
}
a.ge-cal-day:hover { background: var(--ge-surface-2); color: var(--ge-text); }
.ge-cal-today .ge-cal-day { color: var(--ge-text); }
.ge-cal-today { outline: 2px solid var(--ge-faint); outline-offset: -2px; }
.ge-cal-has-event { background: linear-gradient(180deg, rgba(179, 18, 31, 0.22), rgba(179, 18, 31, 0.08)); }
.ge-cal-has-event .ge-cal-day { color: var(--ge-text); font-weight: 700; }
.ge-cal-dot {
	position: absolute;
	left: 10px;
	bottom: 8px;
	width: 8px;
	height: 8px;
	border-radius: 50%;
	background: var(--ge-red-bright);
}
@media (max-width: 560px) {
	.ge-calendar td { height: 44px; }
	.ge-cal-day { min-height: 44px; padding: 5px 0 0 6px; font-size: 0.8rem; }
	.ge-cal-dot { left: 6px; bottom: 5px; width: 6px; height: 6px; }
}

/* Upcoming events list. */
.ge-event-list { display: grid; gap: 16px; margin-top: 24px; }
.ge-event {
	display: grid;
	grid-template-columns: 76px 1fr;
	gap: 18px;
	background: var(--ge-surface);
	border: 1px solid var(--ge-border);
	border-radius: var(--ge-radius);
	padding: 18px;
	scroll-margin-top: 90px; /* calendar day links land clear of the sticky header */
}
.ge-event:target { border-color: var(--ge-red); }
.ge-event-date {
	text-align: center;
	background: var(--ge-charcoal);
	border: 1px solid var(--ge-border);
	border-radius: var(--ge-radius);
	padding: 10px 4px;
	height: fit-content;
}
.ge-event-month {
	display: block;
	font-family: var(--ge-font-display);
	font-size: 0.8rem;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--ge-red-bright);
}
.ge-event-day {
	display: block;
	font-family: var(--ge-font-display);
	font-size: 1.9rem;
	line-height: 1.1;
}
.ge-event-title { margin-bottom: 4px; font-size: 1.15rem; }
.ge-event-when { color: var(--ge-muted); font-size: 0.9rem; margin-bottom: 8px; }
.ge-event-notes { color: var(--ge-muted); font-size: 0.95rem; }
.ge-event-link { margin-top: 4px; }
@media (max-width: 480px) {
	.ge-event { grid-template-columns: 60px 1fr; gap: 12px; padding: 14px; }
	.ge-event-day { font-size: 1.5rem; }
}

/* ---------- Contact form (Contact Form 7) ---------- */
/* Styles the CF7 plugin's default markup to match the theme — dark
   inputs, red focus ring, Dispatch-style submit button. Spam rules for
   the form live in inc/contact-form.php. */

.wpcf7 form > p, .wpcf7 label { color: var(--ge-muted); font-size: 0.9rem; }
.wpcf7 label { display: block; }

.wpcf7 input[type="text"],
.wpcf7 input[type="email"],
.wpcf7 input[type="url"],
.wpcf7 input[type="tel"],
.wpcf7 select,
.wpcf7 textarea {
	display: block;
	width: 100%;
	margin-top: 6px;
	padding: 12px 16px;
	background: var(--ge-black);
	border: 1px solid var(--ge-border);
	border-radius: var(--ge-radius);
	color: var(--ge-text);
	font-family: var(--ge-font-body);
	font-size: 0.95rem;
}
.wpcf7 input:focus,
.wpcf7 select:focus,
.wpcf7 textarea:focus { outline: 2px solid var(--ge-red); border-color: var(--ge-red); }
.wpcf7 ::placeholder { color: var(--ge-faint); }
.wpcf7 textarea { min-height: 180px; resize: vertical; }

.wpcf7 .wpcf7-submit {
	display: inline-block;
	font-family: var(--ge-font-display);
	font-size: 0.85rem;
	font-weight: 700;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	padding: 11px 24px;
	border-radius: var(--ge-radius);
	border: 2px solid transparent;
	background: var(--ge-red);
	color: #fff;
	cursor: pointer;
	transition: background 0.2s ease, transform 0.15s ease;
}
.wpcf7 .wpcf7-submit:hover { background: var(--ge-red-bright); transform: translateY(-2px); }
.wpcf7 .wpcf7-submit:focus-visible { outline: 3px solid var(--ge-red-bright); outline-offset: 2px; }
.wpcf7 .wpcf7-submit:disabled { background: var(--ge-surface); color: var(--ge-faint); cursor: default; }

/* Validation + response messages. */
.wpcf7 .wpcf7-not-valid-tip { color: var(--ge-red-bright); font-size: 0.85rem; margin-top: 4px; }
.wpcf7 .wpcf7-response-output {
	margin: 20px 0 0;
	padding: 12px 16px;
	border: 1px solid var(--ge-red);
	border-radius: var(--ge-radius);
	color: var(--ge-text);
	font-size: 0.92rem;
}
.wpcf7 form.sent .wpcf7-response-output { border-color: var(--ge-border); color: var(--ge-muted); }
.wpcf7 .wpcf7-spinner { background-color: var(--ge-faint); }
