/* Camp flyer — print-first stylesheet.
 *
 * Standalone: this page does not load style.css. The site stylesheet is 213 KB of screen
 * layout that would have to be undone for print, and the flyer has to fit exactly one
 * sheet. Everything here is sized in inches/points so the screen preview and the printed
 * page agree.
 *
 * Spec: docs/platform/camp-flyer-spec.md
 */

@page {
	size: letter portrait;
	margin: 0.45in;
}

:root {
	--ink: #1b1b1b;
	--muted: #5a5a5a;
	--rule: #d4d4d4;
	--accent: #003b71; /* NBC navy */
}

* { box-sizing: border-box; }

html, body {
	margin: 0;
	padding: 0;
	background: #f2f2f2;
	color: var(--ink);
	font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
	-webkit-print-color-adjust: exact;
	print-color-adjust: exact;
}

/* On screen the sheet is shown as a page-shaped card so the author sees the real
   proportions; in print it is simply the page. */
.sheet {
	width: 7.6in;
	min-height: 10in;
	margin: 0.4in auto;
	padding: 0.34in;
	background: #fff;
	box-shadow: 0 2px 14px rgba(0,0,0,.18);
	display: flex;
	flex-direction: column;
}

/* ---------- header ---------- */

.sheet-head { border-bottom: 3px solid var(--accent); padding-bottom: 8pt; }

.sheet-head-brand {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12pt;
	margin-bottom: 6pt;
}

.sheet-logo { height: 30pt; width: auto; }

.sheet-kicker {
	margin: 0;
	font-size: 8.5pt;
	letter-spacing: .09em;
	text-transform: uppercase;
	color: var(--accent);
	font-weight: 700;
}

.sheet-head h1 {
	margin: 0;
	font-size: 22pt;
	line-height: 1.12;
	letter-spacing: -.01em;
}

.sheet-place {
	margin: 3pt 0 0;
	font-size: 10pt;
	color: var(--muted);
}

/* ---------- body ---------- */

.sheet-body {
	display: flex;
	gap: 0.28in;
	padding-top: 10pt;
	flex: 1;
}

.sheet-main { flex: 1 1 auto; min-width: 0; }
.sheet-side { flex: 0 0 1.95in; }

.sheet-image {
	width: 100%;
	height: 1.55in;
	object-fit: cover;
	display: block;
	border-radius: 2pt;
}

.sheet-lede {
	margin: 9pt 0 0;
	font-size: 10.5pt;
	line-height: 1.38;
}

.sheet-block { margin-top: 12pt; }

.sheet-block h2,
.sheet-side h2 {
	margin: 0 0 5pt;
	font-size: 9pt;
	letter-spacing: .09em;
	text-transform: uppercase;
	color: var(--accent);
	border-bottom: 1px solid var(--rule);
	padding-bottom: 3pt;
}

/* ---------- sessions ---------- */

.sheet-table {
	width: 100%;
	border-collapse: collapse;
	font-size: 10pt;
}

.sheet-table td {
	padding: 4pt 0;
	border-bottom: 1px solid #ececec;
	vertical-align: baseline;
}

.sheet-table tr:last-child td { border-bottom: 0; }

.c-dates  { font-weight: 700; white-space: nowrap; width: 1.35in; }
.c-ages   { color: var(--muted); white-space: nowrap; width: 0.95in; }
.c-format { color: var(--muted); }
.c-price  { text-align: right; font-weight: 700; white-space: nowrap; }

.sheet-note {
	margin: 6pt 0 0;
	font-size: 9pt;
	color: var(--muted);
	font-style: italic;
}

/* ---------- fit ---------- */

.sheet-dl { margin: 0; font-size: 10pt; }

.sheet-dl dt {
	float: left;
	clear: left;
	width: 1.15in;
	font-weight: 700;
	padding: 3pt 0;
}

.sheet-dl dd {
	margin: 0 0 0 1.25in;
	padding: 3pt 0;
	line-height: 1.34;
}

/* ---------- sidebar ---------- */

.sheet-qr { text-align: center; margin-bottom: 12pt; }
.sheet-qr svg { width: 1.5in; height: 1.5in; display: block; margin: 0 auto; }

.sheet-qr-label {
	margin: 4pt 0 0;
	font-size: 9pt;
	font-weight: 700;
	letter-spacing: .04em;
	text-transform: uppercase;
}

.sheet-facts, .sheet-contact { margin-bottom: 11pt; }

.sheet-facts dl { margin: 0; font-size: 9.5pt; }
.sheet-facts dt { font-weight: 700; margin-top: 4pt; }
.sheet-facts dd { margin: 0; color: var(--muted); }

.sheet-phone {
	margin: 0;
	font-size: 13pt;
	font-weight: 700;
	color: var(--accent);
}

.sheet-contact p { margin: 2pt 0 0; font-size: 9.5pt; }

/* ---------- footer ---------- */

.sheet-foot {
	margin-top: auto;
	padding-top: 7pt;
	border-top: 1px solid var(--rule);
	display: flex;
	justify-content: space-between;
	gap: 8pt;
	font-size: 8pt;
	color: var(--muted);
}

.sheet-url { font-weight: 700; color: var(--ink); }

/* ---------- print ---------- */

@media print {
	html, body { background: #fff; }

	.sheet {
		width: auto;
		min-height: 0;
		margin: 0;
		padding: 0;
		box-shadow: none;
	}

	/* One sheet, always: nothing may break across pages. */
	.sheet, .sheet-body, .sheet-block, .sheet-table, .sheet-dl, .sheet-side {
		page-break-inside: avoid;
		break-inside: avoid;
	}

	a { text-decoration: none; color: inherit; }
}

/* ---------- sparse camps ----------
 * A clinic with two dates and two fit rows leaves roughly 40% of the sheet blank.
 * Filler copy would be worse than white space, so instead the sheet breathes: a larger
 * image and slightly larger type. Still one page — the sparse case has less to fit.
 */
.sheet.is-sparse .sheet-image { height: 2.7in; }
.sheet.is-sparse .sheet-lede { font-size: 12pt; line-height: 1.45; }
.sheet.is-sparse .sheet-table { font-size: 11pt; }
.sheet.is-sparse .sheet-table td { padding: 7pt 0; }
.sheet.is-sparse .sheet-dl { font-size: 11pt; }
.sheet.is-sparse .sheet-dl dt,
.sheet.is-sparse .sheet-dl dd { padding: 5pt 0; }
.sheet.is-sparse .sheet-block { margin-top: 18pt; }

/* ---------- off-season sheet ----------
 * Most camps have no schedule outside the season, so the flyer becomes a marketing
 * one-pager. These carry the weight the sessions table normally would.
 */
.sheet-callout {
	margin: 0;
	padding: 9pt 11pt;
	background: #f2f6fa;
	border-left: 3px solid var(--accent);
	font-size: 10.5pt;
	line-height: 1.4;
}

.sheet-quote blockquote { margin: 0; }
.sheet-quote p {
	margin: 0 0 4pt;
	font-size: 11pt;
	line-height: 1.4;
	font-style: italic;
}
.sheet-quote cite { font-size: 9pt; font-style: normal; color: var(--muted); }
.sheet-glance-note {
	margin: 5pt 0 0;
	font-size: 7.5pt;
	line-height: 1.35;
	color: var(--muted);
	font-style: italic;
}
