/**
 * Catalog + schedule-at-a-glance styles.
 *
 * Deliberately light-touch: typography (family/size) is inherited from the
 * Divi child theme so the catalog matches the site; this sheet only supplies
 * layout and the state colors the spec requires. Senior audience + WCAG 2.1
 * AA: generous targets, visible focus, no color-only meaning (status is
 * always worded), and all colors ≥ 4.5:1 on white.
 */

/* ---- Layout: filters sidebar (1/4) + results (3/4) ---- */

.cllcw-catalog {
	display: grid;
	grid-template-columns: 1fr;
	gap: 1.5rem;
	align-items: start;
}

/* Full-bleed at every width: break out of the theme's boxed content column
   so the catalog gets the whole viewport on desktop, tablet, and mobile
   alike. Opt out with full_width="no". No vertical padding — spacing
   above/below is managed in the Divi 5 builder (client decision,
   2026-07-14). */
.cllcw-catalog--full {
	margin-inline: calc(50% - 50vw);
	padding-inline: clamp(1rem, 3vw, 3rem);
}

@media (min-width: 900px) {
	.cllcw-catalog:not(.cllcw-catalog--no-filters) {
		grid-template-columns: minmax(230px, 1fr) 3fr;
	}

	.cllcw-filters-panel {
		position: sticky;
		top: 1rem;
	}
}

/* ---- Collapsible filter panel ---- */

.cllcw-filters-panel {
	border: 1px solid #c3c4c7;
	border-radius: 8px;
	background: #fff;
	overflow: hidden;
}

.cllcw-filters-panel__toggle {
	list-style: none;
	display: flex;
	align-items: center;
	gap: 0.75rem;
	padding: 0.875rem 1rem;
	min-height: 48px;
	background: #1d2327;
	color: #fff;
	font-weight: 700;
	cursor: pointer;
	user-select: none;
}

.cllcw-filters-panel__toggle::-webkit-details-marker {
	display: none;
}

.cllcw-filters-panel__toggle:hover,
.cllcw-filters-panel__toggle:focus {
	background: #3c434a;
}

.cllcw-filters-panel__toggle:focus-visible {
	outline: 2px solid #1d2327;
	outline-offset: 2px;
}

.cllcw-filters-panel__icon {
	flex: 0 0 auto;
	transition: transform 0.15s ease-in-out;
}

.cllcw-filters-panel__icon::before {
	content: "\25B6"; /* ▶ — rotates to point down when open */
	font-size: 0.85em;
	display: inline-block;
}

.cllcw-filters-panel[open] .cllcw-filters-panel__icon::before {
	transform: rotate(90deg);
}

.cllcw-filters-panel__label {
	display: flex;
	flex-direction: column;
	gap: 0.125rem;
	flex: 1 1 auto;
}

.cllcw-filters-panel__hint {
	font-weight: 400;
	font-size: 0.85em;
	opacity: 0.85;
}

.cllcw-filters-panel:not([open]) .cllcw-filters-panel__hint--hide {
	display: none;
}

.cllcw-filters-panel[open] .cllcw-filters-panel__hint--show {
	display: none;
}

.cllcw-filters-panel__badge {
	flex: 0 0 auto;
	background: #fff;
	color: #1d2327;
	border-radius: 999px;
	padding: 0.125rem 0.75rem;
	font-size: 0.85em;
	font-weight: 700;
}

/* Desktop sidebar is narrow: stack the badge under the hint text so
   "Find a course" never wraps. (Must come after the flex rule above.) */
@media (min-width: 900px) {
	.cllcw-filters-panel__toggle {
		display: grid;
		grid-template-columns: auto 1fr;
		align-items: start;
	}

	.cllcw-filters-panel__badge {
		grid-column: 2;
		justify-self: start;
		margin-top: 0.375rem;
	}
}

/* ---- Filter form (stacked for the sidebar) ---- */

.cllcw-filters > fieldset {
	border: none;
	margin: 0;
	padding: 1rem;
	display: flex;
	flex-direction: column;
	gap: 1rem;
}

