/* =========================================================================
   checkout.css — pagina de comandă cu plata în pagină.

   Fișier separat de style.css din două motive:
     1. style.css e oglinda temei-copil daisy-wellness; aici sunt clase care nu există în temă;
     2. pe WordPress, foaia asta se încarcă DOAR pe cele trei pagini de comandă, nu pe tot site-ul.

   Toate culorile vin din tokenii definiți în style.css. Nu se introduce nicio culoare nouă.

   Coloana din dreapta e locul în care Stripe își montează cadrele (`iframe`). Câmpurile
   desenate de noi au dispărut odată cu integrarea reală; ce a rămas ține doar de cutiile din
   jurul cadrelor. Culorile dinăuntru se dau din checkout.js, prin Appearance API.
   ========================================================================= */

/* ---------- 1. Grila ---------- */

.daisy-co {
	display: grid;
	grid-template-columns: 1fr;
	gap: 2rem;
	align-items: start;
	/* Sub pragul de doua coloane, coloana unica se plafoneaza si se centreaza. Fara asta, la
	   805px un camp de card ajungea la 720px latime: pe telefon arata bine, pe tableta si pe
	   telefonul tinut in peisaj arata rupt. Masurat pe pagina randata, 19.08.2026. */
	max-width: 34rem;
	margin-inline: auto;
}

@media (min-width: 62rem) {
	.daisy-co {
		grid-template-columns: minmax(0, 1fr) 27rem;
		gap: 1.5rem 3rem;
		max-width: none;
	}

	.daisy-co__summary { grid-column: 1; grid-row: 1; }
	.daisy-co__details { grid-column: 1; grid-row: 2; }
	.daisy-co__upsell  { grid-column: 1; grid-row: 3; }

	/* Coloana de plată rămâne pe ecran cât timp omul citește ce cumpără.
	   `align-self: start` e obligatoriu: fără el, elementul se întinde pe toată înălțimea
	   rândului de grilă și `position: sticky` nu are ce lipi. */
	.daisy-co__pay {
		grid-column: 2;
		grid-row: 1 / span 2;
		position: sticky;
		top: 1.5rem;
		align-self: start;
	}
}

/* Pe telefon și pe tabletă ordinea NU e cea din HTML.
   Decizie de operator, 19.08.2026: plata NU vine prima. Întâi omul vede ce cumpără, apoi
   plătește. Deci: prețul, ce intră în bilet, plata, iar la urmă propunerea de VIP — care rămâne
   după formular fiindcă e o a doua decizie, cerută după prima, nu înaintea ei.
   Pe desktop cele două coloane le arată pe toate deodată, iar ordinea nu se mai vede. */
.daisy-co__summary { order: 1; }
.daisy-co__details { order: 2; }
.daisy-co__pay     { order: 3; }
.daisy-co__upsell  { order: 4; }

/* ---------- 2. Coloana din stânga: ce cumperi ---------- */

.daisy-co__summary,
.daisy-co__details {
	background: var(--daisy-white);
	border: 1px solid var(--daisy-sage);
	border-radius: var(--daisy-radius);
	box-shadow: var(--daisy-shadow-soft);
	padding: 1.75rem;
}

.daisy-co__eyebrow {
	display: inline-block;
	margin: 0 0 0.35rem;
	padding: 0.2rem 0.7rem;
	border-radius: 999px;
	background: var(--daisy-sage);
	color: var(--daisy-primary-text);
	font-family: var(--go--font-family);
	font-size: 0.72rem;
	font-weight: 700;
	letter-spacing: 0.06em;
	text-transform: uppercase;
}

.daisy-co__name {
	margin: 0.35rem 0 0;
	font-family: var(--go-heading--font-family);
	font-size: clamp(1.6rem, 4vw, 2.1rem);
	line-height: var(--go-heading--line-height);
	letter-spacing: var(--go-heading--letter-spacing);
	color: var(--daisy-secondary);
}

.daisy-co__price {
	margin: 0.25rem 0 0;
	font-family: var(--go-heading--font-family);
	font-size: clamp(2.2rem, 6vw, 3rem);
	line-height: 1.05;
	color: var(--daisy-secondary);
}

.daisy-co__price span {
	font-size: 0.42em;
	letter-spacing: 0.04em;
}

.daisy-co__vat {
	margin: 0.35rem 0 0;
	font-family: var(--go--font-family);
	font-size: 0.9rem;
	color: var(--daisy-muted);
}

.daisy-co__sep {
	height: 1px;
	margin: 1.5rem 0;
	border: 0;
	background: var(--daisy-sage);
}

.daisy-co__subtitle {
	margin: 0 0 0.75rem;
	font-family: var(--go--font-family);
	font-size: 0.78rem;
	font-weight: 700;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--daisy-primary-text);
}

/* Rezumatul evenimentului: perechi cheie–valoare care nu se rup urât pe telefon. */
.daisy-co__facts {
	display: grid;
	gap: 0.7rem;
	margin: 0;
	font-family: var(--go--font-family);
	font-size: 0.95rem;
	line-height: 1.55;
	color: var(--daisy-text);
}

.daisy-co__fact {
	display: grid;
	grid-template-columns: 6.5rem 1fr;
	gap: 0.75rem;
}

.daisy-co__fact dt {
	color: var(--daisy-muted);
	font-size: 0.86rem;
}

.daisy-co__fact dd {
	margin: 0;
}

@media (max-width: 30rem) {
	.daisy-co__fact {
		grid-template-columns: 1fr;
		gap: 0.1rem;
	}
}

.daisy-co__back {
	display: inline-block;
	margin-top: 1.25rem;
	font-family: var(--go--font-family);
	font-size: 0.9rem;
	color: var(--daisy-primary-text);
}

/* ---------- 3. Coloana din dreapta: plata ---------- */

.daisy-co__pay {
	background: var(--daisy-white);
	border: 1px solid var(--daisy-sage);
	border-radius: var(--daisy-radius);
	box-shadow: var(--daisy-shadow);
	padding: 1.75rem;
}

