/*
Theme Name: I Love Belval
Theme URI: https://ilovebelval.com
Author: Aswin Lutchanah
Author URI: https://aswinlutchanah.com
Description: A standalone theme for I Love Belval: a neighbourhood guide of places, events and news. Built from nothing rather than layered over a blog theme, so every rule exists because it was wanted.
Version: 3.14.3
Requires at least: 6.0
Tested up to: 6.8
Requires PHP: 8.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: ilovebelval
Tags: blog, custom-logo, custom-menu, featured-images, translation-ready
*/

/* ==========================================================================
   0. FONTS — Lato, self-hosted
   Served from the theme itself (no third-party request, no visitor IP sent
   to Google), so it is GDPR-clean and needs no external font plugin. Lato's
   real weights are 400 / 700 / 900; the theme's 600 falls to 700 and its 800
   falls to 900 via normal CSS weight matching. latin-ext covers accented
   characters (é ë ü ç …). Files live in /assets/fonts/.
   ========================================================================== */

@font-face {
	font-family: "Lato";
	font-style: normal;
	font-weight: 400;
	font-display: swap;
	src: url("assets/fonts/lato-400.woff2") format("woff2");
	unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
	font-family: "Lato";
	font-style: normal;
	font-weight: 400;
	font-display: swap;
	src: url("assets/fonts/lato-400-ext.woff2") format("woff2");
	unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
	font-family: "Lato";
	font-style: normal;
	font-weight: 700;
	font-display: swap;
	src: url("assets/fonts/lato-700.woff2") format("woff2");
	unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
	font-family: "Lato";
	font-style: normal;
	font-weight: 700;
	font-display: swap;
	src: url("assets/fonts/lato-700-ext.woff2") format("woff2");
	unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
	font-family: "Lato";
	font-style: normal;
	font-weight: 900;
	font-display: swap;
	src: url("assets/fonts/lato-900.woff2") format("woff2");
	unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
	font-family: "Lato";
	font-style: normal;
	font-weight: 900;
	font-display: swap;
	src: url("assets/fonts/lato-900-ext.woff2") format("woff2");
	unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* ==========================================================================
   1. TOKENS
   Every colour, space and size the theme uses. Change them here, not below.
   ========================================================================== */

:root {
	/* Brand */
	--ilb-yellow: #FFD400;
	--ilb-yellow-soft: #FFF3B8;
	--ilb-ink: #111111;

	/* Neutrals */
	--ilb-bg: #EFEFEF;
	--ilb-surface: #FFFFFF;
	--ilb-line: #E5E5E5;
	--ilb-line-soft: #EFEFEF;
	--ilb-muted: #767676;
	--ilb-faint: #9A9A9A;

	/* Type */
	--ilb-font: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
	--ilb-step-0: 1rem;
	--ilb-step-1: clamp(1.05rem, .3vw + 1rem, 1.15rem);
	--ilb-step-2: clamp(1.3rem, 1.2vw + 1rem, 1.7rem);
	--ilb-step-3: clamp(1.75rem, 2.4vw + 1rem, 2.6rem);
	--ilb-step-4: clamp(2.1rem, 4vw + 1rem, 3.4rem);

	/* Space */
	--ilb-gap: 1.25rem;
	--ilb-gap-lg: clamp(1.75rem, 3.5vw, 3rem);
	--ilb-block: clamp(2.5rem, 5vw, 4rem);
	--ilb-pad: clamp(1.25rem, 4vw, 1.5rem);

	/* Shape */
	--ilb-radius: 14px;
	--ilb-radius-lg: 18px;
	--ilb-radius-pill: 999px;

	/* Depth */
	--ilb-shadow: 0 8px 24px rgba(0, 0, 0, .07);
	--ilb-shadow-lift: 0 12px 32px rgba(0, 0, 0, .1);

	/* Measure */
	--ilb-wrap: 1200px;
	--ilb-read: 720px;

	/* Motion */
	--ilb-ease: .16s ease;

	/* Cover darkening, overridden per-site from the Customiser */
	--ilb-veil: .40;
}

@media (prefers-reduced-motion: reduce) {
	*, *::before, *::after {
		animation-duration: .01ms;
		animation-iteration-count: 1;
		transition-duration: .01ms;
		scroll-behavior: auto;
	}
}


/* ==========================================================================
   2. BASE
   ========================================================================== */

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

html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }

body {
	margin: 0;
	background: var(--ilb-bg);
	color: var(--ilb-ink);
	font-family: var(--ilb-font);
	font-size: var(--ilb-step-0);
	line-height: 1.6;
	-webkit-font-smoothing: antialiased;
}

img, picture, svg, video { max-width: 100%; display: block; }
img { height: auto; }

a { color: inherit; }

button, input, select, textarea { font: inherit; color: inherit; }
button { cursor: pointer; }

h1, h2, h3, h4 { margin: 0; line-height: 1.18; letter-spacing: -.012em; font-weight: 800; }

p { margin: 0 0 1em; }
p:last-child { margin-bottom: 0; }

:focus-visible {
	outline: 3px solid var(--ilb-ink);
	outline-offset: 3px;
	border-radius: 3px;
}

.screen-reader-text {
	position: absolute;
	width: 1px; height: 1px;
	margin: -1px; padding: 0;
	overflow: hidden;
	clip: rect(0 0 0 0);
	clip-path: inset(50%);
	white-space: nowrap;
	border: 0;
}

.ilb-skip {
	position: absolute;
	left: -9999px;
	z-index: 1000;
	padding: .75em 1.25em;
	background: var(--ilb-ink);
	color: #fff;
	text-decoration: none;
	border-radius: 0 0 var(--ilb-radius) 0;
}
.ilb-skip:focus { left: 0; top: 0; }


/* ==========================================================================
   3. LAYOUT PRIMITIVES
   ========================================================================== */

.ilb-main { display: block; }

.ilb-wrap {
	width: 100%;
	max-width: var(--ilb-wrap);
	margin-inline: auto;
	padding-inline: var(--ilb-pad);
}

.ilb-wrap + .ilb-wrap,
.ilb-band + .ilb-wrap,
.ilb-hero + .ilb-wrap { margin-top: var(--ilb-block); }

.ilb-wrap:last-of-type { margin-bottom: var(--ilb-block); }

.ilb-icon { display: inline-flex; }
.ilb-icon svg { width: 1.25em; height: 1.25em; }

.ilb-meta {
	display: block;
	font-size: .8rem;
	font-weight: 700;
	letter-spacing: .05em;
	text-transform: uppercase;
	color: var(--ilb-faint);
}

.ilb-pill {
	display: inline-block;
	align-self: flex-start;
	padding: .25em .85em;
	border-radius: var(--ilb-radius-pill);
	background: var(--ilb-yellow);
	color: var(--ilb-ink);
	font-size: .74rem;
	font-weight: 800;
	letter-spacing: .04em;
	text-transform: uppercase;
	text-decoration: none;
}

/* Section heading */
.ilb-head {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	justify-content: space-between;
	gap: .5rem 1rem;
	margin-bottom: var(--ilb-gap);
}
.ilb-head__title {
	flex: 1 1 auto;
	min-width: 0;
	font-size: var(--ilb-step-2);
}
.ilb-head__link {
	flex: 0 0 auto;
	font-size: .9rem;
	font-weight: 700;
	text-decoration: none;
	white-space: nowrap;
	border-bottom: 2px solid var(--ilb-yellow);
	padding-bottom: 1px;
	transition: border-color var(--ilb-ease);
}
.ilb-head__link:hover { border-bottom-color: var(--ilb-ink); }


/* ==========================================================================
   4. MASTHEAD
   ========================================================================== */

.ilb-masthead {
	position: relative;
	z-index: 50;
	background: var(--ilb-surface);
	border-bottom: 1px solid var(--ilb-line);
}

.ilb-masthead__inner {
	max-width: var(--ilb-wrap);
	margin-inline: auto;
	padding: .75rem var(--ilb-pad);
	display: flex;
	align-items: center;
	gap: 1rem;
}

.ilb-brand {
	display: inline-flex;
	align-items: center;
	text-decoration: none;
	font-weight: 800;
	font-size: 1.1rem;
	letter-spacing: -.01em;
	margin-right: auto;
}
.ilb-brand img { max-height: 44px; width: auto; }
.ilb-brand__text { display: inline-flex; align-items: center; gap: .18em; }
.ilb-brand__heart { color: var(--ilb-yellow); }
.ilb-brand__heart svg { width: 1.05em; height: 1.05em; }

.ilb-burger {
	display: none;
	width: 44px; height: 44px;
	padding: 0;
	border: 1px solid var(--ilb-line);
	border-radius: var(--ilb-radius-pill);
	background: var(--ilb-surface);
	align-items: center;
	justify-content: center;
}
.ilb-burger__bars,
.ilb-burger__bars::before,
.ilb-burger__bars::after {
	display: block;
	width: 18px; height: 2px;
	background: var(--ilb-ink);
	border-radius: 2px;
	transition: transform var(--ilb-ease), opacity var(--ilb-ease);
}
.ilb-burger__bars { position: relative; }
.ilb-burger__bars::before,
.ilb-burger__bars::after { content: ""; position: absolute; left: 0; }
.ilb-burger__bars::before { top: -6px; }
.ilb-burger__bars::after { top: 6px; }
.ilb-nav-open .ilb-burger__bars { background: transparent; }
.ilb-nav-open .ilb-burger__bars::before { transform: translateY(6px) rotate(45deg); }
.ilb-nav-open .ilb-burger__bars::after { transform: translateY(-6px) rotate(-45deg); }

.ilb-menu {
	display: flex;
	align-items: center;
	gap: .25rem;
	margin: 0;
	padding: 0;
	list-style: none;
}
.ilb-menu li { position: relative; }
.ilb-menu a {
	display: block;
	padding: .6em .9em;
	border-radius: var(--ilb-radius-pill);
	font-weight: 700;
	font-size: .95rem;
	text-decoration: none;
	transition: background var(--ilb-ease);
}
.ilb-menu a:hover,
.ilb-menu .current-menu-item > a { background: var(--ilb-yellow); }

.ilb-submenu-toggle {
	position: absolute;
	inset: 0;
	width: 100%;
	border: 0;
	background: none;
	padding: 0;
}
@media (hover: hover) {
	.ilb-submenu-toggle { display: none; }
}

.ilb-menu .sub-menu {
	position: absolute;
	top: 100%;
	left: 0;
	z-index: 60;
	min-width: 220px;
	margin: 0;
	padding: .4rem;
	list-style: none;
	background: var(--ilb-surface);
	border: 1px solid var(--ilb-line);
	border-radius: var(--ilb-radius);
	box-shadow: var(--ilb-shadow-lift);
	opacity: 0;
	visibility: hidden;
	transform: translateY(4px);
	transition: opacity var(--ilb-ease), transform var(--ilb-ease), visibility var(--ilb-ease);
}
.ilb-menu .menu-item-has-children:hover > .sub-menu,
.ilb-menu .menu-item-has-children:focus-within > .sub-menu,
.ilb-menu .menu-item-has-children.is-open > .sub-menu {
	opacity: 1;
	visibility: visible;
	transform: translateY(0);
}
.ilb-menu .sub-menu a { font-size: .92rem; border-radius: 10px; }


/* ==========================================================================
   5. HERO
   ========================================================================== */

.ilb-hero {
	position: relative;
	display: flex;
	align-items: flex-end;
	min-height: clamp(340px, 52vh, 520px);
	overflow: hidden;
	background: var(--ilb-ink);
}
.ilb-hero--flat { background: var(--ilb-yellow); }

.ilb-hero__img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.ilb-hero::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(
		to bottom,
		rgb(0 0 0 / calc(var(--ilb-veil) * .75)) 0%,
		rgb(0 0 0 / calc(var(--ilb-veil) * .3)) 38%,
		rgb(0 0 0 / calc(var(--ilb-veil) * 1.55)) 100%
	);
}
.ilb-hero--flat::after { background: none; }

.ilb-hero__inner {
	position: relative;
	z-index: 1;
	width: 100%;
	max-width: var(--ilb-wrap);
	margin-inline: auto;
	padding: var(--ilb-block) var(--ilb-pad) clamp(1.5rem, 3vw, 2.25rem);
	color: #fff;
}
.ilb-hero--flat .ilb-hero__inner { color: var(--ilb-ink); }

.ilb-hero__title {
	max-width: 18ch;
	font-size: var(--ilb-step-4);
	margin-bottom: .3rem;
	text-wrap: wrap;
}
.ilb-hero__sub {
	max-width: 46ch;
	font-size: var(--ilb-step-1);
	opacity: .94;
	margin-bottom: 1.5rem;
}


/* ==========================================================================
   6. SEARCH
   ========================================================================== */

