*, *::before, *::after { box-sizing: border-box; }
html { background: var(--shine-bg); scroll-behavior: smooth; }
body.shine {
	margin: 0;
	min-height: 100vh;
	display: flex;
	flex-direction: column;
	background: var(--shine-bg);
	color: var(--shine-text);
	font-family: var(--shine-font-ui);
	font-size: 14px;
	line-height: 1.6;
	-webkit-font-smoothing: antialiased;
	overflow-x: hidden;
}
body.shine-panel-open { overflow: hidden; }

img { max-width: 100%; display: block; }

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

/* One width for the page, the hero and every section below it. --shine-max is
   min(95vw, 1320px): the panels read as ~95% wide on a laptop, stop growing on
   a wide screen, and nothing can misalign because there is only one number. */
.shine-wrap {
	width: var(--shine-max);
	margin: 0 auto;
	padding: 0;
}
/* under 640px, 95vw would leave a 10px gutter — give it a real one instead */
@media (max-width: 640px) { .shine-wrap {width: 100%;padding: 0 25px;} }

.shine-main { flex: 1 0 auto; }

.shine-skip {
	position: absolute; left: -9999px; top: 0; z-index: 200;
	background: var(--shine-accent); color: var(--shine-accent-text);
	padding: .75rem 1.25rem;
}
.shine-skip:focus { left: 0; }

/* ===========================  TYPE  ======================================= */

/* Work Sans, sentence case, tight and heavy — the headline carries the page
   rather than letter-spacing doing the work. */
h1, h2, h3, h4, h5, h6 {
	font-family: var(--shine-font-display);
	font-weight: 800;
	margin: 0;
	line-height: 1.12;
	letter-spacing: -.02em;
	color: var(--shine-text);
	text-transform: none;
}
p { margin: 0; }

b, strong { font-weight: 600; }

/* ===========================  NAV  ======================================== */

/* The bar is the page: same white, no rule under it, nothing to separate it
   from the content. Only once scrolled does a soft shadow lift it. */
.shine-nav {
	top: 0;
	left: 0;
	right: 0;
	z-index: 90;
	background: var(--shine-bg);
	border-bottom: 0;
	transition: box-shadow .25s var(--shine-ease);
}
.shine-nav.is-stuck {}
/* every page clears the fixed bar, hero or not */
.shine-main {}
@media (max-width: 640px) { .shine-main {} }
.shine-nav__bar {
	width: var(--shine-max);
	margin: 0 auto;
	padding: 0;
	height: 100px;
	display: flex;
	align-items: center;
	gap: 28px;
}
@media (max-width: 640px) { .shine-nav__bar {width: 100%;padding: 0 18px;height: 40px;} }

/* White once scrolled, and always white on pages with no hero: the bar is the
   same panel colour as the cards, sitting on the tinted page. */
body.shine--flat { padding-top: 0; }
body.shine--flat .shine-main {}
@media (max-width: 640px) { body.shine--flat .shine-main {} }

.shine-brand { display: flex; align-items: center; flex: 0 0 auto; }
.shine-brand img { max-height: 38px; width: auto; }
.shine-brand__name {
	font-family: var(--shine-font-display);
	font-size: 1.4rem;
	font-weight: 700;
	letter-spacing: -.03em;
	color: var(--shine-text);
}
.shine-brand__add {
	font-size: .82rem; color: var(--shine-muted);
	border: 1px dashed var(--shine-border);
	padding: .35rem .8rem; border-radius: 100px;
}

.shine-nav__links { position: relative; display: flex; align-items: center; gap: 4px; margin-left: auto; }
.shine-nav__link {
	position: relative;
	padding: 1rem .9rem;
	color: var(--shine-muted);
	transition: color var(--shine-dur) var(--shine-ease);
	white-space: nowrap;
	font-size: .92rem;
	font-weight: 400;
}

.text-primary {
    color: var(--shine-accent);
}
.shine-nav__link:hover { color: var(--shine-text); }
.shine-nav__link.is-active { color: var(--shine-accent); font-weight: 600; }

/* No underline under the menu: the active page is marked by colour alone.
   The .shine-nav__ink element still renders, so it is hidden here. */
.shine-nav__ink { display: none; }

@media (max-width: 1100px) { .shine-nav__links { display: none; } }

.shine-nav__actions {display: flex;align-items: center;gap: 20px;margin-left: auto;}
.shine-nav__links + .shine-nav__actions { margin-left: 0; }

.shine-nav__phone {
	display: inline-flex; align-items: center; gap: .45rem;
	font-size: .88rem; color: var(--shine-muted);
	transition: color var(--shine-dur) var(--shine-ease);
}
.shine-nav__phone:hover { color: var(--shine-accent); }
.shine-nav__phone b {white-space: nowrap;color: var(--shine-text);font-weight: 500;}
@media (max-width: 900px) { .shine-nav__phone { display: none; } }

/* ===========================  BUTTONS  ==================================== */

.shine-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: .5rem;
	padding: .78rem 1.6rem;
	border-radius: var(--shine-radius-pill);
	border: 1px solid transparent;
	font-family: var(--shine-font-ui);
	font-size: .85rem;
	cursor: pointer;
	transition: background-color var(--shine-dur) var(--shine-ease),
	            color var(--shine-dur) var(--shine-ease),
	            border-color var(--shine-dur) var(--shine-ease),
	            transform var(--shine-dur) var(--shine-ease);
}
.shine-btn:active { transform: translateY(1px); }
.shine-btn--solid {background: var(--shine-accent);color: var(--shine-accent-text);}
.shine-btn--solid:hover { background: var(--shine-accent-hover); color: var(--shine-accent-text); }
/* the warm colour lives here and nowhere else: one primary action per view */
.shine-btn--cta {background: var(--shine-cta);color: var(--shine-accent);font-weight: 700;}
.shine-btn--cta:hover {background: var(--shine-cta-hover);color: var(--shine-cta-text);}
.shine-btn--ghost {border-color: var(--shine-border);color: var(--shine-text);background: var(--shine-surface);}
.shine-btn--ghost:hover {border-color: var(--shine-accent);color: var(--shine-accent);background: color-mix(in srgb, var(--shine-text) 7%, var(--shine-bg));}
.shine-btn--quiet { color: var(--shine-muted); }
.shine-btn--quiet:hover { color: var(--shine-danger); }
.shine-btn--block { width: 100%; }
@media (max-width: 640px) { .shine-nav__cta { display: none; } }

.shine-iconbtn {
	background: none; border: 0; cursor: pointer;
	color: var(--shine-muted); padding: 6px; line-height: 0;
	transition: color var(--shine-dur) var(--shine-ease);
}
.shine-iconbtn:hover { color: var(--shine-text); }

/* ===========================  ACCOUNT  ==================================== */

/* Flex, not the default block: it holds the Sign-in button and the account
   icon side by side, and on a text line they baseline-align at different
   heights instead of centring against each other. */
.shine-account {
	position: relative;
	display: flex;
	align-items: center;
	gap: 10px;
}
.shine-account__btn {
	display: inline-flex; align-items: center; gap: .5rem;
	background: none; border: 0; cursor: pointer;
	color: var(--shine-text); padding: 4px;
	font-family: var(--shine-font-ui); font-size: .9rem;
}
.shine-account__label { color: var(--shine-muted); }
@media (max-width: 780px) { .shine-account__label, .shine-caret { display: none; } }
.shine-avatar {
	width: 35px;
	height: 35px;
	border-radius: 13px;
	object-fit: cover;
	flex: 0 0 auto;
	display: inline-flex;
	align-items: center;
	justify-content: center;
}
.shine-avatar--empty {color: var(--shine-accent);}
.shine-caret { color: var(--shine-muted); }

.shine-menu.dropdown-menu {
	background: var(--shine-surface);
	border: 1px solid var(--shine-border);
	border-radius: 16px;
	padding: 6px;
	min-width: 234px;
	box-shadow: 0 24px 60px rgba(0,0,0,.6);
}
.shine-menu li { list-style: none; }
.shine-menu a {
	display: flex; align-items: center; justify-content: space-between; gap: .75rem;
	padding: .6rem .8rem; border-radius: 11px;
	color: var(--shine-text); font-size: .92rem;
	transition: background-color var(--shine-dur) var(--shine-ease), color var(--shine-dur) var(--shine-ease);
}
.shine-menu a:hover {background: var(--shine-surface-alt);/* color: var(--shine-accent); */background: color-mix(in srgb, var(--shine-text) 7%, var(--shine-bg));}
.shine-menu a.is-danger { color: var(--shine-danger); }
.shine-menu__sep { height: 1px; background: var(--shine-border); margin: 6px 8px; }

.shine-badge {
	min-width: 20px; height: 20px; padding: 0 6px;
	display: inline-flex; align-items: center; justify-content: center;
	border-radius: 100px; font-size: .68rem; font-weight: 600; font-style: normal;
}
.shine-badge--ok {background: #1dbb60;color: white;}
.shine-badge--warn { background: var(--shine-accent); color: var(--shine-accent-text); }
.shine-badge--dot {
	min-width: 8px;
	width: 8px;
	height: 8px;
	padding: 0;
	background: var(--shine-accent);
	position: absolute;
	top: 4px;
	/* right: 22px; */
}

/* ===========================  BURGER + PANEL  ============================= */

.shine-burger {
	display: none;
	background: none;
	border: 1px solid var(--shine-accent);
	cursor: pointer;
	width: 40px;
	height: 40px;
	border-radius: 12px;
	align-items: center;
	justify-content: center;
	flex-direction: column;
	gap: 5px;
	transition: border-color var(--shine-dur) var(--shine-ease);
}
.shine-burger:hover { border-color: var(--shine-accent); }
.shine-burger span {display: block;width: 16px;height: 1px;background: var(--shine-accent);}
@media (max-width: 1100px) { .shine-burger { display: inline-flex; } }

.shine-scrim {
	position: fixed; inset: 0; z-index: 95;
	background: rgba(0,0,0,.65);
	opacity: 0; pointer-events: none;
	transition: opacity .25s var(--shine-ease);
}
body.shine-panel-open .shine-scrim { opacity: 1; pointer-events: auto; }

.shine-panel {
	position: fixed; top: 0; right: 0; bottom: 0; z-index: 96;
	width: min(400px, 88vw);
	background: var(--shine-surface);
	border-left: 1px solid var(--shine-border);
	display: flex; flex-direction: column;
	transform: translateX(101%);
	transition: transform .32s var(--shine-ease);
	overflow-y: auto;
}
body.shine-panel-open .shine-panel { transform: none; }
.shine-panel__top {
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding: 20px 22px;
}
.shine-panel__nav {padding: 20px 0;flex: 1 0 auto;}
.shine-panel__link {
	display: flex;
	align-items: center;
	gap: .9rem;
	padding: .95rem 1rem;
	/* border-radius: 12px; */
	font-family: var(--shine-font-display);
	color: var(--shine-text);
	border-bottom: 1px solid var(--shine-border);
	transition: background-color var(--shine-dur) var(--shine-ease), color var(--shine-dur) var(--shine-ease);
}
.shine-panel__link:hover { background: var(--shine-surface-alt); }
.shine-panel__link.is-active { color: var(--shine-accent); }
.shine-panel__idx {
	font-size: .72rem; color: var(--shine-faint); font-family: var(--shine-font-ui);
	letter-spacing: .08em; min-width: 20px;
}
.shine-panel__link .shine-badge { margin-left: auto; }
.shine-panel__foot {padding: 18px 22px 28px;display: grid;gap: 10px;}
.shine-panel__phone {
	display: flex; flex-direction: column; gap: 2px; margin-top: 8px;
	font-size: .85rem; color: var(--shine-muted);
}
.shine-panel__phone b { color: var(--shine-text); font-size: 1.05rem; font-weight: 500; }
.shine-panel__lang { display: flex; align-items: center; gap: .55rem; color: var(--shine-muted); font-size: .88rem; margin-top: 6px; }
.shine-panel__lang img { width: 22px; border-radius: 3px; }

/* ===========================  HERO  ======================================= */

/* Shine's hero is a rounded panel sitting inside the page width rather than a
   full-bleed strip: the tint shows around it, which is what makes it read as
   inset. Same --shine-max as every section below, so the edges line up. */
.shine-hero {
	position: relative;
	width: var(--shine-max);
	margin: 18px auto 0;
	border-radius: var(--shine-radius-lg);
	min-height: clamp(300px, 52vh, 380px);
	display: flex;
	align-items: flex-end;
	overflow: hidden;
}
@media (max-width: 760px) {
	.shine-hero { min-height: 320px; }
}
@media (max-width: 640px) {
	.shine-hero {width: calc(100% - 28px);border-radius: var(--shine-radius);}
}
/* Oversized on purpose: the parallax shifts this vertically, and the extra
   height above/below means an edge can never slide into view. */
.shine-hero__media {
	position: absolute;
	left: 0;
	right: 0;
	top: -14%;
	height: 128%;
	will-change: transform;
}
/* No drift animation — the only movement here is the JS parallax on the
   wrapper. The slight scale stops the parallax revealing an edge. */
.shine-hero__media img {
	width: 100%; height: 100%; object-fit: cover;
	transform: scale(1.04);
}
.shine-hero__media::after {
	content: "";
	position: absolute;
	inset: 0;
	background: #020a11a3;
}
/* ---- grid overlay ----
   Static blueprint grid over the photo — it does NOT move, so it reads as
   structure rather than decoration. Only the plus marks animate, fading in
   and out at intersections that PHP picks at random per request. */
.shine-grid {
	position: absolute;
	inset: 0;
	z-index: 1;
	pointer-events: none;
	overflow: hidden;
	mask-image: radial-gradient(125% 100% at 70% 42%, #000 22%, transparent 80%);
	-webkit-mask-image: radial-gradient(125% 100% at 70% 42%, #000 22%, transparent 80%);
}
.shine-grid__svg { position: absolute; inset: 0; width: 100%; height: 100%; }

/* the plus: two hairlines, drawn from the centre out */
.shine-grid__mark {
	position: absolute;
	width: 26px; height: 26px;
	margin: -13px 0 0 -13px;
	opacity: 0;
	animation: shineMarkBlink 9s var(--shine-ease) infinite;
}
.shine-grid__mark::before,
.shine-grid__mark::after {
	content: "";
	position: absolute;
	background: var(--shine-accent);
}
.shine-grid__mark::before { left: 0; right: 0; top: 50%; height: 1px; margin-top: -.5px; }
.shine-grid__mark::after  { top: 0; bottom: 0; left: 50%; width: 1px; margin-left: -.5px; }

@keyframes shineMarkBlink {
	0%        { opacity: 0; transform: scale(.55); }
	6%        { opacity: .9; transform: scale(1); }
	22%       { opacity: .9; transform: scale(1); }
	34%, 100% { opacity: 0; transform: scale(1); }
}

@media (max-width: 860px) { .shine-grid { opacity: .55; } }
/* inside the panel now, so it gets its own padding instead of the page width */
.shine-hero__inner {
	position: relative; z-index: 2;
	width: 100%; margin: 0;
	padding: 0 clamp(28px, 4vw, 56px) clamp(36px, 5vw, 60px);
}
@media (max-width: 640px) { .shine-hero__inner {padding: 0 22px 32px;} }

.shine-crumbs {display: flex;flex-wrap: wrap;align-items: center;gap: .5rem;font-size: .9rem;margin-bottom: 1.6rem;}
.shine-crumbs a { color: var(--shine-accent); transition: color var(--shine-dur) var(--shine-ease); }
.shine-crumbs a:hover { color: var(--shine-accent-hover); }
/* current page is not a link — let it recede so the accent reads as clickable */
.shine-crumbs span { color: var(--shine-muted); }
.shine-crumbs > * + *::before {content: "•";color: var(--shine-faint);margin-right: .5rem;}

/* the panel is a dark photo, so its type is light regardless of the theme */
.shine-hero__title {font-size: clamp(2.2rem, 5vw, 3.4rem);color: #ffffff;letter-spacing: -.02em;}
.shine-hero .shine-crumbs span { color: rgba(255,255,255,.72); }
.shine-hero .shine-crumbs > * + *::before { color: rgba(255,255,255,.45); }

/* ---- hero entrance ----
   Each word rises out of its own clipping box; the crumbs and lead fade up
   around it. transform/opacity only, and `both` fill means the end state is
   held rather than snapping back. */
.shine-hero__word {
	display: inline-block;
	overflow: hidden;
	vertical-align: bottom;
	/* room for descenders so overflow:hidden does not clip a 'p' or 'y' */
	padding-bottom: .14em;
	margin-bottom: -.14em;
	font-weight: 800;
}
.shine-hero__word > span {
	display: inline-block;
	transform: translateY(110%);
	opacity: 0;
	animation: shineWordUp .9s var(--shine-ease) both;
	animation-delay: calc(var(--i) * 75ms + 140ms);
	letter-spacing: -.02em;
	/* the panel is a photo: the headline stays white, the accent is carried by
	   the buttons and the small marks instead */
	color: inherit;
}
@keyframes shineWordUp {
	to { transform: translateY(0); opacity: 1; }
}

.shine-crumbs { animation: shineHeroFade .7s var(--shine-ease) both; animation-delay: 60ms; }
@keyframes shineHeroFade {
	from { opacity: 0; transform: translateY(10px); }
	to   { opacity: 1; transform: none; }
}

/* ===========================  SECTION  ==================================== */

.shine-sec {padding: clamp(56px, 8vw, 50px) 0;}
.shine-sec__head {
	display: flex; align-items: flex-end; justify-content: space-between; gap: 2rem;
	padding-bottom: 1.8rem; margin-bottom: 2.4rem;
	border-bottom: 1px solid var(--shine-border);
}
.shine-sec__title {font-size: clamp(1.8rem, 3.4vw, 2.3rem);}
.shine-count {
	font-family: var(--shine-font-display);
	font-size: .86rem; letter-spacing: .1em; text-transform: uppercase;
	color: var(--shine-muted); white-space: nowrap;
}
.shine-count span { color: var(--shine-accent); font-size: 1.5rem; margin-right: .5rem; font-weight: 600; }

/* ===========================  LOCATIONS (mosaic)  ========================= */

.shine-locs {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 18px;
}

.shine-loc {
	position: relative;
	overflow: hidden;
	display: flex;
	flex-direction: column;
	gap: 1.4rem;
	min-height: 230px;
	padding: 2rem 2.1rem 1.7rem;
	background: var(--shine-surface);
	border: 1px solid var(--shine-border);
	border-radius: 20px;
	transition: border-color var(--shine-dur) var(--shine-ease);
}
/* hover: the whole border turns gold (the old top hairline animation is gone) */
.shine-loc:hover { border-color: var(--shine-accent); }

/* the oversized index, bled off the corner */
.shine-loc__ghost {
	position: absolute;
	right: -.06em;
	bottom: -.34em;
	font-family: var(--shine-font-display);
	font-size: 8.5rem;
	font-weight: 600;
	line-height: .8;
	color: rgb(255 255 255 / 3%);
	letter-spacing: -.05em;
	pointer-events: none;
	transition: color var(--shine-dur) var(--shine-ease),
	            transform .4s var(--shine-ease);
}
.shine-loc:hover .shine-loc__ghost {
	color: rgb(255 255 255 / 12%);
	transform: translateY(-4px);
}

.shine-loc__main { position: relative; z-index: 1; flex: 1 0 auto; }

.shine-loc__meta {
	display: flex; align-items: center; flex-wrap: wrap; gap: .45rem;
	font-size: .74rem; letter-spacing: .12em; text-transform: uppercase;
	color: var(--shine-faint);
	margin-bottom: .85rem;
}
.shine-loc__meta svg { color: var(--shine-accent); flex: 0 0 auto; }
.shine-loc__meta i { font-style: normal; color: rgba(255,255,255,.3); }
.shine-loc__meta i::before {content: " •  ";}

.shine-loc__title {
	font-size: .9rem;
	font-weight: 700;
	color: var(--shine-text);
	max-width: 24ch;
	line-height: 22px;
}

.shine-loc__contact {
	list-style: none; padding: 0; margin: 1.1rem 0 0;
	display: flex; flex-wrap: wrap; gap: .55rem 1.4rem;
}
.shine-loc__contact a {
	display: inline-flex; align-items: center; gap: .45rem;
	font-size: .875rem; color: var(--shine-muted);
	transition: color var(--shine-dur) var(--shine-ease);
}
.shine-loc__contact a svg { color: var(--shine-faint); transition: color var(--shine-dur) var(--shine-ease); }
.shine-loc__contact a:hover { color: var(--shine-accent); }
.shine-loc__contact a:hover svg { color: var(--shine-accent); }

.shine-loc__foot {
	position: relative; z-index: 1;
	display: flex; align-items: center; gap: 1.1rem;
	margin-top: auto;
}
.shine-loc__nogeo { font-size: .82rem; color: var(--shine-faint); }
.shine-loc__edit { font-size: .84rem; color: var(--shine-muted); }
.shine-loc__edit:hover { color: var(--shine-accent); }

@media (max-width: 860px) {
	.shine-locs { grid-template-columns: minmax(0, 1fr); gap: 14px; }
	.shine-loc {
		min-height: 0;
		padding: 1.7rem 1.6rem 1.5rem;
		gap: 1.2rem;
	}
	.shine-loc__ghost { font-size: 6.5rem; right: -.04em; }
}

/* ===========================  EMPTY  ====================================== */

.shine-empty {
	/* border: 1px dashed var(--shine-border); */
	/* border-radius: 18px; */
	/* padding: clamp(40px, 8vw, 80px) 24px; */
	text-align: center;
	display: grid;
	justify-items: center;
	gap: 1.1rem;
	color: var(--shine-faint);
}
.shine-empty p { color: var(--shine-muted); max-width: 40ch; }

/* ===========================  MEDIA BOX (4:3, matches the upload crop) ==== */

.shine-media {
	position: relative; overflow: hidden;
	aspect-ratio: 4 / 3;
	background: var(--shine-surface-alt);
	border-radius: 14px;
}
.shine-media > img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s var(--shine-ease); }
.shine-media--zoom:hover > img { transform: scale(1.04); }
.shine-media--empty { display: flex; align-items: center; justify-content: center; border: 1px solid var(--shine-border); }
.shine-media--empty svg { width: 56px; height: 56px; color: var(--shine-faint); }

/* ===========================  ALERT  ====================================== */

.shine-alert {
	background: #fff6e2;
	border-bottom: 1px solid #f3dcae;
	color: #6b4b05;
	padding: .8rem 24px;
	font-size: .9rem;
	text-align: center;
}

/* ===========================  FOOTER  ===================================== */

/* Minimal footer: one white panel on the tint, same width and radius as the
   hero and the cards, so the page ends the way it began. */
.shine-foot {margin-top: auto;padding-bottom: 18px;}
.shine-foot__top {
	width: var(--shine-max);
	margin: 0 auto;
	background: var(--shine-surface);
	border: 1px solid var(--shine-border);
	border-radius: var(--shine-radius-lg);
	padding: clamp(32px, 4vw, 52px) clamp(28px, 4vw, 56px);
	/* brand left, link columns right — a grid, not a wrapping row: with long
	   labels (German "ALLGEMEINE GESCHÄFTSBEDINGUNGEN") the row ran out of
	   room and dropped the columns under the brand. Now the brand text gives
	   way and the columns keep their place; they stack only on small screens. */
	display: grid;
	grid-template-columns: minmax(0, 1fr) auto;
	align-items: start;
	gap: 3rem;
	margin-bottom: 50px;
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-foot__brand { min-width: 0; }
@media (max-width: 900px) {
	.shine-foot__top { grid-template-columns: minmax(0, 1fr); gap: 2.4rem; }
}
/* Footer mark: the same logo as the nav, a touch larger. Falls back to the
   company name as text when the tenant has not uploaded one. */
.shine-foot__logo { display: inline-flex; align-items: center; }
.shine-foot__logo img {max-height: 55px;width: auto;max-width: 160px;}
.shine-foot__logo .shine-brand__name {
	font-family: var(--shine-font-display);
	font-size: 1.5rem; font-weight: 600; letter-spacing: -.03em;
	color: var(--shine-text);
}
/* Footer disclosure — quiet, narrow measure so it reads as fine print
   rather than competing with the link columns. */
.shine-foot__legal {
	color: var(--shine-faint);
	font-size: .82rem;
	line-height: 1.7;
	margin-top: 1.1rem;
	max-width: 72ch;
}
/* Company name is its own element in front of the sentence, so it is never
   embedded in a translatable string. */
.shine-foot__co {
	color: var(--shine-muted);
	font-weight: 600;
}
.shine-foot__co::after {
	content: " · ";
	color: var(--shine-faint);
	font-weight: 400;
}
.shine-foot__cols { display: flex; flex-wrap: wrap; gap: 1.6rem clamp(1.6rem, 3vw, 3.5rem); }
.shine-foot__col { display: grid; gap: .6rem; align-content: start; }
.shine-foot__h {
	color: var(--shine-faint);
	margin-bottom: .3rem;
}
.shine-foot__col a {color: var(--shine-muted);transition: color var(--shine-dur) var(--shine-ease);}
.shine-foot__col a:hover { color: var(--shine-accent); }
.shine-foot__lang { display: inline-flex; align-items: center; gap: .45rem; }
.shine-foot__lang img { width: 20px; border-radius: 3px; }
/* Powered-by now sits under the legal paragraph in the brand column; the old
   full-width bottom bar is gone. */
.shine-foot__by {
	font-size: .82rem;
	color: var(--shine-faint);
	margin-top: .7rem;
}
.shine-foot__by a { color: var(--shine-muted); transition: color var(--shine-dur) var(--shine-ease); }
.shine-foot__by a:hover { color: var(--shine-accent); }
@media (max-width: 640px) {
	.shine-foot__top {width: calc(100% - 28px);padding-left: 22px;padding-right: 22px;border-radius: var(--shine-radius);}
}

/* ===========================  MODAL  ====================================== */

.shine-modal .modal-content {
	background: var(--shine-surface);
	border: 1px solid var(--shine-border);
	border-radius: 20px;
	color: var(--shine-text);
	overflow: hidden;
}

/* This template s bootstrap.min.css carries the dark theme backdrop
   (#0b071be3 - near opaque), which read as a black flash before the white
   dialog painted. Shine is light: a soft overlay, and no fade. */
.modal-backdrop,
.modal-backdrop.show { background-color: rgba(15, 16, 32, .45); opacity: 1; }
.modal-backdrop.fade { transition: none; }
.shine-modal.fade,
.shine-modal.fade .modal-dialog {transition: none;transform: none;}
.shine-modal__head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding: 20px 22px;
}
.shine-modal__head h3 { font-size: 1.2rem; }
.shine-modal__search { position: relative; padding: 16px 22px 10px; }
.shine-modal__search svg { position: absolute; left: 36px; top: 50%; transform: translateY(-25%); color: var(--shine-faint); }
.shine-modal__search input {
	width: 100%; padding: .75rem 1rem .75rem 2.6rem;
	background: var(--shine-bg);
	border: 1px solid var(--shine-border);
	border-radius: 12px;
	color: var(--shine-text); font-family: var(--shine-font-ui); font-size: .95rem;
}
.shine-modal__search input:focus { outline: none; border-color: var(--shine-accent); }

.shine-langs {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
	gap: 6px;
	padding: 10px 22px 24px;
	max-height: 56vh;
	overflow-y: auto;
}
.shine-lang a {
	display: flex; align-items: center; gap: .6rem;
	padding: .6rem .7rem; border-radius: 11px;
	border: 1px solid transparent;
	font-size: .88rem; color: var(--shine-text);
	transition: background-color var(--shine-dur) var(--shine-ease), border-color var(--shine-dur) var(--shine-ease);
}
.shine-lang a:hover { background: var(--shine-surface-alt); }
.shine-lang.is-active a {border-color: var(--shine-accent);background: var(--shine-surface-alt);}
.shine-lang img { width: 22px; border-radius: 3px; }
.shine-lang i { color: var(--shine-faint); font-style: normal; }

/* ===========================  TO TOP  ===================================== */

.shine-totop {
	position: fixed;
	right: 22px;
	bottom: 22px;
	z-index: 80;
	width: 44px;
	height: 44px;
	border-radius: 12px;
	background: var(--shine-accent);
	color: var(--shine-accent-text);
	border: 0;
	cursor: pointer;
	display: flex;
	align-items: center;
	justify-content: center;
	opacity: 0;
	transform: translateY(10px);
	pointer-events: none;
	transition: opacity var(--shine-dur) var(--shine-ease), transform var(--shine-dur) var(--shine-ease);
}
.shine-totop.is-on { opacity: 1; transform: none; pointer-events: auto; }

/* ===========================  MOTION  ===================================== */
/* transform + opacity only — the compositor never touches layout */

/* Hidden ONLY when JS is confirmed running (html.shine-js is set in <head>).
   Without JS these stay visible — the animation is an enhancement, never a
   precondition for seeing the content. */
.shine-js [data-shine-reveal] {
	opacity: 0;
	transform: translateY(14px);
	transition: opacity .45s var(--shine-ease), transform .45s var(--shine-ease);
}
.shine-js [data-shine-reveal].is-in { opacity: 1; transform: none; }

@media (prefers-reduced-motion: reduce) {
	html { scroll-behavior: auto; }
	*, *::before, *::after {
		animation-duration: .001ms !important;
		transition-duration: .001ms !important;
	}
	[data-shine-reveal] { opacity: 1; transform: none; }
	/* hero copy appears immediately, no rise */
	.shine-hero__word > span,
	.shine-crumbs { animation: none; opacity: 1; transform: none; }
	/* no drift, no parallax — JS already skips the scroll transforms */
	/* network stays, but static: drawn, visible, not moving */
	/* grid stays visible, just stops moving */
	/* grid is already static */
	.shine-grid__mark { animation: none; opacity: .7; transform: none; }
}

/* ===========================  MISC  ======================================= */

::selection { background: var(--shine-accent); color: var(--shine-accent-text); }
* { scrollbar-color: var(--shine-border) transparent; scrollbar-width: thin; }
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--shine-border); border-radius: 10px; }
::-webkit-scrollbar-thumb:hover { background: var(--shine-faint); }

a:focus-visible, button:focus-visible, [tabindex]:focus-visible {
	outline: 2px solid var(--shine-accent);
	outline-offset: 3px;
}

/* ---- chevron in buttons/links ---- */
/* Nudges forward on hover so the affordance reads as "go", without the
   diagonal arrow's visual noise. transform only. */
.shine-chev {
	flex: 0 0 auto;
	transition: transform var(--shine-dur) var(--shine-ease);
}
.shine-btn:hover .shine-chev,
a:hover > .shine-chev { transform: translateX(3px); }
@media (prefers-reduced-motion: reduce) { .shine-chev { transition: none; } }

/* ===========================  AUTH / FORMS  =============================== */

.shine-auth {
	display: grid;
	grid-template-columns: minmax(0, 1.55fr) minmax(0, .95fr);
	gap: 2.5rem;
	align-items: start;
}
@media (max-width: 900px) { .shine-auth { grid-template-columns: minmax(0,1fr); gap: 1.6rem; } }

.shine-auth__main {
	background: var(--shine-surface);
	border: 1px solid var(--shine-border);
	border-radius: 20px;
	padding: clamp(1.5rem, 3vw, 2.6rem);
}

/* ---- segmented tabs (Sign in / Sign up / Recover) ---- */
.shine-tabs {
	gap: 2px;
	padding: 9px;
	margin-bottom: 1.8rem;
	border-radius: 16px;
	width: max-content;
	max-width: 100%;
	width: 100%;
	background: var(--shine-surface-alt);
}
.shine-tab {
	flex: 0 0 auto;              /* never squash a label to make room */
	padding: .5rem 1.1rem;
	border-radius: 12px;
	font-size: .9rem;
	font-weight: 500;
	color: var(--shine-muted);
	white-space: nowrap;
	transition: background-color var(--shine-dur) var(--shine-ease), color var(--shine-dur) var(--shine-ease);
}
.shine-tab:hover { color: var(--shine-text); }
.shine-tab.is-active { background: var(--shine-accent); color: var(--shine-accent-text); }

/* ---- fields ---- */
.shine-form { display: grid; gap: 1.15rem; }
.shine-grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 1.15rem; }
@media (max-width: 620px) { .shine-grid2 { grid-template-columns: 1fr; } }

.shine-field { display: grid; gap: .45rem; min-width: 0; }
.shine-field > label {
	color: var(--shine-faint);
}

.shine-control { position: relative; display: block; }
.shine-control__icon {
	position: absolute;
	left: 14px; top: 50%;
	transform: translateY(-50%);
	color: var(--shine-faint);
	pointer-events: none;
	z-index: 2;
	transition: color var(--shine-dur) var(--shine-ease);
}
.shine-control:focus-within .shine-control__icon { color: var(--shine-accent); }

body .shine-input {
	width: 100%;
	background: var(--shine-bg);
	border: 1px solid var(--shine-border);
	border-radius: 12px;
	color: var(--shine-text);
	font-family: var(--shine-font-ui);
	font-size: .85rem;
	padding: .8rem 1rem;
	transition: border-color var(--shine-dur) var(--shine-ease),
	            box-shadow var(--shine-dur) var(--shine-ease);
}
.shine-control__icon ~ .shine-input { padding-left: 2.6rem; }
body .shine-input::placeholder { color: var(--shine-faint); }
body .shine-input:focus {
	outline: none;
	border-color: var(--shine-accent);
}
body .shine-input:-webkit-autofill,
body .shine-input:-webkit-autofill:focus {
	-webkit-text-fill-color: var(--shine-text);
	-webkit-box-shadow: 0 0 0 1000px var(--shine-bg) inset;
}

/* password eye */
.shine-control__toggle {
	position: absolute;
	right: 12px; top: 50%;
	transform: translateY(-50%);
	color: var(--shine-faint);
	cursor: pointer;
	z-index: 3;
	line-height: 0;
	transition: color var(--shine-dur) var(--shine-ease);
}
.shine-control__toggle:hover { color: var(--shine-text); }

