/*
 * Veřejná část vstupenek: nákup na stránce koncertu, košík, objednávka,
 * falešná brána. Ikona košíku v hlavičce a hlášky jsou v souboru
 * `public-header-cart.css`, který se načítá na celém webu (ADR 0070 bod 1).
 *
 * Obsah:
 *   1. Tokeny
 *   2. Stránka a sloupec obsahu
 *   3. Základní prvky – nadpis, tlačítka, přepínač, čítač, poznámka, štítek
 *   4. Lístek
 *   5. Nákup – poznámky, plánek, panel výběru, volné sezení, potvrzení, lišta
 *   6. Košík a objednávka
 *   7. Falešná brána
 *
 * Twenty Twenty dává `html { font-size: 62.5% }`, 1rem je tu tedy 10 px
 * (ADR 0035). Šablona stylem `button`, `h1`–`h3`, `input` a sloupcem
 * `.entry-content > *` přebíjí prosté třídy, proto mají některá pravidla
 * dvě třídy nebo id.
 */

/* ------------------------------------------------------------------ */
/* 1. Tokeny (ADR 0035)                                                */
/* ------------------------------------------------------------------ */

.doubravan-vstupenky {
	/* Barvy webu z Přizpůsobit dosazuje `Front\Assets::palette_css()`;
	   tady jsou jen záložní hodnoty výchozí palety Twenty Twenty. */
	--doubravan-accent: #cd2653;
	--doubravan-ink: #000;
	--doubravan-muted: #6d6d6d;
	--doubravan-subtle-bg: #dcd7ca;
	--doubravan-page-bg: #f5efe0;

	/* Pevné barvy vizuálního systému, nemění se s Přizpůsobit. */
	--doubravan-ticket-bg: #fffdf7;
	--doubravan-line: #d7cfab;
	--doubravan-tlumena: #69603e;
	--doubravan-danger: #8a1c1c;
	--doubravan-success: #2e7d32;

	/* Světlý akcent pro místo „ve vašem košíku“ (ADR 0045 bod 3). */
	--doubravan-accent-light: #d1e4ea;

	/* Písmo ovládání, údajů a čísel; patkové písmo šablony zůstává jen
	   textu „O koncertu“. „Inter var“ načítá šablona sama. */
	--doubravan-font-sans: "Inter var", -apple-system, BlinkMacSystemFont, "Helvetica Neue", Helvetica, Arial, sans-serif;

	/* Typografická škála: text, drobný text, nadpis oddílu, název koncertu. */
	--doubravan-fs-text: 1.7rem;
	--doubravan-fs-small: 1.5rem;
	--doubravan-fs-heading: 2.4rem;
	--doubravan-fs-ticket-title: 2rem;

	--doubravan-radius: 6px;

	max-width: 100%;
}

@supports (color: color-mix(in srgb, red 50%, white)) {
	.doubravan-vstupenky {
		--doubravan-accent-light: color-mix(in srgb, var(--doubravan-accent) 22%, #fff);
	}
}

/* ------------------------------------------------------------------ */
/* 2. Stránka a sloupec obsahu                                         */
/* ------------------------------------------------------------------ */

/* Předek `.doubravan-vstupenky` zvedá specificitu nad `.entry-content`
   šablony bez ohledu na pořadí načtení stylů. */
.doubravan-vstupenky .doubravan-public-sans {
	font-family: var(--doubravan-font-sans);
	font-size: var(--doubravan-fs-text);
	letter-spacing: normal;
}

/* Patička dole i u krátké stránky. Jen stránky pod `/vstupenky/`
   (`Front\Router::filter_body_class()`), soubor se načítá i jinde. */
body.doubravan-vstupenky-page {
	display: flex;
	flex-direction: column;
	min-height: 100vh;
}

body.doubravan-vstupenky-page.admin-bar {
	min-height: calc(100vh - var(--wp-admin--admin-bar--height, 32px));
}

body.doubravan-vstupenky-page #site-content {
	flex: 1 0 auto;
	padding-bottom: 5rem;
}

@media (min-width: 700px) {

	body.doubravan-vstupenky-page #site-content {
		padding-bottom: 8rem;
	}
}

/* Sloupec košíku a objednávky: šablona dává přímým potomkům
   `.entry-content` 58rem (specificita 0-6-0), lístek potřebuje víc.
   Šířka `calc(100% - 4rem)` je vzorec šablony. */
#site-content .doubravan-page-column > * {
	max-width: 72rem;
	width: calc(100% - 4rem);
	margin-left: auto;
	margin-right: auto;
}

/* Nákup vyplní celý sloupec oddílu Vstupenky stránky koncertu (obsah);
   id přebíjí úzký sloupec šablony. */
#doubravan-purchase .entry-content {
	margin: 0;
	padding: 0;
}

#doubravan-purchase .entry-content > * {
	max-width: none;
	width: auto;
	margin-left: 0;
	margin-right: 0;
}

#doubravan-purchase .entry-content > :first-child {
	margin-top: 0;
}

/* Lepkavý panel a lišta (ADR 0045 bod 1) nesnesou předka s `overflow:
   hidden`, který šablona dává #site-content; `clip` ořízne stejně. */
#site-content:has(#doubravan-purchase) {
	overflow: clip;
}

/* ------------------------------------------------------------------ */
/* 3. Základní prvky (ADR 0035)                                        */
/* ------------------------------------------------------------------ */

/* Nadpis stránky se štítkem stavu nebo odpočtem: na šířku na jednom
   řádku, na mobilu štítek pod nadpisem. */
.doubravan-page-heading {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	justify-content: space-between;
	gap: 0.6em 1em;
	margin-bottom: 0.3em;
}

/* Štítek stavu hned za číslem objednávky, ne na opačném okraji. */
.doubravan-page-heading--status {
	justify-content: flex-start;
	align-items: center;
}

/* Dvě třídy přebijí `.entry-content h1` šablony (84 px a `margin: auto`,
   který nadpis ve flexu posouval na střed). */
.doubravan-page-heading .doubravan-page-title {
	margin: 0;
	font-size: clamp(2.8rem, 4vw, 3.8rem);
	line-height: 1.2;
}

.doubravan-section-heading {
	font-size: var(--doubravan-fs-heading);
	margin: 1.8em 0 0.6em;
}

/* Odpočet držení v košíku: pod dvě minuty akcentem, bez blikání. */
.doubravan-countdown {
	margin: 0;
	font-size: var(--doubravan-fs-small);
	color: var(--doubravan-tlumena);
}

.doubravan-countdown__time {
	font-weight: 700;
	font-variant-numeric: tabular-nums;
}

.doubravan-countdown--warning {
	color: var(--doubravan-accent);
}

/* Tlačítko: min. 44 px. Šablona dává `<button>` velká písmena, barvu
   a podtržení při najetí – ruší se tu výslovně. */
.doubravan-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 0.5em;
	min-height: 44px;
	padding: 0.6em 1.6em;
	border-radius: var(--doubravan-radius);
	border: 1px solid transparent;
	font-family: var(--doubravan-font-sans);
	font-size: var(--doubravan-fs-text);
	font-weight: 600;
	line-height: 1.2;
	letter-spacing: normal;
	text-transform: none;
	text-decoration: none;
	cursor: pointer;
}

.doubravan-btn:hover,
.doubravan-btn:focus {
	text-decoration: none;
}

.doubravan-btn--primary {
	background: var(--doubravan-accent);
	color: #fff;
}

.doubravan-btn--primary:hover,
.doubravan-btn--primary:focus {
	filter: brightness(0.92);
	color: #fff;
}

