/*
 * Synedra Connect.
 *
 * Every colour is a custom property set from the plugin settings, so this file
 * never changes when the palette does and a theme can override any of them
 * with ordinary CSS. --synedra-mark is set per session from the content type
 * or thematic section chosen in the panel; where none applies it falls back to
 * the accent, which is why every use of it carries that fallback.
 *
 * Deliberately unopinionated about typography: it inherits the theme's font,
 * because a conference site has a house style and a plugin that imposed one
 * would be the first thing anybody had to undo.
 */

.synedra {
	--synedra-accent: #cf0965;
	--synedra-text: #18181b;
	--synedra-muted: #71717a;
	--synedra-surface: #ffffff;
	--synedra-alt: #f4f4f5;
	--synedra-border: #e4e4e7;
	--synedra-radius: 10px;

	color: var(--synedra-text);

	/* Checkboxes, radios and the text caret, which the browser draws itself. */
	accent-color: var(--synedra-accent);
	caret-color: var(--synedra-accent);
}

.synedra *,
.synedra *::before,
.synedra *::after {
	box-sizing: border-box;
}

/* ===========================================================================
 * Theme-proofing.
 *
 * Every colour on a shortcode comes from the plugin's Colours settings and
 * from nowhere else. That is not automatic. A theme — and a page builder's
 * global kit especially — styles bare `button`, `a`, `input`, `th` and `h3`
 * with selectors like `.elementor-kit-7 button:hover`, and a selector of that
 * shape out-ranks a plugin's own class: the site's brand colour lands on a
 * session card the moment somebody clicks it, and no setting on this plugin's
 * page will take it off again. That is the bug this section exists to close.
 *
 * Three devices, used consistently:
 *
 *   Every rule in this file is scoped under `.synedra` — `.synedra .synedra-x`,
 *   never `.synedra-x` alone. One extra class is what puts a component above
 *   `.some-kit h3` and `.entry-content ul li`, and because every rule gained it
 *   together, their order among themselves is exactly what it was. Anything
 *   added to this file must carry the same prefix or it will be out-ranked in
 *   the field and look fine in isolation. Rules for the shortcode root element
 *   itself join without a space: `.synedra.synedra-program--forum`.
 *
 *   :where() around the element list below, which contributes nothing to
 *   specificity. This armour therefore sits *underneath* every scoped rule —
 *   it is never something a later rule has to undo, only what applies where
 *   the plugin itself has said nothing.
 *
 *   The scope class written twice — `.synedra.synedra` — for the armour and
 *   for bare `a`, where there is no component class to lean on and a theme
 *   would otherwise tie. It costs nothing at run time, and every doubled scope
 *   class in this file is here for that reason and no other.
 *
 * Typography is the deliberate exception, as it is everywhere else here: the
 * font, its size and its weight stay the theme's, because a programme set in a
 * different typeface from the page around it reads as a third-party widget.
 * ======================================================================== */

.synedra.synedra :where(
	a, button, input, select, textarea, label, fieldset, legend, form,
	h1, h2, h3, h4, h5, h6, p, span, div, section, article, header, footer,
	ul, ol, li, dl, dt, dd, blockquote, cite, q, address, figure, figcaption,
	table, caption, thead, tbody, tfoot, tr, th, td,
	strong, b, em, i, small, mark, time, abbr, code, pre, samp, kbd, hr, img
) {
	color: inherit;
	background: transparent;
	border-color: var(--synedra-border);
	box-shadow: none;
	text-shadow: none;
	text-decoration-color: currentColor;
}

/* Bullets and numbers in an abstract come from the panel's rich text. */
.synedra.synedra :where(li)::marker {
	color: inherit;
}

.synedra.synedra :where(input, textarea)::placeholder {
	color: var(--synedra-muted);
	opacity: 1;
}

.synedra.synedra ::selection {
	color: var(--synedra-surface);
	background: var(--synedra-accent);
}

/*
 * The state armour: a theme paints nothing the plugin renders while it is
 * hovered, focused, active or visited. Where a component wants a state of its
 * own it says so later in this file, with the scope class doubled so that it
 * out-ranks this.
 */
.synedra.synedra :where(a, button, input, select, textarea):is(:hover, :focus, :focus-visible, :active, :visited) {
	color: inherit;
	background: transparent;
	border-color: var(--synedra-border);
	box-shadow: none;
	outline: none;
}

/*
 * One focus ring for the whole plugin, in the accent, drawn for keyboard users
 * only. A ring on every mouse click is the flash of theme colour this section
 * exists to remove; no ring at all fails anybody navigating by keyboard.
 */
.synedra.synedra :focus-visible {
	outline: 2px solid var(--synedra-accent);
	outline-offset: 2px;
}

/* A text field is the exception: clicking into one should show where you are. */
.synedra.synedra :where(input, select, textarea):focus {
	outline: 2px solid var(--synedra-accent);
	outline-offset: 1px;
}

.synedra .synedra-empty {
	color: var(--synedra-muted, #71717a);
	font-style: italic;
}

/* ---- Day headings ------------------------------------------------------ */

.synedra .synedra-day {
	margin: 0 0 2.5rem;
}

.synedra .synedra-day__heading {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 1rem;
	margin: 0 0 1rem;
	padding-bottom: 0.5rem;
	border-bottom: 2px solid var(--synedra-text);
}

.synedra .synedra-day__count {
	font-size: 0.8125rem;
	font-weight: 400;
	color: var(--synedra-muted);
}

/* ---- Agenda ------------------------------------------------------------ */

.synedra .synedra-agenda {
	list-style: none;
	margin: 0;
	padding: 0;
}

.synedra .synedra-agenda__row {
	display: grid;
	grid-template-columns: 5.5rem 3px 1fr;
	gap: 0 1rem;
	padding: 1rem 0;
	border-bottom: 1px solid var(--synedra-border);
}

.synedra .synedra-agenda__row:last-child {
	border-bottom: 0;
}

.synedra .synedra-agenda__when {
	font-variant-numeric: tabular-nums;
	font-weight: 600;
	white-space: nowrap;
}

.synedra .synedra-agenda__to {
	display: block;
	font-weight: 400;
	font-size: 0.8125rem;
	color: var(--synedra-muted);
}

.synedra .synedra-agenda__mark {
	background: var(--synedra-mark, var(--synedra-accent));
	border-radius: 2px;
}

.synedra .synedra-session__title {
	margin: 0;
	font-size: 1.0625rem;
	line-height: 1.35;
}

.synedra .synedra-session__tags {
	margin: 0.35rem 0 0;
	display: flex;
	flex-wrap: wrap;
	gap: 0.4rem;
}

.synedra .synedra-tag {
	display: inline-block;
	padding: 0.15rem 0.5rem;
	font-size: 0.75rem;
	line-height: 1.5;
	color: var(--synedra-muted);
	background: var(--synedra-alt);
	border-radius: calc(var(--synedra-radius) / 2);
}

.synedra .synedra-tag--type {
	color: var(--synedra-surface);
	background: var(--synedra-mark, var(--synedra-accent));
}

.synedra .synedra-tag--room {
	color: var(--synedra-text);
	font-weight: 600;
}

.synedra .synedra-session__body {
	margin-top: 0.5rem;
	color: var(--synedra-muted);
	font-size: 0.9375rem;
}

.synedra .synedra-session__note {
	margin: 0.5rem 0 0;
	font-size: 0.8125rem;
	font-weight: 600;
	color: var(--synedra-accent);
}

/* Weight, not colour: colour already means content type. */
.synedra .synedra-people {
	margin: 0.5rem 0 0;
	padding: 0;
	list-style: none;
	font-size: 0.9375rem;
}

.synedra .synedra-people--moderators {
	font-weight: 600;
}

.synedra .synedra-people__role {
	display: inline-block;
	margin-right: 0.4rem;
	font-size: 0.6875rem;
	font-weight: 600;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--synedra-muted);
}

.synedra .synedra-people--speakers li + li {
	margin-top: 0.15rem;
}

.synedra .synedra-person__line {
	color: var(--synedra-muted);
}

.synedra .synedra-people--speakers .synedra-person__line::before {
	content: " — ";
}

/* ---- Day tabs ---------------------------------------------------------- */

.synedra .synedra-tabs {
	display: flex;
	flex-wrap: wrap;
}

.synedra .synedra-tabs__input {
	position: absolute;
	opacity: 0;
	pointer-events: none;
}

