/* ============================================================
   ROWE Members — the booking date picker (assets/rowe-picker.js).

   Loaded on the booking screen only, after rowe-members.css. The picker
   is drawn inside the page's .rte, whose `.rte h3`, `.rte p` and
   `.rte a` rules would otherwise reach in, so every selector here starts
   at .rowe-picker and out-specifies them.

   Reused rather than restyled: the range and view switches are the
   theme's own .tabs, and Confirm is a .btn.

   Layout follows the picker's OWN width (container queries), not the
   window's. It sits in a narrower column under the account sidebar than
   under the account band, and must be right in both.

   Every colour is a var(--token) from rowe-tokens.css — no raw hex.
   "Open" is the brand's sage, "filling up" its copper: the same pair the
   shop's in-stock and sold badges use.
   ============================================================ */

/* ---------- starting up (see rowe_members_render_picker) ---------- */

.rowe-picker[hidden],
[data-rowe-picker-fallback][hidden] {
	display: none;
}

.rowe-picker-loading {
	display: none;
}

.rowe-picker-boot .rowe-picker-loading {
	display: block;
}

.rowe-picker-boot [data-rowe-picker-fallback] {
	display: none;
}

/* ---------- frame ---------- */

.rowe-picker {
	container-type: inline-size;
	margin: 0 0 8px;
}

.rowe-picker form {
	margin: 0;
}

.rowe-picker button {
	font: inherit;
	cursor: pointer;
}

.rowe-picker button:disabled {
	cursor: not-allowed;
}

.rowe-picker .rb {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: 20px;
	align-items: start;
}

.rowe-picker .rb-panel {
	padding: 16px;
	border: 1px solid var(--line);
	border-radius: 12px;
	background: var(--paper);
}

.rowe-picker .rb-main,
.rowe-picker .rb-dates,
.rowe-picker .rb-slots {
	min-width: 0;
}

.rowe-picker .rb--week .rb-slots,
.rowe-picker .rb--month .rb-slots {
	margin-top: 22px;
}

/* ---------- controls: the theme's .tabs ---------- */

.rowe-picker .rb-controls {
	display: flex;
	flex-direction: column;
	gap: 10px;
	margin-bottom: 20px;
}

/* Four ranges do not fit one row on a phone, and left to wrap they fall
   two-one-one. A grid makes it two by two; the view switch has two
   buttons, so the same rule leaves it as it was. */
.rowe-picker .rb-seg {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	margin-bottom: 0;
}

/* "Show times for": a label and a native select, full width on a phone. */
.rowe-picker .rb-filter {
	display: flex;
	flex-direction: column;
	gap: 6px;
	font-size: 13px;
	color: var(--graphite-line-cool-3);
}

.rowe-picker .rb-filter select {
	width: 100%;
	min-height: 44px;
	padding: 8px 12px;
	border: 1px solid var(--line);
	border-radius: 8px;
	background: white;
	color: var(--graphite);
	font: inherit;
	font-size: 14px;
}

/* ---------- arrows ---------- */

.rowe-picker .rb-arrow {
	flex: 0 0 36px;
	width: 36px;
	height: 36px;
	padding: 0;
	border: 1px solid var(--line);
	border-radius: 50%;
	background: white;
	color: var(--graphite);
	font-size: 18px;
	line-height: 1;
}

.rowe-picker .rb-arrow:disabled {
	opacity: 0.4;
}

/* ---------- the fortnight strip ---------- */

.rowe-picker .rb-month-label {
	margin: 0 0 10px;
	font-size: 13px;
	color: var(--graphite-line-cool-3);
}

.rowe-picker .rb-strip-nav {
	display: flex;
	align-items: center;
	gap: 10px;
}

/* On a phone the strip is swiped, so the arrows only take room. */
.rowe-picker .rb-strip-nav .rb-arrow {
	display: none;
}

.rowe-picker .rb-strip {
	display: flex;
	flex: 1;
	min-width: 0;
	gap: 8px;
	padding: 2px 2px 8px;
	overflow-x: auto;
	overscroll-behavior-x: contain;
	scroll-snap-type: x mandatory;
	scrollbar-width: thin;
}