.doubravan-btn--secondary {
	background: var(--doubravan-ticket-bg);
	border-color: var(--doubravan-line);
	color: var(--doubravan-ink);
}

.doubravan-btn--secondary:hover,
.doubravan-btn--secondary:focus {
	border-color: var(--doubravan-accent);
	color: var(--doubravan-accent);
}

.doubravan-btn--small {
	min-height: 36px;
	padding: 0.3em 1em;
	font-size: var(--doubravan-fs-small);
}

/* Neaktivní tlačítko tiše, ale plně čitelně – průhlednost ztlumila
   i text a tlačítko působilo zaseknutě. Musí stát za `:hover`. */
.doubravan-btn:disabled {
	cursor: not-allowed;
	filter: none;
	background: var(--doubravan-ticket-bg);
	border-color: var(--doubravan-line);
	color: var(--doubravan-tlumena);
}

/* Textový odkaz jako `<button>` (zpět k výběru po přidání). */
.doubravan-link-button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 44px;
	margin: 0;
	padding: 0 0.4rem;
	background: none;
	border: 0;
	color: var(--doubravan-ink);
	font: inherit;
	font-size: var(--doubravan-fs-text);
	font-weight: 400;
	letter-spacing: normal;
	text-transform: none;
	text-decoration: underline;
	text-underline-offset: 0.2em;
	cursor: pointer;
}

.doubravan-link-button:hover,
.doubravan-link-button:focus {
	background: none;
	color: var(--doubravan-accent);
	text-decoration: underline;
}

/* Přepínač dvou možností (typ vstupenky): skryté rádiové vstupy a stejně
   široké popisky, vybraný má plnou plochu akcentu. Volby se nelámou. */
.doubravan-toggle {
	display: inline-grid;
	grid-auto-flow: column;
	grid-auto-columns: 1fr;
	flex-shrink: 0;
	padding: 3px;
	white-space: nowrap;
	background: var(--doubravan-page-bg);
	border: 1px solid var(--doubravan-line);
	border-radius: var(--doubravan-radius);
}

.doubravan-toggle__input {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
	border: 0;
}

/* 38 px + 2 × 3 px odsazení + 2 × 1 px rám = 46 px. `margin: 0` ruší
   spodní okraj, který šablona dává `label`. */
.doubravan-toggle .doubravan-toggle__label {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 38px;
	margin: 0;
	padding: 0 1.2rem;
	border-radius: 4px;
	font-size: var(--doubravan-fs-small);
	font-weight: 600;
	color: var(--doubravan-ink);
	cursor: pointer;
	user-select: none;
	text-align: center;
}

.doubravan-toggle .doubravan-toggle__label:hover {
	background: var(--doubravan-ticket-bg);
}

.doubravan-toggle .doubravan-toggle__input:checked + .doubravan-toggle__label {
	background: var(--doubravan-accent);
	color: #fff;
}

.doubravan-toggle .doubravan-toggle__input:focus-visible + .doubravan-toggle__label {
	outline: 2px solid var(--doubravan-accent);
	outline-offset: 2px;
}

/* Čítač −/+ (`parts/counter.php`): volné sezení na stránce koncertu
   i v košíku. */
.doubravan-counter-control {
	display: inline-flex;
	align-items: center;
	gap: 0.5em;
}

/* `padding: 0` a `min-width: 0` ruší odsazení, které šablona dává
   `<button>` a které tlačítko ve flexu nedovolilo zúžit. */
.doubravan-counter-step {
	display: flex;
	place-content: center;
	width: 44px;
	height: 44px;
	padding: 0;
	min-width: 0;
	color: var(--doubravan-ink);
	border: 1px solid var(--doubravan-line);
	background: var(--doubravan-ticket-bg);
	border-radius: var(--doubravan-radius);
	cursor: pointer;
}

.doubravan-counter-step svg {
	display: block;
}

.doubravan-counter-step:hover,
.doubravan-counter-step:focus {
	border-color: var(--doubravan-accent);
	color: var(--doubravan-accent);
}

/* Prvek + atribut + třída přebije `input[type="number"]` šablony
   (šířka 100 %, velké odsazení). 5,5rem pojme dvouciferný počet. */
input[type="number"].doubravan-general-count-input {
	width: 5.5rem;
	height: 44px;
	padding: 0;
	text-align: center;
	font-size: var(--doubravan-fs-text);
	border: 1px solid var(--doubravan-line);
	border-radius: var(--doubravan-radius);
	box-sizing: border-box;
	/* Bez nativních šipek – vedle −/+ působily zmateně. */
	-moz-appearance: textfield;
}

.doubravan-general-count-input::-webkit-outer-spin-button,
.doubravan-general-count-input::-webkit-inner-spin-button {
	-webkit-appearance: none;
	margin: 0;
}

/* Odebrání: 44 × 44 px, ikona ×, název v `aria-label`. */
.doubravan-remove-seat {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	padding: 0;
	background: none;
	border: 1px solid var(--doubravan-line);
	border-radius: var(--doubravan-radius);
	color: var(--doubravan-tlumena);
	font-size: 1.8rem;
	line-height: 1;
	cursor: pointer;
}

.doubravan-remove-seat:hover,
.doubravan-remove-seat:focus {
	border-color: var(--doubravan-danger);
	color: var(--doubravan-danger);
}

/* Poznámka s levým pruhem v košíku a na objednávce (chyba, sleva,
   připomínka, věta podle stavu objednávky). */
.doubravan-note {
	padding: 0.8em 1.2em;
	background: var(--doubravan-ticket-bg);
	border-left: 4px solid var(--doubravan-accent);
	border-radius: 0 var(--doubravan-radius) var(--doubravan-radius) 0;
	font-size: var(--doubravan-fs-small);
	color: var(--doubravan-tlumena);
	margin: 1.2em 0;
}

.doubravan-note p {
	margin: 0;
}

.doubravan-note--danger {
	border-left-color: var(--doubravan-danger);
	color: var(--doubravan-ink);
}

.doubravan-note--muted {
	border-left-color: var(--doubravan-line);
}

/* Hlášení (ADR 0087): jedna komponenta pro chybu, upozornění a info
   – `parts/alert.php` a `doubravanAlert` v `public-alert.js` dávají
   stejné značky. Plocha lístku, linka, pruh a ikona v barvě druhu. Druh
   se pozná barvou i tvarem ikony: plná = chyba, obrys = ostatní. Chyby
   samy nemizí, stín nemají. */
.doubravan-alert {
	--doubravan-alert-color: var(--doubravan-accent);
	display: grid;
	grid-template-columns: 20px minmax(0, 1fr);
	gap: 0.2rem 1.2rem;
	align-items: start;
	margin-top: 1.6rem;
	margin-bottom: 1.6rem;
	padding: 1.2rem 1.6rem 1.2rem 1.4rem;
	background: var(--doubravan-ticket-bg);
	color: var(--doubravan-ink);
	border: 1px solid var(--doubravan-line);
	border-left: 4px solid var(--doubravan-alert-color);
	border-radius: 0 var(--doubravan-radius) var(--doubravan-radius) 0;
	font-family: var(--doubravan-font-sans);
	font-size: var(--doubravan-fs-small);
	line-height: 1.5;
	letter-spacing: normal;
	text-align: left;
}

.doubravan-alert--error {
	--doubravan-alert-color: var(--doubravan-danger);
}

.doubravan-alert--warning {
	--doubravan-alert-color: var(--doubravan-tlumena);
}

.doubravan-alert--info {
	--doubravan-alert-color: var(--doubravan-accent);
}