.synedra .synedra-tabs__label {
	order: -1;
	padding: 0.6rem 1rem;
	margin-right: 0.25rem;
	cursor: pointer;
	font-weight: 600;
	color: var(--synedra-muted);
	border-bottom: 3px solid transparent;
}

.synedra .synedra-tabs__input:checked + .synedra-tabs__label {
	color: var(--synedra-text);
	border-bottom-color: var(--synedra-accent);
}

/*
 * The ring belongs on the label: the input it reports for is off-screen, so
 * the plugin-wide ring would be drawn where nobody can see it.
 */
.synedra .synedra-tabs__input:focus-visible + .synedra-tabs__label {
	outline: 2px solid var(--synedra-accent);
	outline-offset: 2px;
}

.synedra .synedra-tabs__panel {
	display: none;
	width: 100%;
	padding-top: 1rem;
	border-top: 1px solid var(--synedra-border);
	margin-top: -1px;
}

/*
 * Each panel follows all the inputs in source order, so the nth checked input
 * shows the nth panel. Written out rather than generated because there is no
 * selector for "the panel with the same index as the checked input".
 */
.synedra .synedra-tabs__input:nth-of-type(1):checked ~ .synedra-tabs__panel:nth-of-type(1),
.synedra .synedra-tabs__input:nth-of-type(2):checked ~ .synedra-tabs__panel:nth-of-type(2),
.synedra .synedra-tabs__input:nth-of-type(3):checked ~ .synedra-tabs__panel:nth-of-type(3),
.synedra .synedra-tabs__input:nth-of-type(4):checked ~ .synedra-tabs__panel:nth-of-type(4),
.synedra .synedra-tabs__input:nth-of-type(5):checked ~ .synedra-tabs__panel:nth-of-type(5),
.synedra .synedra-tabs__input:nth-of-type(6):checked ~ .synedra-tabs__panel:nth-of-type(6),
.synedra .synedra-tabs__input:nth-of-type(7):checked ~ .synedra-tabs__panel:nth-of-type(7),
.synedra .synedra-tabs__input:nth-of-type(8):checked ~ .synedra-tabs__panel:nth-of-type(8) {
	display: block;
}

/* ---- Grid and table ---------------------------------------------------- */

/* Wide content scrolls inside its own box; the page never scrolls sideways. */
.synedra .synedra-grid__scroll {
	overflow-x: auto;
	-webkit-overflow-scrolling: touch;
}

.synedra .synedra-grid,
.synedra .synedra-table {
	width: 100%;
	border-collapse: collapse;
	font-size: 0.9375rem;
}

.synedra .synedra-grid th,
.synedra .synedra-grid td,
.synedra .synedra-table th,
.synedra .synedra-table td {
	padding: 0.6rem 0.75rem;
	text-align: left;
	vertical-align: top;
	border-bottom: 1px solid var(--synedra-border);
}

.synedra .synedra-grid thead th,
.synedra .synedra-table thead th {
	font-size: 0.75rem;
	letter-spacing: 0.05em;
	text-transform: uppercase;
	color: var(--synedra-muted);
	background: var(--synedra-alt);
	border-bottom: 2px solid var(--synedra-border);
}

.synedra .synedra-grid__clock {
	width: 5.5rem;
	white-space: nowrap;
	font-variant-numeric: tabular-nums;
	font-weight: 600;
}

.synedra .synedra-grid td {
	min-width: 12rem;
}

.synedra .synedra-grid__session {
	padding: 0.6rem 0.7rem;
	border-left: 3px solid var(--synedra-mark, var(--synedra-accent));
	background: var(--synedra-alt);
	border-radius: calc(var(--synedra-radius) / 2);
}

.synedra .synedra-grid__session + .synedra-grid__session {
	margin-top: 0.5rem;
}

.synedra .synedra-grid__session .synedra-session__title {
	display: block;
	font-size: 0.9375rem;
	font-weight: 600;
}

.synedra .synedra-grid__until,
.synedra .synedra-grid__people {
	display: block;
	margin-top: 0.2rem;
	font-size: 0.8125rem;
	color: var(--synedra-muted);
}

.synedra .synedra-table__when {
	white-space: nowrap;
	font-variant-numeric: tabular-nums;
	font-weight: 600;
	border-left: 3px solid var(--synedra-mark, var(--synedra-accent));
}

.synedra .synedra-table .synedra-session__title {
	display: inline;
	font-size: 0.9375rem;
	font-weight: 600;
	margin-right: 0.4rem;
}

.synedra .synedra-table__people {
	color: var(--synedra-muted);
}

/* ---- Speakers: cards --------------------------------------------------- */

.synedra .synedra-speakers--cards {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr));
	gap: 1.5rem;
}

.synedra .synedra-card {
	background: var(--synedra-surface);
	border: 1px solid var(--synedra-border);
	border-radius: var(--synedra-radius);
	overflow: hidden;
}

.synedra .synedra-card__photo {
	aspect-ratio: 1 / 1;
	background: var(--synedra-alt);
}

.synedra .synedra-card__photo img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.synedra .synedra-card__photo--empty {
	display: flex;
	align-items: center;
	justify-content: center;
	aspect-ratio: 1 / 1;
	font-size: 2.5rem;
	font-weight: 300;
	color: var(--synedra-muted);
	background: var(--synedra-alt);
}

.synedra .synedra-card__body {
	padding: 1rem;
}

.synedra .synedra-person__name {
	margin: 0;
	font-size: 1rem;
	line-height: 1.3;
}

.synedra .synedra-card .synedra-person__line,
.synedra .synedra-tile__line {
	display: block;
	margin-top: 0.2rem;
	font-size: 0.875rem;
	color: var(--synedra-muted);
}

.synedra .synedra-person__role {
	margin: 0.35rem 0 0;
	font-size: 0.6875rem;
	font-weight: 600;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--synedra-accent);
}

.synedra .synedra-person__bio {
	margin-top: 0.6rem;
	font-size: 0.875rem;
	color: var(--synedra-muted);
}

.synedra .synedra-person__bio p {
	margin: 0 0 0.5rem;
}

/* ---- Speakers: grid ---------------------------------------------------- */

.synedra .synedra-speakers--grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr));
	gap: 1.25rem;
	list-style: none;
	margin: 0;
	padding: 0;
}

.synedra .synedra-tile {
	text-align: center;
}

.synedra .synedra-tile__photo {
	display: block;
	width: 100%;
	aspect-ratio: 1 / 1;
	object-fit: cover;
	border-radius: var(--synedra-radius);
	background: var(--synedra-alt);
	margin-bottom: 0.5rem;
}

.synedra .synedra-tile__photo--empty {
	display: flex;
	align-items: center;
	justify-content: center;
	font-size: 2rem;
	font-weight: 300;
	color: var(--synedra-muted);
}

.synedra .synedra-tile__name {
	display: block;
	font-size: 0.875rem;
	font-weight: 600;
	line-height: 1.3;
}

/* ---- Speakers: list ---------------------------------------------------- */

.synedra .synedra-row {
	display: grid;
	grid-template-columns: 10rem 1fr;
	gap: 1.5rem;
	padding: 1.5rem 0;
	border-bottom: 1px solid var(--synedra-border);
}

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

.synedra .synedra-row__photo img,
.synedra .synedra-row__photo .synedra-card__photo--empty {
	width: 100%;
	aspect-ratio: 1 / 1;
	object-fit: cover;
	border-radius: var(--synedra-radius);
}

.synedra .synedra-row .synedra-person__name {
	font-size: 1.25rem;
}

.synedra .synedra-person__titles {
	margin: 0.35rem 0 0;
	padding: 0;
	list-style: none;
	color: var(--synedra-muted);
	font-size: 0.9375rem;
}

/* ---- Speakers: minimal ------------------------------------------------- */

.synedra .synedra-speakers--minimal {
	list-style: none;
	margin: 0;
	padding: 0;
	columns: 2;
	column-gap: 2.5rem;
}

.synedra .synedra-name {
	break-inside: avoid;
	padding: 0.6rem 0;
	border-bottom: 1px solid var(--synedra-border);
}

.synedra .synedra-name .synedra-person__name {
	font-weight: 600;
}

.synedra .synedra-name .synedra-person__line {
	display: block;
	font-size: 0.875rem;
}

.synedra .synedra-name .synedra-person__role {
	display: inline-block;
	margin-top: 0.2rem;
}

/* ---- Narrow screens ---------------------------------------------------- */

