/* ==========================================================================
   rate-band-v2.css - public review pages redesign (2026-09)

   Loaded ONLY by the three /rating pages, which all carry <body class="rb-page">:
     htdocs/bands/ratings/rate_band.html   - the review form   (com=showRateBand)
     htdocs/bands/ratings/rated.html       - thank you         (com=showThanks)
     htdocs/bands/ratings/rated_low.html   - approval needed   (com=showConfirm)

   Design language follows the 2026 refresh (listing-v2.css / search-v2.css /
   favourites-v2.css): kickers, warm cards, hairlines, pill buttons, site fonts.

   Palette (matches listing-v2.css):
     accent        #C06014  (brand tertiary orange)
     accent hover  #9a4a0f
     accent tint   #fff9f4  (selected card fill, from favourites-v2.css)
     ink           #191919
     secondary     #4a443f
     muted         #8a7f75
     hairline      #ececea
     card hairline #e3dfd8  (warm, cards sit on white)
     warm ground   #faf5ed  / soft #f7f5f1
     error         #a94442 ink / #fdf3f2 fill / #f0d4d0 edge (from favourites-v2.css)
   ========================================================================== */


/* --------------------------------------------------------------------------
   1. PAGE SECTION GROUNDS

   The old page was four full-width bands: a grey form band, then TWO bands
   whose only job was to hold one sentence and nothing at all - and
   .lmm-main-light / .lmm-secondary both carry min-height:200px in lmm.less,
   so the empty one rendered as a 200px slab of white above the footer.

   Here it is one white page: a warm hero that fades into the content, a white
   content band carrying the card, and the two spare bands taken out (their
   editable regions are left in the markup, emptied, so the pages still match
   the Dreamweaver template).
   -------------------------------------------------------------------------- */