.rowe-picker .rb-date {
	flex: 0 0 72px;
	scroll-snap-align: start;
	padding: 10px 0 9px;
	border: 1px solid var(--line);
	border-radius: 10px;
	background: white;
	color: var(--graphite);
	text-align: center;
}

.rowe-picker .rb-date small {
	display: block;
	font-size: 12px;
	color: var(--graphite-line-cool-3);
}

.rowe-picker .rb-date b {
	display: block;
	margin: 2px 0;
	font-size: 22px;
	font-weight: 700;
}

.rowe-picker .rb-bar {
	display: block;
	height: 4px;
	margin: 6px 14px 0;
	border-radius: 2px;
	background: var(--line);
	overflow: hidden;
}

.rowe-picker .rb-bar i {
	display: block;
	height: 100%;
	background: var(--sagedeep);
}

.rowe-picker .rb-date.is-low .rb-bar i {
	background: var(--copper);
}

.rowe-picker .rb-date:disabled {
	background: transparent;
	color: var(--mist);
}

.rowe-picker .rb-date:disabled small {
	color: var(--mist);
}

.rowe-picker .rb-date.is-on {
	border-color: var(--graphite);
	background: var(--graphite);
	color: white;
}

.rowe-picker .rb-date.is-on small {
	color: var(--bone-dim);
}

.rowe-picker .rb-date.is-on .rb-bar {
	background: var(--graphite-line-cool-3);
}

.rowe-picker .rb-date.is-on .rb-bar i {
	background: var(--bone);
}

/* ---------- the month ---------- */

.rowe-picker .rb-cal-head {
	display: flex;
	justify-content: space-between;
	align-items: center;
	margin-bottom: 12px;
}

.rowe-picker .rb-cal-head strong {
	font-size: 16px;
}

.rowe-picker .rb-cal {
	display: grid;
	grid-template-columns: repeat(7, minmax(0, 1fr));
	gap: 4px;
	text-align: center;
}

.rowe-picker .rb-dow {
	padding: 6px 0;
	font-size: 12px;
	color: var(--graphite-line-cool-3);
}

.rowe-picker .rb-day {
	position: relative;
	aspect-ratio: 1;
	min-height: 40px;
	padding: 0;
	border: 0;
	border-radius: 8px;
	background: transparent;
	color: var(--graphite);
	font-size: 14px;
}

.rowe-picker .rb-day:hover:not(:disabled):not(.is-on) {
	background: color-mix(in srgb, var(--graphite) 7%, transparent);
}

.rowe-picker .rb-day::after {
	content: "";
	position: absolute;
	bottom: 6px;
	left: 50%;
	width: 4px;
	height: 4px;
	margin-left: -2px;
	border-radius: 50%;
	background: var(--sagedeep);
}

.rowe-picker .rb-day.is-low::after {
	background: var(--copper);
}

.rowe-picker .rb-day:disabled::after {
	display: none;
}

.rowe-picker .rb-day:disabled {
	color: var(--mist);
}

.rowe-picker .rb-day.is-today {
	box-shadow: inset 0 0 0 1px var(--line);
}

.rowe-picker .rb-day.is-on {
	background: var(--graphite);
	color: white;
}

.rowe-picker .rb-day.is-on::after {
	background: white;
}

.rowe-picker .rb-legend {
	display: flex;
	flex-wrap: wrap;
	gap: 16px;
	margin-top: 14px;
	font-size: 12px;
	color: var(--graphite-line-cool-3);
}

.rowe-picker .rb-legend i {
	display: inline-block;
	width: 8px;
	height: 8px;
	margin-right: 6px;
	border-radius: 50%;
	vertical-align: 1px;
}

.rowe-picker .rb-legend .is-open { background: var(--sagedeep); }
.rowe-picker .rb-legend .is-low { background: var(--copper); }
.rowe-picker .rb-legend .is-closed { background: var(--mist); }

/* ---------- the day's sessions ---------- */

.rowe-picker .rb-day-title {
	margin: 0 0 4px;
	font-size: 18px;
	font-weight: 600;
}

.rowe-picker .rb-hint,
.rowe-picker .rb-msg {
	margin: 0 0 18px;
	font-size: 14px;
	color: var(--graphite-line-cool-3);
}