@media (max-width: 640px) {
	.synedra .synedra-agenda__row {
		grid-template-columns: 4.25rem 3px 1fr;
		gap: 0 0.75rem;
	}

	.synedra .synedra-row {
		grid-template-columns: 1fr;
	}

	.synedra .synedra-row__photo {
		max-width: 10rem;
	}

	.synedra .synedra-speakers--minimal {
		columns: 1;
	}
}

@media print {
	.synedra .synedra-tabs__panel {
		display: block !important;
	}

	/* A gutter that exists to carry a sticky heading is dead space on paper. */
	.synedra .synedra-fday {
		display: block;
	}

	.synedra .synedra-tabs__label,
	.synedra .synedra-card__photo,
	.synedra .synedra-tile__photo {
		display: none;
	}
}

/* Filtering hides rows with the `hidden` attribute, and several of them are
 * grid or flex containers whose `display` would otherwise win over the
 * browser's default `[hidden] { display: none }`. Without this the filters
 * appear to do nothing at all on the agenda, tab and list layouts. */
.synedra [hidden] {
	display: none !important;
}

/* ---- Width -------------------------------------------------------------
 *
 * Nothing is constrained by default: every block fills the column the theme or
 * the page builder puts it in, which is the only width a plugin can be sure
 * about. `width="900px"` on the shortcode sets --synedra-max-width and caps it,
 * centred, for a page that wants a narrower measure.
 */

.synedra {
	width: 100%;
	max-width: var(--synedra-max-width, none);
	margin-inline: auto;
}

/* Wide content is allowed to scroll inside itself rather than push the page
 * sideways — a table with nine rooms must not widen the whole layout. */
.synedra .synedra-grid__scroll {
	overflow-x: auto;
	-webkit-overflow-scrolling: touch;
}

/* ---- Filters and search ------------------------------------------------ */