.cllcw-filters__field {
	display: flex;
	flex-direction: column;
	gap: 0.25rem;
	margin: 0;
}

.cllcw-filters__field label {
	font-weight: 600;
}

.cllcw-filters__field select,
.cllcw-filters__field input[type="search"],
.cllcw-filters__field input[type="date"],
.cllcw-filters__field input[type="time"] {
	min-height: 44px; /* WCAG 2.5.5-ish target size for senior visitors */
	padding: 0.375rem 0.625rem;
	font-size: inherit;
	width: 100%;
}

.cllcw-filters__group,
.cllcw-filters__days {
	border: 1px solid #c3c4c7;
	border-radius: 6px;
	margin: 0;
	padding: 0.5rem 0.75rem 0.75rem;
}

.cllcw-filters__group legend,
.cllcw-filters__days legend {
	font-weight: 600;
	padding: 0 0.375rem;
}

.cllcw-filters__group {
	display: flex;
	flex-direction: column;
	gap: 0.75rem;
}

.cllcw-filters__days {
	display: flex;
	flex-flow: row wrap;
	gap: 0 0.875rem;
}

.cllcw-filters__day {
	display: inline-flex;
	align-items: center;
	gap: 0.375rem;
	min-height: 44px;
	font-weight: 400;
}

.cllcw-filters__day input[type="checkbox"] {
	width: 1.25rem;
	height: 1.25rem;
}

.cllcw-filters__actions {
	display: flex;
	align-items: center;
	gap: 1rem;
	margin: 0;
	flex-wrap: wrap;
}

.cllcw-filters__clear {
	text-decoration: underline;
}

/* ---- Toolbar: count + view toggle ---- */

.cllcw-catalog__toolbar {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
	flex-wrap: wrap;
	margin: 0 0 1rem;
}

.cllcw-catalog__count {
	margin: 0;
	font-weight: 600;
}

.cllcw-view-toggle {
	display: inline-flex;
	border: 1px solid #50575e;
	border-radius: 6px;
	overflow: hidden;
}

.cllcw-view-toggle__btn {
	min-height: 44px;
	padding: 0.375rem 1rem;
	border: none;
	background: #fff;
	color: #1d2327;
	font: inherit;
	font-weight: 600;
	cursor: pointer;
}

.cllcw-view-toggle__btn + .cllcw-view-toggle__btn {
	border-left: 1px solid #50575e;
}

.cllcw-view-toggle__btn.is-active {
	background: #1d2327;
	color: #fff;
}

.cllcw-view-toggle__btn:focus-visible {
	outline: 2px solid #1d2327;
	outline-offset: -4px;
}

.cllcw-catalog--loading [data-cllcw-results] {
	opacity: 0.5;
	transition: opacity 0.15s ease-in-out;
}

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

.cllcw-grid {
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	gap: 1.5rem;
	grid-template-columns: 1fr;
}

@media (min-width: 640px) {
	.cllcw-grid--cols-2,
	.cllcw-grid--cols-3,
	.cllcw-grid--cols-4 {
		grid-template-columns: repeat(2, 1fr);
	}
}

@media (min-width: 980px) {
	.cllcw-grid--cols-3 {
		grid-template-columns: repeat(3, 1fr);
	}

	.cllcw-grid--cols-4 {
		grid-template-columns: repeat(4, 1fr);
	}
}

.cllcw-grid__item {
	margin: 0;
	display: flex;
}

/* List view: compact single-row items, expandable per card (see below,
   after the card base styles, so the overrides win the cascade). */

.cllcw-catalog__results--list .cllcw-grid {
	grid-template-columns: 1fr;
	gap: 1rem;
}

/* ---- Pagination ---- */

.cllcw-pagination {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	align-items: center;
	gap: 0.5rem;
	margin-top: 1.5rem;
}

