/**
 * WEDA App — stratul de prezentare.
 *
 * DE CE ARATĂ ALTFEL DECÂT CSS-UL ACTUAL AL PORTALULUI
 *
 * Portalul de azi are o singură media query la 5.041 de linii, de 9 ori 100vh,
 * `html,body{overflow:hidden}` și un iframe cu înălțime calculată în pixeli din
 * JavaScript. Combinația asta e motivul pentru care pe telefon conținutul apare
 * tăiat și nu se poate derula: bara de adrese schimbă înălțimea ferestrei, deci
 * 100vh e mereu greșit, iar overflow:hidden blochează și derularea nativă care
 * ar fi salvat situația.
 *
 * Aici, invers:
 *   - nicio unitate vh, nicio înălțime fixă — înălțimea o dă conținutul;
 *   - nicio lățime în pixeli; totul în procente, fr, ch și minmax();
 *   - un singur punct de rupere (720px), sub care tabelul devine listă de carduri
 *     prin CSS pur, folosind atributele data-label din view;
 *   - ținte de atins de minimum 44px pe mobil (recomandarea de accesibilitate),
 *     ca butoanele să poată fi apăsate cu degetul.
 *
 * TEMĂ: tokenii se adaptează la clasa `.wo-light` de pe <html>, aceeași pe care
 * o folosește deja portalul — deci comutatorul Zi/Noapte existent funcționează
 * fără nicio modificare în codul lui.
 */

.wapp {
	--wapp-bg:        #1a1d21;
	--wapp-card:      #212529;
	--wapp-raised:    #2a2f34;
	--wapp-border:    #32383e;
	--wapp-text:      #ced4da;
	--wapp-heading:   #f3f6f9;
	--wapp-muted:     #878a99;
	--wapp-accent:    #4a5c9c;
	--wapp-info:      #299cdb;
	--wapp-success:   #0ab39c;
	--wapp-warning:   #f7b84b;
	--wapp-danger:    #f06548;
	--wapp-radius:    4px;
	--wapp-radius-lg: 6px;
	--wapp-gap:       clamp(0.75rem, 2vw, 1.125rem);

	box-sizing: border-box;
	width: 100%;
	max-width: 78rem;
	margin-inline: auto;
	padding: var(--wapp-gap);
	color: var(--wapp-text);
	font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
	font-size: 0.875rem;
	line-height: 1.55;
}

.wo-light .wapp {
	--wapp-bg:      #f3f3f9;
	--wapp-card:    #ffffff;
	--wapp-raised:  #f3f6f9;
	--wapp-border:  #e9ebec;
	--wapp-text:    #212529;
	--wapp-heading: #212529;
	--wapp-muted:   #878a99;
	--wapp-accent:  #405189;
	--wapp-danger:  #e14d2a;
}

.wapp *,
.wapp *::before,
.wapp *::after { box-sizing: inherit; }

/* ── Antet ─────────────────────────────────────────────────────── */

.wapp-head {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-start;
	justify-content: space-between;
	gap: var(--wapp-gap);
	margin-bottom: var(--wapp-gap);
}

.wapp-head-main { flex: 1 1 20rem; min-width: 0; }

.wapp-title {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 0.5rem;
	margin: 0 0 0.35rem;
	color: var(--wapp-heading);
	font-size: 1.25rem;
	font-weight: 600;
	line-height: 1.3;
}

.wapp-intro {
	margin: 0;
	max-width: 68ch;
	color: var(--wapp-muted);
	font-size: 0.8125rem;
}

.wapp-chip {
	padding: 0.125rem 0.5rem;
	border-radius: 999px;
	font-size: 0.6875rem;
	font-weight: 600;
	letter-spacing: 0.02em;
	text-transform: uppercase;
}

.wapp-chip--live    { background: rgba(10, 179, 156, 0.15); color: var(--wapp-success); }
.wapp-chip--sandbox { background: rgba(247, 184, 75, 0.15); color: var(--wapp-warning); }

/* Selector de limbă — legături obișnuite, fără JavaScript */
.wapp-lang { display: flex; gap: 0.25rem; flex-shrink: 0; }

.wapp-lang-opt {
	display: inline-flex;
	align-items: center;
	min-height: 2rem;
	padding: 0.25rem 0.6rem;
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
	color: var(--wapp-muted);
	font-size: 0.75rem;
	text-decoration: none;
}

.wapp-lang-opt:hover     { color: var(--wapp-heading); border-color: var(--wapp-accent); }
.wapp-lang-opt.is-active { background: var(--wapp-accent); border-color: var(--wapp-accent); color: #fff; }

/* ── Filtru ────────────────────────────────────────────────────── */

.wapp-filter {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.5rem;
	margin-bottom: var(--wapp-gap);
}

.wapp-filter-label { color: var(--wapp-muted); font-size: 0.75rem; }

.wapp-select,
.wapp-btn {
	min-height: 2.25rem;
	padding: 0.4rem 0.75rem;
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
	background: var(--wapp-card);
	color: var(--wapp-text);
	font: inherit;
	font-size: 0.8125rem;
}

.wapp-select { flex: 1 1 14rem; max-width: 100%; }

.wapp-btn {
	background: var(--wapp-accent);
	border-color: var(--wapp-accent);
	color: #fff;
	font-weight: 600;
	cursor: pointer;
	text-decoration: none;
	display: inline-flex;
	align-items: center;
}

.wapp-btn--quiet { background: var(--wapp-card); border-color: var(--wapp-border); color: var(--wapp-text); font-weight: 500; }
.wapp-btn:hover  { filter: brightness(1.08); }

/* ── Statistici ────────────────────────────────────────────────── */

.wapp-stats {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 10rem), 1fr));
	gap: 0.75rem;
	margin-bottom: var(--wapp-gap);
}

.wapp-stat {
	display: flex;
	flex-direction: column;
	gap: 0.35rem;
	padding: 0.875rem 1rem;
	background: var(--wapp-card);
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
}

.wapp-stat-label {
	color: var(--wapp-muted);
	font-size: 0.6875rem;
	font-weight: 600;
	letter-spacing: 0.04em;
	text-transform: uppercase;
}

.wapp-stat-value { color: var(--wapp-heading); font-size: 1.375rem; font-weight: 600; line-height: 1.1; }

.wapp-stat--info    { border-inline-start: 3px solid var(--wapp-info); }
.wapp-stat--accent  { border-inline-start: 3px solid var(--wapp-accent); }
.wapp-stat--success { border-inline-start: 3px solid var(--wapp-success); }

/* ── Card generic ──────────────────────────────────────────────── */

.wapp-card {
	background: var(--wapp-card);
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
	padding: 1rem 1.125rem;
	margin-bottom: var(--wapp-gap);
}

.wapp-card--flush { padding: 0; overflow: hidden; }

.wapp-card-title,
.wapp-section-title {
	margin: 0 0 0.875rem;
	color: var(--wapp-heading);
	font-size: 0.9375rem;
	font-weight: 600;
}

.wapp-section-title { margin-bottom: 0.75rem; }

/* ── Bare de distribuție ───────────────────────────────────────── */

.wapp-bars { margin: 0; padding: 0; list-style: none; display: grid; gap: 0.5rem; }

.wapp-bar-row {
	display: grid;
	grid-template-columns: minmax(6rem, 10rem) 1fr minmax(5rem, auto);
	align-items: center;
	gap: 0.75rem;
}

.wapp-bar-name  { text-align: end; font-size: 0.8125rem; overflow-wrap: anywhere; }
.wapp-bar-value { color: var(--wapp-muted); font-size: 0.75rem; white-space: nowrap; }

.wapp-bar-track {
	height: 0.5rem;
	border-radius: 999px;
	background: var(--wapp-raised);
	overflow: hidden;
}

.wapp-bar-fill {
	display: block;
	height: 100%;
	border-radius: 999px;
	background: var(--wapp-accent);
}

/* ── Tabel ─────────────────────────────────────────────────────── */

.wapp-table { width: 100%; border-collapse: collapse; font-size: 0.8125rem; }

.wapp-table th {
	padding: 0.625rem 0.75rem;
	background: var(--wapp-raised);
	border-bottom: 1px solid var(--wapp-border);
	color: var(--wapp-muted);
	font-size: 0.6875rem;
	font-weight: 600;
	letter-spacing: 0.03em;
	text-align: start;
	text-transform: uppercase;
}

.wapp-table td {
	padding: 0.625rem 0.75rem;
	border-bottom: 1px solid var(--wapp-border);
	vertical-align: top;
	overflow-wrap: anywhere;
}

.wapp-table tbody tr:last-child td { border-bottom: 0; }
.wapp-table tbody tr:hover td      { background: var(--wapp-raised); }

.wapp-td-quiet  { color: var(--wapp-muted); }
.wapp-td-strong { color: var(--wapp-heading); font-weight: 600; }

.wapp-stack-1 { display: block; }
.wapp-stack-2 { display: block; color: var(--wapp-muted); font-size: 0.75rem; }

.wapp-tag {
	display: inline-block;
	margin: 0.0625rem 0.25rem 0.0625rem 0;
	padding: 0.0625rem 0.5rem;
	border-radius: 999px;
	background: var(--wapp-raised);
	color: var(--wapp-text);
	font-size: 0.6875rem;
	font-weight: 600;
}

.wapp-tag--info    { background: rgba(41, 156, 219, 0.16); color: var(--wapp-info); }
.wapp-tag--accent  { background: rgba(74, 92, 156, 0.24);  color: #93a3dd; }
.wapp-tag--success { background: rgba(10, 179, 156, 0.16); color: var(--wapp-success); }

.wo-light .wapp-tag--accent { background: rgba(64, 81, 137, 0.12); color: var(--wapp-accent); }

/* ── Gol ───────────────────────────────────────────────────────── */

.wapp-empty {
	padding: 2rem 1.25rem;
	border: 1px dashed var(--wapp-border);
	border-radius: var(--wapp-radius);
	background: var(--wapp-card);
	text-align: center;
}

.wapp-empty-title { margin: 0 0 0.25rem; color: var(--wapp-heading); font-weight: 600; }
.wapp-empty-body  { margin: 0; color: var(--wapp-muted); font-size: 0.8125rem; }

/* ── Paginare ──────────────────────────────────────────────────── */

.wapp-pager {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 0.75rem;
	margin-top: 0.875rem;
}

.wapp-pager-info,
.wapp-pager-pos { color: var(--wapp-muted); font-size: 0.75rem; }

.wapp-pager-nav { display: flex; align-items: center; gap: 0.5rem; }

/* ── Mesaje (sandbox, monedă mixtă) ────────────────────────────── */

.wapp-alert {
	padding: 0.75rem 1rem;
	margin-bottom: var(--wapp-gap);
	border: 1px solid var(--wapp-border);
	border-inline-start-width: 3px;
	border-radius: var(--wapp-radius);
	background: var(--wapp-card);
	font-size: 0.8125rem;
}

.wapp-alert--warning { border-inline-start-color: var(--wapp-warning); }
.wapp-alert--info    { border-inline-start-color: var(--wapp-info); }
.wapp-alert strong   { color: var(--wapp-heading); }

/* ── Bară de filtre ────────────────────────────────────────────── */

.wapp-toolbar {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: var(--wapp-gap);
	margin-bottom: var(--wapp-gap);
}

.wapp-toolbar .wapp-filter { margin-bottom: 0; }

.wapp-pills {
	display: flex;
	flex-wrap: wrap;
	gap: 0.25rem;
	padding: 0.1875rem;
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
	background: var(--wapp-card);
}

.wapp-pill {
	display: inline-flex;
	align-items: center;
	min-height: 1.875rem;
	padding: 0.25rem 0.7rem;
	border-radius: 3px;
	color: var(--wapp-muted);
	font-size: 0.75rem;
	font-weight: 600;
	text-decoration: none;
	white-space: nowrap;
}

.wapp-pill:hover     { color: var(--wapp-heading); background: var(--wapp-raised); }
.wapp-pill.is-active { background: var(--wapp-accent); color: #fff; }

/* ── Grilă KPI ─────────────────────────────────────────────────── */

.wapp-kpis {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 13rem), 1fr));
	gap: 0.75rem;
	margin-bottom: var(--wapp-gap);
}

/* Grilă KPI folosită în interiorul unui card — fără margine dublă dedesubt */
.wapp-kpis--tight { margin-bottom: 0; margin-top: 0.75rem; }

.wapp-kpi {
	position: relative;
	display: flex;
	flex-direction: column;
	gap: 0.35rem;
	min-height: 6rem;
	padding: 0.875rem 1rem;
	background: var(--wapp-card);
	border: 1px solid var(--wapp-border);
	border-inline-start: 3px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
}

.wapp-kpi--success { border-inline-start-color: var(--wapp-success); }
.wapp-kpi--accent  { border-inline-start-color: var(--wapp-accent); }
.wapp-kpi--info    { border-inline-start-color: var(--wapp-info); }
.wapp-kpi--warning { border-inline-start-color: var(--wapp-warning); }
.wapp-kpi.is-dim   { opacity: 0.55; }

.wapp-kpi-label {
	color: var(--wapp-muted);
	font-size: 0.6875rem;
	font-weight: 600;
	letter-spacing: 0.04em;
	text-transform: uppercase;
}

.wapp-kpi-value {
	color: var(--wapp-heading);
	font-size: 1.375rem;
	font-weight: 600;
	line-height: 1.15;
	font-variant-numeric: tabular-nums;
	overflow-wrap: anywhere;
}

.wapp-kpi-cur {
	margin-inline-start: 0.25rem;
	color: var(--wapp-muted);
	font-size: 0.75rem;
	font-weight: 500;
}

.wapp-kpi-sub { color: var(--wapp-muted); font-size: 0.6875rem; margin-top: auto; }

/* Slot personalizabil */
.wapp-kpi--slot.is-empty {
	align-items: center;
	justify-content: center;
	border-style: dashed;
	border-inline-start-style: dashed;
}

.wapp-kpi-edit {
	position: absolute;
	inset-block-start: 0.375rem;
	inset-inline-end: 0.375rem;
	min-height: 1.5rem;
	padding: 0.125rem 0.5rem;
	border: 1px solid var(--wapp-border);
	border-radius: 3px;
	background: var(--wapp-raised);
	color: var(--wapp-muted);
	font: inherit;
	font-size: 0.6875rem;
	cursor: pointer;
}

.wapp-kpi-edit:hover { color: var(--wapp-heading); border-color: var(--wapp-accent); }

.wapp-kpi-picker {
	position: absolute;
	inset-block-start: calc(100% + 0.25rem);
	inset-inline-end: 0;
	z-index: 20;
	min-width: 13rem;
	padding: 0.625rem;
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
	background: var(--wapp-card);
	box-shadow: 0 8px 24px rgba(0, 0, 0, 0.28);
}

.wapp-kpi-picker[hidden] { display: none; }

.wapp-kpi-picker-title {
	margin: 0 0 0.5rem;
	color: var(--wapp-muted);
	font-size: 0.6875rem;
	font-weight: 600;
	letter-spacing: 0.04em;
	text-transform: uppercase;
}

.wapp-kpi-picker-list { margin: 0; padding: 0; list-style: none; display: grid; gap: 0.125rem; }

.wapp-kpi-picker-opt {
	display: block;
	padding: 0.4rem 0.5rem;
	border-radius: 3px;
	color: var(--wapp-text);
	font-size: 0.75rem;
	text-decoration: none;
}