.daisy-co__pay-title {
	margin: 0 0 0.3rem;
	font-family: var(--go-heading--font-family);
	font-size: 1.5rem;
	line-height: var(--go-heading--line-height);
	color: var(--daisy-secondary);
}

.daisy-co__pay-lead {
	margin: 0 0 1.25rem;
	font-family: var(--go--font-family);
	font-size: 0.92rem;
	line-height: 1.6;
	color: var(--daisy-muted);
}

/* Rândul de portofele. NU se proiectează presupunând că e plin: pe Chrome/Android nu apare
   Apple Pay, pe un telefon fără portofel configurat nu apare niciunul, iar atunci elementul
   are înălțime zero și separatorul de sub el trebuie să dispară odată cu el. */
.daisy-co__wallets {
	display: grid;
	gap: 0.6rem;
}

.daisy-co__or {
	display: flex;
	align-items: center;
	gap: 0.85rem;
	margin: 1.25rem 0;
	font-family: var(--go--font-family);
	font-size: 0.82rem;
	letter-spacing: 0.04em;
	color: var(--daisy-muted);
}

.daisy-co__or::before,
.daisy-co__or::after {
	content: "";
	flex: 1;
	height: 1px;
	background: var(--daisy-sage);
}

.daisy-co__field {
	margin-bottom: 0.9rem;
}

.daisy-co__label {
	display: block;
	margin-bottom: 0.35rem;
	font-family: var(--go--font-family);
	font-size: 0.86rem;
	color: var(--daisy-text);
}

/* Câmpurile de nume și de telefon. `.daisy-co__field` și `.daisy-co__label` existau deja din
   varianta în care desenam noi tot formularul; au rămas nefolosite după trecerea pe Stripe și își
   reiau rolul aici, pentru cele două câmpuri care au rămas ale noastre.

   Câmpul de telefon (adăugat 25.08.2026) nu are rând de ajutor sub el — decizie a operatorului.
   Nu se rupe nimic din asta: marja de jos stă pe `.daisy-co__field`, nu pe `.daisy-co__ajutor`,
   deci spațierea dintre câmpuri rămâne aceeași cu sau fără rândul acela.

   16px pe câmp nu e preferință: sub atât, iPhone-ul mărește singur pagina când omul îl atinge, și
   restul formularului sare. Aceeași valoare i se dă și lui Stripe, prin `fontSizeBase` din
   checkout.js — altfel câmpul nostru și cadrele lor ar avea două mărimi diferite una lângă alta. */
.daisy-co__camp {
	width: 100%;
	box-sizing: border-box;
	padding: 0.8rem 0.85rem;
	border: 1px solid var(--daisy-sage);
	border-radius: var(--daisy-radius-sm);
	background: var(--daisy-white);
	font-family: var(--go--font-family);
	font-size: 1rem;
	line-height: 1.4;
	color: var(--daisy-text);
}

.daisy-co__camp:focus-visible {
	outline: 2px solid var(--daisy-primary-text);
	outline-offset: 1px;
	border-color: var(--daisy-primary-text);
}

.daisy-co__camp[aria-invalid="true"] {
	border-color: #c0453c;
}

.daisy-co__ajutor {
	margin: 0.35rem 0 0;
	font-family: var(--go--font-family);
	font-size: 0.82rem;
	line-height: 1.5;
	color: var(--daisy-muted);
}

.daisy-co__pay .daisy-btn {
	width: 100%;
	margin-top: 0.5rem;
	text-align: center;
}

.daisy-co__refund {
	margin: 1rem 0 0;
	padding: 0.7rem 0.85rem;
	border-radius: var(--daisy-radius-sm);
	background: var(--daisy-mint);
	font-family: var(--go--font-family);
	font-size: 0.88rem;
	line-height: 1.5;
	color: var(--daisy-text);
}

.daisy-co__legal {
	margin: 0.9rem 0 0;
	font-family: var(--go--font-family);
	font-size: 0.8rem;
	line-height: 1.55;
	color: var(--daisy-muted);
}

.daisy-co__legal a {
	color: var(--daisy-primary-text);
}

/* ---------- 4. Locul în care Stripe își montează cadrele ----------
   Câmpurile desenate de noi au dispărut. Stripe injectează `iframe`-uri în
   `#express-checkout-element`, `#contact-details-element` și `#payment-element`. Interiorul lor
   NU se poate stiliza din foaia asta — culorile și mărimile se dau prin Appearance API, în
   checkout.js. Aici rămâne doar ce ține de cutiile din jur.

   `fontSizeBase` e 16px în JavaScript, nu 15: sub 16px iPhone-ul mărește singur pagina când omul
   atinge un câmp. */

.daisy-co__stripe {
	margin-bottom: 0.9rem;
}

/* Cât timp nu s-a întors sesiunea de pe server, cutiile sunt goale. Nu li se rezervă înălțime
   fixă: Express Checkout Element poate rămâne gol de tot (niciun portofel disponibil), iar o
   înălțime rezervată ar lăsa o gaură în formular pentru totdeauna. */
.daisy-co__asteptare {
	margin: 0 0 1rem;
	font-family: var(--go--font-family);
	font-size: 0.9rem;
	color: var(--daisy-muted);
}

.daisy-co__eroare {
	margin: 0.75rem 0 0;
	padding: 0.7rem 0.85rem;
	border-radius: var(--daisy-radius-sm);
	background: #fdecea;
	border: 1px solid #f3c9c4;
	font-family: var(--go--font-family);
	font-size: 0.9rem;
	line-height: 1.55;
	color: #8c2019;
}

/* `hidden` singur NU ajunge aici. `.daisy-co__or` primește `display: flex` din foaia asta, iar o
   regulă de autor bate `[hidden] { display: none }` a browserului — origini diferite, deci
   specificitatea nici nu contează. Aceeași capcană e explicată la 10.5, pentru ceas. */
