/*==============================================================================
 * iChess Table Library (.ic-table)
 * ----------------------------------------------------------------------------
 * Shared CSS + markup guidelines for data tables, result lists, and board
 * galleries. Depends on Bootstrap 5 RTL (already loaded site-wide).
 *
 * STRUCTURE
 *   .ic-table                 Root wrapper (page section or modal body)
 *   .ic-table-title           Section heading above a table
 *   .ic-table-controls        Limit / sort dropdown row
 *   .ic-table-control         One labeled control inside the toolbar
 *   .ic-table-nav             Pagination bar (top / bottom)
 *   .ic-table-nav-btns        Prev or next button group
 *   .ic-table-nav-btn         Bootstrap outline nav button
 *   .ic-table-results         "Showing X–Y of Z" text
 *   .ic-table-wrap            Scroll / overflow host for the <table>
 *   .ic-table-grid            The data <table> itself
 *   .ic-table-boards          Board / game card gallery (grid of previews)
 *   .ic-table-board-card      One game preview card
 *   .ic-table-compact         Denser spacing (modals / dialogs)
 *   .ic-table-num             Numeric / centered column
 *   .ic-table-actions         Options / button column
 *
 * MOBILE (≤768px)
 *   Data rows become cards; header row is hidden; each cell shows its
 *   data-label (set via icTableSyncLabels() or manually on <th>/<td>).
 *
 * BOARD GALLERIES
 *   Use .ic-table-boards on a <table> with one game per row/cell.
 *   CSS grid lays out cards; stacks to one column on mobile.
 *============================================================================*/

.ic-table,
.ic-table *,
.ic-table .ic-table-wrap,
.ic-table .ic-table-nav,
.ic-table .ic-table-controls,
.ic-table .ic-table-grid,
.ic-table .ic-table-boards {
	box-sizing: border-box;
}

.ic-table {
	width: 100%;
	max-width: 100%;
	min-width: 0;
	overflow: visible;
	direction: rtl;
	text-align: right;
}

.ic-table div,
.ic-table .ic-table-wrap,
.ic-table .ic-table-nav,
.ic-table .ic-table-controls,
.ic-table .ic-table-control,
.ic-table .ic-field,
.ic-table .row,
.ic-table [class*="col-"] {
	overflow: visible;
}

.ic-table-title {
	margin: 0 0 0.65rem;
	padding: 0;
	font-size: 1.35rem;
	font-weight: 700;
	line-height: 1.3;
	color: var(--ic-heading-secondary);
}

.ic-table-header {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 0.5rem 1rem;
	margin: 0 0 1rem;
	padding: 0;
	overflow: visible;
}

.ic-table-header .ic-table-title {
	margin: 0;
	flex: 1 1 auto;
	min-width: 0;
}

.ic-table-header .btn,
.ic-table-header input.ichess_button,
.ic-table-header input.jschess_button {
	flex: 0 0 auto;
	white-space: nowrap;
}

.ic-table-header input.ichess_button,
.ic-table-header input.jschess_button {
	margin: 0;
}

/* ---- Limit / sort controls (select size matches .ic-form controls) ---- */

.ic-table-controls {
	display: flex;
	flex-direction: row;
	flex-wrap: wrap;
	align-items: flex-start;
	gap: 0.35rem 0.75rem;
	margin: 0;
	padding: 0;
	background: transparent;
	border: none;
	border-radius: 0;
	overflow: visible;
}

.ic-table-control {
	display: flex;
	flex-direction: column;
	align-items: stretch;
	gap: 0.2rem;
	flex: 0 0 11rem;
	width: 11rem;
	max-width: 100%;
	min-width: 0;
	overflow: visible;
}

.ic-table-control-label {
	display: block;
	margin: 0;
	padding: 0;
	font-size: 0.75rem;
	font-weight: 500;
	line-height: 1.2;
	color: var(--ic-muted);
	text-align: right;
	white-space: nowrap;
}

