/**
 * Estilos del módulo Plan de Mesas (Seating Plan).
 *
 * Contiene:
 * - Layout general (toolbar, panel lateral de invitados y escenario).
 * - Lienzo con cuadrícula y mesas por forma (circular, rectangular doble,
 *   presidencial/imperial y triangular) con sus sillas.
 * - Controles flotantes de mesa, modales y vista de lista.
 * - Estilos de impresión para la exportación a PDF.
 *
 * Nota: los selectores de lienzo/mesas/sillas son clases independientes
 * (no anidadas bajo .ppwp-seating) para que funcionen igualmente en la
 * ventana de impresión, donde el lienzo se clona sin su contenedor.
 *
 * @package PabloPonceWeddingPlanner
 * @since   1.0.0
 */

/* =========================================================================
   CONTENEDOR Y CABECERA
   ========================================================================= */

.ppwp-seating {
	padding: 4px 0;
	color: var(--ppwp-text-primary, #1a1a1a);
}

.ppwp-seating [hidden] {
	display: none !important;
}

/* Cabecera centrada: el título y la botonera se apilan en columna y quedan
   alineados al centro del módulo (equivalente genérico: `.tables-header-container`
   o `.tables-top-bar`). */
.ppwp-seating__header {
	display: flex;
	flex-direction: column;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	gap: 12px;
	width: 100%;
	margin-bottom: 20px;
	text-align: center;
}

.ppwp-seating__title {
	margin: 0;
	font-size: 22px;
	font-weight: 700;
	color: var(--ppwp-text-primary, #1a1a1a);
}

/* Botonera centrada (equivalente genérico: `.tables-action-buttons`). */
.ppwp-seating__toolbar {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	gap: 10px;
	width: 100%;
}

/* --- Conmutador Plano / Lista ------------------------------------------- */

.ppwp-seating__switch {
	display: inline-flex;
	padding: 3px;
	border: 1px solid var(--ppwp-border-color, #e4e4e7);
	border-radius: 999px;
	background: var(--ppwp-bg-card, #fff);
}

.ppwp-seating__switch-btn {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	padding: 7px 16px;
	border: 0;
	border-radius: 999px;
	background: transparent;
	color: var(--ppwp-text-muted, #71717a);
	font-size: 13px;
	font-weight: 600;
	cursor: pointer;
	transition: var(--ppwp-transition, 0.2s ease);
}

.ppwp-seating__switch-btn:hover {
	color: var(--ppwp-accent, #e17575);
}

.ppwp-seating__switch-btn.is-active {
	background: var(--ppwp-accent, #e17575);
	color: #fff;
}

/* =========================================================================
   LAYOUT: PANEL + ESCENARIO
   ========================================================================= */

.ppwp-seating__layout {
	display: grid;
	grid-template-columns: 300px minmax(0, 1fr);
	gap: 18px;
	align-items: start;
}

@media (max-width: 1024px) {
	.ppwp-seating__layout {
		grid-template-columns: 1fr;
	}
}

/* --- Panel lateral de invitados ----------------------------------------- */

.ppwp-seating__panel {
	display: flex;
	flex-direction: column;
	gap: 12px;
	padding: 16px;
	border: 1px solid var(--ppwp-border-color, #e4e4e7);
	border-radius: 14px;
	background: var(--ppwp-bg-card, #fff);
	box-shadow: var(--ppwp-shadow, 0 4px 20px rgba(0, 0, 0, 0.05));
}

@media (min-width: 1025px) {
	.ppwp-seating__panel {
		position: sticky;
		top: 12px;
	}
}

.ppwp-seating__panel-head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 8px;
}

.ppwp-seating__panel-title {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	margin: 0;
	font-size: 15px;
	font-weight: 700;
}

.ppwp-seating__badge {
	min-width: 26px;
	padding: 2px 9px;
	border-radius: 999px;
	background: rgba(225, 117, 117, 0.12);
	color: var(--ppwp-accent, #e17575);
	font-size: 12px;
	font-weight: 700;
	text-align: center;
}

.ppwp-seating__filters {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
}

.ppwp-seating__filter {
	padding: 5px 12px;
	border: 1px solid var(--ppwp-border-color, #e4e4e7);
	border-radius: 999px;
	background: #fff;
	color: var(--ppwp-text-muted, #71717a);
	font-size: 12px;
	font-weight: 600;
	cursor: pointer;
	transition: var(--ppwp-transition, 0.2s ease);
}

.ppwp-seating__filter:hover {
	border-color: var(--ppwp-accent, #e17575);
	color: var(--ppwp-accent, #e17575);
}

.ppwp-seating__filter.is-active {
	background: var(--ppwp-accent, #e17575);
	border-color: var(--ppwp-accent, #e17575);
	color: #fff;
}

.ppwp-seating__filters--modal {
	padding-bottom: 4px;
}

.ppwp-seating__search {
	position: relative;
	display: flex;
	align-items: center;
}

.ppwp-seating__search .ppwp-icon {
	position: absolute;
	left: 11px;
	color: var(--ppwp-text-muted, #71717a);
	pointer-events: none;
}

.ppwp-seating__search-input {
	width: 100%;
	padding: 9px 12px 9px 34px;
	border: 1px solid var(--ppwp-border-color, #e4e4e7);
	border-radius: 10px;
	background: #fff;
	font-size: 13px;
	color: var(--ppwp-text-primary, #1a1a1a);
	outline: none;
	transition: var(--ppwp-transition, 0.2s ease);
}

.ppwp-seating__search-input:focus {
	border-color: var(--ppwp-accent, #e17575);
	box-shadow: 0 0 0 3px rgba(225, 117, 117, 0.12);
}

.ppwp-seating__guest-list {
	display: flex;
	flex-direction: column;
	gap: 6px;
	max-height: 52vh;
	overflow-y: auto;
	padding-right: 2px;
}

.ppwp-seating__guest-list--modal {
	max-height: 46vh;
}

.ppwp-seating__empty {
	margin: 0;
	padding: 18px 8px;
	color: var(--ppwp-text-muted, #71717a);
	font-size: 13px;
	text-align: center;
}

.ppwp-seating__hint {
	margin: 0;
	color: var(--ppwp-text-muted, #71717a);
	font-size: 11.5px;
	line-height: 1.45;
}

/* --- Fila de invitado ---------------------------------------------------- */

.ppwp-seating__guest {
	display: flex;
	align-items: center;
	gap: 10px;
	padding: 8px 10px;
	border: 1px solid var(--ppwp-border-color, #e4e4e7);
	border-radius: 10px;
	background: #fff;
	cursor: grab;
	transition: var(--ppwp-transition, 0.2s ease);
}

.ppwp-seating__guest:hover {
	border-color: var(--ppwp-accent, #e17575);
	transform: translateX(2px);
}

.ppwp-seating__guest.is-selected {
	border-color: var(--ppwp-accent, #e17575);
	background: rgba(225, 117, 117, 0.08);
	box-shadow: 0 0 0 2px rgba(225, 117, 117, 0.18);
}

.ppwp-seating__guest.is-dragging {
	opacity: 0.45;
	cursor: grabbing;
}

.ppwp-seating__guest-avatar {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	flex: 0 0 auto;
	width: 30px;
	height: 30px;
	border-radius: 50%;
	background: hsl(var(--ppwp-av-h, 342) 62% 64%);
	color: #fff;
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 0.4px;
}

.ppwp-seating__guest-info {
	display: flex;
	flex-direction: column;
	min-width: 0;
	flex: 1 1 auto;
}

.ppwp-seating__guest-name {
	overflow: hidden;
	color: var(--ppwp-text-primary, #1a1a1a);
	font-size: 13px;
	font-weight: 600;
	text-overflow: ellipsis;
	white-space: nowrap;
}

.ppwp-seating__guest-meta {
	color: var(--ppwp-text-muted, #71717a);
	font-size: 11px;
}

.ppwp-seating__guest-tag {
	flex: 0 0 auto;
	max-width: 88px;
	overflow: hidden;
	padding: 2px 8px;
	border-radius: 999px;
	font-size: 10px;
	font-weight: 700;
	text-overflow: ellipsis;
	white-space: nowrap;
}

.ppwp-seating__guest-tag.is-seated {
	background: rgba(70, 160, 110, 0.14);
	color: #2f7d55;
}

.ppwp-seating__guest-tag.is-unseated {
	background: rgba(0, 0, 0, 0.06);
	color: var(--ppwp-text-muted, #71717a);
}

/* =========================================================================
   ESCENARIO / LIENZO
   ========================================================================= */

.ppwp-seating__stage {
	min-width: 0;
}

/* Viewport del lienzo (equivalente genérico: `.tables-canvas-viewport`).
   Confina el plano a la ventana del módulo y recorta lo que sobresalga
   (`overflow: hidden`), de modo que la navegación se hace con el zoom y no con
   barras de desplazamiento. La cuadrícula se pinta AQUÍ y no en la capa de
   objetos, para que cubra siempre el 100% del contenedor y nunca queden huecos
   grises a la derecha del plano. */
.ppwp-seating__canvas-wrap {
	position: relative;
	width: 100%;
	max-width: 100%;
	height: calc(100vh - 220px);
	min-height: 480px;
	overflow: hidden;
	border: 1px solid var(--ppwp-border-color, #e4e4e7);
	border-radius: 12px;
	background-color: #fff;
	background-image:
		linear-gradient(to right, rgba(0, 0, 0, 0.05) 1px, transparent 1px),
		linear-gradient(to bottom, rgba(0, 0, 0, 0.05) 1px, transparent 1px);
	background-size: var(--ppwp-seating-grid, 20px) var(--ppwp-seating-grid, 20px);
	background-position: 0 0;
	box-shadow: var(--ppwp-shadow, 0 4px 20px rgba(0, 0, 0, 0.05));
	touch-action: none;
}

/* Capa de objetos (equivalente genérico: `.tables-objects-layer`). Es
   transparente y sin cuadrícula: sólo contiene las mesas. Conserva su tamaño
   lógico (2000x1400 px, fijado por `js/seating.js` en `init()` con estilos en
   línea) porque las posiciones de las mesas se guardan en esas coordenadas; el
   zoom se aplica escalándola con `--ppwp-seating-zoom`. */
.ppwp-seating__canvas {
	position: relative;
	transform-origin: 0 0;
	transform: scale(var(--ppwp-seating-zoom, 1));
	transition: transform 0.1s ease-out;
	background: transparent;
}

/* Escritorio: el contenedor principal ocupa el espacio sobrante de la ventana y
   recorta el desborde, con lo que no se activan barras de scroll globales
   (equivalente genérico: `.tables-main-wrapper`). El escenario se convierte en
   columna flexible para que el viewport rellene toda la altura disponible.

   Reserva de altura = 200px: 24px (padding vertical de 12px del app shell,
   definido en public/css/ppwp-app-fullscreen.css) + 56px (barra superior del
   planificador) + ~105px (cabecera del módulo: título + botonera + margen) +
   ~15px de holgura. Con ello el módulo SIEMPRE encaja dentro de
   `.ppwp-content-area` sin provocar una barra de scroll interna. */
@media (min-width: 1025px) {
	.ppwp-seating__layout {
		grid-template-rows: minmax(0, 1fr);
		align-items: stretch;
		height: calc(100vh - 200px);
		overflow: hidden;
	}

	.ppwp-seating__panel {
		min-height: 0;
	}

	.ppwp-seating__stage {
		display: flex;
		flex-direction: column;
		min-height: 0;
	}

	.ppwp-seating__canvas-wrap {
		flex: 1 1 auto;
		height: auto;
		min-height: 0;
	}
}

/* --- Controles flotantes de zoom ---------------------------------------- */

.ppwp-seating__canvas-wrap .canvas-zoom-controls {
	position: absolute;
	right: 14px;
	bottom: 14px;
	z-index: 20;
	display: flex;
	align-items: center;
	gap: 4px;
	padding: 5px;
	border: 1px solid var(--ppwp-border-color, #e4e4e7);
	border-radius: 999px;
	background: rgba(255, 255, 255, 0.94);
	box-shadow: 0 6px 18px rgba(0, 0, 0, 0.14);
	backdrop-filter: blur(4px);
}

.ppwp-seating__canvas-wrap .canvas-zoom-controls button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 34px;
	height: 34px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: transparent;
	color: var(--ppwp-text-primary, #1a1a1a);
	font-family: inherit;
	font-size: 18px;
	font-weight: 700;
	line-height: 1;
	cursor: pointer;
	transition: var(--ppwp-transition, 0.2s ease);
}

.ppwp-seating__canvas-wrap .canvas-zoom-controls button:hover,
.ppwp-seating__canvas-wrap .canvas-zoom-controls button:focus-visible {
	background: rgba(225, 117, 117, 0.14);
	color: var(--ppwp-accent, #e17575);
	outline: none;
}

.ppwp-seating__canvas-wrap .canvas-zoom-controls button:active {
	transform: scale(0.94);
}

.ppwp-seating__canvas-wrap #zoom-level-text {
	min-width: 48px;
	color: var(--ppwp-text-muted, #71717a);
	font-size: 12px;
	font-weight: 700;
	text-align: center;
	font-variant-numeric: tabular-nums;
}

/* Aviso de plano vacío: vive en el viewport (no en la capa de objetos) para
   quedar centrado en la ventana visible a cualquier nivel de zoom. */
.ppwp-seating__canvas-empty {
	position: absolute;
	top: 50%;
	left: 50%;
	z-index: 5;
	width: 420px;
	max-width: 80%;
	margin: 0;
	padding: 0 16px;
	transform: translate(-50%, -50%);
	color: var(--ppwp-text-muted, #71717a);
	font-size: 14px;
	line-height: 1.5;
	text-align: center;
	pointer-events: none;
}

/* =========================================================================
   MESA
   ========================================================================= */

.ppwp-seating__table {
	position: absolute;
	touch-action: none;
	cursor: grab;
	user-select: none;
}

.ppwp-seating__table.is-dragging {
	cursor: grabbing;
	z-index: 50;
}

.ppwp-seating__table-rotor {
	position: absolute;
	top: 0;
	right: 0;
	bottom: 0;
	left: 0;
	transform: rotate(var(--ppwp-rot, 0deg));
	transition: transform 0.25s ease;
}

.ppwp-seating__table.is-dragging .ppwp-seating__table-rotor {
	transition: none;
}

/* --- Superficie de la mesa ---------------------------------------------- */

.ppwp-seating__tabletop {
	position: absolute;
	z-index: 1;
	background: linear-gradient(160deg, #ffffff 0%, #f7efec 100%);
	border: 2px solid rgba(225, 117, 117, 0.55);
	box-shadow: 0 6px 16px rgba(0, 0, 0, 0.07), inset 0 0 0 1px rgba(255, 255, 255, 0.8);
}

.ppwp-seating__tabletop--circular {
	border-radius: 50%;
}

.ppwp-seating__tabletop--rectangular_double,
.ppwp-seating__tabletop--imperial {
	border-radius: 12px;
	background: linear-gradient(160deg, #ffffff 0%, #f4f0ee 100%);
}

.ppwp-seating__tabletop--triangular {
	background: linear-gradient(160deg, #ffffff 0%, #f7efec 100%);
	clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
}

/* --- Nombre de la mesa (centrado, contra-rotado) ------------------------ */

.ppwp-seating__table-name {
	position: absolute;
	top: 50%;
	left: 50%;
	z-index: 4;
	max-width: 60%;
	overflow: hidden;
	padding: 3px 10px;
	border-radius: 999px;
	background: rgba(255, 255, 255, 0.92);
	box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08);
	color: var(--ppwp-text-primary, #1a1a1a);
	font-size: 11px;
	font-weight: 700;
	line-height: 1.3;
	text-align: center;
	text-overflow: ellipsis;
	white-space: nowrap;
	pointer-events: none;
}

/* --- Sillas -------------------------------------------------------------- */

.ppwp-seating__chair {
	position: absolute;
	z-index: 3;
	width: 38px;
	height: 38px;
	padding: 0;
	border: 0;
	background: transparent;
	transform: translate(-50%, -50%);
	cursor: pointer;
}

.ppwp-seating__chair-face {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 100%;
	height: 100%;
	border: 2px solid #fff;
	border-radius: 50%;
	background: hsl(var(--ppwp-av-h, 342) 62% 64%);
	box-shadow: 0 3px 8px rgba(0, 0, 0, 0.16);
	color: #fff;
	transform: rotate(calc(-1 * var(--ppwp-rot, 0deg)));
	transition: var(--ppwp-transition, 0.2s ease);
}

.ppwp-seating__chair-initials {
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 0.3px;
}

.ppwp-seating__chair.is-seated:hover .ppwp-seating__chair-face {
	transform: rotate(calc(-1 * var(--ppwp-rot, 0deg))) scale(1.12);
}

.ppwp-seating__chair-face--free {
	background: rgba(255, 255, 255, 0.92);
	border: 2px dashed rgba(225, 117, 117, 0.6);
	color: var(--ppwp-accent, #e17575);
}

.ppwp-seating__chair-plus {
	width: 15px;
	height: 15px;
}

.ppwp-seating__chair.is-empty:hover .ppwp-seating__chair-face--free,
.ppwp-seating__chair.is-drop .ppwp-seating__chair-face--free {
	border-style: solid;
	border-color: var(--ppwp-accent, #e17575);
	background: var(--ppwp-accent, #e17575);
	color: #fff;
	box-shadow: 0 0 0 4px rgba(225, 117, 117, 0.22);
}

.ppwp-seating__chair.is-drop .ppwp-seating__chair-face--free {
	transform: rotate(calc(-1 * var(--ppwp-rot, 0deg))) scale(1.15);
}

.ppwp-seating__chair-name {
	position: absolute;
	top: 100%;
	left: 50%;
	max-width: 92px;
	overflow: hidden;
	padding: 1px 6px;
	border-radius: 999px;
	background: rgba(255, 255, 255, 0.92);
	box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
	color: var(--ppwp-text-primary, #1a1a1a);
	font-size: 9.5px;
	font-weight: 600;
	line-height: 1.4;
	text-overflow: ellipsis;
	white-space: nowrap;
	transform: translateX(-50%) rotate(calc(-1 * var(--ppwp-rot, 0deg)));
	pointer-events: none;
}

.ppwp-seating__table.is-dense .ppwp-seating__chair-name {
	display: none;
}

/* --- Menú flotante de acciones ------------------------------------------ */

.ppwp-seating__table-actions {
	position: absolute;
	top: -12px;
	right: -12px;
	z-index: 6;
	display: flex;
	gap: 4px;
	opacity: 0;
	transform: translateY(-4px);
	transition: var(--ppwp-transition, 0.2s ease);
}

.ppwp-seating__table:hover .ppwp-seating__table-actions,
.ppwp-seating__table.is-dragging .ppwp-seating__table-actions,
.ppwp-seating__table-actions:focus-within {
	opacity: 1;
	transform: translateY(0);
}

.ppwp-seating__action {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 28px;
	height: 28px;
	padding: 0;
	border: 1px solid var(--ppwp-border-color, #e4e4e7);
	border-radius: 50%;
	background: #fff;
	color: var(--ppwp-text-muted, #71717a);
	cursor: pointer;
	box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
	transition: var(--ppwp-transition, 0.2s ease);
}

.ppwp-seating__action:hover {
	border-color: var(--ppwp-accent, #e17575);
	background: var(--ppwp-accent, #e17575);
	color: #fff;
}

.ppwp-seating__action[data-act="delete"]:hover {
	border-color: #d64545;
	background: #d64545;
}

/* =========================================================================
   VISTA LISTA
   ========================================================================= */

.ppwp-seating__list {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
	gap: 16px;
}

.ppwp-seating__list-group {
	padding: 14px 16px;
	border: 1px solid var(--ppwp-border-color, #e4e4e7);
	border-radius: 14px;
	background: var(--ppwp-bg-card, #fff);
	box-shadow: var(--ppwp-shadow, 0 4px 20px rgba(0, 0, 0, 0.05));
}

.ppwp-seating__list-head {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 8px;
	margin-bottom: 10px;
	padding-bottom: 8px;
	border-bottom: 1px solid var(--ppwp-border-color, #e4e4e7);
}

.ppwp-seating__list-title {
	margin: 0;
	font-size: 15px;
	font-weight: 700;
}

.ppwp-seating__list-meta {
	color: var(--ppwp-text-muted, #71717a);
	font-size: 12px;
	font-weight: 600;
}

.ppwp-seating__list-seats {
	display: flex;
	flex-direction: column;
	gap: 5px;
}

.ppwp-seating__list-seat {
	display: flex;
	align-items: center;
	gap: 9px;
	padding: 5px 8px;
	border-radius: 9px;
	background: rgba(0, 0, 0, 0.025);
	font-size: 13px;
}

.ppwp-seating__list-seat.is-empty {
	cursor: pointer;
	border: 1px dashed var(--ppwp-border-color, #e4e4e7);
	background: transparent;
	color: var(--ppwp-text-muted, #71717a);
}

.ppwp-seating__list-seat.is-empty:hover {
	border-color: var(--ppwp-accent, #e17575);
	color: var(--ppwp-accent, #e17575);
}

.ppwp-seating__list-no {
	flex: 0 0 auto;
	width: 20px;
	color: var(--ppwp-text-muted, #71717a);
	font-size: 11px;
	font-weight: 700;
	text-align: center;
}

.ppwp-seating__list-name {
	flex: 1 1 auto;
	overflow: hidden;
	font-weight: 600;
	text-overflow: ellipsis;
	white-space: nowrap;
}

.ppwp-seating__list-name--free {
	font-weight: 500;
	font-style: italic;
}

.ppwp-seating__list-party {
	flex: 0 0 auto;
}

.ppwp-seating__list-remove {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	flex: 0 0 auto;
	width: 24px;
	height: 24px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: rgba(0, 0, 0, 0.05);
	color: var(--ppwp-text-muted, #71717a);
	cursor: pointer;
	transition: var(--ppwp-transition, 0.2s ease);
}

.ppwp-seating__list-remove:hover {
	background: #d64545;
	color: #fff;
}

.ppwp-seating__list-chips {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
}

.ppwp-seating__chip {
	padding: 4px 10px;
	border: 1px solid var(--ppwp-border-color, #e4e4e7);
	border-radius: 999px;
	background: #fff;
	font-size: 12px;
	font-weight: 600;
}

/* =========================================================================
   MODALES
   ========================================================================= */

.ppwp-seating__modal-overlay {
	position: fixed;
	inset: 0;
	z-index: 100000;
	display: none;
	align-items: center;
	justify-content: center;
	padding: 20px;
	background: rgba(20, 16, 16, 0.45);
	backdrop-filter: blur(2px);
}

.ppwp-seating__modal-overlay.is-open {
	display: flex;
}

body.ppwp-seating-modal-open {
	overflow: hidden;
}

.ppwp-seating__modal {
	display: flex;
	flex-direction: column;
	width: 100%;
	max-width: 460px;
	max-height: 88vh;
	overflow: hidden;
	border-radius: 16px;
	background: var(--ppwp-bg-card, #fff);
	box-shadow: 0 24px 60px rgba(0, 0, 0, 0.28);
	animation: ppwpSeatingModalIn 0.22s ease;
}

.ppwp-seating__modal--wide {
	max-width: 560px;
}

.ppwp-seating__modal--small {
	max-width: 380px;
}

@keyframes ppwpSeatingModalIn {
	from {
		opacity: 0;
		transform: translateY(14px) scale(0.97);
	}
	to {
		opacity: 1;
		transform: translateY(0) scale(1);
	}
}

.ppwp-seating__modal-head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 10px;
	padding: 16px 20px;
	border-bottom: 1px solid var(--ppwp-border-color, #e4e4e7);
}

.ppwp-seating__modal-title {
	margin: 0;
	font-size: 16px;
	font-weight: 700;
}

.ppwp-seating__modal-close {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 32px;
	height: 32px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: rgba(0, 0, 0, 0.05);
	color: var(--ppwp-text-muted, #71717a);
	cursor: pointer;
	transition: var(--ppwp-transition, 0.2s ease);
}

.ppwp-seating__modal-close:hover {
	background: rgba(225, 117, 117, 0.15);
	color: var(--ppwp-accent, #e17575);
}

.ppwp-seating__modal-body {
	display: flex;
	flex-direction: column;
	gap: 16px;
	padding: 20px;
	overflow-y: auto;
}

.ppwp-seating__modal-actions {
	display: flex;
	justify-content: flex-end;
	gap: 10px;
	padding: 14px 20px;
	border-top: 1px solid var(--ppwp-border-color, #e4e4e7);
	background: rgba(0, 0, 0, 0.015);
}

.ppwp-seating__field {
	display: flex;
	flex-direction: column;
	gap: 7px;
}

.ppwp-seating__label {
	color: var(--ppwp-text-muted, #71717a);
	font-size: 12px;
	font-weight: 700;
	letter-spacing: 0.3px;
	text-transform: uppercase;
}

.ppwp-seating__input {
	width: 100%;
	padding: 10px 12px;
	border: 1px solid var(--ppwp-border-color, #e4e4e7);
	border-radius: 10px;
	font-size: 14px;
	color: var(--ppwp-text-primary, #1a1a1a);
	outline: none;
	transition: var(--ppwp-transition, 0.2s ease);
}

.ppwp-seating__input:focus,
.ppwp-seating__capacity:focus {
	border-color: var(--ppwp-accent, #e17575);
	box-shadow: 0 0 0 3px rgba(225, 117, 117, 0.12);
}

/* --- Selector de diseño de mesa ----------------------------------------- */

.ppwp-seating__shape-list {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 10px;
}

.ppwp-seating__shape {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 7px;
	padding: 14px 10px;
	border: 1.5px solid var(--ppwp-border-color, #e4e4e7);
	border-radius: 12px;
	background: #fff;
	color: var(--ppwp-text-muted, #71717a);
	cursor: pointer;
	transition: var(--ppwp-transition, 0.2s ease);
}

.ppwp-seating__shape:hover {
	border-color: var(--ppwp-accent, #e17575);
	color: var(--ppwp-accent, #e17575);
}

.ppwp-seating__shape.is-active {
	border-color: var(--ppwp-accent, #e17575);
	background: rgba(225, 117, 117, 0.08);
	color: var(--ppwp-accent, #e17575);
	box-shadow: 0 0 0 2px rgba(225, 117, 117, 0.18);
}

.ppwp-seating__shape-label {
	font-size: 12px;
	font-weight: 700;
	text-align: center;
}

/* --- Stepper de capacidad ------------------------------------------------ */

.ppwp-seating__stepper {
	display: inline-flex;
	align-items: center;
	gap: 8px;
}

.ppwp-seating__stepper-btn {
	width: 38px;
	height: 38px;
	padding: 0;
	border: 1px solid var(--ppwp-border-color, #e4e4e7);
	border-radius: 10px;
	background: #fff;
	color: var(--ppwp-text-primary, #1a1a1a);
	font-size: 18px;
	font-weight: 700;
	line-height: 1;
	cursor: pointer;
	transition: var(--ppwp-transition, 0.2s ease);
}

.ppwp-seating__stepper-btn:hover {
	border-color: var(--ppwp-accent, #e17575);
	color: var(--ppwp-accent, #e17575);
}

.ppwp-seating__capacity {
	width: 74px;
	padding: 9px 6px;
	border: 1px solid var(--ppwp-border-color, #e4e4e7);
	border-radius: 10px;
	font-size: 15px;
	font-weight: 700;
	text-align: center;
	outline: none;
}

.ppwp-seating__capacity::-webkit-outer-spin-button,
.ppwp-seating__capacity::-webkit-inner-spin-button {
	margin: 0;
	-webkit-appearance: none;
}

.ppwp-seating__preview {
	margin: 0;
	color: var(--ppwp-text-muted, #71717a);
	font-size: 12px;
}

/* --- Prevención de scroll horizontal en los modales ---------------------- */
/* `.ppwp-seating__modal-body` declara solo `overflow-y: auto`; por
   especificación CSS el eje no declarado computa de `visible` a `auto`, de
   modo que cualquier hijo que desborde en horizontal añade una barra. El
   desborde lo provoca sobre todo `.ppwp-seating__input` (100% + padding +
   borde) y las tarjetas del grid de diseños al no usar `border-box`.
   Equivalencias con la nomenclatura genérica de la especificación:
   `.modal-content` -> `.ppwp-seating__modal`,
   `.modal-body`    -> `.ppwp-seating__modal-body`,
   `.table-designs-grid` -> `.ppwp-seating__shape-list`. */

.ppwp-seating__modal,
.ppwp-seating__modal-body {
	overflow-x: hidden !important;
	box-sizing: border-box;
}

.ppwp-seating__modal-body,
.ppwp-seating__modal-body > *,
.ppwp-seating__field,
.ppwp-seating__shape-list,
.ppwp-seating__stepper {
	max-width: 100%;
	min-width: 0;
}

.ppwp-seating__input,
.ppwp-seating__capacity,
.ppwp-seating__shape,
.ppwp-seating__stepper-btn {
	box-sizing: border-box;
	max-width: 100%;
}

.ppwp-seating__input {
	width: 100%;
}

.ppwp-seating__shape-list {
	width: 100%;
	grid-template-columns: repeat(2, minmax(0, 1fr));
}

.ppwp-seating__shape {
	width: 100%;
	min-width: 0;
	overflow-wrap: anywhere;
}

/* --- Selector de invitado (modal) --------------------------------------- */

.ppwp-seating__pick {
	display: flex;
	align-items: center;
	gap: 10px;
	width: 100%;
	padding: 9px 11px;
	border: 1px solid var(--ppwp-border-color, #e4e4e7);
	border-radius: 10px;
	background: #fff;
	color: var(--ppwp-text-primary, #1a1a1a);
	text-align: left;
	cursor: pointer;
	transition: var(--ppwp-transition, 0.2s ease);
}

.ppwp-seating__pick:hover {
	border-color: var(--ppwp-accent, #e17575);
	background: rgba(225, 117, 117, 0.05);
}

.ppwp-seating__pick.is-current {
	border-color: var(--ppwp-accent, #e17575);
	background: rgba(225, 117, 117, 0.1);
}

.ppwp-seating__pick-info {
	display: flex;
	flex-direction: column;
	min-width: 0;
	flex: 1 1 auto;
}

/* =========================================================================
   IMPRESIÓN
   ========================================================================= */

@media print {
	.ppwp-seating__panel,
	.ppwp-seating__toolbar,
	.ppwp-seating__modal-overlay,
	.ppwp-seating__table-actions,
	.ppwp-seating__canvas-wrap .canvas-zoom-controls {
		display: none !important;
	}

	/* El layout y el escenario vuelven al flujo normal para no recortar el
	   plano impreso (el recorte a 100vh es sólo para pantalla). */
	.ppwp-seating__layout {
		height: auto !important;
		overflow: visible !important;
		grid-template-rows: auto !important;
	}

	.ppwp-seating__stage {
		display: block !important;
	}

	.ppwp-seating__canvas-wrap {
		overflow: visible;
		border: 0;
		box-shadow: none;
	}
}

/* Lienzo clonado dentro de la ventana de exportación a PDF. */
.ppwp-seating__canvas--print {
	width: 100%;
	height: 100%;
	/* El clon hereda el atributo `style` del lienzo original (con la variable
	   de zoom); se neutraliza para imprimir siempre a escala 1:1. */
	--ppwp-seating-zoom: 1;
	transform: none !important;
	/* La capa de objetos ya no lleva cuadrícula (ahora vive en el viewport), así
	   que se la devolvemos al clon para que el plano exportado conserve la
	   retícula. */
	background-color: #fcfbfa;
	background-image:
		linear-gradient(rgba(225, 117, 117, 0.09) 1px, transparent 1px),
		linear-gradient(90deg, rgba(225, 117, 117, 0.09) 1px, transparent 1px),
		linear-gradient(rgba(0, 0, 0, 0.035) 1px, transparent 1px),
		linear-gradient(90deg, rgba(0, 0, 0, 0.035) 1px, transparent 1px);
	background-size: 100px 100px, 100px 100px, 20px 20px, 20px 20px;
	-webkit-print-color-adjust: exact;
	print-color-adjust: exact;
}

.ppwp-seating__canvas--print .ppwp-seating__chair-name {
	display: block;
}
