/**
 * PVI Upcoming Strip — Design tokens + structural CSS.
 * Source of truth: /workspace/pvinformer-design/upcoming-strip.md
 * Display cap 8 rows (Brian override of Design’s 5) — min-heights adjusted.
 * No images. CWV-safe. No motion.
 */

.pvi-upcoming {
	--pvi-paper: #FBF9F4;
	--pvi-ink: #1C2430;
	--pvi-muted: #4B5563;
	--pvi-sand: #E9E1CF;
	--pvi-border: #6B7280;
	--pvi-schools: #8A5A00;
	--pvi-civic: #2E5E3E;
	--pvi-clubs: #9A2E62; /* 1.1.0 / 1.1.1 Club events (was Community) — bougainvillea; 6.79:1 on paper (Design/Critic) */
	--pvi-election: #0F5E6E; /* 1.0.5: homepage teal (was slate #475569); 7.01:1 on paper, white on it 7.38:1 */
	--pvi-faith: #5B3A8C; /* 1.3.2: Faith chip — purple; ~7:1 on paper */
	--pvi-teal: #0F5E6E;
	--pvi-link: #0B5566;

	box-sizing: border-box;
	background: var(--pvi-paper);
	color: var(--pvi-ink);
	padding: 20px;
	/* Design 548px for 5×72; Brian 8 rows → ~764; + school filter ~48 */
	min-height: 940px; /* header+chips+8×88px rows+see-all; rows may grow */
	font-family: -apple-system, "Segoe UI", Roboto, "Public Sans", Arial, sans-serif;
	/* Homepage layout: single column only — Design wrap wins (no card grid) */
	display: block;
	width: 100%;
	max-width: 100%;
	overflow-x: visible;
}

/* Empty state: do not reserve full 8-row strip height */
.pvi-upcoming.is-empty {
	min-height: 0;
}


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

.pvi-upcoming__header {
	display: flex;
	flex-direction: column;
	gap: 14px;
	margin-bottom: 12px;
}

.pvi-upcoming__heading {
	font-family: "Source Serif 4", "Source Serif Pro", Georgia, "Times New Roman", serif;
	font-weight: 600;
	font-size: 24px;
	line-height: 1.2;
	margin: 0;
	color: var(--pvi-ink);
}

.pvi-upcoming__subtitle {
	margin: 4px 0 0;
	font-size: 16px; /* 1.5.33: primary intro line */
	line-height: 1.35;
	color: var(--pvi-muted);
}

.pvi-upcoming__chips {
	/* 1.0.6 (Hub): one horizontal scroll row instead of wrapping to 2 lines at 390.
	   5px padding / -5px margin keeps the 3px+2px focus ring inside the scroll box (no clipping)
	   without shifting the chips' visual left edge. Scrollbar stays (thin) so it is discoverable. */
	display: flex;
	flex-wrap: nowrap;
	gap: 8px;
	align-items: center;
	overflow-x: auto;
	overflow-y: hidden;
	-webkit-overflow-scrolling: touch;
	overscroll-behavior-x: contain;
	scrollbar-width: thin;
	white-space: nowrap;
	max-width: calc(100% + 10px);
	min-width: 0;
	padding: 5px;
	margin: -5px;
}

.pvi-upcoming__chip {
	display: inline-flex;
	margin: 0;
	align-items: center;
	justify-content: center;
	height: 44px;
	min-height: 44px;
	padding: 0 16px;
	border-radius: 22px;
	border: 1.5px solid var(--pvi-border);
	background: var(--pvi-paper);
	color: var(--pvi-ink);
	font-size: 16px;
	font-weight: 700;
	line-height: 1;
	text-decoration: none;
	cursor: pointer;
	appearance: none;
	-webkit-appearance: none;
	font-family: inherit;
	flex: 0 0 auto; /* 1.0.6: never compress — the row scrolls sideways instead (44px tap height kept) */
	white-space: nowrap;
}

.pvi-upcoming__chip:hover {
	border-color: var(--pvi-ink);
}

.pvi-upcoming__chip:focus {
	outline: none;
}

.pvi-upcoming__chip:focus-visible {
	outline: 3px solid var(--pvi-teal);
	outline-offset: 2px;
}

.pvi-upcoming__chip.is-selected,
.pvi-upcoming__chip[aria-pressed="true"] {
	border-color: transparent;
	color: #fff;
}

.pvi-upcoming__chip--all.is-selected,
.pvi-upcoming__chip--all[aria-pressed="true"] {
	background: var(--pvi-ink);
	border-color: var(--pvi-ink);
}

.pvi-upcoming__chip--schools.is-selected,
.pvi-upcoming__chip--schools[aria-pressed="true"] {
	background: var(--pvi-schools);
	border-color: var(--pvi-schools);
}

.pvi-upcoming__chip--civic.is-selected,
.pvi-upcoming__chip--civic[aria-pressed="true"] {
	background: var(--pvi-civic);
	border-color: var(--pvi-civic);
}

.pvi-upcoming__chip--clubs-community.is-selected,
.pvi-upcoming__chip--clubs-community[aria-pressed="true"] {
	background: var(--pvi-clubs);
	border-color: var(--pvi-clubs);
}

.pvi-upcoming__chip--election.is-selected,
.pvi-upcoming__chip--election[aria-pressed="true"] {
	background: var(--pvi-election);
	border-color: var(--pvi-election);
}

.pvi-upcoming__chip--faith.is-selected,
.pvi-upcoming__chip--faith[aria-pressed="true"] {
	background: var(--pvi-faith);
	border-color: var(--pvi-faith);
}

.pvi-upcoming__chip-check {
	margin-right: 4px;
	color: currentColor;
}

.pvi-upcoming__chip[hidden] {
	display: none !important;
}

/* Brian add-on: secondary school filter (visible only when Schools active) */
/* 1.1.3: same picker on /upcoming/?type=schools archive (outside .pvi-upcoming root) */
.pvi-upcoming-archive__school-filter {
	margin: 0.75rem 0 1.25rem;
}

.pvi-upcoming__school-filter {
	margin: 0 0 12px;
}

.pvi-upcoming__school-filter[hidden] {
	display: none !important;
}

.pvi-upcoming__school-select {
	display: block;
	width: 100%;
	max-width: 320px;
	height: 44px;
	min-height: 44px;
	padding: 0 12px;
	border: 1.5px solid var(--pvi-border);
	border-radius: 8px;
	background: #fff;
	color: var(--pvi-ink);
	font-size: 16px;
	font-weight: 600;
	font-family: inherit;
}

.pvi-upcoming__school-select:focus-visible {
	outline: 3px solid var(--pvi-teal);
	outline-offset: 2px;
}

.pvi-upcoming__list {
	list-style: none;
	margin: 0;
	padding: 0;
	display: block; /* single column — never a 2-col card grid */
	width: 100%;
}

.pvi-upcoming__row {
	border-bottom: 1px solid var(--pvi-sand);
}

.pvi-upcoming__row[hidden],
.pvi-upcoming__row.is-filtered-out,
.pvi-upcoming__row.is-stale {
	display: none !important;
}

.pvi-upcoming__row-link {
	display: flex;
	gap: 12px;
	align-items: flex-start;
	min-height: 88px; /* Design: room for 2-line title + meta + source; no fixed height */
	height: auto;
	padding: 8px 0;
	color: inherit;
	text-decoration: none;
	box-sizing: border-box;
	cursor: pointer;
}

.pvi-upcoming__row-link .pvi-upcoming__date {
	margin-top: 2px; /* optical align with title */
}

/* 1.5.12: fixed 64x64 square, centered cover crop. The date tile in a row with a thumb
   is at least 64px tall too, so the thumb is never taller than the tile.
   1.5.32: .pvi-ph uses this same box. The illustration is decorative. */
.pvi-upcoming__thumb {
	flex: none;
	width: 64px;
	height: 64px;
	min-height: 64px;
	max-height: 64px;
	margin-top: 2px;
	border-radius: 6px;
	background: #e9e1cf;
	object-fit: cover;
	object-position: center;
}
.pvi-ph {
	object-fit: cover;
	object-position: center;
	background: #fdf6eb;
}
.pvi-upcoming__row-link:has(.pvi-upcoming__thumb) .pvi-upcoming__date,
.pvi-upcoming--grouped .pvi-upcoming__row-link:has(.pvi-upcoming__thumb) .pvi-upcoming__date {
	min-height: 64px;
}

.pvi-upcoming__row-link:focus-visible {
	outline: 3px solid var(--pvi-teal);
	outline-offset: 2px;
}

.pvi-upcoming__date {
	flex: none;
	width: auto;
	min-width: 56px;
	height: auto;
	min-height: 56px;
	padding: 2px 0;
	box-sizing: border-box;
	border-radius: 6px;
	background: var(--pvi-sand);
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	line-height: 1.05;
}

.pvi-upcoming__date-month,
.pvi-upcoming__date-weekday {
	font-size: 14px; /* 1.5.33: meta floor. 16px clips the date tile. */
	font-weight: 700;
	letter-spacing: 0.06em;
	color: var(--pvi-muted);
	text-transform: uppercase;
}

.pvi-upcoming__date-day {
	font-family: "Source Serif 4", "Source Serif Pro", Georgia, serif;
	font-weight: 600;
	font-size: 22px;
	color: var(--pvi-ink);
}

.pvi-upcoming__date--today .pvi-upcoming__date-today {
	font-size: 14px; /* 1.5.33: was 11px. Stays 14px so TODAY fits the tile. */
	font-weight: 700;
	letter-spacing: 0.08em;
	color: var(--pvi-teal);
	text-transform: uppercase;
}