/* Same chrome / size as forms.css .form-select (no compact overrides) */
.ic-table select.form-select,
.ic-table-control select.form-select,
.ic-table-control select {
	display: block !important;
	width: 100% !important;
	max-width: 100% !important;
	min-width: 0;
	margin: 0 !important;
	box-sizing: border-box !important;
	border-radius: 8px;
	border: 1px solid var(--ic-control-border);
	background-color: var(--ic-surface);
	color: var(--ic-text);
	text-align: right;
	direction: rtl;
	transition: border-color 0.15s ease, box-shadow 0.15s ease;
}

.ic-table select.form-select:focus,
.ic-table-control select.form-select:focus,
.ic-table-control select:focus {
	border-color: var(--ic-teal);
	box-shadow: 0 0 0 0.2rem var(--ic-focus-ring);
	outline: 0;
}

.ic-table select.form-select:disabled,
.ic-table-control select.form-select:disabled {
	background-color: var(--ic-disabled-bg);
	opacity: 1;
	cursor: not-allowed;
}

/* ---- Pagination nav (mirrors .ic-notes-nav) ---- */

.ic-table-nav {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.5rem 0.75rem;
	margin: 0.5rem 0;
	padding: 0.35rem 0;
	overflow: visible;
}

/*
 * Toolbar: one horizontal line when width allows
 *   [◀◀ ◀ ▶ ▶▶] [results…] [limit] [sort]
 * Same full bar above and below the table.
 * Wraps to 2–3 lines only when the row runs out of space.
 */
.ic-table-nav.ic-table-toolbar {
	flex-direction: row;
	flex-wrap: nowrap;
	justify-content: flex-start;
	align-items: center;
	gap: 0.35rem 0.75rem;
	padding: 0.4rem 0.65rem;
	background: var(--ic-toolbar-bg);
	background: color-mix(in srgb, var(--ic-wash) 72%, var(--ic-menu-bg));
	border: 1px solid var(--ic-toolbar-border);
	border: 1px solid color-mix(in srgb, var(--ic-wash) 85%, var(--ic-teal));
	border-radius: 0.5rem;
}

.ic-table-nav.ic-table-toolbar .ic-table-nav-btns {
	flex: 0 0 auto;
	align-self: center;
}

.ic-table-nav.ic-table-toolbar .ic-table-results {
	flex: 1 1 auto;
	min-width: 0;
	align-self: center;
	text-align: center;
	font-size: 0.85rem;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

.ic-table-nav.ic-table-toolbar .ic-table-controls {
	flex: 0 0 auto;
	flex-direction: row;
	flex-wrap: nowrap;
	align-items: flex-start;
	margin: 0;
}

.ic-table-nav-top {
	justify-content: flex-start;
}

.ic-table-nav-bottom {
	justify-content: flex-end;
}

.ic-table-nav-btns {
	display: inline-flex;
	flex-wrap: nowrap;
	align-items: center;
	gap: 0.35rem;
}

.ic-table-nav-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 2.25rem;
	min-height: 2.25rem;
	padding: 0.35rem 0.55rem;
	line-height: 1;
}

.ic-table-nav-btn:disabled {
	opacity: 0.45;
	cursor: not-allowed;
}

.ic-table-results {
	flex: 1 1 auto;
	min-width: 0;
	text-align: center;
	font-size: 0.9rem;
	color: var(--ic-teal-dark);
	overflow-wrap: anywhere;
}

/* ---- Data table ---- */

.ic-table-wrap {
	width: 100%;
	max-width: 100%;
	min-width: 0;
	margin: 0.35rem 0;
	overflow-x: auto;
	overflow-y: visible;
	-webkit-overflow-scrolling: touch;
}

table.ic-table-grid {
	width: 100%;
	max-width: none;
	min-width: 100%;
	margin: 0;
	border-collapse: collapse;
	table-layout: auto;
	direction: rtl;
	background: var(--ic-surface);
	border: 1px solid var(--ic-border);
	border-radius: 0.5rem;
	overflow: hidden;
}