body.rb-page .page-section.lmm-main-dark {
	background: linear-gradient(180deg, #fff 0%, #faf5ed 100%);
}

body.rb-page .page-section.lmm-main-light {
	background-color: #fff !important;
	min-height: 0;
	padding-bottom: 56px;
}

body.rb-page .page-section.lmm-secondary,
body.rb-page .page-section.lmm-extra-content {
	display: none;
}


/* --------------------------------------------------------------------------
   2. HERO
   -------------------------------------------------------------------------- */

.rb-hero {
	padding: 40px 0 34px;
}

.rb-kicker {
	font-size: 14px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.12em;
	color: #C06014;
	margin: 0 0 10px;
}

/* h1.pageTitleLargeWhite in lmm.less is 48px !important, so the size has to
   be !important to be reduced - 48px is a landing-page size and this is a form */
body.rb-page h1.rb-title {
	font-size: 40px !important;
	font-weight: 700;
	color: #191919;
	letter-spacing: -0.02em;
	line-height: 1.05;
	margin: 0;
}

.rb-sub {
	font-size: 17px;
	line-height: 1.5;
	color: #4a443f;
	margin: 12px 0 0;
	max-width: 620px;
}

.rb-sub strong {
	color: #191919;
}


/* --------------------------------------------------------------------------
   3. LAYOUT
   The site container is very wide; a form stretched across it is unreadable,
   so the form + rail sit in their own centred measure.
   -------------------------------------------------------------------------- */

.rb-wrap {
	max-width: 1040px;
	margin: 0 auto;
}

.rb-grid {
	display: flex;
	flex-wrap: wrap;
	gap: 24px;
	align-items: flex-start;
	padding-top: 36px;
}

.rb-main {
	flex: 1 1 560px;
	min-width: 0;
}

.rb-rail {
	flex: 0 1 320px;
	min-width: 0;
}


/* --------------------------------------------------------------------------
   4. THE FORM CARD
   -------------------------------------------------------------------------- */

.rb-card {
	background: #fff;
	border: 1px solid #e3dfd8;
	border-radius: 20px;
	box-shadow: 0 1px 2px rgba(25, 25, 25, 0.04), 0 12px 28px rgba(25, 25, 25, 0.05);
	padding: 30px 32px 32px;
}

body.rb-page .rb-card form {
	margin-top: 0;
}

/* every field block gets the same rhythm; the last one closes on the divider */
body.rb-page .rb-card .form-group {
	margin: 0 0 24px;
}

body.rb-page .rb-card .form-group:last-of-type {
	margin-bottom: 0;
}

.rb-legend {
	display: block;
	font-size: 14px;
	font-weight: 700;
	color: #191919;
	margin: 0 0 10px;
}

body.rb-page .rb-card label {
	display: block;
	font-size: 14px;
	font-weight: 700;
	color: #191919;
	margin: 0 0 8px;
}

.rb-optional {
	font-weight: 400;
	color: #8a7f75;
}

.rb-hint {
	font-size: 13.5px;
	line-height: 1.5;
	color: #8a7f75;
	margin: 8px 0 0;
}


/* --------------------------------------------------------------------------
   5. FIELDS
   .input-sm is a 30px control - too small to be the main event on a page whose
   only job is this form. Sized by HEIGHT + padding rather than a padding split.
   -------------------------------------------------------------------------- */

body.rb-page .rb-card .form-control {
	height: 48px;
	padding: 0 14px;
	font-size: 15px;
	line-height: 46px;
	color: #191919;
	background: #fff;
	border: 1px solid #ded8cf;
	border-radius: 12px;
	box-shadow: none;
	transition: border-color 150ms, box-shadow 150ms;
}

body.rb-page .rb-card textarea.form-control {
	height: auto;
	min-height: 168px;
	padding: 12px 14px;
	line-height: 1.6;
	resize: vertical;
}

body.rb-page .rb-card .form-control::placeholder {
	color: #a89c90;
}

body.rb-page .rb-card .form-control:focus {
	border-color: #C06014;
	box-shadow: 0 0 0 3px rgba(192, 96, 20, 0.14);
	outline: none;
}

/* bootstrap-validator states: colour the field edge, not a glyph */
body.rb-page .rb-card .has-error .form-control {
	border-color: #d99e99;
}

body.rb-page .rb-card .has-error .form-control:focus {
	box-shadow: 0 0 0 3px rgba(169, 68, 66, 0.12);
}

body.rb-page .rb-card .help-block.with-errors {
	font-size: 13.5px;
	font-style: normal;
	color: #a94442;
	margin: 8px 0 0;
}

body.rb-page .rb-card .help-block.with-errors:empty {
	display: none;
}

/* the has-feedback tick/cross is a 30px glyph pinned to a 30px control; on a
   48px field it lands off-centre, and the coloured edge above already says it */
body.rb-page .rb-card .form-control-feedback {
	display: none;
}


/* --------------------------------------------------------------------------
   6. STAR RATING PICKER
   A ten-option <select> is the least expressive control on a review form.
   Same name/value pairs (rating=1..10, 10 pre-selected), same submitted data.

   The site shows every score as FIVE stars with halves (LMM::Listing::Rating
   ::greenStarsHtml), so the picker is five stars too: ten radios, each drawn as
   one HALF of a star - a label 17px wide with the 34px glyph absolutely placed
   inside it and clipped, shifted left by half for the right-hand halves.

   The radios run 10 -> 1 in the markup inside a row-reverse row, so they READ
   1 -> 10 left to right while "checked" can light every half up to it with a
   plain following-sibling selector - no :has(), nothing to fall back from.
   -------------------------------------------------------------------------- */

.rb-stars {
	display: inline-flex;
	flex-direction: row-reverse;
	justify-content: flex-end;
}

.rb-stars input {
	position: absolute;
	width: 1px;
	height: 1px;
	opacity: 0;
	pointer-events: none;
}

.rb-stars label {
	/* the shared label rule above is for field labels; a star half is a control */
	margin: 0 !important;
	position: relative;
	display: block;
	width: 19px;
	height: 42px;
	overflow: hidden;
	cursor: pointer;
}

.rb-stars label::before {
	content: '\2605';
	position: absolute;
	top: 0;
	width: 38px;
	font-size: 38px;
	line-height: 42px;
	text-align: center;
	color: #e6dfd4;
	transition: color 90ms;
}

.rb-stars label.rb-half-l::before { left: 0; }
.rb-stars label.rb-half-r::before { left: -19px; }

/* the gap belongs between STARS, not between the two halves of one. Margins are
   physical, so margin-left is the VISUAL left even inside the row-reverse row;
   putting it on the left half of each star leaves no trailing gap on the row.
   (:first-child cannot be used here - each label's previous sibling is its own
   radio, so the leftmost star is addressed by its `for` instead.) */
.rb-stars label.rb-half-l { margin-left: 6px; }
.rb-stars label[for="rb-rate-1"] { margin-left: 0; }

/* the checked half and every half before it (which follow it in the markup) */
.rb-stars input:checked ~ label::before {
	color: #C06014;
}

/* Hover preview: while the pointer is anywhere on the row the settled score is
   dropped back to the blank colour, and the half under the pointer plus every
   half to its left is painted in the DARKER accent - so what you are about to
   pick reads differently from what is already picked, not just brighter. */
.rb-stars:hover input:checked ~ label::before {
	color: #e6dfd4;
}

/* ORDER OF BATTLE: the grey-out rule above scores (0,3,2) - .rb-stars, :hover,
   :checked over two elements - so a bare ".rb-stars label:hover ~ label" at
   (0,2,2) LOSES to it and the preview never paints. With 10/10 preselected every
   half is "after the checked input", so that was the whole row: hovering did
   nothing visible. The body.rb-page prefix takes these to (0,3,3). */
body.rb-page .rb-stars label:hover::before,
body.rb-page .rb-stars label:hover ~ label::before {
	color: #9a4a0f;
}

/* keyboard users: the radio is off-screen, so the ring goes on its star half */
.rb-stars input:focus-visible + label {
	box-shadow: inset 0 0 0 2px rgba(192, 96, 20, 0.45);
	border-radius: 4px;
}

.rb-score {
	display: inline-flex;
	align-items: baseline;
	gap: 8px;
	margin: 12px 0 0;
	font-size: 14px;
	color: #8a7f75;
}

.rb-score-value {
	font-size: 15px;
	font-weight: 700;
	color: #191919;
}

.rb-score-word {
	font-weight: 700;
	color: #C06014;
}

/* while previewing a hover the readout follows the stars into the darker accent */
.rb-score.is-preview .rb-score-value,
.rb-score.is-preview .rb-score-word {
	color: #9a4a0f;
}

.rb-stars-hint {
	font-size: 13.5px;
	color: #8a7f75;
	margin: 8px 0 0;
}


/* --------------------------------------------------------------------------
   7. ERROR SUMMARY
   ADAP3->makeErrorList emits an h2.pink-text plus one div.pink-text per error;
   the container collapses to nothing when there are none.
   -------------------------------------------------------------------------- */

.rb-errors:empty {
	display: none;
}

.rb-errors {
	background: #fdf3f2;
	border: 1px solid #f0d4d0;
	border-radius: 16px;
	padding: 18px 20px;
	margin: 0 0 24px;
}

body.rb-page .rb-errors h2 {
	font-size: 17px;
	font-weight: 700;
	color: #a94442;
	letter-spacing: -0.01em;
	margin: 0 0 8px;
}

body.rb-page .rb-errors div {
	color: #4a443f;
	font-size: 15px;
	line-height: 1.5;
}

body.rb-page .rb-errors div strong {
	font-weight: 400;
}


/* --------------------------------------------------------------------------
   8. TURNSTILE + ACTIONS
   -------------------------------------------------------------------------- */

.rb-actions {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 12px;
	margin-top: 26px;
	padding-top: 24px;
	border-top: 1px solid #f0ece5;
}

/* Cloudflare's widget stretches to its container but will not go below 300px.
   The card's content box is 375 - 30 (container) - 2 (border) - 40 (padding) =
   303px, so at a 375px phone it lands at 303 in 303: ZERO slack. Anything that
   moves by a pixel on a real device - a scrollbar, a different reported width -
   tips it over, and because this template's viewport meta carries
   user-scalable=no the reader cannot pinch out of the sideways scroll.

   So below 400px it is pinned to its own 300px minimum and scaled to fit. The
   width matters: scaling a 300px widget inside a 288px box (a 360px phone) would
   CLIP its right edge first, and a clipped challenge cannot be completed.
   Measured, painted widths: 320 -> 246 in 248, 375 -> 246 in 303. */
body.rb-page #rate-band-cf-turnstile {
	margin-top: 24px;
}