.wapp-kpi-picker-opt:hover      { background: var(--wapp-raised); }
.wapp-kpi-picker-opt.is-active  { background: var(--wapp-accent); color: #fff; }
.wapp-kpi-picker-opt--reset     { color: var(--wapp-muted); }

/* ── Grafic ────────────────────────────────────────────────────── */

.wapp-chart { min-height: 20rem; }
.wapp-chart text { fill: var(--wapp-muted); }

/* ── Coloane numerice ──────────────────────────────────────────── */

.wapp-num { text-align: end; font-variant-numeric: tabular-nums; white-space: nowrap; }

/* ══════════════════════════════════════════════════════════════════
   PAGINA DE EVENIMENT + CHECKOUT (prefix .wev-)
   ══════════════════════════════════════════════════════════════════ */

.wev-hero {
	position: relative;
	min-height: 17rem;
	display: flex;
	align-items: flex-end;
	margin-bottom: var(--wapp-gap);
	border-radius: var(--wapp-radius-lg);
	background: var(--wapp-raised) center/cover no-repeat;
	overflow: hidden;
}

.wev-hero.is-empty { min-height: 11rem; border: 1px dashed var(--wapp-border); }

.wev-hero-in {
	position: relative;
	width: 100%;
	padding: clamp(1rem, 3vw, 2rem);
	background: linear-gradient(transparent, rgba(0, 0, 0, 0.78));
}

.wev-hero.is-empty .wev-hero-in { background: none; }

.wev-chips { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-bottom: 0.7rem; }

.wev-title {
	margin: 0 0 0.4rem;
	color: #fff;
	font-size: clamp(1.35rem, 4vw, 2.1rem);
	font-weight: 700;
	line-height: 1.15;
}

.wev-hero.is-empty .wev-title { color: var(--wapp-heading); }

.wev-meta { display: flex; flex-wrap: wrap; gap: 1rem; color: #dfe4ea; font-size: 0.875rem; }
.wev-hero.is-empty .wev-meta { color: var(--wapp-muted); }
.wev-hero-gap { margin-top: 0.75rem; }

/* Două coloane */
.wev-cols {
	display: grid;
	grid-template-columns: minmax(0, 1fr) 21rem;
	gap: var(--wapp-gap);
	align-items: start;
}

.wev-main { display: grid; gap: var(--wapp-gap); min-width: 0; }
.wev-side { position: sticky; top: 1rem; display: grid; gap: var(--wapp-gap); }

.wev-prose { font-size: 0.9375rem; }
.wev-prose p { margin: 0 0 0.7rem; }
.wev-tags { display: flex; flex-wrap: wrap; gap: 0.3rem; margin-top: 0.8rem; }
.wev-fine { font-size: 0.75rem; margin: 0.5rem 0 0; }

/* Program */
.wev-slot {
	display: grid;
	grid-template-columns: 3.5rem 1fr;
	gap: 0.75rem;
	padding: 0.55rem 0;
	border-bottom: 1px solid var(--wapp-border);
}
.wev-slot:last-child { border-bottom: 0; }
.wev-slot time { color: var(--wapp-muted); font-size: 0.8125rem; font-variant-numeric: tabular-nums; }
.wev-slot b { display: block; color: var(--wapp-heading); font-size: 0.875rem; }
.wev-slot span { font-size: 0.8125rem; }

/* Carduri bilet */
.wev-tk {
	padding: 0.8rem 0.9rem;
	margin-bottom: 0.55rem;
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
	background: var(--wapp-raised);
}
.wev-tk-top { display: flex; justify-content: space-between; align-items: baseline; gap: 0.6rem; }
.wev-tk-name { color: var(--wapp-heading); font-weight: 600; font-size: 0.875rem; }
.wev-tk-price { color: var(--wapp-heading); font-weight: 700; font-size: 1.0625rem; white-space: nowrap; }
.wev-tk-desc { margin: 0.35rem 0 0.6rem; color: var(--wapp-muted); font-size: 0.78rem; }
.wev-tk-foot { display: flex; justify-content: space-between; align-items: center; gap: 0.6rem; flex-wrap: wrap; }

.wev-stock { font-size: 0.72rem; font-weight: 600; }
.wev-stock--ok  { color: var(--wapp-success); }
.wev-stock--low { color: var(--wapp-warning); }
.wev-stock--out { color: #f06548; }
.wapp-btn.is-disabled { background: var(--wapp-raised); color: var(--wapp-muted); border-color: var(--wapp-border); cursor: not-allowed; }

/* Artiști */
.wev-artists { display: flex; flex-wrap: wrap; gap: 0.5rem; }

.wev-artist {
	display: inline-flex;
	align-items: center;
	gap: 0.45rem;
	padding: 0.25rem 0.7rem 0.25rem 0.25rem;
	border: 1px solid var(--wapp-border);
	border-radius: 99px;
	background: var(--wapp-raised);
	color: var(--wapp-text);
	font-size: 0.8125rem;
	text-decoration: none;
}
.wev-artist:hover { border-color: var(--wapp-accent); color: var(--wapp-heading); }
.wev-artist.is-plain { opacity: 0.72; }

.wev-artist-pic {
	width: 1.6rem; height: 1.6rem;
	border-radius: 50%;
	background: var(--wapp-card) center/cover no-repeat;
	border: 1px solid var(--wapp-border);
	flex-shrink: 0;
}

.wev-venue { margin: 0 0 0.7rem; font-size: 0.9375rem; }

/* Organizator */
.wev-org-top { display: flex; gap: 0.7rem; align-items: center; margin-bottom: 0.7rem; }
.wev-org-logo {
	flex-shrink: 0;
	width: 3.25rem; height: 3.25rem;
	display: flex; align-items: center; justify-content: center;
	border: 1px dashed var(--wapp-border);
	border-radius: var(--wapp-radius);
	background: var(--wapp-raised);
	color: var(--wapp-muted);
	font-size: 0.65rem;
	text-transform: uppercase;
	letter-spacing: 0.06em;
}
.wev-org-name { color: var(--wapp-heading); font-weight: 600; font-size: 0.9375rem; }
.wev-stars { color: var(--wapp-warning); font-size: 0.8125rem; letter-spacing: 1px; }

/* ── Marcaje de goluri ── */
.wev-gap {
	display: block;
	margin: 0.5rem 0;
	padding: 0.5rem 0.65rem;
	border-inline-start: 3px solid;
	border-radius: 0;
	background: var(--wapp-raised);
	font-size: 0.78rem;
	line-height: 1.5;
}
.wev-gap--fill  { border-color: var(--wapp-warning); }
.wev-gap--build { border-color: var(--wapp-accent); }

.wev-gap-tag {
	display: inline-block;
	margin-inline-end: 0.4rem;
	padding: 0.05rem 0.45rem;
	border-radius: 99px;
	font-size: 0.65rem;
	font-weight: 700;
	letter-spacing: 0.04em;
	text-transform: uppercase;
}
.wev-gap--fill  .wev-gap-tag { background: rgba(247, 184, 75, 0.18); color: var(--wapp-warning); }
.wev-gap--build .wev-gap-tag { background: rgba(123, 118, 201, 0.22); color: #a8a3e0; }
.wo-light .wev-gap--build .wev-gap-tag { color: var(--wapp-accent); }
.wev-gap-text { color: var(--wapp-text); }

/* ── Checkout ── */
.wev-steps { display: flex; flex-wrap: wrap; align-items: center; gap: 0.4rem; margin-bottom: var(--wapp-gap); font-size: 0.8125rem; }
.wev-step { display: flex; align-items: center; gap: 0.45rem; color: var(--wapp-muted); }
.wev-step b {
	width: 1.4rem; height: 1.4rem;
	display: flex; align-items: center; justify-content: center;
	border: 1px solid var(--wapp-border); border-radius: 50%;
	background: var(--wapp-raised);
	font-size: 0.72rem;
}
.wev-step.is-on { color: var(--wapp-heading); }
.wev-step.is-on b { background: var(--wapp-accent); border-color: var(--wapp-accent); color: #fff; }
.wev-step.is-done b { background: rgba(10, 179, 156, 0.18); border-color: var(--wapp-success); color: var(--wapp-success); }
.wev-sep { color: var(--wapp-border); }

.wev-line { display: flex; justify-content: space-between; gap: 0.8rem; padding: 0.55rem 0; }
.wev-line-name { color: var(--wapp-heading); font-weight: 600; font-size: 0.875rem; }
.wev-line-right { text-align: end; }

.wev-qty { display: inline-flex; align-items: center; border: 1px solid var(--wapp-border); border-radius: var(--wapp-radius); overflow: hidden; }
.wev-qty a { width: 2rem; height: 2rem; display: flex; align-items: center; justify-content: center; background: var(--wapp-raised); color: var(--wapp-text); text-decoration: none; }
.wev-qty span { width: 2.4rem; text-align: center; font-size: 0.875rem; }

.wev-person { padding: 0.9rem; margin-bottom: 0.65rem; border: 1px solid var(--wapp-border); border-radius: var(--wapp-radius); background: var(--wapp-raised); }
.wev-person h3 { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 0.5rem; margin: 0 0 0.7rem; color: var(--wapp-heading); font-size: 0.8125rem; font-weight: 600; }
.wev-copy { color: var(--wapp-accent); font-size: 0.75rem; font-weight: 600; }

.wev-grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 0.6rem; }
.wev-grid2 label { display: block; margin-bottom: 0.2rem; color: var(--wapp-muted); font-size: 0.72rem; }
.wev-grid2 input {
	width: 100%; min-height: 2.25rem;
	padding: 0.4rem 0.6rem;
	border: 1px solid var(--wapp-border); border-radius: var(--wapp-radius);
	background: var(--wapp-card); color: var(--wapp-text);
	font: inherit; font-size: 0.875rem;
}

/* Formulare Settings */
.wapp textarea {
	width: 100%;
	padding: 0.55rem 0.7rem;
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
	background: var(--wapp-card);
	color: var(--wapp-text);
	font: inherit;
	font-size: 0.875rem;
	line-height: 1.55;
	resize: vertical;
}

.wapp label { display: block; margin-bottom: 0.25rem; color: var(--wapp-muted); font-size: 0.75rem; }

.wapp-check { display: flex; align-items: center; gap: 0.5rem; }
.wapp-check input { width: 1.05rem; height: 1.05rem; }
.wapp-check span { color: var(--wapp-text); font-size: 0.875rem; }

/* Adresa publică a organizatorului. Rădăcina site-ului stă lipită de câmp, ca
   omul să vadă adresa întreagă în timp ce o scrie, nu doar bucata lui. */
.wapp-slug-row {
	display: flex;
	align-items: stretch;
	flex-wrap: wrap;
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
	background: var(--wapp-card);
	overflow: hidden;
}
.wapp-slug-root,
.wapp-slug-tail {
	display: flex;
	align-items: center;
	padding: 0 0.4rem;
	color: var(--wapp-muted);
	font-size: 0.8125rem;
	white-space: nowrap;
}
.wapp-slug-root { padding-inline-start: 0.7rem; }
.wapp-slug-tail { padding-inline-end: 0.7rem; }
.wapp-slug-row input {
	flex: 1 1 8rem;
	min-width: 6rem;
	border: 0;
	border-radius: 0;
	background: transparent;
	padding-inline: 0;
}
.wapp-slug-aliases { margin: 0.35rem 0 0; padding-inline-start: 1.1rem; }
.wapp-slug-aliases code { font-size: 0.75rem; color: var(--wapp-muted); }

.wapp-alert--success { border-inline-start-color: var(--wapp-success); }
.wapp-alert--danger  { border-inline-start-color: #f06548; }

.wev-sum { display: flex; justify-content: space-between; gap: 0.6rem; padding: 0.28rem 0; font-size: 0.875rem; }
.wev-sum span:first-child { color: var(--wapp-muted); }
.wev-sum--total { margin-top: 0.5rem; padding-top: 0.7rem; border-top: 1px solid var(--wapp-border); font-size: 1.0625rem; font-weight: 700; }
.wev-sum--total span { color: var(--wapp-heading); }

.wev-tc { display: flex; align-items: flex-start; gap: 0.55rem; margin: 0.9rem 0 0; font-size: 0.8125rem; line-height: 1.5; }
.wev-tc input { width: 1.05rem; height: 1.05rem; flex-shrink: 0; margin-top: 0.15rem; }
.wev-pay { display: block; width: 100%; text-align: center; margin-top: 0.9rem; padding: 0.85rem; font-size: 0.9375rem; }
.wev-secure { text-align: center; }

@media (max-width: 56rem) {
	.wev-cols { grid-template-columns: 1fr; }
	.wev-side { position: static; order: -1; }
	.wev-grid2 { grid-template-columns: 1fr; }
	.wev-hero { min-height: 12rem; }
}

/* ══════════════════════════════════════════════════════════════════
   MOBIL — un singur punct de rupere.
   Tabelul se pliază în carduri: fiecare rând devine un bloc, iar
   antetul coloanei apare în fața valorii, luat din data-label.
   ══════════════════════════════════════════════════════════════════ */

@media (max-width: 45rem) {

	.wapp-table thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }

	.wapp-table,
	.wapp-table tbody,
	.wapp-table tr,
	.wapp-table td { display: block; width: 100%; }

	.wapp-card--flush { padding: 0.75rem; background: transparent; border: 0; }

	.wapp-table tr {
		margin-bottom: 0.75rem;
		padding: 0.25rem 0.875rem;
		background: var(--wapp-card);
		border: 1px solid var(--wapp-border);
		border-radius: var(--wapp-radius);
	}

	.wapp-table td {
		display: grid;
		grid-template-columns: minmax(6rem, 38%) 1fr;
		gap: 0.75rem;
		padding: 0.5rem 0;
		border-bottom: 1px solid var(--wapp-border);
	}

	.wapp-table td::before {
		content: attr(data-label);
		color: var(--wapp-muted);
		font-size: 0.6875rem;
		font-weight: 600;
		letter-spacing: 0.03em;
		text-transform: uppercase;
	}

	.wapp-table tr td:last-child { border-bottom: 0; }

	/* Coloana de acțiuni n-are etichetă: pe card, butoanele stau singure,
	   pe toată lățimea, nu într-o coloană de 1%. */
	.wapp-col-actions {
		width: 100%;
		display: flex;
		justify-content: flex-end;
		align-items: center;
		gap: 0.5rem;
	}
	.wapp-col-actions::before { content: none; }

	/* Rândul de defalcare ocupă tot cardul, fără etichetă în față. */
	.wapp-row-detail > td { display: block; }
	.wapp-row-detail > td::before { content: none; }
	.wapp-table tbody tr:hover td { background: transparent; }

	.wapp-bar-row { grid-template-columns: 1fr; gap: 0.25rem; }
	.wapp-bar-name { text-align: start; font-weight: 600; }
	.wapp-bar-value { text-align: end; }

	.wapp-select { flex-basis: 100%; }

	/* Ținte de atins confortabile cu degetul */
	.wapp-btn,
	.wapp-select,
	.wapp-lang-opt { min-height: 2.75rem; }

	/* Pe mobil coloanele numerice stau lipite de etichetă, nu la dreapta */
	.wapp-num { text-align: start; }

	.wapp-pills { width: 100%; overflow-x: auto; flex-wrap: nowrap; }
	.wapp-pill  { min-height: 2.25rem; }

	.wapp-kpi-picker {
		position: static;
		min-width: 0;
		margin-top: 0.5rem;
		box-shadow: none;
	}

	.wapp-chart { min-height: 16rem; }
}

/* Panoul organizatorului — conținut real */
.wev-org-logo { background-size: cover; background-position: center; }
.wev-org-bio { margin: 0.6rem 0 0; font-size: 0.875rem; }
.wev-org-contact { margin-top: 0.7rem; display: grid; gap: 0.15rem; color: var(--wapp-muted); font-size: 0.8125rem; }
.wev-org-links { display: flex; flex-wrap: wrap; gap: 0.35rem; margin-top: 0.8rem; }
.wev-org-links a {
	padding: 0.2rem 0.65rem;
	border: 1px solid var(--wapp-border);
	border-radius: 99px;
	color: var(--wapp-muted);
	font-size: 0.75rem;
	text-decoration: none;
}
.wev-org-links a:hover { color: var(--wapp-heading); border-color: var(--wapp-accent); }

.wev-terms summary { cursor: pointer; color: var(--wapp-accent); font-size: 0.875rem; font-weight: 600; }
.wev-terms .wev-prose { margin-top: 0.7rem; }

/* ══════════════════════════════════════════════════════════════════
 * SHELL + ROUTER (Faza 0) — cadrul Portalului nou
 *
 * Referința vizuală: DEMO Screenshots/demo-portal-nou-shell.html
 * (ROADMAP-Portal-Nou.md §2b). Aceleași reguli ca tot fișierul:
 * nicio unitate vh, nicio lățime în px, un singur punct de rupere,
 * ținte de atins de minimum 2.75rem (44px) pe mobil.
 * ════════════════════════════════════════════════════════════════ */

.wapp-shell {
	display: grid;
	grid-template-columns: 15rem minmax(0, 1fr);
	padding: 0;
	max-width: none;
	background: var(--wapp-bg);
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius-lg);
	overflow: hidden;
}

/* Ecranele randate în shell își păstrează clasa .wapp, dar cadrul
   (lățime maximă, centrare) îl dă shell-ul — nu se dublează. */
.wapp-shell .wapp {
	max-width: none;
	margin: 0;
	padding: 0;
}

/* ── Sidebar ── */

.wapp-side {
	background: var(--wapp-card);
	border-inline-end: 1px solid var(--wapp-border);
	display: flex;
	flex-direction: column;
	min-width: 0;
}

.wapp-brand {
	display: flex;
	align-items: center;
	/* Același token ca bara de sus — vezi comentariul de la `.wapp-top`. */
	height: var(--wapp-topbar, 3.5rem);
	flex-shrink: 0;
	padding: 0 1.125rem;
	border-bottom: 1px solid var(--wapp-border);
	color: var(--wapp-heading);
	font-size: 1.0625rem;
	font-weight: 600;
	letter-spacing: -0.02em;
}

.wapp-brand em { color: var(--wapp-accent); font-style: normal; }

/* Logo-ul ales din WEDA Admin. Înălțimea e legată de bara de sus, nu scrisă
   în pixeli: orice imagine urcată intră în același spațiu, indiferent cât e
   de mare. `width:auto` păstrează proporțiile — un logo turtit e mai rău
   decât niciun logo. */
.wapp-brand-logo {
	height: 1.625rem;
	width: auto;
	max-width: 8rem;
	object-fit: contain;
	flex-shrink: 0;
}

.wapp-brand-word { white-space: nowrap; }

/* Cuvântul de după logo. Ceva mai stins decât marca: e o precizare, nu
   o a doua marcă. */
.wapp-brand-suffix {
	margin-inline-start: 0.5rem;
	color: var(--wapp-muted);
	font-size: 0.8125rem;
	font-weight: 500;
	letter-spacing: 0;
	white-space: nowrap;
}

.wapp-nav { padding: 0.75rem 0; flex: 1; }

/* Eticheta unei intrări de meniu. Există ca element separat ca să poată
   dispărea la meniul strâns — un text gol între pictogramă și insignă
   n-ar avea de ce se prinde. */
.wapp-nav-text { min-width: 0; }

.wapp-nav-group {
	padding: 0.75rem 1.125rem 0.375rem;
	color: var(--wapp-muted);
	font-size: 0.625rem;
	font-weight: 600;
	letter-spacing: 0.1em;
	text-transform: uppercase;
}

.wapp-nav a {
	display: flex;
	align-items: center;
	gap: 0.7rem;
	margin: 0.0625rem 0.5rem;
	padding: 0.6rem 0.7rem;
	min-height: 2.75rem;
	border-radius: var(--wapp-radius);
	color: var(--wapp-text);
	font-size: 0.875rem;
	text-decoration: none;
}

.wapp-nav a:hover { background: var(--wapp-raised); }

.wapp-nav a.is-active {
	background: var(--wapp-raised);
	color: var(--wapp-heading);
	font-weight: 600;
	box-shadow: inset 3px 0 0 var(--wapp-accent);
}

.wapp-ic { width: 1.0625rem; height: 1.0625rem; flex-shrink: 0; opacity: 0.85; }

/* Limba în sidebar — vizibilă doar pe mobil, în sertar (§2b). */
.wapp-nav-group--lang, .wapp-nav-lang { display: none; }

/* ── Topbar ── */

.wapp-shell-main { display: flex; flex-direction: column; min-width: 0; }

/* Bara de sus și blocul mărcii trebuie să aibă EXACT aceeași înălțime, ca
   liniile lor de jos să continue una pe alta. Cu `min-height`, orice element
   adus de tema WordPress în interior (marginea implicită a unui <form>, de
   pildă) mărea doar bara — și linia ieșea în trepte. De aici înălțimea fixă,
   dintr-un singur token, plus anularea marginilor pe copiii direcți. */
.wapp-shell { --wapp-topbar: 3.5rem; }

.wapp-top {
	display: flex;
	align-items: center;
	gap: 0.875rem;
	height: var(--wapp-topbar, 3.5rem);
	flex-shrink: 0;
	padding: 0 1.125rem;
	background: var(--wapp-card);
	border-bottom: 1px solid var(--wapp-border);
}

/* Tema poate pune margini pe <form>, <p> sau <nav>. Nu în bara noastră. */
.wapp-top > * { margin: 0; }

.wapp-burger {
	display: none;
	align-items: center;
	justify-content: center;
	min-width: 2.75rem;
	min-height: 2.75rem;
	background: none;
	border: 0;
	color: var(--wapp-heading);
	cursor: pointer;
}

/* Titlul din topbar apare doar pe mobil, unde căutarea se ascunde. */
.wapp-top-title {
	display: none;
	color: var(--wapp-heading);
	font-size: 0.9375rem;
	font-weight: 600;
}

.wapp-search {
	flex: 1;
	max-width: 27.5rem;
	display: flex;
	align-items: center;
	gap: 0.55rem;
	min-height: 2.125rem;
	padding: 0 0.75rem;
	background: var(--wapp-raised);
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
	color: var(--wapp-muted);
}

.wapp-search-input {
	flex: 1;
	min-width: 0;
	background: transparent;
	border: 0;
	outline: 0;
	color: var(--wapp-text);
	font: inherit;
	font-size: 0.8125rem;
}

.wapp-env {
	margin-inline-start: auto;
	padding: 0.1875rem 0.625rem;
	border-radius: 999px;
	background: rgba(10, 179, 156, 0.15);
	color: var(--wapp-success);
	font-size: 0.6875rem;
	font-weight: 600;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	white-space: nowrap;
}

.wapp-env--sandbox {
	background: rgba(247, 184, 75, 0.15);
	color: var(--wapp-warning);
}

/* ── Butonul de strâns meniul ──────────────────────────────────────
   Stă în bara de sus, înaintea căutării — în afara meniului, ca să rămână
   la locul lui și după ce bara laterală s-a strâns la pictograme. */

.wapp-collapse {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 2.25rem;
	min-height: 2.25rem;
	padding: 0;
	background: none;
	border: 0;
	border-radius: var(--wapp-radius);
	color: var(--wapp-muted);
	cursor: pointer;
}

.wapp-collapse:hover { color: var(--wapp-heading); background: var(--wapp-raised); }

.wapp-collapse-in, .wapp-collapse-out { display: inline-flex; }
.wapp-collapse-out { display: none; }

.wapp-shell.is-collapsed .wapp-collapse-in  { display: none; }
.wapp-shell.is-collapsed .wapp-collapse-out { display: inline-flex; }

/* ── Meniul strâns: rămân doar pictogramele ────────────────────────
   Coloana se îngustează, etichetele dispar, iar numele fiecărei intrări
   rămâne în `title` — singura cale de a ști ce e pictograma. */

.wapp-shell.is-collapsed { grid-template-columns: 4rem minmax(0, 1fr); }

.wapp-shell.is-collapsed .wapp-brand {
	justify-content: center;
	padding-inline: 0;
	font-size: 0.8125rem;
}

.wapp-shell.is-collapsed .wapp-brand-suffix { display: none; }
.wapp-shell.is-collapsed .wapp-brand-logo   { max-width: 2.5rem; }

/* Titlul de grupă devine o linie subțire: fără el, cele patru zone s-ar
   lipi într-o coloană de pictograme fără nicio pauză. */
.wapp-shell.is-collapsed .wapp-nav-group {
	height: 1px;
	margin: 0.625rem 1rem 0.5rem;
	padding: 0;
	overflow: hidden;
	text-indent: -999rem;
	background: var(--wapp-border);
}

.wapp-shell.is-collapsed .wapp-nav a {
	position: relative;
	justify-content: center;
	gap: 0;
	margin-inline: 0.5rem;
	padding-inline: 0;
}

.wapp-shell.is-collapsed .wapp-nav-text { display: none; }

/* Insigna de necitite n-are unde sta pe rând, deci urcă în colț. */
.wapp-shell.is-collapsed .wapp-badge {
	position: absolute;
	top: 0.3125rem;
	inset-inline-end: 0.3125rem;
	margin: 0;
}

/* ── Mediul de lucru: indicator care se poate apăsa ────────────────
   Când organizatorul are amândouă mediile, indicatorul devine buton și
   deschide explicația plus opțiunile. Când NU are, view-ul desenează
   eticheta simplă de dinainte — nu există buton de apăsat. */

.wapp-envmenu {
	position: relative;
	margin-inline-start: auto;
}

.wapp-envmenu > summary { list-style: none; cursor: pointer; }
.wapp-envmenu > summary::-webkit-details-marker { display: none; }
.wapp-envmenu > summary::marker { content: ''; }

.wapp-env--btn {
	display: inline-flex;
	align-items: center;
	gap: 0.25rem;
	margin-inline-start: 0;
	border: 1px solid transparent;
}

.wapp-env--btn:hover { border-color: currentColor; }

.wapp-env-caret { width: 0.75rem; height: 0.75rem; flex-shrink: 0; }

.wapp-envmenu-panel {
	position: absolute;
	inset-inline-end: 0;
	top: calc(100% + 0.5rem);
	z-index: 70;
	width: min(24rem, 84vw);
	padding: 0.875rem 1rem 1rem;
	background: var(--wapp-card);
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius-lg);
	box-shadow: 0 1rem 2.5rem rgba(0, 0, 0, 0.28);
	text-align: start;
}

.wapp-envmenu-title {
	margin: 0 0 0.375rem;
	color: var(--wapp-heading);
	font-size: 0.875rem;
	font-weight: 600;
}

.wapp-envmenu-body {
	margin: 0 0 0.875rem;
	color: var(--wapp-muted);
	font-size: 0.8125rem;
	line-height: 1.55;
}

.wapp-envmenu-opt {
	display: flex;
	align-items: center;
	gap: 0.625rem;
	margin: 0 0 0.5rem;
}

.wapp-envmenu-now { color: var(--wapp-muted); font-size: 0.75rem; }

.wapp-envmenu-link {
	display: inline-block;
	margin-top: 0.25rem;
	color: var(--wapp-accent);
	font-size: 0.8125rem;
	text-decoration: none;
}

.wapp-envmenu-link:hover { text-decoration: underline; }

.wapp-avatar {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 1.875rem;
	height: 1.875rem;
	border-radius: 50%;
	background: var(--wapp-accent);
	color: #fff;
	font-size: 0.75rem;
	font-weight: 600;
	flex-shrink: 0;
}

/* ── Zona de conținut: titlu + breadcrumb ── */

.wapp-shell-body { padding: var(--wapp-gap); }

.wapp-shell-head {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 0.875rem;
	flex-wrap: wrap;
	margin-bottom: 1.125rem;
}

.wapp-shell-title {
	margin: 0;
	color: var(--wapp-heading);
	font-size: 1.25rem;
	font-weight: 600;
}

.wapp-crumb { color: var(--wapp-muted); font-size: 0.75rem; }

/* ── Căutare: stare goală în card ── */

.wapp-card-empty {
	margin: 0;
	padding: 0.875rem 1rem;
	color: var(--wapp-muted);
	font-size: 0.8125rem;
}

/* ── Tonuri suplimentare pentru etichete de status ── */

.wapp-tag--warning { background: rgba(247, 184, 75, 0.16); color: var(--wapp-warning); }
.wapp-tag--danger  { background: rgba(240, 101, 72, 0.16); color: #f06548; }
.wapp-tag--muted   { background: var(--wapp-raised);       color: var(--wapp-muted); }

/* ── Vălul sertarului — există doar pe mobil ── */

.wapp-shell-veil { display: none; }

/* ══════════════════════════════════════════════════════════════════
 * PE TOT ECRANUL — desktop
 *
 * Cerința: portalul nou să arate ca o aplicație independentă, exact ca
 * portalul vechi. Acela o obținea cu `html,body{height:100%;overflow:hidden}`
 * plus `height:100vh` pe container — adică fix combinația care taie
 * conținutul pe telefon (bara de adrese schimbă înălțimea ferestrei) și
 * care, prin `overflow:hidden`, blochează și derularea nativă ce ar fi
 * salvat situația.
 *
 * Aici același rezultat vine din `position:fixed; inset:0`: fără nicio
 * unitate `vh`, fără înălțime scrisă undeva. Derularea se mută înăuntru —
 * bara laterală și zona de conținut se derulează fiecare separat, ca în
 * portalul vechi.
 *
 * Se aplică DOAR peste punctul de rupere și DOAR pe pagina cu șablonul
 * propriu (`body.weda-app-fullscreen`). Dacă cineva pune shortcode-ul
 * într-o pagină obișnuită a temei, portalul rămâne în fluxul paginii și
 * nu acoperă antetul temei.
 * ════════════════════════════════════════════════════════════════ */

@media (min-width: 45.0625rem) {

	.weda-app-fullscreen .wapp-shell {
		position: fixed;
		inset: 0;
		border: 0;
		border-radius: 0;
	}

	/* Bara de administrare WordPress stă deasupra, fixată. Fără linia asta,
	   ar acoperi marca și începutul navigării.

	   Înălțimea vine din variabila pe care o publică WordPress (32px pe
	   desktop, 46px pe ecran îngust) — singura cale ca valoarea să rămână
	   corectă dacă WordPress o schimbă. Rezerva de 32px acoperă instalările
	   mai vechi, unde variabila nu există. */
	.admin-bar.weda-app-fullscreen .wapp-shell {
		top: var( --wp-admin--admin-bar--height, 32px );
	}

	/* Fiecare coloană se derulează singură — conținutul lung nu mai împinge
	   pagina, exact ca în portalul vechi.

	   `min-height: 0` nu e decor: elementele dintr-o grilă refuză implicit să
	   scadă sub înălțimea conținutului lor, așa că fără el coloanele ar
	   depăși cadrul fix în loc să se deruleze înăuntru. */
	.weda-app-fullscreen .wapp-side,
	.weda-app-fullscreen .wapp-shell-main {
		min-height: 0;
		overflow-y: auto;
	}

	/* Topbar-ul rămâne vizibil la derularea conținutului. */
	.weda-app-fullscreen .wapp-top {
		position: sticky;
		top: 0;
		z-index: 20;
	}
}

/* Pe pagina proprie, portalul nu are margini de temă de compensat. */
.weda-app-fullscreen { margin: 0; }

/* ── Mobil: sertar peste conținut, cu văl întunecat ── */

@media (max-width: 45rem) {

	.wapp-shell { grid-template-columns: minmax(0, 1fr); }

	.wapp-side {
		position: fixed;
		inset-block: 0;
		inset-inline-start: 0;
		width: min(78%, 20rem);
		z-index: 60;
		border-inline-end: 1px solid var(--wapp-border);
		overflow-y: auto;
		transform: translateX(-105%);
		transition: transform 0.2s ease;
	}

	.wapp-shell.is-open .wapp-side { transform: none; }

	.wapp-shell.is-open .wapp-shell-veil {
		display: block;
		position: fixed;
		inset: 0;
		z-index: 50;
		background: rgba(0, 0, 0, 0.55);
		border: 0;
		padding: 0;
		cursor: pointer;
	}

	.wapp-burger { display: inline-flex; }

	/* Pe telefon bara laterală e sertar, nu coloană: strângerea n-are ce
	   strânge, iar burgerul de alături face deja deschis/închis. Butonul
	   dispare, și cu el orice urmă a stării de „strâns" — altfel sertarul
	   s-ar deschide lat de patru rem, cu meniul tăiat. */
	.wapp-collapse { display: none; }

	.wapp-shell.is-collapsed { grid-template-columns: minmax(0, 1fr); }
	.wapp-shell.is-collapsed .wapp-brand { justify-content: flex-start; padding-inline: 1.125rem; font-size: 1.0625rem; }
	.wapp-shell.is-collapsed .wapp-brand-suffix { display: inline; }
	.wapp-shell.is-collapsed .wapp-brand-logo { max-width: 8rem; }
	.wapp-shell.is-collapsed .wapp-nav-text { display: inline; }
	.wapp-shell.is-collapsed .wapp-nav a { justify-content: flex-start; gap: 0.7rem; margin-inline: 0.5rem; padding-inline: 0.7rem; }
	.wapp-shell.is-collapsed .wapp-badge { position: static; }
	.wapp-shell.is-collapsed .wapp-nav-group {
		height: auto;
		margin: 0;
		padding: 0.75rem 1.125rem 0.375rem;
		overflow: visible;
		text-indent: 0;
		background: none;
	}

	/* Topbar-ul păstrează titlul ecranului și mediul — restul dispare (§2b). */
	.wapp-top-title { display: inline; }
	.wapp-search    { display: none; }
	.wapp-lang--top { display: none; }
	.wapp-avatar    { display: none; }

	/* Limba coboară în sertar, sub eticheta ei proprie. */
	.wapp-nav-group--lang { display: block; }
	.wapp-nav-lang        { display: block; padding: 0.125rem 1.125rem 0.75rem; }
}

@media (prefers-reduced-motion: reduce) {
	.wapp-side { transition: none; }
}

/* ══════════════════════════════════════════════════════════════════
 * ECRANUL DE ACCES + MENIUL DE CONT (Faza 0)
 * ════════════════════════════════════════════════════════════════ */

/* ── Ecranul de acces ── */

.wapp-gate {
	display: flex;
	align-items: center;
	justify-content: center;
	padding: clamp(1.5rem, 6vw, 4rem) var(--wapp-gap);
}

.wapp-gate-card {
	width: 100%;
	max-width: 28rem;
	padding: clamp(1.75rem, 5vw, 2.75rem);
	background: var(--wapp-card);
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius-lg);
	text-align: center;
}

.wapp-gate-brand {
	margin-bottom: 1.25rem;
	color: var(--wapp-heading);
	font-size: 1.25rem;
	font-weight: 600;
	letter-spacing: -0.02em;
}

.wapp-gate-brand em { color: var(--wapp-accent); font-style: normal; }

.wapp-gate-title {
	margin: 0 0 0.625rem;
	color: var(--wapp-heading);
	font-size: 1.25rem;
	font-weight: 600;
}

.wapp-gate-body {
	margin: 0 0 1.75rem;
	color: var(--wapp-muted);
	font-size: 0.875rem;
	line-height: 1.6;
}

.wapp-gate-actions { display: flex; flex-direction: column; gap: 0.625rem; }

.wapp-gate-btn {
	display: flex;
	align-items: center;
	justify-content: center;
	min-height: 2.75rem;
	padding: 0.6rem 1.25rem;
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
	font-size: 0.875rem;
	font-weight: 600;
	text-decoration: none;
}

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

.wapp-gate-btn--ghost { background: var(--wapp-raised); color: var(--wapp-text); }
.wapp-gate-btn--ghost:hover { border-color: var(--wapp-accent); color: var(--wapp-heading); }

/* ── Meniul de cont ── */

/* Tema site-ului are o regulă `details { padding:14px; border-radius:14px;
   border:1px solid var(--border) }`, scrisă pentru acordeoanele ei. Meniul de
   cont și comutatorul de mediu sunt tot `<details>` — și primeau, pe furiș, un
   dreptunghi cu ramă în jurul avatarului și al indicatorului de mediu.

   Se anulează AICI, nu în tema site-ului: acolo regula are rostul ei, iar noi
   n-avem voie s-o stricăm pentru restul paginilor. */
.wapp-account,
.wapp-envmenu {
	padding: 0;
	border: 0;
	border-radius: 0;
	background: none;
	box-shadow: none;
}

.wapp-account { position: relative; flex-shrink: 0; }

.wapp-account-toggle {
	display: flex;
	align-items: center;
	list-style: none;
	cursor: pointer;
}

/* Săgeata implicită a lui <details>, în ambele motoare. */
.wapp-account-toggle::-webkit-details-marker { display: none; }
.wapp-account-toggle::marker { content: ""; }

.wapp-avatar--img { object-fit: cover; display: block; }

.wapp-account-menu {
	position: absolute;
	inset-inline-end: 0;
	top: calc(100% + 0.5rem);
	z-index: 40;
	min-width: 15rem;
	padding: 0.375rem;
	background: var(--wapp-card);
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
	box-shadow: 0 0.75rem 2rem rgba(0, 0, 0, 0.28);
}

.wapp-account-id {
	display: flex;
	align-items: center;
	gap: 0.625rem;
	padding: 0.625rem;
	border-bottom: 1px solid var(--wapp-border);
	margin-bottom: 0.375rem;
}

.wapp-account-id-text { min-width: 0; display: flex; flex-direction: column; }

.wapp-account-name {
	color: var(--wapp-heading);
	font-size: 0.8125rem;
	font-weight: 600;
	overflow-wrap: anywhere;
}

.wapp-account-email {
	color: var(--wapp-muted);
	font-size: 0.75rem;
	overflow-wrap: anywhere;
}

.wapp-account-item {
	/* Cele două reguli de mai jos merg ÎMPREUNĂ, și amândouă sunt necesare:
	   `<button>` nu se întinde ca un bloc obișnuit nici măcar cu `display: flex`
	   — lățimea lui implicită e cât conținutul, spre deosebire de `<a>`. De aici
	   butonul de temă mai îngust decât celelalte două intrări. Iar `width: 100%`
	   singur ieșea din card, pentru că butoanele nu moșteneau `box-sizing`.
	   Cu ambele, intrarea umple exact lățimea utilă a meniului. */
	box-sizing: border-box;
	width: 100%;
	display: flex;
	align-items: center;
	min-height: 2.75rem;
	padding: 0.5rem 0.625rem;
	background: none;
	border: 0;
	border-radius: var(--wapp-radius);
	color: var(--wapp-text);
	font: inherit;
	font-size: 0.8125rem;
	text-align: start;
	text-decoration: none;
	cursor: pointer;
}

.wapp-account-item:hover { background: var(--wapp-raised); color: var(--wapp-heading); }
.wapp-account-item--quiet { color: var(--wapp-muted); }

/* Comutatorul de temă: ambele etichete există în pagină, se vede una singură.
   Fără linia asta, JavaScript-ul ar trebui să scrie text — ceea ce modulul
   nu face nicăieri. */
.wapp-theme-light { display: none; }
.wo-light .wapp-theme-light { display: inline; }
.wo-light .wapp-theme-dark  { display: none; }

/* Pe mobil meniul se deschide pe toată lățimea disponibilă, ancorat dreapta. */
@media (max-width: 45rem) {
	.wapp-account-menu {
		position: fixed;
		inset-inline: var(--wapp-gap);
		min-width: 0;
	}
}

/* ══════════════════════════════════════════════════════════════════
 * FAZA 1 — Facturi, Contracte, Stripe Connect
 * ════════════════════════════════════════════════════════════════ */

/* ── Ecran indisponibil (sandbox / modul lipsă) ── */

.wapp-locked { border-inline-start: 3px solid var(--wapp-warning); }
.wapp-locked-body { margin: 0; color: var(--wapp-muted); max-width: 68ch; }

/* ── Contracte ── */

.wapp-contract-pending { border-inline-start: 3px solid var(--wapp-warning); }

.wapp-contract-meta {
	display: flex;
	flex-wrap: wrap;
	gap: 0.25rem 0.75rem;
	margin: 0 0 1rem;
	color: var(--wapp-muted);
	font-size: 0.8125rem;
}

.wapp-contract-meta strong { color: var(--wapp-heading); }

/* Previzualizarea contractului: HTML produs de modulul de contracte, deci
   înălțimea o mărginim aici, nu acolo. `rem`, nu `vh` — pe telefon o
   fereastră legată de viewport ar sări la fiecare mișcare a barei de adrese. */
.wapp-contract-preview {
	max-height: 24rem;
	overflow-y: auto;
	padding: 1rem;
	margin-bottom: 1.125rem;
	background: var(--wapp-raised);
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
	font-size: 0.8125rem;
	line-height: 1.6;
}

.wapp-contract-preview :is(h1, h2, h3) { color: var(--wapp-heading); font-size: 0.9375rem; }
.wapp-contract-preview table { width: 100%; border-collapse: collapse; }

/* Pașii de semnare */
.wapp-steps {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 13rem), 1fr));
	gap: 0.75rem;
	margin: 0 0 1.125rem;
	padding: 0;
	list-style: none;
	counter-reset: none;
}