.ic-table-grid > thead > tr > th,
.ic-table-grid > tr:first-child > th,
.ic-table-grid thead th,
.ic-table-grid > tbody > tr > th,
.ic-table table.ic-table-grid th {
	padding: 0.4rem 0.55rem !important;
	font-size: 0.95rem;
	font-weight: 700;
	line-height: 1.3 !important;
	color: var(--ic-teal-dark);
	background: var(--ic-th-bg);
	border-width: 0 !important;
	border-bottom: 2px solid var(--ic-wash) !important;
	text-align: right !important;
	vertical-align: middle !important;
	white-space: nowrap !important;
}

/*
 * Data cells — beat legacy common.css:
 *   td { padding: 2px }
 *   p  { line-height: 18px }
 * Desktop: nowrap so multi-column tables don't wrap mid-word.
 * Mobile card layout re-enables wrapping below.
 * Alignment: always right (same as legacy td/th), including .number.
 * Background: zebra rules below own it (do not set transparent here).
 */
.ic-table table.ic-table-grid > tbody > tr > td,
.ic-table table.ic-table-grid > tr > td,
.ic-table .ic-table-grid td {
	padding: 0.4rem 0.55rem !important;
	height: auto !important;
	font-size: 0.95rem;
	line-height: 1.35 !important;
	color: var(--ic-text);
	border-width: 0 !important;
	border-bottom: 1px solid var(--ic-border) !important;
	border-spacing: 0 !important;
	vertical-align: middle !important;
	text-align: right !important;
	white-space: nowrap !important;
	overflow-wrap: normal;
	word-break: normal;
}

.ic-table table.ic-table-grid {
	table-layout: auto !important;
	border-spacing: 0 !important;
}

.ic-table-grid th p,
.ic-table-grid td p,
.ic-table .ic-table-grid td p,
.ic-table .ic-table-grid td > p {
	margin: 0 !important;
	padding: 0 !important;
	line-height: 1.35 !important;
	font-size: inherit;
	white-space: inherit;
	text-align: inherit !important;
	background: transparent !important;
}

.ic-table .ic-table-grid td .user_icon,
.ic-table .ic-table-grid td .user_icon a,
.ic-table .ic-table-grid td a {
	line-height: 1.35 !important;
}

/*
 * Zebra striping — match SortableTable class names:
 *   rowodd / nth-child(odd)  = gray-blue stripe (--ic-row-odd)
 *   roweven / nth-child(even) = white (--ic-row-even)
 */
.ic-table .ic-table-grid > tbody > tr:nth-child(odd) > td,
.ic-table table.ic-table-grid > tbody > tr:nth-child(odd) > td,
.ic-table .ic-table-grid tbody tr:nth-child(odd) > td,
.ic-table .ic-table-grid > tbody > tr.rowodd > td,
.ic-table table.ic-table-grid > tbody > tr.rowodd > td,
.ic-table .ic-table-grid tr.rowodd > td {
	background-color: var(--ic-row-odd) !important;
	background-image: none !important;
}

.ic-table .ic-table-grid > tbody > tr:nth-child(even) > td,
.ic-table table.ic-table-grid > tbody > tr:nth-child(even) > td,
.ic-table .ic-table-grid tbody tr:nth-child(even) > td,
.ic-table .ic-table-grid > tbody > tr.roweven > td,
.ic-table table.ic-table-grid > tbody > tr.roweven > td,
.ic-table .ic-table-grid tr.roweven > td {
	background-color: var(--ic-row-even) !important;
	background-image: none !important;
}

.ic-table-grid > tbody > tr:last-child > td,
.ic-table-grid > tr:last-child > td {
	border-bottom: none !important;
}

.ic-table table.ic-table-grid > tbody > tr:hover > td,
.ic-table table.ic-table-grid > tr:hover > td,
.ic-table .ic-table-grid > tbody > tr:hover > td {
	background-color: var(--ic-row-hover) !important;
}

.ic-table-grid th.ic-table-num,
.ic-table-grid td.ic-table-num,
.ic-table-grid th.number,
.ic-table-grid td.number {
	/* Keep site convention: all cells right-aligned (legacy td/th) */
	text-align: right !important;
	font-variant-numeric: tabular-nums;
}