.rowe-picker .rb-msg--error {
	color: var(--copper-deep);
}

.rowe-picker .rb-period + .rb-period {
	margin-top: 18px;
}

.rowe-picker .rb-period h4 {
	margin: 0 0 10px;
	font-size: 13px;
	font-weight: 600;
	color: var(--graphite-line-cool-3);
}

.rowe-picker .rb-slot-grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(132px, 1fr));
	gap: 10px;
}

.rowe-picker .rb-slot {
	padding: 10px 12px;
	border: 1px solid var(--line);
	border-radius: 8px;
	background: white;
	color: var(--graphite);
	text-align: left;
}

.rowe-picker .rb-slot b {
	display: block;
	font-size: 15px;
	font-weight: 600;
}

.rowe-picker .rb-slot small {
	display: block;
	font-size: 12px;
	line-height: 1.35;
	color: var(--sage-deep-2);
}

.rowe-picker .rb-slot.is-low small {
	color: var(--copper-deep);
}

.rowe-picker .rb-slot:disabled {
	background: transparent;
	color: var(--stone);
}

.rowe-picker .rb-slot:disabled small {
	color: var(--stone);
}

/* Full and started are gone; struck through. Closed and yours are
   information, and stay readable. */
.rowe-picker .rb-slot.is-full b,
.rowe-picker .rb-slot.is-started b {
	text-decoration: line-through;
}

.rowe-picker .rb-slot.is-mine {
	border-color: var(--sage-tint-line);
	background: var(--sage-tint);
}

.rowe-picker .rb-slot.is-mine small {
	color: var(--sage-deep-2);
}

.rowe-picker .rb-slot.is-on {
	border-color: var(--graphite);
	background: var(--graphite);
	color: white;
}

.rowe-picker .rb-slot.is-on small {
	color: var(--bone-dim);
}

/* ---------- the session's tables ---------- */

.rowe-picker .rb-tables {
	margin-top: 22px;
	padding-top: 18px;
	border-top: 1px solid var(--line);
}

.rowe-picker .rb-tables .rb-hint,
.rowe-picker .rb-tables .rb-msg {
	margin-bottom: 12px;
}

.rowe-picker .rb-table-grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(min(100%, 220px), 1fr));
	gap: 10px;
}

.rowe-picker .rb-table {
	display: flex;
	align-items: center;
	gap: 12px;
	width: 100%;
	min-width: 0;
	padding: 8px;
	border: 1px solid var(--line);
	border-radius: 8px;
	background: white;
	color: var(--graphite);
	text-align: left;
}

/* The pictures are 240px thumbnails from the old booking system, so they
   are never shown larger than 64px: sharp at 2x, and no softer at 3x
   than a phone photo of a deck needs to be. A table with no picture gets
   a block the same size, so every button's text starts on one line. */
.rowe-picker .rb-table img,
.rowe-picker .rb-table-ph {
	flex: 0 0 64px;
	width: 64px;
	height: 64px;
	border-radius: 6px;
	object-fit: cover;
}

.rowe-picker .rb-table-ph {
	background: var(--bone-warm);
}

.rowe-picker .rb-table-text {
	min-width: 0;
}

.rowe-picker .rb-table b {
	display: block;
	font-size: 15px;
	font-weight: 600;
	line-height: 1.3;
}

.rowe-picker .rb-table small {
	display: block;
	margin-top: 2px;
	font-size: 12px;
	line-height: 1.35;
	color: var(--sage-deep-2);
}

.rowe-picker .rb-table:hover:not(:disabled):not(.is-on) {
	border-color: var(--graphite-line-cool-3);
}

.rowe-picker .rb-table:disabled {
	background: transparent;
	color: var(--stone);
}

.rowe-picker .rb-table:disabled small {
	color: var(--stone);
}

.rowe-picker .rb-table:disabled img {
	opacity: 0.45;
	filter: grayscale(1);
}

.rowe-picker .rb-table.is-on {
	border-color: var(--graphite);
	background: var(--graphite);
	color: white;
}

.rowe-picker .rb-table.is-on small {
	color: var(--bone-dim);
}

/* ---------- the summary ---------- */