.wapp-step {
	padding: 0.75rem 0.875rem;
	background: var(--wapp-raised);
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
}

.wapp-step-num {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 1.5rem;
	height: 1.5rem;
	margin-bottom: 0.5rem;
	border-radius: 50%;
	background: var(--wapp-accent);
	color: #fff;
	font-size: 0.8125rem;
	font-weight: 700;
}

.wapp-step-text { color: var(--wapp-muted); font-size: 0.78125rem; line-height: 1.5; }

.wapp-contract-form {
	padding-top: 1rem;
	margin-top: 1rem;
	border-top: 1px solid var(--wapp-border);
}

.wapp-field { margin: 0.875rem 0; }
.wapp-field-label { display: block; margin-bottom: 0.375rem; color: var(--wapp-muted); font-size: 0.75rem; }

.wapp-file {
	max-width: 100%;
	color: var(--wapp-text);
	font: inherit;
	font-size: 0.8125rem;
}

/* ── Stripe Connect ── */

.wapp-stripe-head {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 0.5rem;
	margin-bottom: 0.875rem;
}

.wapp-stripe-head .wapp-btn { margin-inline-start: auto; }

.wapp-stripe-line { margin: 0 0 0.5rem; color: var(--wapp-muted); font-size: 0.8125rem; }
.wapp-stripe-line strong { color: var(--wapp-heading); }

.wapp-code {
	padding: 0.0625rem 0.375rem;
	border-radius: var(--wapp-radius);
	background: var(--wapp-raised);
	color: var(--wapp-text);
	font-size: 0.75rem;
	overflow-wrap: anywhere;
}

/* ══════════════════════════════════════════════════════════════════
 * FAZA 2 — Email, Sandbox, Ghid de pornire
 * ════════════════════════════════════════════════════════════════ */

/* ── Email & Comunicare ── */

.wapp-email-head {
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
	gap: 0.75rem;
	flex-wrap: wrap;
	margin-bottom: 0.875rem;
}

.wapp-email-head .wapp-card-title { margin-bottom: 0.25rem; }

.wapp-email-input {
	width: 100%;
	margin-top: 0.25rem;
	padding: 0.625rem 0.75rem;
	background: var(--wapp-raised);
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
	color: var(--wapp-text);
	font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
	font-size: 0.8125rem;
	line-height: 1.6;
	resize: vertical;
}

.wapp-email-actions {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.5rem;
	margin-top: 0.75rem;
}

/* Emailul e HTML străin, cu stilurile lui — îl ținem într-un cadru izolat.
   Înălțimea e în rem, nu în procente din fereastră: pe telefon o valoare
   legată de viewport ar sări la fiecare mișcare a barei de adrese. */
.wapp-email-frame {
	width: 100%;
	height: 30rem;
	margin-bottom: 0.875rem;
	background: #fff;
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
}

/* ── Sandbox ── */

.wapp-sandbox-head {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 0.75rem;
	margin-bottom: 0.75rem;
}

.wapp-sandbox-links {
	display: flex;
	flex-wrap: wrap;
	gap: 0.5rem;
	margin: 0 0 var(--wapp-gap);
}

/* ── Ghid de pornire ── */

.wapp-guide-progress {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 0.75rem;
	margin-bottom: 0.5rem;
}

.wapp-guide-count { color: var(--wapp-muted); font-size: 0.8125rem; }
.wapp-guide-pct   { color: var(--wapp-heading); font-size: 1.125rem; font-weight: 600; font-variant-numeric: tabular-nums; }

.wapp-guide-group-count {
	margin-inline-start: 0.5rem;
	color: var(--wapp-muted);
	font-size: 0.75rem;
	font-weight: 400;
}

.wapp-guide-list {
	display: grid;
	gap: 0.5rem;
	margin: 0 0 var(--wapp-gap);
	padding: 0;
	list-style: none;
}

.wapp-guide-step {
	display: grid;
	grid-template-columns: auto minmax(0, 1fr) auto;
	align-items: start;
	gap: 0.875rem;
	padding: 0.875rem 1rem;
	background: var(--wapp-card);
	border: 1px solid var(--wapp-border);
	border-inline-start: 3px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
}

.wapp-guide-step.is-done { border-inline-start-color: var(--wapp-success); }

/* Bulina de stare: goală cât pasul nu e făcut, plină după. Fără text —
   eticheta „Făcut" stă separat, în dreapta, ca să fie și citită de cititoarele
   de ecran, nu doar văzută. */
.wapp-guide-mark {
	width: 1rem;
	height: 1rem;
	margin-top: 0.15rem;
	border: 2px solid var(--wapp-border);
	border-radius: 50%;
}

.wapp-guide-step.is-done .wapp-guide-mark {
	background: var(--wapp-success);
	border-color: var(--wapp-success);
}

.wapp-guide-title { margin: 0 0 0.25rem; color: var(--wapp-heading); font-size: 0.875rem; font-weight: 600; }
.wapp-guide-desc  { margin: 0; color: var(--wapp-muted); font-size: 0.8125rem; max-width: 68ch; }

.wapp-guide-actions {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 0.5rem;
}

@media (max-width: 45rem) {
	.wapp-guide-step { grid-template-columns: auto minmax(0, 1fr); }
	.wapp-guide-actions { grid-column: 2; }
}

/* ══════════════════════════════════════════════════════════════════
 * PUNTE PENTRU ECRANELE ÎNCĂ NEPORTATE
 *
 * Tabul „Date fiscale" e randat de codul vechi, deliberat: are blocarea
 * adresei, fluxul de aprobare prin admin și validarea VIES, iar o a doua
 * implementare ar fi cea mai sigură cale spre două surse de adevăr care se
 * contrazic.
 *
 * Problema care apare din asta: markup-ul acela vine cu foaia lui de stil,
 * scrisă peste variabilele portalului vechi (`--text`, `--muted`, `--s1`…).
 * Paleta aceea se emite în `render()`, adică pe pagina portalului vechi —
 * pe pagina noastră nu există. O variabilă nedefinită face declarația
 * invalidă, deci textul își pierde culoarea intenționată, fundalurile
 * câmpurilor dispar, iar bordurile cad pe culoarea textului.
 *
 * Aici îi dăm exact variabilele pe care le așteaptă, traduse în tokenii
 * noștri. Rezultat: ecranul împrumutat respectă tema activă, în ambele
 * variante, fără să atingem codul vechi. Puntea dispare când ecranul se
 * portează cu adevărat.
 * ════════════════════════════════════════════════════════════════ */

.wapp-legacy {
	--s1:      var(--wapp-card);
	--s2:      var(--wapp-raised);
	--s3:      var(--wapp-raised);
	--border:  var(--wapp-border);
	--text:    var(--wapp-heading);
	--muted:   var(--wapp-muted);
	--accent:  var(--wapp-accent);
	--accent2: var(--wapp-success);
	--info:    var(--wapp-info);
	--warn:    var(--wapp-warning);
	--danger:  #f06548;
	--r:       var(--wapp-radius);
}

/* Cardurile proprii ale ecranului vechi stau într-un card de-al nostru.
   Cu fundal identic nu se vede o ramă în ramă, doar spațiul. */
.wapp-legacy .wmv2-profile-card {
	margin-bottom: var(--wapp-gap);
	max-width: none;
}

.wapp-legacy .wmv2-profile-card:last-child { margin-bottom: 0; }

/* Câmpurile blocate rămân vizibil inactive, dar lizibile: la 55% opacitate
   pe fundal deschis, textul devenea greu de citit. Culoarea stinsă și
   fundalul ridicat spun același lucru, fără să ascundă informația. */
.wapp-legacy :is(input, select, textarea):disabled {
	opacity: 1;
	background: var(--wapp-raised);
	color: var(--wapp-muted);
	-webkit-text-fill-color: var(--wapp-muted);
}

/* ══════════════════════════════════════════════════════════════════
 * FAZA 3 — Suport și API pentru facturare
 * ════════════════════════════════════════════════════════════════ */

/* Bulina de necitite din navigare. */
.wapp-badge {
	margin-inline-start: auto;
	padding: 0.0625rem 0.375rem;
	border-radius: 999px;
	background: #f06548;
	color: #fff;
	font-size: 0.625rem;
	font-weight: 700;
	font-variant-numeric: tabular-nums;
}

/* ── Suport ── */

.wapp-support {
	display: grid;
	/* Lista ține mai mult loc decât firul: acolo se caută, acolo se decide.
	   Firul e o coloană de citit, nu are nevoie de toată lățimea. */
	grid-template-columns: minmax(0, 26rem) minmax(0, 1fr);
	gap: var(--wapp-gap);
	align-items: start;
}

.wapp-support-list {
	display: grid;
	gap: 0.375rem;
	/* FĂRĂ derulare proprie, deliberat.

	   Cât timp lista avea `overflow-y`, meniul conversației era tăiat de ea:
	   un panou poziționat absolut nu poate ieși dintr-un container care taie.
	   Alegerea e între o listă care se derulează singură și un meniu care se
	   vede întreg — al doilea contează mai mult, iar pagina se derulează
	   oricum. */
}

.wapp-support-item {
	display: block;
	padding: 0.625rem 0.75rem;
	background: var(--wapp-card);
	border: 1px solid var(--wapp-border);
	border-inline-start: 3px solid transparent;
	border-radius: var(--wapp-radius);
	color: var(--wapp-text);
	text-decoration: none;
}

.wapp-support-item:hover     { background: var(--wapp-raised); }
.wapp-support-item.is-active { background: var(--wapp-raised); border-inline-start-color: var(--wapp-accent); }

.wapp-support-item-top {
	display: flex;
	align-items: center;
	gap: 0.5rem;
}

.wapp-support-item-title {
	color: var(--wapp-heading);
	font-size: 0.8125rem;
	font-weight: 600;
	overflow-wrap: anywhere;
}

.wapp-support-item-sub {
	display: block;
	margin-top: 0.25rem;
	color: var(--wapp-muted);
	font-size: 0.75rem;
	overflow-wrap: anywhere;
}

.wapp-support-thread {
	background: var(--wapp-card);
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
	min-width: 0;
}

.wapp-support-head {
	padding: 0.875rem 1rem;
	border-bottom: 1px solid var(--wapp-border);
}