/* Ikony jako maska: barva z `currentColor`, tvar jen tady (PHP ani JS
   nenesou SVG). Chyba je plné kolečko s vykrojeným „!“ (`evenodd`). */
.doubravan-alert__icon,
.doubravan-field-error__icon {
	display: block;
	width: 20px;
	height: 20px;
	margin-top: 0.1rem;
	background-color: currentColor;
	-webkit-mask: var(--doubravan-alert-icon) center / contain no-repeat;
	mask: var(--doubravan-alert-icon) center / contain no-repeat;
}

.doubravan-alert__icon {
	color: var(--doubravan-alert-color);
}

.doubravan-alert--error .doubravan-alert__icon,
.doubravan-field-error__icon {
	--doubravan-alert-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath fill-rule='evenodd' d='M10 0a10 10 0 1 0 0 20a10 10 0 1 0 0-20zM8.9 5a1.1 1.1 0 0 1 2.2 0v6.2a1.1 1.1 0 0 1-2.2 0zM8.65 14.6a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0-2.7 0z'/%3E%3C/svg%3E");
}

.doubravan-alert--warning .doubravan-alert__icon {
	--doubravan-alert-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Ccircle cx='10' cy='10' r='9' fill='none' stroke='%23000' stroke-width='2'/%3E%3Cpath d='M10 5.4v5.6' stroke='%23000' stroke-width='2.2' stroke-linecap='round'/%3E%3Ccircle cx='10' cy='14.3' r='1.3'/%3E%3C/svg%3E");
}

.doubravan-alert--info .doubravan-alert__icon {
	--doubravan-alert-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Ccircle cx='10' cy='10' r='9' fill='none' stroke='%23000' stroke-width='2'/%3E%3Cpath d='M10 9v5.6' stroke='%23000' stroke-width='2.2' stroke-linecap='round'/%3E%3Ccircle cx='10' cy='5.9' r='1.3'/%3E%3C/svg%3E");
}

.doubravan-alert__body,
.doubravan-alert__actions {
	grid-column: 2;
	min-width: 0;
}

/* Předek zvedá specificitu nad odstavce a seznamy `.entry-content`. */
.doubravan-vstupenky .doubravan-alert__body p,
.doubravan-alert__body p {
	margin: 0;
	font-size: inherit;
	line-height: inherit;
}

.doubravan-vstupenky .doubravan-alert__body p + p,
.doubravan-alert__body p + p {
	margin-top: 0.4rem;
}

.doubravan-alert__title {
	font-weight: 600;
}

.doubravan-alert a {
	color: var(--doubravan-accent);
	font-weight: 600;
	text-decoration: underline;
	text-underline-offset: 3px;
	overflow-wrap: anywhere;
}

/* Souhrn chyb nad formulářem: odkazy na pole v chybové barvě. */
.doubravan-vstupenky .doubravan-alert__list,
.doubravan-alert__list {
	margin: 0.4rem 0 0;
	padding-left: 1.1em;
	list-style: disc;
}

.doubravan-vstupenky .doubravan-alert__list li,
.doubravan-alert__list li {
	margin: 0.2rem 0 0;
	line-height: inherit;
}

.doubravan-alert .doubravan-alert__list a {
	color: var(--doubravan-danger);
	font-weight: 500;
}

.doubravan-alert__actions {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.8rem 1.6rem;
	margin-top: 0.8rem;
}

/* Místo pro jedno hlášení (`data-doubravan-alert-slot`); nové staré
   nahradí. Lepivá varianta drží hlášení u spodního okraje okna, dokud
   je obsah nad ním vidět (plánek); nad lištou na mobilu ji posune
   `--doubravan-alert-sticky-bottom`. */
.doubravan-alert-slot--sticky {
	position: sticky;
	bottom: var(--doubravan-alert-sticky-bottom, 0);
	z-index: 3;
	background: var(--doubravan-page-bg);
}

.doubravan-alert-slot--sticky:has(> .doubravan-alert) {
	padding: 0.4rem 0;
}

.doubravan-alert-slot--sticky > .doubravan-alert {
	margin-top: 0.4rem;
	margin-bottom: 0.4rem;
}

@media (prefers-reduced-motion: no-preference) {

	.doubravan-alert {
		animation: doubravan-alert-in 160ms ease-out;
	}

	@keyframes doubravan-alert-in {

		from {
			opacity: 0;
			transform: translateY(-2px);
		}
	}
}

/* Štítek stavu objednávky; modifikátor skládá `order.php`. */
.doubravan-badge {
	display: inline-flex;
	align-items: center;
	padding: 0.3em 1em;
	border-radius: 999px;
	font-size: var(--doubravan-fs-small);
	font-weight: 600;
	white-space: nowrap;
}

.doubravan-badge--neutral {
	background: var(--doubravan-line);
	color: var(--doubravan-ink);
}

.doubravan-badge--success {
	background: var(--doubravan-success);
	color: #fff;
}

.doubravan-badge--danger {
	background: var(--doubravan-danger);
	color: #fff;
}

.doubravan-badge--muted {
	background: var(--doubravan-tlumena);
	color: #fff;
}

/* ------------------------------------------------------------------ */
/* 4. Lístek (ADR 0035, ADR 0045 bod 4)                                */
/* ------------------------------------------------------------------ */

/* Lístek se skládá podle šířky seznamu, ne okna – stejná karta sedí
   v košíku, na objednávce i v panelu výběru. */
.doubravan-ticket-list {
	container: doubravan-tickets / inline-size;
	display: flex;
	flex-direction: column;
	gap: 1rem;
}

/* Úzký lístek má dva řádky: nahoře oddíl a místo s odebráním, pod
   vodorovnou perforací typ a cena. Horní řádek má pevnou výšku, aby
   výřezy v okrajích seděly na perforaci. Výřezy vyřezává maska (prosvítá
   skutečné pozadí), obrys jim kreslí kroužek v pozadí karty. */