.ilb-search {
	display: flex;
	align-items: center;
	gap: .5rem;
	max-width: 620px;
	padding: 5px 5px 5px 18px;
	background: var(--ilb-surface);
	border: 1px solid transparent;
	border-radius: var(--ilb-radius-pill);
	box-shadow: var(--ilb-shadow-lift);
}
.ilb-search__icon { flex: 0 0 auto; color: var(--ilb-faint); }
.ilb-search input[type="search"] {
	flex: 1 1 auto;
	min-width: 0;
	padding: .8em .3em;
	border: 0;
	background: none;
	color: var(--ilb-ink);
	-webkit-appearance: none;
	appearance: none;
}
.ilb-search input[type="search"]::placeholder { color: #8A8A8A; opacity: 1; }
.ilb-search input[type="search"]:focus { outline: none; }
.ilb-search:focus-within { box-shadow: var(--ilb-shadow-lift), 0 0 0 3px var(--ilb-yellow); }
.ilb-search button {
	flex: 0 0 auto;
	padding: .75em 1.6em;
	border: 0;
	border-radius: var(--ilb-radius-pill);
	background: var(--ilb-ink);
	color: #fff;
	font-weight: 700;
	font-size: .95rem;
	transition: background var(--ilb-ease);
}
.ilb-search button:hover { background: #000; }

.ilb-searchagain { margin-bottom: var(--ilb-block); }
.ilb-searchagain .ilb-search {
	box-shadow: none;
	border-color: var(--ilb-line);
}
.ilb-searchagain .ilb-search:focus-within { box-shadow: 0 0 0 3px var(--ilb-yellow); }


/* Quick links under the hero search */
.ilb-quick {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin-top: 1rem;
}
.ilb-quick a {
	display: inline-flex;
	align-items: center;
	gap: .45em;
	padding: .5em 1.05em;
	background: var(--ilb-surface);
	color: var(--ilb-ink);
	border-radius: var(--ilb-radius-pill);
	font-size: .88rem;
	font-weight: 700;
	text-decoration: none;
	transition: background var(--ilb-ease);
}
.ilb-quick a:hover { background: var(--ilb-yellow); }
.ilb-quick .ilb-icon svg { width: 1.05em; height: 1.05em; }


/* ==========================================================================
   7. BANDS
   ========================================================================== */

.ilb-band {
	background: var(--ilb-surface);
	padding-block: clamp(2rem, 4vw, 3rem);
	border-bottom: 1px solid var(--ilb-line);
}
.ilb-band--yellow {
	background: var(--ilb-yellow);
	border-bottom: 0;
}

.ilb-band__row {
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
	gap: var(--ilb-gap-lg);
}
.ilb-band__text { min-width: 0; flex: 1 1 auto; }

.ilb-band__back {
	display: inline-block;
	margin-bottom: .8rem;
	font-size: .85rem;
	font-weight: 700;
	text-decoration: none;
	opacity: .72;
	transition: opacity var(--ilb-ease);
}
.ilb-band__back:hover { opacity: 1; }

.ilb-band__title {
	max-width: 22ch;
	font-size: var(--ilb-step-3);
	text-wrap: wrap;
}
.ilb-band__count {
	margin: .5rem 0 0;
	font-size: .8rem;
	font-weight: 700;
	letter-spacing: .08em;
	text-transform: uppercase;
	opacity: .62;
}
.ilb-band__intro {
	max-width: 62ch;
	margin-top: .9rem;
	line-height: 1.6;
}
.ilb-band__intro p { margin-bottom: .6em; }

.ilb-band__icon {
	flex: 0 0 auto;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 96px; height: 96px;
	border-radius: 24px;
	background: var(--ilb-ink);
	color: var(--ilb-yellow);
}
.ilb-band__icon svg { width: 48px; height: 48px; }

/* Search sits under the intro, in the wide column, where the field has room
   for its full placeholder. */
.ilb-band__search {
	max-width: 520px;
	margin-top: 1.6rem;
}
.ilb-band__search .ilb-search {
	box-shadow: 0 6px 20px rgb(0 0 0 / .1);
	border-color: transparent;
}
.ilb-band__search .ilb-search:focus-within {
	box-shadow: 0 6px 20px rgb(0 0 0 / .1), 0 0 0 3px var(--ilb-ink);
}
.ilb-band__search .ilb-search button { padding: .7em 1.35em; font-size: .9rem; }

/* Filter pills, given a row of their own between the band and the grid. */
.ilb-filters {
	margin-top: var(--ilb-gap-lg);
	margin-bottom: calc( var(--ilb-block) * -.35 );
}


/* ==========================================================================
   8. CARDS, TILES, LISTS
   ========================================================================== */

.ilb-cards {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
	gap: 18px;
}

.ilb-card {
	display: flex;
	flex-direction: column;
	overflow: hidden;
	background: var(--ilb-surface);
	border: 1px solid var(--ilb-line);
	border-radius: var(--ilb-radius);
	text-decoration: none;
	transition: transform var(--ilb-ease), box-shadow var(--ilb-ease);
}
.ilb-card:hover { transform: translateY(-3px); box-shadow: var(--ilb-shadow); }
.ilb-card__pic { display: block; overflow: hidden; background: var(--ilb-line-soft); }
.ilb-card__pic img {
	width: 100%;
	height: 170px;
	object-fit: cover;
	transition: transform .45s ease;
}
.ilb-card:hover .ilb-card__pic img { transform: scale(1.04); }
.ilb-card__text {
	display: flex;
	flex-direction: column;
	gap: .4em;
	padding: 16px 18px 18px;
}
.ilb-card__name { font-weight: 800; font-size: 1.05rem; line-height: 1.32; }
.ilb-card__sum { font-size: .92rem; color: var(--ilb-muted); line-height: 1.55; }


.ilb-tiles {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
	gap: 14px;
}
.ilb-tile {
	display: block;
	padding: 22px 20px;
	background: var(--ilb-surface);
	border: 1px solid var(--ilb-line);
	border-radius: var(--ilb-radius);
	text-decoration: none;
	transition: background var(--ilb-ease), transform var(--ilb-ease);
}
.ilb-tile:hover { background: var(--ilb-yellow); transform: translateY(-2px); }
.ilb-tile__icon {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 46px; height: 46px;
	margin-bottom: .9rem;
	border-radius: 13px;
	background: var(--ilb-yellow);
	transition: background var(--ilb-ease), color var(--ilb-ease);
}
.ilb-tile__icon svg { width: 25px; height: 25px; }
.ilb-tile:hover .ilb-tile__icon { background: var(--ilb-ink); color: var(--ilb-yellow); }
.ilb-tile__name { display: block; font-weight: 800; font-size: 1.02rem; line-height: 1.3; }
.ilb-tile__count { display: block; margin-top: .35em; font-size: .86rem; color: var(--ilb-muted); }
.ilb-tile:hover .ilb-tile__count { color: var(--ilb-ink); }


.ilb-list { display: flex; flex-direction: column; gap: .7rem; }


/* ==========================================================================
   9. HOMEPAGE: LEAD STORY AND AGENDA
   ========================================================================== */

.ilb-duo {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-start;
	gap: var(--ilb-gap-lg);
}
.ilb-duo__main { flex: 3 1 400px; min-width: 0; }
.ilb-duo__side { flex: 2 1 290px; min-width: 0; }
.ilb-duo__main .ilb-list { margin-top: .7rem; }

.ilb-story {
	display: flex;
	flex-wrap: wrap;
	overflow: hidden;
	background: var(--ilb-surface);
	border: 1px solid var(--ilb-line);
	border-radius: var(--ilb-radius-lg);
	text-decoration: none;
	transition: transform .18s ease, box-shadow .18s ease;
}
.ilb-story:hover { transform: translateY(-3px); box-shadow: var(--ilb-shadow-lift); }

.ilb-story__pic {
	position: relative;
	flex: 1 1 200px;
	min-width: 0;
	min-height: 210px;
	overflow: hidden;
	background: var(--ilb-line-soft);
}
.ilb-story__pic img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform .45s ease;
}
.ilb-story:hover .ilb-story__pic img { transform: scale(1.04); }
.ilb-story__mark {
	position: absolute;
	inset: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	background: var(--ilb-yellow);
	color: var(--ilb-ink);
	opacity: .25;
}
.ilb-story__mark svg { width: 78px; height: 78px; }

.ilb-story__text {
	flex: 2 1 250px;
	min-width: 0;
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: .5em;
	padding: 22px 24px 24px;
}
.ilb-story__name { font-size: var(--ilb-step-2); font-weight: 800; line-height: 1.26; }
.ilb-story__sum { font-size: .95rem; color: var(--ilb-muted); line-height: 1.6; }
.ilb-story__go {
	margin-top: auto;
	padding-top: .4em;
	font-size: .88rem;
	font-weight: 700;
	border-bottom: 2px solid var(--ilb-yellow);
	transition: border-color var(--ilb-ease);
}
.ilb-story:hover .ilb-story__go { border-bottom-color: var(--ilb-ink); }

.ilb-mini {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	gap: 6px 14px;
	padding: 12px 16px;
	background: var(--ilb-surface);
	border: 1px solid var(--ilb-line-soft);
	border-radius: 12px;
	text-decoration: none;
	transition: border-color var(--ilb-ease), transform var(--ilb-ease);
}
.ilb-mini:hover { border-color: var(--ilb-ink); transform: translateY(-2px); }
.ilb-mini__date {
	flex: 0 0 auto;
	min-width: 48px;
	font-size: .74rem;
	font-weight: 800;
	letter-spacing: .06em;
	text-transform: uppercase;
	color: var(--ilb-faint);
}
.ilb-mini__name { flex: 1 1 auto; min-width: 0; font-weight: 700; font-size: .98rem; line-height: 1.35; }


/* Event row */
.ilb-when {
	display: flex;
	align-items: center;
	gap: 14px;
	padding: 12px 14px;
	background: var(--ilb-surface);
	border: 1px solid var(--ilb-line);
	border-radius: var(--ilb-radius);
	text-decoration: none;
	transition: transform var(--ilb-ease), border-color var(--ilb-ease), box-shadow var(--ilb-ease);
}
.ilb-when:hover { transform: translateY(-2px); border-color: var(--ilb-ink); box-shadow: var(--ilb-shadow); }
.ilb-when__text { min-width: 0; flex: 1 1 auto; }
.ilb-when__name { display: block; font-weight: 700; font-size: 1rem; line-height: 1.35; margin-bottom: 2px; }

.ilb-tag {
	flex: 0 0 auto;
	width: 54px;
	padding: 8px 4px;
	text-align: center;
	line-height: 1;
	background: var(--ilb-yellow);
	border-radius: 10px;
}
.ilb-tag__m { display: block; font-size: .64rem; font-weight: 800; letter-spacing: .07em; opacity: .75; }
.ilb-tag__d { display: block; margin-top: 3px; font-size: 1.3rem; font-weight: 800; }


/* ==========================================================================
   10. ARTICLE
   ========================================================================== */

/* Reading pages sit on paper rather than floating on the grey. The sheet is
   a little wider than the measure so the text keeps its own margins inside. */
.ilb-article {
	max-width: calc( var(--ilb-read) + 6rem );
	margin: var(--ilb-block) auto;
	padding: clamp(2rem, 5vw, 3.5rem) clamp(1.5rem, 4.5vw, 3rem);
	background: var(--ilb-surface);
	border-radius: var(--ilb-radius-lg);
	box-shadow: 0 2px 16px rgb(0 0 0 / .04);
}
.ilb-article__head { margin-bottom: 1.75rem; }
.ilb-article__kicker {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: .5em;
	margin-bottom: .9rem;
	font-size: .82rem;
	font-weight: 700;
	letter-spacing: .04em;
	text-transform: uppercase;
	color: var(--ilb-faint);
}
.ilb-article__kicker a { text-decoration: none; border-bottom: 2px solid var(--ilb-yellow); }
.ilb-article__title { font-size: var(--ilb-step-3); text-wrap: wrap; }
.ilb-article__standfirst {
	margin-top: .9rem;
	font-size: var(--ilb-step-1);
	color: var(--ilb-muted);
	line-height: 1.55;
}
.ilb-article__figure {
	margin: 0 0 2rem;
	margin-inline: calc( clamp(1.5rem, 4.5vw, 3rem) * -.5 );
}
.ilb-article__figure img { width: 100%; border-radius: var(--ilb-radius-lg); }
.ilb-article__figure figcaption {
	margin-top: .6rem;
	font-size: .84rem;
	color: var(--ilb-faint);
}
.ilb-article__foot {
	margin-top: 2.5rem;
	padding-top: 1.5rem;
	border-top: 1px solid var(--ilb-line);
}

.ilb-prose { font-size: var(--ilb-step-1); line-height: 1.75; }
.ilb-prose > * + * { margin-top: 1.2em; }
.ilb-prose h2 { margin-top: 2em; font-size: var(--ilb-step-2); }
.ilb-prose h3 { margin-top: 1.6em; font-size: var(--ilb-step-1); }
/* Underline links in the writing, but not things a plugin has made into a
   button or an icon: those carry their own classes. */
.ilb-prose a:not([class]) {
	text-decoration: none;
	border-bottom: 2px solid var(--ilb-yellow);
	transition: border-color var(--ilb-ease);
}
.ilb-prose a:not([class]):hover { border-bottom-color: var(--ilb-ink); }
.ilb-prose a[class] { text-decoration: none; }
.ilb-prose img { border-radius: var(--ilb-radius); }
.ilb-prose ul, .ilb-prose ol { padding-left: 1.3em; }
.ilb-prose li + li { margin-top: .4em; }
.ilb-prose blockquote {
	margin: 1.6em 0;
	padding: .2em 0 .2em 1.2em;
	border-left: 4px solid var(--ilb-yellow);
	font-size: var(--ilb-step-1);
}
.ilb-prose code {
	padding: .15em .4em;
	background: var(--ilb-line-soft);
	border-radius: 5px;
	font-size: .9em;
}
.ilb-prose hr { margin: 2.5em 0; border: 0; border-top: 1px solid var(--ilb-line); }


/* ==========================================================================
   11. GROUPS, EMPTY STATES, PAGINATION
   ========================================================================== */

.ilb-group { margin-bottom: var(--ilb-block); }
.ilb-group__title {
	margin-bottom: 1.1rem;
	padding-bottom: .6rem;
	border-bottom: 1px solid var(--ilb-line);
	font-size: 1.1rem;
	font-weight: 800;
	letter-spacing: .07em;
	text-transform: uppercase;
	color: var(--ilb-muted);
}

.ilb-empty { max-width: 46ch; padding: 2rem 0; }
.ilb-empty p { margin-bottom: .6em; }

.pagination { margin-top: var(--ilb-block); }
.pagination .nav-links {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 8px;
}
.pagination .page-numbers {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 42px;
	height: 42px;
	padding: 0 .7em;
	border: 1px solid var(--ilb-line);
	border-radius: var(--ilb-radius-pill);
	background: var(--ilb-surface);
	font-weight: 700;
	font-size: .95rem;
	text-decoration: none;
	transition: background var(--ilb-ease), border-color var(--ilb-ease);
}
.pagination .page-numbers:hover { border-color: var(--ilb-ink); }
.pagination .page-numbers.current { background: var(--ilb-yellow); border-color: var(--ilb-yellow); }
.pagination .page-numbers.dots { border-color: transparent; background: none; }
.pagination .screen-reader-text { position: absolute; }


/* ==========================================================================
   12. FOOTER
   ========================================================================== */

.ilb-footer {
	margin-top: var(--ilb-block);
	background: var(--ilb-ink);
	color: #fff;
}
.ilb-footer a { color: #fff; }

.ilb-footer__inner {
	max-width: var(--ilb-wrap);
	margin-inline: auto;
	padding: clamp(2.5rem, 5vw, 4rem) var(--ilb-pad);
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
	gap: var(--ilb-gap-lg);
}
.ilb-fwidget + .ilb-fwidget { margin-top: 2.25rem; }

.ilb-fwidget__title {
	margin-bottom: 1.4rem;
	padding-bottom: .7rem;
	border-bottom: 1px solid rgba(255, 255, 255, .18);
	font-size: .85rem;
	font-weight: 800;
	letter-spacing: .12em;
	text-transform: uppercase;
}

/* Blocks inside a widget need room to breathe from one another. */
.ilb-fwidget > * + * { margin-top: 1.15rem; }
.ilb-fwidget > p + .wp-block-social-links { margin-top: 1.1rem; }
.ilb-fwidget p { line-height: 1.65; opacity: .88; }
.ilb-fwidget a { text-decoration: none; border-bottom: 1px solid rgba(255, 255, 255, .35); }
.ilb-fwidget a:hover { border-bottom-color: var(--ilb-yellow); }

/* Lists read as a stack of rows rather than a run of lines. */
.ilb-fwidget ul { margin: 0; padding: 0; list-style: none; }
.ilb-fwidget li {
	padding-block: .6rem;
	border-bottom: 1px solid rgba(255, 255, 255, .1);
	line-height: 1.45;
}
.ilb-fwidget li:first-child { padding-top: 0; }
.ilb-fwidget li:last-child { border-bottom: 0; padding-bottom: 0; }
.ilb-fwidget li a { border-bottom: 0; font-weight: 700; }
.ilb-fwidget li a:hover { color: var(--ilb-yellow); }

/* Post lists: the byline and date sit under the title, quietly. */
.ilb-fwidget .post-date,
.ilb-fwidget .rss-date,
.ilb-fwidget time {
	display: block;
	margin-top: .2em;
	font-size: .76rem;
	font-weight: 700;
	letter-spacing: .05em;
	text-transform: uppercase;
	opacity: .55;
}

/* Social icons: clear of whatever follows them. */
/* Close enough to belong to the text above, far enough to be its own thing. */
.ilb-fwidget .wp-block-social-links {
	margin-top: 1.1rem;
	margin-bottom: 1.6rem;
	gap: 10px;
}
.ilb-fwidget .wp-block-social-links .wp-social-link { margin: 0; }
.ilb-fwidget .wp-block-social-links a { border-bottom: 0; }

/* A line of small links, such as legal ones, kept quiet and given space. */
.ilb-fwidget .ilb-muted-links,
.ilb-fwidget .wp-block-social-links + p {
	margin-top: 1.6rem;
	padding-top: 1.2rem;
	border-top: 1px solid rgba(255, 255, 255, .12);
	font-size: .82rem;
	opacity: .62;
	line-height: 1.7;
}
.ilb-fwidget .ilb-muted-links a,
.ilb-fwidget .wp-block-social-links + p a { border-bottom-color: rgba(255, 255, 255, .25); }
.ilb-fwidget .ilb-muted-links a:hover,
.ilb-fwidget .wp-block-social-links + p a:hover { border-bottom-color: var(--ilb-yellow); }

.ilb-footer__base { border-top: 1px solid rgba(255, 255, 255, .14); }
.ilb-footer__baseinner {
	max-width: var(--ilb-wrap);
	margin-inline: auto;
	padding: 1.25rem var(--ilb-pad);
	display: flex;
	flex-direction: column;
	align-items: center;
	text-align: center;
	gap: .6rem;
	font-size: .88rem;
}
.ilb-footer__copy { margin: 0; opacity: .7; }
.ilb-legalmenu {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: .5rem 1.25rem;
	margin: 0;
	padding: 0;
	list-style: none;
}
.ilb-legalmenu a { text-decoration: none; opacity: .8; border-bottom: 1px solid transparent; }
.ilb-legalmenu a:hover { opacity: 1; border-bottom-color: var(--ilb-yellow); }


/* ==========================================================================
   13. RESPONSIVE
   ========================================================================== */

@media (max-width: 900px) {
	.ilb-band__icon { width: 92px; height: 92px; border-radius: 22px; }
	.ilb-band__icon svg { width: 46px; height: 46px; }
}

@media (max-width: 782px) {
	.ilb-burger { display: inline-flex; }

	.ilb-nav {
		position: absolute;
		top: 100%;
		left: 0;
		right: 0;
		display: none;
		padding: .5rem var(--ilb-pad) 1rem;
		background: var(--ilb-surface);
		border-bottom: 1px solid var(--ilb-line);
		box-shadow: var(--ilb-shadow);
	}
	.ilb-nav-open .ilb-nav { display: block; }

	.ilb-menu { flex-direction: column; align-items: stretch; gap: 0; }
	.ilb-menu a { padding: .8em 1em; border-radius: 10px; }

	.ilb-menu .sub-menu {
		position: static;
		opacity: 1;
		visibility: visible;
		transform: none;
		box-shadow: none;
		border: 0;
		border-left: 2px solid var(--ilb-yellow);
		border-radius: 0;
		margin: 0 0 .3rem .9rem;
		padding: 0 0 0 .4rem;
		display: none;
	}
	.ilb-menu .menu-item-has-children.is-open > .sub-menu { display: block; }
	.ilb-submenu-toggle { display: block; }

	.ilb-band__row { flex-direction: column-reverse; align-items: flex-start; gap: 1.25rem; }
	.ilb-band__icon { width: 58px; height: 58px; border-radius: 15px; }
	.ilb-band__icon svg { width: 29px; height: 29px; }
	.ilb-band__search { max-width: none; margin-top: 1.3rem; }
}

@media (max-width: 560px) {
	.ilb-search { padding-left: 14px; }
	.ilb-search__icon { display: none; }
	.ilb-search button { padding: .75em 1.2em; font-size: .9rem; }

	.ilb-story__pic { flex: 1 1 100%; min-height: 0; height: 200px; }
	.ilb-story__text { flex: 1 1 100%; padding: 18px 18px 20px; }

	/* Two per row on a phone. One column meant scrolling past 114 places
	   one at a time, which is a lot of thumb for a directory. */
	.ilb-cards {
		grid-template-columns: repeat(2, minmax(0, 1fr));
		gap: 12px;
	}
	.ilb-cards .ilb-card__pic img,
	.ilb-cards .ilb-card__pic > img { height: 130px; object-fit: cover; }
	.ilb-card__text { padding: 10px 12px 14px; }
	.ilb-card__name { font-size: 1rem; line-height: 1.25; }
	.ilb-card__sum { font-size: .84rem; -webkit-line-clamp: 2; }
	.ilb-card .ilb-pill { font-size: .62rem; padding: .24em .7em; }

	/* The lead story stays full width: it is the one card that earns it. */
	.ilb-story__pic { flex: 1 1 100%; min-height: 0; height: 200px; }
}


@media (max-width: 380px) {
	.ilb-cards { grid-template-columns: 1fr; }
	.ilb-card__pic img { height: 180px; }
	.ilb-card__sum { -webkit-line-clamp: 3; }
}


/* ==========================================================================
   14. PLUGIN SURFACES
   Light touches so the places and mobility plugins sit in the same design.
   ========================================================================== */

.ilb-weather,
.ilb-now-dashboard {
	max-width: var(--ilb-wrap);
	margin-inline: auto;
	padding-inline: var(--ilb-pad);
}

.ilb-type-nav {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin: 0;
	padding: 0;
	list-style: none;
}
.ilb-type-nav a {
	display: inline-block;
	padding: .55em 1.15em;
	background: var(--ilb-surface);
	border: 1px solid var(--ilb-line);
	border-radius: var(--ilb-radius-pill);
	font-size: .86rem;
	font-weight: 700;
	text-decoration: none;
	transition: background var(--ilb-ease), border-color var(--ilb-ease);
}
.ilb-type-nav a:hover,
.ilb-type-nav .is-current a {
	background: var(--ilb-yellow);
	border-color: var(--ilb-yellow);
}


/* ---------- Weather card ---------- */

.ilb-weather[hidden] {
	display: none;
}

.ilb-weather__card {
	display: grid;
	grid-template-columns: minmax(270px, .9fr) minmax(360px, 1.25fr) auto;
	align-items: center;
	gap: 22px;
	padding: 18px 20px;
	border-radius: 16px;
	background: var(--ilb-ink);
	color: #fff;
	box-shadow: 0 10px 28px rgba(0, 0, 0, .12);
}
.ilb-weather__current {
	display: flex;
	align-items: center;
	gap: 13px;
	min-width: 0;
}
.ilb-weather__icon {
	flex: 0 0 auto;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 52px;
	height: 52px;
	border-radius: 14px;
	background: var(--ilb-yellow);
	color: var(--ilb-ink);
}
.ilb-weather__icon svg {
	display: block;
	width: 34px;
	height: 34px;
}
.ilb-weather__summary {
	min-width: 0;
}
.ilb-weather__summary h2 {
	margin: 0;
	color: #fff;
	font-size: 1rem;
	line-height: 1.2;
}
.ilb-weather__condition {
	display: block;
	margin-top: .22rem;
	color: rgba(255, 255, 255, .72);
	font-size: .86rem;
	line-height: 1.3;
}
.ilb-weather__temperature {
	flex: 0 0 auto;
	margin-left: auto;
	color: var(--ilb-yellow);
	font-size: clamp(1.8rem, 3vw, 2.35rem);
	line-height: 1;
	letter-spacing: -.035em;
	white-space: nowrap;
}
.ilb-weather__temperature span {
	font-size: .48em;
	letter-spacing: 0;
	vertical-align: top;
}
.ilb-weather__metrics {
	display: grid;
	grid-template-columns: repeat(3, minmax(90px, 1fr));
	margin: 0;
	border-left: 1px solid rgba(255, 255, 255, .16);
}
.ilb-weather__metrics > div {
	padding: 2px 18px;
	border-right: 1px solid rgba(255, 255, 255, .16);
}
.ilb-weather__metrics dt {
	margin: 0 0 .2rem;
	color: rgba(255, 255, 255, .62);
	font-size: .69rem;
	font-weight: 700;
	letter-spacing: .045em;
	line-height: 1.2;
	text-transform: uppercase;
}
.ilb-weather__metrics dd {
	margin: 0;
	color: #fff;
	font-size: .88rem;
	font-weight: 700;
	line-height: 1.35;
}
.ilb-weather__tomorrow {
	display: grid;
	grid-template-columns: auto minmax(0, 1fr) auto;
	align-items: center;
	gap: 12px;
	padding-top: 14px;
	border-top: 1px solid rgba(255, 255, 255, .16);
}
.ilb-weather__tomorrow .ilb-weather__icon {
	width: 38px;
	height: 38px;
	border-radius: 11px;
	background: rgba(255, 255, 255, .1);
	color: var(--ilb-yellow);
}
.ilb-weather__tomorrow .ilb-weather__icon svg {
	width: 26px;
	height: 26px;
}
.ilb-weather__tomorrow-copy {
	min-width: 0;
}
.ilb-weather__tomorrow-label {
	display: block;
	color: #fff;
	font-size: .78rem;
	font-weight: 800;
	line-height: 1.2;
}
.ilb-weather__tomorrow-condition {
	display: block;
	margin-top: .15rem;
	color: rgba(255, 255, 255, .68);
	font-size: .75rem;
	line-height: 1.3;
}
.ilb-weather__tomorrow-values {
	color: #fff;
	font-size: .79rem;
	font-weight: 700;
	line-height: 1.35;
	text-align: right;
	white-space: nowrap;
}
.ilb-weather__tomorrow-rain {
	display: block;
	color: rgba(255, 255, 255, .68);
	font-size: .7rem;
	font-weight: 600;
}
.ilb-weather__source {
	max-width: 145px;
	color: rgba(255, 255, 255, .62);
	font-size: .68rem;
	line-height: 1.35;
	text-align: right;
}
.ilb-weather__source time {
	display: block;
}
.ilb-weather__source a {
	color: #fff;
	text-decoration-color: var(--ilb-yellow);
	text-underline-offset: 2px;
}
.ilb-weather__source a:hover {
	color: var(--ilb-yellow);
}


/* ---------- Footer credit ---------- */

.ilb-footer__sep { margin-inline: .35em; opacity: .45; }
.ilb-footer__credit a {
	text-decoration: none;
	border-bottom: 1px solid rgba(255, 255, 255, .4);
	transition: border-color var(--ilb-ease);
}
.ilb-footer__credit a:hover { border-bottom-color: var(--ilb-yellow); }


/* ==========================================================================
   15. THE EVENTS CALENDAR
   The plugin brings its own markup and its own styling. These rules bring it
   into the same language as the rest of the site: cards, yellow date tags,
   ink links, generous space. Written against the tokens above rather than
   fixed values, so it follows any change made there.
   ========================================================================== */

.tribe-events,
.tribe-events-single {
	max-width: var(--ilb-wrap);
	margin-inline: auto;
	padding-inline: var(--ilb-pad);
}

.tribe-events-single { max-width: var(--ilb-read); }


/* ---------- List view ---------- */

.tribe-events .tribe-events-calendar-list__month-separator {
	margin: var(--ilb-block) 0 var(--ilb-gap);
	border: 0;
}
.tribe-events .tribe-events-calendar-list__month-separator::after,
.tribe-events .tribe-events-calendar-list__month-separator::before {
	display: none;
}
.tribe-events .tribe-events-calendar-list__month-separator-text {
	display: block;
	width: 100%;
	padding: .7em 1.1em;
	background: var(--ilb-yellow);
	border-radius: var(--ilb-radius);
	color: var(--ilb-ink);
	font-size: .82rem;
	font-weight: 800;
	letter-spacing: .1em;
	text-transform: uppercase;
}

.tribe-events .tribe-events-calendar-list__event-row {
	position: relative;
	display: flex;
	flex-wrap: wrap;
	align-items: flex-start;
	gap: var(--ilb-gap);
	margin-bottom: .8rem;
	padding: 16px 18px;
	background: var(--ilb-surface);
	border: 1px solid var(--ilb-line);
	border-radius: var(--ilb-radius);
	transition: transform var(--ilb-ease), border-color var(--ilb-ease), box-shadow var(--ilb-ease);
}
.tribe-events .tribe-events-calendar-list__event-row:hover {
	transform: translateY(-2px);
	border-color: var(--ilb-ink);
	box-shadow: var(--ilb-shadow);
}

/* Date tag becomes the yellow badge used everywhere else */
.tribe-events .tribe-events-calendar-list__event-date-tag {
	flex: 0 0 auto;
	width: 62px;
	padding: 9px 4px;
	text-align: center;
	line-height: 1;
	background: var(--ilb-yellow);
	border-radius: 10px;
}
.tribe-events .tribe-events-calendar-list__event-date-tag-weekday {
	display: block;
	font-size: .64rem;
	font-weight: 800;
	letter-spacing: .07em;
	text-transform: uppercase;
	color: var(--ilb-ink);
	opacity: .75;
}
.tribe-events .tribe-events-calendar-list__event-date-tag-daynum {
	display: block;
	margin-top: 3px;
	padding: 0;
	background: none;
	color: var(--ilb-ink);
	font-size: 1.35rem;
	font-weight: 800;
}

.tribe-events .tribe-events-calendar-list__event-wrapper {
	flex: 1 1 260px;
	min-width: 0;
}

.tribe-events .tribe-events-calendar-list__event-title {
	margin: 0 0 .25em;
	font-size: 1.08rem;
	font-weight: 800;
	line-height: 1.32;
}
.tribe-events .tribe-events-calendar-list__event-title-link {
	color: var(--ilb-ink);
	text-decoration: none;
	background-image: linear-gradient(var(--ilb-yellow), var(--ilb-yellow));
	background-repeat: no-repeat;
	background-position: 0 100%;
	background-size: 0 3px;
	transition: background-size var(--ilb-ease);
}
/* The whole row is the target, not just the words */
.tribe-events .tribe-events-calendar-list__event-title-link::after {
	content: "";
	position: absolute;
	inset: 0;
	z-index: 1;
}
.tribe-events .tribe-events-calendar-list__event-row:hover .tribe-events-calendar-list__event-title-link {
	background-size: 100% 3px;
}

.tribe-events .tribe-events-calendar-list__event-datetime {
	margin-bottom: .35em;
	color: var(--ilb-muted);
	font-size: .86rem;
}
.tribe-events .tribe-events-calendar-list__event-venue {
	color: var(--ilb-muted);
	font-size: .86rem;
}
.tribe-events .tribe-events-calendar-list__event-description {
	margin-top: .5em;
	color: var(--ilb-muted);
	font-size: .92rem;
	line-height: 1.55;
}
.tribe-events .tribe-events-calendar-list__event-description p:last-child { margin-bottom: 0; }

.tribe-events .tribe-events-calendar-list__event-featured-image-wrapper {
	flex: 0 0 auto;
	order: 3;
	position: relative;
	z-index: 2;
}
.tribe-events .tribe-events-calendar-list__event-featured-image {
	width: 132px;
	height: 92px;
	object-fit: cover;
	border-radius: 10px;
}

/* Links that must stay clickable above the row overlay */
.tribe-events .tribe-events-calendar-list__event-venue a,
.tribe-events .tribe-events-calendar-list__event-datetime a,
.tribe-events .tribe_events_cat a {
	position: relative;
	z-index: 2;
}


/* ---------- Top bar, filters, navigation ---------- */

.tribe-events .tribe-events-c-top-bar__datepicker-button,
.tribe-events .tribe-common-c-btn-border-small,
.tribe-events .tribe-events-c-subscribe-dropdown__button {
	border-radius: var(--ilb-radius-pill);
	border-color: var(--ilb-line);
	color: var(--ilb-ink);
	font-weight: 700;
}
.tribe-events .tribe-events-c-subscribe-dropdown__button {
	background: var(--ilb-ink);
	color: #fff;
	border-color: var(--ilb-ink);
}

.tribe-events .tribe-events-c-nav {
	margin-top: var(--ilb-block);
	padding-top: var(--ilb-gap);
	border-top: 1px solid var(--ilb-line);
}
.tribe-events .tribe-events-c-nav__prev,
.tribe-events .tribe-events-c-nav__next {
	color: var(--ilb-ink);
	font-weight: 700;
}
.tribe-events .tribe-common-c-svgicon { color: currentColor; }


/* ---------- Single event ---------- */

.tribe-events-single .tribe-events-back a {
	font-size: .85rem;
	font-weight: 700;
	color: var(--ilb-muted);
	text-decoration: none;
}
.tribe-events-single .tribe-events-back a:hover { color: var(--ilb-ink); }

.tribe-events-single .tribe-events-single-event-title {
	margin: .6rem 0 .8rem;
	font-size: var(--ilb-step-3);
	text-wrap: wrap;
}

.tribe-events-single .tribe-events-schedule {
	margin: 0 0 1.5rem;
	padding: 0;
	background: none;
	border: 0;
}
.tribe-events-single .tribe-events-schedule h2 {
	display: inline;
	margin: 0;
	font-size: 1.1rem;
	font-weight: 700;
}
.tribe-events-single .tribe-events-cost {
	display: inline-block;
	margin-left: .6em;
	padding: .24em .95em;
	background: var(--ilb-yellow);
	border: 0;
	border-radius: var(--ilb-radius-pill);
	color: var(--ilb-ink);
	font-size: .82rem;
	font-weight: 800;
	vertical-align: .08em;
}

.tribe-events-single .tribe-events-single-event-description,
.tribe-events-single .tribe-events-content {
	font-size: var(--ilb-step-1);
	line-height: 1.72;
}
.tribe-events-single .tribe-events-content a:not(.tribe-events-button):not(.tribe-common-c-btn) {
	color: var(--ilb-ink);
	text-decoration: none;
	border-bottom: 2px solid var(--ilb-yellow);
}
.tribe-events-single .tribe-events-content a:not(.tribe-events-button):not(.tribe-common-c-btn):hover {
	border-bottom-color: var(--ilb-ink);
}

/* Details: one soft card rather than a table */
.tribe-events-single .tribe-events-event-meta {
	display: block;
	margin: 2.25rem 0 1.5rem;
	padding: 22px 24px;
	background: #FAFAFA;
	border: 0;
	border-radius: var(--ilb-radius-lg);
}
.tribe-events-single .tribe-events-meta-group {
	float: none;
	width: 100%;
	margin: 0 0 1.25rem;
	padding: 0;
}
.tribe-events-single .tribe-events-meta-group:last-child { margin-bottom: 0; }
.tribe-events-single .tribe-events-single-section-title {
	margin: 0 0 .65rem;
	padding: 0;
	border: 0;
	font-size: .7rem;
	font-weight: 800;
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--ilb-faint);
}
.tribe-events-single .tribe-events-event-meta dl {
	display: grid;
	grid-template-columns: auto 1fr;
	gap: .45em 1.25em;
	margin: 0;
}
.tribe-events-single .tribe-events-event-meta dt,
.tribe-events-single .tribe-events-event-meta dd {
	float: none;
	width: auto;
	margin: 0;
	padding: 0;
}
.tribe-events-single .tribe-events-event-meta dt { font-weight: 700; }
.tribe-events-single .tribe-events-event-meta dd { color: #333; }
.tribe-events-single .tribe-events-event-meta a {
	color: var(--ilb-ink);
	text-decoration: none;
	border-bottom: 2px solid var(--ilb-yellow);
}
.tribe-events-single .tribe-events-event-meta abbr {
	border: 0;
	text-decoration: none;
}

.tribe-events-single .tribe-events-event-categories a {
	display: inline-block;
	margin: 0 .3em .3em 0;
	padding: .22em .9em;
	background: var(--ilb-yellow);
	border: 0;
	border-radius: var(--ilb-radius-pill);
	color: var(--ilb-ink);
	font-size: .8rem;
	font-weight: 800;
	text-decoration: none;
}

/* Secondary buttons stay outlined so the plugin's own call to action leads */
.tribe-events-single .tribe-events-event-url a,
.tribe-events-single a.tribe-events-button,
.tribe-events-single .tribe-common-c-btn {
	display: inline-flex;
	align-items: center;
	padding: .55em 1.4em;
	background: var(--ilb-surface);
	border: 2px solid var(--ilb-ink);
	border-radius: var(--ilb-radius-pill);
	color: var(--ilb-ink);
	font-size: .9rem;
	font-weight: 700;
	text-decoration: none;
	word-break: break-word;
	transition: background var(--ilb-ease), color var(--ilb-ease);
}
.tribe-events-single .tribe-events-event-url a:hover,
.tribe-events-single a.tribe-events-button:hover,
.tribe-events-single .tribe-common-c-btn:hover {
	background: var(--ilb-ink);
	color: #fff;
}

.tribe-events-single .tribe-events-venue-map,
.tribe-events-single .tribe-events-venue-map iframe {
	width: 100%;
	float: none;
	border: 0;
	border-radius: var(--ilb-radius);
	overflow: hidden;
}

.tribe-events-single #tribe-events-footer,
.tribe-events-single .tribe-events-sub-nav {
	margin-top: var(--ilb-block);
	padding-top: var(--ilb-gap);
	border-top: 1px solid var(--ilb-line);
}
.tribe-events-single .tribe-events-nav-previous a,
.tribe-events-single .tribe-events-nav-next a {
	color: var(--ilb-ink);
	font-size: .92rem;
	font-weight: 700;
	text-decoration: none;
}

@media (max-width: 560px) {
	.tribe-events .tribe-events-calendar-list__event-featured-image-wrapper { order: 0; flex: 1 1 100%; }
	.tribe-events .tribe-events-calendar-list__event-featured-image { width: 100%; height: 170px; }
	.tribe-events-single .tribe-events-event-meta { padding: 18px; }
	.tribe-events-single .tribe-events-event-meta dl { grid-template-columns: 1fr; gap: .1em; }
	.tribe-events-single .tribe-events-event-meta dd { margin-bottom: .6em; }
}


/* ==========================================================================
   16. MAILPOET
   The form sits on its own light panel inside a dark footer, so everything
   inside it has to be told not to inherit the footer's white.
   ========================================================================== */

.ilb-footer .mailpoet_form {
	padding: 20px 20px 22px;
	background: var(--ilb-surface);
	border-radius: var(--ilb-radius-lg);
	color: var(--ilb-ink);
}

.ilb-footer .mailpoet_form,
.ilb-footer .mailpoet_form p,
.ilb-footer .mailpoet_form label,
.ilb-footer .mailpoet_paragraph,
.ilb-footer .mailpoet_form_paragraph {
	color: var(--ilb-ink);
}

.ilb-footer .mailpoet_form h1,
.ilb-footer .mailpoet_form h2,
.ilb-footer .mailpoet_form h3 {
	color: var(--ilb-ink);
	font-size: var(--ilb-step-2);
	line-height: 1.2;
	margin-bottom: .6rem;
}

/* Links: readable on the panel, and marked as links */
.ilb-footer .mailpoet_form a,
.ilb-footer .mailpoet_paragraph a,
.ilb-footer .mailpoet_form_paragraph a {
	color: var(--ilb-ink);
	text-decoration: none;
	border-bottom: 2px solid var(--ilb-yellow);
	transition: border-color var(--ilb-ease);
}
.ilb-footer .mailpoet_form a:hover,
.ilb-footer .mailpoet_paragraph a:hover,
.ilb-footer .mailpoet_form_paragraph a:hover {
	border-bottom-color: var(--ilb-ink);
}

/* The small print under the field */
.ilb-footer .mailpoet_form .mailpoet_paragraph:last-of-type,
.ilb-footer .mailpoet_form_paragraph {
	font-size: .82rem;
	line-height: 1.5;
	color: var(--ilb-muted);
}
.ilb-footer .mailpoet_form .mailpoet_paragraph:last-of-type a,
.ilb-footer .mailpoet_form_paragraph a {
	color: var(--ilb-ink);
}

.ilb-footer .mailpoet_text,
.ilb-footer .mailpoet_email {
	width: 100%;
	padding: .8em 1em;
	background: #F4F4F4;
	border: 1px solid var(--ilb-line);
	border-radius: var(--ilb-radius-pill);
	color: var(--ilb-ink);
}
.ilb-footer .mailpoet_text::placeholder,
.ilb-footer .mailpoet_email::placeholder { color: #8A8A8A; opacity: 1; }
.ilb-footer .mailpoet_text:focus,
.ilb-footer .mailpoet_email:focus {
	outline: none;
	border-color: var(--ilb-ink);
	box-shadow: 0 0 0 3px var(--ilb-yellow);
}

.ilb-footer .mailpoet_submit {
	width: 100%;
	padding: .85em 1.6em;
	background: var(--ilb-ink);
	border: 0;
	border-radius: var(--ilb-radius-pill);
	color: #fff;
	font-weight: 800;
	transition: background var(--ilb-ease);
}
.ilb-footer .mailpoet_submit:hover { background: #000; }

.ilb-footer .mailpoet_validate_success { color: #1B6E3C; }
.ilb-footer .mailpoet_validate_error { color: #A31515; }


/* ==========================================================================
   17. AGENDA AND SINGLE EVENT, REFINEMENTS
   With Skeleton Styles the calendar leaves appearance entirely to the theme,
   so these fill the gaps that the plugin's own design used to cover.
   ========================================================================== */

/* ---------- Agenda: header and filter bar ---------- */

.tribe-events .tribe-events-header,
.tribe-events .tribe-events-c-top-bar {
	margin-bottom: var(--ilb-gap-lg);
	padding-bottom: var(--ilb-gap);
	border-bottom: 1px solid var(--ilb-line);
}
.tribe-events .tribe-events-c-top-bar__nav-list { gap: 6px; }
.tribe-events .tribe-events-c-top-bar__today-button {
	padding: .55em 1.2em;
	border: 1px solid var(--ilb-line);
	border-radius: var(--ilb-radius-pill);
	background: var(--ilb-surface);
	color: var(--ilb-ink);
	font-weight: 700;
	font-size: .9rem;
}
.tribe-events .tribe-events-c-top-bar__today-button:hover { border-color: var(--ilb-ink); }

/* ---------- Agenda: the row, refined ---------- */

.tribe-events .tribe-events-calendar-list__event-row + .tribe-events-calendar-list__event-row {
	margin-top: 0;
}

/* Titles get room; the meta line sits under them in one quiet row. */
.tribe-events .tribe-events-calendar-list__event-header { margin: 0; }
.tribe-events .tribe-events-calendar-list__event-datetime-wrapper {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	gap: .35em .9em;
	margin-bottom: .3em;
}
.tribe-events .tribe-events-calendar-list__event-datetime {
	margin: 0;
	font-size: .82rem;
	font-weight: 700;
	letter-spacing: .04em;
	text-transform: uppercase;
	color: var(--ilb-faint);
}
.tribe-events .tribe-events-calendar-list__event-cost {
	display: inline-block;
	padding: .18em .8em;
	background: var(--ilb-yellow);
	border-radius: var(--ilb-radius-pill);
	color: var(--ilb-ink);
	font-size: .75rem;
	font-weight: 800;
}

/* Category pills, so people can see the shape of the week at a glance. */
.tribe-events .tribe-events-calendar-list__event-row .tribe_events_cat,
.tribe-events .tribe-events-calendar-list__event-row .tribe-events-event-categories a {
	display: inline-block;
	margin-right: .35em;
	padding: .16em .8em;
	background: var(--ilb-yellow-soft);
	border-radius: var(--ilb-radius-pill);
	color: var(--ilb-ink);
	font-size: .74rem;
	font-weight: 800;
	letter-spacing: .03em;
	text-decoration: none;
}

/* Nothing on: say so properly rather than leaving a bare line. */
.tribe-events .tribe-events-c-messages__message,
.tribe-events .tribe-events-notices {
	padding: 1.4rem 1.6rem;
	background: var(--ilb-surface);
	border: 1px solid var(--ilb-line);
	border-radius: var(--ilb-radius);
	color: var(--ilb-muted);
	list-style: none;
}
.tribe-events .tribe-events-c-messages__message a { color: var(--ilb-ink); }


/* ---------- Single event: the featured image ---------- */

/* The places plugin renders its own hero and hides the calendar's. If that
   plugin is not doing so, show the calendar's own rather than nothing. */
.tribe-events-single .ilb-event-hero,
.tribe-events-single:not(:has(.ilb-event-hero)) .tribe-events-event-image {
	display: block;
	margin: 0 0 1.75rem;
	padding: 0;
}
.tribe-events-single .ilb-event-hero img,
.tribe-events-single:not(:has(.ilb-event-hero)) .tribe-events-event-image img {
	width: 100%;
	max-height: 440px;
	object-fit: cover;
	border-radius: var(--ilb-radius-lg);
	display: block;
}

/* Older browsers without :has() still get a styled image rather than none. */
@supports not selector(:has(*)) {
	.tribe-events-single .tribe-events-event-image {
		display: block;
		margin: 0 0 1.75rem;
	}
	.tribe-events-single .tribe-events-event-image img {
		width: 100%;
		max-height: 440px;
		object-fit: cover;
		border-radius: var(--ilb-radius-lg);
	}
}

/* Organiser and venue blocks read as part of the details card. */
.tribe-events-single .tribe-events-venue-details,
.tribe-events-single .tribe-events-organizer-details {
	font-style: normal;
	line-height: 1.6;
}

@media (max-width: 560px) {
	.tribe-events .tribe-events-calendar-list__event-row { padding: 14px 15px; }
	.tribe-events .tribe-events-calendar-list__event-date-tag { width: 54px; }
}


/* ==========================================================================
   18. STICKY SEARCH
   Arrives once the reader is past the top of the page, so search is always a
   tap away without taking room at the start.
   ========================================================================== */

.ilb-sticky {
	position: fixed;
	inset: 0 0 auto 0;
	z-index: 90;
	background: rgb(255 255 255 / .95);
	backdrop-filter: saturate(180%) blur(10px);
	border-bottom: 1px solid var(--ilb-line);
	transform: translateY(-100%);
	transition: transform .22s ease;
	pointer-events: none;
}
.ilb-sticky.is-visible {
	transform: translateY(0);
	pointer-events: auto;
}

.ilb-sticky__inner {
	max-width: var(--ilb-wrap);
	margin-inline: auto;
	padding: 9px var(--ilb-pad);
	display: flex;
	align-items: center;
	gap: 1rem;
}

.ilb-sticky__brand {
	flex: 0 0 auto;
	display: inline-flex;
	align-items: center;
	gap: .18em;
	font-weight: 800;
	font-size: 1rem;
	text-decoration: none;
	white-space: nowrap;
}
.ilb-sticky__brand img { max-height: 32px; width: auto; }

.ilb-sticky__search {
	flex: 1 1 auto;
	min-width: 0;
	max-width: 460px;
	margin-left: auto;
}
.ilb-sticky .ilb-search {
	padding: 3px 3px 3px 14px;
	box-shadow: none;
	border-color: var(--ilb-line);
}
.ilb-sticky .ilb-search input[type="search"] { padding: .55em .3em; font-size: .92rem; }
.ilb-sticky .ilb-search button { padding: .6em 1.15em; font-size: .88rem; }
.ilb-sticky .ilb-search:focus-within { box-shadow: 0 0 0 3px var(--ilb-yellow); }

/* Clear of the WordPress admin bar when logged in. */
.admin-bar .ilb-sticky { top: 32px; }

@media screen and (max-width: 782px) {
	.admin-bar .ilb-sticky { top: 46px; }
}
@media screen and (max-width: 600px) {
	/* Below this width the admin bar scrolls away with the page. */
	.admin-bar .ilb-sticky { top: 0; }
}

@media (max-width: 600px) {
	.ilb-sticky__brand { display: none; }
	.ilb-sticky__search { max-width: none; margin-left: 0; }
}


/* ==========================================================================
   19. AGENDA, FULL TREATMENT
   Skeleton Styles hands the whole appearance to the theme, so every control
   the calendar renders is dressed here: the search bar, the view switcher,
   the navigation, the rows and the subscribe button.
   ========================================================================== */

/* ---------- Search and view switcher ---------- */

.tribe-events .tribe-events-c-events-bar,
.tribe-events .tribe-events-header__events-bar {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: .75rem;
	margin-bottom: var(--ilb-gap);
}

.tribe-events .tribe-events-c-search__input-group,
.tribe-events .tribe-common-form-control-text {
	flex: 1 1 320px;
	min-width: 0;
}
.tribe-events .tribe-common-form-control-text__input,
.tribe-events input[type="text"].tribe-events-c-search__input {
	width: 100%;
	padding: .85em 1.2em;
	background: var(--ilb-surface);
	border: 1px solid var(--ilb-line);
	border-radius: var(--ilb-radius-pill);
	color: var(--ilb-ink);
	font-size: .95rem;
}
.tribe-events .tribe-common-form-control-text__input::placeholder { color: #8A8A8A; opacity: 1; }
.tribe-events .tribe-common-form-control-text__input:focus {
	outline: none;
	border-color: var(--ilb-ink);
	box-shadow: 0 0 0 3px var(--ilb-yellow);
}

/* The submit button, whatever the calendar decides to call it */
.tribe-events .tribe-events-c-search__button,
.tribe-events button[type="submit"].tribe-common-c-btn {
	flex: 0 0 auto;
	padding: .85em 1.7em;
	background: var(--ilb-ink);
	border: 0;
	border-radius: var(--ilb-radius-pill);
	color: #fff;
	font-weight: 700;
	font-size: .95rem;
	transition: background var(--ilb-ease);
}
.tribe-events .tribe-events-c-search__button:hover,
.tribe-events button[type="submit"].tribe-common-c-btn:hover { background: #000; }

/* List / Month / Day */
.tribe-events .tribe-events-c-view-selector__list {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
	margin: 0;
	padding: 0;
	list-style: none;
}
.tribe-events .tribe-events-c-view-selector__list-item-link,
.tribe-events .tribe-events-c-view-selector__list-item-text {
	display: inline-block;
	padding: .55em 1.1em;
	background: var(--ilb-surface);
	border: 1px solid var(--ilb-line);
	border-radius: var(--ilb-radius-pill);
	color: var(--ilb-ink);
	font-size: .9rem;
	font-weight: 700;
	text-decoration: none;
	transition: background var(--ilb-ease), border-color var(--ilb-ease);
}
.tribe-events .tribe-events-c-view-selector__list-item-link:hover { border-color: var(--ilb-ink); }
.tribe-events .tribe-events-c-view-selector__list-item--active .tribe-events-c-view-selector__list-item-link,
.tribe-events .tribe-events-c-view-selector__list-item--active .tribe-events-c-view-selector__list-item-text {
	background: var(--ilb-yellow);
	border-color: var(--ilb-yellow);
}


/* ---------- Today / Upcoming / arrows ---------- */

.tribe-events .tribe-events-c-top-bar__nav {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 8px;
}
.tribe-events .tribe-events-c-top-bar__nav-link,
.tribe-events .tribe-events-c-top-bar__today-button,
.tribe-events .tribe-events-c-top-bar__nav-list-item a,
.tribe-events .tribe-events-c-top-bar__nav-list-item span {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 40px;
	padding: .5em 1.15em;
	background: var(--ilb-surface);
	border: 1px solid var(--ilb-line);
	border-radius: var(--ilb-radius-pill);
	color: var(--ilb-ink);
	font-size: .9rem;
	font-weight: 700;
	text-decoration: none;
	box-shadow: none;
	transition: background var(--ilb-ease), border-color var(--ilb-ease);
}
.tribe-events .tribe-events-c-top-bar__nav-link:hover,
.tribe-events .tribe-events-c-top-bar__today-button:hover { border-color: var(--ilb-ink); }
.tribe-events .tribe-events-c-top-bar__nav-list-item--current a,
.tribe-events .tribe-events-c-top-bar__nav-list-item--current span {
	background: var(--ilb-yellow);
	border-color: var(--ilb-yellow);
}
/* Arrow buttons stay square-ish and quiet */
.tribe-events .tribe-events-c-top-bar__nav-link--prev,
.tribe-events .tribe-events-c-top-bar__nav-link--next {
	width: 40px;
	padding: 0;
}


/* ---------- The row, rebuilt ---------- */

.tribe-events .tribe-events-calendar-list__event-row {
	align-items: stretch;
	gap: 0;
	padding: 0;
	overflow: hidden;
}

/* Image leads, at a size worth looking at, with the date over it */
.tribe-events .tribe-events-calendar-list__event-featured-image-wrapper {
	position: relative;
	flex: 0 0 clamp(180px, 24%, 260px);
	order: 0;
	margin: 0;
	align-self: stretch;
	background: var(--ilb-line-soft);
}
.tribe-events .tribe-events-calendar-list__event-featured-image {
	width: 100%;
	height: 100%;
	min-height: 190px;
	object-fit: cover;
	border-radius: 0;
	display: block;
}

.tribe-events .tribe-events-calendar-list__event-date-tag {
	position: absolute;
	top: 12px;
	left: 12px;
	z-index: 2;
	width: 58px;
	box-shadow: 0 4px 14px rgb(0 0 0 / .18);
}

/* With no image the date tag sits in the flow instead */
.tribe-events .tribe-events-calendar-list__event-row:not(:has(.tribe-events-calendar-list__event-featured-image-wrapper))
	.tribe-events-calendar-list__event-date-tag {
	position: static;
	margin: 20px 0 0 20px;
	box-shadow: none;
}

.tribe-events .tribe-events-calendar-list__event-wrapper {
	flex: 1 1 300px;
	padding: 20px 22px 22px;
}


/* ---------- Category labels ---------- */

/* The calendar colours these per category. Keep the colour, lose the block. */
.tribe-events .tribe-events-calendar-list__event-row .tribe_events_cat,
.tribe-events .tribe-events-calendar-list__event-row .tribe-events-event-categories,
.tribe-events .tribe-events-calendar-list__event-row .tribe-events-event-categories a,
.tribe-events span[class*="tribe_events_cat-"] {
	display: inline-block;
	padding: .2em .85em;
	border-radius: var(--ilb-radius-pill);
	font-size: .74rem;
	font-weight: 800;
	letter-spacing: .03em;
	line-height: 1.5;
	text-decoration: none;
}


/* ---------- Previous / next and subscribe ---------- */

.tribe-events .tribe-events-c-nav__list {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: .75rem;
	margin: 0;
	padding: 0;
	list-style: none;
}
.tribe-events .tribe-events-c-nav__prev,
.tribe-events .tribe-events-c-nav__next {
	display: inline-flex;
	align-items: center;
	gap: .4em;
	padding: .65em 1.4em;
	background: var(--ilb-surface);
	border: 1px solid var(--ilb-line);
	border-radius: var(--ilb-radius-pill);
	color: var(--ilb-ink);
	font-size: .92rem;
	font-weight: 700;
	text-decoration: none;
	transition: background var(--ilb-ease), border-color var(--ilb-ease);
}
.tribe-events .tribe-events-c-nav__prev:hover,
.tribe-events .tribe-events-c-nav__next:hover {
	background: var(--ilb-yellow);
	border-color: var(--ilb-yellow);
}
.tribe-events .tribe-events-c-nav__prev[disabled],
.tribe-events .tribe-events-c-nav__next[disabled] { opacity: .4; }

.tribe-events .tribe-events-c-subscribe-dropdown {
	margin-top: var(--ilb-gap);
	display: flex;
	justify-content: flex-end;
}
.tribe-events .tribe-events-c-subscribe-dropdown__button {
	display: inline-flex;
	align-items: center;
	gap: .5em;
	padding: .7em 1.5em;
	background: var(--ilb-ink);
	border: 0;
	border-radius: var(--ilb-radius-pill);
	color: #fff;
	font-weight: 700;
	font-size: .92rem;
}
/* The label sometimes carries its own panel; strip it back. */
.tribe-events .tribe-events-c-subscribe-dropdown__button-text {
	background: none;
	border: 0;
	padding: 0;
	color: inherit;
	text-decoration: none;
}
.tribe-events .tribe-events-c-subscribe-dropdown__button-icon { color: inherit; }
.tribe-events .tribe-events-c-subscribe-dropdown__content {
	margin-top: .4rem;
	padding: .4rem;
	background: var(--ilb-surface);
	border: 1px solid var(--ilb-line);
	border-radius: var(--ilb-radius);
	box-shadow: var(--ilb-shadow-lift);
}
.tribe-events .tribe-events-c-subscribe-dropdown__list-item a {
	display: block;
	padding: .55em .9em;
	border-radius: 10px;
	color: var(--ilb-ink);
	font-weight: 700;
	text-decoration: none;
}
.tribe-events .tribe-events-c-subscribe-dropdown__list-item a:hover { background: var(--ilb-yellow); }


@media (max-width: 700px) {
	.tribe-events .tribe-events-calendar-list__event-featured-image-wrapper {
		flex: 1 1 100%;
	}
	.tribe-events .tribe-events-calendar-list__event-featured-image { min-height: 180px; }
	.tribe-events .tribe-events-calendar-list__event-wrapper { flex: 1 1 100%; padding: 18px; }
	.tribe-events .tribe-events-c-nav__list { justify-content: center; }
	.tribe-events .tribe-events-c-subscribe-dropdown { justify-content: center; }
}


/* Full width on small screens: a sheet with side margins wastes reading width */
@media (max-width: 640px) {
	.ilb-article {
		max-width: none;
		margin-inline: 0;
		border-radius: 0;
		box-shadow: none;
		padding-inline: var(--ilb-pad);
	}
	.ilb-article__figure { margin-inline: calc( var(--ilb-pad) * -1 ); }
	.ilb-article__figure img { border-radius: 0; }
}


/* ==========================================================================
   20. AGENDA, TIGHTENING
   Corrections after seeing it in place: buttons that had gone circular, a
   stray active state, doubled rules, and rows standing too tall when an
   event has no photograph.
   ========================================================================== */

/* ---------- Buttons: pills, not circles ---------- */

.tribe-events .tribe-events-c-view-selector__list-item-link,
.tribe-events .tribe-events-c-view-selector__list-item-text,
.tribe-events .tribe-events-c-top-bar__nav-link,
.tribe-events .tribe-events-c-top-bar__today-button,
.tribe-events .tribe-events-c-top-bar__nav-list-item a,
.tribe-events .tribe-events-c-top-bar__nav-list-item span {
	height: 42px;
	min-height: 0;
	padding-block: 0;
	padding-inline: 1.25rem;
	line-height: 1;
	white-space: nowrap;
}

.tribe-events .tribe-events-c-top-bar__nav-link--prev,
.tribe-events .tribe-events-c-top-bar__nav-link--next {
	width: 42px;
	padding-inline: 0;
}

/* The calendar marks the current view with its own background. Ours is the
   yellow pill, so clear theirs rather than have both. */
.tribe-events .tribe-events-c-top-bar__nav-list-item span,
.tribe-events .tribe-events-c-view-selector__list-item-text,
.tribe-events .tribe-events-c-top-bar__nav-list-item--current span {
	background-color: var(--ilb-yellow);
	background-image: none;
	border-color: var(--ilb-yellow);
	box-shadow: none;
	text-shadow: none;
	color: var(--ilb-ink);
}

/* Keep the search field and its button the same height as the pills */
.tribe-events .tribe-common-form-control-text__input,
.tribe-events input[type="text"].tribe-events-c-search__input {
	height: 46px;
	padding-block: 0;
}
.tribe-events .tribe-events-c-search__button,
.tribe-events button[type="submit"].tribe-common-c-btn {
	height: 46px;
	padding-block: 0;
	line-height: 1;
}


/* ---------- One rule, not two, and less air above the first event ---------- */

.tribe-events .tribe-events-header {
	margin-bottom: 0;
	padding-bottom: 0;
	border-bottom: 0;
}
.tribe-events .tribe-events-c-top-bar {
	margin-bottom: var(--ilb-gap);
	padding-bottom: var(--ilb-gap);
	border-bottom: 1px solid var(--ilb-line);
}
.tribe-events .tribe-events-calendar-list__month-separator {
	margin: 2rem 0 1rem;
}
.tribe-events .tribe-events-calendar-list__month-separator:first-of-type {
	margin-top: 0;
}
.tribe-events .tribe-events-calendar-list {
	margin-top: 0;
	padding-top: 0;
}


/* ---------- Rows without a photograph ---------- */

.tribe-events .tribe-events-calendar-list__event-row:not(:has(.tribe-events-calendar-list__event-featured-image-wrapper)) {
	flex-wrap: nowrap;
	align-items: flex-start;
}
.tribe-events .tribe-events-calendar-list__event-row:not(:has(.tribe-events-calendar-list__event-featured-image-wrapper))
	.tribe-events-calendar-list__event-date-tag {
	position: static;
	flex: 0 0 auto;
	margin: 20px 0 20px 20px;
	box-shadow: none;
}
.tribe-events .tribe-events-calendar-list__event-row:not(:has(.tribe-events-calendar-list__event-featured-image-wrapper))
	.tribe-events-calendar-list__event-wrapper {
	flex: 1 1 auto;
	padding-left: 18px;
}

/* Trim the description so a long one does not make one row tower over another */
.tribe-events .tribe-events-calendar-list__event-description {
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}


/* ---------- Category labels, more forcefully ---------- */

.tribe-events .tribe-events-calendar-list__event-row a[class*="tribe_events_cat"],
.tribe-events .tribe-events-calendar-list__event-row span[class*="tribe_events_cat"],
.tribe-events .tribe-events-calendar-list__event-row .tribe-events-event-categories,
.tribe-events .tribe-events-calendar-list__event-row .tribe-events-event-categories a,
.tribe-events-single .tribe-events-event-categories a {
	display: inline-block;
	padding: .22em .9em;
	border-radius: var(--ilb-radius-pill);
	font-size: .74rem;
	font-weight: 800;
	line-height: 1.5;
	letter-spacing: .03em;
	text-decoration: none;
}


@media (max-width: 700px) {
	.tribe-events .tribe-events-calendar-list__event-row:not(:has(.tribe-events-calendar-list__event-featured-image-wrapper)) {
		flex-wrap: wrap;
	}
	.tribe-events .tribe-events-calendar-list__event-row:not(:has(.tribe-events-calendar-list__event-featured-image-wrapper))
		.tribe-events-calendar-list__event-wrapper {
		flex: 1 1 100%;
		padding-left: 20px;
		padding-top: 0;
	}
}


/* ==========================================================================
   21. ARTICLE REFINEMENTS
   ========================================================================== */

/* Share and social blocks: leave them to their own styling, just give them
   room and stop them inheriting link decoration. */
.ilb-prose .wp-block-social-links,
.ilb-prose [class*="share"],
.ilb-prose [class*="sharing"] {
	margin-block: 2rem;
}
.ilb-prose .wp-block-social-links a,
.ilb-prose [class*="share"] a,
.ilb-prose [class*="sharing"] a {
	border-bottom: 0;
	text-decoration: none;
}

/* Figures and embeds break the measure slightly, as the hero image does. */
.ilb-prose figure,
.ilb-prose .wp-block-image,
.ilb-prose .wp-block-embed {
	margin-block: 2rem;
}
.ilb-prose figcaption {
	margin-top: .6rem;
	font-size: .84rem;
	color: var(--ilb-faint);
	text-align: left;
}

/* First paragraph reads a touch larger, the way a standfirst would. */
.ilb-prose > p:first-of-type {
	font-size: 1.08em;
	color: #2A2A2A;
}

/* The foot of an article: a clear way onward rather than a stray link. */
.ilb-article__foot {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
}


/* ==========================================================================
   22. AGENDA, CORRECTIONS
   The view selector nests a span inside each link. Styling both as pills is
   what produced circles, and colouring the span made every item look active.
   Only the link is a pill; the span is plain text.
   ========================================================================== */

/* Inner labels carry nothing of their own */
.tribe-events .tribe-events-c-view-selector__list-item-text,
.tribe-events .tribe-events-c-top-bar__nav-list-item span,
.tribe-events .tribe-events-c-top-bar__nav-link span {
	display: inline;
	height: auto;
	min-height: 0;
	padding: 0;
	background: none;
	border: 0;
	border-radius: 0;
	box-shadow: none;
	color: inherit;
	font: inherit;
	line-height: inherit;
}

/* The pill is the link, or the item when the calendar renders it without one */
.tribe-events .tribe-events-c-view-selector__list-item-link,
.tribe-events .tribe-events-c-top-bar__nav-list-item > a,
.tribe-events .tribe-events-c-top-bar__nav-list-item > button,
.tribe-events .tribe-events-c-top-bar__today-button,
.tribe-events .tribe-events-c-top-bar__nav-link {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	height: 42px;
	min-height: 0;
	padding: 0 1.25rem;
	background: var(--ilb-surface);
	background-image: none;
	border: 1px solid var(--ilb-line);
	border-radius: var(--ilb-radius-pill);
	color: var(--ilb-ink);
	font-size: .92rem;
	font-weight: 700;
	line-height: 1;
	text-decoration: none;
	text-shadow: none;
	box-shadow: none;
	white-space: nowrap;
	appearance: none;
	-webkit-appearance: none;
	transition: background var(--ilb-ease), border-color var(--ilb-ease);
}

/* Only the current view is yellow */
.tribe-events .tribe-events-c-view-selector__list-item--active .tribe-events-c-view-selector__list-item-link,
.tribe-events .tribe-events-c-top-bar__nav-list-item--current > a,
.tribe-events .tribe-events-c-top-bar__nav-list-item--current > button,
.tribe-events .tribe-events-c-top-bar__nav-list-item[aria-current] > a {
	background: var(--ilb-yellow);
	border-color: var(--ilb-yellow);
}

.tribe-events .tribe-events-c-view-selector__list-item-link:hover,
.tribe-events .tribe-events-c-top-bar__today-button:hover,
.tribe-events .tribe-events-c-top-bar__nav-link:hover { border-color: var(--ilb-ink); }

/* The list itself should not add its own shape */
.tribe-events .tribe-events-c-view-selector__list-item {
	margin: 0;
	padding: 0;
	background: none;
	border-radius: 0;
	list-style: none;
}


/* ---------- Month bands delimit their section ---------- */

.tribe-events .tribe-events-calendar-list__month-separator {
	display: flex;
	align-items: center;
	gap: 1rem;
	margin: 2.75rem 0 1.1rem;
}
.tribe-events .tribe-events-calendar-list__month-separator:first-of-type { margin-top: .5rem; }
.tribe-events .tribe-events-calendar-list__month-separator::after {
	content: "";
	flex: 1 1 auto;
	height: 1px;
	background: var(--ilb-line);
}
.tribe-events .tribe-events-calendar-list__month-separator-text {
	flex: 0 0 auto;
	width: auto;
	padding: .55em 1.15em;
	border-radius: var(--ilb-radius-pill);
	font-size: .78rem;
	letter-spacing: .12em;
}


/* ---------- Less space lost between the controls and the first event ---------- */

.tribe-events .tribe-events-c-top-bar {
	margin-bottom: .75rem;
	padding-bottom: 1rem;
}
.tribe-events .tribe-events-c-events-bar,
.tribe-events .tribe-events-header__events-bar { margin-bottom: 1rem; }
.tribe-events .tribe-events-calendar-list__event-row { margin-bottom: .7rem; }
.tribe-events .tribe-events-l-container,
.tribe-events .tribe-common-l-container {
	padding-block: 0;
	margin-block: 0;
}


/* ==========================================================================
   23. ARCHIVE BAND, TIGHTER
   ========================================================================== */

.ilb-band { padding-block: clamp(1.75rem, 3vw, 2.5rem); }
.ilb-band--yellow { padding-block: clamp(1.75rem, 3vw, 2.5rem) clamp(1.5rem, 2.5vw, 2rem); }
.ilb-band__intro { margin-top: .8rem; }
.ilb-band__search { margin-top: 1.25rem; }
.ilb-band__title { margin-bottom: .35rem; }
.ilb-band__count { margin-top: .3rem; }


/* ==========================================================================
   24. ARCHIVE BAND, FINAL PROPORTIONS
   A larger mark inside a shorter band. The text column sets the height, so
   the icon can grow without the band growing with it.
   ========================================================================== */

.ilb-band--yellow {
	padding-block: clamp(1.5rem, 2.6vw, 2.25rem) clamp(1.35rem, 2.2vw, 1.85rem);
}

/* Centre the mark against the text rather than pinning it to the top, which
   looks stranded once it has some size. */
.ilb-band--yellow .ilb-band__row { align-items: center; }

.ilb-band__icon {
	width: clamp(96px, 11vw, 144px);
	height: clamp(96px, 11vw, 144px);
	border-radius: clamp(24px, 2.6vw, 34px);
}
.ilb-band__icon svg {
	width: 50%;
	height: 50%;
}

/* Tighten the stack inside the text column */
.ilb-band__title { margin-bottom: .3rem; line-height: 1.1; }
.ilb-band__count { margin-top: .25rem; }
.ilb-band__intro { margin-top: .7rem; }
.ilb-band__intro p { margin-bottom: .4em; }
.ilb-band__back { margin-bottom: .6rem; }
.ilb-band__search { margin-top: 1.1rem; }

@media (max-width: 782px) {
	.ilb-band--yellow .ilb-band__row { align-items: flex-start; }
	.ilb-band__icon {
		width: 68px;
		height: 68px;
		border-radius: 17px;
	}
}


/* ==========================================================================
   25. AGENDA CONTROLS, STRUCTURAL
   Targeting by container rather than by class name, because the calendar's
   own class names have not been matching. Rounded rectangles rather than
   pills: they read as buttons, and they cannot collapse into circles.
   ========================================================================== */

/* Every control in the two bars */
.tribe-events .tribe-events-c-view-selector a,
.tribe-events .tribe-events-c-view-selector button,
.tribe-events .tribe-events-c-view-selector li > span,
.tribe-events .tribe-events-c-top-bar a,
.tribe-events .tribe-events-c-top-bar button {
	box-sizing: border-box;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: .4em;
	height: 44px;
	min-height: 44px;
	max-height: 44px;
	min-width: 44px;
	padding: 0 1.15rem;
	background: var(--ilb-surface);
	background-image: none;
	border: 1px solid var(--ilb-line);
	border-radius: 12px;
	color: var(--ilb-ink);
	font-size: .92rem;
	font-weight: 700;
	line-height: 1;
	text-align: center;
	text-decoration: none;
	text-shadow: none;
	box-shadow: none;
	white-space: nowrap;
	appearance: none;
	-webkit-appearance: none;
	cursor: pointer;
	transition: background var(--ilb-ease), border-color var(--ilb-ease);
}

.tribe-events .tribe-events-c-view-selector a:hover,
.tribe-events .tribe-events-c-view-selector button:hover,
.tribe-events .tribe-events-c-top-bar a:hover,
.tribe-events .tribe-events-c-top-bar button:hover {
	border-color: var(--ilb-ink);
}

/* Anything nested inside a control is plain text */
.tribe-events .tribe-events-c-view-selector a *,
.tribe-events .tribe-events-c-view-selector button *,
.tribe-events .tribe-events-c-view-selector li > span *,
.tribe-events .tribe-events-c-top-bar a *,
.tribe-events .tribe-events-c-top-bar button * {
	display: inline;
	height: auto;
	min-height: 0;
	max-height: none;
	padding: 0;
	margin: 0;
	background: none;
	border: 0;
	border-radius: 0;
	box-shadow: none;
	color: inherit;
	font: inherit;
	line-height: inherit;
}

/* Except icons, which stay as icons */
.tribe-events .tribe-events-c-view-selector svg,
.tribe-events .tribe-events-c-top-bar svg {
	display: block;
	width: 16px;
	height: 16px;
	color: currentColor;
	fill: currentColor;
}

/* The current view, and only the current view */
.tribe-events .tribe-events-c-view-selector li[class*="--active"] a,
.tribe-events .tribe-events-c-view-selector li[class*="--active"] > span,
.tribe-events .tribe-events-c-top-bar li[class*="--current"] a,
.tribe-events .tribe-events-c-top-bar li[class*="--current"] button,
.tribe-events .tribe-events-c-top-bar [aria-current="page"],
.tribe-events .tribe-events-c-top-bar [aria-current="true"] {
	background: var(--ilb-yellow);
	border-color: var(--ilb-yellow);
	color: var(--ilb-ink);
}

/* The arrows are square */
.tribe-events .tribe-events-c-top-bar__nav-link--prev,
.tribe-events .tribe-events-c-top-bar__nav-link--next,
.tribe-events .tribe-events-c-top-bar a[class*="--prev"],
.tribe-events .tribe-events-c-top-bar a[class*="--next"],
.tribe-events .tribe-events-c-top-bar button[class*="--prev"],
.tribe-events .tribe-events-c-top-bar button[class*="--next"] {
	width: 44px;
	padding: 0;
}

/* Lists in the bars carry no shape of their own */
.tribe-events .tribe-events-c-view-selector ul,
.tribe-events .tribe-events-c-view-selector li,
.tribe-events .tribe-events-c-top-bar ul,
.tribe-events .tribe-events-c-top-bar li {
	margin: 0;
	padding: 0;
	background: none;
	border: 0;
	border-radius: 0;
	list-style: none;
}

/* Search field and its button share the control height */
.tribe-events .tribe-common-form-control-text__input,
.tribe-events .tribe-events-c-search input[type="text"],
.tribe-events .tribe-events-c-search input[type="search"] {
	box-sizing: border-box;
	height: 48px;
	padding: 0 1.25rem;
	border-radius: 12px;
}
.tribe-events .tribe-events-c-search__button,
.tribe-events form button[type="submit"] {
	box-sizing: border-box;
	height: 48px;
	padding: 0 1.6rem;
	border-radius: 12px;
	background: var(--ilb-ink);
	border: 0;
	color: #fff;
}
.tribe-events .tribe-events-c-search__button:hover,
.tribe-events form button[type="submit"]:hover { background: #000; }

/* The month band matches that radius rather than being a lozenge */
.tribe-events .tribe-events-calendar-list__month-separator-text {
	border-radius: 10px;
}


/* ==========================================================================
   26. DATEPICKER
   The calendar popup is its own component and must be exempted from the
   control rules above, then dressed deliberately: a card of rounded day
   cells, yellow for the chosen day, quiet for days outside the month.
   ========================================================================== */

/* Undo the control sizing inside the popup */
.tribe-events .datepicker a,
.tribe-events .datepicker button,
.tribe-events .datepicker td,
.tribe-events .datepicker th,
.tribe-events [class*="datepicker"] a,
.tribe-events [class*="datepicker"] button {
	height: auto;
	min-height: 0;
	max-height: none;
	min-width: 0;
	padding: 0;
	border: 0;
	background: none;
	border-radius: 0;
	font-size: inherit;
	line-height: inherit;
}

.tribe-events .datepicker,
.tribe-events .tribe-events-c-top-bar__datepicker-container {
	padding: .85rem;
	background: var(--ilb-surface);
	border: 1px solid var(--ilb-line);
	border-radius: var(--ilb-radius-lg);
	box-shadow: var(--ilb-shadow-lift);
}

.tribe-events .datepicker table { width: 100%; border-collapse: separate; border-spacing: 4px; }

/* Month row */
.tribe-events .datepicker .datepicker-switch {
	padding: .5em;
	font-size: 1rem;
	font-weight: 800;
	color: var(--ilb-ink);
	text-align: center;
}
.tribe-events .datepicker .prev,
.tribe-events .datepicker .next {
	width: 36px;
	height: 36px;
	border-radius: 10px;
	color: var(--ilb-ink);
	text-align: center;
	vertical-align: middle;
	transition: background var(--ilb-ease);
}
.tribe-events .datepicker .prev:hover,
.tribe-events .datepicker .next:hover { background: var(--ilb-line-soft); }
.tribe-events .datepicker .prev svg,
.tribe-events .datepicker .next svg { width: 15px; height: 15px; margin-inline: auto; }

/* Weekday initials */
.tribe-events .datepicker .dow {
	padding-block: .5em;
	font-size: .72rem;
	font-weight: 800;
	letter-spacing: .06em;
	text-transform: uppercase;
	color: var(--ilb-faint);
	text-decoration: none;
}

/* Day cells */
.tribe-events .datepicker td.day,
.tribe-events .datepicker .day {
	width: 40px;
	height: 38px;
	border-radius: 10px;
	color: var(--ilb-ink);
	font-size: .92rem;
	font-weight: 700;
	text-align: center;
	vertical-align: middle;
	cursor: pointer;
	transition: background var(--ilb-ease), color var(--ilb-ease);
}
.tribe-events .datepicker .day:hover { background: var(--ilb-yellow-soft); }
.tribe-events .datepicker .day.old,
.tribe-events .datepicker .day.new,
.tribe-events .datepicker .day.disabled { color: #C4C4C4; cursor: default; }
.tribe-events .datepicker .day.old:hover,
.tribe-events .datepicker .day.new:hover,
.tribe-events .datepicker .day.disabled:hover { background: none; }

.tribe-events .datepicker .day.today { box-shadow: inset 0 0 0 2px var(--ilb-yellow); }

.tribe-events .datepicker .day.active,
.tribe-events .datepicker .day.active:hover,
.tribe-events .datepicker .day.selected,
.tribe-events .datepicker td.active {
	background: var(--ilb-yellow);
	background-image: none;
	color: var(--ilb-ink);
	box-shadow: none;
	text-shadow: none;
}

/* Days that have something on: a dot beneath the number */
.tribe-events .datepicker .day.has-event { position: relative; }
.tribe-events .datepicker .day.has-event::after {
	content: "";
	position: absolute;
	left: 50%;
	bottom: 5px;
	width: 4px; height: 4px;
	margin-left: -2px;
	border-radius: 50%;
	background: var(--ilb-ink);
}
.tribe-events .datepicker .day.active.has-event::after { background: var(--ilb-ink); }

/* The button that opens it keeps its chevron */
.tribe-events .tribe-events-c-top-bar__datepicker-button svg { width: 14px; height: 14px; }


/* ==========================================================================
   27. ARCHIVE MARK, LARGER
   ========================================================================== */

.ilb-band__icon {
	width: clamp(120px, 14vw, 190px);
	height: clamp(120px, 14vw, 190px);
	border-radius: clamp(28px, 3.2vw, 44px);
}
.ilb-band__icon svg { width: 52%; height: 52%; }

/* Give the text column a ceiling so the mark is not pushed to the far edge
   on a wide screen, and the two sit as a pair. */
.ilb-band--yellow .ilb-band__text { max-width: 62ch; }
.ilb-band--yellow .ilb-band__row { gap: clamp(2rem, 5vw, 4rem); }

@media (max-width: 782px) {
	.ilb-band__icon { width: 72px; height: 72px; border-radius: 18px; }
}


/* ==========================================================================
   28. FOOTER FINE PRINT
   Legal links are there to be found, not to be noticed. Smaller, quieter,
   and underlined only on hover.
   ========================================================================== */

/* The legal menu at the base of the footer */
.ilb-legalmenu { font-size: .82rem; }
.ilb-legalmenu a {
	opacity: .5;
	border-bottom: 0;
	transition: opacity var(--ilb-ease), border-color var(--ilb-ease);
}
.ilb-legalmenu a:hover,
.ilb-legalmenu a:focus-visible {
	opacity: 1;
	border-bottom: 1px solid var(--ilb-yellow);
}
.ilb-footer__copy { opacity: .5; font-size: .82rem; }

/* A line of fine print inside a widget: the paragraph after social icons,
   the last paragraph of a widget, or anything given the class by hand. */
.ilb-fwidget .wp-block-social-links + p,
.ilb-fwidget > p:last-child,
.ilb-fwidget .ilb-fineprint {
	margin-top: 1.6rem;
	padding-top: 1.2rem;
	border-top: 1px solid rgb(255 255 255 / .12);
	font-size: .8rem;
	line-height: 1.7;
	opacity: .5;
}
.ilb-fwidget .wp-block-social-links + p a,
.ilb-fwidget > p:last-child a,
.ilb-fwidget .ilb-fineprint a {
	border-bottom: 0;
	transition: opacity var(--ilb-ease), border-color var(--ilb-ease);
}
.ilb-fwidget .wp-block-social-links + p a:hover,
.ilb-fwidget > p:last-child a:hover,
.ilb-fwidget .ilb-fineprint a:hover {
	border-bottom: 1px solid var(--ilb-yellow);
}

/* The About paragraph itself should stay readable, so exclude it when it is
   also the last child of its widget. */
.ilb-fwidget > p:last-child:first-of-type {
	margin-top: 0;
	padding-top: 0;
	border-top: 0;
	font-size: inherit;
	opacity: .88;
}


/* ==========================================================================
   29. AGENDA, CORRECTIONS ROUND TWO

   Three faults of my own making, fixed at the cause:
   1. The datepicker exemption matched the trigger button as well as the
      popup, which stripped the button back to an empty white box.
   2. The date badge was absolutely positioned against the row, so on cards
      where the image sits on the right it landed on top of the text.
   3. The controls were too square and their labels not centred.
   ========================================================================== */

/* ---------- 1. Exempt only the popup, never the trigger ---------- */

.tribe-events .tribe-events-c-top-bar__datepicker-button,
.tribe-events button[class*="datepicker-button"] {
	box-sizing: border-box;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: .5em;
	height: 44px;
	min-height: 44px;
	max-height: 44px;
	width: auto;
	min-width: 0;
	padding: 0 1.25rem;
	background: var(--ilb-surface);
	border: 1px solid var(--ilb-line);
	border-radius: 14px;
	color: var(--ilb-ink);
	font-size: .92rem;
	font-weight: 700;
	line-height: 1;
	text-align: center;
}
.tribe-events .tribe-events-c-top-bar__datepicker-button:hover { border-color: var(--ilb-ink); }
.tribe-events .tribe-events-c-top-bar__datepicker-button span,
.tribe-events button[class*="datepicker-button"] span {
	display: inline;
	color: inherit;
	font: inherit;
}
.tribe-events .tribe-events-c-top-bar__datepicker-button svg { width: 13px; height: 13px; }


/* ---------- 2. The date badge stays in the flow ---------- */

.tribe-events .tribe-events-calendar-list__event-row {
	position: relative;
	display: flex;
	flex-wrap: wrap;
	align-items: flex-start;
	gap: 0;
	padding: 18px 20px;
	overflow: visible;
}

.tribe-events .tribe-events-calendar-list__event-date-tag,
.tribe-events .tribe-events-calendar-list__event-row:not(:has(.tribe-events-calendar-list__event-featured-image-wrapper))
	.tribe-events-calendar-list__event-date-tag {
	position: static;
	flex: 0 0 auto;
	order: 0;
	width: 62px;
	margin: 0 18px 0 0;
	padding: 9px 4px;
	box-shadow: none;
}

.tribe-events .tribe-events-calendar-list__event-wrapper,
.tribe-events .tribe-events-calendar-list__event-row:not(:has(.tribe-events-calendar-list__event-featured-image-wrapper))
	.tribe-events-calendar-list__event-wrapper {
	flex: 1 1 260px;
	order: 1;
	min-width: 0;
	padding: 0;
}

/* Image last, at a size worth having, never overlapping anything */
.tribe-events .tribe-events-calendar-list__event-featured-image-wrapper {
	position: static;
	flex: 0 0 clamp(150px, 20%, 220px);
	order: 2;
	margin-left: 20px;
	background: none;
}
.tribe-events .tribe-events-calendar-list__event-featured-image {
	width: 100%;
	height: auto;
	min-height: 0;
	aspect-ratio: 4 / 3;
	object-fit: cover;
	border-radius: 12px;
}


/* ---------- 3. Softer rectangles, labels centred ---------- */

.tribe-events .tribe-events-c-view-selector a,
.tribe-events .tribe-events-c-view-selector button,
.tribe-events .tribe-events-c-view-selector li > span,
.tribe-events .tribe-events-c-top-bar a,
.tribe-events .tribe-events-c-top-bar button {
	border-radius: 14px;
	padding-inline: 1.35rem;
	text-align: center;
	justify-content: center;
}
.tribe-events .tribe-events-c-view-selector a > *,
.tribe-events .tribe-events-c-view-selector button > *,
.tribe-events .tribe-events-c-top-bar a > *,
.tribe-events .tribe-events-c-top-bar button > * {
	text-align: center;
}


/* ---------- Less air above the controls ---------- */

.tribe-events {
	padding-top: 1.5rem;
}
.tribe-events .tribe-events-header,
.tribe-events .tribe-common-l-container,
.tribe-events .tribe-events-l-container {
	padding-top: 0;
	margin-top: 0;
}


@media (max-width: 700px) {
	.tribe-events .tribe-events-calendar-list__event-featured-image-wrapper {
		flex: 1 1 100%;
		order: 3;
		margin: 14px 0 0;
	}
	.tribe-events .tribe-events-calendar-list__event-featured-image { aspect-ratio: 16 / 9; }
	.tribe-events .tribe-events-calendar-list__event-wrapper { flex: 1 1 calc(100% - 80px); }
}


/* ==========================================================================
   30. PLACE PAGES
   A place is a record, not an article: the facts you came for, presented as
   a panel, then the writing, then where to go next. These style what the
   places plugin outputs so it reads as part of the site.
   ========================================================================== */

/* ---------- Status and verification ---------- */

.ilb-status {
	margin: 0 0 1.5rem;
	padding: .9rem 1.1rem;
	border-radius: var(--ilb-radius);
	font-weight: 700;
	font-size: .95rem;
}

.ilb-verified-wrap { margin: 1.5rem 0; }
.ilb-verified {
	display: inline-flex;
	align-items: center;
	gap: .5em;
	padding: .5em 1.1em;
	background: var(--ilb-ink);
	border-radius: var(--ilb-radius-pill);
	color: #fff;
	font-size: .84rem;
	font-weight: 800;
	letter-spacing: .02em;
}
.ilb-verified__heart { color: var(--ilb-yellow); }
.ilb-verified__sub {
	display: block;
	margin-top: .5em;
	font-size: .84rem;
	color: var(--ilb-muted);
}

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

.ilb-place-details,
.ilb-details {
	margin: 2rem 0;
}

.ilb-details {
	display: grid;
	grid-template-columns: minmax(120px, auto) 1fr;
	gap: 0;
	padding: 4px 22px;
	background: #FAFAFA;
	border-radius: var(--ilb-radius-lg);
	font-size: .96rem;
}
.ilb-details dt,
.ilb-details dd {
	margin: 0;
	padding: .85em 0;
	border-top: 1px solid var(--ilb-line);
}
.ilb-details dt:first-of-type,
.ilb-details dt:first-of-type + dd { border-top: 0; }
.ilb-details dt {
	padding-right: 1.5rem;
	font-weight: 800;
	color: var(--ilb-ink);
}
.ilb-details dd { color: #333; }
.ilb-details a {
	color: var(--ilb-ink);
	text-decoration: none;
	border-bottom: 2px solid var(--ilb-yellow);
}
.ilb-details a:hover { border-bottom-color: var(--ilb-ink); }

.ilb-address {
	font-style: normal;
	line-height: 1.6;
}

/* ---------- Badges ---------- */

.ilb-badges {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin: 1.5rem 0;
	padding: 0;
	list-style: none;
}
.ilb-badge {
	display: inline-block;
	padding: .3em .95em;
	background: var(--ilb-yellow-soft);
	border-radius: var(--ilb-radius-pill);
	color: var(--ilb-ink);
	font-size: .8rem;
	font-weight: 700;
}

/* ---------- Local tip ---------- */

.ilb-tip {
	margin: 2rem 0;
	padding: 1.2rem 1.4rem;
	background: var(--ilb-yellow-soft);
	border-left: 4px solid var(--ilb-yellow);
	border-radius: 0 var(--ilb-radius) var(--ilb-radius) 0;
	font-size: 1.02rem;
	line-height: 1.65;
}
.ilb-tip strong { display: block; margin-bottom: .3em; }

/* ---------- Links and socials ---------- */

.ilb-contact-link {
	color: var(--ilb-ink);
	text-decoration: none;
	border-bottom: 2px solid var(--ilb-yellow);
}
.ilb-contact-link:hover { border-bottom-color: var(--ilb-ink); }

.ilb-socials {
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
	margin: 1.5rem 0;
}
.ilb-social {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 42px;
	height: 42px;
	background: var(--ilb-ink);
	border-radius: 50%;
	color: #fff;
	text-decoration: none;
	border-bottom: 0;
	transition: background var(--ilb-ease), transform var(--ilb-ease);
}
.ilb-social:hover {
	background: var(--ilb-yellow);
	color: var(--ilb-ink);
	transform: translateY(-2px);
}
.ilb-social svg { width: 19px; height: 19px; }

/* ---------- What's on here ---------- */

.ilb-place-events { margin: 2.5rem 0; }
.ilb-place-events__head {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	justify-content: space-between;
	gap: .5rem 1rem;
	margin-bottom: 1rem;
}
.ilb-place-events__count {
	font-size: .8rem;
	font-weight: 700;
	letter-spacing: .05em;
	text-transform: uppercase;
	color: var(--ilb-faint);
}
.ilb-event-item {
	display: flex;
	align-items: center;
	gap: 14px;
	margin-bottom: .7rem;
	padding: 12px 14px;
	background: var(--ilb-surface);
	border: 1px solid var(--ilb-line);
	border-radius: var(--ilb-radius);
	text-decoration: none;
	color: inherit;
	border-bottom: 0;
	transition: transform var(--ilb-ease), border-color var(--ilb-ease);
}
.ilb-event-item:hover { transform: translateY(-2px); border-color: var(--ilb-ink); }
.ilb-event-date {
	flex: 0 0 auto;
	width: 54px;
	padding: 8px 4px;
	text-align: center;
	line-height: 1;
	background: var(--ilb-yellow);
	border-radius: 10px;
}
.ilb-event-date__month {
	display: block;
	font-size: .64rem;
	font-weight: 800;
	letter-spacing: .07em;
	opacity: .75;
}
.ilb-event-date__day {
	display: block;
	margin-top: 3px;
	font-size: 1.3rem;
	font-weight: 800;
}
.ilb-event-title { display: block; font-weight: 700; line-height: 1.35; }
.ilb-event-meta { display: block; font-size: .85rem; color: var(--ilb-muted); margin-top: 2px; }

/* ---------- Related places ---------- */

.ilb-related { margin: 3rem 0 1rem; }
.ilb-related__title {
	margin-bottom: 1.1rem;
	font-size: var(--ilb-step-2);
}
.ilb-related__grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
	gap: 16px;
}
.ilb-related__card {
	display: flex;
	flex-direction: column;
	overflow: hidden;
	background: var(--ilb-surface);
	border: 1px solid var(--ilb-line);
	border-radius: var(--ilb-radius);
	text-decoration: none;
	color: inherit;
	border-bottom: 0;
	transition: transform var(--ilb-ease), box-shadow var(--ilb-ease);
}
.ilb-related__card:hover { transform: translateY(-3px); box-shadow: var(--ilb-shadow); }
.ilb-related__media { display: block; overflow: hidden; background: var(--ilb-line-soft); }
.ilb-related__img {
	display: block;
	width: 100%;
	height: 120px;
	object-fit: cover;
	transition: transform .45s ease;
}
.ilb-related__card:hover .ilb-related__img { transform: scale(1.04); }
.ilb-related__body {
	display: flex;
	flex-direction: column;
	gap: .4em;
	padding: 12px 14px 14px;
}
.ilb-related__type {
	align-self: flex-start;
	padding: .2em .75em;
	background: var(--ilb-yellow);
	border-radius: var(--ilb-radius-pill);
	font-size: .68rem;
	font-weight: 800;
	letter-spacing: .04em;
	text-transform: uppercase;
}
.ilb-related__name { font-weight: 800; font-size: .98rem; line-height: 1.3; }

@media (max-width: 560px) {
	.ilb-details { grid-template-columns: 1fr; padding-inline: 18px; }
	.ilb-details dd { padding-top: 0; border-top: 0; }
	.ilb-details dt { padding-bottom: .2em; }
	.ilb-related__grid { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 12px; }
}


/* ==========================================================================
   31. NOT FOUND
   Branded rather than apologetic: the mark alongside the code, a human line,
   three ways onward, and a search. Nobody leaves from here by accident.
   ========================================================================== */

.ilb-404 { padding-block: var(--ilb-block); }

.ilb-404__panel {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: clamp(1.75rem, 5vw, 4rem);
	padding: clamp(2rem, 5vw, 3.5rem);
	background: var(--ilb-yellow);
	border-radius: var(--ilb-radius-lg);
}

.ilb-404__signal {
	flex: 0 0 auto;
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: .75rem;
}
.ilb-404__code {
	font-size: clamp(3.5rem, 9vw, 6rem);
	font-weight: 800;
	line-height: .9;
	letter-spacing: -.03em;
	color: var(--ilb-ink);
}
.ilb-404__mark { color: var(--ilb-ink); }
.ilb-404__mark svg { width: clamp(46px, 6vw, 68px); height: auto; }

.ilb-404__copy { flex: 1 1 320px; min-width: 0; }

.ilb-404__eyebrow {
	margin-bottom: .5rem;
	font-size: .78rem;
	font-weight: 800;
	letter-spacing: .12em;
	text-transform: uppercase;
	opacity: .6;
}
.ilb-404__title {
	font-size: var(--ilb-step-3);
	line-height: 1.12;
	margin-bottom: .7rem;
	text-wrap: wrap;
}
.ilb-404__intro {
	max-width: 52ch;
	font-size: var(--ilb-step-1);
	line-height: 1.6;
	margin-bottom: 1.75rem;
	opacity: .9;
}

.ilb-404__actions {
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
}
.ilb-404__btn {
	display: inline-flex;
	align-items: center;
	height: 46px;
	padding: 0 1.5rem;
	background: var(--ilb-surface);
	border: 1px solid transparent;
	border-radius: 14px;
	color: var(--ilb-ink);
	font-size: .94rem;
	font-weight: 700;
	text-decoration: none;
	transition: transform var(--ilb-ease), background var(--ilb-ease);
}
.ilb-404__btn:hover { transform: translateY(-2px); }
.ilb-404__btn--primary {
	background: var(--ilb-ink);
	color: #fff;
}
.ilb-404__btn--primary:hover { background: #000; }

/* Search card */
.ilb-404__search {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 1.5rem;
	margin-top: 1.25rem;
	padding: clamp(1.5rem, 3.5vw, 2.25rem);
	background: var(--ilb-surface);
	border: 1px solid var(--ilb-line);
	border-radius: var(--ilb-radius-lg);
}
.ilb-404__searchtitle { font-size: var(--ilb-step-2); }
.ilb-404__search .ilb-search {
	flex: 1 1 340px;
	max-width: 460px;
	box-shadow: none;
	border-color: var(--ilb-line);
}
.ilb-404__search .ilb-search:focus-within { box-shadow: 0 0 0 3px var(--ilb-yellow); }

.ilb-404__types { margin-top: var(--ilb-block); }
.ilb-404__types .ilb-eyebrow,
.ilb-404__types .ilb-404__eyebrow { margin-bottom: 1rem; }

@media (max-width: 640px) {
	.ilb-404__panel { flex-direction: column; align-items: flex-start; text-align: left; }
	.ilb-404__signal { flex-direction: row; align-items: center; gap: 1rem; }
	.ilb-404__btn { width: 100%; justify-content: center; }
	.ilb-404__search { flex-direction: column; align-items: stretch; }
	.ilb-404__search .ilb-search { max-width: none; }
}


/* ==========================================================================
   33. AGENDA, OUR OWN
   Markup we control, so nothing here is a guess at someone else's classes.
   One card shape, one date badge, one set of rules.
   ========================================================================== */

.ilb-monthband {
	margin: 2.75rem 0 1.15rem;
}
.ilb-monthband:first-of-type { margin-top: 0; }
.ilb-monthband__label {
	display: inline-block;
	padding: .65em 1.35em;
	background: var(--ilb-yellow);
	border-radius: 12px;
	font-size: .82rem;
	font-weight: 800;
	letter-spacing: .11em;
	text-transform: uppercase;
	line-height: 1;
	color: var(--ilb-ink);
}

.ilb-ev-card {
	display: flex;
	align-items: flex-start;
	gap: 18px;
	margin-bottom: .8rem;
	padding: 18px 20px;
	background: var(--ilb-surface);
	border: 1px solid var(--ilb-line);
	border-radius: var(--ilb-radius);
	text-decoration: none;
	color: inherit;
	transition: transform var(--ilb-ease), border-color var(--ilb-ease), box-shadow var(--ilb-ease);
}
.ilb-ev-card:hover {
	transform: translateY(-2px);
	border-color: var(--ilb-ink);
	box-shadow: var(--ilb-shadow);
}

.ilb-ev-card__tag {
	flex: 0 0 auto;
	width: 62px;
	padding: 10px 4px;
	text-align: center;
	line-height: 1;
	background: var(--ilb-yellow);
	border-radius: 12px;
}
.ilb-ev-card__m {
	display: block;
	font-size: .64rem;
	font-weight: 800;
	letter-spacing: .07em;
	opacity: .75;
}
.ilb-ev-card__d {
	display: block;
	margin-top: 4px;
	font-size: 1.45rem;
	font-weight: 800;
}

.ilb-ev-card__body {
	flex: 1 1 auto;
	min-width: 0;
	display: flex;
	flex-direction: column;
	gap: .35em;
}
.ilb-ev-card__when {
	font-size: .78rem;
	font-weight: 700;
	letter-spacing: .05em;
	text-transform: uppercase;
	color: var(--ilb-faint);
}
.ilb-ev-card__title {
	font-size: 1.12rem;
	font-weight: 800;
	line-height: 1.28;
	letter-spacing: -.005em;
}
.ilb-ev-card__where {
	font-size: .88rem;
	color: var(--ilb-muted);
}
.ilb-ev-card__meta {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 6px;
	margin-top: .15em;
}
.ilb-ev-card__cat {
	display: inline-block;
	padding: .22em .85em;
	background: var(--ilb-yellow-soft);
	border-radius: var(--ilb-radius-pill);
	font-size: .72rem;
	font-weight: 800;
	letter-spacing: .03em;
}
.ilb-ev-card__cost {
	display: inline-block;
	padding: .22em .85em;
	background: var(--ilb-ink);
	border-radius: var(--ilb-radius-pill);
	color: #fff;
	font-size: .72rem;
	font-weight: 800;
}
.ilb-ev-card__sum {
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
	margin-top: .2em;
	font-size: .92rem;
	line-height: 1.55;
	color: var(--ilb-muted);
}

.ilb-ev-card__pic {
	flex: 0 0 clamp(140px, 20%, 210px);
	overflow: hidden;
	border-radius: 12px;
	line-height: 0;
}
.ilb-ev-card__pic img {
	width: 100%;
	aspect-ratio: 4 / 3;
	object-fit: cover;
	transition: transform .45s ease;
}
.ilb-ev-card:hover .ilb-ev-card__pic img { transform: scale(1.04); }

@media (max-width: 700px) {
	.ilb-ev-card { flex-wrap: wrap; gap: 14px; padding: 16px; }
	.ilb-ev-card__body { flex: 1 1 calc(100% - 76px); }
	.ilb-ev-card__pic { flex: 1 1 100%; }
	.ilb-ev-card__pic img { aspect-ratio: 16 / 9; }
}


/* ==========================================================================
   34. PLACE HEADER
   Photograph and words side by side rather than words over photograph. A
   portrait shot crops to four by three instead of to a wide band, so it
   keeps its subject, and the text always sits on a solid colour.
   ========================================================================== */

.ilb-placehead {
	background: var(--ilb-yellow);
}

.ilb-placehead__inner {
	display: flex;
	flex-wrap: wrap;
	align-items: stretch;
	gap: 0;
	padding-inline: 0;
	max-width: var(--ilb-wrap);
}

.ilb-placehead__pic {
	flex: 1 1 380px;
	min-width: 0;
	line-height: 0;
	background: var(--ilb-ink);
}
.ilb-placehead__pic img {
	width: 100%;
	height: 100%;
	max-height: 520px;
	aspect-ratio: 4 / 3;
	object-fit: cover;
	display: block;
}

.ilb-placehead__text {
	flex: 1 1 340px;
	min-width: 0;
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	justify-content: center;
	gap: .75rem;
	padding: clamp(1.75rem, 4vw, 3rem) clamp(1.5rem, 4vw, 3rem);
	color: var(--ilb-ink);
}

.ilb-placehead__type {
	background: var(--ilb-ink);
	color: #fff;
}

.ilb-placehead__title {
	font-size: var(--ilb-step-3);
	line-height: 1.08;
	letter-spacing: -.02em;
	text-wrap: wrap;
}

.ilb-placehead__sum {
	max-width: 44ch;
	margin: 0;
	font-size: var(--ilb-step-1);
	line-height: 1.55;
	opacity: .82;
}

/* No photograph: the panel simply spans the width */
.ilb-placehead--noimg .ilb-placehead__text {
	flex: 1 1 100%;
	padding-inline: var(--ilb-pad);
}

.ilb-article--place { margin-top: calc( var(--ilb-block) * .7 ); }

/* WordPress drop caps do not suit these pages */
.ilb-prose p.has-drop-cap::first-letter,
.ilb-prose .has-drop-cap:not(:focus)::first-letter {
	float: none;
	margin: 0;
	font-size: inherit;
	line-height: inherit;
	font-weight: inherit;
	text-transform: none;
}

@media (max-width: 860px) {
	.ilb-placehead__pic img { aspect-ratio: 16 / 10; max-height: 340px; }
	.ilb-placehead__text { padding: clamp(1.5rem, 6vw, 2rem) var(--ilb-pad); }
}


/* ==========================================================================
   35. SINGLE EVENT
   Our own template, matching the place page: split header, writing on a
   sheet, then a panel of practical details.
   ========================================================================== */

.ilb-eventwhen {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: .6rem .9rem;
	margin: 0;
	font-size: var(--ilb-step-1);
	font-weight: 700;
}
.ilb-eventcost {
	display: inline-block;
	padding: .22em .9em;
	background: var(--ilb-ink);
	border-radius: var(--ilb-radius-pill);
	color: #fff;
	font-size: .8rem;
	font-weight: 800;
}

.ilb-eventfacts {
	margin-top: 2.5rem;
	padding-top: 2rem;
	border-top: 1px solid var(--ilb-line);
}
.ilb-eventfacts__title {
	margin-bottom: 1rem;
	font-size: var(--ilb-step-2);
}
.ilb-eventfacts .ilb-details { margin-top: 0; }
.ilb-eventfacts__cta { margin-top: 1.5rem; }

.ilb-btn {
	display: inline-flex;
	align-items: center;
	height: 50px;
	padding: 0 1.75rem;
	background: var(--ilb-ink);
	border: 0;
	border-radius: 14px;
	color: #fff;
	font-size: .96rem;
	font-weight: 700;
	text-decoration: none;
	transition: background var(--ilb-ease), transform var(--ilb-ease);
}
.ilb-btn:hover { background: #000; transform: translateY(-2px); color: #fff; }

/* The plugin's own strip sits above the writing */
.ilb-article--place .ilb-event-header,
.ilb-article--place .ilb-event-cta { margin-bottom: 1.5rem; }


/* ==========================================================================
   36. PAGES
   The featured image belongs in the header, so it should not also appear at
   the top of the writing.
   ========================================================================== */

.ilb-article--place .ilb-prose > .wp-block-post-featured-image:first-child { display: none; }

/* A page header with no image keeps the band compact */
.ilb-band--yellow > .ilb-wrap > .ilb-band__title { max-width: 24ch; }


/* ==========================================================================
   37. CARD SUMMARIES, EVENED
   A row of cards should have a straight bottom edge. Three lines is enough
   to say what somewhere is, and beyond that the card is competing with the
   page it links to.
   ========================================================================== */

.ilb-card__sum {
	display: -webkit-box;
	-webkit-line-clamp: 3;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.ilb-card__name {
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

/* Push the text block to fill the card so the borders line up */
.ilb-card__text { flex: 1 1 auto; }


/* ==========================================================================
   38. SINGLE EVENT, NO DUPLICATE IMAGE
   The places plugin renders its own hero into the content. The theme header
   already carries the photograph, so that one is hidden. The rest of what
   the plugin injects, the place strip and the booking button, stays.
   ========================================================================== */

body.single-tribe_events .ilb-event-hero { display: none; }


/* ==========================================================================
   39. HOMEPAGE BRAND MARK
   The logo sits above the headline on the cover, small and quiet. It is a
   signature rather than a second masthead, so it never competes with the
   sentence beneath it.
   ========================================================================== */

.ilb-hero__brand {
	margin-bottom: 1.1rem;
	line-height: 0;
}
.ilb-hero__brand img {
	width: auto;
	max-width: min(240px, 55vw);
	max-height: 52px;
	filter: drop-shadow(0 2px 12px rgb(0 0 0 / .35));
	opacity: .96;
}
.ilb-hero--flat .ilb-hero__brand img { filter: none; }

@media (max-width: 600px) {
	.ilb-hero__brand { margin-bottom: .85rem; }
	.ilb-hero__brand img { max-height: 40px; }
}


/* ==========================================================================
   40. OUTLINES THAT MUST BE COMPLETE
   Cards clipped their own bottom border when a stretched grid item was also
   given a full height. These make every bordered block draw all four sides.
   ========================================================================== */

.ilb-related__card,
.ilb-event-item,
.ilb-card,
.ilb-ev-card,
.ilb-when,
.ilb-mini {
	box-sizing: border-box;
	overflow: visible;
}

.ilb-related__card > *,
.ilb-event-item > *,
.ilb-card > *,
.ilb-ev-card > * {
	box-sizing: border-box;
	max-width: 100%;
}

/* Media inside a bordered card rounds its own corners rather than relying on
   the card clipping it, which is what was eating the border. */
.ilb-card__pic {
	border-radius: 13px 13px 0 0;
	overflow: hidden;
}
.ilb-ev-card__pic { overflow: hidden; }


/* ==========================================================================
   41. BLOCK EDITOR AND BLOCK PLUGINS
   theme.json gives the editor and any block plugin our palette. These rules
   map the generated preset variables onto our own tokens, so a block styled
   in the editor comes out matching the rest of the site.
   ========================================================================== */

:root {
	--wp--preset--color--yellow: var(--ilb-yellow);
	--wp--preset--color--yellow-soft: var(--ilb-yellow-soft);
	--wp--preset--color--ink: var(--ilb-ink);
	--wp--preset--color--background: var(--ilb-bg);
	--wp--preset--color--line: var(--ilb-line);
	--wp--preset--color--muted: var(--ilb-muted);
}

/* Blocks that take a background from the palette need readable text on it */
.has-ink-background-color { color: #fff; }
.has-yellow-background-color,
.has-yellow-soft-background-color { color: var(--ilb-ink); }

/* Block buttons match the theme's own */
.wp-block-button__link {
	border-radius: 14px;
	font-weight: 700;
	padding: .8em 1.6em;
}
.wp-block-button.is-style-outline .wp-block-button__link {
	border-width: 2px;
}

/* Group and cover blocks keep the site's corner language */
.wp-block-group.has-background,
.wp-block-cover {
	border-radius: var(--ilb-radius-lg);
}

/* Separators sit on our hairline */
.wp-block-separator {
	border: 0;
	border-top: 1px solid var(--ilb-line);
	opacity: 1;
}

/* Tables inside the writing */
.ilb-prose table {
	width: 100%;
	border-collapse: collapse;
	font-size: .96rem;
}
.ilb-prose th,
.ilb-prose td {
	padding: .7em .9em;
	border-bottom: 1px solid var(--ilb-line);
	text-align: left;
}
.ilb-prose th {
	font-weight: 800;
	background: #FAFAFA;
}
.ilb-prose table tr:last-child td { border-bottom: 0; }


/* ==========================================================================
   42. ARTICLE HEADER, TIED TO THE REST
   An article keeps its editorial shape: headline first, then standfirst,
   then the photograph. What it was missing was any of the site's colour.
   The category becomes the same yellow pill used on places and events, so
   the page reads as part of the whole without pretending to be a record.
   ========================================================================== */

.ilb-article__kicker {
	gap: .6em .75em;
	color: var(--ilb-faint);
}

.ilb-article__kicker a {
	display: inline-block;
	padding: .28em .95em;
	background: var(--ilb-yellow);
	border: 0;
	border-radius: var(--ilb-radius-pill);
	color: var(--ilb-ink);
	font-size: .72rem;
	font-weight: 800;
	letter-spacing: .05em;
	text-transform: uppercase;
	text-decoration: none;
	transition: background var(--ilb-ease);
}
.ilb-article__kicker a:hover {
	background: var(--ilb-ink);
	color: #fff;
}

/* The separator that followed the category is removed in the template, so
   nothing needs hiding here. The one between the date and the reading time
   stays: it is doing real work separating two pieces of meta. */

/* Standfirst sits a little closer to the headline */
.ilb-article__standfirst { margin-top: .7rem; }


/* ==========================================================================
   43. LARGE HEADINGS NEED MORE LEADING
   A line height that works at 1.3rem is too tight at 2.6rem: descenders in
   one line meet capitals in the next. Big type gets more room.
   ========================================================================== */

.ilb-article__title,
.ilb-band__title,
.ilb-placehead__title,
.ilb-hero__title,
.ilb-404__title {
	line-height: 1.16;
	padding-bottom: .06em;
	max-width: 100%;
}

/* text-wrap: balance and pretty both let a long line push past its container
   at display sizes, and break-word split the word rather than wrapping it.
   Every heading in this stylesheet now uses ordinary wrapping, which was
   doing the right thing all along. */
.ilb-article__title {
	max-width: 100%;
	text-wrap: wrap;
	word-break: normal;
	hyphens: none;
}

/* Long URLs pasted into the writing are the only thing that genuinely needs
   breaking, so scope it there rather than to headings. */
.ilb-prose a,
.ilb-prose code {
	overflow-wrap: break-word;
}

@media (min-width: 900px) {
	.ilb-article__title { line-height: 1.18; }
}


/* ==========================================================================
   44. THIS WEEKEND
   Days as sections, each with its own heading and a rule beneath it, so the
   page can be scanned by day rather than read as one long list.
   ========================================================================== */

.ilb-day {
	margin-bottom: var(--ilb-block);
}
.ilb-day:last-of-type {
	margin-bottom: 0;
}

.ilb-day__head {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	gap: .5rem .9rem;
	margin-bottom: 1.1rem;
	padding-bottom: .75rem;
	border-bottom: 2px solid var(--ilb-ink);
}

.ilb-day__name {
	font-size: var(--ilb-step-2);
	line-height: 1.15;
}

.ilb-day__date {
	font-size: .82rem;
	font-weight: 700;
	letter-spacing: .07em;
	text-transform: uppercase;
	color: var(--ilb-faint);
}

/* A day with nothing on it should still feel like part of the page */
.ilb-day__empty {
	margin: 0;
	padding: 1.1rem 1.3rem;
	background: var(--ilb-surface);
	border: 1px dashed var(--ilb-line);
	border-radius: var(--ilb-radius);
	color: var(--ilb-muted);
	font-size: .95rem;
}

.ilb-weekend__more {
	margin-top: var(--ilb-block);
	padding-top: var(--ilb-gap);
	border-top: 1px solid var(--ilb-line);
}


/* When a section head carries more than one link */
.ilb-head__links {
	flex: 0 0 auto;
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	gap: .5rem 1.15rem;
}


/* ==========================================================================
   45. MOBILE REFINEMENTS
   Changes that only matter on a phone, where most of this site will be read.
   ========================================================================== */

@media (max-width: 600px) {

	/* Filter pills scroll sideways rather than stacking into six rows that
	   push the actual places off the screen. */
	.ilb-filters .ilb-pills,
	.ilb-filters > ul {
		display: flex;
		flex-wrap: nowrap;
		gap: 8px;
		overflow-x: auto;
		padding-bottom: 6px;
		margin-inline: calc( var(--ilb-pad) * -1 );
		padding-inline: var(--ilb-pad);
		scrollbar-width: none;
		-webkit-overflow-scrolling: touch;
	}
	.ilb-filters .ilb-pills::-webkit-scrollbar,
	.ilb-filters > ul::-webkit-scrollbar { display: none; }

	.ilb-filters li { flex: 0 0 auto; }
	.ilb-filters a { white-space: nowrap; }

	/* The yellow band is tall on a phone before you reach anything. */
	.ilb-band { padding-block: var(--ilb-block); }
	.ilb-band__icon { display: none; }
	.ilb-band__intro { font-size: .98rem; }

	/* Event rows: the date badge and photo compete for a narrow row. */
	.ilb-ev-card { gap: 12px; }
	.ilb-ev-card__pic { display: none; }

	/* Related places two per row, matching the archive. */
	.ilb-related__grid {
		grid-template-columns: repeat(2, minmax(0, 1fr));
		gap: 12px;
	}

	/* Tap targets: nothing you actually tap below 44px. A pill inside a card
	   is a label, not a control, so it is excluded. */
	.ilb-filters a,
	.ilb-head__link { min-height: 44px; display: inline-flex; align-items: center; }

	/* Card labels stay small: at two per row they were dominating the card. */
	.ilb-card .ilb-pill,
	.ilb-related__type {
		min-height: 0;
		padding: .22em .65em;
		font-size: .6rem;
		letter-spacing: .04em;
	}
}