.wapp-support-head .wapp-card-title { margin-bottom: 0.25rem; }

.wapp-support-msgs {
	display: grid;
	gap: 0.625rem;
	padding: 1rem;
	max-height: 28rem;
	overflow-y: auto;
}

.wapp-msg { max-width: 80%; }
.wapp-msg.is-mine { margin-inline-start: auto; }

.wapp-msg-body {
	padding: 0.5rem 0.75rem;
	background: var(--wapp-raised);
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
	font-size: 0.8125rem;
	overflow-wrap: anywhere;
}

.wapp-msg.is-mine .wapp-msg-body    { background: rgba(74, 92, 156, 0.18); }
.wapp-msg--admin .wapp-msg-body     { border-color: var(--wapp-success); }
.wo-light .wapp-msg.is-mine .wapp-msg-body { background: rgba(64, 81, 137, 0.1); }

.wapp-msg-body :is(p, ul, ol) { margin: 0 0 0.5rem; }
.wapp-msg-body :is(p, ul, ol):last-child { margin-bottom: 0; }

.wapp-msg-meta { margin-top: 0.25rem; color: var(--wapp-muted); font-size: 0.6875rem; }
.wapp-msg.is-mine .wapp-msg-meta { text-align: end; }

.wapp-support-reply {
	padding: 0.875rem 1rem;
	border-top: 1px solid var(--wapp-border);
}

/* ── API ── */

.wapp-key-card { border-inline-start: 3px solid var(--wapp-border); }
.wapp-key-card--success { border-inline-start-color: var(--wapp-success); }
.wapp-key-card--warning { border-inline-start-color: var(--wapp-warning); }

.wapp-key-head {
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
	gap: 0.75rem;
	flex-wrap: wrap;
	margin-bottom: 0.875rem;
}

.wapp-key-head .wapp-card-title { margin-bottom: 0.25rem; }

.wapp-key-new { border-inline-start: 3px solid var(--wapp-success); }

/* Cheia în clar: se vede o singură dată, deci trebuie să se poată selecta
   întreagă, oricât de lungă ar fi. */
.wapp-key {
	display: block;
	padding: 0.625rem 0.75rem;
	background: var(--wapp-raised);
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
	font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
	font-size: 0.8125rem;
	overflow-wrap: anywhere;
	user-select: all;
}

@media (max-width: 45rem) {
	.wapp-support { grid-template-columns: minmax(0, 1fr); }
	.wapp-support-list { max-height: 16rem; }
	.wapp-msg { max-width: 100%; }
}

/* ══════════════════════════════════════════════════════════════════
 * FAZA 4 — Programul evenimentului
 * ════════════════════════════════════════════════════════════════ */

.wapp-input {
	box-sizing: border-box;
	width: 100%;
	min-height: 2.25rem;
	padding: 0.4rem 0.7rem;
	background: var(--wapp-card);
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
	color: var(--wapp-text);
	font: inherit;
	font-size: 0.8125rem;
}

.wapp-color {
	width: 2.75rem;
	min-height: 2.25rem;
	padding: 0.125rem;
	background: var(--wapp-card);
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
}

/* Buton care arată ca un link — pentru ștergeri, unde un buton plin ar
   striga mai tare decât merită. */
.wapp-linkbtn {
	padding: 0;
	background: none;
	border: 0;
	color: var(--wapp-muted);
	font: inherit;
	font-size: 0.75rem;
	text-decoration: underline;
	cursor: pointer;
}

.wapp-linkbtn:hover { color: var(--wapp-heading); }

/* ── Publicare ── */

.wapp-sched-publish {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 0.875rem;
	flex-wrap: wrap;
}

.wapp-sched-publish-info    { display: flex; align-items: center; gap: 0.625rem; flex-wrap: wrap; }
.wapp-sched-publish-actions { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; }

.wapp-sched-warnings { margin: 0.5rem 0 0; padding-inline-start: 1.125rem; }

/* ── Zile, categorii, săli ── */

.wapp-sched-terms {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 17rem), 1fr));
	gap: var(--wapp-gap);
}

.wapp-sched-termlist { margin: 0 0 0.875rem; padding: 0; list-style: none; display: grid; gap: 0.25rem; }

.wapp-sched-term {
	display: flex;
	align-items: center;
	gap: 0.5rem;
	padding: 0.375rem 0.5rem;
	background: var(--wapp-raised);
	border-radius: var(--wapp-radius);
	font-size: 0.8125rem;
}

.wapp-sched-term-name { flex: 1; min-width: 0; overflow-wrap: anywhere; }
.wapp-sched-term-name .wapp-td-quiet { margin-inline-start: 0.375rem; font-size: 0.75rem; }

.wapp-sched-dot { width: 0.625rem; height: 0.625rem; border-radius: 50%; flex-shrink: 0; }

.wapp-sched-termform { display: grid; gap: 0.5rem; grid-template-columns: 1fr auto; align-items: center; }
.wapp-sched-termform .wapp-input { grid-column: 1 / -1; }
.wapp-sched-termform .wapp-select { grid-column: 1 / -1; }
.wapp-sched-termform .wapp-btn { grid-column: 2; }
.wapp-sched-termform .wapp-color { grid-column: 1; justify-self: start; }

/* ── Grila ── */

.wapp-grid-scroll { overflow-x: auto; padding: 0 1rem 1rem; }

.wapp-grid-head,
.wapp-grid-body {
	display: grid;
	grid-template-columns: 3.5rem repeat(var(--wapp-cols), minmax(9rem, 1fr));
	gap: 0.25rem;
	min-width: 100%;
}

.wapp-grid-head { margin-bottom: 0.25rem; }

.wapp-grid-room {
	padding: 0.375rem 0.5rem;
	background: var(--wapp-raised);
	border-radius: var(--wapp-radius);
	color: var(--wapp-muted);
	font-size: 0.6875rem;
	font-weight: 600;
	letter-spacing: 0.03em;
	text-transform: uppercase;
	text-align: center;
	overflow-wrap: anywhere;
}

/* Înălțimea grilei e în rem, nu legată de fereastră: 18 ore × 2rem. O valoare
   în vh ar sări pe telefon la fiecare mișcare a barei de adrese. */
.wapp-grid-body { position: relative; height: 36rem; }

.wapp-grid-hours { position: relative; }

.wapp-grid-hour {
	position: absolute;
	inset-inline-end: 0.375rem;
	transform: translateY(-50%);
	color: var(--wapp-muted);
	font-size: 0.6875rem;
	font-variant-numeric: tabular-nums;
}

.wapp-grid-col {
	position: relative;
	background: var(--wapp-card);
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
	overflow: hidden;
}

.wapp-grid-line {
	position: absolute;
	inset-inline: 0;
	height: 1px;
	background: var(--wapp-border);
	opacity: 0.6;
}

.wapp-block {
	position: absolute;
	inset-inline: 0.1875rem;
	min-height: 1.5rem;
	padding: 0.25rem 0.4rem;
	background: var(--wapp-block, var(--wapp-accent));
	border-radius: var(--wapp-radius);
	/* Culoarea textului o calculează PHP din luminanța fundalului și o trimite
	   ca variabilă. Alb fix era ilizibil pe galben, roz sau verde deschis. */
	color: var(--wapp-block-ink, #fff);
	font-size: 0.6875rem;
	line-height: 1.3;
	text-decoration: none;
	overflow: hidden;
	cursor: grab;
	touch-action: none;
}

.wapp-block.is-break  { background: var(--wapp-raised); color: var(--wapp-muted); }
.wapp-block.is-dragging { cursor: grabbing; opacity: 0.85; z-index: 5; }
.wapp-block.is-saving  { opacity: 0.6; }

.wapp-block-time  { display: block; font-variant-numeric: tabular-nums; opacity: 0.85; }
.wapp-block-title { display: block; font-weight: 600; overflow-wrap: anywhere; }
.wapp-block-sub   { display: block; opacity: 0.85; overflow-wrap: anywhere; }

/* Like-urile publicului, în colțul cardului. Fundalul semi-transparent
   funcționează și pe culori deschise, și pe închise, fiindcă ia culoarea
   textului deja calculată. */
.wapp-block-likes {
	position: absolute;
	inset-block-end: 0.1875rem;
	inset-inline-end: 0.3125rem;
	padding: 0 0.25rem;
	border-radius: 999px;
	background: color-mix(in srgb, var(--wapp-block-ink, #fff) 16%, transparent);
	font-size: 0.625rem;
	font-weight: 600;
	font-variant-numeric: tabular-nums;
	line-height: 1.5;
}

.wapp-grid-hint { margin: 0; padding: 0 1rem 1rem; color: var(--wapp-muted); font-size: 0.75rem; }

/* ── Formularul de sesiune ── */

.wapp-sched-form-row {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 9rem), 1fr));
	gap: 0.75rem;
}

.wapp-sched-form fieldset { margin: 0.875rem 0; padding: 0; border: 0; }
.wapp-sched-form legend   { padding: 0; }

.wapp-sched-rooms { display: flex; flex-wrap: wrap; gap: 0.75rem; }

.wapp-sched-delete { margin-top: 0.75rem; padding-top: 0.75rem; border-top: 1px solid var(--wapp-border); }

@media (max-width: 45rem) {
	.wapp-sched-publish { flex-direction: column; align-items: flex-start; }
	.wapp-grid-body { height: 30rem; }
}

/* Coloana peste care se mută un bloc — semn că sala se schimbă la eliberare. */
.wapp-grid-col.is-target { box-shadow: inset 0 0 0 2px var(--wapp-accent); }

/* ── Imagine pentru social media ── */
.wapp-social-controls { display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center; margin-bottom: 0.875rem; }
.wapp-social-controls .wapp-select { flex: 0 1 16rem; }

.wapp-social-frame {
	padding: 0.875rem;
	margin-bottom: 0.875rem;
	background: var(--wapp-raised);
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
	text-align: center;
}

/* Pânza se scalează la lățimea cardului; rezoluția reală rămâne cea aleasă. */
/* Previzualizarea e o previzualizare: pânza are 1080 px, dar în pagină nu are
   de ce să ocupe atât. Descărcarea rămâne la rezoluția întreagă. */
.wapp-social-frame canvas {
	max-width: min(100%, 30rem);
	height: auto;
	border-radius: var(--wapp-radius);
}

/* ── Contabilitate: acțiuni și detaliul biletului ── */
.wapp-acctg-actions { display: flex; gap: 0.5rem; flex-wrap: wrap; }

/* Perechea oră–minut: 24 de ore, indiferent de limba browserului. */
.wapp-timepair { display: flex; gap: 0.375rem; }
.wapp-timepair .wapp-select { flex: 1 1 4rem; min-width: 0; }

/* ══════════════════════════════════════════════════════════════════
   Contabilitate — tabel, chip-uri de identificator, defalcare, sertar
   ══════════════════════════════════════════════════════════════════ */

/* Coloana de acțiuni: îngustă, ultima, lipită de marginea din dreapta.
   În portalul vechi lupa avea coloana ei; amestecată printre cifre,
   împingea capetele de tabel și rândurile arătau decalate. */
.wapp-col-actions {
	width: 1%;
	white-space: nowrap;
	text-align: right;
}

.wapp-sr {
	position: absolute;
	width: 1px; height: 1px;
	padding: 0; margin: -1px;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
}

.wapp-iconbtn {
	background: transparent;
	border: 1px solid var(--wapp-border);
	border-radius: 6px;
	color: var(--wapp-text);
	cursor: pointer;
	font-size: 0.75rem;
	line-height: 1.4;
	padding: 0.125rem 0.4375rem;
}
.wapp-iconbtn:hover { border-color: var(--wapp-accent); }

.wapp-expand-caret { color: var(--wapp-muted); font-size: 0.6875rem; margin-inline-start: 0.25rem; }

.wapp-row-expandable { cursor: pointer; }
.wapp-row-expandable:hover { background: var(--wapp-hover, rgba(128, 128, 128, 0.06)); }
.wapp-row-expandable.is-open .wapp-expand-caret { transform: rotate(180deg); display: inline-block; }

.wapp-row-detail > td { padding: 0; background: var(--wapp-hover, rgba(128, 128, 128, 0.05)); }