.rowe-picker .rb-summary h3 {
	margin: 0 0 16px;
	font-size: 18px;
	font-weight: 600;
}

.rowe-picker .rb-summary dl {
	display: grid;
	grid-template-columns: auto 1fr;
	gap: 10px 16px;
	margin: 0 0 20px;
	font-size: 14px;
}

.rowe-picker .rb-summary dt {
	color: var(--graphite-line-cool-3);
}

.rowe-picker .rb-summary dd {
	margin: 0;
	text-align: right;
	font-weight: 600;
}

.rowe-picker .rb-row {
	display: flex;
	justify-content: space-between;
	align-items: center;
	margin: 0 0 10px;
	font-size: 14px;
}

.rowe-picker .rb-stepper {
	display: flex;
	align-items: center;
	border: 1px solid var(--line);
	border-radius: 6px;
	background: white;
	overflow: hidden;
}

.rowe-picker .rb-stepper button {
	width: 44px;
	height: 40px;
	padding: 0;
	border: 0;
	background: transparent;
	color: var(--graphite);
	font-size: 16px;
}

.rowe-picker .rb-stepper button:disabled {
	color: var(--mist);
}

.rowe-picker .rb-stepper output {
	min-width: 28px;
	text-align: center;
	font-weight: 600;
}

.rowe-picker .rb-note {
	margin: 0 0 20px;
	font-size: 13px;
	line-height: 1.45;
	color: var(--graphite-line-cool-3);
}

.rowe-picker .rb-submit {
	width: 100%;
}

/* Out-specifies the theme's blanket `.woocommerce-account
   button[type="submit"]`, which would keep this copper while disabled. */
.woocommerce-account .rowe-picker button[type="submit"]:disabled {
	border-color: var(--line);
	background: var(--bone-warm);
	color: var(--stone);
	cursor: not-allowed;
	transform: none;
	box-shadow: none;
}

/* ---------- wider ---------- */

@container (min-width: 560px) {
	.rowe-picker .rb-panel {
		padding: 26px;
	}

	.rowe-picker .rb-controls {
		flex-direction: row;
		flex-wrap: wrap;
		justify-content: space-between;
	}

	.rowe-picker .rb-seg {
		display: flex;
	}

	.rowe-picker .rb-seg button {
		flex: 1 1 auto;
		padding-left: 14px;
		padding-right: 14px;
		white-space: nowrap;
	}

	.rowe-picker .rb-strip-nav .rb-arrow {
		display: block;
	}

	.rowe-picker .rb-filter {
		flex-direction: row;
		align-items: center;
		flex: 1 1 100%;
		gap: 12px;
	}

	.rowe-picker .rb-filter select {
		width: auto;
		min-width: 260px;
	}
}

/* Month beside its sessions. */
@container (min-width: 700px) {
	.rowe-picker .rb--month .rb-body {
		display: grid;
		grid-template-columns: minmax(260px, 340px) minmax(0, 1fr);
		gap: 28px;
	}

	.rowe-picker .rb--month .rb-slots {
		margin-top: 0;
	}
}

/* Summary alongside, and following the page down. 84px clears the
   site's 64px sticky header. */
@container (min-width: 960px) {
	.rowe-picker .rb {
		grid-template-columns: minmax(0, 1fr) 300px;
		gap: 28px;
	}

	.rowe-picker .rb-summary {
		position: sticky;
		top: 84px;
	}
}

/* ---------- on an experience's product page (rowe-experience-picker.js) ----------
   The same calendar and start times, inside the narrow booking card: one
   column, no strip, no tables. */

.rowe-xp {
	margin: 4px 0 16px;
}

.rowe-xp .rowe-xp-step {
	margin: 0 0 8px;
	font-size: 15px;
	font-weight: 600;
	color: var(--graphite);
}

.rowe-xp .rb-panel {
	padding: 12px;
}

.rowe-xp .rb-slots {
	margin-top: 16px;
}

.rowe-xp .rb-slot-grid {
	grid-template-columns: repeat(auto-fill, minmax(104px, 1fr));
}

.rowe-xp .rowe-xp-chosen {
	margin: 16px 0 0;
	color: var(--graphite);
}