.doubravan-ticket {
	--ticket-pad-x: 1.2rem;
	--ticket-pad-y: 1.2rem;
	--ticket-top: 4.4rem;
	--ticket-gap: 1rem;
	--ticket-notch: 8px;
	--ticket-perf-y: calc(var(--ticket-pad-y) + var(--ticket-top) + var(--ticket-gap) + 2px);
	--ticket-a: 0 var(--ticket-perf-y);
	--ticket-b: 100% var(--ticket-perf-y);

	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--ticket-gap) 1rem;
	padding: var(--ticket-pad-y) var(--ticket-pad-x);
	border: 1px solid var(--doubravan-line);
	border-radius: var(--doubravan-radius);
	background:
		radial-gradient(circle at var(--ticket-a), transparent var(--ticket-notch), var(--doubravan-line) var(--ticket-notch), var(--doubravan-line) calc(var(--ticket-notch) + 1px), transparent calc(var(--ticket-notch) + 1px)) border-box,
		radial-gradient(circle at var(--ticket-b), transparent var(--ticket-notch), var(--doubravan-line) var(--ticket-notch), var(--doubravan-line) calc(var(--ticket-notch) + 1px), transparent calc(var(--ticket-notch) + 1px)) border-box,
		var(--doubravan-ticket-bg);
	-webkit-mask:
		radial-gradient(circle at var(--ticket-a), transparent var(--ticket-notch), #000 calc(var(--ticket-notch) + 0.5px)),
		radial-gradient(circle at var(--ticket-b), transparent var(--ticket-notch), #000 calc(var(--ticket-notch) + 0.5px));
	-webkit-mask-composite: source-in;
	mask:
		radial-gradient(circle at var(--ticket-a), transparent var(--ticket-notch), #000 calc(var(--ticket-notch) + 0.5px)),
		radial-gradient(circle at var(--ticket-b), transparent var(--ticket-notch), #000 calc(var(--ticket-notch) + 0.5px));
	mask-composite: intersect;
	font-size: var(--doubravan-fs-text);
}

.doubravan-ticket__place {
	order: 1;
	flex: 1 1 0;
	display: flex;
	flex-direction: column;
	justify-content: center;
	min-width: 0;
	min-height: var(--ticket-top);
}

.doubravan-ticket__section,
.doubravan-ticket__seat {
	overflow: hidden;
	white-space: nowrap;
	text-overflow: ellipsis;
}

.doubravan-ticket__section {
	font-size: var(--doubravan-fs-small);
	line-height: 2rem;
	color: var(--doubravan-tlumena);
}

.doubravan-ticket__seat {
	font-weight: 600;
	line-height: 2.4rem;
}

.doubravan-ticket__remove {
	order: 2;
	flex: none;
}

.doubravan-ticket__perforation {
	order: 3;
	flex: 0 0 calc(100% + 2 * var(--ticket-pad-x));
	height: 0;
	margin: 0 calc(-1 * var(--ticket-pad-x));
	border-top: 2px dashed var(--doubravan-line);
}

.doubravan-ticket__type {
	order: 4;
	flex: 1 1 auto;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.6rem;
}

.doubravan-ticket__price {
	order: 5;
	flex: none;
	margin-left: auto;
	white-space: nowrap;
	text-align: right;
	font-weight: 600;
	font-variant-numeric: tabular-nums;
}

/* Typ u čítače volného sezení (ADR 0051 bod 2): na úzkém lístku nad
   čítačem, aby oba řádky (dospělý, dítě) vypadaly stejně. Tělo má základ
   0 – jinak by se počítalo s typem i čítačem na jednom řádku a delší
   „Dítě do 15 let“ by odsunulo cenu pod čítač. */
.doubravan-ticket__type:has(> .doubravan-ticket__type-label) {
	flex: 1 1 0;
}

.doubravan-ticket__type-label {
	flex: 1 1 100%;
}

/* Široký lístek má jeden řádek: oddíl a místo | perforace přes celou
   výšku | typ | cena | odebrání. Výřezy jsou nahoře a dole v místě
   perforace, kterou určuje pevná šířka prvního sloupce. Práh je nejužší
   šířka, do které se vejde přepínač „Dospělý | Dítě do 15 let“. */
@container doubravan-tickets (min-width: 660px) {
	.doubravan-ticket {
		--ticket-pad-x: 1.6rem;
		--ticket-stub: 17rem;
		--ticket-gap-x: 1.6rem;
		--ticket-perf-x: calc(var(--ticket-pad-x) + var(--ticket-stub) + var(--ticket-gap-x) + 2px);
		--ticket-a: var(--ticket-perf-x) 0;
		--ticket-b: var(--ticket-perf-x) 100%;

		display: grid;
		grid-template-columns: var(--ticket-stub) 0 minmax(0, 1fr) auto 44px;
		column-gap: var(--ticket-gap-x);
	}

	.doubravan-ticket--readonly {
		grid-template-columns: var(--ticket-stub) 0 minmax(0, 1fr) auto;
	}

	.doubravan-ticket__place,
	.doubravan-ticket__remove,
	.doubravan-ticket__type,
	.doubravan-ticket__price {
		order: 0;
	}

	.doubravan-ticket__perforation {
		order: 0;
		align-self: stretch;
		width: 0;
		height: auto;
		margin: calc(-1 * var(--ticket-pad-y)) 0;
		border-top: 0;
		border-left: 2px dashed var(--doubravan-line);
	}

	.doubravan-ticket__price {
		min-width: 8rem;
		margin-left: 0;
	}

	/* Typ vedle čítače; stejná šířka zarovná čítače pod sebou. */
	.doubravan-ticket__type-label {
		flex: 0 0 13rem;
	}
}

/* Nevyplněný lístek prázdného košíku: útržek s linkou místo čísla místa,
   za perforací text a odkaz na koncerty. Linka má s popiskem výšku
   `--ticket-top`, výřezy tak sedí na perforaci jako u plného lístku. */
.doubravan-ticket__blank-line {
	display: block;
	width: 12rem;
	max-width: 100%;
	height: 2.2rem;
	border-bottom: 1px solid var(--doubravan-line);
}

.doubravan-ticket__body {
	order: 4;
	flex: 1 1 100%;
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 0.4rem;
	padding: 0.4rem 0 0.2rem;
}

/* Dvě třídy přebijí okraje odstavců `.entry-content p` šablony. */
.doubravan-ticket--blank .doubravan-ticket__body p {
	margin: 0;
}

.doubravan-ticket--blank .doubravan-ticket__blank-title {
	font-weight: 600;
}

.doubravan-ticket__body .doubravan-btn {
	margin-top: 0.8rem;
}

@container doubravan-tickets (min-width: 660px) {
	.doubravan-ticket--blank {
		grid-template-columns: var(--ticket-stub) 0 minmax(0, 1fr);
	}

	.doubravan-ticket--blank .doubravan-ticket__place {
		align-self: start;
		justify-content: flex-start;
	}

	.doubravan-ticket__body {
		order: 0;
		padding: 0.2rem 0;
	}
}

/* ------------------------------------------------------------------ */
/* 5. Nákup na stránce koncertu (`parts/purchase.php`, ADR 0045)       */
/* ------------------------------------------------------------------ */

.doubravan-concert-price {
	font-weight: 600;
}

/* Poznámka sálu pro diváky pod cenou. */
.doubravan-venue-note {
	color: var(--doubravan-tlumena);
	font-size: var(--doubravan-fs-small);
}

/* Poznámky u prodeje (abonentka, termín převodu, přeložený termín). */
.doubravan-sales-note {
	background: var(--doubravan-page-bg);
	border-left: 4px solid var(--doubravan-accent);
	margin: 1.5em 0;
	padding: 0.8em 1em;
}

/* Náhled připraveného koncertu, jen pro správce. */
.doubravan-preview-banner {
	padding: 0.8em 1em;
	background: #fff6e0;
	border: 1px dashed var(--doubravan-muted);
	margin-bottom: 1.2em;
}

.doubravan-preview-banner p {
	margin: 0;
	font-weight: 600;
}

/* Drobné řádky pod výběrem (lhůta držení, dostupnost, košík). */
.doubravan-hold-note {
	margin: 0.5em 0 0;
	color: var(--doubravan-muted);
	font-size: var(--doubravan-fs-small);
}

#doubravan-tickets-widget {
	/* Obrys místa proti stínu sálu 3,1 : 1 (WCAG 1.4.11); linka lístku
	   `--doubravan-line` měla jen 1,2 : 1. */
	--doubravan-plan-line: #8c8058;
	--doubravan-plan-unavailable: #bfb286;

	margin-top: 2em;
}

/* Prvky se třídou s vlastním `display` (tlačítko, lišta, seznam lístků)
   by jinak `hidden` ignorovaly; id přebije třídu. */
#doubravan-tickets-widget [hidden] {
	display: none;
}

/* --- Plánek: `plan.css` sdílí administrace, veřejné úpravy jsou tady. */

#doubravan-tickets-widget #doubravan-plan-canvas {
	padding: 1.6rem;
	border: 1px solid var(--doubravan-line);
	border-radius: var(--doubravan-radius);
	background: none;
}