.synedra .synedra-filters {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-end;
	gap: 0.75rem 1rem;
	margin: 0 0 1.75rem;
	padding: 1rem;
	background: var(--synedra-alt, #f4f4f5);
	border: 1px solid var(--synedra-border, #e4e4e7);
	border-radius: var(--synedra-radius, 10px);
}

.synedra .synedra-filters__field {
	display: flex;
	flex: 1 1 12rem;
	flex-direction: column;
	gap: 0.25rem;
	min-width: 0;
}

.synedra .synedra-filters__field--search {
	flex-basis: 18rem;
}

.synedra .synedra-filters label {
	font-size: 0.75rem;
	font-weight: 600;
	letter-spacing: 0.02em;
	text-transform: uppercase;
	color: var(--synedra-muted, #71717a);
}

.synedra .synedra-filters__input,
.synedra .synedra-filters__select {
	width: 100%;
	max-width: 100%;
	padding: 0.5rem 0.625rem;
	font: inherit;
	font-size: 0.9375rem;
	color: var(--synedra-text, #18181b);
	background: var(--synedra-surface, #fff);
	border: 1px solid var(--synedra-border, #e4e4e7);
	border-radius: calc(var(--synedra-radius, 10px) * 0.6);
}

/* Focus is drawn further down, where the forum set gives these a ring of the
 * accent in place of an outline. */

.synedra .synedra-filters__actions {
	display: flex;
	flex: 0 0 auto;
	align-items: center;
	gap: 0.75rem;
	margin-inline-start: auto;
}

.synedra .synedra-filters__reset {
	padding: 0.5rem 0.875rem;
	font: inherit;
	font-size: 0.875rem;
	color: var(--synedra-text, #18181b);
	cursor: pointer;
	background: var(--synedra-surface, #fff);
	border: 1px solid var(--synedra-border, #e4e4e7);
	border-radius: calc(var(--synedra-radius, 10px) * 0.6);
}

.synedra .synedra-filters__reset:hover,
.synedra .synedra-filters__reset:focus-visible {
	color: var(--synedra-accent, #cf0965);
	background: var(--synedra-surface, #fff);
	border-color: var(--synedra-accent, #cf0965);
}

.synedra .synedra-filters__count {
	margin: 0;
	font-size: 0.8125rem;
	color: var(--synedra-muted, #71717a);
}

/* ---- Links -------------------------------------------------------------
 *
 * No underlines. A programme is dense with names, and underlining every one
 * turns it into a page of rules; colour and a hover shift carry "this is a
 * link" without that. Focus is not left to colour alone — a visible ring is
 * drawn for keyboard users, who get no hover to tell them where they are.
 */

.synedra.synedra a {
	text-decoration: none;
	color: inherit;
	transition: color 0.15s ease, background-color 0.15s ease, border-color 0.15s ease;
}

.synedra.synedra a:hover,
.synedra.synedra a:focus-visible {
	color: var(--synedra-accent, #cf0965);
	background: transparent;
}

.synedra .synedra-person__link:hover .synedra-person__name,
.synedra .synedra-person__link:focus-visible .synedra-person__name {
	color: var(--synedra-accent, #cf0965);
}

/* ---- People: face, name, and the line chosen for that session ---------- */

.synedra .synedra-avatar {
	flex: 0 0 auto;
	width: 2.25rem;
	height: 2.25rem;
	object-fit: cover;
	border-radius: 50%;
	background: var(--synedra-alt, #f4f4f5);
}

.synedra .synedra-avatar--initial {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	font-size: 0.9375rem;
	font-weight: 600;
	line-height: 1;
	color: var(--synedra-muted, #71717a);
	/* A tinted ring rather than a grey disc, so a missing photograph reads as
	 * a person rather than as a hole in the page. */
	background: color-mix(in srgb, var(--synedra-accent, #cf0965) 10%, var(--synedra-alt, #f4f4f5));
	box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--synedra-accent, #cf0965) 18%, transparent);
}

.synedra .synedra-chip {
	display: inline-flex;
	align-items: center;
	gap: 0.5rem;
	max-width: 100%;
	padding: 0.25rem 0.6rem 0.25rem 0.25rem;
	border-radius: 999px;
	background: transparent;
	box-shadow: inset 0 0 0 1px transparent;
}

.synedra .synedra-chip--link:hover,
.synedra .synedra-chip--link:focus-visible {
	background: color-mix(in srgb, var(--synedra-accent, #cf0965) 7%, transparent);
	box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--synedra-accent, #cf0965) 22%, transparent);
}

.synedra .synedra-chip__text {
	display: flex;
	min-width: 0;
	flex-direction: column;
	line-height: 1.25;
}

.synedra .synedra-chip__name {
	font-weight: 600;
	font-size: 0.9375rem;
}

.synedra .synedra-chip__line {
	font-size: 0.8125rem;
	color: var(--synedra-muted, #71717a);
}

/* ---- Moderators and speakers, always told apart ------------------------ */

.synedra .synedra-group {
	margin-top: 0.85rem;
}

.synedra .synedra-group__label {
	display: block;
	margin-bottom: 0.35rem;
	font-size: 0.6875rem;
	font-weight: 700;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--synedra-muted, #71717a);
}

.synedra .synedra-group__people {
	display: flex;
	flex-wrap: wrap;
	gap: 0.35rem 0.5rem;
	margin-inline-start: -0.25rem;
}

/* The chair of a session is not one of its speakers, so the group that holds
 * them is marked rather than merely ordered first. */
.synedra .synedra-group--moderators .synedra-group__label {
	color: var(--synedra-accent, #cf0965);
}

.synedra .synedra-group--moderators .synedra-chip__name {
	font-weight: 700;
}

/* In the grid a cell is only a few centimetres wide, so people are faces and
 * the name arrives on hover as a tooltip from the profile link. */
.synedra .synedra-grid__people .synedra-chip {
	padding: 0;
	gap: 0;
}

.synedra .synedra-grid__people .synedra-chip__text {
	display: none;
}

.synedra .synedra-grid__people {
	display: flex;
	flex-wrap: wrap;
	gap: 0.25rem;
	margin-top: 0.4rem;
}

.synedra .synedra-grid__people .synedra-avatar {
	width: 1.75rem;
	height: 1.75rem;
	font-size: 0.75rem;
}

.synedra .synedra-card__name {
	margin: 0 0 0.25rem;
	font-size: 1.0625rem;
	line-height: 1.3;
}

/* ---- Speaker profile --------------------------------------------------- */

.synedra .synedra-profile__back {
	margin: 0 0 1.5rem;
	font-size: 0.875rem;
}

.synedra .synedra-profile__back a {
	color: var(--synedra-muted, #71717a);
	text-decoration: none;
}

.synedra .synedra-profile__back a:hover {
	color: var(--synedra-accent, #cf0965);
}

.synedra .synedra-profile__header {
	display: grid;
	grid-template-columns: minmax(0, 14rem) minmax(0, 1fr);
	gap: 2rem;
	align-items: start;
	margin: 0 0 2rem;
}

.synedra .synedra-profile__photo {
	width: 100%;
	height: auto;
	aspect-ratio: 1 / 1;
	object-fit: cover;
	border-radius: var(--synedra-radius, 10px);
}

.synedra .synedra-profile__name {
	margin: 0 0 0.35rem;
	font-size: 1.75rem;
	line-height: 1.2;
}

.synedra .synedra-profile__line {
	margin: 0 0 0.5rem;
	font-size: 1.0625rem;
	color: var(--synedra-muted, #71717a);
}

.synedra .synedra-profile__titles {
	margin: 0 0 0.75rem;
	padding-inline-start: 1.1rem;
	font-size: 0.9375rem;
	color: var(--synedra-muted, #71717a);
}

.synedra .synedra-profile__roles {
	display: flex;
	flex-wrap: wrap;
	gap: 0.375rem;
	margin: 0 0 1rem;
}

.synedra .synedra-profile__socials {
	display: flex;
	flex-wrap: wrap;
	gap: 0.5rem;
	margin: 0;
	padding: 0;
	list-style: none;
}

.synedra .synedra-social {
	display: inline-flex;
	gap: 0.35rem;
	align-items: baseline;
	padding: 0.35rem 0.7rem;
	font-size: 0.875rem;
	text-decoration: none;
	color: var(--synedra-text, #18181b);
	background: var(--synedra-alt, #f4f4f5);
	border: 1px solid var(--synedra-border, #e4e4e7);
	border-radius: 999px;
}

.synedra .synedra-social:hover,
.synedra .synedra-social:focus-visible {
	color: var(--synedra-accent, #cf0965);
	background: var(--synedra-alt, #f4f4f5);
	border-color: var(--synedra-accent, #cf0965);
}

.synedra .synedra-social__handle {
	font-size: 0.8125rem;
	color: var(--synedra-muted, #71717a);
}

.synedra .synedra-profile__heading {
	margin: 0 0 0.75rem;
	padding-bottom: 0.4rem;
	font-size: 1.125rem;
	border-bottom: 2px solid var(--synedra-text, #18181b);
}

.synedra .synedra-profile__bio {
	margin: 0 0 2rem;
}

.synedra .synedra-appearances {
	margin: 0;
	padding: 0;
	list-style: none;
}

.synedra .synedra-appearances__row {
	display: grid;
	grid-template-columns: 9rem minmax(0, 1fr);
	gap: 1rem;
	padding: 0.9rem 0 0.9rem 0.9rem;
	border-inline-start: 3px solid var(--synedra-mark, var(--synedra-accent, #cf0965));
	border-bottom: 1px solid var(--synedra-border, #e4e4e7);
}

.synedra .synedra-appearances__when {
	display: flex;
	flex-direction: column;
	font-size: 0.875rem;
	color: var(--synedra-muted, #71717a);
}

.synedra .synedra-appearances__time {
	font-variant-numeric: tabular-nums;
	font-weight: 600;
	color: var(--synedra-text, #18181b);
}

/* ---- Narrow screens ---------------------------------------------------- */

@media (max-width: 782px) {
	.synedra .synedra-filters__actions {
		flex-basis: 100%;
		margin-inline-start: 0;
	}

	.synedra .synedra-profile__header {
		grid-template-columns: 1fr;
		gap: 1.25rem;
	}

	.synedra .synedra-profile__photo {
		max-width: 12rem;
	}

	.synedra .synedra-appearances__row {
		grid-template-columns: 1fr;
		gap: 0.35rem;
	}

	.synedra .synedra-appearances__when {
		flex-direction: row;
		gap: 0.5rem;
	}
}

/* ---- A lighter, current surface treatment ------------------------------
 *
 * The original borders did the whole job of separating things, which reads as
 * heavy once cards, chips and a filter bar share a page. Depth is carried by a
 * soft shadow and a hairline instead, and movement is kept small — a card that
 * leaps on hover is a card people stop hovering.
 */

.synedra .synedra-card {
	border-color: color-mix(in srgb, var(--synedra-border, #e4e4e7) 70%, transparent);
	box-shadow:
		0 1px 2px color-mix(in srgb, var(--synedra-text, #18181b) 6%, transparent),
		0 1px 3px color-mix(in srgb, var(--synedra-text, #18181b) 4%, transparent);
	transition: box-shadow 0.18s ease, transform 0.18s ease, border-color 0.18s ease;
}

.synedra .synedra-card:hover {
	transform: translateY(-2px);
	border-color: color-mix(in srgb, var(--synedra-accent, #cf0965) 30%, transparent);
	box-shadow:
		0 4px 12px color-mix(in srgb, var(--synedra-text, #18181b) 10%, transparent),
		0 2px 4px color-mix(in srgb, var(--synedra-text, #18181b) 6%, transparent);
}

/* A portrait that fills a square crops most headshots badly at this size; 4:5
 * is the shape a photographer would have framed them in. */
.synedra .synedra-card__photo,
.synedra .synedra-card__photo--empty {
	aspect-ratio: 4 / 5;
}

.synedra .synedra-card__photo--empty {
	font-size: 3rem;
	font-weight: 500;
	color: color-mix(in srgb, var(--synedra-accent, #cf0965) 55%, var(--synedra-muted, #71717a));
	background: linear-gradient(
		160deg,
		color-mix(in srgb, var(--synedra-accent, #cf0965) 9%, var(--synedra-alt, #f4f4f5)),
		var(--synedra-alt, #f4f4f5)
	);
}

.synedra .synedra-tile__photo,
.synedra .synedra-row__photo img {
	transition: transform 0.25s ease;
}

.synedra .synedra-tile:hover .synedra-tile__photo {
	transform: scale(1.03);
}

/* The day rule was a full-width black bar; an accent lead-in reads as a
 * heading rather than as a divider. */
.synedra .synedra-day__heading {
	border-bottom-width: 1px;
	border-bottom-color: color-mix(in srgb, var(--synedra-border, #e4e4e7) 90%, transparent);
	position: relative;
}

.synedra .synedra-day__heading::after {
	content: '';
	position: absolute;
	left: 0;
	bottom: -1px;
	width: 3.5rem;
	height: 3px;
	border-radius: 2px;
	background: var(--synedra-accent, #cf0965);
}

.synedra .synedra-filters {
	background: color-mix(in srgb, var(--synedra-alt, #f4f4f5) 60%, var(--synedra-surface, #fff));
	border-color: color-mix(in srgb, var(--synedra-border, #e4e4e7) 70%, transparent);
}

.synedra .synedra-filters__input,
.synedra .synedra-filters__select {
	transition: border-color 0.15s ease, box-shadow 0.15s ease;
}

.synedra .synedra-filters__input:focus,
.synedra .synedra-filters__select:focus {
	outline: none;
	color: var(--synedra-text, #18181b);
	background: var(--synedra-surface, #fff);
	border-color: var(--synedra-accent, #cf0965);
	box-shadow: 0 0 0 3px color-mix(in srgb, var(--synedra-accent, #cf0965) 15%, transparent);
}

.synedra .synedra-agenda__row,
.synedra .synedra-appearances__row {
	transition: background-color 0.15s ease;
	border-radius: calc(var(--synedra-radius, 10px) * 0.5);
}

.synedra .synedra-agenda__row:hover,
.synedra .synedra-appearances__row:hover {
	background: color-mix(in srgb, var(--synedra-accent, #cf0965) 3.5%, transparent);
}

/* ===========================================================================
 * The forum set: programme, directory, feature profile.
 *
 * One system across the three, built on four devices: an elevated white card
 * with a generous radius, a soft tint of the accent for anything that labels
 * rather than states, a circular portrait, and a vertical rail that ties a
 * hall's sessions together down the page.
 *
 * Not one colour is written here. Everything is mixed from the palette the
 * plugin's own settings already expose — the accent, the text, the muted text,
 * the surface, the border — so a site that changes its accent gets a coherent
 * programme rather than a blue one with its own ideas. `--synedra-mark` is the
 * per-session colour the panel supplies for a content type or a thematic
 * section, and it is the only colour that varies within a page.
 * ======================================================================== */

.synedra.synedra-program--forum,
.synedra.synedra-directory,
.synedra.synedra-profile--feature {
	--synedra-label: 0.6875rem;
	--synedra-track: 0.12em;

	/* The width of the programme's day gutter. A theme may widen it for a
	 * language with longer weekday names, or narrow it for a tight column. */
	--synedra-fday-column: 190px;

	/* The tints. Named once, so "a soft accent" means one thing throughout. */
	--synedra-tint: color-mix(in srgb, var(--synedra-accent, #cf0965) 7%, var(--synedra-surface, #fff));
	--synedra-tint-line: color-mix(in srgb, var(--synedra-accent, #cf0965) 22%, var(--synedra-border, #e4e4e7));
	--synedra-lift: 0 4px 20px -4px color-mix(in srgb, var(--synedra-text, #18181b) 16%, transparent);
	--synedra-lift-hover: 0 10px 30px -6px color-mix(in srgb, var(--synedra-text, #18181b) 24%, transparent);
}

/* Only where a theme has not already defined it. */
.synedra .screen-reader-text {
	position: absolute;
	width: 1px;
	height: 1px;
	margin: -1px;
	padding: 0;
	overflow: hidden;
	clip: rect(0 0 0 0);
	white-space: nowrap;
	border: 0;
}

/* --- Programme: the day ---------------------------------------------- */

/*
 * Two columns: the day in a narrow left gutter, its programme scrolling on the
 * right. The heading is a sticky grid item, so it rides down beside its own
 * sessions and is released at that day's last card — the moment Thursday runs
 * out, Friday takes the gutter and pins itself there. One glance left always
 * answers "which day is this?", and the answer changes exactly when the
 * programme does.
 *
 * The offset is a custom property rather than a plain zero because plenty of
 * themes park a fixed header at the top of the window; --synedra-sticky-top is
 * how a site tells the programme how much room to leave under it.
 */
.synedra .synedra-fday {
	display: grid;
	grid-template-columns: minmax(0, var(--synedra-fday-column, 190px)) minmax(0, 1fr);
	column-gap: clamp(20px, 3.5vw, 44px);
	margin: 0 0 64px;
}

.synedra .synedra-fday__head {
	position: sticky;
	top: var(--synedra-sticky-top, 0px);
	/*
	 * Its own height, not the row's. A stretched item fills the day and has
	 * nowhere left to travel, which reads as a heading that never sticks.
	 */
	align-self: start;
	z-index: 3;
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 10px;
	padding: 14px 0 16px;
	background: var(--synedra-surface, #fff);
	border-bottom: 2px solid var(--synedra-text, #18181b);
}

/* The scrolling half. Its own top padding, so the first card sits level with
 * the day rather than a rule's width above it. */
.synedra .synedra-fday__body {
	min-width: 0;
	padding-top: 14px;
}

.synedra .synedra-fday__body > .synedra-fvenue:first-child {
	margin-top: 0;
}

.synedra .synedra-fday__number {
	margin: 0;
	padding: 3px 10px;
	border-radius: 999px;
	font-size: var(--synedra-label);
	font-weight: 700;
	letter-spacing: var(--synedra-track);
	text-transform: uppercase;
	color: var(--synedra-surface, #fff);
	background: var(--synedra-text, #18181b);
}

.synedra .synedra-fday__date {
	margin: 0;
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 2px;
	font-size: clamp(1.15rem, 2.4vw, 1.65rem);
	font-weight: 600;
	letter-spacing: -0.025em;
	line-height: 1.1;
	color: var(--synedra-text, #18181b);
}

.synedra .synedra-fday__figures {
	font-variant-numeric: tabular-nums;
	color: var(--synedra-muted, #71717a);
	font-weight: 400;
}

.synedra .synedra-fday__figures i {
	font-style: normal;
	padding: 0 5px;
	color: var(--synedra-border, #e4e4e7);
}

.synedra .synedra-fday__count {
	margin: 0;
	font-size: 0.8125rem;
	color: var(--synedra-muted, #71717a);
	white-space: nowrap;
}

/*
 * A gutter narrow enough to be worth having leaves too little for the cards
 * once the viewport is this small, so the day goes back to being a bar across
 * the top — still sticky, still one per day, just stacked instead of beside.
 *
 * The bar is two lines, not one. Putting "Day 1", the date and the session
 * count on a single row asks a 11px pill, a 20px date and a 13px count to
 * share one baseline, and nothing lines up with anything: the pill hangs off
 * the date's baseline, and the count drifts wherever the wrap leaves it.
 *
 * So the small type goes on its own line — the day pill at the start, the
 * count at the end, the two centred against each other — and the date has the
 * line under it to itself. The result is a heading with one strong horizontal
 * edge instead of three competing ones.
 */
@media (max-width: 900px) {
	.synedra .synedra-fday {
		display: block;

		/* What the bar occupies once it is stacked. The hall heading sticks
		 * directly under it, so the two are declared from one number. */
		--synedra-fday-bar: 85px;
	}

	.synedra .synedra-fday__head {
		flex-direction: row;
		flex-wrap: wrap;
		align-items: center;
		gap: 6px 12px;
		padding: 14px 0 12px;
	}

	/* Line one, at the end of it. */
	.synedra .synedra-fday__count {
		order: 1;
		margin-inline-start: auto;
	}

	/* Line two, all of it: `order` puts it after the count, the full basis
	 * gives it the row to itself. */
	.synedra .synedra-fday__date {
		order: 2;
		flex: 1 0 100%;
		flex-direction: row;
		align-items: baseline;
		gap: 10px;
		/* Fixed, not clamped. The hall heading parks directly under this bar
		 * and CSS cannot measure it, so the bar has to be one known height
		 * rather than one that grows with the viewport. */
		font-size: 1.375rem;
	}

	.synedra .synedra-fday__body {
		padding-top: 0;
	}

	.synedra .synedra-fday__body > .synedra-fvenue:first-child {
		margin-top: 28px;
	}

}


/* --- Programme: the hall and its rail -------------------------------- */

/*
 * A narrow gutter for the rail, and the sessions beside it. The rail is what
 * makes a hall read as one continuous thing rather than as a heading followed
 * by unrelated cards.
 */
.synedra .synedra-fvenue {
	display: grid;
	grid-template-columns: 34px minmax(0, 1fr);
	column-gap: 14px;
	row-gap: 14px;
	margin-top: 28px;
}

.synedra .synedra-fvenue__head {
	grid-column: 1 / -1;
	display: flex;
	align-items: center;
	gap: 10px;
	position: sticky;
	/* Beside the day now, not below it, so it wants no clearance of its own. */
	top: var(--synedra-sticky-top, 0px);
	z-index: 2;
	padding: 12px 0 8px;
	background: var(--synedra-surface, #fff);
}

/*
 * Stacked, the day is a bar above the hall rather than a column beside it, so
 * the hall has to stop under it. This has to live after the rule above rather
 * than up with the rest of the small-screen layout: same specificity, and the
 * one written last is the one that counts.
 */
@media (max-width: 900px) {
	.synedra .synedra-fvenue__head {
		top: calc(var(--synedra-sticky-top, 0px) + var(--synedra-fday-bar, 85px));
	}
}

.synedra .synedra-fvenue__pin {
	flex: none;
	width: 9px;
	height: 9px;
	border-radius: 50%;
	border: 2px solid var(--synedra-accent, #cf0965);
}

.synedra .synedra-fvenue__name {
	margin: 0;
	font-size: var(--synedra-label);
	font-weight: 700;
	letter-spacing: var(--synedra-track);
	text-transform: uppercase;
	color: var(--synedra-muted, #71717a);
}

/* The line itself, dotted at both ends like a route on a map. */
.synedra .synedra-fvenue__rail {
	justify-self: center;
	width: 1px;
	height: 100%;
	background: var(--synedra-tint-line);
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: space-between;
}

.synedra .synedra-fvenue__rail::before,
.synedra .synedra-fvenue__rail::after {
	content: "";
	display: block;
	width: 7px;
	height: 7px;
	border-radius: 50%;
	background: var(--synedra-tint-line);
}

@media (max-width: 640px) {
	/* The rail costs a third of a phone screen and earns nothing there. */
	.synedra .synedra-fvenue {
		grid-template-columns: minmax(0, 1fr);
	}

	.synedra .synedra-fvenue__rail {
		display: none;
	}
}

/* --- Programme: the session card -------------------------------------- */

.synedra .synedra-fsessions {
	display: flex;
	flex-direction: column;
	row-gap: 18px;
	min-width: 0;
}

.synedra .synedra-fsession {
	background: var(--synedra-surface, #fff);
	border: 1px solid var(--synedra-border, #e4e4e7);
	border-radius: calc(var(--synedra-radius, 10px) + 5px);
	box-shadow: var(--synedra-lift);
	transition: box-shadow 0.2s ease, border-color 0.2s ease;
	overflow: hidden;
}

.synedra .synedra-fsession:hover {
	box-shadow: var(--synedra-lift-hover);
	border-color: var(--synedra-tint-line);
}

/*
 * The whole heading is the control. A card whose only hit target is a small
 * chevron is a card people click three times before finding the chevron.
 */
.synedra .synedra-fsession__trigger {
	display: block;
	position: relative;
	width: 100%;
	margin: 0;
	padding: 22px 52px 20px 26px;
	border: 0;
	border-radius: 0;
	background: transparent;
	font: inherit;
	color: inherit;
	text-align: left;
	text-transform: none;
	cursor: pointer;
}

.synedra .synedra-fsession__trigger--static {
	cursor: default;
	padding-right: 26px;
}

.synedra .synedra-fsession__trigger:hover,
.synedra .synedra-fsession__trigger:focus-visible {
	background: color-mix(in srgb, var(--synedra-accent, #cf0965) 3%, transparent);
}

.synedra .synedra-fsession__meta {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 8px 12px;
	margin: 0 0 12px;
}

/* The hour is the first thing anybody looks for, so it takes the accent. */
.synedra .synedra-fsession__time {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font-size: 0.9375rem;
	font-weight: 600;
	font-variant-numeric: tabular-nums;
	line-height: 1;
	color: var(--synedra-accent, #cf0965);
}

/* A clock, drawn in CSS: no request, and it takes the colour beside it. */
.synedra .synedra-fsession__time::before {
	content: "";
	flex: none;
	width: 13px;
	height: 13px;
	border: 1.5px solid currentColor;
	border-radius: 50%;
	background:
		linear-gradient(currentColor, currentColor) center/1.5px 4px no-repeat,
		linear-gradient(currentColor, currentColor) center/3.5px 1.5px no-repeat;
	background-position: center top 2px, center left 6px;
	opacity: 0.85;
}

/* The thematic track: a soft pill in the session's own colour. */
.synedra .synedra-fsession__track {
	padding: 5px 11px;
	border-radius: 999px;
	font-size: 0.75rem;
	line-height: 1;
	color: var(--synedra-mark, var(--synedra-accent, #cf0965));
	background: color-mix(in srgb, var(--synedra-mark, var(--synedra-accent, #cf0965)) 8%, var(--synedra-surface, #fff));
	border: 1px solid color-mix(in srgb, var(--synedra-mark, var(--synedra-accent, #cf0965)) 24%, transparent);
}

.synedra .synedra-fsession__format {
	font-size: var(--synedra-label);
	font-weight: 700;
	letter-spacing: var(--synedra-track);
	text-transform: uppercase;
	color: var(--synedra-muted, #71717a);
}

.synedra .synedra-fsession__restricted {
	padding: 4px 10px;
	border-radius: 999px;
	font-size: var(--synedra-label);
	font-weight: 700;
	letter-spacing: var(--synedra-track);
	text-transform: uppercase;
	color: var(--synedra-text, #18181b);
	background: var(--synedra-alt, #f4f4f5);
}

/*
 * Weight 500, not 700. At this size a whole column of bold titles is a column
 * with no hierarchy in it; the size is already doing the work.
 */
.synedra .synedra-fsession__title {
	margin: 0;
	max-width: 54ch;
	font-size: clamp(1.0625rem, 1.8vw, 1.3125rem);
	font-weight: 500;
	letter-spacing: -0.015em;
	line-height: 1.32;
	color: var(--synedra-text, #18181b);
}

/* --- The faces on a collapsed session --------------------------------- */

.synedra .synedra-faces {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	margin-top: 16px;
}

.synedra .synedra-face {
	flex: none;
	display: block;
	width: 46px;
	height: 46px;
	border-radius: 50%;
	overflow: hidden;
	border: 2px solid var(--synedra-surface, #fff);
	background: var(--synedra-tint);
}

/* Overlapped, so a panel of nine reads as a group rather than a queue. */
.synedra .synedra-face + .synedra-face {
	margin-left: -12px;
}

.synedra .synedra-face img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.synedra .synedra-face--initial,
.synedra .synedra-face--more {
	display: flex;
	align-items: center;
	justify-content: center;
	font-size: 0.875rem;
	font-weight: 500;
	color: var(--synedra-accent, #cf0965);
}

.synedra .synedra-face--more {
	font-size: 0.75rem;
	color: var(--synedra-muted, #71717a);
	background: var(--synedra-alt, #f4f4f5);
}

/* Opening a session replaces the pile with the named list below it. */
.synedra .synedra-fsession:has(.synedra-fsession__panel.is-open) .synedra-faces {
	display: none;
}

/* --- The open/closed affordance --------------------------------------- */

.synedra .synedra-fsession__toggle {
	position: absolute;
	top: 24px;
	right: 22px;
	width: 22px;
	height: 22px;
	border-radius: 50%;
	background: var(--synedra-tint);
}

.synedra .synedra-fsession__toggle::before,
.synedra .synedra-fsession__toggle::after {
	content: "";
	position: absolute;
	top: 50%;
	left: 50%;
	width: 10px;
	height: 1.5px;
	margin: -0.75px 0 0 -5px;
	background: var(--synedra-accent, #cf0965);
	transition: transform 0.25s ease;
}

/* The upright stroke of the plus, turned away to make a minus. */
.synedra .synedra-fsession__toggle::after {
	transform: rotate(90deg);
}

.synedra .synedra-fsession__trigger[aria-expanded="true"] .synedra-fsession__toggle::after {
	transform: rotate(0deg);
}

/* --- The panel -------------------------------------------------------- */

/*
 * 0fr to 1fr: a height animation for content of unknown height, with nothing
 * measured in JavaScript and no max-height guess to be wrong about.
 */
.synedra .synedra-fsession__panel {
	display: grid;
	grid-template-rows: 0fr;
	transition: grid-template-rows 0.28s ease;
}

.synedra .synedra-fsession__panel.is-open {
	grid-template-rows: 1fr;
}

.synedra .synedra-fsession__panel-inner {
	overflow: hidden;
	min-height: 0;
}

.synedra .synedra-fsession__panel.is-open .synedra-fsession__panel-inner {
	/* Overflow is clipped while animating; visible focus rings need it back. */
	overflow: visible;
}

.synedra .synedra-fsession__body {
	padding: 0 26px;
	max-width: 68ch;
	color: var(--synedra-muted, #71717a);
	font-size: 0.9375rem;
	line-height: 1.65;
}

.synedra .synedra-fsession__body p {
	margin: 0 0 0.85em;
}

/* --- The named people inside an open session -------------------------- */

.synedra .synedra-people {
	padding: 4px 26px 22px;
}

.synedra .synedra-people__label {
	margin: 0 0 10px;
	font-size: var(--synedra-label);
	font-weight: 700;
	letter-spacing: var(--synedra-track);
	text-transform: uppercase;
	color: var(--synedra-muted, #71717a);
}

.synedra .synedra-people__list {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(232px, 1fr));
	gap: 10px 20px;
	margin: 0;
	padding: 0;
	list-style: none;
}

.synedra .synedra-person__link,
.synedra .synedra-person > .synedra-person__text {
	display: flex;
	align-items: center;
	gap: 10px;
	text-decoration: none;
	color: inherit;
}

.synedra .synedra-person__face {
	flex: none;
	width: 42px;
	height: 42px;
	border-radius: 50%;
	object-fit: cover;
	background: var(--synedra-tint);
}

.synedra .synedra-person__face--initial {
	display: flex;
	align-items: center;
	justify-content: center;
	font-size: 0.9375rem;
	color: var(--synedra-accent, #cf0965);
}

.synedra .synedra-person__text {
	min-width: 0;
	display: flex;
	flex-direction: column;
}

.synedra .synedra-person__who {
	font-size: 0.9375rem;
	font-weight: 600;
	line-height: 1.3;
	color: var(--synedra-text, #18181b);
}

.synedra .synedra-person__link:hover .synedra-person__who {
	color: var(--synedra-accent, #cf0965);
}

/* §8 — the line chosen for THIS session, not the person's general title. */
.synedra .synedra-person__what {
	font-size: 0.8125rem;
	line-height: 1.35;
	color: var(--synedra-muted, #71717a);
}

@media (max-width: 640px) {
	.synedra .synedra-fsession__trigger {
		padding: 18px 44px 16px 18px;
	}

	.synedra .synedra-fsession__body,
	.synedra .synedra-people {
		padding-left: 18px;
		padding-right: 18px;
	}
}

/* --- Speakers: the A–Z rail ------------------------------------------ */

.synedra .synedra-alpha {
	position: sticky;
	top: 0;
	z-index: 2;
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
	margin: 0 0 24px;
	padding: 12px 0;
	background: var(--synedra-surface, #fff);
	border-bottom: 1px solid var(--synedra-border, #e4e4e7);
}

/* Square chips, the way a printed index sets its thumb tabs. */
.synedra .synedra-alpha__letter {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 30px;
	height: 30px;
	border-radius: calc(var(--synedra-radius, 10px) * 0.45);
	border: 1px solid var(--synedra-tint-line);
	background: var(--synedra-tint);
	text-decoration: none;
	font-size: 0.875rem;
	font-weight: 600;
	line-height: 1;
	color: var(--synedra-accent, #cf0965);
	transition: color 0.15s ease, background-color 0.15s ease;
}

.synedra .synedra-alpha__letter:hover,
.synedra .synedra-alpha__letter:focus-visible {
	color: var(--synedra-surface, #fff);
	background: var(--synedra-accent, #cf0965);
	border-color: var(--synedra-accent, #cf0965);
}

/*
 * The letter sits in the margin, not in a band across the page.
 *
 * The one deliberate departure from the reference this set is modelled on.
 * A full-width heading costs a whole grid row per letter, which is invisible
 * on a forum with twenty Παπαs and ruinous on a conference with one of each —
 * and a regional conference with thirty speakers is the common case for this
 * platform, not the edge one. Measured on a twelve-speaker programme, the band
 * version runs 4,300px and this one 3,400px for the same content.
 */
.synedra .synedra-directory__group {
	display: grid;
	grid-template-columns: 52px minmax(0, 1fr);
	gap: 0 20px;
	align-items: start;
	padding: 22px 0;
	border-top: 1px solid var(--synedra-border, #e4e4e7);
	scroll-margin-top: 76px;
}

.synedra .synedra-directory__group:first-of-type {
	border-top: 0;
}

.synedra .synedra-directory__letter {
	position: sticky;
	top: 76px;
	margin: 0;
	font-size: 1.75rem;
	font-weight: 700;
	line-height: 1;
	letter-spacing: 0.02em;
	color: color-mix(in srgb, var(--synedra-text, #18181b) 28%, transparent);
}

@media (max-width: 560px) {
	.synedra .synedra-directory__group {
		grid-template-columns: minmax(0, 1fr);
		gap: 10px;
	}

	.synedra .synedra-directory__letter {
		position: static;
		font-size: 1.25rem;
	}
}

/* --- Speakers: the card ---------------------------------------------- */

.synedra .synedra-speakers--directory {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(172px, 1fr));
	gap: 30px 22px;
}

.synedra .synedra-dcard__link {
	display: block;
	text-decoration: none;
	color: inherit;
	/* The lift on hover, done with translate so nothing reflows. */
	transition: transform 0.4s ease;
}

.synedra a.synedra-dcard__link:hover,
.synedra a.synedra-dcard__link:focus-visible {
	transform: translateY(-5px);
}

.synedra .synedra-dcard__photo {
	position: relative;
	aspect-ratio: 1 / 1;
	margin-bottom: 14px;
	overflow: hidden;
	border-radius: var(--synedra-radius, 10px);
	background: var(--synedra-tint);
}

/*
 * A wash of the accent over a partly desaturated photograph.
 *
 * Speaker portraits arrive from a hundred different photographers in a
 * hundred different colour temperatures, and side by side they look like a
 * ransom note. Pulling the saturation down and laying one tint over the top
 * is what makes a wall of them look commissioned. The tint lifts on hover, so
 * the real photograph is never more than a pointer away.
 */
.synedra .synedra-dcard__photo img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center;
	display: block;
	filter: grayscale(55%);
	transition: transform 0.6s ease, filter 0.4s ease;
}

.synedra .synedra-dcard__photo::after {
	content: "";
	position: absolute;
	inset: 0;
	z-index: 1;
	background: var(--synedra-accent, #cf0965);
	opacity: 0.22;
	transition: opacity 0.4s ease;
	pointer-events: none;
}

.synedra a.synedra-dcard__link:hover .synedra-dcard__photo img,
.synedra a.synedra-dcard__link:focus-visible .synedra-dcard__photo img {
	transform: scale(1.05);
	filter: grayscale(0%);
}

.synedra a.synedra-dcard__link:hover .synedra-dcard__photo::after,
.synedra a.synedra-dcard__link:focus-visible .synedra-dcard__photo::after {
	opacity: 0;
}

.synedra .synedra-dcard__initial {
	position: absolute;
	inset: 0;
	z-index: 2;
	display: flex;
	align-items: center;
	justify-content: center;
	font-size: 2rem;
	font-weight: 300;
	color: var(--synedra-accent, #cf0965);
	background: var(--synedra-tint);
}

/* §18 — said on the card, so a chair is not mistaken for a speaker. */
.synedra .synedra-dcard__role {
	position: absolute;
	z-index: 2;
	left: 50%;
	bottom: 8px;
	transform: translateX(-50%);
	padding: 3px 9px;
	border-radius: 999px;
	font-size: var(--synedra-label);
	font-weight: 700;
	letter-spacing: var(--synedra-track);
	text-transform: uppercase;
	color: var(--synedra-surface, #fff);
	background: color-mix(in srgb, var(--synedra-text, #18181b) 78%, transparent);
}

.synedra .synedra-dcard__name {
	margin: 0 0 5px;
	text-align: center;
	font-size: 1rem;
	font-weight: 700;
	line-height: 1.3;
	letter-spacing: -0.01em;
	color: var(--synedra-accent, #cf0965);
}

.synedra .synedra-dcard__title {
	margin: 0;
	text-align: center;
	font-size: 0.875rem;
	line-height: 1.3;
	color: var(--synedra-muted, #71717a);
}

.synedra .synedra-dcard__org {
	margin: 4px 0 0;
	text-align: center;
	font-size: 0.875rem;
	font-weight: 500;
	line-height: 1.3;
	color: var(--synedra-text, #18181b);
}

/* --- Profile: the feature -------------------------------------------- */

.synedra.synedra-profile--feature {
	max-width: 880px;
	margin-inline: auto;
}

.synedra .synedra-feature__head {
	text-align: center;
	padding: 8px 0 34px;
}

.synedra .synedra-feature__photo {
	display: block;
	width: min(220px, 52vw);
	aspect-ratio: 1 / 1;
	margin: 0 auto 22px;
	object-fit: cover;
	border-radius: 50%;
	background: var(--synedra-tint);
	box-shadow: var(--synedra-lift);
}

.synedra .synedra-feature__photo--empty {
	display: flex;
	align-items: center;
	justify-content: center;
	font-size: 4rem;
	font-weight: 300;
	color: var(--synedra-accent, #cf0965);
}

.synedra .synedra-feature__roles {
	display: flex;
	justify-content: center;
	gap: 8px;
	margin: 0 0 12px;
}

.synedra .synedra-feature__role {
	padding: 4px 12px;
	border-radius: 999px;
	font-size: var(--synedra-label);
	font-weight: 700;
	letter-spacing: var(--synedra-track);
	text-transform: uppercase;
	color: var(--synedra-accent, #cf0965);
	background: var(--synedra-tint);
	border: 1px solid var(--synedra-tint-line);
}

.synedra .synedra-feature__name {
	margin: 0;
	font-size: clamp(1.75rem, 5.5vw, 2.75rem);
	font-weight: 600;
	letter-spacing: -0.03em;
	line-height: 1.1;
	color: var(--synedra-text, #18181b);
}

.synedra .synedra-feature__title {
	margin: 12px auto 0;
	max-width: 46ch;
	font-size: 1.0625rem;
	line-height: 1.45;
	color: var(--synedra-muted, #71717a);
}

.synedra .synedra-feature__org {
	margin: 4px 0 0;
	font-size: 1.0625rem;
	font-weight: 600;
	color: var(--synedra-text, #18181b);
}

.synedra .synedra-feature__titles {
	margin: 14px auto 0;
	padding: 0;
	max-width: 52ch;
	list-style: none;
	font-size: 0.875rem;
	line-height: 1.5;
	color: var(--synedra-muted, #71717a);
}

.synedra .synedra-feature__titles li + li {
	margin-top: 3px;
}

.synedra .synedra-feature__socials {
	display: flex;
	justify-content: center;
	flex-wrap: wrap;
	gap: 8px;
	margin: 20px 0 0;
	padding: 0;
	list-style: none;
}

.synedra .synedra-feature__section {
	padding: 30px 0 0;
	border-top: 1px solid var(--synedra-border, #e4e4e7);
	margin-top: 8px;
}

.synedra .synedra-feature__heading {
	margin: 0 0 18px;
	font-size: var(--synedra-label);
	font-weight: 700;
	letter-spacing: var(--synedra-track);
	text-transform: uppercase;
	color: var(--synedra-muted, #71717a);
}

.synedra .synedra-feature__bio {
	max-width: 68ch;
	font-size: 1rem;
	line-height: 1.7;
}

.synedra .synedra-feature__bio p {
	margin: 0 0 1em;
}

/* --- Profile: the appearances ---------------------------------------- */

/*
 * The same card as the programme, so a session recognised on one page is the
 * same object on the other — with the day and hall added, which the programme
 * does not need because its headings already said them.
 */
.synedra .synedra-appears {
	display: flex;
	flex-direction: column;
	row-gap: 18px;
	margin: 0;
	padding: 0;
	list-style: none;
}

.synedra .synedra-appears__row {
	background: var(--synedra-surface, #fff);
	border: 1px solid var(--synedra-border, #e4e4e7);
	border-radius: calc(var(--synedra-radius, 10px) + 5px);
	box-shadow: var(--synedra-lift);
	padding: 20px 24px;
}

.synedra .synedra-appears__when {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 8px 12px;
	margin-bottom: 10px;
	font-size: 0.875rem;
	color: var(--synedra-muted, #71717a);
}

.synedra .synedra-appears__day {
	padding: 3px 10px;
	border-radius: 999px;
	font-size: var(--synedra-label);
	font-weight: 700;
	letter-spacing: var(--synedra-track);
	text-transform: uppercase;
	color: var(--synedra-surface, #fff);
	/* The session's own colour, so a profile and the programme agree. */
	background: var(--synedra-mark, var(--synedra-text, #18181b));
}

.synedra .synedra-appears__date {
	color: var(--synedra-text, #18181b);
	font-weight: 500;
}

.synedra .synedra-appears__time {
	font-variant-numeric: tabular-nums;
	font-weight: 600;
	color: var(--synedra-accent, #cf0965);
}

.synedra .synedra-appears__room {
	color: var(--synedra-text, #18181b);
}

.synedra .synedra-appears__eyebrow {
	display: flex;
	flex-wrap: wrap;
	gap: 6px 12px;
	margin: 0 0 8px;
	font-size: var(--synedra-label);
	font-weight: 700;
	letter-spacing: var(--synedra-track);
	text-transform: uppercase;
	color: var(--synedra-muted, #71717a);
}

/* The role this person held here — what an appearance list is read for. */
.synedra .synedra-appears__as {
	color: var(--synedra-accent, #cf0965);
}

.synedra .synedra-appears__title {
	margin: 0;
	max-width: 54ch;
	font-size: clamp(1.0625rem, 1.8vw, 1.25rem);
	font-weight: 500;
	letter-spacing: -0.015em;
	line-height: 1.32;
	color: var(--synedra-text, #18181b);
}

.synedra .synedra-appears__row .synedra-people {
	padding: 16px 0 0;
}

/* ---------------------------------------------------------------------------
 * The registration form.
 *
 * Inputs inherit the theme's font rather than declaring one: this form sits in
 * the middle of somebody's page, and a registration box in a different
 * typeface than the paragraph above it reads as a third-party widget, which is
 * exactly what it must not look like.
 * ------------------------------------------------------------------------ */

.synedra .synedra-reg__notice {
	margin: 0 0 18px;
	padding: 14px 16px;
	border-radius: var(--synedra-radius, 10px);
	border: 1px solid var(--synedra-border, #e4e4e7);
	background: var(--synedra-alt, #f4f4f5);
	line-height: 1.55;
}

.synedra .synedra-reg__notice--ok {
	border-color: color-mix(in srgb, var(--synedra-accent, #cf0965) 35%, var(--synedra-border, #e4e4e7));
	background: color-mix(in srgb, var(--synedra-accent, #cf0965) 6%, transparent);
}

/*
 * Something went wrong, said without a colour of its own. An amber warning
 * would be a seventh colour that no setting on the plugin's page can reach,
 * and one hard-coded hue on a site whose palette has been changed is exactly
 * the thing that looks broken. The weight of the border and the text carry it
 * instead: darker and heavier than the neutral notice, plainly not the tinted
 * success one.
 */
.synedra .synedra-reg__notice--bad {
	color: var(--synedra-text, #18181b);
	border-width: 2px;
	border-color: color-mix(in srgb, var(--synedra-text, #18181b) 45%, var(--synedra-border, #e4e4e7));
	background: var(--synedra-alt, #f4f4f5);
	font-weight: 600;
}

/* Two columns where there is room, one where there is not. Name and surname
 * pair naturally; email and phone are given the same treatment so the form
 * stays two tidy rows rather than one long column. */
.synedra .synedra-reg__grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
	gap: 14px 18px;
}

.synedra .synedra-reg__field {
	margin: 0;
	display: flex;
	flex-direction: column;
	gap: 5px;
}

.synedra .synedra-reg__field label {
	font-size: 0.875rem;
	font-weight: 600;
	color: var(--synedra-text, #18181b);
}

.synedra .synedra-reg__field input {
	width: 100%;
	padding: 10px 12px;
	font: inherit;
	color: var(--synedra-text, #18181b);
	background: var(--synedra-surface, #fff);
	border: 1px solid var(--synedra-border, #e4e4e7);
	border-radius: calc(var(--synedra-radius, 10px) * 0.8);
}

/* A soft ring rather than the plugin-wide outline: this one field is the whole
 * page's business while it is being filled in. */
.synedra .synedra-reg__field input:focus {
	outline: none;
	color: var(--synedra-text, #18181b);
	background: var(--synedra-surface, #fff);
	border-color: var(--synedra-accent, #cf0965);
	box-shadow: 0 0 0 3px color-mix(in srgb, var(--synedra-accent, #cf0965) 15%, transparent);
}

.synedra .synedra-reg__hint {
	font-size: 0.8125rem;
	color: var(--synedra-muted, #71717a);
}

.synedra .synedra-reg__consent {
	margin: 14px 0 0;
	font-size: 0.9375rem;
	line-height: 1.5;
}

.synedra .synedra-reg__consent label {
	display: flex;
	align-items: flex-start;
	gap: 9px;
	cursor: pointer;
}

/* The box keeps its size when the label wraps to three lines, and stays on
 * the first one rather than centring itself against the whole paragraph. */
.synedra .synedra-reg__consent input {
	flex: none;
	margin: 0.2em 0 0;
	width: 1.05em;
	height: 1.05em;
	accent-color: var(--synedra-accent, #cf0965);
}

.synedra .synedra-reg__submit {
	margin: 22px 0 0;
}

.synedra .synedra-reg__button {
	font: inherit;
	font-weight: 600;
	text-transform: none;
	cursor: pointer;
	padding: 12px 28px;
	color: var(--synedra-surface, #fff);
	background: var(--synedra-accent, #cf0965);
	border: 1px solid transparent;
	border-radius: 999px;
	transition: opacity 0.15s ease;
}

.synedra .synedra-reg__button:hover,
.synedra .synedra-reg__button:focus-visible {
	color: var(--synedra-surface, #fff);
	background: var(--synedra-accent, #cf0965);
	border-color: transparent;
	opacity: 0.88;
}

/* Off-screen rather than display:none — a submitter that skips hidden inputs
 * would walk straight past a trap that was not rendered. */
.synedra .synedra-reg__trap {
	position: absolute;
	left: -9999px;
	width: 1px;
	height: 1px;
	overflow: hidden;
}

/* Motion is an enhancement, not the design. */
@media (prefers-reduced-motion: reduce) {
	.synedra * {
		transition: none !important;
	}

	.synedra .synedra-card:hover,
	.synedra .synedra-tile:hover .synedra-tile__photo {
		transform: none;
	}
}