/* Culorile coloanelor, ca în tabelul vechi: fiecare sumă are rolul ei. */
.wapp-td-gross  { color: var(--wapp-success); }
.wapp-td-comm   { color: #e879f9; }
.wapp-td-fee    { color: #60a5fa; }
.wapp-td-vat    { color: var(--wapp-warning); }

/* Chip de identificator — echivalentul temat al chip-ului comun. */
.wapp-idchip {
	display: inline-flex;
	align-items: center;
	gap: 0.25rem;
	background: var(--wapp-card);
	border: 1px solid var(--wapp-border);
	border-radius: 6px;
	padding: 0.0625rem 0.4375rem;
	font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
	font-size: 0.6875rem;
	line-height: 1.7;
	white-space: nowrap;
	vertical-align: middle;
}
.wapp-idchip-label { color: var(--wapp-muted); }
.wapp-idchip-empty { color: var(--wapp-muted); font-size: 0.6875rem; }
.wapp-idchip-copy {
	border: 0;
	background: transparent;
	cursor: pointer;
	padding: 0 0 0 0.125rem;
	font-size: 0.6875rem;
	color: var(--wapp-muted);
	line-height: 1;
}
.wapp-idchip-copy:hover { color: var(--wapp-text); }
.wapp-idchip-copy.is-copied { color: var(--wapp-success); }

/* Defalcarea rândului. */
.wapp-breakdown { padding: 0.875rem 1rem; display: grid; gap: 0.125rem; }
.wapp-breakdown-line {
	display: flex;
	justify-content: space-between;
	gap: 0.75rem;
	padding: 0.375rem 0;
	border-bottom: 1px solid var(--wapp-border);
	font-size: 0.8125rem;
}
.wapp-breakdown-line:last-child { border-bottom: 0; }
.wapp-breakdown-line > span { color: var(--wapp-muted); }
.wapp-breakdown-total > span,
.wapp-breakdown-total > strong { font-size: 0.875rem; }
.wapp-breakdown-total > strong { color: var(--wapp-success); }
.wapp-breakdown-link { margin: 0.5rem 0 0.25rem; font-size: 0.75rem; }

/* ── Sertarul de detalii ── */
.wapp-drawer-overlay {
	position: fixed;
	inset: 0;
	background: rgba(0, 0, 0, 0.5);
	z-index: 60;
}

.wapp-drawer {
	position: fixed;
	inset-block: 0;
	inset-inline-end: 0;
	width: min(26rem, 100%);
	max-width: 100%;
	background: var(--wapp-card);
	border-inline-start: 1px solid var(--wapp-border);
	box-shadow: -8px 0 32px rgba(0, 0, 0, 0.28);
	display: flex;
	flex-direction: column;
	z-index: 61;
}

.wapp-drawer-head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 0.75rem;
	padding: 1rem 1.25rem;
	border-bottom: 1px solid var(--wapp-border);
}
.wapp-drawer-title { font-size: 0.9375rem; }
.wapp-drawer-close {
	background: transparent;
	border: 0;
	color: var(--wapp-muted);
	cursor: pointer;
	font-size: 1.125rem;
	line-height: 1;
}
.wapp-drawer-close:hover { color: var(--wapp-text); }

.wapp-drawer-body { padding: 1rem 1.25rem; overflow-y: auto; flex: 1 1 auto; }
.wapp-drawer-state { color: var(--wapp-muted); font-size: 0.8125rem; }
.wapp-drawer-ref { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0.9375rem; font-weight: 700; margin: 0 0 0.875rem; }

.wapp-drawer-row {
	display: flex;
	justify-content: space-between;
	gap: 0.75rem;
	padding: 0.5rem 0;
	border-bottom: 1px solid var(--wapp-border);
}
.wapp-drawer-label { color: var(--wapp-muted); font-size: 0.75rem; }
.wapp-drawer-val { font-weight: 600; font-size: 0.8125rem; text-align: end; overflow-wrap: anywhere; }

.wapp-drawer-group {
	margin: 0.875rem 0 0.25rem;
	font-size: 0.6875rem;
	text-transform: uppercase;
	letter-spacing: 0.05em;
	color: var(--wapp-muted);
	font-weight: 600;
}

body.wapp-drawer-open { overflow: hidden; }

/* Rearanjarea listelor de zile / categorii / săli. */
.wapp-sched-handle {
	color: var(--wapp-muted);
	cursor: grab;
	font-size: 0.75rem;
	letter-spacing: -0.15em;
	user-select: none;
}
.wapp-sched-term[draggable="true"] { cursor: default; }
.wapp-sched-term.is-dragging { opacity: 0.45; }
.wapp-sched-term.is-drop-target { outline: 2px dashed var(--wapp-accent); outline-offset: -2px; }
.wapp-sched-termlist.is-saving { opacity: 0.6; pointer-events: none; }
.wapp-sched-termlist.is-save-failed { outline: 1px solid var(--wapp-danger, #f06548); }

/* Ținta pentru o sesiune trasă din lista celor nealocate. */
.wapp-grid-col.is-drop-failed { outline: 1px solid var(--wapp-danger, #f06548); }

/* ══════════════════════════════════════════════════════════════════
   `hidden` trebuie să bată orice `display` al nostru

   Foaia browserului spune `[hidden] { display: none }`, dar regula lui
   are specificitate zero pe atribut, iar un simplu `.wapp-drawer {
   display: flex }` o învinge. Rezultatul: elementul rămâne pe ecran cu
   `hidden` pus, iar butonul de închidere pare că nu face nimic — el
   chiar pune `hidden`, doar că nu se vede.

   Regula asta se aplică peste tot în portal, o dată, ca să nu se mai
   repete la fiecare component nou.
   ══════════════════════════════════════════════════════════════════ */
.wapp [hidden],
[hidden].wapp-drawer,
[hidden].wapp-drawer-overlay,
[hidden].wapp-drawer-row,
[hidden].wapp-drawer-group,
[hidden].wapp-row-detail { display: none !important; }

/* ══════════════════════════════════════════════════════════════════
   Fereastra de acțiune (schimbarea titularului)

   Randată de PHP, deschisă prin adresă. Nu are nevoie de JavaScript ca să
   apară — de aceea nu e `hidden`: dacă e în pagină, se vede.

   Ce face pentru cine se uită: scoate acțiunea din pagină. Aceleași câmpuri,
   puse într-un card printre celelalte, treceau neobservate.
   ══════════════════════════════════════════════════════════════════ */
.wapp-modal-overlay {
	position: fixed;
	inset: 0;
	/* Peste tot ce există în portal: sertarul de detalii stă la 60, meniul
	   lateral de pe telefon tot pe acolo. O fereastră de acțiune nu are ce
	   căuta sub ele. */
	z-index: 70;
	background: rgba(0, 0, 0, .55);
}

.wapp-modal-wrap {
	position: fixed;
	inset: 0;
	z-index: 71;
	display: flex;
	align-items: flex-start;
	justify-content: center;
	padding: 2rem 1rem;
	overflow-y: auto;
}

.wapp-modal {
	width: 100%;
	max-width: 32rem;
	margin: auto;
	background: var(--wapp-card, #fff);
	border: 1px solid var(--wapp-border);
	border-radius: 0.75rem;
	box-shadow: 0 1.5rem 3rem rgba(0, 0, 0, .45);
}

.wapp-modal-head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
	padding: 1rem 1.25rem;
	border-bottom: 1px solid var(--wapp-border);
}

.wapp-modal-title { margin: 0; font-size: 1rem; color: var(--wapp-heading); }

.wapp-modal-close {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 1.875rem;
	height: 1.875rem;
	flex: none;
	border-radius: 50%;
	color: var(--wapp-muted);
	text-decoration: none;
	font-size: 0.875rem;
}
.wapp-modal-close:hover { background: var(--wapp-surface-2, rgba(0,0,0,.05)); color: var(--wapp-heading); }

.wapp-modal-body { padding: 1.25rem; }
.wapp-modal-body > :first-child { margin-block-start: 0; }

/* Cât e fereastra deschisă, pagina de dedesubt nu se mai derulează. */
body.wapp-modal-open { overflow: hidden; }

@media (max-width: 30rem) {
	.wapp-modal-wrap { padding: 0.75rem; }
	.wapp-modal-body { padding: 1rem; }
}

/* ══════════════════════════════════════════════════════════════════
   Meniul de pe rândul unui bilet — cele trei puncte

   Se deschide spre STÂNGA (`right: 0`), fiindcă stă în ultima coloană a
   tabelului: spre dreapta n-ar avea unde. Celula are `overflow: visible`
   ca panoul să poată ieși din ea.
   ══════════════════════════════════════════════════════════════════ */
.wapp-menu { position: relative; display: inline-block; }
.wapp-menu-toggle { line-height: 1; font-size: 1.125rem; }
.wapp-menu.is-open .wapp-menu-toggle { background: var(--wapp-surface-2, rgba(0,0,0,.05)); }

.wapp-menu-pop {
	position: absolute;
	top: calc(100% + 0.25rem);
	right: 0;
	z-index: 30;
	min-width: 13rem;
	padding: 0.25rem;
	text-align: start;
	background: var(--wapp-card, #fff);
	border: 1px solid var(--wapp-border);
	border-radius: 0.5rem;
	box-shadow: 0 8px 24px rgba(0, 0, 0, .14);
}
.wapp-menu-pop form { margin: 0; }

.wapp-menu-item {
	display: flex;
	align-items: center;
	gap: 0.5rem;
	width: 100%;
	padding: 0.5rem 0.625rem;
	border: 0;
	border-radius: 0.375rem;
	background: none;
	color: var(--wapp-text);
	font: inherit;
	font-size: 0.8125rem;
	text-align: start;
	text-decoration: none;
	cursor: pointer;
	white-space: nowrap;
}
.wapp-menu-item:hover,
.wapp-menu-item:focus-visible { background: var(--wapp-surface-2, rgba(0,0,0,.05)); color: var(--wapp-text); }
.wapp-menu-ic { flex: none; width: 1.125rem; text-align: center; opacity: .75; }
/* Ștergerea nu arată ca celelalte: e singura care nu se poate întoarce. */
.wapp-menu-item--danger { color: var(--wapp-danger); }
.wapp-menu-item--danger:hover, .wapp-menu-item--danger:focus-visible { color: var(--wapp-danger); }

/* Celula de acțiuni nu mai taie panoul deschis. */
.wapp-table td.wapp-col-actions { overflow: visible; }

/* Ancorele: cu un antet lipit sus, saltul ar ascunde primul rând. */
#wapp-top, #wapp-type-form, #wapp-issued { scroll-margin-top: 1rem; }

/* Un bloc a cărui mutare nu s-a salvat — se vede, nu se pierde în tăcere. */
.wapp-block.is-save-failed { outline: 2px solid var(--wapp-danger, #f06548); outline-offset: -2px; }

/* ══════════════════════════════════════════════════════════════════
   Butonul de ștergere

   Ștergerea era un text mic, gri, lângă „Edit" — arăta ca orice altă
   legătură, deși e singura acțiune din ecran care nu se poate anula.
   Acum are formă de buton, contur roșu și o pictogramă de coș, iar la
   trecerea cu mouse-ul se umple: se vede de la distanță ce face.

   Rămâne discret cât timp nu-l atingi, ca să nu domine listele.
   ══════════════════════════════════════════════════════════════════ */
.wapp-btn-del {
	display: inline-flex;
	align-items: center;
	gap: 0.3125rem;
	padding: 0.25rem 0.5625rem;
	background: transparent;
	border: 1px solid color-mix(in srgb, var(--wapp-danger) 45%, transparent);
	border-radius: var(--wapp-radius);
	color: var(--wapp-danger);
	font: inherit;
	font-size: 0.75rem;
	font-weight: 600;
	line-height: 1.4;
	cursor: pointer;
	white-space: nowrap;
	transition: background-color 0.12s ease, border-color 0.12s ease, color 0.12s ease;
}

.wapp-btn-del:hover,
.wapp-btn-del:focus-visible {
	background: var(--wapp-danger);
	border-color: var(--wapp-danger);
	color: #fff;
}

.wapp-btn-del-icon {
	width: 0.875rem;
	height: 0.875rem;
	flex: none;
	fill: none;
	stroke: currentColor;
	stroke-width: 1.75;
	stroke-linecap: round;
	stroke-linejoin: round;
}

/* Varianta plină, pentru ștergerea unei sesiuni întregi din formular:
   acolo e o acțiune principală, nu una dintr-o listă. */
.wapp-btn-del--solid {
	background: var(--wapp-danger);
	border-color: var(--wapp-danger);
	color: #fff;
	padding: 0.4375rem 0.875rem;
	font-size: 0.8125rem;
}
.wapp-btn-del--solid:hover,
.wapp-btn-del--solid:focus-visible {
	background: color-mix(in srgb, var(--wapp-danger) 82%, #000);
	border-color: color-mix(in srgb, var(--wapp-danger) 82%, #000);
}

/* Doar pictograma — pentru rândurile foarte înguste. */
.wapp-btn-del--icon { padding: 0.25rem 0.375rem; }

/* ══════════════════════════════════════════════════════════════════
   Taburi de ecran

   Sunt legături, nu butoane: fiecare tab are adresa lui, deci se poate
   salva la favorite și se deschide într-o filă nouă. Un tab construit
   din JavaScript n-ar avea niciuna din cele două.
   ══════════════════════════════════════════════════════════════════ */
.wapp-tabs {
	display: flex;
	gap: 0.25rem;
	margin-block-end: var(--wapp-gap);
	border-bottom: 1px solid var(--wapp-border);
}

.wapp-tab {
	padding: 0.5rem 0.875rem;
	border: 0;
	border-bottom: 2px solid transparent;
	background: transparent;
	color: var(--wapp-muted);
	font-size: 0.8125rem;
	font-weight: 600;
	text-decoration: none;
	white-space: nowrap;
	margin-block-end: -1px;
}

.wapp-tab:hover { color: var(--wapp-heading); }

.wapp-tab.is-active {
	color: var(--wapp-heading);
	border-bottom-color: var(--wapp-accent);
}

/* Selectorul de zi din Social tools — stă deasupra formatului, nu lângă el. */
.wapp-social-day { margin-block-end: 0.75rem; }

/* ══════════════════════════════════════════════════════════════════
   Suport — filtre, selecție multiplă, meniul conversației
   ══════════════════════════════════════════════════════════════════ */

.wapp-filters {
	display: flex;
	flex-wrap: wrap;
	gap: 0.375rem;
	margin-block: 1.25rem 1rem;
}

.wapp-filter-btn {
	display: inline-flex;
	align-items: center;
	gap: 0.4375rem;
	padding: 0.375rem 0.8125rem;
	border: 1px solid var(--wapp-border);
	border-radius: 999px;
	background: transparent;
	color: var(--wapp-muted);
	font-size: 0.75rem;
	font-weight: 600;
	text-decoration: none;
	white-space: nowrap;
}
.wapp-filter-btn:hover { color: var(--wapp-heading); border-color: var(--wapp-accent); }
.wapp-filter-btn.is-active {
	background: var(--wapp-accent);
	border-color: var(--wapp-accent);
	color: #fff;
}

.wapp-filter-count {
	padding: 0 0.375rem;
	border-radius: 999px;
	background: color-mix(in srgb, currentColor 18%, transparent);
	font-size: 0.6875rem;
	font-variant-numeric: tabular-nums;
}

/* ── Bara de acțiuni ── */
.wapp-support-bulk {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.625rem;
	margin-block-end: 0.875rem;
}

.wapp-support-selectbar {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.75rem;
	padding: 0.5rem 0.75rem;
	background: var(--wapp-raised);
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
}

.wapp-support-selectbar-sep {
	width: 1px;
	align-self: stretch;
	background: var(--wapp-border);
}

.wapp-support-selectall,
.wapp-support-selectaction {
	display: inline-flex;
	align-items: center;
	gap: 0.4375rem;
	font-size: 0.75rem;
	color: var(--wapp-text);
	white-space: nowrap;
}

/* ── Rândul de conversație ──
   GRILĂ cu trei coloane fixe, nu flex cu întoarcere de rând: bifa, textul și
   butonul de meniu rămân pe aceeași linie oricât de lung ar fi titlul. Cu
   `flex-wrap`, un titlu lung arunca bifa pe rândul de deasupra. */
.wapp-support-row {
	position: relative;
	display: grid;
	grid-template-columns: auto minmax(0, 1fr) auto;
	align-items: center;
	gap: 0.375rem;
}

.wapp-support-row .wapp-support-item {
	grid-column: 2;
	min-width: 0;
}

.wapp-support-pick {
	grid-column: 1;
	display: flex;
	align-items: center;
	padding-inline-start: 0.125rem;
}

/* Când selecția e închisă, bifa nu ocupă loc — textul pornește din margine. */
.wapp-support-pick[hidden] { display: none; }

/* ── Meniul: panou scurt, chiar sub cele trei puncte ── */
.wapp-support-menu {
	grid-column: 3;
	position: relative;
	align-self: center;
}

.wapp-support-menu-btn {
	list-style: none;
	cursor: pointer;
	padding: 0.25rem 0.5rem;
	border-radius: var(--wapp-radius);
	color: var(--wapp-muted);
	font-size: 1rem;
	line-height: 1.4;
	user-select: none;
}
.wapp-support-menu-btn::-webkit-details-marker { display: none; }
.wapp-support-menu-btn::marker { content: ''; }
.wapp-support-menu-btn:hover { color: var(--wapp-heading); background: var(--wapp-raised); }
.wapp-support-menu[open] .wapp-support-menu-btn {
	color: var(--wapp-heading);
	background: var(--wapp-raised);
}

.wapp-support-menu-list {
	position: absolute;
	inset-block-start: calc(100% + 0.25rem);
	inset-inline-end: 0;
	z-index: 30;
	display: flex;
	flex-direction: column;
	min-width: 11rem;
	padding: 0.25rem;
	background: var(--wapp-card);
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
	box-shadow: 0 8px 24px rgba(0, 0, 0, 0.28);
}

.wapp-support-menu-item {
	box-sizing: border-box;
	width: 100%;
	padding: 0.4375rem 0.625rem;
	border: 0;
	border-radius: var(--wapp-radius);
	background: transparent;
	color: var(--wapp-text);
	font: inherit;
	font-size: 0.8125rem;
	text-align: start;
	white-space: nowrap;
	cursor: pointer;
}
.wapp-support-menu-item:hover { background: var(--wapp-raised); }

/* ══════════════════════════════════════════════════════════════════
   Programul pe pagina publică de eveniment

   Grila e TABEL, nu poziționare absolută: pe pagina publică nu știm
   înălțimea disponibilă, iar un tabel se pliază onest pe telefon.
   ══════════════════════════════════════════════════════════════════ */

.wev-day + .wev-day { margin-block-start: 1.5rem; }

.wev-day-name {
	margin: 0 0 0.625rem;
	font-size: 0.9375rem;
	display: flex;
	align-items: baseline;
	gap: 0.5rem;
}

/* Derulare pe orizontală doar dacă sălile chiar nu încap. */
.wev-grid-wrap { overflow-x: auto; }

.wev-grid {
	width: 100%;
	border-collapse: collapse;
	font-size: 0.8125rem;
}

.wev-grid th,
.wev-grid td {
	padding: 0.375rem;
	border: 1px solid var(--wapp-border);
	vertical-align: top;
	text-align: start;
}

.wev-grid thead th {
	background: var(--wapp-raised);
	font-size: 0.6875rem;
	text-transform: uppercase;
	letter-spacing: 0.03em;
	color: var(--wapp-muted);
}

.wev-grid-time {
	white-space: nowrap;
	font-variant-numeric: tabular-nums;
	color: var(--wapp-muted);
}

.wev-slot-card {
	display: flex;
	flex-direction: column;
	gap: 0.125rem;
	padding: 0.375rem 0.5rem;
	border-radius: var(--wapp-radius);
	background: var(--wev-color, var(--wapp-accent));
	color: var(--wev-ink, #fff);
	line-height: 1.35;
}
.wev-slot-card span { opacity: 0.85; font-size: 0.75rem; }
.wev-slot-card.is-break { background: var(--wapp-raised); color: var(--wapp-muted); }

/* ── Rezumatul pe zile ── */
.wev-slots { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.375rem; }

.wev-slot {
	display: grid;
	grid-template-columns: auto minmax(0, 1fr);
	gap: 0.75rem;
	padding: 0.5rem 0.625rem;
	border-inline-start: 3px solid var(--wev-color, var(--wapp-accent));
	background: var(--wapp-raised);
	border-radius: var(--wapp-radius);
}
.wev-slot.is-break { opacity: 0.7; }
.wev-slot time { font-variant-numeric: tabular-nums; font-size: 0.8125rem; color: var(--wapp-muted); white-space: nowrap; }
.wev-slot b { display: block; font-size: 0.875rem; }
.wev-slot span { display: block; font-size: 0.75rem; }

/* ── Comutatorul din Planner ── */
.wapp-sched-layout-opts {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr));
	gap: 0.625rem;
	margin-block: 0.75rem;
}

.wapp-sched-layout-opt {
	display: grid;
	grid-template-columns: auto minmax(0, 1fr);
	grid-template-areas: 'radio name' 'radio note';
	gap: 0 0.5rem;
	padding: 0.75rem;
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
	cursor: pointer;
}
.wapp-sched-layout-opt input { grid-area: radio; align-self: start; margin-block-start: 0.1875rem; }
.wapp-sched-layout-opt.is-active { border-color: var(--wapp-accent); background: var(--wapp-raised); }

.wapp-sched-layout-name { grid-area: name; font-weight: 600; font-size: 0.8125rem; }
.wapp-sched-layout-note { grid-area: note; color: var(--wapp-muted); font-size: 0.75rem; line-height: 1.4; }

/* ══════════════════════════════════════════════════════════════════
   Evenimente & Bilete

   Carduri, nu tabel: un eveniment are afiș, dată, loc și trei cifre —
   într-un rând de tabel ar fi ilizibil, iar afișul n-ar avea unde sta.
   Grila se rearanjează singură, fără lățimi în px și fără breakpoint nou.
   ══════════════════════════════════════════════════════════════════ */

/* Marcaj de ecran, ca la celelalte: dă un punct de agățare pentru reguli
   care privesc doar Evenimentele, fără să schimbe nimic singur. */
.wapp-events { display: block; }

.wapp-event-grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(17rem, 1fr));
	gap: var(--wapp-gap);
}

.wapp-event-card {
	display: flex;
	flex-direction: column;
	background: var(--wapp-card);
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
	overflow: hidden;
}

/* Ciorna se vede de la distanță, fără să strige. */
.wapp-event-card.is-draft { border-style: dashed; }

.wapp-event-poster {
	display: block;
	aspect-ratio: 16 / 9;
	background-size: cover;
	background-position: center;
	background-color: var(--wapp-raised);
}

.wapp-event-body {
	display: flex;
	flex-direction: column;
	gap: 0.5rem;
	padding: 0.875rem;
}

.wapp-event-name {
	margin: 0;
	font-size: 0.9375rem;
	display: flex;
	align-items: center;
	gap: 0.5rem;
	flex-wrap: wrap;
}
.wapp-event-name a { color: var(--wapp-heading); text-decoration: none; }
.wapp-event-name a:hover { text-decoration: underline; }

.wapp-event-meta { margin: 0; color: var(--wapp-muted); font-size: 0.75rem; }

.wapp-event-stats {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 0.5rem;
	margin: 0;
}
.wapp-event-stats dt { color: var(--wapp-muted); font-size: 0.6875rem; }
.wapp-event-stats dd { margin: 0; font-size: 1rem; font-weight: 600; font-variant-numeric: tabular-nums; }

.wapp-event-revenue { display: flex; flex-wrap: wrap; gap: 0.25rem; margin: 0; }

.wapp-event-detail { border-inline-start: 3px solid var(--wapp-accent); }

/* Indicatorii din detaliu: aceiași ca în restul portalului, dar mai strânși —
   sunt patru cifre despre un singur eveniment, nu un raport. */
.wapp-kpis--compact {
	grid-template-columns: repeat(auto-fit, minmax(8rem, 1fr));
	margin-block: 0.75rem;
}

.wapp-ticket-head {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 0.75rem;
}

.wapp-card-title--inset { padding: 0.875rem 0.875rem 0; }

/* Formularul de eveniment. */
.wapp-event-form { border-inline-start: 3px solid var(--wapp-accent); }

.wapp-form-group {
	margin: 1.25rem 0 0.625rem;
	font-size: 0.6875rem;
	text-transform: uppercase;
	letter-spacing: 0.05em;
	color: var(--wapp-muted);
	font-weight: 600;
}
.wapp-form-group:first-of-type { margin-block-start: 0.5rem; }

.wapp-tax-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr));
	gap: 0.75rem;
}
.wapp-tax-grid select[multiple] { min-height: 5.5rem; }

/* Harta: raport fix, ca să nu sară aspectul când se încarcă dalele.
   Fără `vh` — înălțimea vine din lățime, ca peste tot în portal. */
.wapp-map {
	aspect-ratio: 16 / 7;
	width: 100%;
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
	overflow: hidden;
}
.wapp-map-wrap { margin-block: 0.75rem; }

.wapp-event-delete { margin-block-start: 1rem; }
.wapp-event-actions { margin: 0; }

/* Formularul de tip de bilet și calculatorul lui. */
.wapp-type-form { border-inline-start: 3px solid var(--wapp-success); }

.wapp-check {
	display: flex;
	align-items: flex-start;
	gap: 0.4375rem;
	font-size: 0.75rem;
	color: var(--wapp-text);
	line-height: 1.4;
}
.wapp-check input { margin-block-start: 0.125rem; flex: none; }

.wapp-calc {
	margin-block-start: 1rem;
	padding: 0.875rem;
	background: var(--wapp-raised);
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
}
.wapp-calc .wapp-form-group { margin-block-start: 0; }

.wapp-calc-rows { margin: 0.5rem 0 0; display: grid; gap: 0.125rem; }
.wapp-calc-rows > div {
	display: flex;
	justify-content: space-between;
	gap: 0.75rem;
	padding: 0.375rem 0;
	border-bottom: 1px solid var(--wapp-border);
	font-size: 0.8125rem;
}
.wapp-calc-rows > div:last-child { border-bottom: 0; }
.wapp-calc-rows dt { color: var(--wapp-muted); margin: 0; }
.wapp-calc-rows dd { margin: 0; font-weight: 600; font-variant-numeric: tabular-nums; }
.wapp-calc-total dd { color: var(--wapp-success); font-size: 0.9375rem; }
/* Rândurile care scad din încasare se citesc dintr-o privire, fără să fie
   nevoie să te uiți la semnul minus. */
.wapp-calc-rows > div[data-wapp-calc-row="weda"] dd,
.wapp-calc-rows > div[data-wapp-calc-row="stripe_org"] dd,
.wapp-calc-rows > div[data-wapp-calc-row="anaf"] dd { color: var(--wapp-danger); font-weight: 500; }
.wapp-calc-rows > div[data-wapp-calc-row="buyer"] { border-top: 1px solid var(--wapp-border); }

/* Vânzări: stările biletelor, colorate ca peste tot. */
.wapp-sales { display: block; }
.wapp-chip--valid     { background: rgba(10, 179, 156, 0.15); color: var(--wapp-success); }
.wapp-chip--used      { background: rgba(41, 156, 219, 0.15); color: var(--wapp-info); }
.wapp-chip--cancelled { background: rgba(135, 138, 153, 0.15); color: var(--wapp-muted); }
.wapp-chip--refunded  { background: rgba(247, 184, 75, 0.15); color: var(--wapp-warning); }

/* Plățile neterminate: cer atenție, deci au accentul de avertizare. */
.wapp-pending { border-inline-start: 3px solid var(--wapp-warning); }

/* Instrumente: carduri de aceeași înălțime, cu butonul lipit jos. */
.wapp-tools { display: block; }

.wapp-tool-grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr));
	gap: var(--wapp-gap);
}

.wapp-tool {
	display: flex;
	flex-direction: column;
	gap: 0.5rem;
	padding: 1rem;
	background: var(--wapp-card);
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
}
.wapp-tool.is-soon { opacity: 0.72; }

.wapp-tool-name { margin: 0; font-size: 0.9375rem; }
.wapp-tool-body { margin: 0; color: var(--wapp-muted); font-size: 0.8125rem; line-height: 1.5; flex: 1 1 auto; }
.wapp-tool .wapp-btn { align-self: flex-start; }

/* ── Taburile unui eveniment ────────────────────────────────────
   Aceleași iconițe ca în meniul din stânga, la aceeași dimensiune. Un tab
   care are corespondent în meniu îl folosește pe același icon: „Ultimele
   vânzări" poartă iconul de card, ca ruta Vânzări.

   Bara se derulează pe orizontală când nu încape, în loc să se rupă pe două
   rânduri — patru taburi cu icon nu intră pe un ecran de telefon îngust. */

.wapp-evtabs {
	display: flex;
	gap: 0.25rem;
	margin-block: 0.75rem;
	padding-block-end: 0.25rem;
	overflow-x: auto;
	border-block-end: 1px solid var(--wapp-border);
	scrollbar-width: thin;
}

.wapp-evtab {
	display: inline-flex;
	align-items: center;
	gap: 0.4rem;
	padding: 0.5rem 0.8rem;
	border-block-end: 2px solid transparent;
	color: var(--wapp-muted);
	font-size: 0.8125rem;
	font-weight: 600;
	text-decoration: none;
	white-space: nowrap;
}

.wapp-evtab:hover { color: var(--wapp-heading); background: var(--wapp-hover); }

.wapp-evtab.is-active {
	color: var(--wapp-accent);
	border-block-end-color: var(--wapp-accent);
}

/* ── Vânzările pe zile ──────────────────────────────────────────
   Portalul vechi scria barele din JavaScript, cu înălțimea în pixeli. Aici
   sunt marcaj randat de PHP, cu înălțimea în procente dintr-un jgheab de
   înălțime fixă — se pliază singure pe orice lățime.

   Nicio lățime în px: barele împart spațiul în părți egale, oricâte ar fi. */

.wapp-daybars {
	display: flex;
	align-items: flex-end;
	gap: 2px;
	height: 6rem;
	margin: 0;
	padding: 0;
	list-style: none;
}

.wapp-daybar {
	display: flex;
	align-items: flex-end;
	flex: 1 1 0;
	height: 100%;
	min-width: 0;
}

.wapp-daybar-fill {
	width: 100%;
	min-height: 2px;
	border-radius: 2px 2px 0 0;
	background: var(--wapp-accent);
}

.wapp-daybar:hover .wapp-daybar-fill { background: var(--wapp-heading); }

/* Stările unui voucher, în aceeași paletă cu stările biletelor:
   verde = merge, gri = oprit de mână, portocaliu = a trecut termenul. */

.wapp-chip--active   { background: rgba(10, 179, 156, 0.15); color: var(--wapp-success); }
.wapp-chip--inactive { background: rgba(135, 138, 153, 0.15); color: var(--wapp-muted); }
.wapp-chip--expired  { background: rgba(247, 184, 75, 0.15); color: var(--wapp-warning); }

/* ── Pașii formularului de eveniment ────────────────────────────
   Un rând de patru trepte. La editare fiecare e un link — evenimentul există,
   deci se poate sări direct la ce vrei să schimbi. La un eveniment nou nu
   există unde sări, așa că sunt doar etichete.

   Se derulează pe orizontală când nu încap, ca taburile. */

.wapp-steps {
	display: flex;
	gap: 0.25rem;
	margin: 0 0 1rem;
	padding: 0;
	overflow-x: auto;
	list-style: none;
	scrollbar-width: thin;
}

.wapp-step {
	flex: 0 0 auto;
	font-size: 0.75rem;
	color: var(--wapp-muted);
}

.wapp-step > a,
.wapp-step > span:last-child {
	display: inline-flex;
	align-items: center;
	gap: 0.4rem;
	padding: 0.4rem 0.7rem;
	color: inherit;
	text-decoration: none;
	white-space: nowrap;
}

.wapp-step > a:hover { color: var(--wapp-heading); }

.wapp-step-no {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 1.375rem;
	height: 1.375rem;
	flex: 0 0 auto;
	border: 1px solid currentColor;
	border-radius: 50%;
	font-size: 0.6875rem;
	font-weight: 700;
}

.wapp-step.is-active {
	color: var(--wapp-accent);
	font-weight: 600;
}

.wapp-step.is-active .wapp-step-no {
	background: var(--wapp-accent);
	border-color: var(--wapp-accent);
	color: #fff;
}

/* ── Grafice randate de PHP ─────────────────────────────────────
   DECIZIA, 2026-08-11: un singur fel de grafice în tot portalul, desenate pe
   server. Motivul nu e ideologic — un grafic din marcaj vine cu prima afișare,
   îl citesc cititoarele de ecran, se tipărește și nu cere 130 KB de bibliotecă
   descărcați, interpretați și executați înainte să apară ceva.

   Ce nu se poate așa: mărire cu rotița, tragere pe axă, ascunderea unei serii
   din legendă. Toate trei cer JavaScript, cu orice bibliotecă. Pentru cifre
   citite dintr-o privire, nu lipsesc.

   Eticheta la trecerea cu mouse-ul vine din `content: attr(data-tip)` — CSS,
   nu JavaScript. Textul e scris de PHP în atribut, deci regula „zero text din
   JS" rămâne întreagă. */

.wapp-chart-bars { margin-block: 0.5rem; }

.wapp-chart-axis {
	display: flex;
	justify-content: space-between;
	margin: 0.375rem 0 0;
	color: var(--wapp-muted);
	font-size: 0.6875rem;
}

/* Eticheta care apare deasupra unei bare. Fără întârzierea de o secundă a
   tooltip-ului nativ, și în culorile portalului. */

[data-tip] { position: relative; }

[data-tip]:hover::after,
[data-tip]:focus-visible::after {
	content: attr(data-tip);
	position: absolute;
	bottom: 100%;
	left: 50%;
	z-index: 5;
	transform: translate(-50%, -0.375rem);
	padding: 0.3rem 0.5rem;
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
	background: var(--wapp-raised);
	color: var(--wapp-heading);
	font-size: 0.6875rem;
	line-height: 1.35;
	white-space: nowrap;
	pointer-events: none;
}

/* Pe primele și ultimele bare, eticheta ar ieși din card. O tragem înăuntru. */
.wapp-daybar:first-child[data-tip]:hover::after { left: 0; transform: translate(0, -0.375rem); }
.wapp-daybar:last-child[data-tip]:hover::after  { left: auto; right: 0; transform: translate(0, -0.375rem); }

/* ── Inelul de proporții ────────────────────────────────────────
   Fără nicio dimensiune în px: `viewBox` face scalarea, iar lățimea vine de la
   părinte. Grosimea conturului e în unități SVG, deci se scalează odată cu el. */

.wapp-ring {
	display: block;
	width: 100%;
	max-width: 11rem;
	margin-inline: auto;
	overflow: visible;
}

.wapp-ring-track {
	fill: none;
	stroke: var(--wapp-border);
	stroke-width: 12;
}

.wapp-ring-slice {
	fill: none;
	stroke-width: 12;
	stroke-linecap: butt;
	stroke: var(--wapp-accent);
}

.wapp-ring-slice--success { stroke: var(--wapp-success); }
.wapp-ring-slice--warning { stroke: var(--wapp-warning); }
.wapp-ring-slice--info    { stroke: var(--wapp-info); }
.wapp-ring-slice--danger  { stroke: var(--wapp-danger); }

.wapp-ring-big {
	fill: var(--wapp-heading);
	font-size: 1.375rem;
	font-weight: 600;
	dominant-baseline: middle;
}

.wapp-ring-small {
	fill: var(--wapp-muted);
	font-size: 0.5rem;
}

/* ── Grila tabloului de bord ────────────────────────────────────
   Cardurile se așază singure după cât loc e. `auto-fit` cu `minmax` înseamnă
   patru coloane pe desktop, două pe tabletă, una pe telefon — fără o singură
   interogare de mediu scrisă de mână. */

.wapp-dash-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 17rem), 1fr));
	gap: var(--wapp-gap);
}