/* Šablona dává `svg` `max-width: 100%` a na mobilu plánek zmenšovala.
   Širší plánek se posouvá v rámu, užší vystředí auto okraje. */
#doubravan-tickets-widget #doubravan-plan-canvas svg {
	max-width: none;
	margin: 0 auto;
}

#doubravan-tickets-widget .doubravan-plan-row-label,
#doubravan-tickets-widget .doubravan-plan-section-label,
#doubravan-tickets-widget .doubravan-plan-stage-label,
#doubravan-tickets-widget .doubravan-plan-door-label {
	font-size: 13px;
	fill: var(--doubravan-tlumena);
}

/* Pódium: pruh nad první řadou (ADR 0045 bod 2) nebo plocha mezi prvky
   sálu (ADR 0047 bod 9), obojí barvou linky. */
#doubravan-tickets-widget .doubravan-plan-stage {
	fill: var(--doubravan-line);
}

#doubravan-tickets-widget .doubravan-plan-group {
	stroke: var(--doubravan-plan-line);
}

#doubravan-tickets-widget .doubravan-plan-group-seam {
	fill: var(--doubravan-plan-line);
}

/* Polovina švu u vybraného místa světlá: hnědá linka na akcentu má
   kontrast 1,3 : 1 a působí špinavě, světlý akcent 4 : 1. */
#doubravan-tickets-widget rect.doubravan-seat-mine + .doubravan-plan-group-seam,
#doubravan-tickets-widget rect.doubravan-seat-mine + .doubravan-plan-group-seam + .doubravan-plan-group-seam {
	fill: var(--doubravan-accent-light);
}

/* Čtyři stavy místa pro zákazníka (ADR 0045 bod 3, `visualStatus()`
   v `public-plan.js`): volné, váš výběr, ve vašem košíku, nedostupné. */
#doubravan-tickets-widget .doubravan-seat-available {
	--doubravan-seat-color: var(--doubravan-ticket-bg);
}

#doubravan-tickets-widget .doubravan-seat-mine {
	--doubravan-seat-color: var(--doubravan-accent);
}

#doubravan-tickets-widget .doubravan-seat-mine_cart {
	--doubravan-seat-color: var(--doubravan-accent-light);
}

#doubravan-tickets-widget .doubravan-seat-unavailable {
	--doubravan-seat-color: var(--doubravan-plan-unavailable);
}

/* Obrys je vždy linka plánku, stav nese jen výplň. Místo ve skupině
   (ADR 0047) obrys nemá, kreslí ho tvar skupiny; nedostupné je plná
   plocha bez obrysu, od volného ho dělí tvar, ne jen odstín. */
#doubravan-tickets-widget rect.doubravan-seat {
	stroke: var(--doubravan-plan-line);
}

#doubravan-tickets-widget rect.doubravan-seat[data-seat-group],
#doubravan-tickets-widget rect.doubravan-seat-unavailable {
	stroke: none;
}

/* Místo, které mezitím vybral někdo jiný: obrys v barvě chyby, dokud
   platí hlášení pod plánkem (ADR 0087, `markConflict()`). */
#doubravan-tickets-widget rect.doubravan-seat.is-conflict {
	stroke: var(--doubravan-danger);
	stroke-width: 3;
}

#doubravan-tickets-widget rect.doubravan-seat-available:not(.is-readonly):hover {
	fill: color-mix(in srgb, var(--doubravan-accent) 14%, var(--doubravan-ticket-bg));
	transition: none;
}

#doubravan-tickets-widget .doubravan-seat-check {
	fill: var(--doubravan-accent);
	font-size: 16px;
	font-weight: 700;
	dominant-baseline: central;
	pointer-events: none;
}

#doubravan-tickets-widget #doubravan-plan-legend {
	gap: 0.8rem 2rem;
	margin-top: 1.2rem;
}

#doubravan-tickets-widget #doubravan-plan-legend span {
	gap: 0.8rem;
	font-size: 1.4rem;
}

#doubravan-tickets-widget #doubravan-plan-legend i {
	position: relative;
	width: 2rem;
	height: 2rem;
	border: 1px solid var(--doubravan-plan-line);
	border-radius: 3px;
}

#doubravan-tickets-widget #doubravan-plan-legend i.doubravan-seat-unavailable {
	border-color: transparent;
}

#doubravan-tickets-widget #doubravan-plan-legend i.doubravan-seat-mine_cart::after {
	content: "✓";
	position: absolute;
	inset: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	color: var(--doubravan-accent);
	font-size: 1.3rem;
	font-style: normal;
	font-weight: 700;
	line-height: 1;
}

/* „V košíku máte N míst na tento koncert.“ */
#doubravan-plan-cart-note a {
	color: var(--doubravan-accent);
	font-weight: 600;
}

/* --- Panel „Váš výběr“ vedle plánku (ADR 0045 bod 1). */

/* Plánek a panel 34rem se vedle sebe vejdou od 1080 px (širší plánek
   se zmenší, viz níž). Sloupec textu koncertu má 88rem, proto se výběr
   od 1360 px okna rozšíří doprava do okraje stránky. Užší: panel pod
   plánkem. */
.doubravan-select--with-panel {
	container: doubravan-select / inline-size;
}

@media (min-width: 1360px) {
	.doubravan-select--with-panel {
		width: min(100% + (100vw - 100%) / 2 - 4rem, 112rem);
	}
}

.doubravan-select__panel {
	margin-top: 2.4rem;
}

/* Dvě třídy přebijí `.entry-content h3` šablony. */
.doubravan-select__panel .doubravan-select__title {
	margin: 0 0 1.2rem;
	font-size: var(--doubravan-fs-ticket-title);
	font-weight: 700;
	line-height: 1.3;
	letter-spacing: normal;
}

/* Fokus sem posílá JS kvůli čtečkám, rámeček jen z klávesnice. */
.doubravan-select__title:focus:not(:focus-visible),
.doubravan-added__title:focus:not(:focus-visible) {
	outline: none;
}

.doubravan-select__panel .doubravan-select__empty {
	margin: 0;
	color: var(--doubravan-tlumena);
}

.doubravan-select__tickets {
	margin-bottom: 1.6rem;
}

/* Odpočet výběru pod tlačítkem (ADR 0070 bod 4): zbývající čas, pod
   ním drobně lhůta v košíku. */
.doubravan-select__hold {
	margin-top: 0.8rem;
}

.doubravan-select__hold .doubravan-hold-note {
	margin: 0.2rem 0 0;
}

/* Hlášení výběru (ADR 0087; strop s kontaktem podle ADR 0070 bod 3,
   vypršení výběru, vyprodáno): v panelu nad tlačítkem, u volného
   sezení pod čítači. Vzhled dává komponenta, tady jen odstup. */
#doubravan-tickets-widget .doubravan-selection-alert > .doubravan-alert {
	margin: 0 0 1.6rem;
}

/* Dlouhý popisek „Přidat do košíku: 2 vstupenky, 400 Kč“ se v úzkém
   panelu láme do dvou vyrovnaných řádků. */
.doubravan-main-action {
	text-wrap: balance;
}

/* Hlášení pod plánkem (zjištění 89, ADR 0087): u vysokého plánku by
   bylo pod okrajem obrazovky a kliknuté místo by jen zešedlo. Dokud je
   plánek vidět, drží se u spodního okraje okna (`--sticky`), na mobilu
   nad lištou (výšku lišty dává `updateMobileBar()`). */
#doubravan-tickets-widget .doubravan-alert-slot--sticky {
	--doubravan-alert-sticky-bottom: var(--doubravan-mobile-bar-height, 0px);
	z-index: 4;
}