.ic-table-grid th.ic-table-actions,
.ic-table-grid td.ic-table-actions {
	text-align: right !important;
	white-space: nowrap;
}

.ic-table-grid.sortable th {
	cursor: pointer;
	user-select: none;
}

.ic-table-grid.sortable th:hover {
	color: var(--ic-teal);
}

.ic-table-grid th.sortasc,
.ic-table-grid th.sortdesc {
	text-decoration: underline;
	color: var(--ic-teal);
}

.ic-table-compact .ic-table-grid > thead > tr > th,
.ic-table-compact .ic-table-grid > tr:first-child > th,
.ic-table-compact .ic-table-grid > tbody > tr > td,
.ic-table-compact .ic-table-grid > tr > td {
	padding: 0.4rem 0.5rem;
	font-size: 0.85rem;
}

.ic-table-compact .ic-table-controls {
	padding: 0;
	margin: 0;
}

.ic-table-compact .ic-table-nav.ic-table-toolbar {
	padding: 0.4rem 0.55rem;
}

@media (max-width: 991.98px) {
	.ic-table-nav.ic-table-toolbar {
		flex-wrap: wrap;
	}

	.ic-table-nav.ic-table-toolbar .ic-table-results {
		white-space: normal;
	}

	.ic-table-nav.ic-table-toolbar .ic-table-controls {
		flex-wrap: wrap;
	}
}
/*
 * Tablet only (not mobile): allow horizontal scroll for wide grids.
 * Must NOT apply below 768px — that fights the card layout and can
 * blank out body cells (legacy table.sortable { display:block } bug).
 */
@media (min-width: 768px) and (max-width: 991.98px) {
	.ic-table table.ic-table-grid,
	.ic-table table.ic-table-grid.sortable {
		display: table;
		width: max-content;
		min-width: 100%;
		max-width: none;
		overflow: visible;
		-webkit-overflow-scrolling: auto;
	}

	.ic-table table.ic-table-grid th,
	.ic-table table.ic-table-grid td,
	.ic-table table.ic-table-grid.sortable th,
	.ic-table table.ic-table-grid.sortable td {
		white-space: nowrap !important;
	}

	.ic-table table.ic-table-boards {
		display: block;
		width: 100%;
		max-width: 100%;
		overflow: visible;
	}
}

/* ---- Mobile: rows → cards (≤768px) ---- */