/* 1.0.10 set THROUGH at 11px so it fit the 56px cell. 1.5.14 / 1.5.33: 14px, mixed case, no tracking. */
.pvi-upcoming__date--through .pvi-upcoming__date-through {
	font-size: 14px;
	font-weight: 700;
	letter-spacing: 0.02em;
	color: var(--pvi-election);
	text-transform: uppercase;
	white-space: nowrap;
}

.pvi-upcoming__date--through .pvi-upcoming__date-day {
	font-size: 20px;
}

.pvi-upcoming__time-machine {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
}

.pvi-upcoming__body {
	min-width: 0;
	flex: 1;
}

.pvi-upcoming__title {
	font-size: 17px;
	font-weight: 700;
	line-height: 1.25;
	color: var(--pvi-ink);
	display: -webkit-box;
	-webkit-box-orient: vertical;
	-webkit-line-clamp: 2;
	overflow: hidden;
}

.pvi-upcoming__meta {
	margin-top: 2px;
	font-size: 16px; /* 1.5.33: place, time, and category line */
	line-height: 1.3;
	color: var(--pvi-muted);
}

/* 1.5.25: stated age. Sand on ink, same palette. The pill stays one line and
   wraps with the meta row instead of widening the card. */
.pvi-ages {
	display: inline-block;
	max-width: 100%;
	margin: 0 0.1em;
	padding: 0 0.45em;
	border-radius: 999px;
	background: var(--pvi-sand);
	color: var(--pvi-ink);
	font-family: inherit;
	font-size: 14px; /* 1.5.33: was 12px. Ink on sand is 12.00:1. */
	font-weight: 600;
	line-height: 1.45;
	letter-spacing: 0.01em;
	white-space: nowrap;
	vertical-align: baseline;
	box-sizing: border-box;
	overflow: hidden;
	text-overflow: ellipsis;
}

@media (max-width: 390px) {
	.pvi-upcoming__row,
	.pvi-upcoming__row-link,
	.pvi-upcoming__body,
	.pvi-upcoming__meta {
		min-width: 0;
		max-width: 100%;
	}
	.pvi-upcoming__meta {
		line-height: 1.45;
	}
}

.pvi-upcoming__cat {
	font-weight: 700;
	text-transform: uppercase; /* 1.0.6+: casing in CSS, not strtoupper() */
}

.pvi-upcoming__cat--schools {
	color: var(--pvi-schools);
}

.pvi-upcoming__cat--civic {
	color: var(--pvi-civic);
}

.pvi-upcoming__cat--clubs-community {
	color: var(--pvi-clubs);
}

.pvi-upcoming__cat--election {
	color: var(--pvi-election);
}

.pvi-upcoming__cat--faith {
	color: var(--pvi-faith);
}

.pvi-upcoming__place {
	text-decoration: none;
	border-bottom: none;
	font-weight: 400;
}

.pvi-upcoming__source {
	margin-top: 1px;
	font-size: 16px;
	line-height: 1.3;
	color: var(--pvi-link);
}

.pvi-upcoming__source-host {
	text-decoration: underline;
}

.pvi-upcoming__empty {
	padding: 12px 0 8px;
}

.pvi-upcoming__empty[hidden] {
	display: none !important;
}

.pvi-upcoming__empty-message {
	margin: 0 0 8px;
	font-size: 16px;
	color: var(--pvi-muted);
}

.pvi-upcoming__empty-link {
	display: inline-flex;
	align-items: center;
	min-height: 44px;
	font-weight: 700;
	color: var(--pvi-link);
	text-decoration: underline;
}

.pvi-upcoming__empty-link:focus-visible {
	outline: 3px solid var(--pvi-teal);
	outline-offset: 2px;
}

.pvi-upcoming__see-all {
	margin: 0;
	min-height: 52px;
	display: flex;
	align-items: center;
}

.pvi-upcoming__see-all[hidden] {
	display: none !important;
}

.pvi-upcoming__see-all-link {
	/* 1.0.8 (UX Critic N6): 44px tap target (was 162×29). */
	display: inline-flex;
	align-items: center;
	min-height: 44px;
	font-weight: 700;
	color: var(--pvi-link);
	text-decoration: underline;
}

.pvi-upcoming__see-all-link:focus-visible {
	outline: 3px solid var(--pvi-teal);
	outline-offset: 2px;
}

.pvi-upcoming__submit-row {
	flex: 1 1 100%;
	margin: 8px 0 4px;
}