@container doubravan-select (min-width: 1080px) {

	/* Vedle panelu se širší plánek zmenší na šířku sloupce (sokolovna
	   o 3 %), místo aby se posouval; na mobilu se posouvá dál. */
	#doubravan-tickets-widget #doubravan-plan-canvas svg {
		max-width: 100%;
		height: auto;
	}

	.doubravan-select__grid {
		display: grid;
		grid-template-columns: minmax(0, max-content) minmax(34rem, 1fr);
		column-gap: 2.4rem;
		align-items: start;
	}

	/* Drží se při posouvání v rámci oddílu. Hodně lístků se posouvá uvnitř
	   panelu, tlačítko zůstává vidět. */
	.doubravan-select__panel {
		position: sticky;
		top: 2.4rem;
		display: flex;
		flex-direction: column;
		max-height: calc(100vh - 4.8rem);
		margin-top: 8px;
	}

	.admin-bar .doubravan-select__panel {
		top: calc(32px + 2.4rem);
		max-height: calc(100vh - 32px - 4.8rem);
	}

	.doubravan-select__tickets {
		flex: 0 1 auto;
		min-height: 0;
		overflow-y: auto;
	}

	/* Posuvník vidět pořád (zjištění 91): macOS ho ve výchozím nastavení
	   ukáže až při posouvání a seznam pak vypadá useknutý. Vlastní
	   posuvník Safari a prohlížeče na Chromiu (Brave, Chrome, Edge)
	   neskrývají. Jezdec má barvu obrysu míst, 3,4 : 1 proti pozadí. */
	.doubravan-select__tickets::-webkit-scrollbar {
		width: 8px;
	}

	.doubravan-select__tickets::-webkit-scrollbar-track {
		background: transparent;
	}

	.doubravan-select__tickets::-webkit-scrollbar-thumb {
		background: var(--doubravan-plan-line);
		border-radius: 4px;
	}

	/* Vyblednutí u okraje, za kterým jsou další lístky – nápověda i ve
	   Firefoxu na Macu. Třídy přepíná `syncTicketsOverflow()`. Druhá
	   vrstva masky nechá pruh posuvníku vpravo nevybledlý. */
	.doubravan-select__tickets.has-more-above,
	.doubravan-select__tickets.has-more-below {
		--doubravan-fade-top: #000;
		--doubravan-fade-bottom: #000;
		mask-image:
			linear-gradient(to bottom, var(--doubravan-fade-top), #000 4rem, #000 calc(100% - 4rem), var(--doubravan-fade-bottom)),
			linear-gradient(#000, #000);
		mask-size: calc(100% - 8px) 100%, 8px 100%;
		mask-position: left top, right top;
		mask-repeat: no-repeat;
	}

	.doubravan-select__tickets.has-more-above {
		--doubravan-fade-top: transparent;
	}

	.doubravan-select__tickets.has-more-below {
		--doubravan-fade-bottom: transparent;
	}

	.doubravan-select__panel .doubravan-main-action {
		width: 100%;
	}
}

@media (max-width: 699px) {

	.doubravan-select__panel .doubravan-main-action {
		width: 100%;
	}
}

/* --- Volné sezení: řádek s čítačem pro každý typ (`parts/quantity-row.php`). */

.doubravan-qty-group {
	margin: 1.5em 0;
	background: var(--doubravan-ticket-bg);
	border: 1px solid var(--doubravan-line);
	border-radius: var(--doubravan-radius);
	overflow: hidden;
}

.doubravan-qty-row {
	display: flex;
	flex-direction: column;
	gap: 0.6em;
	padding: 1em 1.4em;
	border-bottom: 1px solid var(--doubravan-line);
	font-size: var(--doubravan-fs-text);
}

.doubravan-qty-row:last-child {
	border-bottom: 0;
}

.doubravan-qty-row__name {
	font-weight: 600;
}

.doubravan-qty-row__unit-price {
	color: var(--doubravan-tlumena);
	font-size: var(--doubravan-fs-small);
	font-variant-numeric: tabular-nums;
}

.doubravan-qty-row__controls {
	display: flex;
	align-items: center;
	justify-content: space-between;
	flex-wrap: wrap;
	gap: 1em;
}

.doubravan-qty-row__counter {
	display: flex;
	align-items: center;
	gap: 0.8em;
}

/* Cena za řádek je při nule prázdná, ale drží šířku – jinak čítač po
   prvním „+“ uskočil a druhé kliknutí minulo. 9ch pojme „10 000 Kč“. */
.doubravan-qty-row__total {
	font-weight: 600;
	font-variant-numeric: tabular-nums;
	min-width: 9ch;
	text-align: right;
}

@media (min-width: 700px) {
	.doubravan-qty-row {
		flex-direction: row;
		align-items: center;
		justify-content: space-between;
	}

	.doubravan-qty-row__info {
		display: flex;
		align-items: baseline;
		gap: 0.8em;
	}
}

/* `−` při nule (`public-plan.js`); akcent má jen hlavní tlačítko
   (ADR 0045 bod 6). */
.doubravan-qty-row .doubravan-counter-step:disabled {
	opacity: 0.45;
	cursor: not-allowed;
	color: var(--doubravan-tlumena);
	border-color: var(--doubravan-line);
}

.doubravan-general-actions {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.4em 1em;
	margin-top: 1em;
}

/* --- Potvrzení po přidání jako lístek (ADR 0070 bod 5): na místě
   panelu nebo tlačítka. Komponenta lístku beze změny, jen horní část
   má řádků podle toho, co přibylo – výšku pro výřezy (`--ticket-top`)
   proto měří `syncTicketNotch()` v `public-plan.js`. Výrazná je jen
   značka v záhlaví: tatáž jako místo „ve vašem košíku“ v plánku
   a legendě, ať zákazník spojí potvrzení s přebarvenými místy. */

.doubravan-added {
	margin-top: 1em;
}

.doubravan-select__panel .doubravan-added {
	margin-top: 0;
}

.doubravan-ticket.doubravan-ticket--added {
	max-width: 44rem;
	--ticket-pad-x: 1.6rem;
	--ticket-pad-y: 1.4rem;
	--ticket-gap: 1.4rem;
}

.doubravan-select__panel .doubravan-ticket--added {
	max-width: none;
}

.doubravan-ticket--added .doubravan-added__head {
	display: grid;
	grid-template-columns: 2.4rem minmax(0, 1fr);
	column-gap: 1rem;
	align-items: center;
	min-height: 0;
}

.doubravan-added__mark {
	position: relative;
	width: 2.4rem;
	height: 2.4rem;
	background: var(--doubravan-accent-light);
	border: 1px solid var(--doubravan-plan-line);
	border-radius: 3px;
}

.doubravan-added__mark::after {
	content: "✓";
	position: absolute;
	inset: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	color: var(--doubravan-accent);
	font-size: 1.5rem;
	font-weight: 700;
	line-height: 1;
}

/* Dvě třídy přebijí `.entry-content h3` šablony. */
.doubravan-ticket--added .doubravan-added__title {
	margin: 0;
	font-size: var(--doubravan-fs-ticket-title);
	font-weight: 700;
	line-height: 1.3;
	letter-spacing: normal;
}

.doubravan-added__lines,
.doubravan-ticket--added .doubravan-added__sum {
	grid-column: 2;
}

.doubravan-added__lines {
	margin-top: 0.4rem;
}

.doubravan-ticket--added .doubravan-added__line {
	margin: 0;
	color: var(--doubravan-tlumena);
	font-size: var(--doubravan-fs-small);
	line-height: 1.5;
}

.doubravan-ticket--added .doubravan-added__sum {
	display: flex;
	flex-wrap: wrap;
	justify-content: space-between;
	gap: 0 1rem;
	margin: 0.6rem 0 0;
	font-weight: 600;
	font-variant-numeric: tabular-nums;
}

.doubravan-added__amount {
	white-space: nowrap;
}

/* Pod perforací odpočet, hlavní tlačítko přes celou šířku a pod ním
   textové „Vybrat další“. */
.doubravan-ticket--added .doubravan-added__body {
	align-items: stretch;
	gap: 0.8rem;
	padding: 0;
}

.doubravan-ticket--added .doubravan-added__body .doubravan-btn {
	margin-top: 0;
}

.doubravan-ticket--added .doubravan-countdown {
	margin: 0;
}

.doubravan-ticket--added .doubravan-link-button {
	align-self: center;
}

@media (prefers-reduced-motion: no-preference) {
	.doubravan-ticket--added:not([hidden]) {
		animation: doubravan-added-in 0.24s ease-out;
	}
}

@keyframes doubravan-added-in {
	from {
		opacity: 0;
		transform: translateY(0.6rem);
	}
}

/* --- Lišta na mobilu (ADR 0045 bod 1): v toku na konci oddílu
   a přilepená dole, takže nepřekryje obsah pod oddílem. Přes celou
   šířku (obsah má na mobilu 2rem okraj), místo stínu horní linka. */

.doubravan-mobile-bar {
	position: sticky;
	bottom: 0;
	z-index: 5;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1.2rem;
	margin: 2.4rem -2rem 0;
	padding: 1rem 2rem calc(1rem + env(safe-area-inset-bottom, 0px));
	background: var(--doubravan-page-bg);
	border-top: 1px solid var(--doubravan-line);
}

.doubravan-mobile-bar .doubravan-mobile-bar__summary {
	flex: 1 1 auto;
	min-width: 0;
	margin: 0;
	font-weight: 600;
	font-variant-numeric: tabular-nums;
}

.doubravan-mobile-bar__summary > span {
	display: block;
}

/* Odpočet výběru pod počtem a částkou (ADR 0070 bod 4). */
.doubravan-mobile-bar .doubravan-mobile-bar__time {
	font-weight: 400;
}

.doubravan-mobile-bar .doubravan-btn {
	flex: none;
	padding: 0.6em 1em;
}

@media (min-width: 700px) {

	.doubravan-mobile-bar {
		display: none;
	}
}

/* ------------------------------------------------------------------ */
/* 6. Košík a objednávka                                               */
/* ------------------------------------------------------------------ */

/* Lístky jednoho koncertu (`parts/order-items.php`): název s odkazem,
   datum a místo drobně, pak karty bez společného rámu. */
.doubravan-ticket-group {
	margin: 1.5em 0;
}

.doubravan-ticket-group__header {
	padding: 0 0 1.2rem;
}

/* Dvě třídy přebijí `.entry-content h2` šablony. */
.doubravan-ticket-group__header .doubravan-ticket-group__title {
	margin: 0;
	font-size: var(--doubravan-fs-ticket-title);
	line-height: 1.3;
}

.doubravan-ticket-group__title a {
	color: inherit;
	text-decoration: none;
}

.doubravan-ticket-group__title a:hover,
.doubravan-ticket-group__title a:focus {
	text-decoration: underline;
}

.doubravan-ticket-group__meta {
	margin: 0.2em 0 0;
	font-size: var(--doubravan-fs-small);
	color: var(--doubravan-tlumena);
}

/* Hlášení ke koncertu v košíku (ADR 0087): mezi záhlavím a lístky,
   k lístkům blíž, záhlaví už odstup má. */
.doubravan-ticket-group > .doubravan-ticket-group__alert {
	margin: 0 0 1rem;
}

.doubravan-ticket-group__subtotal {
	display: flex;
	justify-content: space-between;
	gap: 1em;
	padding: 0.8em 0 0;
	font-weight: 600;
	font-size: var(--doubravan-fs-text);
}

/* Souhrn ceny (`parts/summary.php`), čísla vpravo. */
.doubravan-summary {
	width: 100%;
	margin: 1.5em 0;
}

.doubravan-summary__row {
	display: flex;
	justify-content: space-between;
	gap: 1em;
	padding: 0.5em 0;
	border-bottom: 1px solid var(--doubravan-line);
	font-size: var(--doubravan-fs-text);
}

.doubravan-summary__amount {
	font-variant-numeric: tabular-nums;
	text-align: right;
	white-space: nowrap;
}

.doubravan-summary__row--discount {
	color: var(--doubravan-success);
}

.doubravan-summary__row--total {
	margin-top: 0.2em;
	padding-top: 0.9em;
	border-top: 2px solid var(--doubravan-line);
	border-bottom: 0;
	font-weight: 700;
	font-size: var(--doubravan-fs-heading);
}

/* Bez slevy je Celkem jediný řádek, silná linka nad ním nemá co oddělit. */
.doubravan-summary--total-only .doubravan-summary__row--total {
	margin-top: 0;
	border-top-width: 1px;
}

/* Formulář „Vaše údaje“: jméno a souhlas přes celou šířku, e-mail
   a telefon vedle sebe od 700 px (ADR 0051 bod 6). */
.doubravan-checkout-fields {
	display: grid;
	grid-template-columns: 1fr;
	gap: 0.2em 1.5em;
	max-width: 42em;
}

@media (min-width: 700px) {
	.doubravan-checkout-fields {
		grid-template-columns: 1fr 1fr;
	}

	.doubravan-checkout-fields .doubravan-form-row--name,
	.doubravan-checkout-fields .doubravan-form-row--consent {
		grid-column: 1 / -1;
	}
}

.doubravan-honeypot {
	position: absolute;
	left: -9999px;
	top: auto;
	width: 1px;
	height: 1px;
	overflow: hidden;
}

.doubravan-form-row {
	margin: 0.6em 0;
	display: flex;
	flex-direction: column;
	gap: 0.3em;
}

.doubravan-form-row label {
	font-size: var(--doubravan-fs-small);
	font-weight: 600;
}

/* Souhlas s předsazením: zaškrtávátko v okraji, text se zalamuje pod
   text, ne pod políčko. Bez flexu a gridu – text s odkazy by se rozpadl
   na samostatné položky. Políčko 20 px na střed prvního řádku. */
.doubravan-form-row--consent {
	margin-top: 1.2em;
}

.doubravan-form-row--consent label {
	position: relative;
	display: block;
	padding-left: calc(20px + 1rem);
	font-weight: 400;
	line-height: 1.5;
}

.doubravan-form-row--consent input[type="checkbox"] {
	position: absolute;
	top: calc((1lh - 20px) / 2);
	left: 0;
	width: 20px;
	height: 20px;
	margin: 0;
	/* `1lh` se počítá z pole – zdědí řádek popisku. */
	font-size: inherit;
	line-height: inherit;
}

.doubravan-form-row input[type="text"],
.doubravan-form-row input[type="email"],
.doubravan-form-row input[type="tel"] {
	width: 100%;
	max-width: 100%;
	min-height: 44px;
	box-sizing: border-box;
	font-size: var(--doubravan-fs-text);
	border: 1px solid var(--doubravan-line);
	border-radius: var(--doubravan-radius);
	padding: 0 0.8em;
}

/* Chyba u pole (ADR 0087): okraj 2 px v chybové barvě, text s ikonou
   hned pod polem, nad nápovědou. Odsazení ubírá rozdíl okraje, ať text
   v poli neposkočí. */
.doubravan-form-row input[aria-invalid="true"] {
	border: 2px solid var(--doubravan-danger);
	padding: 0 calc(0.8em - 1px);
}

.doubravan-form-row--consent input[aria-invalid="true"] {
	outline: 2px solid var(--doubravan-danger);
	outline-offset: 1px;
}

/* Hlášení nad formulářem dostane fokus ze skriptu kvůli čtečkám
   (`public-checkout.js`); je to text, ne ovládací prvek, rámeček nemá. */
#doubravan-checkout-alert > .doubravan-alert[tabindex="-1"]:focus {
	outline: none;
}