@media (max-width: 399px) {
	body.rb-page #rate-band-cf-turnstile {
		width: 300px;
		height: 58px;		/* the widget's 70px box at 0.82 */
		transform: scale(0.82);
		transform-origin: left top;
	}
}

body.rb-page .rb-actions .btn {
	height: 48px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	padding: 0 26px;
	border-radius: 999px;
	font-size: 15px;
	font-weight: 700;
	margin: 0;
	white-space: nowrap;
}

body.rb-page .rb-actions .btn .glyphicon {
	top: 0;
	font-size: 13px;
}

body.rb-page .rb-actions .rb-submit {
	background: #C06014;
	border: 1px solid #C06014;
	color: #fff;
	padding: 0 34px;
	order: 2;
	margin-left: auto;
}

body.rb-page .rb-actions .rb-submit:hover,
body.rb-page .rb-actions .rb-submit:focus {
	background: #9a4a0f !important;
	border-color: #9a4a0f;
	color: #fff;
}

body.rb-page .rb-actions .rb-submit[disabled],
body.rb-page .rb-actions .rb-submit.disabled {
	background: #e2d9cd;
	border-color: #e2d9cd;
	color: #fff;
	opacity: 1;
}

body.rb-page .rb-actions .rb-cancel {
	background: #fff;
	border: 1px solid #ded8cf;
	color: #4a443f;
	order: 1;
}

body.rb-page .rb-actions .rb-cancel:hover,
body.rb-page .rb-actions .rb-cancel:focus {
	background: #f7f5f1 !important;
	border-color: #cfc8bc;
	color: #191919;
}