.wapp-dash-wide { grid-column: 1 / -1; }

/* Plăcile de navigare rapidă. */

.wapp-tiles {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 8rem), 1fr));
	gap: 0.5rem;
	margin: 0;
	padding: 0;
	list-style: none;
}

.wapp-tile {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 0.375rem;
	padding: 0.875rem 0.5rem;
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius-lg);
	background: var(--wapp-card);
	color: var(--wapp-text);
	font-size: 0.75rem;
	text-align: center;
	text-decoration: none;
}

.wapp-tile:hover {
	border-color: var(--wapp-accent);
	color: var(--wapp-heading);
}

.wapp-tile .wapp-ic { width: 1.25rem; height: 1.25rem; }

/* Legenda inelului. Pătrat, nu bulină: la 10px un pătrat se distinge mai bine,
   iar culoarea e mai ușor de comparat între rânduri. */

.wapp-legend {
	display: flex;
	flex-wrap: wrap;
	gap: 0.75rem;
	margin: 0.75rem 0 0;
	padding: 0;
	list-style: none;
	font-size: 0.75rem;
}

.wapp-legend-item {
	display: inline-flex;
	align-items: center;
	gap: 0.35rem;
}

.wapp-legend-dot {
	width: 0.625rem;
	height: 0.625rem;
	flex: 0 0 auto;
	border-radius: 2px;
	background: var(--wapp-accent);
}

.wapp-legend-dot--success { background: var(--wapp-success); }
.wapp-legend-dot--warning { background: var(--wapp-warning); }
.wapp-legend-dot--info    { background: var(--wapp-info); }
.wapp-legend-dot--danger  { background: var(--wapp-danger); }

/* ══ Tabloul de bord, compus pe zone (2026-08-11) ═══════════════════
   Ce face un tablou de bord lizibil nu e tipul graficului, ci așezarea:
   fiecare zonă răspunde la o singură întrebare. Indicatorii spun „cum stau",
   zona mare spune „cum a mers", jumătățile spun „cine sunt" și „ce e nou".

   Toate grilele folosesc `auto-fit` cu `minmax`, deci numărul de coloane se
   alege singur după lățime — nicio interogare de mediu scrisă de mână. */

.wapp-kpi-cards {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 13rem), 1fr));
	gap: 0.75rem;
	margin-bottom: var(--wapp-gap);
}

.wapp-kpi-card {
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
	gap: 0.75rem;
	padding: 0.875rem 1rem;
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius-lg);
	background: var(--wapp-card);
}

.wapp-kpi-card-main { min-width: 0; }

.wapp-kpi-card .wapp-kpi-label {
	display: block;
	margin: 0 0 0.35rem;
	color: var(--wapp-muted);
	font-size: 0.6875rem;
	text-transform: uppercase;
	letter-spacing: 0.04em;
}

.wapp-kpi-card .wapp-kpi-value {
	display: block;
	margin: 0;
	color: var(--wapp-heading);
	font-size: 1.375rem;
	font-weight: 600;
	line-height: 1.2;
}

.wapp-kpi-note {
	margin: 0.35rem 0 0;
	color: var(--wapp-muted);
	font-size: 0.6875rem;
	line-height: 1.4;
}

/* Pictograma din colț: pătrat cu colțuri rotunde, în tonul cardului. */

.wapp-kpi-icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 2.25rem;
	height: 2.25rem;
	flex: 0 0 auto;
	border-radius: var(--wapp-radius-lg);
	background: var(--wapp-raised);
	color: var(--wapp-accent);
}

.wapp-kpi-icon--success { color: var(--wapp-success); }
.wapp-kpi-icon--info    { color: var(--wapp-info); }
.wapp-kpi-icon--warning { color: var(--wapp-warning); }
.wapp-kpi-icon--danger  { color: var(--wapp-danger); }

/* Tendința. Săgeata e desenată din borduri, nu dintr-un caracter: „▲" arată
   altfel pe fiecare sistem, iar pe unele nici nu există. */

.wapp-trend {
	display: flex;
	align-items: center;
	gap: 0.3rem;
	margin: 0.35rem 0 0;
	font-size: 0.6875rem;
	font-weight: 600;
}

.wapp-trend-arrow {
	width: 0;
	height: 0;
	border-inline: 0.25rem solid transparent;
}

.wapp-trend--up            { color: var(--wapp-success); }
.wapp-trend--up .wapp-trend-arrow    { border-block-end: 0.35rem solid currentColor; }
.wapp-trend--down          { color: var(--wapp-danger); }
.wapp-trend--down .wapp-trend-arrow  { border-block-start: 0.35rem solid currentColor; }
.wapp-trend--flat          { color: var(--wapp-muted); }
.wapp-trend--flat .wapp-trend-arrow  { width: 0.5rem; height: 2px; border: 0; background: currentColor; }

/* Zonele. Pe ecran îngust, amândouă cad pe o coloană. */

.wapp-dash-split,
.wapp-dash-halves {
	display: grid;
	gap: var(--wapp-gap);
	margin-bottom: var(--wapp-gap);
}

.wapp-dash-split  { grid-template-columns: repeat(auto-fit, minmax(min(100%, 20rem), 1fr)); }
.wapp-dash-halves { grid-template-columns: repeat(auto-fit, minmax(min(100%, 18rem), 1fr)); }

/* Graficul mare din zona 2 primește două părți din trei, când încape. */
@media (min-width: 60rem) {
	.wapp-dash-split { grid-template-columns: 2fr 1fr; }
}

/* ── Linia cu arie ─────────────────────────────────────────────── */

.wapp-chart-area { position: relative; margin-block: 0.5rem; }

.wapp-chart-area svg {
	display: block;
	width: 100%;
	height: 8rem;
}

.wapp-area-grid   { stroke: var(--wapp-border); stroke-width: 0.5; }
.wapp-area-line   { fill: none; stroke: var(--wapp-accent); stroke-width: 1.5; stroke-linejoin: round; vector-effect: non-scaling-stroke; }
.wapp-area-fill   { fill: var(--wapp-accent); opacity: 0.16; }
.wapp-area-top    { stop-color: var(--wapp-accent); stop-opacity: 0.35; }
.wapp-area-bottom { stop-color: var(--wapp-accent); stop-opacity: 0; }

/* Zonele de atins cu mouse-ul, întinse peste grafic. Sunt în afara SVG-ului
   fiindcă `preserveAspectRatio="none"` ar deforma orice formă dinăuntru. */

.wapp-area-hits {
	position: absolute;
	inset: 0;
	display: flex;
	margin: 0;
	padding: 0;
	list-style: none;
}

.wapp-area-hit { flex: 1 1 0; min-width: 0; }
.wapp-area-hit:hover { background: var(--wapp-hover); }

/* ── Soldul ────────────────────────────────────────────────────── */

.wapp-balance {
	margin: 0.75rem 0 0;
	color: var(--wapp-success);
	font-size: 1.625rem;
	font-weight: 600;
	line-height: 1.1;
}

.wapp-balance-cur { color: var(--wapp-muted); font-size: 0.875rem; font-weight: 400; }

.wapp-balance-rows {
	margin: 0.75rem 0 0;
	padding: 0.75rem 0 0;
	border-block-start: 1px solid var(--wapp-border);
	list-style: none;
	font-size: 0.75rem;
	color: var(--wapp-muted);
}

.wapp-balance-rows li { display: flex; justify-content: space-between; gap: 0.5rem; }

/* ── Banda de activitate ───────────────────────────────────────── */

.wapp-feed { margin: 0.5rem 0 0; padding: 0; list-style: none; }

.wapp-feed-item {
	display: flex;
	align-items: flex-start;
	gap: 0.625rem;
	padding: 0.55rem 0;
	border-block-end: 1px solid var(--wapp-border);
}

.wapp-feed-item:last-child { border-block-end: 0; }

.wapp-feed-dot {
	width: 0.5rem;
	height: 0.5rem;
	flex: 0 0 auto;
	margin-block-start: 0.35rem;
	border-radius: 50%;
	background: var(--wapp-muted);
}

.wapp-feed-dot--sale    { background: var(--wapp-success); }
.wapp-feed-dot--checkin { background: var(--wapp-info); }
.wapp-feed-dot--voucher { background: var(--wapp-warning); }
.wapp-feed-dot--holder  { background: var(--wapp-info); }
.wapp-feed-dot--review  { background: var(--wapp-accent); }
.wapp-feed-dot--refund  { background: #f06548; }

/* `flex: 1` împinge suma la marginea din dreapta și lasă textul să se rupă pe
   rânduri — fără el, un titlu lung ar strivi cifra până n-ar mai încăpea. */
.wapp-feed-body  { min-width: 0; flex: 1; }
.wapp-feed-title { display: block; font-size: 0.8125rem; }
.wapp-feed-meta  { display: block; color: var(--wapp-muted); font-size: 0.6875rem; }

/* Banii faptei. Semnul e scris în text, nu doar arătat prin culoare: pe un
   ecran alb-negru, sau pentru cine nu deosebește verdele de roșu, culoarea
   singură n-ar spune dacă banii au intrat sau au ieșit. */
.wapp-feed-money {
	flex: 0 0 auto;
	align-self: center;
	font-size: 0.8125rem;
	font-weight: 600;
	white-space: nowrap;
	font-variant-numeric: tabular-nums;
	color: var(--wapp-muted);
}

.wapp-feed-money--in  { color: var(--wapp-success); }
.wapp-feed-money--out { color: #f06548; }

/* ── Stele și recenzii ─────────────────────────────────────────── */

.wapp-stars { display: inline-flex; gap: 0.1rem; }

.wapp-star {
	width: 0.875rem;
	height: 0.875rem;
	fill: var(--wapp-border);
}

.wapp-star.is-on { fill: var(--wapp-warning); }

.wapp-rating { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; }

.wapp-rating-value {
	color: var(--wapp-heading);
	font-size: 1.25rem;
	font-weight: 600;
}

.wapp-reviews {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 16rem), 1fr));
	gap: 0.75rem;
	margin: 0.75rem 0 0;
	padding: 0;
	list-style: none;
}

.wapp-review {
	padding: 0.75rem 0.875rem;
	border-radius: var(--wapp-radius-lg);
	background: var(--wapp-raised);
}

.wapp-review-title { margin: 0.4rem 0 0; color: var(--wapp-heading); font-size: 0.8125rem; font-weight: 600; }
.wapp-review-body  { margin: 0.3rem 0 0; font-size: 0.8125rem; line-height: 1.5; }
.wapp-review-meta  { margin: 0.45rem 0 0; color: var(--wapp-muted); font-size: 0.6875rem; }

/* ── Pictogramele din bara de sus (scanner) ─────────────────────
   Aceeași formă cu comutatorul de temă, ca antetul să arate ca un rând de
   unelte, nu ca o colecție de butoane care s-au adunat acolo. */

.wapp-topic {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 2rem;
	height: 2rem;
	flex: none;
	border: 1px solid var(--wapp-border);
	border-radius: 50%;
	background: transparent;
	color: var(--wapp-muted);
	text-decoration: none;
}

.wapp-topic:hover { color: var(--wapp-heading); border-color: var(--wapp-accent); }
.wapp-topic .wapp-ic { width: 1.0625rem; height: 1.0625rem; }

/* Scannerul propriu-zis e acțiunea principală dintre cele două. */
.wapp-topic--accent {
	background: var(--wapp-accent);
	border-color: var(--wapp-accent);
	color: #fff;
}
.wapp-topic--accent:hover { color: #fff; filter: brightness(1.15); }

/* ── Comutatorul de temă din bara de sus ───────────────────────── */

.wapp-themeswitch {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 2rem;
	height: 2rem;
	padding: 0;
	border: 1px solid var(--wapp-border);
	border-radius: 50%;
	background: transparent;
	color: var(--wapp-muted);
	cursor: pointer;
}

.wapp-themeswitch:hover { color: var(--wapp-heading); border-color: var(--wapp-accent); }

/* Cele două pictograme ale comutatorului: se arată una singură, după temă.
   Regulile sunt scrise cu aceeași condiție ca cele generale de mai sus, dar
   mai specifice — altfel `display: inline` de acolo ar strica centrarea SVG-ului
   în butonul rotund. */

.wapp-themeswitch .wapp-theme-dark            { display: inline-flex; }
.wapp-themeswitch .wapp-theme-light           { display: none; }
.wo-light .wapp-themeswitch .wapp-theme-dark  { display: none; }
.wo-light .wapp-themeswitch .wapp-theme-light { display: inline-flex; }

/* ── Antetul comun al cardurilor ────────────────────────────────
   Un singur fel de antet în tot portalul: pictogramă, titlu, subtitlu, plus
   un loc în dreapta pentru o cifră sau o legătură. Înainte, cardurile de
   indicatori aveau structură iar cele de grafice doar un titlu — pe același
   ecran arătau ca două ecrane lipite. */

.wapp-cardhead {
	display: flex;
	align-items: flex-start;
	gap: 0.625rem;
	margin-bottom: 0.875rem;
}

.wapp-cardhead-icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 1.875rem;
	height: 1.875rem;
	flex: 0 0 auto;
	border-radius: var(--wapp-radius);
	background: var(--wapp-raised);
	color: var(--wapp-accent);
}

.wapp-cardhead-icon--success { color: var(--wapp-success); }
.wapp-cardhead-icon--info    { color: var(--wapp-info); }
.wapp-cardhead-icon--warning { color: var(--wapp-warning); }
.wapp-cardhead-icon--danger  { color: var(--wapp-danger); }

.wapp-cardhead-text { flex: 1 1 auto; min-width: 0; }

.wapp-cardhead .wapp-card-title {
	display: block;
	margin: 0;
	font-size: 0.9375rem;
}

.wapp-cardhead-sub {
	display: block;
	margin-top: 0.15rem;
	color: var(--wapp-muted);
	font-size: 0.75rem;
	line-height: 1.45;
}

.wapp-cardhead-aside {
	flex: 0 0 auto;
	margin-inline-start: auto;
	color: var(--wapp-muted);
	font-size: 0.75rem;
	text-align: end;
}

/* ── Întoarcerea din detaliu ────────────────────────────────────
   Săgeata e desenată din borduri, nu dintr-un caracter: „←" arată altfel pe
   fiecare sistem, iar în unele fonturi e mai lat decât linia textului. */

.wapp-backrow { margin: 0 0 0.75rem; }

.wapp-back {
	display: inline-flex;
	align-items: center;
	gap: 0.45rem;
	color: var(--wapp-muted);
	font-size: 0.8125rem;
	text-decoration: none;
}

.wapp-back:hover { color: var(--wapp-heading); }

.wapp-back-arrow {
	width: 0;
	height: 0;
	border-block: 0.25rem solid transparent;
	border-inline-end: 0.35rem solid currentColor;
}

/* Numele evenimentului deschis: e titlul ecranului acum, nu al unui card. */
.wapp-event-name-big { font-size: 1.125rem; margin-bottom: 0.875rem; }

/* ── Tipurile de bilet, ca tichete ──────────────────────────────
   Un tip de bilet are preț, stoc, fereastră de vânzare și stare — patru
   lucruri care într-un rând de listă se îngrămădesc, iar pe telefon se rup.
   Ca obiect cu formă proprie, se citesc dintr-o privire.

   Crestăturile din margini sunt două cercuri în culoarea fundalului, tăiate
   din card cu `radial-gradient`. Fără imagini, fără pseudo-elemente în plus. */

.wapp-tickets {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(min(100%, 15rem), 1fr));
	gap: 0.875rem;
	margin: 0.25rem 0 0;
	padding: 0;
	list-style: none;
}

.wapp-ticket {
	display: flex;
	flex-direction: column;
	padding: 0.875rem 1rem 1rem;
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius-lg);
	background: var(--wapp-card);
	border-inline-start: 3px solid var(--wapp-muted);
}

.wapp-ticket--onsale  { border-inline-start-color: var(--wapp-success); }
.wapp-ticket--soon    { border-inline-start-color: var(--wapp-info); }
.wapp-ticket--soldout { border-inline-start-color: var(--wapp-warning); }
.wapp-ticket--closed  { border-inline-start-color: var(--wapp-muted); }

.wapp-ticket-top {
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
	gap: 0.5rem;
	margin-bottom: 0.35rem;
}

.wapp-ticket-name {
	color: var(--wapp-heading);
	font-size: 0.9375rem;
	font-weight: 600;
	line-height: 1.3;
}

.wapp-ticket-price {
	margin: 0;
	color: var(--wapp-heading);
	font-size: 1.375rem;
	font-weight: 600;
	line-height: 1.15;
}

.wapp-ticket-cur { color: var(--wapp-muted); font-size: 0.8125rem; font-weight: 400; }

.wapp-ticket-note { margin: 0.25rem 0 0; color: var(--wapp-muted); font-size: 0.6875rem; }

/* Linia de rupere, cu crestături în margini. */
.wapp-ticket-rip {
	position: relative;
	height: 1px;
	margin: 0.875rem -1rem;
	background: repeating-linear-gradient(
		to right,
		var(--wapp-border) 0 0.25rem,
		transparent 0.25rem 0.5rem
	);
}

.wapp-ticket-rip::before,
.wapp-ticket-rip::after {
	content: "";
	position: absolute;
	top: 50%;
	width: 0.75rem;
	height: 0.75rem;
	border-radius: 50%;
	background: var(--wapp-bg);
	transform: translateY(-50%);
}

.wapp-ticket-rip::before { inset-inline-start: -0.375rem; }
.wapp-ticket-rip::after  { inset-inline-end: -0.375rem; }

.wapp-ticket-stock { flex: 1 1 auto; }
.wapp-ticket-sold  { display: block; font-size: 0.75rem; margin-bottom: 0.35rem; }
.wapp-ticket-stock .wapp-bar-track { display: block; width: 100%; }

.wapp-ticket-acts {
	display: flex;
	flex-wrap: wrap;
	gap: 0.375rem;
	margin-top: 0.875rem;
}

.wapp-ticket-acts .wapp-btn,
.wapp-ticket-acts .wapp-btn-del { font-size: 0.75rem; padding-inline: 0.6rem; }

/* Stările unui tip de bilet, în paleta stărilor de bilet. */
.wapp-chip--onsale  { background: rgba(10, 179, 156, 0.15); color: var(--wapp-success); }
.wapp-chip--soon    { background: rgba(41, 156, 219, 0.15); color: var(--wapp-info); }
.wapp-chip--soldout { background: rgba(247, 184, 75, 0.15); color: var(--wapp-warning); }
.wapp-chip--closed  { background: rgba(135, 138, 153, 0.15); color: var(--wapp-muted); }