a.pvi-upcoming__submit {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	box-sizing: border-box;
	width: 100%;
	min-height: 48px;
	padding: 12px 18px;
	border: 2px solid var(--pvi-teal, #0f5e6e);
	border-radius: 8px;
	background: var(--pvi-teal, #0f5e6e);
	color: #fff;
	font-size: 1rem;
	font-weight: 700;
	line-height: 1.2;
	text-decoration: none;
}

a.pvi-upcoming__submit:hover {
	background: var(--pvi-ink, #1c2430);
	border-color: var(--pvi-ink, #1c2430);
	color: #fff;
	text-decoration: none;
}

a.pvi-upcoming__submit:focus-visible {
	outline: 3px solid var(--pvi-teal, #0f5e6e);
	outline-offset: 2px;
}

@media (min-width: 720px) {
	a.pvi-upcoming__submit {
		width: auto;
	}
}

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

/* Narrow phones: reserved height (chips no longer wrap as of 1.0.6; rows may still grow) */
@media (max-width: 359px) {
	.pvi-upcoming {
		min-height: 992px; /* + wrapped chip row; rows may grow */
	}
}

/* Desktop ≥782px: heading + chips one line; rows 64px; ~ min-height for 8 rows */
@media (min-width: 782px) {
	.pvi-upcoming {
		/* Design ~470 for 5×64; Brian 8 → header+chips+8×64+see-all+school ≈ 700+ */
		min-height: 760px; /* 8 flexible rows ≥64px */
		max-width: 680px; /* single column inside content width — no multi-col / card grid */
	}

	.pvi-upcoming__header {
		flex-direction: row;
		flex-wrap: wrap;
		align-items: flex-start;
		justify-content: space-between;
		gap: 12px 16px;
	}

	.pvi-upcoming__chips {
		margin-left: auto;
	}

	.pvi-upcoming__row-link {
		min-height: 64px;
		height: auto;
		padding: 6px 0;
	}
}

.pvi-upcoming--editor {
	border: 1px dashed var(--pvi-border);
	border-radius: 8px;
	padding: 16px;
	min-height: 0;
}

/* Hard guards: never a card grid. 1.0.6: chips are a single-row horizontal scroller (Hub). */
.pvi-upcoming .pvi-upcoming__list,
.pvi-upcoming .pvi-upcoming__row,
.pvi-upcoming .pvi-upcoming__chips {
	grid-template-columns: none !important;
}
.pvi-upcoming .pvi-upcoming__list {
	display: block !important;
}
.pvi-upcoming .pvi-upcoming__chips {
	display: flex !important;
	flex-wrap: nowrap !important;
	overflow-x: auto !important;
}

@media (max-width: 359px) {
	.pvi-upcoming.is-empty {
		min-height: 0;
	}
}

@media (min-width: 782px) {
	.pvi-upcoming.is-empty {
		min-height: 0;
	}
}

/* 1.0.8 (UX Critic N1): phones/tablets — right-edge fade on the chip scroller so the clipped chip reads as
   "more to the right". A 44px trailing spacer lets the last chip scroll fully out of the fade, and
   scroll-padding keeps a keyboard-focused chip (and its 3px ring) clear of it. Desktop unchanged. */
@media (max-width: 781px) {
	.pvi-upcoming .pvi-upcoming__chips {
		-webkit-mask-image: linear-gradient(90deg, #000 calc(100% - 44px), transparent);
		mask-image: linear-gradient(90deg, #000 calc(100% - 44px), transparent);
		scroll-padding-inline-end: 44px;
	}
	.pvi-upcoming .pvi-upcoming__chips::after {
		content: "";
		flex: 0 0 36px; /* + 8px flex gap = 44px */
		height: 1px;
	}
}


/* ===== 1.1.0 PV Calendar grouped mode + category tints (Design homepage-v4) ===== */
.pvi-upcoming--grouped {
	min-height: 0;
}
.pvi-upcoming--grouped .pvi-upcoming__title {
	display: block;
	-webkit-line-clamp: unset;
	overflow: visible;
}
.pvi-upcoming__group {
	margin: 12px 0 0;
	padding: 4px 0;
	font-family: inherit;
	font-size: 0.875rem;
	font-weight: 700;
	line-height: 1.3;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--pvi-muted);
	border-bottom: 1px solid #D6CFBF;
}
.pvi-upcoming__group[hidden] {
	display: none !important;
}
.pvi-upcoming--grouped .pvi-upcoming__list[hidden] {
	display: none !important;
}
.pvi-upcoming__vh {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	white-space: nowrap;
}
.pvi-upcoming__meta-arrow {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	white-space: nowrap;
}
@media (max-width: 389px) {
	.pvi-upcoming--grouped .pvi-upcoming__meta-arrow {
		position: static;
		width: auto;
		height: auto;
		clip: auto;
		overflow: visible;
	}
}
/* Category tints on date blocks (grouped); color never the only cue — category word also prints */
.pvi-upcoming--grouped .pvi-upcoming__row { --pvi-row-c: var(--pvi-civic); --pvi-row-t: #E2E6DE; }
.pvi-upcoming--grouped .pvi-upcoming__row--schools { --pvi-row-c: #7D5200; --pvi-row-t: #EDE6D7; }
.pvi-upcoming--grouped .pvi-upcoming__row--clubs-community { --pvi-row-c: #9A2E62; --pvi-row-t: #EFE1E2; }
.pvi-upcoming--grouped .pvi-upcoming__row--election { --pvi-row-c: var(--pvi-election); --pvi-row-t: #DFE6E4; }
.pvi-upcoming--grouped .pvi-upcoming__date {
	background: var(--pvi-row-t);
	border-top: 4px solid var(--pvi-row-c);
	border-radius: 4px 4px 6px 6px;
}
.pvi-upcoming--grouped .pvi-upcoming__date :is(.pvi-upcoming__date-weekday,.pvi-upcoming__date-month,.pvi-upcoming__date-today,.pvi-upcoming__date-through) {
	color: var(--pvi-row-c);
}
.pvi-upcoming__sources {
	margin: 12px 0 0;
	color: var(--pvi-muted);
	font-size: 1rem;
}
.pvi-upcoming__top-link {
	display: inline-flex;
	align-items: center;
	min-height: 44px;
	font-weight: 700;
	color: var(--pvi-link);
	text-decoration: underline;
}
.pvi-upcoming p.pvi-upcoming__empty {
	margin: 12px 0 0;
	font-size: 1rem;
	color: var(--pvi-muted);
}
.pvi-upcoming p.pvi-upcoming__empty a {
	font-weight: 700;
	color: var(--pvi-link);
}

/* 1.1.0 Critic should-fix: /upcoming/ archive date + title links ≥ 44px tap */
body.post-type-archive-pvi_event .wp-block-post-date,
body.post-type-archive-pvi_event .wp-block-post-date a,
body.post-type-archive-pvi_event .wp-block-post-title a {
	display: block;
	min-height: 44px;
	box-sizing: border-box;
}
body.post-type-archive-pvi_event .wp-block-post-date a {
	display: flex;
	align-items: center;
	min-height: 44px;
}

/* === 1.2.0 Design upcoming-v1 (merged from Design package) === */
/* PV Calendar card polish + Load more (Design, upcoming-v1). Ships in pvi-upcoming/block/upcoming-strip/style.css (Tech merges), after the 1.1.3 rules.
   Scope = plugin classes only (frozen BEM per Tech spec §4.2), so the strip, the /upcoming/ archive list and Load more HTML all match.
   Homepage-v4's body.home strip rules become redundant once this ships (Tech may delete that block from homepage CSS; identical values).
   No images. No JS-dependent styling except [aria-busy] / .is-error / .is-done on the Load more wrap. */
.pvi-upcoming--grouped{
  --pvc-warm:#F2EDE2;--pvc-rule:#D6CFBF;--pvc-ring:3px solid var(--pvi-teal);--pvc-serif:"Source Serif 4",Georgia,serif;
  --pvi-clubs:#9A2E62}
/* ---------- card (same values as homepage v4) ---------- */
.pvi-upcoming--grouped .pvi-upcoming__group{margin:12px 0 0;padding:4px 0;font-family:inherit;font-size:.875rem;font-weight:700;line-height:1.3;letter-spacing:.08em;text-transform:uppercase;color:var(--pvi-muted);border-bottom:1px solid var(--pvc-rule)}
.pvi-upcoming--grouped .pvi-upcoming__row-link{position:relative;min-height:44px;padding:10px 0}
.pvi-upcoming--grouped .pvi-upcoming__row-link:active{background:var(--pvc-warm)}
.pvi-upcoming--grouped .pvi-upcoming__date{width:auto;min-width:56px;height:auto;min-height:56px;padding:2px 0;box-sizing:border-box;
  background:var(--t);border-top:4px solid var(--c);border-radius:4px 4px 6px 6px}
.pvi-upcoming--grouped .pvi-upcoming__date :is(.pvi-upcoming__date-weekday,.pvi-upcoming__date-month,.pvi-upcoming__date-today,.pvi-upcoming__date-through){color:var(--c)}
.pvi-upcoming--grouped .pvi-upcoming__row{--c:var(--pvi-civic);--t:#E2E6DE}
.pvi-upcoming--grouped .pvi-upcoming__row--schools{--c:#7D5200;--t:#EDE6D7}
.pvi-upcoming--grouped .pvi-upcoming__row--clubs-community{--c:#9A2E62;--t:#EFE1E2}
.pvi-upcoming--grouped .pvi-upcoming__row--election{--c:var(--pvi-election);--t:#DFE6E4}
.pvi-upcoming--grouped .pvi-upcoming__title{display:block;-webkit-line-clamp:unset;overflow:visible}
.pvi-upcoming--grouped :is(.pvi-upcoming__meta,.pvi-upcoming__source){font-size:1rem}
.pvi-upcoming--grouped .pvi-upcoming__when{white-space:nowrap}
.pvi-upcoming__vh,.pvi-upcoming--grouped .pvi-upcoming__meta-arrow{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.pvi-upcoming--grouped :is(p.pvi-upcoming__sources,p.pvi-upcoming__empty-message){margin:12px 0 0;color:var(--pvi-muted);font-size:1rem!important}
@media (max-width:389px){
  .pvi-upcoming--grouped .pvi-upcoming__source{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
  .pvi-upcoming--grouped .pvi-upcoming__meta-arrow{position:static;width:auto;height:auto;clip:auto;overflow:visible}}
@media (min-width:782px){.pvi-upcoming--grouped .pvi-upcoming__row-link{min-height:64px}}
@media (hover:hover) and (pointer:fine){.pvi-upcoming--grouped .pvi-upcoming__row-link:hover .pvi-upcoming__title{text-decoration:underline}}

/* ---------- Load more (strip + page) ---------- */
.pvi-upcoming__more{display:flex;flex-direction:column;align-items:center;gap:6px;margin:16px 0 0;text-align:center}
a.pvi-upcoming__load-more{text-decoration:none;box-sizing:border-box}
.pvi-upcoming__load-more{display:inline-flex;align-items:center;justify-content:center;gap:8px;width:100%;max-width:360px;min-height:48px;padding:0 20px;
  border:2px solid var(--pvi-teal);border-radius:24px;background:#fff;color:var(--pvi-link);font-family:inherit;font-size:1rem;font-weight:700;line-height:1.2;cursor:pointer}
.pvi-upcoming__load-more:focus-visible{outline:var(--pvc-ring);outline-offset:2px}
.pvi-upcoming__load-more:active{background:var(--pvi-sand)}
.pvi-upcoming__load-more[disabled]{cursor:progress;border-color:var(--pvi-border);color:var(--pvi-muted);background:var(--pvc-warm)}
.pvi-upcoming__more-status{margin:0;color:var(--pvi-muted);font-size:1rem!important;line-height:1.4}
.pvi-upcoming__more.is-error .pvi-upcoming__more-status{color:#8F2D2D;font-weight:600}
.pvi-upcoming__more.is-done .pvi-upcoming__more-status{color:var(--pvi-ink);font-weight:600}
.pvi-upcoming__more-alt{margin:2px 0 0;font-size:1rem!important}
.pvi-upcoming__more-alt a{color:var(--pvi-muted)}
@media (hover:hover) and (pointer:fine){.pvi-upcoming__load-more:not([disabled]):hover{background:var(--pvc-warm)}}
/* new rows: no animation (motion policy: none); their height is content-driven and appends below the fold-side button, so nothing above moves */
.pvi-upcoming__list--more{margin:0}

/* ---------- full page: /upcoming/ (archive list rendered by the plugin with render_row) ---------- */
.pvi-upcoming--page{min-height:0;max-width:760px;margin:0 auto;padding:0;background:none}
.pvi-upcoming--page .pvi-upcoming__header{display:block;margin:0}
.pvi-upcoming--page .pvi-upcoming__heading{margin:14px 0 0;font:600 2rem/1.15 var(--pvc-serif);color:var(--pvi-ink)}
.pvi-upcoming--page p.pvi-upcoming__subtitle{margin:6px 0 0;color:var(--pvi-muted);font-size:1rem!important;line-height:1.45}
/* chips keep Hub's 1.0.6 single scroll row (no wrap); the plugin scrolls the selected chip into view on load (spec §3) */
.pvi-upcoming--page .pvi-upcoming__chips{margin-top:7px}
.pvi-upcoming--page .pvi-upcoming__school-filter{display:flex;align-items:center;gap:10px;margin:12px 0 0}
.pvi-upcoming--page .pvi-upcoming__school-label{flex:none;font-weight:700;font-size:1rem;color:var(--pvi-ink)}
.pvi-upcoming--page .pvi-upcoming__school-select{flex:1;min-width:0;max-width:360px}
.pvi-upcoming__results{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:12px;margin:14px 0 0;padding-top:4px;border-top:2px solid var(--pvi-ink)}
.pvi-upcoming__results-title{margin:0;font:600 1.375rem/1.25 var(--pvc-serif);color:var(--pvi-ink)}
.pvi-upcoming__results-count{display:inline-block;font-family:-apple-system,"Segoe UI",Roboto,"Public Sans",Arial,sans-serif;font-size:1rem;font-weight:400;line-height:1.4;color:var(--pvi-muted)}
.pvi-upcoming__clear{flex:none;margin-left:auto;display:inline-flex;align-items:center;min-height:44px;padding:0 4px;color:var(--pvi-link);font-weight:700;font-size:1rem}
.pvi-upcoming__clear:focus-visible{outline:var(--pvc-ring);outline-offset:2px}
.pvi-upcoming--page .pvi-upcoming__group{margin-top:18px}
.pvi-upcoming--page .pvi-upcoming__results + .pvi-upcoming__group{margin-top:8px}
.pvi-upcoming--page .pvi-upcoming__more{margin-top:20px}
/* continuation list: quieter than a week heading, so "from today" doesn't read as another week */
.pvi-upcoming__group--more{color:var(--pvi-ink);font-weight:600;border-bottom-style:dashed}
@media (max-width:389px){
  .pvi-upcoming--page .pvi-upcoming__school-label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
  /* phones, a school picked: the select already names it, so show one compact count line; the name stays in the H2 for screen readers */
  .pvi-upcoming__results--school{margin-top:8px;padding-top:0;border-top:0}
  .pvi-upcoming__results--school .pvi-upcoming__results-name{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
  .pvi-upcoming__results--school .pvi-upcoming__results-title{font-size:1rem}
  .pvi-upcoming__results--school + .pvi-upcoming__group{margin-top:6px}}
@media (min-width:782px){
  .pvi-upcoming--page .pvi-upcoming__heading{margin-top:36px;font-size:2.5rem}
  .pvi-upcoming--page p.pvi-upcoming__subtitle{font-size:1.125rem!important}
  .pvi-upcoming--page .pvi-upcoming__chips{margin-top:13px}}

/* 1.3.0: day headings stay "Tue, Oct 14" (the week-group rule uppercases other labels). */
.pvi-upcoming--grouped .pvi-upcoming__group--day{
  text-transform:none;
  letter-spacing:0;
  font-size:1rem;
  font-weight:700;
  color:var(--pvi-ink);
}

/* Load more must disappear when hidden, and whenever the caught-up line is showing.
   Author display:inline-flex would otherwise beat the hidden attribute. */
.pvi-upcoming__more[hidden],
.pvi-upcoming__load-more[hidden],
.pvi-upcoming__more.is-done .pvi-upcoming__load-more{
  display:none !important;
}

.pvi-upcoming__chip--free.is-selected,
.pvi-upcoming__chip--free[aria-pressed="true"]{
  background:#0F6A32;
  border-color:#0F6A32;
  color:#fff;
}

.pvi-upcoming__badge--free{
  display:inline-block;
  padding:1px 6px;
  border-radius:4px;
  background:#0F6A32;
  color:#fff;
  font-size:14px; /* 1.5.33: was 12px. White on #0F6A32 is 6.71:1. */
  font-weight:700;
  letter-spacing:.04em;
  line-height:1.4;
  vertical-align:baseline;
}

.pvi-upcoming__cost{
  font-weight:700;
  color:var(--pvi-ink);
}

/* Today / This Weekend: compact, no 8-row strip height. */
.pvi-upcoming--compact,
.pvi-upcoming--picks{
  min-height:0;
  padding:16px 0;
  background:transparent;
}
.pvi-upcoming--compact .pvi-upcoming__heading,
.pvi-upcoming--picks .pvi-upcoming__heading{
  font-size:1.25rem;
}
.pvi-upcoming__compact-list{
  list-style:none;
  margin:8px 0 0;
  padding:0;
}
.pvi-upcoming__compact-link{
  display:grid;
  grid-template-columns:1fr;
  align-items:start;
  gap:2px 12px;
  min-height:44px;
  padding:12px 0;
  border-bottom:1px solid var(--pvi-sand);
  color:inherit;
  text-decoration:none;
  cursor:pointer;
}
.pvi-upcoming__compact-time{
  font-weight:700;
  font-size:1rem; /* 1.5.33: was 15px */
  color:var(--pvi-muted);
}
.pvi-upcoming__compact-body{
  display:block;
  min-width:0;
}
.pvi-upcoming__compact-title{
  display:block;
  font-weight:700;
  font-size:1rem;
  line-height:1.3;
  color:var(--pvi-ink);
}
@media (min-width:600px){
  .pvi-upcoming__compact-link{
    grid-template-columns:9.5rem 1fr;
    align-items:baseline;
  }
}
.pvi-upcoming__compact-link:focus-visible{
  outline:3px solid var(--pvi-teal);
  outline-offset:2px;
}
.pvi-upcoming__compact-more{
  margin:4px 0 0;
}
@media (hover:hover) and (pointer:fine){
  .pvi-upcoming__compact-link:hover .pvi-upcoming__compact-title{text-decoration:underline}
}
@media (min-width:782px){
  .pvi-upcoming--compact,
  .pvi-upcoming--picks{
    min-height:0;
    max-width:680px;
  }
}

.pvi-upcoming__blurb{
  display:-webkit-box;
  -webkit-box-orient:vertical;
  -webkit-line-clamp:2;
  line-clamp:2;
  margin:2px 0 0;
  font-size:1rem; /* 1.5.33: card description. #3d4654 on paper is 9.06:1. */
  line-height:1.35;
  font-weight:400;
  color:#3d4654;
  overflow:hidden;
  white-space:normal;
}
.pvi-upcoming .pvi-upcoming__chips.is-overflowing{
  -webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 44px),transparent);
  mask-image:linear-gradient(90deg,#000 calc(100% - 44px),transparent);
  scroll-padding-inline-end:44px;
}
.pvi-upcoming .pvi-upcoming__chips.is-overflowing::after{
  content:"";
  flex:0 0 36px;
  height:1px;
}
.pvi-upcoming__see-all-link,
.pvi-upcoming__empty-link,
.pvi-upcoming__clear,
.pvi-upcoming__load-fallback,
.pvi-home-top__see a{
  min-height:44px;
  padding:12px 0;
  display:inline-flex;
  align-items:center;
  box-sizing:border-box;
}
.pvi-upcoming--term{min-height:0}
.pvi-upcoming__source-btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  box-sizing:border-box;
  min-height:44px;
  min-width:44px;
  max-width:100%;
  margin:0 0 12px 4.75rem;
  padding:8px 14px;
  border:2px solid var(--pvi-ink);
  border-radius:4px;
  background:var(--pvi-paper);
  color:var(--pvi-ink);
  font-weight:700;
  line-height:1.2;
  text-align:center;
  text-decoration:none;
  white-space:normal;
  overflow-wrap:anywhere;
  cursor:pointer;
}
@media (max-width:420px){
  .pvi-upcoming__source-btn{
    margin-left:0;
    margin-right:0;
  }
}
.pvi-upcoming__source-btn:focus-visible{
  outline:3px solid var(--pvi-teal);
  outline-offset:2px;
}
.pvi-faith-intro{
  margin:4px 0 12px;
  max-width:40rem;
  font-size:1rem;
  line-height:1.4;
  color:#3d4654;
}
footer a,
.site-footer a,
.wp-block-navigation .wp-block-navigation-item__content,
.wp-block-page-list a,
.menu a{
  min-height:44px;
  display:inline-flex;
  align-items:center;
  box-sizing:border-box;
}

.pvi-home-top{margin:0 0 1.5rem;max-width:100%}
.pvi-pick{
  background:#fbf9f4;
  color:#1c2430;
  border:1px solid #e9e1cf;
  border-radius:8px;
  margin:0 0 1.25rem;
  max-width:100%;
  overflow:hidden;
}
.pvi-pick__link{
  display:flex;
  flex-direction:column;
  color:#1c2430;
  text-decoration:none;
  cursor:pointer;
}
.pvi-pick__media{
  position:relative;
  display:block;
  width:100%;
  aspect-ratio:3 / 2;
  background:#1b2a55;
  overflow:hidden;
}
.pvi-pick__media--faith{background:#5b3a8c}
.pvi-pick__media--clubs-community,
.pvi-pick__media--community{background:#9a2e62}
.pvi-pick__media--arts,
.pvi-pick__media--election{background:#0f5e6e}
.pvi-pick__media--family,
.pvi-pick__media--schools{background:#8a5a00}
.pvi-pick__media--civic{background:#2e5e3e}
.pvi-pick__img,
.pvi-pick__mark{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  object-fit:cover;
  object-position:center;
  display:block;
}
.pvi-pick__img.pvi-ph{background:#fdf6eb}
/* 1.5.13 r2: AI school illustration on the pick card (display only) + visible caption. */
.pvi-pick__media--art{background:#eef1f6}
.pvi-pick__caption{
  position:absolute;
  right:.5rem;
  bottom:.5rem;
  padding:.1rem .45rem;
  border-radius:3px;
  background:rgba(20,26,38,.72);
  color:#fff;
  font:600 .875rem/1.4 "Source Sans 3","Source Sans Pro",sans-serif;
  letter-spacing:.02em;
}
.pvi-pick__body{padding:.9rem 1rem 1rem}
.pvi-pick__kicker{
  margin:0 0 .35rem;
  font-family:"Source Sans 3","Source Sans Pro",sans-serif;
  font-size:.8125rem;
  font-weight:700;
  letter-spacing:.04em;
  color:#0f5e6e;
}
.pvi-home-top__cat{
  display:inline-flex;
  align-items:center;
  gap:6px;
  font-family:"Source Sans 3","Source Sans Pro",sans-serif;
  font-weight:700;
}
.pvi-pick__title{
  margin:0 0 .35rem;
  font-family:"Source Serif 4",Georgia,serif;
  font-size:1.5rem;
  line-height:1.2;
  color:#1c2430;
}
.pvi-pick__when,
.pvi-pick__place{
  margin:0 0 .35rem;
  font-size:1rem;
  line-height:1.35;
  color:#1c2430;
}
.pvi-pick__details{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  box-sizing:border-box;
  min-height:44px;
  min-width:44px;
  margin-top:.45rem;
  padding:0 16px;
  background:#1b2a55;
  color:#fbf9f4;
  font-family:"Source Sans 3","Source Sans Pro",sans-serif;
  font-weight:700;
  border-radius:4px;
}
.pvi-pick__note{
  margin:0;
  padding:0 1rem .85rem;
  font-size:.875rem;
  line-height:1.35;
  color:#3d4654;
}
@media (max-width:600px){
  .pvi-pick__media--fallback{aspect-ratio:auto;height:56px}
  .pvi-pick__body{padding:.45rem .7rem .5rem}
}
@media (max-width:420px){
  .pvi-pick__body{padding:.4rem .65rem .45rem}
  .pvi-pick__kicker{margin-bottom:.15rem}
  .pvi-pick__title{font-size:1.25rem;line-height:1.15;margin-bottom:.2rem}
  .pvi-pick__when,
  .pvi-pick__place{margin-bottom:.15rem}
  .pvi-pick__details{display:flex;width:100%;margin-top:.2rem}
}
.pvi-pick__link:focus-visible,
.pvi-home-top__row:focus-visible,
.pvi-home-top__see a:focus-visible{
  outline:3px solid #0f6e56;
  outline-offset:2px;
}
.pvi-home-top__heading{
  margin:0;
  font-size:1.25rem;
}
.pvi-home-top__rows{
  list-style:none;
  margin:.4rem 0 0;
  padding:0;
}
.pvi-home-top__row{
  display:grid;
  grid-template-columns:1fr;
  gap:.15rem .75rem;
  min-height:44px;
  padding:12px 0;
  border-bottom:1px solid var(--pvi-sand,#e4ddd0);
  color:inherit;
  text-decoration:none;
  cursor:pointer;
}
.pvi-home-top__title{
  display:block;
  font-weight:700;
  line-height:1.3;
}
.pvi-home-top__blurb,
.pvi-home-top__when{
  display:block;
  color:#3d4654;
  font-size:.875rem;
  line-height:1.35;
}
.pvi-home-top__see{margin:.25rem 0 1rem}
@media (min-width:600px){
  .pvi-home-top__row{grid-template-columns:9.5rem 1fr;align-items:start}
}

.pvi-missed{
  box-sizing:border-box;
  width:100%;
  max-width:40rem;
  margin:1.5rem 0 0;
  padding:1rem;
  background:#fbf9f4;
  color:#1c2430;
  border:1px solid #e9e1cf;
  border-radius:8px;
}
.pvi-missed__title,
.pvi-suggest__title{
  margin:0 0 .35rem;
  font-size:1.25rem;
  line-height:1.3;
  color:#1c2430;
}
.pvi-missed__line,
.pvi-suggest__line{
  margin:0 0 .85rem;
  color:#3d4654;
  line-height:1.4;
}
.pvi-missed__panel{margin-top:.85rem}
.pvi-missed__panel[hidden]{display:none}
.pvi-missed__btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  box-sizing:border-box;
  min-height:44px;
  padding:0 1rem;
  background:#1b2a55;
  color:#fbf9f4;
  border-radius:6px;
  font-weight:700;
  text-decoration:none;
  cursor:pointer;
}
.pvi-suggest{
  box-sizing:border-box;
  width:100%;
  max-width:36rem;
  margin:0;
  color:#1c2430;
}
.pvi-suggest__status{
  margin:0 0 .85rem;
  line-height:1.4;
}
.pvi-suggest__status.is-ok{color:#0f5e6e}
.pvi-suggest__status.is-error{color:#1c2430}
.pvi-suggest label{
  display:block;
  margin:.85rem 0 .3rem;
  font-weight:700;
}
.pvi-suggest input,
.pvi-suggest select,
.pvi-suggest textarea{
  box-sizing:border-box;
  display:block;
  width:100%;
  max-width:100%;
  min-height:48px;
  padding:.5rem .7rem;
  font:inherit;
  font-size:16px;
  color:#1c2430;
  background:#fff;
  border:1px solid #e9e1cf;
  border-radius:6px;
}
.pvi-suggest textarea{min-height:6.5rem;resize:vertical}
.pvi-suggest__review{
  margin:.85rem 0 0;
  color:#3d4654;
  font-size:1rem;
  line-height:1.4;
}
.pvi-suggest__submit{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  box-sizing:border-box;
  width:100%;
  min-height:48px;
  margin-top:1rem;
  padding:0 1rem;
  font:inherit;
  font-size:16px;
  font-weight:700;
  color:#fbf9f4;
  background:#1c2a4a;
  border:0;
  border-radius:6px;
  cursor:pointer;
}
.pvi-suggest__form{position:relative}
.pvi-suggest__trap{
  position:absolute;
  left:-9999px;
  height:0;
  overflow:hidden;
}
.pvi-suggest__trap input{
  min-height:0;
  width:1px;
  height:1px;
  padding:0;
  border:0;
}
.pvi-missed__btn:focus-visible,
.pvi-suggest__submit:focus-visible,
.pvi-suggest input:focus-visible,
.pvi-suggest select:focus-visible,
.pvi-suggest textarea:focus-visible{
  outline:3px solid #0f5e6e;
  outline-offset:2px;
}
@media (max-width:420px){
  .pvi-missed__btn{display:flex;width:100%}
}

/* ===== 1.5.13 (Brian / UX Critic HOLD 2026-10-17) ===== */
/* "+N more on Sun, Oct 18 →" under a capped calendar day: 44px tap, 16px text. */
.pvi-upcoming__day-more{margin:0 0 6px;font-size:1rem;line-height:1.4}
.pvi-upcoming__day-more a{display:inline-flex;align-items:center;min-height:44px;font-weight:700;color:var(--pvi-link,#0b5a66);text-decoration:underline;text-underline-offset:2px}
.pvi-upcoming__day-more a:focus-visible{outline:3px solid var(--pvi-teal,#0b5a66);outline-offset:2px}
/* A chip filter that hides the day's list (view.js sets [hidden]) also hides its "+N more". */
.pvi-upcoming__list[hidden] + .pvi-upcoming__day-more,
.pvi-upcoming__day-more[hidden]{display:none!important}
/* Category fallback thumb (display-only, decorative). */
.pvi-upcoming__thumb--fallback{background:#EFF0E9;object-fit:cover}
/* Phones: event details at 16px (Critic #10); the category tag stays small meta. */
@media (max-width:599px){
  .pvi-upcoming .pvi-upcoming__blurb,
  .pvi-upcoming .pvi-upcoming__meta,
  .pvi-upcoming .pvi-upcoming__place,
  .pvi-upcoming .pvi-upcoming__when{font-size:1rem!important;line-height:1.4}
  .pvi-upcoming .pvi-upcoming__meta .pvi-upcoming__cat{font-size:.875rem!important}
}
/* Phones: a clearer "more chips →" cue (Critic #14): wider fade, always on below 782px. */
@media (max-width:781px){
  .pvi-upcoming .pvi-upcoming__chips,
  .pvi-upcoming .pvi-upcoming__chips.is-overflowing{
    -webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 72px),rgba(0,0,0,.15) calc(100% - 8px),transparent);
    mask-image:linear-gradient(90deg,#000 calc(100% - 72px),rgba(0,0,0,.15) calc(100% - 8px),transparent);
    scroll-padding-inline-end:72px}
  .pvi-upcoming .pvi-upcoming__chips::after,
  .pvi-upcoming .pvi-upcoming__chips.is-overflowing::after{content:"";flex:0 0 64px;height:1px}
}
/* 1.5.13: "See the full PV Calendar →" under Load more: 16px text, 44px tap target. */
.pvi-upcoming__more-alt{font-size:1rem!important}
.pvi-upcoming__more-alt a{display:inline-flex;align-items:center;min-height:44px}

/* ===== 1.5.13 r2 (Critic SHIP-WITH-FIXES, 2026-10-17) ===== */
/* Critic 8: date-tile words at 14px (THROUGH stays aria-hidden; the tile carries an aria-label). */
.pvi-upcoming .pvi-upcoming__date-month,
.pvi-upcoming .pvi-upcoming__date-weekday,
.pvi-upcoming .pvi-upcoming__date--today .pvi-upcoming__date-today{font-size:14px;letter-spacing:.04em}
/* Critic 5: homepage fallback / illustration thumbs smaller (48px) so rows stay short. */
.pvi-upcoming--grouped .pvi-upcoming__thumb--fallback{width:48px;height:48px;min-height:48px;max-height:48px;margin-top:4px}
.pvi-upcoming--grouped .pvi-upcoming__row-link:has(.pvi-upcoming__thumb--fallback) .pvi-upcoming__date{min-height:56px}
/* AI school illustration thumb (display only). */
.pvi-upcoming__thumb--art{background:#eef1f6}
/* Critic 6: one "See all N events →" link instead of Load more. */
.pvi-upcoming__more--see-all{margin-top:4px}
.pvi-upcoming__more--see-all[hidden]{display:none!important}
.pvi-upcoming__more--see-all .pvi-upcoming__more-alt{margin:0}
.pvi-upcoming__more--see-all .pvi-upcoming__more-alt a{display:inline-flex;align-items:center;min-height:44px;font-size:1rem;font-weight:700}
/* Critic 2: per-chip empty state. */
.pvi-upcoming [data-empty-chip][hidden]{display:none!important}
.pvi-upcoming [data-empty-chip] .pvi-upcoming__empty-link{display:inline-flex;align-items:center;min-height:44px}

/* 1.5.14 (Critic nit): THROUGH tile label at 14px; mixed case and no tracking so the tile stays narrow. */
.pvi-upcoming__date--through .pvi-upcoming__date-through,
.pvi-upcoming--grouped .pvi-upcoming__date--through .pvi-upcoming__date-through{font-size:14px;letter-spacing:0;text-transform:none;line-height:1.15}

/* ===== 1.5.15 (Brian via PM, 2026-10-17): "Show N more ▾" / "Show fewer ▴" day toggle ===== */
/* A real <button> between the day's shown rows and the rest of the day ([data-day-rest]).
   Shown only when scripting is on, so JS-off visitors get the <noscript> "+N more on <day> →"
   link instead; nothing is swapped after load (no flash, no layout shift). .has-day-toggle
   (set by view.js) covers browsers without the scripting media feature. */
.pvi-upcoming .pvi-upcoming__day-more:has(> .pvi-upcoming__day-toggle){margin:4px 0 10px}
.pvi-upcoming .pvi-upcoming__day-toggle{display:none}
@media (scripting:enabled){.pvi-upcoming .pvi-upcoming__day-toggle{display:flex}}
.pvi-upcoming.has-day-toggle .pvi-upcoming__day-toggle{display:flex}
.pvi-upcoming .pvi-upcoming__day-toggle{align-items:center;justify-content:center;gap:8px;box-sizing:border-box;width:100%;min-height:44px;margin:0;padding:8px 16px;
  border:2px solid var(--pvi-teal,#0F5E6E);border-radius:24px;background:#fff;color:var(--pvi-link,#0B5566);
  font-family:inherit;font-size:1rem!important;font-weight:700;line-height:1.25;text-align:center;cursor:pointer;-webkit-appearance:none;appearance:none}
.pvi-upcoming .pvi-upcoming__day-toggle[aria-expanded="true"]{background:var(--pvc-warm,#F2EDE2)}
.pvi-upcoming .pvi-upcoming__day-toggle:focus-visible{outline:3px solid var(--pvi-teal,#0F5E6E);outline-offset:2px}
@media (hover:hover) and (pointer:fine){.pvi-upcoming .pvi-upcoming__day-toggle:hover{background:var(--pvc-warm,#F2EDE2)}}
.pvi-upcoming .pvi-upcoming__day-toggle[hidden],
.pvi-upcoming .pvi-upcoming__day-all[hidden],
.pvi-upcoming .pvi-upcoming__list--rest[hidden]{display:none!important}
.pvi-upcoming .pvi-upcoming__day-toggle-arrow{font-size:.875em;line-height:1;color:currentColor}
.pvi-upcoming .pvi-upcoming__day-all{margin-top:4px}
.pvi-upcoming .pvi-upcoming__list--rest{margin-top:0}
/* 1.5.15 r2: second "Show fewer ▴" at the end of an open day (same button style). */
.pvi-upcoming .pvi-upcoming__day-less{margin:4px 0 12px}
.pvi-upcoming .pvi-upcoming__day-less[hidden]{display:none!important}
.pvi-upcoming .pvi-upcoming__day-toggle--end{background:var(--pvc-warm,#F2EDE2)}

/* 1.5.18 submit form: card, site primary button, 44px targets. */
.pvi-submit{
  box-sizing:border-box;
  width:100%;
  max-width:36rem;
  margin:0;
  padding:20px 16px 24px;
  background:#fff;
  color:#1c2430;
  border:1px solid #e9e1cf;
  border-left:6px solid #0f5e6e;
  border-radius:10px;
  font-size:1rem;
  line-height:1.5;
}
.pvi-submit *{box-sizing:border-box}
.pvi-submit__title{
  margin:0 0 8px;
  font-family:"Source Serif 4","Source Serif Pro",Georgia,serif;
  font-size:1.75rem;
  font-weight:600;
  line-height:1.25;
  color:#1c2430;
}
.pvi-submit__promise{margin:0 0 8px;font-size:1rem}
.pvi-submit__note{margin:16px 0 0;color:#4b5563;font-size:1rem}
.pvi-submit__status{margin:0 0 12px}
.pvi-submit__status.is-ok{color:#0f5e6e}
.pvi-submit label{
  display:block;
  margin:16px 0 6px;
  font-weight:700;
  font-size:1rem;
}
.pvi-submit input,
.pvi-submit select,
.pvi-submit textarea{
  display:block;
  width:100%;
  max-width:100%;
  min-height:48px;
  padding:10px 12px;
  font:inherit;
  font-size:16px;
  color:#1c2430;
  background:#fff;
  border:1px solid #e9e1cf;
  border-radius:8px;
}
.pvi-submit textarea{min-height:8rem;resize:vertical}
.pvi-submit__button{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:100%;
  min-height:48px;
  margin-top:20px;
  padding:12px 16px;
  font:inherit;
  font-size:1rem;
  font-weight:700;
  color:#fff;
  background:#0f5e6e;
  border:2px solid #0f5e6e;
  border-radius:8px;
  cursor:pointer;
}
.pvi-submit__button:hover{background:#1c2430;border-color:#1c2430}
.pvi-submit__form{position:relative}
.pvi-submit__trap{
  position:absolute;
  left:-9999px;
  height:0;
  overflow:hidden;
}
.pvi-submit__trap input{
  min-height:0;
  width:1px;
  height:1px;
  padding:0;
  border:0;
}
.pvi-submit a:focus-visible,
.pvi-submit__button:focus-visible,
.pvi-submit input:focus-visible,
.pvi-submit select:focus-visible,
.pvi-submit textarea:focus-visible{
  outline:3px solid #0f5e6e;
  outline-offset:2px;
}
.pvi-submit .pvi-consent,
.pvi-suggest .pvi-consent{
  display:flex;
  align-items:flex-start;
  gap:12px;
  margin:16px 0 0;
}
.pvi-submit .pvi-consent input,
.pvi-suggest .pvi-consent input{
  width:44px;
  height:44px;
  min-width:44px;
  min-height:44px;
  flex:0 0 44px;
  margin:0;
  padding:0;
  accent-color:#0f5e6e;
}
.pvi-submit .pvi-consent label,
.pvi-suggest .pvi-consent label{
  margin:10px 0 0;
  font-weight:400;
  line-height:1.45;
}
.pvi-submit .pvi-consent a,
.pvi-suggest .pvi-consent a{
  color:#0f5e6e;
  font-weight:700;
}
.pvi-submit .pvi-consent a:focus-visible,
.pvi-suggest .pvi-consent a:focus-visible,
.pvi-submit .pvi-consent input:focus-visible,
.pvi-suggest .pvi-consent input:focus-visible{
  outline:3px solid #0f5e6e;
  outline-offset:2px;
}
@media (max-width:599px){
  .pvi-submit .pvi-consent,
  .pvi-suggest .pvi-consent{margin-top:12px}
  .pvi-submit .pvi-consent input,
  .pvi-suggest .pvi-consent input{
    width:44px;
    height:44px;
    min-width:44px;
    min-height:44px;
  }
}
.pvi-upcoming__search{
  display:flex;
  gap:8px;
  margin:10px 0 0;
}
.pvi-upcoming__search input[type="search"]{
  flex:1 1 auto;
  min-width:0;
  min-height:48px;
  padding:8px 12px;
  border:1px solid #c5c0b6;
  border-radius:6px;
  background:#fff;
  color:#1c2430;
  font-size:1rem;
}
.pvi-upcoming__search button{
  min-height:48px;
  padding:8px 16px;
  border:0;
  border-radius:6px;
  background:#0f5e6e;
  color:#fff;
  font-size:1rem;
  font-weight:700;
  cursor:pointer;
}
.pvi-upcoming__search button:focus-visible,
.pvi-upcoming__search input:focus-visible{
  outline:3px solid #0f5e6e;
  outline-offset:2px;
}
/* 1.5.25: stored repeat. Same sand pill as the age label. Hidden when meta is empty.
   1.5.34: the weekday list wraps so "Weekly · Tue, Wed, Thu, Sat" is not clipped. */
.pvi-upcoming .pvi-upcoming__recur{
  display:inline-block;
  max-width:100%;
  margin:0 0.1em;
  padding:0 0.45em;
  border-radius:999px;
  background:var(--pvi-sand);
  color:var(--pvi-ink);
  font-family:inherit;
  font-size:14px; /* 1.5.33: was 12px */
  font-weight:600;
  line-height:1.45;
  letter-spacing:0.01em;
  white-space:normal;
  vertical-align:baseline;
  box-sizing:border-box;
}
.pvi-upcoming__chips--age{
  margin-top:8px;
}
.pvi-upcoming__chip--age.is-selected{
  background:var(--pvi-ink);
  border-color:var(--pvi-ink);
  color:#fff;
}

/* 1.5.23: colored forecast icon + daytime high, right-aligned on the day heading.
   With no forecast markup the heading is unchanged. */
body.home .pvi-upcoming__group--day:has(.pvi-wx),
.pvi-upcoming--grouped .pvi-upcoming__group--day:has(.pvi-wx){
  display:flex;
  align-items:center;
  justify-content:space-between;
  column-gap:6px;
  flex-wrap:nowrap;
  text-wrap:nowrap;
  white-space:nowrap;
}
body.home .pvi-upcoming__group--day:has(.pvi-wx) .pvi-upcoming__day-name,
.pvi-upcoming--grouped .pvi-upcoming__group--day:has(.pvi-wx) .pvi-upcoming__day-name{
  flex:0 0 auto;
  min-width:max-content;
  overflow:visible;
  white-space:nowrap;
}
.pvi-wx{
  display:inline-flex;
  align-items:center;
  flex:none;
  gap:4px;
  margin:0;
  padding:0;
  font-family:-apple-system,"Segoe UI",Roboto,"Public Sans",Arial,sans-serif;
  font-size:16px;
  font-weight:600;
  letter-spacing:0;
  text-transform:none;
  line-height:1;
  color:#1B2A55;
  white-space:nowrap;
  cursor:default;
}
.pvi-wx__temps,
.pvi-wx__high{
  font-size:16px;
  font-weight:600;
  line-height:1;
  color:#1B2A55;
}
.pvi-wx__low{
  font-size:14px;
  font-weight:400;
  color:#5B6573;
}
.pvi-wx__icon{
  display:block;
  width:20px;
  height:20px;
  flex:0 0 20px;
}
.pvi-wx__btn{
  appearance:none;
  -webkit-appearance:none;
  background:transparent;
  border:0;
  margin:0;
  padding:0;
  width:20px;
  height:20px;
  flex:0 0 20px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  line-height:0;
  font:inherit;
  color:inherit;
  cursor:pointer;
  border-radius:4px;
  position:relative;
  vertical-align:middle;
  touch-action:manipulation;
}
.pvi-wx__btn .pvi-wx__icon{
  width:20px;
  height:20px;
  flex:0 0 20px;
}
.pvi-wx__btn::after{
  content:"";
  position:absolute;
  left:50%;
  top:50%;
  width:32px;
  height:32px;
  transform:translate(-50%, -50%);
}
.pvi-upcoming__group--day .pvi-wx__btn::after{
  width:44px;
  height:44px;
}
.pvi-wx__btn:focus{outline:none}
.pvi-wx__btn:focus-visible{
  outline:3px solid var(--pvi-teal, #0F5E6E);
  outline-offset:2px;
}
.pvi-wx__sr{
  position:absolute;
  width:1px;
  height:1px;
  padding:0;
  margin:-1px;
  overflow:hidden;
  clip:rect(0,0,0,0);
  white-space:nowrap;
  border:0;
}
body.home p.pvi-wx__credit,
.pvi-upcoming--page p.pvi-wx__credit,
p.pvi-wx__credit{
  margin:6px 0 0;
  font-size:14px !important; /* 1.5.33: was 12px. Icon row above is unchanged. */
  font-weight:400;
  letter-spacing:0;
  text-transform:none;
  line-height:1.4;
  color:#4B5563; /* was #5B6573 (5.62:1 on #FBF9F4). Same hue, 7.18:1. */
}
.pvi-wx__credit a{
  color:inherit;
  font-weight:400;
  text-decoration:underline;
  text-underline-offset:2px;
}
.pvi-wx__credit a:focus-visible{
  outline:3px solid #0f5e6e;
  outline-offset:2px;
}
@media (max-width:320px){
  .pvi-wx__low{display:none}
  .pvi-event__forecast .pvi-wx__temps{font-size:0;line-height:0}
  .pvi-event__forecast .pvi-wx__high{font-size:16px;line-height:1}
}

/* 1.5.29: forecast details. Fixed to the viewport, so the calendar row does not move. */
.pvi-wx-pop[hidden]{display:none !important}
.pvi-wx-pop{
  position:fixed;
  inset:0;
  z-index:100000;
  display:flex;
  align-items:flex-end;
  justify-content:center;
  background:rgba(28,36,48,.4);
  padding:0;
  margin:0;
}
.pvi-wx-pop__sheet{
  box-sizing:border-box;
  width:100%;
  max-width:420px;
  max-height:min(70vh, 420px);
  overflow:auto;
  background:#FBF9F4;
  color:#1C2430;
  border-radius:16px 16px 0 0;
  padding:18px 18px calc(18px + env(safe-area-inset-bottom));
  box-shadow:0 -8px 28px rgba(28,36,48,.16);
  position:relative;
  font-family:"Source Sans 3","Source Sans Pro",-apple-system,"Segoe UI",sans-serif;
}
.pvi-wx-pop__x{
  position:absolute;
  top:10px;
  right:10px;
  width:32px;
  height:32px;
  border:0;
  border-radius:8px;
  background:transparent;
  color:#1C2430;
  font-size:22px;
  line-height:1;
  cursor:pointer;
}
.pvi-wx-pop__x:focus{outline:none}
.pvi-wx-pop__x:focus-visible{
  outline:3px solid #0F5E6E;
  outline-offset:2px;
}
.pvi-wx-pop__when{
  margin:0 36px 4px 0;
  font-size:14px; /* 1.5.33: was 13px */
  line-height:1.3;
  color:#4B5563;
}
.pvi-wx-pop__title{
  margin:0 36px 8px 0;
  font-family:"Source Serif 4","Iowan Old Style",Georgia,serif;
  font-size:22px;
  font-weight:600;
  line-height:1.25;
  letter-spacing:0;
  text-transform:none;
  color:#1C2430;
}
.pvi-wx-pop__temps{
  margin:0 0 12px;
  font-size:18px;
  font-weight:600;
  line-height:1.2;
  color:#1B2A55;
}
.pvi-wx-pop__low{font-weight:400}
.pvi-wx-pop__facts{
  margin:0;
  display:grid;
  gap:8px;
}
.pvi-wx-pop__facts div{
  display:flex;
  justify-content:space-between;
  gap:12px;
  margin:0;
  padding-top:8px;
  border-top:1px solid #E9E1CF;
}
.pvi-wx-pop__facts dt{
  margin:0;
  font-size:14px;
  font-weight:400;
  color:#4B5563;
}
.pvi-wx-pop__facts dd{
  margin:0;
  font-size:14px;
  font-weight:600;
  text-align:right;
  color:#1C2430;
}
.pvi-wx-pop__credit{
  margin:14px 0 0;
  font-size:14px; /* 1.5.33: was 12px */
  line-height:1.4;
  color:#4B5563; /* was #5B6573 (5.62:1 on #FBF9F4). Same hue, 7.18:1. */
}
.pvi-wx-pop__credit a{
  color:inherit;
  font-weight:400;
}
.pvi-wx-pop__head,.pvi-wx-pop__sub{display:contents}
.pvi-wx-pop__mark,.pvi-wx-pop__brief{display:none}
@media (min-width:768px){
  .pvi-wx-pop{
    inset:auto;
    display:block;
    width:240px;
    padding:0;
    margin:0;
    background:transparent;
    z-index:100000;
  }
  .pvi-wx-pop__sheet{
    width:240px;
    max-width:240px;
    max-height:none;
    overflow:visible;
    background:#FBF8F2;
    color:#1C2430;
    border:1px solid #E3DED3;
    border-radius:8px;
    padding:12px 14px;
    box-shadow:0 4px 12px rgba(27,42,85,.12);
  }
  .pvi-wx-pop__sheet::before{
    content:"";
    position:absolute;
    top:-5px;
    left:var(--pvi-wx-caret, 24px);
    width:8px;
    height:8px;
    background:#FBF8F2;
    border-left:1px solid #E3DED3;
    border-top:1px solid #E3DED3;
    transform:rotate(45deg);
  }
  .pvi-wx-pop--above .pvi-wx-pop__sheet::before{
    top:auto;
    bottom:-5px;
    border:0;
    border-right:1px solid #E3DED3;
    border-bottom:1px solid #E3DED3;
  }
  .pvi-wx-pop__x{
    top:0;
    right:0;
    width:44px;
    height:44px;
    font-size:24px;
    line-height:44px;
    padding:0;
  }
  .pvi-wx-pop__when,.pvi-wx-pop__facts{display:none}
  .pvi-wx-pop__head{
    display:flex;
    align-items:center;
    flex-wrap:nowrap;
    gap:6px;
    margin:0;
    min-height:24px;
    padding-right:36px;
  }
  .pvi-wx-pop__mark{display:block;flex:0 0 20px;width:20px;height:20px}
  .pvi-wx-pop__mark .pvi-wx__icon{width:20px;height:20px;flex-basis:20px}
  .pvi-wx-pop__title{
    flex:1 1 auto;
    min-width:0;
    margin:0;
    overflow:hidden;
    white-space:nowrap;
    text-overflow:ellipsis;
    font-family:"Source Serif 4","Iowan Old Style",Georgia,serif;
    font-size:16px;
    font-weight:600;
    line-height:1.2;
    color:#1B2A55;
  }
  .pvi-wx-pop__sub{
    display:flex;
    flex-wrap:wrap;
    align-items:baseline;
    column-gap:6px;
    row-gap:2px;
    margin-top:6px;
  }
  .pvi-wx-pop__temps{
    margin:0;
    font-family:"Public Sans",-apple-system,"Segoe UI",sans-serif;
    font-size:16px;
    font-weight:600;
    line-height:1.2;
    color:#1B2A55;
    white-space:nowrap;
  }
  .pvi-wx-pop__low{font-weight:400;color:#4B5563} /* 1.5.33: was #5B6573, 5.57:1 on #FBF8F2; now 7.13:1 */
  .pvi-wx-pop__brief{
    display:block;
    margin:0;
    font-family:"Public Sans",-apple-system,"Segoe UI",sans-serif;
    font-size:14px;
    font-weight:400;
    line-height:1.35;
    color:#4B5563; /* 1.5.33: was #5B6573, 5.57:1 on #FBF8F2; now 7.13:1 */
  }
  .pvi-wx-pop__brief[hidden]{display:none !important}
  .pvi-wx-pop__credit{margin:8px 0 0;font-size:14px;line-height:1.35}
}
@media (prefers-reduced-motion:reduce){
  .pvi-wx-pop__sheet{transition:none}
}

/* 1.5.39: first-visit note below filter chips (no overlap with chip row). */
.pvi-wx-hint[hidden]{display:none !important}
.pvi-wx-hint{
  position:relative;
  z-index:1;
  box-sizing:border-box;
  width:100%;
  max-width:100%;
  margin:6px 0 0;
  padding:8px 10px;
  background:#FBF9F4;
  color:#1C2430;
  border:1px solid #E9E1CF;
  border-radius:8px;
  box-shadow:0 2px 8px rgba(28,36,48,.08);
  font-family:"Source Sans 3","Source Sans Pro",-apple-system,"Segoe UI",sans-serif;
  font-size:14px; /* 1.5.33: was 13px. Ink on paper is 14.85:1. */
  font-weight:500;
  line-height:1.35;
  letter-spacing:0;
  text-transform:none;
  pointer-events:none;
}
.pvi-wx-hint::before{display:none}

/* ===== Roads this week (homepage card) ===== */
.pvi-roads{
  --rd-ink:#1B2A55;
  --rd-acc:#5B6573;
  --rd-link:#00756D;
  --rd-paper:#FBF8F2;
  --rd-rule:#E4DCCB;
  box-sizing:border-box;
  margin:16px 0 8px;
  max-width:100%;
  background:var(--rd-paper);
  border:1px solid var(--rd-rule);
  border-left:4px solid var(--rd-acc);
  border-radius:8px;
  padding:14px 14px 4px;
  font-family:"Public Sans",system-ui,sans-serif;
  color:var(--rd-ink);
}
.pvi-roads *{box-sizing:border-box}
.pvi-roads__hd{display:flex;align-items:center;gap:6px;margin:0}
.pvi-roads__icon{flex:0 0 20px;width:20px;height:20px;color:var(--rd-acc)}
.pvi-roads__h{margin:0;font:600 20px/1.25 "Source Serif 4",Georgia,serif;font-size:20px!important;line-height:1.25!important;color:var(--rd-ink)}
.pvi-roads p.pvi-roads__sub{margin:2px 0 4px 26px;font-size:14px;line-height:1.4;color:var(--rd-acc)}
.pvi-roads__list{list-style:none;margin:0;padding:0}
.pvi-roads__list li{border-top:1px solid var(--rd-rule)}
.pvi-roads__list li:first-child{border-top:0}
.pvi-roads__item{display:block;min-height:44px;padding:10px 0;text-decoration:none;color:inherit}
.pvi-roads__road{display:block;font-size:16px;line-height:1.35;font-weight:700}
.pvi-roads__when{display:block;font-size:16px;line-height:1.35;font-weight:400;margin-top:1px}
.pvi-roads__meta{display:block;font-size:14px;line-height:1.4;color:var(--rd-acc);margin-top:2px}
.pvi-roads__src{font-weight:700;color:var(--rd-link);text-decoration:underline;text-underline-offset:3px;white-space:nowrap}
.pvi-roads__item:hover .pvi-roads__road{text-decoration:underline}
.pvi-roads a:focus-visible{outline:3px solid var(--rd-link);outline-offset:2px;border-radius:4px}
.pvi-roads__ft{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:0 12px;border-top:1px solid var(--rd-rule)}
.pvi-roads__all{display:inline-flex;align-items:center;min-height:48px;font-size:16px;font-weight:700;color:var(--rd-link);text-decoration:underline;text-underline-offset:3px;white-space:nowrap}
.pvi-roads__upd{font-size:14px;color:var(--rd-acc);white-space:nowrap;padding-bottom:4px}

/* In-feed promo cards inside the calendar list */
.pvi-infeed{margin:16px 0;max-width:100%}
.pvi-infeed.pvi-recent-news .pvi-briefing{margin:0}
/* Design Desk F1–F5, F7 (homepage batch 1.5.38) */
body.home .pvi-infeed.pvi-hp-card{margin:16px 0;padding:14px 16px 12px;background:#fff;border:1px solid var(--hp-band);border-left-width:5px;border-radius:10px}
body.home .pvi-infeed p.pvi-hp-card__kicker{margin:0 0 4px;font-size:.875rem!important;font-weight:700;line-height:1.3;letter-spacing:.06em;text-transform:uppercase;color:var(--hp-band)}
body.home .pvi-infeed .pvi-infeed__h{margin:0;font-family:var(--hp-serif);font-weight:600;font-size:1.25rem;line-height:1.25}
body.home .pvi-infeed .pvi-infeed__h a{display:inline;min-height:0;color:var(--hp-ink);font-weight:600;text-decoration:none}
body.home .pvi-infeed p.pvi-infeed__body{margin:4px 0 0;font-size:1rem!important;line-height:1.45;color:var(--hp-muted);max-width:none;text-wrap:balance}
body.home .pvi-infeed p.pvi-hp-card__cta{margin:10px 0 2px!important;text-decoration:none}
body.home .pvi-infeed .pvi-hp-card__cta a{position:relative;z-index:1;display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 18px;border:2px solid var(--hp-band);border-radius:999px;font-size:1rem;font-weight:700;line-height:1.2;color:var(--hp-ink);text-decoration:none;background:#fff}
body.home .pvi-infeed .pvi-hp-card__cta a::after{content:"\2192";color:var(--hp-band)}
body.home .pvi-infeed .pvi-hp-card__cta a:hover{background:var(--hp-warm)}
body.home .pvi-infeed.is-election{--hp-band:#0F5E6E}
body.home .pvi-infeed.is-seasonal{--hp-band:#A3400C}
body.home .pvi-infeed.is-asks{--hp-band:#6B4E8A}
body.home .pvi-infeed--recent{--hp-band:#1B2A55}
body.home .pvi-infeed--recent .pvi-briefing{margin:0;padding:14px 16px 4px;background:#fff;border:1px solid var(--hp-band);border-left-width:5px;border-radius:10px;font-family:inherit}
body.home .pvi-infeed--recent .pvi-briefing__heading{margin:0;font-family:inherit;font-size:.875rem;font-weight:700;line-height:1.3;letter-spacing:.06em;text-transform:uppercase;color:var(--hp-band)}
body.home .pvi-infeed--recent .pvi-briefing__group{padding:0}
body.home .pvi-infeed--recent .pvi-briefing__line{padding:4px 0 6px}
body.home .pvi-infeed--recent .pvi-briefing__title{font-family:var(--hp-serif);font-size:1.25rem;font-weight:600;line-height:1.25;color:var(--hp-ink)}
body.home .pvi-infeed--recent .pvi-briefing__meta{margin:4px 0 2px;font-size:.875rem;color:#5B6573}
body.home .pvi-infeed--recent .pvi-briefing__blurb{margin-top:4px;font-size:1rem;line-height:1.45;color:var(--hp-muted);display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}
body.home .pvi-infeed--recent .pvi-recent-news__more{margin:4px 0 10px!important}
body.home .pvi-infeed--recent .pvi-recent-news__more a{display:inline-flex!important;align-items:center;gap:8px;min-height:44px;padding:0 18px!important;border:2px solid var(--hp-band);border-radius:999px;font-size:1rem;font-weight:700!important;color:var(--hp-ink);text-decoration:none}
body.home .pvi-roads{background:var(--rd-paper,#FBF8F2);border:1px solid #E4DCCB;border-left:4px solid #5B6573;border-radius:8px;padding:14px 14px 4px}
body.home .pvi-roads h2.pvi-roads__h{font-size:20px!important;line-height:1.25!important}

/* oct31 ballot under Pick: homepage-v4 .pvi-hp-card stretched link / underline CTA must not win. */
body.home .pvi-home-top .pvi-infeed.pvi-hp-card h3.pvi-infeed__h a::after{content:none!important;position:static!important;inset:auto!important}
body.home .pvi-home-top .pvi-infeed.pvi-hp-card h3.pvi-infeed__h a{min-height:0!important;display:inline!important}
body.home .pvi-home-top .pvi-infeed p.pvi-hp-card__cta{color:var(--hp-ink)!important;text-decoration:none!important}
body.home .pvi-home-top .pvi-infeed .pvi-hp-card__cta a{
  min-height:44px!important;max-height:44px;padding-top:0!important;padding-bottom:0!important;box-sizing:border-box;
  font-family:inherit!important;font-size:1rem!important
}

/* Phone: contain overflow on the pieces that caused 320px scroll (no global html/body clip). */
@media (max-width:390px){
  .pvi-upcoming--grouped{max-width:100%;min-width:0;overflow-x:clip}
  .pvi-upcoming__search{
    max-width:100%;
    min-width:0;
    box-sizing:border-box;
    display:flex;
    flex-wrap:wrap;
    gap:8px;
  }
  .pvi-upcoming__search input[type="search"]{
    flex:1 1 0;
    width:100%;
    max-width:100%;
    min-width:0;
    box-sizing:border-box;
  }
  .pvi-upcoming__search button{flex:0 0 auto;max-width:100%}
  .pvi-upcoming--grouped .pvi-upcoming__body{min-width:0;max-width:100%}
  .pvi-upcoming--grouped .pvi-upcoming__meta{
    white-space:normal;
    overflow-wrap:anywhere;
    max-width:100%;
  }
  .pvi-upcoming--grouped .pvi-upcoming__when{
    white-space:normal;
    overflow-wrap:anywhere;
    word-break:break-word;
    max-width:100%;
  }
  .pvi-upcoming__row-link{min-width:0;max-width:100%}
  .pvi-cc{
    max-width:100%;
    box-sizing:border-box;
    padding-left:env(safe-area-inset-left,0);
    padding-right:env(safe-area-inset-right,0);
  }
  .pvi-cc-bar{
    max-width:100%;
    min-width:0;
    box-sizing:border-box;
  }
  .pvi-cc-mode{flex-wrap:wrap;min-width:0;gap:8px}
  .pvi-cc-text{min-width:0;overflow-wrap:anywhere}
}

/* ===== 1.5.42 (UX Critic weekly sweep 2026-10-26) ===== */
/* Tap targets: 44px hit boxes with no change to what you see. Negative margins give back the
   extra size, so the row, icon, and text do not move. */
.pvi-upcoming__group--day .pvi-wx__btn{
  width:44px;height:44px;flex:0 0 44px;margin:-12px;
}
.pvi-upcoming__group--day .pvi-wx__btn::after{content:none}
/* "National Weather Service" credit: inline link, taller hit area on the same line box. */
.pvi-wx__credit a{padding:14px 2px;margin:0 -2px}
/* Ballot card heading link: stays inline text; 10px more above and below = 44px+ tall. */
body.home .pvi-home-top .pvi-infeed.pvi-hp-card h3.pvi-infeed__h a{
  display:inline-block!important;padding:10px 0;margin:-10px 0;
}
/* #47: calendar thumbs. The box keeps its size and the art's own cream; a thumb that fails to
   load is removed by view.js so the row reflows to text-only. */
.pvi-upcoming__thumb.pvi-ph{background:#fdf6eb}