/* --------------------------------------------------------------------------
   9. SIDE RAIL
   -------------------------------------------------------------------------- */

.rb-rail-card {
	background: #faf5ed;
	border: 1px solid #eee6da;
	border-radius: 20px;
	padding: 22px 24px;
}

.rb-rail-card + .rb-rail-card {
	margin-top: 16px;
}

body.rb-page .rb-rail-card p.rb-rail-title {
	font-size: 13px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.12em;
	color: #C06014;
	margin: 0 0 12px;
}

body.rb-page .rb-rail-card p {
	font-size: 14.5px;
	line-height: 1.6;
	color: #4a443f;
	margin: 0;
}

body.rb-page .rb-rail-card p + p {
	margin-top: 10px;
}

body.rb-page .rb-rail-card strong {
	color: #191919;
}

body.rb-page .rb-rail-list {
	list-style: none;
	margin: 0;
	padding: 0;
}

body.rb-page .rb-rail-list li {
	position: relative;
	padding-left: 22px;
	font-size: 14.5px;
	line-height: 1.6;
	color: #4a443f;
}

body.rb-page .rb-rail-list li + li {
	margin-top: 10px;
}

body.rb-page .rb-rail-list li::before {
	content: '\2713';
	position: absolute;
	left: 0;
	top: 0;
	color: #C06014;
	font-weight: 700;
}

.rb-rail-link {
	display: inline-block;
	margin-top: 14px;
	font-size: 14.5px;
	font-weight: 700;
	color: #C06014;
}

.rb-rail-link:hover,
.rb-rail-link:focus {
	color: #9a4a0f;
	text-decoration: underline;
}


/* --------------------------------------------------------------------------
   10. OUTCOME PAGES (rated.html / rated_low.html)
   Same card, centred on its own - there is no form and no rail.
   -------------------------------------------------------------------------- */

.rb-wrap-narrow {
	max-width: 680px;
	margin: 0 auto;
	padding-top: 36px;
}

.rb-outcome-icon {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 56px;
	height: 56px;
	border-radius: 50%;
	background: #fff4ea;
	color: #C06014;
	font-size: 24px;
	margin: 0 0 18px;
}

body.rb-page .rb-outcome-title {
	font-size: 24px;
	font-weight: 700;
	color: #191919;
	letter-spacing: -0.01em;
	margin: 0 0 12px;
}

body.rb-page .rb-card > p {
	font-size: 15.5px;
	line-height: 1.6;
	color: #4a443f;
	margin: 0 0 14px;
}

body.rb-page .rb-card > p:last-of-type {
	margin-bottom: 0;
}

body.rb-page .rb-card a {
	color: #C06014;
	font-weight: 700;
}

body.rb-page .rb-card a:hover {
	color: #9a4a0f;
}

body.rb-page .rb-steps {
	list-style: none;
	margin: 18px 0 0;
	padding: 0;
	border-top: 1px solid #f0ece5;
}

body.rb-page .rb-steps li {
	position: relative;
	padding: 14px 0 14px 30px;
	font-size: 15px;
	line-height: 1.6;
	color: #4a443f;
	border-bottom: 1px solid #f0ece5;
}

/* on an outcome page there is no Cancel to sit opposite, so the button stays
   left - and there is no long form above it to need a rule separating them */
body.rb-page .rb-wrap-narrow .rb-actions {
	border-top: 0;
	padding-top: 0;
	margin-top: 24px;
}

body.rb-page .rb-wrap-narrow .rb-actions .rb-submit {
	margin-left: 0;
}

/* a dot, not a tick - these are things to SEND, not things already done */
body.rb-page .rb-steps li::before {
	content: '\2022';
	position: absolute;
	left: 6px;
	top: 14px;
	color: #C06014;
	font-weight: 700;
}


/* --------------------------------------------------------------------------
   11. RESPONSIVE
   -------------------------------------------------------------------------- */

@media (max-width: 991px) {
	.rb-rail {
		flex: 1 1 100%;
	}
}

@media (max-width: 767px) {
	.rb-hero {
		padding: 26px 0 24px;
	}

	body.rb-page h1.rb-title {
		font-size: 30px !important;
	}

	.rb-sub {
		font-size: 16px;
		margin-top: 10px;
	}

	.rb-grid {
		gap: 18px;
		padding-top: 24px;
	}

	.rb-card {
		border-radius: 18px;
		padding: 22px 20px 24px;
	}


	body.rb-page .page-section.lmm-main-light {
		padding-bottom: 36px;
	}

	/* full-width stacked buttons, submit first - a thumb reaches the bottom one */
	body.rb-page .rb-actions .btn {
		flex: 1 1 100%;
		width: 100%;
		margin-left: 0;
	}

	body.rb-page .rb-actions .rb-cancel {
		order: 3;
	}
}