.cllcw-pagination__link {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 44px;
	min-height: 44px;
	padding: 0.375rem 0.75rem;
	border: 1px solid #50575e;
	border-radius: 6px;
	font-weight: 600;
	text-decoration: none;
	color: #1d2327;
	background: #fff;
}

.cllcw-pagination__link:hover,
.cllcw-pagination__link:focus {
	background: #f0f0f1;
}

.cllcw-pagination__link:focus-visible {
	outline: 2px solid #1d2327;
	outline-offset: 2px;
}

.cllcw-pagination__link.is-current {
	background: #1d2327;
	color: #fff;
	border-color: #1d2327;
}

/* ---- Card (grid view is the base) ----
   __top and __body are display:contents in grid mode so their children
   stack as direct flex items in visual order: image, head, meta,
   instructors, description, then the cart CTA pinned to the bottom. */

.cllcw-card {
	border: 1px solid #c3c4c7;
	border-radius: 8px;
	padding: 1.25rem;
	display: flex;
	flex-direction: column;
	gap: 0.75rem;
	width: 100%;
	background: #fff;
}

.cllcw-card__top,
.cllcw-card__body {
	display: contents;
}

.cllcw-card__media {
	order: 1;
	/* Bleed to the card edges above the padded content. */
	margin: -1.25rem -1.25rem 0;
}

.cllcw-card__head {
	order: 2;
	display: flex;
	flex-direction: column;
	gap: 0.75rem;
}

.cllcw-card__meta {
	order: 3;
}

.cllcw-card__instructors {
	order: 4;
}

.cllcw-card__details {
	order: 5;
}

.cllcw-card__cta {
	order: 6;
	margin-top: auto;
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 0.625rem;
	padding-top: 0.25rem;
}

/* Grid mode: everything is already visible, and the brief line would
   duplicate the meta list. */
.cllcw-card__expand,
.cllcw-card__brief {
	display: none;
}

.cllcw-card__image {
	display: block;
	width: 100%;
	aspect-ratio: 3 / 2;
	object-fit: cover;
	border-radius: 7px 7px 0 0;
}

.cllcw-card__image--placeholder {
	display: flex;
	align-items: center;
	justify-content: center;
	background: #f0f0f1;
	color: #8c8f94;
}

.cllcw-card__title {
	margin: 0;
	font-size: 1.25em;
	line-height: 1.3;
}

.cllcw-card__badges {
	margin: 0;
	display: flex;
	flex-wrap: wrap;
	gap: 0.5rem;
}

.cllcw-badge {
	display: inline-block;
	padding: 0.125rem 0.625rem;
	border-radius: 999px;
	font-size: 0.85em;
	font-weight: 600;
	border: 1px solid #50575e;
	color: #1d2327;
	background: #f6f7f7;
}

.cllcw-badge--status-open {
	border-color: #00450c;
	color: #00450c;
	background: #edfaef;
}

.cllcw-badge--status-waitlisted {
	border-color: #8a1f11;
	color: #8a1f11;
	background: #fcf0f1;
}

.cllcw-badge--session {
	border-color: #275317;
	color: #275317;
	background: #eef6ea;
}

.cllcw-card__meta {
	margin: 0;
	display: grid;
	grid-template-columns: auto 1fr;
	gap: 0.25rem 0.75rem;
}

.cllcw-card__meta dt {
	font-weight: 700;
	margin: 0;
}

.cllcw-card__meta dd {
	margin: 0;
}

/* Optional per-course location note ("Final session meets on Zoom") —
   its own line under the venue, italic so it reads as an aside. */
.cllcw-card__location-note {
	display: block;
	font-style: italic;
	font-size: 0.95em;
}

.cllcw-card__seats {
	margin: 0;
	font-weight: 700;
	color: #00450c;
}

.cllcw-card__waitlist {
	margin: 0;
	font-weight: 700;
	color: #a4262c; /* 4.5:1+ on white; state is also worded, never color-only */
}

.cllcw-card__closed {
	margin: 0;
	font-weight: 700;
	color: #50575e;
}