.daisy-co__or[hidden],
.daisy-co__wallets[hidden],
.daisy-co__asteptare[hidden],
.daisy-co__eroare[hidden] {
	display: none;
}

/* Butonul de plată e acum `<button>`, nu `<a>`: trimite formularul, deci trebuie să poată fi și
   dezactivat cât timp Stripe spune că sesiunea nu are tot ce-i trebuie. */
button.daisy-btn {
	-webkit-appearance: none;
	appearance: none;
	width: 100%;
}

.daisy-co__pay .daisy-btn:disabled {
	opacity: 0.5;
	cursor: not-allowed;
	box-shadow: none;
}

.daisy-co__pay .daisy-btn.is-busy {
	opacity: 0.6;
	pointer-events: none;
}

/* Starea pusă de JavaScript când serverul refuză să pornească plata. Spre deosebire de
   `.daisy-co__closed` obișnuit, care apare doar sub `.is-early-bird-closed`, asta se arată
   singură — formularul din jurul ei a fost deja golit. */
.daisy-co__closed--forced {
	display: block;
}

/* ---------- 5. Propunerea de VIP ----------
   Sta DUPA coloana de plata, nu inaintea ei. Omul a ales deja un bilet si a venit sa plateasca;
   o oferta pusa deasupra formularului ar fi o a doua decizie ceruta inainte de prima.
   Pe pagina de VIP sectiunea asta nu exista — n-ai la ce sa treci mai departe. */

.daisy-co__upsell {
	display: grid;
	gap: 1.25rem;
	padding: 1.5rem 1.75rem;
	border: 1px solid var(--daisy-sage);
	border-radius: var(--daisy-radius);
	background: var(--daisy-mint);
}



.daisy-co__upsell-title {
	margin: 0 0 0.6rem;
	font-family: var(--go-heading--font-family);
	font-size: 1.35rem;
	line-height: var(--go-heading--line-height);
	color: var(--daisy-secondary);
}

.daisy-co__upsell ul {
	margin: 0;
}

/* Pretul si butonul, pe acelasi rand cat timp incap. `flex-wrap` le pune unul sub altul
   cand cardul e ingust, fara sa mai am nevoie de un prag de fereastra — cardul asta isi
   schimba latimea si fara ca fereastra sa se schimbe. */
.daisy-co__upsell-side {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 0.75rem 1.5rem;
	padding-top: 1.25rem;
	border-top: 1px solid var(--daisy-sage);
}

.daisy-co__upsell-price {
	margin: 0;
	flex: 0 0 auto;
	font-family: var(--go-heading--font-family);
	font-size: 2rem;
	line-height: 1.1;
	color: var(--daisy-secondary);
}

.daisy-co__upsell-price span {
	font-size: 0.5em;
	letter-spacing: 0.04em;
}

.daisy-co__upsell-delta {
	flex: 1 1 8rem;
	margin: 0;
	font-family: var(--go--font-family);
	font-size: 0.88rem;
	color: var(--daisy-muted);
}

.daisy-co__upsell-side .daisy-btn {
	flex: 0 0 auto;
	text-align: center;
}

/* ---------- 6. Lista cu sageti ----------
   Ceruta explicit in locul liniutelor din `.daisy-list--dash`. Sageata e desenata ca SVG si
   pusa prin `mask`, nu prin `background-image`, ca sa-si ia culoarea din tokenul de brand:
   un SVG bagat ca imagine si-ar purta culoarea inauntru si ar iesi din paleta la prima
   schimbare de tema. Prefixul -webkit- e pentru Safari. */

.daisy-list--arrow li {
	font-weight: 400;
	color: var(--daisy-text);
	padding-left: 1.7rem;
}

.daisy-list--arrow li::before {
	content: "";
	position: absolute;
	left: 0;
	top: 1rem;
	width: 1.05rem;
	height: 1.05rem;
	border-radius: 0;
	background: var(--daisy-primary-text);
	box-shadow: none;
	-webkit-mask: var(--daisy-arrow) no-repeat center / contain;
	mask: var(--daisy-arrow) no-repeat center / contain;
}

:root {
	--daisy-arrow: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 12h15'/%3E%3Cpath d='M13 6l6 6-6 6'/%3E%3C/svg%3E");
}

/* ---------- 7. Early bird inchis ----------
   Cand cronometrul ajunge la zero, pagina nu mai vinde. Stratul asta e DOAR vizual: adevarata
   poarta sta pe server, in capatul care creeaza sesiunea de plata, fiindca un vizitator cu
   JavaScriptul oprit n-ar vedea niciodata schimbarea de aici. */

.daisy-co__closed {
	display: none;
}

.is-early-bird-closed .daisy-co__pay > *:not(.daisy-co__closed) {
	display: none;
}

.is-early-bird-closed .daisy-co__closed {
	display: block;
}

.daisy-lead--closed {
	display: none;
}

.is-early-bird-closed .daisy-lead--open {
	display: none;
}

.is-early-bird-closed .daisy-lead--closed {
	display: block;
}

/* Cronometrul sta acum in antetul paginii, nu in cardul de rezumat, deci selectorul nu-l mai
   poate lega de coloana din stanga. */
.is-early-bird-closed .daisy-countdown {
	display: none;
}

.is-early-bird-closed .daisy-co__price,
.is-early-bird-closed .daisy-co__eyebrow {
	text-decoration: line-through;
	opacity: 0.5;
}

.daisy-co__closed-title {
	margin: 0 0 0.5rem;
	font-family: var(--go-heading--font-family);
	font-size: 1.5rem;
	line-height: var(--go-heading--line-height);
	color: var(--daisy-secondary);
}

.daisy-co__closed p {
	margin: 0 0 1.1rem;
	font-family: var(--go--font-family);
	font-size: 0.95rem;
	line-height: 1.6;
	color: var(--daisy-muted);
}