/* Chybné pole s fokusem: okraj zůstane v chybové barvě (šablona ho jinak
   přebarví), fokus ukáže obrys v akcentu. */
.doubravan-form-row input[aria-invalid="true"]:focus {
	border-color: var(--doubravan-danger);
	outline: 2px solid var(--doubravan-accent);
	outline-offset: 2px;
}

.doubravan-field-error {
	display: flex;
	gap: 0.6rem;
	align-items: flex-start;
	color: var(--doubravan-danger);
	font-size: var(--doubravan-fs-small);
	font-weight: 500;
	line-height: 1.45;
}

.doubravan-field-error .doubravan-field-error__icon {
	flex: none;
	width: 16px;
	height: 16px;
	margin-top: 0.2rem;
}

.doubravan-form-row--consent .doubravan-field-error {
	margin-top: 0.6rem;
	padding-left: calc(20px + 1rem);
}

.doubravan-field-hint {
	display: block;
	color: var(--doubravan-tlumena);
	font-size: var(--doubravan-fs-small);
}

.doubravan-checkout-note {
	color: var(--doubravan-tlumena);
	font-size: var(--doubravan-fs-small);
}

/* Věta o bezpečí a loga karet pod tlačítkem platby (ADR 0053 bod 8).
   Loga jsou oříznutá na obsah; výška 24 px je nejnižší z nich (Visa),
   žádné se tak nezvětšuje nad vlastní rozlišení. */