.cllcw-card__ended {
	margin: 0;
	font-weight: 700;
	color: #50575e; /* state is worded, never color-only */
}

/* Ended courses stay browsable but read as past: muted media, gray badge. */
.cllcw-card--expired .cllcw-card__image {
	filter: grayscale(1);
	opacity: 0.75;
}

.cllcw-badge--status-expired {
	border-color: #50575e;
	color: #50575e;
	background: #f0f0f1;
}

/* ---- Membership purchase card (catalog lead card + [cll_membership]) ----
   A subtle accent border/background distinguishes it from course cards at
   a glance, without color being the only signal (the heading says
   "Term Membership" plainly). Shares .cllcw-card's box/flex rules so it
   sits flush in the grid; only the accent and price line are new. */

.cllcw-membership-card {
	border: 1px solid #c3c4c7;
	border-left: 4px solid #a64a08; /* brand orange accent (2026-08-17 a11y palette) */
	border-radius: 8px;
	padding: 1.25rem;
	display: flex;
	flex-direction: column;
	gap: 0.75rem;
	width: 100%;
	background: #fdf6f0;
}

.cllcw-membership-card__title {
	margin: 0;
	font-size: 1.25em;
	line-height: 1.3;
}

.cllcw-membership-card__price {
	margin: 0;
	font-weight: 700;
	color: #7a3706; /* darker shade of the accent for 4.5:1+ contrast on #fdf6f0 */
}

.cllcw-membership-card__body {
	margin: 0;
}

.cllcw-membership-card__body p {
	margin: 0 0 0.5rem;
}

.cllcw-membership-card__body p:last-child {
	margin-bottom: 0;
}

.cllcw-membership-card__cta {
	margin: 0.25rem 0 0;
}

.cllcw-membership-card__closed,
.cllcw-membership-card__active {
	font-weight: 600;
}

/* ---- Expandable description ---- */

.cllcw-card__details summary {
	cursor: pointer;
	font-weight: 600;
	min-height: 44px;
	display: flex;
	align-items: center;
	text-decoration: underline;
}

.cllcw-card__details summary:focus-visible {
	outline: 2px solid currentColor;
	outline-offset: 2px;
}

/* ---- Instructors: one expandable row per instructor ---- */

.cllcw-card__instructors-label {
	margin: 0 0 0.375rem;
	font-weight: 700;
}

.cllcw-instructor {
	border: 1px solid #e0e0e0;
	border-radius: 6px;
}

.cllcw-instructor + .cllcw-instructor {
	margin-top: 0.375rem;
}

.cllcw-instructor__summary {
	list-style: none;
	display: flex;
	align-items: center;
	gap: 0.625rem;
	min-height: 44px;
	padding: 0.25rem 0.75rem;
	cursor: pointer;
	font-weight: 600;
}

.cllcw-instructor__summary::-webkit-details-marker {
	display: none;
}

.cllcw-instructor__summary:hover,
.cllcw-instructor__summary:focus {
	background: #f6f7f7;
}

.cllcw-instructor__summary:focus-visible {
	outline: 2px solid #1d2327;
	outline-offset: -2px;
}

.cllcw-instructor__avatar {
	width: 36px;
	height: 36px;
	object-fit: cover;
	border-radius: 50%;
	flex: 0 0 auto;
}

.cllcw-instructor__name {
	flex: 1 1 auto;
}

.cllcw-instructor__chevron::before {
	content: "\25BE"; /* ▾ */
	display: inline-block;
	transition: transform 0.15s ease-in-out;
}

.cllcw-instructor[open] .cllcw-instructor__chevron::before {
	transform: rotate(180deg);
}

.cllcw-instructor__panel {
	padding: 0 0.75rem 0.75rem;
}

.cllcw-instructor__blurb {
	margin: 0 0 0.5rem;
}

.cllcw-instructor__more {
	text-decoration: underline;
	font-weight: 600;
}

/* ---- "Show details" toggle (list view only) ---- */