/* ---------- 8. Cronometrul din antet ----------
   Varianta `--card` din style.css e gandita pentru interiorul unui card de bilet: are
   `text-align: left` si un ceas cu `justify-content: start` plafonat la 20rem. In antetul
   centrat al paginii de comanda arata deplasat spre stanga, asa ca il recentrez aici in loc
   sa ating style.css, care e oglinda temei-copil. */

.daisy-countdown--hero {
	max-width: 34rem;
	margin-inline: auto;
	text-align: center;
}

.daisy-countdown--hero .daisy-countdown__clock {
	margin-inline: auto;
	justify-content: center;
}

/* ---------- 9. Numai pe pagina de VIP ----------
   „Mai speciala" nu inseamna culori noi. Inseamna ca pagina de VIP imprumuta registrul
   INTUNECAT pe care tema il foloseste deja in doua locuri: antetul-scena si blocul de
   inchidere al paginii de vanzare (`.daisy-cta`). Gradientul si licarul auriu de mai jos sunt
   copiate de acolo, iar auriul e tokenul `--daisy-gold`, deja folosit la insigna biletului
   evidentiat. Zero valori inventate.

   Cardul intunecat sta DOAR pe rezumatul din stanga sus. Doua blocuri intunecate pe aceeasi
   pagina ar transforma exceptia in fundal, iar VIP-ul n-ar mai iesi din nimic. */