/* ── Formularul de tip de bilet, pe două coloane ────────────────
   Câmpurile la stânga, calculatorul lipit sus la dreapta. Înainte era o
   singură coloană îngustă într-un card cât tot ecranul — de acolo venea
   spațiul gol de care se plângea ecranul. */

.wapp-typeform-grid {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--wapp-gap);
	align-items: start;
}

@media (min-width: 56rem) {
	.wapp-typeform-grid { grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr); }
	.wapp-typeform-side { position: sticky; top: 1rem; }
}

.wapp-typeform-side .wapp-calc { margin-block-start: 0; }

/* Contrastul: dunga verde groasă din marginea cardului obosea ochiul pe un
   formular lung. Rămâne, dar subțire — cât să spună „ăsta e formularul",
   nu cât să atragă privirea la fiecare derulare. */
.wapp-type-form { border-inline-start-width: 2px; }

/* Coloana cu câmpuri. `min-width: 0` e obligatoriu: fără el, un `<select>`
   lung împinge coloana peste grilă și rupe layout-ul pe ecrane înguste. */
.wapp-typeform-fields { min-width: 0; }

/* ── Pasul „când și unde", pe două panouri ──────────────────────
   Câmpurile la stânga, harta la dreapta, despărțite de o linie. Harta e o
   suprafață de lucru — între coordonate și restul câmpurilor stătea prea
   înghesuită ca s-o poți folosi.

   Pe ecran îngust cad una sub alta, harta a doua: pe telefon, cine
   completează formularul are întâi nevoie de date, nu de hartă. */

.wapp-where-grid {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--wapp-gap);
	align-items: start;
}

.wapp-where-fields { min-width: 0; }

@media (min-width: 56rem) {
	.wapp-where-grid { grid-template-columns: 1fr 1fr; }

	.wapp-where-map {
		min-width: 0;
		padding-inline-start: var(--wapp-gap);
		border-inline-start: 1px solid var(--wapp-border);
	}
}

.wapp-where-map .wapp-form-group { margin-block-start: 0; }

/* Harta e singură în panoul din dreapta, deci poate fi pătrată: lângă o
   coloană de câmpuri, un dreptunghi lat și scund ar arăta ca o dungă, iar
   una prea înaltă ar lăsa gol dedesubt. Proporția, nu o înălțime fixă —
   așa se pliază pe orice lățime fără nicio dimensiune în px. */
.wapp-where-map .wapp-map { aspect-ratio: 1 / 1; }

/* ── Antetul vizual al unui eveniment ───────────────────────────
   Bannerul e fundalul, posterul stă peste el ca un afiș lipit — exact ce
   vede și cumpărătorul. Organizatorul trebuie să le VADĂ, nu doar să le fi
   completat ca adrese: o poză greșită se prinde din privire, nu dintr-un URL.

   Peste banner vine un văl întunecat, altfel textul alb pe o poză deschisă
   devine ilizibil. Nu se poate ști ce poză urcă organizatorul. */

.wapp-evhero {
	position: relative;
	overflow: hidden;
	margin-bottom: var(--wapp-gap);
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius-lg);
	background: var(--wapp-card);
	isolation: isolate;
}

.wapp-evhero-bg {
	position: absolute;
	inset: 0;
	z-index: -1;
	background-size: cover;
	background-position: center;
}

.wapp-evhero-bg::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(90deg, rgba(0, 0, 0, 0.82), rgba(0, 0, 0, 0.55));
}

.wapp-evhero-body {
	display: flex;
	align-items: center;
	gap: 1rem;
	padding: 1.125rem 1.25rem;
}

.wapp-evhero-poster {
	width: 4.5rem;
	flex: 0 0 auto;
	aspect-ratio: 3 / 4;
	object-fit: cover;
	border-radius: var(--wapp-radius);
	background: var(--wapp-raised);
}

.wapp-evhero-text { min-width: 0; }

/* Când există banner, textul stă pe poză: albul e singurul care merge pe
   orice fundal, deci nu moștenește culoarea temei. */
.wapp-evhero:has(.wapp-evhero-bg) .wapp-evhero-name,
.wapp-evhero:has(.wapp-evhero-bg) .wapp-evhero-meta { color: #fff; }

.wapp-evhero-name {
	margin: 0;
	color: var(--wapp-heading);
	font-size: 1.25rem;
	font-weight: 600;
	line-height: 1.25;
}

.wapp-evhero-meta {
	margin: 0.3rem 0 0;
	color: var(--wapp-muted);
	font-size: 0.8125rem;
}

.wapp-evhero-chips {
	display: flex;
	flex-wrap: wrap;
	gap: 0.35rem;
	margin: 0.55rem 0 0;
}

@media (max-width: 30rem) {
	.wapp-evhero-body   { flex-direction: column; align-items: flex-start; }
	.wapp-evhero-poster { width: 3.5rem; }
}

/* ── Codul de acces la scanner ──────────────────────────────────
   Codul QR și codul scris, unul lângă altul: primul pentru cine are camera
   la îndemână, al doilea pentru cine n-o are sau nu-i merge. Amândouă duc în
   același loc.

   QR-ul are fundal alb propriu, pus în SVG, nu moștenit din temă: un cod cu
   module deschise pe fundal închis e inversat, iar multe aparate refuză
   să-l citească. */

.wapp-scancode {
	display: flex;
	align-items: center;
	gap: 1rem;
	flex-wrap: wrap;
	margin-block-start: 1rem;
	padding: 1rem;
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius-lg);
	background: var(--wapp-raised);
}

.wapp-scancode-qr {
	width: 100%;
	/* Un cod de 37×37 module la 10rem înseamnă vreo 3,5 pixeli pe modul —
	   sub pragul la care camerele prind codul cu siguranță. La 15rem sunt
	   peste 5, ceea ce merge și pe telefoane mai vechi. */
	max-width: 15rem;
	flex: 0 0 auto;
	border-radius: var(--wapp-radius);
	overflow: hidden;
}

/* Biblioteca produce un <img> cu o imagine mică, mărită de CSS. `pixelated`
   ține modulele cu margini drepte: netezite, marginile se amestecă și camera
   vede un cod rupt. */
.wapp-scancode-qr img {
	display: block;
	width: 100%;
	height: auto;
	image-rendering: pixelated;
}

.wapp-scancode-text { flex: 1 1 12rem; min-width: 0; }

/* Codul se citește cu ochiul și se tastează pe alt aparat: monospațiat, mare,
   cu litere depărtate. „0" și „O" trebuie să se distingă. */
.wapp-scancode-value {
	margin: 0.2rem 0 0.4rem;
	color: var(--wapp-heading);
	font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
	font-size: 1.5rem;
	font-weight: 600;
	letter-spacing: 0.15em;
	word-break: break-all;
}

/* ── Scanare în direct ──────────────────────────────────────────
   Ecranul se citește de sus în jos ca o întrebare pusă la intrare: câți au
   intrat, de ce au fost opriți ceilalți, cine scanează, ce s-a întâmplat
   ultima dată. Nu are stiluri proprii de tabel sau de card — le folosește pe
   cele din portal. Ce se adaugă aici sunt doar cele trei stări de dispozitiv
   și butonul mic din coloana de acțiuni. */

.wapp-scanning { display: block; }

/* Numele dat dispozitivului la generarea codului, sub cod. Ține locul
   întrebării „pentru cine era ăsta?" când generezi trei la rând. */
.wapp-scancode-for {
	margin: 0.2rem 0 0;
	color: var(--wapp-heading);
	font-weight: 600;
}

/* Tăcut de un sfert de oră: nu e închis, dar nici nu lucrează. Galbenul e
   exact starea asta — nu o eroare, dar nici ceva de ignorat. */
.wapp-chip--idle   { background: rgba(247, 184, 75, 0.15); color: var(--wapp-warning); }

/* Orice altceva decât „valid" înseamnă un om oprit la ușă. */
.wapp-chip--danger { background: rgba(240, 101, 72, 0.15); color: var(--wapp-danger); }

/* Butonul dintr-o celulă de tabel. Cel obișnuit e făcut pentru formulare și
   îngroașă rândul cu o treime — pe un tabel de douăzeci de dispozitive, se
   vede. */
.wapp-btn--sm {
	padding: 0.35rem 0.7rem;
	font-size: 0.8125rem;
}

/* Anunțul de păstrare și butonul de descărcare, pe același rând. Se rup pe
   două rânduri singure când nu încap — fără prag în px. */
.wapp-scan-keep {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 0.75rem;
	flex-wrap: wrap;
	margin-block-end: 1rem;
	padding: 0.6rem 0.9rem;
	border: 1px solid var(--wapp-border);
	border-radius: var(--wapp-radius);
	background: var(--wapp-card);
}

.wapp-scan-keep-text { margin: 0; color: var(--wapp-muted); font-size: 0.875rem; }

/* ══════════════════════════════════════════════════════════════════════
   COȘUL — Valul 10, Felia 4.
   Bara de sus, cele două butoane și mesajul scurt.
   ══════════════════════════════════════════════════════════════════════ */

/* Bara stă lipită sus, peste conținut, ca să nu împingă pagina în jos când
   apare — o pagină care sare sub degetul cuiva care tocmai a apăsat e mai
   supărătoare decât o bară care lipsește. */
.wapp-cart-bar {
	position: sticky;
	top: 0;
	z-index: 40;
	display: flex;
	align-items: center;
	gap: 10px;
	padding: 10px 14px;
	margin: 0 0 14px;
	border: 1px solid var(--wapp-line, rgba(255,255,255,.12));
	border-radius: 10px;
	background: var(--wapp-card, #16181d);
	box-shadow: 0 2px 10px rgba(0,0,0,.18);
}

.wapp-cart-bar[hidden] { display: none; }

.wapp-cart-ic { display: inline-flex; opacity: .85; }

.wapp-cart-txt {
	display: inline-flex;
	align-items: baseline;
	gap: 5px;
	font-size: 14px;
}

.wapp-cart-txt strong { font-size: 15px; font-weight: 700; }

/* Totalul se împinge la dreapta și rămâne acolo; între el și număr poate
   crește oricât spațiu, fără ca butonul de golire să se miște. */
.wapp-cart-total {
	margin-left: auto;
	font-size: 14px;
	font-weight: 700;
	white-space: nowrap;
}

.wapp-cart-clear {
	flex-shrink: 0;
	width: 26px;
	height: 26px;
	padding: 0;
	border: 1px solid var(--wapp-line, rgba(255,255,255,.14));
	border-radius: 50%;
	background: transparent;
	color: inherit;
	opacity: .6;
	cursor: pointer;
	line-height: 1;
}

.wapp-cart-clear:hover { opacity: 1; }

/* ── Butoanele de pe bilet ─────────────────────────────────────────── */

.wev-tk-buy {
	display: flex;
	align-items: center;
	gap: 8px;
}

/* Butonul cu pictogramă e pătrat, cât înălțimea celui cu text de lângă el.
   Fără lățime fixă ar ieși un dreptunghi turtit, care nu se citește ca buton. */
.wapp-btn--icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 38px;
	height: 38px;
	padding: 0;
	flex-shrink: 0;
}

.wapp-btn--icon .wapp-ic { width: 18px; height: 18px; }

.wapp-btn--icon:disabled { opacity: .5; cursor: default; }

/* ── Mesajul scurt ─────────────────────────────────────────────────── */

.wapp-toasts {
	position: fixed;
	left: 50%;
	bottom: 22px;
	transform: translateX(-50%);
	z-index: 60;
	max-width: min(92vw, 460px);
	pointer-events: none;
}

/* Doar cutia primește clicuri, nu și spațiul gol din jurul ei — altfel
   containerul ar acoperi pagina și ar înghiți apăsări pe alte butoane. */