.cllcw-card__expand {
	align-items: center;
	gap: 0.375rem;
	min-height: 44px;
	padding: 0.375rem 1rem;
	border: 2px solid #1d2327;
	border-radius: 6px;
	background: #fff;
	color: #1d2327;
	font: inherit;
	font-weight: 700;
	cursor: pointer;
}

.cllcw-card__expand:hover,
.cllcw-card__expand:focus {
	background: #f0f0f1;
}

.cllcw-card__expand:focus-visible {
	outline: 2px solid #1d2327;
	outline-offset: 2px;
}

.cllcw-card__expand-hide,
.cllcw-card.is-open .cllcw-card__expand-show {
	display: none;
}

.cllcw-card.is-open .cllcw-card__expand-hide {
	display: inline;
}

/* ---- List view: compact rows, expandable per card ---- */

.cllcw-catalog__results--list .cllcw-card {
	display: block;
}

.cllcw-catalog__results--list .cllcw-card__top {
	display: flex;
	align-items: center;
	gap: 1rem;
	flex-wrap: wrap;
}

.cllcw-catalog__results--list .cllcw-card__media {
	margin: 0;
	flex: 0 0 auto;
}

.cllcw-catalog__results--list .cllcw-card__image {
	width: 72px;
	height: 72px;
	aspect-ratio: 1 / 1;
	border-radius: 6px;
}

.cllcw-catalog__results--list .cllcw-card__head {
	flex: 1 1 16rem;
	gap: 0.375rem;
}

.cllcw-catalog__results--list .cllcw-card__brief {
	display: block;
	margin: 0;
}

.cllcw-catalog__results--list .cllcw-card__cta {
	display: flex;
	flex-direction: row;
	align-items: center;
	flex-wrap: wrap;
	gap: 0.75rem;
	margin-left: auto;
	margin-top: 0;
	padding-top: 0;
}

.cllcw-catalog__results--list .cllcw-card__expand {
	display: inline-flex;
}

.cllcw-catalog__results--list .cllcw-card__body {
	display: none;
}

.cllcw-catalog__results--list .cllcw-card.is-open .cllcw-card__body {
	display: flex;
	flex-direction: column;
	gap: 0.75rem;
	margin-top: 1rem;
	padding-top: 1rem;
	border-top: 1px solid #e0e0e0;
}

/* Narrow screens: keep the list row genuinely compact — thumbnail stays
   beside the title instead of wrapping onto its own line. */
@media (max-width: 600px) {
	.cllcw-catalog__results--list .cllcw-card {
		padding: 0.875rem;
	}

	.cllcw-catalog__results--list .cllcw-card__top {
		gap: 0.75rem;
	}

	.cllcw-catalog__results--list .cllcw-card__image {
		width: 56px;
		height: 56px;
	}

	.cllcw-catalog__results--list .cllcw-card__head {
		flex: 1 1 0;
		min-width: 0;
	}

	.cllcw-catalog__results--list .cllcw-card__title {
		font-size: 1.05em;
	}

	.cllcw-catalog__results--list .cllcw-card__cta {
		margin-left: 0;
		flex-basis: 100%;
	}
}

/* ---- Form-field typography (senior audience) ----
   Like <button>, form fields don't inherit the page's font: the UA
   default is ~13px, far too small for this audience. Match every
   plugin field to the surrounding text (18px site font). Buttons get
   the same treatment in their own blocks (font-weight differs). */

[class*="cllcw-"] :is(input, select, textarea) {
	font: inherit;
}

/* ---- Keyboard focus (WCAG 2.4.7) ----
   The theme zeroes the UA focus ring on inputs/selects/links, which
   leaves keyboard visitors with no indicator on the filter fields,
   wizard fields, and text links. Restore one on every plugin surface.
   Plugin buttons/summaries keep their own :focus-visible styles. */

[class*="cllcw-"] :is(a, input, select, textarea):focus-visible,
a[class*="cllcw-"]:focus-visible {
	outline: 2px solid #1d2327;
	outline-offset: 1px;
}

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