.doubravan-vstupenky .doubravan-payment-trust {
	margin-top: 0.8rem;
}

.doubravan-vstupenky .doubravan-payment-trust .doubravan-checkout-note {
	margin: 0;
}

.doubravan-vstupenky .doubravan-payment-logos {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.8rem 1.6rem;
	margin: 1.2rem 0 0;
	padding: 0;
	list-style: none;
}

.doubravan-vstupenky .doubravan-payment-logos li {
	margin: 0;
}

.doubravan-vstupenky .doubravan-payment-logos img {
	display: block;
	width: auto;
	height: 2.4rem;
}

.doubravan-order-number {
	white-space: nowrap;
}

/* Volba způsobu platby v košíku (krok KP-1a plánu vstupenek, ADR 0073) –
   bez rámečku navíc, jen odsazené radiobuttony jako zbytek formuláře. */
.doubravan-payment-method {
	margin: 1.2em 0;
	padding: 0;
	border: 0;
}

.doubravan-payment-method legend {
	padding: 0;
	font-size: var(--doubravan-fs-small);
	font-weight: 600;
}

.doubravan-payment-method p {
	margin: 0.4em 0;
}

.doubravan-payment-method .doubravan-field-hint {
	display: inline;
	margin-left: 0.4em;
}

/* QR platba na čekající objednávce placené převodem (krok KP-1a, ADR 0073) –
   stejný rámeček jako `.doubravan-note`, ale bez levého pruhu (není to
   upozornění, je to formulář platby jako `.doubravan-order-pay-form`). */
.doubravan-transfer-box {
	padding: 1.2em;
	background: var(--doubravan-ticket-bg);
	border: 1px solid var(--doubravan-line);
	border-radius: var(--doubravan-radius);
	margin: 1.2em 0;
}

/* Krok KP-2 plánu vstupenek: nadpis je uvnitř rámečku první, jeho vlastní
   horní odstup (`.doubravan-section-heading`, 1.8em) se tu sčítal s
   paddingem rámečku (1.2em) – zbytečná mezera přes nadpisem (~60 px na
   1440 px šířky). Padding rámečku sám stačí, stejně jako u ostatních
   rámečků stránky (`.doubravan-note`, `.doubravan-order-pay-form`), které
   svůj první prvek žádným vlastním odstupem navíc neodsazují. */
.doubravan-transfer-box .doubravan-section-heading {
	margin-top: 0;
}

.doubravan-transfer-box .doubravan-transfer-once {
	font-weight: 600;
	color: inherit;
}

.doubravan-transfer-box__layout {
	display: flex;
	flex-wrap: wrap;
	gap: 1.2em 1.6em;
	align-items: flex-start;
	margin: 0.8em 0;
}

.doubravan-transfer-box__qr {
	flex: 0 0 auto;
	width: 220px;
	height: 220px;
	background: #fff;
	border-radius: var(--doubravan-radius);
}

.doubravan-transfer-box__details {
	flex: 1 1 16em;
	margin: 0;
}

.doubravan-transfer-box__details div {
	padding: 0.3em 0;
	border-bottom: 1px solid var(--doubravan-line);
}

.doubravan-transfer-box__details dt {
	font-size: var(--doubravan-fs-small);
	color: var(--doubravan-tlumena);
}

.doubravan-transfer-box__details dd {
	margin: 0;
	font-weight: 600;
}

.doubravan-order-meta {
	margin: 0 0 1em;
	font-size: var(--doubravan-fs-small);
	color: var(--doubravan-tlumena);
}

.doubravan-order-pay-form,
.doubravan-order-ticket-actions {
	margin: 1em 0;
}

/* Věta „Přesměrujeme vás na …“ s odstupem od tlačítka, ať se nelepí
   (platba nahoře pod hlášením i dole pod souhrnem, ADR 0087). */
.doubravan-vstupenky .doubravan-order-pay-form > .doubravan-checkout-note {
	margin-top: 0.6em;
}

/* Nabídka náhradního místa (krok KP-1c-4 plánu vstupenek, ADR 0075 bod 9):
   dva formuláře vedle sebe na šířku, pod sebou na mobilu – oba mají jediné
   tlačítko, žádné další pole. */
.doubravan-offer-actions {
	display: flex;
	flex-wrap: wrap;
	gap: 0.8em;
	margin: 1em 0 0;
}

.doubravan-offer-form {
	margin: 0;
}

/* Kontakt a návrat zpět jako tichá pata, hlavní akcí zůstává platba
   nebo stažení vstupenek. */
.doubravan-order-footer {
	margin-top: 2em;
	padding-top: 1.2em;
	border-top: 1px solid var(--doubravan-line);
	font-size: var(--doubravan-fs-small);
	color: var(--doubravan-tlumena);
}

.doubravan-order-footer p {
	margin: 0.6em 0;
}

.doubravan-order-footer a {
	color: var(--doubravan-tlumena);
}

/* ------------------------------------------------------------------ */
/* 7. Falešná brána (jen mimo produkci)                                */
/* ------------------------------------------------------------------ */

.doubravan-fake-gateway-banner {
	background: var(--doubravan-danger);
	color: #fff;
	font-weight: bold;
	padding: 0.75em 1em;
	margin: 0 0 1.5em;
}

.doubravan-fake-gateway-amount {
	font-size: 1.4rem;
}

.doubravan-fake-gateway-form {
	display: flex;
	gap: 0.75em;
	flex-wrap: wrap;
	margin: 1.5em 0;
}