.daisy-co__summary--vip {
	background:
		radial-gradient(circle at top right, rgba(201, 162, 39, 0.18), transparent 55%),
		linear-gradient(160deg, #241b12 0%, #1c1610 58%, #2a1f14 100%);
	border-color: rgba(201, 162, 39, 0.35);
	box-shadow: 0 12px 40px rgba(36, 27, 18, 0.22);
}

.daisy-co__summary--vip .daisy-co__name,
.daisy-co__summary--vip .daisy-co__price {
	color: var(--daisy-cream);
}

.daisy-co__summary--vip .daisy-co__vat {
	color: rgba(250, 248, 244, 0.72);
}

/* Alb pe auriu da 2,42:1. Brunul de brand pe auriu da 4,7:1 si arata mai aproape de
   identitate — aceeasi alegere ca la insigna biletului evidentiat, vezi style.css punctul 5
   din blocul de contrast. */
.daisy-co__eyebrow--gold {
	background: var(--daisy-gold);
	color: var(--daisy-secondary);
}

/* Sagetile listei „numai la VIP" iau auriul. Merge fiindca sageata e pusa prin `mask`:
   culoarea vine din `background`, nu din interiorul SVG-ului. */
.daisy-list--gold li::before {
	background: var(--daisy-gold);
}

/* Blocul care ia locul benzii de trecere la VIP. Pe VIP n-ai la ce trece mai departe, deci
   in locul unei oferte sta lucrul pentru care omul plateste in plus: ce se intampla dupa ce
   se golește sala. Refoloseste cutia benzii (aceeasi grila, aceeasi ordine pe telefon) si
   schimba doar muchia din stanga. */
.daisy-co__upsell--note {
	border-left: 3px solid var(--daisy-gold);
}

/* ---------- 10. Corectii dupa auditul de mobil (19.08.2026) ----------
   Masurate pe pagina randata, servita local, in browser real: 305px (viewport de 320 minus bara
   de derulare), 375px, 805px. Ce a trecut deja: zero depasire pe orizontala peste tot, butonul
   de plata 50px, butoanele de portofel 46px, text de baza 16,8px. Ce urmeaza sunt cele opt
   lucruri gasite. Plafonul de latime si ordinea noua stau mai sus, la punctele 1 si 2. */

/* 10.1 — iOS umfla textul in peisaj cand `text-size-adjust` e `auto`, ceea ce strica raportul
   dintre titlu si pretul de langa el. `100%` opreste umflarea fara sa impiedice omul sa
   mareasca singur pagina. */
html {
	-webkit-text-size-adjust: 100%;
	text-size-adjust: 100%;
}

/* 10.2 — Primul ecran era ocupat integral de antet: pe early bird cardul de pret incepea la
   585px pe un ecran de 844, iar titlul „Plata" la 864, adica sub linia de indoire. Pragul e
   acelasi cu cel al machetarii pe doua coloane: cat timp pagina e o singura coloana, adica pe
   telefon SI pe tableta, antetul si golul de sub el se string, ca pretul si inceputul cardului
   urmator sa intre in primul ecran. */
@media (max-width: 61.99rem) {
	.daisy-section--co-hero {
		padding-top: 2.25rem;
		padding-bottom: 2rem;
	}

	.daisy-section--co-hero .daisy-stepper {
		margin-bottom: 1.25rem;
	}

	.daisy-section--co-hero .daisy-countdown {
		margin-top: 1.25rem;
	}

	/* Sectiunea care contine cele doua coloane. Padding-ul de 4,5rem al temei punea inca 72px
	   intre lead si cardul de pret. */
	.daisy-co-body {
		padding-top: 1.5rem;
	}

	.daisy-co {
		gap: 1.25rem;
	}
}

/* 10.3 — Tinte de atingere. Pragul folosit e 44px, cel din ghidul Apple pentru degete.
   Masurat inainte: „← Vreau alt bilet" 27px, „Termeni" si „Confidentialitate" 18px, adresa de
   email si telefonul 19–22px. Legaturile din text raman in randul lor: se mareste zona de
   atingere prin padding, iar marginea negativa tine randul la aceeasi inaltime vizuala. */
.daisy-co__back {
	display: inline-flex;
	align-items: center;
	min-height: 44px;
}

.daisy-co__legal a,
.daisy-prose a,
.site-info a {
	display: inline-block;
	padding: 0.7rem 0.35rem;
	/* Marginea laterala NEGATIVA anuleaza paddingul lateral. Corectata pe 19.08.2026, dupa ce
	   randarea paginii de multumire a aratat „527387 ." — 6,4px de gol vizual de fiecare parte a
	   legaturii, adica spatiu inaintea punctului, gresit in romana. Zona de atingere ramane data
	   de padding, care nu se schimba; se recupereaza doar spatiul din rand. Net: 0,8px. */
	margin: -0.55rem -0.3rem;
}

/* 10.4 — Text sub 14px. Etichetele cronometrului erau 9,6px: la distanta la care se tine
   telefonul, nu se citesc. Restul sunt etichete scurte cu majuscule, unde pragul practic e 12px,
   si etichete de formular plus linia legala, unde e 14px. */
.daisy-stepper {
	font-size: 0.8125rem;
}

.daisy-countdown--hero .daisy-countdown__unit i {
	font-size: 0.75rem;
}

.daisy-co__eyebrow {
	font-size: 0.78rem;
}

.daisy-co__or,
.daisy-co__label,
.daisy-co__legal {
	font-size: 0.875rem;
}

.daisy-co__fact dt {
	font-size: 0.875rem;
}

/* 10.5 — Ceasul inainte sa ruleze scriptul.
   Pornisem de la ideea ca atributul `hidden` ascunde ceasul si ca aparitia lui face pagina sa
   sara. MASURAT, e altceva, si mai rau: `.daisy-countdown--card .daisy-countdown__clock` din
   style.css pune `display: grid`, iar o regula de autor bate regula `[hidden] { display: none }`
   a browserului, indiferent de specificitate — origini diferite. Deci `hidden` nu ascundea nimic,
   iar pana cand ruleaza scriptul omul vedea un cronometru de „0 zile 00 ore 00 min 00 sec".

   Aici `hidden` inseamna „prezent si invizibil": locul e rezervat de la prima randare, zerourile
   nu se vad, iar scriptul doar umple. Zero salt SI zero zerouri.

   ATENTIE, se leaga de WP Rocket: cu Delay JS pornit, scriptul nu ruleaza pana la prima atingere
   a vizitatorului, iar locul rezervat ar sta gol pana atunci. De aceea scriptul de cronometru se
   exclude din Delay JS impreuna cu js.stripe.com — scris si in blocul de lansare din capul
   paginii.

   PAGINA DE VANZARE avea acelasi defect, pe amandoua ceasurile ei: cel din antet cu `display: flex`
   si cel din cardul de early bird cu `display: grid`. Reparat pe 19.08.2026, blocul v13 din
   style.css, cu o regula generica — `.daisy-countdown__clock[hidden] { visibility: hidden; }` —
   care nu atinge `display` si acopera ambele variante. Regula de aici ramane fiindca `--hero` are
   nevoie si de `display: grid`, dar face acelasi lucru. */
.daisy-countdown--hero .daisy-countdown__clock[hidden] {
	display: grid;
	visibility: hidden;
}

/* ---------- 11.0 Stările paginii de mulțumire ----------
   Pagina nu poate spune „plata a trecut" înainte ca serverul s-o confirme. Cele cinci blocuri
   `.daisy-ty__stare` stau toate în HTML, iar `data-plata` de pe `<body>` alege unul singur.
   Valoarea din HTML e `fara-js`, deci dacă scriptul nu rulează deloc pagina cade pe varianta
   care nu pretinde nimic. Comutarea o face assets/multumesc.js. */

.daisy-ty__stare {
	display: none;
}

[data-plata="verifica"] .daisy-ty__stare[data-cand="verifica"],
[data-plata="platit"]   .daisy-ty__stare[data-cand="platit"],
[data-plata="nu"]       .daisy-ty__stare[data-cand="nu"],
[data-plata="eroare"]   .daisy-ty__stare[data-cand="eroare"],
[data-plata="fara-js"]  .daisy-ty__stare[data-cand="fara-js"] {
	display: block;
}

/* Secțiunea despre comanda cuiva anume, cea în care scrie că biletul vine pe email, nu are ce
   căuta în fața cuiva care n-a cumpărat. Detaliile zilei și harta rămân vizibile oricum: sunt
   fapte despre eveniment, nu afirmații despre cel care citește. */
.daisy-ty__doar-platit {
	display: none;
}

[data-plata="platit"] .daisy-ty__doar-platit,
[data-plata="fara-js"] .daisy-ty__doar-platit {
	display: block;
}

/* Randul de pasi e `display: flex` in style.css. Daca l-am lasa pe `block` de mai sus, cei trei
   pasi ar cadea unul sub altul. */
[data-plata="platit"] ol.daisy-ty__doar-platit,
[data-plata="fara-js"] ol.daisy-ty__doar-platit {
	display: flex;
}

/* Biletul online, pe Zoom (24.09.2026). Pagina e aceeași, dar sala (ușile la 10:45, lista de la
   intrare, harta, ținuta) nu are ce căuta în fața cuiva care urmărește de acasă. `data-bilet` de pe
   `<body>` îl pune assets/multumesc.js din răspunsul serverului, doar când plata e confirmată.
   Fără el (fără JS, plată neconfirmată) rămâne varianta de sală, cea de dinainte. Se ascunde, nu se
   afișează: elementele își păstrează felul lor de afișare (flex, inline, block). */
body:not([data-bilet="zoom"]) .daisy-ty__doar-zoom,
[data-bilet="zoom"] .daisy-ty__doar-sala {
	display: none !important;
}

/* ---------- 11. Pagina de mulțumire ----------
   Ultima din flux: /de-la-durere-la-putere/ → /comanda/{bilet}/ → plata → /multumesc/.

   O singură pagină pentru toate trei biletele, nu trei. Motivul: valoarea reală a paginii —
   data pusă în calendar, detaliile zilei, ce urmează pe email — e identică indiferent de bilet,
   iar evenimentul de conversie are astfel un singur loc în care se declanșează. Ce chiar diferă
   între bilete (meditația audio intră în early bird și VIP, nu în standard) e spus explicit în
   text, nu ascuns după o stare pe care pagina n-ar putea s-o știe fără un capăt de server.

   Clasele de aici sunt puține fiindcă pagina refolosește ce există: `.daisy-steps` pentru pași,
   `.daisy-co__facts` pentru perechile cheie–valoare, `.daisy-btn` pentru butoane. */

/* Bifa de confirmare. Cerc în verdele de brand, semnul pus prin `mask` ca săgeata de la
   punctul 6 — își ia culoarea din token, nu din interiorul SVG-ului. */
:root {
	--daisy-check: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4.5 12.5l5 5 10-11'/%3E%3C/svg%3E");
}

.daisy-ty__mark {
	display: grid;
	place-items: center;
	width: 4.5rem;
	height: 4.5rem;
	margin: 0 auto 1.25rem;
	border-radius: 50%;
	background: var(--daisy-sage);
}

.daisy-ty__mark::before {
	content: "";
	width: 2.1rem;
	height: 2.1rem;
	background: var(--daisy-primary-text);
	-webkit-mask: var(--daisy-check) no-repeat center / contain;
	mask: var(--daisy-check) no-repeat center / contain;
}

/* Rândul de butoane. Pe telefon trec pe toată lățimea: două butoane înghesuite unul lângă
   altul pe 375px ajung sub pragul de 44px pe care l-am impus la punctul 10.3. */
.daisy-ty__actions {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 0.75rem;
	margin-top: 1.5rem;
}

@media (max-width: 30rem) {
	.daisy-ty__actions .daisy-btn {
		width: 100%;
		text-align: center;
	}
}

.daisy-ty__note {
	margin: 0.9rem 0 0;
	font-family: var(--go--font-family);
	font-size: 0.875rem;
	line-height: 1.6;
	color: var(--daisy-muted);
}

/* Cardul cu detaliile zilei. Aceeași cutie ca pe paginile de comandă, dar independentă de
   grila `.daisy-co` — pagina asta n-are două coloane. */
.daisy-ty__card {
	max-width: 40rem;
	margin-inline: auto;
	padding: 1.75rem;
	border: 1px solid var(--daisy-sage);
	border-radius: var(--daisy-radius);
	background: var(--daisy-white);
	box-shadow: var(--daisy-shadow-soft);
	text-align: left;
}

/* Coloana de etichete e mai lată aici decât pe pagina de comandă: „Cum ajungi" nu încape în
   6,5rem și s-ar rupe pe două rânduri lângă o valoare de un rând. */
.daisy-ty__card .daisy-co__fact {
	grid-template-columns: 7.5rem 1fr;
}

@media (max-width: 30rem) {
	.daisy-ty__card .daisy-co__fact {
		grid-template-columns: 1fr;
	}
}

/* ---------- 12. Două corecții găsite la randarea paginii de mulțumire ----------
   Amândouă măsurate în browser real, 19.08.2026, nu deduse din cod. */

/* 12.1 — `.daisy-section--center` NU pune `text-align: center` pe secțiune; centrarea vine din
   reguli țintite pe titlu și pe lead. Nota de sub butoanele de calendar moștenea deci `start` și
   ateriza lipită de marginea din stânga, sub două butoane centrate. */
.daisy-ty__note {
	text-align: center;
}

/* 12.2 — Legăturile din text ieșeau în albastrul implicit al browserului, #0000EE. Defectul NU e
   al paginii de mulțumire: există la fel pe toate trei paginile de comandă, la adresa de email din
   secțiunea de contact, și mi-a scăpat la auditul de mobil de pe 19.08 — acolo am măsurat zona de
   atingere a acelorași legături, dar nu și culoarea lor.

   Restul legăturilor din flux erau deja în verdele de brand (`.daisy-co__legal a`,
   `.daisy-co__back`), deci albastrul era singurul loc din pagină în afara paletei.

   Contrast pe cremul de fundal, calculat pe pagina randată: albastrul dă 8,86:1, verdele de brand
   dă 5,16:1. Amândouă trec pragul de 4,5:1, deci schimbarea nu costă accesibilitate. */
.daisy-prose a,
.daisy-co__fact a {
	color: var(--daisy-primary-text);
}

/* 12.3 — Legatura „Deschide adresa pe harta" traieste intr-un rand de text din cardul de fapte,
   nu in `.daisy-prose`, deci scapase si de regula de zona de atingere de la punctul 10.3.
   Masurata: 20,8px inaltime, sub pragul de 44px. Acelasi tratament: zona creste prin padding,
   iar marginea negativa tine randul la aceeasi inaltime vizuala. */
.daisy-co__fact a {
	display: inline-block;
	padding: 0.7rem 0.35rem;
	margin: -0.55rem -0.3rem;
}

/* ---------- 13. Locul și cum ajungi acolo ----------
   Cerut de operator după modelul Eventbrite: adresa, patru moduri de transport cu legături
   directe către indicații, și o hartă încorporată.

   LEGĂTURILE DE INDICAȚII folosesc formatul documentat Maps URLs:
   `https://www.google.com/maps/dir/?api=1&destination=LAT,LNG&travelmode=MOD`.
   Verificat în documentația oficială pe 19.08.2026 (developers.google.com/maps/documentation/urls):
   nu cere cheie API — „You don't need a Google API key to use Maps URLs" — iar valorile permise
   pentru `travelmode` sunt exact `driving`, `walking`, `bicycling`, `two-wheeler` și `transit`.
   Deci „cu bicicleta" e `bicycling`, nu `biking`, iar „transport public" e `transit`.
   Forma veche `maps.google.com/?saddr=Current+Location&daddr=...&mode=...` NU apare nicăieri în
   documentația actuală; nu o folosim, ca să nu depindem de un format nedocumentat. `origin` lipsește
   intenționat — parametrul e opțional, iar Google pornește atunci de la locația utilizatorului.

   HARTA. Pe site e Google Maps Embed; în macheta asta rămâne OpenStreetMap. Nu e inconsecvență,
   e o consecință a restricției de cheie: cheia Google e legată pe referer de daisywellness.co.uk,
   iar machetele stau pe digitalpeak.cloud. Măsurat cu cereri reale pe 20.08.2026 — fără referer
   403, `digitalpeak.cloud` 403, `daisywellness.co.uk` (și cu adresa întreagă, și doar cu originea)
   200. Cu Google în machetă, previzualizarea ar arăta caseta de eroare a Google în loc de hartă.
   Schimbul îl face `build-wp-templates.cjs`, pasul 2c: înlocuiește `src`-ul iframe-ului și scoate
   rândul de atribuire OpenStreetMap de sub hartă — atribuirea e cerută de licența lor și devine o
   mențiune falsă sub o hartă Google. Cheia vine din `.env` (`GOOGLE_MAPS_API_KEY`); dacă lipsește,
   generarea se oprește cu eroare, ca să nu ajungă tăcut pe site harta veche.

   DE CE MUTAREA. Maps Embed API e gratuit și nelimitat („All Maps Embed API requests are available
   at no charge with unlimited usage", verificat 19.08.2026) și e singurul din cei doi cu contract
   scris. Formatul OpenStreetMap `openstreetmap.org/export/embed.html` NU e documentat ca fapt de
   contract — wiki-ul oficial confirmă doar că butonul „Share" produce un iframe, fără să descrie
   parametrii; l-am verificat empiric, nu în documentație. Iar politica de tile a fundației
   avertizează explicit că „access may be withdrawn at any point".

   IFRAME-UL PĂSTREAZĂ `referrerpolicy="no-referrer-when-downgrade"`. Nu e decorativ: cheia e
   restricționată pe referer, deci fără el Google nu vede de unde vine cererea și harta cade cu 403.
   Verificatorul are o aserțiune pe el, în secțiunea `=== harta ===`. */

.daisy-ty__loc {
	display: grid;
	gap: 1.5rem;
	text-align: left;
}

@media (min-width: 48rem) {
	.daisy-ty__loc {
		grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr);
		gap: 2rem;
		align-items: start;
	}
}