.cllcw-button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 0.375rem;
	min-height: 44px;
	padding: 0.5rem 1.25rem;
	border: 2px solid transparent;
	border-radius: 6px;
	background: #1d2327;
	color: #fff;
	font: inherit; /* <button> UA default is ~13px Arial — match the page's type (senior audience) */
	font-weight: 700;
	text-decoration: none;
	cursor: pointer;
}

.cllcw-button:hover,
.cllcw-button:focus {
	background: #3c434a;
	color: #fff;
}

.cllcw-button:focus-visible {
	outline: 2px solid #1d2327;
	outline-offset: 2px;
}

/* ---- Schedule at a glance ---- */

/* Full-bleed at every width — the schedule is a wide table and the boxed
   content column wastes the margins on all devices. full_width="no" opts
   out. */
.cllcw-glance--full {
	margin-inline: calc(50% - 50vw);
	padding-inline: clamp(1rem, 3vw, 3rem);
}

/* Month/session headings ("Session 1 — September") sit above their days. */
.cllcw-glance__session {
	margin: 2.5rem 0 0.25rem;
	padding-bottom: 0.375rem;
	border-bottom: 3px solid #00539b;
}

.cllcw-glance__session:first-of-type {
	margin-top: 1rem;
}

.cllcw-glance__day {
	margin: 1.5rem 0 0.5rem;
}

.cllcw-glance__table {
	width: 100%;
	border-collapse: collapse;
}

.cllcw-glance__table th,
.cllcw-glance__table td {
	border: 1px solid #c3c4c7;
	padding: 0.625rem 0.75rem;
	text-align: left;
	vertical-align: top;
}

.cllcw-glance__table th {
	background: #f6f7f7;
}

/* Narrow screens: each row becomes a stacked card (cell labels come from
   data-label), so the five columns never force horizontal scrolling. */
@media (max-width: 640px) {
	.cllcw-glance__table,
	.cllcw-glance__table tbody,
	.cllcw-glance__table tr,
	.cllcw-glance__table td {
		display: block;
		width: 100%;
	}

	.cllcw-glance__table thead {
		position: absolute;
		width: 1px;
		height: 1px;
		overflow: hidden;
		clip: rect(1px, 1px, 1px, 1px);
		clip-path: inset(50%);
	}

	.cllcw-glance__table tr {
		border: 1px solid #c3c4c7;
		border-radius: 8px;
		padding: 0.375rem 0.875rem;
		background: #fff;
	}

	.cllcw-glance__table tr + tr {
		margin-top: 0.75rem;
	}

	.cllcw-glance__table td {
		display: flex;
		gap: 0.75rem;
		border: none;
		border-bottom: 1px solid #f0f0f1;
		padding: 0.5rem 0;
	}

	.cllcw-glance__table td:last-child {
		border-bottom: none;
	}

	.cllcw-glance__table td::before {
		content: attr(data-label);
		font-weight: 700;
		flex: 0 0 5.5rem;
	}
}

/* ---- Utility (theme may already provide this) ---- */

.cllcw-catalog .screen-reader-text,
.cllcw-glance .screen-reader-text {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip: rect(1px, 1px, 1px, 1px);
	clip-path: inset(50%);
	white-space: nowrap;
}

/* ---- Waitlist join notices (grid-width, above the panel) ---- */

.cllcw-catalog__notice {
	grid-column: 1 / -1;
	padding: 0.75rem 1rem;
	border-left: 4px solid #1e6b2e;
	background: #f1f8f2;
	font-weight: 700;
}

.cllcw-catalog__notice--error {
	border-left-color: #a4262c;
	background: #fdf3f4;
}

/* ---- Faculty roles ([cll_faculty_roles] on the instructor page) ----
   One role reads as a single line; two or more become a bulleted list so
   long lecture titles + dates stay scannable (issue #154). Divi strips
   bullets from lists inside modules, so the disc is restated here. */

