/**
 * RPAC Calendar - soft neutral theme for FullCalendar 6.
 *
 * FullCalendar's global bundle injects its own base stylesheet. Everything here
 * layers on top of that: first by remapping the library's own --fc-* custom
 * properties onto our palette, then by restyling the handful of components that
 * carry the library's default look.
 */

.rpac-cal {
	/* Palette. Neutrals are a warm stone ramp; the accent is overridable per
	   instance via the shortcode's accent="" attribute. */
	--rpac-accent: #4f46e5;
	--rpac-surface: #ffffff;
	--rpac-surface-sunken: #fafaf9;
	--rpac-border: #e7e5e4;
	--rpac-border-soft: #f0efee;
	--rpac-text: #1c1917;
	--rpac-text-soft: #78716c;
	--rpac-text-faint: #a8a29e;

	--rpac-accent-soft: color-mix(in srgb, var(--rpac-accent) 10%, transparent);
	--rpac-accent-tint: color-mix(in srgb, var(--rpac-accent) 6%, transparent);
	--rpac-accent-strong: color-mix(in srgb, var(--rpac-accent) 88%, #000);

	--rpac-radius: 16px;
	--rpac-radius-md: 10px;
	--rpac-radius-sm: 7px;

	--rpac-shadow: 0 1px 2px rgba(28, 25, 23, 0.04), 0 12px 32px -16px rgba(28, 25, 23, 0.18);
	--rpac-shadow-lg: 0 4px 12px rgba(28, 25, 23, 0.08), 0 32px 64px -24px rgba(28, 25, 23, 0.32);

	--rpac-font: inherit;
	--rpac-ease: cubic-bezier(0.4, 0, 0.2, 1);

	position: relative;
	font-family: var(--rpac-font);
	color: var(--rpac-text);
}

/* Older engines without color-mix() still get a usable, if flatter, tint. */
@supports not (color: color-mix(in srgb, red 10%, transparent)) {
	.rpac-cal {
		--rpac-accent-soft: rgba(79, 70, 229, 0.1);
		--rpac-accent-tint: rgba(79, 70, 229, 0.06);
		--rpac-accent-strong: var(--rpac-accent);
	}
}

/* --------------------------------------------------------------------------
   Cards layout

   An editorial "upcoming events" section: centred intro, gold rule with a
   diamond, and a grid of cards each headed by a rotated date badge. It renders
   without FullCalendar, so none of the .fc-* rules below apply to it.
   -------------------------------------------------------------------------- */

.rpac-cal--cards {
	/* The cards carry their own crimson-and-cream palette. The shortcode only
	   writes --rpac-accent inline when an author sets accent="" explicitly, so
	   these defaults survive the plugin-wide accent setting. */
	--rpac-accent: #8b1a30;
	--rpac-gold: #a6884e;
	--rpac-heading: #172231;
	--rpac-body: #2f4a66;
	--rpac-card-bg: #fffdf9;
	--rpac-card-border: #ebe2d1;
	--rpac-cards-bg: transparent;
	--rpac-cols: 3;

	/* Falls back through faces a theme is likely to have already loaded before
	   landing on Georgia, which is a close enough high-contrast serif. */
	--rpac-serif: "Cormorant Garamond", "EB Garamond", "Playfair Display",
		"Libre Baskerville", Georgia, "Times New Roman", serif;

	padding: clamp(36px, 6vw, 72px) clamp(16px, 4vw, 40px);
	background: var(--rpac-cards-bg);
}

/* The section sits on the page's own background rather than a white panel, so
   the loading and error overlays must not paint a white block over it. */
.rpac-cal--cards .rpac-cal__loader,
.rpac-cal--cards .rpac-cal__error {
	background: transparent;
}

.rpac-cal--cards .rpac-cal__surface--bare {
	max-width: 1180px;
	margin: 0 auto;
	padding: 0;
	min-height: 200px;
	background: transparent;
	border: 0;
	border-radius: 0;
	box-shadow: none;
	overflow: visible;
}

/* Intro ------------------------------------------------------------------ */

.rpac-cal__intro {
	max-width: 1180px;
	margin: 0 auto clamp(30px, 4vw, 48px);
	text-align: center;
}

.rpac-cal__eyebrow {
	margin: 0 0 14px;
	font-size: 0.75rem;
	font-weight: 600;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	color: var(--rpac-gold);
}

.rpac-cal__heading {
	margin: 0 0 20px;
	font-family: var(--rpac-serif);
	font-size: clamp(2rem, 4.4vw, 2.9rem);
	font-weight: 400;
	line-height: 1.15;
	letter-spacing: 0.005em;
	color: var(--rpac-heading);
}

.rpac-cal__rule {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 14px;
	margin: 0;
}

.rpac-cal__rule-line {
	width: clamp(40px, 8vw, 58px);
	height: 1px;
	background: var(--rpac-gold);
}

.rpac-cal__rule-gem {
	width: 9px;
	height: 9px;
	background: var(--rpac-accent);
	transform: rotate(45deg);
}

/* Grid ------------------------------------------------------------------- */

.rpac-cal__cards {
	display: grid;
	grid-template-columns: repeat(var(--rpac-cols, 3), minmax(0, 1fr));
	gap: clamp(18px, 2.2vw, 28px);
	align-items: stretch;
}

.rpac-cal__empty {
	grid-column: 1 / -1;
	margin: 0;
	padding: 40px 20px;
	text-align: center;
	color: var(--rpac-body);
	font-size: 0.9375rem;
}

/* Card ------------------------------------------------------------------- */

.rpac-card {
	display: flex;
	flex-direction: column;
	padding: 28px 30px 30px;
	background: var(--rpac-card-bg);
	border: 1px solid var(--rpac-card-border);
	transition: border-color 180ms var(--rpac-ease), box-shadow 180ms var(--rpac-ease),
		transform 180ms var(--rpac-ease);
}

.rpac-card:hover {
	border-color: color-mix(in srgb, var(--rpac-accent) 26%, var(--rpac-card-border));
	box-shadow: 0 18px 40px -28px rgba(23, 34, 49, 0.5);
	transform: translateY(-2px);
}

/* The badge's own box is the diamond's bounding square, and the crimson is
   drawn by a rotated pseudo-element. Rotating the box itself would drag the
   text along the diagonal and leave the layout box the wrong size. */
.rpac-card__badge {
	position: relative;
	display: grid;
	place-items: center;
	width: 76px;
	height: 76px;
	margin: 0 0 26px;
	flex: 0 0 auto;
}

.rpac-card__badge::before {
	content: "";
	position: absolute;
	inset: 11px;
	background: var(--rpac-accent);
	transform: rotate(45deg);
}

.rpac-card__badge-text {
	position: relative;
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 2px;
	color: #ffffff;
	line-height: 1;
}

.rpac-card__day {
	font-size: 1.0625rem;
	font-weight: 700;
	font-variant-numeric: tabular-nums;
	letter-spacing: 0.02em;
}

.rpac-card__month {
	font-size: 0.625rem;
	font-weight: 600;
	letter-spacing: 0.14em;
	text-transform: uppercase;
}

.rpac-card__title {
	margin: 0 0 9px;
	font-family: var(--rpac-serif);
	font-size: 1.3125rem;
	font-weight: 400;
	line-height: 1.25;
	color: var(--rpac-heading);
}

.rpac-card__location {
	margin: 0 0 22px;
	font-size: 0.8125rem;
	line-height: 1.4;
	color: var(--rpac-gold);
}

.rpac-card__text {
	margin: 0 0 26px;

	/* Pushes the link to the bottom so a row of cards keeps its links aligned
	   however long the descriptions run. */
	flex: 1 1 auto;
	font-size: 0.9375rem;
	line-height: 1.75;
	color: var(--rpac-body);
}

.rpac-card__link {
	display: inline-flex;
	align-items: center;
	gap: 9px;
	align-self: flex-start;
	margin-top: auto;
	padding: 0;
	border: 0;
	background: none;
	color: var(--rpac-accent);
	font: inherit;
	font-size: 0.75rem;
	font-weight: 600;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	cursor: pointer;
	transition: gap 180ms var(--rpac-ease), opacity 180ms var(--rpac-ease);
}

.rpac-card__link:hover {
	gap: 14px;
	opacity: 0.82;
}

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

.rpac-card__arrow {
	font-size: 0.875rem;
	line-height: 1;
}

@media (prefers-reduced-motion: reduce) {
	.rpac-card,
	.rpac-card__link {
		transition: none;
	}

	.rpac-card:hover {
		transform: none;
	}
}

/* Cards, dark ------------------------------------------------------------ */

.rpac-cal--cards[data-rpac-theme="dark"] {
	--rpac-accent: #c03350;
	--rpac-gold: #c8a765;
	--rpac-heading: #f7f2e8;
	--rpac-body: #c3b8a8;
	--rpac-card-bg: #201b1a;
	--rpac-card-border: #362e2b;
}

@media (prefers-color-scheme: dark) {
	.rpac-cal--cards[data-rpac-theme="auto"] {
		--rpac-accent: #c03350;
		--rpac-gold: #c8a765;
		--rpac-heading: #f7f2e8;
		--rpac-body: #c3b8a8;
		--rpac-card-bg: #201b1a;
		--rpac-card-border: #362e2b;
	}
}

.rpac-cal--cards[data-rpac-theme="dark"] .rpac-card:hover,
.rpac-cal--cards[data-rpac-theme="auto"] .rpac-card:hover {
	box-shadow: 0 18px 40px -28px rgba(0, 0, 0, 0.8);
}

/* Cards, responsive ------------------------------------------------------ */

@media (max-width: 980px) {
	.rpac-cal__cards {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (max-width: 640px) {
	.rpac-cal__cards {
		grid-template-columns: 1fr;
	}

	.rpac-card {
		padding: 24px 22px 26px;
	}

	.rpac-card__badge {
		width: 68px;
		height: 68px;
		margin-bottom: 20px;
	}

	.rpac-card__badge::before {
		inset: 10px;
	}
}

/* --------------------------------------------------------------------------
   Dark theme
   -------------------------------------------------------------------------- */

.rpac-cal[data-rpac-theme="dark"] {
	--rpac-surface: #1c1917;
	--rpac-surface-sunken: #262322;
	--rpac-border: #37322f;
	--rpac-border-soft: #2b2725;
	--rpac-text: #fafaf9;
	--rpac-text-soft: #a8a29e;
	--rpac-text-faint: #78716c;
	--rpac-accent-soft: color-mix(in srgb, var(--rpac-accent) 22%, transparent);
	--rpac-accent-tint: color-mix(in srgb, var(--rpac-accent) 14%, transparent);
	--rpac-accent-strong: color-mix(in srgb, var(--rpac-accent) 80%, #fff);
	--rpac-shadow: 0 1px 2px rgba(0, 0, 0, 0.4), 0 12px 32px -16px rgba(0, 0, 0, 0.6);
	--rpac-shadow-lg: 0 4px 12px rgba(0, 0, 0, 0.5), 0 32px 64px -24px rgba(0, 0, 0, 0.7);
	color-scheme: dark;
}

@media (prefers-color-scheme: dark) {
	.rpac-cal[data-rpac-theme="auto"] {
		--rpac-surface: #1c1917;
		--rpac-surface-sunken: #262322;
		--rpac-border: #37322f;
		--rpac-border-soft: #2b2725;
		--rpac-text: #fafaf9;
		--rpac-text-soft: #a8a29e;
		--rpac-text-faint: #78716c;
		--rpac-accent-soft: color-mix(in srgb, var(--rpac-accent) 22%, transparent);
		--rpac-accent-tint: color-mix(in srgb, var(--rpac-accent) 14%, transparent);
		--rpac-accent-strong: color-mix(in srgb, var(--rpac-accent) 80%, #fff);
		--rpac-shadow: 0 1px 2px rgba(0, 0, 0, 0.4), 0 12px 32px -16px rgba(0, 0, 0, 0.6);
		--rpac-shadow-lg: 0 4px 12px rgba(0, 0, 0, 0.5), 0 32px 64px -24px rgba(0, 0, 0, 0.7);
		color-scheme: dark;
	}
}

/* --------------------------------------------------------------------------
   Shell
   -------------------------------------------------------------------------- */

.rpac-cal__surface {
	position: relative;

	/* The query container sits here rather than on .rpac-cal, because
	   container-type brings layout containment with it, which would make the
	   wrapper the containing block for the fixed-position dialog and trap the
	   modal inside the calendar instead of covering the viewport. */
	container-type: inline-size;
	min-height: 320px;
	padding: clamp(14px, 3vw, 22px);
	background: var(--rpac-surface);
	border: 1px solid var(--rpac-border);
	border-radius: var(--rpac-radius);
	box-shadow: var(--rpac-shadow);
	overflow: hidden;
}

.rpac-cal__mount {
	opacity: 1;
	transition: opacity 220ms var(--rpac-ease);
}

.rpac-cal__mount[aria-busy="true"] {
	opacity: 0;
}

.rpac-cal__notice {
	margin: 0 0 1em;
	padding: 12px 16px;
	border-left: 3px solid #d97706;
	border-radius: var(--rpac-radius-sm);
	background: #fffbeb;
	color: #78350f;
	font-size: 0.875rem;
}

/* --------------------------------------------------------------------------
   Loading state
   -------------------------------------------------------------------------- */

.rpac-cal__loader {
	position: absolute;
	inset: 0;
	z-index: 5;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: 14px;
	background: var(--rpac-surface);
	transition: opacity 220ms var(--rpac-ease), visibility 220ms var(--rpac-ease);
}

.rpac-cal__loader[hidden] {
	display: flex;
	visibility: hidden;
	opacity: 0;
	pointer-events: none;
}

.rpac-cal__spinner {
	width: 36px;
	height: 36px;
	border: 2.5px solid var(--rpac-border);
	border-top-color: var(--rpac-accent);
	border-radius: 50%;
	animation: rpac-cal-spin 720ms linear infinite;
}

.rpac-cal__loader-text {
	font-size: 0.8125rem;
	font-weight: 500;
	letter-spacing: 0.01em;
	color: var(--rpac-text-soft);
}

@keyframes rpac-cal-spin {
	to {
		transform: rotate(360deg);
	}
}

@media (prefers-reduced-motion: reduce) {
	.rpac-cal__spinner {
		animation-duration: 2.4s;
	}

	.rpac-cal__mount,
	.rpac-cal__loader,
	.rpac-cal__dialog,
	.rpac-cal__backdrop {
		transition: none;
	}
}

/* --------------------------------------------------------------------------
   Error state
   -------------------------------------------------------------------------- */

.rpac-cal__error {
	position: absolute;
	inset: 0;
	z-index: 6;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: 14px;
	padding: 24px;
	background: var(--rpac-surface);
	text-align: center;
}

.rpac-cal__error[hidden] {
	display: none;
}

.rpac-cal__error-text {
	max-width: 34ch;
	margin: 0;
	color: var(--rpac-text-soft);
	font-size: 0.9375rem;
	line-height: 1.5;
}

.rpac-cal__retry {
	padding: 9px 20px;
	border: 1px solid var(--rpac-border);
	border-radius: 999px;
	background: var(--rpac-surface-sunken);
	color: var(--rpac-text);
	font: inherit;
	font-size: 0.8125rem;
	font-weight: 500;
	cursor: pointer;
	transition: background-color 160ms var(--rpac-ease), border-color 160ms var(--rpac-ease);
}

.rpac-cal__retry:hover {
	border-color: var(--rpac-accent);
	background: var(--rpac-accent-soft);
}

/* --------------------------------------------------------------------------
   FullCalendar variable remapping
   -------------------------------------------------------------------------- */

.rpac-cal .fc {
	--fc-page-bg-color: transparent;
	--fc-border-color: var(--rpac-border-soft);
	--fc-neutral-bg-color: var(--rpac-surface-sunken);
	--fc-neutral-text-color: var(--rpac-text-soft);
	--fc-today-bg-color: var(--rpac-accent-tint);
	--fc-highlight-color: var(--rpac-accent-soft);
	--fc-event-bg-color: var(--rpac-accent);
	--fc-event-border-color: transparent;
	--fc-event-text-color: #ffffff;
	--fc-list-event-hover-bg-color: var(--rpac-surface-sunken);
	--fc-more-link-bg-color: transparent;
	--fc-more-link-text-color: var(--rpac-text-soft);
	--fc-small-font-size: 0.8125rem;

	font-family: var(--rpac-font);
	font-size: 0.875rem;
}

/* --------------------------------------------------------------------------
   Toolbar
   -------------------------------------------------------------------------- */

.rpac-cal .fc .fc-toolbar.fc-header-toolbar {
	flex-wrap: wrap;
	gap: 12px;
	margin-bottom: 18px;
}

.rpac-cal .fc .fc-toolbar-title {
	font-size: 1.125rem;
	font-weight: 600;
	letter-spacing: -0.01em;
	color: var(--rpac-text);
}

.rpac-cal .fc .fc-button {
	padding: 7px 14px;
	border: 1px solid var(--rpac-border);
	border-radius: var(--rpac-radius-md);
	background: var(--rpac-surface);
	color: var(--rpac-text-soft);
	box-shadow: none;
	font-size: 0.8125rem;
	font-weight: 500;
	line-height: 1.3;
	text-transform: none;
	transition: background-color 160ms var(--rpac-ease), color 160ms var(--rpac-ease),
		border-color 160ms var(--rpac-ease);
}

.rpac-cal .fc .fc-button:hover:not(:disabled) {
	background: var(--rpac-surface-sunken);
	color: var(--rpac-text);
	border-color: var(--rpac-border);
}

.rpac-cal .fc .fc-button:disabled {
	opacity: 0.4;
	background: var(--rpac-surface);
	border-color: var(--rpac-border-soft);
}

/* The active view button is the one place the accent carries weight. */
.rpac-cal .fc .fc-button-primary:not(:disabled).fc-button-active,
.rpac-cal .fc .fc-button-primary:not(:disabled):active {
	background: var(--rpac-accent-soft);
	border-color: transparent;
	color: var(--rpac-accent-strong);
	box-shadow: none;
}

.rpac-cal .fc .fc-button:focus,
.rpac-cal .fc .fc-button:focus-visible {
	outline: 2px solid var(--rpac-accent);
	outline-offset: 2px;
	box-shadow: none;
}

.rpac-cal .fc .fc-button-group > .fc-button {
	border-radius: var(--rpac-radius-md);
}

.rpac-cal .fc .fc-button-group > .fc-button:not(:last-child) {
	margin-right: 4px;
}

.rpac-cal .fc .fc-icon {
	font-size: 1.05em;
	vertical-align: middle;
}

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

.rpac-cal .fc .fc-scrollgrid,
.rpac-cal .fc .fc-scrollgrid td:last-of-type {
	border-radius: var(--rpac-radius-md);
	border-right-width: 0;
}

.rpac-cal .fc .fc-scrollgrid-section > td {
	border-bottom-width: 0;
}

.rpac-cal .fc .fc-col-header-cell {
	padding: 10px 4px;
	border-color: var(--rpac-border-soft);
	background: transparent;
	font-size: 0.6875rem;
	font-weight: 600;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--rpac-text-faint);
}

.rpac-cal .fc .fc-col-header-cell-cushion {
	padding: 4px;
	text-decoration: none;
	color: inherit;
}

.rpac-cal .fc .fc-daygrid-day-number {
	padding: 7px 9px;
	font-size: 0.8125rem;
	font-weight: 500;
	font-variant-numeric: tabular-nums;
	color: var(--rpac-text-soft);
	text-decoration: none;
}

.rpac-cal .fc .fc-day-other .fc-daygrid-day-number {
	color: var(--rpac-text-faint);
	opacity: 0.65;
}

/* Today reads as a filled pill rather than a tinted cell. */
.rpac-cal .fc .fc-day-today .fc-daygrid-day-number {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 26px;
	height: 26px;
	margin: 4px 5px;
	padding: 0;
	border-radius: 999px;
	background: var(--rpac-accent);
	color: #ffffff;
	font-weight: 600;
}

.rpac-cal .fc .fc-daygrid-day.fc-day-today {
	background: var(--rpac-accent-tint);
}

.rpac-cal .fc .fc-daygrid-day-frame {
	padding: 2px;
}

/* --------------------------------------------------------------------------
   Events
   -------------------------------------------------------------------------- */

.rpac-cal .fc .fc-daygrid-event {
	margin: 1px 4px 2px;
	padding: 3px 7px;
	border: 0;
	border-radius: var(--rpac-radius-sm);
	background: var(--rpac-accent-soft);
	color: var(--rpac-accent-strong);
	font-size: 0.78125rem;
	font-weight: 500;
	line-height: 1.35;
	cursor: pointer;
	transition: background-color 140ms var(--rpac-ease), transform 140ms var(--rpac-ease);
}

.rpac-cal .fc .fc-daygrid-event:hover {
	background: color-mix(in srgb, var(--rpac-accent) 18%, transparent);
	transform: translateY(-1px);
}

.rpac-cal .fc .fc-daygrid-event .fc-event-time {
	font-weight: 600;
	opacity: 0.8;
}

.rpac-cal .fc .fc-daygrid-event .fc-event-title {
	font-weight: 500;
	overflow: hidden;
	text-overflow: ellipsis;
}

/* All-day and multi-day blocks stay solid so they read as bars. */
.rpac-cal .fc .fc-daygrid-block-event {
	background: var(--rpac-accent);
	color: #ffffff;
}

.rpac-cal .fc .fc-daygrid-block-event:hover {
	background: var(--rpac-accent-strong);
}

.rpac-cal .fc .fc-timegrid-event {
	border: 0;
	border-radius: var(--rpac-radius-sm);
	background: var(--rpac-accent);
	box-shadow: none;
	padding: 2px 5px;
	font-size: 0.78125rem;
}

.rpac-cal .fc .fc-timegrid-event .fc-event-main {
	color: #ffffff;
}

.rpac-cal .fc .fc-timegrid-slot-label,
.rpac-cal .fc .fc-timegrid-axis-cushion {
	font-size: 0.6875rem;
	color: var(--rpac-text-faint);
	font-variant-numeric: tabular-nums;
}

.rpac-cal .fc .fc-timegrid-now-indicator-line {
	border-color: var(--rpac-accent);
	border-width: 1.5px;
}

.rpac-cal .fc .fc-timegrid-now-indicator-arrow {
	border-color: var(--rpac-accent);
	color: var(--rpac-accent);
}

.rpac-cal .fc .fc-event:focus-visible {
	outline: 2px solid var(--rpac-accent);
	outline-offset: 2px;
}

.rpac-cal .fc .fc-daygrid-more-link {
	margin: 2px 6px;
	padding: 2px 6px;
	border-radius: var(--rpac-radius-sm);
	font-size: 0.75rem;
	font-weight: 500;
	color: var(--rpac-text-soft);
}

.rpac-cal .fc .fc-daygrid-more-link:hover {
	background: var(--rpac-surface-sunken);
	color: var(--rpac-text);
}

.rpac-cal .fc .fc-popover {
	border: 1px solid var(--rpac-border);
	border-radius: var(--rpac-radius-md);
	background: var(--rpac-surface);
	box-shadow: var(--rpac-shadow-lg);
	overflow: hidden;
}

.rpac-cal .fc .fc-popover-header {
	padding: 9px 12px;
	background: var(--rpac-surface-sunken);
	color: var(--rpac-text);
	font-size: 0.8125rem;
	font-weight: 600;
}

/* --------------------------------------------------------------------------
   List view
   -------------------------------------------------------------------------- */

.rpac-cal .fc .fc-list {
	border: 0;
}

.rpac-cal .fc .fc-list-day-cushion {
	padding: 10px 14px;
	background: var(--rpac-surface-sunken);
	font-size: 0.75rem;
	font-weight: 600;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	color: var(--rpac-text-soft);
}

.rpac-cal .fc .fc-list-day-cushion a {
	color: inherit;
	text-decoration: none;
}

.rpac-cal .fc .fc-list-event {
	cursor: pointer;
}

.rpac-cal .fc .fc-list-event td {
	padding: 12px 14px;
	border-color: var(--rpac-border-soft);
}

.rpac-cal .fc .fc-list-event:hover td {
	background: var(--rpac-surface-sunken);
}

.rpac-cal .fc .fc-list-event-time {
	white-space: nowrap;
	font-size: 0.8125rem;
	font-variant-numeric: tabular-nums;
	color: var(--rpac-text-soft);
}

.rpac-cal .fc .fc-list-event-title a {
	font-weight: 500;
	color: var(--rpac-text);
	text-decoration: none;
}

.rpac-cal .fc .fc-list-event-dot {
	border-color: var(--rpac-accent);
}

.rpac-cal .fc .fc-list-empty {
	background: transparent;
	color: var(--rpac-text-soft);
	font-size: 0.9375rem;
}

/* --------------------------------------------------------------------------
   Event dialog
   -------------------------------------------------------------------------- */

.rpac-cal__backdrop {
	position: fixed;
	inset: 0;
	z-index: 99998;
	background: rgba(28, 25, 23, 0.45);
	backdrop-filter: blur(2px);
	animation: rpac-cal-fade 160ms var(--rpac-ease);
}

.rpac-cal__backdrop[hidden] {
	display: none;
}

.rpac-cal__dialog {
	position: fixed;
	top: 50%;
	left: 50%;
	z-index: 99999;
	width: min(32rem, calc(100vw - 32px));
	max-height: min(80vh, 640px);
	padding: 26px 28px 28px;
	transform: translate(-50%, -50%);
	border: 1px solid var(--rpac-border);
	border-radius: var(--rpac-radius);
	background: var(--rpac-surface);
	box-shadow: var(--rpac-shadow-lg);
	overflow-y: auto;
	overscroll-behavior: contain;
	animation: rpac-cal-pop 180ms var(--rpac-ease);
}

.rpac-cal__dialog[hidden] {
	display: none;
}

.rpac-cal__close {
	position: absolute;
	top: 14px;
	right: 14px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 32px;
	height: 32px;
	padding: 0;
	border: 0;
	border-radius: 999px;
	background: transparent;
	color: var(--rpac-text-soft);
	font-size: 1.375rem;
	line-height: 1;
	cursor: pointer;
	transition: background-color 140ms var(--rpac-ease);
}

.rpac-cal__close:hover {
	background: var(--rpac-surface-sunken);
	color: var(--rpac-text);
}

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

.rpac-cal__dialog-title {
	margin: 0 40px 16px 0;
	font-size: 1.1875rem;
	font-weight: 600;
	line-height: 1.35;
	letter-spacing: -0.01em;
	color: var(--rpac-text);
}

.rpac-cal__meta {
	display: grid;
	grid-template-columns: auto 1fr;
	gap: 8px 16px;
	margin: 0 0 18px;
	font-size: 0.875rem;
}

.rpac-cal__meta dt {
	font-size: 0.6875rem;
	font-weight: 600;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--rpac-text-faint);
	padding-top: 2px;
}

.rpac-cal__meta dd {
	margin: 0;
	color: var(--rpac-text);
	line-height: 1.5;
}

/* Event images, pulled from the description ------------------------------ */

.rpac-cal__media {
	display: grid;
	gap: 8px;
	margin: 0 0 18px;
}

.rpac-cal__media[hidden] {
	display: none;
}

/* A single image runs full width; several tile two-up. */
.rpac-cal__media--multi {
	grid-template-columns: repeat(2, minmax(0, 1fr));
}

.rpac-cal__image {
	display: block;
	width: 100%;
	height: auto;
	max-height: 320px;
	object-fit: cover;
	border-radius: var(--rpac-radius-sm);
	background: var(--rpac-surface-sunken);
}

.rpac-cal__media--multi .rpac-cal__image {
	max-height: 160px;
}

.rpac-cal__description {
	margin-bottom: 18px;
	padding-top: 16px;
	border-top: 1px solid var(--rpac-border-soft);
	color: var(--rpac-text-soft);
	font-size: 0.875rem;
	line-height: 1.6;
	white-space: pre-wrap;
	word-break: break-word;
}

.rpac-cal__description:empty {
	display: none;
}

.rpac-cal__link {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	padding: 9px 18px;
	border-radius: 999px;
	background: var(--rpac-accent);
	color: #ffffff;
	font-size: 0.8125rem;
	font-weight: 500;
	text-decoration: none;
	transition: background-color 160ms var(--rpac-ease);
}

.rpac-cal__link:hover {
	background: var(--rpac-accent-strong);
	color: #ffffff;
}

.rpac-cal__link[hidden] {
	display: none;
}

@keyframes rpac-cal-fade {
	from {
		opacity: 0;
	}
}

@keyframes rpac-cal-pop {
	from {
		opacity: 0;
		transform: translate(-50%, calc(-50% + 8px)) scale(0.98);
	}
}

/* --------------------------------------------------------------------------
   Responsive
   -------------------------------------------------------------------------- */

@media (max-width: 782px) {
	.rpac-cal .fc .fc-toolbar.fc-header-toolbar {
		justify-content: center;
		gap: 10px;
	}

	.rpac-cal .fc .fc-toolbar-chunk {
		display: flex;
		align-items: center;
		gap: 6px;
	}
}

@media (max-width: 640px) {
	.rpac-cal__surface {
		padding: 12px;
		border-radius: 12px;
	}

	.rpac-cal .fc .fc-toolbar.fc-header-toolbar {
		flex-wrap: wrap;
		justify-content: space-between;
		align-items: center;
		gap: 8px;
		margin-bottom: 14px;
	}

	/* Title takes its own row above the controls, so the month name never wraps
	   oddly; the two button chunks then share the row beneath it. */
	.rpac-cal .fc .fc-toolbar-chunk:nth-child(2) {
		order: -1;
		flex: 0 0 100%;

		/* The chunk is a flex container, so centring needs justify-content;
		   text-align alone would not move the title. */
		justify-content: center;
		text-align: center;
	}

	.rpac-cal .fc .fc-toolbar-chunk {
		display: flex;
		align-items: center;
		gap: 6px;
	}

	.rpac-cal .fc .fc-toolbar-title {
		font-size: 1.0625rem;
	}

	.rpac-cal .fc .fc-button {
		padding: 8px 12px;
		font-size: 0.75rem;
	}

	.rpac-cal .fc .fc-col-header-cell {
		font-size: 0.625rem;
		letter-spacing: 0.04em;
	}

	.rpac-cal .fc .fc-list-event td {
		padding: 11px 10px;
	}

	.rpac-cal .fc .fc-list-day-cushion {
		padding: 9px 10px;
	}

	/* The dialog becomes a bottom sheet, which is far easier to reach. */
	.rpac-cal__dialog {
		top: auto;
		bottom: 0;
		left: 0;
		width: 100%;
		max-height: 85vh;
		padding: 22px 20px calc(22px + env(safe-area-inset-bottom, 0px));
		transform: none;
		border-width: 1px 0 0;
		border-radius: 18px 18px 0 0;
		animation: rpac-cal-slide 200ms var(--rpac-ease);
	}

	.rpac-cal__meta {
		grid-template-columns: 1fr;
		gap: 3px;
	}

	.rpac-cal__meta dd + dt {
		margin-top: 10px;
	}
}

@keyframes rpac-cal-slide {
	from {
		opacity: 0;
		transform: translateY(16px);
	}
}

/* Narrow containers (sidebars, columns) get the compact treatment even on a
   wide viewport. */
@container (max-width: 480px) {
	.rpac-cal .fc .fc-daygrid-event .fc-event-time {
		display: none;
	}

	.rpac-cal .fc .fc-daygrid-day-number {
		padding: 5px 6px;
		font-size: 0.75rem;
	}
}

@media print {
	.rpac-cal__loader,
	.rpac-cal__backdrop,
	.rpac-cal__dialog,
	.rpac-cal .fc .fc-toolbar-chunk:first-child,
	.rpac-cal .fc .fc-toolbar-chunk:last-child {
		display: none !important;
	}

	.rpac-cal__surface {
		border: 0;
		box-shadow: none;
	}
}