.daisy-ty__loc-name {
	margin: 0;
	font-family: var(--go-heading--font-family);
	font-size: 1.35rem;
	line-height: var(--go-heading--line-height);
	color: var(--daisy-secondary);
}

.daisy-ty__loc-addr {
	margin: 0.35rem 0 1.5rem;
	font-family: var(--go--font-family);
	font-size: 0.95rem;
	line-height: 1.6;
	color: var(--daisy-muted);
}

/* Cele patru moduri. Fiecare rând e o țintă de atingere întreagă, nu doar textul din el: pe
   telefon omul apasă rândul. 48px depășește pragul de 44px impus la punctul 10.3. */
.daisy-ty__modes {
	margin: 0;
	padding: 0;
	list-style: none;
	display: grid;
	gap: 0.15rem;
}

.daisy-ty__mode {
	display: flex;
	align-items: center;
	gap: 0.85rem;
	min-height: 48px;
	padding: 0.35rem 0.5rem;
	margin-left: -0.5rem;
	border-radius: var(--daisy-radius-sm);
	font-family: var(--go--font-family);
	font-size: 1rem;
	color: var(--daisy-text);
	text-decoration: none;
}

.daisy-ty__mode:hover,
.daisy-ty__mode:focus-visible {
	background: var(--daisy-mint);
	color: var(--daisy-secondary);
}