.wapp-toast {
	pointer-events: auto;
	display: flex;
	align-items: flex-start;
	gap: 10px;
	padding: 11px 13px;
	border-radius: 10px;
	border: 1px solid var(--wapp-line, rgba(255,255,255,.14));
	background: var(--wapp-card, #16181d);
	box-shadow: 0 6px 20px rgba(0,0,0,.28);
	font-size: 13.5px;
	line-height: 1.45;
	animation: wapp-toast-in .18s ease-out;
}

.wapp-toast--warn { border-color: rgba(240,170,60,.55); }

.wapp-toast-txt { flex: 1; }

.wapp-toast-x {
	flex-shrink: 0;
	width: 20px;
	height: 20px;
	padding: 0;
	border: 0;
	background: transparent;
	color: inherit;
	opacity: .55;
	cursor: pointer;
	line-height: 1;
	font-size: 12px;
}

.wapp-toast-x:hover { opacity: 1; }

@keyframes wapp-toast-in {
	from { opacity: 0; transform: translateY(6px); }
	to   { opacity: 1; transform: translateY(0); }
}

/* Cine a cerut mai puțină mișcare nu primește animație. */
@media ( prefers-reduced-motion: reduce ) {
	.wapp-toast { animation: none; }
}

/* ══════════════════════════════════════════════════════════════════════
   CHECKOUT — Valul 10, Felia 5.
   Structura din machetă: pași sus, conținut la stânga, sumar lipit la dreapta.
   ══════════════════════════════════════════════════════════════════════ */

.wco-steps {
	display: flex;
	gap: 6px;
	align-items: center;
	flex-wrap: wrap;
	margin: 0 0 18px;
	font-size: 13px;
}

.wco-step { display: flex; align-items: center; gap: 8px; opacity: .6; }
.wco-step.is-on { opacity: 1; }

.wco-step b {
	width: 23px;
	height: 23px;
	border-radius: 50%;
	border: 1px solid var(--wapp-line, rgba(255,255,255,.14));
	background: var(--wapp-raised, #252a30);
	display: flex;
	align-items: center;
	justify-content: center;
	font-size: 12px;
	font-weight: 600;
}

.wco-step.is-on b { background: var(--wapp-accent, #7b76c9); border-color: var(--wapp-accent, #7b76c9); color: #fff; }
.wco-step.is-done b { background: rgba(10,179,156,.18); border-color: #0ab39c; color: #0ab39c; }
.wco-step.is-done { opacity: .85; }
.wco-sep { opacity: .35; }

/* Sumarul rămâne lipit sus cât derulează formularul: pe pasul 3, cu opt
   participanți, altfel ar trebui derulat până jos ca să se vadă totalul. */
.wco-cols { display: grid; grid-template-columns: minmax(0,1fr) 330px; gap: 18px; align-items: start; }

/* Coloanele unei grile refuză implicit să scadă sub lățimea conținutului lor.
   Fără linia asta, un singur rând prea lat împinge toată pagina în afara
   ecranului — și pe telefon se vedea fix asta: se putea trage lateral. */
.wco-cols > * { min-width: 0; }

.wco-side { position: sticky; top: 16px; }

.wco-line {
	display: flex;
	justify-content: space-between;
	gap: 12px;
	padding: .7rem 0;
	border-bottom: 1px solid var(--wapp-line, rgba(255,255,255,.1));
}

.wco-line:last-of-type { border-bottom: 0; }
.wco-line-name { font-weight: 600; font-size: 14px; }
.wco-line-right { text-align: right; }
.wco-qty { width: 68px; text-align: center; }

.wco-grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: .7rem; }

.wco-person {
	border: 1px solid var(--wapp-line, rgba(255,255,255,.12));
	border-radius: 8px;
	padding: 1rem;
	margin-bottom: .75rem;
	background: var(--wapp-raised, #252a30);
}

.wco-person h3 {
	margin: 0 0 .8rem;
	font-size: .9rem;
	font-weight: 600;
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 10px;
}

.wco-copy { background: none; border: 0; padding: 0; font: inherit; font-size: 12px; font-weight: 600; color: var(--wapp-accent, #7b76c9); cursor: pointer; }

.wco-ptype { display: flex; gap: 18px; margin-bottom: 1rem; }
.wco-radio { display: inline-flex; align-items: center; gap: 7px; cursor: pointer; }
.wco-radio input { width: auto; }
.wco-company[hidden] { display: none; }

/* Eroarea stă sub câmpul ei, nu într-o listă deasupra formularului: cu opt
   participanți pe ecran, „câmp obligatoriu" fără loc nu spune care. */
.wco-err { display: block; margin-top: 4px; font-size: 12px; color: #f0806a; }

.wco-sum { display: flex; justify-content: space-between; gap: 10px; padding: .42rem 0; font-size: 14px; }
.wco-lab { opacity: .7; }
.wco-sum--off { color: #0ab39c; }

/* Rând de informare, nu de adunare: e o bucată DIN suma de deasupra, nu una
   peste ea. Se scrie mai mic și mai șters, ca să nu se citească a linie de
   total. */
.wco-sum--info { font-size: 12.5px; opacity: .7; padding-top: 0; }

.wco-sum--total {
	border-top: 1px solid var(--wapp-line, rgba(255,255,255,.14));
	margin-top: .6rem;
	padding-top: .8rem;
	font-size: 1.15rem;
	font-weight: 700;
}

.wco-fine { font-size: 11.5px; opacity: .65; margin: .35rem 0 0; line-height: 1.45; }
.wco-voucher { margin-top: 1rem; }
.wco-voucher-row { display: flex; gap: 6px; }
.wco-voucher-row input { flex: 1; min-width: 0; text-transform: uppercase; }

.wco-tc { display: flex; gap: 10px; align-items: flex-start; margin: 1rem 0 0; font-size: 13px; line-height: 1.5; }
.wco-tc input { width: 17px; height: 17px; flex-shrink: 0; margin-top: 2px; }
.wco-ver { font-size: 11px; opacity: .6; margin: 2px 0 0 27px; }

.wco-actions { display: flex; gap: 8px; margin-top: 1rem; }
.wco-actions .wapp-btn { flex: 1; }

/* Butonul de plată ia mai mult loc decât „Înapoi": la ultimul pas, cele două
   nu sunt egale ca importanță și n-au voie să arate așa. */
.wco-pay { flex: 2; font-size: 15px; }

/* Linkul din bifa de termeni moștenea albastrul implicit al browserului, care
   pe fundal închis abia se citește. */
.wco-tc a { color: var(--wapp-accent, #7b76c9); }
.wco-secure { font-size: 11.5px; opacity: .65; text-align: center; margin: .7rem 0 0; }

@media ( max-width: 880px ) {
	.wco-cols { grid-template-columns: 1fr; }
	.wco-side { position: static; }
	.wco-grid2 { grid-template-columns: 1fr; }
}

/* ══════════════════════════════════════════════════════════════════════
   PAGINI PUBLICE DE ORGANIZATOR — Valul 10, Feliile 7-9.
   Sunt pagini PUBLICE, servite în tema site-ului: lățimea e mărginită aici,
   fiindcă tema nu știe nimic despre ele.
   ══════════════════════════════════════════════════════════════════════ */

.wpub { max-width: 1000px; margin: 0 auto; padding: 24px 16px 48px; }

/* ── ANTETUL: banner lat, logo rotund peste el ───────────────────────────
   Forma paginilor de artist. Antetul e o singură bucată: banner, logo peste
   marginea lui de jos, nume, câteva fapte, rețele. */
.wpub-head { margin-bottom: 26px; text-align: center; }

.wpub-banner {
	height: clamp( 150px, 26vw, 280px );
	border-radius: 14px;
	border: 1px solid var(--wapp-line, rgba(255,255,255,.12));
	background: var(--wapp-raised, #252a30) center/cover no-repeat;
}

/* Fără banner, banda rămâne — dar mai scundă, ca să nu pară o poză care n-a
   apucat să se încarce. */
.wpub-head.is-plain .wpub-banner { height: 96px; }

/* Logoul urcă peste banner cu jumătate din el: legătura dintre poză și nume se
   vede dintr-o privire, fără nicio linie de despărțire. */
.wpub-head-in { margin-top: -52px; }

.wpub-logo {
	width: 104px;
	height: 104px;
	margin: 0 auto 12px;
	/* ROTUND. Logourile vin în orice raport; `cover` taie din centru, ceea ce
	   arată mai bine decât unul lățit ca să încapă. */
	border-radius: 50%;
	border: 3px solid var(--wapp-bg, #14181d);
	box-shadow: 0 6px 22px rgba(0,0,0,.35);
	background: var(--wapp-raised, #252a30) center/cover no-repeat;
	display: flex;
	align-items: center;
	justify-content: center;
	font-size: 38px;
	font-weight: 700;
	overflow: hidden;
}

.wpub-name { margin: 0 0 8px; font-size: 1.8rem; line-height: 1.2; }
.wpub-meta { display: flex; gap: 14px; flex-wrap: wrap; justify-content: center; font-size: 13px; }

/* Rețelele, sus, ca butoane mici. Doar cele completate ajung aici. */
.wpub-social { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; margin-top: 14px; }

.wpub-social-one {
	display: inline-block;
	padding: 7px 14px;
	border: 1px solid var(--wapp-line, rgba(255,255,255,.16));
	border-radius: 999px;
	font-size: 13px;
	font-weight: 600;
	text-decoration: none;
	color: inherit;
	background: var(--wapp-card, #1c2025);
}

.wpub-social-one:hover { border-color: var(--wapp-accent, #7b76c9); color: var(--wapp-accent, #7b76c9); }

@media ( max-width: 560px ) {
	.wpub-head-in { margin-top: -40px; }
	.wpub-logo { width: 84px; height: 84px; font-size: 30px; }
}
.wpub-rating { font-weight: 700; }
.wpub-bio { margin: 0; line-height: 1.65; }
.wpub-back { margin: 0 0 10px; font-size: 13px; }

/* Cardurile se strâng singure pe telefon, fără puncte de rupere scrise de
   mână: `auto-fill` cu o lățime minimă face treaba la orice lățime. */
.wpub-grid { display: grid; grid-template-columns: repeat( auto-fill, minmax( 220px, 1fr ) ); gap: 14px; }

.wpub-card {
	display: flex;
	flex-direction: column;
	border: 1px solid var(--wapp-line, rgba(255,255,255,.12));
	border-radius: 10px;
	overflow: hidden;
	text-decoration: none;
	color: inherit;
	background: var(--wapp-raised, #252a30);
	transition: transform .12s ease, border-color .12s ease;
}

.wpub-card:hover { transform: translateY(-2px); border-color: var(--wapp-accent, #7b76c9); }

.wpub-cover {
	display: block;
	aspect-ratio: 16 / 9;
	background: var(--wapp-card, #1c2025) center/cover no-repeat;
}

.wpub-card-body { display: flex; flex-direction: column; gap: 3px; padding: 11px 13px 13px; font-size: 14px; }
.wpub-more { margin: 14px 0 0; }
.wpub-more .wapp-btn { display: inline-block; width: auto; padding: 9px 16px; }

.wpub-past summary { cursor: pointer; font-weight: 600; margin-bottom: 12px; }

/* Contactul e o listă de fapte, nu o enumerare de argumente: fără buline. */
.wpub-contact { list-style: none; margin: 0; padding: 0; display: grid; gap: 7px; font-size: 14px; }

@media ( prefers-reduced-motion: reduce ) {
	.wpub-card { transition: none; }
	.wpub-card:hover { transform: none; }
}

/* ── Adresele publice, în Setări → Profil public ─────────────────────── */

.wapp-addr {
	margin: .9rem 0 0;
	padding: .85rem 1rem;
	border: 1px solid var(--wapp-line, rgba(255,255,255,.12));
	border-radius: 8px;
	background: var(--wapp-raised, #252a30);
}

.wapp-addr-head { font-size: 12px; font-weight: 700; opacity: .75; margin-bottom: .55rem; text-transform: uppercase; letter-spacing: .04em; }
.wapp-addr-row { display: flex; align-items: center; gap: 10px; padding: 4px 0; font-size: 13.5px; }
.wapp-addr-lab { flex: 0 0 84px; opacity: .65; }
.wapp-addr-url { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* Adresa rezervată dar încă inactivă se vede stinsă și tăiată: se citește
   dintr-o privire că nu e ceva ce poți da cuiva chiar acum. */
.wapp-addr-url.is-off { opacity: .5; text-decoration: line-through; }

.wapp-addr-copy {
	flex-shrink: 0;
	padding: 3px 9px;
	border: 1px solid var(--wapp-line, rgba(255,255,255,.14));
	border-radius: 5px;
	background: transparent;
	color: inherit;
	font: inherit;
	font-size: 12px;
	cursor: pointer;
	opacity: .75;
}

.wapp-addr-copy:hover { opacity: 1; }
.wapp-addr-copy.is-done { border-color: #0ab39c; color: #0ab39c; opacity: 1; }

.wapp-preview-note { margin: .5rem 0 0; }

/* ── Harta evenimentului ─────────────────────────────────────────────
   Aceleași valori ca în postul sincronizat pentru aplicație: colțuri de 12px,
   fără chenar. Înălțimea stă în atributul `height` al iframe-ului, ca acolo. */

.wev-map-wrap { margin: .8rem 0 0; }

.wev-map {
	display: block;
	width: 100%;
	border: 0;
	border-radius: 12px;
	overflow: hidden;
}

.wev-map-link { display: inline-block; width: auto; margin-top: .7rem; padding: 8px 14px; }

/* ── Antetul evenimentului, după mutarea etichetelor ─────────────────── */

/* `.wev-tags` există deja mai sus și se potrivește: rând de etichete care se
   pliază. Aici doar îi dăm aer, fiindcă acum stă între banner și detalii, nu
   peste fotografie — unde, pe un banner deschis la culoare, ajungea alb pe alb. */
.wev-tags { margin: 14px 0 4px; }

/* Adresa din antet. Pinul se aliniază pe PRIMA linie de text, nu pe mijlocul
   blocului — altfel „sare" când adresa trece pe două rânduri. */
.wev-address {
	display: flex;
	align-items: flex-start;
	gap: 7px;
	margin: 10px 0 0;
	font-size: 14px;
	opacity: .9;
}

.wev-address .wapp-ic { width: 16px; height: 16px; flex-shrink: 0; margin-top: 3px; }

.wev-venue-addr { margin: .25rem 0 0; font-size: 14px; opacity: .75; }

/* Secțiunile care încă n-au conținut. Ton de „urmează", nu de „lipsește". */
.wev-soon { margin: 0; opacity: .7; }

/* Lămuririle de sub câmpurile formularului de eveniment. */
.wapp-field-hint { display: block; margin-top: 4px; font-size: 12px; opacity: .6; line-height: 1.45; }

/* ══════════════════════════════════════════════════════════════════════
   Antetul evenimentului — spațiere și etichete
   ══════════════════════════════════════════════════════════════════════ */

/* Aceeași distanță de la banner la etichete și de la etichete la conținut.
   Scrisă o dată, într-o variabilă: dacă se schimbă, se schimbă amândouă —
   altfel una rămâne în urmă și se vede ca o nealiniere. */
:root { --wev-gap: 18px; }

.wev-tags { margin: var(--wev-gap) 0 0; }
.wev-cols { margin-top: var(--wev-gap); }

/* TOATE etichetele au aceeași formă. „Bilete disponibile" avea bulină, tipul
   și stilul erau text simplu — trei lucruri de același fel arătau ca trei
   feluri diferite. Culoarea rămâne distinctă: forma le face familie, culoarea
   le spune rolul. */
.wev-tags .wapp-chip {
	display: inline-flex;
	align-items: center;
	padding: 4px 12px;
	border-radius: 999px;
	border: 1px solid var(--wapp-line, rgba(255,255,255,.14));
	background: var(--wapp-raised, #252a30);
	font-size: 11.5px;
	font-weight: 700;
	letter-spacing: .04em;
	text-transform: uppercase;
	line-height: 1.6;
}

/* ══════════════════════════════════════════════════════════════════════
   Checkout — câmpurile
   ══════════════════════════════════════════════════════════════════════ */

/* Câmpurile foloseau stilul implicit al browserului: albe, cu chenar gri, pe
   fundal închis. Arătau ca un formular de acum cincisprezece ani lipit peste
   pagina noastră. Acum se poartă ca restul portalului.

   DE CE SE SCRIE PRIN EXCLUDERE, nu prin enumerare. Prima variantă enumera
   `input[type="text"]`. Un selector de atribut cere ca atributul SĂ EXISTE — iar
   `<input name="buyer_city">` n-are niciun `type` scris; browserul îl tratează ca
   text, dar CSS-ul nu-l vede. De aceea arătau bine exact două lucruri: câmpul de
   email (singurul cu `type` scris) și listele derulante. Restul rămâneau albe.

   S-ar fi rezolvat și punând `type="text"` pe fiecare câmp — dar ar fi ținut
   până la primul câmp nou scris fără el. Excluderea ține singură: orice câmp nou
   intră în design, iar bifele și butoanele rămân în afară, fiindcă sunt numite
   explicit aici. */
.wco input:not([type="checkbox"]):not([type="radio"]):not([type="submit"]):not([type="button"]):not([type="hidden"]),
.wco select,
.wco textarea {
	width: 100%;
	padding: 10px 12px;
	border: 1px solid var(--wapp-line, rgba(255,255,255,.14));
	border-radius: 8px;
	background: var(--wapp-card, #1c2025);
	color: inherit;
	font: inherit;
	font-size: 14px;
	transition: border-color .12s ease, box-shadow .12s ease;
}

.wco input::placeholder, .wco textarea::placeholder { opacity: .45; }

/* ── Cantitatea: valoarea liniei la stânga, două butoane în jurul cifrei ──
   Suma liniei stă lângă cantitate, pe același rând: „cât × cât fac" se
   citește dintr-o privire, nu de pe două rânduri. */
.wco-qty-row {
	display: flex;
	align-items: center;
	justify-content: flex-end;
	gap: 14px;
}

.wco-line-total { font-size: 15px; font-weight: 600; white-space: nowrap; }

.wco-stepper {
	display: inline-flex;
	align-items: stretch;
	/* Grupul nu se micșorează niciodată. Într-un rând prea îngust, un element
	   flexibil se strânge până dispare — și exact asta pățea cifra din mijloc,
	   pe telefon: câmpul ajungea de câțiva pixeli, iar cantitatea, centrată,
	   rămânea tăiată în afara lui. */
	flex-shrink: 0;
	border: 1px solid var(--wapp-line, rgba(255,255,255,.14));
	border-radius: 8px;
	overflow: hidden;
	background: var(--wapp-card, #1c2025);
}

/* Câmpul din mijloc renunță la ramă și la săgețile browserului: rama e a
   grupului, iar săgețile native ar face patru butoane în loc de două. */
/* LĂȚIMEA SE DĂ DIN `flex`, NU DIN `width`.
   Regula generală a câmpurilor din checkout (`.wco input:not(...)` × cinci) are
   specificitate mai mare decât selectorul ăsta și pune `width: 100%` peste el.
   Într-un flex, `flex-basis` bate `width` — deci basis-ul e singurul mod de a
   fixa cifra la lățimea ei, fără să scriu `!important` și fără să inventez o
   clasă în plus. `0 0` înseamnă că nu crește și nu se strânge: exact ce lipsea
   pe telefon, unde câmpul era strivit până când cifra nu se mai vedea. */
.wco .wco-stepper input.wco-qty {
	flex: 0 0 3.25rem;
	width: 3.25rem;
	min-width: 0;
	text-align: center;
	border: 0;
	border-radius: 0;
	background: transparent;
	padding: 8px 0;
	-moz-appearance: textfield;
	appearance: textfield;
}

.wco .wco-stepper input.wco-qty:focus { box-shadow: none; }
.wco .wco-stepper input.wco-qty::-webkit-outer-spin-button,
.wco .wco-stepper input.wco-qty::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }

.wco-step {
	border: 0;
	background: transparent;
	color: inherit;
	font: inherit;
	font-size: 17px;
	line-height: 1;
	padding: 0 13px;
	cursor: pointer;
	opacity: .75;
}

.wco-step:hover { opacity: 1; background: rgba(255,255,255,.06); }
.wco-stepper:focus-within { border-color: var(--wapp-accent, #7b76c9); }

/* Cantitatea rămâne îngustă și în afara grupului, dacă apare undeva singură. */
.wco input.wco-qty { width: 78px; text-align: center; }

/* ── Pe telefon: rândul biletului se așază pe două etaje ──────────────────
   Rândul avea, unul lângă altul, numele biletului, prețul pe bucată, grupul
   de cantitate și coșul de gunoi. Pe un ecran de telefon nu încăpeau: pagina
   ieșea în afară spre dreapta, iar câmpul de cantitate — singurul element
   care se putea micșora — era strivit până când cifra dinăuntru nu se mai
   vedea deloc.

   Aici numele și prețul iau fiecare rândul lor, iar cantitatea și ștergerea
   coboară împreună pe al treilea, la stânga. Nimic nu mai are de ce să se
   strângă, deci nimic nu mai iese din ecran.

   Blocul stă DUPĂ regulile pe care le schimbă, nu înaintea lor: la aceeași
   specificitate câștigă ultima scrisă, iar mai sus n-ar fi făcut nimic. */
@media ( max-width: 560px ) {

	.wco-line { flex-wrap: wrap; }

	/* Coloana cu numele are voie să se îngusteze — fără asta, un titlu lung de
	   eveniment ar întinde rândul oricât. */
	.wco-line > * { min-width: 0; }
	.wco-line > :first-child { flex: 1 1 100%; }

	.wco-line-name { overflow-wrap: anywhere; }

	.wco-line-right { flex: 1 1 100%; text-align: start; }

	/* Cantitatea și coșul rămân unul lângă altul, la un pas mic — nu împinse
	   în colțuri opuse. Sub preț, aliniate la stânga, se citesc ca aparținând
	   biletului de deasupra. */
	.wco-qty-row { justify-content: flex-start; flex-wrap: wrap; gap: 10px; }
	.wco-line-total { flex: 1 1 100%; }
}

/* Marginea de focalizare e vizibilă și fără culoare — pentru cine navighează
   din tastatură, e singurul indiciu unde se află. */
.wco input:focus,
.wco select:focus,
.wco textarea:focus {
	outline: none;
	border-color: var(--wapp-accent, #7b76c9);
	box-shadow: 0 0 0 3px rgba(123,118,201,.22);
}

.wco label { display: block; margin-bottom: 5px; font-size: 12px; opacity: .65; }
.wco .wco-radio { display: inline-flex; margin-bottom: 0; font-size: 14px; opacity: 1; }
.wco .wco-radio input { width: auto; }

/* Câmpul cu eroare se vede ca având o problemă, nu doar textul de sub el. */
.wco .wco-has-err input,
.wco .wco-has-err select { border-color: #f0806a; }

/* ══════════════════════════════════════════════════════════════════════
   Scoaterea din coș
   ══════════════════════════════════════════════════════════════════════ */

/* Roșu, fiindcă șterge. Dar conturat, nu plin: e o acțiune disponibilă, nu una
   pe care o recomandăm. Plinul îl păstrăm pentru butonul care duce mai departe. */
.wapp-btn--danger,
.wco-remove {
	border: 1px solid rgba(240,128,106,.55);
	background: transparent;
	color: #f0806a;
	border-radius: 8px;
	font: inherit;
	font-size: 13px;
	font-weight: 600;
	padding: 7px 12px;
	cursor: pointer;
	white-space: nowrap;
	flex-shrink: 0;
}

.wapp-btn--danger:hover,
.wco-remove:hover { background: rgba(240,128,106,.12); }

.wapp-cart-clear { border-color: rgba(240,128,106,.5); color: #f0806a; opacity: .85; }
.wapp-cart-clear:hover { background: rgba(240,128,106,.12); opacity: 1; }

/* Stilurile de dans, ca bife în formă de etichetă — se aleg mai multe. */
.wco-styles-field { grid-column: 1 / -1; }
.wco-styles { display: flex; flex-wrap: wrap; gap: 7px; }

.wco-style {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	margin: 0;
	padding: 6px 11px;
	border: 1px solid var(--wapp-line, rgba(255,255,255,.14));
	border-radius: 999px;
	background: var(--wapp-card, #1c2025);
	font-size: 13px;
	opacity: 1;
	cursor: pointer;
}

.wco-style input { width: auto; }
.wco-style:has( input:checked ) { border-color: var(--wapp-accent, #7b76c9); }

/* Documentele de recitit.

   Cardul stă acum ÎN COLOANA DIN STÂNGA, ca celelalte — nu lățit peste ambele,
   cum era cu `grid-column: 1 / -1`. Un card care iese din coloană arată a altă
   pagină lipită dedesubt, nu a ultimul card al aceleiași pagini. */
.wco-docs { margin-top: 14px; }

.wco-doc { margin-top: .55rem; }

/* Titlul documentului arată ca un link, fiindcă asta face: deschide textul.
   Triunghiul implicit al lui `<details>` se scoate — ar promite o deschidere pe
   loc, iar textul se deschide în fereastră. */
.wco-doc > summary {
	cursor: pointer;
	font-size: 14px;
	font-weight: 600;
	color: var(--wapp-accent, #7b76c9);
	text-decoration: underline;
	text-underline-offset: 3px;
	list-style: none;
}

.wco-doc > summary::-webkit-details-marker { display: none; }
.wco-doc > summary::marker { content: ''; }
.wco-doc > summary:hover { opacity: .82; }

.wco-doc-body { margin-top: .7rem; font-size: 14px; line-height: 1.6; opacity: .9; }
.wco-doc-link { font-size: 14px; }

/* ══════════════════════════════════════════════════════════════════════
   Fereastra de citire a documentelor
   ══════════════════════════════════════════════════════════════════════ */

.wapp-doc-modal {
	position: fixed;
	inset: 0;
	z-index: 99999;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 18px;
	background: rgba(0,0,0,.62);
}

.wapp-doc-modal[hidden] { display: none; }

/* Înălțimea e mărginită de ecran, iar derularea e a TEXTULUI, nu a paginii:
   altfel, la închidere, omul s-ar trezi în alt loc decât cel de unde a plecat. */
.wapp-doc-box {
	display: flex;
	flex-direction: column;
	width: min(760px, 100%);
	max-height: min(82vh, 760px);
	border: 1px solid var(--wapp-line, rgba(255,255,255,.14));
	border-radius: 12px;
	background: var(--wapp-card, #1c2025);
	box-shadow: 0 24px 60px rgba(0,0,0,.5);
	overflow: hidden;
}

.wapp-doc-head {
	display: flex;
	align-items: center;
	gap: 12px;
	padding: 14px 18px;
	border-bottom: 1px solid var(--wapp-line, rgba(255,255,255,.12));
}

.wapp-doc-head h3 { margin: 0; font-size: 15px; font-weight: 600; flex: 1; min-width: 0; }

.wapp-doc-close {
	border: 0;
	background: none;
	color: inherit;
	font-size: 26px;
	line-height: 1;
	padding: 0 4px;
	cursor: pointer;
	opacity: .65;
}

.wapp-doc-close:hover { opacity: 1; }

.wapp-doc-scroll {
	overflow-y: auto;
	padding: 18px;
	font-size: 14px;
	line-height: 1.68;
}

.wapp-doc-scroll:focus { outline: none; }
.wapp-doc-scroll p:first-child { margin-top: 0; }
.wapp-doc-scroll img { max-width: 100%; height: auto; }

/* Pagina de dedesubt nu se mai derulează cât timp fereastra e deschisă. */
html.wapp-doc-open, html.wapp-doc-open body { overflow: hidden; }

/* ══════════════════════════════════════════════════════════════════════
   Ecranul de după plată
   ══════════════════════════════════════════════════════════════════════ */

.wco-done { max-width: 640px; margin: 0 auto; }
.wco-done-card { text-align: center; padding: 2rem 1.6rem; }

.wco-done-mark {
	width: 54px;
	height: 54px;
	margin: 0 auto 1rem;
	border-radius: 50%;
	display: flex;
	align-items: center;
	justify-content: center;
	font-size: 26px;
	color: #0ab39c;
	background: rgba(10,179,156,.14);
	border: 1px solid rgba(10,179,156,.4);
}

.wco-done-order {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	flex-wrap: wrap;
	justify-content: center;
	margin: 1rem 0 .4rem;
	padding: 10px 14px;
	border: 1px solid var(--wapp-line, rgba(255,255,255,.14));
	border-radius: 8px;
}

.wco-done-order strong { font-size: 16px; letter-spacing: .02em; }

/* Câmpul cu problemă se vede ca având una — nu doar textul de sub el.
   Se marchează cu un ATRIBUT, nu cu o clasă: câmpurile au deja clase proprii
   (`wco-qty`), iar un atribut nu se bate cu ele. */
.wco [data-bad] {
	border-color: #f0806a;
	box-shadow: 0 0 0 3px rgba(240,128,106,.14);
}

.wco-err--block { margin-top: .8rem; font-size: 13px; }

/* Banda de sus, când s-a încercat înaintarea cu câmpuri goale. */
.wapp-alert--danger {
	border-left: 3px solid #f0806a;
	background: rgba(240,128,106,.10);
}

/* Ieșirile de pe pagina de mulțumire. */
.wco-done-links {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	justify-content: center;
	margin-top: 1.4rem;
}

.wco-done-links .wapp-btn { display: inline-block; width: auto; padding: 9px 16px; }

/* Linia adusă la zero: se stinge, ca să se vadă ce urmează să dispară din coș
   la trimitere. Nu se ascunde — dispariția pe loc ar arăta ca o ștergere deja
   făcută, iar ea se face abia la „Mai departe". */
.wco-sum.is-off { opacity: .45; text-decoration: line-through; }

/* ══════════════════════════════════════════════════════════════════════
   CONTRAST ȘI LINII DE SUBLINIERE — paginile publice
   ══════════════════════════════════════════════════════════════════════ */

/* Textul de bază și cel șters erau prea aproape de fundal pe ecranele publice.
   Nu schimb paleta temei — o urc doar aici, unde citește cumpărătorul:
   #ced4da → #dfe4ea și #878a99 → #a9aec0. Ambele trec pragul AA pe fundalul
   nostru, iar diferența dintre „text" și „text șters" rămâne vizibilă. */
.wev, .wpub, .wco {
	--wapp-text:  #dfe4ea;
	--wapp-muted: #a9aec0;
}

.wev .wapp-muted, .wpub .wapp-muted, .wco .wapp-muted { color: var(--wapp-muted); }
.wev .wapp-intro, .wpub .wapp-intro, .wco .wapp-intro { color: var(--wapp-muted); }

/* Subliniere doar unde e nevoie de ea: în corpul unui text, ca să se distingă
   un link de restul frazei. Butoanele și cardurile care SE VĂD deja ca fiind
   de apăsat n-au nevoie de linie — pe sandbox apăreau subliniate peste tot,
   fiindcă tema site-ului subliniază orice `<a>`. */
.wev a, .wpub a, .wco a { text-decoration: none; }

.wev .wev-prose a,
.wpub .wpub-bio a,
.wco .wapp-doc-scroll a { text-decoration: underline; text-underline-offset: 2px; }

/* ── Limba, cu drapel ─────────────────────────────────────────────────── */
.wapp-lang-opt { display: inline-flex; align-items: center; gap: 7px; }

.wapp-flag {
	display: block;
	border-radius: 2px;
	/* Un contur subțire, altfel albul din drapel se pierde în cardul deschis. */
	box-shadow: 0 0 0 1px rgba(0,0,0,.25);
}

/* Deasupra biletelor, nu la subsolul coloanei. */
.wev-lang { justify-content: flex-end; margin-bottom: 10px; }

/* ── Steluța de câmp obligatoriu ──────────────────────────────────────── */
.wco-req {
	margin-left: 3px;
	color: #f0806a;
	font-weight: 700;
	cursor: help;
}

/* ── Ștergerea, ca iconiță pe linia biletului ─────────────────────────── */
.wco-remove {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 38px;
	height: 38px;
	padding: 0;
	margin-left: 10px;   /* pasul mic față de selectorul de cantitate */
	flex-shrink: 0;
}

.wco-remove svg { display: block; }

/* Bifa de termeni nebifată, când s-a încercat plata. */
.wco-tc.is-bad {
	border-radius: 8px;
	padding: 8px 10px;
	margin-left: -10px;
	margin-right: -10px;
	background: rgba(240,128,106,.10);
	box-shadow: inset 0 0 0 1px rgba(240,128,106,.45);
}