@media (max-width: 767.98px) {
	.ic-table-nav.ic-table-toolbar {
		flex-direction: row;
		flex-wrap: wrap;
		align-items: stretch;
		gap: 0.5rem 0.65rem;
	}

	.ic-table-nav.ic-table-toolbar .ic-table-nav-btns {
		order: 1;
		justify-content: center;
		flex: 1 1 100%;
	}

	.ic-table-nav.ic-table-toolbar .ic-table-results {
		order: 2;
		flex: 1 1 100%;
		min-width: 0;
		width: 100%;
		text-align: center;
	}

	.ic-table-nav.ic-table-toolbar .ic-table-controls {
		order: 3;
		flex: 1 1 100%;
		flex-direction: row;
		flex-wrap: wrap;
		justify-content: stretch;
		width: 100%;
		margin: 0;
	}

	.ic-table-control {
		flex: 1 1 calc(50% - 0.5rem);
		width: auto;
		min-width: 8rem;
		max-width: none;
	}

	.ic-table-nav-top:not(.ic-table-toolbar) {
		flex-direction: column;
		align-items: center;
		justify-content: center;
		gap: 0.4rem;
	}

	.ic-table-nav-top:not(.ic-table-toolbar) .ic-table-nav-prev {
		order: 1;
		justify-content: center;
		width: 100%;
	}

	.ic-table-nav-top:not(.ic-table-toolbar) .ic-table-results {
		order: 2;
		width: 100%;
		text-align: center;
		flex: 0 0 auto;
	}

	.ic-table-nav-bottom {
		flex-direction: column;
		align-items: center;
		justify-content: center;
		gap: 0.4rem;
	}

	.ic-table-nav-bottom .ic-table-results {
		display: none;
	}

	.ic-table-nav-bottom .ic-table-nav-next {
		justify-content: center;
		width: 100%;
	}

	/*
	 * Beat legacy common.css:
	 *   @media (max-width: 991.98px) { table.sortable { display:block; overflow-x:auto } }
	 * That scroll hack + table-row children blanks cell content on mobile.
	 */
	.ic-table table.ic-table-grid,
	.ic-table table.ic-table-grid.sortable,
	.ic-table .ic-table-grid tbody {
		display: block !important;
		width: 100% !important;
		min-width: 0 !important;
		max-width: 100% !important;
		border: none !important;
		border-radius: 0;
		overflow: visible !important;
		overflow-x: visible !important;
		background: transparent;
		table-layout: auto !important;
	}

	.ic-table .ic-table-wrap {
		overflow: visible !important;
		overflow-x: visible !important;
	}

	.ic-table .ic-table-grid thead,
	.ic-table .ic-table-grid > tr:first-child:has(> th) {
		display: none !important;
	}

	/* Fallback when :has() unavailable — first row of th-only header */
	.ic-table .ic-table-grid > tr.ic-table-head {
		display: none !important;
	}

	.ic-table .ic-table-grid > tbody > tr,
	.ic-table .ic-table-grid > tr:not(.ic-table-head) {
		display: block !important;
		width: 100% !important;
		max-width: 100%;
		margin: 0 0 0.85rem;
		padding: 0.85rem 1rem;
		background: var(--ic-surface) !important;
		border: 1px solid var(--ic-border);
		border-radius: 0.5rem;
		border-inline-start: 3px solid var(--ic-teal);
		box-shadow: 0 1px 2px var(--ic-focus-ring);
		overflow: visible !important;
	}

	/* Mobile card zebra — paint the card, cells stay transparent */
	.ic-table .ic-table-grid > tbody > tr:nth-child(odd),
	.ic-table .ic-table-grid > tr:not(.ic-table-head):nth-child(odd),
	.ic-table .ic-table-grid > tbody > tr.rowodd,
	.ic-table .ic-table-grid > tr.rowodd:not(.ic-table-head) {
		background: var(--ic-row-odd) !important;
	}

	.ic-table .ic-table-grid > tbody > tr:nth-child(even),
	.ic-table .ic-table-grid > tr:not(.ic-table-head):nth-child(even),
	.ic-table .ic-table-grid > tbody > tr.roweven,
	.ic-table .ic-table-grid > tr.roweven:not(.ic-table-head) {
		background: var(--ic-row-even) !important;
	}

	.ic-table .ic-table-grid > tbody > tr:last-child,
	.ic-table .ic-table-grid > tr:not(.ic-table-head):last-child {
		margin-bottom: 0;
	}

	.ic-table .ic-table-grid > tbody > tr > td,
	.ic-table .ic-table-grid > tr > td {
		display: flex !important;
		align-items: flex-start;
		justify-content: space-between;
		gap: 0.75rem 1rem;
		width: 100% !important;
		max-width: 100% !important;
		min-width: 0 !important;
		height: auto !important;
		padding: 0.4rem 0 !important;
		margin: 0;
		border: none !important;
		border-bottom: 1px dashed var(--ic-border) !important;
		background: transparent !important;
		color: var(--ic-text) !important;
		text-align: right !important;
		white-space: normal !important;
		overflow: visible !important;
		overflow-wrap: anywhere;
		word-break: break-word;
		float: none !important;
	}

	.ic-table .ic-table-grid > tbody > tr > td:last-child,
	.ic-table .ic-table-grid > tr > td:last-child {
		border-bottom: none;
		padding-bottom: 0;
	}

	.ic-table .ic-table-grid > tbody > tr > td:first-child,
	.ic-table .ic-table-grid > tr > td:first-child {
		padding-top: 0;
	}

	.ic-table .ic-table-grid td::before {
		content: attr(data-label);
		flex: 0 0 auto;
		max-width: 45%;
		font-size: 0.8rem;
		font-weight: 700;
		color: var(--ic-teal-dark);
		text-align: right;
		line-height: 1.35;
	}

	.ic-table .ic-table-grid td > * {
		flex: 1 1 auto;
		min-width: 0;
		max-width: 100%;
		color: inherit !important;
		text-align: right !important;
		margin: 0;
		overflow: visible !important;
		white-space: normal !important;
	}

	.ic-table .ic-table-grid td.ic-table-num,
	.ic-table .ic-table-grid td.number,
	.ic-table .ic-table-grid td.ic-table-actions {
		text-align: right !important;
	}

	.ic-table .ic-table-grid td.ic-table-actions {
		flex-wrap: wrap;
	}

	.ic-table .ic-table-grid td[data-label=""]::before,
	.ic-table .ic-table-grid td:not([data-label])::before {
		display: none;
	}
}