/* ---- validation states (Bootstrap adds .was-validated on submit) ---- */
.was-validated .shine-input:invalid {
	border-color: var(--shine-danger);
	/* box-shadow: 0 0 0 3px color-mix(in srgb, var(--shine-danger) 18%, transparent); */
}
.was-validated .shine-input:valid { border-color: color-mix(in srgb, #1dbb60 55%, transparent); }
.was-validated .shine-input:invalid ~ .shine-control__icon { color: var(--shine-danger); }

/* ---- intl-tel-input, themed to match ---- */
.shine-field--phone .iti { display: block; width: 100%; }
.shine-field--phone .iti__selected-country { background: transparent; border-radius: 12px 0 0 12px; }
.shine-field--phone .iti__selected-country:hover {/* background: var(--shine-surface-alt); */}
.shine-field--phone .iti__selected-dial-code { color: var(--shine-muted); margin-left: 4px; }
.shine-field--phone .iti__arrow { border-top-color: var(--shine-faint); }
.iti__dropdown-content {
	background: var(--shine-surface);
	border: 1px solid var(--shine-border);
	border-radius: 14px;
	color: var(--shine-text);
	overflow: hidden;
}
.iti__search-input {
	background: var(--shine-bg) !important;
	border: 1px solid var(--shine-border) !important;
	color: var(--shine-text) !important;
	border-radius: 10px !important;
	padding: .55rem .75rem !important;
	margin: 10px !important;
	width: calc(100% - 20px) !important;
}
.iti__country { color: var(--shine-text); }
.iti__country:hover, .iti__country.iti__highlight { background: var(--shine-surface-alt) !important; }
.iti__country-name { color: var(--shine-text); }
.iti__dial-code { color: var(--shine-faint); }

/* ---- password rules ---- */
.shine-form__note { color: var(--shine-muted); font-size: .9rem; margin-top: .3rem; }
.shine-rules { display: grid; gap: .4rem; margin: 0; padding: 0; list-style: none; font-size: .85rem; }
.shine-rules .icon-text-wrapper { display: flex; align-items: center; gap: .5rem; }
.shine-rules .icon-container { display: inline-flex; width: 16px; justify-content: center; }
.shine-rules li.text-danger { color: var(--shine-faint) !important; }
.shine-rules li.text-success { color: #1dbb60 !important; }

.shine-wait { color: var(--shine-muted); font-size: .85rem; display: flex; align-items: center; }
.shine-form__submit { justify-self: start; padding-inline: 2.2rem; }
.shine-form__submit:disabled { opacity: .5; cursor: not-allowed; }

/* ---- session message ---- */
.shine-note {
	/* centre, not flex-start: the close button is taller than a single line of
	   text, so top-aligning left the message sitting above the button's middle */
	display: flex; align-items: center; justify-content: space-between; gap: 1rem;
	padding: .85rem 1rem;
	border-radius: 12px;
	font-size: .9rem;
	line-height: 1.5;
	margin-bottom: 1.2rem;
	border: 1px solid var(--shine-border);
	background: var(--shine-surface-alt);
	color: var(--shine-text);
}
.shine-note > span { flex: 1 1 auto; min-width: 0; }
.shine-note .shine-iconbtn { flex: 0 0 auto; }
.shine-note--danger  {border-color: var(--shine-danger);color: #dc003f;background: #dc003f14;}
.shine-note--success {border-color: color-mix(in srgb, #1dbb60 45%, transparent);color: #1dbb60;background: #27be471a;}
.shine-note--warning { border-color: rgba(255,193,7,.45); color: #ffd75e; }

/* ---- aside: reasons to sign up, no cards ---- */
/* Both columns open with an h2 at the same height, so the two headings
   sit on one line across the grid. */
/* min-width:0 is load-bearing. Grid items default to min-width:auto, so a
   max-content child (the tab strip) makes the column refuse to shrink and
   the whole card overflows the viewport — inputs included. */
.shine-auth__col  { display: grid; gap: 1.1rem; align-content: start; min-width: 0; }
.shine-auth__side { display: grid; gap: 1.1rem; align-content: start; min-width: 0; }
.shine-auth__main { min-width: 0; }
.shine-form, .shine-grid2, .shine-field, .shine-control { min-width: 0; }
.shine-auth__title { font-size: clamp(1.4rem, 2.2vw, 1.9rem); }

.shine-why { list-style: none; margin: 0; padding: 0; display: grid; gap: .8rem; }
.shine-why li {
	display: grid;
	grid-template-columns: auto 1fr;
	gap: 1rem;
	align-items: start;
	padding: 1.2rem 1.3rem;
	background: var(--shine-surface-alt);
	border-radius: 16px;
	transition: border-color var(--shine-dur) var(--shine-ease);
}
.shine-why li:hover { border-color: rgba(255,255,255,.26); }
.shine-why__idx {
	font-family: var(--shine-font-display);
	font-size: .82rem; font-weight: 600; letter-spacing: .04em;
	color: var(--shine-accent);
	padding-top: .18rem;
}
.shine-why h3 {font-size: 1rem;}
.shine-why p { color: var(--shine-muted); font-size: .88rem; line-height: 1.65; max-width: 38ch; }

.shine-auth__recover {
	display: flex; flex-wrap: wrap; gap: .4rem;
	font-size: .88rem; color: var(--shine-muted);
}
.shine-auth__recover a { color: var(--shine-accent); }
.shine-auth__recover a:hover { color: var(--shine-accent-hover); }

/* ===========================  NAV, SMALL SCREENS  ========================= */
/* The links are display:none below 1100px, but `.shine-nav__links + .shine-nav__actions`
   still matches (the element is hidden, not removed), so the actions kept
   margin-left:0 and sat next to the logo instead of at the right edge. */
@media (max-width: 1100px) {
	.shine-nav__links + .shine-nav__actions,
	.shine-nav__actions { margin-left: auto; }
	.shine-nav__bar { gap: 12px; }
}

@media (max-width: 640px) {
	.shine-brand img {
		max-width: 160px;
		max-height: 40px;
		width: auto;
		height: auto;
	}
	.shine-nav__actions { gap: 8px; }
}



/* ===========================  SCROLLER (reusable)  ========================
   A one-line horizontal strip that hides its overflow and scrolls inside
   itself. Children never wrap and never shrink. JS (footer.php) scrolls the
   .is-active child into view on load and toggles the edge fades.

   Use it on anything that can outgrow its container in another language:
       <nav class="shine-tabs shine-scroller"> … </nav>
       <div class="shine-chips shine-scroller"> … </div>
   ========================================================================= */

.shine-scroller {
	display: flex;
	flex-wrap: nowrap;
	overflow-x: auto;
	overflow-y: hidden;
	overscroll-behavior-x: contain;
	-webkit-overflow-scrolling: touch;
	scrollbar-width: none;                    /* Firefox */
	-ms-overflow-style: none;                 /* old Edge */
}
.shine-scroller::-webkit-scrollbar { display: none; }   /* Blink / WebKit */
.shine-scroller > * { flex: 0 0 auto; }

/* Edge fades, so a partly visible item reads as "there is more" instead of
   looking clipped. Classes are set by JS from the scroll position. A mask is
   used rather than an overlay so it works over any background. */
.shine-scroller.can-scroll-end {
	-webkit-mask-image: linear-gradient(90deg, #000 calc(100% - 46px), transparent 100%);
	        mask-image: linear-gradient(90deg, #000 calc(100% - 46px), transparent 100%);
}
.shine-scroller.can-scroll-start {
	-webkit-mask-image: linear-gradient(90deg, transparent 0, #000 46px);
	        mask-image: linear-gradient(90deg, transparent 0, #000 46px);
}
.shine-scroller.can-scroll-start.can-scroll-end {
	-webkit-mask-image: linear-gradient(90deg, transparent 0, #000 46px, #000 calc(100% - 46px), transparent 100%);
	        mask-image: linear-gradient(90deg, transparent 0, #000 46px, #000 calc(100% - 46px), transparent 100%);
}

/* Hide the supporting column once the auth grid stacks. Declared at the end
   of the file on purpose: the base .shine-auth__side{display:grid} rule sits
   further down than the 900px block, so an override up there loses on source
   order despite matching. */
@media (max-width: 900px) {
	.shine-auth__side { display: none; }
}

/* ---- recover step indicator ---- */
.shine-steps li { opacity: .55; transition: opacity var(--shine-dur) var(--shine-ease); }
.shine-steps li.is-current { opacity: 1; border-color: color-mix(in srgb, var(--shine-accent) 45%, transparent); }
.shine-steps li.is-done { opacity: .8; }
.shine-steps li.is-done .shine-why__idx { color: #1dbb60; }
.shine-steps li:not(.is-current) .shine-why__idx { color: var(--shine-faint); }

/* verification code field reads as a code, not prose */
.shine-input--code { letter-spacing: .24em; font-size: 1.05rem; }

/* ---- intl-tel-input: undo legacy style.css offsets ----
   style.css ships rules that shift the tel input (top:-4px) and the country
   container (top:-10px; height:60px), which left the phone field sitting 4px
   above the email field beside it. Pin everything to the field box instead. */
.shine-field--phone .iti { position: relative; display: block; }
.shine-field--phone .iti__tel-input {
	top: 0 !important;
	position: relative;
}
.shine-field--phone .iti__country-container {
	top: 0 !important;
	bottom: 0 !important;
	left: 0 !important;
	height: auto !important;
	padding: 0 !important;
	/* NOT flex: the dropdown is a child here, and making this a flex container
	   turned the dropdown into a flex item and broke its anchoring. */
}
.shine-field--phone .iti__selected-country {
	height: 100% !important;
	padding: 0 .75rem !important;
	border-radius: 12px 0 0 12px;
}
.shine-field--phone .iti__selected-country-primary { padding: 0 !important; }

/* Dropdown hangs below the field, never over it. */
.shine-field--phone .iti__dropdown-content {
	position: absolute;
	top: calc(100% + 6px) !important;
	bottom: auto !important;
	left: 0 !important;
	z-index: 60;
	/* min-width: 320px; */
	max-height: 320px;
	overflow-y: auto;
	width: 100%;
}
.shine-field--phone .iti__dropdown-content.iti__hide { display: none; }

/* footer language: chevron signals it opens the language modal */
.shine-foot__lang { gap: .5rem; }
.shine-foot__lang-caret {
	flex: 0 0 auto;
	color: var(--shine-faint);
	transition: transform var(--shine-dur) var(--shine-ease), color var(--shine-dur) var(--shine-ease);
}
.shine-foot__lang:hover .shine-foot__lang-caret {
	color: var(--shine-accent);
	transform: translateY(1px);
}

/* ===========================  CONTACT  ==================================== */
/* Note: deliberately NOT .shine-auth__side — that column is hidden below 900px,
   and both of these must survive on a phone. */

.shine-contact {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 2.5rem;
	align-items: start;
}
@media (max-width: 900px) { .shine-contact { grid-template-columns: minmax(0,1fr); gap: 1.8rem; } }

.shine-contact__col { display: grid; gap: 1.1rem; align-content: start; min-width: 0; }

.shine-contact__card {
	background: var(--shine-surface);
	border: 1px solid var(--shine-border);
	border-radius: 20px;
	padding: clamp(1.3rem, 2.4vw, 2rem);
	min-width: 0;
}
/* Branches panel: plain column, no card. It stays visible on mobile — it is
   real data, not decoration, unlike the auth pages supporting column. */
.shine-contact__cta {
	display: grid;
	gap: 1.1rem;
	justify-items: start;
	align-content: start;
	padding-top: .3rem;
}
.shine-contact__cta p { color: var(--shine-muted); font-size: .92rem; line-height: 1.7; max-width: 46ch; }

/* label / value rows */
.shine-crow {
	display: grid;
	grid-template-columns: 150px minmax(0, 1fr);
	gap: 1rem;
	padding: .95rem 0;
	border-bottom: 1px solid var(--shine-border);
	/* start, not the default stretch: with a multi-line value the label cell
	   stretched and centred its text against the whole block */
	align-items: start;
}
.shine-crow:first-child { padding-top: 0; }
.shine-crow:last-child { border-bottom: 0; padding-bottom: 0; }

.shine-crow__k {
	display: inline-flex; align-items: center; gap: .5rem;
	font-size: .76rem; letter-spacing: .1em; text-transform: uppercase;
	color: var(--shine-faint);
	/* the label is smaller than the value, so top-aligning the boxes leaves the
	   text riding ~3px high — nudge it onto the value first line */
	padding-top: 4.5px;
}
.shine-crow__k svg { color: var(--shine-accent); flex: 0 0 auto; }
.shine-crow__v { color: var(--shine-text); font-size: .95rem; line-height: 1.7; word-break: break-word; }
.shine-crow__v a { color: var(--shine-text); transition: color var(--shine-dur) var(--shine-ease); }
.shine-crow__v a:hover { color: var(--shine-accent); }

@media (max-width: 520px) {
	.shine-crow { grid-template-columns: minmax(0,1fr); gap: .35rem; }
}

/* ===========================  LEGACY VIEW SHIM  ===========================
   Views still on the default template's markup use Bootstrap surface classes
   that paint white. Neutralise them inside shine so an unmigrated page reads
   dark while its body is rebuilt. Remove a line once its page is migrated. */
body.shine .bg-white,
body.shine .bg-light { background: transparent !important; color: inherit; }

/* ===========================  FLEET / VEHICLE CARD  ======================= */

.shine-fleet {
	display: grid;
	/* 240 not 260: beside the 300px filter column the main column lands at
	   ~850px, where a 260px minimum plus the gaps overshoots by a hair and
	   auto-fill drops to two very wide cards. */
	grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
	gap: 2rem;             /* the cards carry their own fill now */
	width: 100%;
}
@media (max-width: 560px) { .shine-fleet { grid-template-columns: minmax(0,1fr); gap: 1.2rem; } }

/* auto media + 1fr body, so the price and the CTA sit on one line across
   a row of cards however much the names and spec lists differ */
/* A filled tile: photo on top, name and category left with the price right,
   one line of specs, and a full-width button that always sits at the foot. */
.shine-vh {
	display: flex;
	flex-direction: column;
	gap: 1rem;
	min-width: 0;
	border-radius: var(--shine-radius);
}

/* ---- media: 4:3 box that fades into the page at the bottom ---- */
.shine-vh__media {
	position: relative;
	display: block;
	aspect-ratio: 4 / 3;
	border-radius: var(--shine-radius);
	overflow: hidden;
	background: var(--shine-surface);
}
.shine-vh__media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform .2s var(--shine-ease);
}
.shine-vh:hover .shine-vh__media img { transform: scale(1.03); }

.shine-vh__noimg {
	position: absolute;
	inset: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	background: var(--shine-surface-alt);
}
.shine-vh__noimg svg {width: 72px;color: var(--shine-faint);opacity: .2;}

/* Category and availability sit together in one row at top-left. They used
   to be pinned to opposite corners in different colours — the green pill in
   particular belonged to a different design than the rest of the card. */
.shine-vh__tags {
	position: absolute; top: 12px; left: 12px; right: 12px; z-index: 2;
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
	pointer-events: none;   /* the whole media box is the link */
}
.shine-vh__tags > * { pointer-events: auto; }

.shine-vh__chip,
.shine-vh__flag {
	padding: .2rem .6rem;
	border-radius: 9px;
	background: color-mix(in srgb, var(--shine-bg) 72%, transparent);
	backdrop-filter: blur(10px);
	-webkit-backdrop-filter: blur(10px);
	border: 1px solid var(--shine-border);
	font-size: .66rem;
	font-weight: 500;
	color: var(--shine-muted);
	text-transform: capitalize;
	white-space: nowrap;
}
/* the availability note is a sentence fragment, not an enum value */
.shine-vh__flag {text-transform: none;color: var(--shine-muted);}

/* ---- body ---- */
.shine-vh__body { flex: 1 1 auto; display: flex; flex-direction: column; gap: .9rem; min-width: 0; padding: 0 4px 4px; }
.shine-vh__head { display: flex; align-items: flex-start; justify-content: space-between; gap: .75rem; }
.shine-vh__name { font-size: 1.1rem; font-weight: 700; letter-spacing: -.01em; min-width: 0; }
/* the name carries the accent by default; hover brightens it rather than
   switching hue, so nothing jumps */
.shine-vh__name a {color: var(--shine-text);transition: color var(--shine-dur) var(--shine-ease);}
.shine-vh__name a:hover { color: var(--shine-accent); }
.shine-vh__id { display: grid; gap: .1rem; min-width: 0; }
.shine-vh__cat { font-size: .82rem; color: var(--shine-faint); text-transform: capitalize; }
/* in the head the price stacks: amount in the accent, the unit under it */
.shine-vh__head .shine-vh__price { display: grid; justify-items: end; gap: 0; flex: 0 0 auto; text-align: right; }
.shine-vh__head .shine-vh__price b {color: #1dbb60;font-size: 1.15rem;font-weight: 700;}
.shine-vh__head .shine-vh__price span { font-size: .78rem; color: var(--shine-faint); white-space: nowrap; }
.shine-vh__cta {margin-top: auto;width: 100%;justify-content: center;border-radius: 100px;padding: .72rem 1rem;}
.shine-vh__body > .shine-vh__edit { align-self: center; margin-top: -.3rem; }

.shine-vh__edit { font-size: .8rem; color: var(--shine-muted); flex: 0 0 auto; }
.shine-vh__edit:hover { color: var(--shine-accent); }

.shine-vh__specs {
	list-style: none; margin: 0; padding: 0;
	display: flex; flex-wrap: wrap; gap: .4rem 1.1rem;
	font-size: .85rem; color: var(--shine-muted);
}
.shine-vh__specs li { display: inline-flex; align-items: center; gap: .4rem; text-transform: capitalize; }
.shine-vh__specs svg { color: var(--shine-text); flex: 0 0 auto; }


/* nowrap on purpose: at 260px a four-figure price used to push the button
   onto its own line, which lifted that one card's foot out of line with
   its neighbours. The price shrinks instead. */
.shine-vh__foot {
	display: flex; align-items: center; justify-content: space-between;
	gap: .75rem; flex-wrap: nowrap;
	margin-top: auto;
	padding-top: .9rem;
	border-top: 1px solid var(--shine-border);
}
.shine-vh__price {
	display: flex;
	align-items: baseline;
	gap: .35rem;
	margin: 0;
	min-width: 0;
}
.shine-vh__price b { white-space: nowrap; }
.shine-vh__per {
	font-size: .82rem;
	color: var(--shine-faint);
	white-space: nowrap;
}
.shine-vh__price b {
	font-family: var(--shine-font-display);
	font-size: clamp(1.15rem, 1.7vw, 1.22rem);
	font-weight: 600;
	letter-spacing: -.02em;
	color: var(--shine-text);
}
/* A round button instead of a labelled pill: three of these side by side
   were the loudest thing on the page. The label survives as the accessible
   name and the tooltip. */
.shine-vh__go {
	flex: 0 0 auto;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	display: none;
	border-radius: 100px;
	background: var(--shine-accent);
	color: var(--shine-accent-text);
	transition: background-color var(--shine-dur) var(--shine-ease);
}
.shine-vh__go:hover,
.shine-vh__go:focus-visible { background: var(--shine-accent-hover); color: var(--shine-accent-text); }

/* ===========================  PAGINATION  ================================= */
/* Bootstrap paints these light; retheme them and give the block breathing
   room above, since the fleet grid now ends with a generous gap. */

.pagination-sec {
	grid-column: 1 / -1;
	width: 100%;
	margin-top: 3.5rem;
	display: grid;
	gap: .9rem;
	justify-items: center;
}
.pagination-sec .text-muted { color: var(--shine-muted) !important; font-size: .86rem; }

body .pagination {
	display: flex;
	align-items: center;
	gap: 6px;
	margin: 0 !important;
	padding: 0;
	list-style: none;
	flex-wrap: wrap;
	justify-content: center;
}
body .pagination .page-item { padding: 0 !important; }

body .pagination .page-link {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 40px;
	height: 40px;
	padding: 0 .7rem;
	border-radius: 100px;
	background: transparent !important;
	border: 1px solid var(--shine-border) !important;
	color: var(--shine-muted);
	font-family: var(--shine-font-ui);
	font-size: .9rem;
	font-weight: 500;
	box-shadow: none !important;
	transition: border-color var(--shine-dur) var(--shine-ease),
	            color var(--shine-dur) var(--shine-ease),
	            background-color var(--shine-dur) var(--shine-ease);
}
body .pagination .page-link svg { fill: currentColor; }
body .pagination .page-link:hover { border-color: var(--shine-accent) !important; color: var(--shine-text); }
body .pagination .page-link:focus { box-shadow: none !important; outline: none; }

body .pagination .page-item.active .page-link {
	background: var(--shine-accent) !important;
	border-color: var(--shine-accent) !important;
	color: var(--shine-accent-text) !important;
}
/* Bootstrap sets a background AND border colour on .page-item.disabled
   .page-link with more class specificity than the base rule, so both have to
   be restated here or the disabled arrow renders as a grey filled pill. */
body .pagination .page-item.disabled .page-link,
body .pagination .page-item.disabled > .page-link {
	background: transparent !important;
	border-color: var(--shine-border) !important;
	color: var(--shine-faint) !important;
	opacity: .4;
	pointer-events: none;
}

/* ===========================  FLEET FILTER BAR  ===========================
   One bar, everything live. It is deliberately flat — no card, no shadow —
   so it reads as part of the page rather than a floating widget. */

.shine-filters {
	grid-column: 1 / -1;
	width: 100%;
	display: grid;
	/* gap: 1.4rem; */
	margin: 0 0 2.8rem;
	padding: 0 0 1.6rem;
	border-bottom: 1px solid var(--shine-border);
	min-width: 0;
}

/* ---- search ---- */
.shine-filters__search {
	position: relative;
	display: flex;
	align-items: center;
	gap: .6rem;
	padding: .8rem 1rem;
	border: 1px solid var(--shine-border);
	/* 12px, matching .shine-drop__trigger: pills are for actions and toggles
	   in this template, rounded rects are for fields */
	border-radius: 12px;
	transition: border-color var(--shine-dur) var(--shine-ease);
}
.shine-filters__search:focus-within {border-color: var(--shine-accent);}
.shine-filters__search > svg { color: var(--shine-faint); flex: 0 0 auto; }
.shine-filters__search input {
	flex: 1 1 auto;
	min-width: 0;
	padding: 0;
	background: none;
	border: 0;
	outline: none;
	color: var(--shine-text);
	font-family: var(--shine-font-ui);
	font-size: .88rem;
	font-weight: 500;
}
.shine-filters__search input::placeholder { color: var(--shine-faint); font-weight: 400; }
/* kill the UA's own clear affordance — we ship our own */
.shine-filters__search input::-webkit-search-cancel-button,
.shine-filters__search input::-webkit-search-decoration { -webkit-appearance: none; appearance: none; }

.shine-filters__clear {
	flex: 0 0 auto;
	display: inline-flex; align-items: center; justify-content: center;
	width: 22px; height: 22px;
	padding: 0;
	border: 1px solid var(--shine-border);
	border-radius: 100px;
	background: none;
	color: var(--shine-muted);
	cursor: pointer;
	transition: color var(--shine-dur) var(--shine-ease),
	            border-color var(--shine-dur) var(--shine-ease);
}
.shine-filters__clear:hover { color: var(--shine-text); border-color: var(--shine-accent); }

/* ---- category chips (inside the reusable .shine-scroller) ---- */
.shine-filters__cats { min-width: 0; gap: .5rem; padding-bottom: 2px; }

.shine-chip {
	flex: 0 0 auto;
	padding: 0.58rem .85rem;
	border: 1px solid var(--shine-border);
	border-radius: 12px;
	background: none;
	color: var(--shine-accent);
	fill: var(--shine-accent);
	font-family: var(--shine-font-ui);
	font-size: .8rem;
	font-weight: 500;
	white-space: nowrap;
	text-transform: capitalize;
	cursor: pointer;
	transition: color var(--shine-dur) var(--shine-ease),
	            border-color var(--shine-dur) var(--shine-ease),
	            background-color var(--shine-dur) var(--shine-ease);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-chip:hover {border-color: var(--shine-accent);background: color-mix(in srgb, var(--shine-text) 7%, var(--shine-bg));}
/* the active chip is outlined, not filled — a row of solid orange pills
   fought the CTAs for attention */
.shine-chip.is-active {
	background: color-mix(in srgb, var(--shine-text) 7%, var(--shine-bg));
	border-color: var(--shine-accent);
	/* color: var(--shine-text); */
	font-weight: 600;
}

/* ---- selects + price, one row ---- */
.shine-filters__row {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr)) minmax(0, 1.5fr);
	gap: 1.2rem 1.6rem;
	align-items: end;
	min-width: 0;
}
@media (max-width: 900px) {
	.shine-filters__row { grid-template-columns: repeat(2, minmax(0,1fr)); }
	.shine-filters__row .shine-range { grid-column: 1 / -1; }
}
@media (max-width: 520px) {
	.shine-filters__row { grid-template-columns: minmax(0,1fr); }
}

.shine-sel {
	display: grid;
	gap: .35rem;
	min-width: 0;
	cursor: pointer;
}
.shine-sel > span {
	color: var(--shine-faint);
}
.shine-sel select {
	width: 100%;
	min-width: 0;
	padding: .6rem 2rem .6rem 0;
	background: none;
	border: 0;
	border-bottom: 1px solid var(--shine-border);
	border-radius: 0;
	color: var(--shine-text);
	font-family: var(--shine-font-ui);
	font-size: .95rem;
	cursor: pointer;
	appearance: none;
	-webkit-appearance: none;
	/* chevron drawn inline so it inherits nothing from Bootstrap */
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right .2rem center;
	background-size: 15px;
	transition: border-color var(--shine-dur) var(--shine-ease);
}
.shine-sel select:focus { outline: none; border-color: var(--shine-accent); }
.shine-sel.is-set select { border-color: var(--shine-accent); }
/* the native dropdown list paints on the OS surface, so it needs real colours */
.shine-sel select option { background: #0b141b; color: #ffffff; }

/* ---- dual-handle price range ----
   Two stacked <input type=range>. Both native tracks are transparent; the
   visible track and fill are the wrapper's own divs, so the pair reads as
   one control. Only the thumbs stay hit-testable. */
.shine-range { display: grid; gap: .35rem; min-width: 0; }

.shine-range__head {
	display: flex; align-items: baseline; justify-content: space-between;
	gap: 1rem;
}
.shine-range__head > span {
	font-size: .72rem;
	color: var(--shine-faint);
}
.shine-range__out {
	font-family: var(--shine-font-ui);
	font-size: .9rem; font-weight: 600;
	color: var(--shine-text);
	white-space: nowrap;
}

.shine-range__track {
	position: relative;
	height: 40px;
	display: flex;
	align-items: center;
}
.shine-range__track::before {
	content: '';
	position: absolute;
	left: 0;
	right: 0;
	top: 50%;
	height: 2px;
	transform: translateY(-50%);
}
.shine-range__fill {
	position: absolute; top: 50%;
	height: 2px;
	transform: translateY(-50%);
	background: var(--shine-accent);
}

.shine-range input[type="range"] {
	position: absolute;
	left: 0; width: 100%;
	margin: 0;
	height: 40px;
	background: none;
	appearance: none;
	-webkit-appearance: none;
	pointer-events: none;   /* the track must not swallow clicks */
	outline: none;
}
.shine-range input[type="range"]::-webkit-slider-runnable-track {
	height: 40px; background: none; border: 0;
}
.shine-range input[type="range"]::-moz-range-track {
	height: 40px; background: none; border: 0;
}
.shine-range input[type="range"]::-webkit-slider-thumb {
	appearance: none;
	-webkit-appearance: none;
	pointer-events: auto;
	width: 16px; height: 16px;
	margin-top: 12px;       /* centre against the 40px track */
	border-radius: 100px;
	background: var(--shine-bg);
	border: 3px solid var(--shine-accent);
	cursor: grab;
	transition: transform var(--shine-dur) var(--shine-ease);
}
.shine-range input[type="range"]::-moz-range-thumb {
	pointer-events: auto;
	width: 16px; height: 16px;
	border-radius: 100px;
	background: var(--shine-bg);
	border: 3px solid var(--shine-accent);
	cursor: grab;
	transition: transform var(--shine-dur) var(--shine-ease);
}
.shine-range input[type="range"]:hover::-webkit-slider-thumb,
.shine-range input[type="range"]:focus-visible::-webkit-slider-thumb { transform: scale(1.15); }
.shine-range input[type="range"]:hover::-moz-range-thumb,
.shine-range input[type="range"]:focus-visible::-moz-range-thumb { transform: scale(1.15); }
.shine-range input[type="range"]:active::-webkit-slider-thumb { cursor: grabbing; }

/* ---- count + reset ---- */
.shine-filters__foot {
	display: flex; align-items: center; justify-content: space-between;
	gap: 1rem; flex-wrap: wrap;
}
.shine-filters__count {
	margin: 0;
	font-size: .86rem;
	color: var(--shine-muted);
}
.shine-filters__reset {padding: .65rem 1rem;font-size: .7rem;background: none;}

/* ===========================  SKELETONS  =================================
   Used two ways: a whole placeholder grid while a search settles, and a
   single slot holding the space a card is about to occupy. */

.shine-sk {
	display: grid;
	gap: 1rem;
	min-width: 0;
}
.shine-sk__media {
	aspect-ratio: 4 / 3;
	border-radius: 18px;
	background: var(--shine-border);
}
.shine-sk__line {
	height: 11px;
	border-radius: 100px;
	background: var(--shine-border);
}
.shine-sk__line--lg { height: 15px; width: 68%; }
.shine-sk__line--sm { height: 10px; width: 40%; }
.shine-sk__foot { display: flex; align-items: center; justify-content: space-between; gap: 1rem; }
.shine-sk__foot .shine-sk__line--sm { flex: 0 0 40%; }
.shine-sk__pill {
	flex: 0 0 auto;
	width: 96px; height: 34px;
	border-radius: var(--shine-radius-pill);
	background: var(--shine-border);
}

/* one pulse, driven by opacity only */
.shine-sk__media,
.shine-sk__line,
.shine-sk__pill { animation: shine-pulse 1.25s var(--shine-ease) infinite; }
.shine-sk:nth-child(2n) .shine-sk__media { animation-delay: .08s; }
.shine-sk:nth-child(3n) .shine-sk__media { animation-delay: .16s; }

@keyframes shine-pulse {
	0%, 100% { opacity: .45; }
	50%      { opacity: 1; }
}
@media (prefers-reduced-motion: reduce) {
	.shine-sk__media, .shine-sk__line, .shine-sk__pill { animation: none; opacity: .6; }
}

/* ===========================  EMPTY STATE  =============================== */

.shine-fleet__empty {
	grid-column: 1 / -1;
	width: 100%;
	display: grid;
	gap: 1.1rem;
	justify-items: center;
	text-align: center;
	padding: 5rem 1rem;
	color: var(--shine-muted);
}
.shine-fleet__empty p {margin: 0;}

/* ===========================  CLIENT PAGER  ==============================
   Replaces the server pagination on the fleet page: same look, no reload. */

.shine-pager {
	grid-column: 1 / -1;
	width: 100%;
	display: flex;
	align-items: center;
	justify-content: center;
	flex-wrap: wrap;
	gap: 6px;
	margin-top: 3.5rem;
}
.shine-pager__btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 40px;
	height: 40px;
	padding: 0 .7rem;
	border: 1px solid var(--shine-border);
	border-radius: 12px;
	background: none;
	color: var(--shine-accent);
	font-family: var(--shine-font-ui);
	font-size: .9rem;
	font-weight: 500;
	cursor: pointer;
	transition: color var(--shine-dur) var(--shine-ease),
	            border-color var(--shine-dur) var(--shine-ease),
	            background-color var(--shine-dur) var(--shine-ease);
}
.shine-pager__btn:hover:not(:disabled) {/* color: var(--shine-text); */border-color: var(--shine-accent);}
.shine-pager__btn.is-active {
	background: var(--shine-accent);
	border-color: var(--shine-accent);
	color: white;
}
.shine-pager__btn:disabled { opacity: .35; cursor: default; }
.shine-pager__btn--io { padding: 0; }

/* ===========================  FLEET PAGE LAYOUT  =========================
   Results left, filters right on desktop. The filter column is sticky so it
   stays reachable down a long fleet. Source order puts the filters first, so
   the single-column fallback shows them above the results — the small-screen
   arrangement is still open, this is only the sane default. */

.shine-fleetpage {
	display: grid;
	grid-template-columns: minmax(0, 1fr) 330px;
	gap: 0 3.5rem;
	align-items: start;
	width: 100%;
}
.shine-fleetpage__main { grid-column: 1; grid-row: 1; min-width: 0; }
.shine-fleetpage__side {
	grid-column: 2;
	grid-row: 1;
	min-width: 0;
}

@media (max-width: 1100px) {
	.shine-fleetpage { grid-template-columns: minmax(0, 1fr) 260px; gap: 0 2.5rem; }
}
@media (max-width: 900px) {
	.shine-fleetpage { grid-template-columns: minmax(0, 1fr); gap: 0; }
	.shine-fleetpage__side { grid-column: 1; grid-row: 1; position: static; }
	.shine-fleetpage__main { grid-column: 1; grid-row: 2; }
}

/* the bar is a column now: its own border no longer reads as a rule under
   the page, and the three selects stack instead of sharing a row */
.shine-fleetpage__side .shine-filters {
	margin: 0;
	padding: 0;
	border-bottom: 0;
}
.shine-fleetpage__side .shine-filters__row {
	grid-template-columns: minmax(0, 1fr);
	gap: 1.4rem;
}
.shine-fleetpage__side .shine-filters__search input { font-size: .85rem; }
@media (min-width: 901px) {
	/* three equal columns rather than flex wrapping: every chip is the same
	   width and the columns line up, and a short last row keeps its column
	   instead of stretching across the sidebar */
	.shine-fleetpage__side .shine-filters__cats {
		display: grid;
		grid-template-columns: repeat(3, minmax(0, 1fr));
		gap: .4rem;
		overflow: visible;
		-webkit-mask-image: none;
		mask-image: none;
	}
	.shine-fleetpage__side .shine-chip {
		width: 100%;
		padding-left: .3rem;
		padding-right: .3rem;
		font-size: .74rem;
	}
}
.shine-fleetpage__side .shine-filters__foot {
	padding-top: .4rem;
	flex-direction: column;
	align-items: stretch;
	gap: .8rem;
}
.shine-fleetpage__side .shine-filters__reset { justify-content: center; }

@media (max-width: 900px) {
	.shine-fleetpage__side .shine-filters {
		/* padding: 0 0 1.6rem; */
	}
	.shine-fleetpage__side .shine-filters__row { grid-template-columns: repeat(2, minmax(0,1fr)); }
	.shine-fleetpage__side .shine-filters__row .shine-range { grid-column: 1 / -1; }
	.shine-fleetpage__side .shine-filters__foot {
		flex-direction: row;
		align-items: center;
		border-top: 0;
		padding-top: 0;
	}
}
@media (max-width: 520px) {
	.shine-fleetpage__side .shine-filters__row { grid-template-columns: minmax(0,1fr); }
}

/* ===========================  STYLED DROPDOWN  ===========================
   Built over each `.shine-sel select` by the runtime in footer.php. The panel
   continues the trigger rather than floating beside it: the trigger squares
   its bottom corners while open and the panel overlaps the shared border by
   1px, so the two read as one box. */

.shine-drop { position: relative; min-width: 0; }

.shine-drop__trigger {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: .6rem;
	width: 100%;
	padding: 0.8rem;
	border: 1px solid var(--shine-border);
	border-radius: 12px;
	background: none;
	/* color: var(--shine-text); */
	font-family: var(--shine-font-ui);
	text-align: left;
	cursor: pointer;
	transition: border-color var(--shine-dur) var(--shine-ease),
	            color var(--shine-dur) var(--shine-ease);
}
.shine-drop__trigger:hover { border-color: var(--shine-accent); }
.shine-drop__trigger:focus-visible { outline: none; border-color: var(--shine-accent); }

.shine-drop__value {
	min-width: 0;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}
.shine-drop__chev {
	flex: 0 0 auto;
	color: var(--shine-faint);
	transition: transform var(--shine-dur) var(--shine-ease);
}

.shine-drop.is-open .shine-drop__trigger {
	border-color: color-mix(in srgb, var(--shine-text) 26%, transparent);
	border-bottom-color: transparent;
	border-bottom-left-radius: 0;
	border-bottom-right-radius: 0;
	background: white;
}
.shine-drop.is-open .shine-drop__chev { transform: rotate(180deg); color: var(--shine-text); }

.shine-drop__panel {
	position: absolute;
	top: calc(100% - 1px);      /* sit on the trigger's bottom border */
	left: 0;
	right: 0;
	z-index: 30;
	max-height: 264px;
	overflow-y: auto;
	overscroll-behavior: contain;
	padding: .25rem 0;
	border: 1px solid color-mix(in srgb, var(--shine-text) 26%, transparent);
	border-top-color: transparent;
	border-radius: 0 0 12px 12px;
	background: white;
	scrollbar-width: thin;
}
.shine-drop__panel::-webkit-scrollbar { width: 6px; }
.shine-drop__panel::-webkit-scrollbar-thumb {
	background: var(--shine-border);
	border-radius: 100px;
}

.shine-drop__opt {
	display: block;
	width: 100%;
	padding: .5rem .8rem;
	border: 0;
	background: none;
	color: var(--shine-muted);
	font-family: var(--shine-font-ui);
	font-size: .85rem;
	text-align: left;
	text-transform: capitalize;
	cursor: pointer;
	transition: color var(--shine-dur) var(--shine-ease),
	            background-color var(--shine-dur) var(--shine-ease);
}
.shine-drop__opt:hover,
.shine-drop__opt:focus-visible {
	outline: none;
	color: var(--shine-text);
	background: color-mix(in srgb, var(--shine-text) 7%, transparent);
}
.shine-drop__opt.is-selected { color: var(--shine-accent); }

/* the native control stays in the DOM as the value holder; only JS hides it,
   so without JS the plain select is what renders */
.shine-sel__native {
	position: absolute;
	width: 1px; height: 1px;
	margin: -1px; padding: 0;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
}

/* A set filter tints its trigger, the way the underline used to. Not while
   the panel is open, though: this rule is declared after the open state and
   carries more classes, so it was repainting all four sides accent — an
   orange box around the trigger with a grey panel hanging off it. */
.shine-sel.is-set .shine-drop__trigger { border-color: var(--shine-accent); }
.shine-sel.is-set .shine-drop.is-open .shine-drop__trigger {
	border-color: color-mix(in srgb, var(--shine-text) 26%, transparent);
	border-bottom-color: transparent;
}

/* the spec list capitalises raw enum values (manual, petrol); the deposit
   note is already a sentence, so it opts out */
.shine-vh__specs .shine-vh__note { text-transform: none; }

/* =====================  FLEET FILTERS ON A NARROW SCREEN  =================
   The filter column sits above the results when the page stacks, so a hero
   plus a full filter panel pushed the first card off the bottom of a phone.
   Everything below the search collapses behind one toggle. The search stays
   out — it is the fastest way to narrow a fleet and costs one row. */

.shine-filters__bar { display: none; }

@media (max-width: 900px) {
	.shine-filters__bar {
		display: flex;
		align-items: center;
		justify-content: space-between;
		gap: 1rem;
		min-width: 0;
	}

	.shine-filters__toggle {
		display: inline-flex;
		align-items: center;
		gap: .5rem;
		padding: .5rem .9rem;
		border: 1px solid var(--shine-border);
		border-radius: var(--shine-radius-pill);
		background: none;
		color: var(--shine-text);
		font-family: var(--shine-font-ui);
		font-size: .86rem;
		font-weight: 500;
		cursor: pointer;
		transition: border-color var(--shine-dur) var(--shine-ease),
		            color var(--shine-dur) var(--shine-ease);
	}
	.shine-filters__toggle svg { color: var(--shine-faint); flex: 0 0 auto; }
	.shine-filters.is-open .shine-filters__toggle { border-color: var(--shine-accent); }
	.shine-filters.is-open .shine-filters__toggle svg { color: var(--shine-accent); }

	.shine-filters__badge {
		display: inline-flex;
		align-items: center;
		justify-content: center;
		min-width: 20px; height: 20px;
		padding: 0 5px;
		border-radius: 100px;
		background: var(--shine-accent);
		color: var(--shine-accent-text);
		font-size: .72rem;
		font-weight: 700;
	}

	/* the count belongs next to the toggle here, not buried in the panel */
	.shine-filters__count--bar { text-align: right; }
	.shine-filters__body #shineCount { display: none; }
	.shine-filters__body .shine-filters__foot { justify-content: flex-end; }

	.shine-filters__body { display: none; }
	.shine-filters.is-open .shine-filters__body {
		display: grid;
		gap: 1.6rem;
		animation: shinePanelIn .22s var(--shine-ease) both;
	}
}

/* only the panel's own arrival is animated, never its height */
@keyframes shinePanelIn {
	from { opacity: 0; transform: translateY(-6px); }
	to   { opacity: 1; transform: none; }
}
@media (prefers-reduced-motion: reduce) {
	.shine-filters.is-open .shine-filters__body { animation: none; }
}

@media (min-width: 901px) {
	.shine-filters__count--bar { display: none; }
}

/* ---- a shorter hero, so the fleet starts nearer the top ---- */
@media (max-width: 640px) {
	.shine-hero {min-height: 250px;}
	.shine-hero__inner { padding: 0 20px 32px; }
	.shine-crumbs { margin-bottom: 1rem; font-size: .76rem; }
	.shine-hero__title {font-size: clamp(2rem, 10vw, 2.9rem);}
}

/* ===========================  VEHICLE DETAILS  ===========================
   Gallery and facts on the left, a sticky booking rail on the right, the way
   the reference lays it out — but in shine's flat dark language: no shadows,
   hairline borders, one accent. */

.shine-vd { padding: clamp(2.5rem, 5vw, 4rem) 0 clamp(3rem, 6vw, 5rem); }

/* Two equal halves, not a content column with a narrow rail: the car and its
   price on the left, everything you need to decide on the right. */
.shine-vd__top {
	display: grid;
	grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
	gap: 0 clamp(2rem, 2vw, 4.5rem);
	align-items: start;
}
.shine-vd__left { min-width: 0; display: grid; gap: .9rem; align-content: start; }
.shine-vd__right { min-width: 0; display: grid; gap: 1.4rem; align-content: start; }
@media (max-width: 900px) {
	.shine-vd__top { grid-template-columns: minmax(0, 1fr); gap: 2rem; }
}

/* Name and price open the page, above both columns. The three facet chips ride
   on the price line, pushed to the right edge, so the head spans the full width
   the way the two columns below it do. */
/* Name on the first line with the facet chips at its right, price on the
   second. */
.shine-vd__head {
	display: grid;
	grid-template-columns: minmax(0, 1fr) auto;
	grid-template-areas:
		"name  facets"
		"price facets";
	align-items: center;
	gap: .35rem 1.4rem;
	margin-bottom: clamp(1rem, 2vw, 1.6rem);
}
.shine-vd__head .shine-vd__name { grid-area: name; min-width: 0; }
.shine-vd__head .shine-vd__pricerow { grid-area: price; }
.shine-vd__head .shine-vd__facets { grid-area: facets; align-self: start; }
/* the chips are a shortcut back into the filtered fleet, not information —
   drop them where the row would get cramped */
@media (max-width: 760px) {
	.shine-vd__head .shine-vd__facets { display: none; }
	.shine-vd__head { column-gap: .9rem; }
}
.shine-vd__name { font-size: clamp(1.9rem, 3.2vw, 2.6rem); }
.shine-vd__name span {color: var(--shine-faint);font-weight: 400;}
.shine-vd__pricerow { display: flex; align-items: baseline; gap: .4rem; }
.shine-vd__price { font-size: clamp(1.5rem, 2.4vw, 2rem); font-weight: 700; color: var(--shine-accent); letter-spacing: -.02em; }
.shine-vd__per { color: var(--shine-faint); font-size: .95rem; }

/* right column headings sit on the page, not on a card */
.shine-vd__h {
	display: flex;
	align-items: baseline;
	gap: .8rem;
	font-size: 1.5rem;
	margin-bottom: -.4rem;
}

/* the booking action: one button, the reassurances under it */
.shine-vd__act { display: grid; gap: .8rem; justify-items: start; }
.shine-vd__act .shine-btn { min-width: 260px; }
@media (max-width: 560px) { .shine-vd__act .shine-btn { width: 100%; min-width: 0; } }

/* everything below the fold runs full width instead of stacking in a rail */
.shine-vd__rest {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
	gap: 1.2rem;
	margin-top: clamp(2.5rem, 5vw, 4rem);
	align-items: start;
}
/* a grid item defaults to min-width:auto, so one nowrap line (an issue row)
   would stretch its column over the neighbouring one */
.shine-vd__rest > * { min-width: 0; }

/* ---- gallery ---- */
.shine-vd__gallery { display: grid; gap: .7rem; min-width: 0; }

/* Holds the stage and its two arrows: the stage clips to its radius, this does
   not, so the arrows can sit on its edge. No padding — the photo keeps the
   full width of its column. */
/* min-width:0 matters: without it the swiper's inline slide widths push this
   wider than its grid column and the photo runs over the specs beside it */
.shine-vd__stagewrap { position: relative; width: 100%; min-width: 0; }

.shine-vd__stage {
	position: relative;
	width: 100%;
	aspect-ratio: 4 / 3;
	max-height: 560px;
	border-radius: 20px;
	overflow: hidden;
	background: #f7f6fd;
}
.shine-vd__stage .swiper-slide { display: block; }
.shine-vd__stage img { width: 100%; height: 100%; object-fit: cover; display: block; }

.shine-vd__stage--empty { display: flex; align-items: center; justify-content: center; }
.shine-vd__stage--empty .shine-vh__noimg { position: static; background: none; }
.shine-vd__stage--empty svg { width: 140px; color: var(--shine-faint); opacity: .5; }

/* swiper ships its own arrow glyphs and colours; replace both */
.shine-vd__nav {
	position: absolute;
	top: 50%;
	z-index: 3;
	width: 44px!important;
	height: 44px!important;
	margin-top: -22px;
	display: flex;
	align-items: center;
	justify-content: center;
	border: 0;
	border-radius: 12px;
	background: var(--shine-accent);
	/* swiper sets its own navigation colour on these classes, so say it here */
	--swiper-navigation-color: #ffffff;
	color: #ffffff;
	cursor: pointer;
	transition: background-color var(--shine-dur) var(--shine-ease),
	            transform var(--shine-dur) var(--shine-ease);
}
.shine-vd__nav:hover { background: var(--shine-accent-hover); }
/* on the photo's edges, where they were — only the look changed */
.shine-vd__nav--prev { left: 14px; }
.shine-vd__nav--next { right: 14px; }
.shine-vd__nav::after {
	font-family: inherit;
	font-size: 0;                      /* kill swiper's glyph */
	content: '';
	width: 9px;
	height: 9px;
	border-right: 2px solid rgb(255 255 255);
	border-bottom: 2px solid rgb(255 255 255);
}
.shine-vd__nav--prev::after { transform: rotate(135deg); margin-left: 3px; }
.shine-vd__nav--next::after { transform: rotate(-45deg); margin-right: 3px; }
.shine-vd__stage .swiper-button-disabled { opacity: .35; pointer-events: none; }

.shine-vd__thumbs { width: 100%; }
.shine-vd__thumbs .swiper-slide {
	border-radius: 12px;
	overflow: hidden;
	aspect-ratio: 4 / 3;
	cursor: pointer;
	opacity: .5;
	transition: opacity var(--shine-dur) var(--shine-ease);
}
.shine-vd__thumbs .swiper-slide img { width: 100%; height: 100%; object-fit: cover; display: block; }
.shine-vd__thumbs .swiper-slide:hover { opacity: .8; }
.shine-vd__thumbs .swiper-slide-thumb-active { opacity: 1; outline: 2px solid var(--shine-accent); outline-offset: -2px; }

.shine-vd__edit {
	position: absolute; top: 14px; left: 14px; z-index: 3;
	padding: .3rem .8rem;
	border: 1px solid var(--shine-border);
	border-radius: 100px;
	background: color-mix(in srgb, var(--shine-bg) 72%, transparent);
	backdrop-filter: blur(10px);
	-webkit-backdrop-filter: blur(10px);
	color: var(--shine-text);
	font-size: .76rem;
}
.shine-vd__edit:hover { color: var(--shine-accent); border-color: var(--shine-accent); }

/* ---- the three facets ---- */
.shine-vd__facets { display: flex; flex-wrap: wrap; gap: .5rem; }
.shine-vd__facets .shine-chip { display: inline-flex; align-items: center; gap: .45rem; }
.shine-vd__facets .shine-chip svg {color: var(--shine-accent);}
.shine-vd__facets .shine-chip:hover svg { color: var(--shine-accent); }

/* ---- card shell, shared by the spec block and every rail box ---- */
.shine-card {
	border: 1px solid var(--shine-border);
	border-radius: 18px;
	padding: 1.4rem;
	min-width: 0;
}
.shine-card__head {
	display: flex; align-items: baseline; justify-content: space-between;
	gap: 1rem;
	margin-bottom: 1.1rem;
}
.shine-card__head h2 { font-size: 1.1rem; margin: 0; }
.shine-card__edit { font-size: .8rem; color: var(--shine-muted); white-space: nowrap; }
.shine-card__edit:hover { color: var(--shine-accent); }

/* ---- spec grid ---- */
/* Specification tiles: three across, filled rather than outlined, icon over a
   bold label over a quiet value — the value is the answer, so it reads last. */
.shine-specs {
	list-style: none; margin: 0; padding: 0;
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: .9rem;
}
@media (max-width: 560px) { .shine-specs { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.shine-specs li {
	display: grid;
	gap: .1rem;
	padding: 1.1rem 1rem;
	border: 0;
	border-radius: var(--shine-radius-sm);
	min-width: 0;
	background: var(--shine-surface-alt);
}
.shine-specs svg {color: var(--shine-accent);margin-bottom: .6rem;}
.shine-specs span {font-size: .85rem;letter-spacing: 0;text-transform: none;color: var(--shine-text);font-weight: 600;}
.shine-specs b { font-size: .85rem; font-weight: 400; color: var(--shine-faint); text-transform: capitalize; }

/* Not an accordion any more: nothing collapses, so everything a renter needs
   is on the page at once. The class name stays because the markup uses it. */
.shine-acc {
	border: 1px solid var(--shine-border);
	border-radius: var(--shine-radius);
	min-width: 0;
}
.shine-acc__head {
	display: flex; align-items: center; justify-content: space-between;
	gap: 1rem;
	padding: 1.2rem 1.4rem;
}
.shine-acc__head h2 { font-size: 1.1rem; margin: 0; }
.shine-acc__body { padding: 0 1.4rem 1.4rem; }
.shine-acc__body .shine-card__edit { display: inline-block; margin-bottom: .9rem; }

/* ---- tick lists ---- */
.shine-ticks {
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
	gap: .55rem 1.4rem;
	border-radius: var(--shine-radius);
	/* box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important; */
}
.shine-ticks li {
	display: flex; align-items: flex-start; gap: .55rem;
	font-size: .9rem;
	color: var(--shine-muted);
	min-width: 0;
}
/* the tick is a filled accent disc with a white mark inside, not a bare glyph */
.shine-ticks svg {
	flex: 0 0 auto;
	width: 18px; height: 18px; padding: 3px;
	margin-top: 1px;
	border-radius: 50%;
	background: var(--shine-accent);
	color: #ffffff;
}
.shine-ticks--rail { grid-template-columns: minmax(0, 1fr); margin: 0; }
.shine-ticks--two { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .7rem 1.4rem; }
@media (max-width: 560px) { .shine-ticks--two { grid-template-columns: minmax(0, 1fr); } }

/* ---- issues ---- */
.shine-issues { list-style: none; margin: 0; padding: 0; display: grid; gap: .5rem; min-width: 0; }
.shine-issues > li {min-width: 0;padding: 0px;}
/* the dash separates one issue from the next, so the last row has none */
.shine-issues > li:last-child .shine-issue { border-bottom: 0; }
.shine-issue {
	display: flex;
	align-items: center;
	gap: .7rem;
	width: 100%;
	min-width: 0;
	max-width: 100%;
	border: 0px;
	border-bottom: 1px dashed var(--shine-border);
	background: none;
	color: var(--shine-muted);
	font-family: var(--shine-font-ui);
	font-size: .88rem;
	text-align: left;
	cursor: pointer;
	margin: 0px;
	padding: 0px;
	padding: 10px 0px;
}
.shine-issue:hover {color: var(--shine-text);}
.shine-issue svg { flex: 0 0 auto; color: var(--shine-accent); }
/* one line, whatever the length — the modal behind the click has the rest */
.shine-issue__text {
	flex: 1 1 auto;
	min-width: 0;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
	text-align: left;
}
.shine-issue__date { flex: 0 0 auto; font-size: .78rem; color: var(--shine-faint); }

/* ---- booking rail ---- */
.shine-vd__pricerow { display: flex; align-items: baseline; gap: .5rem; flex-wrap: wrap; }
.shine-vd__price {
	font-family: var(--shine-font-display);
	font-size: clamp(1.6rem, 3vw, 1.5rem);
	font-weight: 700;
	letter-spacing: -.02em;
	color: #1dbb60;
	white-space: nowrap;
}
.shine-vd__per { font-size: .88rem; color: var(--shine-faint); }
.shine-vd__note {margin: .8rem 0 0;font-size: .84rem;color: var(--shine-muted);line-height: 1.55;box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;}
.shine-vd__note b { color: var(--shine-text); font-weight: 600; }

.shine-disc { list-style: none; margin: 0; padding: 0; display: grid; gap: .55rem; }
.shine-disc li {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 1rem;
	font-size: .88rem;
	color: var(--shine-muted);
	border-bottom: 1px dashed #e3e3e5;
	padding-bottom: 5px;
}
.shine-disc li:last-child{
border-bottom:0px;	
	
}
.shine-disc b { color: var(--shine-accent); white-space: nowrap; }

/* one row, the three sharing the width evenly; square-ish corners, not pills */
.shine-vd__contact {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
	gap: .6rem;
}
.shine-vd__contact .shine-btn {
	justify-content: center;
	gap: .5rem;
	width: 100%;
	padding: .7rem 1rem;
	font-size: .88rem;
	border-radius: var(--shine-radius-sm);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}

/* ---- related ---- */
.shine-vd__more {margin-top: clamp(3rem, 6vw, 3rem);}
.shine-vd__more > h2 { font-size: clamp(1.4rem, 2.4vw, 1.9rem); margin: 0 0 1.8rem; }

/* ---- the damage modal ----
   .shine-modal belongs on the .modal wrapper, never on the content box: it is
   declared once near the top of this file and styles .modal-content from
   there. A bare .shine-modal rule here used to paint the full-screen overlay
   itself, which killed the language modal's backdrop. */
.shine-modal .modal-title { font-family: var(--shine-font-display); font-size: 1.05rem; }
.shine-modal__figure { border-radius: 12px; overflow: hidden; background: var(--shine-bg); }
.shine-modal__figure .marker {
	position: absolute;
	width: 16px; height: 16px;
	margin: -8px 0 0 -8px;
	border-radius: 100px;
	background: var(--shine-accent);
	box-shadow: 0 0 0 4px color-mix(in srgb, var(--shine-accent) 30%, transparent);
}

/* the related row spans the whole container, not the narrower main column,
   so pin it to four rather than letting auto-fill decide */
.shine-vd__more .shine-fleet { grid-template-columns: repeat(4, minmax(0, 1fr)); }
@media (max-width: 1100px) { .shine-vd__more .shine-fleet { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 820px)  { .shine-vd__more .shine-fleet { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 560px)  { .shine-vd__more .shine-fleet { grid-template-columns: minmax(0, 1fr); } }

img#damageModalImage {
    padding: 25px;
    background: white;
}
/* ===========================  BOOKING — STEP 1 BAR  =======================
   One card that sits over the hero's bottom edge, fields that open panels in
   place (after SIXT's bar), a live summary under it. The date picker below is
   daterangepicker — restyled here, never replaced: the engine and its bug
   fixes live in booking_1.php and must not move. */

.shine-bk-page {padding-bottom: clamp(3rem, 6vw, 5rem);padding-left: 0;padding-right: 0px;}
.shine-bk [hidden], .shine-bk-page [hidden] { display: none !important; }

.shine-bk {
	position: relative;
	z-index: 5;
	margin-top: 40px;           /* lift over the hero's bottom edge */
	display: grid;
	gap: 1.2rem;
}
@media (max-width: 640px) { .shine-bk {margin-top: -10px;} }

.shine-bk__card {
	position: relative;
	border-radius: 20px;
	border: 1px solid var(--shine-border);
	padding: 1.2rem 1.4rem;
	background: var(--shine-surface-alt);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}

.shine-bk__top { display: flex; justify-content: flex-end; margin-bottom: .2rem; }
.shine-bk__manage {
	font-size: .8rem;
	color: var(--shine-muted);
	text-decoration: underline;
	text-underline-offset: 3px;
}
.shine-bk__manage:hover { color: var(--shine-accent); }

/* ---- the bar ---- */
.shine-bk__bar {
	display: grid;
	grid-template-columns: minmax(0, 1.15fr) minmax(0, 1.55fr) auto;
	gap: 1rem;
	align-items: start;
}
.shine-bk__where { display: flex; gap: .8rem; align-items: flex-start; min-width: 0; }
.shine-bk__where > .shine-bk__field { flex: 1 1 0; min-width: 0; }
.shine-bk__when  { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: .8rem; min-width: 0; }
.shine-bk__go    { padding-top: 1.45rem; }     /* line up with the controls, not the labels */

.shine-bk__field { position: relative; min-width: 0; }
.shine-bk__label {
	display: block;
	margin-bottom: .45rem;
	color: var(--shine-faint);
}

.shine-bk__control {
	display: flex;
	align-items: center;
	gap: .6rem;
	width: 100%;
	height: 50px;
	padding: 0 .9rem;
	border: 1px solid var(--shine-border);
	border-radius: 14px;
	background: color-mix(in srgb, var(--shine-bg) 60%, transparent);
	color: var(--shine-text);
	font-family: var(--shine-font-ui);
	font-size: .95rem;
	text-align: left;
	cursor: pointer;
	transition: border-color var(--shine-dur) var(--shine-ease);
}
.shine-bk__control:hover { border-color: color-mix(in srgb, var(--shine-accent) 60%, var(--shine-border)); }
.shine-bk__control:focus-visible { outline: none; border-color: var(--shine-accent); }
.shine-bk__control > svg { flex: 0 0 auto; color: var(--shine-faint); }
.shine-bk__field.is-open > .shine-bk__control,
.shine-bk__field.is-open .shine-bk__control[aria-expanded="true"] { border-color: var(--shine-accent); }
.shine-bk__field.is-invalid .shine-bk__control { border-color: var(--shine-danger); }

.shine-bk__value {
	flex: 1 1 auto;
	min-width: 0;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}
.shine-bk__value:empty::before { content: attr(data-placeholder); color: var(--shine-faint); }

/* date + time read as one control, like the reference */
.shine-bk__dt { display: grid; grid-template-columns: minmax(0, 1fr) auto; }
.shine-bk__dt .shine-bk__control--date { border-radius: 12px 0 0 12px; }
.shine-bk__dt .shine-bk__control--time {
	width: auto;
	border-left: 0;
	border-radius: 0 12px 12px 0;
	padding: 0 1rem;
	white-space: nowrap;
}
.shine-bk__dt .shine-bk__control--time:hover,
.shine-bk__dt .shine-bk__control--time[aria-expanded="true"] { border-left: 0; }
.shine-bk__dt .shine-bk__control--time .shine-bk__value { overflow: visible; }

.shine-bk__err {
	margin: .35rem 0 0;
	font-size: .78rem;
	color: var(--shine-danger);
	display: none;
}

.shine-bk__addret {
	flex: 0 0 auto;
	display: inline-flex;
	align-items: center;
	gap: .4rem;
	height: 50px;
	margin-top: 1.45rem;
	padding: 0 .3rem;
	border: 0;
	background: none;
	color: var(--shine-muted);
	font-family: var(--shine-font-ui);
	font-size: .9rem;
	white-space: nowrap;
	cursor: pointer;
	transition: color var(--shine-dur) var(--shine-ease);
}
.shine-bk__addret:hover { color: var(--shine-text); }
.shine-bk__addret svg { color: var(--shine-accent); }

.shine-bk__cta { height: 50px; padding: 0 1.6rem; white-space: nowrap; }

/* ---- panels ---- */
.shine-bk__pop {
	position: absolute;
	top: calc(100% + 0px);
	left: 0;
	z-index: 40;
	min-width: 100%;
	max-height: 880px;
	overflow-y: auto;
	overscroll-behavior: contain;
	padding: 1rem;
	border: 1px solid color-mix(in srgb, var(--shine-text) 16%, transparent);
	border-radius: 14px;
	background: white;
	box-shadow: 0 24px 20px -20px rgba(0, 0, 0, .25);
	scrollbar-width: thin;
}
.shine-bk__pop--loc  {width: max(100%, 500px);}
.shine-bk__pop--time {width: 300px;left: auto;right: 0;min-width: 0;max-height: 820px;}

.shine-bk__search { position: sticky; top: -.45rem; padding: .1rem 0 .4rem; background: inherit; }
.shine-bk__searchin {
	width: 100%;
	height: 40px;
	padding: 0 .8rem;
	border: 1px solid var(--shine-border);
	border-radius: 10px;
	background: color-mix(in srgb, var(--shine-bg) 60%, transparent);
	color: var(--shine-text);
	font-family: var(--shine-font-ui);
	font-size: .88rem;
}
.shine-bk__searchin:focus { outline: none; border-color: var(--shine-accent); }

.shine-bk__opts { display: grid; gap: 2px; }
.shine-bk__opt {
	display: flex;
	align-items: flex-start;
	gap: .7rem;
	width: 100%;
	padding: .65rem .7rem;
	border: 0;
	border-radius: 10px;
	background: none;
	color: var(--shine-muted);
	font-family: var(--shine-font-ui);
	text-align: left;
	cursor: pointer;
	transition: background-color var(--shine-dur) var(--shine-ease), color var(--shine-dur) var(--shine-ease);
}
.shine-bk__opt:hover, .shine-bk__opt:focus-visible {
	outline: none;
	background: color-mix(in srgb, var(--shine-text) 7%, transparent);
	color: var(--shine-text);
}
.shine-bk__opt > svg { flex: 0 0 auto; margin-top: 2px; color: var(--shine-faint); }
.shine-bk__opt.is-on { color: var(--shine-text); }
.shine-bk__opt.is-on > svg { color: var(--shine-accent); }
.shine-bk__optmain { display: grid; gap: .1rem; min-width: 0; }
.shine-bk__optmain b { font-weight: 600; font-size: .92rem; }
.shine-bk__optmain small { font-size: .78rem; color: var(--shine-faint); }
.shine-bk__opt--back {
	margin-bottom: .3rem;
	border-bottom: 1px solid var(--shine-border);
	border-radius: 10px 10px 0 0;
	display: none;
}
.shine-bk__opt--back > svg { color: var(--shine-accent); }
.shine-bk__empty { margin: 0; padding: .8rem; font-size: .88rem; color: var(--shine-muted); }

/* time */
.shine-bk__poptitle { margin: .3rem 0 .5rem; text-align: center; font-weight: 600; font-size: .9rem; color: var(--shine-text); }
.shine-bk__part {
	margin: .7rem .2rem .35rem;
	font-size: .8rem;
	color: var(--shine-faint);
}
.shine-bk__slots { display: grid; grid-template-columns: 1fr 1fr; gap: .35rem; }
.shine-bk__slot {
	height: 36px;
	border: 1px solid var(--shine-border);
	border-radius: 10px;
	background: none;
	font-family: var(--shine-font-ui);
	font-size: .86rem;
	cursor: pointer;
	transition: border-color var(--shine-dur) var(--shine-ease), color var(--shine-dur) var(--shine-ease);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-bk__slot:hover { border-color: var(--shine-accent); color: var(--shine-text); }
.shine-bk__slot.is-on {
	border-color: var(--shine-accent);
	background: var(--shine-accent);
	color: var(--shine-accent-text);
	font-weight: 600;
}

/* ---- vehicle row ---- */
.shine-bk__row2 { margin-top: 1rem; }
.shine-bk__field--veh { max-width: unest; }
.shine-bk__control--veh {height: 85px;padding: 14px;box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;}
.shine-bk__vthumb {
	flex: 0 0 auto;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 70px;
	height: 60px;             /* 4:3, like every vehicle image */
	border-radius: 8px;
	overflow: hidden;
	background: color-mix(in srgb, var(--shine-text) 7%, transparent);
	color: var(--shine-faint);
}
.shine-bk__vthumb img { width: 100%; height: 100%; object-fit: cover; }
.shine-bk__vtext { display: grid; gap: .1rem; flex: 1 1 auto; min-width: 0; }
.shine-bk__vtext b { font-weight: 600; font-size: .93rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.shine-bk__vtext small { font-size: .78rem; color: var(--shine-faint); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.shine-bk__chev { flex: 0 0 auto; color: var(--shine-faint); transition: transform var(--shine-dur) var(--shine-ease); }
.shine-bk__control[aria-expanded="true"] .shine-bk__chev { transform: rotate(180deg); color: var(--shine-text); }

.shine-bk__pop--veh {width: 100%;max-height: 840px;padding-top: 10px;}
.shine-bk__vhead {
	position: sticky;
	top: -11px;
	z-index: 1;
	display: grid;
	gap: .5rem;
	padding: .55rem 0 .5rem;
	background: inherit;
	padding-top: 0px;
}
.shine-bk__vcats { gap: .4rem; }
.shine-bk__vcats .shine-chip { padding: .3rem .75rem; font-size: .76rem; }
.shine-bk__vlist { display: grid; gap: 2px; }
.shine-bk__vopt {
	display: flex;
	align-items: center;
	gap: .75rem;
	width: 100%;
	padding: .5rem .6rem;
	border: 1px solid transparent;
	border-radius: 12px;
	background: none;
	color: var(--shine-text);
	font-family: var(--shine-font-ui);
	text-align: left;
	cursor: pointer;
	transition: background-color var(--shine-dur) var(--shine-ease), border-color var(--shine-dur) var(--shine-ease);
}
.shine-bk__vopt:hover { background: color-mix(in srgb, var(--shine-text) 7%, transparent); }
.shine-bk__vopt.is-on { border-color: var(--shine-accent); }
.shine-bk__vimg {
	flex: 0 0 auto;
	display: flex; align-items: center; justify-content: center;
	width: 64px; height: 48px;
	border-radius: 8px;
	overflow: hidden;
	background: color-mix(in srgb, var(--shine-text) 7%, transparent);
	color: var(--shine-faint);
}
.shine-bk__vimg img { width: 100%; height: 100%; object-fit: cover; }
.shine-bk__vmain { display: grid; gap: .1rem; flex: 1 1 auto; min-width: 0; }
.shine-bk__vmain b { font-weight: 600; font-size: .9rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.shine-bk__vmain small { font-size: .76rem; color: var(--shine-faint); }
.shine-bk__vopt .is_available { flex: 0 0 auto; }
.shine-bk__vopt.unavailable_vehicle { opacity: .55; }

.shine-bk__avail {
	display: inline-flex; align-items: center; gap: .35rem;
	font-size: .74rem;
	color: var(--shine-muted);
	white-space: nowrap;
}
.shine-bk__avail::before { content: ''; width: 7px; height: 7px; border-radius: 100px; background: var(--shine-accent); }
.shine-bk__avail.is-off { color: var(--shine-danger); }
.shine-bk__avail.is-off::before { background: var(--shine-danger); }

/* ---- calendar panel ---- */
.shine-bk__cal {
	margin-top: 1.2rem;
	/* padding-top: 1rem; */
}
.shine-bk__calhead { display: flex; align-items: center; justify-content: space-between; margin-bottom: .4rem; }
.shine-bk__caltitle {margin: 0;}
#cal-render-block { position: relative; }

.shine-bk .hiddenSpinner { display: none; }
.shine-bk .spinner-container {
	position: absolute; inset: 0; z-index: 3;
	display: flex; align-items: center; justify-content: center;
	background: color-mix(in srgb, var(--shine-bg) 55%, transparent);
	border-radius: 12px;
}
.shine-bk__spin {
	display: inline-block;
	width: 26px; height: 26px;
	border: 2px solid color-mix(in srgb, var(--shine-text) 20%, transparent);
	border-top-color: var(--shine-accent);
	border-radius: 100px;
	animation: shineSpin .7s linear infinite;
	vertical-align: middle;
}
.shine-bk__spin--sm { width: 15px; height: 15px; }
@keyframes shineSpin { to { transform: rotate(360deg); } }

/* daterangepicker, in shine's clothes — booking step 1 and the home search
   share these, so the two calendars are the same calendar */
:is(.shine-bk, .shine-ds) .daterangepicker {
	background: none;
	border: 0;
	color: var(--shine-text);
	font-family: var(--shine-font-ui);
	padding: 0;
	width: 100%;
}
:is(.shine-bk, .shine-ds) .daterangepicker::before,
:is(.shine-bk, .shine-ds) .daterangepicker::after { display: none; }
:is(.shine-bk, .shine-ds) .daterangepicker .drp-buttons,
:is(.shine-bk, .shine-ds) .daterangepicker .drp-selected,
:is(.shine-bk, .shine-ds) .daterangepicker .ranges { display: none !important; }
:is(.shine-bk, .shine-ds) .daterangepicker .drp-calendar { padding: .4rem .6rem; }
:is(.shine-bk, .shine-ds) .daterangepicker .calendar-table {
	background: none;
	border: 0;
	padding: 0;
}
:is(.shine-bk, .shine-ds) .daterangepicker .calendar-table table { border-spacing: 0 4px; border-collapse: separate; }
:is(.shine-bk, .shine-ds) .daterangepicker th.month {
	font-family: var(--shine-font-display);
	font-size: .98rem;
	font-weight: 600;
	color: var(--shine-text);
}
:is(.shine-bk, .shine-ds) .daterangepicker thead tr:last-child th {
	font-size: .68rem;
	font-weight: 500;
	color: var(--shine-faint);
}
:is(.shine-bk, .shine-ds) .daterangepicker td,
:is(.shine-bk, .shine-ds) .daterangepicker th { min-width: 38px; height: 40px; line-height: 40px; }
:is(.shine-bk, .shine-ds) .daterangepicker td {
	border: 0;
	border-radius: 10px;
	background: none;
	color: var(--shine-text);
	font-size: .9rem;
	transition: background-color var(--shine-dur) var(--shine-ease);
}
:is(.shine-bk, .shine-ds) .daterangepicker td.available:hover {background: color-mix(in srgb, var(--shine-accent) 8%, transparent);color: var(--shine-text);}
:is(.shine-bk, .shine-ds) .daterangepicker td.off,
:is(.shine-bk, .shine-ds) .daterangepicker td.off.in-range,
:is(.shine-bk, .shine-ds) .daterangepicker td.off.start-date,
:is(.shine-bk, .shine-ds) .daterangepicker td.off.end-date { background: none !important; color: color-mix(in srgb, var(--shine-text) 22%, transparent) !important; }
:is(.shine-bk, .shine-ds) .daterangepicker td.in-range {
	background: color-mix(in srgb, var(--shine-accent) 16%, transparent);
	color: var(--shine-text);
	border-radius: 0;
}
:is(.shine-bk, .shine-ds) .daterangepicker td.start-date,
:is(.shine-bk, .shine-ds) .daterangepicker td.end-date,
:is(.shine-bk, .shine-ds) .daterangepicker td.active,
:is(.shine-bk, .shine-ds) .daterangepicker td.active:hover {
	background: var(--shine-accent);
	color: var(--shine-accent-text);
}
:is(.shine-bk, .shine-ds) .daterangepicker td.start-date { border-radius: 10px 0 0 10px; }
:is(.shine-bk, .shine-ds) .daterangepicker td.end-date   { border-radius: 0 10px 10px 0; }
:is(.shine-bk, .shine-ds) .daterangepicker td.start-date.end-date { border-radius: 10px; }
/* the engine paints these through isCustomDate: past, then sold */
:is(.shine-bk, .shine-ds) .daterangepicker td.disabled,
:is(.shine-bk, .shine-ds) .daterangepicker td.past-date {
	background: none !important;
	color: color-mix(in srgb, var(--shine-text) 22%, transparent) !important;
	text-decoration: none;
	cursor: not-allowed;
}
:is(.shine-bk, .shine-ds) .daterangepicker td.sold-date {
	color: color-mix(in srgb, var(--shine-danger) 70%, transparent) !important;
	text-decoration: line-through !important;
}
/* month arrows — the native ones and the injected .drp-nav stand-ins */
:is(.shine-bk, .shine-ds) .daterangepicker th.prev,
:is(.shine-bk, .shine-ds) .daterangepicker th.next,
:is(.shine-bk, .shine-ds) .daterangepicker th.drp-nav { cursor: pointer; }
:is(.shine-bk, .shine-ds) .daterangepicker th.prev span,
:is(.shine-bk, .shine-ds) .daterangepicker th.next span {
	/* border-color: 1px solid var(--shine-border); */
	padding: 3px;
}
:is(.shine-bk, .shine-ds) .daterangepicker th.prev:hover,
:is(.shine-bk, .shine-ds) .daterangepicker th.next:hover,
:is(.shine-bk, .shine-ds) .daterangepicker th.drp-nav:hover {background: color-mix(in srgb, var(--shine-accent) 8%, transparent);}
:is(.shine-bk, .shine-ds) .daterangepicker th.drp-nav span {
	display: inline-block;
	width: 8px; height: 8px;
	border-right: 2px solid var(--shine-text);
	border-bottom: 2px solid var(--shine-text);
}
:is(.shine-bk, .shine-ds) .daterangepicker th.drp-nav-prev span { transform: rotate(135deg); }
:is(.shine-bk, .shine-ds) .daterangepicker th.drp-nav-next span { transform: rotate(-45deg); }
:is(.shine-bk, .shine-ds) .daterangepicker th.drp-nav.is-disabled { opacity: .25; cursor: default; }
:is(.shine-bk, .shine-ds) .daterangepicker th.drp-nav.is-disabled:hover { background: none; }

/* ---- live summary ---- */
.shine-bk__sum {
	display: grid;
	grid-template-columns: minmax(0, 1.7fr) minmax(0, 1fr);
	gap: 1.2rem;
	align-items: start;
}
.shine-bk__sumcard {
	padding: 1.2rem 1.4rem;
	border: 1px solid var(--shine-border);
	border-radius: 18px;
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
	min-width: 0;
}
.shine-bk__sumhead { display: flex; align-items: flex-end; justify-content: space-between; gap: 1rem; flex-wrap: wrap; }
.shine-bk__days { margin: 0; font-size: .92rem; color: var(--shine-muted); }
.shine-bk__days .total_days_container {font-weight: 700;color: var(--shine-text);background: var(--shine-surface-alt);}
.shine-bk__total {
	margin: 0;
	font-family: var(--shine-font-display);
	font-size: clamp(1.2rem, 3vw, 1.5rem);
	font-weight: 700;
	letter-spacing: -.02em;
	color: #1dbb60;
	white-space: nowrap;
}
.shine-bk__flags { display: flex; flex-wrap: wrap; gap: .4rem; margin-top: .8rem; }
.shine-bk__flags:empty { display: none; }
/* the engine injects these as .highlight_opt with an inline svg */
.shine-bk__flags .highlight_opt {
	display: inline-flex;
	align-items: center;
	gap: .35rem;
	margin: 0 !important;
	padding: .25rem .75rem;
	border: 1px solid var(--shine-border);
	border-radius: 100px;
	font-size: .78rem;
	color: var(--shine-muted);
}
.shine-bk__flags .highlight_opt svg { color: var(--shine-accent); margin: 0 !important; }
.shine-bk__lines {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: .8rem;
	margin: 1rem 0 0;
	padding-top: 1rem;
	border-top: 1px solid var(--shine-border);
}
.shine-bk__lines div { min-width: 0; }
.shine-bk__lines dt {
	font-size: .9rem;
	font-weight: 400;
	color: var(--shine-faint);
}
.shine-bk__lines dd { margin: .2rem 0 0; font-weight: 600; font-size: .95rem; color: var(--shine-text); }
.shine-bk__errbox {
	margin-top: 1rem;
	padding: .75rem 1rem;
	border: 1px solid color-mix(in srgb, var(--shine-danger) 55%, transparent);
	border-radius: 12px;
	font-size: .86rem;
	color: var(--shine-danger);
}
.shine-bk__errbox p { margin: 0; }
.shine-bk__errbox p + p { margin-top: .25rem; }

.shine-bk__contact { display: grid; gap: .7rem; }
.shine-bk__contactrow { display: flex; flex-wrap: wrap; gap: .5rem; }
.shine-bk__contactrow .shine-btn { padding: .5rem 1rem; font-size: .85rem; }
.shine-bk__admin p { margin: 0 0 .8rem; font-size: .9rem; color: var(--shine-muted); }

/* ---- narrower screens ---- */
@media (max-width: 1100px) {
	.shine-bk__bar { grid-template-columns: minmax(0, 1fr); }
	.shine-bk__go { padding-top: 0; }
	.shine-bk__cta { width: 100%; justify-content: center; }
	.shine-bk__field--veh { max-width: none; }
}
@media (max-width: 820px) {
	.shine-bk__sum { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 640px) {
	.shine-bk__card {padding: 1rem;}
	.shine-bk__where { flex-wrap: wrap; }
	.shine-bk__where > .shine-bk__field { flex-basis: 100%; }
	.shine-bk__addret { margin-top: 0; height: 36px; }
	.shine-bk__when { grid-template-columns: minmax(0, 1fr); }
	.shine-bk__pop--time { width: 100%; }
	.shine-bk__lines { grid-template-columns: minmax(0, 1fr); gap: .5rem; }
	.shine-bk__lines div { display: flex; justify-content: space-between; }
	.shine-bk__lines dd { margin: 0; }
}

/* #datepicker-container keeps its id because the calendar engine writes to it,
   but the old stylesheet still boxes it (border, padding, float, fixed size) */
.shine-bk #datepicker-container {
	position: relative;
	float: none;
	width: auto;
	height: auto;
	padding: 0;
	border: 0;
	background: none;
	box-shadow: none;
}

/* The old stylesheet reaches into the picker through #cal-render and a few
   bare class rules (boxed arrow spans, a pink sold-out cell, green option
   pills). Those win on specificity, so shine answers at the same weight. */
/* Month arrows: one small square button per arrow, one chevron in it. The
   old sheet draws a Font Awesome glyph on span::before and floats the native
   arrow's span; shine takes over that same ::before and unfloats the span, so
   there is exactly one icon and it sits centred in its cell. The cell itself
   never paints — only the button does. */
.shine-bk #cal-render th.drp-nav,
.shine-bk #cal-render th.prev,
.shine-bk #cal-render th.next,
.shine-bk #cal-render th.drp-nav:hover,
.shine-bk #cal-render th.prev:hover,
.shine-bk #cal-render th.next:hover {
	text-align: center;
	vertical-align: middle;
	background: none !important;
}
.shine-bk #cal-render th.drp-nav span,
.shine-bk #cal-render th.prev span,
.shine-bk #cal-render th.next span {
	float: none !important;
	height: 36px !important;
	min-width: 0 !important;
	padding: 0 !important;
	margin: 0 auto !important;
	border: 1px solid color-mix(in srgb, var(--shine-text) 14%, transparent) !important;
	border-radius: 10px !important;
	background: none !important;
	box-shadow: none !important;
	transform: none !important;
	color: var(--shine-text) !important;
	font-family: inherit !important;
	transition: background-color var(--shine-dur) var(--shine-ease), border-color var(--shine-dur) var(--shine-ease);
}
/* the "extra" arrows exist for the stacked mobile layout; leave their
   visibility to the rules that already handle that, only their shape is ours */
.shine-bk #cal-render th.drp-nav:not(.drp-nav-extra) span,
.shine-bk #cal-render th.prev span,
.shine-bk #cal-render th.next span { display: inline-grid !important; place-items: center; }
.shine-bk #cal-render th.drp-nav span::before,
.shine-bk #cal-render th.prev span::before,
.shine-bk #cal-render th.next span::before {
	content: "" !important;
	width: 8px;
	height: 8px;
	border-right: 2px solid currentColor;
	border-bottom: 2px solid currentColor;
	font-size: 0 !important;
}
.shine-bk #cal-render th.drp-nav-prev span::before,
.shine-bk #cal-render th.prev span::before { transform: translateX(2px) rotate(135deg); }
.shine-bk #cal-render th.drp-nav-next span::before,
.shine-bk #cal-render th.next span::before { transform: translateX(-2px) rotate(-45deg); }
.shine-bk #cal-render th.drp-nav:not(.is-disabled):hover span,
.shine-bk #cal-render th.prev:hover span,
.shine-bk #cal-render th.next:hover span {
	background: color-mix(in srgb, var(--shine-text) 10%, transparent) !important;
	border-color: color-mix(in srgb, var(--shine-accent) 60%, transparent) !important;
}
.shine-bk #cal-render th.drp-nav.is-disabled span { opacity: .3; cursor: default; }
/* the old sheet pads only the right month down, so its title sat lower */
.shine-bk #cal-render .drp-calendar.right { padding-top: 0; }

.shine-bk #cal-render td.sold-date,
.shine-bk #cal-render td.sold-date:hover {
	background: #ff00001c !important;
	color: color-mix(in srgb, var(--shine-danger) 75%, transparent) !important;
	text-decoration: line-through !important;
}

.shine-bk__flags .highlight_opt {
	background: var(--shine-surface-alt);
	color: var(--shine-muted) !important;
}

/* ===========================  BOOKING — EXTRAS ON STEP 1  ================
   Protection plans and products, shown once branch, dates and a vehicle are
   set. Plans are cards side by side (one must be chosen when any exist);
   products are a list of toggles. */

.shine-bk__extras {
	display: grid;
	gap: 1.6rem;
	padding: 1.4rem 0rem;
	/* border: 1px solid var(--shine-border); */
	/* border-radius: 20px; */
	transition: opacity var(--shine-dur) var(--shine-ease);
}
.shine-bk__extras.is-loading { opacity: .55; pointer-events: none; }
.shine-bk__xblock { display: grid; gap: .9rem; min-width: 0; }
.shine-bk__xhead h2 { margin: 0; font-size: 1.15rem; }
.shine-bk__xhead p  { margin: .25rem 0 0; font-size: .86rem; color: var(--shine-muted); }

/* plans */
.shine-bk__plans {
	display: grid;
	/* auto-fill, not auto-fit: a lone plan keeps a card width instead of
	   stretching across the whole section */
	grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
	gap: .8rem;
}
.shine-bk__plan {
	display: grid;
	align-content: start;
	gap: .5rem;
	padding: 1rem 1.1rem;
	border: 1px solid var(--shine-border);
	border-radius: 16px;
	background: none;
	color: var(--shine-text);
	font-family: var(--shine-font-ui);
	text-align: left;
	cursor: pointer;
	transition: border-color var(--shine-dur) var(--shine-ease), background-color var(--shine-dur) var(--shine-ease);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-bk__plan:hover { border-color: color-mix(in srgb, var(--shine-accent) 60%, var(--shine-border)); }
.shine-bk__plan.is-on {
	border-color: var(--shine-accent);
	background: color-mix(in srgb, var(--shine-accent) 8%, transparent);
}
.shine-bk__planhead {display: flex;align-items: center;gap: .6rem;color: var(--shine-accent);}
.shine-bk__planname { font-size: 1rem; font-weight: 700; }
.shine-bk__radio {
	flex: 0 0 auto;
	width: 18px; height: 18px;
	border: 2px solid var(--shine-faint);
	border-radius: 100px;
	transition: border-color var(--shine-dur) var(--shine-ease), border-width var(--shine-dur) var(--shine-ease);
}
.shine-bk__plan.is-on .shine-bk__radio { border-color: var(--shine-accent); border-width: 5px; }
.shine-bk__planprice b {font-family: var(--shine-font-display);font-size: .8rem;font-weight: 700;}
.shine-bk__planprice span { font-size: .82rem; color: var(--shine-faint); }
.shine-bk__plantotal { font-size: .84rem; color: var(--shine-muted); }
.shine-bk__planexcess {
	justify-self: start;
	padding: .2rem .6rem;
	border: 1px solid var(--shine-border);
	border-radius: 100px;
	font-size: .74rem;
	color: var(--shine-muted);
}
.shine-bk__plandesc { font-size: .82rem; color: var(--shine-muted); line-height: 1.5; }
.shine-bk__planitems { list-style: none; margin: .2rem 0 0; padding: 0; display: grid; gap: .3rem; }
.shine-bk__planitems li {display: flex;align-items: flex-start;gap: .45rem;font-size: .82rem;/* color: var(--shine-muted); */}
.shine-bk__planitems svg { flex: 0 0 auto; margin-top: 2px; color: var(--shine-accent); }
.shine-bk__xblock.is-invalid .shine-bk__plan { border-color: color-mix(in srgb, var(--shine-danger) 55%, var(--shine-border)); }

/* products */
.shine-bk__prods { display: grid; gap: .5rem; }
.shine-bk__prod {
	display: flex;
	align-items: center;
	gap: .8rem;
	width: 100%;
	padding: .75rem .9rem;
	border: 1px solid var(--shine-border);
	border-radius: 14px;
	background: none;
	color: var(--shine-text);
	font-family: var(--shine-font-ui);
	text-align: left;
	cursor: pointer;
	transition: border-color var(--shine-dur) var(--shine-ease), background-color var(--shine-dur) var(--shine-ease);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-bk__prod:hover { border-color: color-mix(in srgb, var(--shine-accent) 60%, var(--shine-border)); }
.shine-bk__prod.is-on { border-color: var(--shine-accent); background: color-mix(in srgb, var(--shine-accent) 8%, transparent); }
.shine-bk__check {
	flex: 0 0 auto;
	display: flex; align-items: center; justify-content: center;
	width: 20px; height: 20px;
	border: 2px solid var(--shine-faint);
	border-radius: 6px;
	color: transparent;
	transition: background-color var(--shine-dur) var(--shine-ease), border-color var(--shine-dur) var(--shine-ease), color var(--shine-dur) var(--shine-ease);
}
.shine-bk__prod.is-on .shine-bk__check { background: var(--shine-accent); border-color: var(--shine-accent); color: var(--shine-accent-text); }
.shine-bk__prodmain { display: grid; gap: .1rem; flex: 1 1 auto; min-width: 0; }
.shine-bk__prodmain b { font-weight: 600; font-size: .92rem; }
.shine-bk__prodmain small { font-size: .78rem; color: var(--shine-faint); }
.shine-bk__prodtotal { flex: 0 0 auto; font-weight: 600; font-size: .92rem; white-space: nowrap; }

/* five summary lines now; let them wrap */
.shine-bk__lines { grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); }
@media (max-width: 640px) {
	.shine-bk__extras {}
	.shine-bk__lines { grid-template-columns: minmax(0, 1fr); }
}

/* ---- vehicle details: protection plans (read-only, chosen when booking) ----
   One wide card per plan: shield and name on the left, excess on the right,
   then the description and what the plan includes. */
.shine-prot__head { display: flex; align-items: baseline; gap: .8rem; }
.shine-prot__head h2 { font-size: 1.15rem; }
.shine-prot__sub { margin: .2rem 0 1.1rem; font-size: .9rem; color: var(--shine-muted); }

.shine-prot__list { display: grid; gap: 1rem; }
.shine-prot__card {
	border-bottom: 1px dashed var(--shine-border);
	background: var(--shine-surface);
	min-width: 0;
	padding-bottom: 25px;
}
/* the rule separates plans, so the last one — or a lone one — has none */
.shine-prot__card:last-child { border-bottom: 0; padding-bottom: 0; }
/* the whole header line is the handle */
.shine-prot__top {
	display: flex; align-items: center; gap: 1rem; flex-wrap: wrap;
	cursor: pointer;
	list-style: none;
}
.shine-prot__top::-webkit-details-marker { display: none; }
/* the body starts where the name does, not under the shield: 30px icon + the
   1rem gap of the header row */
.shine-prot__body {
	display: grid;
	gap: .85rem;
	padding-top: 1rem;
	padding-left: calc(30px + 1rem);
}
@media (max-width: 560px) { .shine-prot__body { padding-left: calc(30px + 1rem); } }
.shine-prot__chev {transition: transform var(--shine-dur) var(--shine-ease);color: var(--shine-accent);}
.shine-prot__card[open] .shine-prot__chev { transform: rotate(180deg); }
.shine-prot__shield { flex: 0 0 auto; color: var(--shine-text); line-height: 0; }
.shine-prot__id {min-width: 0;line-height: 20px;}
.shine-prot__name {display: block;font-weight: 600;color: var(--shine-text);margin: 0px;padding: 0pc;}
/* free or priced, the amount is the good news — it reads green either way */
.shine-prot__price { margin: 0; color: var(--shine-ok); }
.shine-prot__price b {font-weight: 600;}
.shine-prot__price span { color: var(--shine-faint); font-size: .92rem; }
.shine-prot__excess {
	margin-left: auto;
	display: inline-flex;
	align-items: center;
	gap: .5rem;
	white-space: nowrap;
}
.shine-prot__desc { margin: 0; color: var(--shine-muted); line-height: 1.6; max-width: 78ch; }
.shine-prot__inch { font-size: 1rem; font-weight: 600; color: var(--shine-text); }

/* what it includes: one column on a phone, two on a tablet, three at most */
.shine-prot__items {
	list-style: none; margin: 0; padding: 0;
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: .6rem 1.4rem;
}
@media (min-width: 560px) { .shine-prot__items { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (min-width: 900px) { .shine-prot__items { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
.shine-prot__items li {
	display: flex; align-items: center; gap: .6rem;
	min-width: 0;
	color: var(--shine-text);
}
.shine-prot__items svg {
	flex: 0 0 auto;
	width: 20px; height: 20px; padding: 4px;
	border-radius: 50%;
	background: var(--shine-ok);
	color: #ffffff;
}

/* ===========================  BOOKING — BELOW THE BAR  ===================
   Continue left the bar: it now sits under the price, after every choice it
   depends on. Choices on the left, the price and the button on the right. */

/* desktop only — below 1100px the bar stacks (see "narrower screens") */
@media (min-width: 1101px) {
	.shine-bk__bar { grid-template-columns: minmax(0, 1.15fr) minmax(0, 1.55fr); }
}

.shine-bk__lower {
	display: grid;
	grid-template-columns: minmax(0, 1fr) 380px;
	gap: 1.2rem;
	align-items: start;
}
.shine-bk__left  { display: grid; gap: 1.2rem; min-width: 0; }
.shine-bk__right {
	top: 96px;
	display: grid;
	gap: .9rem;
	min-width: 0;
}

.shine-bk__xhint {
	display: grid;
	place-items: center;
	min-height: 210px;
	margin: 0;
	padding: 1.4rem;
	border-radius: 20px;
	font-size: .9rem;
	text-align: center;
	color: var(--shine-muted);
}
.shine-bk__xhint[hidden] { display: none; }

/* a narrow column: the summary lines read top to bottom, label left, amount right */
.shine-bk__right .shine-bk__lines { grid-template-columns: minmax(0, 1fr); gap: .55rem; }
.shine-bk__right .shine-bk__lines div { display: flex; align-items: baseline; justify-content: space-between; gap: 1rem; }
.shine-bk__right .shine-bk__lines dd { margin: 0; }

.shine-bk__right .shine-bk__cta {
	width: 100%;
	height: 54px;
	justify-content: center;
	font-size: 1rem;
}

@media (max-width: 980px) {
	.shine-bk__lower { grid-template-columns: minmax(0, 1fr); }
	.shine-bk__right { position: static; }
	
	
	
}
@media (max-width:768px) {
.shine-bk-page {
    padding-left: 20px;
    padding-right: 20px;
}
}

/* ===============================  BOOKING — REVIEW  =============================
   booking_3.php: what is booked on the left, the total and the one way on at the
   right, the same two columns as step 1. The price table is the default template's
   arithmetic echoed as a plain table; shine only dresses it. */

.shine-rv { padding-bottom: clamp(3rem, 6vw, 5rem); padding-left: 0; padding-right: 0; }
.shine-rv > .shine-note { margin-bottom: 1rem; }
.shine-rv__grid {
	display: grid;
	grid-template-columns: minmax(0, 1fr) 380px;
	gap: 3em;
	align-items: start;
}
.shine-rv__main { display: grid; gap: 1.2rem; min-width: 0; }
.shine-rv__side {
	top: 96px;
	display: grid;
	gap: .9rem;
	min-width: 0;
	margin: 0;
}
.shine-rv__card {
	padding: 1.2rem 1.4rem;
	border: 1px solid var(--shine-border);
	border-radius: 20px;
	min-width: 0;
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
/* one panel, several parts: a hairline between them, no boxes in boxes —
   except the trip, which sits in its own framed box under the car */
.shine-rv__panel { display: grid; padding-top: 0; padding-bottom: 0; }
.shine-rv__part { min-width: 0; padding: 1.3rem 0; }
.shine-rv__part + .shine-rv__part {
}
.shine-rv__panel .shine-rv__car { padding-bottom: 1rem; }
.shine-rv__panel .shine-rv__trip {
	padding: 1.1rem 1.2rem;
	border: 1px solid var(--shine-border);
	border-radius: 16px;
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
/* the framed box already separates what follows it */
.shine-rv__panel .shine-rv__trip + .shine-rv__part { border-top: 0; }
.shine-rv__h {
	margin: 0 0 .9rem;
	font-family: var(--shine-font-display);
	font-size: 1.05rem;
	font-weight: 600;
	letter-spacing: -.01em;
	color: var(--shine-text);
}
.shine-rv__eyebrow, .shine-rv__label {
	margin: 0;
	color: var(--shine-faint);
}

/* ---- the car ---- */
.shine-rv__car { display: flex; align-items: center; gap: 1.1rem; }
.shine-rv__vimg {
	flex: 0 0 100px;
	aspect-ratio: 4 / 3;
	display: grid;
	place-items: center;
	overflow: hidden;
	border-radius: 14px;
	background: color-mix(in srgb, var(--shine-text) 6%, var(--shine-bg));
	color: var(--shine-faint);
}
.shine-rv__vimg img { width: 100%; height: 100%; object-fit: cover; display: block; }
.shine-rv__carmain { display: grid; gap: .45rem; min-width: 0; }
.shine-rv__carname {
	margin: 0;
	font-family: var(--shine-font-display);
	font-size: clamp(1.15rem, 2.4vw, 1.45rem);
	font-weight: 800;
	letter-spacing: -.02em;
}
.shine-rv__carname span { color: var(--shine-faint); font-weight: 400; }
.shine-rv__plate {
	justify-self: start;
	padding: .2rem .7rem;
	border: 1px solid var(--shine-border);
	border-radius: 8px;
	font-size: .8rem;
	color: var(--shine-muted);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}

/* ---- the trip: pickup, then return ---- */
.shine-rv__trip {display: grid;grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);gap: 1.4rem;padding: 1.3rem;}
.shine-rv__leg { position: relative; display: grid; gap: .35rem; padding-left: 1.4rem; min-width: 0; }
.shine-rv__dot {
	position: absolute;
	left: 0;
	top: .3rem;
	width: 10px;
	height: 10px;
	border-radius: 50%;
	border: 2px solid var(--shine-accent);
}
.shine-rv__leg--drop .shine-rv__dot { background: var(--shine-accent); }
.shine-rv__leg p { margin: 0; }
.shine-rv__legtitle {font-size: .8rem;color: var(--shine-faint);}
.shine-rv__legdate {font-weight: 700;color: var(--shine-text);}
.shine-rv__legline { display: flex; align-items: center; gap: .45rem; font-size: .9rem; color: var(--shine-muted); }
.shine-rv__legline svg { flex: 0 0 auto; color: var(--shine-accent); }

/* ---- price details ---- */
.shine-rv__tablewrap { overflow-x: auto; }
.shine-rv__table { width: 100%; min-width: 480px; border-collapse: collapse; font-size: .9rem; }
.shine-rv__table th,
.shine-rv__table td { padding: .6rem .5rem; color: var(--shine-muted); white-space: nowrap; }
.shine-rv__table td:first-child, .shine-rv__table th:first-child { padding-left: 0; white-space: normal; }
.shine-rv__table td:last-child,  .shine-rv__table th:last-child  { padding-right: 0; color: var(--shine-text); }
.shine-rv__table .text-end { text-align: right; }
.shine-rv__table .shine-rv__thead th {
	padding-top: 1.1rem;
	font-size: .8rem;
	font-weight: 400;
	color: var(--shine-faint);
	border-bottom: 1px solid var(--shine-border);
}
.shine-rv__table tr:first-child th { padding-top: 0; }
.shine-rv__table .shine-rv__sub td { font-size: .82rem; }
.shine-rv__table .shine-rv__sub td:first-child { color: var(--shine-faint); }
.shine-rv__table .shine-rv__grand td {
	padding-top: .9rem;
	border-top: 1px solid var(--shine-border);
	font-weight: 700;
	color: var(--shine-text);
}
.shine-rv__table .shine-rv__grand td:last-child {font-size: 1.02rem;}

/* ---- guest note ---- */
.shine-rv__guest {
	display: flex;
	gap: .7rem;
	margin: 0;
	padding: 1rem 1.2rem;
	border: 1px dashed color-mix(in srgb, var(--shine-text) 22%, transparent);
	border-radius: 16px;
	font-size: .84rem;
	line-height: 1.55;
	color: var(--shine-muted);
}
.shine-rv__guest svg { flex: 0 0 auto; margin-top: 1px; color: var(--shine-accent); }
.shine-rv__guest b { color: var(--shine-text); font-weight: 600; }

/* ---- summary ---- */
.shine-rv__total {
	margin: .35rem 0 0;
	font-family: var(--shine-font-display);
	font-size: clamp(1.7rem, 4vw, 1.1rem);
	font-weight: 700;
	letter-spacing: -.02em;
	line-height: 1.1;
}
.shine-rv__days { margin: .25rem 0 0; font-size: .9rem; color: var(--shine-muted); }
/* the total left, how many days it covers right, on one line */
.shine-rv__totrow {display: flex;align-items: baseline;justify-content: space-between;gap: .4rem 1rem;flex-wrap: wrap;margin-bottom: 25px;}
.shine-rv__totrow .shine-rv__days { margin: 0; text-align: right; white-space: nowrap; }
.shine-rv__days b {color: var(--shine-text);}
.shine-rv__flags { display: flex; flex-wrap: wrap; gap: .4rem; margin-top: .8rem; }
.shine-rv__flag {
	display: inline-flex;
	align-items: center;
	gap: .35rem;
	padding: .25rem .75rem;
	border: 1px solid var(--shine-border);
	border-radius: 100px;
	font-size: .78rem;
	color: var(--shine-muted);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-rv__flag svg { color: var(--shine-accent); }
.shine-rv__lines {
	display: grid;
	gap: .55rem;
	margin: 1rem 0 0;
	padding-top: 1rem;
	border-top: 1px solid var(--shine-border);
}
.shine-rv__lines div { display: flex; align-items: baseline; justify-content: space-between; gap: 1rem; }
.shine-rv__lines dt {
	font-weight: 400;
	color: var(--shine-faint);
}
.shine-rv__lines dd { margin: 0; font-weight: 600; color: var(--shine-text); white-space: nowrap; }
.shine-rv__disc dt { cursor: help; }
.shine-rv__disc dd {}

/* ---- contact ---- */
.shine-rv__contact { display: grid; gap: .9rem; }
.shine-rv__contact .shine-rv__h { margin: 0; }
.shine-rv__err { margin: 0; font-size: .8rem; color: var(--shine-danger); }
.shine-rv__err:empty { display: none; }
.shine-rv__agree {
	position: relative;
	display: flex;
	align-items: flex-start;
	gap: .65rem;
	font-size: .8rem;
	line-height: 1.45;
	color: var(--shine-muted);
	cursor: pointer;
}
.shine-rv__agree > span:last-child { padding-top: 2px; }
/* the old sheet makes checkboxes position:relative, which put the hidden input
   in the flow and pushed the drawn box right — it has to sit on top of the box */
.shine-rv__agree input[type="checkbox"] {
	position: absolute !important;
	top: 0;
	left: 0;
	opacity: 0;
	width: 22px;
	height: 22px;
	margin: 0;
	cursor: pointer;
}
.shine-rv__box {
	flex: 0 0 22px;
	height: 22px;
	display: grid;
	place-items: center;
	border: 1px solid color-mix(in srgb, var(--shine-text) 28%, transparent);
	border-radius: 7px;
	color: transparent;
	transition: background-color var(--shine-dur) var(--shine-ease), border-color var(--shine-dur) var(--shine-ease), color var(--shine-dur) var(--shine-ease);
}
.shine-rv__agree input:checked + .shine-rv__box { background: var(--shine-accent); border-color: var(--shine-accent); color: var(--shine-bg); }
.shine-rv__agree input:focus-visible + .shine-rv__box { outline: 2px solid var(--shine-accent); outline-offset: 2px; }
.was-validated .shine-rv__agree input:invalid + .shine-rv__box { border-color: var(--shine-danger); }

/* ---- pay ---- */
.shine-rv__pay { display: grid; gap: .9rem; }
.shine-rv__seg {
	display: grid;
	grid-template-columns: 1fr 1fr;
	padding: 4px;
	border: 1px solid var(--shine-border);
	font-size: .8rem;
	border-radius: 14px;
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-rv__segbtn {
	height: 42px;
	border: 0;
	border-radius: 10px;
	background: none;
	font: inherit;
	color: var(--shine-muted);
	cursor: pointer;
	transition: background-color var(--shine-dur) var(--shine-ease), color var(--shine-dur) var(--shine-ease);
}
.shine-rv__segbtn:hover { color: var(--shine-text); }
.shine-rv__segbtn.active { background: color-mix(in srgb, var(--shine-accent) 16%, transparent); color: var(--shine-accent); }
.shine-rv__providers { display: grid; gap: .55rem; }
:is(.shine-rv, .shine-inv) .payment-methods-list {display: grid;grid-template-columns: repeat(auto-fill, minmax(96px, 1fr));gap: .5rem;margin-bottom: 13px;}
:is(.shine-rv, .shine-inv) .payment-option {
	display: grid;
	place-items: center;
	height: 100%;
	min-height: 56px;
	padding: .7rem;
	border: 1px solid var(--shine-border);
	border-radius: 12px;
	font-size: .85rem;
	color: var(--shine-muted);
	cursor: pointer;
	transition: border-color var(--shine-dur) var(--shine-ease), background-color var(--shine-dur) var(--shine-ease);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
:is(.shine-rv, .shine-inv) .payment-option:hover { border-color: color-mix(in srgb, var(--shine-text) 30%, transparent); }
:is(.shine-rv, .shine-inv) .payment-option.active {
	border-color: var(--shine-accent);
	background: color-mix(in srgb, var(--shine-accent) 9%, transparent);
	color: var(--shine-text);
}
/* (shared with the invoice pay page, .shine-inv) */
/* provider logos are drawn for white backgrounds; on shine's dark cards they
   read as one white mark each, brighter on the chosen one */
:is(.shine-rv, .shine-inv) .payment-logo {
	max-height: 22px;
	max-width: 70px;
	/* filter: brightness(0) invert(1); */
	transition: opacity var(--shine-dur) var(--shine-ease);
}
:is(.shine-rv, .shine-inv) .payment-option:hover .payment-logo { opacity: .85; }
:is(.shine-rv, .shine-inv) .payment-option.active .payment-logo { opacity: 1; }
.shine-rv__wait { display: flex; align-items: center; justify-content: center; gap: .5rem; font-size: .82rem; color: var(--shine-muted); }
.shine-rv__cta {
	width: 100%;
	height: 54px;
	justify-content: center;
	gap: .4rem;
}
.shine-rv__cta:disabled { opacity: .55; cursor: not-allowed; }

@media (max-width: 980px) {
	.shine-rv__grid { grid-template-columns: minmax(0, 1fr); }
	.shine-rv__side { position: static; }
}
@media (max-width: 640px) {
	.shine-rv__card { padding: 1rem; }
	.shine-rv__panel { padding-top: 0; padding-bottom: 0; }
	.shine-rv__part { padding: 1rem 0; }
	.shine-rv__panel .shine-rv__trip { padding: 1rem; }
	.shine-rv__car { align-items: flex-start; }
	.shine-rv__vimg { flex-basis: 108px; }
	.shine-rv__trip { grid-template-columns: minmax(0, 1fr); gap: 1.1rem; }
	
	
	.shine-rv {
    padding-left: 20px;
    padding-right:20px;
}

.shine-rv__main {

    margin-top: -15px;
    z-index: 5;
}


}
/* ===============================  BOOKING — CONFIRMATION  ======================
   booking_4.php (GET /client/booking/confirm/@hash). Only the status, centred:
   the details are one click away behind "View booking". The tick is a CSS
   animation, not SMIL, so it also plays when a waiting payment turns into a
   success on the page — a CSS animation starts when its element is shown. */

.shine-cf {/* padding-top: clamp(1.5rem, 4vw, 3rem); */padding-bottom: clamp(3rem, 6vw, 5rem);}
.shine-cf .d-none { display: none !important; }
.shine-cf__card {
	max-width: 100%;
	margin: 0 auto;
	padding: clamp(1.8rem, 4vw, 2.6rem) clamp(1.2rem, 4vw, 2.4rem);
	border-radius: 24px;
	text-align: center;
	z-index: 5;
	position: relative;
}
.shine-cf__card > div { display: grid; justify-items: center; }
.shine-cf__icon {
	width: 84px;
	height: 84px;
	display: grid;
	place-items: center;
	margin-bottom: 1.3rem;
	border-radius: 50%;
}
.shine-cf__icon--ok {
	color: var(--shine-accent);
	background: color-mix(in srgb, var(--shine-accent) 14%, transparent);
	border: 1px solid color-mix(in srgb, var(--shine-accent) 45%, transparent);
	animation: shine-cf-pop .5s var(--shine-ease) both;
}
.shine-cf__icon--ok path {
	stroke-dasharray: 24;
	stroke-dashoffset: 24;
	animation: shine-cf-draw .45s var(--shine-ease) .3s forwards;
}
/* a ring that leaves the circle once, as the tick lands */
.shine-cf__icon--ok { position: relative; }
.shine-cf__icon--ok::after {
	content: "";
	position: absolute;
	inset: -1px;
	border-radius: 50%;
	border: 1px solid var(--shine-accent);
	opacity: 0;
}
@keyframes shine-cf-pop  { from { opacity: 0; transform: scale(.6); } to { opacity: 1; transform: none; } }
@keyframes shine-cf-draw { to { stroke-dashoffset: 0; } }
@keyframes shine-cf-ring { from { opacity: .7; transform: scale(1); } to { opacity: 0; transform: scale(1.6); } }

.shine-cf__icon--wait { border: 1px solid var(--shine-border); }
/* payment failed: the same circle in red, no animation */
.shine-cf__icon--fail { color: var(--shine-danger); background: color-mix(in srgb, var(--shine-danger) 12%, transparent); border: 1px solid color-mix(in srgb, var(--shine-danger) 45%, transparent); }
.shine-cf__text--danger { color: color-mix(in srgb, var(--shine-danger) 85%, var(--shine-text)); }
.shine-cf__spin {
	width: 34px;
	height: 34px;
	border-radius: 50%;
	border: 2px solid color-mix(in srgb, var(--shine-accent) 25%, transparent);
	border-top-color: var(--shine-accent);
	animation: shine-cf-spin .8s linear infinite;
}
@keyframes shine-cf-spin { to { transform: rotate(360deg); } }

.shine-cf__title {
	margin: 0 0 .5rem;
	font-family: var(--shine-font-display);
	font-size: clamp(1.4rem, 3vw, 1.8rem);
	font-weight: 600;
	letter-spacing: -.02em;
	color: var(--shine-text);
}
.shine-cf__text {max-width: 60ch;margin: 0 0 1.6rem;font-size: .95rem;line-height: 1.6;color: var(--shine-muted);}
.shine-cf__cta { height: 50px; padding: 0 1.8rem; gap: .4rem; }
.shine-cf__cta--ghost {
	background: none;
	border: 1px solid var(--shine-border);
	color: var(--shine-text);
}
.shine-cf__cta--ghost:hover { border-color: var(--shine-accent); color: var(--shine-accent); }

@media (prefers-reduced-motion: reduce) {
	.shine-cf__icon--ok, .shine-cf__icon--ok::after { animation: none; }
	.shine-cf__icon--ok path { animation: none; stroke-dashoffset: 0; }
	.shine-cf__spin { animation-duration: 2.4s; }
}
@media (max-width: 640px) {
	.shine-cf__cta { width: 100%; justify-content: center; }
	
	.shine-cf__card {

    margin: 10px;
    margin-top: 25px;
}

.shine-bk__xhint {

    min-height: 20px;

}

.shine-bk__pop--loc {
    width: max(100%, 100%);
}
}

/* ===============================  TERMS & PRIVACY  ==============================
   views/_legal.php, shared by terms.php and privacy.php. The text is the
   tenant's own HTML from the editor, so .shine-legal__body styles plain
   elements (h1–h4, p, lists, links, tables) rather than classes. */

.shine-legal { padding-top: clamp(1.5rem, 4vw, 3rem); padding-bottom: clamp(3rem, 6vw, 5rem); }
.shine-legal__grid {
	display: grid;
	grid-template-columns: minmax(0, 1fr) 300px;
	gap: 1.2rem;
	align-items: start;
}
.shine-legal__doc {
	min-width: 0;
	padding: clamp(1.2rem, 4vw, 2.6rem);
	border: 1px solid var(--shine-border);
	border-radius: 20px;
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}

/* ---- auto-translation notice ---- */
.shine-legal__tr {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: .6rem 1rem;
	flex-wrap: wrap;
	margin-bottom: 1.6rem;
	padding: .75rem 1rem;
	border-radius: 12px;
	background: var(--shine-surface-alt);
}
.shine-legal__tr p { display: flex; align-items: center; gap: .5rem; margin: 0; font-size: .85rem; color: var(--shine-muted); }
.shine-legal__tr svg { color: var(--shine-accent); flex: 0 0 auto; }
.shine-legal__tr a { font-size: .85rem; font-weight: 600; color: var(--shine-accent); }
.shine-legal__tr a:hover { color: var(--shine-text); }

/* ---- the tenant's text ---- */
.shine-legal__body {
	max-width: 72ch;
	font-size: .98rem;
	line-height: 1.75;
	color: var(--shine-muted);
	overflow-wrap: anywhere;
}
.shine-legal__body > :first-child { margin-top: 0; }
.shine-legal__body h1, .shine-legal__body h2, .shine-legal__body h3, .shine-legal__body h4 {
	margin: 2rem 0 .7rem;
	font-family: var(--shine-font-display);
	font-weight: 600;
	letter-spacing: -.01em;
	line-height: 1.3;
	color: var(--shine-text);
}
.shine-legal__body h1 { font-size: 1.6rem; }
.shine-legal__body h2 { font-size: 1.35rem; }
.shine-legal__body h3 { font-size: 1.12rem; }
.shine-legal__body h4 { font-size: 1rem; }
.shine-legal__body p { margin: 0 0 1rem; }
.shine-legal__body strong, .shine-legal__body b { color: var(--shine-text); font-weight: 600; }
.shine-legal__body a { color: var(--shine-accent); text-decoration: underline; text-underline-offset: 3px; }
.shine-legal__body a:hover { color: var(--shine-text); }
.shine-legal__body ul, .shine-legal__body ol { margin: 0 0 1rem; padding-left: 1.3rem; }
.shine-legal__body li { margin-bottom: .4rem; }
.shine-legal__body li::marker { color: var(--shine-accent); }
.shine-legal__body hr { margin: 2rem 0; border: 0; border-top: 1px solid var(--shine-border); opacity: 1; }
.shine-legal__body blockquote {
	margin: 1.2rem 0;
	padding: .2rem 0 .2rem 1rem;
	border-left: 2px solid var(--shine-accent);
	color: var(--shine-text);
}
.shine-legal__body table { width: 100%; margin: 0 0 1.2rem; border-collapse: collapse; font-size: .9rem; }
.shine-legal__body th, .shine-legal__body td { padding: .55rem .6rem; border-bottom: 1px solid var(--shine-border); text-align: left; vertical-align: top; }
.shine-legal__body th { color: var(--shine-text); font-weight: 600; }
/* editors paste inline colours meant for a white page; keep the text readable */
.shine-legal__body [style*="color"] { color: inherit !important; }
.shine-legal__body [style*="background"] { background: none !important; }

/* ---- Google Translate picker, dark ---- */
.shine-legal__gt { margin-top: 1.6rem; }
.shine-legal__gt .goog-te-gadget { font-family: inherit; font-size: .8rem; color: var(--shine-faint); }
.shine-legal__gt .goog-te-gadget select {
	appearance: none;
	margin: 0 0 .4rem;
	padding: .5rem 2rem .5rem .8rem;
	border: 1px solid var(--shine-border);
	border-radius: 10px;
	background: var(--shine-bg) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath fill='%23999' d='M1 0l4 4 4-4 1 1-5 5-5-5z'/%3E%3C/svg%3E") no-repeat right 10px center;
	font-family: inherit;
	font-size: .85rem;
	color: var(--shine-text);
	cursor: pointer;
	outline: none;
	transition: border-color var(--shine-dur) var(--shine-ease);
}
.shine-legal__gt .goog-te-gadget select:hover,
.shine-legal__gt .goog-te-gadget select:focus { border-color: var(--shine-accent); }

/* ---- side: the two documents and the date ---- */
.shine-legal__side { position: sticky; top: 96px; display: grid; gap: .9rem; min-width: 0; }
.shine-legal__nav {
	display: grid;
	padding: .4rem;
	border: 1px solid var(--shine-border);
	border-radius: 18px;
	background: color-mix(in srgb, var(--shine-text) 4%, var(--shine-bg));
}
.shine-legal__link {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: .8rem;
	padding: .8rem 1rem;
	border-radius: 12px;
	font-size: .92rem;
	font-weight: 600;
	color: var(--shine-muted);
	transition: background-color var(--shine-dur) var(--shine-ease), color var(--shine-dur) var(--shine-ease);
}
.shine-legal__link svg { color: var(--shine-faint); transition: color var(--shine-dur) var(--shine-ease); }
.shine-legal__link:hover { color: var(--shine-text); background: color-mix(in srgb, var(--shine-text) 6%, transparent); }
.shine-legal__link.is-on { color: var(--shine-accent); background: color-mix(in srgb, var(--shine-accent) 12%, transparent); }
.shine-legal__link.is-on svg { color: var(--shine-accent); }
.shine-legal__updated {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	gap: .3rem .5rem;
	margin: 0;
	padding: 0 .4rem;
	font-size: .82rem;
	color: var(--shine-faint);
}
.shine-legal__updated span { width: 100%; font-size: .7rem; letter-spacing: .1em; text-transform: uppercase; }
.shine-legal__updated b { color: var(--shine-text); font-weight: 600; }

@media (max-width: 980px) {
	.shine-legal__grid { grid-template-columns: minmax(0, 1fr); }
	/* on a phone the switch between the two documents comes first */
	.shine-legal__side { position: static; order: -1; }
	.shine-legal__nav { grid-template-columns: 1fr 1fr; }
	.shine-legal__link { justify-content: center; text-align: center; }
	.shine-legal__link svg { display: none; }
}

/* ---- terms / privacy on the user's own markup (bootstrap row + cols) ----
   terms.php and privacy.php keep their original structure and translation
   code; these rules only dress the classes they now carry. */
.shine-legal .row { row-gap: 1.2rem; }
.shine-legal__tr + .border-bottom { display: none; }
.shine-legal__tr #translated_label p { font-weight: 400; }
.shine-legal__meta {
	margin-top: .9rem;
	padding: 0 .4rem;
	font-size: .82rem;
	color: var(--shine-faint);
}
.shine-legal__meta b { color: var(--shine-text); font-weight: 600; }
.shine-legal__meta svg { color: var(--shine-faint); }
.shine-legal__list {
	top: 96px;
	gap: .15rem;
	padding: .4rem;
	border: 1px solid var(--shine-border);
	border-radius: 18px;
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-legal__list .nav-link {
	padding: .8rem 1rem;
	border-radius: 12px;
	font-size: .92rem;
	color: var(--shine-muted);
	transition: background-color var(--shine-dur) var(--shine-ease), color var(--shine-dur) var(--shine-ease);
}
.shine-legal__list .nav-link:hover {color: var(--shine-text);background: var(--shine-surface-alt);}
.shine-legal__list .nav-item.active .nav-link { color: var(--shine-accent); background: color-mix(in srgb, var(--shine-accent) 12%, transparent); }
/* Google's picker: the page's own <style> paints it white; this wins on specificity */
.shine-legal #google_translate_element { margin-top: 1.6rem; }
.shine-legal .goog-te-gadget { font-size: .8rem; color: var(--shine-faint); }
.shine-legal .goog-te-gadget select {
	margin: 0 0 .4rem;
	border: 1px solid var(--shine-border);
	border-radius: 10px;
	background-color: var(--shine-bg);
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath fill='%23999' d='M1 0l4 4 4-4 1 1-5 5-5-5z'/%3E%3C/svg%3E");
	color: var(--shine-text);
	box-shadow: none;
}
.shine-legal .goog-te-gadget select:hover,
.shine-legal .goog-te-gadget select:focus { border-color: var(--shine-accent); box-shadow: none; }
@media (max-width: 767.98px) {
	.shine-legal__list { position: static; }
}

/* ===============================  CLIENT ACCOUNT  ==============================
   views/client_account/*. The page's own container is the grid: the shared
   partial's <aside> takes the left column (spanning every row), and whatever
   the page outputs after it — notes, its form, its modals — auto-places into
   the right column. So the four pages keep their own markup and no page needs
   extra wrapper divs. */

.shine-acct { padding-top: clamp(1.5rem, 4vw, 3rem); padding-bottom: clamp(3rem, 6vw, 5rem); }
.shine-acct__wrap {
	display: grid;
	grid-template-columns: 290px minmax(0, 1fr);
	column-gap: 1.4rem;
	align-items: start;
}
.shine-acct__wrap > * { grid-column: 2; min-width: 0; }
.shine-acct__wrap > :not(.shine-acct__side) + :not(.shine-acct__side) {}
.shine-acct__wrap > .shine-acct__side {
	grid-column: 1;
	grid-row: 1 / span 40;
	position: sticky;
	top: 96px;
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}

/* ---- side: who you are, and where you are ---- */
.shine-acct__side { display: grid; gap: .9rem; }
.shine-acct__profile {
	display: flex;
	align-items: center;
	gap: 1rem;
	padding: 1.1rem;
	border: 1px solid var(--shine-border);
	border-radius: 18px;
	background: color-mix(in srgb, var(--shine-text) 4%, var(--shine-bg));
}
.shine-acct__avatar {
	position: relative;
	flex: 0 0 74px;
	width: 74px;
	height: 74px;
	display: grid;
	place-items: center;
	padding: 0;
	border: 1px solid var(--shine-border);
	border-radius: 16px;
	background: var(--shine-bg);
	color: var(--shine-faint);
	cursor: pointer;
	transition: border-color var(--shine-dur) var(--shine-ease);
}
.shine-acct__avatar img { width: 100%; height: 100%; object-fit: cover; border-radius: 15px; display: block; }
.shine-acct__avatar:hover { border-color: var(--shine-accent); }
.shine-acct__cam {
	position: absolute;
	right: -6px;
	bottom: -6px;
	width: 24px;
	height: 24px;
	display: grid;
	place-items: center;
	border-radius: 50%;
	background: var(--shine-accent);
	color: var(--shine-bg);
	box-shadow: 0 0 0 3px var(--shine-bg);
}
.shine-acct__who { min-width: 0; display: grid; gap: .2rem; justify-items: start; }
.shine-acct__who p { margin: 0; }
.shine-acct__name {
	font-family: var(--shine-font-display);
	font-weight: 600;
	font-size: 1.02rem;
	letter-spacing: -.01em;
	color: var(--shine-text);
	overflow-wrap: anywhere;
}
.shine-acct__place { font-size: .82rem; color: var(--shine-muted); }
.shine-acct__status {
	margin-top: .25rem;
	padding: .12rem .6rem;
	border: 1px solid var(--shine-border);
	border-radius: 100px;
	font-size: .72rem;
	color: var(--shine-muted);
}
.shine-acct__status.is-ok { border-color: color-mix(in srgb, #1dbb60 45%, transparent); color: #1dbb60; }
.shine-acct__status.is-off { border-color: color-mix(in srgb, var(--shine-danger) 50%, transparent); color: var(--shine-danger); }

.shine-acct__nav {
	display: grid;
	gap: .15rem;
	padding: .4rem;
	border: 1px solid var(--shine-border);
	border-radius: 18px;
	background: color-mix(in srgb, var(--shine-text) 4%, var(--shine-bg));
}
.shine-acct__link {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: .8rem;
	padding: .8rem 1rem;
	border-radius: 12px;
	font-size: .92rem;
	color: var(--shine-muted);
	transition: background-color var(--shine-dur) var(--shine-ease), color var(--shine-dur) var(--shine-ease);
}
.shine-acct__link svg { color: var(--shine-faint); transition: color var(--shine-dur) var(--shine-ease); }
.shine-acct__link:hover {color: var(--shine-text);background: var(--shine-surface-alt);}
.shine-acct__link.is-on { color: var(--shine-accent); background: color-mix(in srgb, var(--shine-accent) 12%, transparent); }
.shine-acct__link.is-on svg { color: var(--shine-accent); }

/* ---- main: one card per page ---- */
.shine-acct__card {
	padding: clamp(1.2rem, 3vw, 2rem);
	border: 1px solid var(--shine-border);
	border-radius: 20px;
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-acct__head { padding-bottom: 1rem; border-bottom: 1px solid var(--shine-border); }
.shine-acct__title {
	margin: 0;
	font-family: var(--shine-font-display);
	font-size: 1.25rem;
	font-weight: 600;
	letter-spacing: -.01em;
	color: var(--shine-text);
}
.shine-acct__note { margin: 0; }
body .shine-input.shine-acct__textarea { min-height: 96px; resize: vertical; line-height: 1.5; }
.shine-acct__card input[readonly] {cursor: default;color: black;}
.shine-acct__card input[readonly]:focus { border-color: var(--shine-border); box-shadow: none; }
/* the dropdown sits among boxed inputs here, so it gets their box */
.shine-acct__sel > span {}
.shine-acct__sel .shine-drop__trigger,
.shine-acct__sel > select {
	min-height: 50px;
	padding: .8rem 1rem;
	border: 1px solid var(--shine-border);
	border-radius: 12px;
	background: var(--shine-bg);
}
.was-validated .shine-acct__sel select:invalid + .shine-drop .shine-drop__trigger,
.was-validated .shine-acct__sel .shine-drop:has(+ select:invalid) .shine-drop__trigger { border-color: var(--shine-danger); }
.shine-acct__actions { display: flex; justify-content: flex-end; padding-top: .4rem; }
.shine-acct__save { min-width: 180px; height: 50px; justify-content: center; }
.shine-acct__save.unsaved_btn { box-shadow: none; }

/* ---- avatar + error modals ---- */
.shine-acct__modalbody { padding: 18px 22px 22px; }
.shine-acct__drop {
	display: grid;
	justify-items: center;
	gap: .6rem;
	padding: 2.4rem 1rem;
	border: 1px solid var(--shine-border);
	border-radius: 16px;
	color: var(--shine-muted);
	cursor: pointer;
	transition: border-color var(--shine-dur) var(--shine-ease), color var(--shine-dur) var(--shine-ease);
	text-align: center;
}
.shine-acct__drop svg { color: var(--shine-accent); }
.shine-acct__drop:hover { border-color: var(--shine-accent); color: var(--shine-text); }
.shine-acct__crop {overflow: hidden;}
.shine-acct__modaltext { margin: 0 0 1.2rem; color: var(--shine-muted); font-size: .92rem; }
.shine-acct__modalactions { display: flex; justify-content: center; gap: .6rem; margin-top: 1rem; }
.shine-acct__ghost { background: none; border: 1px solid var(--shine-border); color: var(--shine-text); }
.shine-acct__ghost:hover { border-color: var(--shine-accent); color: var(--shine-accent); }

@media (max-width: 900px) {
	.shine-acct__wrap { grid-template-columns: minmax(0, 1fr); }
	.shine-acct__wrap > *,
	.shine-acct__wrap > .shine-acct__side { grid-column: 1; grid-row: auto; position: static; }
	.shine-acct__wrap > .shine-acct__side + * { margin-top: 1.2rem; }
	/* on a phone the four pages become one scrolling row of tabs */
	.shine-acct__nav { grid-auto-flow: column; grid-auto-columns: max-content; overflow-x: auto; scrollbar-width: none; }
	.shine-acct__nav::-webkit-scrollbar { display: none; }
	.shine-acct__link svg { display: none; }
}
@media (max-width: 640px) {
	.shine-acct__actions { justify-content: stretch; }
	.shine-acct__save { width: 100%; }
}

/* profile + links are one card: the side is the box, a hairline splits it */
.shine-acct__side {
	gap: 0;
	border: 1px solid var(--shine-border);
	border-radius: 18px;
	overflow: hidden;
}
.shine-acct__side .shine-acct__profile,
.shine-acct__side .shine-acct__nav {border: 0;border-radius: 0;background: none;}
.shine-acct__side .shine-acct__nav {padding: .5rem;}

/* ---- business: account type switch + the fields it reveals ---- */
.shine-acct__toggle {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
	background: var(--shine-bg);
}
.shine-acct__togglecopy p { margin: 0; }
.shine-acct__togglelabel { font-weight: 600; color: var(--shine-text); }
.shine-acct__togglesub { font-size: .85rem; color: var(--shine-muted); }
/* default's .switch (style.css) is a light pill; same element, shine's look.
   The page script still only toggles .active on it. */
.shine-acct .switch {
	flex: 0 0 auto;
	width: 50px;
	height: 28px;
	border-radius: 100px;
	background-color: color-mix(in srgb, var(--shine-accent) 12%, transparent);
	transition: background-color var(--shine-dur) var(--shine-ease);
}
.shine-acct .switch::before {
	top: 4px;
	left: 4px;
	width: 20px;
	height: 20px;
	background-color: var(--shine-accent);
	box-shadow: none;
	transition: transform var(--shine-dur) var(--shine-ease), background-color var(--shine-dur) var(--shine-ease);
}
.shine-acct .switch.active { background-color: var(--shine-accent); }
.shine-acct .switch.active::before { transform: translateX(22px); background-color: var(--shine-bg); }
.shine-acct__area { display: grid; gap: 1.15rem; }

/* ---- documents: Dropzone on shine ----
   dropzone.min.css is drawn for a white page; these only repaint it. The
   script still switches .show_controller <-> .show_uploader by image count. */
.shine-acct__label {
	margin: 0;
	color: var(--shine-faint);
}
/* empty: one dashed drop area */
.shine-acct .dropzone .dz-message {
	margin: 0;
	padding: 2.2rem 1rem;
	border: 1px solid var(--shine-border);
	border-radius: 16px;
	color: var(--shine-muted);
	transition: border-color var(--shine-dur) var(--shine-ease), color var(--shine-dur) var(--shine-ease);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-acct .dropzone .dz-message:hover,
.shine-acct .dropzone.dz-drag-hover .dz-message { border-color: var(--shine-accent); color: var(--shine-text); }
.shine-acct .dropzone .dz-message h2 { margin: 0 0 .4rem; color: var(--shine-accent); }
/* with images: a framed grid of tiles and an "add more" link */
.shine-acct .show_uploader {
	margin: 0;
	padding: 12px;
	border: 1px solid var(--shine-border);
	border-radius: 16px;
	background: var(--shine-bg);
}
.shine-acct .show_uploader .dz-messagedynamic { padding-top: 12px; color: var(--shine-accent); font-weight: 600; font-size: .9rem; }
.shine-acct .dz-preview .dz-image,
.shine-acct .dropzone .dz-preview.dz-file-preview .dz-image {
	border-radius: 12px;
	background: color-mix(in srgb, var(--shine-text) 6%, var(--shine-bg));
}
.shine-acct .dropzone .dz-preview .dz-image img { border-radius: 12px; }
.shine-acct .dragger,
.shine-acct a.dz-remove {
	border-radius: 8px;
	background: color-mix(in srgb, var(--shine-bg) 80%, transparent);
	color: var(--shine-text);
	backdrop-filter: blur(4px);
}
.shine-acct a.dz-remove:hover { color: var(--shine-danger); }
.shine-acct .dz-preview.initial-first-item .dz-image::after {
	background-color: var(--shine-accent);
	color: var(--shine-bg);
	font-weight: 700;
	border-radius: 7px;
}
.shine-acct .sortable-ghost { opacity: .4; }

/* ---- settings: password toggles, rules, confirm modal ---- */
/* the page's eye icons carry default's mt-3; centre them in shine's toggle,
   and beat style.css's absolute .toggle-password / span.toggle_saver offsets */
.shine-acct .shine-control span.toggle-password.shine-control__toggle { top: 50%; right: 12px; }
.shine-acct .shine-control__toggle svg { margin: 0 !important; display: block; }
.shine-acct .shine-control__toggle:hover { color: var(--shine-text); }
.shine-acct .shine-control:has(.shine-control__toggle) .shine-input { padding-right: 2.8rem; }
.shine-acct .shine-control__icon svg { display: block; }
.shine-acct #passhelp li.text-success { color: #1dbb60 !important; }
.shine-acct #passhelp .icon-container svg { width: 15px; height: 15px; }
.shine-acct__fielderr { margin-top: .5rem; font-size: .82rem; color: var(--shine-danger); }

/* ===============================  MY BOOKINGS  ==================================
   views/client_booking_list.php. Tabs + live search on one bar, a list of
   cards under it. The same card is built in PHP and in the page script. */

.shine-bkl {padding-top: clamp(1.5rem, 4vw, 2rem);padding-bottom: clamp(3rem, 6vw, 5rem);}
.shine-bkl > .shine-note { margin-bottom: 1rem; }

/* ---- bar: tabs left, search right ---- */
.shine-bkl__bar {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: .8rem 1rem;
	flex-wrap: wrap;
	margin-bottom: 1.2rem;
	border-radius: 18px;
}
.shine-bkl__tabs { display: flex; gap: .25rem; overflow-x: auto; scrollbar-width: none; }
.shine-bkl__tabs::-webkit-scrollbar { display: none; }
.shine-bkl__tab {
	display: inline-flex;
	align-items: center;
	gap: .45rem;
	padding: .6rem 1rem;
	border-radius: 12px;
	font-size: .85rem;
	color: var(--shine-muted);
	white-space: nowrap;
	transition: background-color var(--shine-dur) var(--shine-ease), color var(--shine-dur) var(--shine-ease);
}
.shine-bkl__tab:hover { color: var(--shine-text); background: color-mix(in srgb, var(--shine-text) 6%, transparent); }
.shine-bkl__tab.is-on {background: color-mix(in srgb, var(--shine-accent) 12%, transparent);color: var(--shine-text);}
.shine-bkl__count {
	min-width: 20px;
	height: 20px;
	padding: 0 6px;
	display: inline-grid;
	place-items: center;
	border-radius: 100px;
	background: var(--shine-accent);
	color: var(--shine-bg);
	font-size: .7rem;
	font-weight: 700;
}
.shine-bkl__search { position: relative; flex: 0 1 370px; min-width: 200px; margin: 0; }
.shine-bkl__searchicon { position: absolute; left: 14px; top: 50%; transform: translateY(-50%); color: var(--shine-faint); pointer-events: none; }
body .shine-bkl__search .shine-input {height: 44px;padding: .6rem 2.4rem .6rem 2.5rem;border-radius: 12px;box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;}
.shine-bkl__search .shine-input::-webkit-search-cancel-button { display: none; }
.shine-bkl__search:focus-within .shine-bkl__searchicon { color: var(--shine-accent); }
.shine-bkl__clear {
	position: absolute;
	right: 8px;
	top: 50%;
	transform: translateY(-50%);
	width: 28px;
	height: 28px;
	display: grid;
	place-items: center;
	padding: 0;
	border: 0;
	border-radius: 8px;
	background: none;
	color: var(--shine-faint);
	cursor: pointer;
}
.shine-bkl__clear:hover { color: var(--shine-text); background: color-mix(in srgb, var(--shine-text) 8%, transparent); }

/* ---- list ---- */
.shine-bkl__list { display: grid; gap: .7rem; }
.shine-bkl__item {
	display: grid;
	grid-template-columns: 90px minmax(0, 1fr) auto;
	align-items: center;
	gap: 1.1rem;
	padding: .8rem 1.1rem .8rem .8rem;
	border: 1px solid var(--shine-border);
	border-radius: 18px;
	color: var(--shine-text);
	transition: border-color var(--shine-dur) var(--shine-ease), background-color var(--shine-dur) var(--shine-ease);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-bkl__item:hover {border-color: color-mix(in srgb, var(--shine-accent) 55%, transparent);background: var(--shine-surface-alt);}
.shine-bkl__img {
	aspect-ratio: 4 / 3;
	overflow: hidden;
	border-radius: 12px;
	background: color-mix(in srgb, var(--shine-text) 6%, var(--shine-bg));
}
.shine-bkl__img img { width: 100%; height: 100%; object-fit: cover; display: block; }
.shine-bkl__main {display: grid;gap: .2rem;min-width: 0;}
.shine-bkl__title { display: flex; align-items: baseline; gap: .6rem; min-width: 0; }
.shine-bkl__title b {
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
	font-family: var(--shine-font-display);
	font-size: 1.02rem;
	font-weight: 600;
	letter-spacing: -.01em;
	color: var(--shine-text);
}
.shine-bkl__title em { flex: 0 0 auto; font-style: normal; font-size: .76rem; color: var(--shine-faint); }
.shine-bkl__dates { display: flex; align-items: center; gap: .6rem; min-width: 0; font-size: .86rem; color: var(--shine-muted); }
.shine-bkl__dates span {/* white-space: nowrap; */}
.shine-bkl__dates i {
	flex: 1 1 24px;
	max-width: 35px;
	height: 0;
	border-top: 1px dashed color-mix(in srgb, var(--shine-text) 25%, transparent);
	position: relative;
}
.shine-bkl__dates i::after {
	content: "";
	position: absolute;
	right: -3px;
	top: -3.5px;
	width: 6px;
	height: 6px;
	border-radius: 50%;
	background: var(--shine-accent);
}
.shine-bkl__side { display: grid; justify-items: end; gap: .4rem; }
.shine-bkl__price { font-weight: 700; color: var(--shine-text); white-space: nowrap; }
.shine-bkl__pay {
	padding: .15rem .65rem;
	border: 1px solid var(--shine-border);
	border-radius: 100px;
	font-size: .74rem;
	white-space: nowrap;
	color: var(--shine-muted);
}
.shine-bkl__pay.is-paid { border-color: color-mix(in srgb, #1dbb60 45%, transparent); color: #1dbb60; }
.shine-bkl__pay.is-partial { border-color: color-mix(in srgb, var(--shine-accent) 55%, transparent); color: var(--shine-accent); }
.shine-bkl__pay.is-unpaid { border-color: color-mix(in srgb, var(--shine-danger) 45%, transparent); color: var(--shine-danger); }

/* skeleton while a search is on its way */
.shine-bkl__item--skel { pointer-events: none; grid-template-columns: 112px minmax(0, 1fr); }
.shine-bkl__item--skel .shine-bkl__img,
.shine-bkl__item--skel .shine-bkl__main span {
	background: linear-gradient(90deg,
		color-mix(in srgb, var(--shine-text) 5%, transparent) 25%,
		color-mix(in srgb, var(--shine-text) 11%, transparent) 50%,
		color-mix(in srgb, var(--shine-text) 5%, transparent) 75%);
	background-size: 200% 100%;
	animation: shine-bkl-shim 1.1s linear infinite;
}
.shine-bkl__item--skel .shine-bkl__main span { height: 12px; border-radius: 6px; }
.shine-bkl__item--skel .shine-bkl__main span:first-child { width: 55%; height: 15px; }
.shine-bkl__item--skel .shine-bkl__main span:last-child { width: 35%; }
@keyframes shine-bkl-shim { to { background-position: -200% 0; } }
@media (prefers-reduced-motion: reduce) { .shine-bkl__item--skel * { animation: none !important; } }

/* ---- empty + load more ---- */
.shine-bkl__empty {
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
	display: grid;
	justify-items: center;
	gap: .8rem;
	padding: 2.6rem 1rem;
	border: 1px solid var(--shine-border);
	border-radius: 18px;
	text-align: center;
	color: var(--shine-muted);
}
.shine-bkl__empty svg { color: var(--shine-accent); }
.shine-bkl__empty p { margin: 0; }
.shine-bkl__more { margin-top: 1rem; }
.shine-bkl__morebtn {
	height: 48px;
	justify-content: center;
	background: none;
	border: 1px solid var(--shine-border);
	color: var(--shine-text);
}
.shine-bkl__morebtn:hover:not(:disabled) { border-color: var(--shine-accent); color: var(--shine-accent); }

@media (max-width: 720px) {
	.shine-bkl__bar {}
	.shine-bkl__search { flex: 1 1 100%; min-width: 0; }
	.shine-bkl__item { grid-template-columns: 92px minmax(0, 1fr); gap: .9rem; }
	.shine-bkl__side {grid-column: 2;justify-items: start;grid-auto-flow: column;justify-content: space-between;align-items: center;gap: .6rem;}
	.shine-bkl__dates { flex-wrap: wrap; row-gap: .2rem; }
}

/* desktop: payment tag, then price, on one line */
@media (min-width: 721px) {
	.shine-bkl__side { display: flex; align-items: center; gap: .9rem; }
	.shine-bkl__pay { order: -1; }
}

/* booking card image: the booking bar's "no vehicle" tile underneath, the
   photo (when there is one, and it loads) on top */
.shine-bkl__img {
	position: relative;
	display: grid;
	place-items: center;
	background: color-mix(in srgb, var(--shine-text) 7%, transparent);
	color: var(--shine-faint);
}
.shine-bkl__img img { position: absolute; inset: 0; }
.shine-bkl__noimg { width: 34px; height: auto; }
@media (max-width: 720px) { .shine-bkl__noimg { width: 28px; } }

/* ---- booking card on a phone: a ticket ----
   Top: car, name + ID, price + payment. A perforation (dashed line with a
   notch bitten out of each side) and the stub: pickup -> return across the
   full width. Same markup as desktop — .shine-bkl__main is dissolved with
   display: contents so its title and dates become cells of the card grid. */
@media (max-width: 720px) {
	.shine-bkl__list { gap: .9rem; }
	.shine-bkl__item:not(.shine-bkl__item--skel) {
		position: relative;
		overflow: hidden;
		grid-template-columns: 64px minmax(0, 1fr) auto;
		grid-template-areas:
			"img title side"
			"dates dates dates";
		gap: 0 .85rem;
		padding: 14px 14px 12px;
		border-radius: 18px;
	}
	.shine-bkl__item:not(.shine-bkl__item--skel) .shine-bkl__main { display: contents; }
	.shine-bkl__item:not(.shine-bkl__item--skel) .shine-bkl__img { grid-area: img; align-self: center; border-radius: 10px; }
	.shine-bkl__item:not(.shine-bkl__item--skel) .shine-bkl__noimg { width: 26px; }

	.shine-bkl__item:not(.shine-bkl__item--skel) .shine-bkl__title {
		grid-area: title;
		align-self: center;
		flex-direction: column;
		align-items: flex-start;
		gap: .15rem;
	}
	.shine-bkl__title b { max-width: 100%; font-size: .98rem; }
	.shine-bkl__title em { font-size: .72rem; letter-spacing: .04em; }

	.shine-bkl__item:not(.shine-bkl__item--skel) .shine-bkl__side {
		grid-area: side;
		grid-column: auto;
		align-self: center;
		display: grid;
		grid-auto-flow: row;
		justify-items: end;
		gap: .35rem;
	}
	.shine-bkl__price { font-size: 1rem; }
	.shine-bkl__pay { order: 0; font-size: .7rem; padding: .1rem .55rem; }

	/* the stub */
	.shine-bkl__item:not(.shine-bkl__item--skel) .shine-bkl__dates {
		grid-area: dates;
		position: relative;
		display: flex;
		flex-wrap: nowrap;
		align-items: center;
		justify-content: space-between;
		gap: .7rem;
		margin-top: 4px;
		padding-top: 12px;
		font-size: .82rem;
		color: var(--shine-text);
		padding: 5px 0px;
		border-radius: 9px;
		margin-top: 13px;
	}
	.shine-bkl__item:not(.shine-bkl__item--skel) .shine-bkl__dates span { font-weight: 600; }
	.shine-bkl__item:not(.shine-bkl__item--skel) .shine-bkl__dates i { flex: 1 1 auto; max-width: none; }
	/* the two notches, bitten out of the card edge on the perforation */
	.shine-bkl__item:not(.shine-bkl__item--skel) .shine-bkl__dates::before,
	.shine-bkl__item:not(.shine-bkl__item--skel) .shine-bkl__dates::after {
		/* content: ""; */
		position: absolute;
		top: -8px;
		width: 16px;
		height: 16px;
		border-radius: 50%;
		background: var(--shine-bg);
		border: 1px solid var(--shine-border);
	}
	.shine-bkl__item:not(.shine-bkl__item--skel) .shine-bkl__dates::before { left: -23px; }
	.shine-bkl__item:not(.shine-bkl__item--skel) .shine-bkl__dates::after { right: -23px; }
}

/* ===============================  BOOKING DETAILS  ==============================
   views/order/client_booking_details.php (+ client_booking_header.php tabs).
   Hierarchy: where the booking stands (status, money, the trip) first; what is
   included next; the car last. Public by hash — see the view header. */

.shine-bkd {padding-top: clamp(1.5rem, 4vw, 3rem);padding: 15px 25px;padding-bottom: clamp(3rem, 6vw, 5rem);}
.shine-bkd__head { padding: 0; margin-bottom: 1.2rem; }
.shine-bkd__head .shine-note { margin-bottom: 1rem; }

/* ---- tabs (shared with contract / payments / notes) ---- */
.shine-bkd__tabs {
	display: flex;
	gap: .25rem;
	padding: .4rem;
	overflow-x: auto;
	scrollbar-width: none;
	/* border: 1px solid var(--shine-border); */
	/* border-radius: 16px; */
	/* background: color-mix(in srgb, var(--shine-text) 4%, var(--shine-bg)); */
}
.shine-bkd__tabs::-webkit-scrollbar { display: none; }
.shine-bkd__tab {
	padding: .6rem 1rem;
	border-radius: 11px;
	font-size: .9rem;
	white-space: nowrap;
	color: var(--shine-muted);
	transition: background-color var(--shine-dur) var(--shine-ease), color var(--shine-dur) var(--shine-ease);
}
.shine-bkd__tab:hover {color: var(--shine-text);background: var(--shine-surface-alt);}
.shine-bkd__tab.is-on {/* color: var(--shine-accent); */background: color-mix(in srgb, var(--shine-accent) 12%, transparent);}

/* ---- summary: the booking at a glance ---- */
.shine-bkd__summary {
	position: relative;
	margin-bottom: 1.4rem;
	padding: clamp(1.2rem, 3vw, 1.8rem);
	border: 1px solid var(--shine-border);
	border-radius: 24px;
	/* background: var(--shine-surface-alt); */
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-bkd__sumtop { display: flex; align-items: center; justify-content: space-between; gap: 1rem; flex-wrap: wrap; }
.shine-bkd__statuswrap { display: flex; align-items: center; gap: .6rem 1rem; flex-wrap: wrap; }
.shine-bkd__status {
	display: inline-flex;
	align-items: center;
	gap: .5rem;
	padding: .35rem .85rem;
	border: 1px solid var(--shine-border);
	border-radius: 100px;
	font-size: .82rem;
	font-weight: 600;
	color: var(--shine-text);
}
.shine-bkd__status i { width: 8px; height: 8px; border-radius: 50%; background: var(--shine-faint); }
.shine-bkd__status.is-active { border-color: color-mix(in srgb, var(--shine-accent) 45%, transparent); }
.shine-bkd__status.is-active i { background: var(--shine-accent); }
.shine-bkd__status.is-completed { border-color: color-mix(in srgb, #1dbb60 45%, transparent); }
.shine-bkd__status.is-completed i { background: #1dbb60; }
.shine-bkd__status.is-canceled {border-color: color-mix(in srgb, var(--shine-danger) 100%, transparent);color: var(--shine-danger);}
.shine-bkd__status.is-canceled i { background: var(--shine-danger); }
@keyframes shine-bkd-pulse { 70% { box-shadow: 0 0 0 7px transparent; } 100% { box-shadow: 0 0 0 0 transparent; } }
@media (prefers-reduced-motion: reduce) { .shine-bkd__status i { animation: none !important; } }
.shine-bkd__id { font-size: .85rem; color: var(--shine-faint); }
.shine-bkd__id b { color: var(--shine-muted); font-weight: 600; }
.shine-bkd__login { margin: 0; font-size: .88rem; color: var(--shine-muted); }
.shine-bkd__login a { color: var(--shine-accent); font-weight: 600; }

.shine-bkd__money {display: flex;align-items: baseline;flex-wrap: wrap;gap: .4rem .8rem;margin: 1.3rem 0 1.4rem;border: 1px solid var(--shine-border);padding: 1rem 1.5rem;border-radius: 15px;box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;}
.shine-bkd__price {
	margin: 0;
	font-family: var(--shine-font-display);
	font-size: clamp(1.5rem, 5vw, 2rem);
	font-weight: 700;
	letter-spacing: -.02em;
	line-height: 1;
	color: #1dbb60;
}
.shine-bkd__pay {
	align-self: center;
	padding: .2rem .7rem;
	border: 1px solid var(--shine-border);
	border-radius: 100px;
	font-size: .75rem;
	color: var(--shine-muted);
}
.shine-bkd__pay.is-paid { border-color: color-mix(in srgb, #1dbb60 45%, transparent); color: #1dbb60; }
.shine-bkd__pay.is-partial { border-color: color-mix(in srgb, var(--shine-accent) 55%, transparent); color: var(--shine-accent); }
.shine-bkd__pay.is-unpaid {border-color: color-mix(in srgb, var(--shine-danger) 45%, transparent);color: var(--shine-danger);box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;}
.shine-bkd__days {flex-basis: 100%;margin: 0;font-size: .8rem;color: var(--shine-muted);}

/* the trip: two legs with a dotted run between them */
.shine-bkd__trip {
	position: relative;
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 1.2rem 3rem;
	/* padding: 1.2rem 1.3rem; */
	/* border: 1px solid var(--shine-border); */
	/* border-radius: 18px; */
	/* background: color-mix(in srgb, var(--shine-bg) 60%, transparent); */
}
.shine-bkd__trip::before {
	content: "";
	position: absolute;
	left: calc(50% - 1rem);
	width: 2rem;
	top: 2.05rem;
}
.shine-bkd__leg { min-width: 0; }
.shine-bkd__leg p { margin: 0; }
.shine-bkd__leghead { display: flex; align-items: center; justify-content: space-between; gap: .6rem; flex-wrap: wrap; margin-bottom: .7rem; }
.shine-bkd__legtitle {
	display: inline-flex;
	align-items: center;
	gap: .5rem;
	font-size: .72rem;
	color: var(--shine-faint);
}
.shine-bkd__legtitle i { width: 10px; height: 10px; border-radius: 50%; border: 2px solid var(--shine-accent); }
.shine-bkd__leg--drop .shine-bkd__legtitle i { background: var(--shine-accent); }
.shine-bkd__proc {
	display: inline-flex;
	align-items: center;
	gap: .35rem;
	padding: 0.4rem 1rem;
	border: 1px solid var(--shine-border);
	border-radius: 100px;
	background: none;
	font: inherit;
	font-size: .72rem;
	color: var(--shine-faint);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-bkd__proc.is-done { border-color: color-mix(in srgb, #1dbb60 45%, transparent); color: #1dbb60; cursor: pointer; }
.shine-bkd__proc.is-done:hover { background: color-mix(in srgb, #1dbb60 10%, transparent); }
.shine-bkd__legdate {font-family: var(--shine-font-display);/* font-weight: 600; */color: var(--shine-text);}
.shine-bkd__legtime {font-size: .95rem;font-weight: 600;margin-top: .15rem !important;}
.shine-bkd__legaddr { margin-top: .6rem !important; font-size: .88rem; color: var(--shine-text); }
.shine-bkd__legcity {/* font-size: .82rem; */color: var(--shine-muted);}
.shine-bkd__map {
	display: inline-flex;
	align-items: center;
	gap: .4rem;
	margin-top: .75rem;
	padding: .4rem .8rem;
	border: 1px solid var(--shine-border);
	border-radius: 10px;
	font-size: .8rem;
	font-weight: 600;
	color: var(--shine-text);
	transition: border-color var(--shine-dur) var(--shine-ease), color var(--shine-dur) var(--shine-ease);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-bkd__map svg { color: var(--shine-accent); }
.shine-bkd__map:hover { border-color: var(--shine-accent); color: var(--shine-accent); }

/* ---- manage menu ---- */
.shine-bkd__menu { position: relative; }
.shine-bkd__menubtn {
	display: inline-flex;
	align-items: center;
	gap: .5rem;
	height: 42px;
	padding: 0 1rem;
	border: 1px solid var(--shine-border);
	border-radius: 12px;
	background: var(--shine-bg);
	font: inherit;
	/* font-size: .9rem; */
	/* font-weight: 600; */
	color: var(--shine-text);
	cursor: pointer;
	transition: border-color var(--shine-dur) var(--shine-ease);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-bkd__menubtn svg { transition: transform var(--shine-dur) var(--shine-ease); }
.shine-bkd__menu.is-open .shine-bkd__menubtn,
.shine-bkd__menubtn:hover { border-color: var(--shine-accent); }
.shine-bkd__menu.is-open .shine-bkd__menubtn svg { transform: rotate(180deg); }
.shine-bkd__menulist {
	position: absolute;
	right: 0;
	top: calc(100% + 8px);
	z-index: 30;
	min-width: 240px;
	margin: 0;
	padding: .4rem;
	list-style: none;
	border: 1px solid var(--shine-border);
	border-radius: 16px;
	background: var(--shine-surface, var(--shine-bg));
	box-shadow: 0 24px 50px -20px rgba(0, 0, 0, .75);
}
.shine-bkd__menulist a {
	display: flex;
	align-items: center;
	gap: .7rem;
	padding: .65rem .8rem;
	border-radius: 10px;
	font-size: .9rem;
	color: var(--shine-text);
}
.shine-bkd__menulist a svg { color: var(--shine-faint); flex: 0 0 auto; }
.shine-bkd__menulist a span { flex: 1 1 auto; }
.shine-bkd__menulist a:hover { background: color-mix(in srgb, var(--shine-text) 6%, transparent); }
.shine-bkd__menulist a:hover svg { color: var(--shine-accent); }
.shine-bkd__menulist a.is-danger,
.shine-bkd__menulist a.is-danger svg { color: var(--shine-danger); }
.shine-bkd__menusep { height: 1px; margin: .3rem .4rem; background: var(--shine-border); }
.shine-bkd__badge {
	min-width: 20px;
	height: 20px;
	padding: 0 6px;
	display: inline-grid;
	place-items: center;
	border-radius: 100px;
	background: color-mix(in srgb, var(--shine-accent) 18%, transparent);
	color: var(--shine-accent);
	font-size: .7rem;
}
.shine-bkd__badge.is-warn { background: color-mix(in srgb, var(--shine-danger) 18%, transparent); color: var(--shine-danger); }

/* ---- two columns below ---- */
.shine-bkd__grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 1.4rem; align-items: start; }
.shine-bkd__col { display: grid; gap: 1.4rem; min-width: 0; }
.shine-bkd__col:empty, #mobileVehicleTarget:empty { display: none; }
#mobileVehicleTarget { display: grid; gap: 1.4rem; }
.shine-bkd__card {
	min-width: 0;
}
.shine-bkd__h {
	margin: 0 0 1rem;
	font-family: var(--shine-font-display);
	font-size: 1.1rem;
	font-weight: 800;
	letter-spacing: -.01em;
	color: var(--shine-text);
}
.shine-bkd__h3 {
	margin: 1.4rem 0 .8rem;
	font-weight: 800;
}
.shine-bkd__none { margin: 0; color: var(--shine-muted); }

/* protection */
.shine-bkd__plan {
	display: flex;
	gap: .5rem;
	padding: 1rem;
	border: 1px solid var(--shine-border);
	border-radius: 16px;
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-bkd__plan + .shine-bkd__plan { margin-top: .7rem; }
.shine-bkd__shield {
	flex: 0 0 30px;
	height: 28px;
	display: grid;
	place-items: center;
	color: var(--shine-accent);
}
.shine-bkd__planmain { flex: 1 1 auto; min-width: 0; }
.shine-bkd__planhead { display: flex; align-items: baseline; justify-content: space-between; gap: .8rem; }
.shine-bkd__planhead b { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--shine-text); }
.shine-bkd__planprice { white-space: nowrap; font-weight: 700; color: var(--shine-accent); }
.shine-bkd__planprice small { margin-left: .3rem; font-size: .72rem; font-weight: 400; color: var(--shine-muted); }
.shine-bkd__excess { margin: .3rem 0 0; font-size: .82rem; color: var(--shine-muted); }
.shine-bkd__excess b { color: var(--shine-text); font-weight: 600; }
.shine-bkd__fold {
	display: inline-flex;
	align-items: center;
	gap: .3rem;
	margin-top: .6rem;
	padding: 0;
	border: 0;
	background: none;
	font: inherit;
	font-size: .82rem;
	font-weight: 600;
	color: var(--shine-accent);
	cursor: pointer;
}
.shine-bkd__fold svg { transition: transform var(--shine-dur) var(--shine-ease); }
#bookingProtection .protection_details_list { display: none; }
#bookingProtection .protection_card.open_details .protection_details_list { display: block; }
#bookingProtection .protection_card.open_details .shine-bkd__fold svg { transform: rotate(180deg); }
.shine-bkd__planlist { margin-top: .8rem; padding-top: .8rem; border-top: 1px solid var(--shine-border); font-size: .85rem; color: var(--shine-muted); }
.shine-bkd__planlist p { margin: 0 0 .6rem; }
.shine-bkd__planlist .shine-ticks { margin: 0; }

/* products */
.shine-bkd__prods { display: grid; gap: .5rem; margin: 0; padding: 0; list-style: none; }
.shine-bkd__prods li {
	display: flex;
	align-items: center;
	gap: .75rem;
	padding: .75rem .9rem;
	border: 1px solid var(--shine-border);
	border-radius: 12px;
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-bkd__prodicon {
	flex: 0 0 26px;
	height: 26px;
	display: grid;
	place-items: center;
	border-radius: 8px;
	/* background: color-mix(in srgb, #1dbb60 14%, transparent); */
	color: #1dbb60;
}
.shine-bkd__prodname { flex: 1 1 auto; min-width: 0; color: var(--shine-text); }
.shine-bkd__prodbill { font-size: .78rem; color: var(--shine-faint); white-space: nowrap; }

/* quick options: three friendly tiles */
.shine-bkd__help { margin: 0 0 1rem; font-size: .9rem; line-height: 1.55; color: var(--shine-muted); }
.shine-bkd__help strong { color: var(--shine-text); font-weight: 600; }
.shine-bkd__actions { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .6rem; }
.shine-bkd__action {
	display: grid;
	justify-items: start;
	gap: .6rem;
	padding: 1.2rem;
	border: 1px solid var(--shine-border);
	border-radius: 14px;
	font-size: .85rem;
	font-weight: 600;
	line-height: 1.3;
	color: var(--shine-text);
	transition: border-color var(--shine-dur) var(--shine-ease), transform var(--shine-dur) var(--shine-ease);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-bkd__action:hover { border-color: var(--shine-accent); }
.shine-bkd__actionicon {
	/* width: 38px; */
	/* height: 38px; */
	display: grid;
	place-items: center;
	border-radius: 11px;
	/* background: color-mix(in srgb, var(--shine-accent) 14%, transparent); */
	color: var(--shine-accent);
}

/* the car */
.shine-bkd__gallery { padding: 0; overflow: hidden; }
.shine-bkd__gallery .swiper { aspect-ratio: 4 / 3; }
.shine-bkd__gallery .swiper-slide img { width: 100%; height: 100%; object-fit: cover; display: block; }
.shine-bkd__gallery .swiper-button-next,
.shine-bkd__gallery .swiper-button-prev {
	width: 40px;
	height: 40px;
	border-radius: 50%;
	background: var(--shine-accent);
	backdrop-filter: blur(6px);
	color: white;
}
.shine-bkd__gallery .swiper-button-next::after,
.shine-bkd__gallery .swiper-button-prev::after { font-size: 15px; font-weight: 700; }
.shine-bkd__noimg {
	aspect-ratio: 4 / 3;
	display: grid;
	place-items: center;
	background: var(--shine-surface-alt);
	color: var(--shine-faint);
	border-radius: 15px;
}
.shine-bkd__specs {display: grid;grid-template-columns: repeat(4, minmax(0, 1fr));gap: 2rem 1rem;}
.shine-bkd__spec {
	display: grid;
	gap: .15rem;
	r: 1px solid var(--shine-border);
	border-radius: 14px;
	min-width: 0;
}
.shine-bkd__spec svg { color: var(--shine-accent); margin-bottom: .3rem; }
.shine-bkd__spec span { font-size: .72rem; color: var(--shine-faint); }
.shine-bkd__spec b { font-size: .88rem; font-weight: 600; color: var(--shine-text); overflow-wrap: anywhere; }
.shine-bkd__subhead { display: flex; align-items: baseline; justify-content: space-between; gap: 1rem; }
.shine-bkd__admin { font-size: .8rem; font-weight: 600; color: var(--shine-accent); }
.shine-bkd__damages { display: grid; gap: .5rem; }
.shine-bkd__damage {
	display: flex;
	align-items: flex-start;
	gap: .7rem;
	width: 100%;
	padding: .75rem .85rem;
	border: 1px solid var(--shine-border);
	border-radius: 12px;
	background: color-mix(in srgb, var(--shine-text) 6%, transparent);
	font: inherit;
	text-align: left;
	color: inherit;
	cursor: pointer;
	transition: border-color var(--shine-dur) var(--shine-ease);
}
.shine-bkd__damage:hover {border-color: var(--shine-danger);}
.shine-bkd__dmgicon {
	flex: 0 0 26px;
	height: 26px;
	display: grid;
	place-items: center;
	border-radius: 8px;
	background: var(--shine-danger);
	color: var(--shine-text);
}
.shine-bkd__dmgtext { display: grid; gap: .1rem; min-width: 0; }
.shine-bkd__dmgtext b {font-weight: 600;font-size: .8rem;color: var(--shine-text);}
.shine-bkd__dmgtext small { font-size: .75rem; color: var(--shine-faint); }
.shine-bkd__features { display: flex; flex-wrap: wrap; gap: .45rem; margin: 0; padding: 0; list-style: none; }
.shine-bkd__features li {
	padding: .35rem .8rem;
	border: 1px solid var(--shine-border);
	border-radius: 100px;
	font-size: .8rem;
	color: var(--shine-muted);
}

/* ---- modals ---- */
.shine-bkd__modalbody { padding: 18px 22px 22px; }
.shine-bkd__modaltext { margin: 0 0 1rem; font-size: .92rem; line-height: 1.55; color: var(--shine-muted); }
.shine-bkd__modaltext.is-danger { color: color-mix(in srgb, var(--shine-danger) 85%, var(--shine-text)); }
.shine-bkd__modalactions { display: flex; justify-content: center; gap: .6rem; margin-top: 1.2rem; }
.shine-bkd__textarea { min-height: 110px; resize: vertical; }
.shine-bkd__danger { background: var(--shine-danger); border: 1px solid var(--shine-danger); color: #fff; }
.shine-bkd__danger:hover { filter: brightness(1.08); }
.shine-bkd__outline { margin-bottom: 1rem; border-radius: 12px; overflow: hidden; background: #fff; }
.shine-bkd__tablewrap { overflow-x: auto; }
.shine-bkd__table { width: 100%; border-collapse: collapse; font-size: .88rem; }
.shine-bkd__table th {
	padding: 0 .5rem .6rem;
	font-weight: 400;
	color: var(--shine-faint);
	border-bottom: 1px solid var(--shine-border);
	text-align: left;
}
.shine-bkd__table td { padding: .65rem .5rem; color: var(--shine-muted); border-bottom: 1px solid color-mix(in srgb, var(--shine-border) 50%, transparent); }
.shine-bkd__table th:first-child, .shine-bkd__table td:first-child { padding-left: 0; white-space: nowrap; }
.shine-bkd__table th:last-child, .shine-bkd__table td:last-child { padding-right: 0; }
.shine-bkd__table .text-end { text-align: right; }
.shine-bkd__type {
	padding: .15rem .55rem;
	border: 1px solid var(--shine-border);
	border-radius: 100px;
	font-size: .72rem;
	color: var(--shine-text);
}
.shine-bkd__num { white-space: nowrap; color: var(--shine-text) !important; font-weight: 600; }
.shine-bkd__num.is-neg { color: #1dbb60 !important; }
.shine-bkd__grand td { border-bottom: 0; padding-top: .9rem; font-weight: 700; color: var(--shine-text); }
.shine-bkd__grand .shine-bkd__num {font-size: 1rem;}
.shine-bkd__counter { margin: 0 0 1rem; padding: .7rem; border: 1px solid var(--shine-border); border-radius: 12px; text-align: center; color: var(--shine-muted); }
.shine-bkd__counter b { color: var(--shine-text); }
.shine-bkd__gauges { display: grid; gap: 1rem; justify-items: center; }
.shine-bkd__gauges figure { display: grid; justify-items: center; gap: .5rem; margin: 0; }
.shine-bkd__gauges figcaption { font-size: .85rem; color: var(--shine-muted); }
.shine-bkd__gauges img { border-radius: 10px; }

/* ---- small screens ---- */
@media (max-width: 991.98px) {
	.shine-bkd__grid { grid-template-columns: minmax(0, 1fr); }
	.shine-bkd__specs { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 640px) {
	.shine-bkd__summary { border-radius: 20px; }
	.shine-bkd__sumtop { align-items: flex-start; }
	.shine-bkd__trip { grid-template-columns: minmax(0, 1fr); gap: 1.1rem; padding: 1rem; }
	/* stacked: the dotted run goes down the left instead of across */
	.shine-bkd__trip::before {
		left: calc(1rem + 4px);
		top: 2.3rem;
		width: 0;
		height: calc(50% - 1.2rem);
		border-top: 0;
		border-left: 2px dotted color-mix(in srgb, var(--shine-accent) 70%, transparent);
	}
	.shine-bkd__leg { padding-left: 0; }
	.shine-bkd__actions { grid-template-columns: minmax(0, 1fr); }
	.shine-bkd__action { grid-template-columns: auto 1fr; align-items: center; justify-items: start; }
	.shine-bkd__menulist { right: auto; left: 0; }
}

/* phone ticket: the text sits right of the dotted run, only the dot stays on it */
@media (max-width: 640px) {
	.shine-bkd__leg { padding-left: 1.5rem; }
	.shine-bkd__leg .shine-bkd__legtitle { margin-left: -1.5rem; gap: calc(1.5rem - 10px); }
}

/* payment status sits at the right end of the price line */
.shine-bkd__money .shine-bkd__pay { margin-left: auto; }

/* vehicle features: a two-column list, a small gold tick before each */
.shine-bkd__features {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: .55rem 1.2rem;
}
.shine-bkd__features li {
	display: flex;
	align-items: flex-start;
	gap: .55rem;
	padding: 0;
	border: 0;
	border-radius: 0;
	font-size: .86rem;
	line-height: 1.4;
	color: var(--shine-muted);
}
.shine-bkd__features li svg { flex: 0 0 auto; margin-top: .15rem; color: var(--shine-accent); }
@media (max-width: 420px) { .shine-bkd__features { grid-template-columns: minmax(0, 1fr); } }



.shine-bkd__none {padding: .8rem .75rem;border: 1px solid var(--shine-border);border-radius: 14px;background: var(--shine-bg);}
/* booking tabs carry the same counts as the Manage menu */
.shine-bkd__tab { display: inline-flex; align-items: center; gap: .45rem; }
.shine-bkd__tab .shine-bkd__badge { height: 19px; min-width: 19px; font-size: .68rem; }

/* ===============================  BOOKING CONTRACT  =============================
   views/order/client_booking_contracts.php — one row per contract, tinted by
   where it stands: signed (green), needs signing (gold), revoked (red). */
.shine-ct__list { display: grid; gap: .7rem; }
.shine-ct__item {
	display: grid;
	grid-template-columns: auto minmax(0, 1fr) auto;
	align-items: center;
	gap: 1rem;
	padding: .95rem 1.1rem;
	border: 1px solid var(--shine-border);
	border-radius: 16px;
	background: var(--shine-bg);
	color: var(--shine-text);
	transition: border-color var(--shine-dur) var(--shine-ease), background-color var(--shine-dur) var(--shine-ease);
}
.shine-ct__item:hover { border-color: color-mix(in srgb, var(--shine-accent) 55%, transparent); }
.shine-ct__item.is-todo {
	border: 1px solid var(--shine-border);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-ct__doc {
	position: relative;
	width: 46px;
	height: 46px;
	display: grid;
	place-items: center;
	border-radius: 13px;
	color: var(--shine-faint);
}
.shine-ct__item.is-ok .shine-ct__doc { background: color-mix(in srgb, #1dbb60 13%, transparent); color: #1dbb60; }
.shine-ct__item.is-todo .shine-ct__doc {color: var(--shine-accent);height: 50px;}
.shine-ct__item.is-off .shine-ct__doc { background: color-mix(in srgb, var(--shine-danger) 13%, transparent); color: var(--shine-danger); }
.shine-ct__seal {
	position: absolute;
	right: -4px;
	bottom: -4px;
	width: 18px;
	height: 18px;
	display: grid;
	place-items: center;
	border-radius: 50%;
	background: #1dbb60;
	color: var(--shine-bg);
	box-shadow: 0 0 0 2px var(--shine-bg);
}
.shine-ct__main { display: grid; gap: .3rem; min-width: 0; }
.shine-ct__top { display: flex; align-items: center; gap: .6rem; flex-wrap: wrap; }
.shine-ct__top b {font-family: var(--shine-font-display);/* font-size: 1rem; */}
.shine-ct__status {
	padding: .12rem .6rem;
	border: 1px solid var(--shine-border);
	border-radius: 100px;
	font-size: .72rem;
	color: var(--shine-muted);
}
.shine-ct__item.is-ok .shine-ct__status { border-color: color-mix(in srgb, #1dbb60 45%, transparent); color: #1dbb60; }
.shine-ct__item.is-todo .shine-ct__status { border-color: color-mix(in srgb, var(--shine-accent) 55%, transparent); color: var(--shine-accent); }
.shine-ct__item.is-off .shine-ct__status { border-color: color-mix(in srgb, var(--shine-danger) 45%, transparent); color: var(--shine-danger); }
.shine-ct__meta { font-size: .84rem; color: var(--shine-muted); }
.shine-ct__meta em { font-style: normal; margin-left: .5rem; padding-left: .5rem; border-left: 1px solid var(--shine-border); color: var(--shine-faint); }
.shine-ct__go {
	display: inline-flex;
	align-items: center;
	gap: .3rem;
	font-size: .85rem;
	font-weight: 600;
	color: var(--shine-muted);
	white-space: nowrap;
	transition: color var(--shine-dur) var(--shine-ease);
}
.shine-ct__item:hover .shine-ct__go,
.shine-ct__item.is-todo .shine-ct__go { color: var(--shine-accent); }
.shine-ct__empty {
	display: grid;
	justify-items: center;
	gap: .7rem;
	padding: 2.4rem 1rem;
	border: 1px solid var(--shine-border);
	border-radius: 16px;
	text-align: center;
	color: var(--shine-muted);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-ct__empty svg { color: var(--shine-accent); }
.shine-ct__empty p { margin: 0; }
@media (max-width: 640px) {
	.shine-ct__item { grid-template-columns: auto minmax(0, 1fr); padding: .9rem; }
	.shine-ct__go { grid-column: 2; justify-self: start; }
	.shine-ct__meta em { display: block; margin: .15rem 0 0; padding: 0; border: 0; }
}

/* contract rows: golden hover, and the language's flag before its name */
.shine-ct__item:hover {
	border-color: var(--shine-accent);
}
.shine-ct__item:hover .shine-ct__doc { background: color-mix(in srgb, var(--shine-accent) 18%, transparent); color: var(--shine-accent); }
.shine-ct__item:hover .shine-ct__top b { color: var(--shine-accent); }
.shine-ct__item { transition: border-color var(--shine-dur) var(--shine-ease), background-color var(--shine-dur) var(--shine-ease), box-shadow var(--shine-dur) var(--shine-ease); }
.shine-ct__meta em { display: inline-flex; align-items: center; gap: .4rem; }
.shine-ct__flag { width: 18px; height: auto; border-radius: 3px; flex: 0 0 auto; }
@media (max-width: 640px) { .shine-ct__meta em { display: flex; } }

/* phone: the document icon lines up with the contract title, not the middle */
@media (max-width: 640px) {
	.shine-ct__item { align-items: start; }
	.shine-ct__doc { align-self: start; }
}

/* ===============================  CONTRACT (SIGN)  ==============================
   views/contract.php — /sign/contract/@hash. The contract reads as one document
   (sections split by hairlines); the signature panel beside it is sticky and
   shows the one state that applies: sign / signed / revoked. */

.shine-doc { padding-top: clamp(1.5rem, 4vw, 3rem); padding-bottom: clamp(3rem, 6vw, 5rem); }
.shine-doc > .shine-note { margin-bottom: 1rem; }
.shine-doc__grid { display: grid; grid-template-columns: minmax(0, 1fr) 360px; gap: 1.4rem; align-items: start; }

/* ---- the document ---- */
.shine-doc__paper {
	min-width: 0;
	padding: clamp(1.2rem, 3vw, 2.2rem);
	border: 1px solid var(--shine-border);
	border-radius: 22px;
	box-shadow:  0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-doc__banner {
	display: flex;
	align-items: center;
	gap: .9rem;
	margin-bottom: 1.6rem;
	padding: .9rem 1rem;
	border: 1px solid var(--shine-border);
	border-radius: 14px;
	background: var(--shine-bg);
}
.shine-doc__banner b { display: block; color: var(--shine-text); }
.shine-doc__banner small { font-size: .78rem; color: var(--shine-faint); }
.shine-doc__bannericon {
	flex: 0 0 38px;
	height: 38px;
	display: grid;
	place-items: center;
	border-radius: 11px;
	background: color-mix(in srgb, var(--shine-text) 8%, transparent);
	color: var(--shine-faint);
}
.shine-doc__banner.is-ok { border-color: color-mix(in srgb, #1dbb60 40%, transparent); }
.shine-doc__banner.is-ok .shine-doc__bannericon { background: color-mix(in srgb, #1dbb60 14%, transparent); color: #1dbb60; }
.shine-doc__banner.is-todo { border-color: color-mix(in srgb, var(--shine-accent) 45%, transparent); }
.shine-doc__banner.is-todo .shine-doc__bannericon { background: color-mix(in srgb, var(--shine-accent) 15%, transparent); color: var(--shine-accent); }
.shine-doc__banner.is-off { border-color: color-mix(in srgb, var(--shine-danger) 45%, transparent); }
.shine-doc__banner.is-off .shine-doc__bannericon { background: color-mix(in srgb, var(--shine-danger) 14%, transparent); color: var(--shine-danger); }

.shine-doc__sec { padding: 1.5rem 0; border-top: 1px solid var(--shine-border); }
.shine-doc__sec:last-child { padding-bottom: 0; }
.shine-doc__h {
	margin: 0 0 1rem;
	font-family: var(--shine-font-display);
	font-size: 1.1rem;
	font-weight: 600;
	letter-spacing: -.01em;
	color: var(--shine-text);
}
.shine-doc__h3 {
	display: flex;
	align-items: center;
	gap: .5rem;
	margin: 0 0 .8rem;
	font-size: .72rem;
	font-weight: 400;
	letter-spacing: .12em;
	text-transform: uppercase;
	color: var(--shine-accent);
}
.shine-doc__h3 i { width: 9px; height: 9px; border-radius: 50%; border: 2px solid var(--shine-accent); }
.shine-doc__h3--drop i { background: var(--shine-accent); }
.shine-doc__two { display: grid; grid-template-columns: 1fr 1fr; gap: 1.4rem 2rem; }
.shine-doc__two > * { min-width: 0; }

.shine-doc__dl { display: grid; gap: .5rem; margin: 0; }
.shine-doc__dl--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .8rem; }
.shine-doc__row { display: grid; grid-template-columns: minmax(90px, 40%) minmax(0, 1fr); gap: .8rem; font-size: .9rem; }
.shine-doc__dl--3 .shine-doc__row {grid-template-columns: minmax(0, 1fr);gap: 0rem;}
.shine-doc__row dt { font-weight: 400; color: var(--shine-faint); }
.shine-doc__dl--3 .shine-doc__row dt { font-size: .74rem; }
.shine-doc__row dd { margin: 0; color: var(--shine-text); overflow-wrap: anywhere; display: flex; align-items: center; gap: .4rem; flex-wrap: wrap; }
.shine-doc__muted { margin: 0; color: var(--shine-muted); font-size: .9rem; }

.shine-doc__products { display: grid; gap: .5rem; margin: 0; padding: 0; list-style: none; counter-reset: p; }
.shine-doc__products li {
	counter-increment: p;
	display: grid;
	grid-template-columns: auto minmax(0, 1fr) auto;
	grid-template-areas: "n name price" "n meta price";
	column-gap: .7rem;
	padding: .65rem .8rem;
	border: 1px solid var(--shine-border);
	border-radius: 12px;
	background: var(--shine-bg);
}
.shine-doc__products li::before { content: counter(p); grid-area: n; align-self: center; width: 22px; height: 22px; display: grid; place-items: center; border-radius: 7px; background: color-mix(in srgb, var(--shine-accent) 15%, transparent); color: var(--shine-accent); font-size: .72rem; font-weight: 700; }
.shine-doc__products b { grid-area: name; font-weight: 600; font-size: .9rem; color: var(--shine-text); }
.shine-doc__products span { grid-area: meta; font-size: .76rem; color: var(--shine-faint); }
.shine-doc__products em { grid-area: price; align-self: center; font-style: normal; font-weight: 600; white-space: nowrap; color: var(--shine-text); }

.shine-doc__plan { border: 1px solid color-mix(in srgb, var(--shine-accent) 30%, var(--shine-border)); border-radius: 14px; background: color-mix(in srgb, var(--shine-accent) 5%, transparent); overflow: hidden; }
.shine-doc__plan + .shine-doc__plan { margin-top: .7rem; }
.shine-doc__plancells { display: grid; grid-template-columns: 1.3fr 1fr 1fr; }
.shine-doc__plancells > div { display: grid; gap: .2rem; padding: .85rem 1rem; }
.shine-doc__plancells > div + div { border-left: 1px solid var(--shine-border); }
.shine-doc__plancells span { font-size: .74rem; color: var(--shine-faint); }
.shine-doc__plancells > div:first-child span { font-size: .95rem; font-weight: 700; color: var(--shine-text); }
.shine-doc__plancells b { font-size: .88rem; font-weight: 600; color: var(--shine-text); }
.shine-doc__plancells > div:first-child b { font-size: .8rem; font-weight: 400; color: var(--shine-muted); }
.shine-doc__covers { margin: 0; padding: .7rem 1rem; border-top: 1px solid var(--shine-border); font-size: .8rem; color: var(--shine-muted); }

.shine-doc__tiles { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: .6rem; }
.shine-doc__tile { display: grid; align-content: start; gap: .2rem; padding: .8rem .9rem; border: 1px solid var(--shine-border); border-radius: 12px; background: var(--shine-bg); min-width: 0; }
.shine-doc__tile--wide { grid-column: span 2; }
.shine-doc__tile span { font-size: .74rem; color: var(--shine-faint); }
.shine-doc__tile b { font-size: .9rem; font-weight: 600; color: var(--shine-text); overflow-wrap: anywhere; }
.shine-doc__tile b.is-none { color: var(--shine-faint); font-weight: 400; }
.shine-doc__tile small { font-size: .76rem; color: var(--shine-muted); }

.shine-doc__tablewrap { overflow-x: auto; }
.shine-doc__table { width: 100%; border-collapse: collapse; font-size: .9rem; }
.shine-doc__table th {padding: 0 .5rem .6rem;font-size: .8rem;font-weight: 400;color: var(--shine-faint);border-bottom: 1px solid var(--shine-border);text-align: left;}
.shine-doc__table td { padding: .7rem .5rem; color: var(--shine-muted); border-bottom: 1px dashed color-mix(in srgb, var(--shine-border) 80%, transparent); }
.shine-doc__table th:first-child, .shine-doc__table td:first-child { padding-left: 0; width: 1%; white-space: nowrap; }
.shine-doc__table th:last-child, .shine-doc__table td:last-child { padding-right: 0; }
.shine-doc__table .text-end { text-align: right; }
.shine-doc__num { white-space: nowrap; font-weight: 600; color: var(--shine-text) !important; }
.shine-doc__total td { border-bottom: 0; padding-top: 1rem; font-weight: 700; color: var(--shine-text); }
.shine-doc__total.is-paid .shine-doc__num { color: #1dbb60 !important; }
.shine-doc__total.is-due .shine-doc__num { color: var(--shine-accent) !important; font-size: 1.05rem; }

.shine-doc__indicators { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.6fr); gap: 1.2rem; }
.shine-doc__gauges { display: grid; gap: .6rem; align-content: start; }
.shine-doc__gauge { display: grid; justify-items: center; gap: .4rem; margin: 0; padding: .9rem; border: 1px solid var(--shine-border); border-radius: 12px; background: var(--shine-bg); text-align: center; }
.shine-doc__gauge span, .shine-doc__gauge figcaption { font-size: .76rem; color: var(--shine-faint); }
.shine-doc__gauge b { font-size: .95rem; color: var(--shine-text); }
.shine-doc__gauge img { border-radius: 8px; }
.shine-doc__damageimg { min-width: 0; }
/* the schematic is drawn on white; frame it like a sheet */
.shine-doc__sheet { padding: .8rem; border-radius: 14px; background: #fff; text-align: center; }
.shine-doc__sheet img { max-width: 100%; max-height: 300px; height: auto; }

.shine-doc__terms { font-size: .92rem; line-height: 1.75; color: var(--shine-muted); overflow-wrap: anywhere; }
.shine-doc__terms h1, .shine-doc__terms h2, .shine-doc__terms h3, .shine-doc__terms h4 { margin: 1.6rem 0 .6rem; font-family: var(--shine-font-display); font-weight: 600; font-size: 1rem; color: var(--shine-text); }
.shine-doc__terms p { margin: 0 0 .9rem; }
.shine-doc__terms strong, .shine-doc__terms b { color: var(--shine-text); font-weight: 600; }
.shine-doc__terms a { color: var(--shine-accent); }
.shine-doc__terms ul, .shine-doc__terms ol { padding-left: 1.3rem; margin: 0 0 .9rem; }
.shine-doc__terms li::marker { color: var(--shine-accent); }
.shine-doc__terms [style*="color"] { color: inherit !important; }
.shine-doc__terms [style*="background"] { background: none !important; }

.shine-doc__numbered { display: grid; gap: .5rem; margin: 0; padding: 0; list-style: none; counter-reset: n; }
.shine-doc__numbered li { counter-increment: n; display: flex; gap: .7rem; padding: .7rem .85rem; border: 1px solid var(--shine-border); border-radius: 12px; background: var(--shine-bg); font-size: .88rem; color: var(--shine-text); }
.shine-doc__numbered li::before { content: counter(n); flex: 0 0 22px; height: 22px; display: grid; place-items: center; border-radius: 7px; background: color-mix(in srgb, var(--shine-text) 8%, transparent); color: var(--shine-muted); font-size: .72rem; font-weight: 700; }

/* ---- signature panel ---- */
.shine-doc__side { position: sticky; top: 96px; min-width: 0; }
.shine-doc__panel {
	padding: 1.5rem;
	border: 1px solid var(--shine-border);
	border-radius: 22px;
	display: grid;
	gap: .9rem;
	box-shadow:  0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-doc__panel.is-todo {
	border: 1px solid var(--shine-border);
}
.shine-doc__panel.is-ok {border-color: var(--shine-border);}
.shine-doc__panel.is-off { border-color: color-mix(in srgb, var(--shine-danger) 40%, var(--shine-border)); }
.shine-doc__seal {
	width: 56px;
	height: 56px;
	display: grid;
	place-items: center;
	border-radius: 50%;
	background: color-mix(in srgb, #1dbb60 14%, transparent);
	border: 1px solid color-mix(in srgb, #1dbb60 45%, transparent);
	color: #1dbb60;
}
.shine-doc__seal.is-todo { background: color-mix(in srgb, var(--shine-accent) 14%, transparent); border-color: color-mix(in srgb, var(--shine-accent) 45%, transparent); color: var(--shine-accent); }
.shine-doc__ptitle { margin: 0; font-family: var(--shine-font-display); font-size: 1.3rem; font-weight: 600; letter-spacing: -.01em; color: var(--shine-text); }
.shine-doc__eyebrow { margin: 0; font-size: .72rem; letter-spacing: .12em; text-transform: uppercase; color: var(--shine-danger); }
.shine-doc__text { margin: 0; font-size: .9rem; line-height: 1.6; color: var(--shine-muted); }
.shine-doc__text b { color: var(--shine-text); font-weight: 600; }
.shine-doc__updated { margin: 0; font-size: .82rem; color: var(--shine-faint); }
.shine-doc__updated b { color: var(--shine-text); font-weight: 600; }
.shine-doc__dl--proof .shine-doc__row { grid-template-columns: minmax(0, 1fr); gap: .1rem; font-size: .85rem; }
.shine-doc__dl--proof { gap: .7rem; padding: .9rem; border: 1px solid var(--shine-border); border-radius: 12px; background: var(--shine-bg); }
.shine-doc__opts { display: grid; grid-template-columns: 1fr 1fr; gap: .5rem; }
.shine-doc__opt {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: .45rem;
	height: 46px;
	border: 1px solid var(--shine-border);
	border-radius: 50px;
	font-size: .88rem;
	font-weight: 600;
	color: var(--shine-text);
	transition: border-color var(--shine-dur) var(--shine-ease), color var(--shine-dur) var(--shine-ease);
}
.shine-doc__opt svg { color: var(--shine-accent); }
.shine-doc__opt:hover { border-color: var(--shine-accent); color: var(--shine-accent); }
.shine-doc__agree { margin: .2rem 0 .9rem; }
.shine-doc__signbtn {width: 100%;height: 54px;justify-content: center;gap: .4rem;}
.shine-doc__modalbody { padding: 18px 22px 22px; }
.shine-doc__modalactions { display: flex; justify-content: center; margin-top: 1rem; }

@media (max-width: 1100px) {
	.shine-doc__grid { grid-template-columns: minmax(0, 1fr); }
	/* on a phone the signature comes first: it is what the page is for */
	.shine-doc__side { position: static; order: -1; }
	.shine-doc__tiles { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 640px) {
	.shine-doc__paper { padding: 1rem; }
	.shine-doc__two, .shine-doc__dl--3, .shine-doc__indicators { grid-template-columns: minmax(0, 1fr); }
	.shine-doc__plancells { grid-template-columns: minmax(0, 1fr); }
	.shine-doc__plancells > div + div { border-left: 0; border-top: 1px solid var(--shine-border); }
	.shine-doc__row { grid-template-columns: minmax(0, 1fr); gap: .1rem; }
}

/* Print / PDF: one under the other, so a long label never runs out of room */
.shine-doc__opts { grid-template-columns: minmax(0, 1fr); }

/* ===============================  TRANSACTIONS  ================================
   views/order/client_booking_payments.php */
.shine-tx__figs { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1rem; }
.shine-tx__fig { display: grid; gap: .3rem; min-width: 0; }
.shine-tx__fig span { font-size: .78rem; color: var(--shine-faint); }
.shine-tx__fig b {
	font-family: var(--shine-font-display);
	font-size: clamp(1.25rem, 3vw, 1.1rem);
	font-weight: 600;
	letter-spacing: -.02em;
	color: var(--shine-text);
	white-space: nowrap;
}
.shine-tx__fig.is-paid b { color: #1dbb60; }
.shine-tx__fig.is-due b { color: var(--shine-danger); }
.shine-tx__fig.is-clear b { color: var(--shine-faint); }
.shine-tx__bar { height: 8px; margin-top: 1.3rem; border-radius: 100px; background: color-mix(in srgb, var(--shine-text) 8%, transparent); overflow: hidden; }
.shine-tx__bar i { display: block; height: 100%; border-radius: inherit; background: #1dbb60; }
.shine-tx__foot { display: flex; align-items: center; justify-content: space-between; gap: 1rem; margin-top: .7rem; font-size: .85rem; color: var(--shine-muted); }
.shine-tx__foot b { color: var(--shine-text); }
.shine-tx__inv {
	display: inline-flex;
	align-items: center;
	gap: .35rem;
	padding: .5rem .9rem;
	border: 1px solid var(--shine-border);
	border-radius: 11px;
	font-weight: 600;
	color: var(--shine-text);
	transition: border-color var(--shine-dur) var(--shine-ease), color var(--shine-dur) var(--shine-ease);
}
.shine-tx__inv:hover { border-color: var(--shine-accent); color: var(--shine-accent); }

.shine-tx__list { display: grid; gap: .5rem; }
.shine-tx__row {
	display: grid;
	grid-template-columns: auto minmax(0, 1fr) auto;
	align-items: center;
	gap: .9rem;
	padding: .8rem .95rem;
	border: 1px solid var(--shine-border);
	border-radius: 14px;
	background: var(--shine-bg);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-tx__icon {width: 55px;height: 48px;display: grid;place-items: center;border-radius: 10px;}
.shine-tx__row.is-out .shine-tx__icon { background: color-mix(in srgb, var(--shine-danger) 13%, transparent); color: var(--shine-danger); }
.shine-tx__row.is-in .shine-tx__icon { background: color-mix(in srgb, #1dbb60 13%, transparent); color: #1dbb60; }
.shine-tx__main { display: grid; gap: .2rem; min-width: 0; }
.shine-tx__main b { font-weight: 600; font-size: .92rem; color: var(--shine-text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.shine-tx__main small { display: flex; align-items: center; gap: .5rem; flex-wrap: wrap; font-size: .76rem; color: var(--shine-faint); }
.shine-tx__type { padding: .05rem .5rem; border: 1px solid var(--shine-border); border-radius: 100px; font-size: .7rem; }
.shine-tx__row.is-out .shine-tx__type { border-color: color-mix(in srgb, var(--shine-danger) 40%, transparent); color: var(--shine-danger); }
.shine-tx__row.is-in .shine-tx__type { border-color: color-mix(in srgb, #1dbb60 40%, transparent); color: #1dbb60; }
.shine-tx__amt { font-weight: 700; white-space: nowrap; }
.shine-tx__row.is-out .shine-tx__amt { color: var(--shine-text); }
.shine-tx__row.is-in .shine-tx__amt { color: #1dbb60; }
.shine-tx__total {display: flex;align-items: baseline;justify-content: space-between;gap: 1rem;margin-top: 1rem;padding-top: 1rem;}
.shine-tx__total span { font-weight: 600; color: var(--shine-muted); }
.shine-tx__total b {font-family: var(--shine-font-display);font-size: 1.2rem;font-weight: 600;}
@media (max-width: 640px) {
	.shine-tx__figs { grid-template-columns: minmax(0, 1fr); gap: .8rem; }
	.shine-tx__fig { grid-template-columns: minmax(0, 1fr) auto; align-items: baseline; }
	.shine-tx__fig b { font-size: 1.15rem; }
	.shine-tx__main b { white-space: normal; }
}

/* ===============================  NOTES  =======================================
   views/order/client_booking_notes.php — a timeline down a gold line */
.shine-nt { position: relative; display: grid; gap: 1rem; margin: 0; padding: 0; list-style: none; }
.shine-nt::before {
	content: "";
	position: absolute;
	left: 17px;
	top: 18px;
	bottom: 18px;
	border-left: 2px dotted color-mix(in srgb, var(--shine-accent) 55%, transparent);
}
.shine-nt__item { position: relative; display: grid; grid-template-columns: 36px minmax(0, 1fr); gap: 1rem; }
.shine-nt__dot {
	position: relative;
	z-index: 1;
	width: 36px;
	height: 36px;
	display: grid;
	place-items: center;
	border-radius: 11px;
	border: 1px solid color-mix(in srgb, var(--shine-accent) 45%, transparent);
	background: color-mix(in srgb, var(--shine-accent) 14%, var(--shine-bg));
	color: var(--shine-accent);
}
.shine-nt__body {
	min-width: 0;
	padding: .9rem 1.1rem;
	border: 1px solid var(--shine-border);
	border-radius: 4px 16px 16px 16px;
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-nt__meta { display: flex; align-items: baseline; gap: .6rem; flex-wrap: wrap; margin: 0 0 .45rem; }
.shine-nt__meta b { font-size: .88rem; font-weight: 700; color: var(--shine-text); }
.shine-nt__meta span { font-size: .76rem; color: var(--shine-faint); }
.shine-nt__text {margin: 0;line-height: 1.6;color: var(--shine-muted);overflow-wrap: anywhere;white-space: pre-line;}

/* ==========================  INCIDENTS + INVOICES (LISTS)  ======================
   views/client_incidents/incidents.php, views/client_invoices/client_invoices.php.
   Both reuse the My bookings bar, tabs, card rows and empty state; these add a
   two-text-column row (.shine-bkl__item--cols), the ?order= filter line and
   numbered pagination. */
.shine-bkl__filter { margin: 0; font-size: .85rem; color: var(--shine-muted); }
.shine-bkl__filter a { margin-left: .6rem; color: var(--shine-accent); text-decoration: underline; text-underline-offset: 3px; }

/* incident card: type + date | vehicle + plates | status + cost */
/* fixed first column: every row is its own grid, so only fixed tracks line up across rows */
.shine-bkl__item.shine-bkl__item--cols {grid-template-columns: 220px minmax(0, 1fr) auto;gap: 1.1rem 2rem;padding: 1rem 1.2rem;box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;}
.shine-bkl__col { display: grid; gap: .2rem; min-width: 0; }
.shine-bkl__strong { font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.shine-bkl__sub { font-size: .84rem; color: var(--shine-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* invoices: a refund / deposit return that has gone out is green, one still pending is gold */
.shine-bkl__sub.is-ok, .shine-bkl__price.is-ok { color: #1dbb60; }
.shine-bkl__price.is-warn { color: var(--shine-accent); }

.shine-bkl__foot { display: flex; align-items: center; justify-content: space-between; gap: 1rem; flex-wrap: wrap; margin-top: 1.2rem; font-size: .85rem; color: var(--shine-faint); }
.shine-bkl__pages { display: flex; gap: .25rem; }
.shine-bkl__pages a {
	min-width: 38px;
	height: 38px;
	display: grid;
	place-items: center;
	border-radius: 12px;
	color: var(--shine-muted);
	font-variant-numeric: tabular-nums;
	transition: background-color var(--shine-dur) var(--shine-ease), color var(--shine-dur) var(--shine-ease);
}
.shine-bkl__pages a:hover { color: var(--shine-text); background: color-mix(in srgb, var(--shine-text) 6%, transparent); }
.shine-bkl__pages a.is-on { color: var(--shine-accent); background: color-mix(in srgb, var(--shine-accent) 12%, transparent); font-weight: 700; }

/* phone: type + status on top, vehicle + cost below. Overrides the booking
   ticket layout (same specificity, later in the file). */
@media (max-width: 720px) {
	.shine-bkl__item.shine-bkl__item--cols {
		grid-template-columns: minmax(0, 1fr) auto;
		grid-template-areas: none;
		gap: .6rem .9rem;
		padding: 14px;
	}
	.shine-bkl__item.shine-bkl__item--cols .shine-bkl__title { grid-area: auto; flex-direction: row; align-items: baseline; }
	.shine-bkl__item.shine-bkl__item--cols .shine-bkl__col:nth-child(2) { grid-column: 1; grid-row: 2; }
	.shine-bkl__item.shine-bkl__item--cols .shine-bkl__side { grid-area: auto; grid-column: 2; grid-row: 1 / span 2; }
}

/* ===============================  INCIDENT DETAILS  =============================
   views/client_incidents/incident_details.php. Booking details' summary, menu,
   grid, gallery and table (.shine-bkd__*); the pieces below are only what an
   incident has and a booking does not. */
.shine-ind__facts { grid-template-columns: repeat(4, minmax(0, 1fr)); margin-top: 1.2rem; }
.shine-ind .shine-bkd__money { margin-bottom: 0; }
.shine-ind__grid { grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); }
.shine-ind__media { display: grid; grid-template-columns: minmax(0, 1fr); gap: .6rem; }
.shine-ind__media .shine-bkd__gallery { border-radius: 18px; }
.shine-ind__media .shine-bkd__h { margin-bottom: .4rem; } /* + the .6rem gap = the 1rem under "Details" */
.shine-ind__thumbs { width: 100%; } /* swiper's auto margins stop a grid item from stretching */
.shine-ind__thumbs .swiper-slide {
	aspect-ratio: 4 / 3;
	overflow: hidden;
	border: 1px solid var(--shine-border);
	border-radius: 12px;
	cursor: pointer;
	opacity: .55;
	transition: opacity var(--shine-dur) var(--shine-ease), border-color var(--shine-dur) var(--shine-ease);
}
.shine-ind__thumbs .swiper-slide img { width: 100%; height: 100%; object-fit: cover; display: block; }
.shine-ind__thumbs .swiper-slide:hover { opacity: .85; }
.shine-ind__thumbs .swiper-slide-thumb-active { opacity: 1; border-color: var(--shine-accent); }
.shine-ind__text { margin: 0; font-size: .95rem; line-height: 1.7; color: var(--shine-muted); overflow-wrap: anywhere; }

/* the bordered box the booking pages use for specs and "none" */
.shine-ind__box {
	padding: 1rem 1.1rem;
	border: 1px solid var(--shine-border);
	border-radius: 14px;
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-ind__rows { padding-top: .2rem; padding-bottom: .2rem; }
.shine-ind__row { display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding: .75rem 0; }
.shine-ind__row + .shine-ind__row { border-top: 1px solid var(--shine-border); }
.shine-ind__label { display: grid; gap: .1rem; min-width: 0; font-size: .9rem; color: var(--shine-text); }
.shine-ind__label b { font-weight: 600; }
.shine-ind__row .shine-bkl__pay { order: 0; flex: 0 0 auto; } /* booking list moves its tag first on desktop */
.shine-ind__label small { font-size: .78rem; color: var(--shine-faint); overflow-wrap: anywhere; }
.shine-ind__strong { color: var(--shine-text) !important; font-weight: 600; }
.shine-ind .shine-bkd__num { white-space: nowrap; color: var(--shine-text); }

.shine-ind__company { padding-top: .2rem; font-size: .85rem; line-height: 1.6; color: var(--shine-muted); }
.shine-ind__company b { color: var(--shine-text); }
.shine-ind__company p { margin: .3rem 0 0; }
.shine-ind__foot { padding-top: .8rem; margin-top: .8rem !important; border-top: 1px dashed var(--shine-border); font-size: .78rem; color: var(--shine-faint); }

@media (max-width: 991px) {
	.shine-ind__grid { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 640px) {
	.shine-ind__facts { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* ===============================  INVOICE (PAY)  ================================
   views/client_invoices/pay_invoice.php. The contract page's document + side
   panel (.shine-doc__*); payment tiles are booking review's (.payment-option,
   shared through :is(.shine-rv, .shine-inv)). */
.shine-inv__head { display: flex; align-items: flex-start; justify-content: space-between; gap: 1.4rem; flex-wrap: wrap; padding-bottom: 1.5rem; }
.shine-inv__logo img { max-height: 44px; max-width: 180px; display: block; }
.shine-inv__logo b { font-family: var(--shine-font-display); font-size: 1.3rem; color: var(--shine-text); }
.shine-inv__meta { flex: 1 1 420px; max-width: 560px; }
.shine-inv__meta dd { font-weight: 600; }
.shine-inv__meta dd.is-ok { color: #1dbb60; }
.shine-inv__meta dd.is-due { color: var(--shine-danger); }

.shine-inv__party b { display: block; margin-bottom: .4rem; color: var(--shine-text); }
.shine-inv__party p { margin: 0; font-size: .88rem; line-height: 1.65; color: var(--shine-muted); overflow-wrap: anywhere; }
.shine-inv__party--to { text-align: right; }

.shine-inv__desc { color: var(--shine-text) !important; overflow-wrap: anywhere; }
.shine-inv__sums { display: grid; gap: .45rem; width: min(100%, 320px); margin: 1.2rem 0 0 auto; }
.shine-inv__sums > div { display: flex; justify-content: space-between; gap: 1rem; font-size: .9rem; }
.shine-inv__sums dt { font-weight: 400; color: var(--shine-muted); }
.shine-inv__sums dd { margin: 0; font-weight: 600; color: var(--shine-text); white-space: nowrap; }
.shine-inv__grand { margin-top: .3rem; padding-top: .7rem; border-top: 1px solid var(--shine-border); }
.shine-inv__grand dt { color: var(--shine-text) !important; font-weight: 700 !important; }
.shine-inv__grand dd { font-size: 1.05rem; }
.shine-inv__grand.is-ok dd { color: #1dbb60; }
.shine-inv__grand.is-due dd {}

/* bank accounts: 1 to 3 per row, and the row is always full — auto-fit drops
   empty columns so two accounts share the width; the track never goes below a
   third of the row (so never 4+), nor below 200px (so it wraps on small screens) */
.shine-inv__banks { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, max(200px, calc((100% - 1.4rem) / 3))), 1fr)); gap: .7rem; }
.shine-inv__bank {display: grid;gap: .7rem;padding: 1rem;border: 1px solid var(--shine-border);border-radius: 14px;}
.shine-inv__bank > b { color: var(--shine-text); font-size: .92rem; }
.shine-inv__bank .shine-doc__row { font-size: .84rem; }
.shine-inv__ref { margin: 1rem 0 0; font-size: .9rem; color: var(--shine-muted); }
.shine-inv__ref b { color: var(--shine-text); }
.shine-inv__foot { margin-top: 1.5rem; padding-top: 1rem; border-top: 1px solid var(--shine-border); font-size: .78rem; color: var(--shine-faint); text-align: center; }
.shine-inv__foot span { margin: 0 .4rem; }

/* the panel */
.shine-inv__status { display: flex; align-items: center; justify-content: space-between; gap: .6rem; flex-wrap: wrap; }
.shine-inv__due { display: grid; gap: .15rem; padding: .9rem 0; border-top: 1px solid var(--shine-border); border-bottom: 1px solid var(--shine-border); }
.shine-inv__due span {color: var(--shine-faint);}
.shine-inv__due b { font-family: var(--shine-font-display); font-size: 1.8rem; font-weight: 700; letter-spacing: -.01em; color: var(--shine-text); }
.shine-inv__due b.is-ok { color: #1dbb60; }
.shine-inv__pay { display: grid; gap: .55rem; }
.shine-inv__pay .shine-rv__label { margin: 0; }
.shine-inv__paybtn { width: 100%; height: 52px; justify-content: center; gap: .4rem; }
.shine-doc__panel.is-wait { border-color: var(--shine-border); }

@media (max-width: 640px) {
	.shine-inv__wide { display: none; }
	.shine-inv__party--to { text-align: left; }
	.shine-inv__sums { width: 100%; }
}

/* ===============================  VEHICLE SELECT  ===============================
   views/booking_2.php. Fleet cards (.shine-vh in .shine-fleet), fleet chips and
   selects; the trip line, the total + actions and the details window are its
   own. Filters are links / navigating selects, as in default. */
.shine-vs { padding-top: clamp(1.5rem, 4vw, 2.4rem); padding-bottom: clamp(3rem, 6vw, 5rem); }
.shine-vs > .shine-note { margin-bottom: 1.2rem; }
.shine-vs__trip {
	display: flex; align-items: center; flex-wrap: wrap; gap: .5rem .8rem;
	margin: 0 0 1.4rem; font-size: .92rem; color: var(--shine-text);
}
.shine-vs__trip i { width: 34px; height: 0; border-top: 1px dashed color-mix(in srgb, var(--shine-text) 30%, transparent); }
.shine-vs__trip b { margin-left: .4rem; padding: .2rem .7rem; border: 1px solid var(--shine-border); border-radius: 100px; font-size: .8rem; font-weight: 600; color: var(--shine-muted); }

.shine-vs__filters { display: flex; align-items: flex-end; justify-content: space-between; gap: 1rem 2rem; flex-wrap: wrap; margin-bottom: 2.2rem; }
.shine-vs__cats { display: flex; gap: .5rem; overflow-x: auto; scrollbar-width: none; min-width: 0; flex: 1 1 380px; }
.shine-vs__cats::-webkit-scrollbar { display: none; }
.shine-vs__cats .shine-chip { text-decoration: none; }
.shine-vs__sels { display: grid; grid-template-columns: repeat(2, minmax(150px, 200px)); gap: 1.2rem; }

.shine-vs__grid { margin-bottom: 1rem; }
.shine-vh__head .shine-vs__model { display: block; font-size: .82rem; color: var(--shine-faint); }
.shine-vs__foot { border-top: 1px solid var(--shine-border); }
.shine-vs__total { display: grid; gap: .1rem; min-width: 0; }
.shine-vs__total b { font-family: var(--shine-font-display); font-size: 1.22rem; font-weight: 600; letter-spacing: -.02em; color: var(--shine-text); white-space: nowrap; }
.shine-vs__total span { font-size: .8rem; color: var(--shine-faint); }
.shine-vs__total em { font-style: normal; color: #1dbb60; }
.shine-vs__actions { display: flex; align-items: center; justify-content: space-between; gap: .8rem; margin-top: .9rem; }
.shine-vs__select { height: 44px; padding: 0 1.2rem; gap: .35rem; }
.shine-vs__more { font-size: .85rem; color: var(--shine-muted); text-decoration: underline; text-underline-offset: 3px; }
.shine-vs__more:hover { color: var(--shine-accent); }
.shine-vs__emptyicon { width: 56px; color: var(--shine-faint); }
.shine-vs .shine-bkl__empty .shine-btn { margin-top: .4rem; }

/* details window */
.shine-vs__modal {
	position: fixed; inset: 0; z-index: 1060;
	display: none; place-items: center;
	padding: 20px;
	background: rgba(0, 0, 0, .66);
}
.shine-vs__modal.show { display: grid; }
body.shine-vs-lock { overflow: hidden; }
.shine-vs__dialog {
	position: relative;
	width: min(100%, 1040px);
	max-height: calc(100vh - 40px);
	overflow-y: auto;
	padding: clamp(1.2rem, 3vw, 2rem);
	border: 1px solid var(--shine-border);
	border-radius: 24px;
	background: var(--shine-bg);
}
.shine-vs__close { position: absolute; top: 14px; right: 14px; z-index: 3; }
.shine-vs__loading { display: grid; place-items: center; min-height: 320px; color: var(--shine-accent); }
.shine-vs__mtitle { margin: 0 3rem 1.2rem 0; font-family: var(--shine-font-display); font-size: clamp(1.3rem, 3vw, 1.7rem); font-weight: 600; letter-spacing: -.02em; color: var(--shine-text); }
.shine-vs__mgrid { display: grid; grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr); gap: 1.6rem; align-items: start; }
.shine-vs__gallery { border-radius: 18px; overflow: hidden; background: color-mix(in srgb, var(--shine-text) 6%, transparent); }
.shine-vs__gallery .swiper-container { position: relative; overflow: hidden; aspect-ratio: 4 / 3; }
.shine-vs__gallery .swiper-slide { display: grid; place-items: center; height: 100%; color: var(--shine-accent); }
.shine-vs__gallery .swiper-slide img { width: 100%; height: 100%; object-fit: cover; display: block; }
.shine-vs__gallery .shine-vh__noimg { width: 100%; height: 100%; display: grid; place-items: center; color: var(--shine-faint); }
.shine-vs__gallery .shine-vh__noimg svg { width: 110px; }
.shine-vs__gallery .swiper-button-next, .shine-vs__gallery .swiper-button-prev {
	width: 40px; height: 40px; border-radius: 50%;
	background: rgba(0, 0, 0, .45); color: #fff;
}
.shine-vs__gallery .swiper-button-next::after, .shine-vs__gallery .swiper-button-prev::after { font-size: 15px; font-weight: 700; }
.shine-vs__mside { display: grid; gap: 1rem; }
.shine-vs__mprice { display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding: 1rem 1.1rem; border: 1px solid var(--shine-border); border-radius: 14px; }
.shine-vs__mprice p { display: grid; margin: 0; font-size: .8rem; color: var(--shine-faint); }
.shine-vs__mprice p b { font-size: .9rem; color: var(--shine-text); }
.shine-vs__mprice h3 { margin: 0; font-family: var(--shine-font-display); font-size: 1.5rem; font-weight: 600; color: var(--shine-text); white-space: nowrap; }
.shine-vs__details { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .1rem 1.2rem; }
.shine-vs__details .grid-item { display: grid; gap: .1rem; padding: .55rem 0; border-bottom: 1px solid var(--shine-border); font-size: .88rem; color: var(--shine-text); overflow-wrap: anywhere; }
.shine-vs__details .grid-item .text-muted { font-size: .74rem; color: var(--shine-faint) !important; }
.shine-vs__mactions { display: grid; grid-template-columns: 1fr auto; gap: .6rem; }
.shine-vs__mactions .shine-btn { height: 50px; justify-content: center; gap: .35rem; }

@media (max-width: 860px) {
	.shine-vs__mgrid { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 640px) {
	.shine-vs__sels { grid-template-columns: repeat(2, minmax(0, 1fr)); width: 100%; }
	.shine-vs__modal { padding: 0; align-items: end; }
	.shine-vs__dialog { max-height: 92vh; border-radius: 22px 22px 0 0; }
	.shine-vs__mactions { grid-template-columns: minmax(0, 1fr); }
}
.shine-vs .shine-vh__head { display: grid; gap: .15rem; }
/* three wider cards (no filter column here), and the actions stacked so a
   long translated "Select this" never wraps into two lines */
.shine-vs__grid { grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 3rem 2rem; }
.shine-vs__actions { display: grid; grid-template-columns: minmax(0, 1fr); justify-items: center; gap: .55rem; }
.shine-vs__select { width: 100%; justify-content: center; white-space: nowrap; }
@media (max-width: 560px) { .shine-vs__grid { grid-template-columns: minmax(0, 1fr); } }
/* default's stylesheet paints #vehicleDetailsPrice white; the dialog must not scroll sideways */
.shine-vs #vehicleDetailsPrice, #detailModal #vehicleDetailsPrice { background: none !important; box-shadow: none !important; }
.shine-vs__dialog { overflow-x: hidden; }
.shine-vs__mactions { grid-template-columns: minmax(0, 1fr); }
.shine-vs__mactions .shine-btn { width: 100%; white-space: nowrap; }

/* ===============================  BOOKING EXTRAS  ===============================
   views/booking_extras.php. booking_1's plan / product / summary pieces; the
   layout, the car strip and the total lines are its own. */
.shine-ex { padding-top: clamp(1.5rem, 4vw, 2.4rem); padding-bottom: clamp(3rem, 6vw, 5rem); }
.shine-ex__grid { display: grid; grid-template-columns: minmax(0, 1fr) 360px; gap: 2rem; align-items: start; }
.shine-ex__main { display: grid; gap: 2rem; min-width: 0; }
.shine-ex__side { position: sticky; top: 96px; display: grid; gap: .9rem; min-width: 0; }

.shine-ex__car { display: flex; align-items: center; gap: 1rem; padding: .8rem; border: 1px solid var(--shine-border); border-radius: 18px; background: color-mix(in srgb, var(--shine-text) 4%, var(--shine-bg)); }
.shine-ex__carimg { flex: 0 0 120px; aspect-ratio: 4 / 3; display: grid; place-items: center; overflow: hidden; border-radius: 12px; background: color-mix(in srgb, var(--shine-text) 7%, transparent); color: var(--shine-faint); }
.shine-ex__carimg img { width: 100%; height: 100%; object-fit: cover; display: block; }
.shine-ex__carimg svg { width: 40px; }
.shine-ex__cartext { display: grid; gap: .15rem; min-width: 0; flex: 1 1 auto; }
.shine-ex__cartext b { font-family: var(--shine-font-display); font-size: 1.15rem; font-weight: 600; color: var(--shine-text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.shine-ex__cartext small { font-size: .82rem; color: var(--shine-faint); }
.shine-ex__change { flex: 0 0 auto; font-size: .84rem; color: var(--shine-muted); text-decoration: underline; text-underline-offset: 3px; }
.shine-ex__change:hover { color: var(--shine-accent); }

.shine-ex__search { position: relative; display: block; margin: 0; }
.shine-ex__search svg { position: absolute; left: 14px; top: 50%; transform: translateY(-50%); color: var(--shine-faint); pointer-events: none; }
body .shine-ex__search .shine-input { padding-left: 2.6rem; }
.shine-ex__mult { color: var(--shine-faint); font-weight: 400; margin-right: .2rem; }
.shine-ex .shine-bk__prod .out-of-stock-msg { color: var(--shine-danger); }
#protectionCards.is_required .shine-bk__plan { border-color: color-mix(in srgb, var(--shine-danger) 55%, var(--shine-border)); }

.shine-ex__lines { display: grid; gap: .55rem; margin: 1rem 0 0; padding-top: 1rem; border-top: 1px solid var(--shine-border); }
.shine-ex__lines > div { display: flex; justify-content: space-between; gap: 1rem; font-size: .88rem; }
.shine-ex__lines dt { display: inline-flex; align-items: center; gap: .3rem; font-weight: 400; color: var(--shine-muted); }
.shine-ex__lines dd { margin: 0; font-weight: 600; color: var(--shine-text); white-space: nowrap; }
.shine-ex__lines .is-ok dd { color: #1dbb60; }
.shine-ex__cta { width: 100%; height: 54px; justify-content: center; gap: .4rem; }

@media (max-width: 991px) {
	.shine-ex__grid { grid-template-columns: minmax(0, 1fr); }
	.shine-ex__side { position: static; }
}
@media (max-width: 560px) {
	.shine-ex__car { flex-wrap: wrap; }
	.shine-ex__carimg { flex-basis: 96px; }
	.shine-ex__change { width: 100%; }
}

/* ===============================  ON-SITE PAYMENT  ==============================
   views/payment/adyen.php, revolut.php (+ _shine_pay_top / _shine_pay_bottom),
   stripe.php. The extras page's grid, car strip and summary; the providers
   draw their own fields for white, so the widget sits on a light panel. */
.shine-pay { padding-top: clamp(1.5rem, 4vw, 2.4rem); padding-bottom: clamp(3rem, 6vw, 5rem); }
.shine-pay__dates { display: inline-flex; align-items: center; gap: .5rem; margin-top: .25rem; font-size: .84rem; color: var(--shine-muted); }
.shine-pay__dates i { width: 26px; height: 0; border-top: 1px dashed color-mix(in srgb, var(--shine-text) 30%, transparent); }
.shine-pay__inv { cursor: default; }
.shine-pay__inv:hover { border-color: var(--shine-border); }
.shine-pay__box .shine-bkd__h { margin-bottom: .8rem; }
.shine-pay__widget {
	padding: clamp(1rem, 3vw, 1.6rem);
	border-radius: 18px;
	background: #ffffff;
	color: #1b1f24;
	min-height: 120px;
}
.shine-pay__btn { width: 100%; height: 52px; justify-content: center; }
.shine-pay__err { margin-top: 1rem; font-size: .88rem; color: #d6336c; }
.shine-pay__fail { margin: 0; font-size: .92rem; color: #d6336c; }
.shine-pay--stripe .shine-pay__widget { max-width: 1000px; margin: 0 auto; padding: .5rem; }

/* ---- home hero: centred, with a welcome line above a bigger title ---- */
.shine-hero--center {align-items: center;min-height: clamp(335px, 37vh, 560px);}
.shine-hero--center .shine-hero__inner { padding-bottom: 0; text-align: center; }
.shine-hero__eyebrow {
	margin: 0 0 .9rem;
	/* font-size: 14px; */
	color: var(--shine-muted);
	animation: shineHeroFade .7s var(--shine-ease) both;
	animation-delay: 60ms;
}
.shine-hero__eyebrow b { color: var(--shine-accent); font-weight: 600; }
.shine-hero--center .shine-hero__title {font-size: clamp(2.2rem, 7.4vw, 4rem);}
@media (prefers-reduced-motion: reduce) { .shine-hero__eyebrow { animation: none; } }

/* ---- home: "Other vehicles" (fleet cards) ---- */
.shine-hcars { padding: clamp(2rem, 5vw, 3.5rem) 0 clamp(1rem, 3vw, 2rem); }
/* the whole section sits on one panel */
.shine-hcars__card {
	padding: clamp(1.4rem, 4vw, 2.6rem);
	border: 1px solid var(--shine-border);
	border-radius: 26px;
	background: color-mix(in srgb, var(--shine-text) 4%, var(--shine-bg));
}
.shine-hcars__h {
	margin: 0 0 clamp(1.6rem, 3vw, 2.4rem);
	font-family: var(--shine-font-display);
	font-size: clamp(1.5rem, 3.4vw, 1.5rem);
	font-weight: 800;
	text-align: center;
	color: var(--shine-text);
}
.shine-hcars__foot {
	display: grid;
	justify-items: center;
	gap: 1.2rem;
	max-width: 720px;
	margin: clamp(4rem, 4vw, 8rem) auto;
	text-align: center;
}
.shine-hcars__foot p {margin: 0;font-size: .95rem;line-height: 1.6;color: var(--shine-faint);}
.shine-hcars__foot strong { color: var(--shine-text); font-weight: 600; }
.shine-hcars__cta { height: 50px; padding: 0 1.6rem; gap: .4rem; }
/* provider could not start: no white panel behind a lone error line */
.shine-pay__widget:has(.shine-pay__fail) {
	padding: 1.1rem 1.2rem;
	border: 1px solid color-mix(in srgb, var(--shine-danger) 45%, var(--shine-border));
	border-radius: 14px;
	background: color-mix(in srgb, var(--shine-danger) 8%, transparent);
	color: var(--shine-text);
	min-height: 0;
}

/* ===============================  HOME HERO (SPLIT)  ===========================
   views/home.php. Copy left, search panel right, both inside the hero — the
   page opens with something to do rather than a band, a slider and a form. */
.shine-hero__inner--split {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(0, 450px);
	gap: clamp(2rem, 5vw, 4rem);
	align-items: center;
	padding-bottom: clamp(56px, 7vw, 80px);
	padding-top: clamp(140px, 12vw, 80px);
}
.shine-hero:has(.shine-hero__inner--split) {align-items: center;min-height: clamp(560px, 92vh, 60px);}
.shine-hero__copy { min-width: 0; }
.shine-hero__aside { min-width: 0; animation: shineHeroFade .7s var(--shine-ease) both; animation-delay: 220ms; }

/* what the company has, under the title */
.shine-hstats {
	display: flex;
	flex-wrap: wrap;
	gap: .6rem 2.2rem;
	margin: 1.6rem 0 0;
	padding: 0;
	list-style: none;
	animation: shineHeroFade .7s var(--shine-ease) both;
	animation-delay: 160ms;
}
.shine-hstats li { display: flex; align-items: baseline; gap: .45rem; }
.shine-hstats b {font-family: var(--shine-font-display);font-weight: 600;color: var(--shine-accent);}
.shine-hstats span { font-size: .88rem; color: var(--shine-muted); }

/* the panel: glass over the image, not another opaque card */
.shine-hsearch__card {
	padding: clamp(1.2rem, 2.5vw, 1.6rem);
	border: 1px solid color-mix(in srgb, #ffffff 16%, transparent);
	border-radius: 22px;
	background: var(--shine-bg);
	backdrop-filter: blur(16px);
	-webkit-backdrop-filter: blur(16px);
	width: 100%;
}
.shine-hsearch__h {
	margin: 0 0 1.1rem;
	font-family: var(--shine-font-display);
	font-size: 1.15rem;
	font-weight: 800;
	color: var(--shine-text);
}
.shine-hsearch__bar { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .9rem; }
.shine-hsearch .shine-bk__label { margin-bottom: .4rem; }
.shine-hsearch__card .shine-sel select {
	height: 46px;
	padding: 0 2.2rem 0 .8rem;
	border: 1px solid var(--shine-border);
	border-radius: 12px;
	background-color: color-mix(in srgb, var(--shine-bg) 55%, transparent);
	background-position: right .7rem center;
	font-size: .92rem;
}
.shine-hsearch__card .shine-sel select:hover { border-color: color-mix(in srgb, var(--shine-accent) 60%, var(--shine-border)); }
.shine-hsearch__btn { width: 100%; height: 50px; margin-top: 1.1rem; justify-content: center; gap: .45rem; }
.shine-hsearch__or {margin: 1.1rem 0 .7rem;padding-top: 1.1rem;font-size: .74rem;line-height: 1.55;color: var(--shine-muted);margin-bottom: 25px;}
.shine-hsearch__cta { display: inline-flex; align-items: center; gap: .3rem; font-size: .9rem; font-weight: 600; color: var(--shine-accent); }
.shine-hsearch__cta:hover { color: var(--shine-accent-hover); }

@media (max-width: 980px) {
	.shine-hero__inner--split {grid-template-columns: minmax(0, 1fr);gap: 2rem;padding-top: clamp(110px, 18vw, 120px);}
	.shine-hero:has(.shine-hero__inner--split) { min-height: 0; }
	.shine-hero__aside {/* max-width: 520px; */}
}
@media (max-width: 560px) {
	.shine-hsearch__bar { grid-template-columns: minmax(0, 1fr); }
	.shine-hstats { gap: .5rem 1.4rem; }
	.shine-hstats b { font-size: 1.35rem; }
}

/* ===============================  TOOLTIPS  ====================================
   Bootstrap 5.0.2 paints these solid black at .9 opacity — invisible against a
   dark page. Same surface as shine's panels, with a readable border, and the
   arrow filled to match (5.0 has no --bs-tooltip-* variables to override). */
:root { --shine-tip-bg: color-mix(in srgb, var(--shine-text) 7%, var(--shine-bg)); }
.tooltip { font-family: var(--shine-font-ui); }
.tooltip.show { opacity: 1; }
.tooltip-inner {
	max-width: 260px;
	padding: .5rem .75rem;
	border: 1px solid color-mix(in srgb, var(--shine-text) 22%, transparent);
	border-radius: 12px;
	background-color: var(--shine-tip-bg);
	color: var(--shine-text);
	font-size: .82rem;
	line-height: 1.45;
	text-align: left;
	box-shadow: 0 18px 40px -22px rgba(0, 0, 0, .9);
}
.bs-tooltip-top .tooltip-arrow::before,
.bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow::before { border-top-color: var(--shine-tip-bg); }
.bs-tooltip-bottom .tooltip-arrow::before,
.bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow::before { border-bottom-color: var(--shine-tip-bg); }
.bs-tooltip-start .tooltip-arrow::before,
.bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow::before { border-left-color: var(--shine-tip-bg); }
.bs-tooltip-end .tooltip-arrow::before,
.bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow::before { border-right-color: var(--shine-tip-bg); }

/* the arrow as a rotated square, so the bubble's border carries on around it
   (Bootstrap's is a borderless CSS triangle). The bubble sits above it and
   hides the half that points inwards. */
:root { --shine-tip-border: color-mix(in srgb, var(--shine-text) 22%, transparent); }
.tooltip-inner { position: relative; z-index: 1; }
/* the arrow sits ABOVE the bubble: its fill hides the bubble border that would
   otherwise draw a seam across the arrow base, so the outline reads as one shape */
.tooltip .tooltip-arrow { z-index: 2; }
.tooltip .tooltip-arrow::before {
	content: "";
	width: 11px;
	height: 11px;
	border: 1px solid transparent;
	border-radius: 2px;
	background: var(--shine-tip-bg);
	transform: rotate(45deg);
}
.bs-tooltip-top .tooltip-arrow::before,
.bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow::before {
	top: -6px; left: 50%; margin-left: -5.5px;
	border-right-color: var(--shine-tip-border);
	border-bottom-color: var(--shine-tip-border);
}
.bs-tooltip-bottom .tooltip-arrow::before,
.bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow::before {
	bottom: -6px; left: 50%; margin-left: -5.5px;
	border-top-color: var(--shine-tip-border);
	border-left-color: var(--shine-tip-border);
}
.bs-tooltip-start .tooltip-arrow::before,
.bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow::before {
	left: -6px; top: 50%; margin-top: -5.5px;
	border-top-color: var(--shine-tip-border);
	border-right-color: var(--shine-tip-border);
}
.bs-tooltip-end .tooltip-arrow::before,
.bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow::before {
	right: -6px; top: 50%; margin-top: -5.5px;
	border-bottom-color: var(--shine-tip-border);
	border-left-color: var(--shine-tip-border);
}
.tooltip-inner { border-color: var(--shine-tip-border); }

/* the hero's image + grid clip against their own layer, so the hero can let a
   dropdown (home's search panel) hang past its bottom edge */
.shine-hero { overflow: visible; }
.shine-hero__bg { position: absolute; inset: 0; overflow: hidden; z-index: 0; border-radius: inherit; }
/* no hairline under the last panel item — it read as a divider to nothing */
.shine-panel__link:last-child { border-bottom: 0; }

/* ===============================  NO VEHICLES  =================================
   views/_no_vehicles.php — placeholder tiles in the fleet card shape, used by
   home, the fleet page and the booking page when there is nothing to list. */
.shine-empty { display: grid; gap: 1.6rem; }
.shine-empty__grid { gap: 1.2rem; }
.shine-vh--empty {
	display: grid;
	place-items: center;
	align-content: center;
	gap: .9rem;
	aspect-ratio: 4 / 3;
	padding: 1.2rem;
	border: 1px solid var(--shine-border);
	border-radius: 18px;
	background: color-mix(in srgb, var(--shine-text) 4%, var(--shine-bg));
	text-align: center;
}
.shine-empty__icon { color: color-mix(in srgb, var(--shine-text) 14%, transparent); }
.shine-empty__icon svg { width: 72px; height: auto; display: block; }
.shine-empty__label { font-size: .9rem; color: var(--shine-faint); }
.shine-empty__note { display: grid; justify-items: center; gap: .8rem; text-align: center; }
.shine-empty__note p { margin: 0; font-size: .92rem; color: var(--shine-muted); }
.shine-empty__cta { height: 46px; padding: 0 1.4rem; }
@media (max-width: 560px) { .shine-empty__icon svg { width: 56px; } }

/* ---- home: store switched off ---- */
.shine-off__icon {
	color: var(--shine-faint);
	background: color-mix(in srgb, var(--shine-text) 7%, transparent);
	border: 1px solid var(--shine-border);
}
.shine-off__soon { display: inline-flex; align-items: center; gap: .4rem; margin: -.6rem 0 0; font-size: .9rem; color: var(--shine-muted); }
.shine-off__soon svg { color: var(--shine-accent); }
.shine-off__contact { display: flex; flex-wrap: wrap; justify-content: center; gap: .6rem; margin-top: 1.6rem; }
.shine-off__contact .shine-btn { height: 46px; padding: 0 1.2rem; }

/* ===========================  PAGE HEAD  ================================== */
/* Shine has no hero. Pages still pass $shine_hero, and header.php renders it
   as this: crumbs and a title on the white page, same width as everything
   else. With an 'aside' (home's search) it becomes two columns. */
.shine-pagehead {
	width: var(--shine-max);
	margin: clamp(1.6rem, 3vw, 2.4rem) auto 0;
	display: grid;
	gap: 1.5rem 3rem;
}
@media (max-width: 640px) { .shine-pagehead { width: 100%; padding: 0 18px; } }
.shine-pagehead--split { grid-template-columns: minmax(0, 1fr) minmax(0, 440px); align-items: center; }
@media (max-width: 900px) { .shine-pagehead--split { grid-template-columns: minmax(0, 1fr); } }
.shine-pagehead--center .shine-pagehead__copy { text-align: center; justify-items: center; }
.shine-pagehead__copy { display: grid; gap: .6rem; min-width: 0; }
.shine-pagehead .shine-crumbs { margin-bottom: 0; }
.shine-pagehead__eyebrow { color: var(--shine-muted); font-size: 1rem; }
.shine-pagehead__title { font-size: clamp(2rem, 4vw, 2.8rem); }

/* Pages built on Bootstrap's .container (fleet, booking, account…) take the
   same width as everything else in shine. The +24px keeps Bootstrap's 12px
   side padding, so .row's negative margins still land inside, and the
   content edge lines up exactly with the page head above it. */
.shine-main .container {
	max-width: none;
	width: calc(var(--shine-max) + 24px);
}
@media (max-width: 640px) { .shine-main .container { width: 100%; } }

/* ===========================  FLEET LAYOUT (shine)  ======================= */
/* Categories sit in the page head on the title line (see .shine-pagehead--inline),
   the rest of the filters in a sidebar on the LEFT, the vehicles on the right. */
.shine-fleetpage {
	grid-template-columns: 300px minmax(0, 1fr);
	gap: 1.6rem 2.5rem;
}
.shine-fleetpage__side { grid-column: 1; grid-row: 1; }
.shine-fleetpage__main { grid-column: 2; grid-row: 1; }
@media (max-width: 1100px) {
	.shine-fleetpage { grid-template-columns: 240px minmax(0, 1fr); gap: 1.4rem 2rem; }
}
@media (max-width: 900px) {
	.shine-fleetpage { grid-template-columns: minmax(0, 1fr); }
	.shine-fleetpage__side { grid-column: 1; grid-row: 1; }
	.shine-fleetpage__main { grid-column: 1; grid-row: 2; }
}

/* Quiet chips: no border, muted text on a faint fill. Only the active one
   takes the accent. One line that scrolls sideways when it runs out. */
.shine-cats {
	display: flex;
	flex-wrap: nowrap;
	gap: .5rem;
	overflow-x: auto;
	scrollbar-width: none;
	-webkit-mask-image: none;
	mask-image: none;
}
.shine-cats::-webkit-scrollbar { display: none; }
.shine-cats .shine-chip {
	flex: 0 0 auto;
	border: 0;
	border-radius: 12px;
	padding: .55rem 1.1rem;
	background: var(--shine-surface-alt);
	color: var(--shine-muted);
	font-weight: 400;
	transition: background-color var(--shine-dur) var(--shine-ease), color var(--shine-dur) var(--shine-ease);
}
.shine-cats .shine-chip:hover { color: var(--shine-text); }
.shine-cats .shine-chip.is-active {
	background: var(--shine-accent);
	color: var(--shine-accent-text);
}

/* Title on the left, the page's own controls on the right of the same line.
   Flex rather than the split grid: the aside keeps its natural width, and
   when it does not fit beside the title it wraps onto its own line below,
   starting at the left (space-between puts a lone item at the start). */
.shine-pagehead--inline {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-end;   /* level with the title, not the crumbs above it */
	justify-content: space-between;
	gap: 1rem 2rem;
}
.shine-pagehead--inline .shine-pagehead__lead { flex: 0 0 auto; }
.shine-pagehead--inline .shine-pagehead__aside { flex: 0 1 auto; min-width: 0; max-width: 100%; }

/* wraps the crumbs + title block of the page head */
.shine-pagehead__lead { display: flex; align-items: center; gap: 1.4rem; min-width: 0; }
@media (max-width: 760px) {
	.shine-pagehead__lead {gap: .9rem;margin-left: 25px;}
}

/* ===========================  FLEET SIDEBAR (shine)  ====================== */
/* One soft panel instead of a stack of outlined boxes: the same faint fill as
   the car tiles, white controls inside it with no borders, each label sitting
   inside its own control. A chosen filter gets an accent ring, so the panel
   shows at a glance what is narrowing the list. */
.shine-fleetpage__side .shine-filters {
	border-radius: var(--shine-radius);
	gap: .6rem;
}
.shine-fleetpage__side .shine-filters__row { gap: .6rem; }
.shine-fleetpage__side .shine-sel { margin-top: 0 !important; }

/* search: the wrapper is the white tile (it holds the icon and the clear
   button), the input inside it is bare */
.shine-fleetpage__side .shine-filters__search {
	border: 0;
	border-radius: var(--shine-radius-sm);
	background: var(--shine-surface);
	transition: box-shadow var(--shine-dur) var(--shine-ease);
}
.shine-fleetpage__side .shine-filters__search:focus-within { box-shadow: 0 0 0 1.5px var(--shine-accent) inset; }
.shine-fleetpage__side .shine-filters__search input {
	border: 0;
	background: none;
	padding: 0;
	font-size: .9rem;
	box-shadow: none;
}

/* selects: a white tile, label on top inside it, value underneath */
.shine-fleetpage__side .shine-sel {
	position: relative;
	display: grid;
	gap: .1rem;
	padding: .6rem .9rem .55rem;
	border-radius: var(--shine-radius-sm);
	background: var(--shine-surface);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
	transition: box-shadow var(--shine-dur) var(--shine-ease);
}
.shine-fleetpage__side .shine-sel > span {
	font-size: .72rem;
	color: var(--shine-faint);
	line-height: 1.2;
}
.shine-fleetpage__side .shine-sel .shine-drop__trigger {
	padding: 0;
	border: 0;
	color: var(--shine-text);
}
.shine-fleetpage__side .shine-sel .shine-drop__trigger:hover,
.shine-fleetpage__side .shine-sel .shine-drop__trigger:focus-visible { border: 0; color: var(--shine-accent); }
.shine-fleetpage__side .shine-sel.is-set { box-shadow: 0 0 0 1.5px var(--shine-accent) inset; }

/* price: its own tile, the amount in the accent */
.shine-fleetpage__side .shine-range {
	padding: .7rem .9rem .3rem;
	border-radius: var(--shine-radius-sm);
	background: var(--shine-surface);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-fleetpage__side .shine-range__head > span { font-size: .72rem; }
.shine-fleetpage__side .shine-range__out {}
/* a real track under the fill, and solid thumbs rather than hollow rings */
.shine-fleetpage__side .shine-range__track::before { height: 4px; border-radius: 4px; background: var(--shine-border); }
.shine-fleetpage__side .shine-range__fill { height: 4px; border-radius: 4px; }
.shine-fleetpage__side .shine-range input[type="range"]::-webkit-slider-thumb {
	width: 18px; height: 18px; margin-top: 11px;
	background: var(--shine-accent);
	border: 3px solid var(--shine-surface);
	box-shadow: 0 2px 8px color-mix(in srgb, var(--shine-accent) 40%, transparent);
}
.shine-fleetpage__side .shine-range input[type="range"]::-moz-range-thumb {
	width: 18px; height: 18px;
	background: var(--shine-accent);
	border: 3px solid var(--shine-surface);
	box-shadow: 0 2px 8px color-mix(in srgb, var(--shine-accent) 40%, transparent);
}

/* count and reset share one quiet line at the foot (an older rule stacks
   them in a column, hence the explicit row) */
.shine-fleetpage__side .shine-filters__foot {
	display: flex;
	flex-direction: row;
	align-items: center;
	justify-content: space-between;
	gap: .8rem;
	padding: 1.5rem .2rem .5rem;
	border-top: 0;
}
.shine-fleetpage__side .shine-filters__count { margin: 0; font-size: .85rem; color: var(--shine-muted); }
.shine-fleetpage__side .shine-filters__reset {
	width: auto !important;
	padding: 0;
	border: 0;
	background: none;
	color: var(--shine-accent);
	font-size: .85rem;
	font-weight: 600;
}
.shine-fleetpage__side .shine-filters__reset:hover { background: none; color: var(--shine-accent-hover); }

/* Open dropdown = one piece with its tile. Every tile carries a 1px border in
   its own white, so it is invisible and costs nothing; opening only changes
   its colour, so nothing shifts. The panel hangs from the tile itself (not
   from the narrower dropdown inside its padding), matching its outer edges,
   and takes over the bottom of the same border. */
.shine-fleetpage__side .shine-sel {
	border: 1px solid var(--shine-surface);
	transition: border-color var(--shine-dur) var(--shine-ease), box-shadow var(--shine-dur) var(--shine-ease);
}
.shine-fleetpage__side .shine-sel .shine-drop { position: static; }
.shine-fleetpage__side .shine-sel:has(.shine-drop.is-open) {
	z-index: 31;
	border-color: color-mix(in srgb, var(--shine-text) 18%, transparent);
	border-bottom-color: var(--shine-surface);
	border-bottom-left-radius: 0;
	border-bottom-right-radius: 0;
}
.shine-fleetpage__side .shine-sel .shine-drop__panel {
	top: 100%;
	left: -1px;
	right: -1px;
	padding: 0 0 .35rem;
	border: 1px solid color-mix(in srgb, var(--shine-text) 18%, transparent);
	border-top: 0;
	border-radius: 0 0 var(--shine-radius-sm) var(--shine-radius-sm);
	box-shadow: 0 14px 28px rgba(15, 16, 32, .08);
}
/* options line up with the label and value above them */
.shine-fleetpage__side .shine-sel .shine-drop__opt { padding: .5rem .9rem; font-size: .88rem; }
.shine-fleetpage__side .shine-sel .shine-drop.is-open .shine-drop__trigger { background: none; }

/* The panel's column may never grow past the panel. Without minmax(0, …) the
   search row's minimum width won: once typing showed the clear button, the
   input's default width plus the icon and the button pushed the column 17px
   wider and every tile spilled over the right padding. */
.shine-fleetpage__side .shine-filters { grid-template-columns: minmax(0, 1fr); }
.shine-fleetpage__side .shine-filters > *,
.shine-fleetpage__side .shine-filters__body,
.shine-fleetpage__side .shine-filters__search { min-width: 0; }
.shine-fleetpage__side .shine-filters__search input { flex: 1 1 auto; width: auto; min-width: 0; }

/* Keep the scrollbar's lane reserved: filtering can shorten the page enough to
   drop the scrollbar, and the centred layout then jumped sideways by half its
   width. With the gutter stable, nothing moves. */
html { scrollbar-gutter: stable; }

/* The category row never grows past 800px, on desktop too: beyond that it
   scrolls sideways (it is already one nowrap line with overflow-x). The cap
   is a fixed length on the wrapper: a percentage max-width on the row itself
   is ignored when the page head measures it, so the head saw the full row,
   decided it could not fit beside the title and wrapped it below. */
.shine-pagehead--inline .shine-pagehead__aside { max-width: 800px; }
.shine-cats { max-width: 100%; }

/* ===========================  FOOTER (shine)  ============================= */
/* Logo on top; link columns on the left, the two ways to reach the business
   and the language on the right; a thin bar at the bottom for the legal links
   and the copyright. No socials. */
.shine-foot__top {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: 1.8rem;
}
.shine-foot__logo { justify-self: start; }   /* only the logo is the link, not the whole row */
.shine-foot__logo img { max-height: 44px; }

.shine-foot__main {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-start;
	justify-content: space-between;
	gap: 2rem 3rem;
}
.shine-foot__cols { gap: 1.6rem clamp(2.5rem, 6vw, 6rem); }
.shine-foot__col { gap: .55rem; }
/* headings are plain bold words now, not small faint caps */
.shine-foot__h {
	margin: 0 0 .35rem;
	font-size: .95rem;
	font-weight: 700;
	letter-spacing: 0;
	text-transform: none;
	color: var(--shine-text);
}
.shine-foot__col a { font-size: .9rem; color: var(--shine-muted); }
.shine-foot__col a:hover { color: var(--shine-accent); }

.shine-foot__reach { display: grid; gap: 1.1rem; justify-items: end; }
.shine-foot__pills { display: flex; flex-wrap: wrap; gap: .6rem; justify-content: flex-end; }
.shine-foot__pill {
	display: inline-flex;
	align-items: center;
	padding: .7rem 1.1rem;
	border-radius: 10px;
	background: var(--shine-surface-alt);
	color: var(--shine-text);
	font-size: .9rem;
	white-space: nowrap;
	transition: background-color var(--shine-dur) var(--shine-ease), color var(--shine-dur) var(--shine-ease);
}
.shine-foot__pill:hover { color: var(--shine-accent); }
/* both pills share the grey fill; the icon in front carries the accent */
.shine-foot__pill { gap: .5rem; }
.shine-foot__pill svg { flex: 0 0 auto; color: var(--shine-accent); }
.shine-foot__lang { font-size: .9rem; color: var(--shine-text); }

.shine-foot__bar {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: .8rem 2rem;
	padding-top: 1.3rem;
	border-top: 1px solid var(--shine-border);
	font-size: .82rem;
	color: var(--shine-muted);
}
.shine-foot__legal { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem 1.4rem;
	/* the old legal paragraph used this class name: undo its spacing */
	margin: 0; max-width: none; line-height: inherit; font-size: inherit; color: inherit; }
.shine-foot__legal a { color: var(--shine-text); }
.shine-foot__legal a:hover { color: var(--shine-accent); }
.shine-foot__legal .shine-foot__by { margin: 0; font-size: inherit; color: var(--shine-faint); }
.shine-foot__legal .shine-foot__by a { color: var(--shine-muted); }
.shine-foot__copy { margin: 0; }

/* on a phone everything reads down the left */
@media (max-width: 760px) {
	.shine-foot__reach { justify-items: start; }
	.shine-foot__pills { justify-content: flex-start; }
}

/* ===========================  HOME BAND  ================================== */
/* A violet band a little wider than the page (96vw, rounded), with the
   content inside it on the page's own width so it lines up with the nav.
   Row 1: the copy (left) and the photo (right). Row 2: the date search under
   the copy while the photo keeps going, hanging below the band. */
.shine-home {
	/* the content width: the page's, but never closer than 3rem to the band's
	   edge, so on a laptop the copy does not sit on the band's rim */
	--home-w: min(var(--shine-max), calc(96vw - 6rem));
	width: var(--home-w);
	margin: 18px auto 0;
	margin-top: 0px;
}
.shine-home__grid {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
	column-gap: clamp(2rem, 4vw, 3.5rem);
	align-items: start;
}
.shine-home__band {
	grid-column: 1 / -1;
	grid-row: 1;
	align-self: stretch;
	position: relative;
	/* the grid area is the content width; widen it to 96vw, centred */
	margin-inline: calc((100% - 95vw) / 2);
	border-radius: var(--shine-radius-lg);
	background: var(--shine-accent);   /* flat: no gradients in this theme */
}
.shine-home__copy {
	grid-column: 1; grid-row: 1;
	position: relative; z-index: 1;
	min-width: 0;
	padding: clamp(2.2rem, 4vw, 3rem) 0 clamp(2.4rem, 4vw, 3.4rem);
	color: #ffffff;
}
.shine-home__media {
	grid-column: 2;
	grid-row: 1 / span 2;
	position: relative;
	z-index: 1;
	min-width: 0;
	padding-top: clamp(2.2rem, 4vw, 3.2rem);
}
.shine-home__search {
	grid-column: 1;
	grid-row: 2;
	position: relative;       /* the calendar positions against it */
	min-width: 0;
	padding-top: 1.2rem;
}

/* arrows sit in the band's side margins, centred in them */
.shine-home__nav {
	position: absolute;
	top: 50%;
	z-index: 2;
	width: 54px;
	height: 54px;
	margin-top: -22px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	padding: 17px;
	border: 0;
	border-radius: 12px;
	background: none;
	color: #ffffff;
	cursor: pointer;
	transition: background-color var(--shine-dur) var(--shine-ease);
}
.shine-home__nav:hover { background: rgba(255, 255, 255, .14); }
.shine-home__nav--prev {left: calc((96vw - var(--home-w)) / 4 - 30px);}
.shine-home__nav--next {right: calc((96vw - var(--home-w)) / 4 - 30px);}
.shine-home__nav.swiper-button-disabled { opacity: .35; }

/* ---- copy ---- */
.shine-home__eyebrow {font-size: .95rem;color: var(--shine-cta);margin-bottom: 2.2rem;}
.shine-home__eyebrow b { color: #ffffff; font-weight: 600; }
.shine-home__copyswiper { overflow: hidden; }
.shine-home__price {margin: 0 0 .4rem;font-size: 16px;}
.shine-home__price b {font-weight: 700;color: #1dbb60;}
.shine-home__price span { color: rgba(255, 255, 255, .7); }
.shine-home__name {
	margin: 0 0 1.2rem;
	font-size: clamp(1.5rem, 4.2vw, 3rem);
	font-weight: 800;
	line-height: 1.02;
	letter-spacing: -.03em;
	color: var(--shine-cta);
	overflow-wrap: anywhere;
	white-space: nowrap;
}
.shine-home__name span {color: white;font-weight: 600;}
.shine-home__facets {
	list-style: none;
	margin: 0 0 1.8rem;
	padding: 0;
	display: flex;
	flex-wrap: wrap;
	gap: .5rem 1.4rem;
	font-size: 12px;
	color: rgba(255, 255, 255, .9);
}
.shine-home__facets li { display: inline-flex; align-items: center; gap: .45rem; text-transform: capitalize; }
.shine-home__book { padding-left: 2.1rem; padding-right: 2.1rem; }

/* ---- photo ---- */
.shine-home__imgswiper { overflow: hidden; border-radius: var(--shine-radius); }
.shine-home__img {
	position: relative;
	display: block;
	aspect-ratio: 4 / 3;
	border-radius: var(--shine-radius);
	overflow: hidden;
	background: #f9f9f9;
}
.shine-home__img img { width: 100%; height: 100%; object-fit: cover; display: block; }
.shine-home__img .shine-vh__noimg svg { width: 96px; }
.shine-home__badges {
	position: absolute; top: 16px; left: 16px; right: 16px;
	display: flex; flex-wrap: wrap; gap: .5rem;
	pointer-events: none;
}
.shine-home__badge {
	display: inline-flex; align-items: center; gap: .45rem;
	padding: .4rem .85rem;
	border-radius: var(--shine-radius-pill);
	background: var(--shine-accent);
	color: #ffffff;
	font-size: .8rem;
	font-weight: 500;
}

/* ---- date search ---- */
.shine-ds__h { font-size: 1.15rem; margin: 0 0 1rem; }
.shine-ds__when {
	position: relative;
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: .9rem;
}
.shine-ds__field { display: grid; gap: .4rem; min-width: 0; }
.shine-ds__label { font-size: .8rem; color: var(--shine-muted); }
.shine-ds__dt {
	position: relative;
	display: flex;
	min-width: 0;
	border: 1px solid var(--shine-border);
	border-radius: var(--shine-radius-sm);
	background: var(--shine-surface);
	transition: border-color var(--shine-dur) var(--shine-ease);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%);
}
.shine-ds__dt:hover,
.shine-ds__dt:focus-within { border-color: var(--shine-accent); }
.shine-ds__date,
.shine-ds__time {
	display: inline-flex; align-items: center; gap: .55rem;
	border: 0; background: none;
	padding: .85rem .9rem;
	font-family: var(--shine-font-ui);
	font-size: .95rem;
	color: var(--shine-text);
	cursor: pointer;
	white-space: nowrap;
}
.shine-ds__date { flex: 1 1 auto; min-width: 0; }
.shine-ds__date svg { flex: 0 0 auto; color: var(--shine-faint); }
.shine-ds__date span { overflow: hidden; text-overflow: ellipsis; }
.shine-ds__time {flex: 0 0 auto;/* border-left: 1px solid var(--shine-border); */}
.shine-ds__timepop {
	position: absolute; top: calc(100% + 6px); right: 0; z-index: 40;
	width: 260px; max-height: 260px; overflow-y: auto;
	display: grid; grid-template-columns: repeat(3, 1fr); gap: .3rem;
	padding: .6rem;
	border: 1px solid var(--shine-border);
	border-radius: var(--shine-radius-sm);
	background: var(--shine-surface);
	box-shadow: 0 14px 28px rgba(15, 16, 32, .08);
}
.shine-ds__timepop[hidden] { display: none; }
.shine-ds__slot {
	border: 0; border-radius: 8px;
	padding: .45rem .3rem;
	background: none;
	font-family: var(--shine-font-ui); font-size: .82rem;
	color: var(--shine-muted);
	cursor: pointer;
}
.shine-ds__slot:hover { background: var(--shine-surface-alt); color: var(--shine-text); }
.shine-ds__slot.is-on { background: var(--shine-accent); color: var(--shine-accent-text); }
/* the calendar hangs from this invisible line under both fields */
.shine-ds__range {
	position: absolute; left: 0; right: 0; bottom: 0;
	width: 100%; height: 0; padding: 0; border: 0; opacity: 0;
	pointer-events: none;
}
.shine-ds__go { margin-top: 1.1rem; padding-left: 2rem; padding-right: 2rem; }

/* ---- tablet and phone: one card per slide, then the search ---- */
@media (max-width: 900px) {
	.shine-home { --home-w: calc(100% - 36px); width: var(--home-w); }
	.shine-home__grid { grid-template-columns: minmax(0, 1fr); }
	.shine-home__band { display: none; }
	.shine-home__media { grid-column: 1; grid-row: 1; padding-top: 0; }
	.shine-home__copy {
		grid-column: 1; grid-row: 2;
		padding: 1.6rem 1.4rem 1.6rem;
		border-radius: 0 0 var(--shine-radius) var(--shine-radius);
		background: var(--shine-accent);
	}
	.shine-home__search { grid-column: 1; grid-row: 3; }
	/* the photo and the violet copy read as one card */
	.shine-home__imgswiper,
	.shine-home__img { border-radius: var(--shine-radius) var(--shine-radius) 0 0; }
	.shine-home__eyebrow { display: none; }
	.shine-home__book { width: 100%; }
	.shine-ds__when { grid-template-columns: minmax(0, 1fr); }
	.shine-ds__go { width: 100%; }
}

/* Home search calendar: booking's calendar (shared rules above), but here it
   floats under the two fields, so it gets its own white panel, spans the
   whole width of the fields, and the two months share it 50/50 — without
   this the months kept the library's fixed width and left a gap on the right. */
.shine-ds .daterangepicker {
	width: 135%;
	left: 0 !important;
	right: auto !important;
	margin-top: 0pc;
	padding: .5rem;
	border: 1px solid var(--shine-border);
	border-radius: var(--shine-radius-sm);
	background: var(--shine-surface);
	box-shadow: 0 14px 28px rgba(15, 16, 32, .08);
	z-index: 50;
}
.shine-ds .daterangepicker .drp-calendar.left,
.shine-ds .daterangepicker .drp-calendar.right {
	width: 50% !important;
	max-width: none !important;
	float: left;
	box-sizing: border-box;
}
.shine-ds .daterangepicker .calendar-table table { width: 100%; }
@media (max-width: 900px) {
		.shine-ds .daterangepicker {
    width: 100%;
}
	/* one month per row on a phone */
	.shine-ds .daterangepicker .drp-calendar.left,
	.shine-ds .daterangepicker .drp-calendar.right { width: 100% !important; float: none; }
}

/* both months get the same padding — an older rule zeroed the left one, which
   left it 6px higher than the right */
.shine-ds .daterangepicker .drp-calendar.left,
.shine-ds .daterangepicker .drp-calendar.right { padding: .4rem .6rem !important; }

/* ---- the date search as the first panel of the fleet sidebar ---- */
.shine-fleetpage__side { display: grid; gap: .8rem; align-content: start; }
.shine-ds--side {
	border-radius: var(--shine-radius);
	background: var(--shine-surface-alt);
}
.shine-ds--side .shine-ds__when { grid-template-columns: minmax(0, 1fr); gap: .6rem; }
.shine-ds--side .shine-ds__label { font-size: .72rem; color: var(--shine-faint); }
.shine-ds--side .shine-ds__dt { border-color: var(--shine-surface); }
.shine-ds--side .shine-ds__date,
.shine-ds--side .shine-ds__time { padding: .7rem .8rem; font-size: .9rem; }
.shine-ds--side .shine-ds__go { width: 100%; margin-top: .8rem; }
/* two months do not fit in a 280px column: the calendar opens wider,
   over the results, from the panel's left edge */
@media (min-width: 901px) {
	.shine-ds--side .daterangepicker {width: 840px !important;}

	
}

/* The sidebar is sticky, which makes it its own stacking layer — and it sat
   under the results column, so the calendar opening out of it went behind
   the cars. Lift the whole sidebar above the results. */
.shine-fleetpage__side {z-index: 20;background: var(--shine-surface-alt);border-radius: var(--shine-radius);padding: 16px;}

/* Pickup / Dropoff drawn exactly like the dropdown tiles below them: a white
   tile, the label small inside it at the top, the value bold under it —
   the date on the left, the time on the right. */
.shine-ds--side .shine-ds__field {
	position: relative;
	display: grid;
	gap: .1rem;
	padding: .6rem .9rem .55rem;
	border: 1px solid var(--shine-surface);
	border-radius: var(--shine-radius-sm);
	background: var(--shine-surface);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-ds--side .shine-ds__label { font-size: .72rem; line-height: 1.2; color: var(--shine-faint); }
.shine-ds--side .shine-ds__dt {border: 0;border-radius: 0;background: none;box-shadow: none;}
.shine-ds--side .shine-ds__date,
.shine-ds--side .shine-ds__time {
	padding: 0;
	font-size: .92rem;
	color: var(--shine-text);
	transition: color var(--shine-dur) var(--shine-ease);
}
.shine-ds--side .shine-ds__date svg { display: none; }
.shine-ds--side .shine-ds__time { margin-left: auto; border-left: 0; }
.shine-ds--side .shine-ds__date:hover,
.shine-ds--side .shine-ds__time:hover,
.shine-ds--side .shine-ds__time[aria-expanded="true"] { color: var(--shine-accent); }

/* inside the filter panel the date search is not a panel of its own — just
   its two tiles, spaced like the dropdown tiles under them */
.shine-ds--side.shine-ds--inset { padding: 0; border-radius: 0; background: none; margin-bottom: .6rem; }

/* phone: the photo and the violet copy are one card, so the photo keeps its
   top corners only. Two other rules rounded all four corners of the swiper
   box (10px) and of the image itself (12px), leaving notches at the join. */
@media (max-width: 900px) {
	.shine-home .shine-home__imgswiper,
	.shine-home .shine-home__img,
	.shine-home .shine-home__img img { border-radius: var(--shine-radius) var(--shine-radius) 0 0; }
}


/* ---- the band: a background image under a darker accent overlay ----
   --shine-band-image   the picture (any image in /templates/shine/assets/images/)
   --shine-band-tint    how solid the overlay is: 100% hides the photo, lower
                        lets more through
   --shine-band-shade   the overlay colour: the tenant's own accent mixed with
                        black, so every tenant gets a deeper cut of their colour
                        (70% accent / 30% black — lower 70 for darker)
   The picture is its own layer (::before), a little taller than the band, so
   the small parallax (home.php, --band-shift) never shows an edge. */
.shine-home__band {
	--shine-band-image: url("/templates/shine/assets/images/banner/banner-hp3.jpg");
	--shine-band-tint: 86%;
	--shine-band-shade: color-mix(in srgb, var(--shine-accent) 90%, #000000);
	--band-shift: 0px;
	overflow: hidden;
	isolation: isolate;
	background: var(--shine-band-shade);
}
.shine-home__band::before {
	content: "";
	position: absolute;
	left: 0; right: 0;
	top: -14%; bottom: -14%;
	z-index: -2;
	background: var(--shine-band-image) center / cover no-repeat;
	transform: translate3d(0, var(--band-shift), 0);
	will-change: transform;
	pointer-events: none;
}
.shine-home__band::after {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	background: color-mix(in srgb, var(--shine-band-shade) var(--shine-band-tint), transparent);
	pointer-events: none;
}
.shine-home__nav { z-index: 2; }   /* arrows above the picture and the overlay */

/* phone: the band is hidden, so the violet copy panel carries the same
   picture and the same darker overlay (still, no parallax) */
@media (max-width: 900px) {
	.shine-home__copy {
		position: relative;
		isolation: isolate;
		background-image: url("/templates/shine/assets/images/banner/banner-hp3.jpg");
		background-size: cover;
		background-position: center;
	}
	.shine-home__copy::before {
		content: "";
		position: absolute;
		inset: 0;
		z-index: -1;
		border-radius: inherit;
		background: color-mix(in srgb, color-mix(in srgb, var(--shine-accent) 70%, #000000) 86%, transparent);
	}
}

/* The calendar positions against its date search, never the page. It used to
   lean on the sticky sidebar as its positioned ancestor; without that it
   measured from the page and floated at the top-left. The sidebar stays
   above the results column so the open calendar is never under a card. */
.shine-ds { position: relative; }
.shine-fleetpage__side { position: relative; z-index: 20; }
/* the anchor line moves into the clicked field, so each field is its box */
.shine-ds__field { position: relative; }

/* Home "Other vehicles": the heading and the four cars sit in one bordered
   white panel, the footer's width and radius, and the four cars share the
   panel's full width instead of stopping at auto-fill's fixed columns. */
.shine-hcars { width: var(--shine-max); margin: 0 auto; }
.shine-hcars__box {
	background: var(--shine-surface);
	border: 1px solid var(--shine-border);
	border-radius: var(--shine-radius-lg);
	padding: clamp(24px, 3.5vw, 48px) clamp(20px, 3.5vw, 48px);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-hcars .shine-fleet { grid-template-columns: repeat(4, minmax(0, 1fr)); }
@media (max-width: 1100px) { .shine-hcars .shine-fleet { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 560px)  { .shine-hcars .shine-fleet { grid-template-columns: minmax(0, 1fr); } }

/* the first category chip starts 25px in, so the row lines up with the title */
.shine-cats .shine-chip:first-child { margin-left: 25px; }

/* Sign in / sign up / recover: both columns, the form and the side panel,
   sit in one bordered panel (the footer's border and radius). The form lost
   its own box, so there is only one frame; the side's numbered cards keep
   theirs. */
.shine-auth {
	background: var(--shine-surface);
	border: 1px solid var(--shine-border);
	border-radius: var(--shine-radius-lg);
	padding: clamp(24px, 3.5vw, 48px);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-auth__main {
	background: none;
	border: 0;
	border-radius: 0;
	padding: 0;
}

/* Branches: one bordered panel (the footer's border and radius) holding
   every branch as a single row — where it is, the name and the contacts on
   the left, Direction on the right — split by a hairline, none under the
   last. On a phone each row stacks and the button drops under its text. */
.shine-locs {
	display: block;
	background: var(--shine-surface);
	border: 1px solid var(--shine-border);
	border-radius: var(--shine-radius-lg);
	padding: 0 clamp(20px, 3vw, 40px);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-loc {
	flex-direction: row;
	align-items: center;
	gap: 2rem;
	min-height: 0;
	padding: 1.7rem 0;
	background: none;
	border: 0;
	border-bottom: 1px solid var(--shine-border);
	border-radius: 0;
}
.shine-loc:last-child { border-bottom: 0; }
.shine-loc:hover { border-color: var(--shine-border); }
.shine-loc__main { flex: 1 1 auto; min-width: 0; }
.shine-loc__foot { flex: 0 0 auto; margin-top: 0; margin-left: auto; }
@media (max-width: 700px) {
	.shine-loc { flex-direction: column; align-items: stretch; gap: 1.1rem; padding: 1.5rem 0; }
	.shine-loc__foot { margin-left: 0; }
}

/* Contact: both columns, the details and the branches call-out, sit in one
   bordered panel like the sign-in pages. The details card lost its own
   frame, so there is only one; its rows keep their dividers. */
.shine-contact {
	background: var(--shine-surface);
	border: 1px solid var(--shine-border);
	border-radius: var(--shine-radius-lg);
	padding: clamp(24px, 3.5vw, 48px);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%) !important;
}
.shine-contact__card {
	background: none;
	border: 0;
	border-radius: 0;
	padding: 0;
}

/* Page titles: the words rise one after another out of their own clip,
   right after the breadcrumb fades in (the old hero's shineWordUp). Only
   transform and opacity move, so nothing reflows; the extra bottom padding
   keeps descenders (g, p, y) from being cut by the clip. */
.shine-pagehead__w {
	display: inline-block;
	overflow: hidden;
	vertical-align: bottom;
	padding-bottom: .14em;
	margin-bottom: -.14em;
}
.shine-pagehead__w > span {
	display: inline-block;
	transform: translateY(110%);
	opacity: 0;
	animation: shineWordUp .8s var(--shine-ease) both;
	animation-delay: calc(var(--i) * 90ms + 160ms);
}
@media (prefers-reduced-motion: reduce) {
	.shine-pagehead__w > span { animation: none; transform: none; opacity: 1; }
}

/* Incident photos: prev / next sit over the picture, inside its edges, drawn
   like the home slider's arrows (a chevron in a 12px-rounded square). On a
   photo a bare white chevron can vanish, so the square carries a soft dark
   fill. Own class, so the home slider's .shine-home__nav is left alone. */
.shine-bkd__gallery .swiper { position: relative; }
.shine-ind__nav {
	position: absolute;
	top: 50%;
	z-index: 3;
	width: 48px;
	height: 48px;
	margin-top: -24px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	padding: 0;
	border: 0;
	border-radius: 12px;
	background: var(--shine-accent);
	color: var(--shine-accent-text);
	cursor: pointer;
	transition: background-color var(--shine-dur) var(--shine-ease);
}
.shine-ind__nav:hover { background: var(--shine-accent-hover); }
.shine-ind__nav--prev { left: 14px; }
.shine-ind__nav--next { right: 14px; }
.shine-ind__nav.swiper-button-disabled { opacity: .35; cursor: default; }

/* Booking step 1: everything you fill in sits in the left column — branch,
   dates and vehicle on top, extras under them — and the summary with Continue
   holds the right column from the top, sticky. Layout only: .shine-bk__lower
   lets its two columns into this grid (display: contents), so no element,
   id or script hook moved. Below 981px the page keeps its single column. */
@media (min-width: 981px) {
	.shine-bk-page .shine-bk {
		grid-template-columns: minmax(0, 1fr) 380px;
		column-gap: 1.2rem;
		align-items: start;
	}
	.shine-bk-page .shine-bk > .shine-bk__card { grid-column: 1; grid-row: 1; }
	.shine-bk-page .shine-bk__lower { display: contents; }
	.shine-bk-page .shine-bk__vehbox { grid-column: 1; grid-row: 2; }
	.shine-bk-page .shine-bk__left  { grid-column: 1; grid-row: 3; }
	.shine-bk-page .shine-bk__right { grid-column: 2; grid-row: 1 / span 3; align-self: start; }
	/* the left column is too narrow for branch and dates side by side */
	.shine-bk-page .shine-bk__bar { grid-template-columns: minmax(0, 1fr); }
}

/* The vehicle picker left the booking card: its own bordered box under it,
   above the extras. Stacking: the card's pop-ups (branches, times, calendar)
   open over this box, and this box's vehicle list opens over the extras. */
.shine-bk__vehbox {
	position: relative;
	z-index: 4;
	margin-top: 0;
}
.shine-bk-page .shine-bk__card { z-index: 5; }
@media (max-width: 640px) { .shine-bk__vehbox {} }

/* "Different return location" sits inside the branch field, at its right
   edge, level with the control (same 50px height, same 1.45rem drop below
   the label), so the field runs the full width. The branch name keeps clear
   of it. Once pressed it hides and the return field opens beside pickup, as
   before. On a phone it stays under the field. */
@media (min-width: 641px) {
	.shine-bk__where { position: relative; }
	.shine-bk__where > .shine-bk__addret {
		position: absolute;
		top: 0;
		right: .9rem;
		/* the label line (the page text size, 14px, x its 1.6 line height) plus
		   its .45rem gap: exactly where the control starts */
		margin-top: calc(14px * 1.6 + .45rem);
		z-index: 1;
	}
	.shine-bk__where:has(> .shine-bk__addret:not([hidden])) #openPikupTime .shine-bk__control { padding-right: 16rem; }
}

/* Booking step 1: date and time read as one field, with no line between
   them (the time already had no left border; the date loses its right one,
   in every state). */
.shine-bk__dt .shine-bk__control--date,
.shine-bk__dt .shine-bk__control--date:hover,
.shine-bk__dt .shine-bk__control--date:focus-visible,
.shine-bk__dt .shine-bk__control--date[aria-expanded="true"] { border-right: 0; }

/* Booking step 1: an open branch or vehicle list joins its field and reads
   as one input — the field loses its bottom corners, the list its top ones,
   both carry the accent border, and a quiet hairline marks the seam. The
   list takes the field's exact width. Time lists keep their own card. */
.shine-bk__field.is-open:has(> .shine-bk__pop--loc:not([hidden]), > .shine-bk__pop--veh:not([hidden])) > .shine-bk__control {
	border-bottom-left-radius: 0;
	border-bottom-right-radius: 0;
	border-bottom: 0px;
	border-bottom-color: var(--shine-border);
	background: #ffffff;
}
.shine-bk__field > .shine-bk__pop--loc,
.shine-bk__field > .shine-bk__pop--veh {
	top: 100%;
	width: 100%;
	min-width: 0;
	margin-top: 0;
	border: 1px solid var(--shine-accent);
	border-top: 0;
	border-radius: 0 0 14px 14px;
	padding-top: 0px;
}

/* Extras: everything in a row hangs from the top — the checkbox and the
   price sit on the name's line instead of the row's middle. The checkbox is
   centred on that first line (the name's line height minus its own 20px). */
.shine-bk__prod { align-items: flex-start; }
.shine-bk__prod .shine-bk__check { margin-top: calc((.92rem * 1.6 - 20px) / 2); }

/* Home / fleet date search: the time list is grouped by part of the day
   under a title, like booking step 1 — the list is now a column of blocks,
   each block a 3-up grid of hours. */
.shine-ds__timepop { display: block; max-height: 320px; }
.shine-ds__timepop[hidden] { display: none; }
.shine-ds__poptitle { margin: .2rem 0 .3rem; text-align: center; font-weight: 600; font-size: .85rem; color: var(--shine-text); }
.shine-ds__part { margin: .6rem .2rem .3rem; font-size: .75rem; color: var(--shine-faint); }
.shine-ds__slots { display: grid; grid-template-columns: repeat(3, 1fr); gap: .3rem; }

/* Booking step 1: when the date or the time is open, the whole date + time
   pair takes the accent border, one outline like home's date search. */
.shine-bk__field--dt.is-open .shine-bk__dt > .shine-bk__control { border-color: var(--shine-accent); }

/* …and on hover too: pointing at the date or the time tints the whole pair
   (the same hover colour a single field gets), never just one half. The
   open state above still wins with the full accent. */
.shine-bk__dt:hover > .shine-bk__control { border-color: color-mix(in srgb, var(--shine-accent) 60%, var(--shine-border)); }
.shine-bk__field--dt.is-open .shine-bk__dt > .shine-bk__control { border-color: var(--shine-accent); }

/* Home only: the time list wears booking step 1's design — a 300px card,
   parts of the day under a title, two bordered hour buttons per row, the
   chosen hour filled with the accent. Values copied from .shine-bk__pop,
   .shine-bk__part and .shine-bk__slot; the fleet sidebar keeps its own. */
.shine-home__search .shine-ds__timepop {
	width: 300px;
	max-height: 820px;
	padding: 1rem;
	border: 1px solid color-mix(in srgb, var(--shine-text) 16%, transparent);
	border-radius: 14px;
	background: #ffffff;
	box-shadow: 0 24px 50px -20px rgba(0, 0, 0, .75);
	scrollbar-width: thin;
}
.shine-home__search .shine-ds__poptitle { margin: .3rem 0 .5rem; font-size: .9rem; }
.shine-home__search .shine-ds__part { margin: .7rem .2rem .35rem; font-size: .8rem; }
.shine-home__search .shine-ds__slots { grid-template-columns: 1fr 1fr; gap: .35rem; }
.shine-home__search .shine-ds__slot {
	height: 36px;
	padding: 0;
	border: 1px solid var(--shine-border);
	border-radius: 10px;
	background: none;
	font-size: .86rem;
	color: var(--shine-text);
	transition: border-color var(--shine-dur) var(--shine-ease), color var(--shine-dur) var(--shine-ease);
	box-shadow: 0 .125rem .25rem rgb(5 7 12 / 4%);
}
.shine-home__search .shine-ds__slot:hover { border-color: var(--shine-accent); background: none; color: var(--shine-text); }
.shine-home__search .shine-ds__slot.is-on {
	border-color: var(--shine-accent);
	background: var(--shine-accent);
	color: var(--shine-accent-text);
	font-weight: 600;
}
@media (max-width: 640px) { .shine-home__search .shine-ds__timepop { width: 100%; } }

/* Protection cards: the stay's total sits on the title line at the right
   (the name takes the room, the total never wraps), and the excess pill is
   green — the amount you are covered down to. */
.shine-bk__planhead .shine-bk__planname { flex: 1 1 auto; min-width: 0; }
.shine-bk__planhead .shine-bk__plantotal {
	flex: 0 0 auto;
	margin-left: auto;
	font-size: .84rem;
	font-weight: 600;
	color: var(--shine-text);
	white-space: nowrap;
}
.shine-bk__planexcess {
	border-color: color-mix(in srgb, var(--shine-ok) 35%, transparent);
	background: color-mix(in srgb, var(--shine-ok) 10%, transparent);
	color: var(--shine-ok);
	font-weight: 600;
}
