/* Public-facing pages: login, event capture, gallery */

body {
	font-family: -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
}

.capture-page {
	min-height: 100vh;
}

/*
 * Bootstrap only ships square/landscape ratio utilities (1x1, 4x3, 16x9,
 * 21x9) — no portrait 3x4, which #camera-stage below uses for a vertical
 * phone camera frame. Without this rule, .ratio's aspect-ratio box has no
 * --bs-aspect-ratio to size its ::before against, so the whole
 * camera-stage box — and the video/canvas/preview/error message inside
 * it, all positioned absolutely by Bootstrap's `.ratio > *` rule — collapses
 * to zero height and renders as nothing at all (not even the dark
 * background), which looked exactly like "camera permission granted but
 * no picture ever shows".
 */
.ratio-3x4 {
	--bs-aspect-ratio: 133.3333%;
}

#camera-stage {
	max-height: 70vh;
}

#camera-video,
#captured-preview {
	background: #000;
}

#progress-bar {
	transition: width 0.3s ease;
}

/* Filter picker row on the post-capture review stage — TikTok-style round
   thumbnails (the actual just-captured photo, re-rendered per swatch with
   that filter's CSS applied — see capture.js's renderFilterThumbs()) with
   a small label underneath, not plain text buttons. Plain custom
   component, not a Bootstrap one — needs its own styling entirely. */
.filter-swatch {
	flex: 0 0 auto;
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 0.3rem;
	width: 4.2rem;
	cursor: pointer;
}

.filter-swatch-thumb {
	position: relative;
	display: block;
	width: 3.4rem;
	height: 3.4rem;
	border-radius: 50%;
	overflow: hidden;
	background: #dee2e6;
	border: 2px solid transparent;
}

.filter-swatch-thumb img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

/* Twibbon swatch only — the frame image stacked on top of the captured
   photo within the same round thumbnail (see #filter-swatch-twibbon). */
.filter-swatch-thumb-overlay {
	position: absolute;
	top: 0;
	left: 0;
}

.filter-swatch-label {
	font-size: 0.7rem;
	color: #6c757d;
	white-space: nowrap;
}

.filter-swatch.active .filter-swatch-thumb {
	border-color: #0d6efd;
}

.filter-swatch.active .filter-swatch-label {
	color: #0d6efd;
	font-weight: 600;
}

@media (max-width: 400px) {
	.capture-page .card-body {
		padding: 1rem;
	}
}