/* Pictogramele sunt puse prin `mask`, ca săgeata de la punctul 6 și bifa de la punctul 11: își iau
   culoarea din tokenul de brand, deci nu ies din paletă la o schimbare de temă. */
.daisy-ty__mode::before {
	content: "";
	flex: 0 0 auto;
	width: 1.5rem;
	height: 1.5rem;
	background: var(--daisy-primary-text);
	-webkit-mask: var(--icon) no-repeat center / contain;
	mask: var(--icon) no-repeat center / contain;
}

.daisy-ty__mode--drive {
	--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 13.5l1.9-5.4a2 2 0 0 1 1.9-1.3h8.4a2 2 0 0 1 1.9 1.3L20 13.5'/%3E%3Cpath d='M4 13.5h16v4H4z'/%3E%3Ccircle cx='7.5' cy='17.5' r='1.5'/%3E%3Ccircle cx='16.5' cy='17.5' r='1.5'/%3E%3C/svg%3E");
}

.daisy-ty__mode--transit {
	--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='5' y='3.5' width='14' height='13' rx='2.5'/%3E%3Cpath d='M5 10.5h14'/%3E%3Cpath d='M8 16.5l-1.5 3'/%3E%3Cpath d='M16 16.5l1.5 3'/%3E%3Ccircle cx='8.5' cy='13.5' r='.9'/%3E%3Ccircle cx='15.5' cy='13.5' r='.9'/%3E%3C/svg%3E");
}

.daisy-ty__mode--bike {
	--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='5.8' cy='16.2' r='3.6'/%3E%3Ccircle cx='18.2' cy='16.2' r='3.6'/%3E%3Cpath d='M5.8 16.2l4.2-7.4h4.4l3.8 7.4'/%3E%3Cpath d='M9 8.8h4.2'/%3E%3C/svg%3E");
}

.daisy-ty__mode--walk {
	--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12.5' cy='4.2' r='1.9'/%3E%3Cpath d='M12.5 7.4v5.4l-3 7.2'/%3E%3Cpath d='M12.5 12.8l2.8 7.2'/%3E%3Cpath d='M8.6 10.2l3.9-2.3 3.7 2.3'/%3E%3C/svg%3E");
}

/* Harta. `aspect-ratio` în loc de înălțime fixă: pe telefon o hartă de 400px ocupă degeaba
   jumătate de ecran, pe desktop una de 200px nu arată nimic din împrejurimi. */
.daisy-ty__map {
	overflow: hidden;
	border: 1px solid var(--daisy-sage);
	border-radius: var(--daisy-radius);
	background: var(--daisy-mint);
}