.cllcw-el--faculty-roles .cllcw-faculty-roles__role {
	margin: 0 0 0.75em;
}

.cllcw-el--faculty-roles .cllcw-faculty-roles__label {
	margin: 0 0 0.25em;
}

.cllcw-el--faculty-roles ul.cllcw-faculty-roles__items {
	list-style: disc outside !important;
	margin: 0 0 0 1.5em;
	padding: 0;
}

.cllcw-el--faculty-roles .cllcw-faculty-roles__item {
	list-style: disc outside !important;
	margin: 0 0 0.35em;
	padding: 0;
}

.cllcw-el--faculty-roles .cllcw-faculty-roles__item:last-child {
	margin-bottom: 0;
}

/* ---- Schedule-at-a-glance: print button + clean print output ---- */

.cllcw-glance__print-btn {
	display: inline-flex;
	align-items: center;
	gap: 0.4rem;
	min-height: 44px;
	padding: 0.5rem 1.25rem;
	border: 2px solid transparent;
	border-radius: 6px;
	background: #00539b;
	color: #fff;
	font: inherit;
	font-weight: 700;
	cursor: pointer;
	text-decoration: none; /* The button is an <a> to the PDF endpoint. */
}

.cllcw-glance__print-btn:hover,
.cllcw-glance__print-btn:focus {
	background: #003d73;
	color: #fff;
}

/* Decorative printer icon — an SVG mask filled with the button's text color.
   (The old "\1F5B6" printer codepoint has no glyph in most fonts and rendered
   as a blank square.) */
.cllcw-glance__print-btn::before {
	content: "";
	width: 1.1em;
	height: 1.1em;
	background: currentColor;
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z'/%3E%3C/svg%3E") no-repeat center / contain;
	mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z'/%3E%3C/svg%3E") no-repeat center / contain;
}

/* Comfortable page margins on paper — every page, including 2+.
   Deliberately OUTSIDE the media block: Chrome ignores @page rules
   nested inside @media print. @page only applies when printing. */
@page {
	margin: 2cm 1.8cm;
}

@media print {
	/* Only the schedule prints: site chrome and the button disappear. */
	#main-header,
	#et-main-area nav,
	.et-l--header,
	.et-l--footer,
	#footer-bottom,
	.cllcw-glance__print {
		display: none !important;
	}

	/* Divi constrains rows/sections to screen-sized boxed columns, which
	   squeezes the tables into a strip on paper (mid-word wrapping).
	   Let the containers holding the glance span the full page box, and
	   drop their card chrome. */
	.et_pb_section:has(.cllcw-glance),
	.et_pb_row:has(.cllcw-glance),
	.et_pb_column:has(.cllcw-glance),
	.et_pb_module:has(.cllcw-glance) {
		width: 100% !important;
		max-width: 100% !important;
		padding-left: 0 !important;
		padding-right: 0 !important;
		margin-left: 0 !important;
		margin-right: 0 !important;
		box-shadow: none !important;
		border: none !important;
		background: none !important;
	}

	/* Undo the full-bleed viewport breakout — page box, not viewport. */
	.cllcw-glance--full {
		margin-inline: 0;
		padding-inline: 0;
	}

	.cllcw-glance__table {
		width: 100% !important;
		table-layout: auto;
		font-size: 10pt;
		break-inside: auto;
	}

	.cllcw-glance__table th,
	.cllcw-glance__table td {
		padding: 4pt 6pt;
		/* Wrap at spaces only — never mid-word. */
		word-break: normal;
		overflow-wrap: normal;
		hyphens: none;
	}

	.cllcw-glance__session {
		break-after: avoid-page;
		page-break-after: avoid;
		margin-top: 18pt;
	}

	.cllcw-glance__day {
		break-after: avoid-page;
		page-break-after: avoid;
		margin-top: 12pt;
	}

	.cllcw-glance__table tr {
		break-inside: avoid;
		page-break-inside: avoid;
	}
}