/* ---- Board / game card gallery ---- */

table.ic-table-boards {
	display: block;
	width: 100%;
	max-width: 100%;
	margin: 0;
	border: none;
	border-collapse: separate;
	border-spacing: 0;
	background: transparent;
	table-layout: auto;
	overflow: visible;
}

.ic-table-boards tbody {
	display: grid;
	/* Keep each card wide enough for a clear board; tops align across the row */
	grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
	gap: 1rem;
	align-items: start;
	width: 100%;
}

.ic-table-boards tr {
	display: contents;
}

.ic-table-boards td {
	display: flex;
	flex-direction: column;
	align-items: stretch;
	align-self: start;
	width: auto !important;
	margin: 0;
	padding: 0;
	border: none;
	background: transparent !important;
	vertical-align: top;
	overflow: visible;
}

.ic-table-board-card {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 0.45rem;
	width: 100%;
	max-width: 100%;
	min-width: 0;
	height: 100%;
	margin: 0;
	padding: 0.85rem 0.85rem;
	background: var(--ic-surface);
	border: 1px solid var(--ic-border);
	border-radius: 0.5rem;
	border-inline-start: 3px solid var(--ic-teal);
	box-shadow: 0 1px 2px var(--ic-focus-ring);
	text-align: center;
	overflow: visible;
	box-sizing: border-box;
}

.ic-table-board-card > p {
	margin: 0;
	padding: 0;
	width: 100%;
	overflow-wrap: anywhere;
	word-break: break-word;
	line-height: 1.4;
	font-size: 0.9rem;
}

/* Reserve two lines so boards line up across cards with short/long names */
.ic-table-board-card > p:first-child {
	min-height: 2.8em;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	gap: 0.15rem 0.25rem;
}

.ic-table-board-card a.ic-table-board-link {
	display: block;
	width: 240px;
	max-width: 100%;
	min-width: 220px;
	margin: 0.15rem auto;
	line-height: 0;
	flex: 0 0 auto;
}

.ic-table-board-card a.ic-table-board-link img {
	display: block;
	width: 240px;
	max-width: 100%;
	min-width: 220px;
	height: auto;
	aspect-ratio: 1 / 1;
	object-fit: contain;
	margin: 0 auto;
	border-radius: 0.25rem;
}

.ic-table-board-card .ic-table-board-cta {
	width: 100%;
	max-width: 12rem;
	margin: 0.35rem auto 0;
}

@media (max-width: 991.98px) {
	.ic-table-boards tbody {
		grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
	}
}

@media (max-width: 767.98px) {
	.ic-table-header {
		flex-direction: column;
		align-items: stretch;
	}

	.ic-table-header .btn {
		width: 100%;
		justify-content: center;
	}

	.ic-table-header input.ichess_button,
	.ic-table-header input.jschess_button {
		align-self: flex-start;
		margin: 0;
	}

	.ic-table-boards tbody {
		grid-template-columns: 1fr;
		gap: 0.85rem;
	}

	.ic-table-board-card {
		padding: 1rem;
	}

	.ic-table-board-card a.ic-table-board-link,
	.ic-table-board-card a.ic-table-board-link img {
		width: min(100%, 280px);
		min-width: 0;
		max-width: min(100%, 280px);
	}
}