.daisy-ty__map-frame {
	display: block;
	width: 100%;
	aspect-ratio: 4 / 3;
	border: 0;
}

@media (min-width: 48rem) {
	.daisy-ty__map-frame {
		aspect-ratio: 1 / 1;
	}
}

/* Legatura din nota: zona de atingere SI culoare.

   Zona: era 17,6px si 37,1px inalte (doua legaturi pe atunci), sub pragul de 44px. Nota are corp
   de litera mai mic decat restul, deci are nevoie de putin mai mult padding decat regula generala
   de la 10.3 ca sa treaca pragul: 0,8rem in loc de 0,7rem. Marginea negativa anuleaza paddingul
   lateral, ca randul sa nu capete spatii inaintea punctelor.

   Culoarea: legatura iesea in albastrul implicit al browserului, #0000EE — masurat pe pagina live
   pe 20.08.2026, `rgb(0, 0, 238)`. E ACELASI defect ca la 12.2, in acelasi fisier: regula scrisa
   aici acoperea doar geometria, iar 12.2 tintea `.daisy-prose a` si `.daisy-co__fact a`, deci nu
   ajungea si la nota de sub harta. Sectiunea 13 s-a scris in aceeasi zi, dupa 12.2, si a mostenit
   golul. Maturat dupa fix pe toate cinci paginile, in browser: zero legaturi ramase pe albastrul
   sau violetul implicit. */
/* Codul biletului pe pagina de mulțumire.

   `display: inline-flex` de aici e exact capcana descrisă mai sus la `.daisy-co__or`: o regulă de
   autor bate `[hidden] { display: none }` a browserului, fiindcă vin din origini diferite și
   specificitatea nici nu contează. Fără regula `[hidden]` de dedesubt, caseta ar fi vizibilă și
   goală la fiecare încărcare a paginii, până răspunde serverul. */
.daisy-ty__cod {
	display: inline-flex;
	flex-direction: column;
	gap: 0.3rem;
	margin: 1.4rem 0 0;
	padding: 0.9rem 1.4rem;
	border-radius: var(--daisy-radius);
	background: var(--daisy-mint);
	text-align: center;
}

.daisy-ty__cod[hidden] {
	display: none;
}

.daisy-ty__cod-eticheta {
	font-family: var(--go--font-family);
	font-size: 0.78rem;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--daisy-muted);
}

/* Monospațiat și cu literele răsfirate: codul se citește cu voce tare la intrare, de pe un ecran
   ținut în mână. Alfabetul lui nu conține 0/O și 1/I tocmai din același motiv. */
.daisy-ty__cod-valoare {
	font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
	font-size: 1.35rem;
	letter-spacing: 0.06em;
	color: var(--daisy-primary-text);
}

.daisy-ty__map-note a {
	display: inline-block;
	padding: 0.8rem 0.35rem;
	margin: -0.7rem -0.3rem;
	color: var(--daisy-primary-text);
}

.daisy-ty__map-note {
	margin: 0.6rem 0 0;
	font-family: var(--go--font-family);
	font-size: 0.8125rem;
	line-height: 1.5;
	color: var(--daisy-muted);
}

/* Cardul care ține și faptele zilei, și locul, are nevoie de mai multă lățime decât cel simplu. */
.daisy-ty__card--wide {
	max-width: 52rem;
}

/* Butoanele de calendar, aceeași lățime — cerut de operator. `flex: 1 1 0` le face egale
   indiferent cât de lung e textul din ele; plafonul rândului ține perechea la o lățime la care
   niciunul nu se rupe pe două rânduri. Sub 30rem regula de la punctul 11 le trece oricum pe toată
   lățimea, deci cele două nu se bat cap în cap. */
.daisy-ty__actions--equal {
	/* 39rem, nu 34: la 34 cele doua butoane ies de 266px, iar „Pune data in Google Calendar" se
	   rupe pe doua randuri si perechea creste la 68px inaltime. Masurat pe pagina randata. */
	max-width: 39rem;
	margin-inline: auto;
}

@media (min-width: 30.01rem) {
	.daisy-ty__actions--equal .daisy-btn {
		flex: 1 1 0;
		text-align: center;
	}
}

/* ------------------------------------------------------------
   17.09.2026 — bonusul meditatiei pe pagina de comanda inchisa
   ------------------------------------------------------------
   Perechea regulii din style.css (blocul v17). Randul care promite meditatia se ascunde cand
   early bird s-a inchis, fiindca promisiunea e scrisa la prezent si ar promite un bonus la un
   bilet care nu se mai poate cumpara.

   De ce o regula noua si nu cea din style.css: aceea e ancorata pe .daisy-ticket--featured, adica
   pe cardul din pagina de vanzare. Pe pagina de comanda nu exista card, iar cele doua randuri stau
   in .daisy-co__details si in lista „Ce se intampla mai departe" — masurat, niciuna dintre cele
   sase reguli de stare inchisa din fisierul asta nu le atinge.

   Restul listelor ramane. Pasii 1 si 3 descriu ce se intampla dupa orice plata, nu doar dupa una
   early bird. */

.is-early-bird-closed .daisy-co__bonus {
	display: none;
}

/* ---------- Biletul online, pe Zoom (24.09.2026) ----------
   Nota despre conditia contului: Zoom lasa sa intre DOAR contul facut pe adresa de email cu care
   s-a platit (autentificarea meetingului e legata de emailul de inscriere). Sta chiar deasupra
   campului de email din Stripe, unde se ia decizia. Caseta din rezumat a fost scoasa la cererea
   operatorului (24.09.2026), odata cu stilurile ei. */

.daisy-co__zoom-email {
	margin: 1.1rem 0 0.5rem;
	padding: 0.7rem 0.85rem;
	border-radius: var(--daisy-radius-sm);
	background: var(--daisy-mint);
	font-family: var(--go--font-family);
	font-size: 0.85rem;
	line-height: 1.5;
	color: var(--daisy-text);
}
